mirror of
git://nv-tegra.nvidia.com/tegra/optee-src/atf.git
synced 2025-12-22 09:21:26 +03:00
Updating prebuilts and/or headers
600af606544528acefdcda1ac9360385c7fb445e - nvbuild.sh ad7dc8da66a1a95925c5d25352922f3878707e31 - nvcommon_build.sh 0907bfcdbb17c8012151b65666827033c895982c - arm-trusted-firmware.t234/package-lock.json 0014850d17c6d073452c1de344bf3e5e48c3ff1a - arm-trusted-firmware.t234/Makefile 7f3fadaf80e3c4745d24cb1a5881c7c5f4d898ba - arm-trusted-firmware.t234/.checkpatch.conf 584715f8f3c3f87ea97b9b3da77cdc7c576262bc - arm-trusted-firmware.t234/.nspect-allowlist.toml ace10cf6c86db4d397dce5eb15be3904f60c70f9 - arm-trusted-firmware.t234/.readthedocs.yaml e7b6512c235c4956d5e5c54a1bba110101ee7219 - arm-trusted-firmware.t234/poetry.lock 3b07f1cc18499c3a94f20780855567ecbb2406a0 - arm-trusted-firmware.t234/.commitlintrc.js 4bdcaddad6efc78faa2c744a8179fe2b722d1745 - arm-trusted-firmware.t234/readme.rst 58ac0e2c4882938ac294f7180d8d372c1a23c60c - arm-trusted-firmware.t234/.versionrc.cjs 4a2bf00f1f07dd12abeef076606cbbb954f22aa8 - arm-trusted-firmware.t234/package.json 459346b6306a9ab8abdbbc9bab327a65d5c0bd4a - arm-trusted-firmware.t234/.cz-adapter.cjs 2d62a7583b85631859c4143f08e0dc332e1cb87e - arm-trusted-firmware.t234/.gitreview 96d71bc7e0063a06f7a82508b968b73a54857d0d - arm-trusted-firmware.t234/.editorconfig 6b4f543445bf3b97440b6828e63b2efae8cc5d48 - arm-trusted-firmware.t234/pyproject.toml d8da3627085908a5f974b45528b85dc0a41a8b75 - arm-trusted-firmware.t234/license.rst c5b6edb1f19eb7b57761adc898d9906ccf9f5593 - arm-trusted-firmware.t234/OWNERS dcbcc9dad91ad237daae72ab81613fa540d989ec - arm-trusted-firmware.t234/.cz.json b509c8a6f834e67a07b5eb787d0c2f5e7c8f0ab7 - arm-trusted-firmware.t234/.ctags 693d8edcd6f6e57cb33293e518fc9f017e953dc8 - arm-trusted-firmware.t234/.nvmrc 89e8f1fd50ac707f0dcb450575a69bf86eba15d7 - arm-trusted-firmware.t234/changelog.yaml c16e3571ab87b0ea9f8067989a5b0f97251ff8cb - arm-trusted-firmware.t234/lib/libfdt/fdt_wip.c ea823073be5d673a06dfad272a7582df4482b150 - arm-trusted-firmware.t234/lib/libfdt/fdt_ro.c fdf423cffe52c2e918c815f60c8bea0d7f7c8d70 - arm-trusted-firmware.t234/lib/libfdt/fdt_overlay.c d2dc4f22a3f4d18e90f3c200fc9236e910900b67 - arm-trusted-firmware.t234/lib/libfdt/fdt_rw.c 0c0bc4ae346c1591ec8aa09a444d3aeaa3d210fb - arm-trusted-firmware.t234/lib/libfdt/fdt.c e01b7a0052b837a4650f2c9ac75ad38c40edc583 - arm-trusted-firmware.t234/lib/libfdt/fdt_empty_tree.c 1888e43d0d65ec169628a14ff94eb9d06adb47b2 - arm-trusted-firmware.t234/lib/libfdt/fdt_strerror.c 71e3b9e723c948c08594cfa38c65a708d0ab7f88 - arm-trusted-firmware.t234/lib/libfdt/fdt_sw.c a9e7388adeea4bb813155c62caacc545e9e98bfc - arm-trusted-firmware.t234/lib/libfdt/libfdt_internal.h 282524cbc0a8f7d16c36b9954bb4fad4c0d76c0a - arm-trusted-firmware.t234/lib/libfdt/fdt_addresses.c 90037639cf8fb4c81695f9d8aa4f15ee05af1b0d - arm-trusted-firmware.t234/lib/pmf/pmf_main.c 748a73855a307a23e9042a2467fd508bcc7e2719 - arm-trusted-firmware.t234/lib/pmf/pmf_smc.c 8102f862edb5ab07783993999c8781385e261628 - arm-trusted-firmware.t234/lib/debugfs/dev.c 78982645d4d3008984c9307ee68bfa8eeb1a43a7 - arm-trusted-firmware.t234/lib/debugfs/blobs.h db9f0e301c7178c315a1c6e72358bae572ce85db - arm-trusted-firmware.t234/lib/debugfs/devfip.c 678b679be4c3816d85eb8d851b7f46b7393739a2 - arm-trusted-firmware.t234/lib/debugfs/debugfs_smc.c 9802d55cbbaff09010b37afad6d494d8e755eae2 - arm-trusted-firmware.t234/lib/debugfs/devroot.c 5260672b27f35a4368d3be1f6ee66ec91d4beb26 - arm-trusted-firmware.t234/lib/debugfs/dev.h 7c85c537adcb24f5e03d6c71424a2618815086e3 - arm-trusted-firmware.t234/lib/debugfs/devc.c b686543bed166afb322167276d451afec04adc59 - arm-trusted-firmware.t234/lib/romlib/Makefile 481822cc2e7c15342af97aee4d6a88357f33ef86 - arm-trusted-firmware.t234/lib/romlib/romlib_generator.py eb057f1c025e3c00715bfc73c35c4550fba204ce - arm-trusted-firmware.t234/lib/romlib/jmptbl.i 84d815be083f637cd9f96c31d1fddf3042e11b9a - arm-trusted-firmware.t234/lib/romlib/romlib.ld.S d558c9ec1044a052e3ae32d32fa5e185b31bc800 - arm-trusted-firmware.t234/lib/romlib/gen_combined_bl1_romlib.sh bb10bb4fd88d1ee33bbcbdc3fe783aeea6421835 - arm-trusted-firmware.t234/lib/romlib/init.s b022feb15f3e84d4eefd318657af38a3a523e363 - arm-trusted-firmware.t234/lib/romlib/templates/jmptbl_entry_function_bti.S 56fc8c8a2950a0303783ced6bd0e388176043a47 - arm-trusted-firmware.t234/lib/romlib/templates/jmptbl_entry_function.S 0e6c307caa236b447ebce1b8530688dc19799210 - arm-trusted-firmware.t234/lib/romlib/templates/wrapper_bti.S 91d0e6f060cd659ba73d0db8886497a823814c65 - arm-trusted-firmware.t234/lib/romlib/templates/jmptbl_entry_reserved_bti.S fa26b89e848f7affd6fd3be71153b55961fbf971 - arm-trusted-firmware.t234/lib/romlib/templates/jmptbl_glob_var.S 8bd9f16af17fc4a81e921654d50217d6ba334d4f - arm-trusted-firmware.t234/lib/romlib/templates/jmptbl_header.S f9c9050fd5c89b246d718f406a9d9a13f3388a5e - arm-trusted-firmware.t234/lib/romlib/templates/jmptbl_entry_reserved.S 0598d43a54d46872be6b5e9f5a8b45597813d4ae - arm-trusted-firmware.t234/lib/romlib/templates/wrapper.S 18fdfde595d6c7a6409f3d91382d81f736bf775d - arm-trusted-firmware.t234/lib/fconf/fconf_mpmm_getter.c eb04a6d9ab9c6c79abc707068733945ca7ea49e4 - arm-trusted-firmware.t234/lib/fconf/fconf_dyn_cfg_getter.c 792d27179cb94886b8e3d403c6e11c05bdda0a57 - arm-trusted-firmware.t234/lib/fconf/fconf_cot_getter.c a56e2c964f2491dc1846e59e1e802dcb4e62944e - arm-trusted-firmware.t234/lib/fconf/fconf.c 9ad7e79093e5a9eee5c2b34fbfcef507564686b9 - arm-trusted-firmware.t234/lib/fconf/fconf_tbbr_getter.c 3567bc768ff2f143e4933244eb221b010bd91f80 - arm-trusted-firmware.t234/lib/fconf/fconf_amu_getter.c cb401a0f792df9b95c613f8dbc7bd40e4a954578 - arm-trusted-firmware.t234/lib/locks/exclusive/aarch64/spinlock.S 5578b09675f79e87026c64d8253ca469bed1c0da - arm-trusted-firmware.t234/lib/locks/exclusive/aarch32/spinlock.S db66c79ee8bc7db859a7db3b8cdf21b572da1798 - arm-trusted-firmware.t234/lib/locks/bakery/bakery_lock_normal.c c2b314d067fb125f7d7f77f2ad93b06398c43238 - arm-trusted-firmware.t234/lib/locks/bakery/bakery_lock_coherent.c 121d77395255b9b8a1089ac9f257e5123271a4a2 - arm-trusted-firmware.t234/lib/extensions/pmuv3/aarch64/pmuv3.c c224a46a1b416397b079caa7481121ed6d03a41f - arm-trusted-firmware.t234/lib/extensions/pmuv3/aarch32/pmuv3.c 7b10cd2b968063a4101c0e4252133a1059d29904 - arm-trusted-firmware.t234/lib/extensions/mpam/mpam.c 38ababf4127a1ac92a31f9485dfd42fc17c66fde - arm-trusted-firmware.t234/lib/extensions/sys_reg_trace/aarch64/sys_reg_trace.c 4fc0f4b3fea6016c5d47f226751b006e7a17bc58 - arm-trusted-firmware.t234/lib/extensions/sys_reg_trace/aarch32/sys_reg_trace.c 19408c082672877fc4e00dc3281cc2de4162fe20 - arm-trusted-firmware.t234/lib/extensions/sve/sve.c 69b9b55a68a218bedfb7e02f5620c395cfee184f - arm-trusted-firmware.t234/lib/extensions/trbe/trbe.c 48250a5aa4f7c0033c2614e34a070c2e85615896 - arm-trusted-firmware.t234/lib/extensions/spe/spe.c ebe5066f50de32f019ea11419b6ef11da4604812 - arm-trusted-firmware.t234/lib/extensions/pauth/pauth_helpers.S 3c13274221c18d09899b7e8d8be37e88e2adba23 - arm-trusted-firmware.t234/lib/extensions/tcr/tcr2.c dfebf62e45987649a709947042771374f897ccb1 - arm-trusted-firmware.t234/lib/extensions/sme/sme.c 6c920523169ecc73baa0b1836746513d12e87ee4 - arm-trusted-firmware.t234/lib/extensions/debug/debugv8p9.c 03582f2ba83c81eb87dadb3331f89bd1eb2db334 - arm-trusted-firmware.t234/lib/extensions/trf/aarch64/trf.c bc3797c909ca4ec52ec4784ab67d73e9096a351e - arm-trusted-firmware.t234/lib/extensions/trf/aarch32/trf.c 1ee17fe9c431bda9d612efde5b701a6e51665f5c - arm-trusted-firmware.t234/lib/extensions/sysreg128/sysreg128.S f063c227afb0e9bcf6c77f5a85108129438106c2 - arm-trusted-firmware.t234/lib/extensions/brbe/brbe.c df6d90a9554d7a2e8872622c900dd69db242efad - arm-trusted-firmware.t234/lib/extensions/fgt/fgt2.c 1af38f4d9fcd54c0328c896c8b154ee6f996728c - arm-trusted-firmware.t234/lib/extensions/amu/amu_private.h b7c59535736596f6c096a74b33ecc50269cf6d8d - arm-trusted-firmware.t234/lib/extensions/amu/aarch64/amu.c f97f9c6e3eeb0054517b2b9f0758a32468a9a9f3 - arm-trusted-firmware.t234/lib/extensions/amu/aarch64/amu_helpers.S 8d9a850eda16f822a2da9e30317ebd0eac347311 - arm-trusted-firmware.t234/lib/extensions/amu/aarch32/amu.c 2d632b20837314c97922e2f7a2156de2cde88c8b - arm-trusted-firmware.t234/lib/extensions/amu/aarch32/amu_helpers.S 9bbf285e5fb015b4281d9989bf1f5cdefe96cec0 - arm-trusted-firmware.t234/lib/extensions/fpmr/fpmr.c ad3316abca20d34d7293aac76cbfc64ce9a5c012 - arm-trusted-firmware.t234/lib/extensions/ras/std_err_record.c 4616f57dc89bb192f724bb4d34ae9e7f516e4b8a - arm-trusted-firmware.t234/lib/extensions/ras/ras_common.c 2e0b4a8eb4d69373e109f9be1a02cc409b3b9068 - arm-trusted-firmware.t234/lib/el3_runtime/simd_ctx.c 9a20231094ee9cab4a2435987bdc2aebcf9b89dd - arm-trusted-firmware.t234/lib/el3_runtime/cpu_data_array.c 925b7522c8a43da8c48b93d665e4f89b18059b4d - arm-trusted-firmware.t234/lib/el3_runtime/aarch64/context.S 7823e00fc8ac59a91343911721874f34edaee500 - arm-trusted-firmware.t234/lib/el3_runtime/aarch64/context_mgmt.c b248c2857449f37281505ffc12499e7ce94f2ee8 - arm-trusted-firmware.t234/lib/el3_runtime/aarch64/cpu_data.S d19f573e44d900281f2785adec1a4c5369b328e7 - arm-trusted-firmware.t234/lib/el3_runtime/aarch64/context_debug.c a7d92facc0752c0840fcbee6f90f691658918f04 - arm-trusted-firmware.t234/lib/el3_runtime/aarch32/context_mgmt.c dcb9b7147ff211c4c3bfc81afa41e26753797fe1 - arm-trusted-firmware.t234/lib/el3_runtime/aarch32/cpu_data.S 06f4bc9f41eeaa4be122a19cd6ff5105ff5b3666 - arm-trusted-firmware.t234/lib/psa/measured_boot_private.h b577cd6b4f9481795aa38bdba16a06d556c005cd - arm-trusted-firmware.t234/lib/psa/rse_platform.c eee36c863935c30bfe8c8d97e575bf298df49235 - arm-trusted-firmware.t234/lib/psa/dice_protection_environment.c be57ec731ef978a1cb592ddcd54df181cf3854bd - arm-trusted-firmware.t234/lib/psa/cca_attestation.c 98ec93022cebd1d2bfafa3f6f1754aac502f039e - arm-trusted-firmware.t234/lib/psa/delegated_attestation.c ded7da36471dba8afc5a2ee5c7cd83017358a01a - arm-trusted-firmware.t234/lib/psa/measured_boot.c 461f0e6549aecb25a42e26daa4990367b0c0349e - arm-trusted-firmware.t234/lib/stack_protector/stack_protector.c 4f46a17dd2d45cbfecc56cdc62335d16e7f8e9fd - arm-trusted-firmware.t234/lib/stack_protector/aarch64/asm_stack_protector.S 2a002a927728f82056d756fb1887d05d85bc76f1 - arm-trusted-firmware.t234/lib/stack_protector/aarch32/asm_stack_protector.S 5c0d29046bc86d69be79a8f490d15c6278e7c1bf - arm-trusted-firmware.t234/lib/xlat_tables/xlat_tables_common.c ada03d858deab4a12708645a227784e1380cc81a - arm-trusted-firmware.t234/lib/xlat_tables/xlat_tables_private.h bb74aa53a76cf8da53b1247c526a828eda4a1792 - arm-trusted-firmware.t234/lib/xlat_tables/aarch64/xlat_tables.c 6f6a68d4d740fe29efffe15b3f231637931603ca - arm-trusted-firmware.t234/lib/xlat_tables/aarch32/xlat_tables.c 35355a9c23c311ebb37e6654a0310fa8a186fd42 - arm-trusted-firmware.t234/lib/xlat_tables/aarch32/nonlpae_tables.c 1d272a148f99cc5bfa1d9d1f1d557138b845eb09 - arm-trusted-firmware.t234/lib/bl_aux_params/bl_aux_params.c 621d91c2abfb7ec906a3341bb6849212c0972fe0 - arm-trusted-firmware.t234/lib/semihosting/semihosting.c 1d3c306a7abd961df54876afd2f68397653a722d - arm-trusted-firmware.t234/lib/semihosting/aarch64/semihosting_call.S 96e457fca8175f03f288deb171768f7d390a2d85 - arm-trusted-firmware.t234/lib/semihosting/aarch32/semihosting_call.S 972bcfa9e5506820069f2681ecfc8724e161857c - arm-trusted-firmware.t234/lib/aarch64/cache_helpers.S 2c301ef78cf219d3946f1a0d8dea0fbb66b8710c - arm-trusted-firmware.t234/lib/aarch64/misc_helpers.S 7514c02332a91f81b01c38fab0c57628b5a1552e - arm-trusted-firmware.t234/lib/aarch64/armclang_printf.S 2935ae164681477772e886442e2e1addcfbb2157 - arm-trusted-firmware.t234/lib/libc/putchar.c 571f090fbb81f922731ecd747dc426eb612ec25b - arm-trusted-firmware.t234/lib/libc/strlen.c edb57dde15d3376a064cceb642c2c2ea6cfc5659 - arm-trusted-firmware.t234/lib/libc/assert.c 82f54f160965b93a70dc958c51a0328ae0540956 - arm-trusted-firmware.t234/lib/libc/strncmp.c b09d8dfbbff3c2a148e2323a97e5db8c3b864bab - arm-trusted-firmware.t234/lib/libc/memcmp.c ecdb0573af2e72655f16bf065fbb5efe33c7cfbd - arm-trusted-firmware.t234/lib/libc/snprintf.c be9487ae2df331c4b6d1e8eb831fe36f80300829 - arm-trusted-firmware.t234/lib/libc/strlcpy.c ffb9b36696d1be240d6c300924b1b16f8b7d193a - arm-trusted-firmware.t234/lib/libc/memcpy.c 38a578098af152b953ec1c824f1abd335b84979e - arm-trusted-firmware.t234/lib/libc/abort.c c72f1f1842a78fb427805c7447d370fc148dc89f - arm-trusted-firmware.t234/lib/libc/strtoul.c 8f8edbf780871676227a4f4130b3a9c718b3c64c - arm-trusted-firmware.t234/lib/libc/strcmp.c da2d6f3d96f3b941a06349c46b943cce37ac6a6e - arm-trusted-firmware.t234/lib/libc/memchr.c bacec6dd7a3b9e28603e5cfd058756eab0f892af - arm-trusted-firmware.t234/lib/libc/memmove.c c09671253fa56542c6aa0c9bb84abbd6e6b2306d - arm-trusted-firmware.t234/lib/libc/memcpy_s.c 8c9668a348c3ffbe4509aa2246941450a7b0de00 - arm-trusted-firmware.t234/lib/libc/strtoll.c 359ff50d6cb3845b71124e0ca9942745bda9e2c5 - arm-trusted-firmware.t234/lib/libc/memset.c 8172487e3b3f801cb06d4e60707f53c4d77b483f - arm-trusted-firmware.t234/lib/libc/strchr.c 07dbfb512cae53c03504d60ec4b02bfc74c2af8a - arm-trusted-firmware.t234/lib/libc/strtol.c 82032c79de7b24a84341c8bd5d72baba75337f1e - arm-trusted-firmware.t234/lib/libc/strtoull.c 6d62f8972d334e9b7016abfa5fd60039fd045392 - arm-trusted-firmware.t234/lib/libc/strlcat.c c64e54b9d37e79c6a5ddf5440518980b4d8023d6 - arm-trusted-firmware.t234/lib/libc/strrchr.c 06782e2bb8b5e2b70cd089f061be9c1a08621523 - arm-trusted-firmware.t234/lib/libc/memrchr.c e7eb31dbd9893d98f8ab6cbef6a11143aa052581 - arm-trusted-firmware.t234/lib/libc/strtok.c b4e1859698344300f46b5b4523efb8e7a22c5e3d - arm-trusted-firmware.t234/lib/libc/printf.c 9004bf8bc547abf250c43d48b20ee66119a0f325 - arm-trusted-firmware.t234/lib/libc/exit.c cdc60a84cbcd4ae8a4fd73df6250ad538db0668a - arm-trusted-firmware.t234/lib/libc/strnlen.c 83b77c3ae8eca3bf7da4de83d82fa7b0edeff85a - arm-trusted-firmware.t234/lib/libc/puts.c 02977fbcda3d55ed39cafa721d2bd2a901f0c637 - arm-trusted-firmware.t234/lib/libc/aarch64/memset.S e450aea2c775f055c707f053de39e7aa7ed66223 - arm-trusted-firmware.t234/lib/libc/aarch64/setjmp.S 75786d0b78f57474b1c6f960b2c8ecbc07ba830b - arm-trusted-firmware.t234/lib/libc/aarch32/memset.S 14efe65532640ad904e16c0fcfdf2a0aa8ef7892 - arm-trusted-firmware.t234/lib/aarch32/cache_helpers.S ee1a450f356e424a2bf60417432806e1c48e8b4b - arm-trusted-firmware.t234/lib/aarch32/misc_helpers.S f3656db9134aa2171dd45f1a9678477dd7cd96e0 - arm-trusted-firmware.t234/lib/aarch32/armclang_printf.S e99b439f92ab3e8025a95af724ddbf92e03bf8cb - arm-trusted-firmware.t234/lib/aarch32/arm32_aeabi_divmod.c 65adc9dcdcfda338ac28944b6d78e9022351ce50 - arm-trusted-firmware.t234/lib/aarch32/arm32_aeabi_divmod_a32.S f19e7e7ffa2bd22a6e1d0cceeca043d433fa6681 - arm-trusted-firmware.t234/lib/cpus/errata_common.c 151b3b0184be16c7d540dc87a99bccaf4801776a - arm-trusted-firmware.t234/lib/cpus/errata_report.c 6f1b0a8a7e18b98e1d7cc25071e370266244a0b6 - arm-trusted-firmware.t234/lib/cpus/aarch64/cortex_x2.S 6460b029250d2f405f1b9e625811dde8aba049e1 - arm-trusted-firmware.t234/lib/cpus/aarch64/cortex_arcadia.S bac60e2cdc71bd54539af3a40b00694b853b6833 - arm-trusted-firmware.t234/lib/cpus/aarch64/cortex_a710.S 773c971c7fab4197843edb566f6a123d7f53fa54 - arm-trusted-firmware.t234/lib/cpus/aarch64/nevis.S 80f25f36b7c8160af1b67386572ac6649901344e - arm-trusted-firmware.t234/lib/cpus/aarch64/cortex_x4.S 5a3fca8ad8ae38716f40b2ebc56014b27be7d133 - arm-trusted-firmware.t234/lib/cpus/aarch64/neoverse_v1.S a7d88cc794b4858c93c50a30de80da12e8f69118 - arm-trusted-firmware.t234/lib/cpus/aarch64/cortex_a715.S fd801851b71a05fbc5920f6815d5ab8025a7f156 - arm-trusted-firmware.t234/lib/cpus/aarch64/cpuamu.c 204159ce855dfbaebe9349445b58709db160e7e6 - arm-trusted-firmware.t234/lib/cpus/aarch64/cortex_x3.S 0daf69c41824bd504505b14e1e7d6fd628579894 - arm-trusted-firmware.t234/lib/cpus/aarch64/denver.S 13c02216861ca96f979be302e598e2c338e5c846 - arm-trusted-firmware.t234/lib/cpus/aarch64/cortex_a75_pubsub.c b78132930889bb2cf8f098e95409c57873bc777b - arm-trusted-firmware.t234/lib/cpus/aarch64/generic.S d00df0c88355a2c96a1a4fd81120564cc1e44bfb - arm-trusted-firmware.t234/lib/cpus/aarch64/qemu_max.S d02d67051d5e185ab71b89b57d9113b9ec1f58b0 - arm-trusted-firmware.t234/lib/cpus/aarch64/cortex_a78c.S f798471e2775e0746f2f0bd400ad42fb9fafb3f0 - arm-trusted-firmware.t234/lib/cpus/aarch64/cortex_a510.S 61e265cc57efd9fb71f0ba4436e9fd18d0e8b903 - arm-trusted-firmware.t234/lib/cpus/aarch64/dsu_helpers.S 04cc09259ebe804c4432489705aee24db4a4f94b - arm-trusted-firmware.t234/lib/cpus/aarch64/cortex_a78.S 92ab5877b0b9154d20b2d1bb1375f0a9389800d2 - arm-trusted-firmware.t234/lib/cpus/aarch64/neoverse_n3.S 90cef01a1a85d21c9d067d718905981bd794218b - arm-trusted-firmware.t234/lib/cpus/aarch64/cortex_a73.S 3f9d958d991e65def01a6e11f218ce7b2c11fc29 - arm-trusted-firmware.t234/lib/cpus/aarch64/travis.S f2d8c3323d7ceef9220c523cd7d0183f1a2d5bd6 - arm-trusted-firmware.t234/lib/cpus/aarch64/cortex_a720.S 2cf8aab5b6ac05d2fe43253d43a0fb1adb184c36 - arm-trusted-firmware.t234/lib/cpus/aarch64/neoverse_v3.S ac88a6dce94582824e1d3dc9fd3e26b4cbea53b5 - arm-trusted-firmware.t234/lib/cpus/aarch64/cortex_a720_ae.S 19c11d656632437a5b7cee78c58311e4242e612b - arm-trusted-firmware.t234/lib/cpus/aarch64/neoverse_e1.S 8376942f9a9893ebb382ee1071ca83808009fa59 - arm-trusted-firmware.t234/lib/cpus/aarch64/aem_generic.S 109617d6ff0774805702abd740ceae9dc615c315 - arm-trusted-firmware.t234/lib/cpus/aarch64/neoverse_n1.S 34f0efa51f5c16ed226d7e915bf311587d08446a - arm-trusted-firmware.t234/lib/cpus/aarch64/wa_cve_2017_5715_bpiall.S 1041d13dff7bfde379a3a4cb3f73da3b31677a3a - arm-trusted-firmware.t234/lib/cpus/aarch64/cortex_a76.S 627aefa1b10c5eaf407c95ff6dedf66ccf9ebff2 - arm-trusted-firmware.t234/lib/cpus/aarch64/cortex_a65ae.S 027ecc7e62dfa6832c729cb491eb8554f06eb61c - arm-trusted-firmware.t234/lib/cpus/aarch64/wa_cve_2017_5715_mmu.S 48a206e356ce212c7ddb631cc26e20f027f4ef2d - arm-trusted-firmware.t234/lib/cpus/aarch64/rainier.S 16bd69df8653c815b2bc248b98cc671478dff76b - arm-trusted-firmware.t234/lib/cpus/aarch64/cortex_a75.S f8e4b5a1e8148db1fb73cc0eb792b60cd0cb12fa - arm-trusted-firmware.t234/lib/cpus/aarch64/cortex_a78_ae.S f5e02d8ca645c7a61e81e6f13807b048e600e9eb - arm-trusted-firmware.t234/lib/cpus/aarch64/cortex_a520.S f382f5af3fd88a0d159f0fc27bf3ff89e6e6517b - arm-trusted-firmware.t234/lib/cpus/aarch64/neoverse_n_common.S 603344720eac7da2f6479b0231c34c8ecc1d7821 - arm-trusted-firmware.t234/lib/cpus/aarch64/cortex_a55.S 9a7a6c39f82a197d6947b48d9618d2d4263f8f55 - arm-trusted-firmware.t234/lib/cpus/aarch64/cortex_a65.S 41167adb105520c3e8e75e545b9361a94e3685da - arm-trusted-firmware.t234/lib/cpus/aarch64/olympus.S d7903eed0bc8f620ad2a2efc7aaccd9fafb4d7a0 - arm-trusted-firmware.t234/lib/cpus/aarch64/neoverse_n1_pubsub.c 5e64126fe122470b5f906cbd26adc7b19c2b1cbd - arm-trusted-firmware.t234/lib/cpus/aarch64/wa_cve_2022_23960_bhb_vector.S c4951898bedfa72c7f4da6531946135e5f462db8 - arm-trusted-firmware.t234/lib/cpus/aarch64/neoverse_poseidon.S 09784d1fc8ac81c7cb46d42baff067a40211a752 - arm-trusted-firmware.t234/lib/cpus/aarch64/cortex_x925.S 42a72fd058cd8565031ea592af6e6fdfb8f53891 - arm-trusted-firmware.t234/lib/cpus/aarch64/cpu_helpers.S 5f66eab0be844d0e970e05cfa277127931965f47 - arm-trusted-firmware.t234/lib/cpus/aarch64/cpuamu_helpers.S 01aaed791b20f550f8f0b7ecce72438670a251b7 - arm-trusted-firmware.t234/lib/cpus/aarch64/cortex_gelas.S 21f9b1c32243077f74e01e12031f0746c202ef90 - arm-trusted-firmware.t234/lib/cpus/aarch64/cortex_a725.S 68d29897732b371150ae49175e89e06dd7f3be54 - arm-trusted-firmware.t234/lib/cpus/aarch64/cortex_x1.S 900196848e9511f7a527083cd09e84e48a24ddbc - arm-trusted-firmware.t234/lib/cpus/aarch64/cortex_a57.S e78db017ac2111a43237a2a18652c554285c97dc - arm-trusted-firmware.t234/lib/cpus/aarch64/neoverse_n2.S 02b378a990eabb5cac8928f2250e61126e8a1c9b - arm-trusted-firmware.t234/lib/cpus/aarch64/cortex_a72.S f9e62ebfddc2b8f40cfb3ead5aa15778e28e5a36 - arm-trusted-firmware.t234/lib/cpus/aarch64/cortex_a35.S 7730de923e8f76e9bd151edd8daee83f20cc1fd9 - arm-trusted-firmware.t234/lib/cpus/aarch64/wa_cve_2022_23960_bhb.S 3a929e95e25fd795a0467df2f583da04fa8fd341 - arm-trusted-firmware.t234/lib/cpus/aarch64/cortex_a77.S b860c05df4c35373b359cf4dba90dbfc93c3b1c3 - arm-trusted-firmware.t234/lib/cpus/aarch64/cortex_a76ae.S 7e0d8eb4654be2acc0360b89ba48dcc40d532437 - arm-trusted-firmware.t234/lib/cpus/aarch64/a64fx.S c4445c8a8636a4814ad23fd5844710ec53b8de65 - arm-trusted-firmware.t234/lib/cpus/aarch64/neoverse_v2.S 1b3923bc17860a25b35b21b00b06f4cd4b6afc2d - arm-trusted-firmware.t234/lib/cpus/aarch64/cortex_a53.S 6b206867adc31b1e7f2382b480ead0a0063fdd53 - arm-trusted-firmware.t234/lib/cpus/aarch32/cortex_a5.S 0344fe0d9d7db34c8714690fbbdfeb5d868de6be - arm-trusted-firmware.t234/lib/cpus/aarch32/cortex_a7.S 4b12937e5f416894be86b9fdf302dae48b1c80da - arm-trusted-firmware.t234/lib/cpus/aarch32/cortex_a12.S a0af6ac6d8013c40ca046fdc958a1b13d3e44c2a - arm-trusted-firmware.t234/lib/cpus/aarch32/cortex_a17.S 234f442077ccae9173ed0b1c57de84bf63004675 - arm-trusted-firmware.t234/lib/cpus/aarch32/aem_generic.S e21911b5ab0bae2a34b765e357ea2b41e96d3670 - arm-trusted-firmware.t234/lib/cpus/aarch32/cortex_a32.S f10061f7dfe4e16be0eac2563cfe4b4c0fe96586 - arm-trusted-firmware.t234/lib/cpus/aarch32/cortex_a9.S 72f323a24fa7d8563e8c58de7176d8e05ab3ca75 - arm-trusted-firmware.t234/lib/cpus/aarch32/cortex_a15.S f29c9407c77bb37b7646b29feefd97da6d745253 - arm-trusted-firmware.t234/lib/cpus/aarch32/cpu_helpers.S 6ef3bcd5afac41bb02deacac105bc6a37d4d994d - arm-trusted-firmware.t234/lib/cpus/aarch32/cortex_a57.S 7602cb3c6c7e95341f31d202ed801ce46bbf265c - arm-trusted-firmware.t234/lib/cpus/aarch32/cortex_a72.S 6ff39087ab3081765fc19dafed572ad5f263c932 - arm-trusted-firmware.t234/lib/cpus/aarch32/cortex_a53.S 00e3cf9ccfb86301447fa7c3d183b3f9f662fc56 - arm-trusted-firmware.t234/lib/utils/mem_region.c a6d53b6358c0ed174cdfa6cacbd56c436acb8d4f - arm-trusted-firmware.t234/lib/xlat_tables_v2/xlat_tables_context.c 9eb28ea052af12a4a8e5e648ab72dd3309de5835 - arm-trusted-firmware.t234/lib/xlat_tables_v2/xlat_tables_utils.c 21257035c5b90378d3b4716da4676e4f54782aaa - arm-trusted-firmware.t234/lib/xlat_tables_v2/xlat_tables_core.c eaf23114b5279a2e5177c2d4a103265159f839d9 - arm-trusted-firmware.t234/lib/xlat_tables_v2/xlat_tables_private.h f59fd6f803fc5ecb04f0a0fe06d11b60cd5ba523 - arm-trusted-firmware.t234/lib/xlat_tables_v2/aarch64/enable_mmu.S 480cc34ffcd44ea1af51f6a632d17c9dd047f6bb - arm-trusted-firmware.t234/lib/xlat_tables_v2/aarch64/xlat_tables_arch.c db7bf40ae8a204975998abf6d02efa8de601ebbe - arm-trusted-firmware.t234/lib/xlat_tables_v2/aarch32/enable_mmu.S bbc86d94a148d6294fc89e0c1838e32494e5e1cf - arm-trusted-firmware.t234/lib/xlat_tables_v2/aarch32/xlat_tables_arch.c 08da74471b7980e579f18bd5c4f26c9eb14e5636 - arm-trusted-firmware.t234/lib/mpmm/mpmm.c dbe6388dacbeeede0de0701bc01d77e2679714b2 - arm-trusted-firmware.t234/lib/xlat_mpu/xlat_mpu_private.h 2b599881cd5f4a27bfc603bee6e626f23ef601bd - arm-trusted-firmware.t234/lib/xlat_mpu/xlat_mpu_utils.c 852535843145c50d49e28ae6c182674fc9f113f4 - arm-trusted-firmware.t234/lib/xlat_mpu/xlat_mpu_context.c 11e90bbfcdc1c5aeb4704b96165eee202c01d3b6 - arm-trusted-firmware.t234/lib/xlat_mpu/xlat_mpu_core.c c0458c8fedaccd39371b035dc3731262a6a070da - arm-trusted-firmware.t234/lib/xlat_mpu/aarch64/enable_mpu.S 7d45e31d6e18af586abdc54141ec568752d3378a - arm-trusted-firmware.t234/lib/xlat_mpu/aarch64/xlat_mpu_arch.c dfe9d1459f2afc808df76389971581e7cd156c05 - arm-trusted-firmware.t234/lib/compiler-rt/LICENSE.TXT 6c29cd9132b9b0dbeaa4fafd24119255f0199cba - arm-trusted-firmware.t234/lib/compiler-rt/builtins/int_types.h ff2207836a40606df69ec1e611e158aa0ed14f04 - arm-trusted-firmware.t234/lib/compiler-rt/builtins/lshrdi3.c e511f9f9577bcc85b6fa950daebe4bc056e072ba - arm-trusted-firmware.t234/lib/compiler-rt/builtins/int_math.h 34b18e6e0c6ebd07cb7fa4cadd2b07a0e7084147 - arm-trusted-firmware.t234/lib/compiler-rt/builtins/udivmoddi4.c ca5ea990905079d8c53e6e335f64ee671ba845b3 - arm-trusted-firmware.t234/lib/compiler-rt/builtins/int_div_impl.inc 1ce7c11507532414c0328c081b09944fedebad24 - arm-trusted-firmware.t234/lib/compiler-rt/builtins/int_endianness.h b6be19539d8655496dc24041788f2230aae64b8a - arm-trusted-firmware.t234/lib/compiler-rt/builtins/popcountdi2.c 13ea97d65ad11b86a7059983411c89865cb69a6b - arm-trusted-firmware.t234/lib/compiler-rt/builtins/divmoddi4.c 73ea5b88f90e306be69dd8ecb81f834d49c9160e - arm-trusted-firmware.t234/lib/compiler-rt/builtins/divdi3.c 43ef4b5dd652db346a1d160c3bca2884964f8891 - arm-trusted-firmware.t234/lib/compiler-rt/builtins/popcountsi2.c d6880c6c7b562b3ccf4b40f670946530d4246d7c - arm-trusted-firmware.t234/lib/compiler-rt/builtins/assembly.h 1a2037ae94351f0b08ce8ba1263615995af0c259 - arm-trusted-firmware.t234/lib/compiler-rt/builtins/int_lib.h f07542388c57814e54f0c96a951e2ef2bbe405d9 - arm-trusted-firmware.t234/lib/compiler-rt/builtins/ctzdi2.c 277a460ac9c4747b9da6d700bbf4ca70f7bd8412 - arm-trusted-firmware.t234/lib/compiler-rt/builtins/int_util.h 09e84134d69bb68f94e002274aa7a891c950b3d9 - arm-trusted-firmware.t234/lib/compiler-rt/builtins/arm/aeabi_memset.S c45f0973450713a6714be330fb6ea8345d666b07 - arm-trusted-firmware.t234/lib/compiler-rt/builtins/arm/aeabi_ldivmod.S 872cb517e7f08860b62b6224c1d79ddb1912c998 - arm-trusted-firmware.t234/lib/compiler-rt/builtins/arm/aeabi_memcpy.S 4906ba0646aef187813f1fa743316b986052234d - arm-trusted-firmware.t234/lib/compiler-rt/builtins/arm/aeabi_uldivmod.S 757c9a0f88aae890f517b61cbb32a35238c8fd48 - arm-trusted-firmware.t234/lib/coreboot/coreboot_table.c ee9898c5eb97037bf728442462c8ed3bf5316267 - arm-trusted-firmware.t234/lib/transfer_list/transfer_list.c 8dda484bcdf04581272a722de2a350f81eee88ca - arm-trusted-firmware.t234/lib/zlib/adler32.c 19860c77d37d4fc052dfcd5925c3a02083f914fa - arm-trusted-firmware.t234/lib/zlib/zutil.h 487e036a5a0a89aaffb0d2ab95de32e592259abb - arm-trusted-firmware.t234/lib/zlib/zconf.h e5e12d4c9a3fe89c8c506ff80410672134cbcdd3 - arm-trusted-firmware.t234/lib/zlib/inffast.c 5b4b8798bdd0c34e076d2e3cf365ea5451837b57 - arm-trusted-firmware.t234/lib/zlib/inflate.h b5939a78a13c23bb96e51c2f6fbee67192e29506 - arm-trusted-firmware.t234/lib/zlib/inffast.h 8770ab43c9050b824c646f6e6cee8b3c0628cbda - arm-trusted-firmware.t234/lib/zlib/inffixed.h 585668b2bc354980c698c849303fc1a38095a74f - arm-trusted-firmware.t234/lib/zlib/zutil.c a5e4b3a86773f8dd3c19627590f2008603cb5399 - arm-trusted-firmware.t234/lib/zlib/inftrees.c 062f40c9d28add83361889e988e157e634f78d47 - arm-trusted-firmware.t234/lib/zlib/inflate.c 7490b45c6fadaf3499c905f2865b8c28d71125be - arm-trusted-firmware.t234/lib/zlib/zlib.h 77ad5f5a3ebf88a2a890b91993f5ce0ab835bccc - arm-trusted-firmware.t234/lib/zlib/crc32.c 473c6f8ab9e5be2d4340bf8b82d5c87ace400746 - arm-trusted-firmware.t234/lib/zlib/inftrees.h 083ae032c7ce5cde8a3324c4887e88d3bb667e32 - arm-trusted-firmware.t234/lib/zlib/crc32.h 0c9ac06f4a4bf5ccdbff7602b2eadc836ad3d4c5 - arm-trusted-firmware.t234/lib/zlib/tf_gunzip.c 2e19efdfcb375785ea58581733b77a1d231e2839 - arm-trusted-firmware.t234/lib/optee/optee_utils.c 12d13fc97f47318fff07798fdf306e7a9e229e63 - arm-trusted-firmware.t234/lib/psci/psci_stat.c fb6d22653837b651bc8cf259e8035e2ee548e55b - arm-trusted-firmware.t234/lib/psci/psci_mem_protect.c b8d86235c09c86d6e251b2919c5fb4bd32b6f0a5 - arm-trusted-firmware.t234/lib/psci/psci_on.c 0adcb049353da30c0f2fa2dfef1dcd3d01df457f - arm-trusted-firmware.t234/lib/psci/psci_main.c 056d8dc425830f5971151529a95e3d64dee6ccc7 - arm-trusted-firmware.t234/lib/psci/psci_private.h 6a317ba95dc91887dee66f2b941faa911eaa6e8b - arm-trusted-firmware.t234/lib/psci/psci_setup.c 37418ff69f07f8fff15c17ff6db7205cf618e093 - arm-trusted-firmware.t234/lib/psci/psci_common.c 6aeeb09d657fcb1d5e8e4084b08a2d27fcff10b9 - arm-trusted-firmware.t234/lib/psci/psci_off.c 829a7e8232b3efde8c6ad84aff7745c16582da77 - arm-trusted-firmware.t234/lib/psci/psci_system_off.c 9992df191cac7474997663c4c56dd11f9a6c41bb - arm-trusted-firmware.t234/lib/psci/psci_suspend.c 5993b2f51f9d540f9b53a97f573e1234d58d9f78 - arm-trusted-firmware.t234/lib/psci/aarch64/psci_helpers.S 2900957786a225a6caefa6da15735fe17d1d304d - arm-trusted-firmware.t234/lib/psci/aarch32/psci_helpers.S aabc32f9d81ea64fc6e6f84a2914210b22014b67 - arm-trusted-firmware.t234/lib/gpt_rme/gpt_rme_private.h 89b3f618b007a68181d05de23c92a121a4293137 - arm-trusted-firmware.t234/lib/gpt_rme/gpt_rme.c f5069ac5130c2d8c45f46b02c94388bc255fbb5a - arm-trusted-firmware.t234/bl32/tsp/ffa_helpers.c e443759da4289ab52f2a7e10a79bbba4359a0108 - arm-trusted-firmware.t234/bl32/tsp/tsp_ffa_main.c cff876b0d1c0c61c7c0bf3c11d01e5dd636e357a - arm-trusted-firmware.t234/bl32/tsp/tsp_private.h 3301ad439bae604f492e996029e4a4cacf75fdc3 - arm-trusted-firmware.t234/bl32/tsp/ffa_helpers.h f763c85b0b3a762cfd5029113722efc98a75bc7a - arm-trusted-firmware.t234/bl32/tsp/tsp_common.c 03a90ab03b290a2846da1a80d62a4d5525c16c83 - arm-trusted-firmware.t234/bl32/tsp/tsp.ld.S 9e87e30c75c48b862081fb04c17a8bfa6846ce77 - arm-trusted-firmware.t234/bl32/tsp/tsp_interrupt.c 6727eccb78b649034342ffa087bb189e40734608 - arm-trusted-firmware.t234/bl32/tsp/tsp_timer.c 74dedb853967e019b61bbd1fc9093e608f6f1579 - arm-trusted-firmware.t234/bl32/tsp/tsp_context.c 6cf66a393f175bfa8d74ea84257a7a9070036af8 - arm-trusted-firmware.t234/bl32/tsp/tsp_main.c 8d77cc1453037a319f4a5da2e5b77b37bb406277 - arm-trusted-firmware.t234/bl32/tsp/aarch64/tsp_request.S e94cc0b80bb21c55fc68026d8a981988414ab611 - arm-trusted-firmware.t234/bl32/tsp/aarch64/tsp_exceptions.S 8899af4cf35b59bed20e51e7d3fc8d6f684ceded - arm-trusted-firmware.t234/bl32/tsp/aarch64/tsp_entrypoint.S 21ac60534e5269742f6651b6c3f71365c70154d6 - arm-trusted-firmware.t234/bl32/sp_min/sp_min.ld.S e28e0dcd786b8b3322694973113376de947441bf - arm-trusted-firmware.t234/bl32/sp_min/sp_min_private.h 79a0f2cf6937e7d799c03ce926069c1a07a6dd44 - arm-trusted-firmware.t234/bl32/sp_min/sp_min_main.c 5ef0dab419f42df9935d7fbc4e30baa8ea83d75e - arm-trusted-firmware.t234/bl32/sp_min/wa_cve_2017_5715_bpiall.S 68e3f9565c5bf338271a1445ca22507fb2afc5af - arm-trusted-firmware.t234/bl32/sp_min/wa_cve_2017_5715_icache_inv.S 6c0a78f2d0db2148ba56145239aa70494664c8e8 - arm-trusted-firmware.t234/bl32/sp_min/aarch32/entrypoint.S 26f88afc916ce84676a3a91b6c16c53fcdbb7079 - arm-trusted-firmware.t234/.husky/prepare-commit-msg 13991497d7f0f04e8550b4fa53f60d716f4b5925 - arm-trusted-firmware.t234/.husky/pre-commit.copyright 201f68ff32e77e6400dc5624a726bb46fafe1ac3 - arm-trusted-firmware.t234/.husky/commit-msg.gerrit edf09f8f672ed108a22d57c3be9c64c542957347 - arm-trusted-firmware.t234/.husky/commit-msg.commitlint 7d1ebf9b000835ad87a18bc1163f36627ba178b3 - arm-trusted-firmware.t234/.husky/commit-msg 4a2eb9ef19eb7a479545c0d6d4c8d6d551c02169 - arm-trusted-firmware.t234/.husky/pre-commit fd32ceb86780ba4682d238401c5bdc6c51f6652f - arm-trusted-firmware.t234/.husky/prepare-commit-msg.cz 2d56ba2f04ec9c3b601bef1ce03e87e2fc2c9b65 - arm-trusted-firmware.t234/fdts/rtsm_ve-motherboard.dtsi c028d02d6d68dfd3c16c8ea9c6e247c72a911abc - arm-trusted-firmware.t234/fdts/fvp-foundation-motherboard.dtsi 945757d16f3e2386606861338972df40e28974db - arm-trusted-firmware.t234/fdts/stm32mp25-fw-config.dtsi d0ca311ee090d9d69c82273e0e6f4d65bb330554 - arm-trusted-firmware.t234/fdts/stm32mp157c-ed1-fw-config.dts 35607514aefc72e49975cef3800ae14f377a2414 - arm-trusted-firmware.t234/fdts/morello.dtsi abbe0e5a7c63995c207b1995649e3a6ed6b4221a - arm-trusted-firmware.t234/fdts/stm32mp15xc.dtsi 9cb39a5d304cbf059934c56a522e8ddd320c7c40 - arm-trusted-firmware.t234/fdts/stm32mp15xx-dhcom-som.dtsi 91f5f06e8733a1c9c215fe3856c5df0b3362ea19 - arm-trusted-firmware.t234/fdts/stm32mp13-pinctrl.dtsi 775896f2dacd473d7e9aeae79154270439d15e7b - arm-trusted-firmware.t234/fdts/fvp-ve-Cortex-A7x1.dts a2179d252faf4859c7a7e68d3ba75a0955f53d37 - arm-trusted-firmware.t234/fdts/stm32mp157c-odyssey.dts ee1bb06de6ee0eba0fe695f5c7f9dbc12abb6f3e - arm-trusted-firmware.t234/fdts/fvp-base-gicv3-psci-dynamiq-common.dtsi 4d121467e71a4bd15241201c1c23fbb169901959 - arm-trusted-firmware.t234/fdts/a5ds.dts 30ee0cec0ca21d055812b75a096ed15728a6baf4 - arm-trusted-firmware.t234/fdts/stm32mp157c-ev1.dts eedbebd67d61b1dd133c6cb2dbe6ab8ff6d87b28 - arm-trusted-firmware.t234/fdts/stm32mp25-bl2.dtsi f85104611fdc6007a4b9bae25e55c065222c8cd4 - arm-trusted-firmware.t234/fdts/stm32mp15-ddr3-1x2Gb-1066-binG.dtsi 2bd62159cd6db2c8376d8e03bd519fbf5633582a - arm-trusted-firmware.t234/fdts/tc-fpga.dtsi a3753a49e7bce1fb692e15e52db0bb957b6b54c1 - arm-trusted-firmware.t234/fdts/stm32mp151a-prtt1a.dts 3b21b710cc058aa0493ac54f0e9fbc7b2547734f - arm-trusted-firmware.t234/fdts/stm32mp15-ddr3-dhsom-2x4Gb-1066-binG.dtsi e43ae80ffc49dacd281e021e2b2c929f94b7558c - arm-trusted-firmware.t234/fdts/stm32mp157a-avenger96.dts ac548bc11fadca6cc0c3eb4d0a551c4f1917fb4b - arm-trusted-firmware.t234/fdts/fvp-base-gicv2.dtsi 84f2fbf7e3f43a269b2ec65171b627dfab1ebffe - arm-trusted-firmware.t234/fdts/stm32mp133.dtsi 9be10d595fea4efc6529cca10bd437ebc2fdaae2 - arm-trusted-firmware.t234/fdts/stm32mp257f-ev1-fw-config.dts f7ba40a101d1f02c70445a0d783a347ed212cf03 - arm-trusted-firmware.t234/fdts/stm32mp157c-dk2-fw-config.dts 593a991aa58a9f55d3b87c876cbefc0f7230b277 - arm-trusted-firmware.t234/fdts/stm32mp257f-ev1-ca35tdcid-rcc.dtsi f7ba40a101d1f02c70445a0d783a347ed212cf03 - arm-trusted-firmware.t234/fdts/stm32mp157f-dk2-fw-config.dts d0ca311ee090d9d69c82273e0e6f4d65bb330554 - arm-trusted-firmware.t234/fdts/stm32mp157f-ed1-fw-config.dts 2e1bcc40a84014cafd859ad8eda4f4cb2c28845b - arm-trusted-firmware.t234/fdts/stm32mp135f-dk.dts 910ac0ace6638b52d04843f12c3f0f521eb4f4e5 - arm-trusted-firmware.t234/fdts/corstone700_fpga.dts 592fceb8d431ae9bd20b02e4278a0f4227aad48d - arm-trusted-firmware.t234/fdts/stm32mp255.dtsi f99071420aca4da5f493b73afa3d3777206e23d7 - arm-trusted-firmware.t234/fdts/n1sdp-single-chip.dts f929c99ec4f9bfaf3f937ef2eb05c308db8b28c1 - arm-trusted-firmware.t234/fdts/stm32mp25-bl31.dtsi 33afbee5fd7bbf5c15449c00db2a57cd4ba0634e - arm-trusted-firmware.t234/fdts/fvp-ve-Cortex-A5x1.dts e4effdaad7d40cbfb9d50d65850001f78798f0ab - arm-trusted-firmware.t234/fdts/stm32mp25-ddr4-2x8Gbits-2x16bits-1200MHz.dtsi 69f9c6b52922817172d8364017bc505dbd6efde7 - arm-trusted-firmware.t234/fdts/tc3.dts b61926af906ac72d7ffe15c3a30ce22c0ecce8ae - arm-trusted-firmware.t234/fdts/fvp-base-gicv3.dtsi a61a77e18f14a9ba0916b5d0c1d4c7b0e07d1441 - arm-trusted-firmware.t234/fdts/stm32mp15xxac-pinctrl.dtsi 7739f364421e9d716a4b9ed3d05f78cbf641973b - arm-trusted-firmware.t234/fdts/fvp-foundation-gicv2-psci.dts 6edd65ecdfb3865714312fee840a5fdf3d39db3b - arm-trusted-firmware.t234/fdts/tbbr_cot_descriptors.dtsi dbed6c5c0e011af658818b570feee9c093e65a26 - arm-trusted-firmware.t234/fdts/stm32mp135f-dk-fw-config.dts 7aef226154cbdf7568d849f90766e418e218ec39 - arm-trusted-firmware.t234/fdts/stm32mp25xxai-pinctrl.dtsi f7ab9d27f753fb7c89ce3a7d204d10047c97b366 - arm-trusted-firmware.t234/fdts/fvp-base-psci-common.dtsi a50dec7e2783a8212860dc362ed39193bd7980e6 - arm-trusted-firmware.t234/fdts/fvp-base-gicv3-psci-dynamiq.dts 915cde638849b3835b472fd2aced811c8a75ebbf - arm-trusted-firmware.t234/fdts/tc3-4-base.dtsi 06575b7d85734144ba2b938ccb57c57cbec514a2 - arm-trusted-firmware.t234/fdts/stm32mp1-cot-descriptors.dtsi 180b7b537e0272e8e8ce9e631259c8bb1c9a7bb6 - arm-trusted-firmware.t234/fdts/stm32mp15xx-dhcor-io1v8.dtsi 9b8ac26e6aba8c07f1c006c77f572ab706effc6f - arm-trusted-firmware.t234/fdts/stm32mp25-ddr.dtsi 35e98c0189c054e2d984740094c7a6995421880c - arm-trusted-firmware.t234/fdts/stm32mp157c-dk2.dts 5acde1db230ce29d509b411d7f31057308ab45ea - arm-trusted-firmware.t234/fdts/stm32mp25-pinctrl.dtsi f7ba40a101d1f02c70445a0d783a347ed212cf03 - arm-trusted-firmware.t234/fdts/stm32mp157a-dk1-fw-config.dts d0ca311ee090d9d69c82273e0e6f4d65bb330554 - arm-trusted-firmware.t234/fdts/stm32mp157c-ev1-fw-config.dts a88bff2feebe3949acee8413241a06f4643f5419 - arm-trusted-firmware.t234/fdts/n1sdp-multi-chip.dts f7ba40a101d1f02c70445a0d783a347ed212cf03 - arm-trusted-firmware.t234/fdts/stm32mp157d-dk1-fw-config.dts 2f05be7afa52d4db4c62e213a91e5efc3908193a - arm-trusted-firmware.t234/fdts/stm32mp157c-lxa-mc1.dts d0ca311ee090d9d69c82273e0e6f4d65bb330554 - arm-trusted-firmware.t234/fdts/stm32mp157a-dhcor-avenger96-fw-config.dts 0a97055a017b87350c17c64367ffe6d5b1271f7d - arm-trusted-firmware.t234/fdts/stm32mp15xx-osd32.dtsi 1eec69a2fb20f914f15b04407b66d3758c2b48e8 - arm-trusted-firmware.t234/fdts/stm32mp15xx-dhcor-avenger96.dtsi 2d9983ae7b41417977f671f99eec7d6c8f5a99be - arm-trusted-firmware.t234/fdts/stm32mp15xxaa-pinctrl.dtsi 79d8f41f2a5afa474094fe763ef4ee39909d283b - arm-trusted-firmware.t234/fdts/stm32mp157c-odyssey-fw-config.dts 7f4101d99c2907d29974fc114aae5e3d1d23300f - arm-trusted-firmware.t234/fdts/stm32mp131.dtsi 5e702bf5a9e551d9ebeb8fcf481b4511c408728b - arm-trusted-firmware.t234/fdts/fvp-foundation-gicv3-psci.dts c49dfbfab50db6d0014130e8d213b6a8113c9525 - arm-trusted-firmware.t234/fdts/stm32mp153.dtsi fdc05334cd630b63cf2fd11add62d6580489d832 - arm-trusted-firmware.t234/fdts/stm32mp13-ddr.dtsi 2975b8960cae049843178f072921ce9c826e8822 - arm-trusted-firmware.t234/fdts/stm32mp135.dtsi 9b1d0d1d96c158519a45d4440f0858e117c4f1d3 - arm-trusted-firmware.t234/fdts/stm32mp15-bl32.dtsi db374238bb93f89266735e4b970aac5d11e24101 - arm-trusted-firmware.t234/fdts/stm32mp257.dtsi 428fbc2f43a001e628c675e0662fa8e6e8fcb52b - arm-trusted-firmware.t234/fdts/stm32mp253.dtsi 508525cfbd32039b3cda3584e3519944fa3103a3 - arm-trusted-firmware.t234/fdts/cca_cot_descriptors.dtsi 38b20f02073eeef64e5d4edace9e7a8a4a2225ef - arm-trusted-firmware.t234/fdts/stm32mp15xx-dkx.dtsi d0ca311ee090d9d69c82273e0e6f4d65bb330554 - arm-trusted-firmware.t234/fdts/stm32mp157a-avenger96-fw-config.dts 25f9d92fd043c9a5e23ab3625211649466ddad4c - arm-trusted-firmware.t234/fdts/stm32mp15-pinctrl.dtsi 094f752c659ba4c70dae4bfdd3041ffdc45d6451 - arm-trusted-firmware.t234/fdts/corstone700.dtsi 992348633a6518e2d0464e4afe90c22c87a617a6 - arm-trusted-firmware.t234/fdts/stm32mp13-ddr3-1x4Gb-1066-binF.dtsi ca0ac09e5eb628e7c9a43b6fb0e1e24ce5c836e6 - arm-trusted-firmware.t234/fdts/stm32mp157a-dhcor-avenger96.dts d0ca311ee090d9d69c82273e0e6f4d65bb330554 - arm-trusted-firmware.t234/fdts/stm32mp157f-ev1-fw-config.dts b9358e086a22689753d8de7eeb0a3ab9d4ae0d81 - arm-trusted-firmware.t234/fdts/stm32mp251.dtsi f92cb32ea29e10232721e9d596972e82444c21d2 - arm-trusted-firmware.t234/fdts/stm32mp15xxad-pinctrl.dtsi 6202639d45825ef9be69ddf414ef09baa4699497 - arm-trusted-firmware.t234/fdts/stm32mp25-ddr4-2x16Gbits-2x16bits-1200MHz.dtsi fafc1a46bd195774df21a32f1e87a087f14e2c67 - arm-trusted-firmware.t234/fdts/stm32mp15-ddr3-2x4Gb-1066-binG.dtsi d0ca311ee090d9d69c82273e0e6f4d65bb330554 - arm-trusted-firmware.t234/fdts/stm32mp157d-ev1-fw-config.dts 4d925eeb31fde1c031dcf7ce98fcf1d5ecaf5fac - arm-trusted-firmware.t234/fdts/stm32mp25xc.dtsi bc6c22a9eb6a331b29f27c4c829076992d321463 - arm-trusted-firmware.t234/fdts/fvp-base-gicv3-psci-1t.dts 0b13e4d48e2f38d369a9079669a8bc9ec293c906 - arm-trusted-firmware.t234/fdts/stm32mp25xxal-pinctrl.dtsi 9ba3ae553db0be8969881ea12aba908298bee353 - arm-trusted-firmware.t234/fdts/fvp-base-gicv3-psci.dts d0ca311ee090d9d69c82273e0e6f4d65bb330554 - arm-trusted-firmware.t234/fdts/stm32mp157a-ed1-fw-config.dts bd7d3935744e8d80f99b37c1292da7cc4e4eb33a - arm-trusted-firmware.t234/fdts/stm32mp151.dtsi 6ff3248bcbd3b30944f0097c16d36586da7ddfd7 - arm-trusted-firmware.t234/fdts/stm32mp157c-odyssey-som.dtsi ddb3d9266ce77ac3e0746820b562a07f35eafb01 - arm-trusted-firmware.t234/fdts/n1sdp.dtsi ca71563d0fa28538f143c0ae69e1f638dfb82942 - arm-trusted-firmware.t234/fdts/stm32mp157c-dhcom-pdk2.dts 0b13e4d48e2f38d369a9079669a8bc9ec293c906 - arm-trusted-firmware.t234/fdts/stm32mp25xxak-pinctrl.dtsi 79d8f41f2a5afa474094fe763ef4ee39909d283b - arm-trusted-firmware.t234/fdts/stm32mp157c-lxa-mc1-fw-config.dts 4d414b21f3b987c4e1aa81b217c0f86563d4df5f - arm-trusted-firmware.t234/fdts/stm32mp257f-ev1-ca35tdcid-fw-config.dtsi d0ca311ee090d9d69c82273e0e6f4d65bb330554 - arm-trusted-firmware.t234/fdts/stm32mp157d-ed1-fw-config.dts 7f2b19da9408af336f8118f41988c2bd3d737879 - arm-trusted-firmware.t234/fdts/morello-soc.dts 5a6619b992c6ac01da7486fa0e2392320bbad0d4 - arm-trusted-firmware.t234/fdts/morello-coresight.dtsi b97ef7b89b0064ff2dcadf45495d02f7a2a5aa07 - arm-trusted-firmware.t234/fdts/stm32mp157c-dhcom-pdk2-fw-config.dts 400db7184ca4fa2e589544de42921c4479438f67 - arm-trusted-firmware.t234/fdts/tc-fvp.dtsi 6b86a9e9c6c06841937a884fcc7b91e67ce3b81c - arm-trusted-firmware.t234/fdts/stm32mp13xd.dtsi 195376b3fa6a4af6db8e90af65ae62d649d506c1 - arm-trusted-firmware.t234/fdts/fvp-defs-dynamiq.dtsi 7c44644d294c12414140ec35af62e6b0a16c6b47 - arm-trusted-firmware.t234/fdts/rd1ae.dts 30b946fb5e2892807796b83e57feb4493702a198 - arm-trusted-firmware.t234/fdts/stm32mp151a-prtt1a-fw-config.dts a6ef63af22c25465b4276c77535b30d8baaa1ea4 - arm-trusted-firmware.t234/fdts/arm_fpga.dts f23b0ff90228b171396c1c623ac8d340e8879041 - arm-trusted-firmware.t234/fdts/morello-fvp.dts c078bf1220e11a54b0ae9d20bf948f1f4cb30d37 - arm-trusted-firmware.t234/fdts/stm32mp15-ddr.dtsi 4d925eeb31fde1c031dcf7ce98fcf1d5ecaf5fac - arm-trusted-firmware.t234/fdts/stm32mp25xf.dtsi c9c9cfb5244a613a263eda2689902bce219aec25 - arm-trusted-firmware.t234/fdts/dualroot_cot_descriptors.dtsi 07dea9d014bf6f86c5ceed73c6656d32a583cd5e - arm-trusted-firmware.t234/fdts/fvp-base-gicv2-psci.dts 561d58d7c0fe33f9ab8972df13dd6343378a5023 - arm-trusted-firmware.t234/fdts/stm32mp13xc.dtsi 6b86a9e9c6c06841937a884fcc7b91e67ce3b81c - arm-trusted-firmware.t234/fdts/stm32mp13xa.dtsi 983059d4f703147fcfb2225b03106f3181771b2a - arm-trusted-firmware.t234/fdts/juno.dts ee4d6267d4816b0273448875ba51ef8875240c16 - arm-trusted-firmware.t234/fdts/stm32mp15-fw-config.dtsi bd4b7344a1a75bf719821779b8635c116653ea12 - arm-trusted-firmware.t234/fdts/stm32mp13-bl2.dtsi c8fd8ec89618a1cf2384c117aa86de6a6f748825 - arm-trusted-firmware.t234/fdts/stm32mp13-fw-config.dtsi 3af6cec909dbf6deb1ba617bd2d6005648a9103e - arm-trusted-firmware.t234/fdts/stm32mp157a-dk1.dts 9c409a5e63830a8252f05627060449b59408b7b6 - arm-trusted-firmware.t234/fdts/stm32mp13xf.dtsi b58ac881868f3dd7cf4a0002e4901c674e592c96 - arm-trusted-firmware.t234/fdts/tc-base.dtsi 266d21043cd7cb1e457def745a1a90b859ba0be7 - arm-trusted-firmware.t234/fdts/fvp-defs.dtsi 9f4dbd1d41a7e46da3e48424f539da6a2552c3f2 - arm-trusted-firmware.t234/fdts/tc-common.dtsi 20769b04e4fa588ef10d7460a5b4a9061c70ebfa - arm-trusted-firmware.t234/fdts/corstone700_fvp.dts c16d24f2e8b21de95d29f0c61b7b73995caa907e - arm-trusted-firmware.t234/fdts/stm32mp15-bl2.dtsi 4c4b1be077363ed3886e65fa9ceaf74f62f84100 - arm-trusted-firmware.t234/fdts/stm32mp257f-ev1.dts cba7203d5986c69081115165043210b920cd1a89 - arm-trusted-firmware.t234/fdts/tc2.dts 390a6cef77d9095a9c98b9abe19eaaa6eedbdb73 - arm-trusted-firmware.t234/fdts/stm32mp15-ddr3-1x4Gb-1066-binG.dtsi dc880b2cbd39cde08860e8ebf3cb4b92bbb21748 - arm-trusted-firmware.t234/fdts/stm32mp15xxab-pinctrl.dtsi c1d24ce6492d52d78484c4b3cf9d2466dbf9c0b0 - arm-trusted-firmware.t234/fdts/stm32mp157.dtsi 889b7dc978be57e1d427576211af0bc8a9af18af - arm-trusted-firmware.t234/fdts/tc4.dts a035ecb2738ee727c5cce5cde80d6a9225206fdf - arm-trusted-firmware.t234/fdts/fvp-base-gicv3-psci-dynamiq-2t.dts bec9df99a99a03c52b401a1c574ff4b13acc27fa - arm-trusted-firmware.t234/fdts/juno-ethosn.dtsi d0ca311ee090d9d69c82273e0e6f4d65bb330554 - arm-trusted-firmware.t234/fdts/stm32mp157a-ev1-fw-config.dts 124937cb57b572870bb81ed00b3d01cad74c5080 - arm-trusted-firmware.t234/fdts/stm32mp157c-ed1.dts a4208974e4c39b113510787cccd6c941971d46ee - arm-trusted-firmware.t234/fdts/stm32mp15xx-dhcom-pdk2.dtsi 3c85ec5a13b8d1e56f6af2a8a7566c3ebca7d9e2 - arm-trusted-firmware.t234/fdts/stm32mp15xx-dhcor-som.dtsi f693a01d0f74eff560e7ca6773ad9404a7a50314 - arm-trusted-firmware.t234/common/fdt_fixup.c 54620aa80f910434a484672d917861106ecc2df1 - arm-trusted-firmware.t234/common/runtime_svc.c ab5f6387eb206214c132b75fa1e4b67ae025e749 - arm-trusted-firmware.t234/common/fdt_wrappers.c 4e8e81d22968abbb440726d3094bc3a5bbab94c6 - arm-trusted-firmware.t234/common/tf_crc32.c c955ba7f772157176deee4cfcf7ae01569baa055 - arm-trusted-firmware.t234/common/feat_detect.c 91cec99e37b1e7e986e62eb3474f5b0d63516507 - arm-trusted-firmware.t234/common/image_decompress.c 7a3727f63db92e64ec71b480906579a73f4fb4b7 - arm-trusted-firmware.t234/common/bl_common.c f4efa0610d34dd7e2935e65e54d8226cf36f94ff - arm-trusted-firmware.t234/common/desc_image_load.c bea1536b1c707834f2e029fad9d0bb684132671a - arm-trusted-firmware.t234/common/uuid.c d89e84a6e978e6383cb3aa345d87e7941addcfa9 - arm-trusted-firmware.t234/common/tf_log.c 8f38a18a8b5d07fbff793edbd229c26ca793996e - arm-trusted-firmware.t234/common/backtrace/backtrace.c bbba30bc6efe3fa7832672b0cbc5fc4f0f32b60f - arm-trusted-firmware.t234/common/aarch64/debug.S b21d0924c4f52357b3815446ebd25cc4f58ad622 - arm-trusted-firmware.t234/common/aarch64/early_exceptions.S 89b25cb80f0e3ecf95b200a6313848b5407d38c3 - arm-trusted-firmware.t234/common/aarch32/debug.S 3dc53d4b4c94d64eedda0de25c4e0801a47445eb - arm-trusted-firmware.t234/include/lib/coreboot.h 37deb6e9cbc2e3e8b464fc8ce14c1c4e6284a776 - arm-trusted-firmware.t234/include/lib/semihosting.h c7cb196373c73f10df4d5a3e60dd9779beee625e - arm-trusted-firmware.t234/include/lib/bakery_lock.h 189acbba01a7310177396337024e181d6bcac82b - arm-trusted-firmware.t234/include/lib/object_pool.h 446f765e7f2a8789d673363d00c94b8c1ae45105 - arm-trusted-firmware.t234/include/lib/runtime_instr.h 1590b15f0617fb9c858c955054d89705a4afd349 - arm-trusted-firmware.t234/include/lib/smccc.h 9e57804db55fcf4d528d1e521bf0320b8eff22ce - arm-trusted-firmware.t234/include/lib/transfer_list.h 84d9882c82bfe16d8176a6ac4ef417ab4c66b164 - arm-trusted-firmware.t234/include/lib/optee_utils.h 02a633ab274c33e7335a444c79a6a53d40a89ed8 - arm-trusted-firmware.t234/include/lib/utils.h 7b6ee0cba00e866054e301d3ef68388d1eb807b8 - arm-trusted-firmware.t234/include/lib/utils_def.h 5dd5d3be759594166b1cb768247348efdcd554ad - arm-trusted-firmware.t234/include/lib/bootmarker_capture.h 98f2dcf4406858b3a47f1f18fdd3a94716e7c72d - arm-trusted-firmware.t234/include/lib/debugfs.h 26b6c6d8f836c8aa9a280aa01d3e811655f7efa7 - arm-trusted-firmware.t234/include/lib/spinlock.h a083f42475c44e6541c933d673c3e3f40309ddc8 - arm-trusted-firmware.t234/include/lib/cassert.h 6fe25bd387c1008e2a052a92a7da2a6f3921019b - arm-trusted-firmware.t234/include/lib/mmio.h 0be181d09547721f4a8d33af30819a24951ac4b6 - arm-trusted-firmware.t234/include/lib/libfdt/fdt.h c90d25bb7b217171ad9437ee0bc8d4e0c5c7f4d3 - arm-trusted-firmware.t234/include/lib/libfdt/libfdt_env.h 3235f35fe9c47f94346289986445736f3da75910 - arm-trusted-firmware.t234/include/lib/libfdt/libfdt.h d278e9e8f48e85d05fc982e2de6d216975f07262 - arm-trusted-firmware.t234/include/lib/pmf/pmf_helpers.h 6d896373865695a1b60dc3d470fc0e1f17c6601e - arm-trusted-firmware.t234/include/lib/pmf/pmf.h 5a844f4a467099ae09e7d437bf97ba26dd0a228d - arm-trusted-firmware.t234/include/lib/pmf/aarch64/pmf_asm_macros.S be45471818b5fb856ed0fc1c303a3439ac749d6c - arm-trusted-firmware.t234/include/lib/pmf/aarch32/pmf_asm_macros.S 11d9832f644c53ec37d507c89dc331c74cb8deeb - arm-trusted-firmware.t234/include/lib/fconf/fconf_tbbr_getter.h 368eb064d2bb6e6665b4e7c3cb7878345358f8f3 - arm-trusted-firmware.t234/include/lib/fconf/fconf_dyn_cfg_getter.h 531877858c00a04ba41ba7d211235fcad2bf2f77 - arm-trusted-firmware.t234/include/lib/fconf/fconf_mpmm_getter.h 1cc2ff30d9d45589c3c7fa34a79ab141314e4974 - arm-trusted-firmware.t234/include/lib/fconf/fconf_amu_getter.h 75e6787b9a5e8d6a89f9fbefbfd5ac58c79b6cf7 - arm-trusted-firmware.t234/include/lib/fconf/fconf.h 6ddb2152a3557adeabd4501a6fa17a016679fb1b - arm-trusted-firmware.t234/include/lib/dice/dice.h 1025e17317a6bd0006b634251cfa7d8d8525ee88 - arm-trusted-firmware.t234/include/lib/extensions/tcr2.h 68788e670ff4f9c39125676503b44574b4c83124 - arm-trusted-firmware.t234/include/lib/extensions/sysreg128.h 617c43bd1ff656a0934d878a808926d4b9b5ec4b - arm-trusted-firmware.t234/include/lib/extensions/debug_v8p9.h 03f218691f1f1bc83fe16d4dd9ce678e12d9506c - arm-trusted-firmware.t234/include/lib/extensions/trf.h cdda4f9e22d8ec05fbab4a72aee84b4131c32d5e - arm-trusted-firmware.t234/include/lib/extensions/ras_arch.h 7eaa9363f2d98233218b4fae7df64da9c51b3055 - arm-trusted-firmware.t234/include/lib/extensions/sys_reg_trace.h 31f052834d8696d495161a4518bdc1542376349f - arm-trusted-firmware.t234/include/lib/extensions/spe.h 9d4077ef10030b7608685ee2ae4a8e513c8f0f15 - arm-trusted-firmware.t234/include/lib/extensions/pmuv3.h 67dbec444c7b96be6c380850d7f727687f4db4a4 - arm-trusted-firmware.t234/include/lib/extensions/sve.h ea6c21cf60cc92373dcb06e23b72ddac8b084019 - arm-trusted-firmware.t234/include/lib/extensions/mpam.h 3bd16a1da1a79c7a8f476ff772c3c831e3f49bae - arm-trusted-firmware.t234/include/lib/extensions/amu.h 0e5bbab2e98cb209a4ee2e54b40149b32d216998 - arm-trusted-firmware.t234/include/lib/extensions/fpmr.h d4715461cb3c3b61b38fcd20668df6e04e35e864 - arm-trusted-firmware.t234/include/lib/extensions/trbe.h 3fab4035d82456a56f85007c73888f966a24cb30 - arm-trusted-firmware.t234/include/lib/extensions/brbe.h ca841be2c50148111cb97c73914ef9b4ee02870c - arm-trusted-firmware.t234/include/lib/extensions/pauth.h 383006eb36b399f7af32c0a066643f3474f75c07 - arm-trusted-firmware.t234/include/lib/extensions/fgt2.h 41600f0f23a78de530a45aada00e36f88eae5475 - arm-trusted-firmware.t234/include/lib/extensions/ras.h 2b2543c9385f41cad38e80b5c632e89d3b841b21 - arm-trusted-firmware.t234/include/lib/extensions/sme.h 591a7fc1eb8339e69126ae9cdaef60a0e0a1b7a2 - arm-trusted-firmware.t234/include/lib/el3_runtime/pubsub_events.h a0ad594d11eeaf8a96f7ef7f0007e1b6ef82f538 - arm-trusted-firmware.t234/include/lib/el3_runtime/simd_ctx.h f0cd55487844b57f91ef1a42207450a0d13d2b0a - arm-trusted-firmware.t234/include/lib/el3_runtime/context_el1.h aa1d945fff5b9aa02e1a179ebbacefd9dd35d71d - arm-trusted-firmware.t234/include/lib/el3_runtime/cpu_data.h b292b0dd79861d9b0df86d18f816d4b09cb87a56 - arm-trusted-firmware.t234/include/lib/el3_runtime/context_debug.h 898a706e4d55e6a8e460b127a55c8b56e166a20c - arm-trusted-firmware.t234/include/lib/el3_runtime/context_mgmt.h 3c2234578452ae3c18f08356e71241713817bae7 - arm-trusted-firmware.t234/include/lib/el3_runtime/pubsub.h fb47e413b0a4d82447e0c1c84a9cfffdb15e7a85 - arm-trusted-firmware.t234/include/lib/el3_runtime/context_el2.h 234fee0187ce90b47cfb82f600dea08065f22bb5 - arm-trusted-firmware.t234/include/lib/el3_runtime/aarch64/context.h 2b2b51125e2af7cdc48a6aaf10fbd7f3eace4fef - arm-trusted-firmware.t234/include/lib/el3_runtime/aarch32/context.h 9d353d15c89a7e33c0bb7e4a60d725836351758d - arm-trusted-firmware.t234/include/lib/psa/rse_platform_api.h 6c7636e87feae48d8608c55987525781fadd983b - arm-trusted-firmware.t234/include/lib/psa/cca_attestation.h 2149dfe5e1d5ca5858398229dcdb84d38f9a5c90 - arm-trusted-firmware.t234/include/lib/psa/delegated_attestation.h 385cc0ccaa9abcc183c4833a8021b5a9c111ab16 - arm-trusted-firmware.t234/include/lib/psa/measured_boot.h 3a49eb3ad2ddc01c2a56d99337827a432f0977b1 - arm-trusted-firmware.t234/include/lib/psa/rse_crypto_defs.h 062a4029c11af52064bb52e2612a69ef4777746a - arm-trusted-firmware.t234/include/lib/psa/dice_protection_environment.h a839999f7dbf6fc6a9e540d955daf6b6e8400b53 - arm-trusted-firmware.t234/include/lib/psa/psa_manifest/sid.h b26105a24130cc301a2103ca9d617e9e148c28f2 - arm-trusted-firmware.t234/include/lib/psa/psa/client.h 9929d7145e068add1adeab78298ed4cc893eda3e - arm-trusted-firmware.t234/include/lib/psa/psa/error.h 77e396cb2d74cc6746740df59b764de5f8371e02 - arm-trusted-firmware.t234/include/lib/xlat_tables/xlat_tables_v2_helpers.h 9d906ce1d1d4d34e3b825c20dd6f7adf85a5e114 - arm-trusted-firmware.t234/include/lib/xlat_tables/xlat_tables_compat.h 3104ba88d9764209dcc5a7094e37d5eeb7a0c2d2 - arm-trusted-firmware.t234/include/lib/xlat_tables/xlat_tables_arch.h d6c813a928bf0ab001eff3a675cf829eedd1ae6a - arm-trusted-firmware.t234/include/lib/xlat_tables/xlat_mmu_helpers.h 11eb0bd39acad3af9894482068dd876aad2edbfa - arm-trusted-firmware.t234/include/lib/xlat_tables/xlat_tables.h af03c45fae390a0c24d1db4a6fbcfb667bace787 - arm-trusted-firmware.t234/include/lib/xlat_tables/xlat_tables_v2.h faa8031ef6bd08f99925e42f11123a8d60209764 - arm-trusted-firmware.t234/include/lib/xlat_tables/xlat_tables_defs.h 60dc8dbd0142564dbb964560b16fccd2c8508536 - arm-trusted-firmware.t234/include/lib/xlat_tables/aarch64/xlat_tables_aarch64.h 08c8903abbbd41ce4a41592d02b764f4f63fec9e - arm-trusted-firmware.t234/include/lib/xlat_tables/aarch32/xlat_tables_aarch32.h 1c209b81e20487f711c56301c87d638abbac7259 - arm-trusted-firmware.t234/include/lib/bl_aux_params/bl_aux_params.h 5ff5a138db10a9817def16cfbc99196b8149304d - arm-trusted-firmware.t234/include/lib/libc/cdefs.h e1f1c00863bb022868e25533ff7b04604fe66f00 - arm-trusted-firmware.t234/include/lib/libc/inttypes.h 5a5a60f11370ca2f90890448a6b35d1ddba023fc - arm-trusted-firmware.t234/include/lib/libc/assert.h fab66bcf86550e805e965f84b1f233a4cb17b9ce - arm-trusted-firmware.t234/include/lib/libc/stdlib.h 3e4e872642e46a1bc5d8bb1ec81799aa7d688342 - arm-trusted-firmware.t234/include/lib/libc/errno.h 0246dcf17833ed1fef3cd37fa31d2e8c3ae5985c - arm-trusted-firmware.t234/include/lib/libc/stdint.h 9b9ca9a1e8aaa630fce2389f864c8f17a3788ab6 - arm-trusted-firmware.t234/include/lib/libc/stdbool.h 4ee24fa72dd6c601e456f7f01f99526d70d3dd94 - arm-trusted-firmware.t234/include/lib/libc/stdio.h 9bf7dcbe71fef7bfbe5ee3f2fefb836220c4b33d - arm-trusted-firmware.t234/include/lib/libc/endian.h 3ba71c108fae3e13a2c41b513a24b5b7c7fd0c41 - arm-trusted-firmware.t234/include/lib/libc/stdarg.h 2e905291396940d21065458c7d53c4a6cf05aa7d - arm-trusted-firmware.t234/include/lib/libc/time.h d9b26569ac38ec228626f0f6d1047f838f3484e1 - arm-trusted-firmware.t234/include/lib/libc/arm_acle.h 86dbebbd92337bcdb5ba8018625a4cc8ca95178d - arm-trusted-firmware.t234/include/lib/libc/limits.h 8ec717b2253fdd28f139221e629d91aa137520b2 - arm-trusted-firmware.t234/include/lib/libc/setjmp.h 68b973781ccf190bd547c0333f5240ae94f6c9b6 - arm-trusted-firmware.t234/include/lib/libc/string.h 5531598e2e2527106b17bef5da61de894698bf94 - arm-trusted-firmware.t234/include/lib/libc/stddef.h c7cf4ea6cb1c7a44c51c0ad5915bbec19e4f2c8c - arm-trusted-firmware.t234/include/lib/libc/aarch64/setjmp_.h 9b37140e6e8b78c090e0c5455dbd1a9259d52473 - arm-trusted-firmware.t234/include/lib/libc/aarch64/limits_.h 8aa93ed81017b7c5ae3021e5d18caf053c4300d1 - arm-trusted-firmware.t234/include/lib/libc/aarch64/stdio_.h 4bbed5908e63c692773d72d681d85ca77146d6e3 - arm-trusted-firmware.t234/include/lib/libc/aarch64/stdint_.h 483e052e0811a5553e8a1dcd9683ebdbc1950f50 - arm-trusted-firmware.t234/include/lib/libc/aarch64/inttypes_.h 4803a247e01864e1b725392c0728aa140f4f6e18 - arm-trusted-firmware.t234/include/lib/libc/aarch64/stddef_.h 6305b6c31c263577fda498c58fcc5f74b74ae5d5 - arm-trusted-firmware.t234/include/lib/libc/aarch64/endian_.h 13cd0817f8e38f22995768011acff261a52b5351 - arm-trusted-firmware.t234/include/lib/libc/aarch64/float.h 9ff822c81c07ff7d17775e7ad52ef05455120222 - arm-trusted-firmware.t234/include/lib/libc/aarch32/limits_.h 3af96b62f1dce219f46ae7954907dff07b76d9c2 - arm-trusted-firmware.t234/include/lib/libc/aarch32/stdio_.h a3fc892826f20a66484e36cc4655d38abe71ad64 - arm-trusted-firmware.t234/include/lib/libc/aarch32/stdint_.h 5901e5db1042baa3fa7e36eddcf57e149c0951c9 - arm-trusted-firmware.t234/include/lib/libc/aarch32/inttypes_.h 7dd94639a21fb2d00d31c9bdd18c3ac5412dc9ee - arm-trusted-firmware.t234/include/lib/libc/aarch32/stddef_.h 3aeb2a46d0e20156707faae20ff3d8fd17ed83d3 - arm-trusted-firmware.t234/include/lib/libc/aarch32/endian_.h 23c362318a90ff79c1855b9811de06b97efd7748 - arm-trusted-firmware.t234/include/lib/libc/aarch32/float.h 945134d8abfd9b6f15d9b2d515cc7b78709591e9 - arm-trusted-firmware.t234/include/lib/libc/sys/cdefs.h 1d71c23184f1b1402734a8ea0a60d6978eef28b6 - arm-trusted-firmware.t234/include/lib/cpus/errata.h db705f295e95f3181ecd160b740e01e77e4fd371 - arm-trusted-firmware.t234/include/lib/cpus/cpu_ops.h c3b0f105e5a9845da0f3371050ad7152766a8a8e - arm-trusted-firmware.t234/include/lib/cpus/wa_cve_2018_3639.h 1c83888ebb5b534513cbebd5cf905a73b3ed8b62 - arm-trusted-firmware.t234/include/lib/cpus/wa_cve_2017_5715.h 1e92f48a602540e1dd1ffd10c6644db52357d539 - arm-trusted-firmware.t234/include/lib/cpus/wa_cve_2022_23960.h 50c9ba00cb444579e9f1eb44dafa14b432ca8c2c - arm-trusted-firmware.t234/include/lib/cpus/aarch64/generic.h 0e85e6e9ab42a7871214b60120a07a34762d6d57 - arm-trusted-firmware.t234/include/lib/cpus/aarch64/cortex_a75.h f2738e4eec7622ef0a3a629754842da35ec8c4a4 - arm-trusted-firmware.t234/include/lib/cpus/aarch64/cortex_a78c.h 5e9fa4dab46748934c4c88271d37b5fdce93f986 - arm-trusted-firmware.t234/include/lib/cpus/aarch64/cortex_a720_ae.h 866c865614acbdcfbe8ae0d88e4b57579dfaceaf - arm-trusted-firmware.t234/include/lib/cpus/aarch64/cortex_a78_ae.h dd9c6823a0e565d3cbea437b212fc46a61bab1dd - arm-trusted-firmware.t234/include/lib/cpus/aarch64/qemu_max.h c2bea4721250215e302e0f437bc2c4cde3ee0fad - arm-trusted-firmware.t234/include/lib/cpus/aarch64/cortex_gelas.h 01b60c91033af191a91fe973f95723e8ebf80f27 - arm-trusted-firmware.t234/include/lib/cpus/aarch64/cortex_a520.h 41ffad5aabaa634a70bea616624d336cd63de635 - arm-trusted-firmware.t234/include/lib/cpus/aarch64/cortex_a35.h f8fdee8d6fc4926aaee8a0d0dae0a52b0520da86 - arm-trusted-firmware.t234/include/lib/cpus/aarch64/dsu_def.h 79f44f5667f918f3a00c6e1b75ef2d1d8d058194 - arm-trusted-firmware.t234/include/lib/cpus/aarch64/neoverse_v2.h e935e9cfaae5f8493e694641b55553722a98f5cc - arm-trusted-firmware.t234/include/lib/cpus/aarch64/a64fx.h 5143e189219c6b6486ad898d9976a9804afd2716 - arm-trusted-firmware.t234/include/lib/cpus/aarch64/neoverse_v3.h f95e4dc1c0473da6588399f45aafd87927b7053a - arm-trusted-firmware.t234/include/lib/cpus/aarch64/cortex_x925.h fd19e25097cfd7b52c6c5bdd0ba682740720aa74 - arm-trusted-firmware.t234/include/lib/cpus/aarch64/cpuamu.h 1c091c1074bfba4331ce86358da93c4cadb3fc4b - arm-trusted-firmware.t234/include/lib/cpus/aarch64/olympus.h cecb6b77ddae233e9012f44da229b0f25904b481 - arm-trusted-firmware.t234/include/lib/cpus/aarch64/cortex_a65ae.h 9ed8acc2387d0f31bf8f384f213fa2ada8b67d03 - arm-trusted-firmware.t234/include/lib/cpus/aarch64/cortex_a73.h 207825f7c7bc6a3629fb083bb28ba05c4281e2ca - arm-trusted-firmware.t234/include/lib/cpus/aarch64/aem_generic.h fb4a3e494040063947ad8b53a4422c89be5f31f9 - arm-trusted-firmware.t234/include/lib/cpus/aarch64/cortex_a725.h da71d680044b76367b5dbc48c9487e8e81e2b536 - arm-trusted-firmware.t234/include/lib/cpus/aarch64/travis.h 01f0437d6b85c6142de0b80fb1f808e3f5212a8a - arm-trusted-firmware.t234/include/lib/cpus/aarch64/neoverse_n2.h c2e73e8b281ebb97b785d71a94b08248af9dbdcc - arm-trusted-firmware.t234/include/lib/cpus/aarch64/cortex_a710.h 6f80e2ceb55f9179c0e8b9d91d249e62d6b1face - arm-trusted-firmware.t234/include/lib/cpus/aarch64/neoverse_n_common.h 34dfc5dff2e53ab688d4820a31904505dd9151ff - arm-trusted-firmware.t234/include/lib/cpus/aarch64/neoverse_n3.h 5097ef709c8295041cbc1eea4a4303bf7180e849 - arm-trusted-firmware.t234/include/lib/cpus/aarch64/cortex_arcadia.h a99ff7c88fc25ee8fba8923e92e998f15e916d02 - arm-trusted-firmware.t234/include/lib/cpus/aarch64/denver.h 9972db2a6e642a25e645bddb3e857454d0a0c606 - arm-trusted-firmware.t234/include/lib/cpus/aarch64/cortex_a57.h fb3eea3ab90d3923adcc1af2ca06c348e3ad47a9 - arm-trusted-firmware.t234/include/lib/cpus/aarch64/cortex_x3.h 2ec8e53bda3ae38009eb4c591feee1d2086246c7 - arm-trusted-firmware.t234/include/lib/cpus/aarch64/cortex_a78.h 855d46ce471075fa336a51267cbb17002c3a1258 - arm-trusted-firmware.t234/include/lib/cpus/aarch64/neoverse_v1.h c835949ad954dcdeee9fdbac76e560a93c695e73 - arm-trusted-firmware.t234/include/lib/cpus/aarch64/cortex_x2.h 5dc4223eb5f32b8f9982f7668f8697f600f386b8 - arm-trusted-firmware.t234/include/lib/cpus/aarch64/cortex_a77.h 3c1a4927c3fbf27a69b4e6e0b0bf60c7880e6955 - arm-trusted-firmware.t234/include/lib/cpus/aarch64/cortex_a53.h 6c287cd10c8e7b2dc3f31f82ded8a7227a079deb - arm-trusted-firmware.t234/include/lib/cpus/aarch64/cortex_a72.h b58c922be5d4bad0866dbb86570d6f9e94310f89 - arm-trusted-firmware.t234/include/lib/cpus/aarch64/rainier.h 3b310ce1b5f71d2835e727423010a354ad1e22d8 - arm-trusted-firmware.t234/include/lib/cpus/aarch64/cpu_macros.S 26f966576d1ba5fe1e871578dea3ea004be5ee67 - arm-trusted-firmware.t234/include/lib/cpus/aarch64/cortex_a76ae.h 8a20bc504c67d0e10a7b5edb81bf79ef9a5802f9 - arm-trusted-firmware.t234/include/lib/cpus/aarch64/neoverse_e1.h ed260f8199efb4c6b1d32218c83039568c4ef425 - arm-trusted-firmware.t234/include/lib/cpus/aarch64/cortex_a65.h c6a19e6c4b882f8e761d256def650bdc6c119751 - arm-trusted-firmware.t234/include/lib/cpus/aarch64/cortex_a720.h 45b054fd36d16be7674be301df036a74c8688e76 - arm-trusted-firmware.t234/include/lib/cpus/aarch64/cortex_a55.h 6fa88ffd7dda8e9e5b08bf821d53cf8bc9ef9e15 - arm-trusted-firmware.t234/include/lib/cpus/aarch64/cortex_a510.h c28183e30f9dcc69c70f2b869675e702310293f8 - arm-trusted-firmware.t234/include/lib/cpus/aarch64/cortex_x1.h ac31ef734975ddb20b04a2b9fe06160b6bf19c8e - arm-trusted-firmware.t234/include/lib/cpus/aarch64/neoverse_n1.h 4f8ec6db8ee331488e9d98e86ed706158ec40873 - arm-trusted-firmware.t234/include/lib/cpus/aarch64/cortex_a76.h d053e010296979a2d289cf9003d89644663b942a - arm-trusted-firmware.t234/include/lib/cpus/aarch64/nevis.h ed07ffb9be292cdf10a674ac9aee97b093c0ea88 - arm-trusted-firmware.t234/include/lib/cpus/aarch64/cortex_x4.h 405277db88485b78599ca741cc93eb2a99628079 - arm-trusted-firmware.t234/include/lib/cpus/aarch64/cortex_a715.h 1bc0dcff517f9e545464efecbd36fa6484590c30 - arm-trusted-firmware.t234/include/lib/cpus/aarch32/cortex_a17.h 06f7148d66d4ebb4a10c192fd997ac59aa0996aa - arm-trusted-firmware.t234/include/lib/cpus/aarch32/aem_generic.h 3757773c42089960cdf6725ee9c060f64796e5a9 - arm-trusted-firmware.t234/include/lib/cpus/aarch32/cortex_a9.h 1f43c62ae0fb8409a94d40edf68f4fcd5eb84605 - arm-trusted-firmware.t234/include/lib/cpus/aarch32/cortex_a57.h ae3e4d0bb2fd8a193fb3a305adf0f437e6f6d33c - arm-trusted-firmware.t234/include/lib/cpus/aarch32/cortex_a53.h 23f62cfa95ffada9a544734d3010f9c7f3921012 - arm-trusted-firmware.t234/include/lib/cpus/aarch32/cortex_a72.h c44bad4eb634350b8a31606cbbe8a1a9505c298b - arm-trusted-firmware.t234/include/lib/cpus/aarch32/cpu_macros.S 80926a371be75aa9ad95d7bdb14a2d0db1ed6dd6 - arm-trusted-firmware.t234/include/lib/cpus/aarch32/cortex_a15.h 39929d48bca6eb2ab21b1b422d959d985d29dd68 - arm-trusted-firmware.t234/include/lib/cpus/aarch32/cortex_a12.h 7728a2de102f6b888e166ed06115e4eea2127cd5 - arm-trusted-firmware.t234/include/lib/cpus/aarch32/cortex_a7.h 90d8ba92d25f672f98a191f0a20cbe7f95308069 - arm-trusted-firmware.t234/include/lib/cpus/aarch32/cortex_a5.h 63d398e70dfe48ab2e6b00673a955c95c5a3f10a - arm-trusted-firmware.t234/include/lib/cpus/aarch32/cortex_a32.h 0f9c6bddf555b127d0deea955abd911c85bc89b9 - arm-trusted-firmware.t234/include/lib/mpmm/mpmm.h 4d48f594622f4a73313ba25ddf42cd8310901b7f - arm-trusted-firmware.t234/include/lib/xlat_mpu/xlat_mpu.h 5567b7f52cbe97b0b31793e6894e88dd8208d5c0 - arm-trusted-firmware.t234/include/lib/zlib/tf_gunzip.h 7181b4b550ec74705c65a31636d678649f424e6f - arm-trusted-firmware.t234/include/lib/psci/psci_lib.h bc411c74bbe40f70194d6faf15cb56316de49240 - arm-trusted-firmware.t234/include/lib/psci/psci.h 84b28157b2cc81f5a9aa46c6edf2de6083f696bd - arm-trusted-firmware.t234/include/lib/gpt_rme/gpt_rme.h 7efe8c0a3fbb4e9b29850fac16b475c45925c6e3 - arm-trusted-firmware.t234/include/dt-bindings/pinctrl/stm32-pinfunc.h b7307a0a106f93b2429fa105547d42bc65f8afc2 - arm-trusted-firmware.t234/include/dt-bindings/reset/stm32mp15-resets.h c5098c5b107f74cd689ca039a39721bc1ecb7523 - arm-trusted-firmware.t234/include/dt-bindings/reset/stm32mp1-resets.h 0ca59c4b41f2264bcc0d4b45550b8a587211aece - arm-trusted-firmware.t234/include/dt-bindings/reset/stm32mp13-resets.h d8e9a7cb4de19cd9b3010edc4b9fba8107e5d0f1 - arm-trusted-firmware.t234/include/dt-bindings/reset/stm32mp25-resets.h 3a4737826d5e90e262be765553886dc9b2cad966 - arm-trusted-firmware.t234/include/dt-bindings/interrupt-controller/irq.h 56af3734637f9dcf2f75c88aad9614e515be1570 - arm-trusted-firmware.t234/include/dt-bindings/interrupt-controller/arm-gic.h 080c331a370bfcf9f9ce11ccdc89838ea7fd401c - arm-trusted-firmware.t234/include/dt-bindings/clock/stm32mp1-clksrc.h f28db646c8bdd11bb9593e0d241d924482a7d3ad - arm-trusted-firmware.t234/include/dt-bindings/clock/stm32mp15-clks.h 0685bce6ef0e372f156941cbf1cd1c02e5fb59f6 - arm-trusted-firmware.t234/include/dt-bindings/clock/stm32mp15-clksrc.h 06e2d66ed8b45da49b7d47f93cadafdc10539154 - arm-trusted-firmware.t234/include/dt-bindings/clock/stm32mp13-clks.h fd1e043f322c708de5aa529250ef0ca7430cc508 - arm-trusted-firmware.t234/include/dt-bindings/clock/stm32mp13-clksrc.h e0d1075d19bd35b9bf189dad00ef6b45991c1bf0 - arm-trusted-firmware.t234/include/dt-bindings/clock/stm32mp1-clks.h 0b8f51ee0026fd2c90daaadcfdfdb1463ab41d99 - arm-trusted-firmware.t234/include/dt-bindings/clock/stm32mp25-clksrc.h 03f1a2ecf1951dc5f1d01497ecf97ee94820e9ae - arm-trusted-firmware.t234/include/dt-bindings/clock/stm32mp25-clks.h cb86fcd259e7f1279c211d514fbdbc11b5e9f51d - arm-trusted-firmware.t234/include/dt-bindings/gpio/stm32-gpio.h 5c7d53dffc9e4dbe1b29a7a3f2c66a36954dd32d - arm-trusted-firmware.t234/include/dt-bindings/soc/stm32mp13-tzc400.h f237c837e7f3ca6eb78a837961cc378136eb56a4 - arm-trusted-firmware.t234/include/dt-bindings/soc/stm32mp15-tzc400.h 4b89cad3c01b7767a5a3a13de49705b2cb3e7f9e - arm-trusted-firmware.t234/include/dt-bindings/soc/st,stm32-etzpc.h cb4a166015b83acf19a78617be8e774abc6e1798 - arm-trusted-firmware.t234/include/bl32/payloads/tlk.h 8007432990a6eb0f56eadef81f32fb2f17403fd5 - arm-trusted-firmware.t234/include/bl32/tsp/tsp_el1_context.h ba505e9030f7f3b5425e3bfbfd97fb3174a6193a - arm-trusted-firmware.t234/include/bl32/tsp/tsp.h 61531a0b7ca81943d7aebe7d3183f30c4b6b42b7 - arm-trusted-firmware.t234/include/bl32/tsp/platform_tsp.h 2e44c81aaa54a5499ffaf341151168a669ea79cd - arm-trusted-firmware.t234/include/bl32/sp_min/platform_sp_min.h c8e4bf0f7dc18bfbfdfaa6261fb61aa8c47b18e7 - arm-trusted-firmware.t234/include/bl32/pnc/pnc.h b7a8bb81d46aa4079cf85677a232403a9dca0b7c - arm-trusted-firmware.t234/include/arch/aarch64/el3_common_macros.S 9d67132dcd6f3902c2d84008afa938e393509430 - arm-trusted-firmware.t234/include/arch/aarch64/el2_common_macros.S a1eb3b50122db343d2b7476b2f0b7bc3ac76f901 - arm-trusted-firmware.t234/include/arch/aarch64/arch.h 4de89e8a0f00e103f36c38726d5bd348b74305b3 - arm-trusted-firmware.t234/include/arch/aarch64/arch_helpers.h 65d374e7e01020f84f8ca44e0ab0d9b968026a6d - arm-trusted-firmware.t234/include/arch/aarch64/asm_macros.S 04b3308044a6768acf0bad187fc2b69cb69a1fe4 - arm-trusted-firmware.t234/include/arch/aarch64/assert_macros.S a13505cdf16ade7914b652d69ce8cadf06f498c5 - arm-trusted-firmware.t234/include/arch/aarch64/smccc_helpers.h ace1c14e0bb27ddcc5c3ea649c5d3064961fbb94 - arm-trusted-firmware.t234/include/arch/aarch64/arch_features.h 7ed15637f4168af5719ca94bc5ce3ffd9b7cccf2 - arm-trusted-firmware.t234/include/arch/aarch64/console_macros.S 93bbb9da328d0f25cbafb2f765732521f27f2b96 - arm-trusted-firmware.t234/include/arch/aarch32/el3_common_macros.S 1ac6bbd72fd5efcdea46d665f3b42539e55d19af - arm-trusted-firmware.t234/include/arch/aarch32/smccc_macros.S 7131b2883f3736e14efac9e6873a2551e1533cc2 - arm-trusted-firmware.t234/include/arch/aarch32/arch.h 1c4dd118e81e53bd7126dab504df19bf552592d7 - arm-trusted-firmware.t234/include/arch/aarch32/arch_helpers.h 1c95ac8f9916e95ce88b9a1f1736ba58bd47da1a - arm-trusted-firmware.t234/include/arch/aarch32/asm_macros.S 7473145f94c25355b413a071f083825a5bbf2ce8 - arm-trusted-firmware.t234/include/arch/aarch32/assert_macros.S a72bb106f684521756ced6c2050e9419fc6b884c - arm-trusted-firmware.t234/include/arch/aarch32/smccc_helpers.h d83875417e03bba3efaf9f70576ee30932ac820d - arm-trusted-firmware.t234/include/arch/aarch32/arch_features.h 460b1979782a0cccdf08f5baad8fed8672db25d2 - arm-trusted-firmware.t234/include/arch/aarch32/console_macros.S b46a10bce55c312c93a16f506296f5642158a823 - arm-trusted-firmware.t234/include/common/asm_macros_common.S ff9dcfa75dfbd082499e82016cf0b462fd635d8a - arm-trusted-firmware.t234/include/common/fdt_fixup.h bee3161f6017851d274cf405677a92450d6fd385 - arm-trusted-firmware.t234/include/common/feat_detect.h 4b65277cf8fd7a6da3db9e4272fe9452f55c3f9b - arm-trusted-firmware.t234/include/common/debug.h 03188e663ea97de557a55ed8081336e62c5c5c85 - arm-trusted-firmware.t234/include/common/bl_common.ld.h b0aadb059bd035c38b54ce8f2f7690b49b417e5a - arm-trusted-firmware.t234/include/common/param_header.h 0adc1932137e9f09ebf8948f60d0bb0258ad0249 - arm-trusted-firmware.t234/include/common/tf_crc32.h 3061ebcc5cc39e9b66461188d5eccd5bef4173d0 - arm-trusted-firmware.t234/include/common/image_decompress.h 2924eec6fd469d478b63c21c84338234a7ea1014 - arm-trusted-firmware.t234/include/common/uuid.h 06d8004a1a0bfa5be2aa0b9878434eaf7a87d731 - arm-trusted-firmware.t234/include/common/sha_common_macros.h 5afd89832d7eb27979b6864884c4c5564a60279d - arm-trusted-firmware.t234/include/common/romlib.h 227245db4039eba1e0adf3fc9e0ef8e7ed8401a4 - arm-trusted-firmware.t234/include/common/interrupt_props.h 483eeedae145bb59bee695e4b64f4e43c4b6c97c - arm-trusted-firmware.t234/include/common/bl_common.h 835fd8c82abcfae1bf3c5dceb1123a8b2bfd587d - arm-trusted-firmware.t234/include/common/ep_info.h 9acd7a0a005acdb9eb6ee122677ee9528b36b6e0 - arm-trusted-firmware.t234/include/common/nv_cntr_ids.h 58f9077cebc2eeeb918b9027a8dac8f99eb88906 - arm-trusted-firmware.t234/include/common/fdt_wrappers.h f3ec87cdd303cc80ab1975ee4c970c1d72f2a1d9 - arm-trusted-firmware.t234/include/common/desc_image_load.h b80a1cc216083dfe14d3e3be957ffae7e007624e - arm-trusted-firmware.t234/include/common/runtime_svc.h be7db66855405661923f34d6bfcd43101692fbf1 - arm-trusted-firmware.t234/include/common/build_message.h cafb37ec37ca0351af03e8f0dd1aad14a5f44633 - arm-trusted-firmware.t234/include/common/par.h 87de53102d5297ef64042ecacbedc3c7d6bd6f9e - arm-trusted-firmware.t234/include/common/tbbr/cot_def.h 22b063584c188624815fe5a57f199b9bde282c6a - arm-trusted-firmware.t234/include/common/tbbr/tbbr_img_def.h bd2d4eb5c212d160761d64412ed154d8e796cdd2 - arm-trusted-firmware.t234/include/drivers/ufs.h 53f7f9d34790574d543c7863e82a4d9d4f4f59d9 - arm-trusted-firmware.t234/include/drivers/spi_nand.h c6196bb0257e22a01c41c4f1d7abbac3eb2b094d - arm-trusted-firmware.t234/include/drivers/console_assertions.h c4429ee53ef448b397f7bb00549865cde71b807e - arm-trusted-firmware.t234/include/drivers/nand.h 2c8fac425744348a8ae0d124f4784f930cb2c5d6 - arm-trusted-firmware.t234/include/drivers/mmc.h 1e85ce64c0bc0c37f1c87dab8859540aadd4d842 - arm-trusted-firmware.t234/include/drivers/raw_nand.h c8f57a02330fc21d063cbfa19b558cbd20de2787 - arm-trusted-firmware.t234/include/drivers/generic_delay_timer.h beb3e629b953dd33bc44df27d3f0b251af4a75e5 - arm-trusted-firmware.t234/include/drivers/scmi.h 943b075091659ce6547f829ef1ac47e0df8adcf6 - arm-trusted-firmware.t234/include/drivers/scmi-msg.h 32b681b12e18f054ea32d70a554e9c07ff59e4f5 - arm-trusted-firmware.t234/include/drivers/spi_nor.h bb163896fcf9655f45d24b8676ea0a79a6c28272 - arm-trusted-firmware.t234/include/drivers/dw_ufs.h d152537f75eef1899b821bedef959cb692f18127 - arm-trusted-firmware.t234/include/drivers/console.h 17bc507416f9fc55db60d94bd3f67050f792e2d7 - arm-trusted-firmware.t234/include/drivers/clk.h 061a6a5d58a19fa40602dcb1c9d1042a206ad73e - arm-trusted-firmware.t234/include/drivers/spi_mem.h ae322b2ecb32d3457fc3a6251b4b2c293c59dab4 - arm-trusted-firmware.t234/include/drivers/usb_device.h bd1a55c39b794d7162ff5ec69867893ff756c7f7 - arm-trusted-firmware.t234/include/drivers/delay_timer.h b11f7ad45072a13e91bd01040adca94742f7cff1 - arm-trusted-firmware.t234/include/drivers/gpio.h 95f57bdb58eaa0c98d1495b69af4481368294101 - arm-trusted-firmware.t234/include/drivers/synopsys/dw_mmc.h fb2ab0b52f4f35df23b3edcece8abda9ff13a06c - arm-trusted-firmware.t234/include/drivers/cadence/cdns_nand.h 636dd42ee6cc51da2688543f0ed001e5e2846054 - arm-trusted-firmware.t234/include/drivers/cadence/cdns_combo_phy.h 23990ec2bf37fdd1bffa76545d40b74f0f21001b - arm-trusted-firmware.t234/include/drivers/cadence/cdns_sdmmc.h f19d8a3d79c7ce6d707c0876eccb43bdf030f5d6 - arm-trusted-firmware.t234/include/drivers/cadence/cdns_uart.h f255bd6542ce1b5d70e6f1e8d795bf29367099a7 - arm-trusted-firmware.t234/include/drivers/io/io_memmap.h d44cfbded1853f569ae63d99598504a959d6be61 - arm-trusted-firmware.t234/include/drivers/io/io_fip.h e65ada86295c449ba40e5e0d4d1558b8c57e24c5 - arm-trusted-firmware.t234/include/drivers/io/io_mtd.h ea2dcfb76c08ec6fec8d8a369642b152753b0780 - arm-trusted-firmware.t234/include/drivers/io/io_driver.h 19c072aa0aafa961d7d7111c7a7159356ecadaf1 - arm-trusted-firmware.t234/include/drivers/io/io_storage.h 10532a6db736e62308718e7ed4602bcdad21e3e0 - arm-trusted-firmware.t234/include/drivers/io/io_block.h 65ea10cb954a4eafbc5c1b0e1f4118cece4ff74b - arm-trusted-firmware.t234/include/drivers/io/io_semihosting.h fe49b84f7431a3680d29420770e6c5a8e81abd5c - arm-trusted-firmware.t234/include/drivers/io/io_encrypted.h 3627b7b1be6ec0689ff827a4f2cdc13cf7b878fd - arm-trusted-firmware.t234/include/drivers/st/stm32_pka.h 6e705f58e33f92038f70bef6cfbe96e9c14a8d75 - arm-trusted-firmware.t234/include/drivers/st/stm32_uart.h 44ae19e6ee5416f22bd43d532b1f20ff496d29c0 - arm-trusted-firmware.t234/include/drivers/st/stm32mp_pmic2.h 1b6f5d6f48fb0ceab8d15c6308e31e78e85bddba - arm-trusted-firmware.t234/include/drivers/st/stm32_uart_regs.h 4e2359db2175d2e11c20d1dc894274fabea33c90 - arm-trusted-firmware.t234/include/drivers/st/stpmic2.h 51b50b86f5dea96ef59764df60f2d64a45d54bf1 - arm-trusted-firmware.t234/include/drivers/st/stm32mp1_ddr.h 55bfa368d9358ffecc69cfaced82290b7639ff6e - arm-trusted-firmware.t234/include/drivers/st/bsec2_reg.h 91bfb605e20bff6aead18279afab90eed7856ddd - arm-trusted-firmware.t234/include/drivers/st/stm32mp1_pwr.h 012bc14e697b26babd60ebc5e4d71cb855c093c5 - arm-trusted-firmware.t234/include/drivers/st/stm32_saes.h a3becf8117461fb446d010ddfafef0015838b121 - arm-trusted-firmware.t234/include/drivers/st/stm32mp_pmic.h 5004ab907a6caf0daceb12d40c69e035411b0f12 - arm-trusted-firmware.t234/include/drivers/st/stm32mp_clkfunc.h d2e2e0939e18b6315abfdb5b19c3081f4c18f142 - arm-trusted-firmware.t234/include/drivers/st/stm32mp2_ram.h 66244e11c485678c387bae4e760008cb895974ac - arm-trusted-firmware.t234/include/drivers/st/stm32mp2_pwr.h 16d36c74e72bc40e7ba15ea25ce38621a3dc3a9e - arm-trusted-firmware.t234/include/drivers/st/stm32_console.h e545051ef77d33ec66036fa94f2d53b51253d436 - arm-trusted-firmware.t234/include/drivers/st/stm32mp1_ddr_helpers.h cacf83dd6e129df0a9ffedbd38bfb757074d1240 - arm-trusted-firmware.t234/include/drivers/st/etzpc.h 2e656fcabdc84178c5fe10c22ef9ecabbcd1d727 - arm-trusted-firmware.t234/include/drivers/st/stm32mp2_ddr_regs.h 173981f3ca549df6d0e56fd0a16e4a055b9151eb - arm-trusted-firmware.t234/include/drivers/st/stm32mp15_rcc.h eaf998cd31b2112d0a61198a5a7f14d484217251 - arm-trusted-firmware.t234/include/drivers/st/regulator.h 939de7d8bc353805cf540249a5ccc11867a3f91f - arm-trusted-firmware.t234/include/drivers/st/bsec3_reg.h 837212152227738be545a2d712a87729e35817de - arm-trusted-firmware.t234/include/drivers/st/stm32_hash.h ff21abb6526ad91314e2f7cc58fa6fd6546c926f - arm-trusted-firmware.t234/include/drivers/st/stm32_sdmmc2.h 86a1ad6cd3ce837f820ba6c1b9f6ee7182e74956 - arm-trusted-firmware.t234/include/drivers/st/stm32_fmc2_nand.h c13f39e45ffdff80cfe87c12423322a15b959794 - arm-trusted-firmware.t234/include/drivers/st/stm32mp1_ddr_regs.h ab2d49d778d0a37a68c96bd8815cc72184bf1fe9 - arm-trusted-firmware.t234/include/drivers/st/bsec.h e3919f806d7a8cd151c4a8cb6cd0d377e3d68eee - arm-trusted-firmware.t234/include/drivers/st/stm32mp_ddrctrl_regs.h 431e908bb797e10b7839fe28a0ace7d8a9e7bf99 - arm-trusted-firmware.t234/include/drivers/st/stm32mp1_ram.h cd0824138d28d52fa69e71b8e1e1cceb731d255c - arm-trusted-firmware.t234/include/drivers/st/stm32mp2_clk.h aa92e49bb5c5c93533c8be94c535153fb8ed2f21 - arm-trusted-firmware.t234/include/drivers/st/stm32_i2c.h 4117d3cbb2473d56afd4d4c4bc60a948b1964824 - arm-trusted-firmware.t234/include/drivers/st/stm32mp_reset.h 967e02371bf07f76cf015635f5a50c0956176296 - arm-trusted-firmware.t234/include/drivers/st/stm32mp1_usb.h 6c00673ea5fb61808caf3b77e422043972ecafc7 - arm-trusted-firmware.t234/include/drivers/st/stm32_qspi.h 45a56579470aa4ad7e007373a068f3285f046de0 - arm-trusted-firmware.t234/include/drivers/st/stpmic1.h 0f0f134d4b9df35b4086136d01f237e11b7ad6ec - arm-trusted-firmware.t234/include/drivers/st/stm32mp_ddr.h bcfc65cd26c42c404b6482da16cdacf6e95c5733 - arm-trusted-firmware.t234/include/drivers/st/stm32_iwdg.h 167aece37d5977b1e089fe8ca13fd6357dbdd9ef - arm-trusted-firmware.t234/include/drivers/st/stm32mp_ddr_test.h d688f9d156778709e953056a9145ea0e886a0212 - arm-trusted-firmware.t234/include/drivers/st/stm32_rng.h 94f845e95797edb652183a77e906aee2b4dc0ac4 - arm-trusted-firmware.t234/include/drivers/st/stm32mp_risab_regs.h 0d3666c08830eecbed25f72f5bf0e2e46452ae94 - arm-trusted-firmware.t234/include/drivers/st/stm32mp1_clk.h ac1cd6d311e2280721ba62f9e82c10322f6dad41 - arm-trusted-firmware.t234/include/drivers/st/stm32mp_ram.h 93ec142c22c78453c81f80e362995d02ce9e72ac - arm-trusted-firmware.t234/include/drivers/st/stm32mp2_ddr.h 00445fbdee5eecf0812f44919362da05830ef471 - arm-trusted-firmware.t234/include/drivers/st/stm32_gpio.h e02eff807301ff7775369975495cad2a2082972f - arm-trusted-firmware.t234/include/drivers/st/stm32mp13_rcc.h a1716c4ae30a5bafc5deca15532ade2c621305c8 - arm-trusted-firmware.t234/include/drivers/st/stm32mp25_rcc.h ec0355e035856ac49891ebbbfb6b249439fe6bc2 - arm-trusted-firmware.t234/include/drivers/st/stm32mp1_rcc.h 4b444c3e0e1c97a21669bfd90a2dbdda942b6612 - arm-trusted-firmware.t234/include/drivers/st/stm32mp2_ddr_helpers.h f2ca7edf66b0d71fec9b893659707c7675f9d0a6 - arm-trusted-firmware.t234/include/drivers/st/regulator_fixed.h 1c35b8d1dd99e2556585b97e6c5f472b95565fd0 - arm-trusted-firmware.t234/include/drivers/amlogic/meson_console.h 598adf21c9089a664c913fb3faf852fa36dddef8 - arm-trusted-firmware.t234/include/drivers/amlogic/crypto/sha_dma.h e7c7a3a8cb786033ce9a808d8418e5a87bf520c1 - arm-trusted-firmware.t234/include/drivers/fwu/fwu_metadata.h ec9556ddda3960ab0b31236255e5ce6594fb37a2 - arm-trusted-firmware.t234/include/drivers/fwu/fwu.h 907603dcc9f90f3393201ab4a2a5c8ce32f61543 - arm-trusted-firmware.t234/include/drivers/brcm/sotp.h 5632d0130d0787f77618a2ca64d09d7bc3d2433b - arm-trusted-firmware.t234/include/drivers/brcm/usbh_xhci_regs.h 5afc35a13cf962ad7cd0f15b0532bbe11c7ad17a - arm-trusted-firmware.t234/include/drivers/brcm/ocotp.h 2dedb1c6a08bb98fab574fbb49becf23a0a40b3d - arm-trusted-firmware.t234/include/drivers/brcm/dmu.h 67ec9883d9b0ac3959b68dcf32dbf8d8fbc84bc8 - arm-trusted-firmware.t234/include/drivers/brcm/scp.h 3b8d411ed511e8d5f5cd285a04229eb0779c2609 - arm-trusted-firmware.t234/include/drivers/brcm/iproc_gpio.h 8c4e00a589a41eac59a1e3f7743e362f874b80cd - arm-trusted-firmware.t234/include/drivers/brcm/fru.h 542f2f80df9c9b264f0bfc9387e38e99ad2a9e7b - arm-trusted-firmware.t234/include/drivers/brcm/spi_flash.h 2a62cccb75603f1abe573a211d9b149826e87356 - arm-trusted-firmware.t234/include/drivers/brcm/chimp_nv_defs.h 823fbabdd578bbfbf92d8a2d68e8d7d2c3f652cd - arm-trusted-firmware.t234/include/drivers/brcm/spi.h 04cc0e519d24a6729fbf6f89e981eaf992fe19d5 - arm-trusted-firmware.t234/include/drivers/brcm/sf.h f1e9babc3d5e854ba472c64f889f2fb01138cff0 - arm-trusted-firmware.t234/include/drivers/brcm/chimp.h 40a4365490452d1db063c69f305c46be1d20e9f5 - arm-trusted-firmware.t234/include/drivers/brcm/emmc/emmc_chal_sd.h c3be01e418a0c44f650529178aabc99c5fdbef33 - arm-trusted-firmware.t234/include/drivers/brcm/emmc/emmc_api.h 5657b1337210a575a742026dfa31f3136b5bb625 - arm-trusted-firmware.t234/include/drivers/brcm/emmc/emmc_chal_types.h d6123ce1d15ed92eb457d0e0d13d66841deb34ea - arm-trusted-firmware.t234/include/drivers/brcm/emmc/emmc_pboot_hal_memory_drv.h af14073522c90e3d69b0abc31fd3a2820dc54d47 - arm-trusted-firmware.t234/include/drivers/brcm/emmc/bcm_emmc.h 38ad4c8652f178df916a5a1622fad23851187ba2 - arm-trusted-firmware.t234/include/drivers/brcm/emmc/emmc_csl_sd.h 1eaa8e808ec95a89d9c7204260d34f69b7a5a9af - arm-trusted-firmware.t234/include/drivers/brcm/emmc/emmc_csl_sdprot.h eafab2881a9d078ab544df13644c4b47b0670003 - arm-trusted-firmware.t234/include/drivers/brcm/emmc/emmc_csl_sdcmd.h 869edd881664c3e2332d5b2e6765e7dacbb0afb7 - arm-trusted-firmware.t234/include/drivers/brcm/emmc/emmc_brcm_rdb_sd4_top.h 1fa9cb75f94edc8b2efc2719b8e1b5a22193f2c9 - arm-trusted-firmware.t234/include/drivers/brcm/i2c/i2c.h ba4c82c4f42cf7c6060c7266d23de675e741a191 - arm-trusted-firmware.t234/include/drivers/brcm/i2c/i2c_regs.h 281ab6dc0343aa92cc689456d9b8b56e7e853961 - arm-trusted-firmware.t234/include/drivers/brcm/mdio/mdio.h d9fee9976962b8d9daffbf4d4cb1e7400e14c745 - arm-trusted-firmware.t234/include/drivers/ti/uart/uart_16550.h 0a1b3d82f947faafe17e0e8131765650250925d1 - arm-trusted-firmware.t234/include/drivers/measured_boot/metadata.h b7b67e52afc95aa787f658f7c186404e1a390294 - arm-trusted-firmware.t234/include/drivers/measured_boot/event_log/tcg.h ba01a6e61137d439482708c00b1dca621ec40e6c - arm-trusted-firmware.t234/include/drivers/measured_boot/event_log/event_log.h 8b55b296e3a04e92c2621860d07055a95296871c - arm-trusted-firmware.t234/include/drivers/measured_boot/rse/rse_measured_boot.h 92fc333d70d09428f3310f437da66644ca12bba4 - arm-trusted-firmware.t234/include/drivers/measured_boot/rse/dice_prot_env.h 0601d762e1bfda8d93d085ea44202fdbff2d1ad9 - arm-trusted-firmware.t234/include/drivers/allwinner/sunxi_rsb.h 1fad8ad24347aab9e6da6d46f5cf581f938d2ab8 - arm-trusted-firmware.t234/include/drivers/allwinner/axp.h 490bae640af8d15a10cc4a530a23cd51226ca709 - arm-trusted-firmware.t234/include/drivers/mentor/mi2cv.h 3fc98fd098de6cd5d82126a0b14567458879776a - arm-trusted-firmware.t234/include/drivers/nuvoton/npcm845x/npcm845x_lpuart.h d175f943d7846f236aea6dc60a56f1659533d132 - arm-trusted-firmware.t234/include/drivers/nuvoton/npcm845x/npcm845x_gcr.h e0a96a58eb7118c5efb73509500cbd7edae17df9 - arm-trusted-firmware.t234/include/drivers/nuvoton/npcm845x/npcm845x_clock.h 898f43097b2545ca29358b143d6e97761f1dbce4 - arm-trusted-firmware.t234/include/drivers/rpi3/rng/rpi3_rng.h 474323ff4ce5e5f841021bdfdaf75c9596b56e8f - arm-trusted-firmware.t234/include/drivers/rpi3/mailbox/rpi3_mbox.h 494105c3d145b645b67d5f74385addfba14f9a87 - arm-trusted-firmware.t234/include/drivers/rpi3/sdhost/rpi3_sdhost.h affa2c8404660a48bcd956f29a50e79120b1cc3b - arm-trusted-firmware.t234/include/drivers/rpi3/gpio/rpi3_gpio.h 5c2e0ca868faae2060e6a9f3bf20896783564942 - arm-trusted-firmware.t234/include/drivers/marvell/ccu.h a3de98e4cc085d3cf7d5d52931b5b3623d0a619f - arm-trusted-firmware.t234/include/drivers/marvell/mci.h d7bc8fa93e6253a8b9ef6c39613ea88489703b1f - arm-trusted-firmware.t234/include/drivers/marvell/gwin.h 000c88b50b95ab8b54fed58ab9f840b9bb69e06c - arm-trusted-firmware.t234/include/drivers/marvell/i2c.h 15475b1e40e5c5bddbfabed61f7f24162136b1f7 - arm-trusted-firmware.t234/include/drivers/marvell/amb_adec.h 69f49992d9c55ee0e777a11643d0b52001cb7622 - arm-trusted-firmware.t234/include/drivers/marvell/aro.h 02710fe143b7937c1b4fad8c1e757146513ac135 - arm-trusted-firmware.t234/include/drivers/marvell/io_win.h 2a16f04ed2b2358e61aa3683ec3d1f2b3960dd2b - arm-trusted-firmware.t234/include/drivers/marvell/cache_llc.h fd4a5e7af241c3b0572f5c9e81decf1868f17fb4 - arm-trusted-firmware.t234/include/drivers/marvell/thermal.h 9b00b75ebe2ac0600a4eb5f6e9b76c2c77e19a94 - arm-trusted-firmware.t234/include/drivers/marvell/ap807_clocks_init.h 7f1222ae6a5838bc830b1300ab199a3d42290790 - arm-trusted-firmware.t234/include/drivers/marvell/addr_map.h 6fb4915c93922ffd80c2b7082f5219b13d64a4a9 - arm-trusted-firmware.t234/include/drivers/marvell/iob.h 9fe146fde5aec71f5cc47d07590e1f76602bc9cc - arm-trusted-firmware.t234/include/drivers/marvell/mochi/ap_setup.h 80057d817a90e75ad1e4eab0e4c81c6a62aa3911 - arm-trusted-firmware.t234/include/drivers/marvell/mochi/cp110_setup.h 1bd923068f35229b4648825afdbe2d5ee74ba4fe - arm-trusted-firmware.t234/include/drivers/marvell/uart/a3700_console.h c269f40255323bed655d0c076e5fc771bee91550 - arm-trusted-firmware.t234/include/drivers/arm/cci.h 3c63f525fa4ab772695c59df263364d15f606582 - arm-trusted-firmware.t234/include/drivers/arm/sp804_delay_timer.h 8d3c051e8ba42150549dab299eca67bf73caf21d - arm-trusted-firmware.t234/include/drivers/arm/tzc_common.h 7ca64097543e0475ded88ff1b0c756ea3e68dce4 - arm-trusted-firmware.t234/include/drivers/arm/tzc400.h be5093d8f8d48610060e70ed9a8ee5602ad6739b - arm-trusted-firmware.t234/include/drivers/arm/tzc_dmc620.h e22e3fc4397a8a46024bbed29fd10f5c69f0f91f - arm-trusted-firmware.t234/include/drivers/arm/ethosn_cert.h cd54a5c35b74beeacb16c618204bb31eaa33126b - arm-trusted-firmware.t234/include/drivers/arm/gic_common.h 59b0744b90366dbe8e668e086e4b713ba9819b4d - arm-trusted-firmware.t234/include/drivers/arm/mhu.h 9d3f8d8e035f50cdbbce90c33f419ebcd7641645 - arm-trusted-firmware.t234/include/drivers/arm/smmu_v3.h ff57e2eeb8df1ea48a2e861c72cc1d2a6625dc97 - arm-trusted-firmware.t234/include/drivers/arm/gic600_multichip.h 720d4bb282dee6b7e1e9b67b67fe1b83fa342188 - arm-trusted-firmware.t234/include/drivers/arm/arm_gicv3_common.h 9110f517d301dccf65661ec7f7e288a0949710d2 - arm-trusted-firmware.t234/include/drivers/arm/gicv2.h 586ab50660410dbe5f07cfa022e918e06a86cd90 - arm-trusted-firmware.t234/include/drivers/arm/gicv3.h eb064e58fc5aaf99768b3c9f167e6a369c5d51b2 - arm-trusted-firmware.t234/include/drivers/arm/pl011.h 613fae3ba8657c4a10bd691e6b770fbac8a66f79 - arm-trusted-firmware.t234/include/drivers/arm/ethosn.h dcf945c46dc4a63e7ee5cc9932c03164682c6fa6 - arm-trusted-firmware.t234/include/drivers/arm/dcc.h 1f2f3ae5b2636732d8a2b76e04392deacdc51203 - arm-trusted-firmware.t234/include/drivers/arm/ccn.h c313d8aea2aa56300528293ebb42d4b35d46b18c - arm-trusted-firmware.t234/include/drivers/arm/nic_400.h 3ab35bb087bacfad183b03aca5ff9daf8e5285de - arm-trusted-firmware.t234/include/drivers/arm/gic600ae_fmu.h 927e3de8b90f578e6bd94aaacaf28a3b80e69af8 - arm-trusted-firmware.t234/include/drivers/arm/ethosn_fip.h 0282c52c2cf6a737b53c9bcebcd089c5bf35ab24 - arm-trusted-firmware.t234/include/drivers/arm/tzc_dmc500.h 8971a6e6b857b7b1e6544d6c3c9a52ca567a9e11 - arm-trusted-firmware.t234/include/drivers/arm/scu.h ea619e78dc1630857e7bca57a8fb64b7d45583ba - arm-trusted-firmware.t234/include/drivers/arm/pl061_gpio.h d4638973b87c8ea1c20e31d7e51bbfa76427f5ff - arm-trusted-firmware.t234/include/drivers/arm/ethosn_oid.h a77e26a53a5143d06be87ca1ea8c9ef63e38d20b - arm-trusted-firmware.t234/include/drivers/arm/sbsa.h dec10f747df4d49f38094ed6a967bb20dcbb125a - arm-trusted-firmware.t234/include/drivers/arm/rse_comms.h abaea50a4f3861dfaa3f55cba235dc00114b68f4 - arm-trusted-firmware.t234/include/drivers/arm/sp805.h 5144a08d3a80ac5dc07815f63313d04ccdf2b152 - arm-trusted-firmware.t234/include/drivers/arm/dsu.h f18d30ed876fb854340d329c32144778921ba136 - arm-trusted-firmware.t234/include/drivers/arm/tzc380.h 632aba063f65ca42a1020106d8e4ad5b5f4d3b43 - arm-trusted-firmware.t234/include/drivers/arm/fvp/fvp_cpu_pwr.h 749ed7a2a602879315a2a407faa53d9fcc6f4242 - arm-trusted-firmware.t234/include/drivers/arm/fvp/fvp_pwrc.h fdc34a2731639423ad5caeb5261f3207a4183cb1 - arm-trusted-firmware.t234/include/drivers/arm/css/css_mhu.h f0ff03dadf821eb229d5fd319d9ce4aa80d6fa49 - arm-trusted-firmware.t234/include/drivers/arm/css/css_mhu_doorbell.h 0bc296c8959e27ae44f15308fd6cbbbf09877ad7 - arm-trusted-firmware.t234/include/drivers/arm/css/scmi.h 535e22d093e44b3ec4e9ee3ec4488f3e24d37566 - arm-trusted-firmware.t234/include/drivers/arm/css/sds.h c4e97cf187b8de349d494ab89ca4f5c1a83aadc7 - arm-trusted-firmware.t234/include/drivers/arm/css/css_scpi.h cb3a4608dbc689332bbeee2134f523d78ea6fcb8 - arm-trusted-firmware.t234/include/drivers/arm/css/css_scp.h 577f82f8ee95d948f95fd9f987c46426bc7a44ce - arm-trusted-firmware.t234/include/drivers/arm/css/dsu.h 822cec46e9e5c6933e3485023cc46b593677de2b - arm-trusted-firmware.t234/include/drivers/partition/efi.h 25258725a1e16d8fbdb8890ec37895a52081155d - arm-trusted-firmware.t234/include/drivers/partition/gpt.h 1c27aa6ecf64d9c63f2e200bb4b4f34c1493e6b4 - arm-trusted-firmware.t234/include/drivers/partition/mbr.h 6d1396ba5fa197ef4e45d5c22ba3f9fbc0f3779b - arm-trusted-firmware.t234/include/drivers/partition/partition.h 5bdbb4a50cd5f8a416e729eca2cdb29c426aad61 - arm-trusted-firmware.t234/include/drivers/auth/tbbr_cot_common.h 33864a157e6cca4daf263a9c34be8d11dd7f4cd9 - arm-trusted-firmware.t234/include/drivers/auth/auth_mod.h 125b1a75a3651ff04f7dd19ba665ccb6846f3a0b - arm-trusted-firmware.t234/include/drivers/auth/auth_common.h 9944994b61704f38858e546c002827c9705d6a9d - arm-trusted-firmware.t234/include/drivers/auth/crypto_mod.h c7235a5c0dc2db938ba5586b4a94294d0c1cef98 - arm-trusted-firmware.t234/include/drivers/auth/img_parser_mod.h 8990234b68caadc3262242514364a5e4326b0c2f - arm-trusted-firmware.t234/include/drivers/auth/mbedtls/mbedtls_common.h 28917e3312696abc702730911c8f571aefd7c211 - arm-trusted-firmware.t234/include/drivers/auth/mbedtls/mbedtls_config-3.h 2be88a5767bfa725e94a39cc7f242a7d02556e56 - arm-trusted-firmware.t234/include/drivers/auth/mbedtls/psa_mbedtls_config.h 8d5bb836b8836f486476f20753a83ca09d64567e - arm-trusted-firmware.t234/include/drivers/coreboot/cbmem_console.h 04830d2bd9eaac4d5ab2cf414e66ae7439c3832d - arm-trusted-firmware.t234/include/drivers/cfi/v2m_flash.h 6092827f0eb5f3c784b6a1da04df8d26918b01c5 - arm-trusted-firmware.t234/include/drivers/renesas/rcar/console/console.h 56618eda200d872addc06447897a8b7ec619ffb8 - arm-trusted-firmware.t234/include/drivers/nxp/pmu/pmu.h 69289264b7a28a5ce23aa04ce828d8b4af255860 - arm-trusted-firmware.t234/include/drivers/nxp/flexspi/xspi_error_codes.h 7989591e2a2162069486ebab7e2728208c51b5c2 - arm-trusted-firmware.t234/include/drivers/nxp/flexspi/fspi_api.h ce837ddd809c0d8f381cefc82d212e9a1a20209b - arm-trusted-firmware.t234/include/drivers/nxp/flexspi/flash_info.h d0fc8c7cc714365c4b36dc3b12083432b0173dd3 - arm-trusted-firmware.t234/include/drivers/nxp/ddr/immap.h 190e1845f17fd2f9c9e7fdcb31f62f22735c2401 - arm-trusted-firmware.t234/include/drivers/nxp/ddr/ddr.h 2b66abb34254db06ee8c88f5e0596c908b2d2026 - arm-trusted-firmware.t234/include/drivers/nxp/ddr/utility.h 90e8213c057c2449b5ba645b49e85458c0dc2e43 - arm-trusted-firmware.t234/include/drivers/nxp/ddr/dimm.h f76687e9c42877c6684b9f0f42809be11e898f2e - arm-trusted-firmware.t234/include/drivers/nxp/ddr/opts.h a38ba636dc7402ba5f0f12fac9db9813190a8c39 - arm-trusted-firmware.t234/include/drivers/nxp/ddr/regs.h 3b20fa259fde3f160db7996e9571edfc5ab34bc5 - arm-trusted-firmware.t234/include/drivers/nxp/ddr/ddr_io.h d8d9fce57d178fdfd41f5be63879bfa85d2e2e15 - arm-trusted-firmware.t234/include/drivers/nxp/ddr/fsl-mmdc/fsl_mmdc.h f3d0781d23ad253eaa32fa12188b96f6ff7f7c21 - arm-trusted-firmware.t234/include/drivers/nxp/trdc/imx_trdc.h b0e9643a90314ef89452944214806403f53b7b54 - arm-trusted-firmware.t234/include/drivers/nxp/tzc/plat_tzc400.h 225ffbb6a71c970da33f40390a7828768770c824 - arm-trusted-firmware.t234/include/drivers/nxp/tzc/plat_tzc380.h cd9ce08e3ca357e9ac083fd384e2ffd154288032 - arm-trusted-firmware.t234/include/drivers/nxp/ifc/ifc_nand.h 7f0601b767be7522d2b3b053924b860224900737 - arm-trusted-firmware.t234/include/drivers/nxp/ifc/ifc_nor.h 46896393ac73e49d174031ad9db2b897a5a53cd5 - arm-trusted-firmware.t234/include/drivers/nxp/timer/nxp_timer.h e81281948e932f6635309e0cc817672144dd5cc1 - arm-trusted-firmware.t234/include/drivers/nxp/dcfg/scfg.h 95b4d87dfcfc29bdf2b6cd0bbb06749112243507 - arm-trusted-firmware.t234/include/drivers/nxp/dcfg/dcfg_lsch3.h 790d112d19d7a6e2b58c8256026f25a6d42fd2b0 - arm-trusted-firmware.t234/include/drivers/nxp/dcfg/dcfg_lsch2.h a059599e81d888a5c020f1d4bd2ea749cb34cfd3 - arm-trusted-firmware.t234/include/drivers/nxp/dcfg/dcfg.h 6bf47fe3a98b2ab7b4d85b0d215dc3fc77bfd5fc - arm-trusted-firmware.t234/include/drivers/nxp/clk/s32cc/s32cc-clk-drv.h a0a5bbf66958dd28e6f267fc987b5c80647c13e7 - arm-trusted-firmware.t234/include/drivers/nxp/clk/s32cc/s32cc-clk-modules.h 904d7155214972eb694f86413740709b10037d5a - arm-trusted-firmware.t234/include/drivers/nxp/clk/s32cc/s32cc-clk-utils.h ccda6ed8b9a6994a8269e638b80d5cfc65030862 - arm-trusted-firmware.t234/include/drivers/nxp/clk/s32cc/s32cc-clk-ids.h 2388bdc4442c2695122e844d49738f95b18a84cf - arm-trusted-firmware.t234/include/drivers/nxp/csu/csu.h 3d4947f956585eb9cfe3b8245ad4c1749cdc72b1 - arm-trusted-firmware.t234/include/drivers/nxp/sec_mon/snvs.h be8a6b00a6db26fef151d90020cd12c856e4cacd - arm-trusted-firmware.t234/include/drivers/nxp/i2c/i2c.h 6728d8e96ff826363de0599ff76662615aff4495 - arm-trusted-firmware.t234/include/drivers/nxp/smmu/nxp_smmu.h 4453a2af06ed170ae6c69f42b415c69314fd3d9b - arm-trusted-firmware.t234/include/drivers/nxp/auth/csf_hdr_parser/csf_hdr.h 3584254639e10b77ffd6ccf07f7a59923b337ffe - arm-trusted-firmware.t234/include/drivers/nxp/sfp/sfp_error_codes.h f75c54f08edcc8069804184e40a6d8a74d3d1b42 - arm-trusted-firmware.t234/include/drivers/nxp/sfp/sfp.h b6baa4f2facaae8fcb1873db219796f86e62cbbf - arm-trusted-firmware.t234/include/drivers/nxp/sfp/fuse_prov.h 07aabe0c38fbe8ae82313542589e8b6013f0a704 - arm-trusted-firmware.t234/include/drivers/nxp/qspi/qspi.h 26748e486ff05a3ed33d842cba65e4fecc362aae - arm-trusted-firmware.t234/include/drivers/nxp/gpio/nxp_gpio.h 91adf35b394ad394248624343b9c5b19fa0c2b09 - arm-trusted-firmware.t234/include/drivers/nxp/crypto/caam/jobdesc.h 460f93da77ff4c52f61d06eca41dc83c56a92b6d - arm-trusted-firmware.t234/include/drivers/nxp/crypto/caam/rsa.h fc12ffe1d77603728f2c875a296218ae6cddb095 - arm-trusted-firmware.t234/include/drivers/nxp/crypto/caam/caam_io.h 2c95c38a7f65a3ef7eb3992c7136879ef75e4c7a - arm-trusted-firmware.t234/include/drivers/nxp/crypto/caam/caam.h bf836adf23266f3749b5e68af59a31d0ac0ea00a - arm-trusted-firmware.t234/include/drivers/nxp/crypto/caam/jr_driver_config.h 73881c702f6406ba2b1b8c27d971def3ee82c536 - arm-trusted-firmware.t234/include/drivers/nxp/crypto/caam/sec_hw_specific.h 6aca6b25773c577244b03cc1808576ad5690b43e - arm-trusted-firmware.t234/include/drivers/nxp/crypto/caam/hash.h 228ca5e5fa8c0d1d3cc53a244e2c381d51670d37 - arm-trusted-firmware.t234/include/drivers/nxp/crypto/caam/sec_jr_driver.h 141c6ec9750c86044338eb19ee622331b9a6c0d8 - arm-trusted-firmware.t234/include/drivers/nxp/gic/gicv2/plat_gic.h ad1aee42247671abf00ceef8e5ddff7485a73431 - arm-trusted-firmware.t234/include/drivers/nxp/gic/gicv3/plat_gic.h eb200bcc06472d689f3a7419f0710c4c3d8ce0c5 - arm-trusted-firmware.t234/include/drivers/nxp/interconnect/ls_interconnect.h 68d8b9e0ef5c3de1c94d08b1bf5b29ee86e6d789 - arm-trusted-firmware.t234/include/drivers/nxp/console/linflex.h 4229b536f33d8f4775076953d8c91ea47ad378a5 - arm-trusted-firmware.t234/include/drivers/nxp/console/plat_console.h aabedc9062342279b677c72861038190cfa65939 - arm-trusted-firmware.t234/include/drivers/nxp/sd/sd_mmc.h ddd09be972db2607bb424326a6c8fbb441dbfec2 - arm-trusted-firmware.t234/include/drivers/rambus/trng_ip_76.h d5f0d5657c05d4db657c9eab2135b55d9a63681e - arm-trusted-firmware.t234/include/services/errata_abi_svc.h 53e733abf11ec08954e5e64474973896323d428b - arm-trusted-firmware.t234/include/services/arm_arch_svc.h 5e2a19487a294a8dad5414d19f9c0c85087d8c54 - arm-trusted-firmware.t234/include/services/rmmd_svc.h 5e271ba2d6a1da2a91ebb078e098212e77367d9b - arm-trusted-firmware.t234/include/services/rmm_core_manifest.h 0949879ec23b9fb4044e60fd409382828d876ad5 - arm-trusted-firmware.t234/include/services/drtm_svc.h 67e4a45c798bef1bbe502f0504fb69be6cbf078b - arm-trusted-firmware.t234/include/services/el3_spmc_logical_sp.h d9a9da03c54f05866b67c7b3fd705516769bb237 - arm-trusted-firmware.t234/include/services/spmd_svc.h 9932b2ceddde6219cef91f07882c64491f075898 - arm-trusted-firmware.t234/include/services/el3_spmc_ffa_memory.h dca26a0fd95477dc2bc43962955e0e787d5246d5 - arm-trusted-firmware.t234/include/services/ffa_svc.h 044fd37b7fd59463f04ad79fcc4f71087f72ed36 - arm-trusted-firmware.t234/include/services/ven_el3_svc.h 583482e243ae52386041c084650c8579a1f113ab - arm-trusted-firmware.t234/include/services/std_svc.h 68410e63432d33f0661dc522bdffc99b13f92cd0 - arm-trusted-firmware.t234/include/services/spmc_svc.h c322c63ec8512fae64ddf64b16f555410861459c - arm-trusted-firmware.t234/include/services/sdei.h 1eb4a1f5a6bf7a9fcfa1d44708b5d6a83fe45f47 - arm-trusted-firmware.t234/include/services/rmm_el3_token_sign.h 3b7a4c6d6c8ce3c42694e589dd7dd5d4ed7a4ced - arm-trusted-firmware.t234/include/services/spm_mm_svc.h 00f5eb914a9fb45bcaa8e031ece97c7ee6156a1b - arm-trusted-firmware.t234/include/services/el3_spmd_logical_sp.h bd59ae9370224873185cfa4dfc1459db223f86d3 - arm-trusted-firmware.t234/include/services/spm_core_manifest.h d3bd4cf8e1c91ab4b8019456b7e19c3fd4675567 - arm-trusted-firmware.t234/include/services/spm_mm_partition.h f9e8e6beb1285dc1b188488dc9a217ba805b04e1 - arm-trusted-firmware.t234/include/services/pci_svc.h 6b3525de0de5c707191677733b6c49dba80eed96 - arm-trusted-firmware.t234/include/services/sdei_flags.h e7744d6577eca544cbed5801a58c554d3de82c3b - arm-trusted-firmware.t234/include/services/trng_svc.h 87c4dab05fb90823aa91db0064a505c73934bfb6 - arm-trusted-firmware.t234/include/services/oem/chromeos/widevine_smc_handlers.h 35193066698605d65535ee44d2eb5966e053a6a6 - arm-trusted-firmware.t234/include/services/trp/trp_helpers.h 071412578138bc1523eccf975c76a151e09d71cf - arm-trusted-firmware.t234/include/services/trp/platform_trp.h e1699b761cd12de148f701d78db5c24eb3aa7251 - arm-trusted-firmware.t234/include/export/README 227136c75da926f42a01d64eac35d8f89b921c83 - arm-trusted-firmware.t234/include/export/lib/utils_def_exp.h 7bff667c85a700215ff99fc138eead181095b229 - arm-trusted-firmware.t234/include/export/lib/bl_aux_params/bl_aux_params_exp.h 60669a2cabdf40b63773d538d47861c1a584f800 - arm-trusted-firmware.t234/include/export/common/param_header_exp.h 9e9bd7336b20288fec4baabb6bf465e2848287e4 - arm-trusted-firmware.t234/include/export/common/bl_common_exp.h 45ecabce41da084db92b27dd88e6e89f30506036 - arm-trusted-firmware.t234/include/export/common/ep_info_exp.h 351d76abe51b5b2ba40aa7c5097998ee4bc8c94c - arm-trusted-firmware.t234/include/export/common/tbbr/tbbr_img_def_exp.h 9367cefce0520648ccdaad1fe3a402422becdf55 - arm-trusted-firmware.t234/include/export/drivers/gpio_exp.h dcd0ca426668c19ab921df2fefbf2d83ca5afdd8 - arm-trusted-firmware.t234/include/export/plat/rockchip/common/plat_params_exp.h 9bb9fdc2ec0963a6cbbd0188ae70e368e67755f2 - arm-trusted-firmware.t234/include/export/plat/mediatek/common/plat_params_exp.h 54218b425b31488a3d21ea77ebc04bfb2106f022 - arm-trusted-firmware.t234/include/bl31/interrupt_mgmt.h 63d21ebfe4cd4f246055a154212896dc1de385e1 - arm-trusted-firmware.t234/include/bl31/bl31.h d379c40dad7a3334a176776669c65f300b7cba1d - arm-trusted-firmware.t234/include/bl31/sync_handle.h e53e05c12f386bf240e72039e4f1a8dbe5b62ef3 - arm-trusted-firmware.t234/include/bl31/ehf.h 878086fb0fb552820c010678949e1106849e4390 - arm-trusted-firmware.t234/include/bl31/ea_handle.h d7f8e1c595627094eb1807e5f15cbb7674cb02d5 - arm-trusted-firmware.t234/include/plat/brcm/common/bcm_console.h 5d91bb2b767050d467d072d4e6d7036d8c71d06a - arm-trusted-firmware.t234/include/plat/brcm/common/bcm_elog.h 0ad5bfa2837c10aafe72e696c238db4ebd82794f - arm-trusted-firmware.t234/include/plat/brcm/common/plat_brcm.h e639b2614ce8c77a52995ee2da45fe54fbb8dc2e - arm-trusted-firmware.t234/include/plat/brcm/common/brcm_def.h 3b3d4fc03681e33f7a50ae1a02df45e3017536c2 - arm-trusted-firmware.t234/include/plat/common/platform.h 5541395456950f86b55e89c94c1bf99c79649178 - arm-trusted-firmware.t234/include/plat/common/common_def.h 9cd1950e6a5ff8b2dcd0143c1dfe498c7804a1f0 - arm-trusted-firmware.t234/include/plat/common/plat_trng.h 3eb57bdf4c6bb7a748f8d3560e2db9a39cf8a444 - arm-trusted-firmware.t234/include/plat/common/plat_drtm.h 0453964dafe11ddc99cbaa5f831f57ea35bdfc3d - arm-trusted-firmware.t234/include/plat/nuvoton/common/plat_macros.S 7c5b08c03256a59144c3ea24d00440f96711cc7b - arm-trusted-firmware.t234/include/plat/nuvoton/common/plat_npcm845x.h 405835fa7bf565ae68af973893b2d1ec157628cd - arm-trusted-firmware.t234/include/plat/nuvoton/common/npcm845x_arm_def.h e8f7c4e59944d087e03a961edd0bf58338868c4a - arm-trusted-firmware.t234/include/plat/nuvoton/npcm845x/platform_def.h 9dd486928223e599a25bc6f13b414fc57c242b36 - arm-trusted-firmware.t234/include/plat/marvell/armada/common/marvell_pm.h 8cdfa6f8ca1d681ba760da2fe49c8f365ef0dcbe - arm-trusted-firmware.t234/include/plat/marvell/armada/common/marvell_plat_priv.h dc4318dff472842b4c63c7b87f23c3688def3c5a - arm-trusted-firmware.t234/include/plat/marvell/armada/common/mvebu.h b7faf2c71aa5d9ab793eadfeb28cd9effe284930 - arm-trusted-firmware.t234/include/plat/marvell/armada/common/aarch64/marvell_macros.S e2d034b7bbecdf28360fcf107159eae0bf87de48 - arm-trusted-firmware.t234/include/plat/marvell/armada/common/aarch64/cci_macros.S 48923d6fcb9d9e02790b158b5eaf6edb34db109d - arm-trusted-firmware.t234/include/plat/marvell/armada/a8k/common/efuse_def.h 36e0657b50b40ad54b3ef6b8b6848377fa423ee2 - arm-trusted-firmware.t234/include/plat/marvell/armada/a8k/common/marvell_def.h 79fec062b150f074e53c3a4b1987aea42e5a4eff - arm-trusted-firmware.t234/include/plat/marvell/armada/a8k/common/board_marvell_def.h 6e72bb219cdd7c32b97b3df3a2fd695dab5d6fc4 - arm-trusted-firmware.t234/include/plat/marvell/armada/a8k/common/plat_pm_trace.h f1567dc5b7ad98ac1f602cf6a7ec37025de4b2b5 - arm-trusted-firmware.t234/include/plat/marvell/armada/a8k/common/plat_marvell.h 5eb5b60a95f1d5821d119a38a870719cd6345ca8 - arm-trusted-firmware.t234/include/plat/marvell/armada/a8k/common/armada_common.h 98c1515593c3e784076edd107c7aa20f26d00900 - arm-trusted-firmware.t234/include/plat/marvell/armada/a3k/common/marvell_def.h 71dfe89c5f0b7453c5e1af8a81c440aea8ecb34b - arm-trusted-firmware.t234/include/plat/marvell/armada/a3k/common/board_marvell_def.h 618289fd2c98548dbc401a283df9d3c6386ce002 - arm-trusted-firmware.t234/include/plat/marvell/armada/a3k/common/plat_marvell.h e6b0db0b8079bfb25c6c3257a0bc6403591a354f - arm-trusted-firmware.t234/include/plat/marvell/armada/a3k/common/armada_common.h 6b8b6142495594151c9bf95b833ae1fed31b2acd - arm-trusted-firmware.t234/include/plat/arm/common/plat_arm.h eb2f94f2fc7e75343b6ebf27607b356ad90cdb7f - arm-trusted-firmware.t234/include/plat/arm/common/arm_fconf_getter.h 0444d295542ff65443ad5441379b36ed93ddec16 - arm-trusted-firmware.t234/include/plat/arm/common/arm_tzc_dram.ld.S 0f8490b0f289e779f2e59c9e8836e8b8c4bfecf0 - arm-trusted-firmware.t234/include/plat/arm/common/fconf_ethosn_getter.h f20a51a1c34de075ae5674f2e95caf0d5dece0d7 - arm-trusted-firmware.t234/include/plat/arm/common/arm_def.h 971368d067997c8cf7b990346646cedab7fb9189 - arm-trusted-firmware.t234/include/plat/arm/common/fconf_nv_cntr_getter.h 0b4ac0e5a8fcfccc88106198b0a7624ed441d620 - arm-trusted-firmware.t234/include/plat/arm/common/arm_reclaim_init.ld.S 44ce8058a0b197c5c89e419bcebc0ddcd8434c36 - arm-trusted-firmware.t234/include/plat/arm/common/arm_spm_def.h 36a2614776249ab76e9c86d1f08fd0057bab8263 - arm-trusted-firmware.t234/include/plat/arm/common/arm_config.h 9614eaaa389957bca1a0ff86c9bd4d31a96fec4d - arm-trusted-firmware.t234/include/plat/arm/common/fconf_arm_sp_getter.h 0afd9c0926d88821488dcd5686914fd1ccee3763 - arm-trusted-firmware.t234/include/plat/arm/common/fconf_sdei_getter.h 52ec8dd66179e3ae0ad762addce7fd4f089d0c09 - arm-trusted-firmware.t234/include/plat/arm/common/arm_sip_svc.h fdc727288dd453b4dcf18b744fc052a039bed405 - arm-trusted-firmware.t234/include/plat/arm/common/arm_dyn_cfg_helpers.h 88fe915ca8ec7f1f3499a57f534e1396c6b7c98e - arm-trusted-firmware.t234/include/plat/arm/common/smccc_def.h f0fb541bb623a169168129c94b788f2a409ffb5b - arm-trusted-firmware.t234/include/plat/arm/common/fconf_sec_intr_config.h 85db4d68c709e11a4b63da0a434f5aeeef2aadec - arm-trusted-firmware.t234/include/plat/arm/common/arm_fconf_io_storage.h d7d30c230872f198ef033604c86c18f647b31d74 - arm-trusted-firmware.t234/include/plat/arm/common/aarch64/arm_macros.S 657f1176fd4f82dc1155d86438b6fbf624d2747a - arm-trusted-firmware.t234/include/plat/arm/common/aarch64/cci_macros.S c7716674546efed045f85590687f4ea16fb69cf2 - arm-trusted-firmware.t234/include/plat/arm/board/common/v2m_def.h b78713365fafdc5de5fa6456e10e901ce9f1d63a - arm-trusted-firmware.t234/include/plat/arm/board/common/board_css_def.h 9a04e8139bec9c1c1a869b61677c285a5cf75360 - arm-trusted-firmware.t234/include/plat/arm/board/common/rotpk/rotpk_def.h 40577c7bc2464cf873f1f2708e2db8112b51374f - arm-trusted-firmware.t234/include/plat/arm/board/fvp_r/fvp_r_bl1.h faf44d2a7589fe39f462d8b88f1d1283e1356a89 - arm-trusted-firmware.t234/include/plat/arm/css/common/css_pm.h d96e2b0bdc8334ba16cb927ced08fa35429756f6 - arm-trusted-firmware.t234/include/plat/arm/css/common/css_def.h 406bbb095f6bf7f140e7814e98b0ea99062ad767 - arm-trusted-firmware.t234/include/plat/arm/css/common/aarch64/css_macros.S a4c302b222e019205abf65fd01745d571d810ce7 - arm-trusted-firmware.t234/include/plat/arm/soc/common/soc_css_def.h 64f1e7c2408515cbabe2321cf6584901213dcf2b - arm-trusted-firmware.t234/include/plat/arm/soc/common/soc_css.h 82ebb1410abf7bba3feac4c77c2c037cdeb2e516 - arm-trusted-firmware.t234/include/tools_share/tbbr_oid.h a2952e3c640dc139fca004a8c8a7deb15240f89d - arm-trusted-firmware.t234/include/tools_share/uuid.h 62c2a3a060cdbd680f1b31d48c8b123249703474 - arm-trusted-firmware.t234/include/tools_share/cca_oid.h b8ded722f2969756096f51971579a3ed97e61d8b - arm-trusted-firmware.t234/include/tools_share/firmware_image_package.h b279cf845b5ea6ce93f6563029c2dfbe6f85a541 - arm-trusted-firmware.t234/include/tools_share/firmware_encrypted.h 32f9501e9d5148993460f9531c0f9d92df14bdab - arm-trusted-firmware.t234/include/tools_share/dualroot_oid.h de295596622d15f9ecd1572d4846bc0919d025f1 - arm-trusted-firmware.t234/include/tools_share/zero_oid.h 11335e71ce700055225b4223bb4218122db63853 - arm-trusted-firmware.t234/include/bl2u/bl2u.h 7273d964e77dcc8a6e552832ca8c5de3038ef5d8 - arm-trusted-firmware.t234/include/bl1/bl1.h f3d565fadbf6176b3034b8359d22fa8c03772f95 - arm-trusted-firmware.t234/include/bl1/tbbr/tbbr_img_desc.h 76f24b5df32a33ff953257acc268f140bef007d8 - arm-trusted-firmware.t234/include/bl2/bl2.h 0fc051c6d2c2e54cfe39b37cf1a1f85f883f31e3 - arm-trusted-firmware.t234/drivers/usb/usb_device.c 8e0afaebcd5d1ed41d30457bdb8543f3617640eb - arm-trusted-firmware.t234/drivers/synopsys/emmc/dw_mmc.c 1d5e94fb3b734e7c9eb7b1628230f3d140a8e958 - arm-trusted-firmware.t234/drivers/synopsys/ufs/dw_ufs.c de86764a266f7d9ba74ff8dfc3d6fd4de4585028 - arm-trusted-firmware.t234/drivers/cadence/nand/cdns_nand.c 6d1e66537a325ebf6dcf66cffcf5a40b1442aa66 - arm-trusted-firmware.t234/drivers/cadence/emmc/cdns_sdmmc.c a15e1156390f1cc3df2e59e7a3d6c4dad616ef58 - arm-trusted-firmware.t234/drivers/cadence/uart/aarch64/cdns_console.S f143de1695a99ae99ca76b78ac88d5f59cf55b70 - arm-trusted-firmware.t234/drivers/cadence/combo_phy/cdns_combo_phy.c bb264060cf147f5fd4feae216d66ad8c9c66f891 - arm-trusted-firmware.t234/drivers/io/io_fip.c 88a6a7b48a8b3da04a2a2bb9d5bcb70f03c372d3 - arm-trusted-firmware.t234/drivers/io/io_encrypted.c 78ab979470824d9703736ca6da3735d7c11fcba1 - arm-trusted-firmware.t234/drivers/io/io_mtd.c 78d0bb21fe92f684f28119691c173b36006dbbb5 - arm-trusted-firmware.t234/drivers/io/io_semihosting.c 57f2e633e1eb7033f947a8941e4075277676a772 - arm-trusted-firmware.t234/drivers/io/io_block.c 858e3130488ef425faa5341098347a0cd446a49d - arm-trusted-firmware.t234/drivers/io/io_memmap.c 2975f82e852f74ac877b00bfa9bcaa8c3baec7e2 - arm-trusted-firmware.t234/drivers/io/io_storage.c e2cb4156c1827efffb1df9f58444367c633e937e - arm-trusted-firmware.t234/drivers/st/usb/stm32mp1_usb.c a9d894b2465b17dff1217d99ed6752861aadc069 - arm-trusted-firmware.t234/drivers/st/iwdg/stm32_iwdg.c ba57d0e9281c16aea03f7b413dd8d5130590ca78 - arm-trusted-firmware.t234/drivers/st/regulator/regulator_fixed.c 28df04397d864bf295cf671c4fdf6480ead9ebf6 - arm-trusted-firmware.t234/drivers/st/regulator/regulator_core.c e51daf8420a9723e7f6316ad730d9958b8eee945 - arm-trusted-firmware.t234/drivers/st/reset/stm32mp1_reset.c ca75b9b89c38c7236ef4b778fb335520a061690e - arm-trusted-firmware.t234/drivers/st/reset/stm32mp2_reset.c bc36df3e1aab86d54e4da7b346a5ecf061aba4d2 - arm-trusted-firmware.t234/drivers/st/ddr/stm32mp2_ddr.c a3e93da01690cfc6cdf2c2fcba5d2049393b636b - arm-trusted-firmware.t234/drivers/st/ddr/stm32mp1_ddr.c c4bd4841d1ec9b03400ebd80a95b275f87c4e2e9 - arm-trusted-firmware.t234/drivers/st/ddr/stm32mp_ddr_test.c 06c5cac3c4dc6f1fb28c9d492e26764aeed6e5c1 - arm-trusted-firmware.t234/drivers/st/ddr/stm32mp2_ram.c a83b9f3419972fd8fa4dd0b4a2283cd520ec02b6 - arm-trusted-firmware.t234/drivers/st/ddr/stm32mp1_ram.c 1a36563147f46fb25349af0f621e6d07a6652e01 - arm-trusted-firmware.t234/drivers/st/ddr/stm32mp_ram.c 88fb79719982f0a2687d7f693109e940e3cdba9f - arm-trusted-firmware.t234/drivers/st/ddr/stm32mp1_ddr_helpers.c 79ac5bad2aa2d36fc9f944ac60f4d2a9cb9d7f22 - arm-trusted-firmware.t234/drivers/st/ddr/stm32mp_ddr.c 94b1c621559516e9f7bc38ced139bfa59ae68738 - arm-trusted-firmware.t234/drivers/st/ddr/stm32mp2_ddr_helpers.c e91733fe30643314963f06300e6bad239081ab54 - arm-trusted-firmware.t234/drivers/st/ddr/phy/phyinit/include/ddrphy_phyinit_struct.h e4339c00ef3e1911c0edb8292dedb4433ea03896 - arm-trusted-firmware.t234/drivers/st/ddr/phy/phyinit/include/ddrphy_csr_all_cdefines.h cbd7f59b9b731f2ed656f86be5272525b522eac3 - arm-trusted-firmware.t234/drivers/st/ddr/phy/phyinit/include/ddrphy_phyinit.h 15188c1c541069e89faa5f64e4dc08d0e76048ba - arm-trusted-firmware.t234/drivers/st/ddr/phy/phyinit/include/ddrphy_wrapper.h d042546c7374b5983d7868419dcf51d9fa7d5907 - arm-trusted-firmware.t234/drivers/st/ddr/phy/phyinit/include/ddrphy_phyinit_usercustom.h 8be0f26424d94a91abd74a2f52fa4cf3f9f7b4e9 - arm-trusted-firmware.t234/drivers/st/ddr/phy/phyinit/src/ddrphy_phyinit_writeoutmem.c 3f4edb56d379143fc169a7895eb9463e4ca5dd8e - arm-trusted-firmware.t234/drivers/st/ddr/phy/phyinit/src/ddrphy_phyinit_g_execfw.c 9270cd446591ebb71879014d5ce835ef6a3e3382 - arm-trusted-firmware.t234/drivers/st/ddr/phy/phyinit/src/ddrphy_phyinit_reginterface.c 6b87cef9770627c0db78df6aa5e43b09266edc06 - arm-trusted-firmware.t234/drivers/st/ddr/phy/phyinit/src/ddrphy_phyinit_mapdrvstren.c 681a811063b931c4353716f1dfcbc1e3fdf1209f - arm-trusted-firmware.t234/drivers/st/ddr/phy/phyinit/src/ddrphy_phyinit_i_loadpieimage.c b01bd99bcfb46dab47599b96d34f62c790430b86 - arm-trusted-firmware.t234/drivers/st/ddr/phy/phyinit/src/ddrphy_phyinit_c_initphyconfig.c 9a9498723ed191b598fdef1a60a6ca8d2fccadb8 - arm-trusted-firmware.t234/drivers/st/ddr/phy/phyinit/src/ddrphy_phyinit_isdbytedisabled.c 3e41c92f329c5c3c1dcc16c3c0889c28f876824a - arm-trusted-firmware.t234/drivers/st/ddr/phy/phyinit/src/ddrphy_phyinit_softsetmb.c 523c4ba82c336ecc7192fdcba6f6437b52ec538b - arm-trusted-firmware.t234/drivers/st/ddr/phy/phyinit/src/ddrphy_phyinit_sequence.c bad0a5738b435c5ce04f87f28431fc928afd83bb - arm-trusted-firmware.t234/drivers/st/ddr/phy/phyinit/src/ddrphy_phyinit_restore_sequence.c 9a24a8abb764c8309ed6ba3254c8220ef11a95b3 - arm-trusted-firmware.t234/drivers/st/ddr/phy/phyinit/src/ddrphy_phyinit_f_loaddmem.c 293d20b81d06fde0cc7a514106ba455486d01dfe - arm-trusted-firmware.t234/drivers/st/ddr/phy/phyinit/src/ddrphy_phyinit_progcsrskiptrain.c a4a756f94233847922fab110572b98a17fe58e92 - arm-trusted-firmware.t234/drivers/st/ddr/phy/phyinit/src/ddrphy_phyinit_initstruct.c f6de97e9190e355fc0e68dac3a8dcead89a5ed56 - arm-trusted-firmware.t234/drivers/st/ddr/phy/phyinit/src/ddrphy_phyinit_d_loadimem.c 47ebf6529b756e089f5be821c8bd03b4fcc749cf - arm-trusted-firmware.t234/drivers/st/ddr/phy/phyinit/src/ddrphy_phyinit_loadpieprodcode.c 4e96f1ba1de4fdcc59556a323679b6af929337fd - arm-trusted-firmware.t234/drivers/st/ddr/phy/phyinit/src/ddrphy_phyinit_calcmb.c 925f7801402e2286ee44916d26163ca139336e0b - arm-trusted-firmware.t234/drivers/st/ddr/phy/phyinit/usercustom/ddrphy_phyinit_usercustom_custompretrain.c d24f8f068b4212001e1654e987f4265ef04ed7d9 - arm-trusted-firmware.t234/drivers/st/ddr/phy/phyinit/usercustom/ddrphy_phyinit_usercustom_saveretregs.c 9f3a1a734251ef8283528360145f7bb0d5dd9472 - arm-trusted-firmware.t234/drivers/st/ddr/phy/phyinit/usercustom/ddrphy_phyinit_usercustom_g_waitfwdone.c bc064e1eb42924f6d78d09efc5f5735c89bfb5f9 - arm-trusted-firmware.t234/drivers/st/ddr/phy/firmware/include/mnpmusrammsgblock_ddr3.h 107dafc8bf1a248ea36c6fec47ff22ff45c80398 - arm-trusted-firmware.t234/drivers/st/ddr/phy/firmware/include/mnpmusrammsgblock_ddr4.h d621605a5e754b03cc0f554c59f1a584718cc011 - arm-trusted-firmware.t234/drivers/st/ddr/phy/firmware/include/mnpmusrammsgblock_lpddr4.h 3115ec9f675484992db63c431789119715bababf - arm-trusted-firmware.t234/drivers/st/etzpc/etzpc.c 42561883ec1c33fa7b8c4134042881d8af161697 - arm-trusted-firmware.t234/drivers/st/uart/stm32_uart.c 5c221c34c749136d97bb6edf5a142ed4acbd4a6a - arm-trusted-firmware.t234/drivers/st/uart/aarch64/stm32_console.S 32b7a019782c8ef8bf21c0e5d04837b1c2e2bf42 - arm-trusted-firmware.t234/drivers/st/uart/aarch32/stm32_console.S d6de335f0f78631bd2dc0c0f276150b3f4ee7e67 - arm-trusted-firmware.t234/drivers/st/clk/stm32mp1_clk.c 154695f6902ccb434ff28e481ce091bb447ef737 - arm-trusted-firmware.t234/drivers/st/clk/clk-stm32mp13.c 11ac92b2c904e2ff8bdfd046ea5f7ab3de00f72c - arm-trusted-firmware.t234/drivers/st/clk/clk-stm32mp2.c 358fd5d2f081a4fdb3889692ffc8dcc5e164fd82 - arm-trusted-firmware.t234/drivers/st/clk/stm32mp_clkfunc.c e125a59bd3e2883b74f8e43ec0317199c048cc2d - arm-trusted-firmware.t234/drivers/st/clk/clk-stm32-core.c c4ea62db8c5d7af5b1ef01e498eb9ac517db96b0 - arm-trusted-firmware.t234/drivers/st/clk/clk-stm32-core.h 4c4d4c64134fd1ce5445e2904ce33078ca58c880 - arm-trusted-firmware.t234/drivers/st/bsec/bsec3.c 1c09806390d2cef5014c3b464bab86f69b2dce5c - arm-trusted-firmware.t234/drivers/st/bsec/bsec2.c 8d38f1b27715b1c0de5a506228b4ceadb9fbcf67 - arm-trusted-firmware.t234/drivers/st/i2c/stm32_i2c.c 7cd712709ee54122f0bf0cc5f0eff50166a1a8e7 - arm-trusted-firmware.t234/drivers/st/spi/stm32_qspi.c 1093a85f97932dfdecd136b4975a52727761cc6a - arm-trusted-firmware.t234/drivers/st/gpio/stm32_gpio.c dc6e11a7d7178876069b6fd73f0d1c2fb8ff3b4b - arm-trusted-firmware.t234/drivers/st/crypto/stm32_hash.c 7948a66270e2843aa9f4495bd4cfc265235ef8fb - arm-trusted-firmware.t234/drivers/st/crypto/stm32_pka.c 382ff1c003cc8bb1b74eed273df2867cd2fcb542 - arm-trusted-firmware.t234/drivers/st/crypto/stm32_saes.c 469e7a2a432b90598edcba60353c76bab1f0b610 - arm-trusted-firmware.t234/drivers/st/crypto/stm32_rng.c def00bc3c52b54611ea6f11a6f5206cf0b3cc08a - arm-trusted-firmware.t234/drivers/st/fmc/stm32_fmc2_nand.c 85cdca7a46d03b70a8ed574a0b54f15711a12718 - arm-trusted-firmware.t234/drivers/st/pmic/stm32mp_pmic.c 2a66f83e8ddaa5a037560b4d32169bf8405a6d46 - arm-trusted-firmware.t234/drivers/st/pmic/stpmic2.c dc5909c790f8267bcb9bbc047b904810550cb78b - arm-trusted-firmware.t234/drivers/st/pmic/stpmic1.c 700f6a5dc99a45431afda631f5d60881748f045a - arm-trusted-firmware.t234/drivers/st/pmic/stm32mp_pmic2.c b21d240b08ae042432be992f45eca2560b6dcc75 - arm-trusted-firmware.t234/drivers/st/mmc/stm32_sdmmc2.c 583e038383081fb802062fbb6ad8c3e3060afba4 - arm-trusted-firmware.t234/drivers/amlogic/crypto/sha_dma.c 340cdc84fe5f8c1acf791cadabca087b200a4ad5 - arm-trusted-firmware.t234/drivers/amlogic/console/aarch64/meson_console.S 8510cb587dc389d55d57bb3315fa9dd2c4c5e398 - arm-trusted-firmware.t234/drivers/fwu/fwu.c 9b9a1876a8dd35bdd34baeedd3e531617f4b2e03 - arm-trusted-firmware.t234/drivers/brcm/iproc_gpio.c 3aa0dd7cf59a38391e4406e45ed438e3ce73a7da - arm-trusted-firmware.t234/drivers/brcm/sotp.c 2f55d6018c61491a206aef1e089af2001db52b87 - arm-trusted-firmware.t234/drivers/brcm/rng.c 340b2a1703f14c42abdade167ac06919ec7deed5 - arm-trusted-firmware.t234/drivers/brcm/chimp.c 490663a4660be758e46f4878a43d7cb947b072e0 - arm-trusted-firmware.t234/drivers/brcm/spi_sf.c e8c6d05d166788f91925b45e27853f92f98251e5 - arm-trusted-firmware.t234/drivers/brcm/scp.c df0910b2680c7694f0b75737fda7682a8712fb64 - arm-trusted-firmware.t234/drivers/brcm/spi_flash.c 9156a544c31c11073920be56fe54eb346a8b018b - arm-trusted-firmware.t234/drivers/brcm/ocotp.c beed9bad68d4e518ebddf793813229feaa0b4eda - arm-trusted-firmware.t234/drivers/brcm/emmc/emmc_csl_sdcard.c fe0d17716e45be5d2af61ae9204dab49cfff3dae - arm-trusted-firmware.t234/drivers/brcm/emmc/emmc_pboot_hal_memory_drv.c a70c96d7324a040b39217a657625b8b369ed65f9 - arm-trusted-firmware.t234/drivers/brcm/emmc/emmc_csl_sdcmd.c 251cb23a001f2ca982937545e2a900f0ad373e9a - arm-trusted-firmware.t234/drivers/brcm/emmc/emmc_chal_sd.c fd693ca602139875e7dcd4f53be184a4799faddb - arm-trusted-firmware.t234/drivers/brcm/i2c/i2c.c de63fe21caac7ce499c3a244965fca77766a1d19 - arm-trusted-firmware.t234/drivers/brcm/spi/iproc_qspi.h 2dc1c9032a1e64aa390c69bcdf0a42359e402b5a - arm-trusted-firmware.t234/drivers/brcm/spi/iproc_spi.c 653b6a961a19436e1cdba80c2b3b153c1d89a954 - arm-trusted-firmware.t234/drivers/brcm/spi/iproc_qspi.c c9c8847417d95e3ba03ff5c005edbe8a088cee14 - arm-trusted-firmware.t234/drivers/brcm/mdio/mdio.c eefd56420faeb9d836077b23eea175eb7e022871 - arm-trusted-firmware.t234/drivers/mtd/nor/spi_nor.c 5b92eec397dde94bd596421cac925ea3b3b518bd - arm-trusted-firmware.t234/drivers/mtd/nand/raw_nand.c d168b6d956520878eedb32253c74bf920e673e3c - arm-trusted-firmware.t234/drivers/mtd/nand/core.c 9952fdd115f3367770cbc335a2b7501c585341aa - arm-trusted-firmware.t234/drivers/mtd/nand/spi_nand.c 46c3bb0a303498f1a79fd2bc48b1becffddbfd71 - arm-trusted-firmware.t234/drivers/mtd/spi-mem/spi_mem.c d1006aeaf80ceaafa671362a6f67e29c3dca36d1 - arm-trusted-firmware.t234/drivers/ti/uart/aarch64/16550_console.S dab8699dbd5ab3293b8c60930b63813d5d8be6a1 - arm-trusted-firmware.t234/drivers/ti/uart/aarch32/16550_console.S 79c549d57c9be21de7cf4fa62cd5493b7e7ee80a - arm-trusted-firmware.t234/drivers/measured_boot/event_log/event_log.c 150bd08bfbcc1de20e05b6d07950021df0a46322 - arm-trusted-firmware.t234/drivers/measured_boot/event_log/event_print.c c704078df10c3efa018d41f4bf9824bdd19001e1 - arm-trusted-firmware.t234/drivers/measured_boot/rse/rse_measured_boot.c 59ec981b01fbed9be451f642eb3688189fbc8851 - arm-trusted-firmware.t234/drivers/measured_boot/rse/dice_prot_env.c 5dda361745c9b337192dcd67fc63865e04a3a8a5 - arm-trusted-firmware.t234/drivers/allwinner/sunxi_rsb.c c841aaad58e92f728c90bb7cab1771d2578be18a - arm-trusted-firmware.t234/drivers/allwinner/sunxi_msgbox.c f3f36bb92d56df7e9785cc98f6b13594df6404c0 - arm-trusted-firmware.t234/drivers/allwinner/axp/axp803.c 956dadae6d826687fecfa1b522fd8b5c4fdfc764 - arm-trusted-firmware.t234/drivers/allwinner/axp/axp805.c a419bf8dcc1208b06668c17d9c7963020e4b139f - arm-trusted-firmware.t234/drivers/allwinner/axp/common.c 7ff3e84af33c3fcf6ee55936d6400a52d52203b4 - arm-trusted-firmware.t234/drivers/mentor/i2c/mi2cv.c a121658e01780d73e4dba52cddda50c049bfa7eb - arm-trusted-firmware.t234/drivers/clk/clk.c db93ded4416de884fe1f0d47b2567f38f9fd99dc - arm-trusted-firmware.t234/drivers/rpi3/rng/rpi3_rng.c 1529e10e42582df4a41e7632598e85d97dd59ebb - arm-trusted-firmware.t234/drivers/rpi3/mailbox/rpi3_mbox.c e2d55a56a3e5ac8b523864b209db0f5743a79a3a - arm-trusted-firmware.t234/drivers/rpi3/sdhost/rpi3_sdhost.c d9cfec7180993a4853c13fc78ffd507dd5c113ad - arm-trusted-firmware.t234/drivers/rpi3/gpio/rpi3_gpio.c e352b30931747ba506a85329d7c6fe69935dd5b0 - arm-trusted-firmware.t234/drivers/marvell/ccu.c d0ef41df34b7a9ed1d587f10727ba0ee57d04c83 - arm-trusted-firmware.t234/drivers/marvell/ddr_phy_access.h c523b2dcff8e39c5cacc416584d42aa530a93315 - arm-trusted-firmware.t234/drivers/marvell/mci.c 7753b52c1292c6e46e084ae041ddd2751ebb9cf4 - arm-trusted-firmware.t234/drivers/marvell/gwin.c 6dc9f5af1b3c165888d4faae36b6da72adb6faf0 - arm-trusted-firmware.t234/drivers/marvell/cache_llc.c e082e89bfcb90fcea87099285d6eb142fff1f589 - arm-trusted-firmware.t234/drivers/marvell/io_win.c 77e98f136f88749eb01cf7092f9d086cae652384 - arm-trusted-firmware.t234/drivers/marvell/thermal.c b724830f0762dc7701cc9fd88c863c7b53f405c5 - arm-trusted-firmware.t234/drivers/marvell/iob.c a275b56587e6c0c05df6a7985ad0cf0e2216e4f8 - arm-trusted-firmware.t234/drivers/marvell/comphy.h 6256615787b3a1bb1f9b4fc3d64794006722b859 - arm-trusted-firmware.t234/drivers/marvell/ap807_clocks_init.c c8524aa6f76d32913ffaffda10350b753e429b5b - arm-trusted-firmware.t234/drivers/marvell/ddr_phy_access.c 857ba1731ec174905f4cccd68d02bdd3abf08b6e - arm-trusted-firmware.t234/drivers/marvell/amb_adec.c 5a1bf4459a810008901d22e77f2e66c2af4ca7f9 - arm-trusted-firmware.t234/drivers/marvell/secure_dfx_access/dfx.h 12a1ccf32210f9e1106d8d27942f264ab96f58fd - arm-trusted-firmware.t234/drivers/marvell/secure_dfx_access/armada_thermal.c e586fb95d55e301bd75a1db9d6ac7b843f45984f - arm-trusted-firmware.t234/drivers/marvell/secure_dfx_access/misc_dfx.c bb5f60fb041d3fbc6812ce56b8976c686be8105a - arm-trusted-firmware.t234/drivers/marvell/mochi/ap807_setup.c 9a1f55dbc2fc4e8ca97f9af3e7d435f1bddfd83c - arm-trusted-firmware.t234/drivers/marvell/mochi/cp110_setup.c cd9af6970ea49226ec63b2b04d0b06b86d503eae - arm-trusted-firmware.t234/drivers/marvell/mochi/apn806_setup.c c6786eaab3e970ef499ac04657f31a6b5857f544 - arm-trusted-firmware.t234/drivers/marvell/uart/a3700_console.S 6426cc04f9e4ae36d19a6624130d17fd035ba491 - arm-trusted-firmware.t234/drivers/marvell/mc_trustzone/mc_trustzone.h 282cbabd8ee584e3d6c2657cd202c11bbbf31685 - arm-trusted-firmware.t234/drivers/marvell/mc_trustzone/mc_trustzone.c 1ceb9ca7a78559ee70cb2833d391d99c2ccb3334 - arm-trusted-firmware.t234/drivers/marvell/comphy/phy-comphy-common.h 52740dfd3574268d954c81e6a708c55188bca7e1 - arm-trusted-firmware.t234/drivers/marvell/comphy/comphy-cp110.h 6b20ef2ea4fdeded083ed64a100d2e10cc8c4fdb - arm-trusted-firmware.t234/drivers/marvell/comphy/phy-comphy-3700.c 8e492b3a1b160f6991392dd4b045f02e7c5cdc48 - arm-trusted-firmware.t234/drivers/marvell/comphy/phy-comphy-cp110.c 4fc44238fa459de070b3ffae100986f736c5e3d2 - arm-trusted-firmware.t234/drivers/marvell/comphy/phy-default-porting-layer.h 041d0631d9cb0fe39ee3d1f8d20629d3d2225f86 - arm-trusted-firmware.t234/drivers/marvell/comphy/phy-comphy-3700.h db0bb43d5c002bc3633403571c9e8c06da7c0ead - arm-trusted-firmware.t234/drivers/marvell/comphy/phy-comphy-cp110.h 10ce6fa5d5bbc4205013818f591e235cbcadccd1 - arm-trusted-firmware.t234/drivers/marvell/mg_conf_cm3/mg_conf_cm3.h 1eb5c0a7322073c6dd20123df1088c459d8a69bb - arm-trusted-firmware.t234/drivers/marvell/mg_conf_cm3/mg_conf_cm3.c 0891248211ac67ec6f11dd2f388500fbeb3d6206 - arm-trusted-firmware.t234/drivers/arm/dsu/ppu.c 9cb6b217ac9499219fd1bb05530709e1ed53c3ff - arm-trusted-firmware.t234/drivers/arm/ccn/ccn.c 79f4ef16ca7e0a07b86de03a9a04dcb9c6c3673d - arm-trusted-firmware.t234/drivers/arm/ccn/ccn_private.h a9cab74a3aa9f59289ec4dac11558cb1e6e3c2a4 - arm-trusted-firmware.t234/drivers/arm/cci/cci.c 4c4ffe17b185acc80be822b37187870da7853033 - arm-trusted-firmware.t234/drivers/arm/dcc/dcc_console.c 6e2168e850f7a67c6cfa2dadf01943cbb34d43bb - arm-trusted-firmware.t234/drivers/arm/sbsa/sbsa.c 6144e283a645ee6361b497ad2d70b12d44088d5e - arm-trusted-firmware.t234/drivers/arm/fvp/fvp_pwrc.c b2e58e1a761614ee8bb95e48797500fcd9f66c4c - arm-trusted-firmware.t234/drivers/arm/tzc/tzc_dmc500.c 73c05b4fdb011d3783f2f3f3ed7285ca58a63cc9 - arm-trusted-firmware.t234/drivers/arm/tzc/tzc400.c d0a784c19a578becbc821a36080372d78af9b3b5 - arm-trusted-firmware.t234/drivers/arm/tzc/tzc380.c ed924dc3ed7f91ecff8a2e441fa5152d9fe2b9de - arm-trusted-firmware.t234/drivers/arm/tzc/tzc_common_private.h 0e845129705069d3fce0df742ab8d56a7966edbc - arm-trusted-firmware.t234/drivers/arm/tzc/tzc_dmc620.c 1c897f5bd19b9a4c18e905afda282375cbf4f5ba - arm-trusted-firmware.t234/drivers/arm/sp804/sp804_delay_timer.c 2d03c7f12c2da488246ee6c0adf67085dd8a94c3 - arm-trusted-firmware.t234/drivers/arm/css/dsu/dsu.c 9fdd5749ba87bd5ded91306fd6826fa2cf990806 - arm-trusted-firmware.t234/drivers/arm/css/sds/sds_private.h 1eed8f50d5e65263a9bdeb6d8e8dcbe03faf7966 - arm-trusted-firmware.t234/drivers/arm/css/sds/sds.c e609accbdf6501d2f83400b84b7690aaa2bca38a - arm-trusted-firmware.t234/drivers/arm/css/sds/aarch64/sds_helpers.S f55aeff6049754049ad1b23958094a7dd255200f - arm-trusted-firmware.t234/drivers/arm/css/sds/aarch32/sds_helpers.S 6ecb1da96fa3132c1433fd0494362d907bc69fee - arm-trusted-firmware.t234/drivers/arm/css/scp/css_sds.c 80686a47331e2b609be783462ef53eb0ad73279e - arm-trusted-firmware.t234/drivers/arm/css/scp/css_pm_scpi.c 63385bff4d38a1fd8628c6ed6191b7faf316e32e - arm-trusted-firmware.t234/drivers/arm/css/scp/css_pm_scmi.c 7aaa9f31ec7c9d36e48fb2d95a6b3895cbef43ae - arm-trusted-firmware.t234/drivers/arm/css/scp/css_bom_bootloader.c 9b45f1ebc9a189e59d1fdade91bde81f2ea110c0 - arm-trusted-firmware.t234/drivers/arm/css/scpi/css_scpi.c 6dfee94cccd0efeaeda770f83e1d10227886d137 - arm-trusted-firmware.t234/drivers/arm/css/mhu/css_mhu.c 61edc5ba9e506f85c048ef4a0e4f4bc504a56b8e - arm-trusted-firmware.t234/drivers/arm/css/mhu/css_mhu_doorbell.c b81d931e597cde97768e39fdad4325133c31b76d - arm-trusted-firmware.t234/drivers/arm/css/scmi/scmi_ap_core_proto.c 50defd7dfa4e38cf230f830fa7e03358ccfcdbb0 - arm-trusted-firmware.t234/drivers/arm/css/scmi/scmi_sys_pwr_proto.c 12e2ef4efff1bfd584d3424cee31bbcbaf0f9a1c - arm-trusted-firmware.t234/drivers/arm/css/scmi/scmi_private.h e76c3b0b1252232e7854b8af9db8a9ce94192cd1 - arm-trusted-firmware.t234/drivers/arm/css/scmi/scmi_pwr_dmn_proto.c 5f45d6c856d84345d180566f45cb3680f06e6bbb - arm-trusted-firmware.t234/drivers/arm/css/scmi/scmi_common.c e4a68362e5109d4e46f1d720d9b02c8fb20a88c1 - arm-trusted-firmware.t234/drivers/arm/css/scmi/vendor/scmi_sq.h 50b6e41e60390f1a3464b9a4fc4dc51fefdd28e2 - arm-trusted-firmware.t234/drivers/arm/css/scmi/vendor/scmi_sq.c fcdbc7d1ba6dd59840b82ac787ebf67cf36fe4eb - arm-trusted-firmware.t234/drivers/arm/sp805/sp805.c acf291d22225318a8085b6b36d8f418e810bddbd - arm-trusted-firmware.t234/drivers/arm/smmu/smmu_v3.c 960e4d083c1d4f31df54f443dbe23554889af0de - arm-trusted-firmware.t234/drivers/arm/pl061/pl061_gpio.c a2fe11cdf3d3532b99a07f69e5e3d7f12dbfb019 - arm-trusted-firmware.t234/drivers/arm/rse/rse_comms_protocol_common.h 8de9214ec88ef88d5405ba5aef9f84b349ba0821 - arm-trusted-firmware.t234/drivers/arm/rse/rse_comms_protocol.c 6619745efb6e3b34c2e0403308f5a1eed29d4040 - arm-trusted-firmware.t234/drivers/arm/rse/rse_comms_protocol_embed.h 39bb7556cb6c1190a4b1ddabf01a5d1c6ad8c02e - arm-trusted-firmware.t234/drivers/arm/rse/rse_comms.c 98a0841554d74c6d8e627042e5957f7f75e484a0 - arm-trusted-firmware.t234/drivers/arm/rse/rse_comms_protocol_embed.c d96110151cac01364fe4dffa7c7b85afca2e4ef0 - arm-trusted-firmware.t234/drivers/arm/rse/rse_comms_protocol_pointer_access.c 02fbd339d7846ec5afe6b1ae76593b9a9627fc6d - arm-trusted-firmware.t234/drivers/arm/rse/rse_comms_protocol_pointer_access.h 065e07b0f0e4d06c3ff805b17c265d7b6a45fe96 - arm-trusted-firmware.t234/drivers/arm/rse/rse_comms_protocol.h e558e0f784d68ad8b4163a06ce345f0d7426b84b - arm-trusted-firmware.t234/drivers/arm/ethosn/ethosn_big_fw.c 7780bf0d6689d70bcfca6e9876fd5e1bc30caa29 - arm-trusted-firmware.t234/drivers/arm/ethosn/ethosn_smc.c 25205a7e67600a14b45ee44c9fa9ba0c4ef0fd21 - arm-trusted-firmware.t234/drivers/arm/ethosn/ethosn_big_fw.h 3777989a45b625cf209fc89bcf8a91a468f52a3a - arm-trusted-firmware.t234/drivers/arm/scu/scu.c 186bb8885f4c1c27e19050456c66801f47404d55 - arm-trusted-firmware.t234/drivers/arm/pl011/aarch64/pl011_console.S c0a2a1186846f5be78e2165833afa952b7f9abbb - arm-trusted-firmware.t234/drivers/arm/pl011/aarch32/pl011_console.S 28b6eb0d5d5856997722ea707dd42c5ad7448dd1 - arm-trusted-firmware.t234/drivers/arm/gic/common/gic_common_private.h 47db01b738865c987fa5dbb3656b6b1dab2df5d7 - arm-trusted-firmware.t234/drivers/arm/gic/common/gic_common.c 20000ccb435ae8423c5a2294ecb47fd7961e90f2 - arm-trusted-firmware.t234/drivers/arm/gic/v2/gicv2_helpers.c 8f83171e122be92a8d5e4b0c5ecb35e4918ead83 - arm-trusted-firmware.t234/drivers/arm/gic/v2/gicv2_private.h 434c9e8886ec039830df6105bbb3e6a38c4e61c3 - arm-trusted-firmware.t234/drivers/arm/gic/v2/gicv2_main.c 0325f0421798955c9df7f963bd6f917152f3f9fc - arm-trusted-firmware.t234/drivers/arm/gic/v2/gicdv2_helpers.c 73bb04bd3b4d9fbaec23c129c93b2e89e276c7d5 - arm-trusted-firmware.t234/drivers/arm/gic/v3/gicrv3_helpers.c 23685b590420ff2c07da48796da7cc876456b33f - arm-trusted-firmware.t234/drivers/arm/gic/v3/gic600_multichip.c 1cba50e0257d2346b291e4999b96d50aee407aa5 - arm-trusted-firmware.t234/drivers/arm/gic/v3/gic600_multichip_private.h 16963041f34d65707d92f6e089edd696458ab62f - arm-trusted-firmware.t234/drivers/arm/gic/v3/gic600ae_fmu_helpers.c 7737340fec1ab656ef4ac2544dd9484007923edc - arm-trusted-firmware.t234/drivers/arm/gic/v3/gicv3_private.h 97201a04362eb764f203b4fb0835f8c0ca01af21 - arm-trusted-firmware.t234/drivers/arm/gic/v3/gic-x00.c c9735998f9f6132e3bd20ff901e7b9c1bec28519 - arm-trusted-firmware.t234/drivers/arm/gic/v3/gicv3_helpers.c 05102327acf5e15be4f22e671cab5ffa3ad4819c - arm-trusted-firmware.t234/drivers/arm/gic/v3/arm_gicv3_common.c aecc97187b821201843f2d14dd48ce7d5c76e450 - arm-trusted-firmware.t234/drivers/arm/gic/v3/gicv3_main.c 736cd9f59b4b2ae65ddc093bd132bea8ace60805 - arm-trusted-firmware.t234/drivers/arm/gic/v3/gicdv3_helpers.c 77f2a04a1cb74cca5c315472a5453a7848d82ce7 - arm-trusted-firmware.t234/drivers/arm/gic/v3/gic600ae_fmu.c 59fdfb949b22174750e33899b9da3ea46b68cb55 - arm-trusted-firmware.t234/drivers/arm/mhu/mhu_v2_x.c f6698fcfe2ee499dd41d5ad9cf4153cc4f0497a0 - arm-trusted-firmware.t234/drivers/arm/mhu/mhu_wrapper_v3_x.c cded5a08a703e65b1aed182e38ed9c190a59cae6 - arm-trusted-firmware.t234/drivers/arm/mhu/mhu_v3_x.h fa8ac882b1e31f825c15336b590ab0322fa917ff - arm-trusted-firmware.t234/drivers/arm/mhu/mhu_v3_x_private.h fb169536fbec23ec1e84e4bab3a2ee8f8c321192 - arm-trusted-firmware.t234/drivers/arm/mhu/mhu_wrapper_v2_x.c a28058cffee68cf5445d4e04bbd45701e2b1d180 - arm-trusted-firmware.t234/drivers/arm/mhu/mhu_v3_x.c 3d01d5ef8bb71e4cb7447ff707a12be97a6fdf8d - arm-trusted-firmware.t234/drivers/arm/mhu/mhu_v2_x.h 186a430293e386769c76c82e59d880a742f94a29 - arm-trusted-firmware.t234/drivers/scmi-msg/clock.c c160472ee5755e431363a65095ce2c5bee9ffc14 - arm-trusted-firmware.t234/drivers/scmi-msg/sensor.c 51f712caca20f1532dbd7a569fab515695f574f9 - arm-trusted-firmware.t234/drivers/scmi-msg/reset_domain.c 5ccb137165a77ff1e70aaf78a3a5f50bfffd5c56 - arm-trusted-firmware.t234/drivers/scmi-msg/entry.c 6854b6e16a5d00e32471a842ac82a42307f4fd25 - arm-trusted-firmware.t234/drivers/scmi-msg/reset_domain.h c131856e6e46bbe3975ea2d7800d21d2c9dd65f5 - arm-trusted-firmware.t234/drivers/scmi-msg/base.c 9a06fcf18608dead4701ec10a63da3ace748fe3d - arm-trusted-firmware.t234/drivers/scmi-msg/smt.c 87e2ccd433b23fc20ba9c6b329c0e70654df069e - arm-trusted-firmware.t234/drivers/scmi-msg/power_domain.c 7ae186cf8c542e8a7ee539e5a836fbcf3c6b2835 - arm-trusted-firmware.t234/drivers/scmi-msg/common.h 461a7571a4c7bcd3d79b52f40e356e3fd02577ad - arm-trusted-firmware.t234/drivers/scmi-msg/sensor.h 6494de9c4e6d28e03514a090db2224f8b96327ba - arm-trusted-firmware.t234/drivers/scmi-msg/power_domain.h 3793e73034176c719a8160e57d2216f834867aea - arm-trusted-firmware.t234/drivers/scmi-msg/base.h a9219fa6261f43e472c7b1655189ae66022de0e2 - arm-trusted-firmware.t234/drivers/scmi-msg/clock.h 11afd5aa50fb15f02161b17edf34d224b17368fe - arm-trusted-firmware.t234/drivers/partition/gpt.c ecb048f796a6ea0f047d8590aa897a5d2b0cc7fc - arm-trusted-firmware.t234/drivers/partition/partition.c bf6cd6123996ffba448042a934561a9845514132 - arm-trusted-firmware.t234/drivers/imx/uart/imx_uart.h 2b9b4163928ad22b375942df6a419ac25791d15b - arm-trusted-firmware.t234/drivers/imx/uart/imx_crash_uart.S 30ead9b9f8c8e8a0d0443291726c90dcc10f24ef - arm-trusted-firmware.t234/drivers/imx/uart/imx_uart.c e7fdf9ac8aa8e62e2b82e935887ea9fa71277e50 - arm-trusted-firmware.t234/drivers/imx/timer/imx_gpt.c b0d5b078d9666eb577b6d96327526056a9c5ff46 - arm-trusted-firmware.t234/drivers/imx/timer/imx_gpt.h 11d6bed45c0c1633f53d1a14e935db95a494322d - arm-trusted-firmware.t234/drivers/imx/usdhc/imx_usdhc.h 9bc70005e12c02d5fff1be0c6fcab4b26730256a - arm-trusted-firmware.t234/drivers/imx/usdhc/imx_usdhc.c 639d42262958e84f1bd83a574ec62649802513a1 - arm-trusted-firmware.t234/drivers/auth/img_parser_mod.c 383ccf90d4c09c5efe1d3bc0601adbbcfae19658 - arm-trusted-firmware.t234/drivers/auth/crypto_mod.c 63e0dc6ba6ef64d603e76fc15f2a2796e703402b - arm-trusted-firmware.t234/drivers/auth/auth_mod.c 3800c7eab9872036ff7811566577b748ce971805 - arm-trusted-firmware.t234/drivers/auth/mbedtls/mbedtls_psa_crypto.c d590898b2f1bd67f35297dea82d7bbe68f3c627a - arm-trusted-firmware.t234/drivers/auth/mbedtls/mbedtls_crypto.c 4431fce724672381d55e32ed6ceb7b54ca66fe3d - arm-trusted-firmware.t234/drivers/auth/mbedtls/mbedtls_common.c a9c9b581808fc89f609d088dcf922921b2215731 - arm-trusted-firmware.t234/drivers/auth/mbedtls/mbedtls_x509_parser.c cd26a5d108b329cc5b012622b8a8f43fb97d97c4 - arm-trusted-firmware.t234/drivers/auth/cca/bl1_cot.c 096f1a1d2313eea3dc392ca889350de5638792f8 - arm-trusted-firmware.t234/drivers/auth/tbbr/tbbr_cot_common.c 6c002487a9db1949616f6595e8be687b5c556207 - arm-trusted-firmware.t234/drivers/auth/tbbr/tbbr_cot_bl2.c 0c35f62d8d8d0ea76fd218563f9e1e5059e68476 - arm-trusted-firmware.t234/drivers/auth/tbbr/tbbr_cot_bl1_r64.c 55aa6bfe71f6c8b7e4129b5dd9996fe660990913 - arm-trusted-firmware.t234/drivers/auth/tbbr/tbbr_cot_bl1.c bfbe127e115c64f3452d5810006157444e9b6b2d - arm-trusted-firmware.t234/drivers/auth/dualroot/bl1_cot.c c83fb1312ae05c6e624572806f085c6919f189af - arm-trusted-firmware.t234/drivers/coreboot/cbmem_console/aarch64/cbmem_console.S 5bf3028d91229a2bab7d9be2fbf3db5b63dbdac5 - arm-trusted-firmware.t234/drivers/cfi/v2m/v2m_flash.c 8c724782b7fa36eaa061116f99ad75a5e011101d - arm-trusted-firmware.t234/drivers/renesas/common/pfc_regs.h 96023687d119cdc2a88f0f96847b71070be44d0e - arm-trusted-firmware.t234/drivers/renesas/common/common.c eb5eaa562bc901bbcea6e5e722e629a4ffe14fa3 - arm-trusted-firmware.t234/drivers/renesas/common/ddr_regs.h b31c95edffddbecf9d51e7ba6d57f59b07381718 - arm-trusted-firmware.t234/drivers/renesas/common/qos_reg.h 197394f4b9c3387bbbe8ade40aed6fd5ba67cd49 - arm-trusted-firmware.t234/drivers/renesas/common/iic_dvfs/iic_dvfs.c 81389d507ab4f6c15c8302b9d4a550e929350170 - arm-trusted-firmware.t234/drivers/renesas/common/iic_dvfs/iic_dvfs.h cc69cc1cdbf38f685bfb8c4e843841fc12c17072 - arm-trusted-firmware.t234/drivers/renesas/common/io/io_private.h ff8a273a7c0157436d3d58824bb0822c1e4c8880 - arm-trusted-firmware.t234/drivers/renesas/common/io/io_emmcdrv.c 94592c6b00d8f46906214144913018912da2cdb1 - arm-trusted-firmware.t234/drivers/renesas/common/io/io_emmcdrv.h 7c0cd66835bf24e2086572d390e9e42847b2cc7c - arm-trusted-firmware.t234/drivers/renesas/common/io/io_rcar.h 439b0f6a75902ac53407ef84e11e727e09d08291 - arm-trusted-firmware.t234/drivers/renesas/common/io/io_rcar.c 2a9a321a7d2d3f302f63914ea61c0b24ef77ae46 - arm-trusted-firmware.t234/drivers/renesas/common/io/io_memdrv.c 7e6776a062962247d7356aa2a4e3db30e8ec9a35 - arm-trusted-firmware.t234/drivers/renesas/common/io/io_common.h d954a56fdaa915b42433e7f02b933ff5a7f4d553 - arm-trusted-firmware.t234/drivers/renesas/common/io/io_memdrv.h 9c78d4764ec4942f586af7e70fa2906b79718e72 - arm-trusted-firmware.t234/drivers/renesas/common/emmc/emmc_def.h e38e56acce60e8f8ba79bf52ebdccbfbb84e60e7 - arm-trusted-firmware.t234/drivers/renesas/common/emmc/emmc_utility.c 7526f3b1661670d99bae978d76b826697f8eafcc - arm-trusted-firmware.t234/drivers/renesas/common/emmc/emmc_registers.h d18f211fb0f471b7b72797133ccf3a89ff3fe561 - arm-trusted-firmware.t234/drivers/renesas/common/emmc/emmc_mount.c 53d888462033b6fd9f510352b7ef5a997db98215 - arm-trusted-firmware.t234/drivers/renesas/common/emmc/emmc_std.h e3d0fe455add19648ab1dab17abbf8a036851187 - arm-trusted-firmware.t234/drivers/renesas/common/emmc/emmc_read.c 01640294fe0a77d2deffd5544fc35d2cbbd2a001 - arm-trusted-firmware.t234/drivers/renesas/common/emmc/emmc_hal.h b95edfb86992c01b146085a6a3a6fa260f62cfb1 - arm-trusted-firmware.t234/drivers/renesas/common/emmc/emmc_config.h da6c00a918a45fb21f34a94a1153a619126f856e - arm-trusted-firmware.t234/drivers/renesas/common/emmc/emmc_init.c 1f0175831d01e9a83091abf339b764707fa15732 - arm-trusted-firmware.t234/drivers/renesas/common/emmc/emmc_interrupt.c cb043720de45561eaad93379a30094150ff40186 - arm-trusted-firmware.t234/drivers/renesas/common/emmc/emmc_cmd.c 3567bb0ce5e977a1fe4ee5a8fed4db8dc67ccca3 - arm-trusted-firmware.t234/drivers/renesas/common/ddr/dram_sub_func.h bbe9ec354aa9a66731a4a68b1214e7c88433e78e - arm-trusted-firmware.t234/drivers/renesas/common/ddr/boot_init_dram.h f6092db4bdf15b55332ebf36fb13af42ee1b8f8e - arm-trusted-firmware.t234/drivers/renesas/common/ddr/dram_sub_func.c b5212a79f0a8c1abb0c5088b5730968747253bd9 - arm-trusted-firmware.t234/drivers/renesas/common/ddr/ddr_a/ddr_init_v3m.c 55a51a3127d0a24e084fc5ad73c0ddc5d5b2fe3b - arm-trusted-firmware.t234/drivers/renesas/common/ddr/ddr_a/boot_init_dram_regdef.h 24c58c71c66617770ef83cfba554a31128de8f35 - arm-trusted-firmware.t234/drivers/renesas/common/ddr/ddr_a/ddr_init_d3.c f5798c0927729a362f779e583438e52a2da51faf - arm-trusted-firmware.t234/drivers/renesas/common/ddr/ddr_a/ddr_init_e3.c 37a90760b517965724b098859e8ebec0350b9bdb - arm-trusted-firmware.t234/drivers/renesas/common/ddr/ddr_b/boot_init_dram_regdef.h 94ab11fdbe4c8a942cb23f6604e8a013e0c6c083 - arm-trusted-firmware.t234/drivers/renesas/common/ddr/ddr_b/boot_init_dram_config.c e0742763d58338812ccc5554c344ad5313406c69 - arm-trusted-firmware.t234/drivers/renesas/common/ddr/ddr_b/init_dram_tbl_h3ver2.h adeed77084cd41298c4e4f62a9c1c02be218cefc - arm-trusted-firmware.t234/drivers/renesas/common/ddr/ddr_b/init_dram_tbl_m3.h c8a7b6b485a22db75710d3813b31d5d5b40fa7fe - arm-trusted-firmware.t234/drivers/renesas/common/ddr/ddr_b/boot_init_dram.c 63b579cc89ed7ce4a122dd857f16d26fb9c54c76 - arm-trusted-firmware.t234/drivers/renesas/common/ddr/ddr_b/init_dram_tbl_m3n.h 56a16c8b12428935f7d194f7bdbda33ebc432e4f - arm-trusted-firmware.t234/drivers/renesas/common/ddr/ddr_b/init_dram_tbl_h3.h b014a41cf8b77ed434dc0aaeae7efd1a154065c4 - arm-trusted-firmware.t234/drivers/renesas/common/ddr/ddr_b/ddr_regdef.h db6311bc705a8c1d60a616425947adcee84d1063 - arm-trusted-firmware.t234/drivers/renesas/common/delay/micro_delay.h 724917ae7e24d07722880d4b74d6a9730336be06 - arm-trusted-firmware.t234/drivers/renesas/common/delay/micro_delay.c fd800015d9fb816da01ef845c1df74f11ddc4a5a - arm-trusted-firmware.t234/drivers/renesas/common/rom/rom_api.h 87828e73a5f3b026825d97d75aabf28c2d70d3eb - arm-trusted-firmware.t234/drivers/renesas/common/rom/rom_api.c f6c548f6ac120c9eae0551d5ca111a654a28e241 - arm-trusted-firmware.t234/drivers/renesas/common/avs/avs_driver.c 04d76f4dff98e3290cc3b56689eea7eae6973401 - arm-trusted-firmware.t234/drivers/renesas/common/avs/avs_driver.h 8e9c2ed157c641c0bec372759c5f0d1a29495392 - arm-trusted-firmware.t234/drivers/renesas/common/watchdog/swdt.c 6173062885150750f1c102edb35796e50d6a012a - arm-trusted-firmware.t234/drivers/renesas/common/pwrc/pwrc.h 11290dbdcaf0fc67e9947d59e3177ac503f1276c - arm-trusted-firmware.t234/drivers/renesas/common/pwrc/pwrc.c c11df9b69a5d8144823fe6b09c8aee8c6dac3579 - arm-trusted-firmware.t234/drivers/renesas/common/pwrc/call_sram.S 23d0235cda981605fc638d9031316ff71003ea9f - arm-trusted-firmware.t234/drivers/renesas/common/rpc/rpc_driver.c 5737620466366563b17443ac716f582a4a0e1e8b - arm-trusted-firmware.t234/drivers/renesas/common/rpc/rpc_registers.h 3a2172abc0cd0c826ca5c1f958e47c616e2d0c2c - arm-trusted-firmware.t234/drivers/renesas/common/auth/auth_mod.c 26bba8a723b7f85d907e8da853e41cb0ec1bc46c - arm-trusted-firmware.t234/drivers/renesas/common/console/rcar_console.S 1692445c557b6b33fa657f6d1ec36b7ce40b05f6 - arm-trusted-firmware.t234/drivers/renesas/common/console/rcar_printf.c f81a020bdd63ac732719bf014ffb749bc0f35bba - arm-trusted-firmware.t234/drivers/renesas/common/console/rcar_printf.h ba0424f1fb02f541d26148c808ee8576203fae19 - arm-trusted-firmware.t234/drivers/renesas/common/dma/dma_driver.c 648595ebf99d157ff5bec437919b34a18258b411 - arm-trusted-firmware.t234/drivers/renesas/common/scif/scif.S 8ae500671f7227739bb3b389ee74418bae4974ee - arm-trusted-firmware.t234/drivers/renesas/rzg/board/board.h fe1e1e2a68a2409c85008f78bb7f4048be6dc1c9 - arm-trusted-firmware.t234/drivers/renesas/rzg/board/board.c 2802b6fb340525ddb96baca00341a6a25f703c74 - arm-trusted-firmware.t234/drivers/renesas/rzg/qos/qos_init.h 4186c27c3850565f08118234f39f3224a0094fb6 - arm-trusted-firmware.t234/drivers/renesas/rzg/qos/qos_common.h fa11d997720f3e8e38a41e393a485385f56a4981 - arm-trusted-firmware.t234/drivers/renesas/rzg/qos/qos_init.c d1016ddc5354d7e63a3ef654ae6899c8c078ce00 - arm-trusted-firmware.t234/drivers/renesas/rzg/qos/G2E/qos_init_g2e_v10_mstat390.h d0a732f21ab78828c622303f2eb7f2ab8e85c92a - arm-trusted-firmware.t234/drivers/renesas/rzg/qos/G2E/qos_init_g2e_v10_mstat780.h 98bd2a7be1d0dcdf1cc534ac4dfa0adf7b3bd752 - arm-trusted-firmware.t234/drivers/renesas/rzg/qos/G2E/qos_init_g2e_v10.c 635fa9d52596ee34cf2cbf85617657684fb653c1 - arm-trusted-firmware.t234/drivers/renesas/rzg/qos/G2E/qos_init_g2e_v10.h 2e4f2532cb1b9aee27f82677a76fc8598ae3e720 - arm-trusted-firmware.t234/drivers/renesas/rzg/qos/G2H/qos_init_g2h_qoswt195.h 0d2a4685c4bd34d6ec121270bc38ec212c7b1e0a - arm-trusted-firmware.t234/drivers/renesas/rzg/qos/G2H/qos_init_g2h_qoswt390.h a084e9fcbfdc195d063eee7f1561a5b311238aa2 - arm-trusted-firmware.t234/drivers/renesas/rzg/qos/G2H/qos_init_g2h_v30.c 6bfed6bf0d3eb45780762fbb929d5d57eaeaaedd - arm-trusted-firmware.t234/drivers/renesas/rzg/qos/G2H/qos_init_g2h_mstat390.h 05c9d8b400726b0d87a72783f40f17a2a061c31b - arm-trusted-firmware.t234/drivers/renesas/rzg/qos/G2H/qos_init_g2h_v30.h 6a2add07f71f904a80881847adbb4576860c245d - arm-trusted-firmware.t234/drivers/renesas/rzg/qos/G2H/qos_init_g2h_mstat195.h 8146506bb0d47e4499b692d8a0b0d168c697db9a - arm-trusted-firmware.t234/drivers/renesas/rzg/qos/G2M/qos_init_g2m_v11.c 7262dc7de38f8216be32a2cf973c4077da6a5ced - arm-trusted-firmware.t234/drivers/renesas/rzg/qos/G2M/qos_init_g2m_v11.h 49c7e8143b952aa89509efb296f2a3d848f1fcf1 - arm-trusted-firmware.t234/drivers/renesas/rzg/qos/G2M/qos_init_g2m_v10.h d1c7d38c66ff34e537261485132cb0beb3ab4765 - arm-trusted-firmware.t234/drivers/renesas/rzg/qos/G2M/qos_init_g2m_v11_mstat195.h 4fc3b8212dd33e6a33a9bbf4b96d0ffdb7032083 - arm-trusted-firmware.t234/drivers/renesas/rzg/qos/G2M/qos_init_g2m_v30_qoswt390.h ae6bc783ddb0cb6feec22e234a5383965ad75a8b - arm-trusted-firmware.t234/drivers/renesas/rzg/qos/G2M/qos_init_g2m_v30.h 1ebeec74f28d94d33ad88f9e3cb8abeb2ff4462b - arm-trusted-firmware.t234/drivers/renesas/rzg/qos/G2M/qos_init_g2m_v11_mstat390.h 046e1d3b18c291d99e7f1f95658f5a6bb9f7c207 - arm-trusted-firmware.t234/drivers/renesas/rzg/qos/G2M/qos_init_g2m_v30_mstat390.h 17c66fa0e8ef76563d00547c6c281d4fcd025dbf - arm-trusted-firmware.t234/drivers/renesas/rzg/qos/G2M/qos_init_g2m_v10_mstat.h e074216ecbdf97f24cb3e12cc7f5d8e5c99721b5 - arm-trusted-firmware.t234/drivers/renesas/rzg/qos/G2M/qos_init_g2m_v11_qoswt390.h 5cf260b6fef6d9a6c0ddbe6c45bed9d54daf027e - arm-trusted-firmware.t234/drivers/renesas/rzg/qos/G2M/qos_init_g2m_v30.c c9bbbceaf55fd9cdcf0943b427f8b302c902199f - arm-trusted-firmware.t234/drivers/renesas/rzg/qos/G2M/qos_init_g2m_v30_qoswt195.h 3ebe3831af51ff6dd31f04c19ed726ea47d12ffb - arm-trusted-firmware.t234/drivers/renesas/rzg/qos/G2M/qos_init_g2m_v11_qoswt195.h ba3202740e2551524bc86abc295cc82374fea770 - arm-trusted-firmware.t234/drivers/renesas/rzg/qos/G2M/qos_init_g2m_v30_mstat195.h 4120c27434066995e75487d1311e78e2dcf57cb3 - arm-trusted-firmware.t234/drivers/renesas/rzg/qos/G2M/qos_init_g2m_v10.c 7c37eb45f9f11ee9f370e775f741dd1075944a69 - arm-trusted-firmware.t234/drivers/renesas/rzg/qos/G2N/qos_init_g2n_v10.h 3ca890e94b8943ef7719c09f20c3a71ad9e60295 - arm-trusted-firmware.t234/drivers/renesas/rzg/qos/G2N/qos_init_g2n_v10_qoswt195.h 330b138c5e24e14484fbdcc38db468c06168918a - arm-trusted-firmware.t234/drivers/renesas/rzg/qos/G2N/qos_init_g2n_v10_mstat390.h 282efe9d196e496f3be41e3be701e9dc02c1bfc5 - arm-trusted-firmware.t234/drivers/renesas/rzg/qos/G2N/qos_init_g2n_v10_qoswt390.h 80605fd39dfaf3536b1da46e80b450127a5ac723 - arm-trusted-firmware.t234/drivers/renesas/rzg/qos/G2N/qos_init_g2n_v10.c 33416277d7d82e170d6f1d7ef205870c003c8aff - arm-trusted-firmware.t234/drivers/renesas/rzg/qos/G2N/qos_init_g2n_v10_mstat195.h 45854b76c28a405b83a3ad2f7975038a6a8a34c1 - arm-trusted-firmware.t234/drivers/renesas/rzg/pfc/pfc_init.c 987d099de106542df3c8adb7613b27edcfd5cb76 - arm-trusted-firmware.t234/drivers/renesas/rzg/pfc/G2E/pfc_init_g2e.c fa65175525fa82bac340b43f6d95f68574a6cd59 - arm-trusted-firmware.t234/drivers/renesas/rzg/pfc/G2E/pfc_init_g2e.h 08bed1ad3f35993a6b63c3a553c0cd1f817cdf72 - arm-trusted-firmware.t234/drivers/renesas/rzg/pfc/G2H/pfc_init_g2h.h 313d480f7fd9b09de41195d3fe75df7e06b8fad2 - arm-trusted-firmware.t234/drivers/renesas/rzg/pfc/G2H/pfc_init_g2h.c fb75fabcb7a5cccd23dafcb83996362d131b28e4 - arm-trusted-firmware.t234/drivers/renesas/rzg/pfc/G2M/pfc_init_g2m.c 3e16dde8ddd77df4368ed97df8dedfcd363f2195 - arm-trusted-firmware.t234/drivers/renesas/rzg/pfc/G2M/pfc_init_g2m.h 9850cfe7fffb94712b5526ba4dd947a9cec6efbf - arm-trusted-firmware.t234/drivers/renesas/rzg/pfc/G2N/pfc_init_g2n.c 42cec83a589b1e8282a06dc496c09fa4d8019bdf - arm-trusted-firmware.t234/drivers/renesas/rzg/pfc/G2N/pfc_init_g2n.h c2b1735bd5896fe759c99cc8b22c392af5bb841b - arm-trusted-firmware.t234/drivers/renesas/rcar/cpld/ulcb_cpld.c ba3873513a76a74ceff9f6818187870191d1faba - arm-trusted-firmware.t234/drivers/renesas/rcar/cpld/ulcb_cpld.h f069abc20e8eb6537ae1395fe54741068d040a20 - arm-trusted-firmware.t234/drivers/renesas/rcar/board/board.h cf8b9626df3b3f81ae4674acc1f379aaf9eea1b5 - arm-trusted-firmware.t234/drivers/renesas/rcar/board/board.c 50775f0e3315375d2b392a52b57df2e19834d985 - arm-trusted-firmware.t234/drivers/renesas/rcar/qos/qos_init.h cb0d0e4e929b276e850cc30884ddfd8846a9048f - arm-trusted-firmware.t234/drivers/renesas/rcar/qos/qos_common.h bab2ef59fc4f4088c90466ebb4823889a1bf3996 - arm-trusted-firmware.t234/drivers/renesas/rcar/qos/qos_init.c 4c577e5e3e00506da4ab89990b8dae561786e20a - arm-trusted-firmware.t234/drivers/renesas/rcar/qos/M3N/qos_init_m3n_v10_qoswt390.h 60944cd086bb0354e4747ae185b5149ae3f85f72 - arm-trusted-firmware.t234/drivers/renesas/rcar/qos/M3N/qos_init_m3n_v10.h 96354da81a56cb6373ff756124b8eee42409bfca - arm-trusted-firmware.t234/drivers/renesas/rcar/qos/M3N/qos_init_m3n_v10_mstat390.h 5084ea58968f58ebfbd7dc6f9ca8bfd62338c0be - arm-trusted-firmware.t234/drivers/renesas/rcar/qos/M3N/qos_init_m3n_v10.c 2bb5c4f7c8795b5aeecf3a8997f515c4890514ae - arm-trusted-firmware.t234/drivers/renesas/rcar/qos/M3N/qos_init_m3n_v10_mstat195.h aa7f8d7b49fdee6efbfc48acf8e8bddb01fd52a4 - arm-trusted-firmware.t234/drivers/renesas/rcar/qos/M3N/qos_init_m3n_v10_qoswt195.h 824a3717d01b009cea509c61015e64d1722fc212 - arm-trusted-firmware.t234/drivers/renesas/rcar/qos/H3/qos_init_h3_v10_mstat.h bd60292a364659d7f11eeecac384213969357c04 - arm-trusted-firmware.t234/drivers/renesas/rcar/qos/H3/qos_init_h3_v20_mstat195.h 8eea8028ec6b2cd4e6e1c5e0a8d8fd9af01ff4fd - arm-trusted-firmware.t234/drivers/renesas/rcar/qos/H3/qos_init_h3n_v30_mstat390.h 59c0f7639b01b8af843d8142eb013348e6a1ba18 - arm-trusted-firmware.t234/drivers/renesas/rcar/qos/H3/qos_init_h3n_v30_qoswt195.h bc682493eeddc9cec3b24b5dd37418a00e0c064a - arm-trusted-firmware.t234/drivers/renesas/rcar/qos/H3/qos_init_h3_v20_qoswt390.h 25b0f36e8b08eb30e6e67d89d69defa23dd5fd95 - arm-trusted-firmware.t234/drivers/renesas/rcar/qos/H3/qos_init_h3_v30.c dae17d610957cce3799fa9c9946c0196c67d46ac - arm-trusted-firmware.t234/drivers/renesas/rcar/qos/H3/qos_init_h3_v11_mstat.h a9bbbbbec45160d1c172adea1b4b9040ac0de99e - arm-trusted-firmware.t234/drivers/renesas/rcar/qos/H3/qos_init_h3n_v30.c 811eb1fecd60de207e7c92a5986acb80e7ecf0f3 - arm-trusted-firmware.t234/drivers/renesas/rcar/qos/H3/qos_init_h3_v30_qoswt195.h 6ea58175e376d869ac3c2a4f103d934df3c2c465 - arm-trusted-firmware.t234/drivers/renesas/rcar/qos/H3/qos_init_h3_v30_mstat195.h 630b48fd35a697ed4d1daa03bfc67d0d299a2776 - arm-trusted-firmware.t234/drivers/renesas/rcar/qos/H3/qos_init_h3_v11.h 504bd76520d259ea03e8b93380c763a3c17ffeb0 - arm-trusted-firmware.t234/drivers/renesas/rcar/qos/H3/qos_init_h3_v30_qoswt390.h 3133890e85ecc2895d1d4e7b7f6766af5779fa70 - arm-trusted-firmware.t234/drivers/renesas/rcar/qos/H3/qos_init_h3_v20.c 23507b41fbfc9c3a39c4c3f5daf7562d67d10b1b - arm-trusted-firmware.t234/drivers/renesas/rcar/qos/H3/qos_init_h3_v20_mstat390.h b7890473a9576eca8081825037d037349512add5 - arm-trusted-firmware.t234/drivers/renesas/rcar/qos/H3/qos_init_h3_v10.c 700940ac5d64f4902064fbf6670e6e59150d9fd0 - arm-trusted-firmware.t234/drivers/renesas/rcar/qos/H3/qos_init_h3_v30.h 8623a6e816d06c37ce20ab1b6e410fc23c052d43 - arm-trusted-firmware.t234/drivers/renesas/rcar/qos/H3/qos_init_h3_v30_mstat390.h 7131d3227d06785258892fe7a42df3c91cc8c9f9 - arm-trusted-firmware.t234/drivers/renesas/rcar/qos/H3/qos_init_h3_v20.h f5fd4a9a5d50b214bc6ebdebed3c35ae0f1f2be4 - arm-trusted-firmware.t234/drivers/renesas/rcar/qos/H3/qos_init_h3_v20_qoswt195.h a6934a3af85414d49cca5e5d99e162bbe9ca133b - arm-trusted-firmware.t234/drivers/renesas/rcar/qos/H3/qos_init_h3_v10.h 9734f42b1bf98f600ef3f9014fd09eb6fc350e1d - arm-trusted-firmware.t234/drivers/renesas/rcar/qos/H3/qos_init_h3_v11.c f0db0106cc97b359f7a0ab316784658b79e9d544 - arm-trusted-firmware.t234/drivers/renesas/rcar/qos/H3/qos_init_h3n_v30_qoswt390.h f8c08f7eee854de735ce3c60a3e23d3f74fd73f8 - arm-trusted-firmware.t234/drivers/renesas/rcar/qos/H3/qos_init_h3n_v30_mstat195.h 7329eefcfc343e2cafffcbc3a208b34789e57968 - arm-trusted-firmware.t234/drivers/renesas/rcar/qos/H3/qos_init_h3n_v30.h ad608451ef421359c092c0b63326dd929f8d2c66 - arm-trusted-firmware.t234/drivers/renesas/rcar/qos/V3M/qos_init_v3m.c 70405034a321bd4ced206115508ab438f2f536f6 - arm-trusted-firmware.t234/drivers/renesas/rcar/qos/V3M/qos_init_v3m.h 21ada158d24d4473b1e20f73c499f4d5600e3c8b - arm-trusted-firmware.t234/drivers/renesas/rcar/qos/V3M/qos_init_v3m_mstat.h 6dea13df81dd5a2913039ff42dcb9216eb922586 - arm-trusted-firmware.t234/drivers/renesas/rcar/qos/E3/qos_init_e3_v10_mstat390.h 48f7ee0d258f661040d23d898a98d0bc9c066613 - arm-trusted-firmware.t234/drivers/renesas/rcar/qos/E3/qos_init_e3_v10.h a97dc9032e7371a6e36c4da57b637a9d7560f961 - arm-trusted-firmware.t234/drivers/renesas/rcar/qos/E3/qos_init_e3_v10.c 81d4efe56b1d9f4c44c942700d01a9ede1677bae - arm-trusted-firmware.t234/drivers/renesas/rcar/qos/E3/qos_init_e3_v10_mstat780.h c2f5bcbfd3751341e871e36cd4d2f278b2a4150d - arm-trusted-firmware.t234/drivers/renesas/rcar/qos/D3/qos_init_d3.h 46f147d7d880a38e6cb07b4d198f1845f45b45b9 - arm-trusted-firmware.t234/drivers/renesas/rcar/qos/D3/qos_init_d3.c b8ba25ef62d360d72dd17d26934062bc0eeea376 - arm-trusted-firmware.t234/drivers/renesas/rcar/qos/D3/qos_init_d3_mstat.h a6126e66f35f584f38379a6ee5529fed08edf8d8 - arm-trusted-firmware.t234/drivers/renesas/rcar/qos/M3/qos_init_m3_v11_mstat195.h 2717b8ac46d4da69ba6b99a7f25097f9e314aad3 - arm-trusted-firmware.t234/drivers/renesas/rcar/qos/M3/qos_init_m3_v30_mstat390.h bf20ed2160ab9535cba30cc680a7bf881b5a442a - arm-trusted-firmware.t234/drivers/renesas/rcar/qos/M3/qos_init_m3_v11_qoswt390.h 7cbcad70fd46dc5761bb14b31f104d6806752af8 - arm-trusted-firmware.t234/drivers/renesas/rcar/qos/M3/qos_init_m3_v30_qoswt195.h 8aa68f57355243a72231c3848caec899565cf5da - arm-trusted-firmware.t234/drivers/renesas/rcar/qos/M3/qos_init_m3_v11.h f1b2a6505d48a1a6566f88c1e80b4f27cb09896e - arm-trusted-firmware.t234/drivers/renesas/rcar/qos/M3/qos_init_m3_v30_mstat195.h a3a502f90241a6c8f8be7ed9af2e0b6cfe9e59e5 - arm-trusted-firmware.t234/drivers/renesas/rcar/qos/M3/qos_init_m3_v30_qoswt390.h ec016158b5c3b5502240e5835181cf7929e6fb5e - arm-trusted-firmware.t234/drivers/renesas/rcar/qos/M3/qos_init_m3_v10.h 2a066b2fcd7583651082fa57bbf12dfe4352326f - arm-trusted-firmware.t234/drivers/renesas/rcar/qos/M3/qos_init_m3_v10_mstat.h 98bfe2ac9414a1ebf54ec51f034ad2b9200f74da - arm-trusted-firmware.t234/drivers/renesas/rcar/qos/M3/qos_init_m3_v11.c 77f8e84524f8a31cd4e5261eca8974eec4bd131a - arm-trusted-firmware.t234/drivers/renesas/rcar/qos/M3/qos_init_m3_v11_mstat390.h d09db552b2bf3efa0e9a5ea6643db0419a1ebe16 - arm-trusted-firmware.t234/drivers/renesas/rcar/qos/M3/qos_init_m3_v10.c 6b699b1443429c5428b8a7056804ed3da10f02f8 - arm-trusted-firmware.t234/drivers/renesas/rcar/qos/M3/qos_init_m3_v11_qoswt195.h 0bd9da0a10479be006322d8a5e4ba700ee504c2d - arm-trusted-firmware.t234/drivers/renesas/rcar/qos/M3/qos_init_m3_v30.c 758dc7396c31d1186836e5ed6c7cafd0a678b4f6 - arm-trusted-firmware.t234/drivers/renesas/rcar/qos/M3/qos_init_m3_v30.h 3ae8c8947fe42e322d70fb7903ada181bfd006ed - arm-trusted-firmware.t234/drivers/renesas/rcar/pfc/pfc_init.c 1a2dd6951973faf90ec734331605c3fb336bde9f - arm-trusted-firmware.t234/drivers/renesas/rcar/pfc/M3N/pfc_init_m3n.h ed9b151f951387e31b4a9fc5a26f0d4621beaf13 - arm-trusted-firmware.t234/drivers/renesas/rcar/pfc/M3N/pfc_init_m3n.c 83dad15a244674be1d30dc0200428aa0e82090e6 - arm-trusted-firmware.t234/drivers/renesas/rcar/pfc/H3/pfc_init_h3_v1.c 7a112959b420ec60382c2d5688ddced8ca0affd4 - arm-trusted-firmware.t234/drivers/renesas/rcar/pfc/H3/pfc_init_h3_v2.c 5eda21c234b108bb6ed5b65d5e58825ec9ac0210 - arm-trusted-firmware.t234/drivers/renesas/rcar/pfc/H3/pfc_init_h3_v1.h 8472797f3f7c7a334dd21719d4dd718c5df01e47 - arm-trusted-firmware.t234/drivers/renesas/rcar/pfc/H3/pfc_init_h3_v2.h 0b6aac349254850a645458a0a1bfbf6dc60b78c8 - arm-trusted-firmware.t234/drivers/renesas/rcar/pfc/V3M/pfc_init_v3m.c b9d9644305cbbf1e06e176a46903dd18819761a4 - arm-trusted-firmware.t234/drivers/renesas/rcar/pfc/V3M/pfc_init_v3m.h c7dfaadbc4d96d1fceadc4fae5536b1e1a9cdd59 - arm-trusted-firmware.t234/drivers/renesas/rcar/pfc/E3/pfc_init_e3.c c248864592a61213518c8881be85e4f65fe0a3a2 - arm-trusted-firmware.t234/drivers/renesas/rcar/pfc/E3/pfc_init_e3.h 6465a6a55c524b8ffb1dca351757b9d96e79d203 - arm-trusted-firmware.t234/drivers/renesas/rcar/pfc/D3/pfc_init_d3.c a7f9c2cb5010e2bfe1f501830a449d314d447ce7 - arm-trusted-firmware.t234/drivers/renesas/rcar/pfc/D3/pfc_init_d3.h 6fb897befbc4164b71d8975b2d5322b9e77412b4 - arm-trusted-firmware.t234/drivers/renesas/rcar/pfc/M3/pfc_init_m3.c 3802b683cd17e49eba932611e33205446291cde4 - arm-trusted-firmware.t234/drivers/renesas/rcar/pfc/M3/pfc_init_m3.h 627856de3e6c6e4ff2ba2bf3dc3803a13f08d1bb - arm-trusted-firmware.t234/drivers/gpio/gpio.c 1c9fa968ab5e023d06dcdbe0d3d12847d4e13273 - arm-trusted-firmware.t234/drivers/nxp/pmu/pmu.c 396f26a188a6fb1077b280cdc459ee52ac4dec89 - arm-trusted-firmware.t234/drivers/nxp/flexspi/nor/test_fspi.c aa90dde4baf63bc0c01bf8e59793d8b429912e71 - arm-trusted-firmware.t234/drivers/nxp/flexspi/nor/fspi.c af21526870ded933cf4e5455fdd2935a82cea61b - arm-trusted-firmware.t234/drivers/nxp/flexspi/nor/flexspi_nor.c 0c3739bdd3d04953083299f803b7c30e40e3fa93 - arm-trusted-firmware.t234/drivers/nxp/flexspi/nor/fspi.h d354d19d9f42611b3ad0f293660bac71ee3a801c - arm-trusted-firmware.t234/drivers/nxp/flexspi/nor/flexspi_nor.h 6ba34d8cf6a1e66a6b8781b632305c8192f8c47f - arm-trusted-firmware.t234/drivers/nxp/ddr/phy-gen1/phy.c 74e03c3ae9247f2dcf06a8f4c0bf87e7188f5531 - arm-trusted-firmware.t234/drivers/nxp/ddr/phy-gen2/messages.h aac92f8b51eb5a99b8c6c1b861b65d8ed56c92b9 - arm-trusted-firmware.t234/drivers/nxp/ddr/phy-gen2/csr.h c7a8d2e4c9d251f199893093970dd028c5a2aed4 - arm-trusted-firmware.t234/drivers/nxp/ddr/phy-gen2/phy.c 9c36d85b72ea62f1b3e6d8df34efe02d50c468ca - arm-trusted-firmware.t234/drivers/nxp/ddr/phy-gen2/pie.h 8ced20b50814e640a734b45571534428a03235aa - arm-trusted-firmware.t234/drivers/nxp/ddr/phy-gen2/input.h 79c2efcdc6a10632eb5fcbc5fd5930ef914737b3 - arm-trusted-firmware.t234/drivers/nxp/ddr/phy-gen2/phy.h ac55bbcc1387d5092bdce1d236686694d82f2a87 - arm-trusted-firmware.t234/drivers/nxp/ddr/phy-gen2/ddr4fw.h e083ea048179544e9c8e52f7a48d7c315f03a475 - arm-trusted-firmware.t234/drivers/nxp/ddr/nxp-ddr/README.odt 12285abf0cb1bf37dc6969edc0ef0820cfbcaf51 - arm-trusted-firmware.t234/drivers/nxp/ddr/nxp-ddr/regs.c fed7a4d64f892002dd30f1e1bf50d5fbf537281d - arm-trusted-firmware.t234/drivers/nxp/ddr/nxp-ddr/dimm.c eafda399ba84a394b113aa53df7ce17698124030 - arm-trusted-firmware.t234/drivers/nxp/ddr/nxp-ddr/ddr.c eaefee9029f7ccfd854a5813aae54ad816808645 - arm-trusted-firmware.t234/drivers/nxp/ddr/nxp-ddr/utility.c 08d523b32301717f7f1dceef4c53f66af71983f9 - arm-trusted-firmware.t234/drivers/nxp/ddr/nxp-ddr/ddrc.c d9b4015568e26bddf900e57b2034588011dc76fe - arm-trusted-firmware.t234/drivers/nxp/ddr/fsl-mmdc/fsl_mmdc.c 6110f91b4e4951530a572287ec5ccab22df2ea6c - arm-trusted-firmware.t234/drivers/nxp/trdc/imx_trdc.c 73a87390ee3b46e2b5587087457d8a10a6f4cd35 - arm-trusted-firmware.t234/drivers/nxp/tzc/plat_tzc400.c 6c7fa04e4aacd8bc5cdd63e5ade38bdf11ad8ba9 - arm-trusted-firmware.t234/drivers/nxp/tzc/plat_tzc380.c 85860d4c7284e5f15ce31d18787f687d6bde61b8 - arm-trusted-firmware.t234/drivers/nxp/ifc/nor/ifc_nor.c b60ab555dfb381cb8ca75b8250c3d15cd906b069 - arm-trusted-firmware.t234/drivers/nxp/ifc/nand/ifc_nand.c 3976af866b0f1353ade3d95b9d4ef92a7a2169ea - arm-trusted-firmware.t234/drivers/nxp/ifc/nand/ifc.h 025585adc082ce5200473b4283d6b03a234e44f4 - arm-trusted-firmware.t234/drivers/nxp/timer/nxp_timer.c 1d31a2492e42b2087d68ef756a91274f671987c7 - arm-trusted-firmware.t234/drivers/nxp/dcfg/dcfg.c e226a83d545290dc0eafd0a22f178e6d897f8754 - arm-trusted-firmware.t234/drivers/nxp/clk/s32cc/s32cc_clk_modules.c 351caa4dffd317f297fa641693440b83c3020fa9 - arm-trusted-firmware.t234/drivers/nxp/clk/s32cc/s32cc_clk_drv.c ea9c61eb63671d677486f9642369f7ad3af3ba29 - arm-trusted-firmware.t234/drivers/nxp/clk/s32cc/s32cc_early_clks.c b2ede945a5d704e2d8264434328af373da1d30ff - arm-trusted-firmware.t234/drivers/nxp/clk/s32cc/mc_rgm.c 9beea6e3717ab5d4db741724e07dae5505a513b5 - arm-trusted-firmware.t234/drivers/nxp/clk/s32cc/s32cc_clk_utils.c b04df43aeaf2e5ca3edf5ca78184faf5006006dc - arm-trusted-firmware.t234/drivers/nxp/clk/s32cc/mc_me.c c57b4cd990d5115cae8b863a10d2bb92b3813ea3 - arm-trusted-firmware.t234/drivers/nxp/clk/s32cc/include/s32cc-mc-me.h a45d945f79fe79bf4b28ab4cec67b7b053a306a0 - arm-trusted-firmware.t234/drivers/nxp/clk/s32cc/include/s32cc-mc-rgm.h e54819925cb200dce101bcc7d67dfe5b7d11cdb8 - arm-trusted-firmware.t234/drivers/nxp/clk/s32cc/include/s32cc-clk-regs.h f29d54b17cb5dd1f602641d092227c883cb6a57b - arm-trusted-firmware.t234/drivers/nxp/csu/csu.c 5579fdab0db3121aceafcaf39eab316e0253aee3 - arm-trusted-firmware.t234/drivers/nxp/sec_mon/snvs.c 3a182ddb4f6fa33eaf8b5ae0c60f6bdf113f4fcc - arm-trusted-firmware.t234/drivers/nxp/i2c/i2c.c e9bddb61157fc79a6db73771f3abc44b0fa2180e - arm-trusted-firmware.t234/drivers/nxp/auth/csf_hdr_parser/input_pbi_ch3_2 9489f5c75aa894fc166bb99b848883d0413170cb - arm-trusted-firmware.t234/drivers/nxp/auth/csf_hdr_parser/input_bl2_ch3_2 e8b0ec7c11f4a62b325a01e3c18334ff81f184fa - arm-trusted-firmware.t234/drivers/nxp/auth/csf_hdr_parser/csf_hdr_parser.c 58bff9b3422ffad20520362a80a6f322da632da3 - arm-trusted-firmware.t234/drivers/nxp/auth/csf_hdr_parser/input_bl2_ch2 aaaf596468de0e2b0f1fd9df798408ccae3ec67c - arm-trusted-firmware.t234/drivers/nxp/auth/csf_hdr_parser/cot.c dd7d454c97e1855bb1c228cacfecb6238f4e487d - arm-trusted-firmware.t234/drivers/nxp/auth/csf_hdr_parser/input_bl2_ch3 bc6fe6b33a974e9a9e2ae522e3ac00b9f7ff4967 - arm-trusted-firmware.t234/drivers/nxp/auth/csf_hdr_parser/input_pbi_ch3 cb8400c786b03ab4685825c49454f7915622e629 - arm-trusted-firmware.t234/drivers/nxp/auth/csf_hdr_parser/plat_img_parser.c 753107ce7c270d602a0018c1cabb0ef8e7d3c54a - arm-trusted-firmware.t234/drivers/nxp/auth/csf_hdr_parser/input_blx_ch3 9b849f025149e6cf51b2500c8f70b38703ed5078 - arm-trusted-firmware.t234/drivers/nxp/auth/csf_hdr_parser/input_blx_ch2 9ae459f7596a73bda30431770bae14b54b3d8f1f - arm-trusted-firmware.t234/drivers/nxp/auth/tbbr/tbbr_cot.c e87ea077dcc89cfad504b38c454094873eb4bbae - arm-trusted-firmware.t234/drivers/nxp/sfp/sfp.c 904d53ac1f2e9c98f1e176eae19be267e985db33 - arm-trusted-firmware.t234/drivers/nxp/sfp/fuse_prov.c 7e7c03a074969dc0547afeb5dbe289ae008dae93 - arm-trusted-firmware.t234/drivers/nxp/qspi/qspi.c 6e6462d105804dd2ae10bf643fa50826833d672a - arm-trusted-firmware.t234/drivers/nxp/gpio/nxp_gpio.c d4cf1b07b3a081078c4e7da1e354adc42f41f7ca - arm-trusted-firmware.t234/drivers/nxp/crypto/caam/src/sec_hw_specific.c 3c761add629210b3e453b4a2fed25e86faa7dd21 - arm-trusted-firmware.t234/drivers/nxp/crypto/caam/src/hw_key_blob.c 031c599e3fe334783cfcb7d7f041aa1536393789 - arm-trusted-firmware.t234/drivers/nxp/crypto/caam/src/rng.c 56049903c150ec74bf91c43136c2171b9a5d1caf - arm-trusted-firmware.t234/drivers/nxp/crypto/caam/src/jobdesc.c eeaa299335bd10e0531ff65d6a24c6a4da294057 - arm-trusted-firmware.t234/drivers/nxp/crypto/caam/src/caam.c bb9ccbfadb1dba83a0035f9bf7b3d22a48fa01ff - arm-trusted-firmware.t234/drivers/nxp/crypto/caam/src/sec_jr_driver.c f57b50469999cb4e73078d091922c80a5902e4b0 - arm-trusted-firmware.t234/drivers/nxp/crypto/caam/src/auth/hash.c d50c52a60933dda049d46b7b8069bb64acde5f48 - arm-trusted-firmware.t234/drivers/nxp/crypto/caam/src/auth/nxp_crypto.c eb5515126eb5fa4bef2f7976e79e3f9fd0944afa - arm-trusted-firmware.t234/drivers/nxp/crypto/caam/src/auth/rsa.c cbb35d75dea21db6209d5ab41ce216af0acbd5f3 - arm-trusted-firmware.t234/drivers/nxp/gic/ls_gicv2.c a8b2be0d9781815f941f3b5c54c06d66869ebbb8 - arm-trusted-firmware.t234/drivers/nxp/gic/ls_gicv3.c fa805a963aca474eb7b99d376fc23bf898fe4457 - arm-trusted-firmware.t234/drivers/nxp/interconnect/ls_ccn.c a4736e2e943ff2c95ee55ab5550d95dbf4e9fae5 - arm-trusted-firmware.t234/drivers/nxp/interconnect/ls_cci.c d3e9bd0226d74dffd59af6ef1c8f029ca195db90 - arm-trusted-firmware.t234/drivers/nxp/console/console_16550.c 790fe3d8c9dc161c912d7b07fc41fd3e7b777a20 - arm-trusted-firmware.t234/drivers/nxp/console/linflex_console.S f15b111b5f8ec4a947c36b642e6c6331bb5331a4 - arm-trusted-firmware.t234/drivers/nxp/console/console_pl011.c 2a1bdb18c58966ddfd311779afafcf0b45a8c45a - arm-trusted-firmware.t234/drivers/nxp/console/16550_console.S c836acb10409ae93eddaad015a63f2295b8cacd1 - arm-trusted-firmware.t234/drivers/nxp/sd/sd_mmc.c 1187d1241eb1f12b189515f010e7a2e14c1b012f - arm-trusted-firmware.t234/drivers/ufs/ufs.c 1fa3c347f937895d6e5869cff641faf35158d0e0 - arm-trusted-firmware.t234/drivers/intel/soc/stratix10/io/s10_memmap_qspi.c e57afb5e1e8ac09fd8384974dc56428c4687f3ea - arm-trusted-firmware.t234/drivers/console/multi_console.c 55e3619c99952dadcc6c544ef95df93be5bab4d0 - arm-trusted-firmware.t234/drivers/console/aarch64/skeleton_console.S eff91293b96b4a047cfd3e5c65aee88e48005e16 - arm-trusted-firmware.t234/drivers/console/aarch32/skeleton_console.S 3325b2a520df18fb8bd8859eafba82aa1c89eec1 - arm-trusted-firmware.t234/drivers/rambus/trng_ip_76.c 24152cd37640d4bace3e1ed37f798988efef621d - arm-trusted-firmware.t234/drivers/delay_timer/generic_delay_timer.c 7eead4d84e280cd933037880ee98a459805c6e12 - arm-trusted-firmware.t234/drivers/delay_timer/delay_timer.c 9b062a0b911071bbb975d30f01bb8e898cf2bbd2 - arm-trusted-firmware.t234/drivers/mmc/mmc.c 12473d63d565d1782e4e3273a27c29c04adaf86f - arm-trusted-firmware.t234/tools/amlogic/doimage.c 12941bd6251f5bd1a7c7cf8b24200055c2756752 - arm-trusted-firmware.t234/tools/amlogic/Makefile de1c1723fefd41c417984f09cf27ac51dbf1e8ac - arm-trusted-firmware.t234/tools/tlc/tox.ini 81c4d416abded7c45da42be4a5f2c112c6e828aa - arm-trusted-firmware.t234/tools/tlc/poetry.lock aae9c6fb17847c45428bd704b75575c91375ca37 - arm-trusted-firmware.t234/tools/tlc/pyproject.toml d0b71ad95ecacfde1863424def930acae738905e - arm-trusted-firmware.t234/tools/tlc/setup.cfg 6e1c8c3d79252f9297dc1a5eaa61277aed582d0b - arm-trusted-firmware.t234/tools/tlc/tlc/cli.py 13e248fac2e9a6af73309828e28569f28beced75 - arm-trusted-firmware.t234/tools/tlc/tlc/__init__.py a3d41b0992ec71b8a817e6852441c49372f69bb9 - arm-trusted-firmware.t234/tools/tlc/tlc/te.py 7f2eaa3de886f5dd6ad0cc37ca5429dba39f7d1f - arm-trusted-firmware.t234/tools/tlc/tlc/__main__.py 0996f28e4e94d92276ba3b2d7e3001687c2246d2 - arm-trusted-firmware.t234/tools/tlc/tlc/tl.py b18be653910faa8994bb06308427ed35364bac38 - arm-trusted-firmware.t234/tools/tlc/tlc/templates/header.h.j2 b7db50608408019b1e268ab714c85bc8c0bd303c - arm-trusted-firmware.t234/tools/tlc/assets/images/coverage.svg 228c7122430b28e0f738f6de24d9f660eddf5b63 - arm-trusted-firmware.t234/tools/tlc/tests/conftest.py 365db19b34a871749bf725b1fe8a0ca71c8c3cd4 - arm-trusted-firmware.t234/tools/tlc/tests/test_cli.py 8814eb6ac3ec5717d7e350873e1fc067344acfb5 - arm-trusted-firmware.t234/tools/tlc/tests/test_transfer_list.py 3ee5dfa9a791d130e1d7292c616deb22b973d2c0 - arm-trusted-firmware.t234/tools/stm32image/Makefile 75e7e633ff5fcf6dca970eef0c2acd786d23f188 - arm-trusted-firmware.t234/tools/stm32image/stm32image.c c336429ef398284ff8d714a4fbdb8595f3647986 - arm-trusted-firmware.t234/tools/memory/__init__.py c8dffb8aee2b02a4ee20b2154fcd34ba96a5bae0 - arm-trusted-firmware.t234/tools/memory/memory/mapparser.py c336429ef398284ff8d714a4fbdb8595f3647986 - arm-trusted-firmware.t234/tools/memory/memory/__init__.py bf84e52d75ba9616e5062ba1e2654e88232b9774 - arm-trusted-firmware.t234/tools/memory/memory/printer.py 9a17a0be50dc46f7c7a20bf6f65513a464ca136b - arm-trusted-firmware.t234/tools/memory/memory/buildparser.py 6b2e90d377388f801c45a5ee392f4c60397a3d67 - arm-trusted-firmware.t234/tools/memory/memory/memmap.py b17f00c165f3d3913b232007a840fdc58750b253 - arm-trusted-firmware.t234/tools/memory/memory/elfparser.py 143fba71e342babd2ee64d698f93090aea233937 - arm-trusted-firmware.t234/tools/sptool/sp_mk_generator.py 8ff7462ac14d934115235866ba7a90018870c6c8 - arm-trusted-firmware.t234/tools/sptool/Makefile 94e9758f25bc25bb3cf28c26f021394ee7ab7c76 - arm-trusted-firmware.t234/tools/sptool/sptool.py d1d13fd8efcddd123f275316a3a9bdec7f51b1f5 - arm-trusted-firmware.t234/tools/sptool/spactions.py ea6c13979a078b93b02205328962439613b2ef80 - arm-trusted-firmware.t234/tools/fiptool/fiptool.c e43cd1584b0cdd76b55d7ab5fbc3f1bdbafd0568 - arm-trusted-firmware.t234/tools/fiptool/Makefile 6dcc9e2c01e4d8e4c0b531154c0598192ba190c7 - arm-trusted-firmware.t234/tools/fiptool/fiptool_platform.h 12207fca29ab69b8fccc71ef7a95f9d551ec744f - arm-trusted-firmware.t234/tools/fiptool/win_posix.c 221615f987e75fb5b09b12b592251828c160b02e - arm-trusted-firmware.t234/tools/fiptool/win_posix.h 30931543e94deea26c28007433bf6d837f1839aa - arm-trusted-firmware.t234/tools/fiptool/tbbr_config.h c860da006e5f777f7d8eafce03f5c19e259ad4a5 - arm-trusted-firmware.t234/tools/fiptool/fiptool 3d5b607383dc4f856b78413d5717b3dd825ef661 - arm-trusted-firmware.t234/tools/fiptool/tbbr_config.c ff33081f63178813dd9c9235d17538954c29d7c6 - arm-trusted-firmware.t234/tools/fiptool/fiptool.h d47913d50cdf551a4f0677629c59c1464b96f606 - arm-trusted-firmware.t234/tools/fiptool/Makefile.msvc c3790f0231604e98c9505d4303e4c3610c5e6184 - arm-trusted-firmware.t234/tools/fiptool/plat_fiptool/st/plat_def_uuid_config.c 4851ccfd0900e6a09522dcb1ca41ace39024cd4d - arm-trusted-firmware.t234/tools/fiptool/plat_fiptool/arm/board/tc/plat_def_uuid_config.c ee87af83d314b14a8d8a41acb7fa47c97f7dda56 - arm-trusted-firmware.t234/tools/fiptool/plat_fiptool/nxp/plat_def_uuid_config.c 4bb1f396539bb06d05af57b630b8ef57df8a4bcb - arm-trusted-firmware.t234/tools/cot_dt2c/poetry.lock e90eb5e1afa25193cac99a3a9959e70aa8941749 - arm-trusted-firmware.t234/tools/cot_dt2c/pyproject.toml 4583445803f67199a823e65ffe1021528017efe9 - arm-trusted-firmware.t234/tools/cot_dt2c/tests/test.dtsi ab261c4e95442bd2452f176055d7998d773b8a41 - arm-trusted-firmware.t234/tools/cot_dt2c/tests/test_util.py 1793a5d50c6551fe5395d2be8c2758dedaed5a8e - arm-trusted-firmware.t234/tools/cot_dt2c/tests/test_invalid_missing_root.dtsi 69a84057448a604721281e7d99b0ae418a5da068 - arm-trusted-firmware.t234/tools/cot_dt2c/tests/test2.dtsi 4d5c73e53fe313ba5524d243d78bbea7a2261bdc - arm-trusted-firmware.t234/tools/cot_dt2c/tests/test_invalid_missing_attribute.dtsi 308068b1095b9788741890485d47ce4e66263b34 - arm-trusted-firmware.t234/tools/cot_dt2c/tests/test_invalid_undefined_parent.dtsi aa888f651556d0dc5da802f36d4af65489c0fa1c - arm-trusted-firmware.t234/tools/cot_dt2c/tests/test_invalid_bracket.dtsi 55d75426ebe3e4f28caabfbc374c729355184815 - arm-trusted-firmware.t234/tools/cot_dt2c/tests/test_invalid_missing_ctr.dtsi f1b8272be15cd774e3a3436f96842a58ba104871 - arm-trusted-firmware.t234/tools/cot_dt2c/cot_dt2c/cli.py 03c1ce1f5ac33e6079a59be5e13795228cce30bb - arm-trusted-firmware.t234/tools/cot_dt2c/cot_dt2c/dt_validator.py 065257a76434afec0c6c794b0810cd20bbb7d7bc - arm-trusted-firmware.t234/tools/cot_dt2c/cot_dt2c/__init__.py 363358eb68004a04eb1022dfdf69eec58f63130b - arm-trusted-firmware.t234/tools/cot_dt2c/cot_dt2c/cot_dt2c.py 815218445c1c243b59f54d9cfa1f5b0f333f24ff - arm-trusted-firmware.t234/tools/cot_dt2c/cot_dt2c/__main__.py f758e2fd184934cc0fe28e30377cc0d32860af5f - arm-trusted-firmware.t234/tools/cot_dt2c/cot_dt2c/cot_parser.py db638509a7e5bfaf3a43de5e837b0135035b8b14 - arm-trusted-firmware.t234/tools/marvell/doimage/doimage.c 756e775ae7fd1a2a2bd5b1de079b5e28590fba48 - arm-trusted-firmware.t234/tools/marvell/doimage/Makefile f35a6333e76f3fb2bed05bad996a131317f5ac9d - arm-trusted-firmware.t234/tools/marvell/doimage/secure/csk_priv_pem3.key 8602871bb27d59d5b5ce180448e1ceb232027bad - arm-trusted-firmware.t234/tools/marvell/doimage/secure/csk_priv_pem1.key 954bc6cdf269e0eaa9581057657a1e2bf9621f38 - arm-trusted-firmware.t234/tools/marvell/doimage/secure/csk_priv_pem0.key 8fc012a12a4398216ad6fd4b97199ccd159711e5 - arm-trusted-firmware.t234/tools/marvell/doimage/secure/sec_img_7K.cfg f848ecb51058182d4c908f7c9a88561dbdce34bd - arm-trusted-firmware.t234/tools/marvell/doimage/secure/kak_priv_pem.key c8f9244b21f28bb382b1befed8dce13e4eae06f9 - arm-trusted-firmware.t234/tools/marvell/doimage/secure/csk_priv_pem2.key 5b6535dd6c94832d3113588ea938b9526b06b0fc - arm-trusted-firmware.t234/tools/marvell/doimage/secure/sec_img_8K.cfg 85d5f1c910be7dcbb6057611ed67d041c158964e - arm-trusted-firmware.t234/tools/encrypt_fw/Makefile 843248736f6bce43a9ac3f11f9bfa6a094face5a - arm-trusted-firmware.t234/tools/encrypt_fw/include/debug.h 08dcc81abf0dd5a951f1d7cb36e2d05628055bec - arm-trusted-firmware.t234/tools/encrypt_fw/include/cmd_opt.h f37ed62897799b6165569c0842904eb6fe5d21d5 - arm-trusted-firmware.t234/tools/encrypt_fw/include/encrypt.h 29f5f62fba8f9c0fb9e528df8a7c5f9a264d9bad - arm-trusted-firmware.t234/tools/encrypt_fw/src/cmd_opt.c 93d36734d229d79068472d13bb173cb9b1537d9d - arm-trusted-firmware.t234/tools/encrypt_fw/src/encrypt.c 806d63be7090d5c683064d0881e117eb44ff145c - arm-trusted-firmware.t234/tools/encrypt_fw/src/main.c 21a579ca91b991a544475979740fce41ec9456c2 - arm-trusted-firmware.t234/tools/cert_create/Makefile 843248736f6bce43a9ac3f11f9bfa6a094face5a - arm-trusted-firmware.t234/tools/cert_create/include/debug.h 9a9f3a2fd153f33162e606382d2b3fe41e263b75 - arm-trusted-firmware.t234/tools/cert_create/include/ext.h 0a307fbdd842fe9ae8212a2362b356addf0a38df - arm-trusted-firmware.t234/tools/cert_create/include/sha.h 134c6c14b6a384f0e036827b128d4adf08612d9a - arm-trusted-firmware.t234/tools/cert_create/include/cmd_opt.h 050230b0195ee8a824b3f37ea26da29901aa2061 - arm-trusted-firmware.t234/tools/cert_create/include/key.h 8b842068cbb1b417974e3790f0b22384fd832557 - arm-trusted-firmware.t234/tools/cert_create/include/cert.h 3ba13f5968bdc33f9769ea0baa4f65fb4bb37660 - arm-trusted-firmware.t234/tools/cert_create/include/cca/cca_cot.h a015fcfd89d3e63781911e5134884343975d6284 - arm-trusted-firmware.t234/tools/cert_create/include/tbbr/tbb_cert.h 728ba9b1bbfe33e0ca3e33eb166f04922947e3e3 - arm-trusted-firmware.t234/tools/cert_create/include/tbbr/tbb_key.h 0c696ba78f7d568469b58576262a035b3074ae67 - arm-trusted-firmware.t234/tools/cert_create/include/tbbr/tbb_ext.h 596785e69869c848d5fdb306b8084f282876abe7 - arm-trusted-firmware.t234/tools/cert_create/include/dualroot/cot.h 141db0ebbb3519ad3f12eef3776040eb6d3e7995 - arm-trusted-firmware.t234/tools/cert_create/src/ext.c ae1529ca4227309b67f0274139bec6dc24696084 - arm-trusted-firmware.t234/tools/cert_create/src/key.c 29f5f62fba8f9c0fb9e528df8a7c5f9a264d9bad - arm-trusted-firmware.t234/tools/cert_create/src/cmd_opt.c be863190f00aa6265cc9d462c89dea146f1acc0c - arm-trusted-firmware.t234/tools/cert_create/src/sha.c 169e3b31b7c2bff5c1f713172b93b060db25ccc3 - arm-trusted-firmware.t234/tools/cert_create/src/cert.c f213a5dbdc4bdd6855db838856f91256c725316a - arm-trusted-firmware.t234/tools/cert_create/src/main.c eb36f048bf994de32230bba2dc5073eb111ddb2b - arm-trusted-firmware.t234/tools/cert_create/src/cca/cot.c 11fe1d417bcbf3a47d588f48d738d47a156b9c49 - arm-trusted-firmware.t234/tools/cert_create/src/tbbr/tbb_ext.c 150a3fed1ca6eb5f4d72dc97cbbd70d8de56c8d4 - arm-trusted-firmware.t234/tools/cert_create/src/tbbr/tbb_key.c a71f6edc951824d84282d7f0262e1ebd260a5a38 - arm-trusted-firmware.t234/tools/cert_create/src/tbbr/tbb_cert.c 3ebbb87aa093e9d7f76862d62f88b94c9d40c25e - arm-trusted-firmware.t234/tools/cert_create/src/dualroot/cot.c 01000b7d50599a58601322b9a12174d81bd80571 - arm-trusted-firmware.t234/tools/renesas/rzg_layout_create/sa0.ld.S 90c0ad3ef49aaef9a6d5dbbab1f4e3bc6bec41df - arm-trusted-firmware.t234/tools/renesas/rzg_layout_create/makefile f51f929a6294d60d681b03dbf0f3f1fe0835fa3a - arm-trusted-firmware.t234/tools/renesas/rzg_layout_create/sa0.c 8c2b63db003e2e330f2af95b94c2132bc2fc9725 - arm-trusted-firmware.t234/tools/renesas/rzg_layout_create/sa6.ld.S 4085a8d4104eac744977d5ec6feacf08b8a1283a - arm-trusted-firmware.t234/tools/renesas/rzg_layout_create/sa6.c a728eb1898ea80778d60fcf57b727f977c29ec98 - arm-trusted-firmware.t234/tools/renesas/rcar_layout_create/sa0.ld.S 8325821679e16b5d1a049fbfdd7489f97c80d15c - arm-trusted-firmware.t234/tools/renesas/rcar_layout_create/makefile 213e1746ba029a55b6baf19ac0d8863713811b64 - arm-trusted-firmware.t234/tools/renesas/rcar_layout_create/sa0.c c6acebe37afdaba95dbaf9f814eb4bba5dd989a9 - arm-trusted-firmware.t234/tools/renesas/rcar_layout_create/sa6.ld.S 39d3bed79f18d521e0dfc0925252e7c89800e244 - arm-trusted-firmware.t234/tools/renesas/rcar_layout_create/sa6.c bb8bbd9e1032ab1c84c5fb160c50ae8b8224ae88 - arm-trusted-firmware.t234/tools/conventional-changelog-tf-a/package.json 9bdff25d946a2c61d8312e1f53c49802d66d3577 - arm-trusted-firmware.t234/tools/conventional-changelog-tf-a/index.js 65198bc7a494eba7c91745808f3ada1e3034659a - arm-trusted-firmware.t234/tools/conventional-changelog-tf-a/templates/note.hbs 5e9ebb4c1ffaf478200ddbd8bd5bbef2b0f2d2f6 - arm-trusted-firmware.t234/tools/conventional-changelog-tf-a/templates/commit-section.hbs da39a3ee5e6b4b0d3255bfef95601890afd80709 - arm-trusted-firmware.t234/tools/conventional-changelog-tf-a/templates/footer.hbs 99f27ae0dfb07952b2130a819e32599cfc2d78c6 - arm-trusted-firmware.t234/tools/conventional-changelog-tf-a/templates/header.hbs bdd671375b10dbdabd4f1f87941d3071e275ff64 - arm-trusted-firmware.t234/tools/conventional-changelog-tf-a/templates/commit.hbs 1d1032e5160d84f70af7f7ab6dddaf003244f768 - arm-trusted-firmware.t234/tools/conventional-changelog-tf-a/templates/note-section.hbs 85453d72f48122ba14bd00512fac19ef0fc42d07 - arm-trusted-firmware.t234/tools/conventional-changelog-tf-a/templates/template.hbs d9c03766200f7f9e698f262a7b9b2a66ab1615f7 - arm-trusted-firmware.t234/tools/nxp/create_pbl/Makefile 2ec990b299f9fd69d0e0a85e98faba9055f56bab - arm-trusted-firmware.t234/tools/nxp/create_pbl/README 8c244c35557d7783298b64de071cdd3a9425ce43 - arm-trusted-firmware.t234/tools/nxp/create_pbl/create_pbl.c d66ad3c8e97d38face17234980203ac71836e11f - arm-trusted-firmware.t234/tools/nxp/create_pbl/byte_swap.c 621d8ec57a445f0149ebb8b216ef913ed05f8754 - arm-trusted-firmware.t234/tools/nxp/cert_create_helper/include/pdef_tbb_key.h 3d16696dce452bf99b18bdd1a964fe7ad191477b - arm-trusted-firmware.t234/tools/nxp/cert_create_helper/include/pdef_tbb_ext.h 46fb0f5a24245e631af2a4690c0d7202204c0e54 - arm-trusted-firmware.t234/tools/nxp/cert_create_helper/include/pdef_tbb_cert.h f328e450c8ae941e8109578f1721860acbfafbbe - arm-trusted-firmware.t234/tools/nxp/cert_create_helper/src/pdef_tbb_cert.c 4065b3a492865b1f4525586a648df384bf7c961a - arm-trusted-firmware.t234/tools/nxp/cert_create_helper/src/pdef_tbb_ext.c 07aa178db31744c36f0989fd6906a333b6192848 - arm-trusted-firmware.t234/tools/nxp/cert_create_helper/src/pdef_tbb_key.c 29c65fd05d09ec0b8c462b48d7e65026f1a9415b - arm-trusted-firmware.t234/services/std_svc/std_svc_setup.c 250540ab4306221c494658c2239ffed65aa3fbd9 - arm-trusted-firmware.t234/services/std_svc/pci_svc.c bb20fb1a3e8986d55acfcd1c0ffb6481360dac1e - arm-trusted-firmware.t234/services/std_svc/errata_abi/errata_abi_main.c 0cd8f0fbaa69feb3f4f8bc6e1c6f5b426268805d - arm-trusted-firmware.t234/services/std_svc/errata_abi/cpu_errata_info.h c53e4b9cdb4eaee27196d9759c484c4faeaf7d06 - arm-trusted-firmware.t234/services/std_svc/trng/trng_entropy_pool.h af765e45fd91c02ff22721ec1913043fd96434a4 - arm-trusted-firmware.t234/services/std_svc/trng/trng_entropy_pool.c 37b01eb1ed4da3bb42e9ba829719b6d771d1c8b4 - arm-trusted-firmware.t234/services/std_svc/trng/trng_main.c f350480c66a48d9aa0dfdfe68680d49bc7fa3fc7 - arm-trusted-firmware.t234/services/std_svc/rmmd/rmmd_attest.c 8449142d13bece8438bd4c1ab51d294b6e3c8fbb - arm-trusted-firmware.t234/services/std_svc/rmmd/rmmd_main.c 26be0a6e880962cffc338be91ad0f344e8aee9ef - arm-trusted-firmware.t234/services/std_svc/rmmd/rmmd_initial_context.h 96470d49174bfc4da005d7f4ad1de03487b14bae - arm-trusted-firmware.t234/services/std_svc/rmmd/rmmd_private.h 51c4bc5d5a6c9b18e2f3f2c951d3f8abe0869ba2 - arm-trusted-firmware.t234/services/std_svc/rmmd/aarch64/rmmd_helpers.S ff0c111a2f42278dab1ef79a54691d48f1bcb9d8 - arm-trusted-firmware.t234/services/std_svc/rmmd/trp/trp_helpers.c 76fdf0170d89eeee63d4c129044614ed0e923d32 - arm-trusted-firmware.t234/services/std_svc/rmmd/trp/trp_private.h 4f8baa7bd263dc08f7cf1e38fbf581092ba1f933 - arm-trusted-firmware.t234/services/std_svc/rmmd/trp/trp_entry.S c07ea895c4dcc550d2b6538157d6335283491741 - arm-trusted-firmware.t234/services/std_svc/rmmd/trp/linker.ld.S afdf0cb5efb3ab1d18c35e32bfd30b8f566bd9b4 - arm-trusted-firmware.t234/services/std_svc/rmmd/trp/trp_main.c a37e13997e7f9f9c3e56b6dd87d84107e42ad208 - arm-trusted-firmware.t234/services/std_svc/spm/spm_mm/spm_mm_private.h 85a4b673b62f9fd8005fcbe64068b5c1ace3500a - arm-trusted-firmware.t234/services/std_svc/spm/spm_mm/spm_mm_xlat.c 904282887a7f3f2461fd3fb468a811498840445c - arm-trusted-firmware.t234/services/std_svc/spm/spm_mm/spm_mm_main.c 19031962bbf9758aa9e474b9eb9c35bf082d0b6c - arm-trusted-firmware.t234/services/std_svc/spm/spm_mm/spm_mm_setup.c d9a9bbb9fbb84e6b4cd5c911385762837185d34c - arm-trusted-firmware.t234/services/std_svc/spm/common/spm_xlat_common.c d46adc7f9d08235a036ecf30da3d84c5321aed7f - arm-trusted-firmware.t234/services/std_svc/spm/common/include/spm_shim_private.h 0fe96ee27a62d45f27d16ce2a457915c378bb7e0 - arm-trusted-firmware.t234/services/std_svc/spm/common/include/spm_common.h 1d78e66e35ecda90ea616a2e2c56d19e17b94c93 - arm-trusted-firmware.t234/services/std_svc/spm/common/aarch64/spm_helpers.S 785ff37c2c59d92ad49861aab2dcf74eea24ac2e - arm-trusted-firmware.t234/services/std_svc/spm/common/aarch64/spm_shim_exceptions.S bc55f1789ef57bd1a4ab9acf214236a8d8848f12 - arm-trusted-firmware.t234/services/std_svc/spm/el3_spmc/spmc_shared_mem.c 6d76a1e464541299511fb063464a36aa684a9a1b - arm-trusted-firmware.t234/services/std_svc/spm/el3_spmc/spmc_main.c cdbb2f43d2692b57af33b66a74fd05995592deb3 - arm-trusted-firmware.t234/services/std_svc/spm/el3_spmc/spmc.h 2813c1a896e3ea379d291b876d460b3c3fb595cf - arm-trusted-firmware.t234/services/std_svc/spm/el3_spmc/spmc_setup.c 586f59679745adddacc84ba8bb2da429eff1403b - arm-trusted-firmware.t234/services/std_svc/spm/el3_spmc/logical_sp.c ea0ee7f763e533a5c9d4103dc66c27e4d4a39847 - arm-trusted-firmware.t234/services/std_svc/spm/el3_spmc/spmc_pm.c f95a2beac255a48f06c6d600526017ec36556fde - arm-trusted-firmware.t234/services/std_svc/spm/el3_spmc/spmc_shared_mem.h 011506971ee4c1f729cff29362d757f65d0a7e1c - arm-trusted-firmware.t234/services/std_svc/spmd/spmd_main.c df5124cb1afa8f7cae00b597f3427f3d11e3575f - arm-trusted-firmware.t234/services/std_svc/spmd/spmd_logical_sp.c cea07d2bb71dd582152a479f90069cf99c102579 - arm-trusted-firmware.t234/services/std_svc/spmd/spmd_private.h de3a93929ead7eaea70114a4c3c073560aacd2a1 - arm-trusted-firmware.t234/services/std_svc/spmd/spmd_pm.c eb5c9e4113243964f83a249807ed07711dc6f145 - arm-trusted-firmware.t234/services/std_svc/spmd/aarch64/spmd_helpers.S ef7031b55ae8ccff8614b097dab00ba1367d15ee - arm-trusted-firmware.t234/services/std_svc/drtm/drtm_measurements.h f130d33bc42e951d60495f5991c9401d87ad02fc - arm-trusted-firmware.t234/services/std_svc/drtm/drtm_measurements.c d3bfc986d76556c18127069d7171f912a650262f - arm-trusted-firmware.t234/services/std_svc/drtm/drtm_remediation.h 94a4dbebd05b5ac04ddc62f410c23978d1af5e79 - arm-trusted-firmware.t234/services/std_svc/drtm/drtm_dma_prot.h 3510e57e814a2ad8cc236670963d9b8179968c88 - arm-trusted-firmware.t234/services/std_svc/drtm/drtm_dma_prot.c 8304770927ec294961c83a628cc5e32676535d52 - arm-trusted-firmware.t234/services/std_svc/drtm/drtm_main.h 8f97a01d1402ba0622a4f55df2bfc9955e237f0f - arm-trusted-firmware.t234/services/std_svc/drtm/drtm_main.c 04ab7e26c327dba2afac277bfc9b9411015427df - arm-trusted-firmware.t234/services/std_svc/drtm/drtm_remediation.c a13fa14815a742133d25519d9616e0753aed9864 - arm-trusted-firmware.t234/services/std_svc/drtm/drtm_res_address_map.c cf9d5355c3df9df5931e91509161773db2e75527 - arm-trusted-firmware.t234/services/std_svc/sdei/sdei_intr_mgmt.c c8a8e3febebccece37ca7976f39c7db13be5882c - arm-trusted-firmware.t234/services/std_svc/sdei/sdei_event.c ed3a4e16186524a88ed19aa95176bc233b0928fe - arm-trusted-firmware.t234/services/std_svc/sdei/sdei_dispatch.S b8207b17922c0b2192565df4c3bc9e1e9e726afa - arm-trusted-firmware.t234/services/std_svc/sdei/sdei_state.c 36f054958b6c01f03eed070113b49903ce936a5d - arm-trusted-firmware.t234/services/std_svc/sdei/sdei_private.h f14e88f4c5e8f9148871857632348412fc482ab2 - arm-trusted-firmware.t234/services/std_svc/sdei/sdei_main.c 9627f6c760a904df46967b233f4f82b93ad7dc51 - arm-trusted-firmware.t234/services/oem/chromeos/widevine_smc_handlers.c 6c95022182f6c852c22a18b065ba0adbc70c78f4 - arm-trusted-firmware.t234/services/el3/ven_el3_svc.c da74a3d01ff81faa8d4b11d5eb728cf282490890 - arm-trusted-firmware.t234/services/spd/pncd/pncd_helpers.S 0fb6679b9728b7bf5f45e7f3f51e86605ab4b044 - arm-trusted-firmware.t234/services/spd/pncd/pncd_private.h fb004742ba4ab163a988141534bc07d39179974b - arm-trusted-firmware.t234/services/spd/pncd/pncd_main.c 4a8bc1d1730d437d80a54c436d2903ae9eae82de - arm-trusted-firmware.t234/services/spd/pncd/pncd_common.c 55c35f079c4fec17128f7c644425b13fd516f2e8 - arm-trusted-firmware.t234/services/spd/trusty/smcall.h 2bbaae4a856f5eba1f98688458729049af38a448 - arm-trusted-firmware.t234/services/spd/trusty/generic-arm64-smcall.h 405a4e398e27192766391869719c952a77d4e789 - arm-trusted-firmware.t234/services/spd/trusty/generic-arm64-smcall.c 912f672668f3beed13a6a55a3fab7666e147ea6c - arm-trusted-firmware.t234/services/spd/trusty/sm_err.h 4ee401d3a731dc01f150a631703aa677393cfce6 - arm-trusted-firmware.t234/services/spd/trusty/trusty.c ba437dffc2a576e12cd8b8b5e8331a43244754b0 - arm-trusted-firmware.t234/services/spd/trusty/trusty_helpers.S 4de68d8c201f2ab1e06193436a4bc1607fce0a4f - arm-trusted-firmware.t234/services/spd/tspd/tspd_main.c 9e1f0869cd197cf08ef7ccf3d405aabd2d1dff8d - arm-trusted-firmware.t234/services/spd/tspd/tspd_private.h f9cf95e919ab4903bc80205e402547ddebe078a8 - arm-trusted-firmware.t234/services/spd/tspd/tspd_helpers.S 45855bd72493c075e03c590cfade6075e5656654 - arm-trusted-firmware.t234/services/spd/tspd/tspd_common.c d68051c573aae1f65601f9c9307d095259f8de63 - arm-trusted-firmware.t234/services/spd/tspd/tspd_pm.c 176e5bf39535fbb39c81b2deb17ee470cac87159 - arm-trusted-firmware.t234/services/spd/tlkd/tlkd_pm.c 142d38075927c9f109ad340ad654796cee0d35f8 - arm-trusted-firmware.t234/services/spd/tlkd/tlkd_private.h 61ff410fd8dae3d3ecffc63595125321444d53c7 - arm-trusted-firmware.t234/services/spd/tlkd/tlkd_main.c c213fbde43c8075e8fe28297dd6934f2f7c5f6fa - arm-trusted-firmware.t234/services/spd/tlkd/tlkd_common.c 14bc8b1de264fc27498c195073dcf7c1dd736c4d - arm-trusted-firmware.t234/services/spd/tlkd/tlkd_helpers.S 834b1b5e96e49133c1d18535a047a3f6e368d4c5 - arm-trusted-firmware.t234/services/spd/opteed/teesmc_opteed.h 37cf3bd9e8a7f0387a207205e16161b32d4e9521 - arm-trusted-firmware.t234/services/spd/opteed/teesmc_opteed_macros.h 4635025f320be95a9f6d0bf99ff5aeb9bd399b0b - arm-trusted-firmware.t234/services/spd/opteed/opteed_common.c ff4fb5fa51d7d697bdfd2a6ba5a4031d119efafd - arm-trusted-firmware.t234/services/spd/opteed/opteed_private.h cbbca4497a47361c068ee738dcb9003eeb97d52f - arm-trusted-firmware.t234/services/spd/opteed/opteed_main.c ac780cf28ae1b9386edc9bc1ed664ef1f74033e6 - arm-trusted-firmware.t234/services/spd/opteed/opteed_pm.c c8ea87fefa1ecd86c162a85206e9427be8c93afb - arm-trusted-firmware.t234/services/spd/opteed/opteed_helpers.S e5a3069e5559c7a03e2472e9ae57479e71fd854a - arm-trusted-firmware.t234/services/arm_arch_svc/arm_arch_svc_setup.c d776b421c44d86a91304c364e33ebf4f48d08018 - arm-trusted-firmware.t234/docs/glossary.rst aa47f6ef5e32104b354ad6ece6974d984070fd93 - arm-trusted-firmware.t234/docs/Makefile c0dbc6d573e30a2884706dffd5196185a81dd5fe - arm-trusted-firmware.t234/docs/conf.py daa9297e070c7737bed1379ab58be6de305f2b6b - arm-trusted-firmware.t234/docs/porting-guide.rst f6d1ada6cc3b1d652f04dcae67db6de0c118f150 - arm-trusted-firmware.t234/docs/change-log.md 4db0a3d5fc983608dfa2c7307e3c83ce59268ced - arm-trusted-firmware.t234/docs/license.rst a45f43298e13c2a1ef63d78c6368bc951bb70d1a - arm-trusted-firmware.t234/docs/index.rst add0156b84b7d9f7760db313170bf81a672a66a6 - arm-trusted-firmware.t234/docs/resources/TrustedFirmware-Logo_standard-white.png d61db810bf6d286e5ddfdbd1dd2fa71d07951955 - arm-trusted-firmware.t234/docs/resources/diagrams/context_init_warmboot.png 19e287ff6d7c25917fd56356da40bee3e5ef120e - arm-trusted-firmware.t234/docs/resources/diagrams/sec-int-handling.png ce1631bf5349310ea9958448225693d64e1f0ade - arm-trusted-firmware.t234/docs/resources/diagrams/Makefile 10d343a1dfde1e76a19cfc7a0f8a9ca28710ee17 - arm-trusted-firmware.t234/docs/resources/diagrams/reset_code_no_cpu_check.png 40dca2e6d5cf7cdc88398bf5e2df39f3fce31bab - arm-trusted-firmware.t234/docs/resources/diagrams/spm-threat-model-trust-boundaries.png 66f1f1fd09b5146cb2a5e1c538de29ea7f88ed7e - arm-trusted-firmware.t234/docs/resources/diagrams/fwu_states.png bc8397b0eed8a70790b8f0aba5ec95b35eb1df84 - arm-trusted-firmware.t234/docs/resources/diagrams/psci-osi-mode.png a4a155ed455ea56cd17002632d553e84ce799a0b - arm-trusted-firmware.t234/docs/resources/diagrams/secure_sw_stack_tos.png c25efaeb5d88d10b100f05ff7134486a52eee33d - arm-trusted-firmware.t234/docs/resources/diagrams/cot-tbbr.jpg 3b97ed1d832abbae11196e9978c4dad4899df01b - arm-trusted-firmware.t234/docs/resources/diagrams/tf-a_system_diagram.png 04d4d19fb5f3fb1962a5f0ed8afc5b59c4d4747f - arm-trusted-firmware.t234/docs/resources/diagrams/rse_measured_boot_flow.svg f9e79c3023f932bdf0edb432415a33c29ca4bd87 - arm-trusted-firmware.t234/docs/resources/diagrams/cpu_data_config_context_memory.png d2522911e613a4005eb1e10931779a1bb350a363 - arm-trusted-firmware.t234/docs/resources/diagrams/FIP_in_a_GPT_image.png aacd72a3c084647a884d67147510a1b0c26d8359 - arm-trusted-firmware.t234/docs/resources/diagrams/reset_code_flow.dia e5b50760d9ffdba66cef4e05bd4f8337791dc975 - arm-trusted-firmware.t234/docs/resources/diagrams/bl31-exception-entry-error-synchronization.png 77da82b847d9c9a0cecaa2e43e40dac166a66399 - arm-trusted-firmware.t234/docs/resources/diagrams/cmake_framework_structure.png d10eb3ff6f8cf071330205ec0d59126d79f939f4 - arm-trusted-firmware.t234/docs/resources/diagrams/non-sec-int-handling.png 08ebe00cb9823cd55d80c05b4aaaa64c103093ce - arm-trusted-firmware.t234/docs/resources/diagrams/xlat_align.dia ada526023821d5e57e3e1aa979b38d2c8708227e - arm-trusted-firmware.t234/docs/resources/diagrams/ff-a-spm-sel2.png bd8f72d2bcb7548f20b3be728f27924ac4ce7f48 - arm-trusted-firmware.t234/docs/resources/diagrams/secure_sw_stack_sp.png 42caf7b1be51be31c29647e71c14dd18dbc3be1e - arm-trusted-firmware.t234/docs/resources/diagrams/measured_boot_design.png 1de3f72eb01a146af223fd1ca40674a98ad2531e - arm-trusted-firmware.t234/docs/resources/diagrams/root_context_sequence.png 17e11d01f23f073cec01fb44acaa3c976495e982 - arm-trusted-firmware.t234/docs/resources/diagrams/cmake_framework_workflow.png 80b81639bb1aa78723d3635f0359764c595e38c8 - arm-trusted-firmware.t234/docs/resources/diagrams/romlib_design.png 7c4678ac4952c496df4536445b336d96139b0066 - arm-trusted-firmware.t234/docs/resources/diagrams/ffa-secure-interrupt-handling-swd.png c194964eb3447a9c4baad661a58b201ca88c0e8f - arm-trusted-firmware.t234/docs/resources/diagrams/partition-package.png 13746a3b0bb6f10e8d6602ba7a8d0ba8115f75ac - arm-trusted-firmware.t234/docs/resources/diagrams/psci-flattened-vs-hierarchical-idle-states.png 84f99bb590f5c8748bc6e47f3e7bd4bf5890447d - arm-trusted-firmware.t234/docs/resources/diagrams/xlat_align.png 50f763945869b47f10e2ee3322cbbb09cc75916b - arm-trusted-firmware.t234/docs/resources/diagrams/cot-dualroot.jpg fd3f89a0c0509273b1ad8532ee561ba5b112edac - arm-trusted-firmware.t234/docs/resources/diagrams/rmm_cold_boot_generic.dia 99cbcaf2a259695669bf32175773b98f1d094802 - arm-trusted-firmware.t234/docs/resources/diagrams/psci-pc-mode-vs-osi-mode.png eb920891f11d0b8a50653c492d505cadfa7cfcf3 - arm-trusted-firmware.t234/docs/resources/diagrams/tf-a_data_flow_diagram.png 312d68f45cd68f14b7f2e449e73ecd1926e01c67 - arm-trusted-firmware.t234/docs/resources/diagrams/measured_boot_design.dia 4ab0332c836fdf5e5596c2b7ecc6ea4bccb62b8c - arm-trusted-firmware.t234/docs/resources/diagrams/reset_code_no_checks.png 40ffa83fe202970879802b809b75c10ed360c7d4 - arm-trusted-firmware.t234/docs/resources/diagrams/romlib_wrapper.png 2417a250f3f2552f5e881830e947024a92e55adf - arm-trusted-firmware.t234/docs/resources/diagrams/arm-cca-software-arch.png d9a6dc06e1a28c0235940539e527ac285c179342 - arm-trusted-firmware.t234/docs/resources/diagrams/reset_code_no_boot_type_check.png be45d18c63f67896114536f9eb149b14904be8c6 - arm-trusted-firmware.t234/docs/resources/diagrams/context_init_coldboot.png c05984305daded35b5f3a14ea3c5ac88319f4292 - arm-trusted-firmware.t234/docs/resources/diagrams/romlib_design.dia 2bd536051e1dd879aa3f05a384daeb20b34f281d - arm-trusted-firmware.t234/docs/resources/diagrams/percpu-data-struct.png c0699dda17e5170414bfd6c040e320f86b076a3c - arm-trusted-firmware.t234/docs/resources/diagrams/context_memory_allocation.png fdb07d57fc0ab62ee420a06287f1ebdc8c89f0fd - arm-trusted-firmware.t234/docs/resources/diagrams/ff-a-spm-at-el3.png 763017cfa85171acb7422b0f8ef1c40ba69443a3 - arm-trusted-firmware.t234/docs/resources/diagrams/rt-svc-descs-layout.png 2e886fd02f6b39a545824f0819608260e0671c14 - arm-trusted-firmware.t234/docs/resources/diagrams/context_mgmt_existing.png c279d33545695cac4327bf14a8d84b4237dc8387 - arm-trusted-firmware.t234/docs/resources/diagrams/MMU-600.png 04a65e98eceabb17ea534a6dea187021477a1fb2 - arm-trusted-firmware.t234/docs/resources/diagrams/int_handling.dia a6a4256584fddbb776f1e274748edeff4289cf4a - arm-trusted-firmware.t234/docs/resources/diagrams/psci-suspend-sequence.png 1586bdc989b8698512851e436d39fed8ad375030 - arm-trusted-firmware.t234/docs/resources/diagrams/romlib_wrapper.dia 64d840596ae8dbdfb803bfdd471e3d4e7955ca82 - arm-trusted-firmware.t234/docs/resources/diagrams/fwu_flow.png 4d2668ab5814fb9b799f65b69b427db29952658b - arm-trusted-firmware.t234/docs/resources/diagrams/ffa-secure-interrupt-handling-nwd.png 168efaed29ad0e41af7a5a0c99a51e33a0db654b - arm-trusted-firmware.t234/docs/resources/diagrams/tf-a_attack_tree.png a0ca882a9a47bf5642759780b006f69f3c667fff - arm-trusted-firmware.t234/docs/resources/diagrams/context_management_abs.png d5775195107610d6a67d5d7f8af6590e4e53e570 - arm-trusted-firmware.t234/docs/resources/diagrams/default_reset_code.png 60085ca8f9241e330d229fb5c279e725e59518c6 - arm-trusted-firmware.t234/docs/resources/diagrams/rse_attestation_flow.svg 5058f6e8c3278aeb9fcf6b27526000cd079a9d07 - arm-trusted-firmware.t234/docs/resources/diagrams/ff-a-lsp-at-el3.png 77f9b835b00f7926f05f699362fefbecf98c649f - arm-trusted-firmware.t234/docs/resources/diagrams/PSA-FWU.dia b605edbecdbd0fe48f45856493d43740e3c060be - arm-trusted-firmware.t234/docs/resources/diagrams/PSA-FWU.png b42c9e2672802e26c9137df29eff6a1c68652ea6 - arm-trusted-firmware.t234/docs/resources/diagrams/context_mgmt_proposed.png aa7462d2e5339e422146420f79d882671016b17b - arm-trusted-firmware.t234/docs/resources/diagrams/rmm_cold_boot_generic.png ad73cbcd10b1b5e45ca3a01df6c435b345686322 - arm-trusted-firmware.t234/docs/resources/diagrams/draw.io/ehf.svg a2eed4587b5987e97e3f8207a2c9783c5e322c90 - arm-trusted-firmware.t234/docs/resources/diagrams/draw.io/ras.svg 2c5f1b895b01d75ebe2fd874d61f728fe18fca4a - arm-trusted-firmware.t234/docs/resources/diagrams/draw.io/ras.xml 4eb0b99548ee5cdbff9d0e01b3455c7c1e1af275 - arm-trusted-firmware.t234/docs/resources/diagrams/draw.io/ehf.xml 732ce8b12943c9ca218e89a1aa3eae1379952d12 - arm-trusted-firmware.t234/docs/resources/diagrams/plantuml/fip-secure-partitions.puml 0130e90e98cac66f9ac28a56d8fa17af801ead7a - arm-trusted-firmware.t234/docs/resources/diagrams/plantuml/io_dev_init_and_check.puml f2de9c83dfacd4a238df7773b4cba2d566647801 - arm-trusted-firmware.t234/docs/resources/diagrams/plantuml/rse_measured_boot_flow.puml cde708741ffdd39f92d8670aea4a93ef451cd611 - arm-trusted-firmware.t234/docs/resources/diagrams/plantuml/spm_dfd.puml 7ca50157b91a940fdcd61fed7da54e93501b2c3e - arm-trusted-firmware.t234/docs/resources/diagrams/plantuml/io_framework_usage_overview.puml b58a1fb5e8edf2e3e6992c3ca0c152016a1cbfcb - arm-trusted-firmware.t234/docs/resources/diagrams/plantuml/rse_attestation_flow.puml e7d90ce5c6507c7ea4b3337460d633fc2eba9627 - arm-trusted-firmware.t234/docs/resources/diagrams/plantuml/tfa_dfd.puml 0cbedd3989e3d4fc11c3401d7b250d8b14411c50 - arm-trusted-firmware.t234/docs/resources/diagrams/plantuml/sdei_explicit_dispatch.puml 2c516abafcee77f3889360526590d0764a35d61c - arm-trusted-firmware.t234/docs/resources/diagrams/plantuml/bl2-loading-sp.puml 89429fb35fc54ad81b4aab0c9d5860b228aab347 - arm-trusted-firmware.t234/docs/resources/diagrams/plantuml/fconf_bl2_populate.puml dffc936ec4f4efa78850a08b6bf70c0e75da5188 - arm-trusted-firmware.t234/docs/resources/diagrams/plantuml/fconf_bl1_load_config.puml a431301dad1931dd6247cef4df049efa732cefe8 - arm-trusted-firmware.t234/docs/resources/diagrams/plantuml/el3_spm_dfd.puml a92a6d3451184afa73bc3f6cc634befe679a8c17 - arm-trusted-firmware.t234/docs/resources/diagrams/plantuml/tfa_arm_cca_dfd.puml 1db2031ada75fc6c1de9b1e247069fee6fa4586d - arm-trusted-firmware.t234/docs/resources/diagrams/plantuml/tfa_rse_dfd.puml 9e7994a98a6d3531ff8f3c7e16b9e27ae0240805 - arm-trusted-firmware.t234/docs/resources/diagrams/plantuml/io_arm_class_diagram.puml 853a892ccba3dedfcb4491b7ad449b46d6a4d47c - arm-trusted-firmware.t234/docs/resources/diagrams/plantuml/sdei_general.puml 695a4bfc3f0c50586104d10e16a8527c37f3541f - arm-trusted-firmware.t234/docs/resources/diagrams/plantuml/io_dev_registration.puml 658edbd601287357ba1a2f62f6ab44de095d073d - arm-trusted-firmware.t234/docs/threat_model/supply_chain_threat_model.rst 2a46c4e9b1aa01de8b9ac24d80cad8b463fb0657 - arm-trusted-firmware.t234/docs/threat_model/index.rst f60613a2f0392f0001f85570b7367397e8918225 - arm-trusted-firmware.t234/docs/threat_model/firmware_threat_model/threat_model_rse_interface.rst 54cf04e030b0f1c704847e2fa8ea302fab42ba7d - arm-trusted-firmware.t234/docs/threat_model/firmware_threat_model/threat_model_el3_spm.rst 5997a3dcf5a5c3396ea52a5f971e903abad05b90 - arm-trusted-firmware.t234/docs/threat_model/firmware_threat_model/threat_model.rst f4313d454b94886703fa8cccee1fe4b4b9562358 - arm-trusted-firmware.t234/docs/threat_model/firmware_threat_model/threat_model_arm_cca.rst b2d5c37122edea16af4ba5efb0f6b45ed349a351 - arm-trusted-firmware.t234/docs/threat_model/firmware_threat_model/threat_model_fw_update_and_recovery.rst 97b069f631b2d453daa914e58ee0d31edcc7f417 - arm-trusted-firmware.t234/docs/threat_model/firmware_threat_model/index.rst f185c43a46e00f66d19abe5ee3f8b75932d783b6 - arm-trusted-firmware.t234/docs/threat_model/firmware_threat_model/threat_model_fvp_r.rst 966ba943c005919435b2b1d9b5d24afe2422c17c - arm-trusted-firmware.t234/docs/tools/cot-dt2c.rst 6816b259d47237b41fa1a86de9a13e2709284071 - arm-trusted-firmware.t234/docs/tools/transfer-list-compiler.rst 1206795e4d36b6c10c0a35d2a350eefa003ef465 - arm-trusted-firmware.t234/docs/tools/memory-layout-tool.rst 9364cf1fab373e517efc04f2a119861b14861f8f - arm-trusted-firmware.t234/docs/tools/index.rst c58abddf23ca493d1ad75ad62fdf1678a0a2ef06 - arm-trusted-firmware.t234/docs/design_documents/context_mgmt_rework.rst 0a78dfc0bd78f6d8c531d55de25b9ff7f90493f7 - arm-trusted-firmware.t234/docs/design_documents/psci_osi_mode.rst 939ce9d2133afbe8b47ebceaa122932079e5d6dc - arm-trusted-firmware.t234/docs/design_documents/measured_boot_poc.rst 9891ed85f2bc9de65aa8cf83cd460f2b88405633 - arm-trusted-firmware.t234/docs/design_documents/drtm_poc.rst 7a036c92324d9245792ca2013247f6321f8dbdda - arm-trusted-firmware.t234/docs/design_documents/rse.rst e600d33bf17860b78a1182d7b65269f91dd55dbd - arm-trusted-firmware.t234/docs/design_documents/cmake_framework.rst 2eb0c204015a0d0323916d23dec1f365e94e321c - arm-trusted-firmware.t234/docs/design_documents/index.rst 7bf18dbc293466e75606fb2e908bbb83baa5bd0c - arm-trusted-firmware.t234/docs/design_documents/measured_boot.rst 876ecd2cd0b72cde1e326aca634b13590eb65127 - arm-trusted-firmware.t234/docs/about/features.rst 3d4d6eeef77d8e11c9b5da38bf3008531d4cdff8 - arm-trusted-firmware.t234/docs/about/acknowledgements.rst 59188a229cb22f62c915c6615051abf66941512a - arm-trusted-firmware.t234/docs/about/index.rst 023ce035b13ab6b22bffab6add0c22ae58e27d77 - arm-trusted-firmware.t234/docs/about/maintainers.rst f52af6d843069d9182360c30cb512e12cda75eee - arm-trusted-firmware.t234/docs/about/release-information.rst bcef6a5f9db857ad5896f4e9374aecc615b4b915 - arm-trusted-firmware.t234/docs/about/contact.rst dd31a42d63ccf51148db05110d91ac7fd95061ed - arm-trusted-firmware.t234/docs/plat/mt8195.rst 53ad796a079c18ccb28e378fbe08125ccd1c307e - arm-trusted-firmware.t234/docs/plat/qemu.rst 45f03fd73a50f2fe124a2bd1d70fb40243ba0e82 - arm-trusted-firmware.t234/docs/plat/warp7.rst 16ea8f704b5d359f11c9d7933a9e2f5917aa0667 - arm-trusted-firmware.t234/docs/plat/xilinx-versal-net.rst 53f0692ccc04d5d659e88ac1dc1080af6dcda94d - arm-trusted-firmware.t234/docs/plat/qti.rst f2bbe77ac618ba9be663de2bba3cee62eaf17f60 - arm-trusted-firmware.t234/docs/plat/mt8186.rst dbd0fdaf8a0709f4231183ef22ec88c8cac28a9e - arm-trusted-firmware.t234/docs/plat/stm32mp1.rst b5fd0cc9873aa28dfee1359df06c554055c5cb63 - arm-trusted-firmware.t234/docs/plat/ast2700.rst 911b04f9f4d7b4b3adec613748b9916cec40c5f4 - arm-trusted-firmware.t234/docs/plat/npcm845x.rst a970558632482b93ee96aba756982061d20ea4e8 - arm-trusted-firmware.t234/docs/plat/intel-agilex.rst 740342b5a11fca63f16d52d91e9a50dfd34e9126 - arm-trusted-firmware.t234/docs/plat/amd-versal2.rst 556090a5f980031e56bccbb5c6d93f41384aad09 - arm-trusted-firmware.t234/docs/plat/intel-stratix10.rst 1fb07134c685f21246757d77653a8c6bb12d949c - arm-trusted-firmware.t234/docs/plat/socionext-uniphier.rst 36ff292b1e69d9196de27befe5bcff966f10dfc5 - arm-trusted-firmware.t234/docs/plat/rpi3.rst 8deb92e6279b36a3cb6face9f94646bed89dfd97 - arm-trusted-firmware.t234/docs/plat/imx9.rst de25efbc7acce27ba0385c2c51a59fbc0f7f7124 - arm-trusted-firmware.t234/docs/plat/brcm-stingray.rst 84cb8ce1de6f042d0693d8a1a4bb2265ef8a7ed0 - arm-trusted-firmware.t234/docs/plat/meson-axg.rst 4905e051c0a996867dcc2389b8bd5430b0741699 - arm-trusted-firmware.t234/docs/plat/imx8.rst 8b88e9d6cfe72a03efd7e226122d5cd33334fe66 - arm-trusted-firmware.t234/docs/plat/ti-k3.rst 12b7c2db7722b49705438fabf8b96c0943d163bd - arm-trusted-firmware.t234/docs/plat/meson-g12a.rst 6b1f0cb39f8a603b024144ef239be0a20c53c377 - arm-trusted-firmware.t234/docs/plat/rockchip.rst b54be1ac4f13d0a724629f301e245bbcc4379d44 - arm-trusted-firmware.t234/docs/plat/nvidia-tegra.rst 7744970a57723aa0882c4ffcca346a018dfa9816 - arm-trusted-firmware.t234/docs/plat/rpi5.rst dc428854972c4fe85278d839362b2e928e3ddaf8 - arm-trusted-firmware.t234/docs/plat/allwinner.rst 2ed0c805bd3cba59619101f0918aeac59d4e6fd3 - arm-trusted-firmware.t234/docs/plat/rcar-gen3.rst ddffb1cc078fd2d3c58ed8cde2b32388ccd532c9 - arm-trusted-firmware.t234/docs/plat/meson-gxl.rst 2f1fe73b1396f1d4d6c9c340f8574155ce1c6a3f - arm-trusted-firmware.t234/docs/plat/imx8ulp.rst 9bfeb07c04a47aacac6ae649f75799c894e74067 - arm-trusted-firmware.t234/docs/plat/mt8183.rst 01b97fb19ab7a8e8baa5a1a96d35f2cb5dc0a05c - arm-trusted-firmware.t234/docs/plat/rpi4.rst 3cefd2238957aeadfec4d578846bb38b56ca5c26 - arm-trusted-firmware.t234/docs/plat/hikey960.rst 92b2fa09de5e4e7dc0ee6ff61456bcc41b3fa711 - arm-trusted-firmware.t234/docs/plat/qti-msm8916.rst 9e85f6fbc5306c4b0604e98de5fcbddb385c4ce1 - arm-trusted-firmware.t234/docs/plat/mt8192.rst a9d7ad7c4cb2a7c60556534bbe29f765dc6d1c64 - arm-trusted-firmware.t234/docs/plat/xilinx-versal.rst b4e4939c027168061216b513705a698e3b671665 - arm-trusted-firmware.t234/docs/plat/imx8m.rst 05664e895ce6375be6ad98e9576013d1209cb012 - arm-trusted-firmware.t234/docs/plat/hikey.rst a6c4746123e21eba44253912da4e92f0fd31a6cc - arm-trusted-firmware.t234/docs/plat/rz-g2.rst b2aa675ccb8952fdae09d53243a446eab5bd0d56 - arm-trusted-firmware.t234/docs/plat/index.rst 5e8683cb8a4bd212afefc2295ce7ebc01bf8a029 - arm-trusted-firmware.t234/docs/plat/mt8188.rst d0ad3f088b7307bd002023c2fcda2de07a36f40f - arm-trusted-firmware.t234/docs/plat/synquacer.rst 25ec8ee5167ea3d60afe26566de20782ee6aa44c - arm-trusted-firmware.t234/docs/plat/qemu-sbsa.rst 080191f60f9e441f7527257b977a2c8f6d8c5533 - arm-trusted-firmware.t234/docs/plat/poplar.rst 2a492964dd82db785e381f828fae2b2a729f6749 - arm-trusted-firmware.t234/docs/plat/meson-gxbb.rst 264804ef6d1b8919af3cd8978866bc0070372862 - arm-trusted-firmware.t234/docs/plat/s32g274a.rst 24b8105bdda1d9d4f80d6d206326c8a8b0c080bd - arm-trusted-firmware.t234/docs/plat/xilinx-zynqmp.rst d2fd68aa984d6ea32758a6ce4acc4fdb8ce6a6f5 - arm-trusted-firmware.t234/docs/plat/st/stm32mp1.rst 0b45d66fda91e32c39d073afbc10b848d06355ba - arm-trusted-firmware.t234/docs/plat/st/stm32mp2.rst 7a031e18db18fc4463b782ef7b3d3194ad7a919f - arm-trusted-firmware.t234/docs/plat/st/stm32mpus.rst 6843bcda991ac32b56909efb458ac7b9ccfe4c70 - arm-trusted-firmware.t234/docs/plat/st/index.rst 9a8421091aa139e567a9d2716972e0169baf832a - arm-trusted-firmware.t234/docs/plat/marvell/index.rst 5315af3195d5a7c46ec750dccbf4f684c0df4e81 - arm-trusted-firmware.t234/docs/plat/marvell/armada/porting.rst 011fd015be24cc6440f16c9224d4b7ebaf9c4e8f - arm-trusted-firmware.t234/docs/plat/marvell/armada/uart-booting.rst e9622121f101a843f70aaae2b455adfb3e2170b5 - arm-trusted-firmware.t234/docs/plat/marvell/armada/build.rst bcb055e4f5b81eda0adb88f8b79f78b72b1332b9 - arm-trusted-firmware.t234/docs/plat/marvell/armada/misc/mvebu-amb.rst 30afe5cabdcd30362317ee05e9fc4203912e1e30 - arm-trusted-firmware.t234/docs/plat/marvell/armada/misc/mvebu-a8k-addr-map.rst 3b71f880342eddec219418df7f6e6034cce505b5 - arm-trusted-firmware.t234/docs/plat/marvell/armada/misc/mvebu-ccu.rst 0af03a25bc9938840be478afe1f0c3375e852dc7 - arm-trusted-firmware.t234/docs/plat/marvell/armada/misc/mvebu-iob.rst 4496a36f12db50b8075c93550ad2b7a23c24e490 - arm-trusted-firmware.t234/docs/plat/marvell/armada/misc/mvebu-io-win.rst b866c4c537783ada4579ff174f14b4e1bd639fe7 - arm-trusted-firmware.t234/docs/plat/arm/index.rst b23ce573b67c042848709b2c212498b894553d47 - arm-trusted-firmware.t234/docs/plat/arm/arm-build-options.rst 78440e5f0e1b7a1f861e281caf3b8e73bb490a53 - arm-trusted-firmware.t234/docs/plat/arm/corstone1000/index.rst 24c76f158d1e87e91f57e9fd829239dbea4feb4f - arm-trusted-firmware.t234/docs/plat/arm/morello/index.rst 2fafe94098027a5e4dd7a0b123b9e0fc38a4515f - arm-trusted-firmware.t234/docs/plat/arm/juno/index.rst cc554a2b117e7ce25a8fcacd3c6f177a20b98695 - arm-trusted-firmware.t234/docs/plat/arm/fvp/fvp-specific-configs.rst 864cddeaf169a1ecfbd13f8afa114d0c295fde7e - arm-trusted-firmware.t234/docs/plat/arm/fvp/fvp-build-options.rst df8503c49b97eba7b87932df5068bc5a7eec898c - arm-trusted-firmware.t234/docs/plat/arm/fvp/fvp-aemv8-base.rst 0bf2a97f475c2d262ace3e20062c68ad953f86f7 - arm-trusted-firmware.t234/docs/plat/arm/fvp/fvp-cortex-a57-a53.rst 9ee5a88a5fcaaafa91fd9dc7069a7514fff265cd - arm-trusted-firmware.t234/docs/plat/arm/fvp/fvp-foundation.rst a9b503e8f3c8418386b1f5a2dcf8b24b39bf5d12 - arm-trusted-firmware.t234/docs/plat/arm/fvp/fvp-cortex-a32.rst d4e431dfe3bb43fa47b5f0e7ac16b16440fae089 - arm-trusted-firmware.t234/docs/plat/arm/fvp/fvp-support.rst 923bb981665fbc4bdd7bf5c0ba0a0fc71056c881 - arm-trusted-firmware.t234/docs/plat/arm/fvp/index.rst b10bad88c8647f9ecfe8b3bad163830573cfbdc0 - arm-trusted-firmware.t234/docs/plat/arm/arm_fpga/index.rst a845be9736fc1cfcd3cefda5b6a0bde2419f9bc0 - arm-trusted-firmware.t234/docs/plat/arm/fvp_r/index.rst d2fe1858335b68dc33ba4884d086fe748bdd848a - arm-trusted-firmware.t234/docs/plat/arm/automotive_rd/index.rst 1f9947a98dc606f209b59e036ccb7a1e330d9398 - arm-trusted-firmware.t234/docs/plat/arm/tc/index.rst 839b91011a0ebdde7ac9b056ab0a3b087ef11114 - arm-trusted-firmware.t234/docs/plat/arm/fvp-ve/index.rst 7b3072f9759a1fe276a22dcb70d936006608d299 - arm-trusted-firmware.t234/docs/plat/nxp/nxp-layerscape.rst ed3ec7c6e5baceda79c359ce661ac80dbf660d61 - arm-trusted-firmware.t234/docs/plat/nxp/nxp-ls-tbbr.rst 231fc05a0b2de9270bfe513d92b37243b1cc9601 - arm-trusted-firmware.t234/docs/plat/nxp/nxp-ls-fuse-prov.rst 5d7bd6f5908ace2c36015e0535f2deacac9a2956 - arm-trusted-firmware.t234/docs/plat/nxp/index.rst f20a319b0c9088ccbcb1c0759af60c647ccc2288 - arm-trusted-firmware.t234/docs/design/reset-design.rst 48f6b0262898ebac7f25940c555469309cbe2d8e - arm-trusted-firmware.t234/docs/design/trusted-board-boot.rst b15afee5cbc5225a2ef2f709e9761fa2cd73d65e - arm-trusted-firmware.t234/docs/design/psci-pd-tree.rst 075afa19150ab8016c8bbc6bd92590dc61285e43 - arm-trusted-firmware.t234/docs/design/auth-framework.rst f880dd25cbf380065e9d345752376e40bc756664 - arm-trusted-firmware.t234/docs/design/interrupt-framework-design.rst af13c03890ced7d9972ef4a09b1dc9f987dc8e94 - arm-trusted-firmware.t234/docs/design/trusted-board-boot-build.rst a3f0b5a39e2120fdbcad8de599b7c1a18345cfcc - arm-trusted-firmware.t234/docs/design/alt-boot-flows.rst e905f9f7204b60939df7cfc9b3b10b4d2f95811d - arm-trusted-firmware.t234/docs/design/cpu-specific-build-macros.rst 8795f3e11e470aa0945c4c65f8e160672001edd1 - arm-trusted-firmware.t234/docs/design/index.rst 01b30c3faa00cb31cebcc3c5f1f110e36d65d2c5 - arm-trusted-firmware.t234/docs/design/firmware-design.rst 3fe053ce17752ae01f7d815a5df51f4887d2749f - arm-trusted-firmware.t234/docs/_static/css/custom.css ff8ad4850057cbaba3caddae15b9429bb9c42b66 - arm-trusted-firmware.t234/docs/perf/tsp.rst ff86f02c4e8961c3162074a1503b5d65110f849d - arm-trusted-firmware.t234/docs/perf/psci-performance-juno.rst 0eab2048ee6b94e8faa3ea1c9a022760e34a7e45 - arm-trusted-firmware.t234/docs/perf/psci-performance-methodology.rst 0e42cd324330daf481d3e5027372ffd1ed081ebd - arm-trusted-firmware.t234/docs/perf/psci-performance-instr.rst 46a35893c4f839ece238bc6b0f2dd725d979eeeb - arm-trusted-firmware.t234/docs/perf/psci-performance-n1sdp.rst 048e8b5c6fe278f20eed8cab6425c4c7407ebbc4 - arm-trusted-firmware.t234/docs/perf/index.rst 840dcafe1996d0299a5922474d7980b6d2eb779c - arm-trusted-firmware.t234/docs/perf/performance-monitoring-unit.rst 9ef48bf2b7778ef9dabae9d78371b87f009f5fe3 - arm-trusted-firmware.t234/docs/security_advisories/security-advisory-tfv-11.rst f25a4a4b679cf6523ff3ccfe524b119b8711724f - arm-trusted-firmware.t234/docs/security_advisories/security-advisory-tfv-10.rst 939eb2b8d82c68d6c9a4e8c1271bd83151818553 - arm-trusted-firmware.t234/docs/security_advisories/security-advisory-tfv-1.rst 1b8c8e49a1eac7ac65f01b730ef3d22dee6de50f - arm-trusted-firmware.t234/docs/security_advisories/security-advisory-tfv-5.rst b748a01e82c3ad35dacc68ae9295e4553d57beab - arm-trusted-firmware.t234/docs/security_advisories/security-advisory-tfv-3.rst e03dee87868096ffa7982026e20837ddfc9a6aa3 - arm-trusted-firmware.t234/docs/security_advisories/security-advisory-tfv-4.rst 266a8326bc618859a7a18572589b40f197ed1a82 - arm-trusted-firmware.t234/docs/security_advisories/security-advisory-tfv-6.rst fab06483aeca0f68846039c9146a6d828ab12518 - arm-trusted-firmware.t234/docs/security_advisories/security-advisory-tfv-7.rst 5a8ee89be8b54261b0e207ca882fab66cb4db5b9 - arm-trusted-firmware.t234/docs/security_advisories/security-advisory-tfv-2.rst 63e67342811855c2803be11bca43aa4c60543575 - arm-trusted-firmware.t234/docs/security_advisories/security-advisory-tfv-8.rst c11d193007ee19da13e1377b7d68d91cd86c44f1 - arm-trusted-firmware.t234/docs/security_advisories/index.rst c14230a1545a15e94c1a660bf6e03e6ed9280341 - arm-trusted-firmware.t234/docs/security_advisories/security-advisory-tfv-9.rst ece2a08a4c95f35765c02626596eedd1e7473da8 - arm-trusted-firmware.t234/docs/getting_started/docs-build.rst ca183a490eff11cd37e117856eaac7530ad62590 - arm-trusted-firmware.t234/docs/getting_started/psci-lib-integration-guide.rst 017d049b66bc58f569acc3b9c87d84d478079a9d - arm-trusted-firmware.t234/docs/getting_started/tools-build.rst 42c9d8a0f17ea5de05d6dcae315e8c0cba8de638 - arm-trusted-firmware.t234/docs/getting_started/initial-build.rst 70e219856337d42a79ce2091e96aa0417481faa2 - arm-trusted-firmware.t234/docs/getting_started/image-terminology.rst b156462eb31820ee252456ab5f05988abe35d971 - arm-trusted-firmware.t234/docs/getting_started/build-internals.rst c3f3b07a11d8fc7450f0949838c20c40999e5257 - arm-trusted-firmware.t234/docs/getting_started/rt-svc-writers-guide.rst 4ef1d63a74dbf3dcd52b1b20dc7b2e66d8a9e4c1 - arm-trusted-firmware.t234/docs/getting_started/prerequisites.rst a2511f17f7adb686f0e90b6d796685d9a2549d4a - arm-trusted-firmware.t234/docs/getting_started/index.rst 3c0a85ce3fc87ecd9a644e01929021be694d2547 - arm-trusted-firmware.t234/docs/getting_started/build-options.rst bd9dcc8d709ebf0800b2af271b539289417d792a - arm-trusted-firmware.t234/docs/process/security-hardening.rst c52a6129caa44132173e92e0958f20750c537853 - arm-trusted-firmware.t234/docs/process/faq.rst 4b0bd692c00557dbf0eaed6138b2f32a118ee3aa - arm-trusted-firmware.t234/docs/process/coding-guidelines.rst 9b6c423fe9bf032c4f8a7a0c383d0b81468c6efc - arm-trusted-firmware.t234/docs/process/misra-compliance.csv f85dba23d841a79446eb2390219c040d12126279 - arm-trusted-firmware.t234/docs/process/commit-style.rst 6b4d27c4d85632c03ce33cb612293f62c930b7bf - arm-trusted-firmware.t234/docs/process/security.rst 6c4374f40124784cb901804394885bcc74b79aac - arm-trusted-firmware.t234/docs/process/contributing.rst c2ce326551b23201a578ca6d8bd997d65ceda660 - arm-trusted-firmware.t234/docs/process/platform-ports-policy.rst 86800bc7e3ee1e926e72afa72681030a51dcfd96 - arm-trusted-firmware.t234/docs/process/maintenance.rst de1045410d40631927808cf16bace70551bafd2d - arm-trusted-firmware.t234/docs/process/coding-style.rst ec45d0fec66e8262c6dad8c021b34733aad1a786 - arm-trusted-firmware.t234/docs/process/code-review-guidelines.rst a25af3d21109e8b6ac297c2d274ab9fb80a8cc98 - arm-trusted-firmware.t234/docs/process/index.rst 936d1cfd30a3951a43dbf429d597a6fd8ab79d53 - arm-trusted-firmware.t234/docs/components/realm-management-extension.rst 27010f32c64633e838ad226428134580c6275e87 - arm-trusted-firmware.t234/docs/components/el3-spmc.rst 3c24e49f01a464d92e52d853d8124b207a645311 - arm-trusted-firmware.t234/docs/components/secure-partition-manager.rst f14d93f8fc140e8ad6229c5a974c7c6acf7510a3 - arm-trusted-firmware.t234/docs/components/secure-partition-manager-mm.rst 76f2ca4c1ef43ea836ee56eb5c7c2061a2aac702 - arm-trusted-firmware.t234/docs/components/rmm-el3-comms-spec.rst b8c0dca136789abf65c7b9c07a19697e80dcd6c9 - arm-trusted-firmware.t234/docs/components/romlib-design.rst 1376583e825b59306a5f4a4e9eab19943b513585 - arm-trusted-firmware.t234/docs/components/ras.rst a50723d9d8d3d232274b364d1b2c0d509a6537b3 - arm-trusted-firmware.t234/docs/components/sdei.rst 85d25667f22cf5f6cf7fbb240287d8e09c6d5f5e - arm-trusted-firmware.t234/docs/components/cot-binding.rst 3018701b7ef2e5eca172d3608726f506c4b22909 - arm-trusted-firmware.t234/docs/components/debugfs-design.rst f56796051b00b8fa82028b980e55280d50816822 - arm-trusted-firmware.t234/docs/components/ffa-manifest-binding.rst b8d62ed8d8e52992c481b3f032a11c132ddc32ca - arm-trusted-firmware.t234/docs/components/mpmm.rst 0d0ae124e9b7ab12f7478283b299e5d493edae4c - arm-trusted-firmware.t234/docs/components/platform-interrupt-controller-API.rst 49fe0cef52f7b567500a9ba75233e30c7409921b - arm-trusted-firmware.t234/docs/components/ven-el3-debugfs.rst ce0e3b4dc5b3a56bc65eae7507a48a04c631e477 - arm-trusted-firmware.t234/docs/components/activity-monitors.rst 67e3f91990393851134d463646f150e9016fd31b - arm-trusted-firmware.t234/docs/components/ven-el3-service.rst aeb3417c57d05d65dec9ab5ff67e7e0a3457a18a - arm-trusted-firmware.t234/docs/components/index.rst 52a0dad94ae1ae6eb4c53e18b2c75100e6c2488f - arm-trusted-firmware.t234/docs/components/context-management-library.rst 8a1dffa8292f295ef5014ac04a74011b4aeea398 - arm-trusted-firmware.t234/docs/components/exception-handling.rst 709dc0949ae8b7a40e31f72c73627f3717b73c89 - arm-trusted-firmware.t234/docs/components/arm-sip-service.rst 602d20bd46337be44a23550620a7a1f748130fb9 - arm-trusted-firmware.t234/docs/components/xlat-tables-lib-v2-design.rst b289b927968774be53458f83a00705a472568848 - arm-trusted-firmware.t234/docs/components/granule-protection-tables-design.rst 57f5aa1785e0c5f56a0b7179861930402e496e81 - arm-trusted-firmware.t234/docs/components/firmware-update.rst d795da44f403a2a0bc4010ba95915fcabbef3c31 - arm-trusted-firmware.t234/docs/components/fconf/amu-bindings.rst 10529cbd50c1b2a10d7bf7669a515a30f564db2c - arm-trusted-firmware.t234/docs/components/fconf/mpmm-bindings.rst 3018c01a8e5fddb43491531a1a39845b88dd39aa - arm-trusted-firmware.t234/docs/components/fconf/fconf_properties.rst 80075b20bcdeb5ce79e0110e3ba5d5fba6f63604 - arm-trusted-firmware.t234/docs/components/fconf/index.rst af2b691a09a6c68b5f5991b6f9188417256ade0a - arm-trusted-firmware.t234/docs/components/fconf/tb_fw_bindings.rst 68d992f28a446b0ffe6adad209b6189f9f0dd6a9 - arm-trusted-firmware.t234/docs/components/spd/trusty-dispatcher.rst 6ebb1d5ba17946b71f109147c6e30cf117a6c4f1 - arm-trusted-firmware.t234/docs/components/spd/optee-dispatcher.rst 5d7421fde74010efb451e6e515079f37ec3227e2 - arm-trusted-firmware.t234/docs/components/spd/tlk-dispatcher.rst 714f4840f1b5579f9bc25776cbd19e891afd9b0a - arm-trusted-firmware.t234/docs/components/spd/index.rst 16ccf6b90697399bd4231bdb3ca642c8d9ec5c0e - arm-trusted-firmware.t234/docs/components/spd/pnc-dispatcher.rst 6c795ecdce21a9cb16526c75212115fd9a89df09 - arm-trusted-firmware.t234/docs/components/measured_boot/event_log.rst f39c4c5b080cb5537f0260d9f3e477e02aa63bfa - arm-trusted-firmware.t234/docs/components/measured_boot/index.rst 7a066bc656ac22d6a222ecd7116be94d6f3478e7 - arm-trusted-firmware.t234/bl31/bl31_traps.c fb2631d4b51208a3d65ef9d5079f7bd86e1cfd38 - arm-trusted-firmware.t234/bl31/interrupt_mgmt.c 6274135d27733b786ca563eab4e7677456dae192 - arm-trusted-firmware.t234/bl31/ehf.c b838eb7c3d1424ac7ea03dbe4fd7fefef81cec92 - arm-trusted-firmware.t234/bl31/bl31_main.c 75c196ade8ef57a9775c286e3c2f88b52c492e67 - arm-trusted-firmware.t234/bl31/bl31_context_mgmt.c f700a4fd895b8dd57f8ed69830d93534cc90333a - arm-trusted-firmware.t234/bl31/bl31.ld.S c5a19a2816b0c8f8e11e1abf869fb09cec51a502 - arm-trusted-firmware.t234/bl31/aarch64/ea_delegate.S 64d9ec5275f2371b8426086be2be22e3daa86d32 - arm-trusted-firmware.t234/bl31/aarch64/bl31_entrypoint.S ba9f339eea7d260498b40d19f8782a60ace31554 - arm-trusted-firmware.t234/bl31/aarch64/crash_reporting.S abb6a9d7c2959947297a0b881c42cb06365caa64 - arm-trusted-firmware.t234/bl31/aarch64/runtime_exceptions.S b8c00bbc1912105096c211322a3c7a93ed2c4d01 - arm-trusted-firmware.t234/plat/st/stm32mp1/plat_ddr.c 7279d53c82ffd64fade5ce654d99089d6617423f - arm-trusted-firmware.t234/plat/st/stm32mp1/stm32mp1_fip_def.h c30e0cb22c60425a9de10536d78f3ecf8232e8ff - arm-trusted-firmware.t234/plat/st/stm32mp1/stm32mp1_def.h 155e11b39243b6257695dfe51258e330e378e1b8 - arm-trusted-firmware.t234/plat/st/stm32mp1/plat_bl2_mem_params_desc.c 6273e64754fa0752b6f49b446ce29f8dc23aa683 - arm-trusted-firmware.t234/plat/st/stm32mp1/stm32mp1_private.c d364b16403787c5c6a964a26074a943db7da981e - arm-trusted-firmware.t234/plat/st/stm32mp1/stm32mp1_syscfg.c 582eeade878ce325ad10baafc88914c02631aff9 - arm-trusted-firmware.t234/plat/st/stm32mp1/stm32mp1_fconf_firewall.c 494b344c5c893bd8e9e3ab32c16acc57ebd39f73 - arm-trusted-firmware.t234/plat/st/stm32mp1/stm32mp1_boot_device.c 0f0baced38fb65393cd300bdc024b68e707f5f4b - arm-trusted-firmware.t234/plat/st/stm32mp1/stm32mp1_topology.c ec9fe0a8eec79fee1d3dd34bf1a969b8f0b93f4a - arm-trusted-firmware.t234/plat/st/stm32mp1/stm32mp1_shared_resources.c f171c1cd88d3ea2070a747ca519f7d6b9e8257f5 - arm-trusted-firmware.t234/plat/st/stm32mp1/stm32mp1_usb_dfu.c 5219346badc88996294b1e6304843c005a6bc3e2 - arm-trusted-firmware.t234/plat/st/stm32mp1/stm32mp1_tbb_cert.c e9bf2a255a3615d1939e4f6d7ac9ef0b19052a2b - arm-trusted-firmware.t234/plat/st/stm32mp1/stm32mp1_helper.S a5ddf38d0d34f6faef078daf78cdbea503cc696d - arm-trusted-firmware.t234/plat/st/stm32mp1/stm32mp1_pm.c d1bdbf201f1623fe82caa42aa1898d825bec54f3 - arm-trusted-firmware.t234/plat/st/stm32mp1/stm32mp1_scmi.c 77c94644e0ef95316e08e0a339fb16a856ae5d97 - arm-trusted-firmware.t234/plat/st/stm32mp1/stm32mp1_dbgmcu.c 43753b990fdb953ffc38ef29474ef4af453444b7 - arm-trusted-firmware.t234/plat/st/stm32mp1/stm32mp1_stack_protector.c 168a3e80fa38489428f2b6ee242c480adee12b73 - arm-trusted-firmware.t234/plat/st/stm32mp1/stm32mp1.ld.S 307226024d16b1d805f1b21e30c37768ab813902 - arm-trusted-firmware.t234/plat/st/stm32mp1/bl2_plat_setup.c d5b0e2699695505579def8552759c7d668a0b3eb - arm-trusted-firmware.t234/plat/st/stm32mp1/stm32mp1.S 7eaf59b974175885a0dfccf0b42c774580444f92 - arm-trusted-firmware.t234/plat/st/stm32mp1/include/stm32mp1_smc.h 6d6391c62306978263be31d559221680ed9b6025 - arm-trusted-firmware.t234/plat/st/stm32mp1/include/stm32mp1_shared_resources.h 9d3a5dda1437dfa9406e9e7fa5cdd3e8b9682185 - arm-trusted-firmware.t234/plat/st/stm32mp1/include/boot_api.h d12872b893bf8db2b51b7243dd638bf34e9d6cfa - arm-trusted-firmware.t234/plat/st/stm32mp1/include/stm32mp1_dbgmcu.h c36ac3579d4ca3417d036b7c60a1b8e7615e5740 - arm-trusted-firmware.t234/plat/st/stm32mp1/include/platform_def.h 08483c5e8b122913b20ea045dbb185897d5bccf1 - arm-trusted-firmware.t234/plat/st/stm32mp1/include/plat_tbbr_img_def.h 4bb9a48c0b8efa277dd910d514788974b0e73f53 - arm-trusted-firmware.t234/plat/st/stm32mp1/include/stm32mp1_private.h 3634a2a5153ce08df9ec6873bf13d67cfbe72002 - arm-trusted-firmware.t234/plat/st/stm32mp1/include/tbbr/stm32mp1_tbb_cert.h 5e0ada98ae7889e8e0d4fdbd034bcb7da8a45ef8 - arm-trusted-firmware.t234/plat/st/stm32mp1/sp_min/sp_min_setup.c 406790007d4d597b108faf9871360acfa7cdcf23 - arm-trusted-firmware.t234/plat/st/stm32mp1/services/stm32mp1_svc_setup.c 3b882920ab056c9bbc38be63b2715e1d796109c4 - arm-trusted-firmware.t234/plat/st/stm32mp1/services/bsec_svc.h 51533a93ab56e624ca0c49879470798b2abbe74f - arm-trusted-firmware.t234/plat/st/stm32mp1/services/bsec_svc.c 356f823bccc7081e026233c6fb511c0602208101 - arm-trusted-firmware.t234/plat/st/common/usb_dfu.c ea7aee275f01620bfa753e4e5168f93bbf947599 - arm-trusted-firmware.t234/plat/st/common/stm32cubeprogrammer_uart.c 11f5e9c07cc96f678ae502bcb9ad094213b50025 - arm-trusted-firmware.t234/plat/st/common/stm32mp_dt.c 12d54ecaaec6dd162057886ec8fd87eb8b5e0c24 - arm-trusted-firmware.t234/plat/st/common/plat_image_load.c c0fcb84a94921b5ff081822dea1f4054a0733389 - arm-trusted-firmware.t234/plat/st/common/stm32cubeprogrammer_usb.c 919812f48e98532659b1898a4e8ba0457f902669 - arm-trusted-firmware.t234/plat/st/common/stm32mp_gic.c 25ba48f0c4d336e5242aa170c1a522df4e4be9b1 - arm-trusted-firmware.t234/plat/st/common/stm32mp_common.c e7e5465901d77262db9db582157ba05b7173bee2 - arm-trusted-firmware.t234/plat/st/common/stm32mp_trusted_boot.c 8090dcc709da5050c11279909f4849272c8b87ca - arm-trusted-firmware.t234/plat/st/common/stm32mp_fconf_io.c 57f1aeef36a544413a7a5dca2900e8112296199c - arm-trusted-firmware.t234/plat/st/common/bl2_io_storage.c 63ade0923237dfdccc1926943e50b9872a8e306e - arm-trusted-firmware.t234/plat/st/common/stm32mp_crypto_lib.c dd7ae18098736e737a0482a59de65f64d5edd503 - arm-trusted-firmware.t234/plat/st/common/include/stm32cubeprogrammer.h b270dbb723f5c002dbf393eb752ccb946afc5baf - arm-trusted-firmware.t234/plat/st/common/include/stm32mp_shared_resources.h 8bb1550cf77c8680e05ba46ad44ab77ff26bb8f3 - arm-trusted-firmware.t234/plat/st/common/include/usb_dfu.h 4ca9fb0296b649411cecd45263ecadb41540d6e4 - arm-trusted-firmware.t234/plat/st/common/include/stm32mp_fconf_getter.h 1c4a3f35622f484097d7050f763321fd05ed9541 - arm-trusted-firmware.t234/plat/st/common/include/plat_def_fip_uuid.h 5384018d2f98663d39f3b0ab4b86b8f324353d6f - arm-trusted-firmware.t234/plat/st/common/include/stm32mp_dt.h 9493baf676bf0aaa33abb0378ffd790ab48fff16 - arm-trusted-firmware.t234/plat/st/common/include/stm32mp_efi.h 4025b4c5c563b66da3f21fd0fd6a15c711ac50ba - arm-trusted-firmware.t234/plat/st/common/include/stm32mp_common.h cfae9782d6fd30576992a81580b7edaf1773fc13 - arm-trusted-firmware.t234/plat/st/common/include/stm32mp_io_storage.h c0f15ec0b672346666bfec260b107cd40b413c70 - arm-trusted-firmware.t234/plat/st/common/include/stm32mp_mbedtls_config-3.h 234cb6418c0cc95f7bba62022a09daecfc4503a6 - arm-trusted-firmware.t234/plat/st/stm32mp2/plat_ddr.c d6653dece63597a75050241dac5ec2cb3fc97395 - arm-trusted-firmware.t234/plat/st/stm32mp2/plat_bl2_mem_params_desc.c 9c0489c6a88163241e3538573c41b8416f874dba - arm-trusted-firmware.t234/plat/st/stm32mp2/bl31_plat_setup.c 3533666c8ba110bbdcede6c7777e3b4565966536 - arm-trusted-firmware.t234/plat/st/stm32mp2/stm32mp2_private.c 94a8b4f1139c81aa1befa3d335a4d38f439ce4cf - arm-trusted-firmware.t234/plat/st/stm32mp2/stm32mp2_usb_dfu.c 17ebead11bacaf22bcc000c300e149639140d1d2 - arm-trusted-firmware.t234/plat/st/stm32mp2/stm32mp2_syscfg.c 0ee0edb29cb2b662a23109663e1bf99e19aa4de6 - arm-trusted-firmware.t234/plat/st/stm32mp2/stm32mp2_def.h ffc7ff7004de939a2e562673a2ee31578c92a363 - arm-trusted-firmware.t234/plat/st/stm32mp2/bl2_plat_setup.c 279a44b5cd00d8ddf4c6526dc3033004ccd64820 - arm-trusted-firmware.t234/plat/st/stm32mp2/stm32mp2_topology.c 81d9f8448d325100e6d1b56052fd780541991df0 - arm-trusted-firmware.t234/plat/st/stm32mp2/stm32mp2_pm.c adbdb019e9eac1b28f2fc1660021660cea1f6e79 - arm-trusted-firmware.t234/plat/st/stm32mp2/include/plat_macros.S b438b9a1d9eb85f36249ae119418e0354ca29689 - arm-trusted-firmware.t234/plat/st/stm32mp2/include/boot_api.h 998a7724e6765354cb630adf5a19c6d3ddd24656 - arm-trusted-firmware.t234/plat/st/stm32mp2/include/stm32mp2_private.h 3208080f99983f0d7c366498b7101e1898effe23 - arm-trusted-firmware.t234/plat/st/stm32mp2/include/platform_def.h fcd7047343f3b3a63e96e01d368173ebd70338d3 - arm-trusted-firmware.t234/plat/st/stm32mp2/include/plat_tbbr_img_def.h 898bb7d02ed7ba8e25e9f3484ac86c3ca05760ef - arm-trusted-firmware.t234/plat/st/stm32mp2/aarch64/stm32mp2.ld.S 2b925179f2562cd993190457d6321085ca802981 - arm-trusted-firmware.t234/plat/st/stm32mp2/aarch64/stm32mp2.S 1bf7296f7a9251e10006dd206f33617cfa0eca5a - arm-trusted-firmware.t234/plat/st/stm32mp2/aarch64/stm32mp2_helper.S 3c4ffc5988928f60a4c4017e161db2dacfc51433 - arm-trusted-firmware.t234/plat/aspeed/ast2700/plat_topology.c c13c9949e6fc87d661d57c1833e0c1056ca130d5 - arm-trusted-firmware.t234/plat/aspeed/ast2700/plat_bl31_setup.c 7303317b4d929ac7d91eb9263618f33bb78c1383 - arm-trusted-firmware.t234/plat/aspeed/ast2700/plat_helpers.S b65f7224bcc6b176d9d46a6f5b979d3adeebf7f2 - arm-trusted-firmware.t234/plat/aspeed/ast2700/plat_pm.c 9dd5a6fe730f6a211e2b33b8e6de09d90f1f330d - arm-trusted-firmware.t234/plat/aspeed/ast2700/include/plat_macros.S 5b883718b7852523086995ef91658c6ddbe24368 - arm-trusted-firmware.t234/plat/aspeed/ast2700/include/platform_reg.h 093639073d5f42df9c79565535c7d732a80f8b73 - arm-trusted-firmware.t234/plat/aspeed/ast2700/include/platform_def.h 046cbd941d12f41d3fa373d7b4a81a5719a72aa9 - arm-trusted-firmware.t234/plat/rockchip/rk3568/plat_sip_calls.c db744ce1fd25b3e4dc1204330e2469b2ea559c78 - arm-trusted-firmware.t234/plat/rockchip/rk3568/rk3568_def.h bd39550f20390d82b1df1d9156cfff976a84db47 - arm-trusted-firmware.t234/plat/rockchip/rk3568/include/plat.ld.S c5054bc95bdb950f3b97c7ab0190939e4f2134ac - arm-trusted-firmware.t234/plat/rockchip/rk3568/include/plat_sip_calls.h 1a0afffd54ac8323561c8e59e5343885d6d6297e - arm-trusted-firmware.t234/plat/rockchip/rk3568/include/platform_def.h d9a6a6abf3f3dd8c5c9f3d5e420a6f28ef5cea06 - arm-trusted-firmware.t234/plat/rockchip/rk3568/drivers/pmu/plat_pmu_macros.S 80c5fba0ce3790eda6a6ce6b71dda6cf857426b3 - arm-trusted-firmware.t234/plat/rockchip/rk3568/drivers/pmu/pmu.c ba4f72eb484610519f509a5313f6ed538d2cc486 - arm-trusted-firmware.t234/plat/rockchip/rk3568/drivers/pmu/pmu.h de7fb5aa3c6c7d6de12b128d4e14c34ccd96f16c - arm-trusted-firmware.t234/plat/rockchip/rk3568/drivers/soc/soc.c 26b15879e76e06a97e36025606a4683cd37bfcfb - arm-trusted-firmware.t234/plat/rockchip/rk3568/drivers/soc/soc.h e164c03ecd681a0626a63bed9a56db25fc608c37 - arm-trusted-firmware.t234/plat/rockchip/rk3588/rk3588_def.h 722cb58cd92e87efce107585eee82bebdcaa620b - arm-trusted-firmware.t234/plat/rockchip/rk3588/plat_sip_calls.c 425605e5b2a8d6b02d2762b50cdb18cac73a8890 - arm-trusted-firmware.t234/plat/rockchip/rk3588/include/plat.ld.S af8960d3632f9179c6fedc655200c05f9182dda5 - arm-trusted-firmware.t234/plat/rockchip/rk3588/include/plat_sip_calls.h d6740bc959d6ed4a93212e49ada0441eae541ff8 - arm-trusted-firmware.t234/plat/rockchip/rk3588/include/platform_def.h a25747c43404b1b24e74f72864bc7b449b3050d7 - arm-trusted-firmware.t234/plat/rockchip/rk3588/drivers/secure/secure.h 471b83c428fea2ae2b4e176506f3d1977dc91783 - arm-trusted-firmware.t234/plat/rockchip/rk3588/drivers/secure/secure.c f65947a433211f9a2ff9c6bc6788d38a96c2b26d - arm-trusted-firmware.t234/plat/rockchip/rk3588/drivers/pmu/plat_pmu_macros.S c839128c4e2509de79d4cb77ba6e5f4652273c3f - arm-trusted-firmware.t234/plat/rockchip/rk3588/drivers/pmu/pmu.c 0b20686b66dc0e71e6e80bd4da4c9121e20ef5d6 - arm-trusted-firmware.t234/plat/rockchip/rk3588/drivers/pmu/pm_pd_regs.h 99ad903e3e40941341d3992d2e50afc3529b56a0 - arm-trusted-firmware.t234/plat/rockchip/rk3588/drivers/pmu/pm_pd_regs.c a560a8847ab87eaacb5c634461bd407f99b622d4 - arm-trusted-firmware.t234/plat/rockchip/rk3588/drivers/pmu/pmu.h d828bbf1f2fdaf7c8ca16a6e0b8c5fcc4d636827 - arm-trusted-firmware.t234/plat/rockchip/rk3588/drivers/soc/soc.c bbb76b77b4df99d8fab8ec9ea3d5b9f6dba8b72b - arm-trusted-firmware.t234/plat/rockchip/rk3588/drivers/soc/soc.h 10a84bbb533400b471e84a6707b789966a291a3a - arm-trusted-firmware.t234/plat/rockchip/rk3588/drivers/scmi/rk3588_rstd.c 1193e071e9b73dfc13254fbb14aa5fad189715d5 - arm-trusted-firmware.t234/plat/rockchip/rk3588/drivers/scmi/rk3588_clk.h a9f6a62fac2c5a95c50dd5c4f5d46d5aa6ab3510 - arm-trusted-firmware.t234/plat/rockchip/rk3588/drivers/scmi/rk3588_clk.c bfe2404fd1a0527ae5a717e68937706ff9804770 - arm-trusted-firmware.t234/plat/rockchip/common/plat_pm_helpers.c 3bb10820f3cac4793d72ccd0dbaa9513b9945d80 - arm-trusted-firmware.t234/plat/rockchip/common/rockchip_gicv3.c 4a1355d1645ef943a89aa54999041bd5a970c764 - arm-trusted-firmware.t234/plat/rockchip/common/rockchip_stack_protector.c 9213c21ad6f4d071ef85303d7f16f295b02bc212 - arm-trusted-firmware.t234/plat/rockchip/common/rockchip_gicv2.c 32f9de1c486103a42cf6a9d291f42989b42a98e4 - arm-trusted-firmware.t234/plat/rockchip/common/plat_topology.c 1f63c15382d48351f3d1c1709e7428545ce2cb72 - arm-trusted-firmware.t234/plat/rockchip/common/rockchip_sip_svc.c ba17a687e1dfb259bb313a008db3b9ba7f83171e - arm-trusted-firmware.t234/plat/rockchip/common/bl31_plat_setup.c 6521811c0b99295a51c9441701e0fb81a72adff2 - arm-trusted-firmware.t234/plat/rockchip/common/sp_min_plat_setup.c 2047ecc940bb80f5a0b484df48d3c24d285820e9 - arm-trusted-firmware.t234/plat/rockchip/common/params_setup.c 85d08d7cf74717daed56a0770f3c79bca90280dc - arm-trusted-firmware.t234/plat/rockchip/common/plat_pm.c 4db0b70aecaf5352c4deda76075a44c7ed772f91 - arm-trusted-firmware.t234/plat/rockchip/common/pmusram/cpus_on_fixed_addr.S 1b33ae60df43cf398d1a8b472866e811981ad1c4 - arm-trusted-firmware.t234/plat/rockchip/common/pmusram/cpus_on_fixed_addr.h 1b803d2536e22fdacd3d18c47ed89eea6880e443 - arm-trusted-firmware.t234/plat/rockchip/common/include/plat_macros.S e0b9109d2e15ba78290c67b35d231cc82990137e - arm-trusted-firmware.t234/plat/rockchip/common/include/plat_params.h 7c49c532d994db62b241d7e2c4b6bd6a509bb057 - arm-trusted-firmware.t234/plat/rockchip/common/include/plat_private.h bcad2d4a4efa92987138714b5c570e3d09a455a5 - arm-trusted-firmware.t234/plat/rockchip/common/include/plat_pm_helpers.h 840c5bba5d5b4a5cddde5551f3344b54099c1938 - arm-trusted-firmware.t234/plat/rockchip/common/include/rockchip_sip_svc.h a66d999fd75887d0dc3e6b4e5246df6adef71239 - arm-trusted-firmware.t234/plat/rockchip/common/drivers/pmu/pmu_com.h 5c96dda447934109fef22dbfc20108fea56100fe - arm-trusted-firmware.t234/plat/rockchip/common/drivers/parameter/ddr_parameter.c e40967392bea64496e752401f887b55eae946bf3 - arm-trusted-firmware.t234/plat/rockchip/common/drivers/parameter/ddr_parameter.h 56bd29d7f9b99e05b9917f2a2e68d9aac47900d1 - arm-trusted-firmware.t234/plat/rockchip/common/aarch64/plat_helpers.S 258f177b9b9412883f714cff3406818288eca04f - arm-trusted-firmware.t234/plat/rockchip/common/aarch64/pmu_sram_cpus_on.S b093c6e7d10be0c02ee95533e2ad7dce86102b2f - arm-trusted-firmware.t234/plat/rockchip/common/aarch64/platform_common.c 83348aebc9c7f6082dea782ec56117cbbc1a509a - arm-trusted-firmware.t234/plat/rockchip/common/aarch32/plat_helpers.S ba0fb41c4b6e827fc3092feb1e41d096daa7e77c - arm-trusted-firmware.t234/plat/rockchip/common/aarch32/pmu_sram_cpus_on.S 2c9501229129032c44b8b888db1fac2a0a270830 - arm-trusted-firmware.t234/plat/rockchip/common/aarch32/platform_common.c 3f50031abceb2650a87e1c823ed499acb67699dc - arm-trusted-firmware.t234/plat/rockchip/common/scmi/scmi.c 26eb5869e10f837a162f1876df78daf1ab69fdbe - arm-trusted-firmware.t234/plat/rockchip/common/scmi/scmi_clock.h 1b5042fa35408146c9efc51f91fa839c7205c321 - arm-trusted-firmware.t234/plat/rockchip/common/scmi/scmi_rstd.h 07a40d3c7729c191a7ba4f4836c54e07c6312b75 - arm-trusted-firmware.t234/plat/rockchip/common/scmi/scmi_clock.c f314f65b095383a27b50d043515e4c0498d90f71 - arm-trusted-firmware.t234/plat/rockchip/common/scmi/scmi_rstd.c 0b8ef1037611c38ba89966b1da4ef153e47b4fb4 - arm-trusted-firmware.t234/plat/rockchip/rk3368/rk3368_def.h 524ab6d6a8a79e76857af71a8c36886929a16243 - arm-trusted-firmware.t234/plat/rockchip/rk3368/plat_sip_calls.c c03dbe37ab69ed71bbbc9100b47ff77d3c1f19e9 - arm-trusted-firmware.t234/plat/rockchip/rk3368/include/plat.ld.S 0454e2aefd623a64760090a825f3cb0c26b0a3ca - arm-trusted-firmware.t234/plat/rockchip/rk3368/include/plat_sip_calls.h 5817c26932930a69f20037fcfd33b6f700e518a0 - arm-trusted-firmware.t234/plat/rockchip/rk3368/include/platform_def.h 0ea97dd2ed72ec48826e4668463b1067b1e3e91a - arm-trusted-firmware.t234/plat/rockchip/rk3368/drivers/pmu/plat_pmu_macros.S 859692a896bf24f76093c6cc1a923f3bd7f06c49 - arm-trusted-firmware.t234/plat/rockchip/rk3368/drivers/pmu/pmu.c 985e72c79b58499d32fbf6ef6f46a741c6356e9d - arm-trusted-firmware.t234/plat/rockchip/rk3368/drivers/pmu/pmu.h a4fe0b238351912e5a3b7e1de16ea4b470dbcfe0 - arm-trusted-firmware.t234/plat/rockchip/rk3368/drivers/ddr/ddr_rk3368.h edac1a959247a82db5f820097a9f8ded6c4665b4 - arm-trusted-firmware.t234/plat/rockchip/rk3368/drivers/ddr/ddr_rk3368.c 7a2d810a3f11780033972a9b1f3f2eb09adddfc5 - arm-trusted-firmware.t234/plat/rockchip/rk3368/drivers/ddr/rk3368_ddr_reg_resume_V1.05.bin a39f5eb5f70d4ec19316c1bbed951ac31a7e97b5 - arm-trusted-firmware.t234/plat/rockchip/rk3368/drivers/soc/soc.c cb622b7fdee1e5387ed783d371b6cfdd0400df92 - arm-trusted-firmware.t234/plat/rockchip/rk3368/drivers/soc/soc.h 524ab6d6a8a79e76857af71a8c36886929a16243 - arm-trusted-firmware.t234/plat/rockchip/rk3288/plat_sip_calls.c 7d9851bfe1b3a6bff1b3fe3a5a42152bdbbdd641 - arm-trusted-firmware.t234/plat/rockchip/rk3288/rk3288_def.h 0454e2aefd623a64760090a825f3cb0c26b0a3ca - arm-trusted-firmware.t234/plat/rockchip/rk3288/include/plat_sip_calls.h 0a2a001f434d83ab306c453b6d60f886a0b59a96 - arm-trusted-firmware.t234/plat/rockchip/rk3288/include/platform_def.h 58f0ccc10fae70932566781c7c34457a239e027c - arm-trusted-firmware.t234/plat/rockchip/rk3288/include/plat_sp_min.ld.S 1321792bce42c44c3fed91fea86cceca52486ffa - arm-trusted-firmware.t234/plat/rockchip/rk3288/include/shared/bl32_param.h 70ecc34e2c4236edbd52a088d6dc72300d1038e0 - arm-trusted-firmware.t234/plat/rockchip/rk3288/drivers/secure/secure.h 90e4b5914845f3238bde4617bcf04acabfc52406 - arm-trusted-firmware.t234/plat/rockchip/rk3288/drivers/secure/secure.c db1ef060ee221e9b61acbb781c42ed42e926b26e - arm-trusted-firmware.t234/plat/rockchip/rk3288/drivers/pmu/plat_pmu_macros.S 67df6cab20c4cca027c76c923468b9b4a734b610 - arm-trusted-firmware.t234/plat/rockchip/rk3288/drivers/pmu/pmu.c 53d9e3936b39e758560745d492d1473ac9c98278 - arm-trusted-firmware.t234/plat/rockchip/rk3288/drivers/pmu/pmu.h 4f36427668a7b19acff9330d467b130430031017 - arm-trusted-firmware.t234/plat/rockchip/rk3288/drivers/soc/soc.c 00a800ecdcad577d80ed2968cfee8abc2ff260d0 - arm-trusted-firmware.t234/plat/rockchip/rk3288/drivers/soc/soc.h 80988c6b4c1d5c128f556b4704d2a13dca1b94ac - arm-trusted-firmware.t234/plat/rockchip/rk3399/plat_sip_calls.c 07fcff2e4785739f2818730be2df2798395d6dd0 - arm-trusted-firmware.t234/plat/rockchip/rk3399/rk3399_def.h 735db5fedc39c83875dd50d345431e840a75ce95 - arm-trusted-firmware.t234/plat/rockchip/rk3399/include/addressmap.h 33691c33d59c3cbf5321efb5e9cf1ce6f908b1b3 - arm-trusted-firmware.t234/plat/rockchip/rk3399/include/plat.ld.S 0454e2aefd623a64760090a825f3cb0c26b0a3ca - arm-trusted-firmware.t234/plat/rockchip/rk3399/include/plat_sip_calls.h d037385198294976c392eaac15722c2bc43171e6 - arm-trusted-firmware.t234/plat/rockchip/rk3399/include/platform_def.h f61d8134dfdbc2de01b130177e3623bfc96e582b - arm-trusted-firmware.t234/plat/rockchip/rk3399/include/shared/dram_regs.h 37de06dae36b2c9133dfa3db58b9403eca97534e - arm-trusted-firmware.t234/plat/rockchip/rk3399/include/shared/m0_param.h a3ec096942a7038a658d2de2da28c8d7772e2601 - arm-trusted-firmware.t234/plat/rockchip/rk3399/include/shared/pmu_bits.h dffb716056a5cfe4289bde5769bacd0a9c517467 - arm-trusted-firmware.t234/plat/rockchip/rk3399/include/shared/bl31_param.h d3a8c566b07530d947493f642a829c2173e7eb3c - arm-trusted-firmware.t234/plat/rockchip/rk3399/include/shared/addressmap_shared.h 514bb50a35bc277734414a501833d9cf9103b613 - arm-trusted-firmware.t234/plat/rockchip/rk3399/include/shared/misc_regs.h e27f9ab0eb7cc700bac4af81ef063675ddea3d16 - arm-trusted-firmware.t234/plat/rockchip/rk3399/include/shared/pmu_regs.h 82920405b9733297c9a7904d46fef28aed2c5372 - arm-trusted-firmware.t234/plat/rockchip/rk3399/drivers/secure/secure.h 12d0e498bcf7645b6d17eda0b6c88f9c68345720 - arm-trusted-firmware.t234/plat/rockchip/rk3399/drivers/secure/secure.c fdf96b7b34ebbd88b6c053c20c493dfcd5d2eec6 - arm-trusted-firmware.t234/plat/rockchip/rk3399/drivers/pmu/m0_ctl.h 4f34aa4fe829a116338b7c8cb363091b98b1df1c - arm-trusted-firmware.t234/plat/rockchip/rk3399/drivers/pmu/plat_pmu_macros.S ce25fa3f4352a520a7ffae7ade334c17de271814 - arm-trusted-firmware.t234/plat/rockchip/rk3399/drivers/pmu/pmu.c 26f96f6bfc5d8cd2811341eaa144693019daa5cf - arm-trusted-firmware.t234/plat/rockchip/rk3399/drivers/pmu/pmu.h 8080df60a96f3ccb59e64a8c4468c29298a40160 - arm-trusted-firmware.t234/plat/rockchip/rk3399/drivers/pmu/m0_ctl.c d110f9fe7e7241dcb85193068eefabfe25ec8502 - arm-trusted-firmware.t234/plat/rockchip/rk3399/drivers/pmu/pmu_fw.S 3438e67609170c78e495d3cd8db4d7d9f8f96341 - arm-trusted-firmware.t234/plat/rockchip/rk3399/drivers/m0/Makefile 98a096aced18ab4c9a4b3ab325773ed273acd4cd - arm-trusted-firmware.t234/plat/rockchip/rk3399/drivers/m0/include/addressmap.h 222366fd88fa37c34896b96be4724020febaf122 - arm-trusted-firmware.t234/plat/rockchip/rk3399/drivers/m0/include/rk3399_mcu.h 9cfa6b80558dac90724c830c7c2b792099232962 - arm-trusted-firmware.t234/plat/rockchip/rk3399/drivers/m0/src/rk3399m0.ld.S 249a2bba707f4aae60e76e4d2ca07180426f3657 - arm-trusted-firmware.t234/plat/rockchip/rk3399/drivers/m0/src/stopwatch.c 3832f35bf0192ab6299ed6f72d97ea798c64ec01 - arm-trusted-firmware.t234/plat/rockchip/rk3399/drivers/m0/src/dram.c c651d2e10f915a285792aa7e66836e66a3fb3b68 - arm-trusted-firmware.t234/plat/rockchip/rk3399/drivers/m0/src/startup.c 54eadcdfdad063885889595045b641fa6a8454a1 - arm-trusted-firmware.t234/plat/rockchip/rk3399/drivers/m0/src/suspend.c 912b3ac53149ee0912cdc571503cbe6f5d9e5e31 - arm-trusted-firmware.t234/plat/rockchip/rk3399/drivers/pwm/pwm.h 81bb90565c30ebb1d2a2074e665099c5df4b3f16 - arm-trusted-firmware.t234/plat/rockchip/rk3399/drivers/pwm/pwm.c e4ba052fe71c1dbb0fd712a9e23751995fa17236 - arm-trusted-firmware.t234/plat/rockchip/rk3399/drivers/dp/hdcp.bin 8af098c906ff4222b7fb1b8a8e528a842931e11a - arm-trusted-firmware.t234/plat/rockchip/rk3399/drivers/dp/cdn_dp.c f9bf2a5c3fa81d2991e4880f4c0d082a329f9840 - arm-trusted-firmware.t234/plat/rockchip/rk3399/drivers/dp/cdn_dp.h 1c5f6ab9e0780ba09fc4009303d8f48ca69ba0d0 - arm-trusted-firmware.t234/plat/rockchip/rk3399/drivers/gpio/rk3399_gpio.c e385bc607caa24dd99309765bffdb7e49e36b5cd - arm-trusted-firmware.t234/plat/rockchip/rk3399/drivers/dram/dfs.c cc96ce897ce3dfd398d571f73d60df020e312a7f - arm-trusted-firmware.t234/plat/rockchip/rk3399/drivers/dram/dram.h 4054be663e17eccfa1f97c242b47ed2aa7661ee2 - arm-trusted-firmware.t234/plat/rockchip/rk3399/drivers/dram/dram_spec_timing.h 1a0ef7b5013eea98c8892cc73f9acf7aadc6542b - arm-trusted-firmware.t234/plat/rockchip/rk3399/drivers/dram/dram.c 91fa17de464bf17060f5d782d3addc2d250f2bcf - arm-trusted-firmware.t234/plat/rockchip/rk3399/drivers/dram/dfs.h 8bb28c62f323cba1149703071fa6c9cd723e7681 - arm-trusted-firmware.t234/plat/rockchip/rk3399/drivers/dram/suspend.h 341cf7780e76c0eed9bb587ced84821148eaeba4 - arm-trusted-firmware.t234/plat/rockchip/rk3399/drivers/dram/dram_spec_timing.c 27aa9609a5b7f4a133b52b7f298cef95b6b1332a - arm-trusted-firmware.t234/plat/rockchip/rk3399/drivers/dram/suspend.c 8524ea750c376402a2c507655783fb69d6ca49af - arm-trusted-firmware.t234/plat/rockchip/rk3399/drivers/soc/soc.c d6f6a92953b02dda92949d05699b4a8c09ec1ab6 - arm-trusted-firmware.t234/plat/rockchip/rk3399/drivers/soc/soc.h ef5a8ce281d95041b91f8f165ef782642d022de2 - arm-trusted-firmware.t234/plat/rockchip/px30/px30_def.h 6fd13eff5a2d17a6f2e651b3eba6211a93d3522f - arm-trusted-firmware.t234/plat/rockchip/px30/plat_sip_calls.c be822c3b60a3f8f4215925d9c6aa8ff3d90ab56b - arm-trusted-firmware.t234/plat/rockchip/px30/include/plat.ld.S 4abb3f49d90cc7242ff9d366432f9423ed190c44 - arm-trusted-firmware.t234/plat/rockchip/px30/include/plat_sip_calls.h 8b1c4b26a5cf109ec97a2bd711e46dc76c20891c - arm-trusted-firmware.t234/plat/rockchip/px30/include/platform_def.h 7129bd0759914b2bdbe0af12743e79277b990a3d - arm-trusted-firmware.t234/plat/rockchip/px30/drivers/secure/secure.h e5df7e7476f59e23d9c3c1097c64bad93fb273ca - arm-trusted-firmware.t234/plat/rockchip/px30/drivers/secure/secure.c 4661321c301694bb1cfb029693c60d50387885d6 - arm-trusted-firmware.t234/plat/rockchip/px30/drivers/pmu/plat_pmu_macros.S 8d80af186adc9632f394dc2fa3241efc89d3697f - arm-trusted-firmware.t234/plat/rockchip/px30/drivers/pmu/pmu.c 6940e4242af969ec608caab6d93dd03364b78580 - arm-trusted-firmware.t234/plat/rockchip/px30/drivers/pmu/pmu.h 288f8f52c9a5423576d1fd403f776da8e5906395 - arm-trusted-firmware.t234/plat/rockchip/px30/drivers/soc/soc.c dbc0dd67905cb60b55ff82d4f1d8bf96a7ec2514 - arm-trusted-firmware.t234/plat/rockchip/px30/drivers/soc/soc.h 9eb41f0b086d93dd52f10cd88c871e9f872da485 - arm-trusted-firmware.t234/plat/rockchip/rk3328/rk3328_def.h c03dbe37ab69ed71bbbc9100b47ff77d3c1f19e9 - arm-trusted-firmware.t234/plat/rockchip/rk3328/include/plat.ld.S d0cf327dcd15f8fc85f2c3c93e82fd6199973f0b - arm-trusted-firmware.t234/plat/rockchip/rk3328/include/platform_def.h 74e69a5d06c7c10f8fd04052bfd92c89a6b685c2 - arm-trusted-firmware.t234/plat/rockchip/rk3328/drivers/pmu/plat_pmu_macros.S 38e448c11bc1d7a2c4d8a91f47f89579e1ba1692 - arm-trusted-firmware.t234/plat/rockchip/rk3328/drivers/pmu/pmu.c 75d3fb351c1418d28d1be951921dde7cac623d53 - arm-trusted-firmware.t234/plat/rockchip/rk3328/drivers/pmu/pmu.h aa37703bdb16d2d93c4cb6a1c3f5740f10400717 - arm-trusted-firmware.t234/plat/rockchip/rk3328/drivers/soc/soc.c 7dabeaea27a9149c6997c51413ae55f6af467951 - arm-trusted-firmware.t234/plat/rockchip/rk3328/drivers/soc/soc.h 1b86970e6e211ba1548f3469a4682db7c31577f1 - arm-trusted-firmware.t234/plat/amlogic/common/aml_mhu.c 1c810633809eed169ef7ae47da01b6326b111a64 - arm-trusted-firmware.t234/plat/amlogic/common/aml_console.c f1168dcf0c90f4d7a3456d82b909e287a16875ed - arm-trusted-firmware.t234/plat/amlogic/common/aml_topology.c fa91c2d51bbe34be89ba41e055f4e78eba6ac67e - arm-trusted-firmware.t234/plat/amlogic/common/aml_efuse.c 2321fbf75d8e96d90a1b6f6a14160c91b949cabc - arm-trusted-firmware.t234/plat/amlogic/common/aml_scpi.c 22fc306f5f9b6613312023233481baaf99493614 - arm-trusted-firmware.t234/plat/amlogic/common/aml_sip_svc.c 887d16c962bbfdec5ddb366c33ffec0ad5697447 - arm-trusted-firmware.t234/plat/amlogic/common/aml_thermal.c 74bc476713af13ff5ee94c7bdad6c5763f99e9af - arm-trusted-firmware.t234/plat/amlogic/common/include/plat_macros.S 5240bdc42061a821a089cae1eeca3fb799e6aa1c - arm-trusted-firmware.t234/plat/amlogic/common/include/aml_private.h 61752908966c74b637938d2fa11e73c5d5373d9d - arm-trusted-firmware.t234/plat/amlogic/common/aarch64/aml_helpers.S 28726387d3750ce4724f9147e5e173131ee7164f - arm-trusted-firmware.t234/plat/amlogic/g12a/g12a_common.c 03a70925292deabd473bf5ffcd0d0d95dd70456e - arm-trusted-firmware.t234/plat/amlogic/g12a/g12a_pm.c fe8712d8d4a3787c6c2456ffcc2cc468b12bfd7e - arm-trusted-firmware.t234/plat/amlogic/g12a/g12a_bl31_setup.c 495f096204283e82b03abed56414e3d1a29f9b6f - arm-trusted-firmware.t234/plat/amlogic/g12a/g12a_def.h 8e1154709ae343cd8d783739b29005ea2b9a7c7f - arm-trusted-firmware.t234/plat/amlogic/g12a/include/platform_def.h 3667781fa0058dcdd1cff5587b45c798978c7966 - arm-trusted-firmware.t234/plat/amlogic/axg/axg_bl31_setup.c d3c822e681ab6d5016ae06adb88ca9aeb6073aba - arm-trusted-firmware.t234/plat/amlogic/axg/axg_common.c 7fdb79ffddbe1ee7f1b2c543a1eaa07f2671a2ca - arm-trusted-firmware.t234/plat/amlogic/axg/axg_pm.c c60f26b9eb14d703065a758062f9c76e4e70f8ed - arm-trusted-firmware.t234/plat/amlogic/axg/axg_def.h faf31bdcea206b83c40fbe2d878c14fa8327a37a - arm-trusted-firmware.t234/plat/amlogic/axg/include/platform_def.h 3389361e87f5cd5e4f7e606599032c3aa3a41b72 - arm-trusted-firmware.t234/plat/amlogic/gxbb/gxbb_def.h 25d4db1b1e385a2e45f4ffea43edbfc8bf4fef89 - arm-trusted-firmware.t234/plat/amlogic/gxbb/gxbb_common.c 704885551348b4b44d9b7b092aafc3c54533b7e0 - arm-trusted-firmware.t234/plat/amlogic/gxbb/gxbb_bl31_setup.c 80fbc4757d8f389dc885b90a5eef8c0c4f6e23c2 - arm-trusted-firmware.t234/plat/amlogic/gxbb/gxbb_pm.c d558f98c64955249d21b9227149b68808cb3e358 - arm-trusted-firmware.t234/plat/amlogic/gxbb/include/platform_def.h 8b93edbe34b51b737299797607de4e6ff0003917 - arm-trusted-firmware.t234/plat/amlogic/gxl/gxl_common.c 550ec6753c2e8a5f41a920ea9bfffec47ae78dc8 - arm-trusted-firmware.t234/plat/amlogic/gxl/gxl_bl31_setup.c 5ce07f2865d514a3a8979c638337a338fa110f74 - arm-trusted-firmware.t234/plat/amlogic/gxl/gxl_pm.c 68a18488494ea52a108462ec30b6833447e75e62 - arm-trusted-firmware.t234/plat/amlogic/gxl/gxl_def.h 22603b51918b7c1f721eee33d26629b16cff6683 - arm-trusted-firmware.t234/plat/amlogic/gxl/include/platform_def.h 0daa3a8c1ed607bfafc9ba0daa93d2de60c3c19e - arm-trusted-firmware.t234/plat/rpi/rpi5/rpi5_setup.c fb7a65f5e63f9ff71666e9d3eb9da94a92f87657 - arm-trusted-firmware.t234/plat/rpi/rpi5/include/plat.ld.S 6fea9452a77e8d6eeb1fdb1c20f061aa14a5c1fd - arm-trusted-firmware.t234/plat/rpi/rpi5/include/platform_def.h 9924fb496a54b9815362ce2168a6fa02e3272e38 - arm-trusted-firmware.t234/plat/rpi/rpi5/include/rpi_hw.h 46c13e3cff3d9c29a733d01629589bd31b37eb5e - arm-trusted-firmware.t234/plat/rpi/common/rpi3_stack_protector.c a2d78854277019ce68ad1c236091dffcc55e8649 - arm-trusted-firmware.t234/plat/rpi/common/rpi3_topology.c 42b3bec4b29977924bd7bf3da9ec372d1ec2dcd4 - arm-trusted-firmware.t234/plat/rpi/common/rpi3_console_dual.c d2d1fd0fffc8a200fd42f1b74c8c7d54c483f219 - arm-trusted-firmware.t234/plat/rpi/common/rpi3_trusted_boot.c 11c87bf8a084123bf9a431cc289a66e23112bade - arm-trusted-firmware.t234/plat/rpi/common/rpi3_rotpk.S dedb8aeb92c172f57fe525444f7dbdcc1fa2d2b8 - arm-trusted-firmware.t234/plat/rpi/common/rpi3_pm.c e621f46501a2d1856f297145947d1c8d89d5f990 - arm-trusted-firmware.t234/plat/rpi/common/rpi3_image_load.c 6362652e60de8bcc5d723a13459a55c254c8d476 - arm-trusted-firmware.t234/plat/rpi/common/rpi3_console_pl011.c b697cf6920f885db9dda66079d5997b292c5f7af - arm-trusted-firmware.t234/plat/rpi/common/rpi3_common.c 854bc00d3c5fce60726920c1e5b1b7cd9352568a - arm-trusted-firmware.t234/plat/rpi/common/rpi3_io_storage.c 8609a5c2bf4708bd3e911d1e1bb6d70d9786a950 - arm-trusted-firmware.t234/plat/rpi/common/rpi4_bl31_setup.c a03e44dcbb6ab955502dd4f183cb5239c89200b9 - arm-trusted-firmware.t234/plat/rpi/common/rpi_pci_svc.c cd6861322dab161ff32b161e169f6666527d7c58 - arm-trusted-firmware.t234/plat/rpi/common/include/plat_macros.S 0b18df9aeaa2471fca9ccca4aa97bd59e9260c62 - arm-trusted-firmware.t234/plat/rpi/common/include/rpi_shared.h 88f0a7d8a08454725fb7a8be1beed6f25794909d - arm-trusted-firmware.t234/plat/rpi/common/aarch64/armstub8_header.S a700a057a4a1fb7d34369437a66b726ca5aabf38 - arm-trusted-firmware.t234/plat/rpi/common/aarch64/plat_helpers.S 052815ff6a9d47f47e57d320313a74f10c8a34d3 - arm-trusted-firmware.t234/plat/rpi/rpi3/rpi3_bl31_setup.c 7196024a6af6785c77d069f9ef4452fb6add7253 - arm-trusted-firmware.t234/plat/rpi/rpi3/rpi3_bl2_setup.c 1d34ea11e67e063bb8bd34859509e7056e2f0f88 - arm-trusted-firmware.t234/plat/rpi/rpi3/rpi3_bl1_setup.c fd5000ab9d2eac8341e267b879e1ef29eaebf5d7 - arm-trusted-firmware.t234/plat/rpi/rpi3/rpi_mbox_board.c cc26f2aa2450e40b407d6c6cf3b2930941104a04 - arm-trusted-firmware.t234/plat/rpi/rpi3/include/platform_def.h f7fa2098bc54614b8e72440485d1a39018e94462 - arm-trusted-firmware.t234/plat/rpi/rpi3/include/rpi_hw.h 5a79ec05194636d3850044f358b4673a3f0b9fa0 - arm-trusted-firmware.t234/plat/rpi/rpi3/aarch64/rpi3_bl2_mem_params_desc.c 244b486f5228a8951dfd37236b46a480b6d4b89a - arm-trusted-firmware.t234/plat/rpi/rpi4/rpi4_setup.c 4d8d91a23a19a15ff7c18f8e6e523c26cd453f2f - arm-trusted-firmware.t234/plat/rpi/rpi4/include/plat.ld.S dd7d4e7ce479f02308a052bafb30a9cd5571a9d4 - arm-trusted-firmware.t234/plat/rpi/rpi4/include/platform_def.h f3c4e6ee6202d875428eb7ee77377945e5bea22f - arm-trusted-firmware.t234/plat/rpi/rpi4/include/rpi_hw.h 9b8db7387e47af68fc183fe909d3060d65438cb2 - arm-trusted-firmware.t234/plat/brcm/common/brcm_io_storage.c 6d6865834cfc5ce82506bf1ef6df2e3cb196e028 - arm-trusted-firmware.t234/plat/brcm/common/brcm_scpi.c c6468bf11edbc5de5a422f7edfa9ac5a8fee6561 - arm-trusted-firmware.t234/plat/brcm/common/brcm_bl31_setup.c 389238486613bb86c6032f788a4605c782e7475c - arm-trusted-firmware.t234/plat/brcm/common/brcm_gicv3.c bc616aa281d726780f6a73b3986accbe986e780f - arm-trusted-firmware.t234/plat/brcm/common/brcm_bl2_mem_params_desc.c 02ea7c4006c2910720bf4a85c3766c293d4cb8e5 - arm-trusted-firmware.t234/plat/brcm/common/brcm_mhu.h 43da4a7bd6435c6cc7d733e6363a59cacabb9ef5 - arm-trusted-firmware.t234/plat/brcm/common/brcm_mhu.c 43088754fcc9a1fcbb6308988d79eca0c2771d5a - arm-trusted-firmware.t234/plat/brcm/common/brcm_ccn.c 48faf64df1848d8493a3f273494ea883a4aafb0c - arm-trusted-firmware.t234/plat/brcm/common/brcm_common.c 303c81103a6ebbdf9e4afc16b17d17195a5b9238 - arm-trusted-firmware.t234/plat/brcm/common/brcm_scpi.h c02bbae941528cbae0665016d62e54bfffb74444 - arm-trusted-firmware.t234/plat/brcm/common/brcm_bl2_setup.c 2ef6d891873792dd5af17cc1091f369c0865c70d - arm-trusted-firmware.t234/plat/brcm/common/brcm_image_load.c 4573848f39ea4bfceb55e0932f0494af8b890d1d - arm-trusted-firmware.t234/plat/brcm/board/stingray/driver/sr_usb.h 136ec48ffd5cee7ea9fefb7439969040868a0b30 - arm-trusted-firmware.t234/plat/brcm/board/stingray/driver/swreg.c 13bbb4dc261e840997a59d4e914f071835d33fab - arm-trusted-firmware.t234/plat/brcm/board/stingray/driver/usb_phy.c 7cc68c731d1d4e967a6b258c94afef74800e2c27 - arm-trusted-firmware.t234/plat/brcm/board/stingray/driver/usb.c 483849480279e54ca28e4177fea05d6bd3cd36d7 - arm-trusted-firmware.t234/plat/brcm/board/stingray/driver/ihost_pll_config.c b4637f982a40118b9d83d3908d0b189d3524bce0 - arm-trusted-firmware.t234/plat/brcm/board/stingray/driver/plat_emmc.c 46e832c20411ea4d2bcbcf1cc8968149375047f4 - arm-trusted-firmware.t234/plat/brcm/board/stingray/driver/ext_sram_init/ext_sram_init.h d0dacd8fc79f78cee10bd8513550abf93624afe2 - arm-trusted-firmware.t234/plat/brcm/board/stingray/driver/ext_sram_init/ext_sram_init.c eed068af90592502021f8e15b556ae302cd8db87 - arm-trusted-firmware.t234/plat/brcm/board/stingray/driver/ddr/soc/include/board_family.h 2ef5c016a1130291e30fb58c1e1b397bb15a531c - arm-trusted-firmware.t234/plat/brcm/board/stingray/include/platform_sotp.h 491a5116f054df365b530dc8b09613f1178c2d8a - arm-trusted-firmware.t234/plat/brcm/board/stingray/include/sr_def.h 10104d7d5d9eeeb545dea9ac306deb2c5cf46036 - arm-trusted-firmware.t234/plat/brcm/board/stingray/include/plat_macros.S e7629876236e444ee69e40c96440f3f24b16fefe - arm-trusted-firmware.t234/plat/brcm/board/stingray/include/usb_phy.h 8c57e437d9f4b2b49f005f899624af9b47121102 - arm-trusted-firmware.t234/plat/brcm/board/stingray/include/crmu_def.h 9765542d155d4fc37ee167eda672c6a33030ca8c - arm-trusted-firmware.t234/plat/brcm/board/stingray/include/iommu.h 90c98d478915f89433c419b06613a52965aeeef6 - arm-trusted-firmware.t234/plat/brcm/board/stingray/include/sr_utils.h a6bea74c09e847241ba6a156aff89b12670cc98b - arm-trusted-firmware.t234/plat/brcm/board/stingray/include/scp_cmd.h 2817bede11ad2da4d5612a155f5a76e30b62de62 - arm-trusted-firmware.t234/plat/brcm/board/stingray/include/paxc.h bbaec5f331d8cf8f24898a8d172190c5f7940b6a - arm-trusted-firmware.t234/plat/brcm/board/stingray/include/ihost_pm.h d823df9c59408673229302e557a65ad1c404e047 - arm-trusted-firmware.t234/plat/brcm/board/stingray/include/platform_def.h 4bc4735b9e7c2a5eab8ae91a28d110dd24a42d75 - arm-trusted-firmware.t234/plat/brcm/board/stingray/include/sdio.h 0228e24fbe8ff775ac7a709f272d375a8e7aa3bf - arm-trusted-firmware.t234/plat/brcm/board/stingray/include/scp_utils.h 1dea9a2af71a56fe60929b854a2c73220603d2be - arm-trusted-firmware.t234/plat/brcm/board/stingray/include/timer_sync.h cc26d153c04427651e12bf00d19497e5bd8cb7a3 - arm-trusted-firmware.t234/plat/brcm/board/stingray/include/platform_usb.h 76dbcdb10f12f01d94b3c70d2f8562b0cc8b233a - arm-trusted-firmware.t234/plat/brcm/board/stingray/include/paxb.h b0a1c672d4d7095f6e7ec5305e084cb3a29a790e - arm-trusted-firmware.t234/plat/brcm/board/stingray/include/bl33_info.h 0ef862af40a95d70feda6b8367e6e7452e90099b - arm-trusted-firmware.t234/plat/brcm/board/stingray/include/board_info.h eeabf0e8e4cda99b503b2ea41298aff2d87e1278 - arm-trusted-firmware.t234/plat/brcm/board/stingray/include/ddr_init.h 2c4acf78dfd7c25c281471b6717273ff7920fea8 - arm-trusted-firmware.t234/plat/brcm/board/stingray/include/ncsi.h bd25c5d9d7605649bc1d1dee9a734ccb130101c3 - arm-trusted-firmware.t234/plat/brcm/board/stingray/include/fsx.h 1e67ee0873eb29816b418096b514d39c3aeb7d27 - arm-trusted-firmware.t234/plat/brcm/board/stingray/include/swreg.h ac2b64132debec3b54ae614c64dac69067b39291 - arm-trusted-firmware.t234/plat/brcm/board/stingray/aarch64/plat_helpers.S 78d2915d5c3a6c4b75eb97c897cd4e58b4d5b962 - arm-trusted-firmware.t234/plat/brcm/board/stingray/src/topology.c f89deabe82fe9129f1dde3fb24e57c940e008913 - arm-trusted-firmware.t234/plat/brcm/board/stingray/src/bl2_setup.c 52a5e5247c12940390abe486ab490a1d8929feb4 - arm-trusted-firmware.t234/plat/brcm/board/stingray/src/paxb.c 863c6f32899af28cd9a60fb273bdc02a29100114 - arm-trusted-firmware.t234/plat/brcm/board/stingray/src/sr_paxb_phy.c c01d8b9f9c48a1185129c492ab1f8ce1134ed892 - arm-trusted-firmware.t234/plat/brcm/board/stingray/src/scp_utils.c d746f7070f366ac250b3766606d2de76a6192436 - arm-trusted-firmware.t234/plat/brcm/board/stingray/src/fsx.c 75de08bf7cc548fc88463a459efa719ce9dae276 - arm-trusted-firmware.t234/plat/brcm/board/stingray/src/pm.c 085cb8e4f6dd01efc01f633680e7db315718c304 - arm-trusted-firmware.t234/plat/brcm/board/stingray/src/ihost_pm.c d15b82eea2aaa023805036e829ee46cd08ea72ed - arm-trusted-firmware.t234/plat/brcm/board/stingray/src/iommu.c e9f5650def0bf0c03c50ad69056cf6ff9d71a715 - arm-trusted-firmware.t234/plat/brcm/board/stingray/src/tz_sec.c 062b1d173f23bc015ebb5c790f890e5f2a6934e1 - arm-trusted-firmware.t234/plat/brcm/board/stingray/src/paxc.c 0283858faf5651d4db16f0e4b8bcaadd40bcabe1 - arm-trusted-firmware.t234/plat/brcm/board/stingray/src/scp_cmd.c 9b0afdae90ec3159bd428d4b9f586d84a0cb55b3 - arm-trusted-firmware.t234/plat/brcm/board/stingray/src/sdio.c 77916c4c9e55da373b1b66dba19dfed0034cde48 - arm-trusted-firmware.t234/plat/brcm/board/stingray/src/bl31_setup.c 072e5bc5c72a860c50c3413898b60dd18931b100 - arm-trusted-firmware.t234/plat/brcm/board/stingray/src/ncsi.c 1fd2e7122a0c63a14a64215ae5750097f050841b - arm-trusted-firmware.t234/plat/brcm/board/stingray/src/brcm_pm_ops.c 500e36754a0240001fe7b400bf8d4806a06de6ee - arm-trusted-firmware.t234/plat/brcm/board/common/timer_sync.c 2d3a08ac4729a455bffd5c4c70365350fec69e23 - arm-trusted-firmware.t234/plat/brcm/board/common/bcm_elog_ddr.h eeff346a4c2b6893ad0fa417570e747058627c11 - arm-trusted-firmware.t234/plat/brcm/board/common/cmn_sec.h 801bb1cdab4baf3440ac23728e6190881af4264f - arm-trusted-firmware.t234/plat/brcm/board/common/bcm_elog_ddr.c b2a5352558dc92001c80e614a9b293a1eb19573a - arm-trusted-firmware.t234/plat/brcm/board/common/plat_setup.c 9635661f5e56e9ab172dcec943257465bf36e634 - arm-trusted-firmware.t234/plat/brcm/board/common/bcm_elog.c c0ecc823e4de1814edd6bf48321b6317c448b16d - arm-trusted-firmware.t234/plat/brcm/board/common/sbl_util.c 5f45cc70d813bf16880f4f1f4a246ad6114fbb78 - arm-trusted-firmware.t234/plat/brcm/board/common/cmn_plat_util.h 9eda9f547bdfb6e83ef3c8d82d849e1e4cb68252 - arm-trusted-firmware.t234/plat/brcm/board/common/brcm_mbedtls.c e1b5c755e9973d3e41e6f8dd620990a0dd5ba5e6 - arm-trusted-firmware.t234/plat/brcm/board/common/cmn_plat_def.h dfc2e7fae9dd66b664758412e1f4c06762246ed6 - arm-trusted-firmware.t234/plat/brcm/board/common/cmn_sec.c 515e3aecc5237dcc8197e4e8ed7fd7d15765d808 - arm-trusted-firmware.t234/plat/brcm/board/common/bcm_console.c eca89f1edcb0c3fc702ac123a55821cde16106bb - arm-trusted-firmware.t234/plat/brcm/board/common/err.c 779be799404c9562032c8c586f3a3b23835ad722 - arm-trusted-firmware.t234/plat/brcm/board/common/board_arm_trusted_boot.c c124ba5ec6d9fc3e8f1f0b72d3852473ab67e998 - arm-trusted-firmware.t234/plat/brcm/board/common/board_common.c a731b4badf1cf5a90a0ab197b39a2723e4c85dd9 - arm-trusted-firmware.t234/plat/brcm/board/common/platform_common.c a794cd95a890c951acc5192426abc008b4213a8f - arm-trusted-firmware.t234/plat/brcm/board/common/chip_id.h 2cf7d5accbb22d89a3c89c768604f667a23bef52 - arm-trusted-firmware.t234/plat/brcm/board/common/sbl_util.h cc7d9e276a747dac9424d11c30e770fb8d806ff4 - arm-trusted-firmware.t234/plat/xilinx/zynqmp/zynqmp_ipi.c c06e075651f962326859a541fd4c6d54384e64a6 - arm-trusted-firmware.t234/plat/xilinx/zynqmp/sip_svc_setup.c 642eb4d4430e06b81dbd875c82162b74e9e8dd2c - arm-trusted-firmware.t234/plat/xilinx/zynqmp/plat_topology.c 3629335d3e583ddb6e37e48a2d6d7653b1985648 - arm-trusted-firmware.t234/plat/xilinx/zynqmp/bl31_zynqmp_setup.c eaef9a5e9145508301056f3fcb1a77e04a4c561a - arm-trusted-firmware.t234/plat/xilinx/zynqmp/plat_psci.c 34f4ef859bbabcddff900cfabd68a2090bf42175 - arm-trusted-firmware.t234/plat/xilinx/zynqmp/plat_zynqmp.c 9eaf999ae240de204662f71676fb66f53ecc332d - arm-trusted-firmware.t234/plat/xilinx/zynqmp/custom_sip_svc.c 73a2d5fda9d539ed08b6befd6b191510b9b43362 - arm-trusted-firmware.t234/plat/xilinx/zynqmp/zynqmp_ehf.c dee59d0a0aeb4843bf61e41e8c21be39c7ec546c - arm-trusted-firmware.t234/plat/xilinx/zynqmp/zynqmp_sdei.c 7c0e9941101ef7a46412a4a76b4f4a4e5b502191 - arm-trusted-firmware.t234/plat/xilinx/zynqmp/include/plat_macros.S ad638c9b601da8a4d3cbd78506ac054846db14f1 - arm-trusted-firmware.t234/plat/xilinx/zynqmp/include/plat_ipi.h cce139e76a7843b57fc7482ecb0388fd6b2a4911 - arm-trusted-firmware.t234/plat/xilinx/zynqmp/include/plat_private.h 9f203c79452a3fcd9e136bc23df740259ce0e205 - arm-trusted-firmware.t234/plat/xilinx/zynqmp/include/zynqmp_def.h 28439bb42d404d18393fdbe4d62dd4cd3292705b - arm-trusted-firmware.t234/plat/xilinx/zynqmp/include/platform_def.h 1c8c6518fff25d475d0df061a025384f19442a8a - arm-trusted-firmware.t234/plat/xilinx/zynqmp/include/custom_svc.h bc56321a1175337ac44a1c78f4d55551d63d60b4 - arm-trusted-firmware.t234/plat/xilinx/zynqmp/include/plat_pm_common.h 3072ddd097d56c74d4222aa74f0693da1d3320ce - arm-trusted-firmware.t234/plat/xilinx/zynqmp/aarch64/zynqmp_helpers.S eff36d802d067b0078f2b2d0e25a832e09138bbd - arm-trusted-firmware.t234/plat/xilinx/zynqmp/aarch64/zynqmp_common.c 563784af7e46e7f66cc1c67d3def08075cb5663e - arm-trusted-firmware.t234/plat/xilinx/zynqmp/pm_service/pm_api_ioctl.h 064c26ad5aa015282a59881e7a9fe9f5cbad799f - arm-trusted-firmware.t234/plat/xilinx/zynqmp/pm_service/zynqmp_pm_svc_main.h c5c1c23dcd39f835f1e6a82c8a4df4ec8f202888 - arm-trusted-firmware.t234/plat/xilinx/zynqmp/pm_service/zynqmp_pm_defs.h 08361ca069acf1918105f928b8b7c98835d94f5c - arm-trusted-firmware.t234/plat/xilinx/zynqmp/pm_service/pm_api_ioctl.c 113174a35274731059356e4cb16ab595234fb448 - arm-trusted-firmware.t234/plat/xilinx/zynqmp/pm_service/zynqmp_pm_api_sys.c 01cd92b68260ef2ea5b78bf01ad1e083de0dc222 - arm-trusted-firmware.t234/plat/xilinx/zynqmp/pm_service/zynqmp_pm_svc_main.c adeb0002ac2bd49d29b00e3333bfc87bcab0396a - arm-trusted-firmware.t234/plat/xilinx/zynqmp/pm_service/pm_api_pinctrl.c b753245ff55fee0c9ba49c7b2c3ad90457fdb873 - arm-trusted-firmware.t234/plat/xilinx/zynqmp/pm_service/pm_api_pinctrl.h 3198f77b2d6d3b55049508887b0fa242fb5b3884 - arm-trusted-firmware.t234/plat/xilinx/zynqmp/pm_service/pm_api_clock.h 611269f24718d7e93696a90d49172e54a66ac6a8 - arm-trusted-firmware.t234/plat/xilinx/zynqmp/pm_service/pm_api_clock.c 8acdd91f18b993b46531855492300c94e70f1eb6 - arm-trusted-firmware.t234/plat/xilinx/zynqmp/pm_service/pm_client.c 3becc2ae7d030cf76b8a5b670617c90c33fe8005 - arm-trusted-firmware.t234/plat/xilinx/zynqmp/pm_service/zynqmp_pm_api_sys.h 321387cbc42fe492729df181a5a8f0b6f6d0bc7a - arm-trusted-firmware.t234/plat/xilinx/versal/sip_svc_setup.c e6712e1ce7b24d2ef0bd5e3fc53c9b97185ce128 - arm-trusted-firmware.t234/plat/xilinx/versal/plat_topology.c ce54ee4b7b986bb10cc10c389ba555e62f714586 - arm-trusted-firmware.t234/plat/xilinx/versal/plat_versal.c f1d5667a70097ee8d1780fcf1626d47b6ffbd534 - arm-trusted-firmware.t234/plat/xilinx/versal/versal_ipi.c d40d09ef40e5affbe674c9b4d42249f01a48087b - arm-trusted-firmware.t234/plat/xilinx/versal/plat_psci.c 1c4573a41454be103fd5c851acdc7f10f34ff257 - arm-trusted-firmware.t234/plat/xilinx/versal/versal_gicv3.c a1fce13884c27764f98c796319919367f4453735 - arm-trusted-firmware.t234/plat/xilinx/versal/bl31_versal_setup.c 8c7b627a320c1e9439131898be571ce0ce2023a6 - arm-trusted-firmware.t234/plat/xilinx/versal/include/plat_macros.S a738107a7e91eb15a44d04a18a71b7c9b79b1f6a - arm-trusted-firmware.t234/plat/xilinx/versal/include/plat_ipi.h 8ad029d79365084ef71ad03ea882929b31b6f6e7 - arm-trusted-firmware.t234/plat/xilinx/versal/include/plat_private.h 725131219f4d9c362c19715b38a22e106214a024 - arm-trusted-firmware.t234/plat/xilinx/versal/include/platform_def.h 528a01ee2bc40db85bf6781c4e13a492e8e0cd98 - arm-trusted-firmware.t234/plat/xilinx/versal/include/versal_def.h 8f5ba9d023ea37ec1be405d0ab7c792818d61de9 - arm-trusted-firmware.t234/plat/xilinx/versal/include/plat_pm_common.h e7420b1437528d09e540e96242c60d13d0409380 - arm-trusted-firmware.t234/plat/xilinx/versal/aarch64/versal_helpers.S d4bc06e5340da4594b4a6129fa8228606d3e634e - arm-trusted-firmware.t234/plat/xilinx/versal/aarch64/versal_common.c 03a90fba2ffa4fdfe2083778b222e6648d46393e - arm-trusted-firmware.t234/plat/xilinx/versal/pm_service/pm_client.c 8cd7a670b86e8f89e80575547eda2c5287ee9b03 - arm-trusted-firmware.t234/plat/xilinx/common/plat_clkfunc.c 21addbd5d819a91e8830d4814f13c668d4de16b6 - arm-trusted-firmware.t234/plat/xilinx/common/ipi.c ee78ac1fe8d20433cc795fb099f456aded85bd50 - arm-trusted-firmware.t234/plat/xilinx/common/plat_xfer_list.c c6bce498be26fd57af599326f85f68b9064c4a55 - arm-trusted-firmware.t234/plat/xilinx/common/versal.c ee10032dc2472fb753a03832b64f063116b86db1 - arm-trusted-firmware.t234/plat/xilinx/common/plat_fdt.c 05dad522daa45e95940a4696af66aeaefe166950 - arm-trusted-firmware.t234/plat/xilinx/common/plat_console.c f4e990d1cc712446364af2434680454bc8288b4e - arm-trusted-firmware.t234/plat/xilinx/common/plat_startup.c 31112b8920009b3a0dc508bd673f2bb52f2cc1e9 - arm-trusted-firmware.t234/plat/xilinx/common/tsp/tsp_plat_setup.c 0c3f6c8f3a54ea899a2dd524b00782841e762469 - arm-trusted-firmware.t234/plat/xilinx/common/ipi_mailbox_service/ipi_mailbox_svc.c 47a15169c3186aa42acc9f876ece01a8661ebaca - arm-trusted-firmware.t234/plat/xilinx/common/ipi_mailbox_service/ipi_mailbox_svc.h f8f5521e2cb2f41d076f3d5f5e19e81d202b1537 - arm-trusted-firmware.t234/plat/xilinx/common/include/pm_ipi.h 127d5b6672e9e114dfed723d5cd61b804def4b5f - arm-trusted-firmware.t234/plat/xilinx/common/include/ipi.h 87282d828ae98b298b974db10bcd94bd07852453 - arm-trusted-firmware.t234/plat/xilinx/common/include/plat_fdt.h c5a8773ddc55c3af2b95ee9844a127ac9a34b75a - arm-trusted-firmware.t234/plat/xilinx/common/include/pm_api_sys.h bbdfcfdb0d57dbea5e06c5953d00a1e6d0e27881 - arm-trusted-firmware.t234/plat/xilinx/common/include/pm_defs.h eca1a9cddb60507336c4e8a7501b8260bafcf5d9 - arm-trusted-firmware.t234/plat/xilinx/common/include/pm_common.h b23f1f367acd5eef84ffe84a78bf6e719c50c776 - arm-trusted-firmware.t234/plat/xilinx/common/include/plat_console.h c49f575e32d158e1e5b6695df45d13ccac8fec3b - arm-trusted-firmware.t234/plat/xilinx/common/include/pm_svc_main.h 14a71f97c9f72853ed3d3470ddd9e0eab79b428e - arm-trusted-firmware.t234/plat/xilinx/common/include/pm_node.h 5dff40c389376bbc22b5d3aa0e69a700dcdbef41 - arm-trusted-firmware.t234/plat/xilinx/common/include/pm_client.h b5bc55e22d63c3b852df47693e3fecb9aec02401 - arm-trusted-firmware.t234/plat/xilinx/common/include/plat_startup.h a370a9524e6e61bfba7cb0123a9b0329b0618cdb - arm-trusted-firmware.t234/plat/xilinx/common/include/plat_xfer_list.h 957cdc0dfc01354c33eefd74423c3105ea5146dc - arm-trusted-firmware.t234/plat/xilinx/common/include/plat_clkfunc.h 33e1960be09c4bd041523c9a9862b69f06eed668 - arm-trusted-firmware.t234/plat/xilinx/common/include/plat_common.h fed3a6e23ee9278ec1158a4a8ba1a516cb7829cb - arm-trusted-firmware.t234/plat/xilinx/common/pm_service/pm_svc_main.c eb1ea6a079269764de3c9a4865e185092374147c - arm-trusted-firmware.t234/plat/xilinx/common/pm_service/pm_api_sys.c 4fbc3a8db53c312a6bda87841cacc04d3444df01 - arm-trusted-firmware.t234/plat/xilinx/common/pm_service/pm_ipi.c 0c2b99bf230517b6436b54afd86f9249a3276d76 - arm-trusted-firmware.t234/plat/xilinx/versal_net/sip_svc_setup.c 3fcd84c8940d78283e08fb9f25352ee2144fc9c9 - arm-trusted-firmware.t234/plat/xilinx/versal_net/plat_topology.c 5ad7f71e61698bc1d48578467d2929da57d7e0ce - arm-trusted-firmware.t234/plat/xilinx/versal_net/bl31_versal_net_setup.c 1358530a8d110b0fa57621246141c98140916e3f - arm-trusted-firmware.t234/plat/xilinx/versal_net/plat_psci.c fd24c012682e7e9caa683839da113633bc242716 - arm-trusted-firmware.t234/plat/xilinx/versal_net/versal_net_ipi.c 06929b42be201e28e229968b29ed081d6e91b4bc - arm-trusted-firmware.t234/plat/xilinx/versal_net/plat_psci_pm.c 1e88a1bd5b372cba0e09876dcf5b6c1cf260eebb - arm-trusted-firmware.t234/plat/xilinx/versal_net/include/plat_macros.S 3a4fee174ce193796978c2403734e0d8ed2324a9 - arm-trusted-firmware.t234/plat/xilinx/versal_net/include/plat_ipi.h bd88c3eb5d95c2114b51b0cf767dcd0502aac368 - arm-trusted-firmware.t234/plat/xilinx/versal_net/include/plat_private.h 19b5d399c8b8981e8d74daa4376ddc3b1634b47e - arm-trusted-firmware.t234/plat/xilinx/versal_net/include/platform_def.h d7054f3810666d400f5b278776099a637d78ca90 - arm-trusted-firmware.t234/plat/xilinx/versal_net/include/versal_net_def.h 07840fb181414f58a85ccd588dc886e17444dbe1 - arm-trusted-firmware.t234/plat/xilinx/versal_net/include/plat_pm_common.h acaa6efe005360cd5e750af53cc1839622927e55 - arm-trusted-firmware.t234/plat/xilinx/versal_net/aarch64/versal_net_common.c c6d79d919d099811c8ae221653ac975bb8d8f1fe - arm-trusted-firmware.t234/plat/xilinx/versal_net/aarch64/versal_net_helpers.S 514b603921dbe126e3e4c4026e5dd09ca19ccdf4 - arm-trusted-firmware.t234/plat/xilinx/versal_net/pm_service/pm_client.c dd38f3a1079a17328d48c8cb719713d4de7361a6 - arm-trusted-firmware.t234/plat/common/ubsan.c b7987bfe5968db3bc9818e4db42c003eced6ef68 - arm-trusted-firmware.t234/plat/common/plat_gicv3.c 35a081739341fa36878726fc4b1f83fc62a4cf32 - arm-trusted-firmware.t234/plat/common/plat_bl1_common.c 770195adb4f13e3b639c61646c812d5b051abee2 - arm-trusted-firmware.t234/plat/common/plat_gicv2.c 66a9f3850a6d815318f496213017e7f49cd05602 - arm-trusted-firmware.t234/plat/common/plat_bl_common.c ec9195d2ba3b66b6f4258c18a36b14a5cf41ac55 - arm-trusted-firmware.t234/plat/common/plat_psci_common.c a352a6dbccb3b6bb3324dd8bfacc5d4356d8644e - arm-trusted-firmware.t234/plat/common/plat_spmd_manifest.c 5e22516412e81af7bbc52e0e460447cf2d1d63f3 - arm-trusted-firmware.t234/plat/common/plat_log_common.c 97b4d52d0b6dff78ce2740e514b825c3450caa58 - arm-trusted-firmware.t234/plat/common/aarch64/plat_ehf.c 2b978a8ff5ff6691e49942af52fbee8dd1e500fc - arm-trusted-firmware.t234/plat/common/aarch64/plat_common.c d9432cd7a12c85878af463506821dad810edee3e - arm-trusted-firmware.t234/plat/common/aarch64/platform_mp_stack.S 53568d8d4a43005d8a1be8a379cf0f4b7ddc5637 - arm-trusted-firmware.t234/plat/common/aarch64/platform_helpers.S 1aab68f8337f2cd392589e5b7f227ebb145019bf - arm-trusted-firmware.t234/plat/common/aarch64/crash_console_helpers.S 9f8019f14fe1c7b6b704647357ce49dfc6ff27ad - arm-trusted-firmware.t234/plat/common/aarch64/platform_up_stack.S 063f7a782c2ed73e85b58e547241e5cb237bf79e - arm-trusted-firmware.t234/plat/common/aarch32/plat_common.c f742befce701fed79ec16b324c92409b36838226 - arm-trusted-firmware.t234/plat/common/aarch32/plat_sp_min_common.c 384c6edb2367b639f49a5540ddaf03ea6c75276d - arm-trusted-firmware.t234/plat/common/aarch32/platform_mp_stack.S 2f11ce1b9cf6e69ec84aaca831735fcb77ab9bc8 - arm-trusted-firmware.t234/plat/common/aarch32/platform_helpers.S c8eab49f9d5326ffc974d2ba7c05bd411df90eb1 - arm-trusted-firmware.t234/plat/common/aarch32/crash_console_helpers.S 23d194e7099cee098d207c309f1a5075546c3279 - arm-trusted-firmware.t234/plat/common/aarch32/platform_up_stack.S 36144ebe1637da9185e2256593f8aa7307d0cccb - arm-trusted-firmware.t234/plat/common/tbbr/plat_tbbr.c e859a0cb15b0a9f5269bb49b854f56440159ee97 - arm-trusted-firmware.t234/plat/qemu/common/qemu_private.h a58c658f18083c55761b946dd01b034df662dada - arm-trusted-firmware.t234/plat/qemu/common/topology.c 5f70285bd12102998a4cff3b3b410c8f34af9716 - arm-trusted-firmware.t234/plat/qemu/common/qemu_pm.c edad3efc3341901bce791af691a499cbc13d6900 - arm-trusted-firmware.t234/plat/qemu/common/qemu_bl2_mem_params_desc.c 1148cf058832b709814de888643962ebd19f03b4 - arm-trusted-firmware.t234/plat/qemu/common/qemu_plat_attest_token.c ab28bb3df2cb3355c3a0a9d6b1b8b7a81de0bf94 - arm-trusted-firmware.t234/plat/qemu/common/qemu_realm_attest_key.c 69014982d0852913e07e63bb95ce05ce55bb855c - arm-trusted-firmware.t234/plat/qemu/common/qemu_spm.c f438bdf7db5e42ee4e7dee2f22f2d37c8054e7aa - arm-trusted-firmware.t234/plat/qemu/common/qemu_bl2_setup.c 570d379ddaf975ce99e67d7bd0660c3a1aed1e0a - arm-trusted-firmware.t234/plat/qemu/common/qemu_bl31_setup.c 2b04b574819cd6ca74cb81971a715df8f9e26ae7 - arm-trusted-firmware.t234/plat/qemu/common/qemu_bl1_setup.c 19e3c8b70013a65d32361d7cd0e5d76afdde9469 - arm-trusted-firmware.t234/plat/qemu/common/qemu_image_load.c d78afc172ccab4bef7ee3773a1a534b478b9b675 - arm-trusted-firmware.t234/plat/qemu/common/qemu_common.c 1f8194edf2bf0b58ef9b58c057a0c567ab37421b - arm-trusted-firmware.t234/plat/qemu/common/qemu_stack_protector.c 2085009221c46e8e62ac297e819084f4b6087615 - arm-trusted-firmware.t234/plat/qemu/common/qemu_rotpk.S 16be159c4a5d2a3878237098afe450cac07536d1 - arm-trusted-firmware.t234/plat/qemu/common/qemu_trusted_boot.c a4bad2ed380ad5df3257650a246b10d93edb0292 - arm-trusted-firmware.t234/plat/qemu/common/qemu_sdei.c ec654aff1a7a4e282bbbe2dc13b2042b9534eb61 - arm-trusted-firmware.t234/plat/qemu/common/qemu_gicv3.c d78bd11a3e46b66140586c01d9f834a788316251 - arm-trusted-firmware.t234/plat/qemu/common/qemu_gicv2.c ce499ea5552f0a580d2d730cd86b20a544fb4759 - arm-trusted-firmware.t234/plat/qemu/common/qemu_console.c 06e554aa03b85986f82144c8205ea168f819fcaf - arm-trusted-firmware.t234/plat/qemu/common/qemu_io_storage.c f58716f140fa8f450f8073fca6f98a8eda79bbc2 - arm-trusted-firmware.t234/plat/qemu/common/include/plat_macros.S 1e9d7008ec6ed723f6e81a5d4ccc58175dae0bcd - arm-trusted-firmware.t234/plat/qemu/common/sp_min/sp_min_setup.c fe635c884df368ae689c259f9ac0787b17064bb4 - arm-trusted-firmware.t234/plat/qemu/common/aarch64/plat_helpers.S 674a4514924db14c06277e39651b46250347d7a4 - arm-trusted-firmware.t234/plat/qemu/common/aarch32/plat_helpers.S 0ac100f34106f46e99e68a38bdddd840b5b1e4e3 - arm-trusted-firmware.t234/plat/qemu/common/trp/qemu_trp_setup.c 9ecc9225faeef614667c68362c1797828df014ad - arm-trusted-firmware.t234/plat/qemu/qemu/qemu_bl1_measured_boot.c 24b0b81755b937e036388c1a4518eb1f50914c89 - arm-trusted-firmware.t234/plat/qemu/qemu/qemu_measured_boot.c 550744a18b4aa7236d084b7faa39941e6e0fea6f - arm-trusted-firmware.t234/plat/qemu/qemu/qemu_helpers.c 3a03230a8c9e2350cd6c8d9b45fa67b1ea3b3516 - arm-trusted-firmware.t234/plat/qemu/qemu/include/qemu_pas_def.h af52254c93512d3b820e577910fa7fde6c1167ee - arm-trusted-firmware.t234/plat/qemu/qemu/include/platform_def.h a3366d3ea9b4a5a823b365b0a4fe16dd24af7388 - arm-trusted-firmware.t234/plat/qemu/qemu_sbsa/sbsa_private.h 1d2ec75bf24e99926a32e7558f11f7f4c8ef2175 - arm-trusted-firmware.t234/plat/qemu/qemu_sbsa/sbsa_gic.c 2e229332b18ca87c4768924782627568e554aaab - arm-trusted-firmware.t234/plat/qemu/qemu_sbsa/sbsa_sip_svc.c f2efe87ffe7cd41bf5ac442c75b40fb2593a8fbb - arm-trusted-firmware.t234/plat/qemu/qemu_sbsa/sbsa_topology.c 151cea63605746875bff4fceaa296485033aa280 - arm-trusted-firmware.t234/plat/qemu/qemu_sbsa/sbsa_pm.c 13ec9483be356033a484d817e83671b5124fda73 - arm-trusted-firmware.t234/plat/qemu/qemu_sbsa/include/platform_def.h c7fe9a8c86d875385974c63d826b15ee7f0629f2 - arm-trusted-firmware.t234/plat/nvidia/tegra/lib/debug/profiler.c c7104ef4a0ccb4a2ceb01951a0c8442349cf4ca7 - arm-trusted-firmware.t234/plat/nvidia/tegra/common/tegra_delay_timer.c a6093251bc475596820146bee62ff414265236a9 - arm-trusted-firmware.t234/plat/nvidia/tegra/common/tegra_gicv3.c 348ad39495b7209e9858421f7bd1a02f9712a410 - arm-trusted-firmware.t234/plat/nvidia/tegra/common/tegra_pauth.c 19e6b82beb11a6c0f5ec68fbcf5ae3bc22eb17a0 - arm-trusted-firmware.t234/plat/nvidia/tegra/common/tegra_bl31_setup.c 0fd414a53c555f6cb2d89172408867dc6c3c8e41 - arm-trusted-firmware.t234/plat/nvidia/tegra/common/tegra_trng.c a9a4a4ba5e39c0a614f6312b919047527a6b018e - arm-trusted-firmware.t234/plat/nvidia/tegra/common/tegra_fiq_glue.c e232b8ef9078b8e84a919ede3ae77e6207651a0d - arm-trusted-firmware.t234/plat/nvidia/tegra/common/tegra_pm.c be042b8545fd4a1126c9d4225ce172c15b131e63 - arm-trusted-firmware.t234/plat/nvidia/tegra/common/tegra_sip_calls.c 0c5a65d7362595eff6d472ba23ccde7af61d9ce8 - arm-trusted-firmware.t234/plat/nvidia/tegra/common/tegra_io_storage.c 55b938cb527f31dfe8ec3b11bd74470694eec560 - arm-trusted-firmware.t234/plat/nvidia/tegra/common/tegra_gicv2.c 24988e0095d3d939872f55e8ac0db7a7d20f4172 - arm-trusted-firmware.t234/plat/nvidia/tegra/common/tegra_platform.c 8617ceef396a9a7f9b5e9e1a4866cede187f6ba6 - arm-trusted-firmware.t234/plat/nvidia/tegra/common/tegra_sdei.c 7832f9e627bdeb224b72a22840b7b4cd3354b962 - arm-trusted-firmware.t234/plat/nvidia/tegra/common/tegra_stack_protector.c effe3b55d620b5594fe62260c5ab52fc7c4320ce - arm-trusted-firmware.t234/plat/nvidia/tegra/common/aarch64/tegra_helpers.S 51cb94b5769497d44f69f9fb6c4014c012117381 - arm-trusted-firmware.t234/plat/nvidia/tegra/include/tegra_platform.h 949736009adf4b730b592ef786e3d66eaf769d8c - arm-trusted-firmware.t234/plat/nvidia/tegra/include/plat_macros.S 460da9b247182d92fa1f4aa0291534757b2c142e - arm-trusted-firmware.t234/plat/nvidia/tegra/include/platform_def.h 14b3cda1ba99047b2d55f66548d8f182d8d8f03d - arm-trusted-firmware.t234/plat/nvidia/tegra/include/tegra_private.h 81ea9f15588c258ecbc3f05e477af82433321620 - arm-trusted-firmware.t234/plat/nvidia/tegra/include/t234/tegra234_ras_private.h 06b78efa72c2fd24fec6849056456faa9678a613 - arm-trusted-firmware.t234/plat/nvidia/tegra/include/t234/tegra234_private.h 7648f2df8c85871044ce8f4b811434470760e129 - arm-trusted-firmware.t234/plat/nvidia/tegra/include/t234/tegra_def.h b76d085fd8bf62b29b2651fb2baafb167bbb3f37 - arm-trusted-firmware.t234/plat/nvidia/tegra/include/t234/tegra_mc_def.h c74d357832f8b1e2009a8945bef4937224b24970 - arm-trusted-firmware.t234/plat/nvidia/tegra/include/t264/tegra_def.h 9f1ba25c06a2566f195f7d04447c82c16fdc7608 - arm-trusted-firmware.t234/plat/nvidia/tegra/include/t264/t264_private.h d69603c11e71fef0844a88bdb818465bc94627c2 - arm-trusted-firmware.t234/plat/nvidia/tegra/include/t264/tegra_mc_def.h df5462d1132df1830cc8e93b21f3d845a6ad6219 - arm-trusted-firmware.t234/plat/nvidia/tegra/include/lib/profiler.h 65dcb16996ba6f5480b25b088c00618a8401e2b0 - arm-trusted-firmware.t234/plat/nvidia/tegra/include/t194/tegra194_ras_private.h 0770b19832587bf494cdf6a16cf0af55ef4e3eba - arm-trusted-firmware.t234/plat/nvidia/tegra/include/t194/tegra194_private.h 2d11f6ea7a132b71e2227d2dab9cdcdf549de499 - arm-trusted-firmware.t234/plat/nvidia/tegra/include/t194/tegra_def.h b01b1d6699848ec430ef6c7ff1fa536c611ac8d8 - arm-trusted-firmware.t234/plat/nvidia/tegra/include/drivers/bpmp.h eccbd7dbdb2b149abd38a48ddd5f6b0f292373b7 - arm-trusted-firmware.t234/plat/nvidia/tegra/include/drivers/memctrl_v2.h fa073698981deb8685410d390184a2fea2477d8d - arm-trusted-firmware.t234/plat/nvidia/tegra/include/drivers/smmu.h 1ad3acb2c35dab529632e51cfd8a1977d0a3e495 - arm-trusted-firmware.t234/plat/nvidia/tegra/include/drivers/pmc.h 7eee98bf96c4e615e71244fad2270fe3ac7bca96 - arm-trusted-firmware.t234/plat/nvidia/tegra/include/drivers/spe.h 97366374236e04da0a203c6df1ed7e93325e40f5 - arm-trusted-firmware.t234/plat/nvidia/tegra/include/drivers/memctrl.h 2693485a6a4c24984696bab65e09494c4af953a6 - arm-trusted-firmware.t234/plat/nvidia/tegra/include/drivers/psc_mailbox.h 0005633528a5228ce544a5fe3fc8b984d26eff95 - arm-trusted-firmware.t234/plat/nvidia/tegra/include/drivers/gpcdma.h d6acbb5f1eb851fbab413c7209bfba21509b4d31 - arm-trusted-firmware.t234/plat/nvidia/tegra/include/drivers/memctrl_v1.h dd094069cb1a5bb53cf55c4e87b2364925c1e25c - arm-trusted-firmware.t234/plat/nvidia/tegra/include/drivers/mce.h 6d07e5af0ce90657c3fa05b05110cc06037b6648 - arm-trusted-firmware.t234/plat/nvidia/tegra/include/drivers/bpmp_ipc.h 9e0e68509f99c921b95b46a65ac5ca876e3789f1 - arm-trusted-firmware.t234/plat/nvidia/tegra/include/drivers/tegra_gic.h ecb6bb2512f5f946927baadc3238cacaf9e9c42f - arm-trusted-firmware.t234/plat/nvidia/tegra/include/drivers/flowctrl.h e4e77bfcd8d045ecce243b060298bf229cbf3941 - arm-trusted-firmware.t234/plat/nvidia/tegra/include/drivers/security_engine.h 733bff8880d1f33ec4bdbe6451c1560b8426bd7e - arm-trusted-firmware.t234/plat/nvidia/tegra/drivers/pmc/pmc.c fb218e655fd6a3d77f969fce9cd6cb5dd0a6c5b2 - arm-trusted-firmware.t234/plat/nvidia/tegra/drivers/gpcdma/gpcdma.c 2a6016cc527d04ca332373c0d14542d5176aebf8 - arm-trusted-firmware.t234/plat/nvidia/tegra/drivers/psc/psc_mailbox.c 8d9b8ebe2f8407dfc849bee6942b55d0a9c76d41 - arm-trusted-firmware.t234/plat/nvidia/tegra/drivers/bpmp/bpmp.c ea44439d01bb9f52d710121f37d71ecec4d7de36 - arm-trusted-firmware.t234/plat/nvidia/tegra/drivers/bpmp_ipc/intf.c 187ab51e161e2024160096e2f5c69b9649213424 - arm-trusted-firmware.t234/plat/nvidia/tegra/drivers/bpmp_ipc/intf.h 8724a95f2af055e28a26a7fa510e1e2312dbb435 - arm-trusted-firmware.t234/plat/nvidia/tegra/drivers/bpmp_ipc/ivc.h ecf2d932f335bc64d226c7d6502806590af552b6 - arm-trusted-firmware.t234/plat/nvidia/tegra/drivers/bpmp_ipc/ivc.c 8204c0be396e5a8b38656b7c4c4e05e2438434cc - arm-trusted-firmware.t234/plat/nvidia/tegra/drivers/flowctrl/flowctrl.c ee1c0975e985f63ed2ce9cc5078b95784d4f77e8 - arm-trusted-firmware.t234/plat/nvidia/tegra/drivers/spe/shared_console.S 8c6898bbd3ac5ec7758ffca2946430953626cdd8 - arm-trusted-firmware.t234/plat/nvidia/tegra/drivers/memctrl/memctrl_v2.c 4dbec584881036aa37e59b66185d958a695a455d - arm-trusted-firmware.t234/plat/nvidia/tegra/drivers/memctrl/memctrl_v1.c d25c56f572cf7b3618f7567d502c1ee11dec2bae - arm-trusted-firmware.t234/plat/nvidia/tegra/drivers/smmu/smmu.c cd358a57c9eb70c10cf1a2d5c2f581fe53cad9a1 - arm-trusted-firmware.t234/plat/nvidia/tegra/scat/bl31.scat 3d01d365783ad5b2ce0f76df72a4a10db3d9a10d - arm-trusted-firmware.t234/plat/nvidia/tegra/soc/t234/plat_memctrl.c f3ee87d8900d331eb65f27dcce162aa818905ceb - arm-trusted-firmware.t234/plat/nvidia/tegra/soc/t234/plat_ras.c c2cd522ab9668274cd7bf26fde63e9dbc9a94f28 - arm-trusted-firmware.t234/plat/nvidia/tegra/soc/t234/plat_secondary.c 86e80848dc0a3e938a77237600396b941877ae2d - arm-trusted-firmware.t234/plat/nvidia/tegra/soc/t234/plat_setup.c b35ac81be1ee9736eeb78302fdab93ef8155918a - arm-trusted-firmware.t234/plat/nvidia/tegra/soc/t234/plat_sip_calls.c 6c60b9281955731cdcd3470c26235eb76a9335bb - arm-trusted-firmware.t234/plat/nvidia/tegra/soc/t234/plat_errata.c fedaa8fbfbf95a4657c693da435acbf035995d53 - arm-trusted-firmware.t234/plat/nvidia/tegra/soc/t234/plat_psci_handlers.c b445bacb5c4d8f02da2e408d0e5e7382b69c7108 - arm-trusted-firmware.t234/plat/nvidia/tegra/soc/t234/drivers/se/se.c 7641a42485d020517c692c523a29fe5be4136651 - arm-trusted-firmware.t234/plat/nvidia/tegra/soc/t234/drivers/se/se_private.h 83d9b00e44be4758c0c5171072545bcc0d7feb8b - arm-trusted-firmware.t234/plat/nvidia/tegra/soc/t234/drivers/mce/ari.c e2bf712bccf61c2eadb061d6a615891f5d0b1f54 - arm-trusted-firmware.t234/plat/nvidia/tegra/soc/t234/drivers/mce/mce.c ce88b9f9a752b57b5a9b852374cefa3c2476672a - arm-trusted-firmware.t234/plat/nvidia/tegra/soc/t234/drivers/include/t234_ari.h 08aec0d0be276f69ddac5a77363f59f1ef42d88b - arm-trusted-firmware.t234/plat/nvidia/tegra/soc/t234/drivers/include/se.h 97be2d05021abe3f3efae84ce56f37d1597701c3 - arm-trusted-firmware.t234/plat/nvidia/tegra/soc/t234/drivers/include/mce_private.h 595bafd552b05d81a25e9916fe91779e18beddda - arm-trusted-firmware.t234/plat/nvidia/tegra/soc/t194/plat_memctrl.c 5c0dff5a31ce3b1ccbb934f961c94488e994ba83 - arm-trusted-firmware.t234/plat/nvidia/tegra/soc/t194/plat_ras.c e17a699cecafbd3bdb8d61ca87a15bf611962a09 - arm-trusted-firmware.t234/plat/nvidia/tegra/soc/t194/plat_secondary.c 41ba8bd7300da545d7de6d5766b2a0f0863e9c31 - arm-trusted-firmware.t234/plat/nvidia/tegra/soc/t194/plat_setup.c aa4f71e82caadc9e0e65cf0bf6d2fdc4542dacb6 - arm-trusted-firmware.t234/plat/nvidia/tegra/soc/t194/plat_sip_calls.c 9616cc75e29c9b715a22c8e0ed35a7d757301e0d - arm-trusted-firmware.t234/plat/nvidia/tegra/soc/t194/plat_smmu.c d893793283c93ce6c488a51940c01574780f7333 - arm-trusted-firmware.t234/plat/nvidia/tegra/soc/t194/plat_trampoline.S 63569bbb6a2fcb93c165b48c77dc2e26313cb4ed - arm-trusted-firmware.t234/plat/nvidia/tegra/soc/t194/plat_psci_handlers.c ee99b21f1c4746989c94c7e3a6a28309b2cb7929 - arm-trusted-firmware.t234/plat/nvidia/tegra/soc/t194/drivers/se/se.c fa7909d4e0ccdeee6f0765cf68a95899ac8aec1f - arm-trusted-firmware.t234/plat/nvidia/tegra/soc/t194/drivers/se/se_private.h 0cdfadd153db5ee7d515adb01dd35d62e546226a - arm-trusted-firmware.t234/plat/nvidia/tegra/soc/t194/drivers/mce/nvg.c ccebfe25a0f4bc54b5d08685ce74082118f713e4 - arm-trusted-firmware.t234/plat/nvidia/tegra/soc/t194/drivers/mce/mce.c 99d5d980ae032fa2dfb6e9da5fe48dd600b2a896 - arm-trusted-firmware.t234/plat/nvidia/tegra/soc/t194/drivers/mce/aarch64/nvg_helpers.S 3a4f9975be9b5fd8328ef7d595db018d71929bc3 - arm-trusted-firmware.t234/plat/nvidia/tegra/soc/t194/drivers/include/t194_nvg.h 298abb9097e851023b914f09fe36c8cdaf367e22 - arm-trusted-firmware.t234/plat/nvidia/tegra/soc/t194/drivers/include/se.h 8cec2a63b748c24a5fab3c7c47f114b8147894c4 - arm-trusted-firmware.t234/plat/nvidia/tegra/soc/t194/drivers/include/mce_private.h 170634ac25c995303394743ee26ab4f2265800ca - arm-trusted-firmware.t234/plat/ti/k3/common/k3_topology.c 0c1b93ab43b2ba80888285d54bd6c88a330abd32 - arm-trusted-firmware.t234/plat/ti/k3/common/k3_helpers.S b7db92eb179805a28d1ea0c01a30b3c856d97a70 - arm-trusted-firmware.t234/plat/ti/k3/common/k3_psci.c 500492fb75dd570ba4fbeccc3664611b5da3a1ba - arm-trusted-firmware.t234/plat/ti/k3/common/k3_gicv3.c 41b9c96e4ffd9d51ef07345b13dbf173adf98260 - arm-trusted-firmware.t234/plat/ti/k3/common/k3_console.c 03c91a4b96c78e27b3534215550a85d2baef4a60 - arm-trusted-firmware.t234/plat/ti/k3/common/k3_bl31_setup.c e26e8ec220100266b7e88e2988430c5e5827b07f - arm-trusted-firmware.t234/plat/ti/k3/common/drivers/ti_sci/ti_sci_protocol.h 9caefb91af945403ff90bd65c3bf2c4d63f0d4e8 - arm-trusted-firmware.t234/plat/ti/k3/common/drivers/ti_sci/ti_sci.h 7c205fd0461ddf35351517c01ec9ff0b3d472453 - arm-trusted-firmware.t234/plat/ti/k3/common/drivers/ti_sci/ti_sci.c 65543dc7d9a840040d346b740384936551691526 - arm-trusted-firmware.t234/plat/ti/k3/common/drivers/sec_proxy/sec_proxy.h 1cc8b5048759dec0cddaaca704360a5e02ff0387 - arm-trusted-firmware.t234/plat/ti/k3/common/drivers/sec_proxy/sec_proxy.c da89ff4506058f3e90a127f4e7d79a7d86057bfd - arm-trusted-firmware.t234/plat/ti/k3/include/plat_macros.S 734674f35450e45ca0c58c9036e71a978ef8407d - arm-trusted-firmware.t234/plat/ti/k3/include/k3_gicv3.h ec6de3dd43f151980eb37303f4f3b8ef9e9ee4ff - arm-trusted-firmware.t234/plat/ti/k3/include/platform_def.h 07586acc76dd409f7eab912bbecaa0477c4a5a31 - arm-trusted-firmware.t234/plat/ti/k3/include/k3_console.h 80cab8852a24cef43b5897050cff90b4cbb1b5df - arm-trusted-firmware.t234/plat/ti/k3/board/j784s4/include/board_def.h 719de8818b0a907ce3b51497c9bf5577634366dd - arm-trusted-firmware.t234/plat/ti/k3/board/generic/include/board_def.h c972344f8497be61b5561d1cf3e16a3a5d065403 - arm-trusted-firmware.t234/plat/ti/k3/board/lite/include/board_def.h c8e9b163151610444afe368cd3525dc165595d51 - arm-trusted-firmware.t234/plat/allwinner/sun50i_a64/sunxi_idle_states.c a38730b258e2c37f114fdb3c923369bade8e7a1a - arm-trusted-firmware.t234/plat/allwinner/sun50i_a64/sunxi_power.c 0444d8d2183e9c346c278bac56b39912c74aed0a - arm-trusted-firmware.t234/plat/allwinner/sun50i_a64/include/sunxi_cpucfg.h 54ee3b911a552e2cd6e3802820f5cf3e09575a01 - arm-trusted-firmware.t234/plat/allwinner/sun50i_a64/include/core_off_arisc.h 3f4f908a2f0a6a7660d40d79215077ee248f740e - arm-trusted-firmware.t234/plat/allwinner/sun50i_a64/include/sunxi_mmap.h 2c5ad97e48086e62d1d58d1d8289ac4ab3153179 - arm-trusted-firmware.t234/plat/allwinner/sun50i_a64/include/sunxi_spc.h 65eec287284371a887adc4c9aa1952c26be66df7 - arm-trusted-firmware.t234/plat/allwinner/sun50i_a64/include/sunxi_ccu.h f5a23e3802d2c1d7b94a9fb3c62e5b43cf3283ac - arm-trusted-firmware.t234/plat/allwinner/sun50i_h6/sunxi_idle_states.c a6577cb2995b5f4d303dc8ddccadb2ee872cdd56 - arm-trusted-firmware.t234/plat/allwinner/sun50i_h6/sunxi_power.c dd19c5d97b6fda42cdf7822b9932b2c6bb7999de - arm-trusted-firmware.t234/plat/allwinner/sun50i_h6/include/sunxi_cpucfg.h 9653d20197e5e808f260d368acf0605730acd73d - arm-trusted-firmware.t234/plat/allwinner/sun50i_h6/include/sunxi_mmap.h 3dde76eb498c889851714b3d8e6749211c62bbec - arm-trusted-firmware.t234/plat/allwinner/sun50i_h6/include/sunxi_spc.h 1590f260f1febbedf931a1596cea2d2e437ea92b - arm-trusted-firmware.t234/plat/allwinner/sun50i_h6/include/sunxi_ccu.h f5a23e3802d2c1d7b94a9fb3c62e5b43cf3283ac - arm-trusted-firmware.t234/plat/allwinner/sun50i_h616/sunxi_idle_states.c 03001e5fa23515aba0765c130aad123367758776 - arm-trusted-firmware.t234/plat/allwinner/sun50i_h616/sunxi_h616_dtb.c 597c7d0e25492053936d68d62e433724f752b395 - arm-trusted-firmware.t234/plat/allwinner/sun50i_h616/sunxi_power.c 5f9c46257fffc11bc9cc33e4857e303df4ef68cb - arm-trusted-firmware.t234/plat/allwinner/sun50i_h616/include/sunxi_cpucfg.h 3aedc81b7dac5e568253b5f0b546617d87eaee95 - arm-trusted-firmware.t234/plat/allwinner/sun50i_h616/include/sunxi_mmap.h 3dde76eb498c889851714b3d8e6749211c62bbec - arm-trusted-firmware.t234/plat/allwinner/sun50i_h616/include/sunxi_spc.h 1590f260f1febbedf931a1596cea2d2e437ea92b - arm-trusted-firmware.t234/plat/allwinner/sun50i_h616/include/sunxi_ccu.h b60215b5a41eed815c27ed34d6d112d94e26d3e1 - arm-trusted-firmware.t234/plat/allwinner/common/sunxi_scpi_pm.c d0c39fa309e95376cbaab2d859e56d45c214ec07 - arm-trusted-firmware.t234/plat/allwinner/common/sunxi_bl31_setup.c 4fbea1d1c07593e4288cbf95ad006133a753832c - arm-trusted-firmware.t234/plat/allwinner/common/sunxi_pm.c a44feb979fffb71189cf9943a6d99946305122e2 - arm-trusted-firmware.t234/plat/allwinner/common/sunxi_security.c e602a60b0fabfe8e91ecf654c16701712b20c3f1 - arm-trusted-firmware.t234/plat/allwinner/common/sunxi_native_pm.c 704da3ea1b61d5106a6172712ecf6a80b1528bf0 - arm-trusted-firmware.t234/plat/allwinner/common/arisc_off.S 98bd6ed3f41b4f5c592bb0b0b02d1a0a3b29324e - arm-trusted-firmware.t234/plat/allwinner/common/sunxi_common.c 0ded87657ff47f0fe5896f1ab1d6d2f9b34f0429 - arm-trusted-firmware.t234/plat/allwinner/common/plat_helpers.S f2bc1957fa87b9880744d070c964b7803c7bf295 - arm-trusted-firmware.t234/plat/allwinner/common/sunxi_topology.c 0f08c32e56a3d49917e94d91f1f5e67ec04f1f8b - arm-trusted-firmware.t234/plat/allwinner/common/sunxi_cpu_ops.c 1d09c2179f295717db5f78a8b05d8f59c3f7d3fa - arm-trusted-firmware.t234/plat/allwinner/common/sunxi_prepare_dtb.c 6f474bf01aa788552f1f76b11f638fbba9baf15a - arm-trusted-firmware.t234/plat/allwinner/common/include/sunxi_private.h 242047970a5d0ce5a4a6de33577a17208f8793a5 - arm-trusted-firmware.t234/plat/allwinner/common/include/sunxi_cpucfg_ncat2.h 7d746a44b6a3bbaa1c3e923de0abdfc40393712e - arm-trusted-firmware.t234/plat/allwinner/common/include/plat_macros.S fd832fe0636086e24eed0ccf1d3f37823ec3f718 - arm-trusted-firmware.t234/plat/allwinner/common/include/sunxi_cpucfg_ncat.h 1f3580c9b5753f5e99e173cffd6e713bce84d2f4 - arm-trusted-firmware.t234/plat/allwinner/common/include/sunxi_def.h 31a7e9055463700ee8fc1104f79949816de6f944 - arm-trusted-firmware.t234/plat/allwinner/common/include/platform_def.h 77455765d6d80bf4a48d7744bf6f4770b7369215 - arm-trusted-firmware.t234/plat/allwinner/common/include/mentor_i2c_plat.h f5a23e3802d2c1d7b94a9fb3c62e5b43cf3283ac - arm-trusted-firmware.t234/plat/allwinner/sun50i_r329/sunxi_idle_states.c 3fa3a563994fcf2710324634950265fc8f9d7850 - arm-trusted-firmware.t234/plat/allwinner/sun50i_r329/sunxi_power.c b4383995eb5fd691801c528969c95a7826b48382 - arm-trusted-firmware.t234/plat/allwinner/sun50i_r329/include/sunxi_cpucfg.h d430caf710295e9e77a240b785740fdde6705e26 - arm-trusted-firmware.t234/plat/allwinner/sun50i_r329/include/sunxi_mmap.h 1acbdb220cff8edffa7cc7fd4808f71574b90966 - arm-trusted-firmware.t234/plat/allwinner/sun50i_r329/include/sunxi_spc.h 2870bd5728ae0e5857fadde22b048a6fcf6ee2d3 - arm-trusted-firmware.t234/plat/allwinner/sun50i_r329/include/sunxi_ccu.h 33f9c2d61b7aa3242f22100ba2694ba2709f7a1b - arm-trusted-firmware.t234/plat/hisilicon/hikey/hikey_topology.c bca37120bec0db88310c0e711220bd8301c8b932 - arm-trusted-firmware.t234/plat/hisilicon/hikey/hikey_pm.c 1b333e35df79afc9319c45ded87fe22b1e5547fc - arm-trusted-firmware.t234/plat/hisilicon/hikey/hikey_security.c 8b11d0569d254ee10c03b8e7dfaebf823b7b1746 - arm-trusted-firmware.t234/plat/hisilicon/hikey/hikey_bl_common.c 1dc25162c504805b378176ceb2a1fac39b8fa3e2 - arm-trusted-firmware.t234/plat/hisilicon/hikey/hikey_ddr.c 10b56da87c85a4ad254e8e25455c6fc119d4ee23 - arm-trusted-firmware.t234/plat/hisilicon/hikey/hikey_bl31_setup.c 1975a45f73616d0ceb03dab4a9397cbabc1e66ce - arm-trusted-firmware.t234/plat/hisilicon/hikey/hisi_pwrc.c 132b89dc419b19bfabb3eb2450a5e74317faea11 - arm-trusted-firmware.t234/plat/hisilicon/hikey/hikey_io_storage.c b8ddcea3e66690f3932ae009921566fe249feccd - arm-trusted-firmware.t234/plat/hisilicon/hikey/hisi_pwrc_sram.S 126933334b9ebdde11859016f3bbcc6ac9bbef88 - arm-trusted-firmware.t234/plat/hisilicon/hikey/hisi_mcu.c 0071214b6af7f5e24aa92d4e7849c79c3818ed05 - arm-trusted-firmware.t234/plat/hisilicon/hikey/hikey_bl2_setup.c b0603f49d7b1252e6774be83ed95232695f1f263 - arm-trusted-firmware.t234/plat/hisilicon/hikey/hisi_ipc.c e90b7c0a59b785560e233605f2968b642d26fcdb - arm-trusted-firmware.t234/plat/hisilicon/hikey/hisi_sip_svc.c 8d152d6cc7fa809e64664b6fda9d33b121b05eaa - arm-trusted-firmware.t234/plat/hisilicon/hikey/hikey_bl2_mem_params_desc.c 0472150350a0f6a23e8750e0fe14991d176d1a04 - arm-trusted-firmware.t234/plat/hisilicon/hikey/hikey_bl1_setup.c a68989337ee4c06cf76f89d69cfc5c3aca210b00 - arm-trusted-firmware.t234/plat/hisilicon/hikey/hikey_private.h cfc7af573fbb40bb702a616d8f0bf02b017a3e0b - arm-trusted-firmware.t234/plat/hisilicon/hikey/hisi_dvfs.c 5366b77beffc310cab412735a4e4f43185e171c6 - arm-trusted-firmware.t234/plat/hisilicon/hikey/hikey_image_load.c 0aace28e8f75168d13d7274d81f1f906cc1b2cae - arm-trusted-firmware.t234/plat/hisilicon/hikey/hikey_rotpk.S 3f90b73f27ba47848db784621dd350e6a5ec54d9 - arm-trusted-firmware.t234/plat/hisilicon/hikey/hikey_tbbr.c e0f40190a4d2a13086e9b7c951d5301f744dd767 - arm-trusted-firmware.t234/plat/hisilicon/hikey/include/hi6220.h 31f012031e8dec3fe5dab7afc9ab89deffb7fe7c - arm-trusted-firmware.t234/plat/hisilicon/hikey/include/hi6220_regs_pmctrl.h 98509207554ab836b38f580d203793668061ce40 - arm-trusted-firmware.t234/plat/hisilicon/hikey/include/hisi_sip_svc.h ee2004c34a377b43d61f3fde4201ea86e1834fc7 - arm-trusted-firmware.t234/plat/hisilicon/hikey/include/hisi_pwrc.h 4619ff482dfa91c976c3d58153ac694dd92a0abf - arm-trusted-firmware.t234/plat/hisilicon/hikey/include/plat_macros.S 95b6af34fbda29b2cef5ecaa3ecf9deb1f7a48cb - arm-trusted-firmware.t234/plat/hisilicon/hikey/include/hisi_mcu.h 42137e1b1e1f31a2b92b351765982cc8bcf28601 - arm-trusted-firmware.t234/plat/hisilicon/hikey/include/hi6220_regs_peri.h 5da379773f07f291d897ea36a13ac008c78bbbe4 - arm-trusted-firmware.t234/plat/hisilicon/hikey/include/hi6220_regs_pin.h b9c87b1b0f989e816c65163d00ead7cd68b4b6bc - arm-trusted-firmware.t234/plat/hisilicon/hikey/include/hi6553.h e2fd2bbe14a506ac8ab6eb8f4c65dd34827b33a8 - arm-trusted-firmware.t234/plat/hisilicon/hikey/include/hikey_def.h fff863e589a15845fe768ee9bd16a482d5946db7 - arm-trusted-firmware.t234/plat/hisilicon/hikey/include/hi6220_regs_ao.h 79f261b3e512eb92ef04e1b172276ba95108b6ac - arm-trusted-firmware.t234/plat/hisilicon/hikey/include/hisi_ipc.h eb1ee8f26e0a9e1d174893e2a80e0ea2be070df3 - arm-trusted-firmware.t234/plat/hisilicon/hikey/include/platform_def.h 379cc0fd2c6486a2bfc850d19190835961783f16 - arm-trusted-firmware.t234/plat/hisilicon/hikey/include/hisi_sram_map.h c54b714045ab12cfcff4363f00ce94952a40e2d6 - arm-trusted-firmware.t234/plat/hisilicon/hikey/include/hikey_layout.h 659dfae8f25d18bef4e2ac3c9b2cc07bbd255dd4 - arm-trusted-firmware.t234/plat/hisilicon/hikey/include/hi6220_regs_acpu.h f3431f5300aefc0065b1e6ad9f3e996878027bff - arm-trusted-firmware.t234/plat/hisilicon/hikey/aarch64/hikey_common.c f4fe9f99f519b213b8d23015c37b2e4013ebb066 - arm-trusted-firmware.t234/plat/hisilicon/hikey/aarch64/hikey_helpers.S efef809ad6abb1c1388bcc0ffa92d502ca075b96 - arm-trusted-firmware.t234/plat/hisilicon/poplar/bl2_plat_mem_params_desc.c 166469bcfd5bac8ca50e33d23d40607d532f7a9f - arm-trusted-firmware.t234/plat/hisilicon/poplar/bl1_plat_setup.c 942f440e430db3a0fb9bafcb2877fa0f2b2b2206 - arm-trusted-firmware.t234/plat/hisilicon/poplar/plat_topology.c f74fcf80665ecffb4b4fe3402223e62b707c18ea - arm-trusted-firmware.t234/plat/hisilicon/poplar/bl31_plat_setup.c 706af98521027fbfb3cb50742e9203904186ccfb - arm-trusted-firmware.t234/plat/hisilicon/poplar/poplar_gicv2.c 43b6cb88b4528db3610c0591b417afee9f8e086f - arm-trusted-firmware.t234/plat/hisilicon/poplar/plat_storage.c 5366b77beffc310cab412735a4e4f43185e171c6 - arm-trusted-firmware.t234/plat/hisilicon/poplar/poplar_image_load.c 4df6d997a517a03b7120733e3ff6f1a2634caa47 - arm-trusted-firmware.t234/plat/hisilicon/poplar/bl2_plat_setup.c 87679266798806f6a6ec26551b9b29c5b326e611 - arm-trusted-firmware.t234/plat/hisilicon/poplar/plat_pm.c 7309b02ef23609fb839b029b295bffaf714cdc1a - arm-trusted-firmware.t234/plat/hisilicon/poplar/include/plat_macros.S 2bc481728aac66acbe669f76aa6dd84c3f4e88a7 - arm-trusted-firmware.t234/plat/hisilicon/poplar/include/plat_private.h e8d837174e3274ddbcd923af88d3e19e1af8c06a - arm-trusted-firmware.t234/plat/hisilicon/poplar/include/platform_def.h 886c0f5016e57d19f100e302c07d4ff28dcd032b - arm-trusted-firmware.t234/plat/hisilicon/poplar/include/hi3798cv200.h 54bc2fcf8fb31777a2eee36c5b61246cc0fa0a17 - arm-trusted-firmware.t234/plat/hisilicon/poplar/include/poplar_layout.h 5b726e62a784d7660009ac2235ebf2d76dc809ad - arm-trusted-firmware.t234/plat/hisilicon/poplar/aarch64/poplar_helpers.S ef034cd3245b78dec24c714d8ffbb7e9b490427c - arm-trusted-firmware.t234/plat/hisilicon/poplar/aarch64/platform_common.c fc3d37d2191841fe6bab5841f4be4e364cf919b1 - arm-trusted-firmware.t234/plat/hisilicon/hikey960/hikey960_io_storage.c 0f1a35cf03c46fa57303de1b14fd3ec9d83d2e72 - arm-trusted-firmware.t234/plat/hisilicon/hikey960/hikey960_bl2_setup.c 00000d9a64ab9fc946dd3055da2fa43094bc324f - arm-trusted-firmware.t234/plat/hisilicon/hikey960/hikey960_bl2_mem_params_desc.c e521b7127c97a6dc50d62a6fb23613467dfa5c91 - arm-trusted-firmware.t234/plat/hisilicon/hikey960/hikey960_boardid.c e7130fd49b764ab203b1f70d8c04929b17c338a1 - arm-trusted-firmware.t234/plat/hisilicon/hikey960/hikey960_tbbr.c b4ec4794171dff334edac55b287dbba42365301a - arm-trusted-firmware.t234/plat/hisilicon/hikey960/hikey960_bl_common.c 9becd5a35328d19646bc14bdbf52f66571aad713 - arm-trusted-firmware.t234/plat/hisilicon/hikey960/hikey960_el3_spmc_logical_sp.c 58fdfe0ccfcc2206b61f2c7148ae45a7e7b5c061 - arm-trusted-firmware.t234/plat/hisilicon/hikey960/hikey960_def.h 0cd271eb1db1372ebacbc89a1ab7e6b858522177 - arm-trusted-firmware.t234/plat/hisilicon/hikey960/hikey960_topology.c 3b43870e172a97e6682dc9e7adeb7ee54b219ce1 - arm-trusted-firmware.t234/plat/hisilicon/hikey960/hikey960_mcu_load.c bbe8476c612a414078e7e0577543027250b3be7c - arm-trusted-firmware.t234/plat/hisilicon/hikey960/hikey960_private.h dd51fbc51f374c1d5e6292885a8f0058321bb5cc - arm-trusted-firmware.t234/plat/hisilicon/hikey960/hikey960_image_load.c 71a2f94675c4355ea405600c073865fc13d6e6d6 - arm-trusted-firmware.t234/plat/hisilicon/hikey960/hikey960_bl31_setup.c df960717d8f3e8b3111b85c464d02214767ffe67 - arm-trusted-firmware.t234/plat/hisilicon/hikey960/hikey960_rotpk.S 19471da73d6d6e0316b89091e8034b65252676ea - arm-trusted-firmware.t234/plat/hisilicon/hikey960/hikey960_bl1_setup.c e5d1ee45233d19ae915b7dcde9d177ac30ff3c59 - arm-trusted-firmware.t234/plat/hisilicon/hikey960/hikey960_pm.c 930c77f84c5ef2c7971e52015e58fd9c314fbba5 - arm-trusted-firmware.t234/plat/hisilicon/hikey960/include/plat_macros.S 8774867d6c0d50ecb09674f12d85db31de3d0041 - arm-trusted-firmware.t234/plat/hisilicon/hikey960/include/plat.ld.S b1be891afebf5d255da6f6dcb865725241f566b9 - arm-trusted-firmware.t234/plat/hisilicon/hikey960/include/hi3660_crg.h 201bc8884be1cfb9b4f87f3fcc6ccf3aeec268d8 - arm-trusted-firmware.t234/plat/hisilicon/hikey960/include/hi3660_hkadc.h 9b6172a308464c71e87f1f420cb1df10ceb7bfb4 - arm-trusted-firmware.t234/plat/hisilicon/hikey960/include/hisi_ipc.h 98cbcb7b00b84ca35f3855f0fed8a0bcc35044b6 - arm-trusted-firmware.t234/plat/hisilicon/hikey960/include/platform_def.h 390e28e24c8915a9f956b1a1de0cafa7306bf9ed - arm-trusted-firmware.t234/plat/hisilicon/hikey960/include/hi3660.h d8da79f1ebd9b100b4d3dc915552f3d086d5eda9 - arm-trusted-firmware.t234/plat/hisilicon/hikey960/include/hi3660_mem_map.h 4a0475ff7dac46ea547e623a9a83071f69b5a4b7 - arm-trusted-firmware.t234/plat/hisilicon/hikey960/drivers/pwrc/hisi_pwrc.h 168bc920b2828c8478a977c1e6b9e597791c0e45 - arm-trusted-firmware.t234/plat/hisilicon/hikey960/drivers/pwrc/hisi_pwrc.c 4abee183dc860ea0fe600bb9b19e3c4a0a3d6773 - arm-trusted-firmware.t234/plat/hisilicon/hikey960/drivers/ipc/hisi_ipc.c 14bf1952f6bf5592c70b43aff34b3984bb9079a7 - arm-trusted-firmware.t234/plat/hisilicon/hikey960/aarch64/hikey960_common.c 33e4f92c8882961c556666d4e463a0cd932589bb - arm-trusted-firmware.t234/plat/hisilicon/hikey960/aarch64/hikey960_helpers.S 757aa19204a1a17a1bf7a0c7afe2cc57465477e0 - arm-trusted-firmware.t234/plat/nuvoton/common/plat_nuvoton_gic.c 38c6969429fa46ef1e68d50e6fcb6e311d12bb04 - arm-trusted-firmware.t234/plat/nuvoton/common/nuvoton_helpers.S cf26b6b4a50c5dc5c335b39516ae249521a2c44c - arm-trusted-firmware.t234/plat/nuvoton/common/nuvoton_pm.c 4bf37de1dbaa8dbd7bf7dc13d8d5e18d4649902f - arm-trusted-firmware.t234/plat/nuvoton/common/nuvoton_topology.c b3e5c79ccc166f78d955d7500fc60b3a0a3272a1 - arm-trusted-firmware.t234/plat/nuvoton/npcm845x/npcm845x_common.c c43fc7fe9749f3845fd624c21f1ff765cd0c6ff2 - arm-trusted-firmware.t234/plat/nuvoton/npcm845x/npcm845x_psci.c cdeda009ecac5d7546aeb49da4159077332fd771 - arm-trusted-firmware.t234/plat/nuvoton/npcm845x/npcm845x_serial_port.c 95b3fdae0d8de2d798a10e56f7071e4aa4d3b854 - arm-trusted-firmware.t234/plat/nuvoton/npcm845x/npcm845x_bl31_setup.c 572ea5edf4e0c46c76fdc9b6eb08197c585be8b5 - arm-trusted-firmware.t234/plat/socionext/synquacer/sq_rotpk.S 9b1262ca8c6950227a294b789fb3e53dfa2086b1 - arm-trusted-firmware.t234/plat/socionext/synquacer/sq_topology.c 77fff6026c1390b1ee72fb8b325459f621ba78e3 - arm-trusted-firmware.t234/plat/socionext/synquacer/sq_psci.c b60ee8850906f76ada82b2db19c8656ed9c12d9a - arm-trusted-firmware.t234/plat/socionext/synquacer/sq_gicv3.c fabaf9f847297853dc77c6577d5049ea4ab77809 - arm-trusted-firmware.t234/plat/socionext/synquacer/sq_bl2_setup.c 8286dff95425dddb9a5b25ffda50460831781793 - arm-trusted-firmware.t234/plat/socionext/synquacer/sq_xlat_setup.c a11d578ee6af8315da34f383d53ad866c3acb944 - arm-trusted-firmware.t234/plat/socionext/synquacer/sq_image_desc.c 94f1c76a8b066bc8d833c5c6d9d83cc9d34c7f6a - arm-trusted-firmware.t234/plat/socionext/synquacer/sq_helpers.S b8adf13173155303a49ce111d0e2bf30bae8a3c8 - arm-trusted-firmware.t234/plat/socionext/synquacer/sq_tbbr.c a8796cf9a2847c8c6d4851d911b9bd0622450b48 - arm-trusted-firmware.t234/plat/socionext/synquacer/sq_io_storage.c 6ea940b481cd25220bd10b37d68e6698200c8e07 - arm-trusted-firmware.t234/plat/socionext/synquacer/sq_bl31_setup.c a32f17d7db01cfb7a14811a914ba2066581d29a1 - arm-trusted-firmware.t234/plat/socionext/synquacer/sq_spm.c f43a62ef3a99346a097b8813441539c5354436fc - arm-trusted-firmware.t234/plat/socionext/synquacer/sq_ccn.c 71b4d3a8866abd87734eafad2ffcf269d273af25 - arm-trusted-firmware.t234/plat/socionext/synquacer/include/sq_common.h 9f24e8fcbc08c61f43c8041c0464cae65fe01ce8 - arm-trusted-firmware.t234/plat/socionext/synquacer/include/plat_macros.S 4394260865fca0846df9aeef85e4555cbf807b60 - arm-trusted-firmware.t234/plat/socionext/synquacer/include/plat.ld.S 6852993230615df9cd7a9e8fcdfdf86066533afa - arm-trusted-firmware.t234/plat/socionext/synquacer/include/platform_def.h f57f50699d6a8f3902d4673f01ec3ff0d6931d29 - arm-trusted-firmware.t234/plat/socionext/synquacer/drivers/scp/sq_scp.c e431465e90b8b68ce2922ff400c2e6953eaeea9d - arm-trusted-firmware.t234/plat/socionext/synquacer/drivers/scp/sq_scmi.c b6784404cec981a185e6f44ef689f28b7d9513e3 - arm-trusted-firmware.t234/plat/socionext/synquacer/drivers/scpi/sq_scpi.c f8fe95fbe1e35e8c328ec5a197b76c329feda4bd - arm-trusted-firmware.t234/plat/socionext/synquacer/drivers/scpi/sq_scpi.h ebfc7926ca7e342e5cec3fed564e68be76a80fdd - arm-trusted-firmware.t234/plat/socionext/synquacer/drivers/mhu/sq_mhu.h 961c660b9e7a5641523d5d23b5396c2a2a67746e - arm-trusted-firmware.t234/plat/socionext/synquacer/drivers/mhu/sq_mhu.c 05b8fac4f5d6b8cee9465b541e992f27f071fe8f - arm-trusted-firmware.t234/plat/socionext/uniphier/uniphier_console.S 30d16489f342eed522b276128737ad41acb82ba9 - arm-trusted-firmware.t234/plat/socionext/uniphier/uniphier_helpers.S 456820f5853d3f1676ee19bf63b9c360ed9a80a8 - arm-trusted-firmware.t234/plat/socionext/uniphier/uniphier_io_storage.c ab09cd5d8d3222857a607791bee8b31359314aa9 - arm-trusted-firmware.t234/plat/socionext/uniphier/uniphier_bl31_setup.c 98c1438c270db5db7bd6f971cb928420df53c1b7 - arm-trusted-firmware.t234/plat/socionext/uniphier/uniphier_image_desc.c d94b79f813abf374eef409d04968fce943a3ef84 - arm-trusted-firmware.t234/plat/socionext/uniphier/uniphier_boot_device.c 8a0a08bd7b9292bd5b334bc91ad422838eb83118 - arm-trusted-firmware.t234/plat/socionext/uniphier/uniphier_cci.c 2b022afd58ed2221e8abc99099867eab0c42c326 - arm-trusted-firmware.t234/plat/socionext/uniphier/uniphier_emmc.c 26621302eaceca62d3b0e8224c6c14d5ea08df38 - arm-trusted-firmware.t234/plat/socionext/uniphier/uniphier_xlat_setup.c 516680ab29649a33ea07ffa922f3b18448e61e55 - arm-trusted-firmware.t234/plat/socionext/uniphier/uniphier_psci.c 5fa3e198d6ad7a764cb058e6e88fa12a0d8ffe85 - arm-trusted-firmware.t234/plat/socionext/uniphier/uniphier_nand.c b445ddffd2167b6758d19874673ec99f3f2a1d30 - arm-trusted-firmware.t234/plat/socionext/uniphier/uniphier.h d342acec84b75ea4f64204404f0a54b4158920e1 - arm-trusted-firmware.t234/plat/socionext/uniphier/uniphier_usb.c 21ef9559c64415fef54f3373f28fde4fa86d92d3 - arm-trusted-firmware.t234/plat/socionext/uniphier/uniphier_topology.c eca523ec19dc113ddd19b9427a6651cd6ebe6bb3 - arm-trusted-firmware.t234/plat/socionext/uniphier/uniphier_soc_info.c ad344a675d5f4bf3287a6e32451b462c3ea7d29c - arm-trusted-firmware.t234/plat/socionext/uniphier/uniphier_rotpk.S 91e3ef5fbfd42b725b57f2608d1934a5c717de3b - arm-trusted-firmware.t234/plat/socionext/uniphier/uniphier_tbbr.c e4e4584414cea9a632b613da62b76c3999974c0c - arm-trusted-firmware.t234/plat/socionext/uniphier/uniphier_console.h 30db57b3d947cfae86d4cb1fbd7d79f7365fe01d - arm-trusted-firmware.t234/plat/socionext/uniphier/uniphier_smp.S 7518b6009c736b543504a3f84be4cbd20e8d9f0c - arm-trusted-firmware.t234/plat/socionext/uniphier/uniphier_scp.c 32a2fa4301b38d14bb8e4a0ac204b4e13d605a55 - arm-trusted-firmware.t234/plat/socionext/uniphier/uniphier_console_setup.c 69a2371870f65a855d9ff7c728f2e9c32882aa2c - arm-trusted-firmware.t234/plat/socionext/uniphier/uniphier_bl2_setup.c 7cb14fc4ccfe79fe8ffb080b91337e263775111d - arm-trusted-firmware.t234/plat/socionext/uniphier/uniphier_syscnt.c 006db753e22b1119a67d4f76bd213bf3de08be09 - arm-trusted-firmware.t234/plat/socionext/uniphier/uniphier_gicv3.c d181839ef722d36e8a51c126deb67a2eae64c527 - arm-trusted-firmware.t234/plat/socionext/uniphier/tsp/uniphier_tsp_setup.c 8bea3f2da202b83b97d9b86e32cb50d5c17cae7e - arm-trusted-firmware.t234/plat/socionext/uniphier/include/plat_macros.S e35ee40c042c15de97496be4f1d9c81b960cc3da - arm-trusted-firmware.t234/plat/socionext/uniphier/include/platform_def.h 60baba93a9e38f989d8f3fdfb045849d1edc2d69 - arm-trusted-firmware.t234/plat/marvell/octeontx/otx2/t91/t9130_cex7_eval/board/marvell_plat_config.c 65b77a7dbb8e28f892af2bf3b76eff17c87a9cbd - arm-trusted-firmware.t234/plat/marvell/octeontx/otx2/t91/t9130/mvebu_def.h 2311f962795291fdd649a3acb3d3fcee85e19d11 - arm-trusted-firmware.t234/plat/marvell/octeontx/otx2/t91/t9130/board/phy-porting-layer.h a1f884a99e9e14ac83551e73429b0cf7a2c5aa0d - arm-trusted-firmware.t234/plat/marvell/octeontx/otx2/t91/t9130/board/dram_port.c 147f2e7e737cb6a5eb1dd98a0deed8c0462d2041 - arm-trusted-firmware.t234/plat/marvell/octeontx/otx2/t91/t9130/board/marvell_plat_config.c 5e67c15fa899cc3d6d54c6690c27ee68a251e6e5 - arm-trusted-firmware.t234/plat/marvell/armada/common/marvell_bl31_setup.c 967cec99f7b71e660a863c2b6c7b345e67765961 - arm-trusted-firmware.t234/plat/marvell/armada/common/marvell_ddr_info.c e8797c2639ec349e76fc1946c984275c010e4cc0 - arm-trusted-firmware.t234/plat/marvell/armada/common/marvell_console.c 9fa0f4b8209945eb39ccee90bcc305efbe10f211 - arm-trusted-firmware.t234/plat/marvell/armada/common/marvell_gicv2.c c785e8c07a0fa5d01b9ecf8eee873f7a18697e3a - arm-trusted-firmware.t234/plat/marvell/armada/common/mrvl_sip_svc.c 79f7407103c1059afb212382689fff9c6a4f4350 - arm-trusted-firmware.t234/plat/marvell/armada/common/marvell_io_storage.c 584933c23c61489326c2c1c2f503b261225081c2 - arm-trusted-firmware.t234/plat/marvell/armada/common/marvell_gicv3.c 0ff28a152c1c0997120e1e3a5fe654f1ae19ac60 - arm-trusted-firmware.t234/plat/marvell/armada/common/marvell_cci.c 6ea11f2ef3d7978e714cdf621aeb7c8719c7edf3 - arm-trusted-firmware.t234/plat/marvell/armada/common/marvell_bl1_setup.c db23baf6374a79472a4b930f1fd68144d4f314a1 - arm-trusted-firmware.t234/plat/marvell/armada/common/marvell_bl2_setup.c c6e2fab47d050265fe94d5ce57fd1a3a684da2c9 - arm-trusted-firmware.t234/plat/marvell/armada/common/marvell_topology.c ea896d0f1d011e14c4411020d73d083c22eac783 - arm-trusted-firmware.t234/plat/marvell/armada/common/plat_delay_timer.c 59510c739cc2d9619a9a5c21e1cbf1bb05094867 - arm-trusted-firmware.t234/plat/marvell/armada/common/marvell_pm.c 69ee13cde36accbde0f355f89f9cc2b5d1aa2cb9 - arm-trusted-firmware.t234/plat/marvell/armada/common/marvell_image_load.c 44573513efade3da9aa2ca94c3d4069a8af646fd - arm-trusted-firmware.t234/plat/marvell/armada/common/mss/mss_mem.h 872e517062b5b548f6de42424dfb8290309f6773 - arm-trusted-firmware.t234/plat/marvell/armada/common/mss/mss_scp_bootloader.h 0bb02e303d4c696fe34379bc2d5dd9f2fe16229d - arm-trusted-firmware.t234/plat/marvell/armada/common/mss/mss_scp_bootloader.c 42d2fb2461687118d1f9e79ed2ae2a274cc91c45 - arm-trusted-firmware.t234/plat/marvell/armada/common/mss/mss_ipc_drv.h 5cecfb1042c66b79c4c4c9bc5961fd91b34c880f - arm-trusted-firmware.t234/plat/marvell/armada/common/mss/mss_scp_bl2_format.h 56e5fda520a793a37c7e8daa1ecfe2354b26e99e - arm-trusted-firmware.t234/plat/marvell/armada/common/mss/mss_ipc_drv.c c990f5d612bc8d238855b21005f4771531af3124 - arm-trusted-firmware.t234/plat/marvell/armada/common/aarch64/marvell_bl2_mem_params_desc.c 0842c4cae12a7c22367b83357a2c824d060dee67 - arm-trusted-firmware.t234/plat/marvell/armada/common/aarch64/marvell_common.c a71cc21b90eb5b1d29b125e9c98c3e50f9a145bc - arm-trusted-firmware.t234/plat/marvell/armada/common/aarch64/marvell_helpers.S 9a52294343831155772b4411f11af6c989dbd182 - arm-trusted-firmware.t234/plat/marvell/armada/a8k/a80x0_mcbin/mvebu_def.h 25524fffee705cfc27dd670e05523c5de9ef0ed6 - arm-trusted-firmware.t234/plat/marvell/armada/a8k/a80x0_mcbin/board/dram_port.c 586996360a2bcce38bf90fa0b1b7a20a45c6e26b - arm-trusted-firmware.t234/plat/marvell/armada/a8k/a80x0_mcbin/board/marvell_plat_config.c 29e2e91f84a20d0c2f220e0eba6c447909e5aab4 - arm-trusted-firmware.t234/plat/marvell/armada/a8k/a70x0_mochabin/mvebu_def.h 99aea1bcabb4f6d0d7452ad42116629d21bb2b61 - arm-trusted-firmware.t234/plat/marvell/armada/a8k/a70x0_mochabin/board/phy-porting-layer.h 8211399dfbf7994faafa28d85d5d232265c000fe - arm-trusted-firmware.t234/plat/marvell/armada/a8k/a70x0_mochabin/board/dram_port.c e26cc9cf2cffd853101d24b0e6cade82ff5f5cbe - arm-trusted-firmware.t234/plat/marvell/armada/a8k/a70x0_mochabin/board/marvell_plat_config.c 9a52294343831155772b4411f11af6c989dbd182 - arm-trusted-firmware.t234/plat/marvell/armada/a8k/a80x0_puzzle/mvebu_def.h 4d33d263a3f05c3d8f3400a45afc2dd7f1792669 - arm-trusted-firmware.t234/plat/marvell/armada/a8k/a80x0_puzzle/board/dram_port.c 7bdf0ea1da45eaab8f21dca700b29582ccc57d0a - arm-trusted-firmware.t234/plat/marvell/armada/a8k/a80x0_puzzle/board/system_power.c f1c6500edd19c1540f562c4ea2dba8443a7cd419 - arm-trusted-firmware.t234/plat/marvell/armada/a8k/a80x0_puzzle/board/marvell_plat_config.c 9a52294343831155772b4411f11af6c989dbd182 - arm-trusted-firmware.t234/plat/marvell/armada/a8k/a80x0/mvebu_def.h 80de920eee6f0214b1cfb2cf104cd6d295bb478b - arm-trusted-firmware.t234/plat/marvell/armada/a8k/a80x0/board/phy-porting-layer.h c0c43ed673f4f38bd78a3d145c4ff0f553bf3032 - arm-trusted-firmware.t234/plat/marvell/armada/a8k/a80x0/board/dram_port.c 027eab15e763f75779fca4721b6612e1cef0f74a - arm-trusted-firmware.t234/plat/marvell/armada/a8k/a80x0/board/marvell_plat_config.c bc3edb20ef2a7baebacce2c631f800cb6d206bbc - arm-trusted-firmware.t234/plat/marvell/armada/a8k/common/plat_bl1_setup.c 4f7afd096359c9aad1f7852029a643db033fe7c7 - arm-trusted-firmware.t234/plat/marvell/armada/a8k/common/plat_ble_setup.c c96d4c2fac061ca1e3be3600ee8748de11d20ed0 - arm-trusted-firmware.t234/plat/marvell/armada/a8k/common/plat_pm_trace.c f1e7a83b618d37eb2df8dcc4cff814b934a4ab74 - arm-trusted-firmware.t234/plat/marvell/armada/a8k/common/plat_thermal.c 3f6403fd39850e34f4c3bd674ccf8170f74af43d - arm-trusted-firmware.t234/plat/marvell/armada/a8k/common/plat_bl31_setup.c f699492dab133c44b5675b2928a93903f59ea700 - arm-trusted-firmware.t234/plat/marvell/armada/a8k/common/plat_pm.c 86c5d3b710ba9b63aaf82c0f9dc1606c22176f45 - arm-trusted-firmware.t234/plat/marvell/armada/a8k/common/include/plat_macros.S eb840b0d5bb6e8cbd42b1ab32b72baec165926e7 - arm-trusted-firmware.t234/plat/marvell/armada/a8k/common/include/platform_def.h 9fe71c8db281a9fc253c959e2bf8d7ed5b59f658 - arm-trusted-firmware.t234/plat/marvell/armada/a8k/common/include/ddr_info.h 0f1625972d53fdedca61514318bdfd1ca806ac51 - arm-trusted-firmware.t234/plat/marvell/armada/a8k/common/include/a8k_plat_def.h 3145664e80460f27bc2fd8cda127e916e518678f - arm-trusted-firmware.t234/plat/marvell/armada/a8k/common/include/mentor_i2c_plat.h cc11d9f29f29d9c9366f3e6c66183d38e3031ab7 - arm-trusted-firmware.t234/plat/marvell/armada/a8k/common/mss/mss_pm_ipc.c 392f1834ac5b4679e9ae724c7cf1f3a20c0e566a - arm-trusted-firmware.t234/plat/marvell/armada/a8k/common/mss/mss_bl31_setup.c 97ae958df0c9d8f54ff36a7803fe0ba27434e45c - arm-trusted-firmware.t234/plat/marvell/armada/a8k/common/mss/mss_pm_ipc.h f83bec0cc962f915447a4582455414387713f7ac - arm-trusted-firmware.t234/plat/marvell/armada/a8k/common/mss/mss_defs.h 9acdf9fa5a506b13c376584f49b42a4f437af6c5 - arm-trusted-firmware.t234/plat/marvell/armada/a8k/common/mss/mss_bl2_setup.c 4b2131b48e6b858b49e7e4d819172c5bc729f213 - arm-trusted-firmware.t234/plat/marvell/armada/a8k/common/aarch64/plat_arch_config.c 919f5232edc5f6c3ec1670dedf5bf25fbb59356f - arm-trusted-firmware.t234/plat/marvell/armada/a8k/common/aarch64/plat_helpers.S 01f390bd22a88039e1fc5f2d062ca126dae34478 - arm-trusted-firmware.t234/plat/marvell/armada/a8k/common/aarch64/a8k_common.c afff23d84b3d0b2dd27221934ccb9475fce71502 - arm-trusted-firmware.t234/plat/marvell/armada/a8k/common/ble/ble.ld.S 8d8ccf9d72fb421744052b95f2dc698844542a67 - arm-trusted-firmware.t234/plat/marvell/armada/a8k/common/ble/ble_mem.S 29b7013d6e080d93a60b3780f10310e29aaa6bbb - arm-trusted-firmware.t234/plat/marvell/armada/a8k/common/ble/ble_main.c b79710e67347483f51ba3aa8fcb25a7f7dbb5083 - arm-trusted-firmware.t234/plat/marvell/armada/a8k/a70x0/mvebu_def.h e0382b98cbf2ae3613453ec924646d5af8b1f11e - arm-trusted-firmware.t234/plat/marvell/armada/a8k/a70x0/board/dram_port.c a3184b54f314a3880b11bd80e9ace2a825e4e251 - arm-trusted-firmware.t234/plat/marvell/armada/a8k/a70x0/board/marvell_plat_config.c c7d9738b5d030b72c12bb9649d2dfb58e180b5b8 - arm-trusted-firmware.t234/plat/marvell/armada/a8k/a70x0_amc/mvebu_def.h eecb4e28621a6ea2bbe58371406ef5f58590424c - arm-trusted-firmware.t234/plat/marvell/armada/a8k/a70x0_amc/board/dram_port.c 8eca9aa01df9af91fe07386e941d7557eae7d0ce - arm-trusted-firmware.t234/plat/marvell/armada/a8k/a70x0_amc/board/marvell_plat_config.c 3f70fd4dd52f090e5e86093abe02a4f90c8f4353 - arm-trusted-firmware.t234/plat/marvell/armada/a3k/common/cm3_system_reset.c 4e66aa51fabafab21b8e01fa4f3d49fc8fe6a97e - arm-trusted-firmware.t234/plat/marvell/armada/a3k/common/a3700_sip_svc.c f0aaac82be8c1b465622b1b82d8514de62c2e937 - arm-trusted-firmware.t234/plat/marvell/armada/a3k/common/dram_win.c 5ce8b4638274f9c66287b2f3662bb0bfcfc00074 - arm-trusted-firmware.t234/plat/marvell/armada/a3k/common/a3700_ea.c c69cebb7da27f2c1868010e64282cc0bf1710430 - arm-trusted-firmware.t234/plat/marvell/armada/a3k/common/plat_pm.c a8ca841fb42e9bb5a9c071732f25138003b82d96 - arm-trusted-firmware.t234/plat/marvell/armada/a3k/common/plat_cci.c 344f94187e37e08b2f532eb66281e7e28e7702c5 - arm-trusted-firmware.t234/plat/marvell/armada/a3k/common/io_addr_dec.c d00c0cf869839d6cd370b5b6c58e8d066705e2e1 - arm-trusted-firmware.t234/plat/marvell/armada/a3k/common/marvell_plat_config.c 71cc1316bcad08255d76ad0ad858f47d681be60d - arm-trusted-firmware.t234/plat/marvell/armada/a3k/common/include/a3700_plat_def.h 58c7ff47a2230af870313a655dcab4f22dd64957 - arm-trusted-firmware.t234/plat/marvell/armada/a3k/common/include/dram_win.h 12bd9050e1d74b888a3866cf8ff79d17103fd0f2 - arm-trusted-firmware.t234/plat/marvell/armada/a3k/common/include/plat_macros.S 4fca4639fadfa096c82d08932ff7c44b56b9ef4f - arm-trusted-firmware.t234/plat/marvell/armada/a3k/common/include/a3700_pm.h 61ab3a7cf4de99459f74b40ee4aa7c4c063f92ab - arm-trusted-firmware.t234/plat/marvell/armada/a3k/common/include/platform_def.h 6c89be0e3e7e102687ce8d216227785edce4db33 - arm-trusted-firmware.t234/plat/marvell/armada/a3k/common/include/ddr_info.h 0e8b8f431e24f28a92fcd4fb9d46eb87a1113db4 - arm-trusted-firmware.t234/plat/marvell/armada/a3k/common/include/io_addr_dec.h 6a97369a4a693cf002e5f5f6ece32516e5978068 - arm-trusted-firmware.t234/plat/marvell/armada/a3k/common/aarch64/a3700_common.c 965bc32da1f0ff9aa830bcede48eaca19cbe3b29 - arm-trusted-firmware.t234/plat/marvell/armada/a3k/common/aarch64/plat_helpers.S 80f0ae31f4c2b57b330b01be44b293f6aa2cef72 - arm-trusted-firmware.t234/plat/marvell/armada/a3k/common/aarch64/a3700_clock.S 716620282caf3210c15f6795e996035311a8ddd8 - arm-trusted-firmware.t234/plat/marvell/armada/a3k/a3700/plat_bl31_setup.c 2cecd73b6df5a49196420939a6810672640ce165 - arm-trusted-firmware.t234/plat/marvell/armada/a3k/a3700/mvebu_def.h 8f4af50a0df849dd31970be55e943ee4302b0472 - arm-trusted-firmware.t234/plat/marvell/armada/a3k/a3700/board/pm_src.c dd2c481628c54d07d905a85f08e527943473d31b - arm-trusted-firmware.t234/plat/arm/common/arm_nor_psci_mem_protect.c 29d5aa4597a4a5d917e61847ae451ff6ab6894d5 - arm-trusted-firmware.t234/plat/arm/common/arm_transfer_list.c a0c5e4e24484adfcc6ac93c449bd813fdf93b8d7 - arm-trusted-firmware.t234/plat/arm/common/arm_image_load.c 818f12da52d6ba6cd1d5d93897b8a593c7eb3482 - arm-trusted-firmware.t234/plat/arm/common/arm_dyn_cfg.c 3b628c17fd98697338a0997a380df8a81c7d2e66 - arm-trusted-firmware.t234/plat/arm/common/arm_bl2u_setup.c adfcc84bd8ad9fae1bdcd665a19440e5ab1c98f5 - arm-trusted-firmware.t234/plat/arm/common/plat_arm_sip_svc.c f2f3b9e0893c37d6ecae1332b3df925e9ab4d30f - arm-trusted-firmware.t234/plat/arm/common/arm_console.c 53d385569ada7ff06030853184930078d8a2e4d8 - arm-trusted-firmware.t234/plat/arm/common/arm_cci.c 1393b5f319d3543f91e805b03796d51c174b5aaa - arm-trusted-firmware.t234/plat/arm/common/plat_arm_psa_mbedtls_config.h 842368bd1a44c1ece633a1254dc3cdaa4983c6ae - arm-trusted-firmware.t234/plat/arm/common/arm_topology.c a4601d47fff1bcbd67d6bc5e129818249985a306 - arm-trusted-firmware.t234/plat/arm/common/arm_bl2_el3_setup.c 0ba5633b7ee65a26daba781e30eed64d4238eca8 - arm-trusted-firmware.t234/plat/arm/common/arm_bl1_setup.c a9b2979953ad3e756072669ad95a76af666acde9 - arm-trusted-firmware.t234/plat/arm/common/arm_bl2_setup.c fde62327d83289a093f9126cd1fbd07a704e63b2 - arm-trusted-firmware.t234/plat/arm/common/arm_err.c 667de698f76e8d0b6d6f1b85f8012f3bed27e925 - arm-trusted-firmware.t234/plat/arm/common/arm_ccn.c 5aaf7c7a3e2a32f4ad19ecc91f3ea47adf574963 - arm-trusted-firmware.t234/plat/arm/common/arm_common.c f16aaa79788173495f036dde4e976ca7d3d380d5 - arm-trusted-firmware.t234/plat/arm/common/plat_arm_mbedtls_config.h 9b812991736d46b06d462799a31eb49ffae96260 - arm-trusted-firmware.t234/plat/arm/common/arm_gicv2.c 056e535b44d9a1dd55f6379e7cf5baa3c4388f2b - arm-trusted-firmware.t234/plat/arm/common/arm_ni.c 94f57b42c5609f487f9e4375410d8dffa9518456 - arm-trusted-firmware.t234/plat/arm/common/arm_dyn_cfg_helpers.c b32ea063a86c3eeb95f7e27250ddd711279f78a0 - arm-trusted-firmware.t234/plat/arm/common/arm_sip_svc.c 5f8fb896e304dbb204531641566de21b2e53a426 - arm-trusted-firmware.t234/plat/arm/common/arm_tzc400.c 63de1e2abaa4387cd08adc8593c679c474e72bcf - arm-trusted-firmware.t234/plat/arm/common/arm_bl31_setup.c c3c969f538ef3f3853d867a2c9c020723e5adc66 - arm-trusted-firmware.t234/plat/arm/common/arm_tzc_dmc500.c 48d31c8dd8f1e6886a25987315a8b1ad7afce283 - arm-trusted-firmware.t234/plat/arm/common/arm_gicv3.c abdb20c16e5bae6df0e447b4a356eb5b9ed3eda0 - arm-trusted-firmware.t234/plat/arm/common/arm_bl1_fwu.c c90b7f20ee31cdce57be9e4d5faac201950130f2 - arm-trusted-firmware.t234/plat/arm/common/arm_io_storage.c 16c1174c0de094df0fe6de4c51f30ab149b286ed - arm-trusted-firmware.t234/plat/arm/common/arm_pm.c c8570cb5a21b73e2eaace2d3c46c3bc1d40f888e - arm-trusted-firmware.t234/plat/arm/common/fconf/arm_fconf_io.c 361186531a919bdc7825945fec639bf0db44800f - arm-trusted-firmware.t234/plat/arm/common/fconf/fconf_nv_cntr_getter.c ac62b3ab6e132e1747dbd2ffd6f40a72b4270235 - arm-trusted-firmware.t234/plat/arm/common/fconf/fconf_sec_intr_config.c c46f281d3ce64ebf0bb688c9cdcfe4585c3a6dbe - arm-trusted-firmware.t234/plat/arm/common/fconf/fconf_ethosn_getter.c 310f5212c93492a9ca17bbf110947773178b8581 - arm-trusted-firmware.t234/plat/arm/common/fconf/arm_fconf_sp.c dce55e77a6a4b9da7a42be37f5bba717d0c353e0 - arm-trusted-firmware.t234/plat/arm/common/fconf/fconf_sdei_getter.c a6b8e0383455c200650248d8c5e139a1777f0de2 - arm-trusted-firmware.t234/plat/arm/common/tsp/arm_tsp_setup.c f103981566e73c2dc3f637dc95cbc407e347fe2d - arm-trusted-firmware.t234/plat/arm/common/sp_min/arm_sp_min_setup.c e2af2aba9ebd2c15f77983971f68c3813078e195 - arm-trusted-firmware.t234/plat/arm/common/aarch64/arm_helpers.S f11f87dd8e83dda1998c40b344a600b335b14543 - arm-trusted-firmware.t234/plat/arm/common/aarch64/arm_bl2_mem_params_desc.c 1177013eddcf476b6a6d1f3367ae319363663450 - arm-trusted-firmware.t234/plat/arm/common/aarch64/arm_pauth.c a60fe2bc76c9c5a5a3a4e04918884fd7983a6c8e - arm-trusted-firmware.t234/plat/arm/common/aarch64/execution_state_switch.c 67dd9243850252949cc95efb3408af47a1791ba0 - arm-trusted-firmware.t234/plat/arm/common/aarch64/arm_sdei.c 8c6171b381cfc6eca906ce2f7e2e6658895380ca - arm-trusted-firmware.t234/plat/arm/common/aarch32/arm_helpers.S 2147b3c541e549d0bc01f00aed57c924d90d6003 - arm-trusted-firmware.t234/plat/arm/common/aarch32/arm_bl2_mem_params_desc.c 84e0ca77e294f11654f20b287fb541b2287bdb4a - arm-trusted-firmware.t234/plat/arm/common/trp/arm_trp_setup.c 5562bd387d6506e0db4a62fe23b24cd1c5046754 - arm-trusted-firmware.t234/plat/arm/board/corstone1000/common/corstone1000_stack_protector.c 151a77208d20281181da91b2119b75c4de526102 - arm-trusted-firmware.t234/plat/arm/board/corstone1000/common/corstone1000_bl2_mem_params_desc.c 1e7fe4ccc25d366dfe5f6a14851dab68001bdb13 - arm-trusted-firmware.t234/plat/arm/board/corstone1000/common/corstone1000_topology.c c31d926d306ddef7f77235e1b4e46b86660dca2e - arm-trusted-firmware.t234/plat/arm/board/corstone1000/common/corstone1000_helpers.S b8986dac246e932ea1ba7ee38e8e8ede263e1b24 - arm-trusted-firmware.t234/plat/arm/board/corstone1000/common/corstone1000_trusted_boot.c fbb932100f4228bb8fe153a58d84898837188f8b - arm-trusted-firmware.t234/plat/arm/board/corstone1000/common/corstone1000_err.c 9f0cc46bc47b39bf5ef4354b925680e7a3b6d55f - arm-trusted-firmware.t234/plat/arm/board/corstone1000/common/corstone1000_plat.c f5cf856183484e5aa80eb7575ef916bd59e8b801 - arm-trusted-firmware.t234/plat/arm/board/corstone1000/common/corstone1000_bl31_setup.c 205b4ca0cb05e33669284a62b9c25f52ece1b8e9 - arm-trusted-firmware.t234/plat/arm/board/corstone1000/common/corstone1000_pm.c b9f80852b169e9c137876fadebe0782792162fe4 - arm-trusted-firmware.t234/plat/arm/board/corstone1000/common/corstone1000_security.c 16e3686521725b2e8cf355c2d990811fc260a02c - arm-trusted-firmware.t234/plat/arm/board/corstone1000/common/fdts/corstone1000_spmc_manifest.dts a51899dda2820f571a0f0210e0ca82ad8e6a8ac7 - arm-trusted-firmware.t234/plat/arm/board/corstone1000/common/include/platform_def.h 70913ecf05a6e846d99d63213b643de746a371e8 - arm-trusted-firmware.t234/plat/arm/board/corstone1000/include/plat_macros.S d115cd145587e366c9c6d02d47cc7ea610f7791f - arm-trusted-firmware.t234/plat/arm/board/morello/morello_security.c 846d7f92ffe6c368d0d0b85ffa36409b0dd04caf - arm-trusted-firmware.t234/plat/arm/board/morello/morello_trusted_boot.c 3fcdf0172f72867955ed0a4642a76273495b9e0e - arm-trusted-firmware.t234/plat/arm/board/morello/morello_def.h b33c4793c6b90b79c1ab036206dc1490ab62397d - arm-trusted-firmware.t234/plat/arm/board/morello/morello_pm.c 62d9b510aead8dcbacf77dd79db42a1476042efe - arm-trusted-firmware.t234/plat/arm/board/morello/morello_plat.c c855687b5adb537f1a56e37496a708864bd72650 - arm-trusted-firmware.t234/plat/arm/board/morello/morello_bl1_setup.c 021dca0ec2928f72c45e98a602338d8a2bb08cc2 - arm-trusted-firmware.t234/plat/arm/board/morello/morello_err.c 4f36abd47ee21300743bf884228af4062ead9ca9 - arm-trusted-firmware.t234/plat/arm/board/morello/morello_private.h 5457ec463cc8a966e6b179d42b57efbe3129da4b - arm-trusted-firmware.t234/plat/arm/board/morello/morello_bl2_setup.c 828d3802a958b2c62db6a6f9ac029d237dfb39f8 - arm-trusted-firmware.t234/plat/arm/board/morello/morello_image_load.c 0105670429d8a205bc698cf69de09044501a55a1 - arm-trusted-firmware.t234/plat/arm/board/morello/morello_topology.c 42659a5e25bf580b3f178c1c4fe693c1ff420253 - arm-trusted-firmware.t234/plat/arm/board/morello/morello_bl31_setup.c 59b5177c9b302f117bea58642d758d747224eaed - arm-trusted-firmware.t234/plat/arm/board/morello/morello_interconnect.c dc1fea308c9ff63b2d391c035a136843525821d5 - arm-trusted-firmware.t234/plat/arm/board/morello/fdts/morello_fw_config.dts 633df151e127cb07991e6c151374adac1ab4e203 - arm-trusted-firmware.t234/plat/arm/board/morello/fdts/morello_nt_fw_config.dts a95b1476c52a6213400f2402811d15e5d82d7d83 - arm-trusted-firmware.t234/plat/arm/board/morello/fdts/morello_tb_fw_config.dts 5361abb465b0253014c38facafec374dd284699a - arm-trusted-firmware.t234/plat/arm/board/morello/include/plat_macros.S cc684c89885c0f75997f4934fc04e8171c8be3e1 - arm-trusted-firmware.t234/plat/arm/board/morello/include/platform_def.h 1c3ff5d4d35a2aa211380dea2b252236f3dae0b1 - arm-trusted-firmware.t234/plat/arm/board/morello/aarch64/morello_helper.S 8908fa02b1140f0d45e9bdcc3d5552190eb3af41 - arm-trusted-firmware.t234/plat/arm/board/corstone700/common/corstone700_security.c ed51f976efc9644368dd64840ed3d158c086650e - arm-trusted-firmware.t234/plat/arm/board/corstone700/common/corstone700_stack_protector.c 3d1a55d785180dd11beb8473207268d04543695a - arm-trusted-firmware.t234/plat/arm/board/corstone700/common/corstone700_helpers.S 5f0ac09b373c85fd1d635fb4f06ea45011389b19 - arm-trusted-firmware.t234/plat/arm/board/corstone700/common/corstone700_topology.c df9742f665da99900fe4a3fdc0b6fbcc02209a0f - arm-trusted-firmware.t234/plat/arm/board/corstone700/common/corstone700_pm.c 9351efb35af5c14748c7b05d814c8176be5b8716 - arm-trusted-firmware.t234/plat/arm/board/corstone700/common/corstone700_plat.c 3c1fd619c9a1da90f7af84b9c6e1b8eceb5e7a20 - arm-trusted-firmware.t234/plat/arm/board/corstone700/common/include/platform_def.h c7a771e05849f4d7b946b8b3c32ba774fbff39dd - arm-trusted-firmware.t234/plat/arm/board/corstone700/common/drivers/mhu/corstone700_mhu.c a3a970e3ac6e7d75b9c190fb16599a2ab423f3db - arm-trusted-firmware.t234/plat/arm/board/corstone700/common/drivers/mhu/corstone700_mhu.h d2cf1d7868d3a048734caa91b018fb43f56c36dd - arm-trusted-firmware.t234/plat/arm/board/corstone700/sp_min/corstone700_sp_min_setup.c b778372c894148d33d27db1b0b22116868317d32 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/common/nrd_plat2.c e8282a093ef65c96e3efdd2a39cddfd286a52d00 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/common/nrd_plat3.c fbe31a56db747d6aa83da511529446226a4eb4f6 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/common/nrd_bl1_setup.c c09bbae5d621234264b9293e43dd735fcf845218 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/common/nrd_interconnect.c ec6079ff170e795c6d6a8582b85e3d5bbfd538b6 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/common/nrd_topology.c f1befa10c6fbf59721f3ffba385d606c03bb4a45 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/common/nrd_plat1.c 812f89cfead223183acb747f2f15e4b97cbc17ba - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/common/nrd_image_load.c c8662f02946b7172675d9ec85a5604c71c89b030 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/common/nrd_bl31_setup.c 26408b43b04d8cc97360ceed6071e260a87fb317 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/common/arch/aarch64/nrd_helper.S 4fd5fdfb9e3fb2e03cdbeb9d862b07eff3611726 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/common/include/nrd_plat.h 23773a3abfb7dfdccd92c4b90c705782ff4cbf87 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/common/include/plat_macros.S 0f8a04985ab3425f92865148d4c4858add74aadc - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/common/include/nrd_variant.h 94083014415642b2915add78118ecbae45d0af7a - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/common/include/nrd_dmc620_tzc_regions.h 9527d4ae5a828c198272d1fc41bf8d3c3c117ed7 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/common/include/nrd_sdei.h fceb82d9968fadd2629d420d2ac329520f35d69a - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/common/include/nrd_ras.h 1a9565a8c5c1a0984e3c1ac833b63ff00b6a0f99 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/common/include/nrd1/nrd_ros_def1.h 88ed3cdb112b7de236bab48a3336893cebe7c19c - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/common/include/nrd1/nrd_ros_fw_def1.h 8734c98f3a3ca423045b55a9151ebb72f292065f - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/common/include/nrd1/nrd_css_def1.h f736f3f8b2474f8917a7d921687bd1e68db30b15 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/common/include/nrd1/nrd_css_fw_def1.h 98a5fbb96b825c2d0784250e6c5898c5565a3508 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/common/include/nrd1/nrd_plat_arm_def1.h 2b8a14266b215e8500c8ebcd11083ab100b2ac13 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/common/include/nrd2/nrd_ros_fw_def2.h 131f69d567a1fd1fb70d8ded011d6862d21ec3fa - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/common/include/nrd2/nrd_css_def2.h fbab619cb6f390cc8acddfee0a713c6592ca8d74 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/common/include/nrd2/nrd_plat_arm_def2.h e7f86574297c19a977bce4534e53eb0f8fd7357a - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/common/include/nrd2/nrd_css_fw_def2.h 2971ac274effa51d03ea89ffb49bd0a767b44576 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/common/include/nrd2/nrd_ros_def2.h c091463ca1e8bd081e4a5c3a17c29d61dbd2c15f - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/common/include/nrd3/nrd_css_def3.h 81baaae9312c41d3005712c868f511fa042e1731 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/common/include/nrd3/nrd_plat_arm_def3.h bb4cb09640b54037f02cab9cd9ce6e7ab4438b06 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/common/include/nrd3/nrd_ros_fw_def3.h 53fc6aa7c2945399e03789a441479797aba72000 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/common/include/nrd3/nrd_css_fw_def3.h c931e67dda69964bfe3c6299527c5a62ee8e6458 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/common/include/nrd3/nrd_ros_def3.h 8d9825c7e23ce8ef5e4fa4cca7b9fc227783a1e2 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/common/include/nrd3/nrd_pas_def3.h 3f6b7ff80db64736174b438dfe6c170e09adb050 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/common/ras/nrd_ras_sram.c d2e517a35469f61bd7deaa5fc56a18b56562dc98 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/common/ras/nrd_ras_cpu.c b9442e4a56b0f18d8a60f34623f2333a1a8db37c - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/common/ras/nrd_ras_common.c a65b9a275a0dae548ed35a0f3b55acaa27255501 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/rdn2/rdn2_plat.c 6a2b5cdb19a83e82f71a5025a3e2214bbf609e95 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/rdn2/rdn2_trusted_boot.c 5858c3b1d4b21d4ca84fbb6763820f4d3afdf79c - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/rdn2/rdn2_err.c f5c7185914cb858d2076adca1ae93c0f1cf61a23 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/rdn2/rdn2_ras.c 907835594713eea33682fdffd88e632e5721f9f9 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/rdn2/rdn2_security.c b624f43826591988b650f0f9d787a23892270ba8 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/rdn2/rdn2_topology.c 077866bbea9900cafe83ec0e3c96e5c0284df074 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/rdn2/fdts/rdn2_stmm_sel0_manifest.dts 3b7c8e98f1d573f51f2d9701e383dfe6493e56af - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/rdn2/fdts/rdn2_nt_fw_config.dts 0d43a64df16e1cd2b98d48e1a1d31b1bd4b59564 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/rdn2/fdts/rdn2_tb_fw_config.dts 9453a3e5b2340c446a77eca620ce3873c4121c56 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/rdn2/fdts/rdn2_fw_config.dts c35566aa8533bef9d01d1b9d4ddb676323929eb7 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/rdn2/include/rdn2_ras.h b67141de571ca48346ceea94685e907a396e13d9 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/rdn2/include/platform_def.h 6a2b5cdb19a83e82f71a5025a3e2214bbf609e95 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/rdv1mc/rdv1mc_trusted_boot.c 6034cf405e8d40ea338c6b5172ea229b46b44576 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/rdv1mc/rdv1mc_err.c 3c8ff65a0313624c20411817451e410417e8f777 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/rdv1mc/rdv1mc_security.c 2e5cd73795082b1002993679b6956fb733e9bcba - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/rdv1mc/rdv1mc_topology.c c89bb9108eafcda12d2d30442653f581b323c69b - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/rdv1mc/rdv1mc_plat.c f9e935cb9812b5725c10b475ac5726697f54e9b1 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/rdv1mc/fdts/rdv1mc_nt_fw_config.dts 0d43a64df16e1cd2b98d48e1a1d31b1bd4b59564 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/rdv1mc/fdts/rdv1mc_tb_fw_config.dts d6bdd8815cd24802d7e1e7ed58eb7856206f1a09 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/rdv1mc/fdts/rdv1mc_fw_config.dts 56944f2721bc3a91524137653594f4d94b111df2 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/rdv1mc/include/platform_def.h 71e8586103fba3d42cfcedf2d73fbb3159e644c6 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/rdn1edge/rdn1edge_topology.c 37ed8904207b830aa41768911cb375be7a80c255 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/rdn1edge/rdn1edge_err.c 469fb01244193b10029f4f3a0f9cd74392ecb4c6 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/rdn1edge/rdn1edge_plat.c c1e621e5e37b4ee147fc5aa947bb35c129ba4379 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/rdn1edge/rdn1edge_security.c 6a2b5cdb19a83e82f71a5025a3e2214bbf609e95 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/rdn1edge/rdn1edge_trusted_boot.c 5b0f45b21735c43c8957e2a335abfd5117d89164 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/rdn1edge/fdts/rdn1edge_fw_config.dts da5aac82c5ab2281c1141e95cb9b38a41fc5f3bf - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/rdn1edge/fdts/rdn1edge_tb_fw_config.dts 09260355a3e8b0f8bbed29d98c59c79413da69e5 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/rdn1edge/fdts/rdn1edge_nt_fw_config.dts 0163f0fae9144ca2b611776569482f6571863d9b - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/rdn1edge/include/platform_def.h ed9e0a089ee0f21790dd758e8e4c151b2f68f383 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/sgi575/sgi575_security.c 6a2b5cdb19a83e82f71a5025a3e2214bbf609e95 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/sgi575/sgi575_trusted_boot.c 85a17a0819179aeb4591efe6975f9f48ff34ab99 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/sgi575/sgi575_topology.c 6e722b7ead7c5313ce09cb810102003a31b382dd - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/sgi575/sgi575_err.c 84f5fd250c0d30d34a514089a29b1ed4f94d86c5 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/sgi575/sgi575_plat.c d6987099c760212bc826a809b4d53e21dd9ebd84 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/sgi575/fdts/sgi575_nt_fw_config.dts 0d43a64df16e1cd2b98d48e1a1d31b1bd4b59564 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/sgi575/fdts/sgi575_tb_fw_config.dts 6a79ec9acea716907d56f80b0007a61a9362b1a8 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/sgi575/fdts/sgi575_fw_config.dts 7c431efb22832ced28c05c6c5dd1271fe202a036 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/sgi575/include/platform_def.h fec600dc31ef070dfc64e767ea96ba49fb5deeb6 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/rdv3/rdv3_bl2_measured_boot.c 22181a190db64469b82ebe5a399eaa836475d5b8 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/rdv3/rdv3_err.c 17f22a5c0108a3a5e8a92d1c6ec623dc7ca376f5 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/rdv3/rdv3_trusted_boot.c d2cd1188e9ca5ca2ea8e0f1344b16b6f8f61adf0 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/rdv3/rdv3_common_measured_boot.c 3e278ea611eac17a4e533f6bb28a719defb64714 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/rdv3/rdv3_plat_attest_token.c 6bfdb3a884ba427562c72062ce73bbe2ad450320 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/rdv3/rdv3_bl1_measured_boot.c 7991ce13ba981261d047ef803a8025056a6199c7 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/rdv3/rdv3_mhuv3.c 974fc5a27148b7af1ece42b6f6e279b8c99180ab - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/rdv3/rdv3_topology.c 0f3254c9ecf532c92ef631bca6e612320e130c4d - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/rdv3/rdv3_security.c afb3530ce3e09217a96e966d9cd837bb8730096b - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/rdv3/rdv3_bl31_setup.c b1dca155742c20c0db4e000bf513d9b831b7221e - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/rdv3/rdv3_bl2_setup.c 926c08a4b547762700023e447d7621b68ff13b4c - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/rdv3/rdv3_common.c d12570416eb6e6438d54e6c5ebad359849b48095 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/rdv3/rdv3_realm_attest_key.c b240d839bca058635ac96814a23c5774c6ddc44d - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/rdv3/fdts/rdv3_tb_fw_config.dts 8b74ab00f140b4a64246d56b03e5632c884a60e0 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/rdv3/fdts/rdv3_fw_config.dts 85771f3b883a4fbd653735ac40abbb166c52b6a5 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/rdv3/fdts/rdv3_nt_fw_config.dts 9cc87cc549a3f4979e9255040569fd3a4d5c1bb1 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/rdv3/include/rdv3_rse_comms.h 8d417f6f631b1208cbb043fdd85ae47af7c88691 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/rdv3/include/rdv3_mhuv3.h 264ef19045ae0502bfa3092aa6c7814d54c006ba - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/rdv3/include/platform_def.h 72bc5d2d1b50d44b7c610a7425645c77f88d3727 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/rdv1/rdv1_plat.c 6a2b5cdb19a83e82f71a5025a3e2214bbf609e95 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/rdv1/rdv1_trusted_boot.c 69cc381044abd94ae54bf5209dcd18e6ae027873 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/rdv1/rdv1_security.c e9bd0bfeb33d58e9536f4018a953db456a39f8f9 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/rdv1/rdv1_topology.c bbde7d7daefde0af4404ab4432d79329baadf91c - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/rdv1/rdv1_err.c 14738e4d3720835e9d1e885b89e12b6720ccb0e2 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/rdv1/fdts/rdv1_nt_fw_config.dts 0d43a64df16e1cd2b98d48e1a1d31b1bd4b59564 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/rdv1/fdts/rdv1_tb_fw_config.dts d6bdd8815cd24802d7e1e7ed58eb7856206f1a09 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/rdv1/fdts/rdv1_fw_config.dts b2e1bf8f98129674552b01aaf6c5e1f677dd28d1 - arm-trusted-firmware.t234/plat/arm/board/neoverse_rd/platform/rdv1/include/platform_def.h c0478746f7abb1567136588aa75b9ec5142ebcea - arm-trusted-firmware.t234/plat/arm/board/n1sdp/n1sdp_bl1_setup.c 7d80d6700188f44364662e46113af9036afedcbc - arm-trusted-firmware.t234/plat/arm/board/n1sdp/n1sdp_topology.c 77da2e434230b1921a1c5b422e3c386fad0b1f1c - arm-trusted-firmware.t234/plat/arm/board/n1sdp/n1sdp_bl2_setup.c 05da4de5668520b3a0633f1d1c430ccb423a37af - arm-trusted-firmware.t234/plat/arm/board/n1sdp/n1sdp_plat.c eac5333643e2301e539caa3f51e1e49aad8420c2 - arm-trusted-firmware.t234/plat/arm/board/n1sdp/n1sdp_image_load.c 7104250da7bca258ddb0bf081570d32f8900092b - arm-trusted-firmware.t234/plat/arm/board/n1sdp/n1sdp_interconnect.c 4b2fa306464372689007dbc453675d5ea6a5783d - arm-trusted-firmware.t234/plat/arm/board/n1sdp/n1sdp_def.h c12269118b21e6143b6706a81b90cf54740d000e - arm-trusted-firmware.t234/plat/arm/board/n1sdp/n1sdp_err.c 4497a7586471f072a94ff5a066931c86dcb6fd2d - arm-trusted-firmware.t234/plat/arm/board/n1sdp/n1sdp_security.c d6f16cc07cd579ab557c8f7f32e2066974b293f6 - arm-trusted-firmware.t234/plat/arm/board/n1sdp/n1sdp_private.h 3647b36251a85e6126342ef6b3d68542eebbc2a1 - arm-trusted-firmware.t234/plat/arm/board/n1sdp/n1sdp_bl31_setup.c b1dfaefa227716c170afec54c007df39ab1ed523 - arm-trusted-firmware.t234/plat/arm/board/n1sdp/n1sdp_pm.c 31f172efc8e16bf86bc5a0266155410faa98e56d - arm-trusted-firmware.t234/plat/arm/board/n1sdp/n1sdp_trusted_boot.c 7f1a7e1c53ebc90c5254e41517a96e05072b6af6 - arm-trusted-firmware.t234/plat/arm/board/n1sdp/fdts/n1sdp_nt_fw_config.dts 85ebc38bf15e709a94617d0e22454746189c93a0 - arm-trusted-firmware.t234/plat/arm/board/n1sdp/fdts/n1sdp_optee_spmc_manifest.dts 138fe343329f375a545d7daa55144c70b2cbddb8 - arm-trusted-firmware.t234/plat/arm/board/n1sdp/fdts/n1sdp_tb_fw_config.dts 9da6c3964d40da13feef13c16d595d7266ce7e68 - arm-trusted-firmware.t234/plat/arm/board/n1sdp/fdts/n1sdp_fw_config.dts b45c063aa1fdf9280c52020500ae6e83d71244c5 - arm-trusted-firmware.t234/plat/arm/board/n1sdp/include/plat_macros.S 7c4ff43b991aa5590995c5dc201a454a41cfcec7 - arm-trusted-firmware.t234/plat/arm/board/n1sdp/include/platform_def.h 4b16feb977654bc82a89a104dc5b31b167bf17d1 - arm-trusted-firmware.t234/plat/arm/board/n1sdp/aarch64/n1sdp_helper.S 0b886935846ab1d278829932851b6cc492f106cc - arm-trusted-firmware.t234/plat/arm/board/juno/juno_bl31_setup.c 0ff3d7a6c51d9752cc2a86bb19e800a94245eea2 - arm-trusted-firmware.t234/plat/arm/board/juno/juno_stack_protector.c f1262524f15f6487ec46be099eb8378e4a784b4b - arm-trusted-firmware.t234/plat/arm/board/juno/juno_ethosn_tzmp1_def.h 3fcd19e6a323337c4af4cde99dc166550c4c6eba - arm-trusted-firmware.t234/plat/arm/board/juno/jmptbl.i 23da338614af139216ee02d8c2b7aa2bed62f568 - arm-trusted-firmware.t234/plat/arm/board/juno/juno_tbbr_cot_bl2.c 5e874e21c2f386e1ac9ef65367353ad8b0f9c0c3 - arm-trusted-firmware.t234/plat/arm/board/juno/juno_security.c 6cea3743018f1d02cac51c8d78a92561ea46ce14 - arm-trusted-firmware.t234/plat/arm/board/juno/juno_bl2_setup.c 20034278cf98a4d6c7316c2f6dc4e5f3ec002f16 - arm-trusted-firmware.t234/plat/arm/board/juno/juno_trusted_boot.c 5c5694761df0047dcd77db1778fb36c97281aec4 - arm-trusted-firmware.t234/plat/arm/board/juno/plat_def_uuid_config.c 8a5716ff7852804effaf5810a335e69d3a788a50 - arm-trusted-firmware.t234/plat/arm/board/juno/juno_trng.c ebbb9c3ccbc5ea001a213d0ba5a9b7744bd561dc - arm-trusted-firmware.t234/plat/arm/board/juno/juno_tzmp1_def.h 9d0a0cbecb6a779f36773466853583a46ea3d135 - arm-trusted-firmware.t234/plat/arm/board/juno/juno_common.c bef868e2dcb239da5ba7d1787c2f790e1f31d33a - arm-trusted-firmware.t234/plat/arm/board/juno/juno_err.c 17d854b860806d6ad8af6ee63952524a3bcbd9e9 - arm-trusted-firmware.t234/plat/arm/board/juno/juno_pm.c 83d4938b8cf97604e7eac4f77fe9cc0e67ef9744 - arm-trusted-firmware.t234/plat/arm/board/juno/juno_topology.c 656e679faf449c50d26530c361cd799196f6dbfe - arm-trusted-firmware.t234/plat/arm/board/juno/juno_bl1_setup.c 53c5a79a63bf1f5551016da97e29bf8702e32ad3 - arm-trusted-firmware.t234/plat/arm/board/juno/juno_def.h cb0f56480317a5630d523bfd3cc5551129f423d5 - arm-trusted-firmware.t234/plat/arm/board/juno/fip/plat_def_fip_uuid.h 2db54272dec2f0dbc6616ab391f6887847627296 - arm-trusted-firmware.t234/plat/arm/board/juno/fdts/juno_fw_config.dts 4798fcb09c714691791fc766d27d21f097c26204 - arm-trusted-firmware.t234/plat/arm/board/juno/fdts/juno_tb_fw_config.dts 53f8c45c8436fb9bb4378cd8782a0b7d8037e5d2 - arm-trusted-firmware.t234/plat/arm/board/juno/include/plat_macros.S c2cd21954b1b353afb4c886a9a781feb91e4587b - arm-trusted-firmware.t234/plat/arm/board/juno/include/platform_def.h 4c30f5608277e45227efb0b4805d893ced845da7 - arm-trusted-firmware.t234/plat/arm/board/juno/include/plat_tbbr_img_def.h 4780ddabb988fa673f07503011a00242d2ea9faa - arm-trusted-firmware.t234/plat/arm/board/juno/aarch64/juno_helpers.S 319dfb0515299119770970eb5953825ab7abd95c - arm-trusted-firmware.t234/plat/arm/board/juno/aarch32/juno_helpers.S 3e7ffd12968cb0decf56863e52d66472f3184fa1 - arm-trusted-firmware.t234/plat/arm/board/juno/certificate/include/juno_tbb_key.h 390f8dfb0b214a486db324fcd319f30389e6b474 - arm-trusted-firmware.t234/plat/arm/board/juno/certificate/include/juno_tbb_ext.h a0c8a50740fbdb6079df1a7c71fdd4d24def4392 - arm-trusted-firmware.t234/plat/arm/board/juno/certificate/include/platform_oid.h 0abfb116873c78fc6ab86db498571502b0aebb42 - arm-trusted-firmware.t234/plat/arm/board/juno/certificate/include/juno_tbb_cert.h c13be3d7530617faac238dc0e5eb066cc7eef01e - arm-trusted-firmware.t234/plat/arm/board/juno/certificate/src/juno_tbb_ext.c df9bd9cb70850644227cd6a033f68c2480337cdf - arm-trusted-firmware.t234/plat/arm/board/juno/certificate/src/juno_tbb_cert.c a71bf3d08ddab262f53fd41a98baa835ffa168a3 - arm-trusted-firmware.t234/plat/arm/board/juno/certificate/src/juno_tbb_key.c 86c2465abfadc0a5dfe9b561b0f5675db8fee013 - arm-trusted-firmware.t234/plat/arm/board/fvp/fvp_stack_protector.c 0483d2dc6e0ad4e862380a7eda2af77638689551 - arm-trusted-firmware.t234/plat/arm/board/fvp/fvp_el3_spmc_logical_sp.c 4f4a16c38d5657077db5656ce10b9eb5e677fed1 - arm-trusted-firmware.t234/plat/arm/board/fvp/fvp_el3_token_sign.c 39f7e9928719ef3a033225617690172331a84c47 - arm-trusted-firmware.t234/plat/arm/board/fvp/fvp_realm_attest_key.c 4aaf755d9c75e376f13da72aacf8895bacf228c9 - arm-trusted-firmware.t234/plat/arm/board/fvp/jmptbl.i 303747021964dffaf88cf06097a39eff5393722c - arm-trusted-firmware.t234/plat/arm/board/fvp/fvp_spmd.c 0c9d3267229403366a43f37306593c660c95628b - arm-trusted-firmware.t234/plat/arm/board/fvp/fvp_drtm_measurement.c 82ed42473643f46d039c3fed625bfc4c52a73ea9 - arm-trusted-firmware.t234/plat/arm/board/fvp/fvp_drtm_addr.c 18f3aa0aff6bb4d6f611db9497d43afc72362199 - arm-trusted-firmware.t234/plat/arm/board/fvp/fvp_sync_traps.c 31b4f3683dc81479b66220b687084c8b6e336c6c - arm-trusted-firmware.t234/plat/arm/board/fvp/fvp_pm.c 62e214ea809f0f6c8074d86d3bb07e98705aa2e0 - arm-trusted-firmware.t234/plat/arm/board/fvp/fvp_el3_spmc.c 20e8179e5c61147fc2d627dbb503babac430603c - arm-trusted-firmware.t234/plat/arm/board/fvp/fvp_def.h 94d78edbb8ad62b70bf268d61b47d5711d4c7eca - arm-trusted-firmware.t234/plat/arm/board/fvp/fvp_cpu_pwr.c 3a2a8a3ccb8fe94b707bcaa818e8d9d56c18ea17 - arm-trusted-firmware.t234/plat/arm/board/fvp/fvp_bl31_setup.c 5e316e7aff707351abdd130d85610317b23b3078 - arm-trusted-firmware.t234/plat/arm/board/fvp/fvp_bl2_setup.c 0cd688de833f2a18c6d772bd627a60f6ada7351b - arm-trusted-firmware.t234/plat/arm/board/fvp/fvp_drtm_stub.c c3b37e78d800d72c84dbc47eb390c922660d1a15 - arm-trusted-firmware.t234/plat/arm/board/fvp/fvp_trusted_boot.c bdecc785eec7da69776ea2524aa2300f00368c43 - arm-trusted-firmware.t234/plat/arm/board/fvp/fvp_console.c 39a17d4b7f2ec599676cd537f36657273bf30b51 - arm-trusted-firmware.t234/plat/arm/board/fvp/fvp_spmd_logical_sp.c 79412e695ecbb03e3a0547e5f21f2bd1e40eb3a9 - arm-trusted-firmware.t234/plat/arm/board/fvp/fvp_drtm_dma_prot.c 08b0026f4dffa89a42ad4c11149acce9a60fa627 - arm-trusted-firmware.t234/plat/arm/board/fvp/fvp_err.c b65762bd82129d797940515888cfc6de830bb33f - arm-trusted-firmware.t234/plat/arm/board/fvp/fvp_topology.c bb86f05382c2d063a28dd70eb5c5b0786b9ccc32 - arm-trusted-firmware.t234/plat/arm/board/fvp/fvp_bl1_measured_boot.c 2394ce186fe1fd2d76b8a728058bf8c779d8495e - arm-trusted-firmware.t234/plat/arm/board/fvp/fvp_drtm_err.c fa75b4ccee6e6d8604b819da30a1ed892db70b15 - arm-trusted-firmware.t234/plat/arm/board/fvp/fvp_bl1_setup.c 31adcc52d1bea363033663d8e1d60e1df03634ee - arm-trusted-firmware.t234/plat/arm/board/fvp/fvp_bl2_measured_boot.c 87220bf30d58a155c2f10f38418d094db212e5b6 - arm-trusted-firmware.t234/plat/arm/board/fvp/fvp_private.h 325c5839cfe769d385c5a20e72339e525395a5a8 - arm-trusted-firmware.t234/plat/arm/board/fvp/fvp_common_measured_boot.c 1570105ddfc280d36e64641b556bc2da9a0529dc - arm-trusted-firmware.t234/plat/arm/board/fvp/fvp_security.c eeea1969158f809248eeb796fdc5e344e554da46 - arm-trusted-firmware.t234/plat/arm/board/fvp/fvp_plat_attest_token.c df0b10a5b65cf57a485f5eb846e0cfa7e64c429b - arm-trusted-firmware.t234/plat/arm/board/fvp/fvp_io_storage.c 71418933f8bb76fa971723d4cb9bc6748a009f33 - arm-trusted-firmware.t234/plat/arm/board/fvp/fvp_bl2_el3_setup.c fe8cc2e85b4f542f5e3598a28a47287a535b24fc - arm-trusted-firmware.t234/plat/arm/board/fvp/fvp_gicv3.c 7a6cbb60ac17407e2d79e35e3ff3d0b5b366e6c7 - arm-trusted-firmware.t234/plat/arm/board/fvp/fvp_common.c 1924351967826f1ad9898254b30419ba2e7fb9cc - arm-trusted-firmware.t234/plat/arm/board/fvp/fvp_bl2u_setup.c 83e404fdd5bc4dda0b68b92d365d6e9b047f13d3 - arm-trusted-firmware.t234/plat/arm/board/fvp/fconf/fconf_nt_config_getter.c bff16503222a684a26cee97879fc37988a41bc21 - arm-trusted-firmware.t234/plat/arm/board/fvp/fconf/fconf_hw_config_getter.c 5601a00daf6c8ba481f1addc03652d97efe84a3c - arm-trusted-firmware.t234/plat/arm/board/fvp/fdts/fvp_soc_fw_config.dts da7526b502763a9c480620f32c08e79674d7fd3d - arm-trusted-firmware.t234/plat/arm/board/fvp/fdts/fvp_tb_fw_config.dts 56e13f4a58600986e9375220ad5ff2f9c55cb305 - arm-trusted-firmware.t234/plat/arm/board/fvp/fdts/fvp_tsp_sp_manifest.dts 3d7eea8f5e5c69137dda93073be576a80e06f69e - arm-trusted-firmware.t234/plat/arm/board/fvp/fdts/fvp_spmc_manifest.dts 33a1a8c0c5e1f8f806d0dbe69adab509f55301be - arm-trusted-firmware.t234/plat/arm/board/fvp/fdts/fvp_nt_fw_config.dts ea917767ab3297dbc74f85d6ff5f13724e18ab13 - arm-trusted-firmware.t234/plat/arm/board/fvp/fdts/event_log.dtsi 6552b6b80dd4294a72b50893280cd319da4efaf4 - arm-trusted-firmware.t234/plat/arm/board/fvp/fdts/optee_sp_manifest.dts 70c565ab0800d48ba7fa03bf70d3746f68e7f9d7 - arm-trusted-firmware.t234/plat/arm/board/fvp/fdts/fvp_fw_config.dts d6bbf0496f344ed38af40adfa4e2db6b5dfe1599 - arm-trusted-firmware.t234/plat/arm/board/fvp/fdts/fvp_cot_desc.dtsi 8d52ce99d3bf6ff177d948115bb9c64ef3020005 - arm-trusted-firmware.t234/plat/arm/board/fvp/fdts/fvp_spmc_el1_optee_manifest.dts 5da0f5aa42383aeccff9c7a0515482c17e94c231 - arm-trusted-firmware.t234/plat/arm/board/fvp/fdts/fvp_cactus_sp_manifest.dts 26761d08528feec31bb15a854b65dd46629135fe - arm-trusted-firmware.t234/plat/arm/board/fvp/fdts/fvp_tsp_fw_config.dts b3f3f980dd248aedd952dd1f1ff99c1069a5fe45 - arm-trusted-firmware.t234/plat/arm/board/fvp/fdts/fvp_spmc_optee_sp_manifest.dts b59b8589b390aaea5c26a9621713fe3d78e47e8b - arm-trusted-firmware.t234/plat/arm/board/fvp/tsp/fvp_tsp_setup.c aed581dcf8acf86f277ecf028cc1eec4f0c081fc - arm-trusted-firmware.t234/plat/arm/board/fvp/include/plat_macros.S aaff5cd1241ce58ab9627da89fb4860390a0864b - arm-trusted-firmware.t234/plat/arm/board/fvp/include/fconf_nt_config_getter.h 32e2ce8864238d47ba94b2bf573bf381d44dceaf - arm-trusted-firmware.t234/plat/arm/board/fvp/include/plat.ld.S 78cc8febd5375e0b115cbab331fc46e6d3e9707c - arm-trusted-firmware.t234/plat/arm/board/fvp/include/fconf_hw_config_getter.h 71ef78ba177f4bdbb4f5d4b357ed4933c1131665 - arm-trusted-firmware.t234/plat/arm/board/fvp/include/fvp_pas_def.h c6b81accb44678a523485111e3a272cfda2337aa - arm-trusted-firmware.t234/plat/arm/board/fvp/include/fvp_critical_data.h 98dc98a2d888d537d09ea6468dedc1dd65b04816 - arm-trusted-firmware.t234/plat/arm/board/fvp/include/platform_def.h ff89429423ddd29d078bf2834e6cf5173a7d9ce2 - arm-trusted-firmware.t234/plat/arm/board/fvp/sp_min/fvp_sp_min_setup.c 850f319080c25c951b1808671bf323171caad343 - arm-trusted-firmware.t234/plat/arm/board/fvp/aarch64/fvp_lsp_ras_sp.c 5e28ec840c73ad9cecda010aeb303a375ef28cdd - arm-trusted-firmware.t234/plat/arm/board/fvp/aarch64/fvp_ras.c aa04a8001d20b378e4208a33c227dc7f55bbe9c8 - arm-trusted-firmware.t234/plat/arm/board/fvp/aarch64/fvp_ea.c 5890345828c7c352458654bb1d06a86a53540608 - arm-trusted-firmware.t234/plat/arm/board/fvp/aarch64/fvp_helpers.S 2c7ccf1e47b4fdac9dc7745e506f4194cce2e498 - arm-trusted-firmware.t234/plat/arm/board/fvp/aarch32/fvp_helpers.S 36df94db88792c53f69d0cce19aec34b0d428574 - arm-trusted-firmware.t234/plat/arm/board/common/board_arm_trusted_boot.c aa5febfe9cf8a923785e2509c54c7e03032167e7 - arm-trusted-firmware.t234/plat/arm/board/common/protpk/README cdb90754cb9118d6571aad9c3846b2c410f708d1 - arm-trusted-firmware.t234/plat/arm/board/common/protpk/arm_protpk_rsa_sha256.bin a819075a49fd85dede74b56ddededf2f4c046f07 - arm-trusted-firmware.t234/plat/arm/board/common/protpk/arm_protprivk_rsa.pem ce90ae54534188e8ed455e84da4ee7656807dc45 - arm-trusted-firmware.t234/plat/arm/board/common/protpk/arm_dev_protpk.S 885dbc360b97a82697b2978ae8f5665ba4878080 - arm-trusted-firmware.t234/plat/arm/board/common/aarch64/board_arm_helpers.S d7941a7e9ec8fa11c4dd7580b57e1543e335d61b - arm-trusted-firmware.t234/plat/arm/board/common/aarch32/board_arm_helpers.S f06e3bb0c501f8c6d86fc8db78e724dcf47cb291 - arm-trusted-firmware.t234/plat/arm/board/common/swd_rotpk/arm_swd_rotpk_rsa_sha256.bin 4907b4eaa1230000b1db585d555d4fd41be655b8 - arm-trusted-firmware.t234/plat/arm/board/common/swd_rotpk/README 80a8b20bcc3bcbf794bc78499c52841c807ec68e - arm-trusted-firmware.t234/plat/arm/board/common/swd_rotpk/arm_dev_swd_rotpk.S ee231e4311e32bd023dc5df9d23a580c2109fe2a - arm-trusted-firmware.t234/plat/arm/board/common/swd_rotpk/arm_swd_rotprivk_rsa.pem d6ffc0fc474dad94572c075f7a2dbb8082d08b65 - arm-trusted-firmware.t234/plat/arm/board/common/rotpk/arm_dev_rotpk.S f63762c7a16038a4bc3a046a89d815cf9ae9089b - arm-trusted-firmware.t234/plat/arm/board/common/rotpk/arm_rotprivk_rsa.pem 99b2edcf01ed68e8e25f2687d31ef61f0531f26f - arm-trusted-firmware.t234/plat/arm/board/common/rotpk/arm_rotpk_rsa.der 60db5d9f76508b35a789efa0edf63a8782f5a6be - arm-trusted-firmware.t234/plat/arm/board/common/rotpk/arm_rotprivk_ecdsa_secp384r1.pem b48500f3591ea941f29e3cb482855cd947d886c3 - arm-trusted-firmware.t234/plat/arm/board/common/rotpk/arm_rotpk_ecdsa_sha256.bin 64194de14ee2424df1ca72d388c407f3d0c16184 - arm-trusted-firmware.t234/plat/arm/board/common/rotpk/arm_rotprivk_ecdsa.pem 65b5c19f15afef0d96b3a49f44a453ebd52fbd2f - arm-trusted-firmware.t234/plat/arm/board/common/rotpk/arm_full_dev_ecdsa_p256_rotpk.S e11a9c704f8c2cf0d3b86ac54a4e2ae42b67ebe0 - arm-trusted-firmware.t234/plat/arm/board/common/rotpk/arm_full_dev_ecdsa_p384_rotpk.S 2b0cf90adf32af769b93e85764f195737286be65 - arm-trusted-firmware.t234/plat/arm/board/common/rotpk/arm_rotpk_rsa_sha256.bin b22a3e04b7c492d96f48978250bd02b1de04304b - arm-trusted-firmware.t234/plat/arm/board/common/rotpk/arm_rotpk_ecdsa.der 318840e9e39b735d0a03b6fa028f56503324c71e - arm-trusted-firmware.t234/plat/arm/board/common/rotpk/arm_full_dev_rsa_rotpk.S bdf16498e248d1d87d012aca5001940fb8328395 - arm-trusted-firmware.t234/plat/arm/board/arm_fpga/fpga_private.h 1426cbeb378272a8b4f7940a9268f0473ace0b8e - arm-trusted-firmware.t234/plat/arm/board/arm_fpga/fpga_bl31_setup.c 86553039cac69d2003776608e4a3172af5f6263d - arm-trusted-firmware.t234/plat/arm/board/arm_fpga/fpga_console.c 1cfbd3237d5138875eda5a3f57ebd08f452c4992 - arm-trusted-firmware.t234/plat/arm/board/arm_fpga/kernel_trampoline.S 78391ad4c170cb70d2db6ad5639108f4f6020dc6 - arm-trusted-firmware.t234/plat/arm/board/arm_fpga/rom_trampoline.S 0ca4a4d2749cd227831e57d361b8c16ee0f3cf03 - arm-trusted-firmware.t234/plat/arm/board/arm_fpga/fpga_gicv3.c e756912d9ee2335ca7c0a9a465a677b0b5e7ab88 - arm-trusted-firmware.t234/plat/arm/board/arm_fpga/build_axf.ld.S 01fdf4e1212ed95e12e1fd795084ecd4f814234b - arm-trusted-firmware.t234/plat/arm/board/arm_fpga/fpga_def.h 70fd1afdd7b31d55ddd95d7018ba66095315083e - arm-trusted-firmware.t234/plat/arm/board/arm_fpga/fpga_topology.c 15269f87cab6dfa65ce9cbaacbb13ee9cf2af583 - arm-trusted-firmware.t234/plat/arm/board/arm_fpga/fpga_pm.c 87820ef2083d1576c3d29546b46fb922eafa3737 - arm-trusted-firmware.t234/plat/arm/board/arm_fpga/include/plat_macros.S 6631f2221faec011381242d2e2011d9eda3e9780 - arm-trusted-firmware.t234/plat/arm/board/arm_fpga/include/platform_def.h 205b5febc22c83179a2fc6c9005499ef61e8f347 - arm-trusted-firmware.t234/plat/arm/board/arm_fpga/aarch64/fpga_helpers.S db240cab0da9aaf6298ede4c8418abd28744a258 - arm-trusted-firmware.t234/plat/arm/board/fvp_r/fvp_r_err.c deb3a6a31fba479e597c0ae722532692996e2372 - arm-trusted-firmware.t234/plat/arm/board/fvp_r/fvp_r_common.c 1f85fcf3a3d2c0bd5a8c5e848a4841400b54f9fe - arm-trusted-firmware.t234/plat/arm/board/fvp_r/fvp_r_private.h 2ce9cd0a5ef399a537316089ff1451da165bdd42 - arm-trusted-firmware.t234/plat/arm/board/fvp_r/fvp_r_bl1_entrypoint.S b5fe2445bbd4cfd3d360d2d930d9358c4eed5555 - arm-trusted-firmware.t234/plat/arm/board/fvp_r/fvp_r_trusted_boot.c 8d8dd00ae6bcd53c679985ba47d7d0badf2f3b13 - arm-trusted-firmware.t234/plat/arm/board/fvp_r/fvp_r_bl1_main.c efd5139ee502cdc5570d9ec338ee84b3410067fd - arm-trusted-firmware.t234/plat/arm/board/fvp_r/fvp_r_misc_helpers.S 0fa67a9e3baade23364e588643149159b41d951b - arm-trusted-firmware.t234/plat/arm/board/fvp_r/fvp_r_debug.S e985480b9d1aa1426a500f3c4869a1f32bb8b422 - arm-trusted-firmware.t234/plat/arm/board/fvp_r/fvp_r_io_storage.c 181e66fa9c41732917a323ee0fe465da3b5ce36d - arm-trusted-firmware.t234/plat/arm/board/fvp_r/fvp_r_stack_protector.c 61fa6bbfd2f41f1cc6fe1c4caacb1fa09461692c - arm-trusted-firmware.t234/plat/arm/board/fvp_r/fvp_r_helpers.S 5f78d5ae0c4547371279bfc19196f01fb454e3b6 - arm-trusted-firmware.t234/plat/arm/board/fvp_r/fvp_r_bl1_arch_setup.c cb1a2983e1ba147d7e3cce2b7b48cd124ba55bd7 - arm-trusted-firmware.t234/plat/arm/board/fvp_r/fvp_r_bl1_setup.c b1777d180724d85711393cf136ad5b34e80ce86a - arm-trusted-firmware.t234/plat/arm/board/fvp_r/fvp_r_def.h b20640f66687a9edf5c361b2cf32bf1244777ecd - arm-trusted-firmware.t234/plat/arm/board/fvp_r/fvp_r_context_mgmt.c 860f2b3b1633322a3865add4e226f457c1a7237d - arm-trusted-firmware.t234/plat/arm/board/fvp_r/fvp_r_bl1_exceptions.S 49311916a4aa02599dfdeaadee01b7c05290e2ad - arm-trusted-firmware.t234/plat/arm/board/fvp_r/include/platform_def.h e9c7e8c62f6a1ac8f4b8f79ebb080765f9244fbe - arm-trusted-firmware.t234/plat/arm/board/fvp_r/include/fvp_r_arch_helpers.h 25ba9f0211c95d3e0145319f7018f2e2f8d6986c - arm-trusted-firmware.t234/plat/arm/board/automotive_rd/platform/rd1ae/rd1ae_err.c 0a80985b93c74b085be72cc7509dd6a58ac862e7 - arm-trusted-firmware.t234/plat/arm/board/automotive_rd/platform/rd1ae/rd1ae_plat.c 4c9ed8d9ae8838c524e2cca5da1525008143aefc - arm-trusted-firmware.t234/plat/arm/board/automotive_rd/platform/rd1ae/rd1ae_bl2_mem_params_desc.c 512907ac88f5504ffcd2a9ea58bc0da3cae848c3 - arm-trusted-firmware.t234/plat/arm/board/automotive_rd/platform/rd1ae/rd1ae_bl31_setup.c cfa062aed72d140114c7250239d92462e5971fb2 - arm-trusted-firmware.t234/plat/arm/board/automotive_rd/platform/rd1ae/rd1ae_topology.c 1a22099751ddad98166385238ee8a7b3717b5ba2 - arm-trusted-firmware.t234/plat/arm/board/automotive_rd/platform/rd1ae/rd1ae_tbb.c e43960840363598452f217ae5ee0dfb00ee613fa - arm-trusted-firmware.t234/plat/arm/board/automotive_rd/platform/rd1ae/fdts/rd1ae_fw_config.dts 6e7076be6786a474a19e32b1d3925254ece636d7 - arm-trusted-firmware.t234/plat/arm/board/automotive_rd/platform/rd1ae/include/plat_macros.S 3de330361b52d892fb57f977af63f5f6c52e527d - arm-trusted-firmware.t234/plat/arm/board/automotive_rd/platform/rd1ae/include/rd1ae_helpers.S 5a7431e547b27575f2c9ca5a43bd106fd4705ed6 - arm-trusted-firmware.t234/plat/arm/board/automotive_rd/platform/rd1ae/include/platform_def.h af1f8d5af2ee91ba0dd180c42a7b8f73b7543474 - arm-trusted-firmware.t234/plat/arm/board/fvp_ve/fvp_ve_security.c 4a175994a02eeb79a8ccc76f0b3be5ac2d45771d - arm-trusted-firmware.t234/plat/arm/board/fvp_ve/fvp_ve_private.h a99732014092e8e5c9b31b1349968f2641b0e5d7 - arm-trusted-firmware.t234/plat/arm/board/fvp_ve/fvp_ve_bl2_setup.c b370460e14d8e464d9f852b0e3f18cf2dca4950b - arm-trusted-firmware.t234/plat/arm/board/fvp_ve/fvp_ve_pm.c 87d9fc22d1228a7faf0c17443f9d5afd194e4334 - arm-trusted-firmware.t234/plat/arm/board/fvp_ve/fvp_ve_err.c 6733f3383940d86208b8239c1d08d9221c2c2929 - arm-trusted-firmware.t234/plat/arm/board/fvp_ve/fvp_ve_common.c a924444b8053fdd6d907961d26d25ef0d3a207f7 - arm-trusted-firmware.t234/plat/arm/board/fvp_ve/fvp_ve_topology.c 32afe5c24a182a32be9485b319f3a3f97cf38387 - arm-trusted-firmware.t234/plat/arm/board/fvp_ve/fvp_ve_def.h b0261bd454617bc33a79aa98dcfa987149992300 - arm-trusted-firmware.t234/plat/arm/board/fvp_ve/fvp_ve_bl1_setup.c 996afef966d673534a7502180616ba362cdb0d9c - arm-trusted-firmware.t234/plat/arm/board/fvp_ve/fdts/fvp_ve_tb_fw_config.dts bf8e9350ca2a3873bc45ff3c2c1be85d795d0998 - arm-trusted-firmware.t234/plat/arm/board/fvp_ve/fdts/fvp_ve_fw_config.dts 4a689338afdb70548a3c2d1adce2b5c8c1083e5d - arm-trusted-firmware.t234/plat/arm/board/fvp_ve/include/platform_def.h d56cac77b62eee0ed50166d2264e0a00c8fe4ffa - arm-trusted-firmware.t234/plat/arm/board/fvp_ve/sp_min/fvp_ve_sp_min_setup.c 2ff5ebca71b32318bae21e3dbb7699236b9cbe61 - arm-trusted-firmware.t234/plat/arm/board/fvp_ve/aarch32/fvp_ve_helpers.S 1f68f4b41cf660f6aecbd9c91cffd25b5da791a9 - arm-trusted-firmware.t234/plat/arm/board/tc/tc_err.c ded1714043a17b1985c18754683ddcc8a2954d2a - arm-trusted-firmware.t234/plat/arm/board/tc/tc_bl2_setup.c 3e15f3b21c06622d38b81a2bdcf7f70618bf25cb - arm-trusted-firmware.t234/plat/arm/board/tc/rse_ap_tests.c 4a9977f4650713d7e5e1dd060919eef4e2b41575 - arm-trusted-firmware.t234/plat/arm/board/tc/nv_counter_test.c e359fea3cdefe52d1384eaf4e3657d1a8639ce5c - arm-trusted-firmware.t234/plat/arm/board/tc/tc_trusted_boot.c c672d7df274eb04d8ec2173d13faf7eae4d43b6f - arm-trusted-firmware.t234/plat/arm/board/tc/rse_ap_testsuites.c f82dd0efa2a9f783222b586215fb58731e3b399b - arm-trusted-firmware.t234/plat/arm/board/tc/tc_common_dpe.c c2687f232f3b2585a4f948e4eb4e3ec0c8f2c1e3 - arm-trusted-firmware.t234/plat/arm/board/tc/rse_ap_test_stubs.c 4335b9a6f68fb49824b223397621a29f3d1030c9 - arm-trusted-firmware.t234/plat/arm/board/tc/tc_interconnect.c 42b101951225b0d35c6b2214f9a3a68c73c520f6 - arm-trusted-firmware.t234/plat/arm/board/tc/tc_common_measured_boot.c 474af3b999f8d013e14e61f5b2f9fbff9dd683bd - arm-trusted-firmware.t234/plat/arm/board/tc/plat_def_fip_uuid.h 847258be73f3664fe204f1de5b67eed63d51c266 - arm-trusted-firmware.t234/plat/arm/board/tc/rse_ap_testsuites.h 6aa8db5533540584c49fc4d1520e379481435b9e - arm-trusted-firmware.t234/plat/arm/board/tc/tc_plat.c 922b31c094a63d7ca2eb2b9a02eeac641a6bb353 - arm-trusted-firmware.t234/plat/arm/board/tc/tc_bl2_measured_boot.c 791e2890fddbdd08be418de13277351b090d9377 - arm-trusted-firmware.t234/plat/arm/board/tc/tc_trng.c 6cfb066f671e1aa12c64d32c474eeaa09d014b5a - arm-trusted-firmware.t234/plat/arm/board/tc/rotpk_test.c 40403268ab8263e3afd3d7262a38f7daf74fe476 - arm-trusted-firmware.t234/plat/arm/board/tc/tc_topology.c 08123869f38a7ae6d962ae0be1315d489519519b - arm-trusted-firmware.t234/plat/arm/board/tc/tc_security.c 3bac93c17f40c2084de7ec740cfac37d6c8636ab - arm-trusted-firmware.t234/plat/arm/board/tc/tc_bl1_dpe.c ee81ce7dd7cc96ad4ec5a53255675eea10318f4a - arm-trusted-firmware.t234/plat/arm/board/tc/tc_dpe.h c403ac36c965c740da1992396813a1f7c7b0d2a3 - arm-trusted-firmware.t234/plat/arm/board/tc/tc_bl1_measured_boot.c 9b7b44f85961656b1e758adb256d295a39c4caba - arm-trusted-firmware.t234/plat/arm/board/tc/tc_bl2_dpe.c 59115ded15758bd0601908b8d41951924d44825f - arm-trusted-firmware.t234/plat/arm/board/tc/region_defs.h 361cdd965c5abf16b124f6202f2360a838f62dba - arm-trusted-firmware.t234/plat/arm/board/tc/tc_bl31_setup.c e421e1e34ece54402f7c926ce59a67a47e5ca43d - arm-trusted-firmware.t234/plat/arm/board/tc/tc_bl1_setup.c e0927a291e8e36a0d86d78b96ad439f8145accf1 - arm-trusted-firmware.t234/plat/arm/board/tc/plat_tc_mbedtls_config.h ded9aa57ae68004e49074e6a736b7346108bd64f - arm-trusted-firmware.t234/plat/arm/board/tc/fdts/tc_spmc_trusty_sp_manifest.dts 90a2931998e1a80a48e64eb245f091e31e668ac4 - arm-trusted-firmware.t234/plat/arm/board/tc/fdts/tc_tb_fw_config.dts f03091632b759364de438c9465e83b93dc39f13a - arm-trusted-firmware.t234/plat/arm/board/tc/fdts/tc_spmc_common_sp_manifest.dtsi 44863c9821a5a73ea2d85cca8409b8a48fcfee76 - arm-trusted-firmware.t234/plat/arm/board/tc/fdts/tc_spmc_test_manifest.dts a005d03d14c3bfc030c6416a506c86e3c32d6a24 - arm-trusted-firmware.t234/plat/arm/board/tc/fdts/tc_spmc_optee_sp_manifest.dts a93c661cc951b97f8a6b5f9db7839331a5e07666 - arm-trusted-firmware.t234/plat/arm/board/tc/fdts/tc_nt_fw_config.dts 23e53e0acfd7d2f0301eeb7a3c9e13c3ac0b3c85 - arm-trusted-firmware.t234/plat/arm/board/tc/fdts/tc_spmc_manifest.dtsi fa2a2d1fa31b5747a53ac23bf2035d1d99b07985 - arm-trusted-firmware.t234/plat/arm/board/tc/fdts/dice_prot_env.dtsi 6acdee69fca2297a3c87c676731e567134c1772d - arm-trusted-firmware.t234/plat/arm/board/tc/fdts/tc_fw_config.dts 12e15891d91866e073604872dd843da7a55ab1ca - arm-trusted-firmware.t234/plat/arm/board/tc/include/plat_macros.S 628d4fd5778e585b5b621c3601d2246430aabb57 - arm-trusted-firmware.t234/plat/arm/board/tc/include/tc_plat.h 3bb5dd582d58a4fc65236b8dbd8605cd750b0538 - arm-trusted-firmware.t234/plat/arm/board/tc/include/tc_helpers.S 442586adbc51aefc5a407174827ee740f0737853 - arm-trusted-firmware.t234/plat/arm/board/tc/include/platform_def.h 79f104e1964a23fa6fbb4f5b022d1c9976292530 - arm-trusted-firmware.t234/plat/arm/board/a5ds/a5ds_bl2_setup.c 007839db0f0e5c02b3362ce770b02771a47faa27 - arm-trusted-firmware.t234/plat/arm/board/a5ds/a5ds_topology.c f2a71185ac9189cbe4310e27a7ead8d40c23c377 - arm-trusted-firmware.t234/plat/arm/board/a5ds/a5ds_pm.c fabc6650d0d7860d4d615e5e997c72bed71aecb3 - arm-trusted-firmware.t234/plat/arm/board/a5ds/a5ds_bl1_setup.c c6fdde231ff1fe0ddb8f585bd3fead2a7f2f0f46 - arm-trusted-firmware.t234/plat/arm/board/a5ds/a5ds_security.c c8bea252a67bd4f3ad0910e3dadd0b76dc62c7f3 - arm-trusted-firmware.t234/plat/arm/board/a5ds/a5ds_private.h be0cd4f5f48b5eb3a64885536643645036173809 - arm-trusted-firmware.t234/plat/arm/board/a5ds/a5ds_common.c 7d714f8f2b3f7274c9d2e73eaa5d46215c7d3911 - arm-trusted-firmware.t234/plat/arm/board/a5ds/a5ds_err.c 996afef966d673534a7502180616ba362cdb0d9c - arm-trusted-firmware.t234/plat/arm/board/a5ds/fdts/a5ds_tb_fw_config.dts 45dcd41437294ea1036e66f7c4fa1c8561783de5 - arm-trusted-firmware.t234/plat/arm/board/a5ds/fdts/a5ds_fw_config.dts 48a904976f005ca8b1b9f0bf6a649dc088c22376 - arm-trusted-firmware.t234/plat/arm/board/a5ds/include/platform_def.h a8eb0724c2056ed80453ea31aa3ebc822e93ffa2 - arm-trusted-firmware.t234/plat/arm/board/a5ds/sp_min/a5ds_sp_min_setup.c 142d4bce7860550461e2498ba8c9f4ebb17d902d - arm-trusted-firmware.t234/plat/arm/board/a5ds/aarch32/a5ds_helpers.S 6d9bb8b050de6be018d5c09d8f2664c225d4bc84 - arm-trusted-firmware.t234/plat/arm/css/common/css_pm.c 75cc05419580aa9e613157ed0cacf5e0447c7d7b - arm-trusted-firmware.t234/plat/arm/css/common/css_bl2u_setup.c 3bc7caa521ce87bd672c20940f330d81613afdc1 - arm-trusted-firmware.t234/plat/arm/css/common/css_topology.c 1be9df9e373623ca11c2f078fb14545de995067b - arm-trusted-firmware.t234/plat/arm/css/common/css_bl2_setup.c f00b456e46701cc6a1e2b31fdd93091805ab0809 - arm-trusted-firmware.t234/plat/arm/css/common/css_bl1_setup.c 3ddcf64aa2f7a53edf4016ea4d4c636a371f4516 - arm-trusted-firmware.t234/plat/arm/css/common/aarch64/css_helpers.S 29476751ce928c5170b93c840f4fd925619fb9f9 - arm-trusted-firmware.t234/plat/arm/css/common/aarch32/css_helpers.S 08fffa1ca580eaca04a26cfc974edd901c2997b1 - arm-trusted-firmware.t234/plat/arm/soc/common/soc_css_security.c 26e28746dfd5ec513f63276a4d4a09739a15175a - arm-trusted-firmware.t234/plat/imx/imx8qx/imx8qx_bl31_setup.c b8a368d04709d67fe8a1298d78d6ee45a77d2eb1 - arm-trusted-firmware.t234/plat/imx/imx8qx/imx8qx_psci.c 439067e99cffee5d166721c43ffdb1b4f24b3302 - arm-trusted-firmware.t234/plat/imx/imx8qx/include/platform_def.h 06458d5a3b748df586e9ba2064614354842c162f - arm-trusted-firmware.t234/plat/imx/imx8qx/include/sec_rsrc.h b292b6626a835c341132f9619554b90157265113 - arm-trusted-firmware.t234/plat/imx/imx8qm/imx8qm_psci.c 4260edde76157c80fedaa1182012ff5b29241b92 - arm-trusted-firmware.t234/plat/imx/imx8qm/imx8qm_bl31_setup.c 1fdf9dd0a1e00cee360596ce35842f77598cbf1e - arm-trusted-firmware.t234/plat/imx/imx8qm/include/platform_def.h 6beb54a392291f2d54d207842b2620c7c344af8e - arm-trusted-firmware.t234/plat/imx/imx8qm/include/sec_rsrc.h e62b1b231464e7b85ff4aa5c3dd931106fe58146 - arm-trusted-firmware.t234/plat/imx/imx93/imx93_bl31_setup.c 3eb8afb9e770d1ab732c2856fdae97cd9223356e - arm-trusted-firmware.t234/plat/imx/imx93/trdc_config.h 22250c0cc8e0904ae9bd4b5543ca7569175e98a8 - arm-trusted-firmware.t234/plat/imx/imx93/plat_topology.c 09152739b158db04beab91522094b2a1369072eb - arm-trusted-firmware.t234/plat/imx/imx93/trdc.c 3494cad477e97160dd1bc478c8324f472b036f4c - arm-trusted-firmware.t234/plat/imx/imx93/pwr_ctrl.c 36880b370e4f08940c35307d0a052deb39f5ff77 - arm-trusted-firmware.t234/plat/imx/imx93/imx93_psci.c 265b7e1e83ad2bf6d727ad8293915e86c6bdbc77 - arm-trusted-firmware.t234/plat/imx/imx93/include/pwr_ctrl.h f8c81b541c5134a08b682c94d98173dd24bc39e4 - arm-trusted-firmware.t234/plat/imx/imx93/include/platform_def.h 48b66d7a63aa548b349aae6972d2934b40478d87 - arm-trusted-firmware.t234/plat/imx/imx93/aarch64/plat_helpers.S 1b219401b9b5eb5bd8c83fa92fc68c591d48a3da - arm-trusted-firmware.t234/plat/imx/common/imx_io_mux.c 1901b0c4a5e19926a9e1b5ae437ebbeb0dc0d181 - arm-trusted-firmware.t234/plat/imx/common/imx7_clock.c 95e713c93fecd4eac2264fc43eda645102c79e3d - arm-trusted-firmware.t234/plat/imx/common/imx_sip_svc.c c014188b6f4a48f9dc6d6fed678081f02f8d8e86 - arm-trusted-firmware.t234/plat/imx/common/plat_imx8_gic.c 20451ea874c502779179401751c4ec77f7a4a8dd - arm-trusted-firmware.t234/plat/imx/common/imx8_helpers.S 561b0822ac98206dceac588b536d745fc70829d9 - arm-trusted-firmware.t234/plat/imx/common/imx_ehf.c 5225b741c941cba9f489d347aae2707d99896d7d - arm-trusted-firmware.t234/plat/imx/common/imx_csu.c 2d79c0ce921843372c717f304c785a95565680ec - arm-trusted-firmware.t234/plat/imx/common/imx_sip_handler.c b26cdffd75a0ba04b4a312520443d0c77b388242 - arm-trusted-firmware.t234/plat/imx/common/imx8_topology.c e03b60801f58711597b0bb457ecf6e3e84c9f44e - arm-trusted-firmware.t234/plat/imx/common/imx8_psci.c ac923dd7af0d3485eceae86115ea73150575ac4f - arm-trusted-firmware.t234/plat/imx/common/imx_wdog.c fab7df73374331de5b74c4d2573449d998e0fd2d - arm-trusted-firmware.t234/plat/imx/common/lpuart_console.S ad339798ed1c81b2dfda72cc1cefaae7acb622d9 - arm-trusted-firmware.t234/plat/imx/common/imx_io_storage.c 03ff82e03dc9eb60e02c6e23f0c199fdd1753c9c - arm-trusted-firmware.t234/plat/imx/common/imx_aips.c e49a318f8631554d6c1d27de7ea47b8b5f9022a2 - arm-trusted-firmware.t234/plat/imx/common/imx_bl31_common.c e7ef15bdf83a7d4e3ca78dd0d0e9daf56414e55e - arm-trusted-firmware.t234/plat/imx/common/imx_caam.c 6ac985911e7e26d13c75d48a04457fbcb209b62f - arm-trusted-firmware.t234/plat/imx/common/imx_sdei.c f30799014ffd50a32b0d021473b50cf5c4a28634 - arm-trusted-firmware.t234/plat/imx/common/imx_clock.c c485fa1c8fb5290a318a18c2a2c9b7195f42992f - arm-trusted-firmware.t234/plat/imx/common/imx_common.c a27c7aec4da48958be7d34b37e751d070dc92b84 - arm-trusted-firmware.t234/plat/imx/common/imx_uart_console.S da4b81f475ec53f2578ba031cd1f30f759bc5dde - arm-trusted-firmware.t234/plat/imx/common/imx_snvs.c 8ae002187ace1e1358c7af1e06ef7957179939f5 - arm-trusted-firmware.t234/plat/imx/common/include/plat_macros.S 0b633d6b19c3fd7cb43c433d74b84ede423bab4f - arm-trusted-firmware.t234/plat/imx/common/include/imx_hab.h 492a603fb7aa764d055951b06223eaa893b0cfb3 - arm-trusted-firmware.t234/plat/imx/common/include/imx_plat_common.h 8830c18819f942388c5badcb2c19eaea2ae058dd - arm-trusted-firmware.t234/plat/imx/common/include/imx_caam.h 36d5f07566aad340b6ec06b01cfbe631023ca7f5 - arm-trusted-firmware.t234/plat/imx/common/include/imx_wdog.h bddfe7c6dc079e9f45c4a41601888d27f5d29c48 - arm-trusted-firmware.t234/plat/imx/common/include/imx_csu.h 6f89a14dc12ddacabad367a7e69d8bf469274ec4 - arm-trusted-firmware.t234/plat/imx/common/include/imx_uart.h a3a14f38cbc846da3bc2498cf8e07b62479aa62a - arm-trusted-firmware.t234/plat/imx/common/include/imx_snvs.h 24f8d34fd7865c2235d12e87791c7ae77d55d281 - arm-trusted-firmware.t234/plat/imx/common/include/imx_io_mux.h 2e84528c7d6b12beb2c64505a14d73bcfb03ef87 - arm-trusted-firmware.t234/plat/imx/common/include/imx_aips.h b9d688fac07189d434ac636324a632e9bf78825c - arm-trusted-firmware.t234/plat/imx/common/include/imx_clock.h a5fcaffa0e69f234b0620f32d3556bf79ace50f1 - arm-trusted-firmware.t234/plat/imx/common/include/imx8_iomux.h 55492f14ac0642f07fd2abd04fc77e5e7b654ce4 - arm-trusted-firmware.t234/plat/imx/common/include/imx_sip_svc.h 28b31b74552131c2ba5875fb7db44b22ca16b722 - arm-trusted-firmware.t234/plat/imx/common/include/imx8qx_pads.h 816bfc02478ff083b5f3557753a4d0d4f2f32c9e - arm-trusted-firmware.t234/plat/imx/common/include/imx8_lpuart.h 1d847530cd83143e4a50b94c5499ee8c11f9d3e1 - arm-trusted-firmware.t234/plat/imx/common/include/imx8qm_pads.h e1463841ff8d7abeb6f4c17312f37a2ffc275e94 - arm-trusted-firmware.t234/plat/imx/common/include/plat_common.h f5724b26de0d68b4b37e1d580c6e30842eacd6c0 - arm-trusted-firmware.t234/plat/imx/common/include/plat_imx8.h daeb14deb7c4f498330bb44186346cd1ac4eef92 - arm-trusted-firmware.t234/plat/imx/common/include/sci/sci_types.h 8a65436d5e0b335e9003a30f2da5f7892d23dc05 - arm-trusted-firmware.t234/plat/imx/common/include/sci/sci_scfw.h 19674e70669fa3f7fb7e509377e445f7fd4c7be4 - arm-trusted-firmware.t234/plat/imx/common/include/sci/sci.h cc9366b07e946d7946bdfeae628f8a6c7ac3bed3 - arm-trusted-firmware.t234/plat/imx/common/include/sci/sci_ipc.h 8bd35c7c47524960ce1f13734d78398d397d4960 - arm-trusted-firmware.t234/plat/imx/common/include/sci/sci_rpc.h ed161c9a5037eb029c085ce4a21dfb20428da668 - arm-trusted-firmware.t234/plat/imx/common/include/sci/svc/pm/sci_pm_api.h 70210ef96ff1f0ccd4e790bb79a148f1bf02efcc - arm-trusted-firmware.t234/plat/imx/common/include/sci/svc/rm/sci_rm_api.h 2507eeb7a0cd662322ea96553146f0f0dc8c6e45 - arm-trusted-firmware.t234/plat/imx/common/include/sci/svc/timer/sci_timer_api.h bcebceb005cf98eec862b3e3db457db6abd4baa9 - arm-trusted-firmware.t234/plat/imx/common/include/sci/svc/pad/sci_pad_api.h cf9e73e1a62f99ecb17abeeda5efbdad0f7b1c21 - arm-trusted-firmware.t234/plat/imx/common/include/sci/svc/misc/sci_misc_api.h 8c98c79db7801610b0bf01e1ea680ec8347be4f2 - arm-trusted-firmware.t234/plat/imx/common/sci/ipc.c f2ab11050d68bdc711e7c18f9437fba728ab77bb - arm-trusted-firmware.t234/plat/imx/common/sci/imx8_mu.h 985fca791927ad8088399ab8840bcbcfb8277a6e - arm-trusted-firmware.t234/plat/imx/common/sci/imx8_mu.c 39a01649e39d57948e7056d22a38804f99222129 - arm-trusted-firmware.t234/plat/imx/common/sci/svc/pm/pm_rpc_clnt.c 99d10095088dddbbe81826dbf7827bdc9c6bffb8 - arm-trusted-firmware.t234/plat/imx/common/sci/svc/pm/sci_pm_rpc.h 4abd423f25894865e31a857db62939c27fccb014 - arm-trusted-firmware.t234/plat/imx/common/sci/svc/rm/rm_rpc_clnt.c 9162637c3ad8ef97f19a264c504c58d5886f9d7c - arm-trusted-firmware.t234/plat/imx/common/sci/svc/rm/sci_rm_rpc.h 3f381087336a847b53323f6828aa61478b46a2cc - arm-trusted-firmware.t234/plat/imx/common/sci/svc/timer/sci_timer_rpc.h 30cf1dfdd48ef57921bbd93789aaedbebd754c55 - arm-trusted-firmware.t234/plat/imx/common/sci/svc/timer/timer_rpc_clnt.c 53b961e268ec00956cf3635d8561601e5c5bf70b - arm-trusted-firmware.t234/plat/imx/common/sci/svc/pad/sci_pad_rpc.h a593348ba8dcf5a3577bb48cd9d9ab7fe88c6df7 - arm-trusted-firmware.t234/plat/imx/common/sci/svc/pad/pad_rpc_clnt.c 65f1e12aab1c7815ccb98973525d32d30e635a1d - arm-trusted-firmware.t234/plat/imx/common/sci/svc/misc/misc_rpc_clnt.c 1dc0e610322825b6f58ac08670b99a4598bc01f1 - arm-trusted-firmware.t234/plat/imx/common/sci/svc/misc/sci_misc_rpc.h b8c9420f8ba3e11022dea4bb5ce4c530711ec1bb - arm-trusted-firmware.t234/plat/imx/common/aarch32/imx_uart_console.S ca916a8168ea1d5e57e417fcc1d71635d7deee3f - arm-trusted-firmware.t234/plat/imx/imx8ulp/dram.c a60f22f6fe195ed7cc36ad95512aaf89fdee0504 - arm-trusted-firmware.t234/plat/imx/imx8ulp/imx8ulp_caam.c 444484e27766132079c20c0a82975a51a6fcdbb1 - arm-trusted-firmware.t234/plat/imx/imx8ulp/imx8ulp_psci.c b04f9003f182105ba81b8515daf820137b663f2b - arm-trusted-firmware.t234/plat/imx/imx8ulp/apd_context.c 8923f37b1d1b0d270e714bdf773ed3c3efae1016 - arm-trusted-firmware.t234/plat/imx/imx8ulp/imx8ulp_bl31_setup.c 0f73afe510eafefb2a0112a1cbdd182c14278241 - arm-trusted-firmware.t234/plat/imx/imx8ulp/xrdc/xrdc_config.h b5f967aa1278dec3458f28828ef7d7fb6db00820 - arm-trusted-firmware.t234/plat/imx/imx8ulp/xrdc/xrdc_core.c 9116f53bded4ce4154ee4dba8c61b3744ce47e3f - arm-trusted-firmware.t234/plat/imx/imx8ulp/include/scmi_sensor.h eb8ccfa1f14470f2942fa955afc0c5de30c78362 - arm-trusted-firmware.t234/plat/imx/imx8ulp/include/imx8ulp_caam.h d4daab05d329079bd2e068028cef598c86bf62c4 - arm-trusted-firmware.t234/plat/imx/imx8ulp/include/dram.h 561f5f07a58fbd1e17cbf7151b62c93549ff4e03 - arm-trusted-firmware.t234/plat/imx/imx8ulp/include/xrdc.h c31e52b1ae817b100807c607ac603468a7a5d49f - arm-trusted-firmware.t234/plat/imx/imx8ulp/include/scmi.h ee352183edb020aeb94b5ac92a4089e3c71ca702 - arm-trusted-firmware.t234/plat/imx/imx8ulp/include/platform_def.h a560ed3c2759381e3460b1cb71526d4caa99642a - arm-trusted-firmware.t234/plat/imx/imx8ulp/upower/upower_defs.h 999887bef51661fcede97971b72f1fd96ed2e5d2 - arm-trusted-firmware.t234/plat/imx/imx8ulp/upower/upower_api.h 2739711d6e245c5c61cfab44a704d59594782859 - arm-trusted-firmware.t234/plat/imx/imx8ulp/upower/upmu.h fe2feec5a6ff91964830672dc5cf2cdacb58dca4 - arm-trusted-firmware.t234/plat/imx/imx8ulp/upower/upower_hal.c 7993d36e73726728d66a91ad4d2b81107a7dfdfa - arm-trusted-firmware.t234/plat/imx/imx8ulp/upower/upower_api.c 5a4adfdb81df94b2fa4dfc2392c7596917501ef6 - arm-trusted-firmware.t234/plat/imx/imx8ulp/upower/upower_soc_defs.h a9c191cf73abc0a4a27f83b6033859068143de4a - arm-trusted-firmware.t234/plat/imx/imx8ulp/scmi/scmi_sensor.c a5827d9e8723d930e42d4ddee2c1e5b5d03159f0 - arm-trusted-firmware.t234/plat/imx/imx8ulp/scmi/scmi_pd.c 29905d65c1b8adc1d3caa427d2ec1312abdb1a80 - arm-trusted-firmware.t234/plat/imx/imx8ulp/scmi/scmi.c 1e1f92bc6f801c91fde3bbe4ce99b62beb0eb7d2 - arm-trusted-firmware.t234/plat/imx/imx7/warp7/warp7_bl2_el3_setup.c 42143dbacac34a118b7b86673774e843e7e84fd8 - arm-trusted-firmware.t234/plat/imx/imx7/warp7/include/platform_def.h 1e876f487cd25f4a6cd08d0a21926f5405676a07 - arm-trusted-firmware.t234/plat/imx/imx7/picopi/picopi_bl2_el3_setup.c 1b13f9e313e75353b45d6528629485488b180345 - arm-trusted-firmware.t234/plat/imx/imx7/picopi/include/platform_def.h bffe5bd7851f8d028c92d9d68dba7806be5bd662 - arm-trusted-firmware.t234/plat/imx/imx7/common/imx7_image_load.c 7b5d73ec9d9c7e14fd48653c6e018d432654101d - arm-trusted-firmware.t234/plat/imx/imx7/common/imx7_bl2_mem_params_desc.c 3bba3282b340c9896990c2ffcbf10d5bfb0070b2 - arm-trusted-firmware.t234/plat/imx/imx7/common/imx7_rotpk.S 8403135be33e11a4b696e90b5b253465b6838682 - arm-trusted-firmware.t234/plat/imx/imx7/common/imx7_helpers.S 4d406209e8b278e9730968baee57f5106d424aef - arm-trusted-firmware.t234/plat/imx/imx7/common/imx7_trusted_boot.c 81ea2015e04bbc53b7d42589a21821a183fc1c8a - arm-trusted-firmware.t234/plat/imx/imx7/common/imx7_bl2_el3_common.c 10003f2e608d5073c076ab1a446f4ba07c06086d - arm-trusted-firmware.t234/plat/imx/imx7/include/imx7_def.h d4e968db5e699bc36032dfe35d7fada27142c699 - arm-trusted-firmware.t234/plat/imx/imx7/include/imx_hab_arch.h 1027e5173d316fd6d9dd6588b9666b53ed9d1116 - arm-trusted-firmware.t234/plat/imx/imx7/include/imx_regs.h d08ec11462c38ed056bd8ce300169c64d976b21d - arm-trusted-firmware.t234/plat/imx/imx8m/imx8m_csu.c 10fb6753c1ece21522f45f372d0cbf3b416b5190 - arm-trusted-firmware.t234/plat/imx/imx8m/imx_aipstz.c 996e00079997c54373e5acb4a6f39bfe8cbe346e - arm-trusted-firmware.t234/plat/imx/imx8m/imx8m_image_load.c 16aabd0793371f0695c3e323ca48c440a8340332 - arm-trusted-firmware.t234/plat/imx/imx8m/imx8m_psci_common.c 9b5e8b8d9515c374e55191eefd3318dd29b4ec02 - arm-trusted-firmware.t234/plat/imx/imx8m/imx_rdc.c f93139cada46230f87d4733c0e9d4d0be94f7be3 - arm-trusted-firmware.t234/plat/imx/imx8m/imx8m_measured_boot.c 1ccbc8b82968361279d02b4c1cf10c91215a3e19 - arm-trusted-firmware.t234/plat/imx/imx8m/imx8m_caam.c e345520494aee2764cb14af7ae66ab0293c32ea8 - arm-trusted-firmware.t234/plat/imx/imx8m/imx8m_dyn_cfg_helpers.c 71e15d70fa572d5ea30c2eaebe0aaecc691cb8fb - arm-trusted-firmware.t234/plat/imx/imx8m/imx8m_ccm.c 1bba3cc395cdcde6e82914792b00d3ffcb135bfd - arm-trusted-firmware.t234/plat/imx/imx8m/imx8m_snvs.c 27b7f5cd3416b96295c70624ef4970c56913b2dd - arm-trusted-firmware.t234/plat/imx/imx8m/imx_hab.c 8acc5dd8916f199434c21426fb546d92c32c5a19 - arm-trusted-firmware.t234/plat/imx/imx8m/gpc_common.c 9f3b4c37071328e939a48c501a6977bd74995abe - arm-trusted-firmware.t234/plat/imx/imx8m/imx8mq/imx8mq_bl31_setup.c b7ab95b22954f11c0ec38dcc8f02d5aa85aeaf55 - arm-trusted-firmware.t234/plat/imx/imx8m/imx8mq/imx8mq_psci.c 9839cb099ef500e386990967fe32866822c800e9 - arm-trusted-firmware.t234/plat/imx/imx8m/imx8mq/gpc.c d1fa70b45e2971a3e4103d0b2ff864ec706c5af5 - arm-trusted-firmware.t234/plat/imx/imx8m/imx8mq/include/gpc_reg.h 6b72ec3d8edc7fc323fd768161812a0b5e5b7105 - arm-trusted-firmware.t234/plat/imx/imx8m/imx8mq/include/imx_sec_def.h 76f9c34a4be17c36af4ca84f17a5576380b3edeb - arm-trusted-firmware.t234/plat/imx/imx8m/imx8mq/include/platform_def.h d54819484772902a3430637b5e9e0297b0957c9d - arm-trusted-firmware.t234/plat/imx/imx8m/ddr/clock.c c6c5b39f93cfc6dfd7c72ad357aa46c34268aa1c - arm-trusted-firmware.t234/plat/imx/imx8m/ddr/dram_retention.c f70125368c5e05f845f6c8afdd8d3f35c0bd4f58 - arm-trusted-firmware.t234/plat/imx/imx8m/ddr/ddr4_dvfs.c 913601228fc4f9634055ee5a2937ea281da347c3 - arm-trusted-firmware.t234/plat/imx/imx8m/ddr/lpddr4_dvfs.c 4ce79e7bc1d5a4aced549b62eaf8a39fc8788e4b - arm-trusted-firmware.t234/plat/imx/imx8m/ddr/dram.c 552dd217b5167db0981cbc7c6c57e1f2a57b4fde - arm-trusted-firmware.t234/plat/imx/imx8m/include/dram.h 9bf31b2deb68ecd9e1ba14b273cdf44527835db0 - arm-trusted-firmware.t234/plat/imx/imx8m/include/gpc.h 59fd91cd051ebecbab4a936f03eb6e9444443053 - arm-trusted-firmware.t234/plat/imx/imx8m/include/imx8m_csu.h 4bc0eb69bf40f2ac07200a788f79ad6e9ec8b3f2 - arm-trusted-firmware.t234/plat/imx/imx8m/include/imx8m_psci.h 3bc736f072705dfa2d00383fe60d8497b3676fcc - arm-trusted-firmware.t234/plat/imx/imx8m/include/imx8m_caam.h 142aec7d079611005371d97442c5aaa2426513db - arm-trusted-firmware.t234/plat/imx/imx8m/include/imx8m_snvs.h 47de7cdf356158f2b651bafb8659187db3a13e65 - arm-trusted-firmware.t234/plat/imx/imx8m/include/imx8m_measured_boot.h 47d4d332045a770093cbd6ca7e1ca8785f26c1b0 - arm-trusted-firmware.t234/plat/imx/imx8m/include/imx_rdc.h b2cabe2526ae3990fa405688f4fb6eaf16d90a07 - arm-trusted-firmware.t234/plat/imx/imx8m/include/imx8m_ccm.h 5ec5413514abe79264b0bed81c75f811d2621d46 - arm-trusted-firmware.t234/plat/imx/imx8m/include/imx_aipstz.h 5eac3f0d57b86e7c5a80ef9b695586701ae316cf - arm-trusted-firmware.t234/plat/imx/imx8m/include/ddrc.h 0efee336c964d1973fec201980455aee08396081 - arm-trusted-firmware.t234/plat/imx/imx8m/imx8mp/imx8mp_trusted_boot.c 169ab98f3d4cd7620ffef0d78f7c2329be9c1586 - arm-trusted-firmware.t234/plat/imx/imx8m/imx8mp/imx8mp_psci.c 97a556f1fc780240a2ad81127c295bd39a0c6512 - arm-trusted-firmware.t234/plat/imx/imx8m/imx8mp/imx8mp_rotpk.S 8c540b3bbcde276f96d20d71011c966a8b4121ee - arm-trusted-firmware.t234/plat/imx/imx8m/imx8mp/imx8mp_bl31_setup.c be1935709a939c0480bc4cc27058482508f2596b - arm-trusted-firmware.t234/plat/imx/imx8m/imx8mp/imx8mp_bl2_mem_params_desc.c 566e9b1ab9526aa568eec00fa2bdd7504ce690c8 - arm-trusted-firmware.t234/plat/imx/imx8m/imx8mp/gpc.c 3d38c99169530f67aeba8526bd7cd4559981a349 - arm-trusted-firmware.t234/plat/imx/imx8m/imx8mp/imx8mp_bl2_el3_setup.c df0e3b50430ac47d2263ca8e0a4b83d46c8c0193 - arm-trusted-firmware.t234/plat/imx/imx8m/imx8mp/include/gpc_reg.h ffdaf59c15cfad24af89cc1357c4b9c6178c75e8 - arm-trusted-firmware.t234/plat/imx/imx8m/imx8mp/include/imx_sec_def.h c65d55a5e1a73f615b9fe213427e4605f4b3806c - arm-trusted-firmware.t234/plat/imx/imx8m/imx8mp/include/imx8mp_private.h 7c48c904287aa073e83f2de62a1e29dbd78eb62f - arm-trusted-firmware.t234/plat/imx/imx8m/imx8mp/include/platform_def.h 3fcc366713e1667476479363fd2d0fb74144e491 - arm-trusted-firmware.t234/plat/imx/imx8m/imx8mm/imx8mm_bl2_mem_params_desc.c 0e0933de6793e323f4c77e12a89455776a0dfe57 - arm-trusted-firmware.t234/plat/imx/imx8m/imx8mm/imx8mm_psci.c 060756d07ff95fa2e15ef2cab742c6f6fdfdc5e3 - arm-trusted-firmware.t234/plat/imx/imx8m/imx8mm/imx8mm_rotpk.S 5e7971c14f77e2f2450badad4a156ca33a9eb89f - arm-trusted-firmware.t234/plat/imx/imx8m/imx8mm/imx8mm_bl2_el3_setup.c dcd3cf883daf67195df7539d71232ca01a823ab4 - arm-trusted-firmware.t234/plat/imx/imx8m/imx8mm/gpc.c ef3284df4a0ede5ce613a7a839898cb2a1e9c9a1 - arm-trusted-firmware.t234/plat/imx/imx8m/imx8mm/imx8mm_bl31_setup.c f9007785b7de40f327bd11a83c710c297b45e4ab - arm-trusted-firmware.t234/plat/imx/imx8m/imx8mm/imx8mm_trusted_boot.c 4a704d5f5cc4958ad509fe9771d30d6632cb1a0a - arm-trusted-firmware.t234/plat/imx/imx8m/imx8mm/include/gpc_reg.h 04fdaf688f6c35956e290eee3b0b4f09932424a1 - arm-trusted-firmware.t234/plat/imx/imx8m/imx8mm/include/imx_sec_def.h 0f9e1a9d6497a3ad4e415d483905f2ef16aaa423 - arm-trusted-firmware.t234/plat/imx/imx8m/imx8mm/include/imx8mm_private.h cac152bceccacc4dfcefcb06f70bc94a942e811b - arm-trusted-firmware.t234/plat/imx/imx8m/imx8mm/include/platform_def.h 10405a9037f559e702c7588cf44df9cedf17fbd1 - arm-trusted-firmware.t234/plat/imx/imx8m/imx8mn/imx8mn_bl31_setup.c e7ded5d1571dcf2246b5480dea7517bbc0e45a87 - arm-trusted-firmware.t234/plat/imx/imx8m/imx8mn/imx8mn_psci.c f510a33475391ae77425faa5cf9b155f5b4f4eed - arm-trusted-firmware.t234/plat/imx/imx8m/imx8mn/gpc.c 82259d3c2b7d974ad94a42c37f37e0a8f0ce576f - arm-trusted-firmware.t234/plat/imx/imx8m/imx8mn/include/gpc_reg.h 8ce176eac7c0cd84477d823797e6ec1b94a7710c - arm-trusted-firmware.t234/plat/imx/imx8m/imx8mn/include/imx_sec_def.h e2cbf16502d88d260315ea8f6ebf0fda8ea48f82 - arm-trusted-firmware.t234/plat/imx/imx8m/imx8mn/include/platform_def.h 7e1d50a10455cae2f24e8ada077e8d707897363c - arm-trusted-firmware.t234/plat/amd/versal2/gicv3.c fd4e4d8e4e5dff8e1ee06cd871c1dece6ed0f7e1 - arm-trusted-firmware.t234/plat/amd/versal2/sip_svc_setup.c f46f70cab0ddaa6cfed17301a44127f90db8d6c1 - arm-trusted-firmware.t234/plat/amd/versal2/plat_topology.c 6e29364227d4fd4ab5c38c4e6bb53b96a7e34180 - arm-trusted-firmware.t234/plat/amd/versal2/plat_psci.c 1247aa83fb6b4428b7837fc9ab72b243faabeb7b - arm-trusted-firmware.t234/plat/amd/versal2/scmi.c fcd6bb0d9fab9d859b607e7f1b99d3ecee00181d - arm-trusted-firmware.t234/plat/amd/versal2/bl31_setup.c f8f943e74aa0044cf973a1c10769cbb163d0c0c0 - arm-trusted-firmware.t234/plat/amd/versal2/soc_ipi.c 5c2e772c8aba07c6fe4f8b403035417fe0ce1b00 - arm-trusted-firmware.t234/plat/amd/versal2/include/plat_macros.S 4d48bf24f8a8745f7d24b8ef498617aa24e48bf3 - arm-trusted-firmware.t234/plat/amd/versal2/include/plat_ipi.h dcddb8ded444ac27e925e2cfe092142bd68597bb - arm-trusted-firmware.t234/plat/amd/versal2/include/scmi.h 586c381b1ccf47d4fe0a8787467d84f695f8c167 - arm-trusted-firmware.t234/plat/amd/versal2/include/plat_private.h c3a2edf4f2b4f5e032b022561be465f687da06db - arm-trusted-firmware.t234/plat/amd/versal2/include/def.h 94532fde4c9cebad24a5963743b1088399cd297a - arm-trusted-firmware.t234/plat/amd/versal2/include/platform_def.h e85c171e8035cad0afc68fc4cd11680b57a687da - arm-trusted-firmware.t234/plat/amd/versal2/include/versal2-scmi.h 74a36dd4cf603bb7196309cbc95776d5b6909d37 - arm-trusted-firmware.t234/plat/amd/versal2/include/plat_pm_common.h 671239388cb3c2dc0bfd8b4d8cb3457aece33f3f - arm-trusted-firmware.t234/plat/amd/versal2/aarch64/common.c 994a657361f0f8a70ae50e79cf183624aff64a40 - arm-trusted-firmware.t234/plat/amd/versal2/aarch64/helpers.S 522b63231b909ee04c701b3cfc83f0e36837b43c - arm-trusted-firmware.t234/plat/mediatek/helpers/armv8_2/arch_helpers.S 4ba889b4d34e8b0d77d2e96be7443670fc8c51b4 - arm-trusted-firmware.t234/plat/mediatek/lib/pm/mtk_pm.c 813385e82fabd06d5d9692ffd200a4f727c11fad - arm-trusted-firmware.t234/plat/mediatek/lib/pm/mtk_pm.h 6c7a6b0f1a8f8bb9669f4da479574579c42cc692 - arm-trusted-firmware.t234/plat/mediatek/lib/pm/armv8_2/pwr_ctrl.c 6311b185f7f7c8af501aa62696276641763e1810 - arm-trusted-firmware.t234/plat/mediatek/lib/system_reset/reset_cros.c d9cf3a5339c9b4f70641e25b6acbf16e49cf61dc - arm-trusted-firmware.t234/plat/mediatek/lib/mtk_init/mtk_init.c 0836a904278842a9ddbdfe4c73ff81b9c1d56d85 - arm-trusted-firmware.t234/plat/mediatek/lib/mtk_init/mtk_mmap_init.c 2f1976dda894f28a35f0cc50623e070a354d044c - arm-trusted-firmware.t234/plat/mediatek/mt8183/scu.c 03b9e95dd87fe5cdd436743fb8f5f59d4b2f2de3 - arm-trusted-firmware.t234/plat/mediatek/mt8183/plat_topology.c e9bb8f5dfe42b8cfdd770db2301155ad00d93617 - arm-trusted-firmware.t234/plat/mediatek/mt8183/plat_mt_gic.c ab7d909a710012da6745094b10bd2d8c989e38bb - arm-trusted-firmware.t234/plat/mediatek/mt8183/bl31_plat_setup.c 7a7fbf6ac91e6e9ff86ac7350e8de64f834b5997 - arm-trusted-firmware.t234/plat/mediatek/mt8183/plat_dcm.c 3cb5ee19a3d0915879c602a240e4affb4a0d7c94 - arm-trusted-firmware.t234/plat/mediatek/mt8183/plat_debug.c 8274c219bcba2090fe7e6e628abe65c7c3780d33 - arm-trusted-firmware.t234/plat/mediatek/mt8183/plat_pm.c f7b9354cce893182c4203079dc774a9b048d05d7 - arm-trusted-firmware.t234/plat/mediatek/mt8183/include/plat_macros.S a52a6337e1e29bc64b0d301f31d88c42981a1105 - arm-trusted-firmware.t234/plat/mediatek/mt8183/include/sspm_reg.h a4d241e1fe6a38acfd38a895dc29d0d3762c185f - arm-trusted-firmware.t234/plat/mediatek/mt8183/include/plat_private.h 447f690a22efc00539cd931fc1d9aba592997a19 - arm-trusted-firmware.t234/plat/mediatek/mt8183/include/plat_dcm.h 387e06d0f2e4f36818ebd660cd1c4d429222a6fa - arm-trusted-firmware.t234/plat/mediatek/mt8183/include/platform_def.h 58b0e33d4a7460c72049a50f5cb8e8af5a5260d9 - arm-trusted-firmware.t234/plat/mediatek/mt8183/include/plat_debug.h 01e8de6953d79923463ea639e7d8e218ecdbc8e6 - arm-trusted-firmware.t234/plat/mediatek/mt8183/include/power_tracer.h 9ff5bdd1f6610dc5e442304399c97ab95361e3a3 - arm-trusted-firmware.t234/plat/mediatek/mt8183/include/scu.h 97a99a4b4542d549efbe9122362e0ee8fcac89fa - arm-trusted-firmware.t234/plat/mediatek/mt8183/include/mt_gic_v3.h 16b7a7f8d62f9bc9d06c01d5e72b2ef5653e7455 - arm-trusted-firmware.t234/plat/mediatek/mt8183/include/mcucfg.h 23040542c3bf819fe42a45ea51427b1a39edfab5 - arm-trusted-firmware.t234/plat/mediatek/mt8183/drivers/timer/mt_timer.c 1f21078b5dce77d5939c39ae046fcf15cf1bcc4d - arm-trusted-firmware.t234/plat/mediatek/mt8183/drivers/timer/mt_timer.h e92a0c648e09b96cd906a5e008c418d7d61fd577 - arm-trusted-firmware.t234/plat/mediatek/mt8183/drivers/spm/spm.h fe16bd5deb42a8c0e902c3a7547e11d7d5afa0bd - arm-trusted-firmware.t234/plat/mediatek/mt8183/drivers/spm/spm_suspend.c fdbc0bcded1a96ceeb994c74a3a48eec3af06df3 - arm-trusted-firmware.t234/plat/mediatek/mt8183/drivers/spm/spm.c b26d910796c32c24b2519666922a9991a16d3562 - arm-trusted-firmware.t234/plat/mediatek/mt8183/drivers/spm/spm_pmic_wrap.c f1a812bc872a1ac1c695c5485fba1a135307986c - arm-trusted-firmware.t234/plat/mediatek/mt8183/drivers/spm/spm_suspend.h 8156e8c4b7f219c9590cfcb2338d845c2b0c71b6 - arm-trusted-firmware.t234/plat/mediatek/mt8183/drivers/spm/spm_pmic_wrap.h 7ac4fd4d1072962002d4b4a7439a7fc6fea85b48 - arm-trusted-firmware.t234/plat/mediatek/mt8183/drivers/mcdi/mtk_mcdi.c 0bae9ef296eeb3bf9ed2342aa58b2d505dc8f04f - arm-trusted-firmware.t234/plat/mediatek/mt8183/drivers/mcdi/mtk_mcdi.h 4ab8cc9c4d3ff197639f9b78f7b860ebb8879967 - arm-trusted-firmware.t234/plat/mediatek/mt8183/drivers/mcsi/mcsi.c 51b89484342a85c2ee1e944fbbfc08a8bc663f63 - arm-trusted-firmware.t234/plat/mediatek/mt8183/drivers/mcsi/mcsi.h fb3c91bb75b7fe6fff5323ead8dc73efc07f1289 - arm-trusted-firmware.t234/plat/mediatek/mt8183/drivers/sspm/sspm.c 645f76b92e2714b452ae24edcd6a40cfa879ea61 - arm-trusted-firmware.t234/plat/mediatek/mt8183/drivers/sspm/sspm.h 62325eff3c956aa9ca90b298e958e8ed5941a8a4 - arm-trusted-firmware.t234/plat/mediatek/mt8183/drivers/emi_mpu/emi_mpu.c 88c148094b3fac4149258b8fe4786fe4ac3f8f3a - arm-trusted-firmware.t234/plat/mediatek/mt8183/drivers/emi_mpu/emi_mpu.h 96ac9c853839aff7b9c19b8ce2bdd09ffee2c87d - arm-trusted-firmware.t234/plat/mediatek/mt8183/drivers/spmc/mtspmc_private.h 316277d91acd7098ec6ac153e95c932aca46d3c5 - arm-trusted-firmware.t234/plat/mediatek/mt8183/drivers/spmc/mtspmc.h 2e1849b9de23cbd064f9e90e4c83cd761e284e18 - arm-trusted-firmware.t234/plat/mediatek/mt8183/drivers/spmc/mtspmc.c 94b038f0c7b76069f4f85185a375d4d2aa61a74f - arm-trusted-firmware.t234/plat/mediatek/mt8183/drivers/gpio/mtgpio_cfg.h 3a86fc89605145b3faa5aa385e8f7a11851b424a - arm-trusted-firmware.t234/plat/mediatek/mt8183/drivers/gpio/mtgpio.h 346960934a0779649e0412ae87abde963086ff8a - arm-trusted-firmware.t234/plat/mediatek/mt8183/drivers/gpio/mtgpio.c 888e5c6480da8cc9f0dd6d5febc12f7d0a8a16fd - arm-trusted-firmware.t234/plat/mediatek/mt8183/drivers/rtc/rtc.c edd71b3e0aaea146cfadebca131cd7e6ee13d303 - arm-trusted-firmware.t234/plat/mediatek/mt8183/drivers/rtc/rtc.h 1d535ab7f8d2fb5131a0ce0e6a7b11c4a188a009 - arm-trusted-firmware.t234/plat/mediatek/mt8183/drivers/pmic/pmic.c 214f922545d6899c3e5621df156f1712ebb3c009 - arm-trusted-firmware.t234/plat/mediatek/mt8183/drivers/pmic/pmic_wrap_init.h ddd6d454dc5e0a1dead801b5cb856c7f27a8065e - arm-trusted-firmware.t234/plat/mediatek/mt8183/drivers/pmic/pmic.h 264db153102d726c6a9455244b40d552d0960af2 - arm-trusted-firmware.t234/plat/mediatek/mt8183/drivers/devapc/devapc.h ed39e8ba2090c26070e12def3287c0ff46721987 - arm-trusted-firmware.t234/plat/mediatek/mt8183/drivers/devapc/devapc.c c5295d987eeadbc7fa82ddedb5266f20e7dd3cec - arm-trusted-firmware.t234/plat/mediatek/mt8183/aarch64/plat_helpers.S c7ae3ce6e37f4d27b8733d9c3b1bafa8add40a8b - arm-trusted-firmware.t234/plat/mediatek/mt8183/aarch64/platform_common.c 2036b11036478a7316c8fd022436bf0c5c86fcb1 - arm-trusted-firmware.t234/plat/mediatek/mt8188/plat_mmap.c 6c02313dd3c36357c07071c1b1e8c6541d7fac3d - arm-trusted-firmware.t234/plat/mediatek/mt8188/include/plat_macros.S fe92777b57e50f9794d099db02b51f77dc6ba550 - arm-trusted-firmware.t234/plat/mediatek/mt8188/include/spm_reg.h edf168931ae63b6f50119f11a6c30332f17b221b - arm-trusted-firmware.t234/plat/mediatek/mt8188/include/plat_private.h 14900bc528ff1f9aa32b65ca0826bd6b1036cc58 - arm-trusted-firmware.t234/plat/mediatek/mt8188/include/platform_def.h 155fd15ce538601c80626e0ac924d86efeee81c2 - arm-trusted-firmware.t234/plat/mediatek/common/mtk_smc_handlers.c ef095211d957e529510d9557e660cdf71b19dac4 - arm-trusted-firmware.t234/plat/mediatek/common/mtk_bl31_setup.c 7858c40d5378047a8869189376fb70d934ed6f9b - arm-trusted-firmware.t234/plat/mediatek/common/plat_params.h ffdbbcc522937a13b7f658754005673d0257f6dc - arm-trusted-firmware.t234/plat/mediatek/common/mtk_sip_svc.c 8b0adf6f37fac4a221d543c6307ba999c9272fe3 - arm-trusted-firmware.t234/plat/mediatek/common/mtk_plat_common.c 4f1e69980b6fa0691ac24f320f777fa5f690c987 - arm-trusted-firmware.t234/plat/mediatek/common/params_setup.c 078e8353bd2d5d9a24dc7b0eb02885c17df8a41b - arm-trusted-firmware.t234/plat/mediatek/common/mtk_plat_common.h 2cb2045af159fb4b0fc67e80347a125d16746868 - arm-trusted-firmware.t234/plat/mediatek/common/lpm/mt_lp_api.c 048568ea3544fb70a213a18fce44cf61d2569afc - arm-trusted-firmware.t234/plat/mediatek/common/lpm/mt_lp_rq.c 240763d9f4cc8587183e76d43c9682c0da5d79a1 - arm-trusted-firmware.t234/plat/mediatek/common/lpm/mt_lp_rm.c 4f5f60f494b7c5e54c5fcc61e93c22948842bd50 - arm-trusted-firmware.t234/plat/mediatek/include/vendor_pubsub_events.h 77426715ab3ae7fdf820e2d94d33a3c49af87b32 - arm-trusted-firmware.t234/plat/mediatek/include/plat_helpers.h 1052acdec92753ec565b872a6178633568f1afde - arm-trusted-firmware.t234/plat/mediatek/include/mtk_sip_svc.h adb5db59d1de99ae5b63a6a97f45db0bd5d32546 - arm-trusted-firmware.t234/plat/mediatek/include/plat.ld.rodata.inc 730fc794ca6543e8ce9f5fbf3106440fdd972a88 - arm-trusted-firmware.t234/plat/mediatek/include/mtk_mmap_pool.h 2007bbc2e757b8f9a7c8d2c1268e61d5476b5112 - arm-trusted-firmware.t234/plat/mediatek/include/mtk_sip_def.h 1ebe4b764d469b2138366b316a32f9aa69e86930 - arm-trusted-firmware.t234/plat/mediatek/include/lib/mtk_init/mtk_init_def.h f430f1fc1cb4e9869f5188a8a2e41fe2388d6337 - arm-trusted-firmware.t234/plat/mediatek/include/lib/mtk_init/mtk_init.h 28e698c3db9ff4cd8214e6c19d2e862b84d58997 - arm-trusted-firmware.t234/plat/mediatek/include/lpm/mt_lp_rqm.h 131f5bfb6f675e5d109359c7b033f8b5661462a4 - arm-trusted-firmware.t234/plat/mediatek/include/lpm/mt_lp_api.h d6580f799b542fccd5694096527e04c1eef6d90b - arm-trusted-firmware.t234/plat/mediatek/include/lpm/mt_lp_rq.h 452249986e924e593c69b4490fd404923ca00613 - arm-trusted-firmware.t234/plat/mediatek/include/lpm/mt_lp_rm.h dd1742b2f03a27f309a895ad42cd54a673c7e8a6 - arm-trusted-firmware.t234/plat/mediatek/include/lpm/mt_lpm_smc.h 2f24ac043a34f33be26778e4bcef73be1d2560de - arm-trusted-firmware.t234/plat/mediatek/include/armv8_2/arch_def.h f231a8cba31d27c6b5620603e282f16c8e11d068 - arm-trusted-firmware.t234/plat/mediatek/include/drivers/spm/mt_spm_resource_req.h ef31a3fe64f2f80b9bf38648ea21c4308e5d9499 - arm-trusted-firmware.t234/plat/mediatek/drivers/usb/mt8188/mt_usb.c 95dafe420ae67f2efd1510f1092a4779616c29f5 - arm-trusted-firmware.t234/plat/mediatek/drivers/dcm/mtk_dcm.h 69f1fae59df7524be33d4147b2a092c6e51ef8e9 - arm-trusted-firmware.t234/plat/mediatek/drivers/dcm/mtk_dcm.c df145329af783d50890626c102e62382f51887ce - arm-trusted-firmware.t234/plat/mediatek/drivers/dcm/mt8188/mtk_dcm_utils.h 89c6cdceb30d5175973c272aa2357dc7aa1a3543 - arm-trusted-firmware.t234/plat/mediatek/drivers/dcm/mt8188/mtk_dcm_utils.c 4026cdd707525c9b0b2f452353e7ba7bca28e30d - arm-trusted-firmware.t234/plat/mediatek/drivers/rng/rng.c 633855fa4cd760864ff1993f9ba116691e17fe0b - arm-trusted-firmware.t234/plat/mediatek/drivers/rng/mt8188/rng_plat.c 9a9f2989b8796b1f086830e28d1f42f15ec7944e - arm-trusted-firmware.t234/plat/mediatek/drivers/rng/mt8188/rng_plat.h 21da27715cf8cca9b7fab5c020f8e365081c434d - arm-trusted-firmware.t234/plat/mediatek/drivers/rng/mt8186/rng_plat.c e0879dbef407ef82e9d99d14188cb0ab71334424 - arm-trusted-firmware.t234/plat/mediatek/drivers/rng/mt8186/rng_plat.h ee1c1bf9c78b5c46f7772dc45f77f687953b93fe - arm-trusted-firmware.t234/plat/mediatek/drivers/msdc/mt_msdc.c 156cac9afbdde89449a6d21df46d0c5a1bf37071 - arm-trusted-firmware.t234/plat/mediatek/drivers/msdc/mt_msdc.h 8f1cfa9df72c598247cff91a97b5a830e3569cc9 - arm-trusted-firmware.t234/plat/mediatek/drivers/msdc/mt8186/mt_msdc_priv.h a0b0b3baf65bc8806a395dc788a2b106c02f3949 - arm-trusted-firmware.t234/plat/mediatek/drivers/dfd/dfd.c d9bded336f634453e481841c74413768ad395834 - arm-trusted-firmware.t234/plat/mediatek/drivers/dfd/dfd.h 261cf35d5384041d1dbb855b554e68ea39a1664c - arm-trusted-firmware.t234/plat/mediatek/drivers/dfd/mt8188/plat_dfd.h 6abded7e1568631f71e2d6557c3332d3847ea188 - arm-trusted-firmware.t234/plat/mediatek/drivers/dfd/mt8188/plat_dfd.c 7f192da248ec23c019cb333f4caafc278271f676 - arm-trusted-firmware.t234/plat/mediatek/drivers/mcusys/mcusys.c aee672e423696b65c1630801b16273e8e495a149 - arm-trusted-firmware.t234/plat/mediatek/drivers/mcusys/v1/mcucfg.h 2a10904482493ddeae18582fba23ff8f9181bf75 - arm-trusted-firmware.t234/plat/mediatek/drivers/pmic_wrap/pmic_wrap_init_common.h bb9905d3ca82a3d6dfa57699b19611f4867577ac - arm-trusted-firmware.t234/plat/mediatek/drivers/pmic_wrap/pmic_wrap_init_v2.c eb7915fed5f701e9926022ff49c0a65788171ee7 - arm-trusted-firmware.t234/plat/mediatek/drivers/pmic_wrap/pmic_wrap_init.c c7f5e857fc70c5ce4f9dcaa96f337af61105ace8 - arm-trusted-firmware.t234/plat/mediatek/drivers/pmic_wrap/mt8188/pmic_wrap_init.h 1684070d09d29ebffbd8554091fc33e886e3e2ee - arm-trusted-firmware.t234/plat/mediatek/drivers/cpu_pm/cpcv3_2/mt_cpu_pm_cpc.h c898216aa5b8f9fe89997d856427e3778ef12d5d - arm-trusted-firmware.t234/plat/mediatek/drivers/cpu_pm/cpcv3_2/mt_smp.c 9b4ecc667dc11af294dbd507e43cab0314e2dd11 - arm-trusted-firmware.t234/plat/mediatek/drivers/cpu_pm/cpcv3_2/mt_cpu_pm_mbox.h 134fbe21ac0f2c1854b10e7eef89ee12b020fe20 - arm-trusted-firmware.t234/plat/mediatek/drivers/cpu_pm/cpcv3_2/mt_cpu_pm_mbox.c 701ff478c6dc1481f2343efd5cd06af1507f256c - arm-trusted-firmware.t234/plat/mediatek/drivers/cpu_pm/cpcv3_2/mt_cpu_pm.c 0b7f2e5711c02061341a8dad767bd48e81ed38d7 - arm-trusted-firmware.t234/plat/mediatek/drivers/cpu_pm/cpcv3_2/mt_smp.h 0711d9c3c743a3380f9dede1b38165296fce1778 - arm-trusted-firmware.t234/plat/mediatek/drivers/cpu_pm/cpcv3_2/mt_cpu_pm_cpc.c e3cec46ff910a44ee5ea099c67fcd1a9118aadd8 - arm-trusted-firmware.t234/plat/mediatek/drivers/cpu_pm/cpcv3_2/mt_cpu_pm.h 98496e45e45833386917e41a5a20706c54c620e0 - arm-trusted-firmware.t234/plat/mediatek/drivers/uart/uart.h 930f766565bf0d229b59529e45f88732759a7231 - arm-trusted-firmware.t234/plat/mediatek/drivers/uart/8250_console.S bdb3af368e931968e90077cf992a6651daac9391 - arm-trusted-firmware.t234/plat/mediatek/drivers/uart/uart.c ec8068037d563767633d21d9e3b1f5baea14858e - arm-trusted-firmware.t234/plat/mediatek/drivers/uart/uart8250.h eecd4e88de7385f35bc50c0cadf49e4a947430d1 - arm-trusted-firmware.t234/plat/mediatek/drivers/iommu/mtk_iommu_smc.h 1fc4c3aa890f2e17c8be6a6dbbf6567486f157e8 - arm-trusted-firmware.t234/plat/mediatek/drivers/iommu/mtk_iommu_smc.c b27a223582d98aea35079b5d0bfaa1b3f8721cb5 - arm-trusted-firmware.t234/plat/mediatek/drivers/iommu/mtk_iommu_priv.h 133b64f64c5975ba10b2be0e87fc69b423ac2177 - arm-trusted-firmware.t234/plat/mediatek/drivers/iommu/mt8188/mtk_iommu_plat.h 67a2134c19d1424bf3c87a36306742845ac619c8 - arm-trusted-firmware.t234/plat/mediatek/drivers/iommu/mt8188/mtk_iommu_plat.c 5641ce56f5875f82b1bcd52ccac754d6434a429d - arm-trusted-firmware.t234/plat/mediatek/drivers/apusys/apusys.c b0bb7819e1cfa2a01fce23b139ea472f841352cf - arm-trusted-firmware.t234/plat/mediatek/drivers/apusys/apusys.h 9048ba6a48ac14608b665c8bad2f5bb951a27024 - arm-trusted-firmware.t234/plat/mediatek/drivers/apusys/mt8188/apusys_devapc_def.h d58a704e433339131096e918700e842b0fa15168 - arm-trusted-firmware.t234/plat/mediatek/drivers/apusys/mt8188/apusys_security_ctrl_plat.c 9c431370eef2ba564a1787f401a8ef5e12c36ed4 - arm-trusted-firmware.t234/plat/mediatek/drivers/apusys/mt8188/apusys_power.c 86aa1267852d8904cdbc7c0b57f4ad78cc5728d0 - arm-trusted-firmware.t234/plat/mediatek/drivers/apusys/mt8188/apusys_power.h 84d142258a0c10ae1990238c3d60026351212e52 - arm-trusted-firmware.t234/plat/mediatek/drivers/apusys/mt8188/apusys_devapc.c 966b63eb3fc5f4e378e22aba9e1e784e0e2bf33e - arm-trusted-firmware.t234/plat/mediatek/drivers/apusys/mt8188/apusys_devapc.h ac06993b9ac9acbab82e04e2042d0a8eefe61ce0 - arm-trusted-firmware.t234/plat/mediatek/drivers/apusys/mt8188/apusys_security_ctrl_plat.h 562bc45c0151323ee67ed5563d2be73f2c872086 - arm-trusted-firmware.t234/plat/mediatek/drivers/apusys/apusys_rv/2.0/apusys_rv.c 2e8f5da822645622d105b051be9e1b6ffa459bfa - arm-trusted-firmware.t234/plat/mediatek/drivers/apusys/apusys_rv/2.0/apusys_rv_mbox_mpu.h bcec235558592f7669bebeeed09689faac0d77ad - arm-trusted-firmware.t234/plat/mediatek/drivers/apusys/apusys_rv/2.0/apusys_rv.h b442dbf244bc7a547e04c0f40702676e578678e0 - arm-trusted-firmware.t234/plat/mediatek/drivers/apusys/devapc/apusys_dapc_v1.c fd860896b0d27704975fa01c90529c8670e5c45d - arm-trusted-firmware.t234/plat/mediatek/drivers/apusys/devapc/apusys_dapc_v1.h 1f18015e4a91fbc2f6f458600c406f2460034d01 - arm-trusted-firmware.t234/plat/mediatek/drivers/timer/mt_timer.c 1dd137b3f01e2411cbb14572a975e1b3f4105830 - arm-trusted-firmware.t234/plat/mediatek/drivers/timer/mt_timer.h 532fa3e763874411f39bbd85ad681e402e90f231 - arm-trusted-firmware.t234/plat/mediatek/drivers/dp/mt_dp.c 126809c50663fcf6c39cfc9d13e7e92ca3c5fb6f - arm-trusted-firmware.t234/plat/mediatek/drivers/dp/mt_dp.h dbc7c826ad61d42add672e4a8a99d45d202bfdfd - arm-trusted-firmware.t234/plat/mediatek/drivers/spm/mt8188/mt_spm_constraint.h 6bfc6138b5154aa9736b4a4a345aabe33fee78a9 - arm-trusted-firmware.t234/plat/mediatek/drivers/spm/mt8188/mt_spm.c 12dd698b1196a2fc3afc27305c76ad1e2c258bcf - arm-trusted-firmware.t234/plat/mediatek/drivers/spm/mt8188/mt_spm_cond.c 71fef70388b8918cbc07e8f65f9b0e7a4c89ed74 - arm-trusted-firmware.t234/plat/mediatek/drivers/spm/mt8188/mt_spm_cond.h 5f179d6ee720aba7136dd80825300df68270eed5 - arm-trusted-firmware.t234/plat/mediatek/drivers/spm/mt8188/sleep_def.h 81048f87a770053f0805ec66d9fa16b84a77f636 - arm-trusted-firmware.t234/plat/mediatek/drivers/spm/mt8188/mt_spm_reg.h 818234ca0720434f52f23b93f72dce1ce5c9d4e3 - arm-trusted-firmware.t234/plat/mediatek/drivers/spm/mt8188/mt_spm_pmic_wrap.c fed22f164e0a53cbae09721f293affa2ec1f2f01 - arm-trusted-firmware.t234/plat/mediatek/drivers/spm/mt8188/mt_spm_suspend.c 0769df3cb5b8b9e19dfb1123c46dee7f1f9557ae - arm-trusted-firmware.t234/plat/mediatek/drivers/spm/mt8188/mt_spm_idle.h 831ddbe553333b41fcc723b7789a93dcea7568dc - arm-trusted-firmware.t234/plat/mediatek/drivers/spm/mt8188/mt_spm_idle.c 47a4098a0efa1e12ed9e27f75331e2441779101b - arm-trusted-firmware.t234/plat/mediatek/drivers/spm/mt8188/mt_spm_internal.c 0985261c4e5a8bb2c2e37e4ef058afa59757ad71 - arm-trusted-firmware.t234/plat/mediatek/drivers/spm/mt8188/pcm_def.h e3c0e7928b00678198d90d8fb1a2f82e8bed1583 - arm-trusted-firmware.t234/plat/mediatek/drivers/spm/mt8188/mt_spm_conservation.h 684d73409dbe996226ca1447b9d63957867467a1 - arm-trusted-firmware.t234/plat/mediatek/drivers/spm/mt8188/mt_spm.h 6268b8fa4219dcd8875ef6209642b2d49f7118ea - arm-trusted-firmware.t234/plat/mediatek/drivers/spm/mt8188/mt_spm_pmic_wrap.h 73923179a04adffb30861558a79f25f7ed3d768f - arm-trusted-firmware.t234/plat/mediatek/drivers/spm/mt8188/mt_spm_internal.h 17f497f076bdd43ffbdd72fd3b425e44ff22d8f1 - arm-trusted-firmware.t234/plat/mediatek/drivers/spm/mt8188/mt_spm_suspend.h e396c6c90c6556d467fc562e68e005f44c4d8b95 - arm-trusted-firmware.t234/plat/mediatek/drivers/spm/mt8188/mt_spm_conservation.c 6cd940278f11b3d6b63cd0a31273aaece40a30c3 - arm-trusted-firmware.t234/plat/mediatek/drivers/spm/mt8188/constraints/mt_spm_rc_api.h 0a62ee963357d3bec459881c0e45a8ffa6c7a918 - arm-trusted-firmware.t234/plat/mediatek/drivers/spm/mt8188/constraints/mt_spm_rc_cpu_buck_ldo.c 55813ebfcfd70bc4977c941b3b1b909f708db0fc - arm-trusted-firmware.t234/plat/mediatek/drivers/spm/mt8188/constraints/mt_spm_rc_bus26m.c 5b4849541403374ccaeecb00883e829f66202395 - arm-trusted-firmware.t234/plat/mediatek/drivers/spm/mt8188/constraints/mt_spm_rc_dram.c e583068a2fdb63753f6e2f856317202006b46ec7 - arm-trusted-firmware.t234/plat/mediatek/drivers/spm/mt8188/constraints/mt_spm_rc_syspll.c 70d29f5044a5bd6aa77260aeda1506ef4a9995ac - arm-trusted-firmware.t234/plat/mediatek/drivers/spm/mt8188/constraints/mt_spm_rc_api.c 018910a30baede69e5bdbf766cbfeecc97c39d65 - arm-trusted-firmware.t234/plat/mediatek/drivers/spm/mt8188/constraints/mt_spm_rc_internal.h bb323bebc6cb446ed2b0da97475df6b313b6d48c - arm-trusted-firmware.t234/plat/mediatek/drivers/spm/version/notifier/v1/mt_spm_sspm_intc.h 6ebfcaae396ba118af39f0d41aee8fb9ac4417e0 - arm-trusted-firmware.t234/plat/mediatek/drivers/spm/version/notifier/v1/mt_spm_sspm_notifier.c 57b362129e071f4b6358ee2f67668a5723149f84 - arm-trusted-firmware.t234/plat/mediatek/drivers/spm/version/notifier/inc/mt_spm_notifier.h 6e8328bde0c302e5e4a920571add2cb941bd94bd - arm-trusted-firmware.t234/plat/mediatek/drivers/ptp3/ptp3_common.h 04c6c2bf26c5aebf15755019eb1ecb9e65ce69b6 - arm-trusted-firmware.t234/plat/mediatek/drivers/ptp3/ptp3_common.c 8496c537b7b48853a0cb2708741487f8a36ffe6a - arm-trusted-firmware.t234/plat/mediatek/drivers/ptp3/mt8188/ptp3_plat.h 77e9f93ff781a1987a0a63caa4c149bdaa1252a0 - arm-trusted-firmware.t234/plat/mediatek/drivers/audio/audio.c 7a6ca16f381f362b101117ec84ac8c0911cf8861 - arm-trusted-firmware.t234/plat/mediatek/drivers/audio/audio.h 24c24026f60ea4f0f096ff1c721dd6b8916c733f - arm-trusted-firmware.t234/plat/mediatek/drivers/audio/mt8188/audio_domain.c da5af19c7dc77d5deda15f6e2a5b62f584a72556 - arm-trusted-firmware.t234/plat/mediatek/drivers/audio/mt8188/mt_audio_private.h 827da74eb1c8e96107bf4b105d2456e9128d5807 - arm-trusted-firmware.t234/plat/mediatek/drivers/emi_mpu/emi_mpu.h 2041e4aeff6cb78547f1172dc32853c4ef54a2c1 - arm-trusted-firmware.t234/plat/mediatek/drivers/emi_mpu/emi_mpu_common.c 6f0c69e0545afe6ace0834c1a7738b032c5edb46 - arm-trusted-firmware.t234/plat/mediatek/drivers/emi_mpu/mt8188/emi_mpu.c cf73315f489104b325fe332e184062cbca7ba1fd - arm-trusted-firmware.t234/plat/mediatek/drivers/emi_mpu/mt8188/emi_mpu_priv.h 0285366adb4935f641e32567eb7f77904837f281 - arm-trusted-firmware.t234/plat/mediatek/drivers/cirq/mt_cirq.c 99f0022ad9e87c24e1887747d2c9884d00178733 - arm-trusted-firmware.t234/plat/mediatek/drivers/cirq/mt_cirq.h b93167035da9f66b5184ca2bafec958b3f155989 - arm-trusted-firmware.t234/plat/mediatek/drivers/gic600/mt_gic_v3.c 16462f5d17a1157411af721102b9276f82abeaeb - arm-trusted-firmware.t234/plat/mediatek/drivers/gic600/mt_gic_v3.h ad4b615259a210c00456d992b513086733bcb9c7 - arm-trusted-firmware.t234/plat/mediatek/drivers/gpio/mtgpio_common.h 490fcf180d98bb8cb8e2efc29f9d5501848afd7d - arm-trusted-firmware.t234/plat/mediatek/drivers/gpio/mtgpio_common.c a84237a9b3216421db5d1231f196ac9c22aa66d0 - arm-trusted-firmware.t234/plat/mediatek/drivers/gpio/mt8188/mtgpio.h 1d48befec54e9fa19cfb6946d74529810512043c - arm-trusted-firmware.t234/plat/mediatek/drivers/gpio/mt8188/mtgpio.c b6c9e8ee30ac8f5f0ac0b9bb03694eeb4a7f155a - arm-trusted-firmware.t234/plat/mediatek/drivers/rtc/rtc_mt6359p.h 03e4798e0ab038392164d015a29e788781517dce - arm-trusted-firmware.t234/plat/mediatek/drivers/rtc/rtc_common.c f0c7283e2441d12480c08faab3da2308d913f99b - arm-trusted-firmware.t234/plat/mediatek/drivers/rtc/rtc_mt6359p.c c2355cf6efda6f81bd7a9c35e7752d27980b28a9 - arm-trusted-firmware.t234/plat/mediatek/drivers/rtc/mt8188/rtc.h 02f0daaeeb8c59d391a631dd2f7624e598748e99 - arm-trusted-firmware.t234/plat/mediatek/mt8195/plat_topology.c b37bbd500187156b786138580f834face811db4c - arm-trusted-firmware.t234/plat/mediatek/mt8195/bl31_plat_setup.c 47db6d8212b0a5f9f1f0006ef388a69936ae3db8 - arm-trusted-firmware.t234/plat/mediatek/mt8195/plat_sip_calls.c 3d4c7bca1a506e4803a73126897ce1d6a95d97a8 - arm-trusted-firmware.t234/plat/mediatek/mt8195/plat_pm.c 1244ea062e485744ad8d59bf66ba3a455bec7f13 - arm-trusted-firmware.t234/plat/mediatek/mt8195/include/plat_mtk_lpm.h 4b7558ac17d450a33285d28478f8d8596edbb1b5 - arm-trusted-firmware.t234/plat/mediatek/mt8195/include/plat_macros.S 89839e3156f8231e002ce636b3025d34e9f4e407 - arm-trusted-firmware.t234/plat/mediatek/mt8195/include/plat_sip_calls.h 5fdb5614708d12a66d8b58741f2e38c49b7690aa - arm-trusted-firmware.t234/plat/mediatek/mt8195/include/rtc.h d923270912bbaad8959a73f39f933db6c98a49ce - arm-trusted-firmware.t234/plat/mediatek/mt8195/include/plat_private.h cfc60d518acd24b2043bf29a48105110ad3068aa - arm-trusted-firmware.t234/plat/mediatek/mt8195/include/plat_pm.h 7533ff64c34152805308fef95337aeebc5689b8b - arm-trusted-firmware.t234/plat/mediatek/mt8195/include/platform_def.h af49cf4a43c7cf77fcfa20fe09d7197390bf3969 - arm-trusted-firmware.t234/plat/mediatek/mt8195/include/mcucfg.h b1174b8477d0e126d9a35147161079391bf09ab0 - arm-trusted-firmware.t234/plat/mediatek/mt8195/drivers/dcm/mtk_dcm.h b6ba63645f7269f8d27b087a36b742340630864b - arm-trusted-firmware.t234/plat/mediatek/mt8195/drivers/dcm/mtk_dcm.c d83f926ab5ef0f16323281a34f12b358f3af50be - arm-trusted-firmware.t234/plat/mediatek/mt8195/drivers/dcm/mtk_dcm_utils.h 79890abe09ae9210d94ce3c0f27c8e1d61ed6fae - arm-trusted-firmware.t234/plat/mediatek/mt8195/drivers/dcm/mtk_dcm_utils.c 4168e0d14bbe98c0b575d2e572fdb4b73586f8c7 - arm-trusted-firmware.t234/plat/mediatek/mt8195/drivers/dfd/plat_dfd.h 17199f9bb411ca8735cf2bc4b22e8baa7bc2d152 - arm-trusted-firmware.t234/plat/mediatek/mt8195/drivers/dfd/plat_dfd.c c925ae2549008a58fda62b34de221dd620c70d96 - arm-trusted-firmware.t234/plat/mediatek/mt8195/drivers/apusys/mtk_apusys.c e37292ff38e07fc925308e8d725c49e48fa0a085 - arm-trusted-firmware.t234/plat/mediatek/mt8195/drivers/apusys/apupwr_clkctl_def.h db6d209cc48fd63ad9e73ca52f4c70391db28bb2 - arm-trusted-firmware.t234/plat/mediatek/mt8195/drivers/apusys/apupll.c 98090ad034ce904969ba1583467f8e5ef565d2d8 - arm-trusted-firmware.t234/plat/mediatek/mt8195/drivers/apusys/apupwr_clkctl.c fb86370251784e4a48a2bfe74baf2d7c56f3701b - arm-trusted-firmware.t234/plat/mediatek/mt8195/drivers/apusys/apupwr_clkctl.h dace58b25824fbc880b58670389d47358981547f - arm-trusted-firmware.t234/plat/mediatek/mt8195/drivers/apusys/mtk_apusys.h 1209a457ffc9d4ceeebf3f3e24300146fecbd276 - arm-trusted-firmware.t234/plat/mediatek/mt8195/drivers/spm/mt_spm_constraint.h 0a4ed6a9c901c1bc5b75371aa26917fe6d9b243e - arm-trusted-firmware.t234/plat/mediatek/mt8195/drivers/spm/mt_spm_vcorefs.h f438fe8befd240fc23c7cc48c7e77e1e1a3cc0c8 - arm-trusted-firmware.t234/plat/mediatek/mt8195/drivers/spm/mt_spm.c 6ef0f4493d19b357c77df1b5cd49696a5263d102 - arm-trusted-firmware.t234/plat/mediatek/mt8195/drivers/spm/mt_spm_vcorefs.c 1c5969bf63da110696877497bf7bb035238af2c3 - arm-trusted-firmware.t234/plat/mediatek/mt8195/drivers/spm/mt_spm_resource_req.h d56a8aa3fe480cd0d540c0fc4fb8a86b16126380 - arm-trusted-firmware.t234/plat/mediatek/mt8195/drivers/spm/mt_spm_cond.c da0d11a08b56a05381b8a262e5d2a508dfc9692a - arm-trusted-firmware.t234/plat/mediatek/mt8195/drivers/spm/mt_spm_cond.h 709be723f3bb2b8be34dabc19ffec007a928b060 - arm-trusted-firmware.t234/plat/mediatek/mt8195/drivers/spm/sleep_def.h c5542e49f5d3326418606d161d9490c9dc3c7bcf - arm-trusted-firmware.t234/plat/mediatek/mt8195/drivers/spm/mt_spm_reg.h 33b92edafecacba8aed5f6b12c0b051740d4aa8e - arm-trusted-firmware.t234/plat/mediatek/mt8195/drivers/spm/mt_spm_pmic_wrap.c 2516c5016c27a7706bfb86cea698a6741d845eef - arm-trusted-firmware.t234/plat/mediatek/mt8195/drivers/spm/mt_spm_suspend.c d21496a22308580c07df11ebe7adf41f274bfd59 - arm-trusted-firmware.t234/plat/mediatek/mt8195/drivers/spm/mt_spm_idle.h c13822b4c2268325ef4398fbd0d28eacdfb59602 - arm-trusted-firmware.t234/plat/mediatek/mt8195/drivers/spm/mt_spm_idle.c c997c26d9a441b3b550fa191f122a33d669d38b4 - arm-trusted-firmware.t234/plat/mediatek/mt8195/drivers/spm/mt_spm_internal.c 445db7752ab6359cd4ddfebded67f1dc59603220 - arm-trusted-firmware.t234/plat/mediatek/mt8195/drivers/spm/pcm_def.h 3e3b62df98d3d83eb2016c9d8dd1f67a641e95e4 - arm-trusted-firmware.t234/plat/mediatek/mt8195/drivers/spm/mt_spm_conservation.h 416b58dbb44fb50ec9cbdda2b4af6cc04bd48d20 - arm-trusted-firmware.t234/plat/mediatek/mt8195/drivers/spm/mt_spm.h 618680bf1155ee1bdf7f67df15cfeefeded70e66 - arm-trusted-firmware.t234/plat/mediatek/mt8195/drivers/spm/mt_spm_pmic_wrap.h 1e9fb5aa9c1bd6bfedf0be53b9f529290a141a9e - arm-trusted-firmware.t234/plat/mediatek/mt8195/drivers/spm/mt_spm_internal.h a2ab35d6915d2ac73d85c1068d973a0d3514da41 - arm-trusted-firmware.t234/plat/mediatek/mt8195/drivers/spm/mt_spm_suspend.h b24e7e4ca2cd9b25fdbad93fed94631f347b78f8 - arm-trusted-firmware.t234/plat/mediatek/mt8195/drivers/spm/mt_spm_conservation.c 872b3910dfca5bff8749f70e72fba760cf6289c7 - arm-trusted-firmware.t234/plat/mediatek/mt8195/drivers/spm/constraints/mt_spm_rc_cpu_buck_ldo.c 9cad31dffedae7113515acf396b47ad67db95e65 - arm-trusted-firmware.t234/plat/mediatek/mt8195/drivers/spm/constraints/mt_spm_rc_bus26m.c c24f82eb4ee80d7945922eac27dac514db2a49ac - arm-trusted-firmware.t234/plat/mediatek/mt8195/drivers/spm/constraints/mt_spm_rc_dram.c a3456911635f8af4f989688a8a1ae80de5256fb3 - arm-trusted-firmware.t234/plat/mediatek/mt8195/drivers/spm/constraints/mt_spm_rc_syspll.c 98f55522313c18575ac3b999f71ef98dd128d004 - arm-trusted-firmware.t234/plat/mediatek/mt8195/drivers/spm/constraints/mt_spm_rc_internal.h e3e6596065738a8b19bfde088f92c7a4bf51b851 - arm-trusted-firmware.t234/plat/mediatek/mt8195/drivers/spm/notifier/mt_spm_notifier.h 73de5db2e94313670371f83a648fe95de097e7f7 - arm-trusted-firmware.t234/plat/mediatek/mt8195/drivers/spm/notifier/mt_spm_sspm_intc.h 85497a05edddd868fbe7322a3621d2b7c88c9814 - arm-trusted-firmware.t234/plat/mediatek/mt8195/drivers/spm/notifier/mt_spm_sspm_notifier.c 0bcb38d8c8e61fff34a01235e370ae936b49f149 - arm-trusted-firmware.t234/plat/mediatek/mt8195/drivers/ptp3/ptp3_plat.h f8540b0d0f9d75dd733f6683d68945b2408cb0be - arm-trusted-firmware.t234/plat/mediatek/mt8195/drivers/mcdi/mt_cpu_pm_cpc.h 06c0f0dc497d1eace969a99a623d8c675e5e98a3 - arm-trusted-firmware.t234/plat/mediatek/mt8195/drivers/mcdi/mt_mcdi.c 670e89ed3e54a8fcab5f9bdc69b0710229d556a7 - arm-trusted-firmware.t234/plat/mediatek/mt8195/drivers/mcdi/mt_lp_irqremain.h c4e2a5509c4bbef64807d58ddfea984f66031f26 - arm-trusted-firmware.t234/plat/mediatek/mt8195/drivers/mcdi/mt_cpu_pm.c 368d6d264c555843d3708e20700f8851e215df63 - arm-trusted-firmware.t234/plat/mediatek/mt8195/drivers/mcdi/mt_cpu_pm_cpc.c 73a75da66496e41636460ff121095c03a41ba9a7 - arm-trusted-firmware.t234/plat/mediatek/mt8195/drivers/mcdi/mt_mcdi.h 45cc9c21a8808b71ae0f1ed548228c543b03809a - arm-trusted-firmware.t234/plat/mediatek/mt8195/drivers/mcdi/mt_lp_irqremain.c 207fabe0105631d3be5740a123996804198aca66 - arm-trusted-firmware.t234/plat/mediatek/mt8195/drivers/emi_mpu/emi_mpu.c a8ba5c83723798383541093aee374915fc69daca - arm-trusted-firmware.t234/plat/mediatek/mt8195/drivers/emi_mpu/emi_mpu.h f70563982bec81cd15b17e693da41e7d1f469c6d - arm-trusted-firmware.t234/plat/mediatek/mt8195/drivers/spmc/mtspmc_private.h e1b4cce4c465228019f6128073e4634dce0d2986 - arm-trusted-firmware.t234/plat/mediatek/mt8195/drivers/spmc/mtspmc.h cb6cde28e9dcb269b456216c0e1b8d55c8ea996f - arm-trusted-firmware.t234/plat/mediatek/mt8195/drivers/spmc/mtspmc.c cd5607156fa9256dbf860561db48d3e74c800295 - arm-trusted-firmware.t234/plat/mediatek/mt8195/drivers/gpio/mtgpio.h 49758ae69918fd8c1b52c54bc298f1f3e80fe1b9 - arm-trusted-firmware.t234/plat/mediatek/mt8195/drivers/gpio/mtgpio.c 9b146c3beb02a68ede21f883f70b46fd4239d784 - arm-trusted-firmware.t234/plat/mediatek/mt8195/drivers/pmic/pmic_wrap_init.h 1e5bead24560b23256aa9e306e5a4ece724bd6af - arm-trusted-firmware.t234/plat/mediatek/mt8195/aarch64/plat_helpers.S cf12b1cf99214c2d6e1e4c31e66bc9aa981037b2 - arm-trusted-firmware.t234/plat/mediatek/mt8195/aarch64/platform_common.c 02f0daaeeb8c59d391a631dd2f7624e598748e99 - arm-trusted-firmware.t234/plat/mediatek/mt8186/plat_topology.c 0fcb636bf98463eb44e77b7b99e75c29af2c4eaf - arm-trusted-firmware.t234/plat/mediatek/mt8186/bl31_plat_setup.c 8fcd8c6da6a5b779050aba77c3a1d180e1fcf42b - arm-trusted-firmware.t234/plat/mediatek/mt8186/plat_sip_calls.c 98b250fb48fc293e489948124f342093ba6dd423 - arm-trusted-firmware.t234/plat/mediatek/mt8186/plat_pm.c 80a7b771023f421a796b8da96a4d42a7672cb817 - arm-trusted-firmware.t234/plat/mediatek/mt8186/include/plat_mtk_lpm.h 9d9e1a21208cd3b5491a40bacb421776e8c1b680 - arm-trusted-firmware.t234/plat/mediatek/mt8186/include/plat_uart.h 4b7558ac17d450a33285d28478f8d8596edbb1b5 - arm-trusted-firmware.t234/plat/mediatek/mt8186/include/plat_macros.S 85515b62d8aa7cf44ac7f0b5a705f9507bc7da21 - arm-trusted-firmware.t234/plat/mediatek/mt8186/include/mt_spm_resource_req.h 80f29d1cc6d6673486836b7eb69a41f7a95ba4a7 - arm-trusted-firmware.t234/plat/mediatek/mt8186/include/plat_sip_calls.h b220ab62195da381290e15b4cfd22942786b4eb1 - arm-trusted-firmware.t234/plat/mediatek/mt8186/include/sspm_reg.h d923270912bbaad8959a73f39f933db6c98a49ce - arm-trusted-firmware.t234/plat/mediatek/mt8186/include/plat_private.h c02f1fbfaf33a5bbf3351dff53710e6e70a59e74 - arm-trusted-firmware.t234/plat/mediatek/mt8186/include/plat_pm.h b569920a90ac8edcfdd38257ab3fbbccbc56eae5 - arm-trusted-firmware.t234/plat/mediatek/mt8186/include/platform_def.h f3091cf7bfc468b69812a8ad31b9b5d768775e88 - arm-trusted-firmware.t234/plat/mediatek/mt8186/include/mcucfg.h 8836e6535eaf80d79c28bc7e61f796c61f019c9a - arm-trusted-firmware.t234/plat/mediatek/mt8186/drivers/dcm/mtk_dcm.h 3880fbedb01ad739666ead858ff32c11692d7ab0 - arm-trusted-firmware.t234/plat/mediatek/mt8186/drivers/dcm/mtk_dcm.c 982ba0c3e5b8772dbcb65fe9ec04f07cd66c03e3 - arm-trusted-firmware.t234/plat/mediatek/mt8186/drivers/dcm/mtk_dcm_utils.h 26687de903046dca0b5e9750e8a59b9355a29ec0 - arm-trusted-firmware.t234/plat/mediatek/mt8186/drivers/dcm/mtk_dcm_utils.c f0e1185e7fac539c5d2edbf5893678d2ca131f70 - arm-trusted-firmware.t234/plat/mediatek/mt8186/drivers/dfd/plat_dfd.h d2b7ae5854f6cb1abfe5c55f52385c86fe6752f0 - arm-trusted-firmware.t234/plat/mediatek/mt8186/drivers/dfd/plat_dfd.c 8d4291524d054f1b355580fb4254843ee94015f3 - arm-trusted-firmware.t234/plat/mediatek/mt8186/drivers/spm/mt_spm_extern.h d252e68c77c34429d934422da1ce46e64553c23d - arm-trusted-firmware.t234/plat/mediatek/mt8186/drivers/spm/mt_spm_constraint.h 6fad70943b4e7bc9042ec608eca4905531b622d8 - arm-trusted-firmware.t234/plat/mediatek/mt8186/drivers/spm/mt_spm_vcorefs.h c6cd4eccdc73fc94fe1d36f9c0d24adf82f6b762 - arm-trusted-firmware.t234/plat/mediatek/mt8186/drivers/spm/mt_spm.c 8e4cded7b48b70c4d63171d01619ea77582a15d8 - arm-trusted-firmware.t234/plat/mediatek/mt8186/drivers/spm/mt_spm_vcorefs.c c493de6825dedbe205476271578675f186aad0a2 - arm-trusted-firmware.t234/plat/mediatek/mt8186/drivers/spm/mt_spm_resource_req.h 169c683f8206d3968bee1e5ba5f222dab71cebf2 - arm-trusted-firmware.t234/plat/mediatek/mt8186/drivers/spm/mt_spm_cond.c 869e5ce6996225d55b0206e7bd3efac2a6c98596 - arm-trusted-firmware.t234/plat/mediatek/mt8186/drivers/spm/mt_spm_cond.h 302fea6e0fc2351dbc6ccda1ed9190941f2c0250 - arm-trusted-firmware.t234/plat/mediatek/mt8186/drivers/spm/sleep_def.h 85a883d9102bcbda2f8b172b3428fa270a259858 - arm-trusted-firmware.t234/plat/mediatek/mt8186/drivers/spm/mt_spm_reg.h 14bc032be258ef049809f2d64758d7861d5e5ac2 - arm-trusted-firmware.t234/plat/mediatek/mt8186/drivers/spm/mt_spm_pmic_wrap.c b196a520bf04181913710fa0ad6c7e98df814be6 - arm-trusted-firmware.t234/plat/mediatek/mt8186/drivers/spm/mt_spm_suspend.c 0c0e64bb4e502f8b06cddf4f5701a2004dae88bb - arm-trusted-firmware.t234/plat/mediatek/mt8186/drivers/spm/mt_spm_idle.h ed2f1e43ce8ff9065b95a274256a78d34d08b184 - arm-trusted-firmware.t234/plat/mediatek/mt8186/drivers/spm/mt_spm_idle.c be59b0efd4cc9ca4eb6570a3a2fe1d3f0f812fc6 - arm-trusted-firmware.t234/plat/mediatek/mt8186/drivers/spm/mt_spm_internal.c 2f14e2189e22b58a7f814523923a82b761565793 - arm-trusted-firmware.t234/plat/mediatek/mt8186/drivers/spm/mt_spm_extern.c 1b4a0d65fcaaccb28afc897aef9a76972b99b9f2 - arm-trusted-firmware.t234/plat/mediatek/mt8186/drivers/spm/pcm_def.h ff8ca308a59e802f869d16233f792ae0e6d19a52 - arm-trusted-firmware.t234/plat/mediatek/mt8186/drivers/spm/mt_spm_conservation.h 9842a9ba9c2a948191518a1dcac7efa316141dd3 - arm-trusted-firmware.t234/plat/mediatek/mt8186/drivers/spm/mt_spm.h c3913ece4d63b48d8aaa43aaaa4f7c5927073b30 - arm-trusted-firmware.t234/plat/mediatek/mt8186/drivers/spm/mt_spm_pmic_wrap.h 2915d56fef4019217f23aeab0ebcf0ff98b2818d - arm-trusted-firmware.t234/plat/mediatek/mt8186/drivers/spm/mt_spm_internal.h 714e06306174609b86f6dfecb362e5d307815984 - arm-trusted-firmware.t234/plat/mediatek/mt8186/drivers/spm/mt_spm_suspend.h a6cfe8969863b9001520ec912315467a2b1213e8 - arm-trusted-firmware.t234/plat/mediatek/mt8186/drivers/spm/mt_spm_conservation.c 97b36bd56cf9603b43fd2acace9ae94457d14776 - arm-trusted-firmware.t234/plat/mediatek/mt8186/drivers/spm/constraints/mt_spm_rc_cpu_buck_ldo.c b0b7d71eae5d9658f4318b8d609630ce8baa600f - arm-trusted-firmware.t234/plat/mediatek/mt8186/drivers/spm/constraints/mt_spm_rc_bus26m.c d7be908565309c39ef0e37d464011c7340c16d6d - arm-trusted-firmware.t234/plat/mediatek/mt8186/drivers/spm/constraints/mt_spm_rc_dram.c 6dd95a8f29a4eb734a92736d768d92a35ce910f8 - arm-trusted-firmware.t234/plat/mediatek/mt8186/drivers/spm/constraints/mt_spm_rc_syspll.c 6dea64a1dcb62407a4021b892e2da1cdc50af221 - arm-trusted-firmware.t234/plat/mediatek/mt8186/drivers/spm/constraints/mt_spm_rc_internal.h 3b25bdf185a1377c793c31e212d50a0027fda91d - arm-trusted-firmware.t234/plat/mediatek/mt8186/drivers/spm/notifier/mt_spm_notifier.h ec1e10ba1585046d426fcca0c8d6a0452015786a - arm-trusted-firmware.t234/plat/mediatek/mt8186/drivers/spm/notifier/mt_spm_sspm_intc.h b0f17b327e8e440edfd9723c0c1af4418672b99d - arm-trusted-firmware.t234/plat/mediatek/mt8186/drivers/spm/notifier/mt_spm_sspm_notifier.c 68d0d1df925010bde7b53a36dd82ab05a0cc23dc - arm-trusted-firmware.t234/plat/mediatek/mt8186/drivers/mcdi/mt_cpu_pm_cpc.h 5f4b55b0fb0544621045b48407c53734d39547ae - arm-trusted-firmware.t234/plat/mediatek/mt8186/drivers/mcdi/mt_mcdi.c 680305a5142d3cda1b9ccc1bba0d1ca8dbf42b0e - arm-trusted-firmware.t234/plat/mediatek/mt8186/drivers/mcdi/mt_lp_irqremain.h 63bd27946e361d2e05b681e47abfc894e0b23e88 - arm-trusted-firmware.t234/plat/mediatek/mt8186/drivers/mcdi/mt_cpu_pm.c 3de0a5c82b6c6679381b6c8887a23b11e1ee49e5 - arm-trusted-firmware.t234/plat/mediatek/mt8186/drivers/mcdi/mt_cpu_pm_cpc.c 63d1221a97ab18b30010ef6dd666592c84488052 - arm-trusted-firmware.t234/plat/mediatek/mt8186/drivers/mcdi/mt_cpu_pm.h 391c8bd0413603fab7961273368ae142ef2e605d - arm-trusted-firmware.t234/plat/mediatek/mt8186/drivers/mcdi/mt_mcdi.h b25eb762ade9feade7265b6836091ffda16eb118 - arm-trusted-firmware.t234/plat/mediatek/mt8186/drivers/mcdi/mt_lp_irqremain.c df5d6cd84cc2ebf2e1a29b946cfbfe1742c01b79 - arm-trusted-firmware.t234/plat/mediatek/mt8186/drivers/emi_mpu/emi_mpu.c 35dc8ecb34f8b16c7fc40797709568394bfa2700 - arm-trusted-firmware.t234/plat/mediatek/mt8186/drivers/emi_mpu/emi_mpu.h acd408521525ea61a78ab71ab790b33f6c8835a5 - arm-trusted-firmware.t234/plat/mediatek/mt8186/drivers/spmc/mtspmc_private.h 514a984bcec8f805fbc3fc8b0213b8603009b717 - arm-trusted-firmware.t234/plat/mediatek/mt8186/drivers/spmc/mtspmc.h 97a67051462aa2dc020abb4c615ec1b8d55798dc - arm-trusted-firmware.t234/plat/mediatek/mt8186/drivers/spmc/mtspmc.c 175403c002e2bae8b4b5f15356300cbbf3a37aac - arm-trusted-firmware.t234/plat/mediatek/mt8186/drivers/gpio/mtgpio.h 1cd2b844b96d5646b2f021f2b7a50358af7908a1 - arm-trusted-firmware.t234/plat/mediatek/mt8186/drivers/gpio/mtgpio.c 0bf3be2cc82c84d28437a838ec18ee32b52448a2 - arm-trusted-firmware.t234/plat/mediatek/mt8186/drivers/rtc/rtc.c 9114133093483da052525a109b5ca5242a14cdc7 - arm-trusted-firmware.t234/plat/mediatek/mt8186/drivers/rtc/rtc.h 8fdeee52467e248a082f45d92512e951f2611360 - arm-trusted-firmware.t234/plat/mediatek/mt8186/drivers/pmic/pmic.c fae5279d3f23c61cc28aef0666b48296099ed71c - arm-trusted-firmware.t234/plat/mediatek/mt8186/drivers/pmic/pmic_wrap_init.h 60b16e786121e9076be12c5a78ec91c7e33801be - arm-trusted-firmware.t234/plat/mediatek/mt8186/drivers/pmic/pmic.h 2c9ea17eea925548d393c14f7f51d8bc2fbccdcf - arm-trusted-firmware.t234/plat/mediatek/mt8186/aarch64/plat_helpers.S e55a87f7c47f362fafe9a61204603c0aacd71ab9 - arm-trusted-firmware.t234/plat/mediatek/mt8186/aarch64/platform_common.c 653b82370d0b1ad6cebef8b6d7072051e934caa0 - arm-trusted-firmware.t234/plat/mediatek/mt8192/plat_topology.c 5156247477a1d072e43ab2a0abbf3702053e9f8c - arm-trusted-firmware.t234/plat/mediatek/mt8192/bl31_plat_setup.c 56805f883f3c9325a69cdc97e327ca7c80bce78e - arm-trusted-firmware.t234/plat/mediatek/mt8192/plat_sip_calls.c e1863524c093ea2e6d043b9f6c7dc1e219f08467 - arm-trusted-firmware.t234/plat/mediatek/mt8192/plat_pm.c c080e0d9285c2d3fd252d1b5d80f857f7b5f7ca5 - arm-trusted-firmware.t234/plat/mediatek/mt8192/include/plat_mtk_lpm.h 166890efce4ba83ab0783f4b56821c8576731a31 - arm-trusted-firmware.t234/plat/mediatek/mt8192/include/plat_macros.S 9a55085dd16d8fb1643981ea5bd79a7009ebc8e4 - arm-trusted-firmware.t234/plat/mediatek/mt8192/include/plat_sip_calls.h 5fdb5614708d12a66d8b58741f2e38c49b7690aa - arm-trusted-firmware.t234/plat/mediatek/mt8192/include/rtc.h a6ce0baf4ebd3c81556e0945c2649f2efae6c879 - arm-trusted-firmware.t234/plat/mediatek/mt8192/include/plat_private.h cfc60d518acd24b2043bf29a48105110ad3068aa - arm-trusted-firmware.t234/plat/mediatek/mt8192/include/plat_pm.h 56997748655d5aea2de0ee46becb8aac0b37fc90 - arm-trusted-firmware.t234/plat/mediatek/mt8192/include/platform_def.h af49cf4a43c7cf77fcfa20fe09d7197390bf3969 - arm-trusted-firmware.t234/plat/mediatek/mt8192/include/mcucfg.h a84fa1ee247e2005166d9018df2bcc75e63deaab - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/dcm/mtk_dcm.h 0652a5c416f4dd969f772d9774e55501993af032 - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/dcm/mtk_dcm.c 6710f6e1dfa15b331f9d813a5003b5198af81c04 - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/dcm/mtk_dcm_utils.h 51222b809151abb01db2556abfba262c93f7f0e1 - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/dcm/mtk_dcm_utils.c 89fce0253e363a84cec3e3957ac8d951a80ebe74 - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/dfd/plat_dfd.h 9b42c233c5ba1e6b8a384b28424da455c27a53a6 - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/dfd/plat_dfd.c 1b68266c3c155960dc03cba027a4d430c74473bf - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/apusys/mtk_apusys.c cb930a7db51e4c8871ab7fcfa242466c2a8b36df - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/apusys/mtk_apusys_apc.h 45377afc42584fa85f873fca2cd0e157c1a16b37 - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/apusys/mtk_apusys.h f5cfe3883759a648f72458b1bd84bf01d3bb1657 - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/apusys/mtk_apusys_apc.c f7c1784f7532b244fe2bbca846d710d03061bed6 - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/apusys/mtk_apusys_apc_def.h a65ccd601ba3861f13ec19d1ec6cc79d4295961d - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/spm/mt_spm_constraint.h e5e46ff7c9820b84c61e6bf2afdad854e42c6985 - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/spm/mt_spm_vcorefs.h 4b3e251e2f0c0e4796105e6d25927067e14a2a6f - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/spm/mt_spm.c 9858935fcdc71e5145d69b0d6b65410dfc4c6dd0 - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/spm/mt_spm_vcorefs.c 6c9c6446695fbbb9ef086f4f783aae57f24ff6af - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/spm/mt_spm_resource_req.h 6cc4993cc61746ef2d388027e535cbf6fcddd68c - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/spm/mt_spm_cond.c 3646263e96b9e1bf68dd70363af40a9ebebfc683 - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/spm/mt_spm_cond.h 9479c40f7955d1b8da21fece7877b3f970886a62 - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/spm/sleep_def.h aa2819aa55d76d63f05809805f6ebf6f84fb8f71 - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/spm/mt_spm_reg.h b2f984f7c8707ce9470fc25ae8af0f7a041f1602 - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/spm/mt_spm_pmic_wrap.c ab677ba0b11817e784f6008456b3501b7438cfbf - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/spm/mt_spm_suspend.c ec2b85d104ef0ad52faf88881e864e93c37e0ffa - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/spm/mt_spm_idle.h 9bd59c04a5dabacf5a9ce010eefebd393e814115 - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/spm/mt_spm_idle.c 1637cf9d86b35aef31283240a30095022c0476cf - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/spm/mt_spm_internal.c 26edcaa081665198f705a5d6e4a606c0b4e00689 - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/spm/pcm_def.h 1f598d0b85f3b211c05adb41726664e4a2bbddc5 - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/spm/mt_spm_conservation.h dd32e9eb6d0e8f5083df2bf5abfe28fcaf6f2c5c - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/spm/mt_spm.h c7e5e4cde0a05fa756e3fc6cd32654be3343cecb - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/spm/mt_spm_pmic_wrap.h 905a72478cd919c732be2d3f3c066d27f34b489e - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/spm/mt_spm_internal.h 0f8fcf83ec923d192f61376370dd90635259a378 - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/spm/mt_spm_suspend.h 9fc0480b22dccdbb2dad940666ba124a785ed285 - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/spm/mt_spm_conservation.c eefb0e4293a309d3eae668a9f4fff6b9d45d3597 - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/spm/constraints/mt_spm_rc_cpu_buck_ldo.c 92c5f85bd201557dbc4e1e49474793a5152f5bd9 - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/spm/constraints/mt_spm_rc_bus26m.c 345b11fdc0c85e312ed8e6a8643339d691fadf6f - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/spm/constraints/mt_spm_rc_dram.c 1e038ef0b716c1ba013366f2d656026ff4bacd71 - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/spm/constraints/mt_spm_rc_syspll.c b656247e4733dfab4d7db4f7361cd1b15a0c14bf - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/spm/constraints/mt_spm_rc_internal.h 067d8c516f8ce37edb7c8228d9d7fc4ba15ad7ed - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/spm/notifier/mt_spm_notifier.h d2d41012d692a8857c6f842bcf2eb065142a90c2 - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/spm/notifier/mt_spm_sspm_intc.h ca56b6a499c7e44f09c1f020859f9e7d51b014a3 - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/spm/notifier/mt_spm_sspm_notifier.c 2dd99ac3ceb6063e89c9c016bf2e965abd2636c0 - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/ptp3/mtk_ptp3_common.h 30341bebf59f92502ed0e0f772ffd6ff3f4691aa - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/ptp3/mtk_ptp3_main.c f8540b0d0f9d75dd733f6683d68945b2408cb0be - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/mcdi/mt_cpu_pm_cpc.h 898ba302202ad4ff117f207d3cd604155457782a - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/mcdi/mt_mcdi.c 6158a4631af76550355215276ddfb61772f11c91 - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/mcdi/mt_lp_irqremain.h c42e69a4b160aed3d646987f867de63fd6542f09 - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/mcdi/mt_cpu_pm.c 368d6d264c555843d3708e20700f8851e215df63 - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/mcdi/mt_cpu_pm_cpc.c 73a75da66496e41636460ff121095c03a41ba9a7 - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/mcdi/mt_mcdi.h ba494a785110e76f1ca2c3a0f49371ab768f7d58 - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/mcdi/mt_lp_irqremain.c 09eef3153f8781d6bc852ba079ed0f23a53fd01c - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/emi_mpu/emi_mpu.c a0c85124251b9cdae75734966ce95891397ca477 - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/emi_mpu/emi_mpu.h d42c9ba8c699033bed7f64376149e25aaf0ba27b - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/spmc/mtspmc_private.h b434a3c4454f2c705b0f3b7c565d85e147e7a7dc - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/spmc/mtspmc.h cc63207972ae473d6a68bc41f3aa23093730183f - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/spmc/mtspmc.c 319ec69ebc8189c0b9500805069cb9eab1288242 - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/gpio/mtgpio.h fa7a5c1599cac3c19ca4cd64215b1938313806c5 - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/gpio/mtgpio.c ee295aa348b00745e28bd430f83fcf77824b88d4 - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/pmic/pmic_wrap_init.h 31d2ee83370c6c53704ab1a6ef9b905297491333 - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/devapc/devapc.h f1eb5fa4f4de22b769d0667ea9bea00613216cf9 - arm-trusted-firmware.t234/plat/mediatek/mt8192/drivers/devapc/devapc.c 4a2ec93e8013a56c39ca18d0e283fc9cccb43b1c - arm-trusted-firmware.t234/plat/mediatek/mt8192/aarch64/plat_helpers.S 5c6677206ac7ea4573dbb96868e106a55445d4f9 - arm-trusted-firmware.t234/plat/mediatek/mt8192/aarch64/platform_common.c f080b060c3a7a6d1c5f4ffa322865258db95bd1f - arm-trusted-firmware.t234/plat/mediatek/topology/armv8_2/topology.c 9b148285683f9f62babcdd92b4cbb3edf8d47275 - arm-trusted-firmware.t234/plat/mediatek/mt8173/scu.c 322049a08a3981e4c34fb6991314537e02662946 - arm-trusted-firmware.t234/plat/mediatek/mt8173/plat_topology.c 6a2d3a421c077dcc608a94317ecf55a80c640d76 - arm-trusted-firmware.t234/plat/mediatek/mt8173/plat_mt_gic.c 24ee865b1b243120c5a814d16e31a77fef33c308 - arm-trusted-firmware.t234/plat/mediatek/mt8173/bl31_plat_setup.c abe0c66165b32a2f3dee830062f153c3c29738ce - arm-trusted-firmware.t234/plat/mediatek/mt8173/plat_sip_calls.c 5b0d461df0d4936d87d5a3b87846da17b5bffdcd - arm-trusted-firmware.t234/plat/mediatek/mt8173/power_tracer.c e90649554240f75d20e82bcaf1d5fc7f72308d84 - arm-trusted-firmware.t234/plat/mediatek/mt8173/plat_pm.c 95875d234df9d7f7a86bfda389367f298611eb38 - arm-trusted-firmware.t234/plat/mediatek/mt8173/include/plat_macros.S 12c0bb5878f5671aeb4bc9ea733ddd80cdb960da - arm-trusted-firmware.t234/plat/mediatek/mt8173/include/plat_sip_calls.h 755906af584459bc7964059a3022e624d4743b62 - arm-trusted-firmware.t234/plat/mediatek/mt8173/include/mt8173_def.h 3d43facf8bc958241dcaddfa4cd6f9e61362c87e - arm-trusted-firmware.t234/plat/mediatek/mt8173/include/plat_private.h 2bd6a37616bcda8ee48aa9917c65801ceeea804e - arm-trusted-firmware.t234/plat/mediatek/mt8173/include/platform_def.h fb0128ee719cdbc40fa546319e2635e3e19f1e11 - arm-trusted-firmware.t234/plat/mediatek/mt8173/include/power_tracer.h 89bb4015a4309bd60ed5dc2f32033dd0a4f603cc - arm-trusted-firmware.t234/plat/mediatek/mt8173/include/scu.h 7848197b715dc7fd355b6bc2d2232123facb9994 - arm-trusted-firmware.t234/plat/mediatek/mt8173/include/mcucfg.h 3160163c493937b3bb0298d50d918627d0d0e4e4 - arm-trusted-firmware.t234/plat/mediatek/mt8173/drivers/wdt/wdt.h 27287e7e69b6a6be66a87cf9e294f25a682e92fe - arm-trusted-firmware.t234/plat/mediatek/mt8173/drivers/wdt/wdt.c 0f16bd582feb0391ddd3b4685fab51a7e11667ca - arm-trusted-firmware.t234/plat/mediatek/mt8173/drivers/crypt/crypt.c 4535129d635202f3bf1b447e411bd1c7eda5f7db - arm-trusted-firmware.t234/plat/mediatek/mt8173/drivers/crypt/crypt.h d86950fce5e4e2f48f1efc48472289033367e47e - arm-trusted-firmware.t234/plat/mediatek/mt8173/drivers/timer/mt_cpuxgpt.c bb6c45f6edb308171b205123bd682e3db84ec58f - arm-trusted-firmware.t234/plat/mediatek/mt8173/drivers/timer/mt_cpuxgpt.h f6fe2ef42009b0fa69b3957d63488b6192072275 - arm-trusted-firmware.t234/plat/mediatek/mt8173/drivers/spm/spm_hotplug.h 0f38df7cc1b225ffb568e7df5c4981b0d29ee7ae - arm-trusted-firmware.t234/plat/mediatek/mt8173/drivers/spm/spm.h 4398c8e27acb0bc2b28771ed5c1a0689971fac4f - arm-trusted-firmware.t234/plat/mediatek/mt8173/drivers/spm/spm_suspend.c c4ecb47d531dfa5f8a9ef5c41b0f213bad6e3639 - arm-trusted-firmware.t234/plat/mediatek/mt8173/drivers/spm/spm.c d73f4f2080ec7098103c5209a4c302f80535dc77 - arm-trusted-firmware.t234/plat/mediatek/mt8173/drivers/spm/spm_hotplug.c 8ffb063b98ca22c66f9f96260216a31b1de20519 - arm-trusted-firmware.t234/plat/mediatek/mt8173/drivers/spm/spm_mcdi.h 9623b67d4f2dfac8dcc78ed711172fcb5f85511d - arm-trusted-firmware.t234/plat/mediatek/mt8173/drivers/spm/spm_suspend.h b18c4af2e0471a0d5de267ac5c1e4a52b1c94ea6 - arm-trusted-firmware.t234/plat/mediatek/mt8173/drivers/spm/spm_mcdi.c b7e2ebfeb39fa655c846358a6439c708fba4b6d5 - arm-trusted-firmware.t234/plat/mediatek/mt8173/drivers/rtc/rtc.c 42adaa32fd22643561c090086db64c635fd6d686 - arm-trusted-firmware.t234/plat/mediatek/mt8173/drivers/rtc/rtc.h 27cbf1f064da3e18b5cd7c0e83fb1c9da349e00e - arm-trusted-firmware.t234/plat/mediatek/mt8173/drivers/pmic/pmic_wrap_init.h 9e687cd54be9aa08265355e1079ba5f6cd2a93cc - arm-trusted-firmware.t234/plat/mediatek/mt8173/drivers/mtcmos/mtcmos.h 4af6a675f41b6d5566fcc13863c1507f5fe28f7f - arm-trusted-firmware.t234/plat/mediatek/mt8173/drivers/mtcmos/mtcmos.c fefea9a047dc27fa97fc660c62bc2a4b68539b35 - arm-trusted-firmware.t234/plat/mediatek/mt8173/aarch64/plat_helpers.S 314689d0bbe7b2567ccd667c6f70815679729e1f - arm-trusted-firmware.t234/plat/mediatek/mt8173/aarch64/platform_common.c f91fd8b34fe72458286faf74c6853c3759f551ca - arm-trusted-firmware.t234/plat/qti/msm8916/msm8916_gicv2.c c22153a5094d89a48bb7ad3aa427298e918f6256 - arm-trusted-firmware.t234/plat/qti/msm8916/msm8916_config.c 2ee9b3c33e5198e2074a4ab3cf4f388accb9f4a0 - arm-trusted-firmware.t234/plat/qti/msm8916/msm8916_bl31_setup.c f7023e35ce3d785f6526a581529a13b820ac6b5b - arm-trusted-firmware.t234/plat/qti/msm8916/msm8916_pm.h 1e6d755199daf91b68aab539b007a8222fafbd83 - arm-trusted-firmware.t234/plat/qti/msm8916/msm8916_gicv2.h 15405b3c695314c07dde006b1fb626f1edf18f2d - arm-trusted-firmware.t234/plat/qti/msm8916/msm8916_topology.c 5b0c5ffb393a5da9054dd576afad36575dd1b380 - arm-trusted-firmware.t234/plat/qti/msm8916/msm8916_setup.c 35f5759122b2027f352c31456f914f69d2ff2928 - arm-trusted-firmware.t234/plat/qti/msm8916/msm8916_config.h bd340a0887f00f244776a6fca9e53d3107c848e5 - arm-trusted-firmware.t234/plat/qti/msm8916/msm8916_setup.h c7afc3a62bb9058be8d8e3f3ba0eb03f78426288 - arm-trusted-firmware.t234/plat/qti/msm8916/msm8916_cpu_boot.c 09141648acee27892b5410e706b5da2a6f291c9a - arm-trusted-firmware.t234/plat/qti/msm8916/msm8916_pm.c b9c8ce40701305e60bcc5cf99828f377e0e68ed1 - arm-trusted-firmware.t234/plat/qti/msm8916/tsp/msm8916_tsp_setup.c 8150ca146a9314d5192e1e394975bb932029bd0b - arm-trusted-firmware.t234/plat/qti/msm8916/include/uartdm_console.h e1247a97415e84032dab91e8daa6df51645413ac - arm-trusted-firmware.t234/plat/qti/msm8916/include/plat_macros.S 408ad45b859240414cbc219d5387a2ccb3ab81a3 - arm-trusted-firmware.t234/plat/qti/msm8916/include/msm8916_mmap.h 21dc8cb45bc56c7daed7bc35236b81f40326ceb8 - arm-trusted-firmware.t234/plat/qti/msm8916/include/platform_def.h 5d0c83421111fdd41d5dd6f9db159fc5b118de41 - arm-trusted-firmware.t234/plat/qti/msm8916/sp_min/msm8916_sp_min_setup.c fa8791f9f7b5c3e14d11898f318e9bbf417a311d - arm-trusted-firmware.t234/plat/qti/msm8916/aarch64/msm8916_helpers.S 4742c655ad5ea2677cc78dd2937ec7ebf846e3fc - arm-trusted-firmware.t234/plat/qti/msm8916/aarch64/uartdm_console.S df54012d7d4371b4cc563d267d8f05f627cda469 - arm-trusted-firmware.t234/plat/qti/msm8916/aarch32/msm8916_helpers.S 9bebc66446aa697d2164984474ee38984d148977 - arm-trusted-firmware.t234/plat/qti/msm8916/aarch32/uartdm_console.S 7bc95caff2b0700d04cc28cec44bcae1965e8b73 - arm-trusted-firmware.t234/plat/qti/common/inc/qti_plat.h 1d172cb4df58b173035b99b5855545b25fd764be - arm-trusted-firmware.t234/plat/qti/common/inc/qti_uart_console.h f00660ee7d40d5826515fe5266e50d2172c12bc1 - arm-trusted-firmware.t234/plat/qti/common/inc/spmi_arb.h a492ca7a1a6a0dc9b988c09a6838be72f3a00cc3 - arm-trusted-firmware.t234/plat/qti/common/inc/qti_board_def.h 2c7d5721030a2353cd649ad2cf4da49242ed3195 - arm-trusted-firmware.t234/plat/qti/common/inc/qti_cpu.h af87d6c46e8e3304b92c90ed0111bb3066bac8e1 - arm-trusted-firmware.t234/plat/qti/common/inc/qti_interrupt_svc.h 0b01452153b97f032c89b81698730bd0211ee4cf - arm-trusted-firmware.t234/plat/qti/common/inc/qti_rng.h 5901fe33e7d63a4a03e1b95469b48c8299d178f6 - arm-trusted-firmware.t234/plat/qti/common/inc/aarch64/plat_macros.S bea1c249fdc7e365ba7e5d773a7e312de9345fb8 - arm-trusted-firmware.t234/plat/qti/common/src/spmi_arb.c f3b7fa7c62db7248cf8b50316244b8239596f267 - arm-trusted-firmware.t234/plat/qti/common/src/qti_rng.c ea7ed5df42ad1464983f8847a8a679e743b1fb48 - arm-trusted-firmware.t234/plat/qti/common/src/qti_bl31_setup.c 61f5c93cc87bcb54ee0cf5e202fe57f626bcab7f - arm-trusted-firmware.t234/plat/qti/common/src/qti_pm.c f12c8a79f6141094db1aac3d48ac6ea34800ff6d - arm-trusted-firmware.t234/plat/qti/common/src/qti_stack_protector.c 26a9cbddd8b9a236e5d0f3550807554e23563f18 - arm-trusted-firmware.t234/plat/qti/common/src/qti_gic_v3.c aeecda36338ac151632b50ce13795833a9f6ce3b - arm-trusted-firmware.t234/plat/qti/common/src/pm_ps_hold.c ac89500a8d77a91b9b24a426b3394744bf74efb5 - arm-trusted-firmware.t234/plat/qti/common/src/qti_topology.c 3fc5e394e0d8ea8b2367dec56d27e29444d67bfb - arm-trusted-firmware.t234/plat/qti/common/src/qti_common.c accf2747a7781193d7806b7d3d6b6de2a7c9d5e8 - arm-trusted-firmware.t234/plat/qti/common/src/qti_interrupt_svc.c 825f74a7f38dc32847afc499110e74db3937935f - arm-trusted-firmware.t234/plat/qti/common/src/qti_syscall.c c98ce7e3d61f077fa530f3039219fc2da8f4e384 - arm-trusted-firmware.t234/plat/qti/common/src/aarch64/qti_kryo4_gold.S 7547a5ef92ec4ac40eed5a73041ef25902042bf2 - arm-trusted-firmware.t234/plat/qti/common/src/aarch64/qti_uart_console.S 8fd993542eecb4ec1a863568adeafac03a278899 - arm-trusted-firmware.t234/plat/qti/common/src/aarch64/qti_kryo6_gold.S 38bc969178865cffb806402ef5ce2ef9aed19fb7 - arm-trusted-firmware.t234/plat/qti/common/src/aarch64/qti_kryo6_silver.S 6734aa2c66cff472a934ac7860617d215b342c1d - arm-trusted-firmware.t234/plat/qti/common/src/aarch64/qti_kryo4_silver.S e1c323c2517fcdcdc4c19a1be62b15dcf31174ae - arm-trusted-firmware.t234/plat/qti/common/src/aarch64/qti_helpers.S 5db76531814dda261416dc016b511d807c3a4ba5 - arm-trusted-firmware.t234/plat/qti/qtiseclib/inc/qtiseclib_defs.h a28527a439c34c2ff37a3bd1ace46fb9ddb4f357 - arm-trusted-firmware.t234/plat/qti/qtiseclib/inc/qtiseclib_cb_interface.h 186065ea9c6a4a2d16c200d4d07466514f5a1c29 - arm-trusted-firmware.t234/plat/qti/qtiseclib/inc/qtiseclib_interface.h 885aa0bbda57cb30366ac8f9ea09f3f8e7ad31da - arm-trusted-firmware.t234/plat/qti/qtiseclib/inc/sc7180/qtiseclib_defs_plat.h 3e4d34962a59227a5d8d494f35e80b77fdf8d61e - arm-trusted-firmware.t234/plat/qti/qtiseclib/inc/sc7280/qtiseclib_defs_plat.h 1a6c92af22149cf7ac8cccac367bfc9610d45ab3 - arm-trusted-firmware.t234/plat/qti/qtiseclib/src/qtiseclib_interface_stub.c f47c639ba8a5b999f38760e4611b0ccb4cd9511d - arm-trusted-firmware.t234/plat/qti/qtiseclib/src/qtiseclib_cb_interface.c 25ffc66bfd8596789ed4e6ec3329a46ce29927d6 - arm-trusted-firmware.t234/plat/qti/sc7180/inc/qti_map_chipinfo.h ce8e6c97e3af86cafccb6b9ffe857b9c1ec62598 - arm-trusted-firmware.t234/plat/qti/sc7180/inc/qti_secure_io_cfg.h 576c57f662c322a2eac3565e848ea0179d7290a1 - arm-trusted-firmware.t234/plat/qti/sc7180/inc/qti_rng_io.h 19c93a98e1f08d21eaa65898889b3f74f7fca312 - arm-trusted-firmware.t234/plat/qti/sc7180/inc/platform_def.h 9e0b31305ede1a8540fd77a9083d96cc98db3f47 - arm-trusted-firmware.t234/plat/qti/sc7280/inc/qti_map_chipinfo.h d99874d76998c7025371fc6e19def1521bfacc2d - arm-trusted-firmware.t234/plat/qti/sc7280/inc/qti_secure_io_cfg.h 8b0399819af138f97f2f4270408c66b5d23b6052 - arm-trusted-firmware.t234/plat/qti/sc7280/inc/qti_rng_io.h db1632b3d9b656b70c43049ed9e7ff1859e2ca1d - arm-trusted-firmware.t234/plat/qti/sc7280/inc/platform_def.h ea086669ab75f559b2e65b291fea3af158c18bd2 - arm-trusted-firmware.t234/plat/renesas/common/bl2_plat_mem_params_desc.c ffd1e457886f1089d9c344f701ec17dc97f8f074 - arm-trusted-firmware.t234/plat/renesas/common/rcar_common.c a977937122b0a3096d2974c21e1d01713d54ef5b - arm-trusted-firmware.t234/plat/renesas/common/plat_topology.c 5f9406be82d4cf619e442556228de3e2d1283e39 - arm-trusted-firmware.t234/plat/renesas/common/plat_image_load.c d414d4d769295e5a493cf3e77c9c51626ee0e6fb - arm-trusted-firmware.t234/plat/renesas/common/bl2_interrupt_error.c 9e2b414041c35052396135ebdc28539af32c2593 - arm-trusted-firmware.t234/plat/renesas/common/bl31_plat_setup.c ae71ad3a55f0e9c013697f9775e6c12c0ff7bd74 - arm-trusted-firmware.t234/plat/renesas/common/bl2_cpg_init.c 12b42e58567a9ecd3d1d63318cb5ec7011a41573 - arm-trusted-firmware.t234/plat/renesas/common/plat_storage.c 39e6611e685cf71d02170a6793bf959a81ab7fa2 - arm-trusted-firmware.t234/plat/renesas/common/bl2_secure_setting.c 716e1c7c79baa403b9c5d0ef120f23d8cac8e802 - arm-trusted-firmware.t234/plat/renesas/common/plat_pm.c 72226e12e556432cb547181aa73e0d55c5c8777f - arm-trusted-firmware.t234/plat/renesas/common/include/plat_macros.S a5eccfada60ea0db321912c03f41d9321f3f2f6f - arm-trusted-firmware.t234/plat/renesas/common/include/rcar_version.h 2f021b7dce5115d413267052dd5b471ceff900cf - arm-trusted-firmware.t234/plat/renesas/common/include/rcar_private.h f4aa97332efbbc8e20e48e338443fd3b9c208830 - arm-trusted-firmware.t234/plat/renesas/common/include/plat.ld.S ef23f57caa49d57ae463690ade4589f65b3f438d - arm-trusted-firmware.t234/plat/renesas/common/include/rcar_def.h 916f1cfdad44cc6722d2f350cd1965a3b7a170ee - arm-trusted-firmware.t234/plat/renesas/common/include/platform_def.h f08550fcefd7ac0a14a3445b570020594efd6cdc - arm-trusted-firmware.t234/plat/renesas/common/include/registers/cpg_registers.h 64ef91e2bf3528ac94c8eb79c5c3f80113257721 - arm-trusted-firmware.t234/plat/renesas/common/include/registers/lifec_registers.h f773e9cbe28c8c27bd7013b66cd612cd63f790fc - arm-trusted-firmware.t234/plat/renesas/common/include/registers/axi_registers.h 5d2493051124d6190ac07f78aefa3ba8609c0700 - arm-trusted-firmware.t234/plat/renesas/common/aarch64/plat_helpers.S c6761280ab7f2f46bba8fc9b3743bb43bac2e264 - arm-trusted-firmware.t234/plat/renesas/common/aarch64/platform_common.c d9c373f0351531965e8097178bbc13ede3af7485 - arm-trusted-firmware.t234/plat/renesas/rzg/bl2_plat_setup.c b11fa23b19a538f86999ccfa224a0a3936b4a4d8 - arm-trusted-firmware.t234/plat/renesas/rcar/bl2_plat_setup.c f1a1db89fac89eb6923ac537ab49743f07609b6e - arm-trusted-firmware.t234/plat/renesas/rcar/rcar_stack_protector.c 2d8d10b04b9981888a2700bcc16872d0386d64a5 - arm-trusted-firmware.t234/plat/nxp/soc-ls1046a/soc.c 415b9308ad6c8f358a34c979b2e81644d9af15b7 - arm-trusted-firmware.t234/plat/nxp/soc-ls1046a/soc.def bfdacfdea0aa10e1ece5ae2925625ce34328672a - arm-trusted-firmware.t234/plat/nxp/soc-ls1046a/include/ns_access.h 9ed3d544ff5ab2cfa0ea13d1fb3b59534eb90e14 - arm-trusted-firmware.t234/plat/nxp/soc-ls1046a/include/soc.h 8cc150d9e1c9199572b24d0af559c82e4db71320 - arm-trusted-firmware.t234/plat/nxp/soc-ls1046a/aarch64/ls1046a.S 782b9250544df572539dddc2ebf6925789a6d569 - arm-trusted-firmware.t234/plat/nxp/soc-ls1046a/aarch64/ls1046a_helpers.S 5da46b775851344c65928890c699d7ff047606b2 - arm-trusted-firmware.t234/plat/nxp/soc-ls1046a/ls1046afrwy/platform.c 0f38703d163bd042c7827eaddb04ea092b30a478 - arm-trusted-firmware.t234/plat/nxp/soc-ls1046a/ls1046afrwy/platform_def.h 945ec23ee2ba0c79a5e6140d043290e9afde9b2c - arm-trusted-firmware.t234/plat/nxp/soc-ls1046a/ls1046afrwy/ddr_init.c dc407d2ead98e6d20e59ac0b6c5e75116a82ddd3 - arm-trusted-firmware.t234/plat/nxp/soc-ls1046a/ls1046afrwy/plat_def.h 0fb5432862f668e38f9bbce3af181371cdecf0cd - arm-trusted-firmware.t234/plat/nxp/soc-ls1046a/ls1046afrwy/policy.h 5da46b775851344c65928890c699d7ff047606b2 - arm-trusted-firmware.t234/plat/nxp/soc-ls1046a/ls1046ardb/platform.c 0f38703d163bd042c7827eaddb04ea092b30a478 - arm-trusted-firmware.t234/plat/nxp/soc-ls1046a/ls1046ardb/platform_def.h 2ea7db20f6633e1dbecd9a70ed4cac89d97c2a76 - arm-trusted-firmware.t234/plat/nxp/soc-ls1046a/ls1046ardb/ddr_init.c 686ad098c68cbf424bb3e89e451ab64b8183a91c - arm-trusted-firmware.t234/plat/nxp/soc-ls1046a/ls1046ardb/plat_def.h 0fb5432862f668e38f9bbce3af181371cdecf0cd - arm-trusted-firmware.t234/plat/nxp/soc-ls1046a/ls1046ardb/policy.h 5da46b775851344c65928890c699d7ff047606b2 - arm-trusted-firmware.t234/plat/nxp/soc-ls1046a/ls1046aqds/platform.c 0f38703d163bd042c7827eaddb04ea092b30a478 - arm-trusted-firmware.t234/plat/nxp/soc-ls1046a/ls1046aqds/platform_def.h dc2f8422b34c58988a9114726e339491a2ed999a - arm-trusted-firmware.t234/plat/nxp/soc-ls1046a/ls1046aqds/ddr_init.c 39ce8f1f0afc76a2d1a98e86df076ef84d185da3 - arm-trusted-firmware.t234/plat/nxp/soc-ls1046a/ls1046aqds/plat_def.h 0fb5432862f668e38f9bbce3af181371cdecf0cd - arm-trusted-firmware.t234/plat/nxp/soc-ls1046a/ls1046aqds/policy.h 4ae3f678538de7fa9ef98fc1ad498fb248dd42c8 - arm-trusted-firmware.t234/plat/nxp/soc-ls1043a/soc.c 059b1c4ea6e6b540b7b01bdeb7153b4dfcacdb1b - arm-trusted-firmware.t234/plat/nxp/soc-ls1043a/soc.def 859878633110369cd34a10f6683227f6b49d0006 - arm-trusted-firmware.t234/plat/nxp/soc-ls1043a/ls1043ardb/platform.c 802c1d23237eb5cc83388950a75fa13d076b0dbf - arm-trusted-firmware.t234/plat/nxp/soc-ls1043a/ls1043ardb/platform_def.h f9f0fbba1b0d27332355fe6c4e06137ca772597b - arm-trusted-firmware.t234/plat/nxp/soc-ls1043a/ls1043ardb/ddr_init.c 60033abedd63947cfda10bf00d77951046e244c2 - arm-trusted-firmware.t234/plat/nxp/soc-ls1043a/ls1043ardb/plat_def.h 2e5c9db35f0a8446aa2a2a08f75f1488255df745 - arm-trusted-firmware.t234/plat/nxp/soc-ls1043a/ls1043ardb/policy.h 69427e6f64ce96dfa6842364a758359b8fa821c6 - arm-trusted-firmware.t234/plat/nxp/soc-ls1043a/include/ns_access.h 9b815992ca7df805a51a7cdece2e7c074a0958fb - arm-trusted-firmware.t234/plat/nxp/soc-ls1043a/include/soc.h b132e33ac02b41bfdd0b2ba27b1e5432e0f7ef08 - arm-trusted-firmware.t234/plat/nxp/soc-ls1043a/aarch64/ls1043a_helpers.S 18db50ef3d11821179318d84b45c532d3b107226 - arm-trusted-firmware.t234/plat/nxp/soc-ls1043a/aarch64/ls1043a.S 7101b940d392636f546086caa2626d9a940d9eac - arm-trusted-firmware.t234/plat/nxp/soc-ls1028a/soc.c 445f9a3d272075394e98530e1c7fb05c242f8ac0 - arm-trusted-firmware.t234/plat/nxp/soc-ls1028a/soc.def d78024dda44030bb2c60a6c6f0f31b0cdf79c510 - arm-trusted-firmware.t234/plat/nxp/soc-ls1028a/include/soc.h 859878633110369cd34a10f6683227f6b49d0006 - arm-trusted-firmware.t234/plat/nxp/soc-ls1028a/ls1028ardb/platform.c daffee032773c1420ec3c8da52a5bc9db4610aaa - arm-trusted-firmware.t234/plat/nxp/soc-ls1028a/ls1028ardb/platform_def.h 3268f346c7eb1578007b13a160c4c3d08efe2c0b - arm-trusted-firmware.t234/plat/nxp/soc-ls1028a/ls1028ardb/ddr_init.c 264c5f8c566b8945850048aceba967dd8fd1e72b - arm-trusted-firmware.t234/plat/nxp/soc-ls1028a/ls1028ardb/plat_def.h b435bed7113e72930be88bfe8f61e7da61994418 - arm-trusted-firmware.t234/plat/nxp/soc-ls1028a/ls1028ardb/policy.h 033fd89d203e44c446aba6134e51e46a7d9cf324 - arm-trusted-firmware.t234/plat/nxp/soc-ls1028a/aarch64/ls1028a_helpers.S e436d0bfcc7b7c83db0242b6ffefad0a2985a81e - arm-trusted-firmware.t234/plat/nxp/soc-ls1028a/aarch64/ls1028a.S 6edca4ab32d5c19db4706b176997f9bc4f085702 - arm-trusted-firmware.t234/plat/nxp/common/img_loadr/load_img.h 29f392d59518df56b682fde92d9adb7b7e97112c - arm-trusted-firmware.t234/plat/nxp/common/img_loadr/load_img.c e41af019a383e1c29f6cfe79b98e6812ee9e71e8 - arm-trusted-firmware.t234/plat/nxp/common/fip_handler/fuse_fip/fuse_io_storage.c 0f0ae89b60dfac27f5f00ac6c76a3c1fbbf30e8c - arm-trusted-firmware.t234/plat/nxp/common/fip_handler/fuse_fip/fuse_io.h 5898658243b0a5f981f4c051061be8d7f7ff3a7f - arm-trusted-firmware.t234/plat/nxp/common/fip_handler/common/plat_def_fip_uuid.h fc286a6d896799156121d56095076ee1765cdd18 - arm-trusted-firmware.t234/plat/nxp/common/fip_handler/common/plat_tbbr_img_def.h 9670a30b894318a795c85e5ee63edbe979b023b6 - arm-trusted-firmware.t234/plat/nxp/common/fip_handler/common/platform_oid.h 97667263a954ff77c695a93ec98b767bccf035cd - arm-trusted-firmware.t234/plat/nxp/common/fip_handler/ddr_fip/ddr_io_storage.c 96bd522ef14fb5ff8a4247a028501ef7c4367f3a - arm-trusted-firmware.t234/plat/nxp/common/fip_handler/ddr_fip/ddr_io_storage.h 9c72b3ecd5d5982e63db876f7dfefb7cbac10bea - arm-trusted-firmware.t234/plat/nxp/common/sip_svc/sip_svc.c 27f86d14fd5ce72d0aaa417b4c893049acc97e1c - arm-trusted-firmware.t234/plat/nxp/common/sip_svc/include/sipsvc.h be62a5510efe4bb10130935015fc6c12d3b02ed4 - arm-trusted-firmware.t234/plat/nxp/common/sip_svc/aarch64/sipsvc.S dcfd794664af1da07e241e7f44705b02a86955bb - arm-trusted-firmware.t234/plat/nxp/common/include/default/plat_default_def.h 2941f6674d8de1d2b22c22b91db3b63996c45d80 - arm-trusted-firmware.t234/plat/nxp/common/include/default/ch_2/soc_default_base_addr.h 764ceec06291ed492b81348c85ad37e77f32eb3a - arm-trusted-firmware.t234/plat/nxp/common/include/default/ch_2/soc_default_helper_macros.h 3b4e4e380dbab1bf4ad037c20f705b6e42b5d992 - arm-trusted-firmware.t234/plat/nxp/common/include/default/ch_3/soc_default_base_addr.h 9fecb13f267ce5c792719b3969ef19e96064d75a - arm-trusted-firmware.t234/plat/nxp/common/include/default/ch_3/soc_default_helper_macros.h 1c0daba5be7bb7055a56df067ffc86d62af94382 - arm-trusted-firmware.t234/plat/nxp/common/include/default/ch_3_2/soc_default_base_addr.h 962eb919fbdac8edf23f3cca5303772adc4690b0 - arm-trusted-firmware.t234/plat/nxp/common/include/default/ch_3_2/soc_default_helper_macros.h f71b1c56189f5904469d9e69c7b5206a4bd12454 - arm-trusted-firmware.t234/plat/nxp/common/warm_reset/plat_warm_reset.c 48b1c6e031a18037fbc338e8d3f6d0efbe6c0eca - arm-trusted-firmware.t234/plat/nxp/common/warm_reset/plat_warm_rst.h 08360ed6a8b3d051a5cad1cb6e001cf1600b7ac8 - arm-trusted-firmware.t234/plat/nxp/common/ocram/ocram.h 5e45989256d4cb803eb129882666969d3d952ac6 - arm-trusted-firmware.t234/plat/nxp/common/ocram/aarch64/ocram.S fdb986fc3069c5b8c185c58c199bc5e56a6d1655 - arm-trusted-firmware.t234/plat/nxp/common/aarch64/bl31_data.S 2c5220969ad934f5e3904f8b72774332826fb89d - arm-trusted-firmware.t234/plat/nxp/common/aarch64/ls_helpers.S 5f62419793539e6fbda55df6e2b3fa9e0b21b776 - arm-trusted-firmware.t234/plat/nxp/common/soc_errata/errata.h 2e0e20e6baddb412ce97b52be66cd32d6f8f367f - arm-trusted-firmware.t234/plat/nxp/common/soc_errata/errata_a010539.c f925bc09cf5f24b92110d8e7eb81b6948bc855b7 - arm-trusted-firmware.t234/plat/nxp/common/soc_errata/errata.c 254c94ec21e9680a13a88c1c24d884bfb8b9479c - arm-trusted-firmware.t234/plat/nxp/common/soc_errata/errata_a008850.c 492965693fd60a384d16d12de2ecd89c7f522702 - arm-trusted-firmware.t234/plat/nxp/common/soc_errata/errata_list.h 0b417a1d9881a05757a25db89aa6739867cc6cff - arm-trusted-firmware.t234/plat/nxp/common/soc_errata/errata_a009660.c c693c689d519e4697e033a4df6e7da75ecaca5b7 - arm-trusted-firmware.t234/plat/nxp/common/soc_errata/errata_a050426.c 98e57da5931c557522da93cce9fe3bfb911d2cb0 - arm-trusted-firmware.t234/plat/nxp/common/setup/ls_err.c 7159132c839b1d3568d7b7b03da30f6d03e5336e - arm-trusted-firmware.t234/plat/nxp/common/setup/ls_interrupt_mgmt.c 943a5899104297ce514e06e731e5dd9819bb7381 - arm-trusted-firmware.t234/plat/nxp/common/setup/ls_bl31_setup.c e0dfec4c8847e15aeb7a774844188ab382bdd027 - arm-trusted-firmware.t234/plat/nxp/common/setup/ls_stack_protector.c de50adad02cc0f2c2f34b32e9f3ba2aafe28571c - arm-trusted-firmware.t234/plat/nxp/common/setup/ls_common.c 6694d9cc9520a800f00a344d9cc1c534b6e88d91 - arm-trusted-firmware.t234/plat/nxp/common/setup/ls_bl2_el3_setup.c d736c2075e7e15a400e61a1db310a4d1b43bffd2 - arm-trusted-firmware.t234/plat/nxp/common/setup/ls_image_load.c 475644583f7d46ef814913dcdcfddfa706f9f9bb - arm-trusted-firmware.t234/plat/nxp/common/setup/ls_io_storage.c 9e4c6090807eed8550b5e6acaf048f870d04011b - arm-trusted-firmware.t234/plat/nxp/common/setup/include/bl31_data.h c8d60b0a7cea607dac9dc88673f41a4be9285d2e - arm-trusted-firmware.t234/plat/nxp/common/setup/include/plat_macros.S 4f9b26944e2ce37da586a62bdec3d03549edca60 - arm-trusted-firmware.t234/plat/nxp/common/setup/include/mmu_def.h 7deb5f8e4cedbb8f2f2faed66426dac4607d7f04 - arm-trusted-firmware.t234/plat/nxp/common/setup/include/ls_interrupt_mgmt.h 52c5991d0ead354cd375910f00aefc81953d5681 - arm-trusted-firmware.t234/plat/nxp/common/setup/include/plat_common.h 8094976b2b7aa5bbc113bbc852215f8e0513c202 - arm-trusted-firmware.t234/plat/nxp/common/setup/aarch64/ls_bl2_mem_params_desc.c 99de11a8e1d6aa0d67bff400dc27222a3f67bda3 - arm-trusted-firmware.t234/plat/nxp/common/tbbr/x509_tbbr.c 9b61ef7f7b42a7a2448ff56ef3a4dde77d0a3c6a - arm-trusted-firmware.t234/plat/nxp/common/tbbr/csf_tbbr.c 003b4e0c6ab04fb9bd51037a2c976e8e9a1e90dc - arm-trusted-firmware.t234/plat/nxp/common/tbbr/nxp_rotpk.S 430480949fc70686014799ff489475a1280cf188 - arm-trusted-firmware.t234/plat/nxp/common/nv_storage/plat_nv_storage.c 3a09baff31a554c63552bd51f6adea91aa05d3c1 - arm-trusted-firmware.t234/plat/nxp/common/nv_storage/plat_nv_storage.h 59d386289925e710b36aa567861c336198baf649 - arm-trusted-firmware.t234/plat/nxp/common/psci/plat_psci.c 187a0bff6625818b129b5ab42039158f8126ddb3 - arm-trusted-firmware.t234/plat/nxp/common/psci/include/plat_psci.h 11b25502ea937dd88b3986d358aad3eff9f39c71 - arm-trusted-firmware.t234/plat/nxp/common/psci/aarch64/psci_utils.S 26382eb9bdb0e3ee9280a191f107aa1549a08587 - arm-trusted-firmware.t234/plat/nxp/soc-lx2160a/soc.c c7d2d10588ae01cc411fa68c1f85c4ca4d309d25 - arm-trusted-firmware.t234/plat/nxp/soc-lx2160a/soc.def b52ff38c67c39f3dc4731b38d094152cb31b4ccd - arm-trusted-firmware.t234/plat/nxp/soc-lx2160a/lx2160aqds/platform.c c515220a4c8200d4212a8d951e49a9022e7bef2f - arm-trusted-firmware.t234/plat/nxp/soc-lx2160a/lx2160aqds/platform_def.h d07e54f7cdb54922dac5c758dd79b5adb4d9e93f - arm-trusted-firmware.t234/plat/nxp/soc-lx2160a/lx2160aqds/ddr_init.c 2881529cc073176412af0c380690bab77add20c5 - arm-trusted-firmware.t234/plat/nxp/soc-lx2160a/lx2160aqds/plat_def.h 353f72fa699efe7dc63602a04a220dd43adb85ba - arm-trusted-firmware.t234/plat/nxp/soc-lx2160a/lx2160aqds/policy.h d190cddf2210ad3d78be9924417d55be3ba19ead - arm-trusted-firmware.t234/plat/nxp/soc-lx2160a/include/soc.h 63c93614b627d3a013d8176aa4248010115eecf0 - arm-trusted-firmware.t234/plat/nxp/soc-lx2160a/aarch64/lx2160a_warm_rst.S ed1f52b1a3d4ce48135556f32d8667c7367494d8 - arm-trusted-firmware.t234/plat/nxp/soc-lx2160a/aarch64/lx2160a_helpers.S 3e9660b08500144943aee803a37816f45307d66b - arm-trusted-firmware.t234/plat/nxp/soc-lx2160a/aarch64/lx2160a.S b52ff38c67c39f3dc4731b38d094152cb31b4ccd - arm-trusted-firmware.t234/plat/nxp/soc-lx2160a/lx2160ardb/platform.c 0fe0002fb83ef9fcbbed68caa9cea3b775bfc529 - arm-trusted-firmware.t234/plat/nxp/soc-lx2160a/lx2160ardb/platform_def.h 764850c7f4814c83fc8b48d4a353c5ae2836edf6 - arm-trusted-firmware.t234/plat/nxp/soc-lx2160a/lx2160ardb/ddr_init.c f53ad9b2677286b07fdbc25c8c257e4891f15607 - arm-trusted-firmware.t234/plat/nxp/soc-lx2160a/lx2160ardb/plat_def.h e7b379eaa610c82050a0e57c194b10a794f23d91 - arm-trusted-firmware.t234/plat/nxp/soc-lx2160a/lx2160ardb/policy.h 85eb1ecc310643c5e3edb3761897745f5f4eaa6a - arm-trusted-firmware.t234/plat/nxp/soc-lx2160a/lx2162aqds/platform.c c515220a4c8200d4212a8d951e49a9022e7bef2f - arm-trusted-firmware.t234/plat/nxp/soc-lx2160a/lx2162aqds/platform_def.h e8ecd59dc257f4918515a132b0c4787bc1890021 - arm-trusted-firmware.t234/plat/nxp/soc-lx2160a/lx2162aqds/ddr_init.c 6701efe4878d9b4a7d1035d7d747426951d04e8b - arm-trusted-firmware.t234/plat/nxp/soc-lx2160a/lx2162aqds/plat_def.h ab191a3fce41d791a52ed732c81fa4c127537b13 - arm-trusted-firmware.t234/plat/nxp/soc-lx2160a/lx2162aqds/policy.h 3e8badee59dae5a5cb50149143c7dda7f98736ee - arm-trusted-firmware.t234/plat/nxp/s32/s32g274ardb2/s32cc_ncore.c f6d85e92bcf0d149a805d3bac5295351eb10b462 - arm-trusted-firmware.t234/plat/nxp/s32/s32g274ardb2/plat_bl2_el3_setup.c fa1ca4308efaa4ea4834c4255d1232e6db209978 - arm-trusted-firmware.t234/plat/nxp/s32/s32g274ardb2/plat_io_storage.c db39f4f9ba3e32a557cfac75876f11ef1b9c7bcd - arm-trusted-firmware.t234/plat/nxp/s32/s32g274ardb2/s32g2_psci.c 006d08ed17cd3bcfda367f1ef25c3d7105bdb009 - arm-trusted-firmware.t234/plat/nxp/s32/s32g274ardb2/plat_bl31_setup.c a16ba1ec284d8ee3faa797dda383f7151e490f6b - arm-trusted-firmware.t234/plat/nxp/s32/s32g274ardb2/plat_bl2_image_desc.c ae7a8ae36c2d55a614c922afbbbce658617589ee - arm-trusted-firmware.t234/plat/nxp/s32/s32g274ardb2/plat_helpers.S d7babb68656fba6a68c55db28617a9d237af8f0b - arm-trusted-firmware.t234/plat/nxp/s32/s32g274ardb2/plat_console.c 730776d77a975257e0570c5cd1900e5a19d22a5c - arm-trusted-firmware.t234/plat/nxp/s32/s32g274ardb2/s32g2_soc.c 567414cb2c0845b9b09c0c671e3f9c0506355a3e - arm-trusted-firmware.t234/plat/nxp/s32/s32g274ardb2/include/plat_macros.S e6c219f0512c0886e0a3006c3894949360b75758 - arm-trusted-firmware.t234/plat/nxp/s32/s32g274ardb2/include/plat_console.h d82dbfd4e1d8673e88d5f5c987f6e564a9e4f1af - arm-trusted-firmware.t234/plat/nxp/s32/s32g274ardb2/include/plat_helpers.h 75bfe39b28cd0e4d97458dd5aac48d8b06997364 - arm-trusted-firmware.t234/plat/nxp/s32/s32g274ardb2/include/s32cc-ncore.h a1948a4c46fdab92a5531f9aeccfa3822b1dad49 - arm-trusted-firmware.t234/plat/nxp/s32/s32g274ardb2/include/plat_io_storage.h 6bdfbea930081f082751b11bb4bc7081d7d664e9 - arm-trusted-firmware.t234/plat/nxp/s32/s32g274ardb2/include/platform_def.h 8097dc98d221517d51549e66beac9f679823f499 - arm-trusted-firmware.t234/plat/nxp/soc-ls1088a/soc.c 23f5eac9a8d36a1f2a3fc833045fcd99d915f99a - arm-trusted-firmware.t234/plat/nxp/soc-ls1088a/soc.def 08f03d57de11ed7d8871eb19cd3cd0bbdd4440cb - arm-trusted-firmware.t234/plat/nxp/soc-ls1088a/include/soc.h 764c8c04a6189e6992612672f9e41abde5000248 - arm-trusted-firmware.t234/plat/nxp/soc-ls1088a/aarch64/ls1088a_helpers.S 492d3f0900343c093e718ba1816eb94bfc3931e9 - arm-trusted-firmware.t234/plat/nxp/soc-ls1088a/aarch64/ls1088a.S 344959df5ba88c1bf9ce847e6735395045c1253c - arm-trusted-firmware.t234/plat/nxp/soc-ls1088a/ls1088aqds/platform.c 11e2d32b094714041c63cf972054b12b7c0db04e - arm-trusted-firmware.t234/plat/nxp/soc-ls1088a/ls1088aqds/platform_def.h 973eaeebcb5b1411a2dc0a2febdad7eb6401ec39 - arm-trusted-firmware.t234/plat/nxp/soc-ls1088a/ls1088aqds/ddr_init.c 3328578a5401038f068eded4991d6a403c5276b7 - arm-trusted-firmware.t234/plat/nxp/soc-ls1088a/ls1088aqds/plat_def.h a7f75b9047c373fb59a317bd6d2995d70aa0aefa - arm-trusted-firmware.t234/plat/nxp/soc-ls1088a/ls1088aqds/policy.h 344959df5ba88c1bf9ce847e6735395045c1253c - arm-trusted-firmware.t234/plat/nxp/soc-ls1088a/ls1088ardb/platform.c 11e2d32b094714041c63cf972054b12b7c0db04e - arm-trusted-firmware.t234/plat/nxp/soc-ls1088a/ls1088ardb/platform_def.h 8d86c4d246cf2dcce9fe3738a6ab3f71bce12e7a - arm-trusted-firmware.t234/plat/nxp/soc-ls1088a/ls1088ardb/ddr_init.c 9c8add03dd402a33b546ebe338030483a6e30892 - arm-trusted-firmware.t234/plat/nxp/soc-ls1088a/ls1088ardb/plat_def.h 992637daa6e8a443c6f0a176079ce731d593f699 - arm-trusted-firmware.t234/plat/nxp/soc-ls1088a/ls1088ardb/policy.h f11ea575602c3158b7e1ad94825bcf248e8a1471 - arm-trusted-firmware.t234/plat/intel/soc/stratix10/bl31_plat_setup.c 7cc610e1329bf4afdddb94016e95eed761e85959 - arm-trusted-firmware.t234/plat/intel/soc/stratix10/bl2_plat_setup.c fbf4ab727479f904a0ae30ca600e339277fc9c11 - arm-trusted-firmware.t234/plat/intel/soc/stratix10/include/s10_pinmux.h 6569c6244a923e1aa7f5ce62d1edef532b9c61e2 - arm-trusted-firmware.t234/plat/intel/soc/stratix10/include/s10_mmc.h 7035e0f4f70dc24b534fc39700b70029c3a86812 - arm-trusted-firmware.t234/plat/intel/soc/stratix10/include/s10_memory_controller.h ca947b5538ae76cc1a814e740f5905b3789ee34b - arm-trusted-firmware.t234/plat/intel/soc/stratix10/include/s10_system_manager.h 114049d9edb59211951ae880f467bed5bcbb8fc5 - arm-trusted-firmware.t234/plat/intel/soc/stratix10/include/socfpga_plat_def.h af8aff60807cfc847da0f7878aefb90994f0055c - arm-trusted-firmware.t234/plat/intel/soc/stratix10/include/s10_clock_manager.h 70667783807950b851233233349f9cadef62b70d - arm-trusted-firmware.t234/plat/intel/soc/stratix10/soc/s10_memory_controller.c 87dc55fea317913960f41df594ea406bd410da89 - arm-trusted-firmware.t234/plat/intel/soc/stratix10/soc/s10_mmc.c 6c9817bb2f2365b7bb2fd5b14b310e52045f07f6 - arm-trusted-firmware.t234/plat/intel/soc/stratix10/soc/s10_clock_manager.c 5a527e1803e29b659091fe8cf586adaf527a55dd - arm-trusted-firmware.t234/plat/intel/soc/stratix10/soc/s10_pinmux.c 3df9802ffd265380240877d4ce06de1630e2de2e - arm-trusted-firmware.t234/plat/intel/soc/common/socfpga_ros.c db54c71e5c5b4a799c3b868c4a80763f00ca5295 - arm-trusted-firmware.t234/plat/intel/soc/common/socfpga_sip_svc.c 973a09df926875ff67b7c0bec14ee9cdfa7984d5 - arm-trusted-firmware.t234/plat/intel/soc/common/socfpga_delay_timer.c 563bdce3ee933ab1225d21e6fb8be8121898d577 - arm-trusted-firmware.t234/plat/intel/soc/common/bl2_plat_mem_params_desc.c dfa9aa4e33265186439b9ea30a3b3e1ad98e387f - arm-trusted-firmware.t234/plat/intel/soc/common/socfpga_topology.c 20d809e21ceb51045c8836ce01ffa1a5c434ebc9 - arm-trusted-firmware.t234/plat/intel/soc/common/socfpga_psci.c 30a437ff9d0fd01b34a6c8b72591cb510c27e573 - arm-trusted-firmware.t234/plat/intel/soc/common/socfpga_vab.c 981ec388cd8c2458946f252c4ad0c07c89758826 - arm-trusted-firmware.t234/plat/intel/soc/common/socfpga_sip_svc_v2.c 956fc4a32c77b211933cac71db126d488f2506cd - arm-trusted-firmware.t234/plat/intel/soc/common/socfpga_image_load.c 5f2040bf0759223af0dbe1a1f2f283376da5de03 - arm-trusted-firmware.t234/plat/intel/soc/common/socfpga_storage.c 7dbe14e25d72598cb29998d493458462df2d55a1 - arm-trusted-firmware.t234/plat/intel/soc/common/lib/sha/sha.h 01b6d21ebe8e8600a2dbcaacae0a2a691e988c92 - arm-trusted-firmware.t234/plat/intel/soc/common/lib/sha/sha.c 3eb20b0d72778ce95cdd02e0732ff2485fdcbe49 - arm-trusted-firmware.t234/plat/intel/soc/common/include/plat_macros.S 5bd9b72b3c06fa06725d2a463b81c9d7f63e740c - arm-trusted-firmware.t234/plat/intel/soc/common/include/socfpga_private.h 4b7fe47ec547fc958e31edb45915a4e011ab05d7 - arm-trusted-firmware.t234/plat/intel/soc/common/include/socfpga_f2sdram_manager.h 86c8ca066d0e068ec8a41c7d92a4d873a81f50e8 - arm-trusted-firmware.t234/plat/intel/soc/common/include/socfpga_sip_svc.h e2b7d0b701a71ac73d09450369aafd5ece09c482 - arm-trusted-firmware.t234/plat/intel/soc/common/include/socfpga_vab.h a5b7e88d4a7fc28f91fb442bc05e3419e8161565 - arm-trusted-firmware.t234/plat/intel/soc/common/include/socfpga_handoff.h ffac73fe826ff46223b2ddaebd9e7206528dfe33 - arm-trusted-firmware.t234/plat/intel/soc/common/include/socfpga_emac.h 0f44530d5af64818a5a9294e49eb09bad64aaea5 - arm-trusted-firmware.t234/plat/intel/soc/common/include/platform_def.h 1c8fe883e8ed9872ba750a8698f93f25c5c79bc1 - arm-trusted-firmware.t234/plat/intel/soc/common/include/socfpga_system_manager.h a932a6814a2bf33cf8a5c7d9022f9d01e9b8d495 - arm-trusted-firmware.t234/plat/intel/soc/common/include/socfpga_ros.h 01153c80103e1b549ee0560ad2e96184b6009713 - arm-trusted-firmware.t234/plat/intel/soc/common/include/socfpga_noc.h 0cd9ab1c1424ce3e8dbbfbdf0e841ed457cf1eb6 - arm-trusted-firmware.t234/plat/intel/soc/common/include/socfpga_fcs.h a6b47226ccc9e0056e74f981965bb7e2f36a10b6 - arm-trusted-firmware.t234/plat/intel/soc/common/include/socfpga_mailbox.h 3fce61eb50d1ee098c1f21efb4ca3c187428e7e6 - arm-trusted-firmware.t234/plat/intel/soc/common/include/socfpga_reset_manager.h a5f576f9aacb4862d6a823d819ba0a7a8d337daf - arm-trusted-firmware.t234/plat/intel/soc/common/drivers/sdmmc/sdmmc.h 475a568dba4bb0acc4223b46582448b78365f15a - arm-trusted-firmware.t234/plat/intel/soc/common/drivers/sdmmc/sdmmc.c 7b0c57e6a056d46fd3ac15c2bc7d6c26cc3170c1 - arm-trusted-firmware.t234/plat/intel/soc/common/drivers/nand/nand.h 0a71e9f017db1a7a7e6a09fec5b3f1338828fa3d - arm-trusted-firmware.t234/plat/intel/soc/common/drivers/nand/nand.c c72a5bba918c6067f6a77a639c42bc477c71de2c - arm-trusted-firmware.t234/plat/intel/soc/common/drivers/wdt/watchdog.c c7d9fa36aa504a4a1ad50be887c5881f98e5e8bb - arm-trusted-firmware.t234/plat/intel/soc/common/drivers/wdt/watchdog.h 5e1e94bbc29e446ca949f263783f030b540217bd - arm-trusted-firmware.t234/plat/intel/soc/common/drivers/ddr/ddr.c 900417b29e6634b77ac22b49ceccb169c9b34154 - arm-trusted-firmware.t234/plat/intel/soc/common/drivers/ddr/ddr.h 12037ac9ed090a8e147bc1ca0b2e67d64e17a7fe - arm-trusted-firmware.t234/plat/intel/soc/common/drivers/combophy/combophy.c 3c0a4ae089fd04e2b77025a291c417f7eec6e6bf - arm-trusted-firmware.t234/plat/intel/soc/common/drivers/combophy/combophy.h 0a1a3ddc5f1b9abf82cb7c9d38754577085b29ec - arm-trusted-firmware.t234/plat/intel/soc/common/drivers/ccu/ncore_ccu.h 55eb31ef102f9298bc371c745bd67a5cca4a5f34 - arm-trusted-firmware.t234/plat/intel/soc/common/drivers/ccu/ncore_ccu.c 8a9ab96fbcd52e07cc5d4382ff896d6114fedfd1 - arm-trusted-firmware.t234/plat/intel/soc/common/drivers/qspi/cadence_qspi.h ddb49e10a46fc48891eae4abca038bface1f78bc - arm-trusted-firmware.t234/plat/intel/soc/common/drivers/qspi/cadence_qspi.c 335d48e3f1cde5a2fc45b25d453a6368dc32e1af - arm-trusted-firmware.t234/plat/intel/soc/common/aarch64/plat_helpers.S e9dd975c867215a861b35212589f5fe912fd4a36 - arm-trusted-firmware.t234/plat/intel/soc/common/aarch64/platform_common.c a6e316f17f63927cb8bc0c119e50748cfa18252a - arm-trusted-firmware.t234/plat/intel/soc/common/sip/socfpga_sip_ecc.c 374cff6db44aa21376efd07ce958831d615674c2 - arm-trusted-firmware.t234/plat/intel/soc/common/sip/socfpga_sip_fcs.c 7438041f780308ac9acf3c71f59252a986d95db5 - arm-trusted-firmware.t234/plat/intel/soc/common/soc/socfpga_emac.c 857132d16b337c4c69791ae45351bf2bb65b91f4 - arm-trusted-firmware.t234/plat/intel/soc/common/soc/socfpga_firewall.c 70683b56e2eeed75f8d9470eca64d84943e6b6b7 - arm-trusted-firmware.t234/plat/intel/soc/common/soc/socfpga_mailbox.c f855b6c6c7c34d8af5381af95e3e5f125fc3933d - arm-trusted-firmware.t234/plat/intel/soc/common/soc/socfpga_system_manager.c 3e73a72f8cb99395ecb0da6db503d4ace312d10f - arm-trusted-firmware.t234/plat/intel/soc/common/soc/socfpga_handoff.c c25bc7d107e87668eedab2b2925dfc0be1e90595 - arm-trusted-firmware.t234/plat/intel/soc/common/soc/socfpga_reset_manager.c 4e57f9c1dde8fc2aeaea547259aea91ffd0c9bfd - arm-trusted-firmware.t234/plat/intel/soc/agilex/bl31_plat_setup.c 5dade996ad4d95b1f46ab0fd483f2b9b5a346896 - arm-trusted-firmware.t234/plat/intel/soc/agilex/bl2_plat_setup.c 034cbd5a8227129496d3ced4d8becc198e256286 - arm-trusted-firmware.t234/plat/intel/soc/agilex/include/agilex_pinmux.h 83fe4eed377f80c76b5df87abe64e93c95c22eb7 - arm-trusted-firmware.t234/plat/intel/soc/agilex/include/agilex_clock_manager.h 26eca0157aa0306f7a9ff80971373375fbcddaf9 - arm-trusted-firmware.t234/plat/intel/soc/agilex/include/agilex_memory_controller.h feca9cd552d94f4e89ac38dda7a3eb8980c9e6b9 - arm-trusted-firmware.t234/plat/intel/soc/agilex/include/socfpga_plat_def.h 1fcf1ba011fbe8ea0991323bbdd55e4ed27343aa - arm-trusted-firmware.t234/plat/intel/soc/agilex/include/agilex_system_manager.h 2cbef8a830bfec6a533910d7a00ca01de32629c3 - arm-trusted-firmware.t234/plat/intel/soc/agilex/include/agilex_mmc.h 243a4ec07a4a01f52536d42fba5b684447b24e9a - arm-trusted-firmware.t234/plat/intel/soc/agilex/soc/agilex_clock_manager.c 0701baf6d3a2c6d67485a189fa41e9c33fd20ca4 - arm-trusted-firmware.t234/plat/intel/soc/agilex/soc/agilex_memory_controller.c 3c317104013baa1af66596ba8f1eef175f48843d - arm-trusted-firmware.t234/plat/intel/soc/agilex/soc/agilex_mmc.c f51c43031ec09003bb1eff431e97520ea753b6a8 - arm-trusted-firmware.t234/plat/intel/soc/agilex/soc/agilex_pinmux.c 4c2a6c526ac5b16c2ad4d7aa3617c1df0313b0c3 - arm-trusted-firmware.t234/plat/intel/soc/agilex5/bl31_plat_setup.c d4133e0c37700d93597babb953db5f419f4fc9e2 - arm-trusted-firmware.t234/plat/intel/soc/agilex5/bl2_plat_setup.c cf67d438bb10a1693672d3491e54a0db01e4c6b6 - arm-trusted-firmware.t234/plat/intel/soc/agilex5/include/agilex5_clock_manager.h 004e1579c391eb0cceae48db7e211cbe84347fa4 - arm-trusted-firmware.t234/plat/intel/soc/agilex5/include/agilex5_ddr.h 456a36f614bdbef0623b2c77ac642cb70f564cda - arm-trusted-firmware.t234/plat/intel/soc/agilex5/include/agilex5_mmc.h 484b1dedc770b4d64cbdf78e48486f95d6cbdd02 - arm-trusted-firmware.t234/plat/intel/soc/agilex5/include/agilex5_system_manager.h d6446c0e593b2cbf90b1b5d41c01020054ec52b7 - arm-trusted-firmware.t234/plat/intel/soc/agilex5/include/agilex5_memory_controller.h 12b311e58762934be36c9e3ea49b5b617ef4a0f7 - arm-trusted-firmware.t234/plat/intel/soc/agilex5/include/socfpga_plat_def.h 7855866163c2ac45d6eb3e082195742fe91f0323 - arm-trusted-firmware.t234/plat/intel/soc/agilex5/include/agilex5_pinmux.h 9791fc238afa745d4abdd7963d63e8623f99113f - arm-trusted-firmware.t234/plat/intel/soc/agilex5/include/agilex5_cache.h 65580d5fb7e0e1adc42e7be52cecf26035d81097 - arm-trusted-firmware.t234/plat/intel/soc/agilex5/include/agilex5_iossm_mailbox.h 96f31179bfe61ce5627223ec39c26f4e6ae26e53 - arm-trusted-firmware.t234/plat/intel/soc/agilex5/include/agilex5_power_manager.h f8b0ae90b97333f0be783301d4caa49f03c801bc - arm-trusted-firmware.t234/plat/intel/soc/agilex5/soc/agilex5_memory_controller.c 3c6636db11dfab62238b895efda7748d02171f57 - arm-trusted-firmware.t234/plat/intel/soc/agilex5/soc/agilex5_cache.S 230e1c905651121fab070148430f6ebf5400ab09 - arm-trusted-firmware.t234/plat/intel/soc/agilex5/soc/agilex5_clock_manager.c 8a6b32556664cc7ae89990d8d967b9213f9428dc - arm-trusted-firmware.t234/plat/intel/soc/agilex5/soc/agilex5_pinmux.c 8baee4b19ce961c4b814eab5ba26dc7b07e769cc - arm-trusted-firmware.t234/plat/intel/soc/agilex5/soc/agilex5_power_manager.c 8a8f15f8a014fbb38f994dfcf21eb1e116900cf3 - arm-trusted-firmware.t234/plat/intel/soc/agilex5/soc/agilex5_ddr.c 3934c4c848a1f6a3c32ba9c994528b10976b59f0 - arm-trusted-firmware.t234/plat/intel/soc/agilex5/soc/agilex5_iossm_mailbox.c 267a60e4710ff9f273e1888b27a10a1f2e2b674f - arm-trusted-firmware.t234/plat/intel/soc/agilex5/soc/agilex5_mmc.c e8756e13cdf5a3803ec111ad4f36ff3557db2f30 - arm-trusted-firmware.t234/plat/intel/soc/n5x/bl31_plat_setup.c 97262dde07774e3f21b3e6cd615135910a58ceea - arm-trusted-firmware.t234/plat/intel/soc/n5x/include/n5x_clock_manager.h 5435181a710810ef4a0623cb7c964afde19142c8 - arm-trusted-firmware.t234/plat/intel/soc/n5x/include/n5x_system_manager.h c5c3fc5999d99ae049decf695f9dc2b909f25d5a - arm-trusted-firmware.t234/plat/intel/soc/n5x/include/socfpga_plat_def.h e25e694933ab64edbafcb8b99016edd48936849c - arm-trusted-firmware.t234/plat/intel/soc/n5x/soc/n5x_clock_manager.c 01a6a64f373bfeca1de0508f1ade0462d91c5d23 - arm-trusted-firmware.t234/bl2u/bl2u.ld.S e5c00987d945936ea61d9f9abb6c38594917a392 - arm-trusted-firmware.t234/bl2u/bl2u_main.c 1df1aad13ba7e2ed5cb1ae4a6200d169a1715578 - arm-trusted-firmware.t234/bl2u/aarch64/bl2u_entrypoint.S 0227b9aa908915e602a5839d4229f7832e99c76b - arm-trusted-firmware.t234/bl2u/aarch32/bl2u_entrypoint.S 20113f49289a58e42b03525ea9427f94e093f58f - arm-trusted-firmware.t234/bl1/bl1_private.h b253e87c4f7dd2623d20cc9694f4948cefd07acb - arm-trusted-firmware.t234/bl1/bl1_fwu.c 83d6724ffc1d3168d8c1da86beffde1d5b3e7922 - arm-trusted-firmware.t234/bl1/bl1_main.c a3088cb3308f26badbe3d24017750f37b76470f5 - arm-trusted-firmware.t234/bl1/bl1.ld.S 587ecb158bf5940ddc7f95250a8802df39806ef0 - arm-trusted-firmware.t234/bl1/aarch64/bl1_context_mgmt.c 5c5e2355ca375fa98ae30f56bcf2f57ea7056c71 - arm-trusted-firmware.t234/bl1/aarch64/bl1_entrypoint.S 02f9462536385b5f81c2c9a40b7d4472fa041529 - arm-trusted-firmware.t234/bl1/aarch64/bl1_exceptions.S 284a0afe619de982f2bd1d4b1c625831ef7b3b5e - arm-trusted-firmware.t234/bl1/aarch64/bl1_arch_setup.c 095ac3b2483b968f263618a4bd6cdd8d6f66d321 - arm-trusted-firmware.t234/bl1/aarch32/bl1_context_mgmt.c caf76eacd5e8708391bbf7db7315acad4b89c7fd - arm-trusted-firmware.t234/bl1/aarch32/bl1_entrypoint.S bea69e37646041aff3c96bf107e1db48f382a1b4 - arm-trusted-firmware.t234/bl1/aarch32/bl1_exceptions.S 8d6e2008e280f848fb14017ba5ba559a10724421 - arm-trusted-firmware.t234/bl1/aarch32/bl1_arch_setup.c 85b2afc44851dc57e79c264641730d0e2eca3016 - arm-trusted-firmware.t234/bl1/tbbr/tbbr_img_desc.c 2c87153926f8a458cffc9a435e15571ba721c2fa - arm-trusted-firmware.t234/licenses/LICENSE.MIT 4b776badf454a3bcf0cc1524d1b63fd9871f6c8c - arm-trusted-firmware.t234/bl2/bl2_el3.ld.S 88bbfcb3f9b827bdab7f16cdfe892b2aa1470576 - arm-trusted-firmware.t234/bl2/bl2_image_load_v2.c 991c05cee7a30247e2edcade94405aef95480121 - arm-trusted-firmware.t234/bl2/bl2_private.h 99df04b45b026a439c20349ab80458e960dfc23c - arm-trusted-firmware.t234/bl2/bl2.ld.S f9af212975b69e0fe4006e2c0d6ec7d1519c473a - arm-trusted-firmware.t234/bl2/bl2_main.c 62ef4221f56feaf0907dbe17cad47a9bab86bf03 - arm-trusted-firmware.t234/bl2/aarch64/bl2_el3_exceptions.S 777576955f2ae3959035c33791a33835fe6578f4 - arm-trusted-firmware.t234/bl2/aarch64/bl2_rme_entrypoint.S a34048b4cc67bca14b7594e2c1a53b4c0376d779 - arm-trusted-firmware.t234/bl2/aarch64/bl2_el3_entrypoint.S c426fa02b617581d2495667828e9430110cf713a - arm-trusted-firmware.t234/bl2/aarch64/bl2_entrypoint.S 247751d71fb2863f439cc217ac18c219dbf15453 - arm-trusted-firmware.t234/bl2/aarch64/bl2_run_next_image.S 776c1699268eee43ba9230cb7e785e298e56a233 - arm-trusted-firmware.t234/bl2/aarch64/bl2_arch_setup.c 44692bdbcbccddc6c4fc022d5028cacb8842376a - arm-trusted-firmware.t234/bl2/aarch32/bl2_el3_exceptions.S aac463ba1d35408d94f960ade6d2db95d68455ab - arm-trusted-firmware.t234/bl2/aarch32/bl2_el3_entrypoint.S 1f72bb253974087b2a555dc3a89651f7ad462387 - arm-trusted-firmware.t234/bl2/aarch32/bl2_entrypoint.S f64693060b1ef904b4abfc04b8480a0f458494c5 - arm-trusted-firmware.t234/bl2/aarch32/bl2_run_next_image.S 2534665e628b7612c3896fed4e659f3351601296 - arm-trusted-firmware.t234/bl2/aarch32/bl2_arch_setup.c Change-Id: I9608c8eef92ca97bd86622b4da4b78812ace8fee
This commit is contained in:
91
arm-trusted-firmware.t234/.checkpatch.conf
Normal file
91
arm-trusted-firmware.t234/.checkpatch.conf
Normal file
@@ -0,0 +1,91 @@
|
||||
#
|
||||
# Copyright (c) 2016-2019, ARM Limited and Contributors. All rights reserved.
|
||||
#
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
#
|
||||
|
||||
#
|
||||
# Configure how the Linux checkpatch script should be invoked in the context of
|
||||
# the Trusted Firmware source tree.
|
||||
#
|
||||
|
||||
# This is not Linux so don't expect a Linux tree!
|
||||
--no-tree
|
||||
|
||||
# The Linux kernel expects the SPDX license tag in the first line of each file.
|
||||
# We don't follow this in the Trusted Firmware.
|
||||
--ignore SPDX_LICENSE_TAG
|
||||
|
||||
# This clarifes the lines indications in the report.
|
||||
#
|
||||
# E.g.:
|
||||
# Without this option, we have the following output:
|
||||
# #333: FILE: drivers/arm/gic/arm_gic.c:160:
|
||||
# So we have 2 lines indications (333 and 160), which is confusing.
|
||||
# We only care about the position in the source file.
|
||||
#
|
||||
# With this option, it becomes:
|
||||
# drivers/arm/gic/arm_gic.c:160:
|
||||
--showfile
|
||||
|
||||
# Don't show some messages like the list of ignored types or the suggestion to
|
||||
# use "--fix" or report changes to the maintainers.
|
||||
--quiet
|
||||
|
||||
#
|
||||
# Ignore the following message types, as they don't necessarily make sense in
|
||||
# the context of the Trusted Firmware.
|
||||
#
|
||||
|
||||
# COMPLEX_MACRO generates false positives.
|
||||
--ignore COMPLEX_MACRO
|
||||
|
||||
# Commit messages might contain a Gerrit Change-Id.
|
||||
--ignore GERRIT_CHANGE_ID
|
||||
|
||||
# Do not check the format of commit messages, as Gerrit's merge commits do not
|
||||
# preserve it.
|
||||
--ignore GIT_COMMIT_ID
|
||||
|
||||
# FILE_PATH_CHANGES reports this kind of message:
|
||||
# "added, moved or deleted file(s), does MAINTAINERS need updating?"
|
||||
# We do not use this MAINTAINERS file process in TF.
|
||||
--ignore FILE_PATH_CHANGES
|
||||
|
||||
# AVOID_EXTERNS reports this kind of messages:
|
||||
# "externs should be avoided in .c files"
|
||||
# We don't follow this convention in TF.
|
||||
--ignore AVOID_EXTERNS
|
||||
|
||||
# NEW_TYPEDEFS reports this kind of messages:
|
||||
# "do not add new typedefs"
|
||||
# We allow adding new typedefs in TF.
|
||||
--ignore NEW_TYPEDEFS
|
||||
|
||||
# Avoid "Does not appear to be a unified-diff format patch" message
|
||||
--ignore NOT_UNIFIED_DIFF
|
||||
|
||||
# VOLATILE reports this kind of messages:
|
||||
# "Use of volatile is usually wrong: see Documentation/volatile-considered-harmful.txt"
|
||||
# We allow the usage of the volatile keyword in TF.
|
||||
--ignore VOLATILE
|
||||
|
||||
# BRACES reports this kind of messages:
|
||||
# braces {} are not necessary for any arm of this statement
|
||||
--ignore BRACES
|
||||
|
||||
# PREFER_KERNEL_TYPES reports this kind of messages (when using --strict):
|
||||
# "Prefer kernel type 'u32' over 'uint32_t'"
|
||||
--ignore PREFER_KERNEL_TYPES
|
||||
|
||||
# USLEEP_RANGE reports this kind of messages (when using --strict):
|
||||
# "usleep_range is preferred over udelay; see Documentation/timers/timers-howto.txt"
|
||||
--ignore USLEEP_RANGE
|
||||
|
||||
# COMPARISON_TO_NULL reports this kind of messages (when using --strict):
|
||||
# Comparison to NULL could be written ""
|
||||
--ignore COMPARISON_TO_NULL
|
||||
|
||||
# UNNECESSARY_PARENTHESES reports this kind of messages (when using --strict):
|
||||
# Unnecessary parentheses around ""
|
||||
--ignore UNNECESSARY_PARENTHESES
|
||||
72
arm-trusted-firmware.t234/.commitlintrc.js
Normal file
72
arm-trusted-firmware.t234/.commitlintrc.js
Normal file
@@ -0,0 +1,72 @@
|
||||
/*
|
||||
* Copyright (c) 2021-2024, Arm Limited. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
/* eslint-env es6 */
|
||||
|
||||
"use strict";
|
||||
|
||||
import fs from "fs";
|
||||
import rules from "@commitlint/rules";
|
||||
import yaml from "js-yaml";
|
||||
|
||||
/*
|
||||
* The types and scopes accepted by both Commitlint and Commitizen are defined by the changelog
|
||||
* configuration file - `changelog.yaml` - as they decide which section of the changelog commits
|
||||
* with a given type and scope are placed in.
|
||||
*/
|
||||
|
||||
let changelog;
|
||||
|
||||
try {
|
||||
const contents = fs.readFileSync("changelog.yaml", "utf8");
|
||||
|
||||
changelog = yaml.load(contents);
|
||||
} catch (err) {
|
||||
console.log(err);
|
||||
|
||||
throw err;
|
||||
}
|
||||
|
||||
function getTypes(sections) {
|
||||
return sections.map(section => section.type)
|
||||
}
|
||||
|
||||
function getScopes(subsections) {
|
||||
return subsections.flatMap(subsection => {
|
||||
const scope = subsection.scope ? [subsection.scope] : [];
|
||||
const subscopes = getScopes(subsection.subsections || []);
|
||||
|
||||
return scope.concat(subscopes);
|
||||
})
|
||||
};
|
||||
|
||||
const types = getTypes(changelog.sections).sort(); /* Sort alphabetically */
|
||||
const scopes = getScopes(changelog.subsections).sort(); /* Sort alphabetically */
|
||||
|
||||
export default {
|
||||
extends: ["@commitlint/config-conventional"],
|
||||
plugins: [
|
||||
{
|
||||
rules: {
|
||||
"signed-off-by-exists": rules["trailer-exists"],
|
||||
"change-id-exists": rules["trailer-exists"],
|
||||
},
|
||||
},
|
||||
],
|
||||
rules: {
|
||||
"header-max-length": [1, "always", 50], /* Warning */
|
||||
"body-max-line-length": [1, "always", 72], /* Warning */
|
||||
|
||||
"change-id-exists": [1, "always", "Change-Id:"], /* Warning */
|
||||
"signed-off-by-exists": [1, "always", "Signed-off-by:"], /* Warning */
|
||||
|
||||
"type-case": [2, "always", "lower-case"], /* Error */
|
||||
"type-enum": [2, "always", types], /* Error */
|
||||
|
||||
"scope-case": [2, "always", "lower-case"], /* Error */
|
||||
"scope-enum": [1, "always", scopes] /* Warning */
|
||||
},
|
||||
};
|
||||
4
arm-trusted-firmware.t234/.ctags
Normal file
4
arm-trusted-firmware.t234/.ctags
Normal file
@@ -0,0 +1,4 @@
|
||||
--regex-Asm=/^func[ \t]+([a-zA-Z_0-9]+)$/\1/l,function/
|
||||
--regex-Asm=/^.*\.macro[ \t]+([a-zA-Z_0-9]+)$/\1/m,macro/
|
||||
--regex-Asm=/^vector_entry[ \t]+([a-zA-Z_0-9]+)$/\1/l,function/
|
||||
--regex-Asm=/^.equ[ \t]+([a-zA-Z_0-9]+),/\1/l,name/
|
||||
15
arm-trusted-firmware.t234/.cz-adapter.cjs
Normal file
15
arm-trusted-firmware.t234/.cz-adapter.cjs
Normal file
@@ -0,0 +1,15 @@
|
||||
/*
|
||||
* Copyright (c) 2024, Arm Limited. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
/*
|
||||
* A workaround for:
|
||||
*
|
||||
* https://github.com/conventional-changelog/commitlint/issues/3949
|
||||
*/
|
||||
|
||||
exports.prompter = async (inquirerIns, commit) => {
|
||||
; (await import('@commitlint/cz-commitlint')).prompter(inquirerIns, commit)
|
||||
}
|
||||
3
arm-trusted-firmware.t234/.cz.json
Normal file
3
arm-trusted-firmware.t234/.cz.json
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"path": "./.cz-adapter.cjs"
|
||||
}
|
||||
75
arm-trusted-firmware.t234/.editorconfig
Normal file
75
arm-trusted-firmware.t234/.editorconfig
Normal file
@@ -0,0 +1,75 @@
|
||||
#
|
||||
# Copyright (c) 2017-2024, Arm Limited and Contributors. All rights reserved.
|
||||
#
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
#
|
||||
|
||||
# Trusted Firmware-A Coding style spec for editors.
|
||||
|
||||
# References:
|
||||
# [EC] http://editorconfig.org/
|
||||
# [CONT] contributing.rst
|
||||
# [LCS] Linux Coding Style
|
||||
# (https://www.kernel.org/doc/html/v4.10/process/coding-style.html)
|
||||
# [PEP8] Style Guide for Python Code
|
||||
# (https://www.python.org/dev/peps/pep-0008)
|
||||
|
||||
|
||||
root = true
|
||||
|
||||
# set default to match [LCS] .c/.h settings.
|
||||
# This will also apply to .S, .mk, .sh, Makefile, .dts, etc.
|
||||
[*]
|
||||
# Not specified, but fits current ARM-TF sources.
|
||||
charset = utf-8
|
||||
|
||||
# Not specified, but implicit for "LINUX coding style".
|
||||
end_of_line = lf
|
||||
|
||||
# [LCS] Chapter 1: Indentation
|
||||
# "and thus indentations are also 8 characters"
|
||||
indent_size = 8
|
||||
|
||||
# [LCS] Chapter 1: Indentation
|
||||
# "Outside of comments,...spaces are never used for indentation"
|
||||
indent_style = tab
|
||||
|
||||
# Not specified by [LCS], but sensible
|
||||
insert_final_newline = true
|
||||
|
||||
# [LCS] Chapter 2: Breaking long lines and strings
|
||||
# "The limit on the length of lines is 100 columns"
|
||||
# This is a "soft" requirement for Arm-TF, and should not be the sole
|
||||
# reason for changes.
|
||||
max_line_length = 100
|
||||
|
||||
# [LCS] Chapter 1: Indentation
|
||||
# "Tabs are 8 characters"
|
||||
tab_width = 8
|
||||
|
||||
# [LCS] Chapter 1: Indentation
|
||||
# "Get a decent editor and don't leave whitespace at the end of lines."
|
||||
# [LCS] Chapter 3.1: Spaces
|
||||
# "Do not leave trailing whitespace at the ends of lines."
|
||||
trim_trailing_whitespace = true
|
||||
|
||||
|
||||
# Adjustment for ReStructuredText (RST) documentation
|
||||
[*.{rst}]
|
||||
indent_size = 4
|
||||
indent_style = space
|
||||
|
||||
|
||||
# Adjustment for python which prefers a different style
|
||||
[*.py]
|
||||
# [PEP8] Indentation
|
||||
# "Use 4 spaces per indentation level."
|
||||
indent_size = 4
|
||||
indent_style = space
|
||||
|
||||
# [PEP8] Maximum Line Length
|
||||
# "Limit all lines to a maximum of 79 characters."
|
||||
max_line_length = 79
|
||||
|
||||
[.git/COMMIT_EDITMSG]
|
||||
max_line_length = 72
|
||||
5
arm-trusted-firmware.t234/.gitreview
Normal file
5
arm-trusted-firmware.t234/.gitreview
Normal file
@@ -0,0 +1,5 @@
|
||||
[gerrit]
|
||||
host=review.trustedfirmware.org
|
||||
port=29418
|
||||
project=TF-A/trusted-firmware-a
|
||||
defaultbranch=integration
|
||||
4
arm-trusted-firmware.t234/.husky/commit-msg
Executable file
4
arm-trusted-firmware.t234/.husky/commit-msg
Executable file
@@ -0,0 +1,4 @@
|
||||
#!/bin/sh
|
||||
|
||||
"$(dirname "$0")/commit-msg.gerrit" "$@"
|
||||
"$(dirname "$0")/commit-msg.commitlint" "$@"
|
||||
3
arm-trusted-firmware.t234/.husky/commit-msg.commitlint
Executable file
3
arm-trusted-firmware.t234/.husky/commit-msg.commitlint
Executable file
@@ -0,0 +1,3 @@
|
||||
#!/bin/sh
|
||||
|
||||
npx --no-install commitlint --edit "$1"
|
||||
194
arm-trusted-firmware.t234/.husky/commit-msg.gerrit
Executable file
194
arm-trusted-firmware.t234/.husky/commit-msg.gerrit
Executable file
@@ -0,0 +1,194 @@
|
||||
#!/bin/sh
|
||||
# From Gerrit Code Review 2.14.20
|
||||
#
|
||||
# Part of Gerrit Code Review (https://www.gerritcodereview.com/)
|
||||
#
|
||||
# Copyright (C) 2009 The Android Open Source Project
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
unset GREP_OPTIONS
|
||||
|
||||
CHANGE_ID_AFTER="Bug|Depends-On|Issue|Test|Feature|Fixes|Fixed"
|
||||
MSG="$1"
|
||||
|
||||
# Check for, and add if missing, a unique Change-Id
|
||||
#
|
||||
add_ChangeId() {
|
||||
clean_message=`sed -e '
|
||||
/^diff --git .*/{
|
||||
s///
|
||||
q
|
||||
}
|
||||
/^Signed-off-by:/d
|
||||
/^#/d
|
||||
' "$MSG" | git stripspace`
|
||||
if test -z "$clean_message"
|
||||
then
|
||||
return
|
||||
fi
|
||||
|
||||
# Do not add Change-Id to temp commits
|
||||
if echo "$clean_message" | head -1 | grep -q '^\(fixup\|squash\)!'
|
||||
then
|
||||
return
|
||||
fi
|
||||
|
||||
if test "false" = "`git config --bool --get gerrit.createChangeId`"
|
||||
then
|
||||
return
|
||||
fi
|
||||
|
||||
# Does Change-Id: already exist? if so, exit (no change).
|
||||
if grep -i '^Change-Id:' "$MSG" >/dev/null
|
||||
then
|
||||
return
|
||||
fi
|
||||
|
||||
id=`_gen_ChangeId`
|
||||
T="$MSG.tmp.$$"
|
||||
AWK=awk
|
||||
if [ -x /usr/xpg4/bin/awk ]; then
|
||||
# Solaris AWK is just too broken
|
||||
AWK=/usr/xpg4/bin/awk
|
||||
fi
|
||||
|
||||
# Get core.commentChar from git config or use default symbol
|
||||
commentChar=`git config --get core.commentChar`
|
||||
commentChar=${commentChar:-#}
|
||||
|
||||
# How this works:
|
||||
# - parse the commit message as (textLine+ blankLine*)*
|
||||
# - assume textLine+ to be a footer until proven otherwise
|
||||
# - exception: the first block is not footer (as it is the title)
|
||||
# - read textLine+ into a variable
|
||||
# - then count blankLines
|
||||
# - once the next textLine appears, print textLine+ blankLine* as these
|
||||
# aren't footer
|
||||
# - in END, the last textLine+ block is available for footer parsing
|
||||
$AWK '
|
||||
BEGIN {
|
||||
if (match(ENVIRON["OS"], "Windows")) {
|
||||
RS="\r?\n" # Required on recent Cygwin
|
||||
}
|
||||
# while we start with the assumption that textLine+
|
||||
# is a footer, the first block is not.
|
||||
isFooter = 0
|
||||
footerComment = 0
|
||||
blankLines = 0
|
||||
}
|
||||
|
||||
# Skip lines starting with commentChar without any spaces before it.
|
||||
/^'"$commentChar"'/ { next }
|
||||
|
||||
# Skip the line starting with the diff command and everything after it,
|
||||
# up to the end of the file, assuming it is only patch data.
|
||||
# If more than one line before the diff was empty, strip all but one.
|
||||
/^diff --git / {
|
||||
blankLines = 0
|
||||
while (getline) { }
|
||||
next
|
||||
}
|
||||
|
||||
# Count blank lines outside footer comments
|
||||
/^$/ && (footerComment == 0) {
|
||||
blankLines++
|
||||
next
|
||||
}
|
||||
|
||||
# Catch footer comment
|
||||
/^\[[a-zA-Z0-9-]+:/ && (isFooter == 1) {
|
||||
footerComment = 1
|
||||
}
|
||||
|
||||
/]$/ && (footerComment == 1) {
|
||||
footerComment = 2
|
||||
}
|
||||
|
||||
# We have a non-blank line after blank lines. Handle this.
|
||||
(blankLines > 0) {
|
||||
print lines
|
||||
for (i = 0; i < blankLines; i++) {
|
||||
print ""
|
||||
}
|
||||
|
||||
lines = ""
|
||||
blankLines = 0
|
||||
isFooter = 1
|
||||
footerComment = 0
|
||||
}
|
||||
|
||||
# Detect that the current block is not the footer
|
||||
(footerComment == 0) && (!/^\[?[a-zA-Z0-9-]+:/ || /^[a-zA-Z0-9-]+:\/\//) {
|
||||
isFooter = 0
|
||||
}
|
||||
|
||||
{
|
||||
# We need this information about the current last comment line
|
||||
if (footerComment == 2) {
|
||||
footerComment = 0
|
||||
}
|
||||
if (lines != "") {
|
||||
lines = lines "\n";
|
||||
}
|
||||
lines = lines $0
|
||||
}
|
||||
|
||||
# Footer handling:
|
||||
# If the last block is considered a footer, splice in the Change-Id at the
|
||||
# right place.
|
||||
# Look for the right place to inject Change-Id by considering
|
||||
# CHANGE_ID_AFTER. Keys listed in it (case insensitive) come first,
|
||||
# then Change-Id, then everything else (eg. Signed-off-by:).
|
||||
#
|
||||
# Otherwise just print the last block, a new line and the Change-Id as a
|
||||
# block of its own.
|
||||
END {
|
||||
unprinted = 1
|
||||
if (isFooter == 0) {
|
||||
print lines "\n"
|
||||
lines = ""
|
||||
}
|
||||
changeIdAfter = "^(" tolower("'"$CHANGE_ID_AFTER"'") "):"
|
||||
numlines = split(lines, footer, "\n")
|
||||
for (line = 1; line <= numlines; line++) {
|
||||
if (unprinted && match(tolower(footer[line]), changeIdAfter) != 1) {
|
||||
unprinted = 0
|
||||
print "Change-Id: I'"$id"'"
|
||||
}
|
||||
print footer[line]
|
||||
}
|
||||
if (unprinted) {
|
||||
print "Change-Id: I'"$id"'"
|
||||
}
|
||||
}' "$MSG" > "$T" && mv "$T" "$MSG" || rm -f "$T"
|
||||
}
|
||||
_gen_ChangeIdInput() {
|
||||
echo "tree `git write-tree`"
|
||||
if parent=`git rev-parse "HEAD^0" 2>/dev/null`
|
||||
then
|
||||
echo "parent $parent"
|
||||
fi
|
||||
echo "author `git var GIT_AUTHOR_IDENT`"
|
||||
echo "committer `git var GIT_COMMITTER_IDENT`"
|
||||
echo
|
||||
printf '%s' "$clean_message"
|
||||
}
|
||||
_gen_ChangeId() {
|
||||
_gen_ChangeIdInput |
|
||||
git hash-object -t commit --stdin
|
||||
}
|
||||
|
||||
|
||||
add_ChangeId
|
||||
3
arm-trusted-firmware.t234/.husky/pre-commit
Executable file
3
arm-trusted-firmware.t234/.husky/pre-commit
Executable file
@@ -0,0 +1,3 @@
|
||||
#!/bin/sh
|
||||
|
||||
"$(dirname "$0")/pre-commit.copyright" "$@"
|
||||
91
arm-trusted-firmware.t234/.husky/pre-commit.copyright
Executable file
91
arm-trusted-firmware.t234/.husky/pre-commit.copyright
Executable file
@@ -0,0 +1,91 @@
|
||||
#!/bin/bash
|
||||
|
||||
# A hook script that checks if files staged for commit have updated Arm copyright year.
|
||||
# In case they are not - updates the years and prompts user to add them to the change.
|
||||
# This hook is called on "git commit" after changes have been staged, but before commit
|
||||
# message has to be provided.
|
||||
|
||||
RED="\033[00;31m"
|
||||
YELLOW="\033[00;33m"
|
||||
BLANK="\033[00;00m"
|
||||
|
||||
FILES=`git diff --cached --name-only HEAD`
|
||||
YEAR_NOW=`date +"%Y"`
|
||||
|
||||
YEAR_RGX="[0-9][0-9][0-9][0-9]"
|
||||
ARM_RGX="\(ARM\|Arm\|arm\)"
|
||||
|
||||
exit_code=0
|
||||
|
||||
PLATPROV=
|
||||
ORG=`echo "$GIT_AUTHOR_EMAIL" | awk -F '[@]' '{ print $2;}'`
|
||||
|
||||
case $ORG in
|
||||
amd.com)
|
||||
PLATPROV="Advanced Micro Devices, Inc. All rights reserved."
|
||||
;;
|
||||
*arm.com)
|
||||
PLATPROV="$ARM_RGX"
|
||||
;;
|
||||
*)
|
||||
;;
|
||||
esac
|
||||
|
||||
function user_warning() {
|
||||
echo -e "Copyright of $RED$FILE$BLANK is out of date/incorrect"
|
||||
echo -e "Updated copyright to"
|
||||
grep -nr "opyright.*$YEAR_RGX.*$PLATPROV" "$FILE"
|
||||
echo
|
||||
}
|
||||
|
||||
while read -r FILE; do
|
||||
if [ -z "$FILE" ]
|
||||
then
|
||||
break
|
||||
fi
|
||||
|
||||
# Check if copyright header exists for the org
|
||||
if ! grep "opyright.*$YEAR_RGX.*$PLATPROV" "$FILE">/dev/null 2>&1 && [[ $ORG != *arm* ]]
|
||||
then
|
||||
echo -e "Copyright header ""$RED""$PLATPROV""$BLANK"" is missing in ""$YELLOW""$FILE""$BLANK"
|
||||
fi
|
||||
|
||||
# Check if the copyright year is updated for the org and update it
|
||||
if [ ! -z "$PLATPROV" ]
|
||||
then
|
||||
if ! grep "opyright.*$YEAR_NOW.*$PLATPROV" "$FILE">/dev/null 2>&1
|
||||
then
|
||||
# If it is "from_date - to_date" type of entry - change to_date entry.
|
||||
if grep "opyright.*$YEAR_RGX.*-.*$YEAR_RGX.*$PLATPROV" "$FILE" >/dev/null 2>&1
|
||||
then
|
||||
exit_code=1
|
||||
sed -i "s/\(opyright.*\)$YEAR_RGX\(.*$PLATPROV\)/\1$(date +"%Y")\2/" $FILE
|
||||
user_warning
|
||||
# If it is single "date" type of entry - add the copyright extension to current year.
|
||||
elif grep "opyright.*$YEAR_RGX.*$PLATPROV" "$FILE" >/dev/null 2>&1
|
||||
then
|
||||
exit_code=1
|
||||
sed -i "s/\(opyright.*$YEAR_RGX\)\(.*$PLATPROV\)/\1-$(date +"%Y")\2/" $FILE
|
||||
user_warning
|
||||
fi
|
||||
|
||||
# Even if the year is correct - verify that Arm copyright is formatted correctly.
|
||||
if [[ $ORG == *arm* ]]
|
||||
then
|
||||
if grep "opyright.*\(ARM\|arm\)" "$FILE">/dev/null 2>&1
|
||||
then
|
||||
exit_code=1
|
||||
sed -i "s/\(opyright.*\)\(ARM\|arm\)/\1Arm/" $FILE
|
||||
user_warning
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
done <<< "$FILES"
|
||||
|
||||
if [ $exit_code -eq 1 ]
|
||||
then
|
||||
echo -e "$RED""Please stage updated files$BLANK before commiting or use$YELLOW git commit --no-verify$BLANK to skip copyright check"
|
||||
fi
|
||||
exit $exit_code
|
||||
8
arm-trusted-firmware.t234/.husky/prepare-commit-msg
Executable file
8
arm-trusted-firmware.t234/.husky/prepare-commit-msg
Executable file
@@ -0,0 +1,8 @@
|
||||
#!/bin/sh
|
||||
|
||||
# shellcheck source=./_/husky.sh
|
||||
. "$(dirname "$0")/_/husky.sh"
|
||||
|
||||
if ! git config --get tf-a.disableCommitizen > /dev/null; then
|
||||
"$(dirname "$0")/prepare-commit-msg.cz" "$@"
|
||||
fi
|
||||
28
arm-trusted-firmware.t234/.husky/prepare-commit-msg.cz
Executable file
28
arm-trusted-firmware.t234/.husky/prepare-commit-msg.cz
Executable file
@@ -0,0 +1,28 @@
|
||||
#!/bin/bash
|
||||
|
||||
file="$1"
|
||||
type="$2"
|
||||
|
||||
if [ -z "$type" ]; then # only run on new commits
|
||||
#
|
||||
# Save any commit message trailers generated by Git.
|
||||
#
|
||||
|
||||
trailers=$(git interpret-trailers --parse "$file")
|
||||
|
||||
#
|
||||
# Execute the Commitizen hook.
|
||||
#
|
||||
|
||||
(exec < "/dev/tty" && npx --no-install git-cz --hook) || true
|
||||
|
||||
#
|
||||
# Restore any trailers that Commitizen might have overwritten.
|
||||
#
|
||||
|
||||
printf "\n" >> "$file"
|
||||
|
||||
while IFS= read -r trailer; do
|
||||
git interpret-trailers --in-place --trailer "$trailer" "$file"
|
||||
done <<< "$trailers"
|
||||
fi
|
||||
9
arm-trusted-firmware.t234/.nspect-allowlist.toml
Normal file
9
arm-trusted-firmware.t234/.nspect-allowlist.toml
Normal file
@@ -0,0 +1,9 @@
|
||||
version = "1.0.0"
|
||||
[oss]
|
||||
|
||||
[oss.excluded]
|
||||
|
||||
[[oss.excluded.directories]]
|
||||
paths = ['tools/amlogic/', 'tools/cert_create/', 'tools/conventional-changelog-tf-a/', 'tools/encrypt_fw/', 'tools/marvell/', 'tools/memory/', 'tools/nxp/', 'tools/renesas/', 'tools/sptool/', 'tools/stm32image/', 'services/spd/pncd/', 'services/spd/tlkd/', 'services/spd/trusty/', 'services/spd/tspd/', 'plat/allwinner/', 'plat/amlogic/', 'plat/arm/', 'plat/aspeed/', 'plat/brcm/', 'plat/hisilicon/', 'plat/imx/', 'plat/intel/', 'plat/marvell/', 'plat/mediatek/', 'plat/nuvoton/', 'plat/nxp/', 'plat/qemu/', 'plat/qti/', 'plat/renesas/', 'plat/rockchip/', 'plat/rpi/', 'plat/socionext/', 'plat/st/', 'plat/ti/', 'plat/xilinx/']
|
||||
comment = 'unused packages'
|
||||
|
||||
1
arm-trusted-firmware.t234/.nvmrc
Normal file
1
arm-trusted-firmware.t234/.nvmrc
Normal file
@@ -0,0 +1 @@
|
||||
v20.11.1
|
||||
31
arm-trusted-firmware.t234/.readthedocs.yaml
Normal file
31
arm-trusted-firmware.t234/.readthedocs.yaml
Normal file
@@ -0,0 +1,31 @@
|
||||
# Copyright (c) 2023-2024, Arm Limited. All rights reserved
|
||||
#
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
#
|
||||
# Configuration file for the readthedocs deploy
|
||||
# Available at https://trustedfirmware-a.readthedocs.io/en/latest/
|
||||
|
||||
|
||||
# readthedocs config version
|
||||
version: 2
|
||||
|
||||
build:
|
||||
os: ubuntu-22.04 # Ubuntu Jammy LTS
|
||||
tools:
|
||||
python: "3.10"
|
||||
apt_packages:
|
||||
- plantuml
|
||||
- librsvg2-bin
|
||||
jobs:
|
||||
post_create_environment:
|
||||
- pip install poetry=="1.3.2"
|
||||
post_install:
|
||||
- VIRTUAL_ENV=$READTHEDOCS_VIRTUALENV_PATH poetry install --with docs
|
||||
|
||||
sphinx:
|
||||
configuration: docs/conf.py
|
||||
|
||||
# Auxiliary formats to export to (in addition to the default HTML output).
|
||||
formats:
|
||||
- pdf
|
||||
|
||||
151
arm-trusted-firmware.t234/.versionrc.cjs
Normal file
151
arm-trusted-firmware.t234/.versionrc.cjs
Normal file
@@ -0,0 +1,151 @@
|
||||
/*
|
||||
* Copyright (c) 2021-2024, Arm Limited. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
/* eslint-env es6 */
|
||||
|
||||
"use strict";
|
||||
|
||||
const fs = require("fs");
|
||||
const yaml = require("js-yaml");
|
||||
|
||||
/*
|
||||
* The types and scopes accepted by both Commitlint and Commitizen are defined by the changelog
|
||||
* configuration file - `changelog.yaml` - as they decide which section of the changelog commits
|
||||
* with a given type and scope are placed in.
|
||||
*/
|
||||
|
||||
let changelog;
|
||||
|
||||
try {
|
||||
const contents = fs.readFileSync("changelog.yaml", "utf8");
|
||||
|
||||
changelog = yaml.load(contents);
|
||||
} catch (err) {
|
||||
console.log(err);
|
||||
|
||||
throw err;
|
||||
}
|
||||
|
||||
/*
|
||||
* The next couple of functions are just used to transform the changelog YAML configuration
|
||||
* structure into one accepted by the Conventional Changelog adapter (conventional-changelog-tf-a).
|
||||
*/
|
||||
|
||||
function getTypes(sections) {
|
||||
return sections.map(section => {
|
||||
return {
|
||||
"type": section.type,
|
||||
"section": section.hidden ? undefined : section.title,
|
||||
"hidden": section.hidden || false,
|
||||
};
|
||||
})
|
||||
}
|
||||
|
||||
function getSections(subsections) {
|
||||
return subsections.flatMap(subsection => {
|
||||
const scope = subsection.scope ? [ subsection.scope ] : [];
|
||||
|
||||
return {
|
||||
"title": subsection.title,
|
||||
"sections": getSections(subsection.subsections || []),
|
||||
"scopes": scope.concat(subsection.deprecated || []),
|
||||
};
|
||||
})
|
||||
};
|
||||
|
||||
const types = getTypes(changelog.sections);
|
||||
const sections = getSections(changelog.subsections);
|
||||
|
||||
module.exports = {
|
||||
"header": "# Change Log & Release Notes\n\nThis document contains a summary of the new features, changes, fixes and known\nissues in each release of Trusted Firmware-A.\n",
|
||||
"preset": {
|
||||
"name": "tf-a",
|
||||
"commitUrlFormat": "https://review.trustedfirmware.org/plugins/gitiles/TF-A/trusted-firmware-a/+/{{hash}}",
|
||||
"compareUrlFormat": "https://review.trustedfirmware.org/plugins/gitiles/TF-A/trusted-firmware-a/+/refs/tags/{{previousTag}}..refs/tags/{{currentTag}}",
|
||||
"userUrlFormat": "https://github.com/{{user}}",
|
||||
|
||||
"types": types,
|
||||
"sections": sections,
|
||||
},
|
||||
"infile": "docs/change-log.md",
|
||||
"skip": {
|
||||
"commit": true,
|
||||
"tag": true
|
||||
},
|
||||
"bumpFiles": [
|
||||
{
|
||||
"filename": "package.json",
|
||||
"type": "json"
|
||||
},
|
||||
{
|
||||
"filename": "pyproject.toml",
|
||||
"updater": {
|
||||
"readVersion": function (contents) {
|
||||
const _ver = contents.match(/version\s=.*"(\d+?)\.(\d+?)\.(\d+?)/);
|
||||
|
||||
return `${_ver[1]}.${_ver[2]}.${_ver[3]}`;
|
||||
},
|
||||
|
||||
"writeVersion": function (contents, version) {
|
||||
const _ver = 'version = "' + version + '"'
|
||||
|
||||
return contents.replace(/^(version\s=\s")((\d).?)*$/m, _ver)
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
"filename": "package-lock.json",
|
||||
"type": "json"
|
||||
},
|
||||
{
|
||||
"filename": "docs/conf.py",
|
||||
"updater": {
|
||||
"readVersion": function (contents) {
|
||||
const _ver = contents.match(/version\s=.*"(\d+?)\.(\d+?)\.(\d+?)/);
|
||||
|
||||
return `${_ver[1]}.${_ver[2]}.${_ver[3]}`;
|
||||
},
|
||||
|
||||
"writeVersion": function (contents, version) {
|
||||
const _ver = 'version = "' + version + '"'
|
||||
const _rel = 'release = "' + version + '"'
|
||||
|
||||
contents = contents.replace(/^(version\s=\s")((\d).?)*$/m, _ver)
|
||||
contents = contents.replace(/^(release\s=\s")((\d).?)*$/m, _rel)
|
||||
return contents
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
"filename": "tools/conventional-changelog-tf-a/package.json",
|
||||
"type": "json"
|
||||
},
|
||||
{
|
||||
"filename": "Makefile",
|
||||
"updater": {
|
||||
"readVersion": function (contents) {
|
||||
const major = contents.match(/^VERSION_MAJOR\s*:=\s*(\d+?)$/m)[1];
|
||||
const minor = contents.match(/^VERSION_MINOR\s*:=\s*(\d+?)$/m)[1];
|
||||
const patch = contents.match(/^VERSION_PATCH\s*:=\s*(\d+?)$/m)[1];
|
||||
|
||||
return `${major}.${minor}.${patch}`;
|
||||
},
|
||||
|
||||
"writeVersion": function (contents, version) {
|
||||
const major = version.split(".")[0];
|
||||
const minor = version.split(".")[1];
|
||||
const patch = version.split(".")[2];
|
||||
|
||||
contents = contents.replace(/^(VERSION_MAJOR\s*:=\s*)(\d+?)$/m, `$1${major}`);
|
||||
contents = contents.replace(/^(VERSION_MINOR\s*:=\s*)(\d+?)$/m, `$1${minor}`);
|
||||
contents = contents.replace(/^(VERSION_PATCH\s*:=\s*)(\d+?)$/m, `$1${patch}`);
|
||||
|
||||
return contents;
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
};
|
||||
1850
arm-trusted-firmware.t234/Makefile
Normal file
1850
arm-trusted-firmware.t234/Makefile
Normal file
File diff suppressed because it is too large
Load Diff
16
arm-trusted-firmware.t234/OWNERS
Normal file
16
arm-trusted-firmware.t234/OWNERS
Normal file
@@ -0,0 +1,16 @@
|
||||
# SPDX-FileCopyrightText: Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
# SPDX-License-Identifier: LicenseRef-NvidiaProprietary
|
||||
#
|
||||
# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual
|
||||
# property and proprietary rights in and to this material, related
|
||||
# documentation and any modifications thereto. Any use, reproduction,
|
||||
# disclosure or distribution of this material and related documentation
|
||||
# without an express license agreement from NVIDIA CORPORATION or
|
||||
# its affiliates is strictly prohibited.
|
||||
|
||||
# Top-level directory owners:
|
||||
vwadekar@nvidia.com
|
||||
|
||||
# Do not uncomment: Not supported in OWNERS file, added for additional info
|
||||
#{NVBUGS_MODULE=<to-be-updated-by-owner>}
|
||||
#{OWNERS_DL=<to-be-updated-by-owner>}
|
||||
15
arm-trusted-firmware.t234/bl1/aarch32/bl1_arch_setup.c
Normal file
15
arm-trusted-firmware.t234/bl1/aarch32/bl1_arch_setup.c
Normal file
@@ -0,0 +1,15 @@
|
||||
/*
|
||||
* Copyright (c) 2016, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include "../bl1_private.h"
|
||||
|
||||
/*******************************************************************************
|
||||
* TODO: Function that does the first bit of architectural setup.
|
||||
******************************************************************************/
|
||||
void bl1_arch_setup(void)
|
||||
{
|
||||
|
||||
}
|
||||
172
arm-trusted-firmware.t234/bl1/aarch32/bl1_context_mgmt.c
Normal file
172
arm-trusted-firmware.t234/bl1/aarch32/bl1_context_mgmt.c
Normal file
@@ -0,0 +1,172 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2020, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
#include <arch_helpers.h>
|
||||
#include <context.h>
|
||||
#include <common/debug.h>
|
||||
#include <lib/el3_runtime/context_mgmt.h>
|
||||
#include <plat/common/platform.h>
|
||||
#include <smccc_helpers.h>
|
||||
|
||||
#include "../bl1_private.h"
|
||||
|
||||
/*
|
||||
* Following arrays will be used for context management.
|
||||
* There are 2 instances, for the Secure and Non-Secure contexts.
|
||||
*/
|
||||
static cpu_context_t bl1_cpu_context[2];
|
||||
static smc_ctx_t bl1_smc_context[2];
|
||||
|
||||
/* Following contains the next cpu context pointer. */
|
||||
static void *bl1_next_cpu_context_ptr;
|
||||
|
||||
/* Following contains the next smc context pointer. */
|
||||
static void *bl1_next_smc_context_ptr;
|
||||
|
||||
/* Following functions are used for SMC context handling */
|
||||
void *smc_get_ctx(unsigned int security_state)
|
||||
{
|
||||
assert(sec_state_is_valid(security_state));
|
||||
return &bl1_smc_context[security_state];
|
||||
}
|
||||
|
||||
void smc_set_next_ctx(unsigned int security_state)
|
||||
{
|
||||
assert(sec_state_is_valid(security_state));
|
||||
bl1_next_smc_context_ptr = &bl1_smc_context[security_state];
|
||||
}
|
||||
|
||||
void *smc_get_next_ctx(void)
|
||||
{
|
||||
return bl1_next_smc_context_ptr;
|
||||
}
|
||||
|
||||
/* Following functions are used for CPU context handling */
|
||||
void *cm_get_context(uint32_t security_state)
|
||||
{
|
||||
assert(sec_state_is_valid(security_state));
|
||||
return &bl1_cpu_context[security_state];
|
||||
}
|
||||
|
||||
void cm_set_next_context(void *context)
|
||||
{
|
||||
assert(context != NULL);
|
||||
bl1_next_cpu_context_ptr = context;
|
||||
}
|
||||
|
||||
void *cm_get_next_context(void)
|
||||
{
|
||||
return bl1_next_cpu_context_ptr;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Following function copies GP regs r0-r4, lr and spsr,
|
||||
* from the CPU context to the SMC context structures.
|
||||
******************************************************************************/
|
||||
static void copy_cpu_ctx_to_smc_ctx(const regs_t *cpu_reg_ctx,
|
||||
smc_ctx_t *next_smc_ctx)
|
||||
{
|
||||
next_smc_ctx->r0 = read_ctx_reg(cpu_reg_ctx, CTX_GPREG_R0);
|
||||
next_smc_ctx->r1 = read_ctx_reg(cpu_reg_ctx, CTX_GPREG_R1);
|
||||
next_smc_ctx->r2 = read_ctx_reg(cpu_reg_ctx, CTX_GPREG_R2);
|
||||
next_smc_ctx->r3 = read_ctx_reg(cpu_reg_ctx, CTX_GPREG_R3);
|
||||
next_smc_ctx->lr_mon = read_ctx_reg(cpu_reg_ctx, CTX_LR);
|
||||
next_smc_ctx->spsr_mon = read_ctx_reg(cpu_reg_ctx, CTX_SPSR);
|
||||
next_smc_ctx->scr = read_ctx_reg(cpu_reg_ctx, CTX_SCR);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Following function flushes the SMC & CPU context pointer and its data.
|
||||
******************************************************************************/
|
||||
static void flush_smc_and_cpu_ctx(void)
|
||||
{
|
||||
flush_dcache_range((uintptr_t)&bl1_next_smc_context_ptr,
|
||||
sizeof(bl1_next_smc_context_ptr));
|
||||
flush_dcache_range((uintptr_t)bl1_next_smc_context_ptr,
|
||||
sizeof(smc_ctx_t));
|
||||
|
||||
flush_dcache_range((uintptr_t)&bl1_next_cpu_context_ptr,
|
||||
sizeof(bl1_next_cpu_context_ptr));
|
||||
flush_dcache_range((uintptr_t)bl1_next_cpu_context_ptr,
|
||||
sizeof(cpu_context_t));
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* This function prepares the context for Secure/Normal world images.
|
||||
* Normal world images are transitioned to HYP(if supported) else SVC.
|
||||
******************************************************************************/
|
||||
void bl1_prepare_next_image(unsigned int image_id)
|
||||
{
|
||||
unsigned int security_state, mode = MODE32_svc;
|
||||
image_desc_t *desc;
|
||||
entry_point_info_t *next_bl_ep;
|
||||
|
||||
/* Get the image descriptor. */
|
||||
desc = bl1_plat_get_image_desc(image_id);
|
||||
assert(desc != NULL);
|
||||
|
||||
/* Get the entry point info. */
|
||||
next_bl_ep = &desc->ep_info;
|
||||
|
||||
/* Get the image security state. */
|
||||
security_state = GET_SECURITY_STATE(next_bl_ep->h.attr);
|
||||
|
||||
/* Prepare the SPSR for the next BL image. */
|
||||
if ((security_state != SECURE) && (GET_VIRT_EXT(read_id_pfr1()) != 0U)) {
|
||||
mode = MODE32_hyp;
|
||||
}
|
||||
|
||||
next_bl_ep->spsr = SPSR_MODE32(mode, SPSR_T_ARM,
|
||||
SPSR_E_LITTLE, DISABLE_ALL_EXCEPTIONS);
|
||||
|
||||
/* Allow platform to make change */
|
||||
bl1_plat_set_ep_info(image_id, next_bl_ep);
|
||||
|
||||
/* Prepare the cpu context for the next BL image. */
|
||||
cm_init_my_context(next_bl_ep);
|
||||
cm_prepare_el3_exit(security_state);
|
||||
cm_set_next_context(cm_get_context(security_state));
|
||||
|
||||
/* Prepare the smc context for the next BL image. */
|
||||
smc_set_next_ctx(security_state);
|
||||
copy_cpu_ctx_to_smc_ctx(get_regs_ctx(cm_get_next_context()),
|
||||
smc_get_next_ctx());
|
||||
|
||||
/*
|
||||
* If the next image is non-secure, then we need to program the banked
|
||||
* non secure sctlr. This is not required when the next image is secure
|
||||
* because in AArch32, we expect the secure world to have the same
|
||||
* SCTLR settings.
|
||||
*/
|
||||
if (security_state == NON_SECURE) {
|
||||
cpu_context_t *ctx = cm_get_context(security_state);
|
||||
u_register_t ns_sctlr;
|
||||
|
||||
/* Temporarily set the NS bit to access NS SCTLR */
|
||||
write_scr(read_scr() | SCR_NS_BIT);
|
||||
isb();
|
||||
|
||||
ns_sctlr = read_ctx_reg(get_regs_ctx(ctx), CTX_NS_SCTLR);
|
||||
write_sctlr(ns_sctlr);
|
||||
isb();
|
||||
|
||||
write_scr(read_scr() & ~SCR_NS_BIT);
|
||||
isb();
|
||||
}
|
||||
|
||||
/*
|
||||
* Flush the SMC & CPU context and the (next)pointers,
|
||||
* to access them after caches are disabled.
|
||||
*/
|
||||
flush_smc_and_cpu_ctx();
|
||||
|
||||
/* Indicate that image is in execution state. */
|
||||
desc->state = IMAGE_STATE_EXECUTED;
|
||||
|
||||
print_entry_point_info(next_bl_ep);
|
||||
}
|
||||
99
arm-trusted-firmware.t234/bl1/aarch32/bl1_entrypoint.S
Normal file
99
arm-trusted-firmware.t234/bl1/aarch32/bl1_entrypoint.S
Normal file
@@ -0,0 +1,99 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2022, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <arch.h>
|
||||
#include <asm_macros.S>
|
||||
#include <common/bl_common.h>
|
||||
#include <context.h>
|
||||
#include <el3_common_macros.S>
|
||||
#include <smccc_helpers.h>
|
||||
#include <smccc_macros.S>
|
||||
|
||||
.globl bl1_vector_table
|
||||
.globl bl1_entrypoint
|
||||
|
||||
/* -----------------------------------------------------
|
||||
* Setup the vector table to support SVC & MON mode.
|
||||
* -----------------------------------------------------
|
||||
*/
|
||||
vector_base bl1_vector_table
|
||||
b bl1_entrypoint
|
||||
b report_exception /* Undef */
|
||||
b bl1_aarch32_smc_handler /* SMC call */
|
||||
b report_prefetch_abort /* Prefetch abort */
|
||||
b report_data_abort /* Data abort */
|
||||
b report_exception /* Reserved */
|
||||
b report_exception /* IRQ */
|
||||
b report_exception /* FIQ */
|
||||
|
||||
/* -----------------------------------------------------
|
||||
* bl1_entrypoint() is the entry point into the trusted
|
||||
* firmware code when a cpu is released from warm or
|
||||
* cold reset.
|
||||
* -----------------------------------------------------
|
||||
*/
|
||||
|
||||
func bl1_entrypoint
|
||||
/* ---------------------------------------------------------------------
|
||||
* If the reset address is programmable then bl1_entrypoint() is
|
||||
* executed only on the cold boot path. Therefore, we can skip the warm
|
||||
* boot mailbox mechanism.
|
||||
* ---------------------------------------------------------------------
|
||||
*/
|
||||
el3_entrypoint_common \
|
||||
_init_sctlr=1 \
|
||||
_warm_boot_mailbox=!PROGRAMMABLE_RESET_ADDRESS \
|
||||
_secondary_cold_boot=!COLD_BOOT_SINGLE_CPU \
|
||||
_init_memory=1 \
|
||||
_init_c_runtime=1 \
|
||||
_exception_vectors=bl1_vector_table \
|
||||
_pie_fixup_size=0
|
||||
|
||||
/* -----------------------------------------------------
|
||||
* Perform BL1 setup
|
||||
* -----------------------------------------------------
|
||||
*/
|
||||
bl bl1_setup
|
||||
|
||||
/* -----------------------------------------------------
|
||||
* Jump to main function.
|
||||
* -----------------------------------------------------
|
||||
*/
|
||||
bl bl1_main
|
||||
|
||||
/* -----------------------------------------------------
|
||||
* Jump to next image.
|
||||
* -----------------------------------------------------
|
||||
*/
|
||||
|
||||
/*
|
||||
* Get the smc_context for next BL image,
|
||||
* program the gp/system registers and save it in `r4`.
|
||||
*/
|
||||
bl smc_get_next_ctx
|
||||
mov r4, r0
|
||||
|
||||
/* Only turn-off MMU if going to secure world */
|
||||
ldr r5, [r4, #SMC_CTX_SCR]
|
||||
tst r5, #SCR_NS_BIT
|
||||
bne skip_mmu_off
|
||||
|
||||
/*
|
||||
* MMU needs to be disabled because both BL1 and BL2/BL2U execute
|
||||
* in PL1, and therefore share the same address space.
|
||||
* BL2/BL2U will initialize the address space according to its
|
||||
* own requirement.
|
||||
*/
|
||||
bl disable_mmu_icache_secure
|
||||
stcopr r0, TLBIALL
|
||||
dsb sy
|
||||
isb
|
||||
|
||||
skip_mmu_off:
|
||||
/* Restore smc_context from `r4` and exit secure monitor mode. */
|
||||
mov r0, r4
|
||||
monitor_exit
|
||||
endfunc bl1_entrypoint
|
||||
165
arm-trusted-firmware.t234/bl1/aarch32/bl1_exceptions.S
Normal file
165
arm-trusted-firmware.t234/bl1/aarch32/bl1_exceptions.S
Normal file
@@ -0,0 +1,165 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2022, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <arch.h>
|
||||
#include <asm_macros.S>
|
||||
#include <bl1/bl1.h>
|
||||
#include <common/bl_common.h>
|
||||
#include <context.h>
|
||||
#include <lib/xlat_tables/xlat_tables.h>
|
||||
#include <smccc_helpers.h>
|
||||
#include <smccc_macros.S>
|
||||
|
||||
.globl bl1_aarch32_smc_handler
|
||||
|
||||
|
||||
func bl1_aarch32_smc_handler
|
||||
/* On SMC entry, `sp` points to `smc_ctx_t`. Save `lr`. */
|
||||
str lr, [sp, #SMC_CTX_LR_MON]
|
||||
|
||||
/* ------------------------------------------------
|
||||
* SMC in BL1 is handled assuming that the MMU is
|
||||
* turned off by BL2.
|
||||
* ------------------------------------------------
|
||||
*/
|
||||
|
||||
/* ----------------------------------------------
|
||||
* Detect if this is a RUN_IMAGE or other SMC.
|
||||
* ----------------------------------------------
|
||||
*/
|
||||
mov lr, #BL1_SMC_RUN_IMAGE
|
||||
cmp lr, r0
|
||||
bne smc_handler
|
||||
|
||||
/* ------------------------------------------------
|
||||
* Make sure only Secure world reaches here.
|
||||
* ------------------------------------------------
|
||||
*/
|
||||
ldcopr r8, SCR
|
||||
tst r8, #SCR_NS_BIT
|
||||
blne report_exception
|
||||
|
||||
/* ---------------------------------------------------------------------
|
||||
* Pass control to next secure image.
|
||||
* Here it expects r1 to contain the address of a entry_point_info_t
|
||||
* structure describing the BL entrypoint.
|
||||
* ---------------------------------------------------------------------
|
||||
*/
|
||||
mov r8, r1
|
||||
mov r0, r1
|
||||
bl bl1_print_next_bl_ep_info
|
||||
|
||||
#if SPIN_ON_BL1_EXIT
|
||||
bl print_debug_loop_message
|
||||
debug_loop:
|
||||
b debug_loop
|
||||
#endif
|
||||
|
||||
mov r0, r8
|
||||
bl bl1_plat_prepare_exit
|
||||
|
||||
stcopr r0, TLBIALL
|
||||
dsb sy
|
||||
isb
|
||||
|
||||
/*
|
||||
* Extract PC and SPSR based on struct `entry_point_info_t`
|
||||
* and load it in LR and SPSR registers respectively.
|
||||
*/
|
||||
ldr lr, [r8, #ENTRY_POINT_INFO_PC_OFFSET]
|
||||
ldr r1, [r8, #(ENTRY_POINT_INFO_PC_OFFSET + 4)]
|
||||
msr spsr_xc, r1
|
||||
|
||||
/* Some BL32 stages expect lr_svc to provide the BL33 entry address */
|
||||
cps #MODE32_svc
|
||||
ldr lr, [r8, #ENTRY_POINT_INFO_LR_SVC_OFFSET]
|
||||
cps #MODE32_mon
|
||||
|
||||
add r8, r8, #ENTRY_POINT_INFO_ARGS_OFFSET
|
||||
ldm r8, {r0, r1, r2, r3}
|
||||
exception_return
|
||||
endfunc bl1_aarch32_smc_handler
|
||||
|
||||
/* -----------------------------------------------------
|
||||
* Save Secure/Normal world context and jump to
|
||||
* BL1 SMC handler.
|
||||
* -----------------------------------------------------
|
||||
*/
|
||||
func smc_handler
|
||||
/* -----------------------------------------------------
|
||||
* Save the GP registers.
|
||||
* -----------------------------------------------------
|
||||
*/
|
||||
smccc_save_gp_mode_regs
|
||||
|
||||
/*
|
||||
* `sp` still points to `smc_ctx_t`. Save it to a register
|
||||
* and restore the C runtime stack pointer to `sp`.
|
||||
*/
|
||||
mov r6, sp
|
||||
ldr sp, [r6, #SMC_CTX_SP_MON]
|
||||
|
||||
ldr r0, [r6, #SMC_CTX_SCR]
|
||||
and r7, r0, #SCR_NS_BIT /* flags */
|
||||
|
||||
/* Switch to Secure Mode */
|
||||
bic r0, #SCR_NS_BIT
|
||||
stcopr r0, SCR
|
||||
isb
|
||||
|
||||
/* If caller is from Secure world then turn on the MMU */
|
||||
tst r7, #SCR_NS_BIT
|
||||
bne skip_mmu_on
|
||||
|
||||
/* Turn on the MMU */
|
||||
mov r0, #DISABLE_DCACHE
|
||||
bl enable_mmu_svc_mon
|
||||
|
||||
/*
|
||||
* Invalidate `smc_ctx_t` in data cache to prevent dirty data being
|
||||
* used.
|
||||
*/
|
||||
mov r0, r6
|
||||
mov r1, #SMC_CTX_SIZE
|
||||
bl inv_dcache_range
|
||||
|
||||
/* Enable the data cache. */
|
||||
ldcopr r9, SCTLR
|
||||
orr r9, r9, #SCTLR_C_BIT
|
||||
stcopr r9, SCTLR
|
||||
isb
|
||||
|
||||
skip_mmu_on:
|
||||
/* Prepare arguments for BL1 SMC wrapper. */
|
||||
ldr r0, [r6, #SMC_CTX_GPREG_R0] /* smc_fid */
|
||||
mov r1, #0 /* cookie */
|
||||
mov r2, r6 /* handle */
|
||||
mov r3, r7 /* flags */
|
||||
bl bl1_smc_wrapper
|
||||
|
||||
/* Get the smc_context for next BL image */
|
||||
bl smc_get_next_ctx
|
||||
mov r4, r0
|
||||
|
||||
/* Only turn-off MMU if going to secure world */
|
||||
ldr r5, [r4, #SMC_CTX_SCR]
|
||||
tst r5, #SCR_NS_BIT
|
||||
bne skip_mmu_off
|
||||
|
||||
/* Disable the MMU */
|
||||
bl disable_mmu_icache_secure
|
||||
stcopr r0, TLBIALL
|
||||
dsb sy
|
||||
isb
|
||||
|
||||
skip_mmu_off:
|
||||
/* -----------------------------------------------------
|
||||
* Do the transition to next BL image.
|
||||
* -----------------------------------------------------
|
||||
*/
|
||||
mov r0, r4
|
||||
monitor_exit
|
||||
endfunc smc_handler
|
||||
35
arm-trusted-firmware.t234/bl1/aarch64/bl1_arch_setup.c
Normal file
35
arm-trusted-firmware.t234/bl1/aarch64/bl1_arch_setup.c
Normal file
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
* Copyright (c) 2013-2019, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <arch.h>
|
||||
#include <arch_helpers.h>
|
||||
#include "../bl1_private.h"
|
||||
|
||||
/*******************************************************************************
|
||||
* Function that does the first bit of architectural setup that affects
|
||||
* execution in the non-secure address space.
|
||||
******************************************************************************/
|
||||
void bl1_arch_setup(void)
|
||||
{
|
||||
/* Set the next EL to be AArch64 */
|
||||
write_scr_el3(read_scr_el3() | SCR_RW_BIT);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Set the Secure EL1 required architectural state
|
||||
******************************************************************************/
|
||||
void bl1_arch_next_el_setup(void)
|
||||
{
|
||||
u_register_t next_sctlr;
|
||||
|
||||
/* Use the same endianness than the current BL */
|
||||
next_sctlr = (read_sctlr_el3() & SCTLR_EE_BIT);
|
||||
|
||||
/* Set SCTLR Secure EL1 */
|
||||
next_sctlr |= SCTLR_EL1_RES1;
|
||||
|
||||
write_sctlr_el1(next_sctlr);
|
||||
}
|
||||
131
arm-trusted-firmware.t234/bl1/aarch64/bl1_context_mgmt.c
Normal file
131
arm-trusted-firmware.t234/bl1/aarch64/bl1_context_mgmt.c
Normal file
@@ -0,0 +1,131 @@
|
||||
/*
|
||||
* Copyright (c) 2015-2021, Arm Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
#include <arch_helpers.h>
|
||||
#include <context.h>
|
||||
#include <common/debug.h>
|
||||
#include <lib/el3_runtime/context_mgmt.h>
|
||||
#include <plat/common/platform.h>
|
||||
|
||||
#include "../bl1_private.h"
|
||||
|
||||
/* Following contains the cpu context pointers. */
|
||||
static void *bl1_cpu_context_ptr[2];
|
||||
entry_point_info_t *bl2_ep_info;
|
||||
|
||||
|
||||
void *cm_get_context(uint32_t security_state)
|
||||
{
|
||||
assert(sec_state_is_valid(security_state));
|
||||
return bl1_cpu_context_ptr[security_state];
|
||||
}
|
||||
|
||||
void cm_set_context(void *context, uint32_t security_state)
|
||||
{
|
||||
assert(sec_state_is_valid(security_state));
|
||||
bl1_cpu_context_ptr[security_state] = context;
|
||||
}
|
||||
|
||||
#if ENABLE_RME
|
||||
/*******************************************************************************
|
||||
* This function prepares the entry point information to run BL2 in Root world,
|
||||
* i.e. EL3, for the case when FEAT_RME is enabled.
|
||||
******************************************************************************/
|
||||
void bl1_prepare_next_image(unsigned int image_id)
|
||||
{
|
||||
image_desc_t *bl2_desc;
|
||||
|
||||
assert(image_id == BL2_IMAGE_ID);
|
||||
|
||||
/* Get the image descriptor. */
|
||||
bl2_desc = bl1_plat_get_image_desc(BL2_IMAGE_ID);
|
||||
assert(bl2_desc != NULL);
|
||||
|
||||
/* Get the entry point info. */
|
||||
bl2_ep_info = &bl2_desc->ep_info;
|
||||
|
||||
bl2_ep_info->spsr = (uint32_t)SPSR_64(MODE_EL3, MODE_SP_ELX,
|
||||
DISABLE_ALL_EXCEPTIONS);
|
||||
|
||||
/*
|
||||
* Flush cache since bl2_ep_info is accessed after MMU is disabled
|
||||
* before jumping to BL2.
|
||||
*/
|
||||
flush_dcache_range((uintptr_t)bl2_ep_info, sizeof(entry_point_info_t));
|
||||
|
||||
/* Indicate that image is in execution state. */
|
||||
bl2_desc->state = IMAGE_STATE_EXECUTED;
|
||||
|
||||
/* Print debug info and flush the console before running BL2. */
|
||||
print_entry_point_info(bl2_ep_info);
|
||||
}
|
||||
#else
|
||||
/*******************************************************************************
|
||||
* This function prepares the context for Secure/Normal world images.
|
||||
* Normal world images are transitioned to EL2(if supported) else EL1.
|
||||
******************************************************************************/
|
||||
void bl1_prepare_next_image(unsigned int image_id)
|
||||
{
|
||||
|
||||
/*
|
||||
* Following array will be used for context management.
|
||||
* There are 2 instances, for the Secure and Non-Secure contexts.
|
||||
*/
|
||||
static cpu_context_t bl1_cpu_context[2];
|
||||
|
||||
unsigned int security_state, mode = MODE_EL1;
|
||||
image_desc_t *desc;
|
||||
entry_point_info_t *next_bl_ep;
|
||||
|
||||
#if CTX_INCLUDE_AARCH32_REGS
|
||||
/*
|
||||
* Ensure that the build flag to save AArch32 system registers in CPU
|
||||
* context is not set for AArch64-only platforms.
|
||||
*/
|
||||
if (el_implemented(1) == EL_IMPL_A64ONLY) {
|
||||
ERROR("EL1 supports AArch64-only. Please set build flag "
|
||||
"CTX_INCLUDE_AARCH32_REGS = 0\n");
|
||||
panic();
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Get the image descriptor. */
|
||||
desc = bl1_plat_get_image_desc(image_id);
|
||||
assert(desc != NULL);
|
||||
|
||||
/* Get the entry point info. */
|
||||
next_bl_ep = &desc->ep_info;
|
||||
|
||||
/* Get the image security state. */
|
||||
security_state = GET_SECURITY_STATE(next_bl_ep->h.attr);
|
||||
|
||||
/* Setup the Secure/Non-Secure context if not done already. */
|
||||
if (cm_get_context(security_state) == NULL)
|
||||
cm_set_context(&bl1_cpu_context[security_state], security_state);
|
||||
|
||||
/* Prepare the SPSR for the next BL image. */
|
||||
if ((security_state != SECURE) && (el_implemented(2) != EL_IMPL_NONE)) {
|
||||
mode = MODE_EL2;
|
||||
}
|
||||
|
||||
next_bl_ep->spsr = (uint32_t)SPSR_64((uint64_t) mode,
|
||||
(uint64_t)MODE_SP_ELX, DISABLE_ALL_EXCEPTIONS);
|
||||
|
||||
/* Allow platform to make change */
|
||||
bl1_plat_set_ep_info(image_id, next_bl_ep);
|
||||
|
||||
/* Prepare the context for the next BL image. */
|
||||
cm_init_my_context(next_bl_ep);
|
||||
cm_prepare_el3_exit(security_state);
|
||||
|
||||
/* Indicate that image is in execution state. */
|
||||
desc->state = IMAGE_STATE_EXECUTED;
|
||||
|
||||
print_entry_point_info(next_bl_ep);
|
||||
}
|
||||
#endif /* ENABLE_RME */
|
||||
108
arm-trusted-firmware.t234/bl1/aarch64/bl1_entrypoint.S
Normal file
108
arm-trusted-firmware.t234/bl1/aarch64/bl1_entrypoint.S
Normal file
@@ -0,0 +1,108 @@
|
||||
/*
|
||||
* Copyright (c) 2013-2021, Arm Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <arch.h>
|
||||
#include <common/bl_common.h>
|
||||
#include <el3_common_macros.S>
|
||||
|
||||
.globl bl1_entrypoint
|
||||
.globl bl1_run_bl2_in_root
|
||||
|
||||
|
||||
/* -----------------------------------------------------
|
||||
* bl1_entrypoint() is the entry point into the trusted
|
||||
* firmware code when a cpu is released from warm or
|
||||
* cold reset.
|
||||
* -----------------------------------------------------
|
||||
*/
|
||||
|
||||
func bl1_entrypoint
|
||||
/* ---------------------------------------------------------------------
|
||||
* If the reset address is programmable then bl1_entrypoint() is
|
||||
* executed only on the cold boot path. Therefore, we can skip the warm
|
||||
* boot mailbox mechanism.
|
||||
* ---------------------------------------------------------------------
|
||||
*/
|
||||
el3_entrypoint_common \
|
||||
_init_sctlr=1 \
|
||||
_warm_boot_mailbox=!PROGRAMMABLE_RESET_ADDRESS \
|
||||
_secondary_cold_boot=!COLD_BOOT_SINGLE_CPU \
|
||||
_init_memory=1 \
|
||||
_init_c_runtime=1 \
|
||||
_exception_vectors=bl1_exceptions \
|
||||
_pie_fixup_size=0
|
||||
|
||||
/* --------------------------------------------------------------------
|
||||
* Perform BL1 setup
|
||||
* --------------------------------------------------------------------
|
||||
*/
|
||||
bl bl1_setup
|
||||
|
||||
#if ENABLE_PAUTH
|
||||
/* --------------------------------------------------------------------
|
||||
* Program APIAKey_EL1 and enable pointer authentication.
|
||||
* --------------------------------------------------------------------
|
||||
*/
|
||||
bl pauth_init_enable_el3
|
||||
#endif /* ENABLE_PAUTH */
|
||||
|
||||
/* --------------------------------------------------------------------
|
||||
* Initialize platform and jump to our c-entry point
|
||||
* for this type of reset.
|
||||
* --------------------------------------------------------------------
|
||||
*/
|
||||
bl bl1_main
|
||||
|
||||
#if ENABLE_PAUTH
|
||||
/* --------------------------------------------------------------------
|
||||
* Disable pointer authentication before jumping to next boot image.
|
||||
* --------------------------------------------------------------------
|
||||
*/
|
||||
bl pauth_disable_el3
|
||||
#endif /* ENABLE_PAUTH */
|
||||
|
||||
/* --------------------------------------------------
|
||||
* Do the transition to next boot image.
|
||||
* --------------------------------------------------
|
||||
*/
|
||||
#if ENABLE_RME
|
||||
b bl1_run_bl2_in_root
|
||||
#else
|
||||
b el3_exit
|
||||
#endif
|
||||
endfunc bl1_entrypoint
|
||||
|
||||
/* -----------------------------------------------------
|
||||
* void bl1_run_bl2_in_root();
|
||||
* This function runs BL2 in root/EL3 when RME is enabled.
|
||||
* -----------------------------------------------------
|
||||
*/
|
||||
|
||||
func bl1_run_bl2_in_root
|
||||
/* read bl2_ep_info */
|
||||
adrp x20, bl2_ep_info
|
||||
add x20, x20, :lo12:bl2_ep_info
|
||||
ldr x20, [x20]
|
||||
|
||||
/* ---------------------------------------------
|
||||
* MMU needs to be disabled because BL2 executes
|
||||
* in EL3. It will initialize the address space
|
||||
* according to its own requirements.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
bl disable_mmu_icache_el3
|
||||
tlbi alle3
|
||||
|
||||
ldp x0, x1, [x20, #ENTRY_POINT_INFO_PC_OFFSET]
|
||||
msr elr_el3, x0
|
||||
msr spsr_el3, x1
|
||||
|
||||
ldp x6, x7, [x20, #(ENTRY_POINT_INFO_ARGS_OFFSET + 0x30)]
|
||||
ldp x4, x5, [x20, #(ENTRY_POINT_INFO_ARGS_OFFSET + 0x20)]
|
||||
ldp x2, x3, [x20, #(ENTRY_POINT_INFO_ARGS_OFFSET + 0x10)]
|
||||
ldp x0, x1, [x20, #(ENTRY_POINT_INFO_ARGS_OFFSET + 0x0)]
|
||||
exception_return
|
||||
endfunc bl1_run_bl2_in_root
|
||||
287
arm-trusted-firmware.t234/bl1/aarch64/bl1_exceptions.S
Normal file
287
arm-trusted-firmware.t234/bl1/aarch64/bl1_exceptions.S
Normal file
@@ -0,0 +1,287 @@
|
||||
/*
|
||||
* Copyright (c) 2013-2022, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <arch.h>
|
||||
#include <asm_macros.S>
|
||||
#include <bl1/bl1.h>
|
||||
#include <common/bl_common.h>
|
||||
#include <context.h>
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* Very simple stackless exception handlers used by BL1.
|
||||
* -----------------------------------------------------------------------------
|
||||
*/
|
||||
.globl bl1_exceptions
|
||||
|
||||
vector_base bl1_exceptions
|
||||
|
||||
/* -----------------------------------------------------
|
||||
* Current EL with SP0 : 0x0 - 0x200
|
||||
* -----------------------------------------------------
|
||||
*/
|
||||
vector_entry SynchronousExceptionSP0
|
||||
mov x0, #SYNC_EXCEPTION_SP_EL0
|
||||
bl plat_report_exception
|
||||
no_ret plat_panic_handler
|
||||
end_vector_entry SynchronousExceptionSP0
|
||||
|
||||
vector_entry IrqSP0
|
||||
mov x0, #IRQ_SP_EL0
|
||||
bl plat_report_exception
|
||||
no_ret plat_panic_handler
|
||||
end_vector_entry IrqSP0
|
||||
|
||||
vector_entry FiqSP0
|
||||
mov x0, #FIQ_SP_EL0
|
||||
bl plat_report_exception
|
||||
no_ret plat_panic_handler
|
||||
end_vector_entry FiqSP0
|
||||
|
||||
vector_entry SErrorSP0
|
||||
mov x0, #SERROR_SP_EL0
|
||||
bl plat_report_exception
|
||||
no_ret plat_panic_handler
|
||||
end_vector_entry SErrorSP0
|
||||
|
||||
/* -----------------------------------------------------
|
||||
* Current EL with SPx: 0x200 - 0x400
|
||||
* -----------------------------------------------------
|
||||
*/
|
||||
vector_entry SynchronousExceptionSPx
|
||||
mov x0, #SYNC_EXCEPTION_SP_ELX
|
||||
bl plat_report_exception
|
||||
no_ret plat_panic_handler
|
||||
end_vector_entry SynchronousExceptionSPx
|
||||
|
||||
vector_entry IrqSPx
|
||||
mov x0, #IRQ_SP_ELX
|
||||
bl plat_report_exception
|
||||
no_ret plat_panic_handler
|
||||
end_vector_entry IrqSPx
|
||||
|
||||
vector_entry FiqSPx
|
||||
mov x0, #FIQ_SP_ELX
|
||||
bl plat_report_exception
|
||||
no_ret plat_panic_handler
|
||||
end_vector_entry FiqSPx
|
||||
|
||||
vector_entry SErrorSPx
|
||||
mov x0, #SERROR_SP_ELX
|
||||
bl plat_report_exception
|
||||
no_ret plat_panic_handler
|
||||
end_vector_entry SErrorSPx
|
||||
|
||||
/* -----------------------------------------------------
|
||||
* Lower EL using AArch64 : 0x400 - 0x600
|
||||
* -----------------------------------------------------
|
||||
*/
|
||||
vector_entry SynchronousExceptionA64
|
||||
/* Enable the SError interrupt */
|
||||
msr daifclr, #DAIF_ABT_BIT
|
||||
|
||||
str x30, [sp, #CTX_GPREGS_OFFSET + CTX_GPREG_LR]
|
||||
|
||||
/* Expect only SMC exceptions */
|
||||
mrs x30, esr_el3
|
||||
ubfx x30, x30, #ESR_EC_SHIFT, #ESR_EC_LENGTH
|
||||
cmp x30, #EC_AARCH64_SMC
|
||||
b.ne unexpected_sync_exception
|
||||
|
||||
b smc_handler64
|
||||
end_vector_entry SynchronousExceptionA64
|
||||
|
||||
vector_entry IrqA64
|
||||
mov x0, #IRQ_AARCH64
|
||||
bl plat_report_exception
|
||||
no_ret plat_panic_handler
|
||||
end_vector_entry IrqA64
|
||||
|
||||
vector_entry FiqA64
|
||||
mov x0, #FIQ_AARCH64
|
||||
bl plat_report_exception
|
||||
no_ret plat_panic_handler
|
||||
end_vector_entry FiqA64
|
||||
|
||||
vector_entry SErrorA64
|
||||
mov x0, #SERROR_AARCH64
|
||||
bl plat_report_exception
|
||||
no_ret plat_panic_handler
|
||||
end_vector_entry SErrorA64
|
||||
|
||||
/* -----------------------------------------------------
|
||||
* Lower EL using AArch32 : 0x600 - 0x800
|
||||
* -----------------------------------------------------
|
||||
*/
|
||||
vector_entry SynchronousExceptionA32
|
||||
mov x0, #SYNC_EXCEPTION_AARCH32
|
||||
bl plat_report_exception
|
||||
no_ret plat_panic_handler
|
||||
end_vector_entry SynchronousExceptionA32
|
||||
|
||||
vector_entry IrqA32
|
||||
mov x0, #IRQ_AARCH32
|
||||
bl plat_report_exception
|
||||
no_ret plat_panic_handler
|
||||
end_vector_entry IrqA32
|
||||
|
||||
vector_entry FiqA32
|
||||
mov x0, #FIQ_AARCH32
|
||||
bl plat_report_exception
|
||||
no_ret plat_panic_handler
|
||||
end_vector_entry FiqA32
|
||||
|
||||
vector_entry SErrorA32
|
||||
mov x0, #SERROR_AARCH32
|
||||
bl plat_report_exception
|
||||
no_ret plat_panic_handler
|
||||
end_vector_entry SErrorA32
|
||||
|
||||
|
||||
func smc_handler64
|
||||
|
||||
/* ----------------------------------------------
|
||||
* Detect if this is a RUN_IMAGE or other SMC.
|
||||
* ----------------------------------------------
|
||||
*/
|
||||
mov x30, #BL1_SMC_RUN_IMAGE
|
||||
cmp x30, x0
|
||||
b.ne smc_handler
|
||||
|
||||
/* ------------------------------------------------
|
||||
* Make sure only Secure world reaches here.
|
||||
* ------------------------------------------------
|
||||
*/
|
||||
mrs x30, scr_el3
|
||||
tst x30, #SCR_NS_BIT
|
||||
b.ne unexpected_sync_exception
|
||||
|
||||
/* ----------------------------------------------
|
||||
* Handling RUN_IMAGE SMC. First switch back to
|
||||
* SP_EL0 for the C runtime stack.
|
||||
* ----------------------------------------------
|
||||
*/
|
||||
ldr x30, [sp, #CTX_EL3STATE_OFFSET + CTX_RUNTIME_SP]
|
||||
msr spsel, #MODE_SP_EL0
|
||||
mov sp, x30
|
||||
|
||||
/* ---------------------------------------------------------------------
|
||||
* Pass EL3 control to next BL image.
|
||||
* Here it expects X1 with the address of a entry_point_info_t
|
||||
* structure describing the next BL image entrypoint.
|
||||
* ---------------------------------------------------------------------
|
||||
*/
|
||||
mov x20, x1
|
||||
|
||||
mov x0, x20
|
||||
bl bl1_print_next_bl_ep_info
|
||||
|
||||
ldp x0, x1, [x20, #ENTRY_POINT_INFO_PC_OFFSET]
|
||||
msr elr_el3, x0
|
||||
msr spsr_el3, x1
|
||||
ubfx x0, x1, #MODE_EL_SHIFT, #2
|
||||
cmp x0, #MODE_EL3
|
||||
b.ne unexpected_sync_exception
|
||||
|
||||
bl disable_mmu_icache_el3
|
||||
tlbi alle3
|
||||
dsb ish /* ERET implies ISB, so it is not needed here */
|
||||
|
||||
#if SPIN_ON_BL1_EXIT
|
||||
bl print_debug_loop_message
|
||||
debug_loop:
|
||||
b debug_loop
|
||||
#endif
|
||||
|
||||
mov x0, x20
|
||||
bl bl1_plat_prepare_exit
|
||||
|
||||
ldp x6, x7, [x20, #(ENTRY_POINT_INFO_ARGS_OFFSET + 0x30)]
|
||||
ldp x4, x5, [x20, #(ENTRY_POINT_INFO_ARGS_OFFSET + 0x20)]
|
||||
ldp x2, x3, [x20, #(ENTRY_POINT_INFO_ARGS_OFFSET + 0x10)]
|
||||
ldp x0, x1, [x20, #(ENTRY_POINT_INFO_ARGS_OFFSET + 0x0)]
|
||||
exception_return
|
||||
endfunc smc_handler64
|
||||
|
||||
unexpected_sync_exception:
|
||||
mov x0, #SYNC_EXCEPTION_AARCH64
|
||||
bl plat_report_exception
|
||||
no_ret plat_panic_handler
|
||||
|
||||
/* -----------------------------------------------------
|
||||
* Save Secure/Normal world context and jump to
|
||||
* BL1 SMC handler.
|
||||
* -----------------------------------------------------
|
||||
*/
|
||||
smc_handler:
|
||||
/* -----------------------------------------------------
|
||||
* Save x0-x29 and ARMv8.3-PAuth (if enabled) registers.
|
||||
* Save PMCR_EL0 and disable Cycle Counter.
|
||||
* TODO: Revisit to store only SMCCC specified registers.
|
||||
* -----------------------------------------------------
|
||||
*/
|
||||
bl prepare_el3_entry
|
||||
|
||||
#if ENABLE_PAUTH
|
||||
/* -----------------------------------------------------
|
||||
* Load and program stored APIAKey firmware key.
|
||||
* Re-enable pointer authentication in EL3, as it was
|
||||
* disabled before jumping to the next boot image.
|
||||
* -----------------------------------------------------
|
||||
*/
|
||||
bl pauth_load_bl1_apiakey_enable
|
||||
#endif
|
||||
/* -----------------------------------------------------
|
||||
* Populate the parameters for the SMC handler. We
|
||||
* already have x0-x4 in place. x5 will point to a
|
||||
* cookie (not used now). x6 will point to the context
|
||||
* structure (SP_EL3) and x7 will contain flags we need
|
||||
* to pass to the handler.
|
||||
* -----------------------------------------------------
|
||||
*/
|
||||
mov x5, xzr
|
||||
mov x6, sp
|
||||
|
||||
/* -----------------------------------------------------
|
||||
* Restore the saved C runtime stack value which will
|
||||
* become the new SP_EL0 i.e. EL3 runtime stack. It was
|
||||
* saved in the 'cpu_context' structure prior to the last
|
||||
* ERET from EL3.
|
||||
* -----------------------------------------------------
|
||||
*/
|
||||
ldr x12, [x6, #CTX_EL3STATE_OFFSET + CTX_RUNTIME_SP]
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Switch back to SP_EL0 for the C runtime stack.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
msr spsel, #MODE_SP_EL0
|
||||
mov sp, x12
|
||||
|
||||
/* -----------------------------------------------------
|
||||
* Save the SPSR_EL3, ELR_EL3, & SCR_EL3 in case there
|
||||
* is a world switch during SMC handling.
|
||||
* -----------------------------------------------------
|
||||
*/
|
||||
mrs x16, spsr_el3
|
||||
mrs x17, elr_el3
|
||||
mrs x18, scr_el3
|
||||
stp x16, x17, [x6, #CTX_EL3STATE_OFFSET + CTX_SPSR_EL3]
|
||||
str x18, [x6, #CTX_EL3STATE_OFFSET + CTX_SCR_EL3]
|
||||
|
||||
/* Copy SCR_EL3.NS bit to the flag to indicate caller's security */
|
||||
bfi x7, x18, #0, #1
|
||||
|
||||
/* -----------------------------------------------------
|
||||
* Go to BL1 SMC handler.
|
||||
* -----------------------------------------------------
|
||||
*/
|
||||
bl bl1_smc_handler
|
||||
|
||||
/* -----------------------------------------------------
|
||||
* Do the transition to next BL image.
|
||||
* -----------------------------------------------------
|
||||
*/
|
||||
b el3_exit
|
||||
172
arm-trusted-firmware.t234/bl1/bl1.ld.S
Normal file
172
arm-trusted-firmware.t234/bl1/bl1.ld.S
Normal file
@@ -0,0 +1,172 @@
|
||||
/*
|
||||
* Copyright (c) 2013-2024, Arm Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
/*
|
||||
* The .data section gets copied from ROM to RAM at runtime. Its LMA should be
|
||||
* 16-byte aligned to allow efficient copying of 16-bytes aligned regions in it.
|
||||
* Its VMA must be page-aligned as it marks the first read/write page.
|
||||
*/
|
||||
#define DATA_ALIGN 16
|
||||
|
||||
#include <common/bl_common.ld.h>
|
||||
#include <lib/xlat_tables/xlat_tables_defs.h>
|
||||
|
||||
OUTPUT_FORMAT(PLATFORM_LINKER_FORMAT)
|
||||
OUTPUT_ARCH(PLATFORM_LINKER_ARCH)
|
||||
ENTRY(bl1_entrypoint)
|
||||
|
||||
MEMORY {
|
||||
ROM (rx): ORIGIN = BL1_RO_BASE, LENGTH = BL1_RO_LIMIT - BL1_RO_BASE
|
||||
RAM (rwx): ORIGIN = BL1_RW_BASE, LENGTH = BL1_RW_LIMIT - BL1_RW_BASE
|
||||
}
|
||||
|
||||
SECTIONS {
|
||||
. = BL1_RO_BASE;
|
||||
|
||||
ASSERT(. == ALIGN(PAGE_SIZE),
|
||||
"BL1_RO_BASE address is not aligned on a page boundary.")
|
||||
|
||||
#if SEPARATE_CODE_AND_RODATA
|
||||
.text . : {
|
||||
ASSERT(. == ALIGN(PAGE_SIZE),
|
||||
".text address is not aligned on a page boundary.");
|
||||
|
||||
__TEXT_START__ = .;
|
||||
|
||||
*bl1_entrypoint.o(.text*)
|
||||
*(SORT_BY_ALIGNMENT(.text*))
|
||||
*(.vectors)
|
||||
__TEXT_END_UNALIGNED__ = .;
|
||||
|
||||
. = ALIGN(PAGE_SIZE);
|
||||
|
||||
__TEXT_END__ = .;
|
||||
} >ROM
|
||||
|
||||
/* .ARM.extab and .ARM.exidx are only added because Clang needs them */
|
||||
.ARM.extab . : {
|
||||
*(.ARM.extab* .gnu.linkonce.armextab.*)
|
||||
} >ROM
|
||||
|
||||
.ARM.exidx . : {
|
||||
*(.ARM.exidx* .gnu.linkonce.armexidx.*)
|
||||
} >ROM
|
||||
|
||||
.rodata . : {
|
||||
__RODATA_START__ = .;
|
||||
|
||||
*(SORT_BY_ALIGNMENT(.rodata*))
|
||||
|
||||
RODATA_COMMON
|
||||
|
||||
/*
|
||||
* No need to pad out the .rodata section to a page boundary. Next is
|
||||
* the .data section, which can mapped in ROM with the same memory
|
||||
* attributes as the .rodata section.
|
||||
*
|
||||
* Pad out to 16 bytes though as .data section needs to be 16-byte
|
||||
* aligned and lld does not align the LMA to the alignment specified
|
||||
* on the .data section.
|
||||
*/
|
||||
__RODATA_END_UNALIGNED__ = .;
|
||||
__RODATA_END__ = .;
|
||||
|
||||
. = ALIGN(16);
|
||||
} >ROM
|
||||
#else /* SEPARATE_CODE_AND_RODATA */
|
||||
.ro . : {
|
||||
ASSERT(. == ALIGN(PAGE_SIZE),
|
||||
".ro address is not aligned on a page boundary.");
|
||||
|
||||
__RO_START__ = .;
|
||||
|
||||
*bl1_entrypoint.o(.text*)
|
||||
*(SORT_BY_ALIGNMENT(.text*))
|
||||
*(SORT_BY_ALIGNMENT(.rodata*))
|
||||
|
||||
RODATA_COMMON
|
||||
|
||||
*(.vectors)
|
||||
|
||||
__RO_END__ = .;
|
||||
|
||||
/*
|
||||
* Pad out to 16 bytes as the .data section needs to be 16-byte aligned
|
||||
* and lld does not align the LMA to the alignment specified on the
|
||||
* .data section.
|
||||
*/
|
||||
. = ALIGN(16);
|
||||
} >ROM
|
||||
#endif /* SEPARATE_CODE_AND_RODATA */
|
||||
|
||||
ASSERT(__CPU_OPS_END__ > __CPU_OPS_START__,
|
||||
"cpu_ops not defined for this platform.")
|
||||
|
||||
. = BL1_RW_BASE;
|
||||
|
||||
ASSERT(BL1_RW_BASE == ALIGN(PAGE_SIZE),
|
||||
"BL1_RW_BASE address is not aligned on a page boundary.")
|
||||
|
||||
__RW_START__ = .;
|
||||
|
||||
DATA_SECTION >RAM AT>ROM
|
||||
|
||||
__DATA_RAM_START__ = __DATA_START__;
|
||||
__DATA_RAM_END__ = __DATA_END__;
|
||||
|
||||
STACK_SECTION >RAM
|
||||
BSS_SECTION >RAM
|
||||
XLAT_TABLE_SECTION >RAM
|
||||
|
||||
#if USE_COHERENT_MEM
|
||||
/*
|
||||
* The base address of the coherent memory section must be page-aligned to
|
||||
* guarantee that the coherent data are stored on their own pages and are
|
||||
* not mixed with normal data. This is required to set up the correct memory
|
||||
* attributes for the coherent data page tables.
|
||||
*/
|
||||
.coherent_ram (NOLOAD) : ALIGN(PAGE_SIZE) {
|
||||
__COHERENT_RAM_START__ = .;
|
||||
*(.tzfw_coherent_mem)
|
||||
__COHERENT_RAM_END_UNALIGNED__ = .;
|
||||
|
||||
/*
|
||||
* Memory page(s) mapped to this section will be marked as device
|
||||
* memory. No other unexpected data must creep in. Ensure the rest of
|
||||
* the current memory page is unused.
|
||||
*/
|
||||
. = ALIGN(PAGE_SIZE);
|
||||
|
||||
__COHERENT_RAM_END__ = .;
|
||||
} >RAM
|
||||
#endif /* USE_COHERENT_MEM */
|
||||
|
||||
__RW_END__ = .;
|
||||
|
||||
__BL1_RAM_START__ = ADDR(.data);
|
||||
__BL1_RAM_END__ = .;
|
||||
|
||||
__DATA_ROM_START__ = LOADADDR(.data);
|
||||
__DATA_SIZE__ = SIZEOF(.data);
|
||||
|
||||
/*
|
||||
* The .data section is the last PROGBITS section so its end marks the end
|
||||
* of BL1's actual content in Trusted ROM.
|
||||
*/
|
||||
__BL1_ROM_END__ = __DATA_ROM_START__ + __DATA_SIZE__;
|
||||
|
||||
ASSERT(__BL1_ROM_END__ <= BL1_RO_LIMIT,
|
||||
"BL1's ROM content has exceeded its limit.")
|
||||
|
||||
__BSS_SIZE__ = SIZEOF(.bss);
|
||||
|
||||
#if USE_COHERENT_MEM
|
||||
__COHERENT_RAM_UNALIGNED_SIZE__ =
|
||||
__COHERENT_RAM_END_UNALIGNED__ - __COHERENT_RAM_START__;
|
||||
#endif /* USE_COHERENT_MEM */
|
||||
|
||||
ASSERT(. <= BL1_RW_LIMIT, "BL1's RW section has exceeded its limit.")
|
||||
}
|
||||
40
arm-trusted-firmware.t234/bl1/bl1.mk
Normal file
40
arm-trusted-firmware.t234/bl1/bl1.mk
Normal file
@@ -0,0 +1,40 @@
|
||||
#
|
||||
# Copyright (c) 2013-2024, Arm Limited and Contributors. All rights reserved.
|
||||
#
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
#
|
||||
|
||||
BL1_SOURCES += bl1/${ARCH}/bl1_arch_setup.c \
|
||||
bl1/${ARCH}/bl1_context_mgmt.c \
|
||||
bl1/${ARCH}/bl1_entrypoint.S \
|
||||
bl1/${ARCH}/bl1_exceptions.S \
|
||||
bl1/bl1_main.c \
|
||||
lib/cpus/${ARCH}/cpu_helpers.S \
|
||||
lib/cpus/errata_report.c \
|
||||
lib/el3_runtime/${ARCH}/context_mgmt.c \
|
||||
lib/locks/exclusive/${ARCH}/spinlock.S \
|
||||
plat/common/plat_bl1_common.c \
|
||||
plat/common/${ARCH}/platform_up_stack.S \
|
||||
${MBEDTLS_SOURCES}
|
||||
|
||||
ifeq (${ARCH},aarch64)
|
||||
BL1_SOURCES += lib/cpus/aarch64/dsu_helpers.S \
|
||||
lib/el3_runtime/aarch64/context.S \
|
||||
lib/cpus/errata_common.c
|
||||
endif
|
||||
|
||||
ifeq (${TRUSTED_BOARD_BOOT},1)
|
||||
BL1_SOURCES += bl1/bl1_fwu.c
|
||||
endif
|
||||
|
||||
ifeq (${ENABLE_PMF},1)
|
||||
BL1_SOURCES += lib/pmf/pmf_main.c
|
||||
endif
|
||||
|
||||
ifeq ($($(ARCH)-ld-id),gnu-gcc)
|
||||
BL1_LDFLAGS += -Wl,--sort-section=alignment
|
||||
else ifneq ($(filter llvm-lld gnu-ld,$($(ARCH)-ld-id)),)
|
||||
BL1_LDFLAGS += --sort-section=alignment
|
||||
endif
|
||||
|
||||
BL1_DEFAULT_LINKER_SCRIPT_SOURCE := bl1/bl1.ld.S
|
||||
745
arm-trusted-firmware.t234/bl1/bl1_fwu.c
Normal file
745
arm-trusted-firmware.t234/bl1/bl1_fwu.c
Normal file
@@ -0,0 +1,745 @@
|
||||
/*
|
||||
* Copyright (c) 2015-2020, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <platform_def.h>
|
||||
|
||||
#include <arch_helpers.h>
|
||||
#include <bl1/bl1.h>
|
||||
#include <common/bl_common.h>
|
||||
#include <common/debug.h>
|
||||
#include <context.h>
|
||||
#include <drivers/auth/auth_mod.h>
|
||||
#include <lib/el3_runtime/context_mgmt.h>
|
||||
#include <lib/utils.h>
|
||||
#include <plat/common/platform.h>
|
||||
#include <smccc_helpers.h>
|
||||
|
||||
#include "bl1_private.h"
|
||||
|
||||
/*
|
||||
* Function declarations.
|
||||
*/
|
||||
static int bl1_fwu_image_copy(unsigned int image_id,
|
||||
uintptr_t image_src,
|
||||
unsigned int block_size,
|
||||
unsigned int image_size,
|
||||
unsigned int flags);
|
||||
static int bl1_fwu_image_auth(unsigned int image_id,
|
||||
uintptr_t image_src,
|
||||
unsigned int image_size,
|
||||
unsigned int flags);
|
||||
static int bl1_fwu_image_execute(unsigned int image_id,
|
||||
void **handle,
|
||||
unsigned int flags);
|
||||
static register_t bl1_fwu_image_resume(register_t image_param,
|
||||
void **handle,
|
||||
unsigned int flags);
|
||||
static int bl1_fwu_sec_image_done(void **handle,
|
||||
unsigned int flags);
|
||||
static int bl1_fwu_image_reset(unsigned int image_id,
|
||||
unsigned int flags);
|
||||
__dead2 static void bl1_fwu_done(void *client_cookie, void *reserved);
|
||||
|
||||
/*
|
||||
* This keeps track of last executed secure image id.
|
||||
*/
|
||||
static unsigned int sec_exec_image_id = INVALID_IMAGE_ID;
|
||||
|
||||
/*******************************************************************************
|
||||
* Top level handler for servicing FWU SMCs.
|
||||
******************************************************************************/
|
||||
u_register_t bl1_fwu_smc_handler(unsigned int smc_fid,
|
||||
u_register_t x1,
|
||||
u_register_t x2,
|
||||
u_register_t x3,
|
||||
u_register_t x4,
|
||||
void *cookie,
|
||||
void *handle,
|
||||
unsigned int flags)
|
||||
{
|
||||
|
||||
switch (smc_fid) {
|
||||
case FWU_SMC_IMAGE_COPY:
|
||||
SMC_RET1(handle, bl1_fwu_image_copy((uint32_t)x1, x2,
|
||||
(uint32_t)x3, (uint32_t)x4, flags));
|
||||
|
||||
case FWU_SMC_IMAGE_AUTH:
|
||||
SMC_RET1(handle, bl1_fwu_image_auth((uint32_t)x1, x2,
|
||||
(uint32_t)x3, flags));
|
||||
|
||||
case FWU_SMC_IMAGE_EXECUTE:
|
||||
SMC_RET1(handle, bl1_fwu_image_execute((uint32_t)x1, &handle,
|
||||
flags));
|
||||
|
||||
case FWU_SMC_IMAGE_RESUME:
|
||||
SMC_RET1(handle, bl1_fwu_image_resume((register_t)x1, &handle,
|
||||
flags));
|
||||
|
||||
case FWU_SMC_SEC_IMAGE_DONE:
|
||||
SMC_RET1(handle, bl1_fwu_sec_image_done(&handle, flags));
|
||||
|
||||
case FWU_SMC_IMAGE_RESET:
|
||||
SMC_RET1(handle, bl1_fwu_image_reset((uint32_t)x1, flags));
|
||||
|
||||
case FWU_SMC_UPDATE_DONE:
|
||||
bl1_fwu_done((void *)x1, NULL);
|
||||
|
||||
default:
|
||||
assert(false); /* Unreachable */
|
||||
break;
|
||||
}
|
||||
|
||||
SMC_RET1(handle, SMC_UNK);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Utility functions to keep track of the images that are loaded at any time.
|
||||
******************************************************************************/
|
||||
|
||||
#ifdef PLAT_FWU_MAX_SIMULTANEOUS_IMAGES
|
||||
#define FWU_MAX_SIMULTANEOUS_IMAGES PLAT_FWU_MAX_SIMULTANEOUS_IMAGES
|
||||
#else
|
||||
#define FWU_MAX_SIMULTANEOUS_IMAGES 10
|
||||
#endif
|
||||
|
||||
static unsigned int bl1_fwu_loaded_ids[FWU_MAX_SIMULTANEOUS_IMAGES] = {
|
||||
[0 ... FWU_MAX_SIMULTANEOUS_IMAGES-1] = INVALID_IMAGE_ID
|
||||
};
|
||||
|
||||
/*
|
||||
* Adds an image_id to the bl1_fwu_loaded_ids array.
|
||||
* Returns 0 on success, 1 on error.
|
||||
*/
|
||||
static int bl1_fwu_add_loaded_id(unsigned int image_id)
|
||||
{
|
||||
int i;
|
||||
|
||||
/* Check if the ID is already in the list */
|
||||
for (i = 0; i < FWU_MAX_SIMULTANEOUS_IMAGES; i++) {
|
||||
if (bl1_fwu_loaded_ids[i] == image_id)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Find an empty slot */
|
||||
for (i = 0; i < FWU_MAX_SIMULTANEOUS_IMAGES; i++) {
|
||||
if (bl1_fwu_loaded_ids[i] == INVALID_IMAGE_ID) {
|
||||
bl1_fwu_loaded_ids[i] = image_id;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Removes an image_id from the bl1_fwu_loaded_ids array.
|
||||
* Returns 0 on success, 1 on error.
|
||||
*/
|
||||
static int bl1_fwu_remove_loaded_id(unsigned int image_id)
|
||||
{
|
||||
int i;
|
||||
|
||||
/* Find the ID */
|
||||
for (i = 0; i < FWU_MAX_SIMULTANEOUS_IMAGES; i++) {
|
||||
if (bl1_fwu_loaded_ids[i] == image_id) {
|
||||
bl1_fwu_loaded_ids[i] = INVALID_IMAGE_ID;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* This function checks if the specified image overlaps another image already
|
||||
* loaded. It returns 0 if there is no overlap, a negative error code otherwise.
|
||||
******************************************************************************/
|
||||
static int bl1_fwu_image_check_overlaps(unsigned int image_id)
|
||||
{
|
||||
const image_desc_t *desc, *checked_desc;
|
||||
const image_info_t *info, *checked_info;
|
||||
|
||||
uintptr_t image_base, image_end;
|
||||
uintptr_t checked_image_base, checked_image_end;
|
||||
|
||||
checked_desc = bl1_plat_get_image_desc(image_id);
|
||||
checked_info = &checked_desc->image_info;
|
||||
|
||||
/* Image being checked mustn't be empty. */
|
||||
assert(checked_info->image_size != 0);
|
||||
|
||||
checked_image_base = checked_info->image_base;
|
||||
checked_image_end = checked_image_base + checked_info->image_size - 1;
|
||||
/* No need to check for overflows, it's done in bl1_fwu_image_copy(). */
|
||||
|
||||
for (int i = 0; i < FWU_MAX_SIMULTANEOUS_IMAGES; i++) {
|
||||
|
||||
/* Skip INVALID_IMAGE_IDs and don't check image against itself */
|
||||
if ((bl1_fwu_loaded_ids[i] == INVALID_IMAGE_ID) ||
|
||||
(bl1_fwu_loaded_ids[i] == image_id))
|
||||
continue;
|
||||
|
||||
desc = bl1_plat_get_image_desc(bl1_fwu_loaded_ids[i]);
|
||||
|
||||
/* Only check images that are loaded or being loaded. */
|
||||
assert ((desc != NULL) && (desc->state != IMAGE_STATE_RESET));
|
||||
|
||||
info = &desc->image_info;
|
||||
|
||||
/* There cannot be overlaps with an empty image. */
|
||||
if (info->image_size == 0)
|
||||
continue;
|
||||
|
||||
image_base = info->image_base;
|
||||
image_end = image_base + info->image_size - 1;
|
||||
/*
|
||||
* Overflows cannot happen. It is checked in
|
||||
* bl1_fwu_image_copy() when the image goes from RESET to
|
||||
* COPYING or COPIED.
|
||||
*/
|
||||
assert (image_end > image_base);
|
||||
|
||||
/* Check if there are overlaps. */
|
||||
if (!((image_end < checked_image_base) ||
|
||||
(checked_image_end < image_base))) {
|
||||
VERBOSE("Image with ID %d overlaps existing image with ID %d",
|
||||
checked_desc->image_id, desc->image_id);
|
||||
return -EPERM;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* This function is responsible for copying secure images in AP Secure RAM.
|
||||
******************************************************************************/
|
||||
static int bl1_fwu_image_copy(unsigned int image_id,
|
||||
uintptr_t image_src,
|
||||
unsigned int block_size,
|
||||
unsigned int image_size,
|
||||
unsigned int flags)
|
||||
{
|
||||
uintptr_t dest_addr;
|
||||
unsigned int remaining;
|
||||
image_desc_t *desc;
|
||||
|
||||
/* Get the image descriptor. */
|
||||
desc = bl1_plat_get_image_desc(image_id);
|
||||
if (desc == NULL) {
|
||||
WARN("BL1-FWU: Invalid image ID %u\n", image_id);
|
||||
return -EPERM;
|
||||
}
|
||||
|
||||
/*
|
||||
* The request must originate from a non-secure caller and target a
|
||||
* secure image. Any other scenario is invalid.
|
||||
*/
|
||||
if (GET_SECURITY_STATE(flags) == SECURE) {
|
||||
WARN("BL1-FWU: Copy not allowed from secure world.\n");
|
||||
return -EPERM;
|
||||
}
|
||||
if (GET_SECURITY_STATE(desc->ep_info.h.attr) == NON_SECURE) {
|
||||
WARN("BL1-FWU: Copy not allowed for non-secure images.\n");
|
||||
return -EPERM;
|
||||
}
|
||||
|
||||
/* Check whether the FWU state machine is in the correct state. */
|
||||
if ((desc->state != IMAGE_STATE_RESET) &&
|
||||
(desc->state != IMAGE_STATE_COPYING)) {
|
||||
WARN("BL1-FWU: Copy not allowed at this point of the FWU"
|
||||
" process.\n");
|
||||
return -EPERM;
|
||||
}
|
||||
|
||||
if ((image_src == 0U) || (block_size == 0U) ||
|
||||
check_uptr_overflow(image_src, block_size - 1)) {
|
||||
WARN("BL1-FWU: Copy not allowed due to invalid image source"
|
||||
" or block size\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
if (desc->state == IMAGE_STATE_COPYING) {
|
||||
/*
|
||||
* There must have been at least 1 copy operation for this image
|
||||
* previously.
|
||||
*/
|
||||
assert(desc->copied_size != 0U);
|
||||
/*
|
||||
* The image size must have been recorded in the 1st copy
|
||||
* operation.
|
||||
*/
|
||||
image_size = desc->image_info.image_size;
|
||||
assert(image_size != 0);
|
||||
assert(desc->copied_size < image_size);
|
||||
|
||||
INFO("BL1-FWU: Continuing image copy in blocks\n");
|
||||
} else { /* desc->state == IMAGE_STATE_RESET */
|
||||
INFO("BL1-FWU: Initial call to copy an image\n");
|
||||
|
||||
/*
|
||||
* image_size is relevant only for the 1st copy request, it is
|
||||
* then ignored for subsequent calls for this image.
|
||||
*/
|
||||
if (image_size == 0) {
|
||||
WARN("BL1-FWU: Copy not allowed due to invalid image"
|
||||
" size\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
/* Check that the image size to load is within limit */
|
||||
if (image_size > desc->image_info.image_max_size) {
|
||||
WARN("BL1-FWU: Image size out of bounds\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
/* Save the given image size. */
|
||||
desc->image_info.image_size = image_size;
|
||||
|
||||
/* Make sure the image doesn't overlap other images. */
|
||||
if (bl1_fwu_image_check_overlaps(image_id) != 0) {
|
||||
desc->image_info.image_size = 0;
|
||||
WARN("BL1-FWU: This image overlaps another one\n");
|
||||
return -EPERM;
|
||||
}
|
||||
|
||||
/*
|
||||
* copied_size must be explicitly initialized here because the
|
||||
* FWU code doesn't necessarily do it when it resets the state
|
||||
* machine.
|
||||
*/
|
||||
desc->copied_size = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* If the given block size is more than the total image size
|
||||
* then clip the former to the latter.
|
||||
*/
|
||||
remaining = image_size - desc->copied_size;
|
||||
if (block_size > remaining) {
|
||||
WARN("BL1-FWU: Block size is too big, clipping it.\n");
|
||||
block_size = remaining;
|
||||
}
|
||||
|
||||
/* Make sure the source image is mapped in memory. */
|
||||
if (bl1_plat_mem_check(image_src, block_size, flags) != 0) {
|
||||
WARN("BL1-FWU: Source image is not mapped.\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
if (bl1_fwu_add_loaded_id(image_id) != 0) {
|
||||
WARN("BL1-FWU: Too many images loaded at the same time.\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
/* Allow the platform to handle pre-image load before copying */
|
||||
if (desc->state == IMAGE_STATE_RESET) {
|
||||
if (bl1_plat_handle_pre_image_load(image_id) != 0) {
|
||||
ERROR("BL1-FWU: Failure in pre-image load of image id %d\n",
|
||||
image_id);
|
||||
return -EPERM;
|
||||
}
|
||||
}
|
||||
|
||||
/* Everything looks sane. Go ahead and copy the block of data. */
|
||||
dest_addr = desc->image_info.image_base + desc->copied_size;
|
||||
(void)memcpy((void *) dest_addr, (const void *) image_src, block_size);
|
||||
flush_dcache_range(dest_addr, block_size);
|
||||
|
||||
desc->copied_size += block_size;
|
||||
desc->state = (block_size == remaining) ?
|
||||
IMAGE_STATE_COPIED : IMAGE_STATE_COPYING;
|
||||
|
||||
INFO("BL1-FWU: Copy operation successful.\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* This function is responsible for authenticating Normal/Secure images.
|
||||
******************************************************************************/
|
||||
static int bl1_fwu_image_auth(unsigned int image_id,
|
||||
uintptr_t image_src,
|
||||
unsigned int image_size,
|
||||
unsigned int flags)
|
||||
{
|
||||
int result;
|
||||
uintptr_t base_addr;
|
||||
unsigned int total_size;
|
||||
image_desc_t *desc;
|
||||
|
||||
/* Get the image descriptor. */
|
||||
desc = bl1_plat_get_image_desc(image_id);
|
||||
if (desc == NULL)
|
||||
return -EPERM;
|
||||
|
||||
if (GET_SECURITY_STATE(flags) == SECURE) {
|
||||
if (desc->state != IMAGE_STATE_RESET) {
|
||||
WARN("BL1-FWU: Authentication from secure world "
|
||||
"while in invalid state\n");
|
||||
return -EPERM;
|
||||
}
|
||||
} else {
|
||||
if (GET_SECURITY_STATE(desc->ep_info.h.attr) == SECURE) {
|
||||
if (desc->state != IMAGE_STATE_COPIED) {
|
||||
WARN("BL1-FWU: Authentication of secure image "
|
||||
"from non-secure world while not in copied state\n");
|
||||
return -EPERM;
|
||||
}
|
||||
} else {
|
||||
if (desc->state != IMAGE_STATE_RESET) {
|
||||
WARN("BL1-FWU: Authentication of non-secure image "
|
||||
"from non-secure world while in invalid state\n");
|
||||
return -EPERM;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (desc->state == IMAGE_STATE_COPIED) {
|
||||
/*
|
||||
* Image is in COPIED state.
|
||||
* Use the stored address and size.
|
||||
*/
|
||||
base_addr = desc->image_info.image_base;
|
||||
total_size = desc->image_info.image_size;
|
||||
} else {
|
||||
if ((image_src == 0U) || (image_size == 0U) ||
|
||||
check_uptr_overflow(image_src, image_size - 1)) {
|
||||
WARN("BL1-FWU: Auth not allowed due to invalid"
|
||||
" image source/size\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
/*
|
||||
* Image is in RESET state.
|
||||
* Check the parameters and authenticate the source image in place.
|
||||
*/
|
||||
if (bl1_plat_mem_check(image_src, image_size,
|
||||
desc->ep_info.h.attr) != 0) {
|
||||
WARN("BL1-FWU: Authentication arguments source/size not mapped\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
if (bl1_fwu_add_loaded_id(image_id) != 0) {
|
||||
WARN("BL1-FWU: Too many images loaded at the same time.\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
base_addr = image_src;
|
||||
total_size = image_size;
|
||||
|
||||
/* Update the image size in the descriptor. */
|
||||
desc->image_info.image_size = total_size;
|
||||
}
|
||||
|
||||
/*
|
||||
* Authenticate the image.
|
||||
*/
|
||||
INFO("BL1-FWU: Authenticating image_id:%d\n", image_id);
|
||||
result = auth_mod_verify_img(image_id, (void *)base_addr, total_size);
|
||||
if (result != 0) {
|
||||
WARN("BL1-FWU: Authentication Failed err=%d\n", result);
|
||||
|
||||
/*
|
||||
* Authentication has failed.
|
||||
* Clear the memory if the image was copied.
|
||||
* This is to prevent an attack where this contains
|
||||
* some malicious code that can somehow be executed later.
|
||||
*/
|
||||
if (desc->state == IMAGE_STATE_COPIED) {
|
||||
/* Clear the memory.*/
|
||||
zero_normalmem((void *)base_addr, total_size);
|
||||
flush_dcache_range(base_addr, total_size);
|
||||
|
||||
/* Indicate that image can be copied again*/
|
||||
desc->state = IMAGE_STATE_RESET;
|
||||
}
|
||||
|
||||
/*
|
||||
* Even if this fails it's ok because the ID isn't in the array.
|
||||
* The image cannot be in RESET state here, it is checked at the
|
||||
* beginning of the function.
|
||||
*/
|
||||
(void)bl1_fwu_remove_loaded_id(image_id);
|
||||
return -EAUTH;
|
||||
}
|
||||
|
||||
/* Indicate that image is in authenticated state. */
|
||||
desc->state = IMAGE_STATE_AUTHENTICATED;
|
||||
|
||||
/* Allow the platform to handle post-image load */
|
||||
result = bl1_plat_handle_post_image_load(image_id);
|
||||
if (result != 0) {
|
||||
ERROR("BL1-FWU: Failure %d in post-image load of image id %d\n",
|
||||
result, image_id);
|
||||
/*
|
||||
* Panic here as the platform handling of post-image load is
|
||||
* not correct.
|
||||
*/
|
||||
plat_error_handler(result);
|
||||
}
|
||||
|
||||
/*
|
||||
* Flush image_info to memory so that other
|
||||
* secure world images can see changes.
|
||||
*/
|
||||
flush_dcache_range((uintptr_t)&desc->image_info,
|
||||
sizeof(image_info_t));
|
||||
|
||||
INFO("BL1-FWU: Authentication was successful\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* This function is responsible for executing Secure images.
|
||||
******************************************************************************/
|
||||
static int bl1_fwu_image_execute(unsigned int image_id,
|
||||
void **handle,
|
||||
unsigned int flags)
|
||||
{
|
||||
/* Get the image descriptor. */
|
||||
image_desc_t *desc = bl1_plat_get_image_desc(image_id);
|
||||
|
||||
/*
|
||||
* Execution is NOT allowed if:
|
||||
* image_id is invalid OR
|
||||
* Caller is from Secure world OR
|
||||
* Image is Non-Secure OR
|
||||
* Image is Non-Executable OR
|
||||
* Image is NOT in AUTHENTICATED state.
|
||||
*/
|
||||
if ((desc == NULL) ||
|
||||
(GET_SECURITY_STATE(flags) == SECURE) ||
|
||||
(GET_SECURITY_STATE(desc->ep_info.h.attr) == NON_SECURE) ||
|
||||
(EP_GET_EXE(desc->ep_info.h.attr) == NON_EXECUTABLE) ||
|
||||
(desc->state != IMAGE_STATE_AUTHENTICATED)) {
|
||||
WARN("BL1-FWU: Execution not allowed due to invalid state/args\n");
|
||||
return -EPERM;
|
||||
}
|
||||
|
||||
INFO("BL1-FWU: Executing Secure image\n");
|
||||
|
||||
#ifdef __aarch64__
|
||||
/* Save NS-EL1 system registers. */
|
||||
cm_el1_sysregs_context_save(NON_SECURE);
|
||||
#endif
|
||||
|
||||
/* Prepare the image for execution. */
|
||||
bl1_prepare_next_image(image_id);
|
||||
|
||||
/* Update the secure image id. */
|
||||
sec_exec_image_id = image_id;
|
||||
|
||||
#ifdef __aarch64__
|
||||
*handle = cm_get_context(SECURE);
|
||||
#else
|
||||
*handle = smc_get_ctx(SECURE);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* This function is responsible for resuming execution in the other security
|
||||
* world
|
||||
******************************************************************************/
|
||||
static register_t bl1_fwu_image_resume(register_t image_param,
|
||||
void **handle,
|
||||
unsigned int flags)
|
||||
{
|
||||
image_desc_t *desc;
|
||||
unsigned int resume_sec_state;
|
||||
unsigned int caller_sec_state = GET_SECURITY_STATE(flags);
|
||||
|
||||
/* Get the image descriptor for last executed secure image id. */
|
||||
desc = bl1_plat_get_image_desc(sec_exec_image_id);
|
||||
if (caller_sec_state == NON_SECURE) {
|
||||
if (desc == NULL) {
|
||||
WARN("BL1-FWU: Resume not allowed due to no available"
|
||||
"secure image\n");
|
||||
return -EPERM;
|
||||
}
|
||||
} else {
|
||||
/* desc must be valid for secure world callers */
|
||||
assert(desc != NULL);
|
||||
}
|
||||
|
||||
assert(GET_SECURITY_STATE(desc->ep_info.h.attr) == SECURE);
|
||||
assert(EP_GET_EXE(desc->ep_info.h.attr) == EXECUTABLE);
|
||||
|
||||
if (caller_sec_state == SECURE) {
|
||||
assert(desc->state == IMAGE_STATE_EXECUTED);
|
||||
|
||||
/* Update the flags. */
|
||||
desc->state = IMAGE_STATE_INTERRUPTED;
|
||||
resume_sec_state = NON_SECURE;
|
||||
} else {
|
||||
assert(desc->state == IMAGE_STATE_INTERRUPTED);
|
||||
|
||||
/* Update the flags. */
|
||||
desc->state = IMAGE_STATE_EXECUTED;
|
||||
resume_sec_state = SECURE;
|
||||
}
|
||||
|
||||
INFO("BL1-FWU: Resuming %s world context\n",
|
||||
(resume_sec_state == SECURE) ? "secure" : "normal");
|
||||
|
||||
#ifdef __aarch64__
|
||||
/* Save the EL1 system registers of calling world. */
|
||||
cm_el1_sysregs_context_save(caller_sec_state);
|
||||
|
||||
/* Restore the EL1 system registers of resuming world. */
|
||||
cm_el1_sysregs_context_restore(resume_sec_state);
|
||||
|
||||
/* Update the next context. */
|
||||
cm_set_next_eret_context(resume_sec_state);
|
||||
|
||||
*handle = cm_get_context(resume_sec_state);
|
||||
#else
|
||||
/* Update the next context. */
|
||||
cm_set_next_context(cm_get_context(resume_sec_state));
|
||||
|
||||
/* Prepare the smc context for the next BL image. */
|
||||
smc_set_next_ctx(resume_sec_state);
|
||||
|
||||
*handle = smc_get_ctx(resume_sec_state);
|
||||
#endif
|
||||
return image_param;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* This function is responsible for resuming normal world context.
|
||||
******************************************************************************/
|
||||
static int bl1_fwu_sec_image_done(void **handle, unsigned int flags)
|
||||
{
|
||||
image_desc_t *desc;
|
||||
|
||||
/* Make sure caller is from the secure world */
|
||||
if (GET_SECURITY_STATE(flags) == NON_SECURE) {
|
||||
WARN("BL1-FWU: Image done not allowed from normal world\n");
|
||||
return -EPERM;
|
||||
}
|
||||
|
||||
/* Get the image descriptor for last executed secure image id */
|
||||
desc = bl1_plat_get_image_desc(sec_exec_image_id);
|
||||
|
||||
/* desc must correspond to a valid secure executing image */
|
||||
assert(desc != NULL);
|
||||
assert(GET_SECURITY_STATE(desc->ep_info.h.attr) == SECURE);
|
||||
assert(EP_GET_EXE(desc->ep_info.h.attr) == EXECUTABLE);
|
||||
assert(desc->state == IMAGE_STATE_EXECUTED);
|
||||
|
||||
#if ENABLE_ASSERTIONS
|
||||
int rc = bl1_fwu_remove_loaded_id(sec_exec_image_id);
|
||||
assert(rc == 0);
|
||||
#else
|
||||
bl1_fwu_remove_loaded_id(sec_exec_image_id);
|
||||
#endif
|
||||
|
||||
/* Update the flags. */
|
||||
desc->state = IMAGE_STATE_RESET;
|
||||
sec_exec_image_id = INVALID_IMAGE_ID;
|
||||
|
||||
INFO("BL1-FWU: Resuming Normal world context\n");
|
||||
#ifdef __aarch64__
|
||||
/*
|
||||
* Secure world is done so no need to save the context.
|
||||
* Just restore the Non-Secure context.
|
||||
*/
|
||||
cm_el1_sysregs_context_restore(NON_SECURE);
|
||||
|
||||
/* Update the next context. */
|
||||
cm_set_next_eret_context(NON_SECURE);
|
||||
|
||||
*handle = cm_get_context(NON_SECURE);
|
||||
#else
|
||||
/* Update the next context. */
|
||||
cm_set_next_context(cm_get_context(NON_SECURE));
|
||||
|
||||
/* Prepare the smc context for the next BL image. */
|
||||
smc_set_next_ctx(NON_SECURE);
|
||||
|
||||
*handle = smc_get_ctx(NON_SECURE);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* This function provides the opportunity for users to perform any
|
||||
* platform specific handling after the Firmware update is done.
|
||||
******************************************************************************/
|
||||
__dead2 static void bl1_fwu_done(void *client_cookie, void *reserved)
|
||||
{
|
||||
NOTICE("BL1-FWU: *******FWU Process Completed*******\n");
|
||||
|
||||
/*
|
||||
* Call platform done function.
|
||||
*/
|
||||
bl1_plat_fwu_done(client_cookie, reserved);
|
||||
assert(false);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* This function resets an image to IMAGE_STATE_RESET. It fails if the image is
|
||||
* being executed.
|
||||
******************************************************************************/
|
||||
static int bl1_fwu_image_reset(unsigned int image_id, unsigned int flags)
|
||||
{
|
||||
image_desc_t *desc = bl1_plat_get_image_desc(image_id);
|
||||
|
||||
if ((desc == NULL) || (GET_SECURITY_STATE(flags) == SECURE)) {
|
||||
WARN("BL1-FWU: Reset not allowed due to invalid args\n");
|
||||
return -EPERM;
|
||||
}
|
||||
|
||||
switch (desc->state) {
|
||||
|
||||
case IMAGE_STATE_RESET:
|
||||
/* Nothing to do. */
|
||||
break;
|
||||
|
||||
case IMAGE_STATE_INTERRUPTED:
|
||||
case IMAGE_STATE_AUTHENTICATED:
|
||||
case IMAGE_STATE_COPIED:
|
||||
case IMAGE_STATE_COPYING:
|
||||
|
||||
if (bl1_fwu_remove_loaded_id(image_id) != 0) {
|
||||
WARN("BL1-FWU: Image reset couldn't find the image ID\n");
|
||||
return -EPERM;
|
||||
}
|
||||
|
||||
if (desc->copied_size != 0U) {
|
||||
/* Clear the memory if the image is copied */
|
||||
assert(GET_SECURITY_STATE(desc->ep_info.h.attr)
|
||||
== SECURE);
|
||||
|
||||
zero_normalmem((void *)desc->image_info.image_base,
|
||||
desc->copied_size);
|
||||
flush_dcache_range(desc->image_info.image_base,
|
||||
desc->copied_size);
|
||||
}
|
||||
|
||||
/* Reset status variables */
|
||||
desc->copied_size = 0;
|
||||
desc->image_info.image_size = 0;
|
||||
desc->state = IMAGE_STATE_RESET;
|
||||
|
||||
/* Clear authentication state */
|
||||
auth_img_flags[image_id] = 0;
|
||||
|
||||
break;
|
||||
|
||||
case IMAGE_STATE_EXECUTED:
|
||||
default:
|
||||
assert(false); /* Unreachable */
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
285
arm-trusted-firmware.t234/bl1/bl1_main.c
Normal file
285
arm-trusted-firmware.t234/bl1/bl1_main.c
Normal file
@@ -0,0 +1,285 @@
|
||||
/*
|
||||
* Copyright (c) 2013-2024, Arm Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
#include <platform_def.h>
|
||||
|
||||
#include <arch.h>
|
||||
#include <arch_features.h>
|
||||
#include <arch_helpers.h>
|
||||
#include <bl1/bl1.h>
|
||||
#include <common/bl_common.h>
|
||||
#include <common/build_message.h>
|
||||
#include <common/debug.h>
|
||||
#include <drivers/auth/auth_mod.h>
|
||||
#include <drivers/auth/crypto_mod.h>
|
||||
#include <drivers/console.h>
|
||||
#include <lib/bootmarker_capture.h>
|
||||
#include <lib/cpus/errata.h>
|
||||
#include <lib/pmf/pmf.h>
|
||||
#include <lib/utils.h>
|
||||
#include <plat/common/platform.h>
|
||||
#include <smccc_helpers.h>
|
||||
#include <tools_share/uuid.h>
|
||||
|
||||
#include "bl1_private.h"
|
||||
|
||||
static void bl1_load_bl2(void);
|
||||
|
||||
#if ENABLE_PAUTH
|
||||
uint64_t bl1_apiakey[2];
|
||||
#endif
|
||||
|
||||
#if ENABLE_RUNTIME_INSTRUMENTATION
|
||||
PMF_REGISTER_SERVICE(bl_svc, PMF_RT_INSTR_SVC_ID,
|
||||
BL_TOTAL_IDS, PMF_DUMP_ENABLE)
|
||||
#endif
|
||||
|
||||
/*******************************************************************************
|
||||
* Setup function for BL1.
|
||||
******************************************************************************/
|
||||
void bl1_setup(void)
|
||||
{
|
||||
/* Enable early console if EARLY_CONSOLE flag is enabled */
|
||||
plat_setup_early_console();
|
||||
|
||||
/* Perform early platform-specific setup */
|
||||
bl1_early_platform_setup();
|
||||
|
||||
/* Perform late platform-specific setup */
|
||||
bl1_plat_arch_setup();
|
||||
|
||||
#if CTX_INCLUDE_PAUTH_REGS
|
||||
/*
|
||||
* Assert that the ARMv8.3-PAuth registers are present or an access
|
||||
* fault will be triggered when they are being saved or restored.
|
||||
*/
|
||||
assert(is_armv8_3_pauth_present());
|
||||
#endif /* CTX_INCLUDE_PAUTH_REGS */
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function to perform late architectural and platform specific initialization.
|
||||
* It also queries the platform to load and run next BL image. Only called
|
||||
* by the primary cpu after a cold boot.
|
||||
******************************************************************************/
|
||||
void bl1_main(void)
|
||||
{
|
||||
unsigned int image_id;
|
||||
|
||||
#if ENABLE_RUNTIME_INSTRUMENTATION
|
||||
PMF_CAPTURE_TIMESTAMP(bl_svc, BL1_ENTRY, PMF_CACHE_MAINT);
|
||||
#endif
|
||||
|
||||
/* Announce our arrival */
|
||||
NOTICE(FIRMWARE_WELCOME_STR);
|
||||
NOTICE("BL1: %s\n", build_version_string);
|
||||
NOTICE("BL1: %s\n", build_message);
|
||||
|
||||
INFO("BL1: RAM %p - %p\n", (void *)BL1_RAM_BASE, (void *)BL1_RAM_LIMIT);
|
||||
|
||||
print_errata_status();
|
||||
|
||||
#if ENABLE_ASSERTIONS
|
||||
u_register_t val;
|
||||
/*
|
||||
* Ensure that MMU/Caches and coherency are turned on
|
||||
*/
|
||||
#ifdef __aarch64__
|
||||
val = read_sctlr_el3();
|
||||
#else
|
||||
val = read_sctlr();
|
||||
#endif
|
||||
assert((val & SCTLR_M_BIT) != 0);
|
||||
assert((val & SCTLR_C_BIT) != 0);
|
||||
assert((val & SCTLR_I_BIT) != 0);
|
||||
/*
|
||||
* Check that Cache Writeback Granule (CWG) in CTR_EL0 matches the
|
||||
* provided platform value
|
||||
*/
|
||||
val = (read_ctr_el0() >> CTR_CWG_SHIFT) & CTR_CWG_MASK;
|
||||
/*
|
||||
* If CWG is zero, then no CWG information is available but we can
|
||||
* at least check the platform value is less than the architectural
|
||||
* maximum.
|
||||
*/
|
||||
if (val != 0)
|
||||
assert(CACHE_WRITEBACK_GRANULE == SIZE_FROM_LOG2_WORDS(val));
|
||||
else
|
||||
assert(CACHE_WRITEBACK_GRANULE <= MAX_CACHE_LINE_SIZE);
|
||||
#endif /* ENABLE_ASSERTIONS */
|
||||
|
||||
/* Perform remaining generic architectural setup from EL3 */
|
||||
bl1_arch_setup();
|
||||
|
||||
crypto_mod_init();
|
||||
|
||||
/* Initialize authentication module */
|
||||
auth_mod_init();
|
||||
|
||||
/* Initialize the measured boot */
|
||||
bl1_plat_mboot_init();
|
||||
|
||||
/* Perform platform setup in BL1. */
|
||||
bl1_platform_setup();
|
||||
|
||||
#if ENABLE_PAUTH
|
||||
/* Store APIAKey_EL1 key */
|
||||
bl1_apiakey[0] = read_apiakeylo_el1();
|
||||
bl1_apiakey[1] = read_apiakeyhi_el1();
|
||||
#endif /* ENABLE_PAUTH */
|
||||
|
||||
/* Get the image id of next image to load and run. */
|
||||
image_id = bl1_plat_get_next_image_id();
|
||||
|
||||
/*
|
||||
* We currently interpret any image id other than
|
||||
* BL2_IMAGE_ID as the start of firmware update.
|
||||
*/
|
||||
if (image_id == BL2_IMAGE_ID)
|
||||
bl1_load_bl2();
|
||||
else
|
||||
NOTICE("BL1-FWU: *******FWU Process Started*******\n");
|
||||
|
||||
/* Teardown the measured boot driver */
|
||||
bl1_plat_mboot_finish();
|
||||
|
||||
bl1_prepare_next_image(image_id);
|
||||
|
||||
#if ENABLE_RUNTIME_INSTRUMENTATION
|
||||
PMF_CAPTURE_TIMESTAMP(bl_svc, BL1_EXIT, PMF_CACHE_MAINT);
|
||||
#endif
|
||||
|
||||
console_flush();
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* This function locates and loads the BL2 raw binary image in the trusted SRAM.
|
||||
* Called by the primary cpu after a cold boot.
|
||||
* TODO: Add support for alternative image load mechanism e.g using virtio/elf
|
||||
* loader etc.
|
||||
******************************************************************************/
|
||||
static void bl1_load_bl2(void)
|
||||
{
|
||||
image_desc_t *desc;
|
||||
image_info_t *info;
|
||||
int err;
|
||||
|
||||
/* Get the image descriptor */
|
||||
desc = bl1_plat_get_image_desc(BL2_IMAGE_ID);
|
||||
assert(desc != NULL);
|
||||
|
||||
/* Get the image info */
|
||||
info = &desc->image_info;
|
||||
INFO("BL1: Loading BL2\n");
|
||||
|
||||
err = bl1_plat_handle_pre_image_load(BL2_IMAGE_ID);
|
||||
if (err != 0) {
|
||||
ERROR("Failure in pre image load handling of BL2 (%d)\n", err);
|
||||
plat_error_handler(err);
|
||||
}
|
||||
|
||||
err = load_auth_image(BL2_IMAGE_ID, info);
|
||||
if (err != 0) {
|
||||
ERROR("Failed to load BL2 firmware.\n");
|
||||
plat_error_handler(err);
|
||||
}
|
||||
|
||||
/* Allow platform to handle image information. */
|
||||
err = bl1_plat_handle_post_image_load(BL2_IMAGE_ID);
|
||||
if (err != 0) {
|
||||
ERROR("Failure in post image load handling of BL2 (%d)\n", err);
|
||||
plat_error_handler(err);
|
||||
}
|
||||
|
||||
NOTICE("BL1: Booting BL2\n");
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function called just before handing over to the next BL to inform the user
|
||||
* about the boot progress. In debug mode, also print details about the BL
|
||||
* image's execution context.
|
||||
******************************************************************************/
|
||||
void bl1_print_next_bl_ep_info(const entry_point_info_t *bl_ep_info)
|
||||
{
|
||||
#ifdef __aarch64__
|
||||
NOTICE("BL1: Booting BL31\n");
|
||||
#else
|
||||
NOTICE("BL1: Booting BL32\n");
|
||||
#endif /* __aarch64__ */
|
||||
print_entry_point_info(bl_ep_info);
|
||||
}
|
||||
|
||||
#if SPIN_ON_BL1_EXIT
|
||||
void print_debug_loop_message(void)
|
||||
{
|
||||
NOTICE("BL1: Debug loop, spinning forever\n");
|
||||
NOTICE("BL1: Please connect the debugger to continue\n");
|
||||
}
|
||||
#endif
|
||||
|
||||
/*******************************************************************************
|
||||
* Top level handler for servicing BL1 SMCs.
|
||||
******************************************************************************/
|
||||
u_register_t bl1_smc_handler(unsigned int smc_fid,
|
||||
u_register_t x1,
|
||||
u_register_t x2,
|
||||
u_register_t x3,
|
||||
u_register_t x4,
|
||||
void *cookie,
|
||||
void *handle,
|
||||
unsigned int flags)
|
||||
{
|
||||
/* BL1 Service UUID */
|
||||
DEFINE_SVC_UUID2(bl1_svc_uid,
|
||||
U(0xd46739fd), 0xcb72, 0x9a4d, 0xb5, 0x75,
|
||||
0x67, 0x15, 0xd6, 0xf4, 0xbb, 0x4a);
|
||||
|
||||
|
||||
#if TRUSTED_BOARD_BOOT
|
||||
/*
|
||||
* Dispatch FWU calls to FWU SMC handler and return its return
|
||||
* value
|
||||
*/
|
||||
if (is_fwu_fid(smc_fid)) {
|
||||
return bl1_fwu_smc_handler(smc_fid, x1, x2, x3, x4, cookie,
|
||||
handle, flags);
|
||||
}
|
||||
#endif
|
||||
|
||||
switch (smc_fid) {
|
||||
case BL1_SMC_CALL_COUNT:
|
||||
SMC_RET1(handle, BL1_NUM_SMC_CALLS);
|
||||
|
||||
case BL1_SMC_UID:
|
||||
SMC_UUID_RET(handle, bl1_svc_uid);
|
||||
|
||||
case BL1_SMC_VERSION:
|
||||
SMC_RET1(handle, BL1_SMC_MAJOR_VER | BL1_SMC_MINOR_VER);
|
||||
|
||||
default:
|
||||
WARN("Unimplemented BL1 SMC Call: 0x%x\n", smc_fid);
|
||||
SMC_RET1(handle, SMC_UNK);
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* BL1 SMC wrapper. This function is only used in AArch32 mode to ensure ABI
|
||||
* compliance when invoking bl1_smc_handler.
|
||||
******************************************************************************/
|
||||
u_register_t bl1_smc_wrapper(uint32_t smc_fid,
|
||||
void *cookie,
|
||||
void *handle,
|
||||
unsigned int flags)
|
||||
{
|
||||
u_register_t x1, x2, x3, x4;
|
||||
|
||||
assert(handle != NULL);
|
||||
|
||||
get_smc_params_from_ctx(handle, x1, x2, x3, x4);
|
||||
return bl1_smc_handler(smc_fid, x1, x2, x3, x4, cookie, handle, flags);
|
||||
}
|
||||
34
arm-trusted-firmware.t234/bl1/bl1_private.h
Normal file
34
arm-trusted-firmware.t234/bl1/bl1_private.h
Normal file
@@ -0,0 +1,34 @@
|
||||
/*
|
||||
* Copyright (c) 2013-2021, Arm Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#ifndef BL1_PRIVATE_H
|
||||
#define BL1_PRIVATE_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#include <common/bl_common.h>
|
||||
|
||||
extern entry_point_info_t *bl2_ep_info;
|
||||
|
||||
/******************************************
|
||||
* Function prototypes
|
||||
*****************************************/
|
||||
void bl1_arch_setup(void);
|
||||
void bl1_arch_next_el_setup(void);
|
||||
|
||||
void bl1_prepare_next_image(unsigned int image_id);
|
||||
void bl1_run_bl2_in_root(void);
|
||||
|
||||
u_register_t bl1_fwu_smc_handler(unsigned int smc_fid,
|
||||
u_register_t x1,
|
||||
u_register_t x2,
|
||||
u_register_t x3,
|
||||
u_register_t x4,
|
||||
void *cookie,
|
||||
void *handle,
|
||||
unsigned int flags);
|
||||
|
||||
#endif /* BL1_PRIVATE_H */
|
||||
65
arm-trusted-firmware.t234/bl1/tbbr/tbbr_img_desc.c
Normal file
65
arm-trusted-firmware.t234/bl1/tbbr/tbbr_img_desc.c
Normal file
@@ -0,0 +1,65 @@
|
||||
/*
|
||||
* Copyright (c) 2015-2020, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <platform_def.h>
|
||||
|
||||
#include <bl1/tbbr/tbbr_img_desc.h>
|
||||
#include <common/bl_common.h>
|
||||
|
||||
image_desc_t bl1_tbbr_image_descs[] = {
|
||||
{
|
||||
.image_id = FWU_CERT_ID,
|
||||
SET_STATIC_PARAM_HEAD(image_info, PARAM_IMAGE_BINARY,
|
||||
VERSION_1, image_info_t, 0),
|
||||
.image_info.image_base = BL2_BASE,
|
||||
.image_info.image_max_size = BL2_LIMIT - BL2_BASE,
|
||||
SET_STATIC_PARAM_HEAD(ep_info, PARAM_IMAGE_BINARY,
|
||||
VERSION_1, entry_point_info_t, SECURE),
|
||||
},
|
||||
#if NS_BL1U_BASE
|
||||
{
|
||||
.image_id = NS_BL1U_IMAGE_ID,
|
||||
SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP,
|
||||
VERSION_1, entry_point_info_t, NON_SECURE | EXECUTABLE),
|
||||
.ep_info.pc = NS_BL1U_BASE,
|
||||
},
|
||||
#endif
|
||||
#if SCP_BL2U_BASE
|
||||
{
|
||||
.image_id = SCP_BL2U_IMAGE_ID,
|
||||
SET_STATIC_PARAM_HEAD(image_info, PARAM_IMAGE_BINARY,
|
||||
VERSION_1, image_info_t, 0),
|
||||
.image_info.image_base = SCP_BL2U_BASE,
|
||||
.image_info.image_max_size = SCP_BL2U_LIMIT - SCP_BL2U_BASE,
|
||||
SET_STATIC_PARAM_HEAD(ep_info, PARAM_IMAGE_BINARY,
|
||||
VERSION_1, entry_point_info_t, SECURE),
|
||||
},
|
||||
#endif
|
||||
#if BL2U_BASE
|
||||
{
|
||||
.image_id = BL2U_IMAGE_ID,
|
||||
SET_STATIC_PARAM_HEAD(image_info, PARAM_EP,
|
||||
VERSION_1, image_info_t, 0),
|
||||
.image_info.image_base = BL2U_BASE,
|
||||
.image_info.image_max_size = BL2U_LIMIT - BL2U_BASE,
|
||||
SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP,
|
||||
VERSION_1, entry_point_info_t, SECURE | EXECUTABLE),
|
||||
.ep_info.pc = BL2U_BASE,
|
||||
},
|
||||
#endif
|
||||
#if NS_BL2U_BASE
|
||||
{
|
||||
.image_id = NS_BL2U_IMAGE_ID,
|
||||
SET_STATIC_PARAM_HEAD(ep_info, PARAM_EP,
|
||||
VERSION_1, entry_point_info_t, NON_SECURE),
|
||||
},
|
||||
#endif
|
||||
BL2_IMAGE_DESC,
|
||||
|
||||
{
|
||||
.image_id = INVALID_IMAGE_ID,
|
||||
}
|
||||
};
|
||||
16
arm-trusted-firmware.t234/bl2/aarch32/bl2_arch_setup.c
Normal file
16
arm-trusted-firmware.t234/bl2/aarch32/bl2_arch_setup.c
Normal file
@@ -0,0 +1,16 @@
|
||||
/*
|
||||
* Copyright (c) 2016, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include "../bl2_private.h"
|
||||
|
||||
/*******************************************************************************
|
||||
* Place holder function to perform any Secure SVC specific architectural
|
||||
* setup. At the moment there is nothing to do.
|
||||
******************************************************************************/
|
||||
void bl2_arch_setup(void)
|
||||
{
|
||||
|
||||
}
|
||||
57
arm-trusted-firmware.t234/bl2/aarch32/bl2_el3_entrypoint.S
Normal file
57
arm-trusted-firmware.t234/bl2/aarch32/bl2_el3_entrypoint.S
Normal file
@@ -0,0 +1,57 @@
|
||||
/*
|
||||
* Copyright (c) 2017-2021, Arm Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <arch.h>
|
||||
#include <asm_macros.S>
|
||||
#include <common/bl_common.h>
|
||||
#include <el3_common_macros.S>
|
||||
|
||||
.globl bl2_entrypoint
|
||||
|
||||
|
||||
func bl2_entrypoint
|
||||
/* Save arguments x0-x3 from previous Boot loader */
|
||||
mov r9, r0
|
||||
mov r10, r1
|
||||
mov r11, r2
|
||||
mov r12, r3
|
||||
|
||||
el3_entrypoint_common \
|
||||
_init_sctlr=1 \
|
||||
_warm_boot_mailbox=!PROGRAMMABLE_RESET_ADDRESS \
|
||||
_secondary_cold_boot=!COLD_BOOT_SINGLE_CPU \
|
||||
_init_memory=1 \
|
||||
_init_c_runtime=1 \
|
||||
_exception_vectors=bl2_vector_table \
|
||||
_pie_fixup_size=0
|
||||
|
||||
/*
|
||||
* Restore parameters of boot rom
|
||||
*/
|
||||
mov r0, r9
|
||||
mov r1, r10
|
||||
mov r2, r11
|
||||
mov r3, r12
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Perform BL2 setup
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
bl bl2_el3_setup
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Jump to main function.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
bl bl2_main
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Should never reach this point.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
no_ret plat_panic_handler
|
||||
|
||||
endfunc bl2_entrypoint
|
||||
21
arm-trusted-firmware.t234/bl2/aarch32/bl2_el3_exceptions.S
Normal file
21
arm-trusted-firmware.t234/bl2/aarch32/bl2_el3_exceptions.S
Normal file
@@ -0,0 +1,21 @@
|
||||
/*
|
||||
* Copyright (c) 2017-2022, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <arch.h>
|
||||
#include <asm_macros.S>
|
||||
#include <common/bl_common.h>
|
||||
|
||||
.globl bl2_vector_table
|
||||
|
||||
vector_base bl2_vector_table
|
||||
b bl2_entrypoint
|
||||
b report_exception /* Undef */
|
||||
b report_exception /* SVC call */
|
||||
b report_prefetch_abort /* Prefetch abort */
|
||||
b report_data_abort /* Data abort */
|
||||
b report_exception /* Reserved */
|
||||
b report_exception /* IRQ */
|
||||
b report_exception /* FIQ */
|
||||
136
arm-trusted-firmware.t234/bl2/aarch32/bl2_entrypoint.S
Normal file
136
arm-trusted-firmware.t234/bl2/aarch32/bl2_entrypoint.S
Normal file
@@ -0,0 +1,136 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2022, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <arch.h>
|
||||
#include <asm_macros.S>
|
||||
#include <common/bl_common.h>
|
||||
|
||||
.globl bl2_vector_table
|
||||
.globl bl2_entrypoint
|
||||
|
||||
|
||||
vector_base bl2_vector_table
|
||||
b bl2_entrypoint
|
||||
b report_exception /* Undef */
|
||||
b report_exception /* SVC call */
|
||||
b report_prefetch_abort /* Prefetch abort */
|
||||
b report_data_abort /* Data abort */
|
||||
b report_exception /* Reserved */
|
||||
b report_exception /* IRQ */
|
||||
b report_exception /* FIQ */
|
||||
|
||||
|
||||
func bl2_entrypoint
|
||||
/*---------------------------------------------
|
||||
* Save arguments x0 - x3 from BL1 for future
|
||||
* use.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
mov r9, r0
|
||||
mov r10, r1
|
||||
mov r11, r2
|
||||
mov r12, r3
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Set the exception vector to something sane.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
ldr r0, =bl2_vector_table
|
||||
stcopr r0, VBAR
|
||||
isb
|
||||
|
||||
/* --------------------------------------------------------
|
||||
* Enable the instruction cache - disable speculative loads
|
||||
* --------------------------------------------------------
|
||||
*/
|
||||
ldcopr r0, SCTLR
|
||||
orr r0, r0, #SCTLR_I_BIT
|
||||
bic r0, r0, #SCTLR_DSSBS_BIT
|
||||
stcopr r0, SCTLR
|
||||
isb
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Since BL2 executes after BL1, it is assumed
|
||||
* here that BL1 has already has done the
|
||||
* necessary register initializations.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Invalidate the RW memory used by the BL2
|
||||
* image. This includes the data and NOBITS
|
||||
* sections. This is done to safeguard against
|
||||
* possible corruption of this memory by dirty
|
||||
* cache lines in a system cache as a result of
|
||||
* use by an earlier boot loader stage.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
ldr r0, =__RW_START__
|
||||
ldr r1, =__RW_END__
|
||||
sub r1, r1, r0
|
||||
bl inv_dcache_range
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Zero out NOBITS sections. There are 2 of them:
|
||||
* - the .bss section;
|
||||
* - the coherent memory section.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
ldr r0, =__BSS_START__
|
||||
ldr r1, =__BSS_END__
|
||||
sub r1, r1, r0
|
||||
bl zeromem
|
||||
|
||||
#if USE_COHERENT_MEM
|
||||
ldr r0, =__COHERENT_RAM_START__
|
||||
ldr r1, =__COHERENT_RAM_END_UNALIGNED__
|
||||
sub r1, r1, r0
|
||||
bl zeromem
|
||||
#endif
|
||||
|
||||
/* --------------------------------------------
|
||||
* Allocate a stack whose memory will be marked
|
||||
* as Normal-IS-WBWA when the MMU is enabled.
|
||||
* There is no risk of reading stale stack
|
||||
* memory after enabling the MMU as only the
|
||||
* primary cpu is running at the moment.
|
||||
* --------------------------------------------
|
||||
*/
|
||||
bl plat_set_my_stack
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Initialize the stack protector canary before
|
||||
* any C code is called.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
#if STACK_PROTECTOR_ENABLED
|
||||
bl update_stack_protector_canary
|
||||
#endif
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Perform BL2 setup
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
mov r0, r9
|
||||
mov r1, r10
|
||||
mov r2, r11
|
||||
mov r3, r12
|
||||
|
||||
bl bl2_setup
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Jump to main function.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
bl bl2_main
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Should never reach this point.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
no_ret plat_panic_handler
|
||||
|
||||
endfunc bl2_entrypoint
|
||||
46
arm-trusted-firmware.t234/bl2/aarch32/bl2_run_next_image.S
Normal file
46
arm-trusted-firmware.t234/bl2/aarch32/bl2_run_next_image.S
Normal file
@@ -0,0 +1,46 @@
|
||||
/*
|
||||
* Copyright (c) 2021, Arm Limited. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <arch.h>
|
||||
#include <asm_macros.S>
|
||||
#include <common/bl_common.h>
|
||||
|
||||
.globl bl2_run_next_image
|
||||
|
||||
|
||||
func bl2_run_next_image
|
||||
mov r8,r0
|
||||
|
||||
/*
|
||||
* MMU needs to be disabled because both BL2 and BL32 execute
|
||||
* in PL1, and therefore share the same address space.
|
||||
* BL32 will initialize the address space according to its
|
||||
* own requirement.
|
||||
*/
|
||||
bl disable_mmu_icache_secure
|
||||
stcopr r0, TLBIALL
|
||||
dsb sy
|
||||
isb
|
||||
mov r0, r8
|
||||
bl bl2_el3_plat_prepare_exit
|
||||
|
||||
/*
|
||||
* Extract PC and SPSR based on struct `entry_point_info_t`
|
||||
* and load it in LR and SPSR registers respectively.
|
||||
*/
|
||||
ldr lr, [r8, #ENTRY_POINT_INFO_PC_OFFSET]
|
||||
ldr r1, [r8, #(ENTRY_POINT_INFO_PC_OFFSET + 4)]
|
||||
msr spsr_xc, r1
|
||||
|
||||
/* Some BL32 stages expect lr_svc to provide the BL33 entry address */
|
||||
cps #MODE32_svc
|
||||
ldr lr, [r8, #ENTRY_POINT_INFO_LR_SVC_OFFSET]
|
||||
cps #MODE32_mon
|
||||
|
||||
add r8, r8, #ENTRY_POINT_INFO_ARGS_OFFSET
|
||||
ldm r8, {r0, r1, r2, r3}
|
||||
exception_return
|
||||
endfunc bl2_run_next_image
|
||||
19
arm-trusted-firmware.t234/bl2/aarch64/bl2_arch_setup.c
Normal file
19
arm-trusted-firmware.t234/bl2/aarch64/bl2_arch_setup.c
Normal file
@@ -0,0 +1,19 @@
|
||||
/*
|
||||
* Copyright (c) 2013-2018, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <arch.h>
|
||||
#include <arch_helpers.h>
|
||||
#include "../bl2_private.h"
|
||||
|
||||
/*******************************************************************************
|
||||
* Place holder function to perform any S-EL1 specific architectural setup. At
|
||||
* the moment there is nothing to do.
|
||||
******************************************************************************/
|
||||
void bl2_arch_setup(void)
|
||||
{
|
||||
/* Give access to FP/SIMD registers */
|
||||
write_cpacr(CPACR_EL1_FPEN(CPACR_EL1_FP_TRAP_NONE));
|
||||
}
|
||||
72
arm-trusted-firmware.t234/bl2/aarch64/bl2_el3_entrypoint.S
Normal file
72
arm-trusted-firmware.t234/bl2/aarch64/bl2_el3_entrypoint.S
Normal file
@@ -0,0 +1,72 @@
|
||||
/*
|
||||
* Copyright (c) 2017-2021, Arm Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <platform_def.h>
|
||||
|
||||
#include <arch.h>
|
||||
#include <asm_macros.S>
|
||||
#include <common/bl_common.h>
|
||||
#include <el3_common_macros.S>
|
||||
|
||||
.globl bl2_entrypoint
|
||||
|
||||
#if BL2_IN_XIP_MEM
|
||||
#define FIXUP_SIZE 0
|
||||
#else
|
||||
#define FIXUP_SIZE ((BL2_LIMIT) - (BL2_BASE))
|
||||
#endif
|
||||
|
||||
func bl2_entrypoint
|
||||
/* Save arguments x0-x3 from previous Boot loader */
|
||||
mov x20, x0
|
||||
mov x21, x1
|
||||
mov x22, x2
|
||||
mov x23, x3
|
||||
|
||||
el3_entrypoint_common \
|
||||
_init_sctlr=1 \
|
||||
_warm_boot_mailbox=!PROGRAMMABLE_RESET_ADDRESS \
|
||||
_secondary_cold_boot=!COLD_BOOT_SINGLE_CPU \
|
||||
_init_memory=1 \
|
||||
_init_c_runtime=1 \
|
||||
_exception_vectors=bl2_el3_exceptions \
|
||||
_pie_fixup_size=FIXUP_SIZE
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Restore parameters of boot rom
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
mov x0, x20
|
||||
mov x1, x21
|
||||
mov x2, x22
|
||||
mov x3, x23
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Perform BL2 setup
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
bl bl2_el3_setup
|
||||
|
||||
#if ENABLE_PAUTH
|
||||
/* ---------------------------------------------
|
||||
* Program APIAKey_EL1 and enable pointer authentication.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
bl pauth_init_enable_el3
|
||||
#endif /* ENABLE_PAUTH */
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Jump to main function.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
bl bl2_main
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Should never reach this point.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
no_ret plat_panic_handler
|
||||
endfunc bl2_entrypoint
|
||||
131
arm-trusted-firmware.t234/bl2/aarch64/bl2_el3_exceptions.S
Normal file
131
arm-trusted-firmware.t234/bl2/aarch64/bl2_el3_exceptions.S
Normal file
@@ -0,0 +1,131 @@
|
||||
/*
|
||||
* Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <arch.h>
|
||||
#include <asm_macros.S>
|
||||
#include <bl1/bl1.h>
|
||||
#include <common/bl_common.h>
|
||||
#include <context.h>
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* Very simple stackless exception handlers used by BL2.
|
||||
* -----------------------------------------------------------------------------
|
||||
*/
|
||||
.globl bl2_el3_exceptions
|
||||
|
||||
vector_base bl2_el3_exceptions
|
||||
|
||||
/* -----------------------------------------------------
|
||||
* Current EL with SP0 : 0x0 - 0x200
|
||||
* -----------------------------------------------------
|
||||
*/
|
||||
vector_entry SynchronousExceptionSP0
|
||||
mov x0, #SYNC_EXCEPTION_SP_EL0
|
||||
bl plat_report_exception
|
||||
no_ret plat_panic_handler
|
||||
end_vector_entry SynchronousExceptionSP0
|
||||
|
||||
vector_entry IrqSP0
|
||||
mov x0, #IRQ_SP_EL0
|
||||
bl plat_report_exception
|
||||
no_ret plat_panic_handler
|
||||
end_vector_entry IrqSP0
|
||||
|
||||
vector_entry FiqSP0
|
||||
mov x0, #FIQ_SP_EL0
|
||||
bl plat_report_exception
|
||||
no_ret plat_panic_handler
|
||||
end_vector_entry FiqSP0
|
||||
|
||||
vector_entry SErrorSP0
|
||||
mov x0, #SERROR_SP_EL0
|
||||
bl plat_report_exception
|
||||
no_ret plat_panic_handler
|
||||
end_vector_entry SErrorSP0
|
||||
|
||||
/* -----------------------------------------------------
|
||||
* Current EL with SPx: 0x200 - 0x400
|
||||
* -----------------------------------------------------
|
||||
*/
|
||||
vector_entry SynchronousExceptionSPx
|
||||
mov x0, #SYNC_EXCEPTION_SP_ELX
|
||||
bl plat_report_exception
|
||||
no_ret plat_panic_handler
|
||||
end_vector_entry SynchronousExceptionSPx
|
||||
|
||||
vector_entry IrqSPx
|
||||
mov x0, #IRQ_SP_ELX
|
||||
bl plat_report_exception
|
||||
no_ret plat_panic_handler
|
||||
end_vector_entry IrqSPx
|
||||
|
||||
vector_entry FiqSPx
|
||||
mov x0, #FIQ_SP_ELX
|
||||
bl plat_report_exception
|
||||
no_ret plat_panic_handler
|
||||
end_vector_entry FiqSPx
|
||||
|
||||
vector_entry SErrorSPx
|
||||
mov x0, #SERROR_SP_ELX
|
||||
bl plat_report_exception
|
||||
no_ret plat_panic_handler
|
||||
end_vector_entry SErrorSPx
|
||||
|
||||
/* -----------------------------------------------------
|
||||
* Lower EL using AArch64 : 0x400 - 0x600
|
||||
* -----------------------------------------------------
|
||||
*/
|
||||
vector_entry SynchronousExceptionA64
|
||||
mov x0, #SYNC_EXCEPTION_AARCH64
|
||||
bl plat_report_exception
|
||||
no_ret plat_panic_handler
|
||||
end_vector_entry SynchronousExceptionA64
|
||||
|
||||
vector_entry IrqA64
|
||||
mov x0, #IRQ_AARCH64
|
||||
bl plat_report_exception
|
||||
no_ret plat_panic_handler
|
||||
end_vector_entry IrqA64
|
||||
|
||||
vector_entry FiqA64
|
||||
mov x0, #FIQ_AARCH64
|
||||
bl plat_report_exception
|
||||
no_ret plat_panic_handler
|
||||
end_vector_entry FiqA64
|
||||
|
||||
vector_entry SErrorA64
|
||||
mov x0, #SERROR_AARCH64
|
||||
bl plat_report_exception
|
||||
no_ret plat_panic_handler
|
||||
end_vector_entry SErrorA64
|
||||
|
||||
/* -----------------------------------------------------
|
||||
* Lower EL using AArch32 : 0x600 - 0x800
|
||||
* -----------------------------------------------------
|
||||
*/
|
||||
vector_entry SynchronousExceptionA32
|
||||
mov x0, #SYNC_EXCEPTION_AARCH32
|
||||
bl plat_report_exception
|
||||
no_ret plat_panic_handler
|
||||
end_vector_entry SynchronousExceptionA32
|
||||
|
||||
vector_entry IrqA32
|
||||
mov x0, #IRQ_AARCH32
|
||||
bl plat_report_exception
|
||||
no_ret plat_panic_handler
|
||||
end_vector_entry IrqA32
|
||||
|
||||
vector_entry FiqA32
|
||||
mov x0, #FIQ_AARCH32
|
||||
bl plat_report_exception
|
||||
no_ret plat_panic_handler
|
||||
end_vector_entry FiqA32
|
||||
|
||||
vector_entry SErrorA32
|
||||
mov x0, #SERROR_AARCH32
|
||||
bl plat_report_exception
|
||||
no_ret plat_panic_handler
|
||||
end_vector_entry SErrorA32
|
||||
141
arm-trusted-firmware.t234/bl2/aarch64/bl2_entrypoint.S
Normal file
141
arm-trusted-firmware.t234/bl2/aarch64/bl2_entrypoint.S
Normal file
@@ -0,0 +1,141 @@
|
||||
/*
|
||||
* Copyright (c) 2013-2019, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <arch.h>
|
||||
#include <asm_macros.S>
|
||||
#include <common/bl_common.h>
|
||||
|
||||
|
||||
.globl bl2_entrypoint
|
||||
|
||||
|
||||
|
||||
func bl2_entrypoint
|
||||
/*---------------------------------------------
|
||||
* Save arguments x0 - x3 from BL1 for future
|
||||
* use.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
mov x20, x0
|
||||
mov x21, x1
|
||||
mov x22, x2
|
||||
mov x23, x3
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Set the exception vector to something sane.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
adr x0, early_exceptions
|
||||
msr vbar_el1, x0
|
||||
isb
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Enable the SError interrupt now that the
|
||||
* exception vectors have been setup.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
msr daifclr, #DAIF_ABT_BIT
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Enable the instruction cache, stack pointer
|
||||
* and data access alignment checks and disable
|
||||
* speculative loads.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
mov x1, #(SCTLR_I_BIT | SCTLR_A_BIT | SCTLR_SA_BIT)
|
||||
mrs x0, sctlr_el1
|
||||
orr x0, x0, x1
|
||||
bic x0, x0, #SCTLR_DSSBS_BIT
|
||||
msr sctlr_el1, x0
|
||||
isb
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Invalidate the RW memory used by the BL2
|
||||
* image. This includes the data and NOBITS
|
||||
* sections. This is done to safeguard against
|
||||
* possible corruption of this memory by dirty
|
||||
* cache lines in a system cache as a result of
|
||||
* use by an earlier boot loader stage.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
adr x0, __RW_START__
|
||||
adr x1, __RW_END__
|
||||
sub x1, x1, x0
|
||||
bl inv_dcache_range
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Zero out NOBITS sections. There are 2 of them:
|
||||
* - the .bss section;
|
||||
* - the coherent memory section.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
adrp x0, __BSS_START__
|
||||
add x0, x0, :lo12:__BSS_START__
|
||||
adrp x1, __BSS_END__
|
||||
add x1, x1, :lo12:__BSS_END__
|
||||
sub x1, x1, x0
|
||||
bl zeromem
|
||||
|
||||
#if USE_COHERENT_MEM
|
||||
adrp x0, __COHERENT_RAM_START__
|
||||
add x0, x0, :lo12:__COHERENT_RAM_START__
|
||||
adrp x1, __COHERENT_RAM_END_UNALIGNED__
|
||||
add x1, x1, :lo12:__COHERENT_RAM_END_UNALIGNED__
|
||||
sub x1, x1, x0
|
||||
bl zeromem
|
||||
#endif
|
||||
|
||||
/* --------------------------------------------
|
||||
* Allocate a stack whose memory will be marked
|
||||
* as Normal-IS-WBWA when the MMU is enabled.
|
||||
* There is no risk of reading stale stack
|
||||
* memory after enabling the MMU as only the
|
||||
* primary cpu is running at the moment.
|
||||
* --------------------------------------------
|
||||
*/
|
||||
bl plat_set_my_stack
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Initialize the stack protector canary before
|
||||
* any C code is called.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
#if STACK_PROTECTOR_ENABLED
|
||||
bl update_stack_protector_canary
|
||||
#endif
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Perform BL2 setup
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
mov x0, x20
|
||||
mov x1, x21
|
||||
mov x2, x22
|
||||
mov x3, x23
|
||||
bl bl2_setup
|
||||
|
||||
#if ENABLE_PAUTH
|
||||
/* ---------------------------------------------
|
||||
* Program APIAKey_EL1
|
||||
* and enable pointer authentication.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
bl pauth_init_enable_el1
|
||||
#endif /* ENABLE_PAUTH */
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Jump to main function.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
bl bl2_main
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Should never reach this point.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
no_ret plat_panic_handler
|
||||
|
||||
endfunc bl2_entrypoint
|
||||
67
arm-trusted-firmware.t234/bl2/aarch64/bl2_rme_entrypoint.S
Normal file
67
arm-trusted-firmware.t234/bl2/aarch64/bl2_rme_entrypoint.S
Normal file
@@ -0,0 +1,67 @@
|
||||
/*
|
||||
* Copyright (c) 2021, Arm Limited. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <platform_def.h>
|
||||
|
||||
#include <arch.h>
|
||||
#include <asm_macros.S>
|
||||
#include <common/bl_common.h>
|
||||
#include <el3_common_macros.S>
|
||||
|
||||
.globl bl2_entrypoint
|
||||
|
||||
|
||||
func bl2_entrypoint
|
||||
/* Save arguments x0-x3 from previous Boot loader */
|
||||
mov x20, x0
|
||||
mov x21, x1
|
||||
mov x22, x2
|
||||
mov x23, x3
|
||||
|
||||
el3_entrypoint_common \
|
||||
_init_sctlr=0 \
|
||||
_warm_boot_mailbox=0 \
|
||||
_secondary_cold_boot=0 \
|
||||
_init_memory=0 \
|
||||
_init_c_runtime=1 \
|
||||
_exception_vectors=bl2_el3_exceptions \
|
||||
_pie_fixup_size=0
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Restore parameters of boot rom
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
mov x0, x20
|
||||
mov x1, x21
|
||||
mov x2, x22
|
||||
mov x3, x23
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Perform BL2 setup
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
bl bl2_setup
|
||||
|
||||
#if ENABLE_PAUTH
|
||||
/* ---------------------------------------------
|
||||
* Program APIAKey_EL1 and enable pointer authentication.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
bl pauth_init_enable_el3
|
||||
#endif /* ENABLE_PAUTH */
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Jump to main function.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
bl bl2_main
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Should never reach this point.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
no_ret plat_panic_handler
|
||||
endfunc bl2_entrypoint
|
||||
45
arm-trusted-firmware.t234/bl2/aarch64/bl2_run_next_image.S
Normal file
45
arm-trusted-firmware.t234/bl2/aarch64/bl2_run_next_image.S
Normal file
@@ -0,0 +1,45 @@
|
||||
/*
|
||||
* Copyright (c) 2021, Arm Limited. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <arch.h>
|
||||
#include <asm_macros.S>
|
||||
#include <common/bl_common.h>
|
||||
|
||||
.globl bl2_run_next_image
|
||||
|
||||
|
||||
func bl2_run_next_image
|
||||
mov x20,x0
|
||||
/* ---------------------------------------------
|
||||
* MMU needs to be disabled because both BL2 and BL31 execute
|
||||
* in EL3, and therefore share the same address space.
|
||||
* BL31 will initialize the address space according to its
|
||||
* own requirement.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
bl disable_mmu_icache_el3
|
||||
tlbi alle3
|
||||
bl bl2_el3_plat_prepare_exit
|
||||
|
||||
#if ENABLE_PAUTH
|
||||
/* ---------------------------------------------
|
||||
* Disable pointer authentication before jumping
|
||||
* to next boot image.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
bl pauth_disable_el3
|
||||
#endif /* ENABLE_PAUTH */
|
||||
|
||||
ldp x0, x1, [x20, #ENTRY_POINT_INFO_PC_OFFSET]
|
||||
msr elr_el3, x0
|
||||
msr spsr_el3, x1
|
||||
|
||||
ldp x6, x7, [x20, #(ENTRY_POINT_INFO_ARGS_OFFSET + 0x30)]
|
||||
ldp x4, x5, [x20, #(ENTRY_POINT_INFO_ARGS_OFFSET + 0x20)]
|
||||
ldp x2, x3, [x20, #(ENTRY_POINT_INFO_ARGS_OFFSET + 0x10)]
|
||||
ldp x0, x1, [x20, #(ENTRY_POINT_INFO_ARGS_OFFSET + 0x0)]
|
||||
exception_return
|
||||
endfunc bl2_run_next_image
|
||||
136
arm-trusted-firmware.t234/bl2/bl2.ld.S
Normal file
136
arm-trusted-firmware.t234/bl2/bl2.ld.S
Normal file
@@ -0,0 +1,136 @@
|
||||
/*
|
||||
* Copyright (c) 2013-2023, Arm Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <common/bl_common.ld.h>
|
||||
#include <lib/xlat_tables/xlat_tables_defs.h>
|
||||
|
||||
OUTPUT_FORMAT(PLATFORM_LINKER_FORMAT)
|
||||
OUTPUT_ARCH(PLATFORM_LINKER_ARCH)
|
||||
ENTRY(bl2_entrypoint)
|
||||
|
||||
MEMORY {
|
||||
RAM (rwx): ORIGIN = BL2_BASE, LENGTH = BL2_LIMIT - BL2_BASE
|
||||
}
|
||||
|
||||
SECTIONS {
|
||||
. = BL2_BASE;
|
||||
|
||||
ASSERT(. == ALIGN(PAGE_SIZE),
|
||||
"BL2_BASE address is not aligned on a page boundary.")
|
||||
|
||||
#if SEPARATE_CODE_AND_RODATA
|
||||
.text . : {
|
||||
ASSERT(. == ALIGN(PAGE_SIZE),
|
||||
".text address is not aligned on a page boundary.");
|
||||
|
||||
__TEXT_START__ = .;
|
||||
|
||||
#if ENABLE_RME
|
||||
*bl2_rme_entrypoint.o(.text*)
|
||||
#else /* ENABLE_RME */
|
||||
*bl2_entrypoint.o(.text*)
|
||||
#endif /* ENABLE_RME */
|
||||
|
||||
*(SORT_BY_ALIGNMENT(.text*))
|
||||
*(.vectors)
|
||||
__TEXT_END_UNALIGNED__ = .;
|
||||
|
||||
. = ALIGN(PAGE_SIZE);
|
||||
|
||||
__TEXT_END__ = .;
|
||||
} >RAM
|
||||
|
||||
/* .ARM.extab and .ARM.exidx are only added because Clang needs them */
|
||||
.ARM.extab . : {
|
||||
*(.ARM.extab* .gnu.linkonce.armextab.*)
|
||||
} >RAM
|
||||
|
||||
.ARM.exidx . : {
|
||||
*(.ARM.exidx* .gnu.linkonce.armexidx.*)
|
||||
} >RAM
|
||||
|
||||
.rodata . : {
|
||||
__RODATA_START__ = .;
|
||||
|
||||
*(SORT_BY_ALIGNMENT(.rodata*))
|
||||
|
||||
RODATA_COMMON
|
||||
|
||||
__RODATA_END_UNALIGNED__ = .;
|
||||
. = ALIGN(PAGE_SIZE);
|
||||
|
||||
__RODATA_END__ = .;
|
||||
} >RAM
|
||||
#else /* SEPARATE_CODE_AND_RODATA */
|
||||
.ro . : {
|
||||
ASSERT(. == ALIGN(PAGE_SIZE),
|
||||
".ro address is not aligned on a page boundary.");
|
||||
|
||||
__RO_START__ = .;
|
||||
|
||||
*bl2_entrypoint.o(.text*)
|
||||
*(SORT_BY_ALIGNMENT(.text*))
|
||||
*(SORT_BY_ALIGNMENT(.rodata*))
|
||||
|
||||
RODATA_COMMON
|
||||
|
||||
*(.vectors)
|
||||
|
||||
__RO_END_UNALIGNED__ = .;
|
||||
|
||||
/*
|
||||
* Memory page(s) mapped to this section will be marked as read-only,
|
||||
* executable. No RW data from the next section must creep in. Ensure
|
||||
* that the rest of the current memory page is unused.
|
||||
*/
|
||||
. = ALIGN(PAGE_SIZE);
|
||||
|
||||
__RO_END__ = .;
|
||||
} >RAM
|
||||
#endif /* SEPARATE_CODE_AND_RODATA */
|
||||
|
||||
__RW_START__ = .;
|
||||
|
||||
DATA_SECTION >RAM
|
||||
STACK_SECTION >RAM
|
||||
BSS_SECTION >RAM
|
||||
XLAT_TABLE_SECTION >RAM
|
||||
|
||||
#if USE_COHERENT_MEM
|
||||
/*
|
||||
* The base address of the coherent memory section must be page-aligned to
|
||||
* guarantee that the coherent data are stored on their own pages and are
|
||||
* not mixed with normal data. This is required to set up the correct
|
||||
* memory attributes for the coherent data page tables.
|
||||
*/
|
||||
.coherent_ram (NOLOAD) : ALIGN(PAGE_SIZE) {
|
||||
__COHERENT_RAM_START__ = .;
|
||||
*(.tzfw_coherent_mem)
|
||||
__COHERENT_RAM_END_UNALIGNED__ = .;
|
||||
|
||||
/*
|
||||
* Memory page(s) mapped to this section will be marked as device
|
||||
* memory. No other unexpected data must creep in. Ensure the rest of
|
||||
* the current memory page is unused.
|
||||
*/
|
||||
. = ALIGN(PAGE_SIZE);
|
||||
|
||||
__COHERENT_RAM_END__ = .;
|
||||
} >RAM
|
||||
#endif /* USE_COHERENT_MEM */
|
||||
|
||||
__RW_END__ = .;
|
||||
__BL2_END__ = .;
|
||||
|
||||
__BSS_SIZE__ = SIZEOF(.bss);
|
||||
|
||||
#if USE_COHERENT_MEM
|
||||
__COHERENT_RAM_UNALIGNED_SIZE__ =
|
||||
__COHERENT_RAM_END_UNALIGNED__ - __COHERENT_RAM_START__;
|
||||
#endif /* USE_COHERENT_MEM */
|
||||
|
||||
ASSERT(. <= BL2_LIMIT, "BL2 image has exceeded its limit.")
|
||||
}
|
||||
55
arm-trusted-firmware.t234/bl2/bl2.mk
Normal file
55
arm-trusted-firmware.t234/bl2/bl2.mk
Normal file
@@ -0,0 +1,55 @@
|
||||
#
|
||||
# Copyright (c) 2013-2024, Arm Limited and Contributors. All rights reserved.
|
||||
#
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
#
|
||||
|
||||
BL2_SOURCES += bl2/bl2_image_load_v2.c \
|
||||
bl2/bl2_main.c \
|
||||
bl2/${ARCH}/bl2_arch_setup.c \
|
||||
lib/locks/exclusive/${ARCH}/spinlock.S \
|
||||
plat/common/${ARCH}/platform_up_stack.S \
|
||||
${MBEDTLS_SOURCES}
|
||||
|
||||
ifeq (${ARCH},aarch64)
|
||||
BL2_SOURCES += common/aarch64/early_exceptions.S
|
||||
endif
|
||||
|
||||
ifeq ($($(ARCH)-ld-id),gnu-gcc)
|
||||
BL2_LDFLAGS += -Wl,--sort-section=alignment
|
||||
else ifneq ($(filter llvm-lld gnu-ld,$($(ARCH)-ld-id)),)
|
||||
BL2_LDFLAGS += --sort-section=alignment
|
||||
endif
|
||||
|
||||
ifeq (${ENABLE_RME},1)
|
||||
# Using RME, run BL2 at EL3
|
||||
include lib/gpt_rme/gpt_rme.mk
|
||||
|
||||
BL2_SOURCES += bl2/${ARCH}/bl2_rme_entrypoint.S \
|
||||
bl2/${ARCH}/bl2_el3_exceptions.S \
|
||||
bl2/${ARCH}/bl2_run_next_image.S \
|
||||
${GPT_LIB_SRCS}
|
||||
BL2_DEFAULT_LINKER_SCRIPT_SOURCE := bl2/bl2.ld.S
|
||||
|
||||
else ifeq (${RESET_TO_BL2},0)
|
||||
# Normal operation, no RME, no BL2 at EL3
|
||||
BL2_SOURCES += bl2/${ARCH}/bl2_entrypoint.S
|
||||
BL2_DEFAULT_LINKER_SCRIPT_SOURCE := bl2/bl2.ld.S
|
||||
|
||||
else
|
||||
# BL2 at EL3, no RME
|
||||
BL2_SOURCES += bl2/${ARCH}/bl2_el3_entrypoint.S \
|
||||
bl2/${ARCH}/bl2_el3_exceptions.S \
|
||||
bl2/${ARCH}/bl2_run_next_image.S \
|
||||
lib/cpus/${ARCH}/cpu_helpers.S
|
||||
|
||||
ifeq (${ARCH},aarch64)
|
||||
BL2_SOURCES += lib/cpus/aarch64/dsu_helpers.S
|
||||
endif
|
||||
|
||||
BL2_DEFAULT_LINKER_SCRIPT_SOURCE := bl2/bl2_el3.ld.S
|
||||
endif
|
||||
|
||||
ifeq (${ENABLE_PMF},1)
|
||||
BL2_SOURCES += lib/pmf/pmf_main.c
|
||||
endif
|
||||
214
arm-trusted-firmware.t234/bl2/bl2_el3.ld.S
Normal file
214
arm-trusted-firmware.t234/bl2/bl2_el3.ld.S
Normal file
@@ -0,0 +1,214 @@
|
||||
/*
|
||||
* Copyright (c) 2017-2023, Arm Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <common/bl_common.ld.h>
|
||||
#include <lib/xlat_tables/xlat_tables_defs.h>
|
||||
|
||||
OUTPUT_FORMAT(PLATFORM_LINKER_FORMAT)
|
||||
OUTPUT_ARCH(PLATFORM_LINKER_ARCH)
|
||||
ENTRY(bl2_entrypoint)
|
||||
|
||||
MEMORY {
|
||||
#if BL2_IN_XIP_MEM
|
||||
ROM (rx): ORIGIN = BL2_RO_BASE, LENGTH = BL2_RO_LIMIT - BL2_RO_BASE
|
||||
RAM (rwx): ORIGIN = BL2_RW_BASE, LENGTH = BL2_RW_LIMIT - BL2_RW_BASE
|
||||
#else /* BL2_IN_XIP_MEM */
|
||||
RAM (rwx): ORIGIN = BL2_BASE, LENGTH = BL2_LIMIT - BL2_BASE
|
||||
#endif /* BL2_IN_XIP_MEM */
|
||||
|
||||
#if SEPARATE_BL2_NOLOAD_REGION
|
||||
RAM_NOLOAD (rw!a): ORIGIN = BL2_NOLOAD_START, LENGTH = BL2_NOLOAD_LIMIT - BL2_NOLOAD_START
|
||||
#else /* SEPARATE_BL2_NOLOAD_REGION */
|
||||
# define RAM_NOLOAD RAM
|
||||
#endif /* SEPARATE_BL2_NOLOAD_REGION */
|
||||
}
|
||||
|
||||
#if !BL2_IN_XIP_MEM
|
||||
# define ROM RAM
|
||||
#endif /* !BL2_IN_XIP_MEM */
|
||||
|
||||
SECTIONS {
|
||||
#if BL2_IN_XIP_MEM
|
||||
. = BL2_RO_BASE;
|
||||
|
||||
ASSERT(. == ALIGN(PAGE_SIZE),
|
||||
"BL2_RO_BASE address is not aligned on a page boundary.")
|
||||
#else /* BL2_IN_XIP_MEM */
|
||||
. = BL2_BASE;
|
||||
|
||||
ASSERT(. == ALIGN(PAGE_SIZE),
|
||||
"BL2_BASE address is not aligned on a page boundary.")
|
||||
#endif /* BL2_IN_XIP_MEM */
|
||||
|
||||
#if SEPARATE_CODE_AND_RODATA
|
||||
.text . : {
|
||||
ASSERT(. == ALIGN(PAGE_SIZE),
|
||||
".text address is not aligned on a page boundary.");
|
||||
|
||||
__TEXT_START__ = .;
|
||||
__TEXT_RESIDENT_START__ = .;
|
||||
|
||||
*bl2_el3_entrypoint.o(.text*)
|
||||
*(.text.asm.*)
|
||||
|
||||
__TEXT_RESIDENT_END__ = .;
|
||||
|
||||
*(SORT_BY_ALIGNMENT(.text*))
|
||||
*(.vectors)
|
||||
__TEXT_END_UNALIGNED__ = .;
|
||||
|
||||
. = ALIGN(PAGE_SIZE);
|
||||
|
||||
__TEXT_END__ = .;
|
||||
} >ROM
|
||||
|
||||
.rodata . : {
|
||||
__RODATA_START__ = .;
|
||||
|
||||
*(SORT_BY_ALIGNMENT(.rodata*))
|
||||
|
||||
RODATA_COMMON
|
||||
|
||||
__RODATA_END_UNALIGNED__ = .;
|
||||
. = ALIGN(PAGE_SIZE);
|
||||
|
||||
__RODATA_END__ = .;
|
||||
} >ROM
|
||||
|
||||
ASSERT(__TEXT_RESIDENT_END__ - __TEXT_RESIDENT_START__ <= PAGE_SIZE,
|
||||
"Resident part of BL2 has exceeded its limit.")
|
||||
#else /* SEPARATE_CODE_AND_RODATA */
|
||||
.ro . : {
|
||||
ASSERT(. == ALIGN(PAGE_SIZE),
|
||||
".ro address is not aligned on a page boundary.");
|
||||
|
||||
__RO_START__ = .;
|
||||
__TEXT_RESIDENT_START__ = .;
|
||||
|
||||
*bl2_el3_entrypoint.o(.text*)
|
||||
*(.text.asm.*)
|
||||
|
||||
__TEXT_RESIDENT_END__ = .;
|
||||
|
||||
*(SORT_BY_ALIGNMENT(.text*))
|
||||
*(SORT_BY_ALIGNMENT(.rodata*))
|
||||
|
||||
RODATA_COMMON
|
||||
|
||||
*(.vectors)
|
||||
|
||||
__RO_END_UNALIGNED__ = .;
|
||||
|
||||
/*
|
||||
* Memory page(s) mapped to this section will be marked as read-only,
|
||||
* executable. No RW data from the next section must creep in. Ensure
|
||||
* that the rest of the current memory page is unused.
|
||||
*/
|
||||
. = ALIGN(PAGE_SIZE);
|
||||
|
||||
__RO_END__ = .;
|
||||
} >ROM
|
||||
#endif /* SEPARATE_CODE_AND_RODATA */
|
||||
|
||||
ASSERT(__CPU_OPS_END__ > __CPU_OPS_START__,
|
||||
"cpu_ops not defined for this platform.")
|
||||
|
||||
#if BL2_IN_XIP_MEM
|
||||
. = BL2_RW_BASE;
|
||||
|
||||
ASSERT(BL2_RW_BASE == ALIGN(PAGE_SIZE),
|
||||
"BL2_RW_BASE address is not aligned on a page boundary.")
|
||||
#endif /* BL2_IN_XIP_MEM */
|
||||
|
||||
__RW_START__ = .;
|
||||
|
||||
DATA_SECTION >RAM AT>ROM
|
||||
|
||||
__DATA_RAM_START__ = __DATA_START__;
|
||||
__DATA_RAM_END__ = __DATA_END__;
|
||||
|
||||
RELA_SECTION >RAM
|
||||
|
||||
#if SEPARATE_BL2_NOLOAD_REGION
|
||||
SAVED_ADDR = .;
|
||||
|
||||
. = BL2_NOLOAD_START;
|
||||
|
||||
__BL2_NOLOAD_START__ = .;
|
||||
#endif /* SEPARATE_BL2_NOLOAD_REGION */
|
||||
|
||||
STACK_SECTION >RAM_NOLOAD
|
||||
BSS_SECTION >RAM_NOLOAD
|
||||
XLAT_TABLE_SECTION >RAM_NOLOAD
|
||||
|
||||
#if SEPARATE_BL2_NOLOAD_REGION
|
||||
__BL2_NOLOAD_END__ = .;
|
||||
|
||||
. = SAVED_ADDR;
|
||||
#endif /* SEPARATE_BL2_NOLOAD_REGION */
|
||||
|
||||
#if USE_COHERENT_MEM
|
||||
/*
|
||||
* The base address of the coherent memory section must be page-aligned to
|
||||
* guarantee that the coherent data are stored on their own pages and are
|
||||
* not mixed with normal data. This is required to set up the correct
|
||||
* memory attributes for the coherent data page tables.
|
||||
*/
|
||||
.coherent_ram (NOLOAD) : ALIGN(PAGE_SIZE) {
|
||||
__COHERENT_RAM_START__ = .;
|
||||
|
||||
*(.tzfw_coherent_mem)
|
||||
|
||||
__COHERENT_RAM_END_UNALIGNED__ = .;
|
||||
|
||||
/*
|
||||
* Memory page(s) mapped to this section will be marked as device
|
||||
* memory. No other unexpected data must creep in. Ensure the rest of
|
||||
* the current memory page is unused.
|
||||
*/
|
||||
. = ALIGN(PAGE_SIZE);
|
||||
|
||||
__COHERENT_RAM_END__ = .;
|
||||
} >RAM
|
||||
#endif /* USE_COHERENT_MEM */
|
||||
|
||||
__RW_END__ = .;
|
||||
__BL2_END__ = .;
|
||||
|
||||
/DISCARD/ : {
|
||||
*(.dynsym .dynstr .hash .gnu.hash)
|
||||
}
|
||||
|
||||
#if BL2_IN_XIP_MEM
|
||||
__BL2_RAM_START__ = ADDR(.data);
|
||||
__BL2_RAM_END__ = .;
|
||||
|
||||
__DATA_ROM_START__ = LOADADDR(.data);
|
||||
__DATA_SIZE__ = SIZEOF(.data);
|
||||
|
||||
/*
|
||||
* The .data section is the last PROGBITS section so its end marks the end
|
||||
* of BL2's RO content in XIP memory.
|
||||
*/
|
||||
__BL2_ROM_END__ = __DATA_ROM_START__ + __DATA_SIZE__;
|
||||
|
||||
ASSERT(__BL2_ROM_END__ <= BL2_RO_LIMIT,
|
||||
"BL2's RO content has exceeded its limit.")
|
||||
#endif /* BL2_IN_XIP_MEM */
|
||||
|
||||
__BSS_SIZE__ = SIZEOF(.bss);
|
||||
|
||||
#if USE_COHERENT_MEM
|
||||
__COHERENT_RAM_UNALIGNED_SIZE__ =
|
||||
__COHERENT_RAM_END_UNALIGNED__ - __COHERENT_RAM_START__;
|
||||
#endif /* USE_COHERENT_MEM */
|
||||
|
||||
#if BL2_IN_XIP_MEM
|
||||
ASSERT(. <= BL2_RW_LIMIT, "BL2's RW content has exceeded its limit.")
|
||||
#else /* BL2_IN_XIP_MEM */
|
||||
ASSERT(. <= BL2_LIMIT, "BL2 image has exceeded its limit.")
|
||||
#endif /* BL2_IN_XIP_MEM */
|
||||
}
|
||||
110
arm-trusted-firmware.t234/bl2/bl2_image_load_v2.c
Normal file
110
arm-trusted-firmware.t234/bl2/bl2_image_load_v2.c
Normal file
@@ -0,0 +1,110 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2022, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include <arch.h>
|
||||
#include <arch_helpers.h>
|
||||
#include "bl2_private.h"
|
||||
#include <common/bl_common.h>
|
||||
#include <common/debug.h>
|
||||
#include <common/desc_image_load.h>
|
||||
#include <drivers/auth/auth_mod.h>
|
||||
#include <plat/common/platform.h>
|
||||
|
||||
#include <platform_def.h>
|
||||
|
||||
/*******************************************************************************
|
||||
* This function loads SCP_BL2/BL3x images and returns the ep_info for
|
||||
* the next executable image.
|
||||
******************************************************************************/
|
||||
struct entry_point_info *bl2_load_images(void)
|
||||
{
|
||||
bl_params_t *bl2_to_next_bl_params;
|
||||
bl_load_info_t *bl2_load_info;
|
||||
const bl_load_info_node_t *bl2_node_info;
|
||||
int plat_setup_done = 0;
|
||||
int err;
|
||||
|
||||
/*
|
||||
* Get information about the images to load.
|
||||
*/
|
||||
bl2_load_info = plat_get_bl_image_load_info();
|
||||
assert(bl2_load_info != NULL);
|
||||
assert(bl2_load_info->head != NULL);
|
||||
assert(bl2_load_info->h.type == PARAM_BL_LOAD_INFO);
|
||||
assert(bl2_load_info->h.version >= VERSION_2);
|
||||
bl2_node_info = bl2_load_info->head;
|
||||
|
||||
while (bl2_node_info != NULL) {
|
||||
/*
|
||||
* Perform platform setup before loading the image,
|
||||
* if indicated in the image attributes AND if NOT
|
||||
* already done before.
|
||||
*/
|
||||
if ((bl2_node_info->image_info->h.attr &
|
||||
IMAGE_ATTRIB_PLAT_SETUP) != 0U) {
|
||||
if (plat_setup_done != 0) {
|
||||
WARN("BL2: Platform setup already done!!\n");
|
||||
} else {
|
||||
INFO("BL2: Doing platform setup\n");
|
||||
bl2_platform_setup();
|
||||
plat_setup_done = 1;
|
||||
}
|
||||
}
|
||||
|
||||
err = bl2_plat_handle_pre_image_load(bl2_node_info->image_id);
|
||||
if (err != 0) {
|
||||
ERROR("BL2: Failure in pre image load handling (%i)\n", err);
|
||||
plat_error_handler(err);
|
||||
}
|
||||
|
||||
if ((bl2_node_info->image_info->h.attr &
|
||||
IMAGE_ATTRIB_SKIP_LOADING) == 0U) {
|
||||
INFO("BL2: Loading image id %u\n", bl2_node_info->image_id);
|
||||
err = load_auth_image(bl2_node_info->image_id,
|
||||
bl2_node_info->image_info);
|
||||
if (err != 0) {
|
||||
ERROR("BL2: Failed to load image id %u (%i)\n",
|
||||
bl2_node_info->image_id, err);
|
||||
plat_error_handler(err);
|
||||
}
|
||||
} else {
|
||||
INFO("BL2: Skip loading image id %u\n", bl2_node_info->image_id);
|
||||
}
|
||||
|
||||
/* Allow platform to handle image information. */
|
||||
err = bl2_plat_handle_post_image_load(bl2_node_info->image_id);
|
||||
if (err != 0) {
|
||||
ERROR("BL2: Failure in post image load handling (%i)\n", err);
|
||||
plat_error_handler(err);
|
||||
}
|
||||
|
||||
/* Go to next image */
|
||||
bl2_node_info = bl2_node_info->next_load_info;
|
||||
}
|
||||
|
||||
/*
|
||||
* Get information to pass to the next image.
|
||||
*/
|
||||
bl2_to_next_bl_params = plat_get_next_bl_params();
|
||||
assert(bl2_to_next_bl_params != NULL);
|
||||
assert(bl2_to_next_bl_params->head != NULL);
|
||||
assert(bl2_to_next_bl_params->h.type == PARAM_BL_PARAMS);
|
||||
assert(bl2_to_next_bl_params->h.version >= VERSION_2);
|
||||
assert(bl2_to_next_bl_params->head->ep_info != NULL);
|
||||
|
||||
/* Populate arg0 for the next BL image if not already provided */
|
||||
if (bl2_to_next_bl_params->head->ep_info->args.arg0 == (u_register_t)0)
|
||||
bl2_to_next_bl_params->head->ep_info->args.arg0 =
|
||||
(u_register_t)bl2_to_next_bl_params;
|
||||
|
||||
/* Flush the parameters to be passed to next image */
|
||||
plat_flush_next_bl_params();
|
||||
|
||||
return bl2_to_next_bl_params->head->ep_info;
|
||||
}
|
||||
176
arm-trusted-firmware.t234/bl2/bl2_main.c
Normal file
176
arm-trusted-firmware.t234/bl2/bl2_main.c
Normal file
@@ -0,0 +1,176 @@
|
||||
/*
|
||||
* Copyright (c) 2013-2024, Arm Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
#include <arch_helpers.h>
|
||||
#include <arch_features.h>
|
||||
#include <bl1/bl1.h>
|
||||
#include <bl2/bl2.h>
|
||||
#include <common/bl_common.h>
|
||||
#include <common/build_message.h>
|
||||
#include <common/debug.h>
|
||||
#include <drivers/auth/auth_mod.h>
|
||||
#include <drivers/auth/crypto_mod.h>
|
||||
#include <drivers/console.h>
|
||||
#include <drivers/fwu/fwu.h>
|
||||
#include <lib/bootmarker_capture.h>
|
||||
#include <lib/extensions/pauth.h>
|
||||
#include <lib/pmf/pmf.h>
|
||||
#include <plat/common/platform.h>
|
||||
|
||||
#include "bl2_private.h"
|
||||
|
||||
#ifdef __aarch64__
|
||||
#define NEXT_IMAGE "BL31"
|
||||
#else
|
||||
#define NEXT_IMAGE "BL32"
|
||||
#endif
|
||||
|
||||
#if ENABLE_RUNTIME_INSTRUMENTATION
|
||||
PMF_REGISTER_SERVICE(bl_svc, PMF_RT_INSTR_SVC_ID,
|
||||
BL_TOTAL_IDS, PMF_DUMP_ENABLE);
|
||||
#endif
|
||||
|
||||
#if RESET_TO_BL2
|
||||
/*******************************************************************************
|
||||
* Setup function for BL2 when RESET_TO_BL2=1
|
||||
******************************************************************************/
|
||||
void bl2_el3_setup(u_register_t arg0, u_register_t arg1, u_register_t arg2,
|
||||
u_register_t arg3)
|
||||
{
|
||||
/* Enable early console if EARLY_CONSOLE flag is enabled */
|
||||
plat_setup_early_console();
|
||||
|
||||
/* Perform early platform-specific setup */
|
||||
bl2_el3_early_platform_setup(arg0, arg1, arg2, arg3);
|
||||
|
||||
/* Perform late platform-specific setup */
|
||||
bl2_el3_plat_arch_setup();
|
||||
|
||||
#if CTX_INCLUDE_PAUTH_REGS
|
||||
/*
|
||||
* Assert that the ARMv8.3-PAuth registers are present or an access
|
||||
* fault will be triggered when they are being saved or restored.
|
||||
*/
|
||||
assert(is_armv8_3_pauth_present());
|
||||
#endif /* CTX_INCLUDE_PAUTH_REGS */
|
||||
}
|
||||
#else /* RESET_TO_BL2 */
|
||||
|
||||
/*******************************************************************************
|
||||
* Setup function for BL2 when RESET_TO_BL2=0
|
||||
******************************************************************************/
|
||||
void bl2_setup(u_register_t arg0, u_register_t arg1, u_register_t arg2,
|
||||
u_register_t arg3)
|
||||
{
|
||||
/* Enable early console if EARLY_CONSOLE flag is enabled */
|
||||
plat_setup_early_console();
|
||||
|
||||
/* Perform early platform-specific setup */
|
||||
bl2_early_platform_setup2(arg0, arg1, arg2, arg3);
|
||||
|
||||
/* Perform late platform-specific setup */
|
||||
bl2_plat_arch_setup();
|
||||
|
||||
#if CTX_INCLUDE_PAUTH_REGS
|
||||
/*
|
||||
* Assert that the ARMv8.3-PAuth registers are present or an access
|
||||
* fault will be triggered when they are being saved or restored.
|
||||
*/
|
||||
assert(is_armv8_3_pauth_present());
|
||||
#endif /* CTX_INCLUDE_PAUTH_REGS */
|
||||
}
|
||||
#endif /* RESET_TO_BL2 */
|
||||
|
||||
/*******************************************************************************
|
||||
* The only thing to do in BL2 is to load further images and pass control to
|
||||
* next BL. The memory occupied by BL2 will be reclaimed by BL3x stages. BL2
|
||||
* runs entirely in S-EL1.
|
||||
******************************************************************************/
|
||||
void bl2_main(void)
|
||||
{
|
||||
entry_point_info_t *next_bl_ep_info;
|
||||
|
||||
#if ENABLE_RUNTIME_INSTRUMENTATION
|
||||
PMF_CAPTURE_TIMESTAMP(bl_svc, BL2_ENTRY, PMF_CACHE_MAINT);
|
||||
#endif
|
||||
|
||||
NOTICE("BL2: %s\n", build_version_string);
|
||||
NOTICE("BL2: %s\n", build_message);
|
||||
|
||||
/* Perform remaining generic architectural setup in S-EL1 */
|
||||
bl2_arch_setup();
|
||||
|
||||
#if PSA_FWU_SUPPORT
|
||||
fwu_init();
|
||||
#endif /* PSA_FWU_SUPPORT */
|
||||
|
||||
crypto_mod_init();
|
||||
|
||||
/* Initialize authentication module */
|
||||
auth_mod_init();
|
||||
|
||||
/* Initialize the Measured Boot backend */
|
||||
bl2_plat_mboot_init();
|
||||
|
||||
/* Initialize boot source */
|
||||
bl2_plat_preload_setup();
|
||||
|
||||
/* Load the subsequent bootloader images. */
|
||||
next_bl_ep_info = bl2_load_images();
|
||||
|
||||
/* Teardown the Measured Boot backend */
|
||||
bl2_plat_mboot_finish();
|
||||
|
||||
#if !BL2_RUNS_AT_EL3
|
||||
#ifndef __aarch64__
|
||||
/*
|
||||
* For AArch32 state BL1 and BL2 share the MMU setup.
|
||||
* Given that BL2 does not map BL1 regions, MMU needs
|
||||
* to be disabled in order to go back to BL1.
|
||||
*/
|
||||
disable_mmu_icache_secure();
|
||||
#endif /* !__aarch64__ */
|
||||
|
||||
#if ENABLE_PAUTH
|
||||
/*
|
||||
* Disable pointer authentication before running next boot image
|
||||
*/
|
||||
pauth_disable_el1();
|
||||
#endif /* ENABLE_PAUTH */
|
||||
|
||||
#if ENABLE_RUNTIME_INSTRUMENTATION
|
||||
PMF_CAPTURE_TIMESTAMP(bl_svc, BL2_EXIT, PMF_CACHE_MAINT);
|
||||
#endif
|
||||
|
||||
console_flush();
|
||||
|
||||
/*
|
||||
* Run next BL image via an SMC to BL1. Information on how to pass
|
||||
* control to the BL32 (if present) and BL33 software images will
|
||||
* be passed to next BL image as an argument.
|
||||
*/
|
||||
smc(BL1_SMC_RUN_IMAGE, (unsigned long)next_bl_ep_info, 0, 0, 0, 0, 0, 0);
|
||||
#else /* if BL2_RUNS_AT_EL3 */
|
||||
|
||||
NOTICE("BL2: Booting " NEXT_IMAGE "\n");
|
||||
print_entry_point_info(next_bl_ep_info);
|
||||
#if ENABLE_RUNTIME_INSTRUMENTATION
|
||||
PMF_CAPTURE_TIMESTAMP(bl_svc, BL2_EXIT, PMF_CACHE_MAINT);
|
||||
#endif
|
||||
console_flush();
|
||||
|
||||
#if ENABLE_PAUTH
|
||||
/*
|
||||
* Disable pointer authentication before running next boot image
|
||||
*/
|
||||
pauth_disable_el3();
|
||||
#endif /* ENABLE_PAUTH */
|
||||
|
||||
bl2_run_next_image(next_bl_ep_info);
|
||||
#endif /* BL2_RUNS_AT_EL3 */
|
||||
}
|
||||
24
arm-trusted-firmware.t234/bl2/bl2_private.h
Normal file
24
arm-trusted-firmware.t234/bl2/bl2_private.h
Normal file
@@ -0,0 +1,24 @@
|
||||
/*
|
||||
* Copyright (c) 2013-2018, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#ifndef BL2_PRIVATE_H
|
||||
#define BL2_PRIVATE_H
|
||||
|
||||
#include <common/bl_common.h>
|
||||
|
||||
/******************************************
|
||||
* Forward declarations
|
||||
*****************************************/
|
||||
struct entry_point_info;
|
||||
|
||||
/******************************************
|
||||
* Function prototypes
|
||||
*****************************************/
|
||||
void bl2_arch_setup(void);
|
||||
struct entry_point_info *bl2_load_images(void);
|
||||
void bl2_run_next_image(const struct entry_point_info *bl_ep_info);
|
||||
|
||||
#endif /* BL2_PRIVATE_H */
|
||||
127
arm-trusted-firmware.t234/bl2u/aarch32/bl2u_entrypoint.S
Normal file
127
arm-trusted-firmware.t234/bl2u/aarch32/bl2u_entrypoint.S
Normal file
@@ -0,0 +1,127 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2022, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <arch.h>
|
||||
#include <asm_macros.S>
|
||||
#include <common/bl_common.h>
|
||||
|
||||
.globl bl2u_vector_table
|
||||
.globl bl2u_entrypoint
|
||||
|
||||
|
||||
vector_base bl2u_vector_table
|
||||
b bl2u_entrypoint
|
||||
b report_exception /* Undef */
|
||||
b report_exception /* SVC call */
|
||||
b report_prefetch_abort /* Prefetch abort */
|
||||
b report_data_abort /* Data abort */
|
||||
b report_exception /* Reserved */
|
||||
b report_exception /* IRQ */
|
||||
b report_exception /* FIQ */
|
||||
|
||||
|
||||
func bl2u_entrypoint
|
||||
/*---------------------------------------------
|
||||
* Save from r1 the extents of the trusted ram
|
||||
* available to BL2U for future use.
|
||||
* r0 is not currently used.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
mov r11, r1
|
||||
mov r10, r2
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Set the exception vector to something sane.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
ldr r0, =bl2u_vector_table
|
||||
stcopr r0, VBAR
|
||||
isb
|
||||
|
||||
/* --------------------------------------------------------
|
||||
* Enable the instruction cache - disable speculative loads
|
||||
* --------------------------------------------------------
|
||||
*/
|
||||
ldcopr r0, SCTLR
|
||||
orr r0, r0, #SCTLR_I_BIT
|
||||
bic r0, r0, #SCTLR_DSSBS_BIT
|
||||
stcopr r0, SCTLR
|
||||
isb
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Since BL2U executes after BL1, it is assumed
|
||||
* here that BL1 has already has done the
|
||||
* necessary register initializations.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Invalidate the RW memory used by the BL2U
|
||||
* image. This includes the data and NOBITS
|
||||
* sections. This is done to safeguard against
|
||||
* possible corruption of this memory by dirty
|
||||
* cache lines in a system cache as a result of
|
||||
* use by an earlier boot loader stage.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
ldr r0, =__RW_START__
|
||||
ldr r1, =__RW_END__
|
||||
sub r1, r1, r0
|
||||
bl inv_dcache_range
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Zero out NOBITS sections. There are 2 of them:
|
||||
* - the .bss section;
|
||||
* - the coherent memory section.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
ldr r0, =__BSS_START__
|
||||
ldr r1, =__BSS_END__
|
||||
sub r1, r1, r0
|
||||
bl zeromem
|
||||
|
||||
/* --------------------------------------------
|
||||
* Allocate a stack whose memory will be marked
|
||||
* as Normal-IS-WBWA when the MMU is enabled.
|
||||
* There is no risk of reading stale stack
|
||||
* memory after enabling the MMU as only the
|
||||
* primary cpu is running at the moment.
|
||||
* --------------------------------------------
|
||||
*/
|
||||
bl plat_set_my_stack
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Initialize the stack protector canary before
|
||||
* any C code is called.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
#if STACK_PROTECTOR_ENABLED
|
||||
bl update_stack_protector_canary
|
||||
#endif
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Perform early platform setup & platform
|
||||
* specific early arch. setup e.g. mmu setup
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
mov r0, r11
|
||||
mov r1, r10
|
||||
bl bl2u_early_platform_setup
|
||||
bl bl2u_plat_arch_setup
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Jump to main function.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
bl bl2u_main
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Should never reach this point.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
no_ret plat_panic_handler
|
||||
|
||||
endfunc bl2u_entrypoint
|
||||
129
arm-trusted-firmware.t234/bl2u/aarch64/bl2u_entrypoint.S
Normal file
129
arm-trusted-firmware.t234/bl2u/aarch64/bl2u_entrypoint.S
Normal file
@@ -0,0 +1,129 @@
|
||||
/*
|
||||
* Copyright (c) 2015-2021, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <arch.h>
|
||||
#include <asm_macros.S>
|
||||
#include <common/bl_common.h>
|
||||
|
||||
.globl bl2u_entrypoint
|
||||
|
||||
|
||||
func bl2u_entrypoint
|
||||
/*---------------------------------------------
|
||||
* Store the extents of the tzram available to
|
||||
* BL2U and other platform specific information
|
||||
* for future use. x0 is currently not used.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
mov x20, x1
|
||||
mov x21, x2
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Set the exception vector to something sane.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
adr x0, early_exceptions
|
||||
msr vbar_el1, x0
|
||||
isb
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Enable the SError interrupt now that the
|
||||
* exception vectors have been setup.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
msr daifclr, #DAIF_ABT_BIT
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Enable the instruction cache, stack pointer
|
||||
* and data access alignment checks and disable
|
||||
* speculative loads.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
mov x1, #(SCTLR_I_BIT | SCTLR_A_BIT | SCTLR_SA_BIT)
|
||||
mrs x0, sctlr_el1
|
||||
orr x0, x0, x1
|
||||
bic x0, x0, #SCTLR_DSSBS_BIT
|
||||
msr sctlr_el1, x0
|
||||
isb
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Invalidate the RW memory used by the BL2U
|
||||
* image. This includes the data and NOBITS
|
||||
* sections. This is done to safeguard against
|
||||
* possible corruption of this memory by dirty
|
||||
* cache lines in a system cache as a result of
|
||||
* use by an earlier boot loader stage.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
adr x0, __RW_START__
|
||||
adr x1, __RW_END__
|
||||
sub x1, x1, x0
|
||||
bl inv_dcache_range
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Zero out NOBITS sections. There are 2 of them:
|
||||
* - the .bss section;
|
||||
* - the coherent memory section.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
adrp x0, __BSS_START__
|
||||
add x0, x0, :lo12:__BSS_START__
|
||||
adrp x1, __BSS_END__
|
||||
add x1, x1, :lo12:__BSS_END__
|
||||
sub x1, x1, x0
|
||||
bl zeromem
|
||||
|
||||
/* --------------------------------------------
|
||||
* Allocate a stack whose memory will be marked
|
||||
* as Normal-IS-WBWA when the MMU is enabled.
|
||||
* There is no risk of reading stale stack
|
||||
* memory after enabling the MMU as only the
|
||||
* primary cpu is running at the moment.
|
||||
* --------------------------------------------
|
||||
*/
|
||||
bl plat_set_my_stack
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Initialize the stack protector canary before
|
||||
* any C code is called.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
#if STACK_PROTECTOR_ENABLED
|
||||
bl update_stack_protector_canary
|
||||
#endif
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Perform early platform setup & platform
|
||||
* specific early arch. setup e.g. mmu setup
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
mov x0, x20
|
||||
mov x1, x21
|
||||
bl bl2u_early_platform_setup
|
||||
bl bl2u_plat_arch_setup
|
||||
|
||||
#if ENABLE_PAUTH
|
||||
/* ---------------------------------------------
|
||||
* Program APIAKey_EL1
|
||||
* and enable pointer authentication.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
bl pauth_init_enable_el1
|
||||
#endif
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Jump to bl2u_main function.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
bl bl2u_main
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Should never reach this point.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
no_ret plat_panic_handler
|
||||
|
||||
endfunc bl2u_entrypoint
|
||||
126
arm-trusted-firmware.t234/bl2u/bl2u.ld.S
Normal file
126
arm-trusted-firmware.t234/bl2u/bl2u.ld.S
Normal file
@@ -0,0 +1,126 @@
|
||||
/*
|
||||
* Copyright (c) 2015-2023, Arm Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <platform_def.h>
|
||||
|
||||
#include <common/bl_common.ld.h>
|
||||
#include <lib/xlat_tables/xlat_tables_defs.h>
|
||||
|
||||
OUTPUT_FORMAT(PLATFORM_LINKER_FORMAT)
|
||||
OUTPUT_ARCH(PLATFORM_LINKER_ARCH)
|
||||
ENTRY(bl2u_entrypoint)
|
||||
|
||||
MEMORY {
|
||||
RAM (rwx): ORIGIN = BL2U_BASE, LENGTH = BL2U_LIMIT - BL2U_BASE
|
||||
}
|
||||
|
||||
SECTIONS {
|
||||
. = BL2U_BASE;
|
||||
|
||||
ASSERT(. == ALIGN(PAGE_SIZE),
|
||||
"BL2U_BASE address is not aligned on a page boundary.")
|
||||
|
||||
#if SEPARATE_CODE_AND_RODATA
|
||||
.text . : {
|
||||
ASSERT(. == ALIGN(PAGE_SIZE),
|
||||
".text address is not aligned on a page boundary.");
|
||||
|
||||
__TEXT_START__ = .;
|
||||
|
||||
*bl2u_entrypoint.o(.text*)
|
||||
*(SORT_BY_ALIGNMENT(.text*))
|
||||
*(.vectors)
|
||||
__TEXT_END_UNALIGNED__ = .;
|
||||
|
||||
. = ALIGN(PAGE_SIZE);
|
||||
|
||||
__TEXT_END__ = .;
|
||||
} >RAM
|
||||
|
||||
/* .ARM.extab and .ARM.exidx are only added because Clang needs them */
|
||||
.ARM.extab . : {
|
||||
*(.ARM.extab* .gnu.linkonce.armextab.*)
|
||||
} >RAM
|
||||
|
||||
.ARM.exidx . : {
|
||||
*(.ARM.exidx* .gnu.linkonce.armexidx.*)
|
||||
} >RAM
|
||||
|
||||
.rodata . : {
|
||||
__RODATA_START__ = .;
|
||||
*(SORT_BY_ALIGNMENT(.rodata*))
|
||||
|
||||
RODATA_COMMON
|
||||
|
||||
__RODATA_END_UNALIGNED__ = .;
|
||||
. = ALIGN(PAGE_SIZE);
|
||||
__RODATA_END__ = .;
|
||||
} >RAM
|
||||
#else /* SEPARATE_CODE_AND_RODATA */
|
||||
.ro . : {
|
||||
ASSERT(. == ALIGN(PAGE_SIZE),
|
||||
".ro address is not aligned on a page boundary.");
|
||||
|
||||
__RO_START__ = .;
|
||||
|
||||
*bl2u_entrypoint.o(.text*)
|
||||
*(SORT_BY_ALIGNMENT(.text*))
|
||||
*(SORT_BY_ALIGNMENT(.rodata*))
|
||||
|
||||
RODATA_COMMON
|
||||
|
||||
*(.vectors)
|
||||
|
||||
__RO_END_UNALIGNED__ = .;
|
||||
|
||||
/*
|
||||
* Memory page(s) mapped to this section will be marked as read-only,
|
||||
* executable. No RW data from the next section must creep in. Ensure
|
||||
* that the rest of the current memory page is unused.
|
||||
*/
|
||||
. = ALIGN(PAGE_SIZE);
|
||||
|
||||
__RO_END__ = .;
|
||||
} >RAM
|
||||
#endif /* SEPARATE_CODE_AND_RODATA */
|
||||
|
||||
__RW_START__ = .;
|
||||
|
||||
DATA_SECTION >RAM
|
||||
STACK_SECTION >RAM
|
||||
BSS_SECTION >RAM
|
||||
XLAT_TABLE_SECTION >RAM
|
||||
|
||||
#if USE_COHERENT_MEM
|
||||
/*
|
||||
* The base address of the coherent memory section must be page-aligned to
|
||||
* guarantee that the coherent data are stored on their own pages and are
|
||||
* not mixed with normal data. This is required to set up the correct
|
||||
* memory attributes for the coherent data page tables.
|
||||
*/
|
||||
.coherent_ram (NOLOAD) : ALIGN(PAGE_SIZE) {
|
||||
__COHERENT_RAM_START__ = .;
|
||||
*(.tzfw_coherent_mem)
|
||||
__COHERENT_RAM_END_UNALIGNED__ = .;
|
||||
|
||||
/*
|
||||
* Memory page(s) mapped to this section will be marked as device
|
||||
* memory. No other unexpected data must creep in. Ensure the rest of
|
||||
* the current memory page is unused.
|
||||
*/
|
||||
. = ALIGN(PAGE_SIZE);
|
||||
|
||||
__COHERENT_RAM_END__ = .;
|
||||
} >RAM
|
||||
#endif /* USE_COHERENT_MEM */
|
||||
|
||||
__RW_END__ = .;
|
||||
__BL2U_END__ = .;
|
||||
|
||||
__BSS_SIZE__ = SIZEOF(.bss);
|
||||
|
||||
ASSERT(. <= BL2U_LIMIT, "BL2U image has exceeded its limit.")
|
||||
}
|
||||
21
arm-trusted-firmware.t234/bl2u/bl2u.mk
Normal file
21
arm-trusted-firmware.t234/bl2u/bl2u.mk
Normal file
@@ -0,0 +1,21 @@
|
||||
#
|
||||
# Copyright (c) 2015-2024, Arm Limited and Contributors. All rights reserved.
|
||||
#
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
#
|
||||
|
||||
BL2U_SOURCES += bl2u/bl2u_main.c \
|
||||
bl2u/${ARCH}/bl2u_entrypoint.S \
|
||||
plat/common/${ARCH}/platform_up_stack.S
|
||||
|
||||
ifeq (${ARCH},aarch64)
|
||||
BL2U_SOURCES += common/aarch64/early_exceptions.S
|
||||
endif
|
||||
|
||||
BL2U_DEFAULT_LINKER_SCRIPT_SOURCE := bl2u/bl2u.ld.S
|
||||
|
||||
ifeq ($($(ARCH)-ld-id),gnu-gcc)
|
||||
BL2U_LDFLAGS += -Wl,--sort-section=alignment
|
||||
else ifneq ($(filter llvm-lld gnu-ld,$($(ARCH)-ld-id)),)
|
||||
BL2U_LDFLAGS += --sort-section=alignment
|
||||
endif
|
||||
66
arm-trusted-firmware.t234/bl2u/bl2u_main.c
Normal file
66
arm-trusted-firmware.t234/bl2u/bl2u_main.c
Normal file
@@ -0,0 +1,66 @@
|
||||
/*
|
||||
* Copyright (c) 2015-2024, Arm Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include <platform_def.h>
|
||||
|
||||
#include <arch.h>
|
||||
#include <arch_helpers.h>
|
||||
#include <bl1/bl1.h>
|
||||
#include <bl2u/bl2u.h>
|
||||
#include <common/bl_common.h>
|
||||
#include <common/build_message.h>
|
||||
#include <common/debug.h>
|
||||
#include <drivers/auth/auth_mod.h>
|
||||
#include <drivers/console.h>
|
||||
#include <plat/common/platform.h>
|
||||
|
||||
/*******************************************************************************
|
||||
* This function is responsible to:
|
||||
* Load SCP_BL2U if platform has defined SCP_BL2U_BASE
|
||||
* Perform platform setup.
|
||||
* Go back to EL3.
|
||||
******************************************************************************/
|
||||
void bl2u_main(void)
|
||||
{
|
||||
NOTICE("BL2U: %s\n", build_version_string);
|
||||
NOTICE("BL2U: %s\n", build_message);
|
||||
|
||||
#if SCP_BL2U_BASE
|
||||
int rc;
|
||||
/* Load the subsequent bootloader images */
|
||||
rc = bl2u_plat_handle_scp_bl2u();
|
||||
if (rc != 0) {
|
||||
ERROR("Failed to load SCP_BL2U (%i)\n", rc);
|
||||
panic();
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Perform platform setup in BL2U after loading SCP_BL2U */
|
||||
bl2u_platform_setup();
|
||||
|
||||
console_flush();
|
||||
|
||||
#ifndef __aarch64__
|
||||
/*
|
||||
* For AArch32 state BL1 and BL2U share the MMU setup.
|
||||
* Given that BL2U does not map BL1 regions, MMU needs
|
||||
* to be disabled in order to go back to BL1.
|
||||
*/
|
||||
disable_mmu_icache_secure();
|
||||
#endif /* !__aarch64__ */
|
||||
|
||||
/*
|
||||
* Indicate that BL2U is done and resume back to
|
||||
* normal world via an SMC to BL1.
|
||||
* x1 could be passed to Normal world,
|
||||
* so DO NOT pass any secret information.
|
||||
*/
|
||||
smc(FWU_SMC_SEC_IMAGE_DONE, 0, 0, 0, 0, 0, 0, 0);
|
||||
wfi();
|
||||
}
|
||||
232
arm-trusted-firmware.t234/bl31/aarch64/bl31_entrypoint.S
Normal file
232
arm-trusted-firmware.t234/bl31/aarch64/bl31_entrypoint.S
Normal file
@@ -0,0 +1,232 @@
|
||||
/*
|
||||
* Copyright (c) 2013-2021, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <platform_def.h>
|
||||
|
||||
#include <arch.h>
|
||||
#include <common/bl_common.h>
|
||||
#include <el3_common_macros.S>
|
||||
#include <lib/pmf/aarch64/pmf_asm_macros.S>
|
||||
#include <lib/runtime_instr.h>
|
||||
#include <lib/xlat_tables/xlat_mmu_helpers.h>
|
||||
|
||||
.globl bl31_entrypoint
|
||||
.globl bl31_warm_entrypoint
|
||||
|
||||
/* -----------------------------------------------------
|
||||
* bl31_entrypoint() is the cold boot entrypoint,
|
||||
* executed only by the primary cpu.
|
||||
* -----------------------------------------------------
|
||||
*/
|
||||
|
||||
func bl31_entrypoint
|
||||
/* ---------------------------------------------------------------
|
||||
* Stash the previous bootloader arguments x0 - x3 for later use.
|
||||
* ---------------------------------------------------------------
|
||||
*/
|
||||
mov x20, x0
|
||||
mov x21, x1
|
||||
mov x22, x2
|
||||
mov x23, x3
|
||||
|
||||
#if !RESET_TO_BL31
|
||||
/* ---------------------------------------------------------------------
|
||||
* For !RESET_TO_BL31 systems, only the primary CPU ever reaches
|
||||
* bl31_entrypoint() during the cold boot flow, so the cold/warm boot
|
||||
* and primary/secondary CPU logic should not be executed in this case.
|
||||
*
|
||||
* Also, assume that the previous bootloader has already initialised the
|
||||
* SCTLR_EL3, including the endianness, and has initialised the memory.
|
||||
* ---------------------------------------------------------------------
|
||||
*/
|
||||
el3_entrypoint_common \
|
||||
_init_sctlr=0 \
|
||||
_warm_boot_mailbox=0 \
|
||||
_secondary_cold_boot=0 \
|
||||
_init_memory=0 \
|
||||
_init_c_runtime=1 \
|
||||
_exception_vectors=runtime_exceptions \
|
||||
_pie_fixup_size=BL31_LIMIT - BL31_BASE
|
||||
#else
|
||||
|
||||
/* ---------------------------------------------------------------------
|
||||
* For RESET_TO_BL31 systems which have a programmable reset address,
|
||||
* bl31_entrypoint() is executed only on the cold boot path so we can
|
||||
* skip the warm boot mailbox mechanism.
|
||||
* ---------------------------------------------------------------------
|
||||
*/
|
||||
el3_entrypoint_common \
|
||||
_init_sctlr=1 \
|
||||
_warm_boot_mailbox=!PROGRAMMABLE_RESET_ADDRESS \
|
||||
_secondary_cold_boot=!COLD_BOOT_SINGLE_CPU \
|
||||
_init_memory=1 \
|
||||
_init_c_runtime=1 \
|
||||
_exception_vectors=runtime_exceptions \
|
||||
_pie_fixup_size=BL31_LIMIT - BL31_BASE
|
||||
#endif /* RESET_TO_BL31 */
|
||||
|
||||
/* --------------------------------------------------------------------
|
||||
* Perform BL31 setup
|
||||
* --------------------------------------------------------------------
|
||||
*/
|
||||
mov x0, x20
|
||||
mov x1, x21
|
||||
mov x2, x22
|
||||
mov x3, x23
|
||||
bl bl31_setup
|
||||
|
||||
#if ENABLE_PAUTH
|
||||
/* --------------------------------------------------------------------
|
||||
* Program APIAKey_EL1 and enable pointer authentication
|
||||
* --------------------------------------------------------------------
|
||||
*/
|
||||
bl pauth_init_enable_el3
|
||||
#endif /* ENABLE_PAUTH */
|
||||
|
||||
/* --------------------------------------------------------------------
|
||||
* Jump to main function
|
||||
* --------------------------------------------------------------------
|
||||
*/
|
||||
bl bl31_main
|
||||
|
||||
/* --------------------------------------------------------------------
|
||||
* Clean the .data & .bss sections to main memory. This ensures
|
||||
* that any global data which was initialised by the primary CPU
|
||||
* is visible to secondary CPUs before they enable their data
|
||||
* caches and participate in coherency.
|
||||
* --------------------------------------------------------------------
|
||||
*/
|
||||
adrp x0, __DATA_START__
|
||||
add x0, x0, :lo12:__DATA_START__
|
||||
adrp x1, __DATA_END__
|
||||
add x1, x1, :lo12:__DATA_END__
|
||||
sub x1, x1, x0
|
||||
bl clean_dcache_range
|
||||
|
||||
adrp x0, __BSS_START__
|
||||
add x0, x0, :lo12:__BSS_START__
|
||||
adrp x1, __BSS_END__
|
||||
add x1, x1, :lo12:__BSS_END__
|
||||
sub x1, x1, x0
|
||||
bl clean_dcache_range
|
||||
|
||||
b el3_exit
|
||||
endfunc bl31_entrypoint
|
||||
|
||||
/* --------------------------------------------------------------------
|
||||
* This CPU has been physically powered up. It is either resuming from
|
||||
* suspend or has simply been turned on. In both cases, call the BL31
|
||||
* warmboot entrypoint
|
||||
* --------------------------------------------------------------------
|
||||
*/
|
||||
func bl31_warm_entrypoint
|
||||
#if ENABLE_RUNTIME_INSTRUMENTATION
|
||||
|
||||
/*
|
||||
* This timestamp update happens with cache off. The next
|
||||
* timestamp collection will need to do cache maintenance prior
|
||||
* to timestamp update.
|
||||
*/
|
||||
pmf_calc_timestamp_addr rt_instr_svc, RT_INSTR_EXIT_HW_LOW_PWR
|
||||
mrs x1, cntpct_el0
|
||||
str x1, [x0]
|
||||
#endif
|
||||
|
||||
/*
|
||||
* On the warm boot path, most of the EL3 initialisations performed by
|
||||
* 'el3_entrypoint_common' must be skipped:
|
||||
*
|
||||
* - Only when the platform bypasses the BL1/BL31 entrypoint by
|
||||
* programming the reset address do we need to initialise SCTLR_EL3.
|
||||
* In other cases, we assume this has been taken care by the
|
||||
* entrypoint code.
|
||||
*
|
||||
* - No need to determine the type of boot, we know it is a warm boot.
|
||||
*
|
||||
* - Do not try to distinguish between primary and secondary CPUs, this
|
||||
* notion only exists for a cold boot.
|
||||
*
|
||||
* - No need to initialise the memory or the C runtime environment,
|
||||
* it has been done once and for all on the cold boot path.
|
||||
*/
|
||||
el3_entrypoint_common \
|
||||
_init_sctlr=PROGRAMMABLE_RESET_ADDRESS \
|
||||
_warm_boot_mailbox=0 \
|
||||
_secondary_cold_boot=0 \
|
||||
_init_memory=0 \
|
||||
_init_c_runtime=0 \
|
||||
_exception_vectors=runtime_exceptions \
|
||||
_pie_fixup_size=0
|
||||
|
||||
/*
|
||||
* We're about to enable MMU and participate in PSCI state coordination.
|
||||
*
|
||||
* The PSCI implementation invokes platform routines that enable CPUs to
|
||||
* participate in coherency. On a system where CPUs are not
|
||||
* cache-coherent without appropriate platform specific programming,
|
||||
* having caches enabled until such time might lead to coherency issues
|
||||
* (resulting from stale data getting speculatively fetched, among
|
||||
* others). Therefore we keep data caches disabled even after enabling
|
||||
* the MMU for such platforms.
|
||||
*
|
||||
* On systems with hardware-assisted coherency, or on single cluster
|
||||
* platforms, such platform specific programming is not required to
|
||||
* enter coherency (as CPUs already are); and there's no reason to have
|
||||
* caches disabled either.
|
||||
*/
|
||||
#if HW_ASSISTED_COHERENCY || WARMBOOT_ENABLE_DCACHE_EARLY
|
||||
mov x0, xzr
|
||||
#else
|
||||
mov x0, #DISABLE_DCACHE
|
||||
#endif
|
||||
bl bl31_plat_enable_mmu
|
||||
|
||||
#if ENABLE_RME
|
||||
/*
|
||||
* At warm boot GPT data structures have already been initialized in RAM
|
||||
* but the sysregs for this CPU need to be initialized. Note that the GPT
|
||||
* accesses are controlled attributes in GPCCR and do not depend on the
|
||||
* SCR_EL3.C bit.
|
||||
*/
|
||||
mrs x0, id_aa64pfr0_el1
|
||||
ubfx x0, x0, #ID_AA64PFR0_FEAT_RME_SHIFT, #ID_AA64PFR0_FEAT_RME_LENGTH
|
||||
cbz x0, 1f
|
||||
bl gpt_enable
|
||||
cbz x0, 1f
|
||||
no_ret plat_panic_handler
|
||||
1:
|
||||
#endif
|
||||
|
||||
#if ENABLE_PAUTH
|
||||
/* --------------------------------------------------------------------
|
||||
* Program APIAKey_EL1 and enable pointer authentication
|
||||
* --------------------------------------------------------------------
|
||||
*/
|
||||
bl pauth_init_enable_el3
|
||||
#endif /* ENABLE_PAUTH */
|
||||
|
||||
bl psci_warmboot_entrypoint
|
||||
|
||||
#if ENABLE_RUNTIME_INSTRUMENTATION
|
||||
pmf_calc_timestamp_addr rt_instr_svc, RT_INSTR_EXIT_PSCI
|
||||
mov x19, x0
|
||||
|
||||
/*
|
||||
* Invalidate before updating timestamp to ensure previous timestamp
|
||||
* updates on the same cache line with caches disabled are properly
|
||||
* seen by the same core. Without the cache invalidate, the core might
|
||||
* write into a stale cache line.
|
||||
*/
|
||||
mov x1, #PMF_TS_SIZE
|
||||
mov x20, x30
|
||||
bl inv_dcache_range
|
||||
mov x30, x20
|
||||
|
||||
mrs x0, cntpct_el0
|
||||
str x0, [x19]
|
||||
#endif
|
||||
b el3_exit
|
||||
endfunc bl31_warm_entrypoint
|
||||
469
arm-trusted-firmware.t234/bl31/aarch64/crash_reporting.S
Normal file
469
arm-trusted-firmware.t234/bl31/aarch64/crash_reporting.S
Normal file
@@ -0,0 +1,469 @@
|
||||
/*
|
||||
* Copyright (c) 2014-2023, Arm Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <plat_macros.S>
|
||||
#include <platform_def.h>
|
||||
|
||||
#include <arch.h>
|
||||
#include <asm_macros.S>
|
||||
#include <context.h>
|
||||
#include <lib/el3_runtime/cpu_data.h>
|
||||
#include <lib/utils_def.h>
|
||||
|
||||
.globl report_unhandled_exception
|
||||
.globl report_unhandled_interrupt
|
||||
.globl report_el3_panic
|
||||
.globl report_elx_panic
|
||||
|
||||
#if CRASH_REPORTING
|
||||
|
||||
/* ------------------------------------------------------
|
||||
* The below section deals with dumping the system state
|
||||
* when an unhandled exception is taken in EL3.
|
||||
* The layout and the names of the registers which will
|
||||
* be dumped during a unhandled exception is given below.
|
||||
* ------------------------------------------------------
|
||||
*/
|
||||
.section .rodata.crash_prints, "aS"
|
||||
print_spacer:
|
||||
.asciz " = 0x"
|
||||
|
||||
gp_regs:
|
||||
.asciz "x0", "x1", "x2", "x3", "x4", "x5", "x6", "x7",\
|
||||
"x8", "x9", "x10", "x11", "x12", "x13", "x14", "x15",\
|
||||
"x16", "x17", "x18", "x19", "x20", "x21", "x22",\
|
||||
"x23", "x24", "x25", "x26", "x27", "x28", "x29", ""
|
||||
el3_sys_regs:
|
||||
.asciz "scr_el3", "sctlr_el3", "cptr_el3", "tcr_el3",\
|
||||
"daif", "mair_el3", "spsr_el3", "elr_el3", "ttbr0_el3",\
|
||||
"esr_el3", "far_el3", ""
|
||||
|
||||
non_el3_sys_regs:
|
||||
.asciz "spsr_el1", "elr_el1", "spsr_abt", "spsr_und",\
|
||||
"spsr_irq", "spsr_fiq", "sctlr_el1", "actlr_el1", "cpacr_el1",\
|
||||
"csselr_el1", "sp_el1", "esr_el1", "ttbr0_el1", "ttbr1_el1",\
|
||||
"mair_el1", "amair_el1", "tcr_el1", "tpidr_el1", "tpidr_el0",\
|
||||
"tpidrro_el0", "par_el1", "mpidr_el1", "afsr0_el1", "afsr1_el1",\
|
||||
"contextidr_el1", "vbar_el1", "cntp_ctl_el0", "cntp_cval_el0",\
|
||||
"cntv_ctl_el0", "cntv_cval_el0", "cntkctl_el1", "sp_el0", "isr_el1", ""
|
||||
|
||||
#if CTX_INCLUDE_AARCH32_REGS
|
||||
aarch32_regs:
|
||||
.asciz "dacr32_el2", "ifsr32_el2", ""
|
||||
#endif /* CTX_INCLUDE_AARCH32_REGS */
|
||||
|
||||
panic_msg:
|
||||
.asciz "PANIC in EL3.\nx30"
|
||||
excpt_msg:
|
||||
.asciz "Unhandled Exception in EL3.\nx30"
|
||||
intr_excpt_msg:
|
||||
.ascii "Unhandled Interrupt Exception in EL3.\n"
|
||||
x30_msg:
|
||||
.asciz "x30"
|
||||
excpt_msg_el:
|
||||
.asciz "Unhandled Exception from lower EL.\n"
|
||||
|
||||
/*
|
||||
* Helper function to print from crash buf.
|
||||
* The print loop is controlled by the buf size and
|
||||
* ascii reg name list which is passed in x6. The
|
||||
* function returns the crash buf address in x0.
|
||||
* Clobbers : x0 - x7, sp
|
||||
*/
|
||||
func size_controlled_print
|
||||
/* Save the lr */
|
||||
mov sp, x30
|
||||
/* load the crash buf address */
|
||||
mrs x7, tpidr_el3
|
||||
test_size_list:
|
||||
/* Calculate x5 always as it will be clobbered by asm_print_hex */
|
||||
mrs x5, tpidr_el3
|
||||
add x5, x5, #CPU_DATA_CRASH_BUF_SIZE
|
||||
/* Test whether we have reached end of crash buf */
|
||||
cmp x7, x5
|
||||
b.eq exit_size_print
|
||||
ldrb w4, [x6]
|
||||
/* Test whether we are at end of list */
|
||||
cbz w4, exit_size_print
|
||||
mov x4, x6
|
||||
/* asm_print_str updates x4 to point to next entry in list */
|
||||
bl asm_print_str
|
||||
/* x0 = number of symbols printed + 1 */
|
||||
sub x0, x4, x6
|
||||
/* update x6 with the updated list pointer */
|
||||
mov x6, x4
|
||||
bl print_alignment
|
||||
ldr x4, [x7], #REGSZ
|
||||
bl asm_print_hex
|
||||
bl asm_print_newline
|
||||
b test_size_list
|
||||
exit_size_print:
|
||||
mov x30, sp
|
||||
ret
|
||||
endfunc size_controlled_print
|
||||
|
||||
/* -----------------------------------------------------
|
||||
* This function calculates and prints required number
|
||||
* of space characters followed by "= 0x", based on the
|
||||
* length of ascii register name.
|
||||
* x0: length of ascii register name + 1
|
||||
* ------------------------------------------------------
|
||||
*/
|
||||
func print_alignment
|
||||
/* The minimum ascii length is 3, e.g. for "x0" */
|
||||
adr x4, print_spacer - 3
|
||||
add x4, x4, x0
|
||||
b asm_print_str
|
||||
endfunc print_alignment
|
||||
|
||||
/*
|
||||
* Helper function to store x8 - x15 registers to
|
||||
* the crash buf. The system registers values are
|
||||
* copied to x8 to x15 by the caller which are then
|
||||
* copied to the crash buf by this function.
|
||||
* x0 points to the crash buf. It then calls
|
||||
* size_controlled_print to print to console.
|
||||
* Clobbers : x0 - x7, sp
|
||||
*/
|
||||
func str_in_crash_buf_print
|
||||
/* restore the crash buf address in x0 */
|
||||
mrs x0, tpidr_el3
|
||||
stp x8, x9, [x0]
|
||||
stp x10, x11, [x0, #REGSZ * 2]
|
||||
stp x12, x13, [x0, #REGSZ * 4]
|
||||
stp x14, x15, [x0, #REGSZ * 6]
|
||||
b size_controlled_print
|
||||
endfunc str_in_crash_buf_print
|
||||
|
||||
/* ------------------------------------------------------
|
||||
* This macro calculates the offset to crash buf from
|
||||
* cpu_data and stores it in tpidr_el3. It also saves x0
|
||||
* and x1 in the crash buf by using sp as a temporary
|
||||
* register.
|
||||
* ------------------------------------------------------
|
||||
*/
|
||||
.macro prepare_crash_buf_save_x0_x1
|
||||
/* we can corrupt this reg to free up x0 */
|
||||
mov sp, x0
|
||||
/* tpidr_el3 contains the address to cpu_data structure */
|
||||
mrs x0, tpidr_el3
|
||||
/* Calculate the Crash buffer offset in cpu_data */
|
||||
add x0, x0, #CPU_DATA_CRASH_BUF_OFFSET
|
||||
/* Store crash buffer address in tpidr_el3 */
|
||||
msr tpidr_el3, x0
|
||||
str x1, [x0, #REGSZ]
|
||||
mov x1, sp
|
||||
str x1, [x0]
|
||||
.endm
|
||||
|
||||
/* -----------------------------------------------------
|
||||
* This function allows to report a crash (if crash
|
||||
* reporting is enabled) when an unhandled exception
|
||||
* occurs. It prints the CPU state via the crash console
|
||||
* making use of the crash buf. This function will
|
||||
* not return.
|
||||
* -----------------------------------------------------
|
||||
*/
|
||||
func report_unhandled_exception
|
||||
prepare_crash_buf_save_x0_x1
|
||||
adr x0, excpt_msg
|
||||
mov sp, x0
|
||||
/* This call will not return */
|
||||
b do_crash_reporting
|
||||
endfunc report_unhandled_exception
|
||||
|
||||
/* -----------------------------------------------------
|
||||
* This function allows to report a crash (if crash
|
||||
* reporting is enabled) when an unhandled interrupt
|
||||
* occurs. It prints the CPU state via the crash console
|
||||
* making use of the crash buf. This function will
|
||||
* not return.
|
||||
* -----------------------------------------------------
|
||||
*/
|
||||
func report_unhandled_interrupt
|
||||
prepare_crash_buf_save_x0_x1
|
||||
adr x0, intr_excpt_msg
|
||||
mov sp, x0
|
||||
/* This call will not return */
|
||||
b do_crash_reporting
|
||||
endfunc report_unhandled_interrupt
|
||||
|
||||
/* -----------------------------------------------------
|
||||
* This function allows to report a crash from the lower
|
||||
* exception level (if crash reporting is enabled) when
|
||||
* lower_el_panic() is invoked from C Runtime.
|
||||
* It prints the CPU state via the crash console making
|
||||
* use of 'cpu_context' structure where general purpose
|
||||
* registers are saved and the crash buf.
|
||||
* This function will not return.
|
||||
* -----------------------------------------------------
|
||||
*/
|
||||
func report_elx_panic
|
||||
msr spsel, #MODE_SP_ELX
|
||||
|
||||
/* Print the crash message */
|
||||
adr x4, excpt_msg_el
|
||||
bl asm_print_str
|
||||
|
||||
/* Report x0 - x29 values stored in 'gpregs_ctx' structure */
|
||||
/* Store the ascii list pointer in x6 */
|
||||
adr x6, gp_regs
|
||||
add x7, sp, #CTX_GPREGS_OFFSET + CTX_GPREG_X0
|
||||
|
||||
print_next:
|
||||
ldrb w4, [x6]
|
||||
/* Test whether we are at end of list */
|
||||
cbz w4, print_x30
|
||||
mov x4, x6
|
||||
/* asm_print_str updates x4 to point to next entry in list */
|
||||
bl asm_print_str
|
||||
/* x0 = number of symbols printed + 1 */
|
||||
sub x0, x4, x6
|
||||
/* Update x6 with the updated list pointer */
|
||||
mov x6, x4
|
||||
bl print_alignment
|
||||
ldr x4, [x7], #REGSZ
|
||||
bl asm_print_hex
|
||||
bl asm_print_newline
|
||||
b print_next
|
||||
|
||||
print_x30:
|
||||
adr x4, x30_msg
|
||||
bl asm_print_str
|
||||
|
||||
/* Print spaces to align "x30" string */
|
||||
mov x0, #4
|
||||
bl print_alignment
|
||||
|
||||
/* Report x30 */
|
||||
ldr x4, [x7]
|
||||
|
||||
/* ----------------------------------------------------------------
|
||||
* Different virtual address space size can be defined for each EL.
|
||||
* Ensure that we use the proper one by reading the corresponding
|
||||
* TCR_ELx register.
|
||||
* ----------------------------------------------------------------
|
||||
*/
|
||||
cmp x8, #MODE_EL2
|
||||
b.lt from_el1 /* EL1 */
|
||||
mrs x2, sctlr_el2
|
||||
mrs x1, tcr_el2
|
||||
|
||||
/* ----------------------------------------------------------------
|
||||
* Check if pointer authentication is enabled at the specified EL.
|
||||
* If it isn't, we can then skip stripping a PAC code.
|
||||
* ----------------------------------------------------------------
|
||||
*/
|
||||
test_pauth:
|
||||
tst x2, #(SCTLR_EnIA_BIT | SCTLR_EnIB_BIT)
|
||||
b.eq no_pauth
|
||||
|
||||
/* Demangle address */
|
||||
and x1, x1, #0x3F /* T0SZ = TCR_ELx[5:0] */
|
||||
sub x1, x1, #64
|
||||
neg x1, x1 /* bottom_pac_bit = 64 - T0SZ */
|
||||
mov x2, #-1
|
||||
lsl x2, x2, x1
|
||||
bic x4, x4, x2
|
||||
|
||||
no_pauth:
|
||||
bl asm_print_hex
|
||||
bl asm_print_newline
|
||||
|
||||
/* tpidr_el3 contains the address to cpu_data structure */
|
||||
mrs x0, tpidr_el3
|
||||
/* Calculate the Crash buffer offset in cpu_data */
|
||||
add x0, x0, #CPU_DATA_CRASH_BUF_OFFSET
|
||||
/* Store crash buffer address in tpidr_el3 */
|
||||
msr tpidr_el3, x0
|
||||
|
||||
/* Print the rest of crash dump */
|
||||
b print_el3_sys_regs
|
||||
|
||||
from_el1:
|
||||
mrs x2, sctlr_el1
|
||||
mrs x1, tcr_el1
|
||||
b test_pauth
|
||||
endfunc report_elx_panic
|
||||
|
||||
/* -----------------------------------------------------
|
||||
* This function allows to report a crash (if crash
|
||||
* reporting is enabled) when panic() is invoked from
|
||||
* C Runtime. It prints the CPU state via the crash
|
||||
* console making use of the crash buf. This function
|
||||
* will not return.
|
||||
* -----------------------------------------------------
|
||||
*/
|
||||
func report_el3_panic
|
||||
msr spsel, #MODE_SP_ELX
|
||||
prepare_crash_buf_save_x0_x1
|
||||
adr x0, panic_msg
|
||||
mov sp, x0
|
||||
/* Fall through to 'do_crash_reporting' */
|
||||
|
||||
/* ------------------------------------------------------------
|
||||
* The common crash reporting functionality. It requires x0
|
||||
* and x1 has already been stored in crash buf, sp points to
|
||||
* crash message and tpidr_el3 contains the crash buf address.
|
||||
* The function does the following:
|
||||
* - Retrieve the crash buffer from tpidr_el3
|
||||
* - Store x2 to x6 in the crash buffer
|
||||
* - Initialise the crash console.
|
||||
* - Print the crash message by using the address in sp.
|
||||
* - Print x30 value to the crash console.
|
||||
* - Print x0 - x7 from the crash buf to the crash console.
|
||||
* - Print x8 - x29 (in groups of 8 registers) using the
|
||||
* crash buf to the crash console.
|
||||
* - Print el3 sys regs (in groups of 8 registers) using the
|
||||
* crash buf to the crash console.
|
||||
* - Print non el3 sys regs (in groups of 8 registers) using
|
||||
* the crash buf to the crash console.
|
||||
* ------------------------------------------------------------
|
||||
*/
|
||||
do_crash_reporting:
|
||||
/* Retrieve the crash buf from tpidr_el3 */
|
||||
mrs x0, tpidr_el3
|
||||
/* Store x2 - x6, x30 in the crash buffer */
|
||||
stp x2, x3, [x0, #REGSZ * 2]
|
||||
stp x4, x5, [x0, #REGSZ * 4]
|
||||
stp x6, x30, [x0, #REGSZ * 6]
|
||||
/* Initialize the crash console */
|
||||
bl plat_crash_console_init
|
||||
/* Verify the console is initialized */
|
||||
cbz x0, crash_panic
|
||||
/* Print the crash message. sp points to the crash message */
|
||||
mov x4, sp
|
||||
bl asm_print_str
|
||||
/* Print spaces to align "x30" string */
|
||||
mov x0, #4
|
||||
bl print_alignment
|
||||
/* Load the crash buf address */
|
||||
mrs x0, tpidr_el3
|
||||
/* Report x30 first from the crash buf */
|
||||
ldr x4, [x0, #REGSZ * 7]
|
||||
|
||||
#if ENABLE_PAUTH
|
||||
/* Demangle address */
|
||||
xpaci x4
|
||||
#endif
|
||||
bl asm_print_hex
|
||||
bl asm_print_newline
|
||||
/* Load the crash buf address */
|
||||
mrs x0, tpidr_el3
|
||||
/* Now mov x7 into crash buf */
|
||||
str x7, [x0, #REGSZ * 7]
|
||||
|
||||
/* Report x0 - x29 values stored in crash buf */
|
||||
/* Store the ascii list pointer in x6 */
|
||||
adr x6, gp_regs
|
||||
/* Print x0 to x7 from the crash buf */
|
||||
bl size_controlled_print
|
||||
/* Store x8 - x15 in crash buf and print */
|
||||
bl str_in_crash_buf_print
|
||||
/* Load the crash buf address */
|
||||
mrs x0, tpidr_el3
|
||||
/* Store the rest of gp regs and print */
|
||||
stp x16, x17, [x0]
|
||||
stp x18, x19, [x0, #REGSZ * 2]
|
||||
stp x20, x21, [x0, #REGSZ * 4]
|
||||
stp x22, x23, [x0, #REGSZ * 6]
|
||||
bl size_controlled_print
|
||||
/* Load the crash buf address */
|
||||
mrs x0, tpidr_el3
|
||||
stp x24, x25, [x0]
|
||||
stp x26, x27, [x0, #REGSZ * 2]
|
||||
stp x28, x29, [x0, #REGSZ * 4]
|
||||
bl size_controlled_print
|
||||
|
||||
/* Print the el3 sys registers */
|
||||
print_el3_sys_regs:
|
||||
adr x6, el3_sys_regs
|
||||
mrs x8, scr_el3
|
||||
mrs x9, sctlr_el3
|
||||
mrs x10, cptr_el3
|
||||
mrs x11, tcr_el3
|
||||
mrs x12, daif
|
||||
mrs x13, mair_el3
|
||||
mrs x14, spsr_el3
|
||||
mrs x15, elr_el3
|
||||
bl str_in_crash_buf_print
|
||||
mrs x8, ttbr0_el3
|
||||
mrs x9, esr_el3
|
||||
mrs x10, far_el3
|
||||
bl str_in_crash_buf_print
|
||||
|
||||
/* Print the non el3 sys registers */
|
||||
adr x6, non_el3_sys_regs
|
||||
mrs x8, spsr_el1
|
||||
mrs x9, elr_el1
|
||||
mrs x10, spsr_abt
|
||||
mrs x11, spsr_und
|
||||
mrs x12, spsr_irq
|
||||
mrs x13, spsr_fiq
|
||||
mrs x14, sctlr_el1
|
||||
mrs x15, actlr_el1
|
||||
bl str_in_crash_buf_print
|
||||
mrs x8, cpacr_el1
|
||||
mrs x9, csselr_el1
|
||||
mrs x10, sp_el1
|
||||
mrs x11, esr_el1
|
||||
mrs x12, ttbr0_el1
|
||||
mrs x13, ttbr1_el1
|
||||
mrs x14, mair_el1
|
||||
mrs x15, amair_el1
|
||||
bl str_in_crash_buf_print
|
||||
mrs x8, tcr_el1
|
||||
mrs x9, tpidr_el1
|
||||
mrs x10, tpidr_el0
|
||||
mrs x11, tpidrro_el0
|
||||
mrs x12, par_el1
|
||||
mrs x13, mpidr_el1
|
||||
mrs x14, afsr0_el1
|
||||
mrs x15, afsr1_el1
|
||||
bl str_in_crash_buf_print
|
||||
mrs x8, contextidr_el1
|
||||
mrs x9, vbar_el1
|
||||
mrs x10, cntp_ctl_el0
|
||||
mrs x11, cntp_cval_el0
|
||||
mrs x12, cntv_ctl_el0
|
||||
mrs x13, cntv_cval_el0
|
||||
mrs x14, cntkctl_el1
|
||||
mrs x15, sp_el0
|
||||
bl str_in_crash_buf_print
|
||||
mrs x8, isr_el1
|
||||
bl str_in_crash_buf_print
|
||||
|
||||
#if CTX_INCLUDE_AARCH32_REGS
|
||||
/* Print the AArch32 registers */
|
||||
adr x6, aarch32_regs
|
||||
mrs x8, dacr32_el2
|
||||
mrs x9, ifsr32_el2
|
||||
bl str_in_crash_buf_print
|
||||
#endif /* CTX_INCLUDE_AARCH32_REGS */
|
||||
|
||||
/* Get the cpu specific registers to report */
|
||||
bl do_cpu_reg_dump
|
||||
bl str_in_crash_buf_print
|
||||
|
||||
/* Print some platform registers */
|
||||
plat_crash_print_regs
|
||||
|
||||
bl plat_crash_console_flush
|
||||
|
||||
/* Done reporting */
|
||||
no_ret plat_panic_handler
|
||||
endfunc report_el3_panic
|
||||
|
||||
#else /* CRASH_REPORTING */
|
||||
func report_unhandled_exception
|
||||
report_unhandled_interrupt:
|
||||
no_ret plat_panic_handler
|
||||
endfunc report_unhandled_exception
|
||||
#endif /* CRASH_REPORTING */
|
||||
|
||||
func crash_panic
|
||||
no_ret plat_panic_handler
|
||||
endfunc crash_panic
|
||||
325
arm-trusted-firmware.t234/bl31/aarch64/ea_delegate.S
Normal file
325
arm-trusted-firmware.t234/bl31/aarch64/ea_delegate.S
Normal file
@@ -0,0 +1,325 @@
|
||||
/*
|
||||
* Copyright (c) 2018-2022, ARM Limited and Contributors. All rights reserved.
|
||||
* Copyright (c) 2022, NVIDIA Corporation. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
|
||||
#include <assert_macros.S>
|
||||
#include <asm_macros.S>
|
||||
#include <assert_macros.S>
|
||||
#include <bl31/ea_handle.h>
|
||||
#include <context.h>
|
||||
#include <lib/extensions/ras_arch.h>
|
||||
#include <cpu_macros.S>
|
||||
#include <context.h>
|
||||
|
||||
.globl handle_lower_el_sync_ea
|
||||
.globl handle_lower_el_async_ea
|
||||
.globl handle_pending_async_ea
|
||||
/*
|
||||
* This function handles Synchronous External Aborts from lower EL.
|
||||
*
|
||||
* It delegates the handling of the EA to platform handler, and upon successfully
|
||||
* handling the EA, exits EL3; otherwise panics.
|
||||
*
|
||||
* This function assumes x30 has been saved.
|
||||
*/
|
||||
func handle_lower_el_sync_ea
|
||||
mrs x30, esr_el3
|
||||
ubfx x30, x30, #ESR_EC_SHIFT, #ESR_EC_LENGTH
|
||||
|
||||
/* Check for I/D aborts from lower EL */
|
||||
cmp x30, #EC_IABORT_LOWER_EL
|
||||
b.eq 1f
|
||||
|
||||
cmp x30, #EC_DABORT_LOWER_EL
|
||||
b.eq 1f
|
||||
|
||||
/* EA other than above are unhandled exceptions */
|
||||
no_ret report_unhandled_exception
|
||||
1:
|
||||
/*
|
||||
* Save general purpose and ARMv8.3-PAuth registers (if enabled).
|
||||
* Also save PMCR_EL0 and set the PSTATE to a known state.
|
||||
*/
|
||||
bl prepare_el3_entry
|
||||
|
||||
#if ENABLE_PAUTH
|
||||
/* Load and program APIAKey firmware key */
|
||||
bl pauth_load_bl31_apiakey
|
||||
#endif
|
||||
|
||||
/* Setup exception class and syndrome arguments for platform handler */
|
||||
mov x0, #ERROR_EA_SYNC
|
||||
mrs x1, esr_el3
|
||||
bl delegate_sync_ea
|
||||
|
||||
/* el3_exit assumes SP_EL0 on entry */
|
||||
msr spsel, #MODE_SP_EL0
|
||||
b el3_exit
|
||||
endfunc handle_lower_el_sync_ea
|
||||
|
||||
|
||||
/*
|
||||
* This function handles SErrors from lower ELs.
|
||||
*
|
||||
* It delegates the handling of the EA to platform handler, and upon successfully
|
||||
* handling the EA, exits EL3; otherwise panics.
|
||||
*
|
||||
* This function assumes x30 has been saved.
|
||||
*/
|
||||
func handle_lower_el_async_ea
|
||||
|
||||
/*
|
||||
* Save general purpose and ARMv8.3-PAuth registers (if enabled).
|
||||
* Also save PMCR_EL0 and set the PSTATE to a known state.
|
||||
*/
|
||||
bl prepare_el3_entry
|
||||
|
||||
#if ENABLE_PAUTH
|
||||
/* Load and program APIAKey firmware key */
|
||||
bl pauth_load_bl31_apiakey
|
||||
#endif
|
||||
|
||||
/* Setup exception class and syndrome arguments for platform handler */
|
||||
mov x0, #ERROR_EA_ASYNC
|
||||
mrs x1, esr_el3
|
||||
bl delegate_async_ea
|
||||
|
||||
/* el3_exit assumes SP_EL0 on entry */
|
||||
msr spsel, #MODE_SP_EL0
|
||||
b el3_exit
|
||||
endfunc handle_lower_el_async_ea
|
||||
|
||||
/*
|
||||
* Handler for async EA from lower EL synchronized at EL3 entry in FFH mode.
|
||||
*
|
||||
* This scenario may arise when there is an error (EA) in the system which is not
|
||||
* yet signaled to PE while executing in lower EL. During entry into EL3, the errors
|
||||
* are synchronized either implicitly or explicitly causing async EA to pend at EL3.
|
||||
*
|
||||
* On detecting the pending EA (via ISR_EL1.A), if the EA routing model is Firmware
|
||||
* First handling (FFH, SCR_EL3.EA = 1) this handler first handles the pending EA
|
||||
* and then handles the original exception.
|
||||
*
|
||||
* This function assumes x30 has been saved.
|
||||
*/
|
||||
func handle_pending_async_ea
|
||||
/*
|
||||
* Prepare for nested handling of EA. Stash sysregs clobbered by nested
|
||||
* exception and handler
|
||||
*/
|
||||
str x30, [sp, #CTX_EL3STATE_OFFSET + CTX_SAVED_GPREG_LR]
|
||||
mrs x30, esr_el3
|
||||
str x30, [sp, #CTX_EL3STATE_OFFSET + CTX_SAVED_ESR_EL3]
|
||||
mrs x30, spsr_el3
|
||||
str x30, [sp, #CTX_EL3STATE_OFFSET + CTX_SAVED_SPSR_EL3]
|
||||
mrs x30, elr_el3
|
||||
str x30, [sp, #CTX_EL3STATE_OFFSET + CTX_SAVED_ELR_EL3]
|
||||
|
||||
mov x30, #1
|
||||
str x30, [sp, #CTX_EL3STATE_OFFSET + CTX_NESTED_EA_FLAG]
|
||||
/*
|
||||
* Restore the original x30 saved as part of entering EL3. This is not
|
||||
* required for the current function but for EL3 SError vector entry
|
||||
* once PSTATE.A bit is unmasked. We restore x30 and then the same
|
||||
* value is stored in EL3 SError vector entry.
|
||||
*/
|
||||
ldr x30, [sp, #CTX_GPREGS_OFFSET + CTX_GPREG_LR]
|
||||
|
||||
/*
|
||||
* After clearing PSTATE.A bit pending SError will trigger at current EL.
|
||||
* Put explicit synchronization event to ensure newly unmasked interrupt
|
||||
* is taken immediately.
|
||||
*/
|
||||
unmask_async_ea
|
||||
|
||||
/* Restore the original exception information along with zeroing the storage */
|
||||
ldr x30, [sp, #CTX_EL3STATE_OFFSET + CTX_SAVED_ELR_EL3]
|
||||
msr elr_el3, x30
|
||||
str xzr, [sp, #CTX_EL3STATE_OFFSET + CTX_SAVED_ELR_EL3]
|
||||
ldr x30, [sp, #CTX_EL3STATE_OFFSET + CTX_SAVED_SPSR_EL3]
|
||||
msr spsr_el3, x30
|
||||
str xzr, [sp, #CTX_EL3STATE_OFFSET + CTX_SAVED_SPSR_EL3]
|
||||
ldr x30, [sp, #CTX_EL3STATE_OFFSET + CTX_SAVED_ESR_EL3]
|
||||
msr esr_el3, x30
|
||||
str xzr, [sp, #CTX_EL3STATE_OFFSET + CTX_SAVED_ESR_EL3]
|
||||
|
||||
/*
|
||||
* If the original exception corresponds to SError from lower El, eret back
|
||||
* to lower EL, otherwise return to vector table for original exception handling.
|
||||
*/
|
||||
ubfx x30, x30, #ESR_EC_SHIFT, #ESR_EC_LENGTH
|
||||
cmp x30, #EC_SERROR
|
||||
ldr x30, [sp, #CTX_EL3STATE_OFFSET + CTX_SAVED_GPREG_LR]
|
||||
str xzr, [sp, #CTX_EL3STATE_OFFSET + CTX_SAVED_GPREG_LR]
|
||||
b.eq 1f
|
||||
ret
|
||||
1:
|
||||
exception_return
|
||||
endfunc handle_pending_async_ea
|
||||
|
||||
/*
|
||||
* Prelude for Synchronous External Abort handling. This function assumes that
|
||||
* all GP registers have been saved by the caller.
|
||||
*
|
||||
* x0: EA reason
|
||||
* x1: EA syndrome
|
||||
*/
|
||||
func delegate_sync_ea
|
||||
#if ENABLE_FEAT_RAS
|
||||
/*
|
||||
* Check for Uncontainable error type. If so, route to the platform
|
||||
* fatal error handler rather than the generic EA one.
|
||||
*/
|
||||
ubfx x2, x1, #EABORT_SET_SHIFT, #EABORT_SET_WIDTH
|
||||
cmp x2, #ERROR_STATUS_SET_UC
|
||||
b.ne 1f
|
||||
|
||||
/* Check fault status code */
|
||||
ubfx x3, x1, #EABORT_DFSC_SHIFT, #EABORT_DFSC_WIDTH
|
||||
cmp x3, #SYNC_EA_FSC
|
||||
b.ne 1f
|
||||
|
||||
no_ret plat_handle_uncontainable_ea
|
||||
1:
|
||||
#endif
|
||||
|
||||
b ea_proceed
|
||||
endfunc delegate_sync_ea
|
||||
|
||||
|
||||
/*
|
||||
* Prelude for Asynchronous External Abort handling. This function assumes that
|
||||
* all GP registers have been saved by the caller.
|
||||
*
|
||||
* x0: EA reason
|
||||
* x1: EA syndrome
|
||||
*/
|
||||
func delegate_async_ea
|
||||
#if ENABLE_FEAT_RAS
|
||||
/* Check Exception Class to ensure SError, as this function should
|
||||
* only be invoked for SError. If that is not the case, which implies
|
||||
* either an HW error or programming error, panic.
|
||||
*/
|
||||
ubfx x2, x1, #ESR_EC_SHIFT, #ESR_EC_LENGTH
|
||||
cmp x2, EC_SERROR
|
||||
b.ne el3_panic
|
||||
/*
|
||||
* Check for Implementation Defined Syndrome. If so, skip checking
|
||||
* Uncontainable error type from the syndrome as the format is unknown.
|
||||
*/
|
||||
tbnz x1, #SERROR_IDS_BIT, 1f
|
||||
|
||||
/* AET only valid when DFSC is 0x11 */
|
||||
ubfx x2, x1, #EABORT_DFSC_SHIFT, #EABORT_DFSC_WIDTH
|
||||
cmp x2, #DFSC_SERROR
|
||||
b.ne 1f
|
||||
|
||||
/*
|
||||
* Check for Uncontainable error type. If so, route to the platform
|
||||
* fatal error handler rather than the generic EA one.
|
||||
*/
|
||||
ubfx x3, x1, #EABORT_AET_SHIFT, #EABORT_AET_WIDTH
|
||||
cmp x3, #ERROR_STATUS_UET_UC
|
||||
b.ne 1f
|
||||
|
||||
no_ret plat_handle_uncontainable_ea
|
||||
1:
|
||||
#endif
|
||||
|
||||
b ea_proceed
|
||||
endfunc delegate_async_ea
|
||||
|
||||
|
||||
/*
|
||||
* Delegate External Abort handling to platform's EA handler. This function
|
||||
* assumes that all GP registers have been saved by the caller.
|
||||
*
|
||||
* x0: EA reason
|
||||
* x1: EA syndrome
|
||||
*/
|
||||
func ea_proceed
|
||||
/*
|
||||
* If the ESR loaded earlier is not zero, we were processing an EA
|
||||
* already, and this is a double fault.
|
||||
*/
|
||||
ldr x5, [sp, #CTX_EL3STATE_OFFSET + CTX_ESR_EL3]
|
||||
cbz x5, 1f
|
||||
no_ret plat_handle_double_fault
|
||||
|
||||
1:
|
||||
/* Save EL3 state */
|
||||
mrs x2, spsr_el3
|
||||
mrs x3, elr_el3
|
||||
stp x2, x3, [sp, #CTX_EL3STATE_OFFSET + CTX_SPSR_EL3]
|
||||
|
||||
/*
|
||||
* Save ESR as handling might involve lower ELs, and returning back to
|
||||
* EL3 from there would trample the original ESR.
|
||||
*/
|
||||
mrs x4, scr_el3
|
||||
mrs x5, esr_el3
|
||||
stp x4, x5, [sp, #CTX_EL3STATE_OFFSET + CTX_SCR_EL3]
|
||||
|
||||
/*
|
||||
* Setup rest of arguments, and call platform External Abort handler.
|
||||
*
|
||||
* x0: EA reason (already in place)
|
||||
* x1: Exception syndrome (already in place).
|
||||
* x2: Cookie (unused for now).
|
||||
* x3: Context pointer.
|
||||
* x4: Flags (security state from SCR for now).
|
||||
*/
|
||||
mov x2, xzr
|
||||
mov x3, sp
|
||||
ubfx x4, x4, #0, #1
|
||||
|
||||
/* Switch to runtime stack */
|
||||
ldr x5, [sp, #CTX_EL3STATE_OFFSET + CTX_RUNTIME_SP]
|
||||
msr spsel, #MODE_SP_EL0
|
||||
mov sp, x5
|
||||
|
||||
mov x29, x30
|
||||
#if ENABLE_ASSERTIONS
|
||||
/* Stash the stack pointer */
|
||||
mov x28, sp
|
||||
#endif
|
||||
bl plat_ea_handler
|
||||
|
||||
#if ENABLE_ASSERTIONS
|
||||
/*
|
||||
* Error handling flows might involve long jumps; so upon returning from
|
||||
* the platform error handler, validate that the we've completely
|
||||
* unwound the stack.
|
||||
*/
|
||||
mov x27, sp
|
||||
cmp x28, x27
|
||||
ASM_ASSERT(eq)
|
||||
#endif
|
||||
|
||||
/* Make SP point to context */
|
||||
msr spsel, #MODE_SP_ELX
|
||||
|
||||
/* Restore EL3 state and ESR */
|
||||
ldp x1, x2, [sp, #CTX_EL3STATE_OFFSET + CTX_SPSR_EL3]
|
||||
msr spsr_el3, x1
|
||||
msr elr_el3, x2
|
||||
|
||||
/* Restore ESR_EL3 and SCR_EL3 */
|
||||
ldp x3, x4, [sp, #CTX_EL3STATE_OFFSET + CTX_SCR_EL3]
|
||||
msr scr_el3, x3
|
||||
msr esr_el3, x4
|
||||
|
||||
#if ENABLE_ASSERTIONS
|
||||
cmp x4, xzr
|
||||
ASM_ASSERT(ne)
|
||||
#endif
|
||||
|
||||
/* Clear ESR storage */
|
||||
str xzr, [sp, #CTX_EL3STATE_OFFSET + CTX_ESR_EL3]
|
||||
|
||||
ret x29
|
||||
endfunc ea_proceed
|
||||
755
arm-trusted-firmware.t234/bl31/aarch64/runtime_exceptions.S
Normal file
755
arm-trusted-firmware.t234/bl31/aarch64/runtime_exceptions.S
Normal file
@@ -0,0 +1,755 @@
|
||||
/*
|
||||
* Copyright (c) 2013-2024, Arm Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <platform_def.h>
|
||||
|
||||
#include <arch.h>
|
||||
#include <asm_macros.S>
|
||||
#include <bl31/ea_handle.h>
|
||||
#include <bl31/interrupt_mgmt.h>
|
||||
#include <bl31/sync_handle.h>
|
||||
#include <common/runtime_svc.h>
|
||||
#include <context.h>
|
||||
#include <cpu_macros.S>
|
||||
#include <el3_common_macros.S>
|
||||
#include <lib/el3_runtime/cpu_data.h>
|
||||
#include <lib/smccc.h>
|
||||
|
||||
.globl runtime_exceptions
|
||||
|
||||
.globl sync_exception_sp_el0
|
||||
.globl irq_sp_el0
|
||||
.globl fiq_sp_el0
|
||||
.globl serror_sp_el0
|
||||
|
||||
.globl sync_exception_sp_elx
|
||||
.globl irq_sp_elx
|
||||
.globl fiq_sp_elx
|
||||
.globl serror_sp_elx
|
||||
|
||||
.globl sync_exception_aarch64
|
||||
.globl irq_aarch64
|
||||
.globl fiq_aarch64
|
||||
.globl serror_aarch64
|
||||
|
||||
.globl sync_exception_aarch32
|
||||
.globl irq_aarch32
|
||||
.globl fiq_aarch32
|
||||
.globl serror_aarch32
|
||||
|
||||
/*
|
||||
* Save LR and make x30 available as most of the routines in vector entry
|
||||
* need a free register
|
||||
*/
|
||||
.macro save_x30
|
||||
str x30, [sp, #CTX_GPREGS_OFFSET + CTX_GPREG_LR]
|
||||
.endm
|
||||
|
||||
.macro restore_x30
|
||||
ldr x30, [sp, #CTX_GPREGS_OFFSET + CTX_GPREG_LR]
|
||||
.endm
|
||||
|
||||
/*
|
||||
* Macro that synchronizes errors (EA) and checks for pending SError.
|
||||
* On detecting a pending SError it either reflects it back to lower
|
||||
* EL (KFH) or handles it in EL3 (FFH) based on EA routing model.
|
||||
*/
|
||||
.macro sync_and_handle_pending_serror
|
||||
synchronize_errors
|
||||
mrs x30, ISR_EL1
|
||||
tbz x30, #ISR_A_SHIFT, 2f
|
||||
#if FFH_SUPPORT
|
||||
mrs x30, scr_el3
|
||||
tst x30, #SCR_EA_BIT
|
||||
b.eq 1f
|
||||
bl handle_pending_async_ea
|
||||
b 2f
|
||||
#endif
|
||||
1:
|
||||
/* This function never returns, but need LR for decision making */
|
||||
bl reflect_pending_async_ea_to_lower_el
|
||||
2:
|
||||
.endm
|
||||
|
||||
/* ---------------------------------------------------------------------
|
||||
* This macro handles Synchronous exceptions.
|
||||
* Only SMC exceptions are supported.
|
||||
* ---------------------------------------------------------------------
|
||||
*/
|
||||
.macro handle_sync_exception
|
||||
#if ENABLE_RUNTIME_INSTRUMENTATION
|
||||
/*
|
||||
* Read the timestamp value and store it in per-cpu data. The value
|
||||
* will be extracted from per-cpu data by the C level SMC handler and
|
||||
* saved to the PMF timestamp region.
|
||||
*/
|
||||
mrs x30, cntpct_el0
|
||||
str x29, [sp, #CTX_GPREGS_OFFSET + CTX_GPREG_X29]
|
||||
mrs x29, tpidr_el3
|
||||
str x30, [x29, #CPU_DATA_PMF_TS0_OFFSET]
|
||||
ldr x29, [sp, #CTX_GPREGS_OFFSET + CTX_GPREG_X29]
|
||||
#endif
|
||||
|
||||
mrs x30, esr_el3
|
||||
ubfx x30, x30, #ESR_EC_SHIFT, #ESR_EC_LENGTH
|
||||
|
||||
/* Handle SMC exceptions separately from other synchronous exceptions */
|
||||
cmp x30, #EC_AARCH32_SMC
|
||||
b.eq smc_handler32
|
||||
|
||||
cmp x30, #EC_AARCH64_SMC
|
||||
b.eq sync_handler64
|
||||
|
||||
cmp x30, #EC_AARCH64_SYS
|
||||
b.eq sync_handler64
|
||||
|
||||
cmp x30, #EC_IMP_DEF_EL3
|
||||
b.eq imp_def_el3_handler
|
||||
|
||||
/* If FFH Support then try to handle lower EL EA exceptions. */
|
||||
#if FFH_SUPPORT
|
||||
mrs x30, scr_el3
|
||||
tst x30, #SCR_EA_BIT
|
||||
b.eq 1f
|
||||
b handle_lower_el_sync_ea
|
||||
#endif
|
||||
1:
|
||||
/* Synchronous exceptions other than the above are unhandled */
|
||||
b report_unhandled_exception
|
||||
.endm
|
||||
|
||||
vector_base runtime_exceptions
|
||||
|
||||
/* ---------------------------------------------------------------------
|
||||
* Current EL with SP_EL0 : 0x0 - 0x200
|
||||
* ---------------------------------------------------------------------
|
||||
*/
|
||||
vector_entry sync_exception_sp_el0
|
||||
#ifdef MONITOR_TRAPS
|
||||
stp x29, x30, [sp, #-16]!
|
||||
|
||||
mrs x30, esr_el3
|
||||
ubfx x30, x30, #ESR_EC_SHIFT, #ESR_EC_LENGTH
|
||||
|
||||
/* Check for BRK */
|
||||
cmp x30, #EC_BRK
|
||||
b.eq brk_handler
|
||||
|
||||
ldp x29, x30, [sp], #16
|
||||
#endif /* MONITOR_TRAPS */
|
||||
|
||||
/* We don't expect any synchronous exceptions from EL3 */
|
||||
b report_unhandled_exception
|
||||
end_vector_entry sync_exception_sp_el0
|
||||
|
||||
vector_entry irq_sp_el0
|
||||
/*
|
||||
* EL3 code is non-reentrant. Any asynchronous exception is a serious
|
||||
* error. Loop infinitely.
|
||||
*/
|
||||
b report_unhandled_interrupt
|
||||
end_vector_entry irq_sp_el0
|
||||
|
||||
|
||||
vector_entry fiq_sp_el0
|
||||
b report_unhandled_interrupt
|
||||
end_vector_entry fiq_sp_el0
|
||||
|
||||
|
||||
vector_entry serror_sp_el0
|
||||
no_ret plat_handle_el3_ea
|
||||
end_vector_entry serror_sp_el0
|
||||
|
||||
/* ---------------------------------------------------------------------
|
||||
* Current EL with SP_ELx: 0x200 - 0x400
|
||||
* ---------------------------------------------------------------------
|
||||
*/
|
||||
vector_entry sync_exception_sp_elx
|
||||
/*
|
||||
* This exception will trigger if anything went wrong during a previous
|
||||
* exception entry or exit or while handling an earlier unexpected
|
||||
* synchronous exception. There is a high probability that SP_EL3 is
|
||||
* corrupted.
|
||||
*/
|
||||
b report_unhandled_exception
|
||||
end_vector_entry sync_exception_sp_elx
|
||||
|
||||
vector_entry irq_sp_elx
|
||||
b report_unhandled_interrupt
|
||||
end_vector_entry irq_sp_elx
|
||||
|
||||
vector_entry fiq_sp_elx
|
||||
b report_unhandled_interrupt
|
||||
end_vector_entry fiq_sp_elx
|
||||
|
||||
vector_entry serror_sp_elx
|
||||
#if FFH_SUPPORT
|
||||
/*
|
||||
* This will trigger if the exception was taken due to SError in EL3 or
|
||||
* because of pending asynchronous external aborts from lower EL that got
|
||||
* triggered due to implicit/explicit synchronization in EL3 (SCR_EL3.EA=1)
|
||||
* during EL3 entry. For the former case we continue with "plat_handle_el3_ea".
|
||||
* The later case will occur when PSTATE.A bit is cleared in
|
||||
* "handle_pending_async_ea". This means we are doing a nested
|
||||
* exception in EL3. Call the handler for async EA which will eret back to
|
||||
* original el3 handler if it is nested exception. Also, unmask EA so that we
|
||||
* catch any further EA arise when handling this nested exception at EL3.
|
||||
*/
|
||||
save_x30
|
||||
ldr x30, [sp, #CTX_EL3STATE_OFFSET + CTX_NESTED_EA_FLAG]
|
||||
cbz x30, 1f
|
||||
/*
|
||||
* This is nested exception handling, clear the flag to avoid taking this
|
||||
* path for further exceptions caused by EA handling
|
||||
*/
|
||||
str xzr, [sp, #CTX_EL3STATE_OFFSET + CTX_NESTED_EA_FLAG]
|
||||
b handle_lower_el_async_ea
|
||||
1:
|
||||
restore_x30
|
||||
#endif
|
||||
no_ret plat_handle_el3_ea
|
||||
|
||||
end_vector_entry serror_sp_elx
|
||||
|
||||
/* ---------------------------------------------------------------------
|
||||
* Lower EL using AArch64 : 0x400 - 0x600
|
||||
* ---------------------------------------------------------------------
|
||||
*/
|
||||
vector_entry sync_exception_aarch64
|
||||
/*
|
||||
* This exception vector will be the entry point for SMCs and traps
|
||||
* that are unhandled at lower ELs most commonly. SP_EL3 should point
|
||||
* to a valid cpu context where the general purpose and system register
|
||||
* state can be saved.
|
||||
*/
|
||||
save_x30
|
||||
apply_at_speculative_wa
|
||||
sync_and_handle_pending_serror
|
||||
handle_sync_exception
|
||||
end_vector_entry sync_exception_aarch64
|
||||
|
||||
vector_entry irq_aarch64
|
||||
save_x30
|
||||
apply_at_speculative_wa
|
||||
sync_and_handle_pending_serror
|
||||
b handle_interrupt_exception
|
||||
end_vector_entry irq_aarch64
|
||||
|
||||
vector_entry fiq_aarch64
|
||||
save_x30
|
||||
apply_at_speculative_wa
|
||||
sync_and_handle_pending_serror
|
||||
b handle_interrupt_exception
|
||||
end_vector_entry fiq_aarch64
|
||||
|
||||
/*
|
||||
* Need to synchronize any outstanding SError since we can get a burst of errors.
|
||||
* So reuse the sync mechanism to catch any further errors which are pending.
|
||||
*/
|
||||
vector_entry serror_aarch64
|
||||
#if FFH_SUPPORT
|
||||
save_x30
|
||||
apply_at_speculative_wa
|
||||
sync_and_handle_pending_serror
|
||||
b handle_lower_el_async_ea
|
||||
#else
|
||||
b report_unhandled_exception
|
||||
#endif
|
||||
end_vector_entry serror_aarch64
|
||||
|
||||
/* ---------------------------------------------------------------------
|
||||
* Lower EL using AArch32 : 0x600 - 0x800
|
||||
* ---------------------------------------------------------------------
|
||||
*/
|
||||
vector_entry sync_exception_aarch32
|
||||
/*
|
||||
* This exception vector will be the entry point for SMCs and traps
|
||||
* that are unhandled at lower ELs most commonly. SP_EL3 should point
|
||||
* to a valid cpu context where the general purpose and system register
|
||||
* state can be saved.
|
||||
*/
|
||||
save_x30
|
||||
apply_at_speculative_wa
|
||||
sync_and_handle_pending_serror
|
||||
handle_sync_exception
|
||||
end_vector_entry sync_exception_aarch32
|
||||
|
||||
vector_entry irq_aarch32
|
||||
save_x30
|
||||
apply_at_speculative_wa
|
||||
sync_and_handle_pending_serror
|
||||
b handle_interrupt_exception
|
||||
end_vector_entry irq_aarch32
|
||||
|
||||
vector_entry fiq_aarch32
|
||||
save_x30
|
||||
apply_at_speculative_wa
|
||||
sync_and_handle_pending_serror
|
||||
b handle_interrupt_exception
|
||||
end_vector_entry fiq_aarch32
|
||||
|
||||
/*
|
||||
* Need to synchronize any outstanding SError since we can get a burst of errors.
|
||||
* So reuse the sync mechanism to catch any further errors which are pending.
|
||||
*/
|
||||
vector_entry serror_aarch32
|
||||
#if FFH_SUPPORT
|
||||
save_x30
|
||||
apply_at_speculative_wa
|
||||
sync_and_handle_pending_serror
|
||||
b handle_lower_el_async_ea
|
||||
#else
|
||||
b report_unhandled_exception
|
||||
#endif
|
||||
end_vector_entry serror_aarch32
|
||||
|
||||
#ifdef MONITOR_TRAPS
|
||||
.section .rodata.brk_string, "aS"
|
||||
brk_location:
|
||||
.asciz "Error at instruction 0x"
|
||||
brk_message:
|
||||
.asciz "Unexpected BRK instruction with value 0x"
|
||||
#endif /* MONITOR_TRAPS */
|
||||
|
||||
/* ---------------------------------------------------------------------
|
||||
* The following code handles secure monitor calls.
|
||||
* Depending upon the execution state from where the SMC has been
|
||||
* invoked, it frees some general purpose registers to perform the
|
||||
* remaining tasks. They involve finding the runtime service handler
|
||||
* that is the target of the SMC & switching to runtime stacks (SP_EL0)
|
||||
* before calling the handler.
|
||||
*
|
||||
* Note that x30 has been explicitly saved and can be used here
|
||||
* ---------------------------------------------------------------------
|
||||
*/
|
||||
func sync_exception_handler
|
||||
smc_handler32:
|
||||
/* Check whether aarch32 issued an SMC64 */
|
||||
tbnz x0, #FUNCID_CC_SHIFT, smc_prohibited
|
||||
|
||||
sync_handler64:
|
||||
/* NOTE: The code below must preserve x0-x4 */
|
||||
|
||||
/*
|
||||
* Save general purpose and ARMv8.3-PAuth registers (if enabled).
|
||||
* Also save PMCR_EL0 and set the PSTATE to a known state.
|
||||
*/
|
||||
bl prepare_el3_entry
|
||||
|
||||
#if ENABLE_PAUTH
|
||||
/* Load and program APIAKey firmware key */
|
||||
bl pauth_load_bl31_apiakey
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Populate the parameters for the SMC handler.
|
||||
* We already have x0-x4 in place. x5 will point to a cookie (not used
|
||||
* now). x6 will point to the context structure (SP_EL3) and x7 will
|
||||
* contain flags we need to pass to the handler.
|
||||
*/
|
||||
mov x5, xzr
|
||||
mov x6, sp
|
||||
|
||||
/*
|
||||
* Restore the saved C runtime stack value which will become the new
|
||||
* SP_EL0 i.e. EL3 runtime stack. It was saved in the 'cpu_context'
|
||||
* structure prior to the last ERET from EL3.
|
||||
*/
|
||||
ldr x12, [x6, #CTX_EL3STATE_OFFSET + CTX_RUNTIME_SP]
|
||||
|
||||
/* Switch to SP_EL0 */
|
||||
msr spsel, #MODE_SP_EL0
|
||||
|
||||
/*
|
||||
* Save the SPSR_EL3 and ELR_EL3 in case there is a world
|
||||
* switch during SMC handling.
|
||||
* TODO: Revisit if all system registers can be saved later.
|
||||
*/
|
||||
mrs x16, spsr_el3
|
||||
mrs x17, elr_el3
|
||||
stp x16, x17, [x6, #CTX_EL3STATE_OFFSET + CTX_SPSR_EL3]
|
||||
|
||||
/* Load SCR_EL3 */
|
||||
mrs x18, scr_el3
|
||||
|
||||
/* check for system register traps */
|
||||
mrs x16, esr_el3
|
||||
ubfx x17, x16, #ESR_EC_SHIFT, #ESR_EC_LENGTH
|
||||
cmp x17, #EC_AARCH64_SYS
|
||||
b.eq sysreg_handler64
|
||||
|
||||
/* Clear flag register */
|
||||
mov x7, xzr
|
||||
|
||||
#if ENABLE_RME
|
||||
mrs x7, id_aa64pfr0_el1
|
||||
ubfx x7, x7, #ID_AA64PFR0_FEAT_RME_SHIFT, #ID_AA64PFR0_FEAT_RME_LENGTH
|
||||
cbz x7, 1f
|
||||
|
||||
/* Copy SCR_EL3.NSE bit to the flag to indicate caller's security */
|
||||
ubfx x7, x18, #SCR_NSE_SHIFT, #1
|
||||
|
||||
/*
|
||||
* Shift copied SCR_EL3.NSE bit by 5 to create space for
|
||||
* SCR_EL3.NS bit. Bit 5 of the flag corresponds to
|
||||
* the SCR_EL3.NSE bit.
|
||||
*/
|
||||
lsl x7, x7, #5
|
||||
1:
|
||||
#endif /* ENABLE_RME */
|
||||
|
||||
/* Copy SCR_EL3.NS bit to the flag to indicate caller's security */
|
||||
bfi x7, x18, #0, #1
|
||||
|
||||
mov sp, x12
|
||||
|
||||
/*
|
||||
* Per SMCCC documentation, bits [23:17] must be zero for Fast
|
||||
* SMCs. Other values are reserved for future use. Ensure that
|
||||
* these bits are zeroes, if not report as unknown SMC.
|
||||
*/
|
||||
tbz x0, #FUNCID_TYPE_SHIFT, 2f /* Skip check if its a Yield Call*/
|
||||
tst x0, #(FUNCID_FC_RESERVED_MASK << FUNCID_FC_RESERVED_SHIFT)
|
||||
b.ne smc_unknown
|
||||
|
||||
/*
|
||||
* Per SMCCCv1.3 a caller can set the SVE hint bit in the SMC FID
|
||||
* passed through x0. Copy the SVE hint bit to flags and mask the
|
||||
* bit in smc_fid passed to the standard service dispatcher.
|
||||
* A service/dispatcher can retrieve the SVE hint bit state from
|
||||
* flags using the appropriate helper.
|
||||
*/
|
||||
2:
|
||||
and x16, x0, #(FUNCID_SVE_HINT_MASK << FUNCID_SVE_HINT_SHIFT)
|
||||
orr x7, x7, x16
|
||||
bic x0, x0, #(FUNCID_SVE_HINT_MASK << FUNCID_SVE_HINT_SHIFT)
|
||||
|
||||
/* Get the unique owning entity number */
|
||||
ubfx x16, x0, #FUNCID_OEN_SHIFT, #FUNCID_OEN_WIDTH
|
||||
ubfx x15, x0, #FUNCID_TYPE_SHIFT, #FUNCID_TYPE_WIDTH
|
||||
orr x16, x16, x15, lsl #FUNCID_OEN_WIDTH
|
||||
|
||||
/* Load descriptor index from array of indices */
|
||||
adrp x14, rt_svc_descs_indices
|
||||
add x14, x14, :lo12:rt_svc_descs_indices
|
||||
ldrb w15, [x14, x16]
|
||||
|
||||
/* Any index greater than 127 is invalid. Check bit 7. */
|
||||
tbnz w15, 7, smc_unknown
|
||||
|
||||
/*
|
||||
* Get the descriptor using the index
|
||||
* x11 = (base + off), w15 = index
|
||||
*
|
||||
* handler = (base + off) + (index << log2(size))
|
||||
*/
|
||||
adr_l x11, (__RT_SVC_DESCS_START__ + RT_SVC_DESC_HANDLE)
|
||||
lsl w10, w15, #RT_SVC_SIZE_LOG2
|
||||
ldr x15, [x11, w10, uxtw]
|
||||
|
||||
/*
|
||||
* Call the Secure Monitor Call handler and then drop directly into
|
||||
* el3_exit() which will program any remaining architectural state
|
||||
* prior to issuing the ERET to the desired lower EL.
|
||||
*/
|
||||
#if DEBUG
|
||||
cbz x15, rt_svc_fw_critical_error
|
||||
#endif
|
||||
blr x15
|
||||
|
||||
b el3_exit
|
||||
|
||||
sysreg_handler64:
|
||||
mov x0, x16 /* ESR_EL3, containing syndrome information */
|
||||
mov x1, x6 /* lower EL's context */
|
||||
mov x19, x6 /* save context pointer for after the call */
|
||||
mov sp, x12 /* EL3 runtime stack, as loaded above */
|
||||
|
||||
/* int handle_sysreg_trap(uint64_t esr_el3, cpu_context_t *ctx); */
|
||||
bl handle_sysreg_trap
|
||||
/*
|
||||
* returns:
|
||||
* -1: unhandled trap, UNDEF injection into lower EL
|
||||
* 0: handled trap, return to the trapping instruction (repeating it)
|
||||
* 1: handled trap, return to the next instruction
|
||||
*/
|
||||
|
||||
tst w0, w0
|
||||
b.mi 2f /* negative: undefined exception injection */
|
||||
|
||||
b.eq 1f /* zero: do not change ELR_EL3 */
|
||||
/* positive: advance the PC to continue after the instruction */
|
||||
ldr x1, [x19, #CTX_EL3STATE_OFFSET + CTX_ELR_EL3]
|
||||
add x1, x1, #4
|
||||
str x1, [x19, #CTX_EL3STATE_OFFSET + CTX_ELR_EL3]
|
||||
1:
|
||||
b el3_exit
|
||||
2:
|
||||
/*
|
||||
* UNDEF injection to lower EL, the support is only provided for lower
|
||||
* EL in AArch64 mode, for AArch32 mode it will do elx_panic as before.
|
||||
*/
|
||||
mrs x0, spsr_el3
|
||||
tst x0, #(SPSR_M_MASK << SPSR_M_SHIFT)
|
||||
b.ne elx_panic
|
||||
/* Pass context pointer as an argument to inject_undef64 */
|
||||
mov x0, x19
|
||||
bl inject_undef64
|
||||
b el3_exit
|
||||
|
||||
smc_unknown:
|
||||
/*
|
||||
* Unknown SMC call. Populate return value with SMC_UNK and call
|
||||
* el3_exit() which will restore the remaining architectural state
|
||||
* i.e., SYS, GP and PAuth registers(if any) prior to issuing the ERET
|
||||
* to the desired lower EL.
|
||||
*/
|
||||
mov x0, #SMC_UNK
|
||||
str x0, [x6, #CTX_GPREGS_OFFSET + CTX_GPREG_X0]
|
||||
b el3_exit
|
||||
|
||||
smc_prohibited:
|
||||
restore_ptw_el1_sys_regs
|
||||
ldp x28, x29, [sp, #CTX_GPREGS_OFFSET + CTX_GPREG_X28]
|
||||
ldr x30, [sp, #CTX_GPREGS_OFFSET + CTX_GPREG_LR]
|
||||
mov x0, #SMC_UNK
|
||||
exception_return
|
||||
|
||||
#if DEBUG
|
||||
rt_svc_fw_critical_error:
|
||||
/* Switch to SP_ELx */
|
||||
msr spsel, #MODE_SP_ELX
|
||||
no_ret report_unhandled_exception
|
||||
#endif
|
||||
endfunc sync_exception_handler
|
||||
|
||||
/* ---------------------------------------------------------------------
|
||||
* This function handles FIQ or IRQ interrupts i.e. EL3, S-EL1 and NS
|
||||
* interrupts.
|
||||
*
|
||||
* Note that x30 has been explicitly saved and can be used here
|
||||
* ---------------------------------------------------------------------
|
||||
*/
|
||||
func handle_interrupt_exception
|
||||
/*
|
||||
* Save general purpose and ARMv8.3-PAuth registers (if enabled).
|
||||
* Also save PMCR_EL0 and set the PSTATE to a known state.
|
||||
*/
|
||||
bl prepare_el3_entry
|
||||
|
||||
#if ENABLE_PAUTH
|
||||
/* Load and program APIAKey firmware key */
|
||||
bl pauth_load_bl31_apiakey
|
||||
#endif
|
||||
|
||||
/* Save the EL3 system registers needed to return from this exception */
|
||||
mrs x0, spsr_el3
|
||||
mrs x1, elr_el3
|
||||
stp x0, x1, [sp, #CTX_EL3STATE_OFFSET + CTX_SPSR_EL3]
|
||||
|
||||
/* Switch to the runtime stack i.e. SP_EL0 */
|
||||
ldr x2, [sp, #CTX_EL3STATE_OFFSET + CTX_RUNTIME_SP]
|
||||
mov x20, sp
|
||||
msr spsel, #MODE_SP_EL0
|
||||
mov sp, x2
|
||||
|
||||
/*
|
||||
* Find out whether this is a valid interrupt type.
|
||||
* If the interrupt controller reports a spurious interrupt then return
|
||||
* to where we came from.
|
||||
*/
|
||||
bl plat_ic_get_pending_interrupt_type
|
||||
cmp x0, #INTR_TYPE_INVAL
|
||||
b.eq interrupt_exit
|
||||
|
||||
/*
|
||||
* Get the registered handler for this interrupt type.
|
||||
* A NULL return value could be 'cause of the following conditions:
|
||||
*
|
||||
* a. An interrupt of a type was routed correctly but a handler for its
|
||||
* type was not registered.
|
||||
*
|
||||
* b. An interrupt of a type was not routed correctly so a handler for
|
||||
* its type was not registered.
|
||||
*
|
||||
* c. An interrupt of a type was routed correctly to EL3, but was
|
||||
* deasserted before its pending state could be read. Another
|
||||
* interrupt of a different type pended at the same time and its
|
||||
* type was reported as pending instead. However, a handler for this
|
||||
* type was not registered.
|
||||
*
|
||||
* a. and b. can only happen due to a programming error. The
|
||||
* occurrence of c. could be beyond the control of Trusted Firmware.
|
||||
* It makes sense to return from this exception instead of reporting an
|
||||
* error.
|
||||
*/
|
||||
bl get_interrupt_type_handler
|
||||
cbz x0, interrupt_exit
|
||||
mov x21, x0
|
||||
|
||||
mov x0, #INTR_ID_UNAVAILABLE
|
||||
|
||||
/* Set the current security state in the 'flags' parameter */
|
||||
mrs x2, scr_el3
|
||||
ubfx x1, x2, #0, #1
|
||||
|
||||
/* Restore the reference to the 'handle' i.e. SP_EL3 */
|
||||
mov x2, x20
|
||||
|
||||
/* x3 will point to a cookie (not used now) */
|
||||
mov x3, xzr
|
||||
|
||||
/* Call the interrupt type handler */
|
||||
blr x21
|
||||
|
||||
interrupt_exit:
|
||||
/* Return from exception, possibly in a different security state */
|
||||
b el3_exit
|
||||
endfunc handle_interrupt_exception
|
||||
|
||||
func imp_def_el3_handler
|
||||
/* Save GP registers */
|
||||
stp x0, x1, [sp, #CTX_GPREGS_OFFSET + CTX_GPREG_X0]
|
||||
stp x2, x3, [sp, #CTX_GPREGS_OFFSET + CTX_GPREG_X2]
|
||||
stp x4, x5, [sp, #CTX_GPREGS_OFFSET + CTX_GPREG_X4]
|
||||
|
||||
/* Get the cpu_ops pointer */
|
||||
bl get_cpu_ops_ptr
|
||||
|
||||
/* Get the cpu_ops exception handler */
|
||||
ldr x0, [x0, #CPU_E_HANDLER_FUNC]
|
||||
|
||||
/*
|
||||
* If the reserved function pointer is NULL, this CPU does not have an
|
||||
* implementation defined exception handler function
|
||||
*/
|
||||
cbz x0, el3_handler_exit
|
||||
mrs x1, esr_el3
|
||||
ubfx x1, x1, #ESR_EC_SHIFT, #ESR_EC_LENGTH
|
||||
blr x0
|
||||
el3_handler_exit:
|
||||
ldp x0, x1, [sp, #CTX_GPREGS_OFFSET + CTX_GPREG_X0]
|
||||
ldp x2, x3, [sp, #CTX_GPREGS_OFFSET + CTX_GPREG_X2]
|
||||
ldp x4, x5, [sp, #CTX_GPREGS_OFFSET + CTX_GPREG_X4]
|
||||
restore_x30
|
||||
no_ret report_unhandled_exception
|
||||
endfunc imp_def_el3_handler
|
||||
|
||||
/*
|
||||
* Handler for async EA from lower EL synchronized at EL3 entry in KFH mode.
|
||||
*
|
||||
* This scenario may arise when there is an error (EA) in the system which is not
|
||||
* yet signaled to PE while executing in lower EL. During entry into EL3, the errors
|
||||
* are synchronized either implicitly or explicitly causing async EA to pend at EL3.
|
||||
*
|
||||
* On detecting the pending EA (via ISR_EL1.A) and if the EA routing model is
|
||||
* KFH (SCR_EL3.EA = 1) this handler reflects ther error back to lower EL.
|
||||
*
|
||||
* This function assumes x30 has been saved.
|
||||
*/
|
||||
func reflect_pending_async_ea_to_lower_el
|
||||
/*
|
||||
* As the original exception was not handled we need to ensure that we return
|
||||
* back to the instruction which caused the exception. To acheive that, eret
|
||||
* to "elr-4" (Label "subtract_elr_el3") for SMC or simply eret otherwise
|
||||
* (Label "skip_smc_check").
|
||||
*
|
||||
* LIMITATION: It could be that async EA is masked at the target exception level
|
||||
* or the priority of async EA wrt to the EL3/secure interrupt is lower, which
|
||||
* causes back and forth between lower EL and EL3. In case of back and forth between
|
||||
* lower EL and EL3, we can track the loop count in "CTX_NESTED_EA_FLAG" and leverage
|
||||
* previous ELR in "CTX_SAVED_ELR_EL3" to detect this cycle and further panic
|
||||
* to indicate a problem here (Label "check_loop_ctr"). If we are in this cycle, loop
|
||||
* counter retains its value but if we do a normal el3_exit this flag gets cleared.
|
||||
* However, setting SCR_EL3.IESB = 1, should give priority to SError handling
|
||||
* as per AArch64.TakeException pseudo code in Arm ARM.
|
||||
*
|
||||
* TODO: In future if EL3 gets a capability to inject a virtual SError to lower
|
||||
* ELs, we can remove the el3_panic and handle the original exception first and
|
||||
* inject SError to lower EL before ereting back.
|
||||
*/
|
||||
stp x28, x29, [sp, #CTX_GPREGS_OFFSET + CTX_GPREG_X28]
|
||||
ldr x29, [sp, #CTX_EL3STATE_OFFSET + CTX_SAVED_ELR_EL3]
|
||||
mrs x28, elr_el3
|
||||
cmp x29, x28
|
||||
b.eq check_loop_ctr
|
||||
str x28, [sp, #CTX_EL3STATE_OFFSET + CTX_SAVED_ELR_EL3]
|
||||
/* Zero the loop counter */
|
||||
str xzr, [sp, #CTX_EL3STATE_OFFSET + CTX_NESTED_EA_FLAG]
|
||||
b skip_loop_ctr
|
||||
check_loop_ctr:
|
||||
ldr x29, [sp, #CTX_EL3STATE_OFFSET + CTX_NESTED_EA_FLAG]
|
||||
add x29, x29, #1
|
||||
str x29, [sp, #CTX_EL3STATE_OFFSET + CTX_NESTED_EA_FLAG]
|
||||
cmp x29, #ASYNC_EA_REPLAY_COUNTER
|
||||
b.ge el3_panic
|
||||
skip_loop_ctr:
|
||||
/*
|
||||
* Logic to distinguish if we came from SMC or any other exception.
|
||||
* Use offsets in vector entry to get which exception we are handling.
|
||||
* In each vector entry of size 0x200, address "0x0-0x80" is for sync
|
||||
* exception and "0x80-0x200" is for async exceptions.
|
||||
* Use vector base address (vbar_el3) and exception offset (LR) to
|
||||
* calculate whether the address we came from is any of the following
|
||||
* "0x0-0x80", "0x200-0x280", "0x400-0x480" or "0x600-0x680"
|
||||
*/
|
||||
mrs x29, vbar_el3
|
||||
sub x30, x30, x29
|
||||
and x30, x30, #0x1ff
|
||||
cmp x30, #0x80
|
||||
b.ge skip_smc_check
|
||||
/* Its a synchronous exception, Now check if it is SMC or not? */
|
||||
mrs x30, esr_el3
|
||||
ubfx x30, x30, #ESR_EC_SHIFT, #ESR_EC_LENGTH
|
||||
cmp x30, #EC_AARCH32_SMC
|
||||
b.eq subtract_elr_el3
|
||||
cmp x30, #EC_AARCH64_SMC
|
||||
b.eq subtract_elr_el3
|
||||
b skip_smc_check
|
||||
subtract_elr_el3:
|
||||
sub x28, x28, #4
|
||||
skip_smc_check:
|
||||
msr elr_el3, x28
|
||||
ldp x28, x29, [sp, #CTX_GPREGS_OFFSET + CTX_GPREG_X28]
|
||||
ldr x30, [sp, #CTX_GPREGS_OFFSET + CTX_GPREG_LR]
|
||||
exception_return
|
||||
endfunc reflect_pending_async_ea_to_lower_el
|
||||
|
||||
/* ---------------------------------------------------------------------
|
||||
* The following code handles exceptions caused by BRK instructions.
|
||||
* Following a BRK instruction, the only real valid cause of action is
|
||||
* to print some information and panic, as the code that caused it is
|
||||
* likely in an inconsistent internal state.
|
||||
*
|
||||
* This is initially intended to be used in conjunction with
|
||||
* __builtin_trap.
|
||||
* ---------------------------------------------------------------------
|
||||
*/
|
||||
#ifdef MONITOR_TRAPS
|
||||
func brk_handler
|
||||
/* Extract the ISS */
|
||||
mrs x10, esr_el3
|
||||
ubfx x10, x10, #ESR_ISS_SHIFT, #ESR_ISS_LENGTH
|
||||
|
||||
/* Ensure the console is initialized */
|
||||
bl plat_crash_console_init
|
||||
|
||||
adr x4, brk_location
|
||||
bl asm_print_str
|
||||
mrs x4, elr_el3
|
||||
bl asm_print_hex
|
||||
bl asm_print_newline
|
||||
|
||||
adr x4, brk_message
|
||||
bl asm_print_str
|
||||
mov x4, x10
|
||||
mov x5, #28
|
||||
bl asm_print_hex_bits
|
||||
bl asm_print_newline
|
||||
|
||||
no_ret plat_panic_handler
|
||||
endfunc brk_handler
|
||||
#endif /* MONITOR_TRAPS */
|
||||
253
arm-trusted-firmware.t234/bl31/bl31.ld.S
Normal file
253
arm-trusted-firmware.t234/bl31/bl31.ld.S
Normal file
@@ -0,0 +1,253 @@
|
||||
/*
|
||||
* Copyright (c) 2013-2023, Arm Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <common/bl_common.ld.h>
|
||||
#include <lib/xlat_tables/xlat_tables_defs.h>
|
||||
|
||||
OUTPUT_FORMAT(PLATFORM_LINKER_FORMAT)
|
||||
OUTPUT_ARCH(PLATFORM_LINKER_ARCH)
|
||||
ENTRY(bl31_entrypoint)
|
||||
|
||||
MEMORY {
|
||||
RAM (rwx): ORIGIN = BL31_BASE, LENGTH = BL31_LIMIT - BL31_BASE
|
||||
|
||||
#if SEPARATE_NOBITS_REGION
|
||||
NOBITS (rw!a): ORIGIN = BL31_NOBITS_BASE, LENGTH = BL31_NOBITS_LIMIT - BL31_NOBITS_BASE
|
||||
#else /* SEPARATE_NOBITS_REGION */
|
||||
# define NOBITS RAM
|
||||
#endif /* SEPARATE_NOBITS_REGION */
|
||||
|
||||
#if SEPARATE_RWDATA_REGION
|
||||
RAM_RW (rw): ORIGIN = BL31_RWDATA_BASE, LENGTH = BL31_RWDATA_LIMIT - BL31_RWDATA_BASE
|
||||
#else /* SEPARATE_RWDATA_REGION */
|
||||
#define RAM_RW RAM
|
||||
#endif /* SEPARATE_RWDATA_REGION */
|
||||
}
|
||||
|
||||
#ifdef PLAT_EXTRA_LD_SCRIPT
|
||||
# include <plat.ld.S>
|
||||
#endif /* PLAT_EXTRA_LD_SCRIPT */
|
||||
|
||||
SECTIONS {
|
||||
. = BL31_BASE;
|
||||
|
||||
ASSERT(. == ALIGN(PAGE_SIZE),
|
||||
"BL31_BASE address is not aligned on a page boundary.")
|
||||
|
||||
__BL31_START__ = .;
|
||||
|
||||
#if SEPARATE_CODE_AND_RODATA
|
||||
.text . : {
|
||||
ASSERT(. == ALIGN(PAGE_SIZE),
|
||||
".text is not aligned on a page boundary.");
|
||||
|
||||
__TEXT_START__ = .;
|
||||
|
||||
*bl31_entrypoint.o(.text*)
|
||||
*(SORT_BY_ALIGNMENT(SORT(.text*)))
|
||||
*(.vectors)
|
||||
__TEXT_END_UNALIGNED__ = .;
|
||||
|
||||
. = ALIGN(PAGE_SIZE);
|
||||
|
||||
__TEXT_END__ = .;
|
||||
} >RAM
|
||||
|
||||
.rodata . : {
|
||||
__RODATA_START__ = .;
|
||||
|
||||
*(SORT_BY_ALIGNMENT(.rodata*))
|
||||
|
||||
# if PLAT_EXTRA_RODATA_INCLUDES
|
||||
# include <plat.ld.rodata.inc>
|
||||
# endif /* PLAT_EXTRA_RODATA_INCLUDES */
|
||||
|
||||
RODATA_COMMON
|
||||
|
||||
. = ALIGN(8);
|
||||
|
||||
# include <lib/el3_runtime/pubsub_events.h>
|
||||
__RODATA_END_UNALIGNED__ = .;
|
||||
|
||||
. = ALIGN(PAGE_SIZE);
|
||||
|
||||
__RODATA_END__ = .;
|
||||
} >RAM
|
||||
#else /* SEPARATE_CODE_AND_RODATA */
|
||||
.ro . : {
|
||||
ASSERT(. == ALIGN(PAGE_SIZE),
|
||||
".ro is not aligned on a page boundary.");
|
||||
|
||||
__RO_START__ = .;
|
||||
|
||||
*bl31_entrypoint.o(.text*)
|
||||
*(SORT_BY_ALIGNMENT(.text*))
|
||||
*(SORT_BY_ALIGNMENT(.rodata*))
|
||||
|
||||
RODATA_COMMON
|
||||
|
||||
. = ALIGN(8);
|
||||
|
||||
# include <lib/el3_runtime/pubsub_events.h>
|
||||
|
||||
*(.vectors)
|
||||
|
||||
__RO_END_UNALIGNED__ = .;
|
||||
|
||||
/*
|
||||
* Memory page(s) mapped to this section will be marked as read-only,
|
||||
* executable. No RW data from the next section must creep in. Ensure
|
||||
* that the rest of the current memory page is unused.
|
||||
*/
|
||||
. = ALIGN(PAGE_SIZE);
|
||||
|
||||
__RO_END__ = .;
|
||||
} >RAM
|
||||
#endif /* SEPARATE_CODE_AND_RODATA */
|
||||
|
||||
ASSERT(__CPU_OPS_END__ > __CPU_OPS_START__,
|
||||
"cpu_ops not defined for this platform.")
|
||||
|
||||
#if SPM_MM || (SPMC_AT_EL3 && SPMC_AT_EL3_SEL0_SP)
|
||||
# ifndef SPM_SHIM_EXCEPTIONS_VMA
|
||||
# define SPM_SHIM_EXCEPTIONS_VMA RAM
|
||||
# endif /* SPM_SHIM_EXCEPTIONS_VMA */
|
||||
|
||||
/*
|
||||
* Exception vectors of the SPM shim layer. They must be aligned to a 2K
|
||||
* address but we need to place them in a separate page so that we can set
|
||||
* individual permissions on them, so the actual alignment needed is the
|
||||
* page size.
|
||||
*
|
||||
* There's no need to include this into the RO section of BL31 because it
|
||||
* doesn't need to be accessed by BL31.
|
||||
*/
|
||||
.spm_shim_exceptions : ALIGN(PAGE_SIZE) {
|
||||
__SPM_SHIM_EXCEPTIONS_START__ = .;
|
||||
|
||||
*(.spm_shim_exceptions)
|
||||
|
||||
. = ALIGN(PAGE_SIZE);
|
||||
|
||||
__SPM_SHIM_EXCEPTIONS_END__ = .;
|
||||
} >SPM_SHIM_EXCEPTIONS_VMA AT>RAM
|
||||
|
||||
PROVIDE(__SPM_SHIM_EXCEPTIONS_LMA__ = LOADADDR(.spm_shim_exceptions));
|
||||
|
||||
. = LOADADDR(.spm_shim_exceptions) + SIZEOF(.spm_shim_exceptions);
|
||||
#endif /* SPM_MM || (SPMC_AT_EL3 && SPMC_AT_EL3_SEL0_SP) */
|
||||
|
||||
#if SEPARATE_RWDATA_REGION
|
||||
. = BL31_RWDATA_BASE;
|
||||
ASSERT(BL31_RWDATA_BASE == ALIGN(PAGE_SIZE),
|
||||
"BL31_RWDATA_BASE address is not aligned on a page boundary.")
|
||||
|
||||
/*
|
||||
* Define a linker symbol to mark the start of the RW memory area for this
|
||||
* image.
|
||||
*/
|
||||
__RW_START__ = . ;
|
||||
|
||||
DATA_SECTION >RAM_RW AT>RAM
|
||||
__DATA_RAM_START__ = __DATA_START__;
|
||||
__DATA_RAM_END__ = __DATA_END__;
|
||||
__DATA_ROM_START__ = LOADADDR(.data);
|
||||
|
||||
. = ALIGN(PAGE_SIZE);
|
||||
__RW_END__ = .;
|
||||
|
||||
RELA_SECTION >RAM
|
||||
#else /* SEPARATE_RWDATA_REGION */
|
||||
/*
|
||||
* Define a linker symbol to mark the start of the RW memory area for this
|
||||
* image.
|
||||
*/
|
||||
__RW_START__ = . ;
|
||||
|
||||
DATA_SECTION >RAM
|
||||
RELA_SECTION >RAM
|
||||
#endif /* SEPARATE_RWDATA_REGION */
|
||||
|
||||
#ifdef BL31_PROGBITS_LIMIT
|
||||
ASSERT(
|
||||
. <= BL31_PROGBITS_LIMIT,
|
||||
"BL31 progbits has exceeded its limit. Consider disabling some features."
|
||||
)
|
||||
#endif /* BL31_PROGBITS_LIMIT */
|
||||
|
||||
#if SEPARATE_NOBITS_REGION
|
||||
. = ALIGN(PAGE_SIZE);
|
||||
|
||||
#if !SEPARATE_RWDATA_REGION
|
||||
__RW_END__ = .;
|
||||
#endif /* SEPARATE_RWDATA_REGION */
|
||||
__BL31_END__ = .;
|
||||
|
||||
ASSERT(. <= BL31_LIMIT, "BL31 image has exceeded its limit.")
|
||||
|
||||
. = BL31_NOBITS_BASE;
|
||||
|
||||
ASSERT(. == ALIGN(PAGE_SIZE),
|
||||
"BL31 NOBITS base address is not aligned on a page boundary.")
|
||||
|
||||
__NOBITS_START__ = .;
|
||||
#endif /* SEPARATE_NOBITS_REGION */
|
||||
|
||||
STACK_SECTION >NOBITS
|
||||
BSS_SECTION >NOBITS
|
||||
XLAT_TABLE_SECTION >NOBITS
|
||||
|
||||
#if USE_COHERENT_MEM
|
||||
/*
|
||||
* The base address of the coherent memory section must be page-aligned to
|
||||
* guarantee that the coherent data are stored on their own pages and are
|
||||
* not mixed with normal data. This is required to set up the correct
|
||||
* memory attributes for the coherent data page tables.
|
||||
*/
|
||||
.coherent_ram (NOLOAD) : ALIGN(PAGE_SIZE) {
|
||||
__COHERENT_RAM_START__ = .;
|
||||
|
||||
/*
|
||||
* Bakery locks are stored in coherent memory. Each lock's data is
|
||||
* contiguous and fully allocated by the compiler.
|
||||
*/
|
||||
*(.bakery_lock)
|
||||
*(.tzfw_coherent_mem)
|
||||
|
||||
__COHERENT_RAM_END_UNALIGNED__ = .;
|
||||
|
||||
/*
|
||||
* Memory page(s) mapped to this section will be marked as device
|
||||
* memory. No other unexpected data must creep in. Ensure the rest of
|
||||
* the current memory page is unused.
|
||||
*/
|
||||
. = ALIGN(PAGE_SIZE);
|
||||
|
||||
__COHERENT_RAM_END__ = .;
|
||||
} >NOBITS
|
||||
#endif /* USE_COHERENT_MEM */
|
||||
|
||||
#if SEPARATE_NOBITS_REGION
|
||||
__NOBITS_END__ = .;
|
||||
|
||||
ASSERT(. <= BL31_NOBITS_LIMIT, "BL31 NOBITS region has exceeded its limit.")
|
||||
#else /* SEPARATE_NOBITS_REGION */
|
||||
/*
|
||||
* Define a linker symbol to mark the end of the RW memory area for this
|
||||
* image.
|
||||
*/
|
||||
#if !SEPARATE_RWDATA_REGION
|
||||
__RW_END__ = .;
|
||||
#endif /* SEPARATE_RWDATA_REGION */
|
||||
__BL31_END__ = .;
|
||||
|
||||
ASSERT(. <= BL31_LIMIT, "BL31 image has exceeded its limit.")
|
||||
#endif /* SEPARATE_NOBITS_REGION */
|
||||
|
||||
/DISCARD/ : {
|
||||
*(.dynsym .dynstr .hash .gnu.hash)
|
||||
}
|
||||
}
|
||||
216
arm-trusted-firmware.t234/bl31/bl31.mk
Normal file
216
arm-trusted-firmware.t234/bl31/bl31.mk
Normal file
@@ -0,0 +1,216 @@
|
||||
#
|
||||
# Copyright (c) 2013-2024, Arm Limited and Contributors. All rights reserved.
|
||||
#
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
#
|
||||
|
||||
################################################################################
|
||||
# Include Makefile for the SPM-MM implementation
|
||||
################################################################################
|
||||
ifeq (${SUPPORT_UNKNOWN_MPID},1)
|
||||
ifeq (${DEBUG},0)
|
||||
$(warning WARNING: SUPPORT_UNKNOWN_MPID enabled)
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq (${SPM_MM},1)
|
||||
ifeq (${EL3_EXCEPTION_HANDLING},0)
|
||||
$(error EL3_EXCEPTION_HANDLING must be 1 for SPM-MM support)
|
||||
else
|
||||
$(info Including SPM Management Mode (MM) makefile)
|
||||
include services/std_svc/spm/common/spm.mk
|
||||
include services/std_svc/spm/spm_mm/spm_mm.mk
|
||||
endif
|
||||
endif
|
||||
|
||||
include lib/extensions/amu/amu.mk
|
||||
include lib/mpmm/mpmm.mk
|
||||
|
||||
ifeq (${SPMC_AT_EL3},1)
|
||||
$(info Including EL3 SPMC makefile)
|
||||
include services/std_svc/spm/common/spm.mk
|
||||
include services/std_svc/spm/el3_spmc/spmc.mk
|
||||
endif
|
||||
|
||||
include lib/psci/psci_lib.mk
|
||||
|
||||
BL31_SOURCES += bl31/bl31_main.c \
|
||||
bl31/interrupt_mgmt.c \
|
||||
bl31/aarch64/bl31_entrypoint.S \
|
||||
bl31/aarch64/crash_reporting.S \
|
||||
bl31/aarch64/runtime_exceptions.S \
|
||||
bl31/bl31_context_mgmt.c \
|
||||
bl31/bl31_traps.c \
|
||||
common/runtime_svc.c \
|
||||
lib/cpus/errata_common.c \
|
||||
lib/cpus/aarch64/dsu_helpers.S \
|
||||
plat/common/aarch64/platform_mp_stack.S \
|
||||
services/arm_arch_svc/arm_arch_svc_setup.c \
|
||||
services/std_svc/std_svc_setup.c \
|
||||
lib/el3_runtime/simd_ctx.c \
|
||||
${PSCI_LIB_SOURCES} \
|
||||
${SPMD_SOURCES} \
|
||||
${SPM_MM_SOURCES} \
|
||||
${SPMC_SOURCES} \
|
||||
${SPM_SOURCES}
|
||||
|
||||
VENDOR_EL3_SRCS += services/el3/ven_el3_svc.c
|
||||
|
||||
ifeq (${ENABLE_PMF}, 1)
|
||||
BL31_SOURCES += lib/pmf/pmf_main.c \
|
||||
${VENDOR_EL3_SRCS}
|
||||
endif
|
||||
|
||||
include lib/debugfs/debugfs.mk
|
||||
ifeq (${USE_DEBUGFS},1)
|
||||
BL31_SOURCES += ${DEBUGFS_SRCS} \
|
||||
${VENDOR_EL3_SRCS}
|
||||
endif
|
||||
|
||||
ifeq (${PLATFORM_REPORT_CTX_MEM_USE},1)
|
||||
BL31_SOURCES += lib/el3_runtime/aarch64/context_debug.c
|
||||
endif
|
||||
|
||||
ifeq (${EL3_EXCEPTION_HANDLING},1)
|
||||
BL31_SOURCES += bl31/ehf.c
|
||||
endif
|
||||
|
||||
ifeq (${FFH_SUPPORT},1)
|
||||
BL31_SOURCES += bl31/aarch64/ea_delegate.S
|
||||
endif
|
||||
|
||||
ifeq (${SDEI_SUPPORT},1)
|
||||
ifeq (${EL3_EXCEPTION_HANDLING},0)
|
||||
$(error EL3_EXCEPTION_HANDLING must be 1 for SDEI support)
|
||||
endif
|
||||
BL31_SOURCES += services/std_svc/sdei/sdei_dispatch.S \
|
||||
services/std_svc/sdei/sdei_event.c \
|
||||
services/std_svc/sdei/sdei_intr_mgmt.c \
|
||||
services/std_svc/sdei/sdei_main.c \
|
||||
services/std_svc/sdei/sdei_state.c
|
||||
endif
|
||||
|
||||
ifeq (${TRNG_SUPPORT},1)
|
||||
BL31_SOURCES += services/std_svc/trng/trng_main.c \
|
||||
services/std_svc/trng/trng_entropy_pool.c
|
||||
endif
|
||||
|
||||
ifneq (${ENABLE_SPE_FOR_NS},0)
|
||||
BL31_SOURCES += lib/extensions/spe/spe.c
|
||||
endif
|
||||
|
||||
ifeq (${ERRATA_ABI_SUPPORT},1)
|
||||
BL31_SOURCES += services/std_svc/errata_abi/errata_abi_main.c
|
||||
endif
|
||||
|
||||
ifneq (${ENABLE_FEAT_AMU},0)
|
||||
BL31_SOURCES += ${AMU_SOURCES}
|
||||
endif
|
||||
|
||||
ifneq (${ENABLE_FEAT_FGT2},0)
|
||||
BL31_SOURCES += lib/extensions/fgt/fgt2.c
|
||||
endif
|
||||
|
||||
ifneq (${ENABLE_FEAT_TCR2},0)
|
||||
BL31_SOURCES += lib/extensions/tcr/tcr2.c
|
||||
endif
|
||||
|
||||
ifeq (${ENABLE_MPMM},1)
|
||||
BL31_SOURCES += ${MPMM_SOURCES}
|
||||
endif
|
||||
|
||||
ifneq (${ENABLE_SME_FOR_NS},0)
|
||||
BL31_SOURCES += lib/extensions/sme/sme.c
|
||||
endif
|
||||
ifneq (${ENABLE_SVE_FOR_NS},0)
|
||||
BL31_SOURCES += lib/extensions/sve/sve.c
|
||||
endif
|
||||
|
||||
ifneq (${ENABLE_FEAT_MPAM},0)
|
||||
BL31_SOURCES += lib/extensions/mpam/mpam.c
|
||||
endif
|
||||
|
||||
ifneq (${ENABLE_FEAT_DEBUGV8P9},0)
|
||||
BL31_SOURCES += lib/extensions/debug/debugv8p9.c
|
||||
endif
|
||||
|
||||
ifneq (${ENABLE_TRBE_FOR_NS},0)
|
||||
BL31_SOURCES += lib/extensions/trbe/trbe.c
|
||||
endif
|
||||
|
||||
ifneq (${ENABLE_BRBE_FOR_NS},0)
|
||||
BL31_SOURCES += lib/extensions/brbe/brbe.c
|
||||
endif
|
||||
|
||||
ifneq (${ENABLE_SYS_REG_TRACE_FOR_NS},0)
|
||||
BL31_SOURCES += lib/extensions/sys_reg_trace/aarch64/sys_reg_trace.c
|
||||
endif
|
||||
|
||||
ifneq (${ENABLE_TRF_FOR_NS},0)
|
||||
BL31_SOURCES += lib/extensions/trf/aarch64/trf.c
|
||||
endif
|
||||
|
||||
ifneq (${ENABLE_FEAT_FPMR},0)
|
||||
BL31_SOURCES += lib/extensions/fpmr/fpmr.c
|
||||
endif
|
||||
|
||||
ifeq (${WORKAROUND_CVE_2017_5715},1)
|
||||
BL31_SOURCES += lib/cpus/aarch64/wa_cve_2017_5715_bpiall.S \
|
||||
lib/cpus/aarch64/wa_cve_2017_5715_mmu.S
|
||||
endif
|
||||
|
||||
ifeq ($(SMC_PCI_SUPPORT),1)
|
||||
BL31_SOURCES += services/std_svc/pci_svc.c
|
||||
endif
|
||||
|
||||
ifeq (${ENABLE_RME},1)
|
||||
include lib/gpt_rme/gpt_rme.mk
|
||||
|
||||
BL31_SOURCES += ${GPT_LIB_SRCS} \
|
||||
${RMMD_SOURCES}
|
||||
endif
|
||||
|
||||
ifeq ($(FEATURE_DETECTION),1)
|
||||
BL31_SOURCES += common/feat_detect.c
|
||||
endif
|
||||
|
||||
ifeq (${DRTM_SUPPORT},1)
|
||||
BL31_SOURCES += services/std_svc/drtm/drtm_main.c \
|
||||
services/std_svc/drtm/drtm_dma_prot.c \
|
||||
services/std_svc/drtm/drtm_res_address_map.c \
|
||||
services/std_svc/drtm/drtm_measurements.c \
|
||||
services/std_svc/drtm/drtm_remediation.c \
|
||||
${MBEDTLS_SOURCES}
|
||||
endif
|
||||
|
||||
ifeq ($(CROS_WIDEVINE_SMC),1)
|
||||
BL31_SOURCES += services/oem/chromeos/widevine_smc_handlers.c
|
||||
endif
|
||||
|
||||
BL31_DEFAULT_LINKER_SCRIPT_SOURCE := bl31/bl31.ld.S
|
||||
|
||||
ifeq ($($(ARCH)-ld-id),gnu-gcc)
|
||||
BL31_LDFLAGS += -Wl,--sort-section=alignment
|
||||
else ifneq ($(filter llvm-lld gnu-ld,$($(ARCH)-ld-id)),)
|
||||
BL31_LDFLAGS += --sort-section=alignment
|
||||
endif
|
||||
|
||||
# Flag used to indicate if Crash reporting via console should be included
|
||||
# in BL31. This defaults to being present in DEBUG builds only
|
||||
ifndef CRASH_REPORTING
|
||||
CRASH_REPORTING := $(DEBUG)
|
||||
endif
|
||||
|
||||
$(eval $(call assert_booleans,\
|
||||
$(sort \
|
||||
CRASH_REPORTING \
|
||||
EL3_EXCEPTION_HANDLING \
|
||||
SDEI_SUPPORT \
|
||||
)))
|
||||
|
||||
$(eval $(call add_defines,\
|
||||
$(sort \
|
||||
CRASH_REPORTING \
|
||||
EL3_EXCEPTION_HANDLING \
|
||||
SDEI_SUPPORT \
|
||||
)))
|
||||
66
arm-trusted-firmware.t234/bl31/bl31_context_mgmt.c
Normal file
66
arm-trusted-firmware.t234/bl31/bl31_context_mgmt.c
Normal file
@@ -0,0 +1,66 @@
|
||||
/*
|
||||
* Copyright (c) 2013-2021, Arm Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
#include <bl31/bl31.h>
|
||||
#include <common/bl_common.h>
|
||||
#include <context.h>
|
||||
#include <lib/el3_runtime/context_mgmt.h>
|
||||
#include <lib/el3_runtime/cpu_data.h>
|
||||
|
||||
/*******************************************************************************
|
||||
* This function returns a pointer to the most recent 'cpu_context' structure
|
||||
* for the calling CPU that was set as the context for the specified security
|
||||
* state. NULL is returned if no such structure has been specified.
|
||||
******************************************************************************/
|
||||
void *cm_get_context(uint32_t security_state)
|
||||
{
|
||||
assert(sec_state_is_valid(security_state));
|
||||
|
||||
return get_cpu_data(cpu_context[get_cpu_context_index(security_state)]);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* This function sets the pointer to the current 'cpu_context' structure for the
|
||||
* specified security state for the calling CPU
|
||||
******************************************************************************/
|
||||
void cm_set_context(void *context, uint32_t security_state)
|
||||
{
|
||||
assert(sec_state_is_valid(security_state));
|
||||
|
||||
set_cpu_data(cpu_context[get_cpu_context_index(security_state)],
|
||||
context);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* This function returns a pointer to the most recent 'cpu_context' structure
|
||||
* for the CPU identified by `cpu_idx` that was set as the context for the
|
||||
* specified security state. NULL is returned if no such structure has been
|
||||
* specified.
|
||||
******************************************************************************/
|
||||
void *cm_get_context_by_index(unsigned int cpu_idx,
|
||||
unsigned int security_state)
|
||||
{
|
||||
assert(sec_state_is_valid(security_state));
|
||||
|
||||
return get_cpu_data_by_index(cpu_idx,
|
||||
cpu_context[get_cpu_context_index(security_state)]);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* This function sets the pointer to the current 'cpu_context' structure for the
|
||||
* specified security state for the CPU identified by CPU index.
|
||||
******************************************************************************/
|
||||
void cm_set_context_by_index(unsigned int cpu_idx, void *context,
|
||||
unsigned int security_state)
|
||||
{
|
||||
assert(sec_state_is_valid(security_state));
|
||||
|
||||
set_cpu_data_by_index(cpu_idx,
|
||||
cpu_context[get_cpu_context_index(security_state)],
|
||||
context);
|
||||
}
|
||||
315
arm-trusted-firmware.t234/bl31/bl31_main.c
Normal file
315
arm-trusted-firmware.t234/bl31/bl31_main.c
Normal file
@@ -0,0 +1,315 @@
|
||||
/*
|
||||
* Copyright (c) 2013-2024, Arm Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <assert.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <arch.h>
|
||||
#include <arch_features.h>
|
||||
#include <arch_helpers.h>
|
||||
#include <bl31/bl31.h>
|
||||
#include <bl31/ehf.h>
|
||||
#include <common/bl_common.h>
|
||||
#include <common/build_message.h>
|
||||
#include <common/debug.h>
|
||||
#include <common/feat_detect.h>
|
||||
#include <common/runtime_svc.h>
|
||||
#include <drivers/console.h>
|
||||
#include <lib/bootmarker_capture.h>
|
||||
#include <lib/el3_runtime/context_debug.h>
|
||||
#include <lib/el3_runtime/context_mgmt.h>
|
||||
#include <lib/pmf/pmf.h>
|
||||
#include <lib/runtime_instr.h>
|
||||
#include <plat/common/platform.h>
|
||||
#include <services/std_svc.h>
|
||||
|
||||
#if ENABLE_RUNTIME_INSTRUMENTATION
|
||||
PMF_REGISTER_SERVICE_SMC(rt_instr_svc, PMF_RT_INSTR_SVC_ID,
|
||||
RT_INSTR_TOTAL_IDS, PMF_STORE_ENABLE)
|
||||
#endif
|
||||
|
||||
#if ENABLE_RUNTIME_INSTRUMENTATION
|
||||
PMF_REGISTER_SERVICE(bl_svc, PMF_RT_INSTR_SVC_ID,
|
||||
BL_TOTAL_IDS, PMF_DUMP_ENABLE)
|
||||
#endif
|
||||
|
||||
/*******************************************************************************
|
||||
* This function pointer is used to initialise the BL32 image. It's initialized
|
||||
* by SPD calling bl31_register_bl32_init after setting up all things necessary
|
||||
* for SP execution. In cases where both SPD and SP are absent, or when SPD
|
||||
* finds it impossible to execute SP, this pointer is left as NULL
|
||||
******************************************************************************/
|
||||
static int32_t (*bl32_init)(void);
|
||||
|
||||
/*****************************************************************************
|
||||
* Function used to initialise RMM if RME is enabled
|
||||
*****************************************************************************/
|
||||
#if ENABLE_RME
|
||||
static int32_t (*rmm_init)(void);
|
||||
#endif
|
||||
|
||||
/*******************************************************************************
|
||||
* Variable to indicate whether next image to execute after BL31 is BL33
|
||||
* (non-secure & default) or BL32 (secure).
|
||||
******************************************************************************/
|
||||
static uint32_t next_image_type = NON_SECURE;
|
||||
|
||||
#ifdef SUPPORT_UNKNOWN_MPID
|
||||
/*
|
||||
* Flag to know whether an unsupported MPID has been detected. To avoid having it
|
||||
* landing on the .bss section, it is initialized to a non-zero value, this way
|
||||
* we avoid potential WAW hazards during system bring up.
|
||||
* */
|
||||
volatile uint32_t unsupported_mpid_flag = 1;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Implement the ARM Standard Service function to get arguments for a
|
||||
* particular service.
|
||||
*/
|
||||
uintptr_t get_arm_std_svc_args(unsigned int svc_mask)
|
||||
{
|
||||
/* Setup the arguments for PSCI Library */
|
||||
DEFINE_STATIC_PSCI_LIB_ARGS_V1(psci_args, bl31_warm_entrypoint);
|
||||
|
||||
/* PSCI is the only ARM Standard Service implemented */
|
||||
assert(svc_mask == PSCI_FID_MASK);
|
||||
|
||||
return (uintptr_t)&psci_args;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Simple function to initialise all BL31 helper libraries.
|
||||
******************************************************************************/
|
||||
static void __init bl31_lib_init(void)
|
||||
{
|
||||
cm_init();
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Setup function for BL31.
|
||||
******************************************************************************/
|
||||
void bl31_setup(u_register_t arg0, u_register_t arg1, u_register_t arg2,
|
||||
u_register_t arg3)
|
||||
{
|
||||
/* Enable early console if EARLY_CONSOLE flag is enabled */
|
||||
plat_setup_early_console();
|
||||
|
||||
/* Perform early platform-specific setup */
|
||||
bl31_early_platform_setup2(arg0, arg1, arg2, arg3);
|
||||
|
||||
/* Perform late platform-specific setup */
|
||||
bl31_plat_arch_setup();
|
||||
|
||||
#if CTX_INCLUDE_PAUTH_REGS
|
||||
/*
|
||||
* Assert that the ARMv8.3-PAuth registers are present or an access
|
||||
* fault will be triggered when they are being saved or restored.
|
||||
*/
|
||||
assert(is_armv8_3_pauth_present());
|
||||
#endif /* CTX_INCLUDE_PAUTH_REGS */
|
||||
|
||||
/* Prints context_memory allocated for all the security states */
|
||||
report_ctx_memory_usage();
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* BL31 is responsible for setting up the runtime services for the primary cpu
|
||||
* before passing control to the bootloader or an Operating System. This
|
||||
* function calls runtime_svc_init() which initializes all registered runtime
|
||||
* services. The run time services would setup enough context for the core to
|
||||
* switch to the next exception level. When this function returns, the core will
|
||||
* switch to the programmed exception level via an ERET.
|
||||
******************************************************************************/
|
||||
void bl31_main(void)
|
||||
{
|
||||
/* Init registers that never change for the lifetime of TF-A */
|
||||
cm_manage_extensions_el3();
|
||||
|
||||
/* Init per-world context registers for non-secure world */
|
||||
manage_extensions_nonsecure_per_world();
|
||||
|
||||
NOTICE("BL31: %s\n", build_version_string);
|
||||
NOTICE("BL31: %s\n", build_message);
|
||||
|
||||
#if FEATURE_DETECTION
|
||||
/* Detect if features enabled during compilation are supported by PE. */
|
||||
detect_arch_features();
|
||||
#endif /* FEATURE_DETECTION */
|
||||
|
||||
#if ENABLE_RUNTIME_INSTRUMENTATION
|
||||
PMF_CAPTURE_TIMESTAMP(bl_svc, BL31_ENTRY, PMF_CACHE_MAINT);
|
||||
#endif
|
||||
|
||||
#ifdef SUPPORT_UNKNOWN_MPID
|
||||
if (unsupported_mpid_flag == 0) {
|
||||
NOTICE("Unsupported MPID detected!\n");
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Perform platform setup in BL31 */
|
||||
bl31_platform_setup();
|
||||
|
||||
/* Initialise helper libraries */
|
||||
bl31_lib_init();
|
||||
|
||||
#if EL3_EXCEPTION_HANDLING
|
||||
INFO("BL31: Initialising Exception Handling Framework\n");
|
||||
ehf_init();
|
||||
#endif
|
||||
|
||||
/* Initialize the runtime services e.g. psci. */
|
||||
INFO("BL31: Initializing runtime services\n");
|
||||
runtime_svc_init();
|
||||
|
||||
/*
|
||||
* All the cold boot actions on the primary cpu are done. We now need to
|
||||
* decide which is the next image and how to execute it.
|
||||
* If the SPD runtime service is present, it would want to pass control
|
||||
* to BL32 first in S-EL1. In that case, SPD would have registered a
|
||||
* function to initialize bl32 where it takes responsibility of entering
|
||||
* S-EL1 and returning control back to bl31_main. Similarly, if RME is
|
||||
* enabled and a function is registered to initialize RMM, control is
|
||||
* transferred to RMM in R-EL2. After RMM initialization, control is
|
||||
* returned back to bl31_main. Once this is done we can prepare entry
|
||||
* into BL33 as normal.
|
||||
*/
|
||||
|
||||
/*
|
||||
* If SPD had registered an init hook, invoke it.
|
||||
*/
|
||||
if (bl32_init != NULL) {
|
||||
INFO("BL31: Initializing BL32\n");
|
||||
|
||||
console_flush();
|
||||
int32_t rc = (*bl32_init)();
|
||||
|
||||
if (rc == 0) {
|
||||
WARN("BL31: BL32 initialization failed\n");
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* If RME is enabled and init hook is registered, initialize RMM
|
||||
* in R-EL2.
|
||||
*/
|
||||
#if ENABLE_RME
|
||||
if (rmm_init != NULL) {
|
||||
INFO("BL31: Initializing RMM\n");
|
||||
|
||||
console_flush();
|
||||
int32_t rc = (*rmm_init)();
|
||||
|
||||
if (rc == 0) {
|
||||
WARN("BL31: RMM initialization failed\n");
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* We are ready to enter the next EL. Prepare entry into the image
|
||||
* corresponding to the desired security state after the next ERET.
|
||||
*/
|
||||
bl31_prepare_next_image_entry();
|
||||
|
||||
/*
|
||||
* Perform any platform specific runtime setup prior to cold boot exit
|
||||
* from BL31
|
||||
*/
|
||||
bl31_plat_runtime_setup();
|
||||
|
||||
#if ENABLE_RUNTIME_INSTRUMENTATION
|
||||
console_flush();
|
||||
PMF_CAPTURE_TIMESTAMP(bl_svc, BL31_EXIT, PMF_CACHE_MAINT);
|
||||
#endif
|
||||
|
||||
console_flush();
|
||||
console_switch_state(CONSOLE_FLAG_RUNTIME);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Accessor functions to help runtime services decide which image should be
|
||||
* executed after BL31. This is BL33 or the non-secure bootloader image by
|
||||
* default but the Secure payload dispatcher could override this by requesting
|
||||
* an entry into BL32 (Secure payload) first. If it does so then it should use
|
||||
* the same API to program an entry into BL33 once BL32 initialisation is
|
||||
* complete.
|
||||
******************************************************************************/
|
||||
void bl31_set_next_image_type(uint32_t security_state)
|
||||
{
|
||||
assert(sec_state_is_valid(security_state));
|
||||
next_image_type = security_state;
|
||||
}
|
||||
|
||||
uint32_t bl31_get_next_image_type(void)
|
||||
{
|
||||
return next_image_type;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* This function programs EL3 registers and performs other setup to enable entry
|
||||
* into the next image after BL31 at the next ERET.
|
||||
******************************************************************************/
|
||||
void __init bl31_prepare_next_image_entry(void)
|
||||
{
|
||||
entry_point_info_t *next_image_info;
|
||||
uint32_t image_type;
|
||||
|
||||
#if CTX_INCLUDE_AARCH32_REGS
|
||||
/*
|
||||
* Ensure that the build flag to save AArch32 system registers in CPU
|
||||
* context is not set for AArch64-only platforms.
|
||||
*/
|
||||
if (el_implemented(1) == EL_IMPL_A64ONLY) {
|
||||
ERROR("EL1 supports AArch64-only. Please set build flag "
|
||||
"CTX_INCLUDE_AARCH32_REGS = 0\n");
|
||||
panic();
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Determine which image to execute next */
|
||||
image_type = bl31_get_next_image_type();
|
||||
|
||||
/* Program EL3 registers to enable entry into the next EL */
|
||||
next_image_info = bl31_plat_get_next_image_ep_info(image_type);
|
||||
assert(next_image_info != NULL);
|
||||
assert(image_type == GET_SECURITY_STATE(next_image_info->h.attr));
|
||||
|
||||
INFO("BL31: Preparing for EL3 exit to %s world\n",
|
||||
(image_type == SECURE) ? "secure" : "normal");
|
||||
print_entry_point_info(next_image_info);
|
||||
cm_init_my_context(next_image_info);
|
||||
|
||||
/*
|
||||
* If we are entering the Non-secure world, use
|
||||
* 'cm_prepare_el3_exit_ns' to exit.
|
||||
*/
|
||||
if (image_type == NON_SECURE) {
|
||||
cm_prepare_el3_exit_ns();
|
||||
} else {
|
||||
cm_prepare_el3_exit(image_type);
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* This function initializes the pointer to BL32 init function. This is expected
|
||||
* to be called by the SPD after it finishes all its initialization
|
||||
******************************************************************************/
|
||||
void bl31_register_bl32_init(int32_t (*func)(void))
|
||||
{
|
||||
bl32_init = func;
|
||||
}
|
||||
|
||||
#if ENABLE_RME
|
||||
/*******************************************************************************
|
||||
* This function initializes the pointer to RMM init function. This is expected
|
||||
* to be called by the RMMD after it finishes all its initialization
|
||||
******************************************************************************/
|
||||
void bl31_register_rmm_init(int32_t (*func)(void))
|
||||
{
|
||||
rmm_init = func;
|
||||
}
|
||||
#endif
|
||||
243
arm-trusted-firmware.t234/bl31/bl31_traps.c
Normal file
243
arm-trusted-firmware.t234/bl31/bl31_traps.c
Normal file
@@ -0,0 +1,243 @@
|
||||
/*
|
||||
* Copyright (c) 2022-2024, Arm Limited. All rights reserved.
|
||||
* Copyright (c) 2023, NVIDIA Corporation. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*
|
||||
* Dispatch synchronous system register traps from lower ELs.
|
||||
*/
|
||||
|
||||
#include <arch_features.h>
|
||||
#include <arch_helpers.h>
|
||||
#include <bl31/sync_handle.h>
|
||||
#include <context.h>
|
||||
#include <lib/el3_runtime/context_mgmt.h>
|
||||
|
||||
int handle_sysreg_trap(uint64_t esr_el3, cpu_context_t *ctx)
|
||||
{
|
||||
uint64_t __unused opcode = esr_el3 & ISS_SYSREG_OPCODE_MASK;
|
||||
|
||||
#if ENABLE_FEAT_RNG_TRAP
|
||||
if ((opcode == ISS_SYSREG_OPCODE_RNDR) || (opcode == ISS_SYSREG_OPCODE_RNDRRS)) {
|
||||
return plat_handle_rng_trap(esr_el3, ctx);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if IMPDEF_SYSREG_TRAP
|
||||
if ((opcode & ISS_SYSREG_OPCODE_IMPDEF) == ISS_SYSREG_OPCODE_IMPDEF) {
|
||||
return plat_handle_impdef_trap(esr_el3, ctx);
|
||||
}
|
||||
#endif
|
||||
|
||||
return TRAP_RET_UNHANDLED;
|
||||
}
|
||||
|
||||
static bool is_tge_enabled(void)
|
||||
{
|
||||
u_register_t hcr_el2 = read_hcr_el2();
|
||||
|
||||
return ((is_feat_vhe_present()) && ((hcr_el2 & HCR_TGE_BIT) != 0U));
|
||||
}
|
||||
|
||||
/*
|
||||
* This function is to ensure that undef injection does not happen into
|
||||
* non-existent S-EL2. This could happen when trap happens from S-EL{1,0}
|
||||
* and non-secure world is running with TGE bit set, considering EL3 does
|
||||
* not save/restore EL2 registers if only one world has EL2 enabled.
|
||||
* So reading hcr_el2.TGE would give NS world value.
|
||||
*/
|
||||
static bool is_secure_trap_without_sel2(u_register_t scr)
|
||||
{
|
||||
return ((scr & (SCR_NS_BIT | SCR_EEL2_BIT)) == 0);
|
||||
}
|
||||
|
||||
static unsigned int target_el(unsigned int from_el, u_register_t scr)
|
||||
{
|
||||
if (from_el > MODE_EL1) {
|
||||
return from_el;
|
||||
} else if (is_tge_enabled() && !is_secure_trap_without_sel2(scr)) {
|
||||
return MODE_EL2;
|
||||
} else {
|
||||
return MODE_EL1;
|
||||
}
|
||||
}
|
||||
|
||||
static u_register_t get_elr_el3(u_register_t spsr_el3, u_register_t vbar, unsigned int target_el)
|
||||
{
|
||||
unsigned int outgoing_el = GET_EL(spsr_el3);
|
||||
u_register_t elr_el3 = 0;
|
||||
|
||||
if (outgoing_el == target_el) {
|
||||
/*
|
||||
* Target EL is either EL1 or EL2, lsb can tell us the SPsel
|
||||
* Thread mode : 0
|
||||
* Handler mode : 1
|
||||
*/
|
||||
if ((spsr_el3 & (MODE_SP_MASK << MODE_SP_SHIFT)) == MODE_SP_ELX) {
|
||||
elr_el3 = vbar + CURRENT_EL_SPX;
|
||||
} else {
|
||||
elr_el3 = vbar + CURRENT_EL_SP0;
|
||||
}
|
||||
} else {
|
||||
/* Vector address for Lower EL using Aarch64 */
|
||||
elr_el3 = vbar + LOWER_EL_AARCH64;
|
||||
}
|
||||
|
||||
return elr_el3;
|
||||
}
|
||||
|
||||
/*
|
||||
* Explicitly create all bits of SPSR to get PSTATE at exception return.
|
||||
*
|
||||
* The code is based on "Aarch64.exceptions.takeexception" described in
|
||||
* DDI0602 revision 2023-06.
|
||||
* "https://developer.arm.com/documentation/ddi0602/2023-06/Shared-Pseudocode/
|
||||
* aarch64-exceptions-takeexception"
|
||||
*
|
||||
* NOTE: This piece of code must be reviewed every release to ensure that
|
||||
* we keep up with new ARCH features which introduces a new SPSR bit.
|
||||
*
|
||||
* TF-A 2.12 release review
|
||||
* The latest version available is 2024-09, which has two extra features which
|
||||
* impacts generation of SPSR, since these features are not implemented in TF-A
|
||||
* at the time of release, just log the feature names here to be taken up when
|
||||
* feature support is introduced.
|
||||
* - FEAT_PAuth_LR (2023 extension)
|
||||
* - FEAT_UINJ (2024 extension)
|
||||
*/
|
||||
u_register_t create_spsr(u_register_t old_spsr, unsigned int target_el)
|
||||
{
|
||||
u_register_t new_spsr = 0;
|
||||
u_register_t sctlr;
|
||||
|
||||
/* Set M bits for target EL in AArch64 mode, also get sctlr */
|
||||
if (target_el == MODE_EL2) {
|
||||
sctlr = read_sctlr_el2();
|
||||
new_spsr |= (SPSR_M_AARCH64 << SPSR_M_SHIFT) | SPSR_M_EL2H;
|
||||
} else {
|
||||
sctlr = read_sctlr_el1();
|
||||
new_spsr |= (SPSR_M_AARCH64 << SPSR_M_SHIFT) | SPSR_M_EL1H;
|
||||
}
|
||||
|
||||
/* Mask all exceptions, update DAIF bits */
|
||||
new_spsr |= SPSR_DAIF_MASK << SPSR_DAIF_SHIFT;
|
||||
|
||||
/* If FEAT_BTI is present, clear BTYPE bits */
|
||||
new_spsr |= old_spsr & (SPSR_BTYPE_MASK_AARCH64 << SPSR_BTYPE_SHIFT_AARCH64);
|
||||
if (is_feat_bti_present()) {
|
||||
new_spsr &= ~(SPSR_BTYPE_MASK_AARCH64 << SPSR_BTYPE_SHIFT_AARCH64);
|
||||
}
|
||||
|
||||
/* If SSBS is implemented, take the value from SCTLR.DSSBS */
|
||||
new_spsr |= old_spsr & SPSR_SSBS_BIT_AARCH64;
|
||||
if (is_feat_ssbs_present()) {
|
||||
if ((sctlr & SCTLR_DSSBS_BIT) != 0U) {
|
||||
new_spsr |= SPSR_SSBS_BIT_AARCH64;
|
||||
} else {
|
||||
new_spsr &= ~SPSR_SSBS_BIT_AARCH64;
|
||||
}
|
||||
}
|
||||
|
||||
/* If FEAT_NMI is implemented, ALLINT = !(SCTLR.SPINTMASK) */
|
||||
new_spsr |= old_spsr & SPSR_ALLINT_BIT_AARCH64;
|
||||
if (is_feat_nmi_present()) {
|
||||
if ((sctlr & SCTLR_SPINTMASK_BIT) != 0U) {
|
||||
new_spsr &= ~SPSR_ALLINT_BIT_AARCH64;
|
||||
} else {
|
||||
new_spsr |= SPSR_ALLINT_BIT_AARCH64;
|
||||
}
|
||||
}
|
||||
|
||||
/* Clear PSTATE.IL bit explicitly */
|
||||
new_spsr &= ~SPSR_IL_BIT;
|
||||
|
||||
/* Clear PSTATE.SS bit explicitly */
|
||||
new_spsr &= ~SPSR_SS_BIT;
|
||||
|
||||
/* Update PSTATE.PAN bit */
|
||||
new_spsr |= old_spsr & SPSR_PAN_BIT;
|
||||
if (is_feat_pan_present() &&
|
||||
((target_el == MODE_EL1) || ((target_el == MODE_EL2) && is_tge_enabled())) &&
|
||||
((sctlr & SCTLR_SPAN_BIT) == 0U)) {
|
||||
new_spsr |= SPSR_PAN_BIT;
|
||||
}
|
||||
|
||||
/* Clear UAO bit if FEAT_UAO is present */
|
||||
new_spsr |= old_spsr & SPSR_UAO_BIT_AARCH64;
|
||||
if (is_feat_uao_present()) {
|
||||
new_spsr &= ~SPSR_UAO_BIT_AARCH64;
|
||||
}
|
||||
|
||||
/* DIT bits are unchanged */
|
||||
new_spsr |= old_spsr & SPSR_DIT_BIT;
|
||||
|
||||
/* If FEAT_MTE2 is implemented mask tag faults by setting TCO bit */
|
||||
new_spsr |= old_spsr & SPSR_TCO_BIT_AARCH64;
|
||||
if (is_feat_mte2_present()) {
|
||||
new_spsr |= SPSR_TCO_BIT_AARCH64;
|
||||
}
|
||||
|
||||
/* NZCV bits are unchanged */
|
||||
new_spsr |= old_spsr & SPSR_NZCV;
|
||||
|
||||
/* If FEAT_EBEP is present set PM bit */
|
||||
new_spsr |= old_spsr & SPSR_PM_BIT_AARCH64;
|
||||
if (is_feat_ebep_present()) {
|
||||
new_spsr |= SPSR_PM_BIT_AARCH64;
|
||||
}
|
||||
|
||||
/* If FEAT_SEBEP is present clear PPEND bit */
|
||||
new_spsr |= old_spsr & SPSR_PPEND_BIT;
|
||||
if (is_feat_sebep_present()) {
|
||||
new_spsr &= ~SPSR_PPEND_BIT;
|
||||
}
|
||||
|
||||
/* If FEAT_GCS is present, update EXLOCK bit */
|
||||
new_spsr |= old_spsr & SPSR_EXLOCK_BIT_AARCH64;
|
||||
if (is_feat_gcs_present()) {
|
||||
u_register_t gcscr;
|
||||
if (target_el == MODE_EL2) {
|
||||
gcscr = read_gcscr_el2();
|
||||
} else {
|
||||
gcscr = read_gcscr_el1();
|
||||
}
|
||||
new_spsr |= (gcscr & GCSCR_EXLOCK_EN_BIT) ? SPSR_EXLOCK_BIT_AARCH64 : 0;
|
||||
}
|
||||
|
||||
return new_spsr;
|
||||
}
|
||||
|
||||
/*
|
||||
* Handler for injecting Undefined exception to lower EL which is caused by
|
||||
* lower EL accessing system registers of which (old)EL3 firmware is unaware.
|
||||
*
|
||||
* This is a safety net to avoid EL3 panics caused by system register access
|
||||
* that triggers an exception syndrome EC=0x18.
|
||||
*/
|
||||
void inject_undef64(cpu_context_t *ctx)
|
||||
{
|
||||
u_register_t esr = (EC_UNKNOWN << ESR_EC_SHIFT) | ESR_IL_BIT;
|
||||
el3_state_t *state = get_el3state_ctx(ctx);
|
||||
u_register_t elr_el3 = read_ctx_reg(state, CTX_ELR_EL3);
|
||||
u_register_t old_spsr = read_ctx_reg(state, CTX_SPSR_EL3);
|
||||
u_register_t scr_el3 = read_ctx_reg(state, CTX_SCR_EL3);
|
||||
u_register_t new_spsr = 0;
|
||||
unsigned int to_el = target_el(GET_EL(old_spsr), scr_el3);
|
||||
|
||||
if (to_el == MODE_EL2) {
|
||||
write_elr_el2(elr_el3);
|
||||
elr_el3 = get_elr_el3(old_spsr, read_vbar_el2(), to_el);
|
||||
write_esr_el2(esr);
|
||||
write_spsr_el2(old_spsr);
|
||||
} else {
|
||||
write_elr_el1(elr_el3);
|
||||
elr_el3 = get_elr_el3(old_spsr, read_vbar_el1(), to_el);
|
||||
write_esr_el1(esr);
|
||||
write_spsr_el1(old_spsr);
|
||||
}
|
||||
|
||||
new_spsr = create_spsr(old_spsr, to_el);
|
||||
|
||||
write_ctx_reg(state, CTX_SPSR_EL3, new_spsr);
|
||||
write_ctx_reg(state, CTX_ELR_EL3, elr_el3);
|
||||
}
|
||||
540
arm-trusted-firmware.t234/bl31/ehf.c
Normal file
540
arm-trusted-firmware.t234/bl31/ehf.c
Normal file
@@ -0,0 +1,540 @@
|
||||
/*
|
||||
* Copyright (c) 2017-2024, Arm Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
/*
|
||||
* Exception handlers at EL3, their priority levels, and management.
|
||||
*/
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#include <bl31/ehf.h>
|
||||
#include <bl31/interrupt_mgmt.h>
|
||||
#include <context.h>
|
||||
#include <common/debug.h>
|
||||
#include <drivers/arm/gic_common.h>
|
||||
#include <lib/el3_runtime/context_mgmt.h>
|
||||
#include <lib/el3_runtime/cpu_data.h>
|
||||
#include <lib/el3_runtime/pubsub_events.h>
|
||||
#include <plat/common/platform.h>
|
||||
|
||||
/* Output EHF logs as verbose */
|
||||
#define EHF_LOG(...) VERBOSE("EHF: " __VA_ARGS__)
|
||||
|
||||
#define EHF_INVALID_IDX (-1)
|
||||
|
||||
/* For a valid handler, return the actual function pointer; otherwise, 0. */
|
||||
#define RAW_HANDLER(h) \
|
||||
((ehf_handler_t) ((((h) & EHF_PRI_VALID_) != 0U) ? \
|
||||
((h) & ~EHF_PRI_VALID_) : 0U))
|
||||
|
||||
#define PRI_BIT(idx) (((ehf_pri_bits_t) 1u) << (idx))
|
||||
|
||||
/*
|
||||
* Convert index into secure priority using the platform-defined priority bits
|
||||
* field.
|
||||
*/
|
||||
#define IDX_TO_PRI(idx) \
|
||||
((((unsigned) idx) << (7u - exception_data.pri_bits)) & 0x7fU)
|
||||
|
||||
/* Check whether a given index is valid */
|
||||
#define IS_IDX_VALID(idx) \
|
||||
((exception_data.ehf_priorities[idx].ehf_handler & EHF_PRI_VALID_) != 0U)
|
||||
|
||||
/* Returns whether given priority is in secure priority range */
|
||||
#define IS_PRI_SECURE(pri) (((pri) & 0x80U) == 0U)
|
||||
|
||||
/* To be defined by the platform */
|
||||
extern const ehf_priorities_t exception_data;
|
||||
|
||||
/* Translate priority to the index in the priority array */
|
||||
static unsigned int pri_to_idx(unsigned int priority)
|
||||
{
|
||||
unsigned int idx;
|
||||
|
||||
idx = EHF_PRI_TO_IDX(priority, exception_data.pri_bits);
|
||||
assert(idx < exception_data.num_priorities);
|
||||
assert(IS_IDX_VALID(idx));
|
||||
|
||||
return idx;
|
||||
}
|
||||
|
||||
/* Return whether there are outstanding priority activation */
|
||||
static bool has_valid_pri_activations(pe_exc_data_t *pe_data)
|
||||
{
|
||||
return pe_data->active_pri_bits != 0U;
|
||||
}
|
||||
|
||||
static pe_exc_data_t *this_cpu_data(void)
|
||||
{
|
||||
return &get_cpu_data(ehf_data);
|
||||
}
|
||||
|
||||
/*
|
||||
* Return the current priority index of this CPU. If no priority is active,
|
||||
* return EHF_INVALID_IDX.
|
||||
*/
|
||||
static int get_pe_highest_active_idx(pe_exc_data_t *pe_data)
|
||||
{
|
||||
if (!has_valid_pri_activations(pe_data))
|
||||
return EHF_INVALID_IDX;
|
||||
|
||||
/* Current priority is the right-most bit */
|
||||
return (int) __builtin_ctz(pe_data->active_pri_bits);
|
||||
}
|
||||
|
||||
/*
|
||||
* Mark priority active by setting the corresponding bit in active_pri_bits and
|
||||
* programming the priority mask.
|
||||
*
|
||||
* This API is to be used as part of delegating to lower ELs other than for
|
||||
* interrupts; e.g. while handling synchronous exceptions.
|
||||
*
|
||||
* This API is expected to be invoked before restoring context (Secure or
|
||||
* Non-secure) in preparation for the respective dispatch.
|
||||
*/
|
||||
void ehf_activate_priority(unsigned int priority)
|
||||
{
|
||||
int cur_pri_idx;
|
||||
unsigned int old_mask, run_pri, idx;
|
||||
pe_exc_data_t *pe_data = this_cpu_data();
|
||||
|
||||
/*
|
||||
* Query interrupt controller for the running priority, or idle priority
|
||||
* if no interrupts are being handled. The requested priority must be
|
||||
* less (higher priority) than the active running priority.
|
||||
*/
|
||||
run_pri = plat_ic_get_running_priority();
|
||||
if (priority >= run_pri) {
|
||||
ERROR("Running priority higher (0x%x) than requested (0x%x)\n",
|
||||
run_pri, priority);
|
||||
panic();
|
||||
}
|
||||
|
||||
/*
|
||||
* If there were priority activations already, the requested priority
|
||||
* must be less (higher priority) than the current highest priority
|
||||
* activation so far.
|
||||
*/
|
||||
cur_pri_idx = get_pe_highest_active_idx(pe_data);
|
||||
idx = pri_to_idx(priority);
|
||||
if ((cur_pri_idx != EHF_INVALID_IDX) &&
|
||||
(idx >= ((unsigned int) cur_pri_idx))) {
|
||||
ERROR("Activation priority mismatch: req=0x%x current=0x%x\n",
|
||||
priority, IDX_TO_PRI(cur_pri_idx));
|
||||
panic();
|
||||
}
|
||||
|
||||
/* Set the bit corresponding to the requested priority */
|
||||
pe_data->active_pri_bits |= PRI_BIT(idx);
|
||||
|
||||
/*
|
||||
* Program priority mask for the activated level. Check that the new
|
||||
* priority mask is setting a higher priority level than the existing
|
||||
* mask.
|
||||
*/
|
||||
old_mask = plat_ic_set_priority_mask(priority);
|
||||
if (priority >= old_mask) {
|
||||
ERROR("Requested priority (0x%x) lower than Priority Mask (0x%x)\n",
|
||||
priority, old_mask);
|
||||
panic();
|
||||
}
|
||||
|
||||
/*
|
||||
* If this is the first activation, save the priority mask. This will be
|
||||
* restored after the last deactivation.
|
||||
*/
|
||||
if (cur_pri_idx == EHF_INVALID_IDX)
|
||||
pe_data->init_pri_mask = (uint8_t) old_mask;
|
||||
|
||||
EHF_LOG("activate prio=%d\n", get_pe_highest_active_idx(pe_data));
|
||||
}
|
||||
|
||||
/*
|
||||
* Mark priority inactive by clearing the corresponding bit in active_pri_bits,
|
||||
* and programming the priority mask.
|
||||
*
|
||||
* This API is expected to be used as part of delegating to to lower ELs other
|
||||
* than for interrupts; e.g. while handling synchronous exceptions.
|
||||
*
|
||||
* This API is expected to be invoked after saving context (Secure or
|
||||
* Non-secure), having concluded the respective dispatch.
|
||||
*/
|
||||
void ehf_deactivate_priority(unsigned int priority)
|
||||
{
|
||||
int cur_pri_idx;
|
||||
pe_exc_data_t *pe_data = this_cpu_data();
|
||||
unsigned int old_mask, run_pri, idx;
|
||||
|
||||
/*
|
||||
* Query interrupt controller for the running priority, or idle priority
|
||||
* if no interrupts are being handled. The requested priority must be
|
||||
* less (higher priority) than the active running priority.
|
||||
*/
|
||||
run_pri = plat_ic_get_running_priority();
|
||||
if (priority >= run_pri) {
|
||||
ERROR("Running priority higher (0x%x) than requested (0x%x)\n",
|
||||
run_pri, priority);
|
||||
panic();
|
||||
}
|
||||
|
||||
/*
|
||||
* Deactivation is allowed only when there are priority activations, and
|
||||
* the deactivation priority level must match the current activated
|
||||
* priority.
|
||||
*/
|
||||
cur_pri_idx = get_pe_highest_active_idx(pe_data);
|
||||
idx = pri_to_idx(priority);
|
||||
if ((cur_pri_idx == EHF_INVALID_IDX) ||
|
||||
(idx != ((unsigned int) cur_pri_idx))) {
|
||||
ERROR("Deactivation priority mismatch: req=0x%x current=0x%x\n",
|
||||
priority, IDX_TO_PRI(cur_pri_idx));
|
||||
panic();
|
||||
}
|
||||
|
||||
/* Clear bit corresponding to highest priority */
|
||||
pe_data->active_pri_bits &= (pe_data->active_pri_bits - 1u);
|
||||
|
||||
/*
|
||||
* Restore priority mask corresponding to the next priority, or the
|
||||
* one stashed earlier if there are no more to deactivate.
|
||||
*/
|
||||
cur_pri_idx = get_pe_highest_active_idx(pe_data);
|
||||
|
||||
#if GIC600_ERRATA_WA_2384374
|
||||
if (cur_pri_idx == EHF_INVALID_IDX) {
|
||||
old_mask = plat_ic_deactivate_priority(pe_data->init_pri_mask);
|
||||
} else {
|
||||
old_mask = plat_ic_deactivate_priority(priority);
|
||||
}
|
||||
#else
|
||||
if (cur_pri_idx == EHF_INVALID_IDX) {
|
||||
old_mask = plat_ic_set_priority_mask(pe_data->init_pri_mask);
|
||||
} else {
|
||||
old_mask = plat_ic_set_priority_mask(priority);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (old_mask > priority) {
|
||||
ERROR("Deactivation priority (0x%x) lower than Priority Mask (0x%x)\n",
|
||||
priority, old_mask);
|
||||
panic();
|
||||
}
|
||||
|
||||
EHF_LOG("deactivate prio=%d\n", get_pe_highest_active_idx(pe_data));
|
||||
}
|
||||
|
||||
/*
|
||||
* After leaving Non-secure world, stash current Non-secure Priority Mask, and
|
||||
* set Priority Mask to the highest Non-secure priority so that Non-secure
|
||||
* interrupts cannot preempt Secure execution.
|
||||
*
|
||||
* If the current running priority is in the secure range, or if there are
|
||||
* outstanding priority activations, this function does nothing.
|
||||
*
|
||||
* This function subscribes to the 'cm_exited_normal_world' event published by
|
||||
* the Context Management Library.
|
||||
*/
|
||||
static void *ehf_exited_normal_world(const void *arg)
|
||||
{
|
||||
unsigned int run_pri;
|
||||
pe_exc_data_t *pe_data = this_cpu_data();
|
||||
|
||||
/* If the running priority is in the secure range, do nothing */
|
||||
run_pri = plat_ic_get_running_priority();
|
||||
if (IS_PRI_SECURE(run_pri))
|
||||
return NULL;
|
||||
|
||||
/* Do nothing if there are explicit activations */
|
||||
if (has_valid_pri_activations(pe_data))
|
||||
return NULL;
|
||||
|
||||
assert(pe_data->ns_pri_mask == 0u);
|
||||
|
||||
pe_data->ns_pri_mask =
|
||||
(uint8_t) plat_ic_set_priority_mask(GIC_HIGHEST_NS_PRIORITY);
|
||||
|
||||
/* The previous Priority Mask is not expected to be in secure range */
|
||||
if (IS_PRI_SECURE(pe_data->ns_pri_mask)) {
|
||||
ERROR("Priority Mask (0x%x) already in secure range\n",
|
||||
pe_data->ns_pri_mask);
|
||||
panic();
|
||||
}
|
||||
|
||||
EHF_LOG("Priority Mask: 0x%x => 0x%x\n", pe_data->ns_pri_mask,
|
||||
GIC_HIGHEST_NS_PRIORITY);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* Conclude Secure execution and prepare for return to Non-secure world. Restore
|
||||
* the Non-secure Priority Mask previously stashed upon leaving Non-secure
|
||||
* world.
|
||||
*
|
||||
* If there the current running priority is in the secure range, or if there are
|
||||
* outstanding priority activations, this function does nothing.
|
||||
*
|
||||
* This function subscribes to the 'cm_entering_normal_world' event published by
|
||||
* the Context Management Library.
|
||||
*/
|
||||
static void *ehf_entering_normal_world(const void *arg)
|
||||
{
|
||||
unsigned int old_pmr, run_pri;
|
||||
pe_exc_data_t *pe_data = this_cpu_data();
|
||||
|
||||
/* If the running priority is in the secure range, do nothing */
|
||||
run_pri = plat_ic_get_running_priority();
|
||||
if (IS_PRI_SECURE(run_pri))
|
||||
return NULL;
|
||||
|
||||
/*
|
||||
* If there are explicit activations, do nothing. The Priority Mask will
|
||||
* be restored upon the last deactivation.
|
||||
*/
|
||||
if (has_valid_pri_activations(pe_data))
|
||||
return NULL;
|
||||
|
||||
/* Do nothing if we don't have a valid Priority Mask to restore */
|
||||
if (pe_data->ns_pri_mask == 0U)
|
||||
return NULL;
|
||||
|
||||
old_pmr = plat_ic_set_priority_mask(pe_data->ns_pri_mask);
|
||||
|
||||
/*
|
||||
* When exiting secure world, the current Priority Mask must be
|
||||
* GIC_HIGHEST_NS_PRIORITY (as set during entry), or the Non-secure
|
||||
* priority mask set upon calling ehf_allow_ns_preemption()
|
||||
*/
|
||||
if ((old_pmr != GIC_HIGHEST_NS_PRIORITY) &&
|
||||
(old_pmr != pe_data->ns_pri_mask)) {
|
||||
ERROR("Invalid Priority Mask (0x%x) restored\n", old_pmr);
|
||||
panic();
|
||||
}
|
||||
|
||||
EHF_LOG("Priority Mask: 0x%x => 0x%x\n", old_pmr, pe_data->ns_pri_mask);
|
||||
|
||||
pe_data->ns_pri_mask = 0;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* Program Priority Mask to the original Non-secure priority such that
|
||||
* Non-secure interrupts may preempt Secure execution (for example, during
|
||||
* Yielding SMC calls). The 'preempt_ret_code' parameter indicates the Yielding
|
||||
* SMC's return value in case the call was preempted.
|
||||
*
|
||||
* This API is expected to be invoked before delegating a yielding SMC to Secure
|
||||
* EL1. I.e. within the window of secure execution after Non-secure context is
|
||||
* saved (after entry into EL3) and Secure context is restored (before entering
|
||||
* Secure EL1).
|
||||
*/
|
||||
void ehf_allow_ns_preemption(uint64_t preempt_ret_code)
|
||||
{
|
||||
cpu_context_t *ns_ctx;
|
||||
unsigned int old_pmr __unused;
|
||||
pe_exc_data_t *pe_data = this_cpu_data();
|
||||
|
||||
/*
|
||||
* We should have been notified earlier of entering secure world, and
|
||||
* therefore have stashed the Non-secure priority mask.
|
||||
*/
|
||||
assert(pe_data->ns_pri_mask != 0U);
|
||||
|
||||
/* Make sure no priority levels are active when requesting this */
|
||||
if (has_valid_pri_activations(pe_data)) {
|
||||
ERROR("PE %lx has priority activations: 0x%x\n",
|
||||
read_mpidr_el1(), pe_data->active_pri_bits);
|
||||
panic();
|
||||
}
|
||||
|
||||
/*
|
||||
* Program preempted return code to x0 right away so that, if the
|
||||
* Yielding SMC was indeed preempted before a dispatcher gets a chance
|
||||
* to populate it, the caller would find the correct return value.
|
||||
*/
|
||||
ns_ctx = cm_get_context(NON_SECURE);
|
||||
assert(ns_ctx != NULL);
|
||||
write_ctx_reg(get_gpregs_ctx(ns_ctx), CTX_GPREG_X0, preempt_ret_code);
|
||||
|
||||
old_pmr = plat_ic_set_priority_mask(pe_data->ns_pri_mask);
|
||||
|
||||
EHF_LOG("Priority Mask: 0x%x => 0x%x\n", old_pmr, pe_data->ns_pri_mask);
|
||||
|
||||
pe_data->ns_pri_mask = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Return whether Secure execution has explicitly allowed Non-secure interrupts
|
||||
* to preempt itself (for example, during Yielding SMC calls).
|
||||
*/
|
||||
unsigned int ehf_is_ns_preemption_allowed(void)
|
||||
{
|
||||
unsigned int run_pri;
|
||||
pe_exc_data_t *pe_data = this_cpu_data();
|
||||
|
||||
/* If running priority is in secure range, return false */
|
||||
run_pri = plat_ic_get_running_priority();
|
||||
if (IS_PRI_SECURE(run_pri))
|
||||
return 0;
|
||||
|
||||
/*
|
||||
* If Non-secure preemption was permitted by calling
|
||||
* ehf_allow_ns_preemption() earlier:
|
||||
*
|
||||
* - There wouldn't have been priority activations;
|
||||
* - We would have cleared the stashed the Non-secure Priority Mask.
|
||||
*/
|
||||
if (has_valid_pri_activations(pe_data))
|
||||
return 0;
|
||||
if (pe_data->ns_pri_mask != 0U)
|
||||
return 0;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Top-level EL3 interrupt handler.
|
||||
*/
|
||||
static uint64_t ehf_el3_interrupt_handler(uint32_t id, uint32_t flags,
|
||||
void *handle, void *cookie)
|
||||
{
|
||||
int ret = 0;
|
||||
uint32_t intr_raw;
|
||||
unsigned int intr, pri, idx;
|
||||
ehf_handler_t handler;
|
||||
|
||||
/*
|
||||
* Top-level interrupt type handler from Interrupt Management Framework
|
||||
* doesn't acknowledge the interrupt; so the interrupt ID must be
|
||||
* invalid.
|
||||
*/
|
||||
assert(id == INTR_ID_UNAVAILABLE);
|
||||
|
||||
/*
|
||||
* Acknowledge interrupt. Proceed with handling only for valid interrupt
|
||||
* IDs. This situation may arise because of Interrupt Management
|
||||
* Framework identifying an EL3 interrupt, but before it's been
|
||||
* acknowledged here, the interrupt was either deasserted, or there was
|
||||
* a higher-priority interrupt of another type.
|
||||
*/
|
||||
intr_raw = plat_ic_acknowledge_interrupt();
|
||||
intr = plat_ic_get_interrupt_id(intr_raw);
|
||||
if (intr == INTR_ID_UNAVAILABLE)
|
||||
return 0;
|
||||
|
||||
/* Having acknowledged the interrupt, get the running priority */
|
||||
pri = plat_ic_get_running_priority();
|
||||
|
||||
/* Check EL3 interrupt priority is in secure range */
|
||||
assert(IS_PRI_SECURE(pri));
|
||||
|
||||
/*
|
||||
* Translate the priority to a descriptor index. We do this by masking
|
||||
* and shifting the running priority value (platform-supplied).
|
||||
*/
|
||||
idx = pri_to_idx(pri);
|
||||
|
||||
/* Validate priority */
|
||||
assert(pri == IDX_TO_PRI(idx));
|
||||
|
||||
handler = (ehf_handler_t) RAW_HANDLER(
|
||||
exception_data.ehf_priorities[idx].ehf_handler);
|
||||
if (handler == NULL) {
|
||||
ERROR("No EL3 exception handler for priority 0x%x\n",
|
||||
IDX_TO_PRI(idx));
|
||||
panic();
|
||||
}
|
||||
|
||||
/*
|
||||
* Call registered handler. Pass the raw interrupt value to registered
|
||||
* handlers.
|
||||
*/
|
||||
ret = handler(intr_raw, flags, handle, cookie);
|
||||
|
||||
return (uint64_t) ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Initialize the EL3 exception handling.
|
||||
*/
|
||||
void __init ehf_init(void)
|
||||
{
|
||||
unsigned int flags = 0;
|
||||
int ret __unused;
|
||||
|
||||
/* Ensure EL3 interrupts are supported */
|
||||
assert(plat_ic_has_interrupt_type(INTR_TYPE_EL3));
|
||||
|
||||
/*
|
||||
* Make sure that priority water mark has enough bits to represent the
|
||||
* whole priority array.
|
||||
*/
|
||||
assert(exception_data.num_priorities <= (sizeof(ehf_pri_bits_t) * 8U));
|
||||
|
||||
assert(exception_data.ehf_priorities != NULL);
|
||||
|
||||
/*
|
||||
* Bit 7 of GIC priority must be 0 for secure interrupts. This means
|
||||
* platforms must use at least 1 of the remaining 7 bits.
|
||||
*/
|
||||
assert((exception_data.pri_bits >= 1U) ||
|
||||
(exception_data.pri_bits < 8U));
|
||||
|
||||
/* Route EL3 interrupts when in Non-secure. */
|
||||
set_interrupt_rm_flag(flags, NON_SECURE);
|
||||
|
||||
/* Route EL3 interrupts only when SPM_MM present in secure. */
|
||||
#if SPM_MM
|
||||
set_interrupt_rm_flag(flags, SECURE);
|
||||
#endif
|
||||
|
||||
/* Register handler for EL3 interrupts */
|
||||
ret = register_interrupt_type_handler(INTR_TYPE_EL3,
|
||||
ehf_el3_interrupt_handler, flags);
|
||||
assert(ret == 0);
|
||||
}
|
||||
|
||||
/*
|
||||
* Register a handler at the supplied priority. Registration is allowed only if
|
||||
* a handler hasn't been registered before, or one wasn't provided at build
|
||||
* time. The priority for which the handler is being registered must also accord
|
||||
* with the platform-supplied data.
|
||||
*/
|
||||
void ehf_register_priority_handler(unsigned int pri, ehf_handler_t handler)
|
||||
{
|
||||
unsigned int idx;
|
||||
|
||||
/* Sanity check for handler */
|
||||
assert(handler != NULL);
|
||||
|
||||
/* Handler ought to be 4-byte aligned */
|
||||
assert((((uintptr_t) handler) & 3U) == 0U);
|
||||
|
||||
/* Ensure we register for valid priority */
|
||||
idx = pri_to_idx(pri);
|
||||
assert(idx < exception_data.num_priorities);
|
||||
assert(IDX_TO_PRI(idx) == pri);
|
||||
|
||||
/* Return failure if a handler was already registered */
|
||||
if (exception_data.ehf_priorities[idx].ehf_handler != EHF_NO_HANDLER_) {
|
||||
ERROR("Handler already registered for priority 0x%x\n", pri);
|
||||
panic();
|
||||
}
|
||||
|
||||
/*
|
||||
* Install handler, and retain the valid bit. We assume that the handler
|
||||
* is 4-byte aligned, which is usually the case.
|
||||
*/
|
||||
exception_data.ehf_priorities[idx].ehf_handler =
|
||||
(((uintptr_t) handler) | EHF_PRI_VALID_);
|
||||
|
||||
EHF_LOG("register pri=0x%x handler=%p\n", pri, handler);
|
||||
}
|
||||
|
||||
SUBSCRIBE_TO_EVENT(cm_entering_normal_world, ehf_entering_normal_world);
|
||||
SUBSCRIBE_TO_EVENT(cm_exited_normal_world, ehf_exited_normal_world);
|
||||
227
arm-trusted-firmware.t234/bl31/interrupt_mgmt.c
Normal file
227
arm-trusted-firmware.t234/bl31/interrupt_mgmt.c
Normal file
@@ -0,0 +1,227 @@
|
||||
/*
|
||||
* Copyright (c) 2014-2023, Arm Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include <common/bl_common.h>
|
||||
#include <bl31/interrupt_mgmt.h>
|
||||
#include <lib/el3_runtime/context_mgmt.h>
|
||||
#include <plat/common/platform.h>
|
||||
|
||||
/*******************************************************************************
|
||||
* Local structure and corresponding array to keep track of the state of the
|
||||
* registered interrupt handlers for each interrupt type.
|
||||
* The field descriptions are:
|
||||
*
|
||||
* 'scr_el3[2]' : Mapping of the routing model in the 'flags' field to the
|
||||
* value of the SCR_EL3.IRQ or FIQ bit for each security state.
|
||||
* There are two instances of this field corresponding to the
|
||||
* two security states.
|
||||
*
|
||||
* 'flags' : Bit[0], Routing model for this interrupt type when execution is
|
||||
* not in EL3 in the secure state. '1' implies that this
|
||||
* interrupt will be routed to EL3. '0' implies that this
|
||||
* interrupt will be routed to the current exception level.
|
||||
*
|
||||
* Bit[1], Routing model for this interrupt type when execution is
|
||||
* not in EL3 in the non-secure state. '1' implies that this
|
||||
* interrupt will be routed to EL3. '0' implies that this
|
||||
* interrupt will be routed to the current exception level.
|
||||
*
|
||||
* All other bits are reserved and SBZ.
|
||||
******************************************************************************/
|
||||
typedef struct {
|
||||
interrupt_type_handler_t handler;
|
||||
u_register_t scr_el3[2];
|
||||
uint32_t flags;
|
||||
} intr_type_desc_t;
|
||||
|
||||
static intr_type_desc_t intr_type_descs[MAX_INTR_TYPES];
|
||||
|
||||
/*******************************************************************************
|
||||
* This function validates the interrupt type.
|
||||
******************************************************************************/
|
||||
static int32_t validate_interrupt_type(uint32_t type)
|
||||
{
|
||||
if (plat_ic_has_interrupt_type(type)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* This function validates the routing model for this type of interrupt
|
||||
******************************************************************************/
|
||||
static int32_t validate_routing_model(uint32_t type, uint32_t flags)
|
||||
{
|
||||
uint32_t rm_flags = (flags >> INTR_RM_FLAGS_SHIFT) & INTR_RM_FLAGS_MASK;
|
||||
|
||||
if (type == INTR_TYPE_S_EL1)
|
||||
return validate_sel1_interrupt_rm(rm_flags);
|
||||
|
||||
if (type == INTR_TYPE_NS)
|
||||
return validate_ns_interrupt_rm(rm_flags);
|
||||
|
||||
if (type == INTR_TYPE_EL3)
|
||||
return validate_el3_interrupt_rm(rm_flags);
|
||||
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* This function returns the cached copy of the SCR_EL3 which contains the
|
||||
* routing model (expressed through the IRQ and FIQ bits) for a security state
|
||||
* which was stored through a call to 'set_routing_model()' earlier.
|
||||
******************************************************************************/
|
||||
u_register_t get_scr_el3_from_routing_model(uint32_t security_state)
|
||||
{
|
||||
u_register_t scr_el3;
|
||||
|
||||
assert(sec_state_is_valid(security_state));
|
||||
scr_el3 = intr_type_descs[INTR_TYPE_NS].scr_el3[security_state];
|
||||
scr_el3 |= intr_type_descs[INTR_TYPE_S_EL1].scr_el3[security_state];
|
||||
scr_el3 |= intr_type_descs[INTR_TYPE_EL3].scr_el3[security_state];
|
||||
return scr_el3;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* This function uses the 'interrupt_type_flags' parameter to obtain the value
|
||||
* of the trap bit (IRQ/FIQ) in the SCR_EL3 for a security state for this
|
||||
* interrupt type. It uses it to update the SCR_EL3 in the cpu context and the
|
||||
* 'intr_type_desc' for that security state.
|
||||
******************************************************************************/
|
||||
static void set_scr_el3_from_rm(uint32_t type,
|
||||
uint32_t interrupt_type_flags,
|
||||
uint32_t security_state)
|
||||
{
|
||||
uint32_t flag, bit_pos;
|
||||
|
||||
flag = get_interrupt_rm_flag(interrupt_type_flags, security_state);
|
||||
bit_pos = plat_interrupt_type_to_line(type, security_state);
|
||||
intr_type_descs[type].scr_el3[security_state] = (u_register_t)flag << bit_pos;
|
||||
|
||||
/*
|
||||
* Update scr_el3 only if there is a context available. If not, it
|
||||
* will be updated later during context initialization which will obtain
|
||||
* the scr_el3 value to be used via get_scr_el3_from_routing_model()
|
||||
*/
|
||||
if (cm_get_context(security_state) != NULL)
|
||||
cm_write_scr_el3_bit(security_state, bit_pos, flag);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* This function validates the routing model specified in the 'flags' and
|
||||
* updates internal data structures to reflect the new routing model. It also
|
||||
* updates the copy of SCR_EL3 for each security state with the new routing
|
||||
* model in the 'cpu_context' structure for this cpu.
|
||||
******************************************************************************/
|
||||
int32_t set_routing_model(uint32_t type, uint32_t flags)
|
||||
{
|
||||
int32_t rc;
|
||||
|
||||
rc = validate_interrupt_type(type);
|
||||
if (rc != 0)
|
||||
return rc;
|
||||
|
||||
rc = validate_routing_model(type, flags);
|
||||
if (rc != 0)
|
||||
return rc;
|
||||
|
||||
/* Update the routing model in internal data structures */
|
||||
intr_type_descs[type].flags = flags;
|
||||
set_scr_el3_from_rm(type, flags, SECURE);
|
||||
set_scr_el3_from_rm(type, flags, NON_SECURE);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
* This function disables the routing model of interrupt 'type' from the
|
||||
* specified 'security_state' on the local core. The disable is in effect
|
||||
* till the core powers down or till the next enable for that interrupt
|
||||
* type.
|
||||
*****************************************************************************/
|
||||
int disable_intr_rm_local(uint32_t type, uint32_t security_state)
|
||||
{
|
||||
uint32_t bit_pos, flag;
|
||||
|
||||
assert(intr_type_descs[type].handler != NULL);
|
||||
|
||||
flag = get_interrupt_rm_flag(INTR_DEFAULT_RM, security_state);
|
||||
|
||||
bit_pos = plat_interrupt_type_to_line(type, security_state);
|
||||
cm_write_scr_el3_bit(security_state, bit_pos, flag);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
* This function enables the routing model of interrupt 'type' from the
|
||||
* specified 'security_state' on the local core.
|
||||
*****************************************************************************/
|
||||
int enable_intr_rm_local(uint32_t type, uint32_t security_state)
|
||||
{
|
||||
uint32_t bit_pos, flag;
|
||||
|
||||
assert(intr_type_descs[type].handler != NULL);
|
||||
|
||||
flag = get_interrupt_rm_flag(intr_type_descs[type].flags,
|
||||
security_state);
|
||||
|
||||
bit_pos = plat_interrupt_type_to_line(type, security_state);
|
||||
cm_write_scr_el3_bit(security_state, bit_pos, flag);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* This function registers a handler for the 'type' of interrupt specified. It
|
||||
* also validates the routing model specified in the 'flags' for this type of
|
||||
* interrupt.
|
||||
******************************************************************************/
|
||||
int32_t register_interrupt_type_handler(uint32_t type,
|
||||
interrupt_type_handler_t handler,
|
||||
uint32_t flags)
|
||||
{
|
||||
int32_t rc;
|
||||
|
||||
/* Validate the 'handler' parameter */
|
||||
if (handler == NULL)
|
||||
return -EINVAL;
|
||||
|
||||
/* Validate the 'flags' parameter */
|
||||
if ((flags & INTR_TYPE_FLAGS_MASK) != 0U)
|
||||
return -EINVAL;
|
||||
|
||||
/* Check if a handler has already been registered */
|
||||
if (intr_type_descs[type].handler != NULL)
|
||||
return -EALREADY;
|
||||
|
||||
rc = set_routing_model(type, flags);
|
||||
if (rc != 0)
|
||||
return rc;
|
||||
|
||||
/* Save the handler */
|
||||
intr_type_descs[type].handler = handler;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* This function is called when an interrupt is generated and returns the
|
||||
* handler for the interrupt type (if registered). It returns NULL if the
|
||||
* interrupt type is not supported or its handler has not been registered.
|
||||
******************************************************************************/
|
||||
interrupt_type_handler_t get_interrupt_type_handler(uint32_t type)
|
||||
{
|
||||
if (validate_interrupt_type(type) != 0)
|
||||
return NULL;
|
||||
|
||||
return intr_type_descs[type].handler;
|
||||
}
|
||||
|
||||
15
arm-trusted-firmware.t234/bl32/optee/optee.mk
Normal file
15
arm-trusted-firmware.t234/bl32/optee/optee.mk
Normal file
@@ -0,0 +1,15 @@
|
||||
#
|
||||
# Copyright (c) 2016-2019, Arm Limited and Contributors. All rights reserved.
|
||||
#
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
#
|
||||
# This makefile only aims at complying with Trusted Firmware-A build process so
|
||||
# that "optee" is a valid TF-A AArch32 Secure Playload identifier.
|
||||
|
||||
ifneq ($(ARCH),aarch32)
|
||||
$(error This directory targets AArch32 support)
|
||||
endif
|
||||
|
||||
$(eval $(call add_define,AARCH32_SP_OPTEE))
|
||||
|
||||
$(info Trusted Firmware-A built for OP-TEE payload support)
|
||||
366
arm-trusted-firmware.t234/bl32/sp_min/aarch32/entrypoint.S
Normal file
366
arm-trusted-firmware.t234/bl32/sp_min/aarch32/entrypoint.S
Normal file
@@ -0,0 +1,366 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2024, Arm Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <arch.h>
|
||||
#include <asm_macros.S>
|
||||
#include <common/bl_common.h>
|
||||
#include <common/runtime_svc.h>
|
||||
#include <context.h>
|
||||
#include <el3_common_macros.S>
|
||||
#include <lib/el3_runtime/cpu_data.h>
|
||||
#include <lib/pmf/aarch32/pmf_asm_macros.S>
|
||||
#include <lib/runtime_instr.h>
|
||||
#include <lib/xlat_tables/xlat_tables_defs.h>
|
||||
#include <smccc_helpers.h>
|
||||
#include <smccc_macros.S>
|
||||
|
||||
.globl sp_min_vector_table
|
||||
.globl sp_min_entrypoint
|
||||
.globl sp_min_warm_entrypoint
|
||||
.globl sp_min_handle_smc
|
||||
.globl sp_min_handle_fiq
|
||||
|
||||
#define FIXUP_SIZE ((BL32_LIMIT) - (BL32_BASE))
|
||||
|
||||
.macro route_fiq_to_sp_min reg
|
||||
/* -----------------------------------------------------
|
||||
* FIQs are secure interrupts trapped by Monitor and non
|
||||
* secure is not allowed to mask the FIQs.
|
||||
* -----------------------------------------------------
|
||||
*/
|
||||
ldcopr \reg, SCR
|
||||
orr \reg, \reg, #SCR_FIQ_BIT
|
||||
bic \reg, \reg, #SCR_FW_BIT
|
||||
stcopr \reg, SCR
|
||||
.endm
|
||||
|
||||
.macro clrex_on_monitor_entry
|
||||
#if (ARM_ARCH_MAJOR == 7)
|
||||
/*
|
||||
* ARMv7 architectures need to clear the exclusive access when
|
||||
* entering Monitor mode.
|
||||
*/
|
||||
clrex
|
||||
#endif
|
||||
.endm
|
||||
|
||||
vector_base sp_min_vector_table
|
||||
b sp_min_entrypoint
|
||||
b plat_panic_handler /* Undef */
|
||||
b sp_min_handle_smc /* Syscall */
|
||||
b report_prefetch_abort /* Prefetch abort */
|
||||
b report_data_abort /* Data abort */
|
||||
b plat_panic_handler /* Reserved */
|
||||
b plat_panic_handler /* IRQ */
|
||||
b sp_min_handle_fiq /* FIQ */
|
||||
|
||||
|
||||
/*
|
||||
* The Cold boot/Reset entrypoint for SP_MIN
|
||||
*/
|
||||
func sp_min_entrypoint
|
||||
/* ---------------------------------------------------------------
|
||||
* Stash the previous bootloader arguments r0 - r3 for later use.
|
||||
* ---------------------------------------------------------------
|
||||
*/
|
||||
mov r9, r0
|
||||
mov r10, r1
|
||||
mov r11, r2
|
||||
mov r12, r3
|
||||
|
||||
#if !RESET_TO_SP_MIN
|
||||
/* ---------------------------------------------------------------------
|
||||
* For !RESET_TO_SP_MIN systems, only the primary CPU ever reaches
|
||||
* sp_min_entrypoint() during the cold boot flow, so the cold/warm boot
|
||||
* and primary/secondary CPU logic should not be executed in this case.
|
||||
*
|
||||
* Also, assume that the previous bootloader has already initialised the
|
||||
* SCTLR, including the CPU endianness, and has initialised the memory.
|
||||
* ---------------------------------------------------------------------
|
||||
*/
|
||||
el3_entrypoint_common \
|
||||
_init_sctlr=0 \
|
||||
_warm_boot_mailbox=0 \
|
||||
_secondary_cold_boot=0 \
|
||||
_init_memory=0 \
|
||||
_init_c_runtime=1 \
|
||||
_exception_vectors=sp_min_vector_table \
|
||||
_pie_fixup_size=FIXUP_SIZE
|
||||
#else
|
||||
/* ---------------------------------------------------------------------
|
||||
* For RESET_TO_SP_MIN systems which have a programmable reset address,
|
||||
* sp_min_entrypoint() is executed only on the cold boot path so we can
|
||||
* skip the warm boot mailbox mechanism.
|
||||
* ---------------------------------------------------------------------
|
||||
*/
|
||||
el3_entrypoint_common \
|
||||
_init_sctlr=1 \
|
||||
_warm_boot_mailbox=!PROGRAMMABLE_RESET_ADDRESS \
|
||||
_secondary_cold_boot=!COLD_BOOT_SINGLE_CPU \
|
||||
_init_memory=1 \
|
||||
_init_c_runtime=1 \
|
||||
_exception_vectors=sp_min_vector_table \
|
||||
_pie_fixup_size=FIXUP_SIZE
|
||||
#endif /* RESET_TO_SP_MIN */
|
||||
|
||||
#if SP_MIN_WITH_SECURE_FIQ
|
||||
route_fiq_to_sp_min r4
|
||||
#endif
|
||||
|
||||
/* ---------------------------------------------------------------------
|
||||
* Relay the previous bootloader's arguments to the platform layer
|
||||
* ---------------------------------------------------------------------
|
||||
*/
|
||||
mov r0, r9
|
||||
mov r1, r10
|
||||
mov r2, r11
|
||||
mov r3, r12
|
||||
bl sp_min_setup
|
||||
|
||||
/* Jump to the main function */
|
||||
bl sp_min_main
|
||||
|
||||
/* -------------------------------------------------------------
|
||||
* Clean the .data & .bss sections to main memory. This ensures
|
||||
* that any global data which was initialised by the primary CPU
|
||||
* is visible to secondary CPUs before they enable their data
|
||||
* caches and participate in coherency.
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
ldr r0, =__DATA_START__
|
||||
ldr r1, =__DATA_END__
|
||||
sub r1, r1, r0
|
||||
bl clean_dcache_range
|
||||
|
||||
ldr r0, =__BSS_START__
|
||||
ldr r1, =__BSS_END__
|
||||
sub r1, r1, r0
|
||||
bl clean_dcache_range
|
||||
|
||||
bl smc_get_next_ctx
|
||||
|
||||
/* r0 points to `smc_ctx_t` */
|
||||
/* The PSCI cpu_context registers have been copied to `smc_ctx_t` */
|
||||
b sp_min_exit
|
||||
endfunc sp_min_entrypoint
|
||||
|
||||
|
||||
/*
|
||||
* SMC handling function for SP_MIN.
|
||||
*/
|
||||
func sp_min_handle_smc
|
||||
/* On SMC entry, `sp` points to `smc_ctx_t`. Save `lr`. */
|
||||
str lr, [sp, #SMC_CTX_LR_MON]
|
||||
|
||||
#if ENABLE_RUNTIME_INSTRUMENTATION
|
||||
/*
|
||||
* Read the timestamp value and store it on top of the C runtime stack.
|
||||
* The value will be saved to the per-cpu data once the C stack is
|
||||
* available, as a valid stack is needed to call _cpu_data()
|
||||
*/
|
||||
strd r0, r1, [sp, #SMC_CTX_GPREG_R0]
|
||||
ldcopr16 r0, r1, CNTPCT_64
|
||||
ldr lr, [sp, #SMC_CTX_SP_MON]
|
||||
strd r0, r1, [lr, #-8]!
|
||||
str lr, [sp, #SMC_CTX_SP_MON]
|
||||
ldrd r0, r1, [sp, #SMC_CTX_GPREG_R0]
|
||||
#endif
|
||||
|
||||
smccc_save_gp_mode_regs
|
||||
|
||||
clrex_on_monitor_entry
|
||||
|
||||
/*
|
||||
* `sp` still points to `smc_ctx_t`. Save it to a register
|
||||
* and restore the C runtime stack pointer to `sp`.
|
||||
*/
|
||||
mov r2, sp /* handle */
|
||||
ldr sp, [r2, #SMC_CTX_SP_MON]
|
||||
|
||||
#if ENABLE_RUNTIME_INSTRUMENTATION
|
||||
/* Save handle to a callee saved register */
|
||||
mov r6, r2
|
||||
|
||||
/*
|
||||
* Restore the timestamp value and store it in per-cpu data. The value
|
||||
* will be extracted from per-cpu data by the C level SMC handler and
|
||||
* saved to the PMF timestamp region.
|
||||
*/
|
||||
ldrd r4, r5, [sp], #8
|
||||
bl _cpu_data
|
||||
strd r4, r5, [r0, #CPU_DATA_PMF_TS0_OFFSET]
|
||||
|
||||
/* Restore handle */
|
||||
mov r2, r6
|
||||
#endif
|
||||
|
||||
ldr r0, [r2, #SMC_CTX_SCR]
|
||||
and r3, r0, #SCR_NS_BIT /* flags */
|
||||
|
||||
/* Switch to Secure Mode*/
|
||||
bic r0, #SCR_NS_BIT
|
||||
stcopr r0, SCR
|
||||
isb
|
||||
|
||||
ldr r0, [r2, #SMC_CTX_GPREG_R0] /* smc_fid */
|
||||
/* Check whether an SMC64 is issued */
|
||||
tst r0, #(FUNCID_CC_MASK << FUNCID_CC_SHIFT)
|
||||
beq 1f
|
||||
/* SMC32 is not detected. Return error back to caller */
|
||||
mov r0, #SMC_UNK
|
||||
str r0, [r2, #SMC_CTX_GPREG_R0]
|
||||
mov r0, r2
|
||||
b sp_min_exit
|
||||
1:
|
||||
/* SMC32 is detected */
|
||||
mov r1, #0 /* cookie */
|
||||
bl handle_runtime_svc
|
||||
|
||||
/* `r0` points to `smc_ctx_t` */
|
||||
b sp_min_exit
|
||||
endfunc sp_min_handle_smc
|
||||
|
||||
/*
|
||||
* Secure Interrupts handling function for SP_MIN.
|
||||
*/
|
||||
func sp_min_handle_fiq
|
||||
#if !SP_MIN_WITH_SECURE_FIQ
|
||||
b plat_panic_handler
|
||||
#else
|
||||
/* FIQ has a +4 offset for lr compared to preferred return address */
|
||||
sub lr, lr, #4
|
||||
/* On SMC entry, `sp` points to `smc_ctx_t`. Save `lr`. */
|
||||
str lr, [sp, #SMC_CTX_LR_MON]
|
||||
|
||||
smccc_save_gp_mode_regs
|
||||
|
||||
clrex_on_monitor_entry
|
||||
|
||||
/* load run-time stack */
|
||||
mov r2, sp
|
||||
ldr sp, [r2, #SMC_CTX_SP_MON]
|
||||
|
||||
/* Switch to Secure Mode */
|
||||
ldr r0, [r2, #SMC_CTX_SCR]
|
||||
bic r0, #SCR_NS_BIT
|
||||
stcopr r0, SCR
|
||||
isb
|
||||
|
||||
push {r2, r3}
|
||||
bl sp_min_fiq
|
||||
pop {r0, r3}
|
||||
|
||||
b sp_min_exit
|
||||
#endif
|
||||
endfunc sp_min_handle_fiq
|
||||
|
||||
/*
|
||||
* The Warm boot entrypoint for SP_MIN.
|
||||
*/
|
||||
func sp_min_warm_entrypoint
|
||||
#if ENABLE_RUNTIME_INSTRUMENTATION
|
||||
/*
|
||||
* This timestamp update happens with cache off. The next
|
||||
* timestamp collection will need to do cache maintenance prior
|
||||
* to timestamp update.
|
||||
*/
|
||||
pmf_calc_timestamp_addr rt_instr_svc, RT_INSTR_EXIT_HW_LOW_PWR
|
||||
ldcopr16 r2, r3, CNTPCT_64
|
||||
strd r2, r3, [r0]
|
||||
#endif
|
||||
/*
|
||||
* On the warm boot path, most of the EL3 initialisations performed by
|
||||
* 'el3_entrypoint_common' must be skipped:
|
||||
*
|
||||
* - Only when the platform bypasses the BL1/BL32 (SP_MIN) entrypoint by
|
||||
* programming the reset address do we need to initialied the SCTLR.
|
||||
* In other cases, we assume this has been taken care by the
|
||||
* entrypoint code.
|
||||
*
|
||||
* - No need to determine the type of boot, we know it is a warm boot.
|
||||
*
|
||||
* - Do not try to distinguish between primary and secondary CPUs, this
|
||||
* notion only exists for a cold boot.
|
||||
*
|
||||
* - No need to initialise the memory or the C runtime environment,
|
||||
* it has been done once and for all on the cold boot path.
|
||||
*/
|
||||
el3_entrypoint_common \
|
||||
_init_sctlr=PROGRAMMABLE_RESET_ADDRESS \
|
||||
_warm_boot_mailbox=0 \
|
||||
_secondary_cold_boot=0 \
|
||||
_init_memory=0 \
|
||||
_init_c_runtime=0 \
|
||||
_exception_vectors=sp_min_vector_table \
|
||||
_pie_fixup_size=0
|
||||
|
||||
/*
|
||||
* We're about to enable MMU and participate in PSCI state coordination.
|
||||
*
|
||||
* The PSCI implementation invokes platform routines that enable CPUs to
|
||||
* participate in coherency. On a system where CPUs are not
|
||||
* cache-coherent without appropriate platform specific programming,
|
||||
* having caches enabled until such time might lead to coherency issues
|
||||
* (resulting from stale data getting speculatively fetched, among
|
||||
* others). Therefore we keep data caches disabled even after enabling
|
||||
* the MMU for such platforms.
|
||||
*
|
||||
* On systems with hardware-assisted coherency, or on single cluster
|
||||
* platforms, such platform specific programming is not required to
|
||||
* enter coherency (as CPUs already are); and there's no reason to have
|
||||
* caches disabled either.
|
||||
*/
|
||||
#if HW_ASSISTED_COHERENCY || WARMBOOT_ENABLE_DCACHE_EARLY
|
||||
mov r0, #0
|
||||
#else
|
||||
mov r0, #DISABLE_DCACHE
|
||||
#endif
|
||||
bl bl32_plat_enable_mmu
|
||||
|
||||
#if SP_MIN_WITH_SECURE_FIQ
|
||||
route_fiq_to_sp_min r0
|
||||
#endif
|
||||
|
||||
bl sp_min_warm_boot
|
||||
bl smc_get_next_ctx
|
||||
/* r0 points to `smc_ctx_t` */
|
||||
/* The PSCI cpu_context registers have been copied to `smc_ctx_t` */
|
||||
|
||||
#if ENABLE_RUNTIME_INSTRUMENTATION
|
||||
/* Save smc_ctx_t */
|
||||
mov r5, r0
|
||||
|
||||
pmf_calc_timestamp_addr rt_instr_svc, RT_INSTR_EXIT_PSCI
|
||||
mov r4, r0
|
||||
|
||||
/*
|
||||
* Invalidate before updating timestamp to ensure previous timestamp
|
||||
* updates on the same cache line with caches disabled are properly
|
||||
* seen by the same core. Without the cache invalidate, the core might
|
||||
* write into a stale cache line.
|
||||
*/
|
||||
mov r1, #PMF_TS_SIZE
|
||||
bl inv_dcache_range
|
||||
|
||||
ldcopr16 r0, r1, CNTPCT_64
|
||||
strd r0, r1, [r4]
|
||||
|
||||
/* Restore smc_ctx_t */
|
||||
mov r0, r5
|
||||
#endif
|
||||
|
||||
b sp_min_exit
|
||||
endfunc sp_min_warm_entrypoint
|
||||
|
||||
/*
|
||||
* The function to restore the registers from SMC context and return
|
||||
* to the mode restored to SPSR.
|
||||
*
|
||||
* Arguments : r0 must point to the SMC context to restore from.
|
||||
*/
|
||||
func sp_min_exit
|
||||
monitor_exit
|
||||
endfunc sp_min_exit
|
||||
160
arm-trusted-firmware.t234/bl32/sp_min/sp_min.ld.S
Normal file
160
arm-trusted-firmware.t234/bl32/sp_min/sp_min.ld.S
Normal file
@@ -0,0 +1,160 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2023, Arm Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <common/bl_common.ld.h>
|
||||
#include <lib/xlat_tables/xlat_tables_defs.h>
|
||||
|
||||
OUTPUT_FORMAT(elf32-littlearm)
|
||||
OUTPUT_ARCH(arm)
|
||||
ENTRY(sp_min_vector_table)
|
||||
|
||||
MEMORY {
|
||||
RAM (rwx): ORIGIN = BL32_BASE, LENGTH = BL32_LIMIT - BL32_BASE
|
||||
}
|
||||
|
||||
#ifdef PLAT_SP_MIN_EXTRA_LD_SCRIPT
|
||||
# include <plat_sp_min.ld.S>
|
||||
#endif /* PLAT_SP_MIN_EXTRA_LD_SCRIPT */
|
||||
|
||||
SECTIONS {
|
||||
. = BL32_BASE;
|
||||
|
||||
ASSERT(. == ALIGN(PAGE_SIZE),
|
||||
"BL32_BASE address is not aligned on a page boundary.")
|
||||
|
||||
#if SEPARATE_CODE_AND_RODATA
|
||||
.text . : {
|
||||
ASSERT(. == ALIGN(PAGE_SIZE),
|
||||
".text address is not aligned on a page boundary.");
|
||||
|
||||
__TEXT_START__ = .;
|
||||
|
||||
*entrypoint.o(.text*)
|
||||
*(SORT_BY_ALIGNMENT(.text*))
|
||||
*(.vectors)
|
||||
__TEXT_END_UNALIGNED__ = .;
|
||||
|
||||
. = ALIGN(PAGE_SIZE);
|
||||
|
||||
__TEXT_END__ = .;
|
||||
} >RAM
|
||||
|
||||
/* .ARM.extab and .ARM.exidx are only added because Clang needs them */
|
||||
.ARM.extab . : {
|
||||
*(.ARM.extab* .gnu.linkonce.armextab.*)
|
||||
} >RAM
|
||||
|
||||
.ARM.exidx . : {
|
||||
*(.ARM.exidx* .gnu.linkonce.armexidx.*)
|
||||
} >RAM
|
||||
|
||||
.rodata . : {
|
||||
__RODATA_START__ = .;
|
||||
*(SORT_BY_ALIGNMENT(.rodata*))
|
||||
|
||||
RODATA_COMMON
|
||||
|
||||
. = ALIGN(8);
|
||||
|
||||
# include <lib/el3_runtime/pubsub_events.h>
|
||||
__RODATA_END_UNALIGNED__ = .;
|
||||
|
||||
. = ALIGN(PAGE_SIZE);
|
||||
|
||||
__RODATA_END__ = .;
|
||||
} >RAM
|
||||
#else /* SEPARATE_CODE_AND_RODATA */
|
||||
.ro . : {
|
||||
ASSERT(. == ALIGN(PAGE_SIZE),
|
||||
".ro address is not aligned on a page boundary.");
|
||||
|
||||
__RO_START__ = .;
|
||||
|
||||
*entrypoint.o(.text*)
|
||||
*(SORT_BY_ALIGNMENT(.text*))
|
||||
*(SORT_BY_ALIGNMENT(.rodata*))
|
||||
|
||||
RODATA_COMMON
|
||||
|
||||
. = ALIGN(8);
|
||||
|
||||
# include <lib/el3_runtime/pubsub_events.h>
|
||||
|
||||
*(.vectors)
|
||||
|
||||
__RO_END_UNALIGNED__ = .;
|
||||
|
||||
/*
|
||||
* Memory page(s) mapped to this section will be marked as device
|
||||
* memory. No other unexpected data must creep in. Ensure that the rest
|
||||
* of the current memory page is unused.
|
||||
*/
|
||||
. = ALIGN(PAGE_SIZE);
|
||||
|
||||
__RO_END__ = .;
|
||||
} >RAM
|
||||
#endif /* SEPARATE_CODE_AND_RODATA */
|
||||
|
||||
ASSERT(__CPU_OPS_END__ > __CPU_OPS_START__,
|
||||
"cpu_ops not defined for this platform.")
|
||||
|
||||
__RW_START__ = .;
|
||||
|
||||
DATA_SECTION >RAM
|
||||
RELA_SECTION >RAM
|
||||
|
||||
#ifdef BL32_PROGBITS_LIMIT
|
||||
ASSERT(. <= BL32_PROGBITS_LIMIT, "BL32 progbits has exceeded its limit.")
|
||||
#endif /* BL32_PROGBITS_LIMIT */
|
||||
|
||||
STACK_SECTION >RAM
|
||||
BSS_SECTION >RAM
|
||||
XLAT_TABLE_SECTION >RAM
|
||||
|
||||
__BSS_SIZE__ = SIZEOF(.bss);
|
||||
|
||||
#if USE_COHERENT_MEM
|
||||
/*
|
||||
* The base address of the coherent memory section must be page-aligned to
|
||||
* guarantee that the coherent data are stored on their own pages and are
|
||||
* not mixed with normal data. This is required to set up the correct
|
||||
* memory attributes for the coherent data page tables.
|
||||
*/
|
||||
.coherent_ram (NOLOAD) : ALIGN(PAGE_SIZE) {
|
||||
__COHERENT_RAM_START__ = .;
|
||||
|
||||
/*
|
||||
* Bakery locks are stored in coherent memory. Each lock's data is
|
||||
* contiguous and fully allocated by the compiler.
|
||||
*/
|
||||
*(.bakery_lock)
|
||||
*(.tzfw_coherent_mem)
|
||||
|
||||
__COHERENT_RAM_END_UNALIGNED__ = .;
|
||||
|
||||
/*
|
||||
* Memory page(s) mapped to this section will be marked as device
|
||||
* memory. No other unexpected data must creep in. Ensure that the rest
|
||||
* of the current memory page is unused.
|
||||
*/
|
||||
. = ALIGN(PAGE_SIZE);
|
||||
|
||||
__COHERENT_RAM_END__ = .;
|
||||
} >RAM
|
||||
|
||||
__COHERENT_RAM_UNALIGNED_SIZE__ =
|
||||
__COHERENT_RAM_END_UNALIGNED__ - __COHERENT_RAM_START__;
|
||||
#endif /* USE_COHERENT_MEM */
|
||||
|
||||
__RW_END__ = .;
|
||||
__BL32_END__ = .;
|
||||
|
||||
/DISCARD/ : {
|
||||
*(.dynsym .dynstr .hash .gnu.hash)
|
||||
}
|
||||
|
||||
ASSERT(. <= BL32_LIMIT, "BL32 image has exceeded its limit.")
|
||||
}
|
||||
85
arm-trusted-firmware.t234/bl32/sp_min/sp_min.mk
Normal file
85
arm-trusted-firmware.t234/bl32/sp_min/sp_min.mk
Normal file
@@ -0,0 +1,85 @@
|
||||
#
|
||||
# Copyright (c) 2016-2024, Arm Limited and Contributors. All rights reserved.
|
||||
#
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
#
|
||||
|
||||
ifneq (${ARCH}, aarch32)
|
||||
$(error SP_MIN is only supported on AArch32 platforms)
|
||||
endif
|
||||
|
||||
include lib/extensions/amu/amu.mk
|
||||
include lib/psci/psci_lib.mk
|
||||
|
||||
INCLUDES += -Iinclude/bl32/sp_min
|
||||
|
||||
BL32_SOURCES += bl32/sp_min/sp_min_main.c \
|
||||
bl32/sp_min/aarch32/entrypoint.S \
|
||||
common/runtime_svc.c \
|
||||
plat/common/aarch32/plat_sp_min_common.c \
|
||||
services/arm_arch_svc/arm_arch_svc_setup.c \
|
||||
services/std_svc/std_svc_setup.c \
|
||||
${PSCI_LIB_SOURCES}
|
||||
|
||||
ifeq (${ENABLE_PMF}, 1)
|
||||
BL32_SOURCES += services/el3/ven_el3_svc.c \
|
||||
lib/pmf/pmf_main.c
|
||||
endif
|
||||
|
||||
ifneq (${ENABLE_FEAT_AMU},0)
|
||||
BL32_SOURCES += ${AMU_SOURCES}
|
||||
endif
|
||||
|
||||
ifeq (${WORKAROUND_CVE_2017_5715},1)
|
||||
BL32_SOURCES += bl32/sp_min/wa_cve_2017_5715_bpiall.S \
|
||||
bl32/sp_min/wa_cve_2017_5715_icache_inv.S
|
||||
else
|
||||
ifeq (${WORKAROUND_CVE_2022_23960},1)
|
||||
BL32_SOURCES += bl32/sp_min/wa_cve_2017_5715_icache_inv.S
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq (${TRNG_SUPPORT},1)
|
||||
BL32_SOURCES += services/std_svc/trng/trng_main.c \
|
||||
services/std_svc/trng/trng_entropy_pool.c
|
||||
endif
|
||||
|
||||
ifeq (${ERRATA_ABI_SUPPORT}, 1)
|
||||
BL32_SOURCES += services/std_svc/errata_abi/errata_abi_main.c
|
||||
endif
|
||||
|
||||
ifneq (${ENABLE_SYS_REG_TRACE_FOR_NS},0)
|
||||
BL32_SOURCES += lib/extensions/sys_reg_trace/aarch32/sys_reg_trace.c
|
||||
endif
|
||||
|
||||
ifneq (${ENABLE_TRF_FOR_NS},0)
|
||||
BL32_SOURCES += lib/extensions/trf/aarch32/trf.c
|
||||
endif
|
||||
|
||||
BL32_DEFAULT_LINKER_SCRIPT_SOURCE := bl32/sp_min/sp_min.ld.S
|
||||
|
||||
ifeq ($($(ARCH)-ld-id),gnu-gcc)
|
||||
BL32_LDFLAGS += -Wl,--sort-section=alignment
|
||||
else ifneq ($(filter llvm-lld gnu-ld,$($(ARCH)-ld-id)),)
|
||||
BL32_LDFLAGS += --sort-section=alignment
|
||||
endif
|
||||
|
||||
# Include the platform-specific SP_MIN Makefile
|
||||
# If no platform-specific SP_MIN Makefile exists, it means SP_MIN is not supported
|
||||
# on this platform.
|
||||
SP_MIN_PLAT_MAKEFILE := $(wildcard ${PLAT_DIR}/sp_min/sp_min-${PLAT}.mk)
|
||||
ifeq (,${SP_MIN_PLAT_MAKEFILE})
|
||||
$(error SP_MIN is not supported on platform ${PLAT})
|
||||
else
|
||||
include ${SP_MIN_PLAT_MAKEFILE}
|
||||
endif
|
||||
|
||||
RESET_TO_SP_MIN := 0
|
||||
$(eval $(call add_define,RESET_TO_SP_MIN))
|
||||
$(eval $(call assert_boolean,RESET_TO_SP_MIN))
|
||||
|
||||
# Flag to allow SP_MIN to handle FIQ interrupts in monitor mode. The platform
|
||||
# port is free to override this value. It is default disabled.
|
||||
SP_MIN_WITH_SECURE_FIQ ?= 0
|
||||
$(eval $(call add_define,SP_MIN_WITH_SECURE_FIQ))
|
||||
$(eval $(call assert_boolean,SP_MIN_WITH_SECURE_FIQ))
|
||||
265
arm-trusted-firmware.t234/bl32/sp_min/sp_min_main.c
Normal file
265
arm-trusted-firmware.t234/bl32/sp_min/sp_min_main.c
Normal file
@@ -0,0 +1,265 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2024, Arm Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <assert.h>
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <platform_def.h>
|
||||
|
||||
#include <arch.h>
|
||||
#include <arch_helpers.h>
|
||||
#include <common/bl_common.h>
|
||||
#include <common/build_message.h>
|
||||
#include <common/debug.h>
|
||||
#include <common/runtime_svc.h>
|
||||
#include <context.h>
|
||||
#include <drivers/console.h>
|
||||
#include <lib/el3_runtime/context_mgmt.h>
|
||||
#include <lib/pmf/pmf.h>
|
||||
#include <lib/psci/psci.h>
|
||||
#include <lib/runtime_instr.h>
|
||||
#include <lib/utils.h>
|
||||
#include <plat/common/platform.h>
|
||||
#include <platform_sp_min.h>
|
||||
#include <services/std_svc.h>
|
||||
#include <smccc_helpers.h>
|
||||
|
||||
#include "sp_min_private.h"
|
||||
|
||||
#if ENABLE_RUNTIME_INSTRUMENTATION
|
||||
PMF_REGISTER_SERVICE_SMC(rt_instr_svc, PMF_RT_INSTR_SVC_ID,
|
||||
RT_INSTR_TOTAL_IDS, PMF_STORE_ENABLE)
|
||||
#endif
|
||||
|
||||
/* Pointers to per-core cpu contexts */
|
||||
static void *sp_min_cpu_ctx_ptr[PLATFORM_CORE_COUNT];
|
||||
|
||||
/* SP_MIN only stores the non secure smc context */
|
||||
static smc_ctx_t sp_min_smc_context[PLATFORM_CORE_COUNT];
|
||||
|
||||
/******************************************************************************
|
||||
* Define the smccc helper library APIs
|
||||
*****************************************************************************/
|
||||
void *smc_get_ctx(unsigned int security_state)
|
||||
{
|
||||
assert(security_state == NON_SECURE);
|
||||
return &sp_min_smc_context[plat_my_core_pos()];
|
||||
}
|
||||
|
||||
void smc_set_next_ctx(unsigned int security_state)
|
||||
{
|
||||
assert(security_state == NON_SECURE);
|
||||
/* SP_MIN stores only non secure smc context. Nothing to do here */
|
||||
}
|
||||
|
||||
void *smc_get_next_ctx(void)
|
||||
{
|
||||
return &sp_min_smc_context[plat_my_core_pos()];
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* This function returns a pointer to the most recent 'cpu_context' structure
|
||||
* for the calling CPU that was set as the context for the specified security
|
||||
* state. NULL is returned if no such structure has been specified.
|
||||
******************************************************************************/
|
||||
void *cm_get_context(uint32_t security_state)
|
||||
{
|
||||
assert(security_state == NON_SECURE);
|
||||
return sp_min_cpu_ctx_ptr[plat_my_core_pos()];
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* This function sets the pointer to the current 'cpu_context' structure for the
|
||||
* specified security state for the calling CPU
|
||||
******************************************************************************/
|
||||
void cm_set_context(void *context, uint32_t security_state)
|
||||
{
|
||||
assert(security_state == NON_SECURE);
|
||||
sp_min_cpu_ctx_ptr[plat_my_core_pos()] = context;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* This function returns a pointer to the most recent 'cpu_context' structure
|
||||
* for the CPU identified by `cpu_idx` that was set as the context for the
|
||||
* specified security state. NULL is returned if no such structure has been
|
||||
* specified.
|
||||
******************************************************************************/
|
||||
void *cm_get_context_by_index(unsigned int cpu_idx,
|
||||
unsigned int security_state)
|
||||
{
|
||||
assert(security_state == NON_SECURE);
|
||||
return sp_min_cpu_ctx_ptr[cpu_idx];
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* This function sets the pointer to the current 'cpu_context' structure for the
|
||||
* specified security state for the CPU identified by CPU index.
|
||||
******************************************************************************/
|
||||
void cm_set_context_by_index(unsigned int cpu_idx, void *context,
|
||||
unsigned int security_state)
|
||||
{
|
||||
assert(security_state == NON_SECURE);
|
||||
sp_min_cpu_ctx_ptr[cpu_idx] = context;
|
||||
}
|
||||
|
||||
static void copy_cpu_ctx_to_smc_stx(const regs_t *cpu_reg_ctx,
|
||||
smc_ctx_t *next_smc_ctx)
|
||||
{
|
||||
next_smc_ctx->r0 = read_ctx_reg(cpu_reg_ctx, CTX_GPREG_R0);
|
||||
next_smc_ctx->r1 = read_ctx_reg(cpu_reg_ctx, CTX_GPREG_R1);
|
||||
next_smc_ctx->r2 = read_ctx_reg(cpu_reg_ctx, CTX_GPREG_R2);
|
||||
next_smc_ctx->lr_mon = read_ctx_reg(cpu_reg_ctx, CTX_LR);
|
||||
next_smc_ctx->spsr_mon = read_ctx_reg(cpu_reg_ctx, CTX_SPSR);
|
||||
next_smc_ctx->scr = read_ctx_reg(cpu_reg_ctx, CTX_SCR);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* This function invokes the PSCI library interface to initialize the
|
||||
* non secure cpu context and copies the relevant cpu context register values
|
||||
* to smc context. These registers will get programmed during `smc_exit`.
|
||||
******************************************************************************/
|
||||
static void sp_min_prepare_next_image_entry(void)
|
||||
{
|
||||
entry_point_info_t *next_image_info;
|
||||
cpu_context_t *ctx = cm_get_context(NON_SECURE);
|
||||
u_register_t ns_sctlr;
|
||||
|
||||
/* Program system registers to proceed to non-secure */
|
||||
next_image_info = sp_min_plat_get_bl33_ep_info();
|
||||
assert(next_image_info);
|
||||
assert(NON_SECURE == GET_SECURITY_STATE(next_image_info->h.attr));
|
||||
|
||||
INFO("SP_MIN: Preparing exit to normal world\n");
|
||||
print_entry_point_info(next_image_info);
|
||||
|
||||
psci_prepare_next_non_secure_ctx(next_image_info);
|
||||
smc_set_next_ctx(NON_SECURE);
|
||||
|
||||
/* Copy r0, lr and spsr from cpu context to SMC context */
|
||||
copy_cpu_ctx_to_smc_stx(get_regs_ctx(cm_get_context(NON_SECURE)),
|
||||
smc_get_next_ctx());
|
||||
|
||||
/* Temporarily set the NS bit to access NS SCTLR */
|
||||
write_scr(read_scr() | SCR_NS_BIT);
|
||||
isb();
|
||||
ns_sctlr = read_ctx_reg(get_regs_ctx(ctx), CTX_NS_SCTLR);
|
||||
write_sctlr(ns_sctlr);
|
||||
isb();
|
||||
|
||||
write_scr(read_scr() & ~SCR_NS_BIT);
|
||||
isb();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
* Implement the ARM Standard Service function to get arguments for a
|
||||
* particular service.
|
||||
*****************************************************************************/
|
||||
uintptr_t get_arm_std_svc_args(unsigned int svc_mask)
|
||||
{
|
||||
/* Setup the arguments for PSCI Library */
|
||||
DEFINE_STATIC_PSCI_LIB_ARGS_V1(psci_args, sp_min_warm_entrypoint);
|
||||
|
||||
/* PSCI is the only ARM Standard Service implemented */
|
||||
assert(svc_mask == PSCI_FID_MASK);
|
||||
|
||||
return (uintptr_t)&psci_args;
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
* The SP_MIN setup function. Calls platforms init functions
|
||||
*****************************************************************************/
|
||||
void sp_min_setup(u_register_t arg0, u_register_t arg1, u_register_t arg2,
|
||||
u_register_t arg3)
|
||||
{
|
||||
/* Enable early console if EARLY_CONSOLE flag is enabled */
|
||||
plat_setup_early_console();
|
||||
|
||||
/* Perform early platform-specific setup */
|
||||
sp_min_early_platform_setup2(arg0, arg1, arg2, arg3);
|
||||
sp_min_plat_arch_setup();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
* The SP_MIN main function. Do the platform and PSCI Library setup. Also
|
||||
* initialize the runtime service framework.
|
||||
*****************************************************************************/
|
||||
void sp_min_main(void)
|
||||
{
|
||||
NOTICE("SP_MIN: %s\n", build_version_string);
|
||||
NOTICE("SP_MIN: %s\n", build_message);
|
||||
|
||||
/* Perform the SP_MIN platform setup */
|
||||
sp_min_platform_setup();
|
||||
|
||||
/* Initialize the runtime services e.g. psci */
|
||||
INFO("SP_MIN: Initializing runtime services\n");
|
||||
runtime_svc_init();
|
||||
|
||||
/*
|
||||
* We are ready to enter the next EL. Prepare entry into the image
|
||||
* corresponding to the desired security state after the next ERET.
|
||||
*/
|
||||
sp_min_prepare_next_image_entry();
|
||||
|
||||
/*
|
||||
* Perform any platform specific runtime setup prior to cold boot exit
|
||||
* from SP_MIN.
|
||||
*/
|
||||
sp_min_plat_runtime_setup();
|
||||
|
||||
console_flush();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
* This function is invoked during warm boot. Invoke the PSCI library
|
||||
* warm boot entry point which takes care of Architectural and platform setup/
|
||||
* restore. Copy the relevant cpu_context register values to smc context which
|
||||
* will get programmed during `smc_exit`.
|
||||
*****************************************************************************/
|
||||
void sp_min_warm_boot(void)
|
||||
{
|
||||
smc_ctx_t *next_smc_ctx;
|
||||
cpu_context_t *ctx = cm_get_context(NON_SECURE);
|
||||
u_register_t ns_sctlr;
|
||||
|
||||
psci_warmboot_entrypoint();
|
||||
|
||||
smc_set_next_ctx(NON_SECURE);
|
||||
|
||||
next_smc_ctx = smc_get_next_ctx();
|
||||
zeromem(next_smc_ctx, sizeof(smc_ctx_t));
|
||||
|
||||
copy_cpu_ctx_to_smc_stx(get_regs_ctx(cm_get_context(NON_SECURE)),
|
||||
next_smc_ctx);
|
||||
|
||||
/* Temporarily set the NS bit to access NS SCTLR */
|
||||
write_scr(read_scr() | SCR_NS_BIT);
|
||||
isb();
|
||||
ns_sctlr = read_ctx_reg(get_regs_ctx(ctx), CTX_NS_SCTLR);
|
||||
write_sctlr(ns_sctlr);
|
||||
isb();
|
||||
|
||||
write_scr(read_scr() & ~SCR_NS_BIT);
|
||||
isb();
|
||||
}
|
||||
|
||||
#if SP_MIN_WITH_SECURE_FIQ
|
||||
/******************************************************************************
|
||||
* This function is invoked on secure interrupts. By construction of the
|
||||
* SP_MIN, secure interrupts can only be handled when core executes in non
|
||||
* secure state.
|
||||
*****************************************************************************/
|
||||
void sp_min_fiq(void)
|
||||
{
|
||||
uint32_t id;
|
||||
|
||||
id = plat_ic_acknowledge_interrupt();
|
||||
sp_min_plat_fiq_handler(id);
|
||||
plat_ic_end_of_interrupt(id);
|
||||
}
|
||||
#endif /* SP_MIN_WITH_SECURE_FIQ */
|
||||
18
arm-trusted-firmware.t234/bl32/sp_min/sp_min_private.h
Normal file
18
arm-trusted-firmware.t234/bl32/sp_min/sp_min_private.h
Normal file
@@ -0,0 +1,18 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2024, Arm Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#ifndef SP_MIN_PRIVATE_H
|
||||
#define SP_MIN_PRIVATE_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
void sp_min_setup(u_register_t arg0, u_register_t arg1, u_register_t arg2,
|
||||
u_register_t arg3);
|
||||
void sp_min_main(void);
|
||||
void sp_min_warm_boot(void);
|
||||
void sp_min_fiq(void);
|
||||
|
||||
#endif /* SP_MIN_PRIVATE_H */
|
||||
@@ -0,0 +1,74 @@
|
||||
/*
|
||||
* Copyright (c) 2018, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <asm_macros.S>
|
||||
|
||||
.globl wa_cve_2017_5715_bpiall_vbar
|
||||
|
||||
vector_base wa_cve_2017_5715_bpiall_vbar
|
||||
/* We encode the exception entry in the bottom 3 bits of SP */
|
||||
add sp, sp, #1 /* Reset: 0b111 */
|
||||
add sp, sp, #1 /* Undef: 0b110 */
|
||||
add sp, sp, #1 /* Syscall: 0b101 */
|
||||
add sp, sp, #1 /* Prefetch abort: 0b100 */
|
||||
add sp, sp, #1 /* Data abort: 0b011 */
|
||||
add sp, sp, #1 /* Reserved: 0b010 */
|
||||
add sp, sp, #1 /* IRQ: 0b001 */
|
||||
nop /* FIQ: 0b000 */
|
||||
|
||||
/*
|
||||
* Invalidate the branch predictor, `r0` is a dummy register
|
||||
* and is unused.
|
||||
*/
|
||||
stcopr r0, BPIALL
|
||||
isb
|
||||
|
||||
/*
|
||||
* As we cannot use any temporary registers and cannot
|
||||
* clobber SP, we can decode the exception entry using
|
||||
* an unrolled binary search.
|
||||
*
|
||||
* Note, if this code is re-used by other secure payloads,
|
||||
* the below exception entry vectors must be changed to
|
||||
* the vectors specific to that secure payload.
|
||||
*/
|
||||
|
||||
tst sp, #4
|
||||
bne 1f
|
||||
|
||||
tst sp, #2
|
||||
bne 3f
|
||||
|
||||
/* Expected encoding: 0x1 and 0x0 */
|
||||
tst sp, #1
|
||||
/* Restore original value of SP by clearing the bottom 3 bits */
|
||||
bic sp, sp, #0x7
|
||||
bne plat_panic_handler /* IRQ */
|
||||
b sp_min_handle_fiq /* FIQ */
|
||||
|
||||
1:
|
||||
tst sp, #2
|
||||
bne 2f
|
||||
|
||||
/* Expected encoding: 0x4 and 0x5 */
|
||||
tst sp, #1
|
||||
bic sp, sp, #0x7
|
||||
bne sp_min_handle_smc /* Syscall */
|
||||
b plat_panic_handler /* Prefetch abort */
|
||||
|
||||
2:
|
||||
/* Expected encoding: 0x7 and 0x6 */
|
||||
tst sp, #1
|
||||
bic sp, sp, #0x7
|
||||
bne sp_min_entrypoint /* Reset */
|
||||
b plat_panic_handler /* Undef */
|
||||
|
||||
3:
|
||||
/* Expected encoding: 0x2 and 0x3 */
|
||||
tst sp, #1
|
||||
bic sp, sp, #0x7
|
||||
bne plat_panic_handler /* Data abort */
|
||||
b plat_panic_handler /* Reserved */
|
||||
@@ -0,0 +1,75 @@
|
||||
/*
|
||||
* Copyright (c) 2018, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <asm_macros.S>
|
||||
|
||||
.globl wa_cve_2017_5715_icache_inv_vbar
|
||||
|
||||
vector_base wa_cve_2017_5715_icache_inv_vbar
|
||||
/* We encode the exception entry in the bottom 3 bits of SP */
|
||||
add sp, sp, #1 /* Reset: 0b111 */
|
||||
add sp, sp, #1 /* Undef: 0b110 */
|
||||
add sp, sp, #1 /* Syscall: 0b101 */
|
||||
add sp, sp, #1 /* Prefetch abort: 0b100 */
|
||||
add sp, sp, #1 /* Data abort: 0b011 */
|
||||
add sp, sp, #1 /* Reserved: 0b010 */
|
||||
add sp, sp, #1 /* IRQ: 0b001 */
|
||||
nop /* FIQ: 0b000 */
|
||||
|
||||
/*
|
||||
* Invalidate the instruction cache, which we assume also
|
||||
* invalidates the branch predictor. This may depend on
|
||||
* other CPU specific changes (e.g. an ACTLR setting).
|
||||
*/
|
||||
stcopr r0, ICIALLU
|
||||
isb
|
||||
|
||||
/*
|
||||
* As we cannot use any temporary registers and cannot
|
||||
* clobber SP, we can decode the exception entry using
|
||||
* an unrolled binary search.
|
||||
*
|
||||
* Note, if this code is re-used by other secure payloads,
|
||||
* the below exception entry vectors must be changed to
|
||||
* the vectors specific to that secure payload.
|
||||
*/
|
||||
|
||||
tst sp, #4
|
||||
bne 1f
|
||||
|
||||
tst sp, #2
|
||||
bne 3f
|
||||
|
||||
/* Expected encoding: 0x1 and 0x0 */
|
||||
tst sp, #1
|
||||
/* Restore original value of SP by clearing the bottom 3 bits */
|
||||
bic sp, sp, #0x7
|
||||
bne plat_panic_handler /* IRQ */
|
||||
b sp_min_handle_fiq /* FIQ */
|
||||
|
||||
1:
|
||||
/* Expected encoding: 0x4 and 0x5 */
|
||||
tst sp, #2
|
||||
bne 2f
|
||||
|
||||
tst sp, #1
|
||||
bic sp, sp, #0x7
|
||||
bne sp_min_handle_smc /* Syscall */
|
||||
b plat_panic_handler /* Prefetch abort */
|
||||
|
||||
2:
|
||||
/* Expected encoding: 0x7 and 0x6 */
|
||||
tst sp, #1
|
||||
bic sp, sp, #0x7
|
||||
bne sp_min_entrypoint /* Reset */
|
||||
b plat_panic_handler /* Undef */
|
||||
|
||||
3:
|
||||
/* Expected encoding: 0x2 and 0x3 */
|
||||
tst sp, #1
|
||||
bic sp, sp, #0x7
|
||||
bne plat_panic_handler /* Data abort */
|
||||
b plat_panic_handler /* Reserved */
|
||||
489
arm-trusted-firmware.t234/bl32/tsp/aarch64/tsp_entrypoint.S
Normal file
489
arm-trusted-firmware.t234/bl32/tsp/aarch64/tsp_entrypoint.S
Normal file
@@ -0,0 +1,489 @@
|
||||
/*
|
||||
* Copyright (c) 2013-2022, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <platform_def.h>
|
||||
|
||||
#include <arch.h>
|
||||
#include <asm_macros.S>
|
||||
#include <bl32/tsp/tsp.h>
|
||||
#include <lib/xlat_tables/xlat_tables_defs.h>
|
||||
#include <smccc_helpers.h>
|
||||
|
||||
#include "../tsp_private.h"
|
||||
|
||||
|
||||
.globl tsp_entrypoint
|
||||
.globl tsp_vector_table
|
||||
#if SPMC_AT_EL3
|
||||
.globl tsp_cpu_on_entry
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Populate the params in x0-x7 from the pointer
|
||||
* to the smc args structure in x0.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
.macro restore_args_call_smc
|
||||
ldp x6, x7, [x0, #SMC_ARG6]
|
||||
ldp x4, x5, [x0, #SMC_ARG4]
|
||||
ldp x2, x3, [x0, #SMC_ARG2]
|
||||
ldp x0, x1, [x0, #SMC_ARG0]
|
||||
smc #0
|
||||
.endm
|
||||
|
||||
.macro save_eret_context reg1 reg2
|
||||
mrs \reg1, elr_el1
|
||||
mrs \reg2, spsr_el1
|
||||
stp \reg1, \reg2, [sp, #-0x10]!
|
||||
stp x30, x18, [sp, #-0x10]!
|
||||
.endm
|
||||
|
||||
.macro restore_eret_context reg1 reg2
|
||||
ldp x30, x18, [sp], #0x10
|
||||
ldp \reg1, \reg2, [sp], #0x10
|
||||
msr elr_el1, \reg1
|
||||
msr spsr_el1, \reg2
|
||||
.endm
|
||||
|
||||
func tsp_entrypoint _align=3
|
||||
|
||||
#if ENABLE_PIE
|
||||
/*
|
||||
* ------------------------------------------------------------
|
||||
* If PIE is enabled fixup the Global descriptor Table only
|
||||
* once during primary core cold boot path.
|
||||
*
|
||||
* Compile time base address, required for fixup, is calculated
|
||||
* using "pie_fixup" label present within first page.
|
||||
* ------------------------------------------------------------
|
||||
*/
|
||||
pie_fixup:
|
||||
ldr x0, =pie_fixup
|
||||
and x0, x0, #~(PAGE_SIZE_MASK)
|
||||
mov_imm x1, (BL32_LIMIT - BL32_BASE)
|
||||
add x1, x1, x0
|
||||
bl fixup_gdt_reloc
|
||||
#endif /* ENABLE_PIE */
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Set the exception vector to something sane.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
adr x0, tsp_exceptions
|
||||
msr vbar_el1, x0
|
||||
isb
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Enable the SError interrupt now that the
|
||||
* exception vectors have been setup.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
msr daifclr, #DAIF_ABT_BIT
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Enable the instruction cache, stack pointer
|
||||
* and data access alignment checks and disable
|
||||
* speculative loads.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
mov x1, #(SCTLR_I_BIT | SCTLR_A_BIT | SCTLR_SA_BIT)
|
||||
mrs x0, sctlr_el1
|
||||
orr x0, x0, x1
|
||||
bic x0, x0, #SCTLR_DSSBS_BIT
|
||||
msr sctlr_el1, x0
|
||||
isb
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Invalidate the RW memory used by the BL32
|
||||
* image. This includes the data and NOBITS
|
||||
* sections. This is done to safeguard against
|
||||
* possible corruption of this memory by dirty
|
||||
* cache lines in a system cache as a result of
|
||||
* use by an earlier boot loader stage. If PIE
|
||||
* is enabled however, RO sections including the
|
||||
* GOT may be modified during pie fixup.
|
||||
* Therefore, to be on the safe side, invalidate
|
||||
* the entire image region if PIE is enabled.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
#if ENABLE_PIE
|
||||
#if SEPARATE_CODE_AND_RODATA
|
||||
adrp x0, __TEXT_START__
|
||||
add x0, x0, :lo12:__TEXT_START__
|
||||
#else
|
||||
adrp x0, __RO_START__
|
||||
add x0, x0, :lo12:__RO_START__
|
||||
#endif /* SEPARATE_CODE_AND_RODATA */
|
||||
#else
|
||||
adrp x0, __RW_START__
|
||||
add x0, x0, :lo12:__RW_START__
|
||||
#endif /* ENABLE_PIE */
|
||||
adrp x1, __RW_END__
|
||||
add x1, x1, :lo12:__RW_END__
|
||||
sub x1, x1, x0
|
||||
bl inv_dcache_range
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Zero out NOBITS sections. There are 2 of them:
|
||||
* - the .bss section;
|
||||
* - the coherent memory section.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
adrp x0, __BSS_START__
|
||||
add x0, x0, :lo12:__BSS_START__
|
||||
adrp x1, __BSS_END__
|
||||
add x1, x1, :lo12:__BSS_END__
|
||||
sub x1, x1, x0
|
||||
bl zeromem
|
||||
|
||||
#if USE_COHERENT_MEM
|
||||
adrp x0, __COHERENT_RAM_START__
|
||||
add x0, x0, :lo12:__COHERENT_RAM_START__
|
||||
adrp x1, __COHERENT_RAM_END_UNALIGNED__
|
||||
add x1, x1, :lo12:__COHERENT_RAM_END_UNALIGNED__
|
||||
sub x1, x1, x0
|
||||
bl zeromem
|
||||
#endif
|
||||
|
||||
/* --------------------------------------------
|
||||
* Allocate a stack whose memory will be marked
|
||||
* as Normal-IS-WBWA when the MMU is enabled.
|
||||
* There is no risk of reading stale stack
|
||||
* memory after enabling the MMU as only the
|
||||
* primary cpu is running at the moment.
|
||||
* --------------------------------------------
|
||||
*/
|
||||
bl plat_set_my_stack
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Initialize the stack protector canary before
|
||||
* any C code is called.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
#if STACK_PROTECTOR_ENABLED
|
||||
bl update_stack_protector_canary
|
||||
#endif
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Perform TSP setup
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
bl tsp_setup
|
||||
|
||||
#if ENABLE_PAUTH
|
||||
/* ---------------------------------------------
|
||||
* Program APIAKey_EL1
|
||||
* and enable pointer authentication
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
bl pauth_init_enable_el1
|
||||
#endif /* ENABLE_PAUTH */
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Jump to main function.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
bl tsp_main
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Tell TSPD that we are done initialising
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
mov x1, x0
|
||||
mov x0, #TSP_ENTRY_DONE
|
||||
smc #0
|
||||
|
||||
tsp_entrypoint_panic:
|
||||
b tsp_entrypoint_panic
|
||||
endfunc tsp_entrypoint
|
||||
|
||||
|
||||
/* -------------------------------------------
|
||||
* Table of entrypoint vectors provided to the
|
||||
* TSPD for the various entrypoints
|
||||
* -------------------------------------------
|
||||
*/
|
||||
vector_base tsp_vector_table
|
||||
b tsp_yield_smc_entry
|
||||
b tsp_fast_smc_entry
|
||||
b tsp_cpu_on_entry
|
||||
b tsp_cpu_off_entry
|
||||
b tsp_cpu_resume_entry
|
||||
b tsp_cpu_suspend_entry
|
||||
b tsp_sel1_intr_entry
|
||||
b tsp_system_off_entry
|
||||
b tsp_system_reset_entry
|
||||
b tsp_abort_yield_smc_entry
|
||||
|
||||
/*---------------------------------------------
|
||||
* This entrypoint is used by the TSPD when this
|
||||
* cpu is to be turned off through a CPU_OFF
|
||||
* psci call to ask the TSP to perform any
|
||||
* bookeeping necessary. In the current
|
||||
* implementation, the TSPD expects the TSP to
|
||||
* re-initialise its state so nothing is done
|
||||
* here except for acknowledging the request.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
func tsp_cpu_off_entry
|
||||
bl tsp_cpu_off_main
|
||||
restore_args_call_smc
|
||||
endfunc tsp_cpu_off_entry
|
||||
|
||||
/*---------------------------------------------
|
||||
* This entrypoint is used by the TSPD when the
|
||||
* system is about to be switched off (through
|
||||
* a SYSTEM_OFF psci call) to ask the TSP to
|
||||
* perform any necessary bookkeeping.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
func tsp_system_off_entry
|
||||
bl tsp_system_off_main
|
||||
restore_args_call_smc
|
||||
endfunc tsp_system_off_entry
|
||||
|
||||
/*---------------------------------------------
|
||||
* This entrypoint is used by the TSPD when the
|
||||
* system is about to be reset (through a
|
||||
* SYSTEM_RESET psci call) to ask the TSP to
|
||||
* perform any necessary bookkeeping.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
func tsp_system_reset_entry
|
||||
bl tsp_system_reset_main
|
||||
restore_args_call_smc
|
||||
endfunc tsp_system_reset_entry
|
||||
|
||||
/*---------------------------------------------
|
||||
* This entrypoint is used by the TSPD when this
|
||||
* cpu is turned on using a CPU_ON psci call to
|
||||
* ask the TSP to initialise itself i.e. setup
|
||||
* the mmu, stacks etc. Minimal architectural
|
||||
* state will be initialised by the TSPD when
|
||||
* this function is entered i.e. Caches and MMU
|
||||
* will be turned off, the execution state
|
||||
* will be aarch64 and exceptions masked.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
func tsp_cpu_on_entry
|
||||
/* ---------------------------------------------
|
||||
* Set the exception vector to something sane.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
adr x0, tsp_exceptions
|
||||
msr vbar_el1, x0
|
||||
isb
|
||||
|
||||
/* Enable the SError interrupt */
|
||||
msr daifclr, #DAIF_ABT_BIT
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Enable the instruction cache, stack pointer
|
||||
* and data access alignment checks
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
mov x1, #(SCTLR_I_BIT | SCTLR_A_BIT | SCTLR_SA_BIT)
|
||||
mrs x0, sctlr_el1
|
||||
orr x0, x0, x1
|
||||
msr sctlr_el1, x0
|
||||
isb
|
||||
|
||||
/* --------------------------------------------
|
||||
* Give ourselves a stack whose memory will be
|
||||
* marked as Normal-IS-WBWA when the MMU is
|
||||
* enabled.
|
||||
* --------------------------------------------
|
||||
*/
|
||||
bl plat_set_my_stack
|
||||
|
||||
/* --------------------------------------------
|
||||
* Enable MMU and D-caches together.
|
||||
* --------------------------------------------
|
||||
*/
|
||||
mov x0, #0
|
||||
bl bl32_plat_enable_mmu
|
||||
|
||||
#if ENABLE_PAUTH
|
||||
/* ---------------------------------------------
|
||||
* Program APIAKey_EL1
|
||||
* and enable pointer authentication
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
bl pauth_init_enable_el1
|
||||
#endif /* ENABLE_PAUTH */
|
||||
|
||||
/* ---------------------------------------------
|
||||
* Enter C runtime to perform any remaining
|
||||
* book keeping
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
bl tsp_cpu_on_main
|
||||
restore_args_call_smc
|
||||
|
||||
/* Should never reach here */
|
||||
tsp_cpu_on_entry_panic:
|
||||
b tsp_cpu_on_entry_panic
|
||||
endfunc tsp_cpu_on_entry
|
||||
|
||||
/*---------------------------------------------
|
||||
* This entrypoint is used by the TSPD when this
|
||||
* cpu is to be suspended through a CPU_SUSPEND
|
||||
* psci call to ask the TSP to perform any
|
||||
* bookeeping necessary. In the current
|
||||
* implementation, the TSPD saves and restores
|
||||
* the EL1 state.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
func tsp_cpu_suspend_entry
|
||||
bl tsp_cpu_suspend_main
|
||||
restore_args_call_smc
|
||||
endfunc tsp_cpu_suspend_entry
|
||||
|
||||
/*-------------------------------------------------
|
||||
* This entrypoint is used by the TSPD to pass
|
||||
* control for `synchronously` handling a S-EL1
|
||||
* Interrupt which was triggered while executing
|
||||
* in normal world. 'x0' contains a magic number
|
||||
* which indicates this. TSPD expects control to
|
||||
* be handed back at the end of interrupt
|
||||
* processing. This is done through an SMC.
|
||||
* The handover agreement is:
|
||||
*
|
||||
* 1. PSTATE.DAIF are set upon entry. 'x1' has
|
||||
* the ELR_EL3 from the non-secure state.
|
||||
* 2. TSP has to preserve the callee saved
|
||||
* general purpose registers, SP_EL1/EL0 and
|
||||
* LR.
|
||||
* 3. TSP has to preserve the system and vfp
|
||||
* registers (if applicable).
|
||||
* 4. TSP can use 'x0-x18' to enable its C
|
||||
* runtime.
|
||||
* 5. TSP returns to TSPD using an SMC with
|
||||
* 'x0' = TSP_HANDLED_S_EL1_INTR
|
||||
* ------------------------------------------------
|
||||
*/
|
||||
func tsp_sel1_intr_entry
|
||||
#if DEBUG
|
||||
mov_imm x2, TSP_HANDLE_SEL1_INTR_AND_RETURN
|
||||
cmp x0, x2
|
||||
b.ne tsp_sel1_int_entry_panic
|
||||
#endif
|
||||
/*-------------------------------------------------
|
||||
* Save any previous context needed to perform
|
||||
* an exception return from S-EL1 e.g. context
|
||||
* from a previous Non secure Interrupt.
|
||||
* Update statistics and handle the S-EL1
|
||||
* interrupt before returning to the TSPD.
|
||||
* IRQ/FIQs are not enabled since that will
|
||||
* complicate the implementation. Execution
|
||||
* will be transferred back to the normal world
|
||||
* in any case. The handler can return 0
|
||||
* if the interrupt was handled or TSP_PREEMPTED
|
||||
* if the expected interrupt was preempted
|
||||
* by an interrupt that should be handled in EL3
|
||||
* e.g. Group 0 interrupt in GICv3. In both
|
||||
* the cases switch to EL3 using SMC with id
|
||||
* TSP_HANDLED_S_EL1_INTR. Any other return value
|
||||
* from the handler will result in panic.
|
||||
* ------------------------------------------------
|
||||
*/
|
||||
save_eret_context x2 x3
|
||||
bl tsp_update_sync_sel1_intr_stats
|
||||
bl tsp_common_int_handler
|
||||
/* Check if the S-EL1 interrupt has been handled */
|
||||
cbnz x0, tsp_sel1_intr_check_preemption
|
||||
b tsp_sel1_intr_return
|
||||
tsp_sel1_intr_check_preemption:
|
||||
/* Check if the S-EL1 interrupt has been preempted */
|
||||
mov_imm x1, TSP_PREEMPTED
|
||||
cmp x0, x1
|
||||
b.ne tsp_sel1_int_entry_panic
|
||||
tsp_sel1_intr_return:
|
||||
mov_imm x0, TSP_HANDLED_S_EL1_INTR
|
||||
restore_eret_context x2 x3
|
||||
smc #0
|
||||
|
||||
/* Should never reach here */
|
||||
tsp_sel1_int_entry_panic:
|
||||
no_ret plat_panic_handler
|
||||
endfunc tsp_sel1_intr_entry
|
||||
|
||||
/*---------------------------------------------
|
||||
* This entrypoint is used by the TSPD when this
|
||||
* cpu resumes execution after an earlier
|
||||
* CPU_SUSPEND psci call to ask the TSP to
|
||||
* restore its saved context. In the current
|
||||
* implementation, the TSPD saves and restores
|
||||
* EL1 state so nothing is done here apart from
|
||||
* acknowledging the request.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
func tsp_cpu_resume_entry
|
||||
bl tsp_cpu_resume_main
|
||||
restore_args_call_smc
|
||||
|
||||
/* Should never reach here */
|
||||
no_ret plat_panic_handler
|
||||
endfunc tsp_cpu_resume_entry
|
||||
|
||||
/*---------------------------------------------
|
||||
* This entrypoint is used by the TSPD to ask
|
||||
* the TSP to service a fast smc request.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
func tsp_fast_smc_entry
|
||||
bl tsp_smc_handler
|
||||
restore_args_call_smc
|
||||
|
||||
/* Should never reach here */
|
||||
no_ret plat_panic_handler
|
||||
endfunc tsp_fast_smc_entry
|
||||
|
||||
/*---------------------------------------------
|
||||
* This entrypoint is used by the TSPD to ask
|
||||
* the TSP to service a Yielding SMC request.
|
||||
* We will enable preemption during execution
|
||||
* of tsp_smc_handler.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
func tsp_yield_smc_entry
|
||||
msr daifclr, #DAIF_FIQ_BIT | DAIF_IRQ_BIT
|
||||
bl tsp_smc_handler
|
||||
msr daifset, #DAIF_FIQ_BIT | DAIF_IRQ_BIT
|
||||
restore_args_call_smc
|
||||
|
||||
/* Should never reach here */
|
||||
no_ret plat_panic_handler
|
||||
endfunc tsp_yield_smc_entry
|
||||
|
||||
/*---------------------------------------------------------------------
|
||||
* This entrypoint is used by the TSPD to abort a pre-empted Yielding
|
||||
* SMC. It could be on behalf of non-secure world or because a CPU
|
||||
* suspend/CPU off request needs to abort the preempted SMC.
|
||||
* --------------------------------------------------------------------
|
||||
*/
|
||||
func tsp_abort_yield_smc_entry
|
||||
|
||||
/*
|
||||
* Exceptions masking is already done by the TSPD when entering this
|
||||
* hook so there is no need to do it here.
|
||||
*/
|
||||
|
||||
/* Reset the stack used by the pre-empted SMC */
|
||||
bl plat_set_my_stack
|
||||
|
||||
/*
|
||||
* Allow some cleanup such as releasing locks.
|
||||
*/
|
||||
bl tsp_abort_smc_handler
|
||||
|
||||
restore_args_call_smc
|
||||
|
||||
/* Should never reach here */
|
||||
bl plat_panic_handler
|
||||
endfunc tsp_abort_yield_smc_entry
|
||||
162
arm-trusted-firmware.t234/bl32/tsp/aarch64/tsp_exceptions.S
Normal file
162
arm-trusted-firmware.t234/bl32/tsp/aarch64/tsp_exceptions.S
Normal file
@@ -0,0 +1,162 @@
|
||||
/*
|
||||
* Copyright (c) 2013-2020, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <arch.h>
|
||||
#include <asm_macros.S>
|
||||
#include <bl32/tsp/tsp.h>
|
||||
#include <common/bl_common.h>
|
||||
|
||||
/* ----------------------------------------------------
|
||||
* The caller-saved registers x0-x18 and LR are saved
|
||||
* here.
|
||||
* ----------------------------------------------------
|
||||
*/
|
||||
|
||||
#define SCRATCH_REG_SIZE #(20 * 8)
|
||||
|
||||
.macro save_caller_regs_and_lr
|
||||
sub sp, sp, SCRATCH_REG_SIZE
|
||||
stp x0, x1, [sp]
|
||||
stp x2, x3, [sp, #0x10]
|
||||
stp x4, x5, [sp, #0x20]
|
||||
stp x6, x7, [sp, #0x30]
|
||||
stp x8, x9, [sp, #0x40]
|
||||
stp x10, x11, [sp, #0x50]
|
||||
stp x12, x13, [sp, #0x60]
|
||||
stp x14, x15, [sp, #0x70]
|
||||
stp x16, x17, [sp, #0x80]
|
||||
stp x18, x30, [sp, #0x90]
|
||||
.endm
|
||||
|
||||
.macro restore_caller_regs_and_lr
|
||||
ldp x0, x1, [sp]
|
||||
ldp x2, x3, [sp, #0x10]
|
||||
ldp x4, x5, [sp, #0x20]
|
||||
ldp x6, x7, [sp, #0x30]
|
||||
ldp x8, x9, [sp, #0x40]
|
||||
ldp x10, x11, [sp, #0x50]
|
||||
ldp x12, x13, [sp, #0x60]
|
||||
ldp x14, x15, [sp, #0x70]
|
||||
ldp x16, x17, [sp, #0x80]
|
||||
ldp x18, x30, [sp, #0x90]
|
||||
add sp, sp, SCRATCH_REG_SIZE
|
||||
.endm
|
||||
|
||||
/* ----------------------------------------------------
|
||||
* Common TSP interrupt handling routine
|
||||
* ----------------------------------------------------
|
||||
*/
|
||||
.macro handle_tsp_interrupt label
|
||||
/* Enable the SError interrupt */
|
||||
msr daifclr, #DAIF_ABT_BIT
|
||||
|
||||
save_caller_regs_and_lr
|
||||
bl tsp_common_int_handler
|
||||
cbz x0, interrupt_exit_\label
|
||||
|
||||
/*
|
||||
* This interrupt was not targetted to S-EL1 so send it to
|
||||
* the monitor and wait for execution to resume.
|
||||
*/
|
||||
smc #0
|
||||
interrupt_exit_\label:
|
||||
restore_caller_regs_and_lr
|
||||
exception_return
|
||||
.endm
|
||||
|
||||
.globl tsp_exceptions
|
||||
|
||||
/* -----------------------------------------------------
|
||||
* TSP exception handlers.
|
||||
* -----------------------------------------------------
|
||||
*/
|
||||
vector_base tsp_exceptions
|
||||
/* -----------------------------------------------------
|
||||
* Current EL with _sp_el0 : 0x0 - 0x200. No exceptions
|
||||
* are expected and treated as irrecoverable errors.
|
||||
* -----------------------------------------------------
|
||||
*/
|
||||
vector_entry sync_exception_sp_el0
|
||||
b plat_panic_handler
|
||||
end_vector_entry sync_exception_sp_el0
|
||||
|
||||
vector_entry irq_sp_el0
|
||||
b plat_panic_handler
|
||||
end_vector_entry irq_sp_el0
|
||||
|
||||
vector_entry fiq_sp_el0
|
||||
b plat_panic_handler
|
||||
end_vector_entry fiq_sp_el0
|
||||
|
||||
vector_entry serror_sp_el0
|
||||
b plat_panic_handler
|
||||
end_vector_entry serror_sp_el0
|
||||
|
||||
|
||||
/* -----------------------------------------------------
|
||||
* Current EL with SPx: 0x200 - 0x400. Only IRQs/FIQs
|
||||
* are expected and handled
|
||||
* -----------------------------------------------------
|
||||
*/
|
||||
vector_entry sync_exception_sp_elx
|
||||
b plat_panic_handler
|
||||
end_vector_entry sync_exception_sp_elx
|
||||
|
||||
vector_entry irq_sp_elx
|
||||
handle_tsp_interrupt irq_sp_elx
|
||||
end_vector_entry irq_sp_elx
|
||||
|
||||
vector_entry fiq_sp_elx
|
||||
handle_tsp_interrupt fiq_sp_elx
|
||||
end_vector_entry fiq_sp_elx
|
||||
|
||||
vector_entry serror_sp_elx
|
||||
b plat_panic_handler
|
||||
end_vector_entry serror_sp_elx
|
||||
|
||||
|
||||
/* -----------------------------------------------------
|
||||
* Lower EL using AArch64 : 0x400 - 0x600. No exceptions
|
||||
* are handled since TSP does not implement a lower EL
|
||||
* -----------------------------------------------------
|
||||
*/
|
||||
vector_entry sync_exception_aarch64
|
||||
b plat_panic_handler
|
||||
end_vector_entry sync_exception_aarch64
|
||||
|
||||
vector_entry irq_aarch64
|
||||
b plat_panic_handler
|
||||
end_vector_entry irq_aarch64
|
||||
|
||||
vector_entry fiq_aarch64
|
||||
b plat_panic_handler
|
||||
end_vector_entry fiq_aarch64
|
||||
|
||||
vector_entry serror_aarch64
|
||||
b plat_panic_handler
|
||||
end_vector_entry serror_aarch64
|
||||
|
||||
|
||||
/* -----------------------------------------------------
|
||||
* Lower EL using AArch32 : 0x600 - 0x800. No exceptions
|
||||
* handled since the TSP does not implement a lower EL.
|
||||
* -----------------------------------------------------
|
||||
*/
|
||||
vector_entry sync_exception_aarch32
|
||||
b plat_panic_handler
|
||||
end_vector_entry sync_exception_aarch32
|
||||
|
||||
vector_entry irq_aarch32
|
||||
b plat_panic_handler
|
||||
end_vector_entry irq_aarch32
|
||||
|
||||
vector_entry fiq_aarch32
|
||||
b plat_panic_handler
|
||||
end_vector_entry fiq_aarch32
|
||||
|
||||
vector_entry serror_aarch32
|
||||
b plat_panic_handler
|
||||
end_vector_entry serror_aarch32
|
||||
30
arm-trusted-firmware.t234/bl32/tsp/aarch64/tsp_request.S
Normal file
30
arm-trusted-firmware.t234/bl32/tsp/aarch64/tsp_request.S
Normal file
@@ -0,0 +1,30 @@
|
||||
/*
|
||||
* Copyright (c) 2013-2020, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <asm_macros.S>
|
||||
#include <bl32/tsp/tsp.h>
|
||||
|
||||
.globl tsp_get_magic
|
||||
|
||||
/*
|
||||
* This function raises an SMC to retrieve arguments from secure
|
||||
* monitor/dispatcher, saves the returned arguments the array received in x0,
|
||||
* and then returns to the caller
|
||||
*/
|
||||
func tsp_get_magic
|
||||
/* Load arguments */
|
||||
ldr w0, _tsp_fid_get_magic
|
||||
|
||||
/* Raise SMC */
|
||||
smc #0
|
||||
|
||||
/* Return arguments in x1:x0 */
|
||||
ret
|
||||
endfunc tsp_get_magic
|
||||
|
||||
.align 2
|
||||
_tsp_fid_get_magic:
|
||||
.word TSP_GET_ARGS
|
||||
252
arm-trusted-firmware.t234/bl32/tsp/ffa_helpers.c
Normal file
252
arm-trusted-firmware.t234/bl32/tsp/ffa_helpers.c
Normal file
@@ -0,0 +1,252 @@
|
||||
/*
|
||||
* Copyright (c) 2022, Arm Limited. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <common/debug.h>
|
||||
#include "ffa_helpers.h"
|
||||
#include <services/ffa_svc.h>
|
||||
#include "tsp_private.h"
|
||||
|
||||
/*******************************************************************************
|
||||
* Wrapper function to send a direct request.
|
||||
******************************************************************************/
|
||||
smc_args_t ffa_msg_send_direct_req(ffa_endpoint_id16_t sender,
|
||||
ffa_endpoint_id16_t receiver,
|
||||
uint32_t arg3,
|
||||
uint32_t arg4,
|
||||
uint32_t arg5,
|
||||
uint32_t arg6,
|
||||
uint32_t arg7)
|
||||
{
|
||||
uint32_t src_dst_ids = (sender << FFA_DIRECT_MSG_SOURCE_SHIFT) |
|
||||
(receiver << FFA_DIRECT_MSG_DESTINATION_SHIFT);
|
||||
|
||||
|
||||
/* Send Direct Request. */
|
||||
return smc_helper(FFA_MSG_SEND_DIRECT_REQ_SMC64, src_dst_ids,
|
||||
0, arg3, arg4, arg5, arg6, arg7);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Wrapper function to send a direct response.
|
||||
******************************************************************************/
|
||||
smc_args_t *ffa_msg_send_direct_resp(ffa_endpoint_id16_t sender,
|
||||
ffa_endpoint_id16_t receiver,
|
||||
uint32_t arg3,
|
||||
uint32_t arg4,
|
||||
uint32_t arg5,
|
||||
uint32_t arg6,
|
||||
uint32_t arg7)
|
||||
{
|
||||
uint32_t src_dst_ids = (sender << FFA_DIRECT_MSG_SOURCE_SHIFT) |
|
||||
(receiver << FFA_DIRECT_MSG_DESTINATION_SHIFT);
|
||||
|
||||
return set_smc_args(FFA_MSG_SEND_DIRECT_RESP_SMC64, src_dst_ids,
|
||||
0, arg3, arg4, arg5, arg6, arg7);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Memory Management Helpers.
|
||||
******************************************************************************/
|
||||
|
||||
/**
|
||||
* Initialises the header of the given `ffa_mtd`, not including the
|
||||
* composite memory region offset.
|
||||
*/
|
||||
static void ffa_memory_region_init_header(
|
||||
struct ffa_mtd *memory_region, ffa_endpoint_id16_t sender,
|
||||
ffa_mem_attr16_t attributes, ffa_mtd_flag32_t flags,
|
||||
uint64_t handle, uint64_t tag, ffa_endpoint_id16_t *receivers,
|
||||
uint32_t receiver_count, ffa_mem_perm8_t permissions)
|
||||
{
|
||||
struct ffa_emad_v1_0 *emad;
|
||||
|
||||
memory_region->emad_offset = sizeof(struct ffa_mtd);
|
||||
memory_region->emad_size = sizeof(struct ffa_emad_v1_0);
|
||||
emad = (struct ffa_emad_v1_0 *)
|
||||
((uint8_t *) memory_region +
|
||||
memory_region->emad_offset);
|
||||
memory_region->sender_id = sender;
|
||||
memory_region->memory_region_attributes = attributes;
|
||||
memory_region->reserved_36_39 = 0;
|
||||
memory_region->flags = flags;
|
||||
memory_region->handle = handle;
|
||||
memory_region->tag = tag;
|
||||
memory_region->reserved_40_47 = 0;
|
||||
memory_region->emad_count = receiver_count;
|
||||
for (uint32_t i = 0U; i < receiver_count; i++) {
|
||||
emad[i].mapd.endpoint_id = receivers[i];
|
||||
emad[i].mapd.memory_access_permissions = permissions;
|
||||
emad[i].mapd.flags = 0;
|
||||
emad[i].comp_mrd_offset = 0;
|
||||
emad[i].reserved_8_15 = 0;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Initialises the given `ffa_mtd` to be used for an
|
||||
* `FFA_MEM_RETRIEVE_REQ` by the receiver of a memory transaction.
|
||||
* TODO: Support differing attributes per receiver.
|
||||
*
|
||||
* Returns the size of the descriptor written.
|
||||
*/
|
||||
static uint32_t ffa_memory_retrieve_request_init(
|
||||
struct ffa_mtd *memory_region, uint64_t handle,
|
||||
ffa_endpoint_id16_t sender, ffa_endpoint_id16_t *receivers, uint32_t receiver_count,
|
||||
uint64_t tag, ffa_mtd_flag32_t flags,
|
||||
ffa_mem_perm8_t permissions,
|
||||
ffa_mem_attr16_t attributes)
|
||||
{
|
||||
ffa_memory_region_init_header(memory_region, sender, attributes, flags,
|
||||
handle, tag, receivers,
|
||||
receiver_count, permissions);
|
||||
|
||||
return sizeof(struct ffa_mtd) +
|
||||
memory_region->emad_count * sizeof(struct ffa_emad_v1_0);
|
||||
}
|
||||
|
||||
/* Relinquish access to memory region. */
|
||||
bool ffa_mem_relinquish(void)
|
||||
{
|
||||
smc_args_t ret;
|
||||
|
||||
ret = smc_helper(FFA_MEM_RELINQUISH, 0, 0, 0, 0, 0, 0, 0);
|
||||
if (ffa_func_id(ret) != FFA_SUCCESS_SMC32) {
|
||||
ERROR("%s failed to relinquish memory! error: (%x) %x\n",
|
||||
__func__, ffa_func_id(ret), ffa_error_code(ret));
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/* Retrieve memory shared by another partition. */
|
||||
smc_args_t ffa_mem_retrieve_req(uint32_t descriptor_length,
|
||||
uint32_t fragment_length)
|
||||
{
|
||||
return smc_helper(FFA_MEM_RETRIEVE_REQ_SMC32,
|
||||
descriptor_length,
|
||||
fragment_length,
|
||||
0, 0, 0, 0, 0);
|
||||
}
|
||||
|
||||
/* Retrieve the next memory descriptor fragment. */
|
||||
smc_args_t ffa_mem_frag_rx(uint64_t handle, uint32_t recv_length)
|
||||
{
|
||||
return smc_helper(FFA_MEM_FRAG_RX,
|
||||
FFA_MEM_HANDLE_LOW(handle),
|
||||
FFA_MEM_HANDLE_HIGH(handle),
|
||||
recv_length,
|
||||
0, 0, 0, 0);
|
||||
}
|
||||
|
||||
bool memory_retrieve(struct mailbox *mb,
|
||||
struct ffa_mtd **retrieved,
|
||||
uint64_t handle, ffa_endpoint_id16_t sender,
|
||||
ffa_endpoint_id16_t *receivers, uint32_t receiver_count,
|
||||
ffa_mtd_flag32_t flags, uint32_t *frag_length,
|
||||
uint32_t *total_length)
|
||||
{
|
||||
smc_args_t ret;
|
||||
uint32_t descriptor_size;
|
||||
struct ffa_mtd *memory_region;
|
||||
|
||||
if (retrieved == NULL || mb == NULL) {
|
||||
ERROR("Invalid parameters!\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
memory_region = (struct ffa_mtd *)mb->tx_buffer;
|
||||
|
||||
/* Clear TX buffer. */
|
||||
memset(memory_region, 0, PAGE_SIZE);
|
||||
|
||||
/* Clear local buffer. */
|
||||
memset(mem_region_buffer, 0, REGION_BUF_SIZE);
|
||||
|
||||
descriptor_size = ffa_memory_retrieve_request_init(
|
||||
memory_region, handle, sender, receivers, receiver_count, 0, flags,
|
||||
FFA_MEM_PERM_RW | FFA_MEM_PERM_NX,
|
||||
FFA_MEM_ATTR_NORMAL_MEMORY_CACHED_WB |
|
||||
FFA_MEM_ATTR_INNER_SHAREABLE);
|
||||
|
||||
ret = ffa_mem_retrieve_req(descriptor_size, descriptor_size);
|
||||
|
||||
if (ffa_func_id(ret) == FFA_ERROR) {
|
||||
ERROR("Couldn't retrieve the memory page. Error: %x\n",
|
||||
ffa_error_code(ret));
|
||||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
* Following total_size and fragment_size are useful to keep track
|
||||
* of the state of transaction. When the sum of all fragment_size of all
|
||||
* fragments is equal to total_size, the memory transaction has been
|
||||
* completed.
|
||||
*/
|
||||
*total_length = ret._regs[1];
|
||||
*frag_length = ret._regs[2];
|
||||
|
||||
/* Validate frag_length is less than total_length and mailbox size. */
|
||||
if (*frag_length == 0U || *total_length == 0U ||
|
||||
*frag_length > *total_length || *frag_length > (mb->rxtx_page_count * PAGE_SIZE)) {
|
||||
ERROR("Invalid parameters!\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Copy response to local buffer. */
|
||||
memcpy(mem_region_buffer, mb->rx_buffer, *frag_length);
|
||||
|
||||
if (ffa_rx_release()) {
|
||||
ERROR("Failed to release buffer!\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
*retrieved = (struct ffa_mtd *) mem_region_buffer;
|
||||
|
||||
if ((*retrieved)->emad_count > MAX_MEM_SHARE_RECIPIENTS) {
|
||||
VERBOSE("SPMC memory sharing supports max of %u receivers!\n",
|
||||
MAX_MEM_SHARE_RECIPIENTS);
|
||||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
* We are sharing memory from the normal world therefore validate the NS
|
||||
* bit was set by the SPMC.
|
||||
*/
|
||||
if (((*retrieved)->memory_region_attributes & FFA_MEM_ATTR_NS_BIT) == 0U) {
|
||||
ERROR("SPMC has not set the NS bit! 0x%x\n",
|
||||
(*retrieved)->memory_region_attributes);
|
||||
return false;
|
||||
}
|
||||
|
||||
VERBOSE("Memory Descriptor Retrieved!\n");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/* Relinquish the memory region. */
|
||||
bool memory_relinquish(struct ffa_mem_relinquish_descriptor *m, uint64_t handle,
|
||||
ffa_endpoint_id16_t id)
|
||||
{
|
||||
ffa_mem_relinquish_init(m, handle, 0, id);
|
||||
return ffa_mem_relinquish();
|
||||
}
|
||||
|
||||
/* Query SPMC that the rx buffer of the partition can be released. */
|
||||
bool ffa_rx_release(void)
|
||||
{
|
||||
smc_args_t ret;
|
||||
|
||||
ret = smc_helper(FFA_RX_RELEASE, 0, 0, 0, 0, 0, 0, 0);
|
||||
return ret._regs[SMC_ARG0] != FFA_SUCCESS_SMC32;
|
||||
}
|
||||
|
||||
/* Map the provided buffers with the SPMC. */
|
||||
bool ffa_rxtx_map(uintptr_t send, uintptr_t recv, uint32_t pages)
|
||||
{
|
||||
smc_args_t ret;
|
||||
|
||||
ret = smc_helper(FFA_RXTX_MAP_SMC64, send, recv, pages, 0, 0, 0, 0);
|
||||
return ret._regs[0] != FFA_SUCCESS_SMC32;
|
||||
}
|
||||
116
arm-trusted-firmware.t234/bl32/tsp/ffa_helpers.h
Normal file
116
arm-trusted-firmware.t234/bl32/tsp/ffa_helpers.h
Normal file
@@ -0,0 +1,116 @@
|
||||
/*
|
||||
* Copyright (c) 2022, Arm Limited. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#ifndef FFA_HELPERS_H
|
||||
#define FFA_HELPERS_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#include "../../services/std_svc/spm/el3_spmc/spmc.h"
|
||||
#include "../../services/std_svc/spm/el3_spmc/spmc_shared_mem.h"
|
||||
#include <services/el3_spmc_ffa_memory.h>
|
||||
#include <services/ffa_svc.h>
|
||||
#include "tsp_private.h"
|
||||
|
||||
static inline uint32_t ffa_func_id(smc_args_t val)
|
||||
{
|
||||
return (uint32_t) val._regs[0];
|
||||
}
|
||||
|
||||
static inline int32_t ffa_error_code(smc_args_t val)
|
||||
{
|
||||
return (uint32_t) val._regs[2];
|
||||
}
|
||||
|
||||
extern uint8_t mem_region_buffer[4096 * 2] __aligned(PAGE_SIZE);
|
||||
#define REGION_BUF_SIZE sizeof(mem_region_buffer)
|
||||
|
||||
/** The maximum number of recipients a memory region may be sent to. */
|
||||
#define MAX_MEM_SHARE_RECIPIENTS 2U
|
||||
|
||||
/* FFA Memory Management mode flags. */
|
||||
#define FFA_FLAG_SHARE_MEMORY (1U << 3)
|
||||
#define FFA_FLAG_LEND_MEMORY (1U << 4)
|
||||
|
||||
#define FFA_FLAG_MEMORY_MASK (3U << 3)
|
||||
|
||||
#define FFA_MEM_HANDLE_LOW(x) (x & 0xFFFFFFFF)
|
||||
#define FFA_MEM_HANDLE_HIGH(x) (x >> 32)
|
||||
|
||||
#define FFA_MEM_PERM_DATA_OFFSET 0
|
||||
#define FFA_MEM_PERM_DATA_MASK 0x3
|
||||
|
||||
static inline uint32_t ffa_mem_relinquish_init(
|
||||
struct ffa_mem_relinquish_descriptor *relinquish_request,
|
||||
uint64_t handle, ffa_mtd_flag32_t flags,
|
||||
ffa_endpoint_id16_t sender)
|
||||
{
|
||||
relinquish_request->handle = handle;
|
||||
relinquish_request->flags = flags;
|
||||
relinquish_request->endpoint_count = 1;
|
||||
relinquish_request->endpoint_array[0] = sender;
|
||||
|
||||
return sizeof(struct ffa_mem_relinquish_descriptor) + sizeof(ffa_endpoint_id16_t);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the `ffa_comp_mrd` for the given receiver from an
|
||||
* `ffa_mtd`, or NULL if it is not valid.
|
||||
*/
|
||||
static inline struct ffa_comp_mrd *
|
||||
ffa_memory_region_get_composite(struct ffa_mtd *memory_region,
|
||||
uint32_t receiver_index)
|
||||
{
|
||||
struct ffa_emad_v1_0 *receivers;
|
||||
uint32_t offset;
|
||||
|
||||
receivers = (struct ffa_emad_v1_0 *)
|
||||
((uint8_t *) memory_region +
|
||||
memory_region->emad_offset +
|
||||
(memory_region->emad_size * receiver_index));
|
||||
offset = receivers->comp_mrd_offset;
|
||||
|
||||
if (offset == 0U) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return (struct ffa_comp_mrd *)
|
||||
((uint8_t *) memory_region + offset);
|
||||
}
|
||||
|
||||
static inline uint32_t ffa_get_data_access_attr(ffa_mem_perm8_t perm)
|
||||
{
|
||||
return ((perm >> FFA_MEM_PERM_DATA_OFFSET) & FFA_MEM_PERM_DATA_MASK);
|
||||
}
|
||||
|
||||
smc_args_t ffa_mem_frag_rx(uint64_t handle, uint32_t recv_length);
|
||||
bool ffa_mem_relinquish(void);
|
||||
bool ffa_rx_release(void);
|
||||
bool memory_relinquish(struct ffa_mem_relinquish_descriptor *m, uint64_t handle,
|
||||
ffa_endpoint_id16_t id);
|
||||
bool ffa_rxtx_map(uintptr_t send, uintptr_t recv, uint32_t pages);
|
||||
bool memory_retrieve(struct mailbox *mb,
|
||||
struct ffa_mtd **retrieved,
|
||||
uint64_t handle, ffa_endpoint_id16_t sender,
|
||||
ffa_endpoint_id16_t *receivers, uint32_t receiver_count,
|
||||
ffa_mtd_flag32_t flags, uint32_t *frag_length,
|
||||
uint32_t *total_length);
|
||||
|
||||
smc_args_t ffa_msg_send_direct_req(ffa_endpoint_id16_t sender,
|
||||
ffa_endpoint_id16_t receiver,
|
||||
uint32_t arg3,
|
||||
uint32_t arg4,
|
||||
uint32_t arg5,
|
||||
uint32_t arg6,
|
||||
uint32_t arg7);
|
||||
smc_args_t *ffa_msg_send_direct_resp(ffa_endpoint_id16_t sender,
|
||||
ffa_endpoint_id16_t receiver,
|
||||
uint32_t arg3,
|
||||
uint32_t arg4,
|
||||
uint32_t arg5,
|
||||
uint32_t arg6,
|
||||
uint32_t arg7);
|
||||
#endif /* FFA_HELPERS_H */
|
||||
132
arm-trusted-firmware.t234/bl32/tsp/tsp.ld.S
Normal file
132
arm-trusted-firmware.t234/bl32/tsp/tsp.ld.S
Normal file
@@ -0,0 +1,132 @@
|
||||
/*
|
||||
* Copyright (c) 2013-2023, Arm Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <common/bl_common.ld.h>
|
||||
#include <lib/xlat_tables/xlat_tables_defs.h>
|
||||
|
||||
OUTPUT_FORMAT(PLATFORM_LINKER_FORMAT)
|
||||
OUTPUT_ARCH(PLATFORM_LINKER_ARCH)
|
||||
ENTRY(tsp_entrypoint)
|
||||
|
||||
MEMORY {
|
||||
RAM (rwx): ORIGIN = TSP_SEC_MEM_BASE, LENGTH = TSP_SEC_MEM_SIZE
|
||||
}
|
||||
|
||||
SECTIONS {
|
||||
. = BL32_BASE;
|
||||
|
||||
ASSERT(. == ALIGN(PAGE_SIZE),
|
||||
"BL32_BASE address is not aligned on a page boundary.")
|
||||
|
||||
#if SEPARATE_CODE_AND_RODATA
|
||||
.text . : {
|
||||
ASSERT(. == ALIGN(PAGE_SIZE),
|
||||
".text address is not aligned on a page boundary.");
|
||||
|
||||
__TEXT_START__ = .;
|
||||
|
||||
*tsp_entrypoint.o(.text*)
|
||||
*(.text*)
|
||||
*(.vectors)
|
||||
__TEXT_END_UNALIGNED__ = .;
|
||||
|
||||
. = ALIGN(PAGE_SIZE);
|
||||
|
||||
__TEXT_END__ = .;
|
||||
} >RAM
|
||||
|
||||
.rodata . : {
|
||||
__RODATA_START__ = .;
|
||||
|
||||
*(.rodata*)
|
||||
|
||||
RODATA_COMMON
|
||||
|
||||
__RODATA_END_UNALIGNED__ = .;
|
||||
. = ALIGN(PAGE_SIZE);
|
||||
|
||||
__RODATA_END__ = .;
|
||||
} >RAM
|
||||
#else /* SEPARATE_CODE_AND_RODATA */
|
||||
.ro . : {
|
||||
ASSERT(. == ALIGN(PAGE_SIZE),
|
||||
".ro address is not aligned on a page boundary.");
|
||||
|
||||
__RO_START__ = .;
|
||||
|
||||
*tsp_entrypoint.o(.text*)
|
||||
*(.text*)
|
||||
*(.rodata*)
|
||||
|
||||
RODATA_COMMON
|
||||
|
||||
*(.vectors)
|
||||
|
||||
__RO_END_UNALIGNED__ = .;
|
||||
|
||||
/*
|
||||
* Memory page(s) mapped to this section will be marked as read-only,
|
||||
* executable. No RW data from the next section must creep in. Ensure
|
||||
* that the rest of the current memory page is unused.
|
||||
*/
|
||||
. = ALIGN(PAGE_SIZE);
|
||||
|
||||
__RO_END__ = .;
|
||||
} >RAM
|
||||
#endif /* SEPARATE_CODE_AND_RODATA */
|
||||
|
||||
__RW_START__ = .;
|
||||
|
||||
DATA_SECTION >RAM
|
||||
RELA_SECTION >RAM
|
||||
|
||||
#ifdef TSP_PROGBITS_LIMIT
|
||||
ASSERT(. <= TSP_PROGBITS_LIMIT, "TSP progbits has exceeded its limit.")
|
||||
#endif /* TSP_PROGBITS_LIMIT */
|
||||
|
||||
STACK_SECTION >RAM
|
||||
BSS_SECTION >RAM
|
||||
XLAT_TABLE_SECTION >RAM
|
||||
|
||||
#if USE_COHERENT_MEM
|
||||
/*
|
||||
* The base address of the coherent memory section must be page-aligned to
|
||||
* guarantee that the coherent data are stored on their own pages and are
|
||||
* not mixed with normal data. This is required to set up the correct memory
|
||||
* attributes for the coherent data page tables.
|
||||
*/
|
||||
.coherent_ram (NOLOAD) : ALIGN(PAGE_SIZE) {
|
||||
__COHERENT_RAM_START__ = .;
|
||||
*(.tzfw_coherent_mem)
|
||||
__COHERENT_RAM_END_UNALIGNED__ = .;
|
||||
|
||||
/*
|
||||
* Memory page(s) mapped to this section will be marked as device
|
||||
* memory. No other unexpected data must creep in. Ensure that the rest
|
||||
* of the current memory page is unused.
|
||||
*/
|
||||
. = ALIGN(PAGE_SIZE);
|
||||
|
||||
__COHERENT_RAM_END__ = .;
|
||||
} >RAM
|
||||
#endif /* USE_COHERENT_MEM */
|
||||
|
||||
__RW_END__ = .;
|
||||
__BL32_END__ = .;
|
||||
|
||||
/DISCARD/ : {
|
||||
*(.dynsym .dynstr .hash .gnu.hash)
|
||||
}
|
||||
|
||||
__BSS_SIZE__ = SIZEOF(.bss);
|
||||
|
||||
#if USE_COHERENT_MEM
|
||||
__COHERENT_RAM_UNALIGNED_SIZE__ =
|
||||
__COHERENT_RAM_END_UNALIGNED__ - __COHERENT_RAM_START__;
|
||||
#endif /* USE_COHERENT_MEM */
|
||||
|
||||
ASSERT(. <= BL32_LIMIT, "BL32 image has exceeded its limit.")
|
||||
}
|
||||
50
arm-trusted-firmware.t234/bl32/tsp/tsp.mk
Normal file
50
arm-trusted-firmware.t234/bl32/tsp/tsp.mk
Normal file
@@ -0,0 +1,50 @@
|
||||
#
|
||||
# Copyright (c) 2013-2024, Arm Limited and Contributors. All rights reserved.
|
||||
#
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
#
|
||||
|
||||
INCLUDES += -Iinclude/bl32/tsp
|
||||
|
||||
ifeq (${SPMC_AT_EL3},1)
|
||||
BL32_SOURCES += bl32/tsp/tsp_ffa_main.c \
|
||||
bl32/tsp/ffa_helpers.c
|
||||
else
|
||||
BL32_SOURCES += bl32/tsp/tsp_main.c
|
||||
endif
|
||||
|
||||
BL32_SOURCES += bl32/tsp/aarch64/tsp_entrypoint.S \
|
||||
bl32/tsp/aarch64/tsp_exceptions.S \
|
||||
bl32/tsp/aarch64/tsp_request.S \
|
||||
bl32/tsp/tsp_interrupt.c \
|
||||
bl32/tsp/tsp_timer.c \
|
||||
bl32/tsp/tsp_common.c \
|
||||
bl32/tsp/tsp_context.c \
|
||||
common/aarch64/early_exceptions.S \
|
||||
lib/locks/exclusive/aarch64/spinlock.S
|
||||
|
||||
BL32_DEFAULT_LINKER_SCRIPT_SOURCE := bl32/tsp/tsp.ld.S
|
||||
|
||||
ifeq ($($(ARCH)-ld-id),gnu-gcc)
|
||||
BL32_LDFLAGS += -Wl,--sort-section=alignment
|
||||
else ifneq ($(filter llvm-lld gnu-ld,$($(ARCH)-ld-id)),)
|
||||
BL32_LDFLAGS += --sort-section=alignment
|
||||
endif
|
||||
|
||||
# This flag determines if the TSPD initializes BL32 in tspd_init() (synchronous
|
||||
# method) or configures BL31 to pass control to BL32 instead of BL33
|
||||
# (asynchronous method).
|
||||
TSP_INIT_ASYNC := 0
|
||||
|
||||
$(eval $(call assert_boolean,TSP_INIT_ASYNC))
|
||||
$(eval $(call add_define,TSP_INIT_ASYNC))
|
||||
|
||||
# Include the platform-specific TSP Makefile
|
||||
# If no platform-specific TSP Makefile exists, it means TSP is not supported
|
||||
# on this platform.
|
||||
TSP_PLAT_MAKEFILE := $(wildcard ${PLAT_DIR}/tsp/tsp-${PLAT}.mk)
|
||||
ifeq (,${TSP_PLAT_MAKEFILE})
|
||||
$(error TSP is not supported on platform ${PLAT})
|
||||
else
|
||||
include ${TSP_PLAT_MAKEFILE}
|
||||
endif
|
||||
159
arm-trusted-firmware.t234/bl32/tsp/tsp_common.c
Normal file
159
arm-trusted-firmware.t234/bl32/tsp/tsp_common.c
Normal file
@@ -0,0 +1,159 @@
|
||||
/*
|
||||
* Copyright (c) 2022-2024, Arm Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <assert.h>
|
||||
#include <inttypes.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include <arch_features.h>
|
||||
#include <arch_helpers.h>
|
||||
#include <bl32/tsp/tsp.h>
|
||||
#include <common/bl_common.h>
|
||||
#include <common/debug.h>
|
||||
#include <lib/spinlock.h>
|
||||
#include <plat/common/platform.h>
|
||||
#include <platform_tsp.h>
|
||||
#include "tsp_private.h"
|
||||
|
||||
#include <platform_def.h>
|
||||
|
||||
/*******************************************************************************
|
||||
* Per cpu data structure to populate parameters for an SMC in C code and use
|
||||
* a pointer to this structure in assembler code to populate x0-x7.
|
||||
******************************************************************************/
|
||||
static smc_args_t tsp_smc_args[PLATFORM_CORE_COUNT];
|
||||
|
||||
/*******************************************************************************
|
||||
* Per cpu data structure to keep track of TSP activity
|
||||
******************************************************************************/
|
||||
work_statistics_t tsp_stats[PLATFORM_CORE_COUNT];
|
||||
|
||||
smc_args_t *set_smc_args(uint64_t arg0,
|
||||
uint64_t arg1,
|
||||
uint64_t arg2,
|
||||
uint64_t arg3,
|
||||
uint64_t arg4,
|
||||
uint64_t arg5,
|
||||
uint64_t arg6,
|
||||
uint64_t arg7)
|
||||
{
|
||||
uint32_t linear_id;
|
||||
smc_args_t *pcpu_smc_args;
|
||||
|
||||
/*
|
||||
* Return to Secure Monitor by raising an SMC. The results of the
|
||||
* service are passed as an arguments to the SMC.
|
||||
*/
|
||||
linear_id = plat_my_core_pos();
|
||||
pcpu_smc_args = &tsp_smc_args[linear_id];
|
||||
write_sp_arg(pcpu_smc_args, SMC_ARG0, arg0);
|
||||
write_sp_arg(pcpu_smc_args, SMC_ARG1, arg1);
|
||||
write_sp_arg(pcpu_smc_args, SMC_ARG2, arg2);
|
||||
write_sp_arg(pcpu_smc_args, SMC_ARG3, arg3);
|
||||
write_sp_arg(pcpu_smc_args, SMC_ARG4, arg4);
|
||||
write_sp_arg(pcpu_smc_args, SMC_ARG5, arg5);
|
||||
write_sp_arg(pcpu_smc_args, SMC_ARG6, arg6);
|
||||
write_sp_arg(pcpu_smc_args, SMC_ARG7, arg7);
|
||||
|
||||
return pcpu_smc_args;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Setup function for TSP.
|
||||
******************************************************************************/
|
||||
void tsp_setup(void)
|
||||
{
|
||||
/* Enable early console if EARLY_CONSOLE flag is enabled */
|
||||
plat_setup_early_console();
|
||||
|
||||
/* Perform early platform-specific setup. */
|
||||
tsp_early_platform_setup();
|
||||
|
||||
/* Perform late platform-specific setup. */
|
||||
tsp_plat_arch_setup();
|
||||
|
||||
#if ENABLE_PAUTH
|
||||
/*
|
||||
* Assert that the ARMv8.3-PAuth registers are present or an access
|
||||
* fault will be triggered when they are being saved or restored.
|
||||
*/
|
||||
assert(is_armv8_3_pauth_present());
|
||||
#endif /* ENABLE_PAUTH */
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* This function performs any remaining bookkeeping in the test secure payload
|
||||
* before the system is switched off (in response to a psci SYSTEM_OFF request).
|
||||
******************************************************************************/
|
||||
smc_args_t *tsp_system_off_main(uint64_t arg0,
|
||||
uint64_t arg1,
|
||||
uint64_t arg2,
|
||||
uint64_t arg3,
|
||||
uint64_t arg4,
|
||||
uint64_t arg5,
|
||||
uint64_t arg6,
|
||||
uint64_t arg7)
|
||||
{
|
||||
uint32_t linear_id = plat_my_core_pos();
|
||||
|
||||
/* Update this cpu's statistics. */
|
||||
tsp_stats[linear_id].smc_count++;
|
||||
tsp_stats[linear_id].eret_count++;
|
||||
|
||||
INFO("TSP: cpu 0x%lx SYSTEM_OFF request\n", read_mpidr());
|
||||
INFO("TSP: cpu 0x%lx: %d smcs, %d erets requests\n", read_mpidr(),
|
||||
tsp_stats[linear_id].smc_count,
|
||||
tsp_stats[linear_id].eret_count);
|
||||
|
||||
/* Indicate to the SPD that we have completed this request. */
|
||||
return set_smc_args(TSP_SYSTEM_OFF_DONE, 0, 0, 0, 0, 0, 0, 0);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* This function performs any remaining bookkeeping in the test secure payload
|
||||
* before the system is reset (in response to a psci SYSTEM_RESET request).
|
||||
******************************************************************************/
|
||||
smc_args_t *tsp_system_reset_main(uint64_t arg0,
|
||||
uint64_t arg1,
|
||||
uint64_t arg2,
|
||||
uint64_t arg3,
|
||||
uint64_t arg4,
|
||||
uint64_t arg5,
|
||||
uint64_t arg6,
|
||||
uint64_t arg7)
|
||||
{
|
||||
uint32_t linear_id = plat_my_core_pos();
|
||||
|
||||
/* Update this cpu's statistics. */
|
||||
tsp_stats[linear_id].smc_count++;
|
||||
tsp_stats[linear_id].eret_count++;
|
||||
|
||||
INFO("TSP: cpu 0x%lx SYSTEM_RESET request\n", read_mpidr());
|
||||
INFO("TSP: cpu 0x%lx: %d smcs, %d erets requests\n", read_mpidr(),
|
||||
tsp_stats[linear_id].smc_count,
|
||||
tsp_stats[linear_id].eret_count);
|
||||
|
||||
/* Indicate to the SPD that we have completed this request. */
|
||||
return set_smc_args(TSP_SYSTEM_RESET_DONE, 0, 0, 0, 0, 0, 0, 0);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* TSP smc abort handler. This function is called when aborting a preempted
|
||||
* yielding SMC request. It should cleanup all resources owned by the SMC
|
||||
* handler such as locks or dynamically allocated memory so following SMC
|
||||
* request are executed in a clean environment.
|
||||
******************************************************************************/
|
||||
smc_args_t *tsp_abort_smc_handler(uint64_t func,
|
||||
uint64_t arg1,
|
||||
uint64_t arg2,
|
||||
uint64_t arg3,
|
||||
uint64_t arg4,
|
||||
uint64_t arg5,
|
||||
uint64_t arg6,
|
||||
uint64_t arg7)
|
||||
{
|
||||
return set_smc_args(TSP_ABORT_DONE, 0, 0, 0, 0, 0, 0, 0);
|
||||
}
|
||||
143
arm-trusted-firmware.t234/bl32/tsp/tsp_context.c
Normal file
143
arm-trusted-firmware.t234/bl32/tsp/tsp_context.c
Normal file
@@ -0,0 +1,143 @@
|
||||
/*
|
||||
* Copyright (c) 2024, Arm Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <arch_features.h>
|
||||
#include <arch_helpers.h>
|
||||
#include <bl32/tsp/tsp_el1_context.h>
|
||||
#include <common/debug.h>
|
||||
|
||||
#define DUMMY_CTX_VALUE ULL(0xffffffff)
|
||||
#define DUMMY_CTX_TCR_VALUE ULL(0xffff0000)
|
||||
#define DUMMY_CTX_TRF_VALUE ULL(0xf)
|
||||
#define DUMMY_CTX_GCS_VALUE ULL(0xffff0000)
|
||||
#define DEFAULT_CTX_VALUE ULL(0x0)
|
||||
|
||||
/**
|
||||
* -------------------------------------------------------
|
||||
* Private Helper functions required to access and modify
|
||||
* EL1 context registers at S-EL1.
|
||||
* -------------------------------------------------------
|
||||
*/
|
||||
static void modify_el1_common_regs(uint64_t cm_value)
|
||||
{
|
||||
/**
|
||||
* NOTE: Few EL1 registers "SCTLR_EL1, SPSR_EL1, ELR_EL1" are
|
||||
* left out consciously as those are important registers for
|
||||
* execution in each world and overwriting them with dummy value
|
||||
* would cause unintended crash while executing the test.
|
||||
*/
|
||||
write_tcr_el1(cm_value);
|
||||
write_cpacr_el1(cm_value);
|
||||
write_csselr_el1(cm_value);
|
||||
write_esr_el1(cm_value);
|
||||
write_ttbr0_el1(cm_value);
|
||||
write_ttbr1_el1(cm_value);
|
||||
write_mair_el1(cm_value);
|
||||
write_amair_el1(cm_value);
|
||||
write_actlr_el1(cm_value);
|
||||
write_tpidr_el1(cm_value);
|
||||
write_tpidr_el0(cm_value);
|
||||
write_tpidrro_el0(cm_value);
|
||||
write_par_el1(cm_value);
|
||||
write_far_el1(cm_value);
|
||||
write_afsr0_el1(cm_value);
|
||||
write_afsr1_el1(cm_value);
|
||||
write_contextidr_el1(cm_value);
|
||||
write_vbar_el1(cm_value);
|
||||
write_mdccint_el1(cm_value);
|
||||
write_mdscr_el1(cm_value);
|
||||
}
|
||||
|
||||
static void modify_el1_mte2_regs(uint64_t mte_value)
|
||||
{
|
||||
if (is_feat_mte2_supported()) {
|
||||
write_tfsre0_el1(mte_value);
|
||||
write_tfsr_el1(mte_value);
|
||||
write_rgsr_el1(mte_value);
|
||||
write_gcr_el1(mte_value);
|
||||
}
|
||||
}
|
||||
|
||||
static void modify_el1_ras_regs(uint64_t ras_value)
|
||||
{
|
||||
if (is_feat_ras_supported()) {
|
||||
write_disr_el1(ras_value);
|
||||
}
|
||||
}
|
||||
|
||||
static void modify_el1_s1pie_regs(uint64_t s1pie_value)
|
||||
{
|
||||
if (is_feat_s1pie_supported()) {
|
||||
write_pire0_el1(s1pie_value);
|
||||
write_pir_el1(s1pie_value);
|
||||
}
|
||||
}
|
||||
|
||||
static void modify_el1_s1poe_regs(uint64_t s1poe_value)
|
||||
{
|
||||
if (is_feat_s1poe_supported()) {
|
||||
write_por_el1(s1poe_value);
|
||||
}
|
||||
}
|
||||
|
||||
static void modify_el1_s2poe_regs(uint64_t s2poe_value)
|
||||
{
|
||||
if (is_feat_s2poe_supported()) {
|
||||
write_s2por_el1(s2poe_value);
|
||||
}
|
||||
}
|
||||
|
||||
static void modify_el1_tcr2_regs(uint64_t tcr_value)
|
||||
{
|
||||
if (is_feat_tcr2_supported()) {
|
||||
write_tcr2_el1(tcr_value & DUMMY_CTX_TCR_VALUE);
|
||||
}
|
||||
}
|
||||
|
||||
static void modify_el1_trf_regs(uint64_t trf_value)
|
||||
{
|
||||
if (is_feat_trf_supported()) {
|
||||
write_trfcr_el1(trf_value & DUMMY_CTX_TRF_VALUE);
|
||||
}
|
||||
}
|
||||
|
||||
static void modify_el1_gcs_regs(uint64_t gcs_value)
|
||||
{
|
||||
if (is_feat_gcs_supported()) {
|
||||
write_gcscr_el1(gcs_value & DUMMY_CTX_GCS_VALUE);
|
||||
write_gcscre0_el1(gcs_value & DUMMY_CTX_GCS_VALUE);
|
||||
write_gcspr_el1(gcs_value & DUMMY_CTX_GCS_VALUE);
|
||||
write_gcspr_el0(gcs_value & DUMMY_CTX_GCS_VALUE);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* -----------------------------------------------------
|
||||
* Public API, to modify/restore EL1 ctx registers:
|
||||
* -----------------------------------------------------
|
||||
*/
|
||||
void modify_el1_ctx_regs(const bool modify_option)
|
||||
{
|
||||
uint64_t mask;
|
||||
|
||||
if (modify_option == TSP_CORRUPT_EL1_REGS) {
|
||||
VERBOSE("TSP(S-EL1): Corrupt EL1 Registers with Dummy values\n");
|
||||
mask = DUMMY_CTX_VALUE;
|
||||
} else {
|
||||
VERBOSE("TSP(S-EL1): Restore EL1 Registers with Default values\n");
|
||||
mask = DEFAULT_CTX_VALUE;
|
||||
}
|
||||
|
||||
modify_el1_common_regs(mask);
|
||||
modify_el1_mte2_regs(mask);
|
||||
modify_el1_ras_regs(mask);
|
||||
modify_el1_s1pie_regs(mask);
|
||||
modify_el1_s1poe_regs(mask);
|
||||
modify_el1_s2poe_regs(mask);
|
||||
modify_el1_tcr2_regs(mask);
|
||||
modify_el1_trf_regs(mask);
|
||||
modify_el1_gcs_regs(mask);
|
||||
}
|
||||
657
arm-trusted-firmware.t234/bl32/tsp/tsp_ffa_main.c
Normal file
657
arm-trusted-firmware.t234/bl32/tsp/tsp_ffa_main.c
Normal file
@@ -0,0 +1,657 @@
|
||||
/*
|
||||
* Copyright (c) 2013-2024, Arm Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <assert.h>
|
||||
#include <inttypes.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include "../../services/std_svc/spm/el3_spmc/spmc.h"
|
||||
#include "../../services/std_svc/spm/el3_spmc/spmc_shared_mem.h"
|
||||
#include <arch_features.h>
|
||||
#include <arch_helpers.h>
|
||||
#include <bl32/tsp/tsp.h>
|
||||
#include <common/bl_common.h>
|
||||
#include <common/build_message.h>
|
||||
#include <common/debug.h>
|
||||
#include "ffa_helpers.h"
|
||||
#include <lib/psci/psci.h>
|
||||
#include <lib/spinlock.h>
|
||||
#include <lib/xlat_tables/xlat_tables_defs.h>
|
||||
#include <lib/xlat_tables/xlat_tables_v2.h>
|
||||
#include <plat/common/platform.h>
|
||||
#include <platform_tsp.h>
|
||||
#include <services/ffa_svc.h>
|
||||
#include "tsp_private.h"
|
||||
|
||||
#include <platform_def.h>
|
||||
|
||||
static ffa_endpoint_id16_t tsp_id, spmc_id;
|
||||
uint8_t mem_region_buffer[4096 * 2] __aligned(PAGE_SIZE);
|
||||
|
||||
/* Partition Mailbox. */
|
||||
static uint8_t send_page[PAGE_SIZE] __aligned(PAGE_SIZE);
|
||||
static uint8_t recv_page[PAGE_SIZE] __aligned(PAGE_SIZE);
|
||||
|
||||
/*
|
||||
* Declare a global mailbox for use within the TSP.
|
||||
* This will be initialized appropriately when the buffers
|
||||
* are mapped with the SPMC.
|
||||
*/
|
||||
static struct mailbox mailbox;
|
||||
|
||||
/*******************************************************************************
|
||||
* This enum is used to handle test cases driven from the FF-A Test Driver.
|
||||
******************************************************************************/
|
||||
/* Keep in Sync with FF-A Test Driver. */
|
||||
enum message_t {
|
||||
/* Partition Only Messages. */
|
||||
FF_A_RELAY_MESSAGE = 0,
|
||||
|
||||
/* Basic Functionality. */
|
||||
FF_A_ECHO_MESSAGE,
|
||||
FF_A_RELAY_MESSAGE_EL3,
|
||||
|
||||
/* Memory Sharing. */
|
||||
FF_A_MEMORY_SHARE,
|
||||
FF_A_MEMORY_SHARE_FRAGMENTED,
|
||||
FF_A_MEMORY_LEND,
|
||||
FF_A_MEMORY_LEND_FRAGMENTED,
|
||||
|
||||
FF_A_MEMORY_SHARE_MULTI_ENDPOINT,
|
||||
FF_A_MEMORY_LEND_MULTI_ENDPOINT,
|
||||
|
||||
LAST,
|
||||
FF_A_RUN_ALL = 255,
|
||||
FF_A_OP_MAX = 256
|
||||
};
|
||||
|
||||
#if SPMC_AT_EL3
|
||||
extern void tsp_cpu_on_entry(void);
|
||||
#endif
|
||||
|
||||
/*******************************************************************************
|
||||
* Test Functions.
|
||||
******************************************************************************/
|
||||
|
||||
/*******************************************************************************
|
||||
* Enable the TSP to forward the received message to another partition and ask
|
||||
* it to echo the value back in order to validate direct messages functionality.
|
||||
******************************************************************************/
|
||||
static int ffa_test_relay(uint64_t arg0,
|
||||
uint64_t arg1,
|
||||
uint64_t arg2,
|
||||
uint64_t arg3,
|
||||
uint64_t arg4,
|
||||
uint64_t arg5,
|
||||
uint64_t arg6,
|
||||
uint64_t arg7)
|
||||
{
|
||||
smc_args_t ffa_forward_result;
|
||||
ffa_endpoint_id16_t receiver = arg5;
|
||||
|
||||
ffa_forward_result = ffa_msg_send_direct_req(tsp_id,
|
||||
receiver,
|
||||
FF_A_ECHO_MESSAGE, arg4,
|
||||
0, 0, 0);
|
||||
return ffa_forward_result._regs[3];
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* This function handles memory management tests, currently share and lend.
|
||||
* This test supports the use of FRAG_RX to use memory descriptors that do not
|
||||
* fit in a single 4KB buffer.
|
||||
******************************************************************************/
|
||||
static int test_memory_send(ffa_endpoint_id16_t sender, uint64_t handle,
|
||||
ffa_mtd_flag32_t flags, bool multi_endpoint)
|
||||
{
|
||||
struct ffa_mtd *m;
|
||||
struct ffa_emad_v1_0 *receivers;
|
||||
struct ffa_comp_mrd *composite;
|
||||
int ret, status = 0;
|
||||
unsigned int mem_attrs;
|
||||
char *ptr;
|
||||
ffa_endpoint_id16_t source = sender;
|
||||
uint32_t total_length, recv_length = 0;
|
||||
|
||||
/*
|
||||
* In the case that we're testing multiple endpoints choose a partition
|
||||
* ID that resides in the normal world so the SPMC won't detect it as
|
||||
* invalid.
|
||||
* TODO: Should get endpoint receiver id and flag as input from NWd.
|
||||
*/
|
||||
uint32_t receiver_count = multi_endpoint ? 2 : 1;
|
||||
ffa_endpoint_id16_t test_receivers[2] = { tsp_id, 0x10 };
|
||||
|
||||
/* Ensure that the sender ID resides in the normal world. */
|
||||
if (ffa_is_secure_world_id(sender)) {
|
||||
ERROR("Invalid sender ID 0x%x.\n", sender);
|
||||
return FFA_ERROR_DENIED;
|
||||
}
|
||||
|
||||
if (!memory_retrieve(&mailbox, &m, handle, source, test_receivers,
|
||||
receiver_count, flags, &recv_length,
|
||||
&total_length)) {
|
||||
return FFA_ERROR_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
receivers = (struct ffa_emad_v1_0 *)
|
||||
((uint8_t *) m + m->emad_offset);
|
||||
while (total_length != recv_length) {
|
||||
smc_args_t ffa_return;
|
||||
uint32_t frag_length;
|
||||
|
||||
ffa_return = ffa_mem_frag_rx(handle, recv_length);
|
||||
|
||||
if (ffa_return._regs[0] == FFA_ERROR) {
|
||||
WARN("TSP: failed to resume mem with handle %lx\n",
|
||||
handle);
|
||||
return ffa_return._regs[2];
|
||||
}
|
||||
frag_length = ffa_return._regs[3];
|
||||
|
||||
/* Validate frag_length is less than total_length and mailbox size. */
|
||||
if (frag_length > total_length ||
|
||||
frag_length > (mailbox.rxtx_page_count * PAGE_SIZE)) {
|
||||
ERROR("Invalid parameters!\n");
|
||||
return FFA_ERROR_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
/* Validate frag_length is less than remaining mem_region_buffer size. */
|
||||
if (frag_length + recv_length >= REGION_BUF_SIZE) {
|
||||
ERROR("Out of memory!\n");
|
||||
return FFA_ERROR_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
memcpy(&mem_region_buffer[recv_length], mailbox.rx_buffer,
|
||||
frag_length);
|
||||
|
||||
if (ffa_rx_release()) {
|
||||
ERROR("Failed to release buffer!\n");
|
||||
return FFA_ERROR_DENIED;
|
||||
}
|
||||
|
||||
recv_length += frag_length;
|
||||
|
||||
assert(recv_length <= total_length);
|
||||
}
|
||||
|
||||
composite = ffa_memory_region_get_composite(m, 0);
|
||||
if (composite == NULL) {
|
||||
WARN("Failed to get composite descriptor!\n");
|
||||
return FFA_ERROR_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
VERBOSE("Address: %p; page_count: %x %lx\n",
|
||||
(void *)composite->address_range_array[0].address,
|
||||
composite->address_range_array[0].page_count, PAGE_SIZE);
|
||||
|
||||
/* This test is only concerned with RW permissions. */
|
||||
if (ffa_get_data_access_attr(
|
||||
receivers[0].mapd.memory_access_permissions) != FFA_MEM_PERM_RW) {
|
||||
ERROR("Data permission in retrieve response %x does not match share/lend %x!\n",
|
||||
ffa_get_data_access_attr(receivers[0].mapd.memory_access_permissions),
|
||||
FFA_MEM_PERM_RW);
|
||||
return FFA_ERROR_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
mem_attrs = MT_RW_DATA | MT_EXECUTE_NEVER;
|
||||
|
||||
/* Only expecting to be sent memory from NWd so map accordingly. */
|
||||
mem_attrs |= MT_NS;
|
||||
|
||||
for (int32_t i = 0; i < (int32_t)composite->address_range_count; i++) {
|
||||
size_t size = composite->address_range_array[i].page_count * PAGE_SIZE;
|
||||
|
||||
ptr = (char *) composite->address_range_array[i].address;
|
||||
ret = mmap_add_dynamic_region(
|
||||
(uint64_t)ptr,
|
||||
(uint64_t)ptr,
|
||||
size, mem_attrs);
|
||||
|
||||
if (ret != 0) {
|
||||
ERROR("Failed [%d] mmap_add_dynamic_region %u (%lx) (%lx) (%x)!\n",
|
||||
i, ret,
|
||||
(uint64_t)composite->address_range_array[i].address,
|
||||
size, mem_attrs);
|
||||
|
||||
/* Remove mappings previously created in this transaction. */
|
||||
for (i--; i >= 0; i--) {
|
||||
ret = mmap_remove_dynamic_region(
|
||||
(uint64_t)composite->address_range_array[i].address,
|
||||
composite->address_range_array[i].page_count * PAGE_SIZE);
|
||||
|
||||
if (ret != 0) {
|
||||
ERROR("Failed [%d] mmap_remove_dynamic_region!\n", i);
|
||||
panic();
|
||||
}
|
||||
}
|
||||
|
||||
return FFA_ERROR_NO_MEMORY;
|
||||
}
|
||||
|
||||
/* Increment memory region for validation purposes. */
|
||||
++(*ptr);
|
||||
|
||||
/*
|
||||
* Read initial magic number from memory region for
|
||||
* validation purposes.
|
||||
*/
|
||||
if (!i) {
|
||||
status = *ptr;
|
||||
}
|
||||
}
|
||||
|
||||
for (uint32_t i = 0U; i < composite->address_range_count; i++) {
|
||||
ret = mmap_remove_dynamic_region(
|
||||
(uint64_t)composite->address_range_array[i].address,
|
||||
composite->address_range_array[i].page_count * PAGE_SIZE);
|
||||
|
||||
if (ret != 0) {
|
||||
ERROR("Failed [%d] mmap_remove_dynamic_region!\n", i);
|
||||
return FFA_ERROR_NO_MEMORY;
|
||||
}
|
||||
}
|
||||
|
||||
if (!memory_relinquish((struct ffa_mem_relinquish_descriptor *)mailbox.tx_buffer,
|
||||
m->handle, tsp_id)) {
|
||||
ERROR("Failed to relinquish memory region!\n");
|
||||
return FFA_ERROR_INVALID_PARAMETER;
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
||||
static smc_args_t *send_ffa_pm_success(void)
|
||||
{
|
||||
return set_smc_args(FFA_MSG_SEND_DIRECT_RESP_SMC32,
|
||||
((tsp_id & FFA_DIRECT_MSG_ENDPOINT_ID_MASK)
|
||||
<< FFA_DIRECT_MSG_SOURCE_SHIFT) | spmc_id,
|
||||
FFA_FWK_MSG_BIT |
|
||||
(FFA_PM_MSG_PM_RESP & FFA_FWK_MSG_MASK),
|
||||
0, 0, 0, 0, 0);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* This function performs any remaining book keeping in the test secure payload
|
||||
* before this cpu is turned off in response to a psci cpu_off request.
|
||||
******************************************************************************/
|
||||
smc_args_t *tsp_cpu_off_main(uint64_t arg0,
|
||||
uint64_t arg1,
|
||||
uint64_t arg2,
|
||||
uint64_t arg3,
|
||||
uint64_t arg4,
|
||||
uint64_t arg5,
|
||||
uint64_t arg6,
|
||||
uint64_t arg7)
|
||||
{
|
||||
uint32_t linear_id = plat_my_core_pos();
|
||||
|
||||
/*
|
||||
* This cpu is being turned off, so disable the timer to prevent the
|
||||
* secure timer interrupt from interfering with power down. A pending
|
||||
* interrupt will be lost but we do not care as we are turning off.
|
||||
*/
|
||||
tsp_generic_timer_stop();
|
||||
|
||||
/* Update this cpu's statistics. */
|
||||
tsp_stats[linear_id].smc_count++;
|
||||
tsp_stats[linear_id].eret_count++;
|
||||
tsp_stats[linear_id].cpu_off_count++;
|
||||
|
||||
VERBOSE("TSP: cpu 0x%lx off request\n", read_mpidr());
|
||||
VERBOSE("TSP: cpu 0x%lx: %d smcs, %d erets %d cpu off requests\n",
|
||||
read_mpidr(),
|
||||
tsp_stats[linear_id].smc_count,
|
||||
tsp_stats[linear_id].eret_count,
|
||||
tsp_stats[linear_id].cpu_off_count);
|
||||
|
||||
return send_ffa_pm_success();
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* This function performs any book keeping in the test secure payload before
|
||||
* this cpu's architectural state is saved in response to an earlier psci
|
||||
* cpu_suspend request.
|
||||
******************************************************************************/
|
||||
smc_args_t *tsp_cpu_suspend_main(uint64_t arg0,
|
||||
uint64_t arg1,
|
||||
uint64_t arg2,
|
||||
uint64_t arg3,
|
||||
uint64_t arg4,
|
||||
uint64_t arg5,
|
||||
uint64_t arg6,
|
||||
uint64_t arg7)
|
||||
{
|
||||
uint32_t linear_id = plat_my_core_pos();
|
||||
|
||||
/*
|
||||
* Save the time context and disable it to prevent the secure timer
|
||||
* interrupt from interfering with wakeup from the suspend state.
|
||||
*/
|
||||
tsp_generic_timer_save();
|
||||
tsp_generic_timer_stop();
|
||||
|
||||
/* Update this cpu's statistics. */
|
||||
tsp_stats[linear_id].smc_count++;
|
||||
tsp_stats[linear_id].eret_count++;
|
||||
tsp_stats[linear_id].cpu_suspend_count++;
|
||||
|
||||
VERBOSE("TSP: cpu 0x%lx: %d smcs, %d erets %d cpu suspend requests\n",
|
||||
read_mpidr(),
|
||||
tsp_stats[linear_id].smc_count,
|
||||
tsp_stats[linear_id].eret_count,
|
||||
tsp_stats[linear_id].cpu_suspend_count);
|
||||
|
||||
return send_ffa_pm_success();
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* This function performs any bookkeeping in the test secure payload after this
|
||||
* cpu's architectural state has been restored after wakeup from an earlier psci
|
||||
* cpu_suspend request.
|
||||
******************************************************************************/
|
||||
smc_args_t *tsp_cpu_resume_main(uint64_t max_off_pwrlvl,
|
||||
uint64_t arg1,
|
||||
uint64_t arg2,
|
||||
uint64_t arg3,
|
||||
uint64_t arg4,
|
||||
uint64_t arg5,
|
||||
uint64_t arg6,
|
||||
uint64_t arg7)
|
||||
{
|
||||
uint32_t linear_id = plat_my_core_pos();
|
||||
|
||||
/* Restore the generic timer context. */
|
||||
tsp_generic_timer_restore();
|
||||
|
||||
/* Update this cpu's statistics. */
|
||||
tsp_stats[linear_id].smc_count++;
|
||||
tsp_stats[linear_id].eret_count++;
|
||||
tsp_stats[linear_id].cpu_resume_count++;
|
||||
|
||||
VERBOSE("TSP: cpu 0x%lx resumed. maximum off power level %" PRId64 "\n",
|
||||
read_mpidr(), max_off_pwrlvl);
|
||||
VERBOSE("TSP: cpu 0x%lx: %d smcs, %d erets %d cpu resume requests\n",
|
||||
read_mpidr(),
|
||||
tsp_stats[linear_id].smc_count,
|
||||
tsp_stats[linear_id].eret_count,
|
||||
tsp_stats[linear_id].cpu_resume_count);
|
||||
|
||||
return send_ffa_pm_success();
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* This function handles framework messages. Currently only PM.
|
||||
******************************************************************************/
|
||||
static smc_args_t *handle_framework_message(uint64_t arg0,
|
||||
uint64_t arg1,
|
||||
uint64_t arg2,
|
||||
uint64_t arg3,
|
||||
uint64_t arg4,
|
||||
uint64_t arg5,
|
||||
uint64_t arg6,
|
||||
uint64_t arg7)
|
||||
{
|
||||
/* Check if it is a power management message from the SPMC. */
|
||||
if (ffa_endpoint_source(arg1) != spmc_id) {
|
||||
goto err;
|
||||
}
|
||||
|
||||
/* Check if it is a PM request message. */
|
||||
if ((arg2 & FFA_FWK_MSG_MASK) == FFA_FWK_MSG_PSCI) {
|
||||
/* Check if it is a PSCI CPU_OFF request. */
|
||||
if (arg3 == PSCI_CPU_OFF) {
|
||||
return tsp_cpu_off_main(arg0, arg1, arg2, arg3,
|
||||
arg4, arg5, arg6, arg7);
|
||||
} else if (arg3 == PSCI_CPU_SUSPEND_AARCH64) {
|
||||
return tsp_cpu_suspend_main(arg0, arg1, arg2, arg3,
|
||||
arg4, arg5, arg6, arg7);
|
||||
}
|
||||
} else if ((arg2 & FFA_FWK_MSG_MASK) == FFA_PM_MSG_WB_REQ) {
|
||||
/* Check it is a PSCI Warm Boot request. */
|
||||
if (arg3 == FFA_WB_TYPE_NOTS2RAM) {
|
||||
return tsp_cpu_resume_main(arg0, arg1, arg2, arg3,
|
||||
arg4, arg5, arg6, arg7);
|
||||
}
|
||||
}
|
||||
|
||||
err:
|
||||
ERROR("%s: Unknown framework message!\n", __func__);
|
||||
panic();
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Handles partition messages. Exercised from the FF-A Test Driver.
|
||||
******************************************************************************/
|
||||
static smc_args_t *handle_partition_message(uint64_t arg0,
|
||||
uint64_t arg1,
|
||||
uint64_t arg2,
|
||||
uint64_t arg3,
|
||||
uint64_t arg4,
|
||||
uint64_t arg5,
|
||||
uint64_t arg6,
|
||||
uint64_t arg7)
|
||||
{
|
||||
uint16_t sender = ffa_endpoint_source(arg1);
|
||||
uint16_t receiver = ffa_endpoint_destination(arg1);
|
||||
int status = -1;
|
||||
const bool multi_endpoint = true;
|
||||
|
||||
switch (arg3) {
|
||||
case FF_A_MEMORY_SHARE:
|
||||
INFO("TSP Tests: Memory Share Request--\n");
|
||||
status = test_memory_send(sender, arg4, FFA_FLAG_SHARE_MEMORY, !multi_endpoint);
|
||||
break;
|
||||
|
||||
case FF_A_MEMORY_LEND:
|
||||
INFO("TSP Tests: Memory Lend Request--\n");
|
||||
status = test_memory_send(sender, arg4, FFA_FLAG_LEND_MEMORY, !multi_endpoint);
|
||||
break;
|
||||
|
||||
case FF_A_MEMORY_SHARE_MULTI_ENDPOINT:
|
||||
INFO("TSP Tests: Multi Endpoint Memory Share Request--\n");
|
||||
status = test_memory_send(sender, arg4, FFA_FLAG_SHARE_MEMORY, multi_endpoint);
|
||||
break;
|
||||
|
||||
case FF_A_MEMORY_LEND_MULTI_ENDPOINT:
|
||||
INFO("TSP Tests: Multi Endpoint Memory Lend Request--\n");
|
||||
status = test_memory_send(sender, arg4, FFA_FLAG_LEND_MEMORY, multi_endpoint);
|
||||
break;
|
||||
case FF_A_RELAY_MESSAGE:
|
||||
INFO("TSP Tests: Relaying message--\n");
|
||||
status = ffa_test_relay(arg0, arg1, arg2, arg3, arg4,
|
||||
arg5, arg6, arg7);
|
||||
break;
|
||||
|
||||
case FF_A_ECHO_MESSAGE:
|
||||
INFO("TSP Tests: echo message--\n");
|
||||
status = arg4;
|
||||
break;
|
||||
|
||||
default:
|
||||
INFO("TSP Tests: Unknown request ID %d--\n", (int) arg3);
|
||||
}
|
||||
|
||||
/* Swap the sender and receiver in the response. */
|
||||
return ffa_msg_send_direct_resp(receiver, sender, status, 0, 0, 0, 0);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* This function implements the event loop for handling FF-A ABI invocations.
|
||||
******************************************************************************/
|
||||
static smc_args_t *tsp_event_loop(uint64_t smc_fid,
|
||||
uint64_t arg1,
|
||||
uint64_t arg2,
|
||||
uint64_t arg3,
|
||||
uint64_t arg4,
|
||||
uint64_t arg5,
|
||||
uint64_t arg6,
|
||||
uint64_t arg7)
|
||||
{
|
||||
/* Panic if the SPMC did not forward an FF-A call. */
|
||||
if (!is_ffa_fid(smc_fid)) {
|
||||
ERROR("%s: Unknown SMC FID (0x%lx)\n", __func__, smc_fid);
|
||||
panic();
|
||||
}
|
||||
|
||||
switch (smc_fid) {
|
||||
case FFA_INTERRUPT:
|
||||
/*
|
||||
* IRQs were enabled upon re-entry into the TSP. The interrupt
|
||||
* must have been handled by now. Return to the SPMC indicating
|
||||
* the same.
|
||||
*/
|
||||
return set_smc_args(FFA_MSG_WAIT, 0, 0, 0, 0, 0, 0, 0);
|
||||
|
||||
case FFA_MSG_SEND_DIRECT_REQ_SMC64:
|
||||
case FFA_MSG_SEND_DIRECT_REQ_SMC32:
|
||||
/* Check if a framework message, handle accordingly. */
|
||||
if ((arg2 & FFA_FWK_MSG_BIT)) {
|
||||
return handle_framework_message(smc_fid, arg1, arg2, arg3,
|
||||
arg4, arg5, arg6, arg7);
|
||||
}
|
||||
return handle_partition_message(smc_fid, arg1, arg2, arg3,
|
||||
arg4, arg5, arg6, arg7);
|
||||
}
|
||||
|
||||
ERROR("%s: Unsupported FF-A FID (0x%lx)\n", __func__, smc_fid);
|
||||
panic();
|
||||
}
|
||||
|
||||
static smc_args_t *tsp_loop(smc_args_t *args)
|
||||
{
|
||||
smc_args_t ret;
|
||||
|
||||
do {
|
||||
/* --------------------------------------------
|
||||
* Mask FIQ interrupts to avoid preemption
|
||||
* in case EL3 SPMC delegates an IRQ next or a
|
||||
* managed exit. Lastly, unmask IRQs so that
|
||||
* they can be handled immediately upon re-entry.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
write_daifset(DAIF_FIQ_BIT);
|
||||
write_daifclr(DAIF_IRQ_BIT);
|
||||
ret = smc_helper(args->_regs[0], args->_regs[1], args->_regs[2],
|
||||
args->_regs[3], args->_regs[4], args->_regs[5],
|
||||
args->_regs[6], args->_regs[7]);
|
||||
args = tsp_event_loop(ret._regs[0], ret._regs[1], ret._regs[2],
|
||||
ret._regs[3], ret._regs[4], ret._regs[5],
|
||||
ret._regs[6], ret._regs[7]);
|
||||
} while (1);
|
||||
|
||||
/* Not Reached. */
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* TSP main entry point where it gets the opportunity to initialize its secure
|
||||
* state/applications. Once the state is initialized, it must return to the
|
||||
* SPD with a pointer to the 'tsp_vector_table' jump table.
|
||||
******************************************************************************/
|
||||
uint64_t tsp_main(void)
|
||||
{
|
||||
smc_args_t smc_args = {0};
|
||||
|
||||
NOTICE("TSP: %s\n", build_version_string);
|
||||
NOTICE("TSP: %s\n", build_message);
|
||||
INFO("TSP: Total memory base : 0x%lx\n", (unsigned long) BL32_BASE);
|
||||
INFO("TSP: Total memory size : 0x%lx bytes\n", BL32_TOTAL_SIZE);
|
||||
uint32_t linear_id = plat_my_core_pos();
|
||||
|
||||
/* Initialize the platform. */
|
||||
tsp_platform_setup();
|
||||
|
||||
/* Initialize secure/applications state here. */
|
||||
tsp_generic_timer_start();
|
||||
|
||||
/* Register secondary entrypoint with the SPMC. */
|
||||
smc_args = smc_helper(FFA_SECONDARY_EP_REGISTER_SMC64,
|
||||
(uint64_t) tsp_cpu_on_entry,
|
||||
0, 0, 0, 0, 0, 0);
|
||||
if (smc_args._regs[SMC_ARG0] != FFA_SUCCESS_SMC32) {
|
||||
ERROR("TSP could not register secondary ep (0x%lx)\n",
|
||||
smc_args._regs[2]);
|
||||
panic();
|
||||
}
|
||||
/* Get TSP's endpoint id. */
|
||||
smc_args = smc_helper(FFA_ID_GET, 0, 0, 0, 0, 0, 0, 0);
|
||||
if (smc_args._regs[SMC_ARG0] != FFA_SUCCESS_SMC32) {
|
||||
ERROR("TSP could not get own ID (0x%lx) on core%d\n",
|
||||
smc_args._regs[2], linear_id);
|
||||
panic();
|
||||
}
|
||||
|
||||
tsp_id = smc_args._regs[2];
|
||||
INFO("TSP FF-A endpoint id = 0x%x\n", tsp_id);
|
||||
|
||||
/* Get the SPMC ID. */
|
||||
smc_args = smc_helper(FFA_SPM_ID_GET, 0, 0, 0, 0, 0, 0, 0);
|
||||
if (smc_args._regs[SMC_ARG0] != FFA_SUCCESS_SMC32) {
|
||||
ERROR("TSP could not get SPMC ID (0x%lx) on core%d\n",
|
||||
smc_args._regs[2], linear_id);
|
||||
panic();
|
||||
}
|
||||
|
||||
spmc_id = smc_args._regs[2];
|
||||
|
||||
/* Call RXTX_MAP to map a 4k RX and TX buffer. */
|
||||
if (ffa_rxtx_map((uintptr_t) send_page,
|
||||
(uintptr_t) recv_page, 1)) {
|
||||
ERROR("TSP could not map it's RX/TX Buffers\n");
|
||||
panic();
|
||||
}
|
||||
|
||||
mailbox.tx_buffer = send_page;
|
||||
mailbox.rx_buffer = recv_page;
|
||||
mailbox.rxtx_page_count = 1;
|
||||
|
||||
/* Update this cpu's statistics. */
|
||||
tsp_stats[linear_id].smc_count++;
|
||||
tsp_stats[linear_id].eret_count++;
|
||||
tsp_stats[linear_id].cpu_on_count++;
|
||||
|
||||
VERBOSE("TSP: cpu 0x%lx: %d smcs, %d erets %d cpu on requests\n",
|
||||
read_mpidr(),
|
||||
tsp_stats[linear_id].smc_count,
|
||||
tsp_stats[linear_id].eret_count,
|
||||
tsp_stats[linear_id].cpu_on_count);
|
||||
|
||||
/* Tell SPMD that we are done initialising. */
|
||||
tsp_loop(set_smc_args(FFA_MSG_WAIT, 0, 0, 0, 0, 0, 0, 0));
|
||||
|
||||
/* Not reached. */
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* This function performs any remaining book keeping in the test secure payload
|
||||
* after this cpu's architectural state has been setup in response to an earlier
|
||||
* psci cpu_on request.
|
||||
******************************************************************************/
|
||||
smc_args_t *tsp_cpu_on_main(void)
|
||||
{
|
||||
uint32_t linear_id = plat_my_core_pos();
|
||||
|
||||
/* Initialize secure/applications state here. */
|
||||
tsp_generic_timer_start();
|
||||
|
||||
/* Update this cpu's statistics. */
|
||||
tsp_stats[linear_id].smc_count++;
|
||||
tsp_stats[linear_id].eret_count++;
|
||||
tsp_stats[linear_id].cpu_on_count++;
|
||||
VERBOSE("TSP: cpu 0x%lx turned on\n", read_mpidr());
|
||||
VERBOSE("TSP: cpu 0x%lx: %d smcs, %d erets %d cpu on requests\n",
|
||||
read_mpidr(),
|
||||
tsp_stats[linear_id].smc_count,
|
||||
tsp_stats[linear_id].eret_count,
|
||||
tsp_stats[linear_id].cpu_on_count);
|
||||
/* ---------------------------------------------
|
||||
* Jump to the main event loop to return to EL3
|
||||
* and be ready for the next request on this cpu.
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
return tsp_loop(set_smc_args(FFA_MSG_WAIT, 0, 0, 0, 0, 0, 0, 0));
|
||||
}
|
||||
115
arm-trusted-firmware.t234/bl32/tsp/tsp_interrupt.c
Normal file
115
arm-trusted-firmware.t234/bl32/tsp/tsp_interrupt.c
Normal file
@@ -0,0 +1,115 @@
|
||||
/*
|
||||
* Copyright (c) 2014-2022, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <assert.h>
|
||||
#include <inttypes.h>
|
||||
|
||||
#include <platform_def.h>
|
||||
|
||||
#include <arch_helpers.h>
|
||||
#include <bl32/tsp/tsp.h>
|
||||
#include <common/debug.h>
|
||||
#include <plat/common/platform.h>
|
||||
|
||||
#include "tsp_private.h"
|
||||
|
||||
/*******************************************************************************
|
||||
* This function updates the TSP statistics for S-EL1 interrupts handled
|
||||
* synchronously i.e the ones that have been handed over by the TSPD. It also
|
||||
* keeps count of the number of times control was passed back to the TSPD
|
||||
* after handling the interrupt. In the future it will be possible that the
|
||||
* TSPD hands over an S-EL1 interrupt to the TSP but does not expect it to
|
||||
* return execution. This statistic will be useful to distinguish between these
|
||||
* two models of synchronous S-EL1 interrupt handling. The 'elr_el3' parameter
|
||||
* contains the address of the instruction in normal world where this S-EL1
|
||||
* interrupt was generated.
|
||||
******************************************************************************/
|
||||
void tsp_update_sync_sel1_intr_stats(uint32_t type, uint64_t elr_el3)
|
||||
{
|
||||
uint32_t linear_id = plat_my_core_pos();
|
||||
|
||||
tsp_stats[linear_id].sync_sel1_intr_count++;
|
||||
if (type == TSP_HANDLE_SEL1_INTR_AND_RETURN)
|
||||
tsp_stats[linear_id].sync_sel1_intr_ret_count++;
|
||||
|
||||
VERBOSE("TSP: cpu 0x%lx sync s-el1 interrupt request from 0x%" PRIx64 "\n",
|
||||
read_mpidr(), elr_el3);
|
||||
VERBOSE("TSP: cpu 0x%lx: %d sync s-el1 interrupt requests,"
|
||||
" %d sync s-el1 interrupt returns\n",
|
||||
read_mpidr(),
|
||||
tsp_stats[linear_id].sync_sel1_intr_count,
|
||||
tsp_stats[linear_id].sync_sel1_intr_ret_count);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
* This function is invoked when a non S-EL1 interrupt is received and causes
|
||||
* the preemption of TSP. This function returns TSP_PREEMPTED and results
|
||||
* in the control being handed over to EL3 for handling the interrupt.
|
||||
*****************************************************************************/
|
||||
int32_t tsp_handle_preemption(void)
|
||||
{
|
||||
uint32_t linear_id = plat_my_core_pos();
|
||||
|
||||
tsp_stats[linear_id].preempt_intr_count++;
|
||||
VERBOSE("TSP: cpu 0x%lx: %d preempt interrupt requests\n",
|
||||
read_mpidr(), tsp_stats[linear_id].preempt_intr_count);
|
||||
return TSP_PREEMPTED;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* TSP interrupt handler is called as a part of both synchronous and
|
||||
* asynchronous handling of TSP interrupts. Currently the physical timer
|
||||
* interrupt is the only S-EL1 interrupt that this handler expects. It returns
|
||||
* 0 upon successfully handling the expected interrupt and all other
|
||||
* interrupts are treated as normal world or EL3 interrupts.
|
||||
******************************************************************************/
|
||||
int32_t tsp_common_int_handler(void)
|
||||
{
|
||||
uint32_t linear_id = plat_my_core_pos(), id;
|
||||
|
||||
/*
|
||||
* Get the highest priority pending interrupt id and see if it is the
|
||||
* secure physical generic timer interrupt in which case, handle it.
|
||||
* Otherwise throw this interrupt at the EL3 firmware.
|
||||
*
|
||||
* There is a small time window between reading the highest priority
|
||||
* pending interrupt and acknowledging it during which another
|
||||
* interrupt of higher priority could become the highest pending
|
||||
* interrupt. This is not expected to happen currently for TSP.
|
||||
*/
|
||||
id = plat_ic_get_pending_interrupt_id();
|
||||
|
||||
/* TSP can only handle the secure physical timer interrupt */
|
||||
if (id != TSP_IRQ_SEC_PHY_TIMER) {
|
||||
#if SPMC_AT_EL3
|
||||
/*
|
||||
* With the EL3 FF-A SPMC we expect only Timer secure interrupt to fire in
|
||||
* the TSP, so panic if any other interrupt does.
|
||||
*/
|
||||
ERROR("Unexpected interrupt id %u\n", id);
|
||||
panic();
|
||||
#else
|
||||
return tsp_handle_preemption();
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
* Acknowledge and handle the secure timer interrupt. Also sanity check
|
||||
* if it has been preempted by another interrupt through an assertion.
|
||||
*/
|
||||
id = plat_ic_acknowledge_interrupt();
|
||||
assert(id == TSP_IRQ_SEC_PHY_TIMER);
|
||||
tsp_generic_timer_handler();
|
||||
plat_ic_end_of_interrupt(id);
|
||||
|
||||
/* Update the statistics and print some messages */
|
||||
tsp_stats[linear_id].sel1_intr_count++;
|
||||
VERBOSE("TSP: cpu 0x%lx handled S-EL1 interrupt %d\n",
|
||||
read_mpidr(), id);
|
||||
VERBOSE("TSP: cpu 0x%lx: %d S-EL1 requests\n",
|
||||
read_mpidr(), tsp_stats[linear_id].sel1_intr_count);
|
||||
return 0;
|
||||
}
|
||||
301
arm-trusted-firmware.t234/bl32/tsp/tsp_main.c
Normal file
301
arm-trusted-firmware.t234/bl32/tsp/tsp_main.c
Normal file
@@ -0,0 +1,301 @@
|
||||
/*
|
||||
* Copyright (c) 2013-2024, Arm Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <assert.h>
|
||||
#include <inttypes.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include <arch_features.h>
|
||||
#include <arch_helpers.h>
|
||||
#include <bl32/tsp/tsp.h>
|
||||
#include <bl32/tsp/tsp_el1_context.h>
|
||||
#include <common/bl_common.h>
|
||||
#include <common/build_message.h>
|
||||
#include <common/debug.h>
|
||||
#include <lib/spinlock.h>
|
||||
#include <plat/common/platform.h>
|
||||
#include <platform_tsp.h>
|
||||
#include "tsp_private.h"
|
||||
|
||||
#include <platform_def.h>
|
||||
|
||||
/*******************************************************************************
|
||||
* TSP main entry point where it gets the opportunity to initialize its secure
|
||||
* state/applications. Once the state is initialized, it must return to the
|
||||
* SPD with a pointer to the 'tsp_vector_table' jump table.
|
||||
******************************************************************************/
|
||||
uint64_t tsp_main(void)
|
||||
{
|
||||
NOTICE("TSP: %s\n", build_version_string);
|
||||
NOTICE("TSP: %s\n", build_message);
|
||||
INFO("TSP: Total memory base : 0x%lx\n", (unsigned long) BL32_BASE);
|
||||
INFO("TSP: Total memory size : 0x%lx bytes\n", BL32_TOTAL_SIZE);
|
||||
|
||||
uint32_t linear_id = plat_my_core_pos();
|
||||
|
||||
/* Initialize the platform */
|
||||
tsp_platform_setup();
|
||||
|
||||
/* Initialize secure/applications state here */
|
||||
tsp_generic_timer_start();
|
||||
|
||||
/* Update this cpu's statistics */
|
||||
tsp_stats[linear_id].smc_count++;
|
||||
tsp_stats[linear_id].eret_count++;
|
||||
tsp_stats[linear_id].cpu_on_count++;
|
||||
|
||||
INFO("TSP: cpu 0x%lx: %d smcs, %d erets %d cpu on requests\n",
|
||||
read_mpidr(),
|
||||
tsp_stats[linear_id].smc_count,
|
||||
tsp_stats[linear_id].eret_count,
|
||||
tsp_stats[linear_id].cpu_on_count);
|
||||
|
||||
console_flush();
|
||||
return (uint64_t) &tsp_vector_table;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* This function performs any remaining book keeping in the test secure payload
|
||||
* after this cpu's architectural state has been setup in response to an earlier
|
||||
* psci cpu_on request.
|
||||
******************************************************************************/
|
||||
smc_args_t *tsp_cpu_on_main(void)
|
||||
{
|
||||
uint32_t linear_id = plat_my_core_pos();
|
||||
|
||||
/* Initialize secure/applications state here */
|
||||
tsp_generic_timer_start();
|
||||
|
||||
/* Update this cpu's statistics */
|
||||
tsp_stats[linear_id].smc_count++;
|
||||
tsp_stats[linear_id].eret_count++;
|
||||
tsp_stats[linear_id].cpu_on_count++;
|
||||
|
||||
INFO("TSP: cpu 0x%lx turned on\n", read_mpidr());
|
||||
INFO("TSP: cpu 0x%lx: %d smcs, %d erets %d cpu on requests\n",
|
||||
read_mpidr(),
|
||||
tsp_stats[linear_id].smc_count,
|
||||
tsp_stats[linear_id].eret_count,
|
||||
tsp_stats[linear_id].cpu_on_count);
|
||||
/* Indicate to the SPD that we have completed turned ourselves on */
|
||||
return set_smc_args(TSP_ON_DONE, 0, 0, 0, 0, 0, 0, 0);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* This function performs any remaining book keeping in the test secure payload
|
||||
* before this cpu is turned off in response to a psci cpu_off request.
|
||||
******************************************************************************/
|
||||
smc_args_t *tsp_cpu_off_main(uint64_t arg0,
|
||||
uint64_t arg1,
|
||||
uint64_t arg2,
|
||||
uint64_t arg3,
|
||||
uint64_t arg4,
|
||||
uint64_t arg5,
|
||||
uint64_t arg6,
|
||||
uint64_t arg7)
|
||||
{
|
||||
uint32_t linear_id = plat_my_core_pos();
|
||||
|
||||
/*
|
||||
* This cpu is being turned off, so disable the timer to prevent the
|
||||
* secure timer interrupt from interfering with power down. A pending
|
||||
* interrupt will be lost but we do not care as we are turning off.
|
||||
*/
|
||||
tsp_generic_timer_stop();
|
||||
|
||||
/* Update this cpu's statistics */
|
||||
tsp_stats[linear_id].smc_count++;
|
||||
tsp_stats[linear_id].eret_count++;
|
||||
tsp_stats[linear_id].cpu_off_count++;
|
||||
|
||||
INFO("TSP: cpu 0x%lx off request\n", read_mpidr());
|
||||
INFO("TSP: cpu 0x%lx: %d smcs, %d erets %d cpu off requests\n",
|
||||
read_mpidr(),
|
||||
tsp_stats[linear_id].smc_count,
|
||||
tsp_stats[linear_id].eret_count,
|
||||
tsp_stats[linear_id].cpu_off_count);
|
||||
|
||||
/* Indicate to the SPD that we have completed this request */
|
||||
return set_smc_args(TSP_OFF_DONE, 0, 0, 0, 0, 0, 0, 0);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* This function performs any book keeping in the test secure payload before
|
||||
* this cpu's architectural state is saved in response to an earlier psci
|
||||
* cpu_suspend request.
|
||||
******************************************************************************/
|
||||
smc_args_t *tsp_cpu_suspend_main(uint64_t arg0,
|
||||
uint64_t arg1,
|
||||
uint64_t arg2,
|
||||
uint64_t arg3,
|
||||
uint64_t arg4,
|
||||
uint64_t arg5,
|
||||
uint64_t arg6,
|
||||
uint64_t arg7)
|
||||
{
|
||||
uint32_t linear_id = plat_my_core_pos();
|
||||
|
||||
/*
|
||||
* Save the time context and disable it to prevent the secure timer
|
||||
* interrupt from interfering with wakeup from the suspend state.
|
||||
*/
|
||||
tsp_generic_timer_save();
|
||||
tsp_generic_timer_stop();
|
||||
|
||||
/* Update this cpu's statistics */
|
||||
tsp_stats[linear_id].smc_count++;
|
||||
tsp_stats[linear_id].eret_count++;
|
||||
tsp_stats[linear_id].cpu_suspend_count++;
|
||||
|
||||
INFO("TSP: cpu 0x%lx: %d smcs, %d erets %d cpu suspend requests\n",
|
||||
read_mpidr(),
|
||||
tsp_stats[linear_id].smc_count,
|
||||
tsp_stats[linear_id].eret_count,
|
||||
tsp_stats[linear_id].cpu_suspend_count);
|
||||
|
||||
/* Indicate to the SPD that we have completed this request */
|
||||
return set_smc_args(TSP_SUSPEND_DONE, 0, 0, 0, 0, 0, 0, 0);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* This function performs any book keeping in the test secure payload after this
|
||||
* cpu's architectural state has been restored after wakeup from an earlier psci
|
||||
* cpu_suspend request.
|
||||
******************************************************************************/
|
||||
smc_args_t *tsp_cpu_resume_main(uint64_t max_off_pwrlvl,
|
||||
uint64_t arg1,
|
||||
uint64_t arg2,
|
||||
uint64_t arg3,
|
||||
uint64_t arg4,
|
||||
uint64_t arg5,
|
||||
uint64_t arg6,
|
||||
uint64_t arg7)
|
||||
{
|
||||
uint32_t linear_id = plat_my_core_pos();
|
||||
|
||||
/* Restore the generic timer context */
|
||||
tsp_generic_timer_restore();
|
||||
|
||||
/* Update this cpu's statistics */
|
||||
tsp_stats[linear_id].smc_count++;
|
||||
tsp_stats[linear_id].eret_count++;
|
||||
tsp_stats[linear_id].cpu_resume_count++;
|
||||
|
||||
INFO("TSP: cpu 0x%lx resumed. maximum off power level %" PRId64 "\n",
|
||||
read_mpidr(), max_off_pwrlvl);
|
||||
INFO("TSP: cpu 0x%lx: %d smcs, %d erets %d cpu resume requests\n",
|
||||
read_mpidr(),
|
||||
tsp_stats[linear_id].smc_count,
|
||||
tsp_stats[linear_id].eret_count,
|
||||
tsp_stats[linear_id].cpu_resume_count);
|
||||
/* Indicate to the SPD that we have completed this request */
|
||||
return set_smc_args(TSP_RESUME_DONE, 0, 0, 0, 0, 0, 0, 0);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* TSP fast smc handler. The secure monitor jumps to this function by
|
||||
* doing the ERET after populating X0-X7 registers. The arguments are received
|
||||
* in the function arguments in order. Once the service is rendered, this
|
||||
* function returns to Secure Monitor by raising SMC.
|
||||
******************************************************************************/
|
||||
smc_args_t *tsp_smc_handler(uint64_t func,
|
||||
uint64_t arg1,
|
||||
uint64_t arg2,
|
||||
uint64_t arg3,
|
||||
uint64_t arg4,
|
||||
uint64_t arg5,
|
||||
uint64_t arg6,
|
||||
uint64_t arg7)
|
||||
{
|
||||
uint128_t service_args;
|
||||
uint64_t service_arg0;
|
||||
uint64_t service_arg1;
|
||||
uint64_t results[2];
|
||||
uint32_t linear_id = plat_my_core_pos();
|
||||
u_register_t dit;
|
||||
|
||||
/* Update this cpu's statistics */
|
||||
tsp_stats[linear_id].smc_count++;
|
||||
tsp_stats[linear_id].eret_count++;
|
||||
|
||||
INFO("TSP: cpu 0x%lx received %s smc 0x%" PRIx64 "\n", read_mpidr(),
|
||||
((func >> 31) & 1) == 1 ? "fast" : "yielding",
|
||||
func);
|
||||
INFO("TSP: cpu 0x%lx: %d smcs, %d erets\n", read_mpidr(),
|
||||
tsp_stats[linear_id].smc_count,
|
||||
tsp_stats[linear_id].eret_count);
|
||||
|
||||
/* Render secure services and obtain results here */
|
||||
results[0] = arg1;
|
||||
results[1] = arg2;
|
||||
|
||||
/*
|
||||
* Request a service back from dispatcher/secure monitor.
|
||||
* This call returns and thereafter resumes execution.
|
||||
*/
|
||||
service_args = tsp_get_magic();
|
||||
service_arg0 = (uint64_t)service_args;
|
||||
service_arg1 = (uint64_t)(service_args >> 64U);
|
||||
|
||||
/*
|
||||
* Write a dummy value to an MTE2 register, to simulate usage in the
|
||||
* secure world
|
||||
*/
|
||||
if (is_feat_mte2_supported()) {
|
||||
write_gcr_el1(0x99);
|
||||
}
|
||||
|
||||
/* Determine the function to perform based on the function ID */
|
||||
switch (TSP_BARE_FID(func)) {
|
||||
case TSP_ADD:
|
||||
results[0] += service_arg0;
|
||||
results[1] += service_arg1;
|
||||
break;
|
||||
case TSP_SUB:
|
||||
results[0] -= service_arg0;
|
||||
results[1] -= service_arg1;
|
||||
break;
|
||||
case TSP_MUL:
|
||||
results[0] *= service_arg0;
|
||||
results[1] *= service_arg1;
|
||||
break;
|
||||
case TSP_DIV:
|
||||
results[0] /= service_arg0 ? service_arg0 : 1;
|
||||
results[1] /= service_arg1 ? service_arg1 : 1;
|
||||
break;
|
||||
case TSP_CHECK_DIT:
|
||||
if (!is_feat_dit_supported()) {
|
||||
ERROR("DIT not supported\n");
|
||||
results[0] = 0;
|
||||
results[1] = 0xffff;
|
||||
break;
|
||||
}
|
||||
dit = read_dit();
|
||||
results[0] = dit == service_arg0;
|
||||
results[1] = dit;
|
||||
/* Toggle the dit bit */
|
||||
write_dit(service_arg0 != 0U ? 0 : DIT_BIT);
|
||||
break;
|
||||
case TSP_MODIFY_EL1_CTX:
|
||||
/*
|
||||
* Write dummy values to EL1 context registers, to simulate
|
||||
* their usage in the secure world.
|
||||
*/
|
||||
if (arg1 == TSP_CORRUPT_EL1_REGS) {
|
||||
modify_el1_ctx_regs(TSP_CORRUPT_EL1_REGS);
|
||||
} else {
|
||||
modify_el1_ctx_regs(TSP_RESTORE_EL1_REGS);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return set_smc_args(func, 0,
|
||||
results[0],
|
||||
results[1],
|
||||
0, 0, 0, 0);
|
||||
}
|
||||
145
arm-trusted-firmware.t234/bl32/tsp/tsp_private.h
Normal file
145
arm-trusted-firmware.t234/bl32/tsp/tsp_private.h
Normal file
@@ -0,0 +1,145 @@
|
||||
/*
|
||||
* Copyright (c) 2014-2022, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#ifndef TSP_PRIVATE_H
|
||||
#define TSP_PRIVATE_H
|
||||
|
||||
/*******************************************************************************
|
||||
* The TSP memory footprint starts at address BL32_BASE and ends with the
|
||||
* linker symbol __BL32_END__. Use these addresses to compute the TSP image
|
||||
* size.
|
||||
******************************************************************************/
|
||||
#define BL32_TOTAL_LIMIT BL32_END
|
||||
#define BL32_TOTAL_SIZE (BL32_TOTAL_LIMIT - (unsigned long) BL32_BASE)
|
||||
|
||||
#ifndef __ASSEMBLER__
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#include <bl32/tsp/tsp.h>
|
||||
#include <lib/cassert.h>
|
||||
#include <lib/spinlock.h>
|
||||
#include <smccc_helpers.h>
|
||||
|
||||
typedef struct work_statistics {
|
||||
/* Number of s-el1 interrupts on this cpu */
|
||||
uint32_t sel1_intr_count;
|
||||
/* Number of non s-el1 interrupts on this cpu which preempted TSP */
|
||||
uint32_t preempt_intr_count;
|
||||
/* Number of sync s-el1 interrupts on this cpu */
|
||||
uint32_t sync_sel1_intr_count;
|
||||
/* Number of s-el1 interrupts returns on this cpu */
|
||||
uint32_t sync_sel1_intr_ret_count;
|
||||
uint32_t smc_count; /* Number of returns on this cpu */
|
||||
uint32_t eret_count; /* Number of entries on this cpu */
|
||||
uint32_t cpu_on_count; /* Number of cpu on requests */
|
||||
uint32_t cpu_off_count; /* Number of cpu off requests */
|
||||
uint32_t cpu_suspend_count; /* Number of cpu suspend requests */
|
||||
uint32_t cpu_resume_count; /* Number of cpu resume requests */
|
||||
} __aligned(CACHE_WRITEBACK_GRANULE) work_statistics_t;
|
||||
|
||||
/* Macros to access members of the above structure using their offsets */
|
||||
#define read_sp_arg(args, offset) ((args)->_regs[offset >> 3])
|
||||
#define write_sp_arg(args, offset, val) (((args)->_regs[offset >> 3]) \
|
||||
= val)
|
||||
|
||||
uint128_t tsp_get_magic(void);
|
||||
|
||||
smc_args_t *set_smc_args(uint64_t arg0,
|
||||
uint64_t arg1,
|
||||
uint64_t arg2,
|
||||
uint64_t arg3,
|
||||
uint64_t arg4,
|
||||
uint64_t arg5,
|
||||
uint64_t arg6,
|
||||
uint64_t arg7);
|
||||
smc_args_t *tsp_cpu_resume_main(uint64_t max_off_pwrlvl,
|
||||
uint64_t arg1,
|
||||
uint64_t arg2,
|
||||
uint64_t arg3,
|
||||
uint64_t arg4,
|
||||
uint64_t arg5,
|
||||
uint64_t arg6,
|
||||
uint64_t arg7);
|
||||
smc_args_t *tsp_cpu_suspend_main(uint64_t arg0,
|
||||
uint64_t arg1,
|
||||
uint64_t arg2,
|
||||
uint64_t arg3,
|
||||
uint64_t arg4,
|
||||
uint64_t arg5,
|
||||
uint64_t arg6,
|
||||
uint64_t arg7);
|
||||
smc_args_t *tsp_cpu_on_main(void);
|
||||
smc_args_t *tsp_cpu_off_main(uint64_t arg0,
|
||||
uint64_t arg1,
|
||||
uint64_t arg2,
|
||||
uint64_t arg3,
|
||||
uint64_t arg4,
|
||||
uint64_t arg5,
|
||||
uint64_t arg6,
|
||||
uint64_t arg7);
|
||||
|
||||
/* Generic Timer functions */
|
||||
void tsp_generic_timer_start(void);
|
||||
void tsp_generic_timer_handler(void);
|
||||
void tsp_generic_timer_stop(void);
|
||||
void tsp_generic_timer_save(void);
|
||||
void tsp_generic_timer_restore(void);
|
||||
|
||||
/* S-EL1 interrupt management functions */
|
||||
void tsp_update_sync_sel1_intr_stats(uint32_t type, uint64_t elr_el3);
|
||||
|
||||
|
||||
/* Data structure to keep track of TSP statistics */
|
||||
extern work_statistics_t tsp_stats[PLATFORM_CORE_COUNT];
|
||||
|
||||
/* Vector table of jumps */
|
||||
extern tsp_vectors_t tsp_vector_table;
|
||||
|
||||
/* functions */
|
||||
int32_t tsp_common_int_handler(void);
|
||||
int32_t tsp_handle_preemption(void);
|
||||
|
||||
smc_args_t *tsp_abort_smc_handler(uint64_t func,
|
||||
uint64_t arg1,
|
||||
uint64_t arg2,
|
||||
uint64_t arg3,
|
||||
uint64_t arg4,
|
||||
uint64_t arg5,
|
||||
uint64_t arg6,
|
||||
uint64_t arg7);
|
||||
|
||||
smc_args_t *tsp_smc_handler(uint64_t func,
|
||||
uint64_t arg1,
|
||||
uint64_t arg2,
|
||||
uint64_t arg3,
|
||||
uint64_t arg4,
|
||||
uint64_t arg5,
|
||||
uint64_t arg6,
|
||||
uint64_t arg7);
|
||||
|
||||
smc_args_t *tsp_system_reset_main(uint64_t arg0,
|
||||
uint64_t arg1,
|
||||
uint64_t arg2,
|
||||
uint64_t arg3,
|
||||
uint64_t arg4,
|
||||
uint64_t arg5,
|
||||
uint64_t arg6,
|
||||
uint64_t arg7);
|
||||
|
||||
smc_args_t *tsp_system_off_main(uint64_t arg0,
|
||||
uint64_t arg1,
|
||||
uint64_t arg2,
|
||||
uint64_t arg3,
|
||||
uint64_t arg4,
|
||||
uint64_t arg5,
|
||||
uint64_t arg6,
|
||||
uint64_t arg7);
|
||||
|
||||
uint64_t tsp_main(void);
|
||||
#endif /* __ASSEMBLER__ */
|
||||
|
||||
#endif /* TSP_PRIVATE_H */
|
||||
91
arm-trusted-firmware.t234/bl32/tsp/tsp_timer.c
Normal file
91
arm-trusted-firmware.t234/bl32/tsp/tsp_timer.c
Normal file
@@ -0,0 +1,91 @@
|
||||
/*
|
||||
* Copyright (c) 2014-2019, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
#include <arch_helpers.h>
|
||||
#include <plat/common/platform.h>
|
||||
|
||||
#include "tsp_private.h"
|
||||
|
||||
/*******************************************************************************
|
||||
* Data structure to keep track of per-cpu secure generic timer context across
|
||||
* power management operations.
|
||||
******************************************************************************/
|
||||
typedef struct timer_context {
|
||||
uint64_t cval;
|
||||
uint32_t ctl;
|
||||
} timer_context_t;
|
||||
|
||||
static timer_context_t pcpu_timer_context[PLATFORM_CORE_COUNT];
|
||||
|
||||
/*******************************************************************************
|
||||
* This function initializes the generic timer to fire every 0.5 second
|
||||
******************************************************************************/
|
||||
void tsp_generic_timer_start(void)
|
||||
{
|
||||
uint64_t cval;
|
||||
uint32_t ctl = 0;
|
||||
|
||||
/* The timer will fire every 0.5 second */
|
||||
cval = read_cntpct_el0() + (read_cntfrq_el0() >> 1);
|
||||
write_cntps_cval_el1(cval);
|
||||
|
||||
/* Enable the secure physical timer */
|
||||
set_cntp_ctl_enable(ctl);
|
||||
write_cntps_ctl_el1(ctl);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* This function deasserts the timer interrupt and sets it up again
|
||||
******************************************************************************/
|
||||
void tsp_generic_timer_handler(void)
|
||||
{
|
||||
/* Ensure that the timer did assert the interrupt */
|
||||
assert(get_cntp_ctl_istatus(read_cntps_ctl_el1()));
|
||||
|
||||
/*
|
||||
* Disable the timer and reprogram it. The barriers ensure that there is
|
||||
* no reordering of instructions around the reprogramming code.
|
||||
*/
|
||||
isb();
|
||||
write_cntps_ctl_el1(0);
|
||||
tsp_generic_timer_start();
|
||||
isb();
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* This function deasserts the timer interrupt prior to cpu power down
|
||||
******************************************************************************/
|
||||
void tsp_generic_timer_stop(void)
|
||||
{
|
||||
/* Disable the timer */
|
||||
write_cntps_ctl_el1(0);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* This function saves the timer context prior to cpu suspension
|
||||
******************************************************************************/
|
||||
void tsp_generic_timer_save(void)
|
||||
{
|
||||
uint32_t linear_id = plat_my_core_pos();
|
||||
|
||||
pcpu_timer_context[linear_id].cval = read_cntps_cval_el1();
|
||||
pcpu_timer_context[linear_id].ctl = read_cntps_ctl_el1();
|
||||
flush_dcache_range((uint64_t) &pcpu_timer_context[linear_id],
|
||||
sizeof(pcpu_timer_context[linear_id]));
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* This function restores the timer context post cpu resumption
|
||||
******************************************************************************/
|
||||
void tsp_generic_timer_restore(void)
|
||||
{
|
||||
uint32_t linear_id = plat_my_core_pos();
|
||||
|
||||
write_cntps_cval_el1(pcpu_timer_context[linear_id].cval);
|
||||
write_cntps_ctl_el1(pcpu_timer_context[linear_id].ctl);
|
||||
}
|
||||
1542
arm-trusted-firmware.t234/changelog.yaml
Normal file
1542
arm-trusted-firmware.t234/changelog.yaml
Normal file
File diff suppressed because it is too large
Load Diff
239
arm-trusted-firmware.t234/common/aarch32/debug.S
Normal file
239
arm-trusted-firmware.t234/common/aarch32/debug.S
Normal file
@@ -0,0 +1,239 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2022, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <arch.h>
|
||||
#include <asm_macros.S>
|
||||
#include <common/debug.h>
|
||||
|
||||
.globl asm_print_str
|
||||
.globl asm_print_hex
|
||||
.globl asm_print_hex_bits
|
||||
.globl asm_assert
|
||||
.globl el3_panic
|
||||
.globl report_exception
|
||||
.globl report_prefetch_abort
|
||||
.globl report_data_abort
|
||||
|
||||
/* Since the max decimal input number is 65536 */
|
||||
#define MAX_DEC_DIVISOR 10000
|
||||
/* The offset to add to get ascii for numerals '0 - 9' */
|
||||
#define ASCII_OFFSET_NUM '0'
|
||||
|
||||
#if ENABLE_ASSERTIONS
|
||||
.section .rodata.assert_str, "aS"
|
||||
assert_msg1:
|
||||
.asciz "ASSERT: File "
|
||||
assert_msg2:
|
||||
#if ARM_ARCH_MAJOR == 7 && !defined(ARMV7_SUPPORTS_VIRTUALIZATION)
|
||||
/******************************************************************
|
||||
* Virtualization comes with the UDIV/SDIV instructions. If missing
|
||||
* write file line number in hexadecimal format.
|
||||
******************************************************************/
|
||||
.asciz " Line 0x"
|
||||
#else
|
||||
.asciz " Line "
|
||||
|
||||
/*
|
||||
* This macro is intended to be used to print the
|
||||
* line number in decimal. Used by asm_assert macro.
|
||||
* The max number expected is 65536.
|
||||
* In: r4 = the decimal to print.
|
||||
* Clobber: lr, r0, r1, r2, r5, r6
|
||||
*/
|
||||
.macro asm_print_line_dec
|
||||
mov r6, #10 /* Divide by 10 after every loop iteration */
|
||||
ldr r5, =MAX_DEC_DIVISOR
|
||||
dec_print_loop:
|
||||
udiv r0, r4, r5 /* Get the quotient */
|
||||
mls r4, r0, r5, r4 /* Find the remainder */
|
||||
add r0, r0, #ASCII_OFFSET_NUM /* Convert to ascii */
|
||||
bl plat_crash_console_putc
|
||||
udiv r5, r5, r6 /* Reduce divisor */
|
||||
cmp r5, #0
|
||||
bne dec_print_loop
|
||||
.endm
|
||||
#endif
|
||||
|
||||
/* ---------------------------------------------------------------------------
|
||||
* Assertion support in assembly.
|
||||
* The below function helps to support assertions in assembly where we do not
|
||||
* have a C runtime stack. Arguments to the function are :
|
||||
* r0 - File name
|
||||
* r1 - Line no
|
||||
* Clobber list : lr, r0 - r6
|
||||
* ---------------------------------------------------------------------------
|
||||
*/
|
||||
func asm_assert
|
||||
#if LOG_LEVEL >= LOG_LEVEL_INFO
|
||||
/*
|
||||
* Only print the output if LOG_LEVEL is higher or equal to
|
||||
* LOG_LEVEL_INFO, which is the default value for builds with DEBUG=1.
|
||||
*/
|
||||
/* Stash the parameters already in r0 and r1 */
|
||||
mov r5, r0
|
||||
mov r6, r1
|
||||
|
||||
/* Ensure the console is initialized */
|
||||
bl plat_crash_console_init
|
||||
|
||||
/* Check if the console is initialized */
|
||||
cmp r0, #0
|
||||
beq _assert_loop
|
||||
|
||||
/* The console is initialized */
|
||||
ldr r4, =assert_msg1
|
||||
bl asm_print_str
|
||||
mov r4, r5
|
||||
bl asm_print_str
|
||||
ldr r4, =assert_msg2
|
||||
bl asm_print_str
|
||||
|
||||
/* Check if line number higher than max permitted */
|
||||
ldr r4, =~0xffff
|
||||
tst r6, r4
|
||||
bne _assert_loop
|
||||
mov r4, r6
|
||||
|
||||
#if ARM_ARCH_MAJOR == 7 && !defined(ARMV7_SUPPORTS_VIRTUALIZATION)
|
||||
/******************************************************************
|
||||
* Virtualization comes with the UDIV/SDIV instructions. If missing
|
||||
* write file line number in hexadecimal format.
|
||||
******************************************************************/
|
||||
bl asm_print_hex
|
||||
#else
|
||||
asm_print_line_dec
|
||||
#endif
|
||||
bl plat_crash_console_flush
|
||||
_assert_loop:
|
||||
#endif /* LOG_LEVEL >= LOG_LEVEL_INFO */
|
||||
no_ret plat_panic_handler
|
||||
endfunc asm_assert
|
||||
#endif /* ENABLE_ASSERTIONS */
|
||||
|
||||
/*
|
||||
* This function prints a string from address in r4
|
||||
* Clobber: lr, r0 - r4
|
||||
*/
|
||||
func asm_print_str
|
||||
mov r3, lr
|
||||
1:
|
||||
ldrb r0, [r4], #0x1
|
||||
cmp r0, #0
|
||||
beq 2f
|
||||
bl plat_crash_console_putc
|
||||
b 1b
|
||||
2:
|
||||
bx r3
|
||||
endfunc asm_print_str
|
||||
|
||||
/*
|
||||
* This function prints a hexadecimal number in r4.
|
||||
* In: r4 = the hexadecimal to print.
|
||||
* Clobber: lr, r0 - r3, r5
|
||||
*/
|
||||
func asm_print_hex
|
||||
mov r5, #32 /* No of bits to convert to ascii */
|
||||
|
||||
/* Convert to ascii number of bits in r5 */
|
||||
asm_print_hex_bits:
|
||||
mov r3, lr
|
||||
1:
|
||||
sub r5, r5, #4
|
||||
lsr r0, r4, r5
|
||||
and r0, r0, #0xf
|
||||
cmp r0, #0xa
|
||||
blo 2f
|
||||
/* Add by 0x27 in addition to ASCII_OFFSET_NUM
|
||||
* to get ascii for characters 'a - f'.
|
||||
*/
|
||||
add r0, r0, #0x27
|
||||
2:
|
||||
add r0, r0, #ASCII_OFFSET_NUM
|
||||
bl plat_crash_console_putc
|
||||
cmp r5, #0
|
||||
bne 1b
|
||||
bx r3
|
||||
endfunc asm_print_hex
|
||||
|
||||
/***********************************************************
|
||||
* The common implementation of el3_panic for all BL stages
|
||||
***********************************************************/
|
||||
|
||||
.section .rodata.panic_str, "aS"
|
||||
panic_msg: .asciz "PANIC at PC : 0x"
|
||||
panic_end: .asciz "\r\n"
|
||||
|
||||
func el3_panic
|
||||
/* Have LR copy point to PC at the time of panic */
|
||||
sub r6, lr, #4
|
||||
|
||||
/* Initialize crash console and verify success */
|
||||
bl plat_crash_console_init
|
||||
|
||||
/* Check if the console is initialized */
|
||||
cmp r0, #0
|
||||
beq _panic_handler
|
||||
|
||||
/* The console is initialized */
|
||||
ldr r4, =panic_msg
|
||||
bl asm_print_str
|
||||
|
||||
/* Print LR in hex */
|
||||
mov r4, r6
|
||||
bl asm_print_hex
|
||||
|
||||
/* Print new line */
|
||||
ldr r4, =panic_end
|
||||
bl asm_print_str
|
||||
|
||||
bl plat_crash_console_flush
|
||||
|
||||
_panic_handler:
|
||||
mov lr, r6
|
||||
b plat_panic_handler
|
||||
endfunc el3_panic
|
||||
|
||||
/***********************************************************
|
||||
* This function is called from the vector table for
|
||||
* unhandled exceptions. It reads the current mode and
|
||||
* passes it to platform.
|
||||
***********************************************************/
|
||||
func report_exception
|
||||
mrs r0, cpsr
|
||||
and r0, #MODE32_MASK
|
||||
bl plat_report_exception
|
||||
no_ret plat_panic_handler
|
||||
endfunc report_exception
|
||||
|
||||
/***********************************************************
|
||||
* This function is called from the vector table for
|
||||
* unhandled exceptions. The lr_abt is given as an
|
||||
* argument to platform handler.
|
||||
***********************************************************/
|
||||
func report_prefetch_abort
|
||||
#if ARM_ARCH_MAJOR == 7 && !defined(ARMV7_SUPPORTS_VIRTUALIZATION)
|
||||
b report_exception
|
||||
#else
|
||||
mrs r0, lr_abt
|
||||
bl plat_report_prefetch_abort
|
||||
no_ret plat_panic_handler
|
||||
#endif
|
||||
endfunc report_prefetch_abort
|
||||
|
||||
/***********************************************************
|
||||
* This function is called from the vector table for
|
||||
* unhandled exceptions. The lr_abt is given as an
|
||||
* argument to platform handler.
|
||||
***********************************************************/
|
||||
func report_data_abort
|
||||
#if ARM_ARCH_MAJOR == 7 && !defined(ARMV7_SUPPORTS_VIRTUALIZATION)
|
||||
b report_exception
|
||||
#else
|
||||
mrs r0, lr_abt
|
||||
bl plat_report_data_abort
|
||||
no_ret plat_panic_handler
|
||||
#endif
|
||||
endfunc report_data_abort
|
||||
202
arm-trusted-firmware.t234/common/aarch64/debug.S
Normal file
202
arm-trusted-firmware.t234/common/aarch64/debug.S
Normal file
@@ -0,0 +1,202 @@
|
||||
/*
|
||||
* Copyright (c) 2014-2023 Arm Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <arch.h>
|
||||
#include <asm_macros.S>
|
||||
#include <common/debug.h>
|
||||
|
||||
.globl asm_print_str
|
||||
.globl asm_print_hex
|
||||
.globl asm_print_hex_bits
|
||||
.globl asm_print_newline
|
||||
.globl asm_assert
|
||||
.globl el3_panic
|
||||
.globl elx_panic
|
||||
|
||||
/* Since the max decimal input number is 65536 */
|
||||
#define MAX_DEC_DIVISOR 10000
|
||||
/* The offset to add to get ascii for numerals '0 - 9' */
|
||||
#define ASCII_OFFSET_NUM 0x30
|
||||
|
||||
#if ENABLE_ASSERTIONS
|
||||
.section .rodata.assert_str, "aS"
|
||||
assert_msg1:
|
||||
.asciz "ASSERT: File "
|
||||
assert_msg2:
|
||||
.asciz " Line "
|
||||
|
||||
/*
|
||||
* This macro is intended to be used to print the
|
||||
* line number in decimal. Used by asm_assert macro.
|
||||
* The max number expected is 65536.
|
||||
* In: x4 = the decimal to print.
|
||||
* Clobber: x30, x0, x1, x2, x5, x6
|
||||
*/
|
||||
.macro asm_print_line_dec
|
||||
mov x6, #10 /* Divide by 10 after every loop iteration */
|
||||
mov x5, #MAX_DEC_DIVISOR
|
||||
dec_print_loop:
|
||||
udiv x0, x4, x5 /* Get the quotient */
|
||||
msub x4, x0, x5, x4 /* Find the remainder */
|
||||
add x0, x0, #ASCII_OFFSET_NUM /* Convert to ascii */
|
||||
bl plat_crash_console_putc
|
||||
udiv x5, x5, x6 /* Reduce divisor */
|
||||
cbnz x5, dec_print_loop
|
||||
.endm
|
||||
|
||||
|
||||
/* ---------------------------------------------------------------------------
|
||||
* Assertion support in assembly.
|
||||
* The below function helps to support assertions in assembly where we do not
|
||||
* have a C runtime stack. Arguments to the function are :
|
||||
* x0 - File name
|
||||
* x1 - Line no
|
||||
* Clobber list : x30, x0, x1, x2, x3, x4, x5, x6.
|
||||
* ---------------------------------------------------------------------------
|
||||
*/
|
||||
func asm_assert
|
||||
#if LOG_LEVEL >= LOG_LEVEL_INFO
|
||||
/*
|
||||
* Only print the output if LOG_LEVEL is higher or equal to
|
||||
* LOG_LEVEL_INFO, which is the default value for builds with DEBUG=1.
|
||||
*/
|
||||
mov x5, x0
|
||||
mov x6, x1
|
||||
|
||||
/* Ensure the console is initialized */
|
||||
bl plat_crash_console_init
|
||||
|
||||
/* Check if the console is initialized */
|
||||
cbz x0, _assert_loop
|
||||
|
||||
/* The console is initialized */
|
||||
adr x4, assert_msg1
|
||||
bl asm_print_str
|
||||
mov x4, x5
|
||||
bl asm_print_str
|
||||
adr x4, assert_msg2
|
||||
bl asm_print_str
|
||||
|
||||
/* Check if line number higher than max permitted */
|
||||
tst x6, #~0xffff
|
||||
b.ne _assert_loop
|
||||
mov x4, x6
|
||||
asm_print_line_dec
|
||||
bl plat_crash_console_flush
|
||||
_assert_loop:
|
||||
#endif /* LOG_LEVEL >= LOG_LEVEL_INFO */
|
||||
no_ret plat_panic_handler
|
||||
endfunc asm_assert
|
||||
#endif /* ENABLE_ASSERTIONS */
|
||||
|
||||
/*
|
||||
* This function prints a string from address in x4.
|
||||
* In: x4 = pointer to string.
|
||||
* Clobber: x30, x0, x1, x2, x3
|
||||
*/
|
||||
func asm_print_str
|
||||
mov x3, x30
|
||||
1:
|
||||
ldrb w0, [x4], #0x1
|
||||
cbz x0, 2f
|
||||
bl plat_crash_console_putc
|
||||
b 1b
|
||||
2:
|
||||
ret x3
|
||||
endfunc asm_print_str
|
||||
|
||||
/*
|
||||
* This function prints a hexadecimal number in x4.
|
||||
* In: x4 = the hexadecimal to print.
|
||||
* Clobber: x30, x0 - x3, x5
|
||||
*/
|
||||
func asm_print_hex
|
||||
mov x5, #64 /* No of bits to convert to ascii */
|
||||
|
||||
/* Convert to ascii number of bits in x5 */
|
||||
asm_print_hex_bits:
|
||||
mov x3, x30
|
||||
1:
|
||||
sub x5, x5, #4
|
||||
lsrv x0, x4, x5
|
||||
and x0, x0, #0xf
|
||||
cmp x0, #0xA
|
||||
b.lo 2f
|
||||
/* Add by 0x27 in addition to ASCII_OFFSET_NUM
|
||||
* to get ascii for characters 'a - f'.
|
||||
*/
|
||||
add x0, x0, #0x27
|
||||
2:
|
||||
add x0, x0, #ASCII_OFFSET_NUM
|
||||
bl plat_crash_console_putc
|
||||
cbnz x5, 1b
|
||||
ret x3
|
||||
endfunc asm_print_hex
|
||||
|
||||
/*
|
||||
* Helper function to print newline to console
|
||||
* Clobber: x0
|
||||
*/
|
||||
func asm_print_newline
|
||||
mov x0, '\n'
|
||||
b plat_crash_console_putc
|
||||
endfunc asm_print_newline
|
||||
|
||||
/***********************************************************
|
||||
* The common implementation of el3_panic for all BL stages
|
||||
***********************************************************/
|
||||
|
||||
.section .rodata.panic_str, "aS"
|
||||
panic_msg: .asciz "PANIC at PC : 0x"
|
||||
|
||||
func elx_panic
|
||||
#if CRASH_REPORTING && defined(IMAGE_BL31)
|
||||
b report_elx_panic
|
||||
#endif /* CRASH_REPORTING && IMAGE_BL31 */
|
||||
|
||||
b panic_common
|
||||
endfunc elx_panic
|
||||
|
||||
/* ---------------------------------------------------------------------------
|
||||
* el3_panic assumes that it is invoked from a C Runtime Environment ie a
|
||||
* valid stack exists. This call will not return.
|
||||
* Clobber list : if CRASH_REPORTING is not enabled then x30, x0 - x6
|
||||
* ---------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
func el3_panic
|
||||
#if CRASH_REPORTING && defined(IMAGE_BL31)
|
||||
b report_el3_panic
|
||||
#endif /* CRASH_REPORTING && IMAGE_BL31 */
|
||||
|
||||
panic_common:
|
||||
mov x6, x30
|
||||
bl plat_crash_console_init
|
||||
|
||||
/* Check if the console is initialized */
|
||||
cbz x0, _panic_handler
|
||||
|
||||
/* The console is initialized */
|
||||
adr x4, panic_msg
|
||||
bl asm_print_str
|
||||
mov x4, x6
|
||||
|
||||
/* The panic location is lr -4 */
|
||||
sub x4, x4, #4
|
||||
bl asm_print_hex
|
||||
|
||||
/* Print new line */
|
||||
bl asm_print_newline
|
||||
|
||||
bl plat_crash_console_flush
|
||||
|
||||
_panic_handler:
|
||||
/* Pass to plat_panic_handler the address from where el3_panic was
|
||||
* called, not the address of the call from el3_panic. */
|
||||
mov x30, x6
|
||||
b plat_panic_handler
|
||||
|
||||
endfunc el3_panic
|
||||
129
arm-trusted-firmware.t234/common/aarch64/early_exceptions.S
Normal file
129
arm-trusted-firmware.t234/common/aarch64/early_exceptions.S
Normal file
@@ -0,0 +1,129 @@
|
||||
/*
|
||||
* Copyright (c) 2013-2016, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <asm_macros.S>
|
||||
#include <common/bl_common.h>
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* Very simple stackless exception handlers used by BL2 and BL31 stages.
|
||||
* BL31 uses them before stacks are setup. BL2 uses them throughout.
|
||||
* -----------------------------------------------------------------------------
|
||||
*/
|
||||
.globl early_exceptions
|
||||
|
||||
vector_base early_exceptions
|
||||
|
||||
/* -----------------------------------------------------
|
||||
* Current EL with SP0 : 0x0 - 0x200
|
||||
* -----------------------------------------------------
|
||||
*/
|
||||
vector_entry SynchronousExceptionSP0
|
||||
mov x0, #SYNC_EXCEPTION_SP_EL0
|
||||
bl plat_report_exception
|
||||
no_ret plat_panic_handler
|
||||
end_vector_entry SynchronousExceptionSP0
|
||||
|
||||
vector_entry IrqSP0
|
||||
mov x0, #IRQ_SP_EL0
|
||||
bl plat_report_exception
|
||||
no_ret plat_panic_handler
|
||||
end_vector_entry IrqSP0
|
||||
|
||||
vector_entry FiqSP0
|
||||
mov x0, #FIQ_SP_EL0
|
||||
bl plat_report_exception
|
||||
no_ret plat_panic_handler
|
||||
end_vector_entry FiqSP0
|
||||
|
||||
vector_entry SErrorSP0
|
||||
mov x0, #SERROR_SP_EL0
|
||||
bl plat_report_exception
|
||||
no_ret plat_panic_handler
|
||||
end_vector_entry SErrorSP0
|
||||
|
||||
/* -----------------------------------------------------
|
||||
* Current EL with SPx: 0x200 - 0x400
|
||||
* -----------------------------------------------------
|
||||
*/
|
||||
vector_entry SynchronousExceptionSPx
|
||||
mov x0, #SYNC_EXCEPTION_SP_ELX
|
||||
bl plat_report_exception
|
||||
no_ret plat_panic_handler
|
||||
end_vector_entry SynchronousExceptionSPx
|
||||
|
||||
vector_entry IrqSPx
|
||||
mov x0, #IRQ_SP_ELX
|
||||
bl plat_report_exception
|
||||
no_ret plat_panic_handler
|
||||
end_vector_entry IrqSPx
|
||||
|
||||
vector_entry FiqSPx
|
||||
mov x0, #FIQ_SP_ELX
|
||||
bl plat_report_exception
|
||||
no_ret plat_panic_handler
|
||||
end_vector_entry FiqSPx
|
||||
|
||||
vector_entry SErrorSPx
|
||||
mov x0, #SERROR_SP_ELX
|
||||
bl plat_report_exception
|
||||
no_ret plat_panic_handler
|
||||
end_vector_entry SErrorSPx
|
||||
|
||||
/* -----------------------------------------------------
|
||||
* Lower EL using AArch64 : 0x400 - 0x600
|
||||
* -----------------------------------------------------
|
||||
*/
|
||||
vector_entry SynchronousExceptionA64
|
||||
mov x0, #SYNC_EXCEPTION_AARCH64
|
||||
bl plat_report_exception
|
||||
no_ret plat_panic_handler
|
||||
end_vector_entry SynchronousExceptionA64
|
||||
|
||||
vector_entry IrqA64
|
||||
mov x0, #IRQ_AARCH64
|
||||
bl plat_report_exception
|
||||
no_ret plat_panic_handler
|
||||
end_vector_entry IrqA64
|
||||
|
||||
vector_entry FiqA64
|
||||
mov x0, #FIQ_AARCH64
|
||||
bl plat_report_exception
|
||||
no_ret plat_panic_handler
|
||||
end_vector_entry FiqA64
|
||||
|
||||
vector_entry SErrorA64
|
||||
mov x0, #SERROR_AARCH64
|
||||
bl plat_report_exception
|
||||
no_ret plat_panic_handler
|
||||
end_vector_entry SErrorA64
|
||||
|
||||
/* -----------------------------------------------------
|
||||
* Lower EL using AArch32 : 0x600 - 0x800
|
||||
* -----------------------------------------------------
|
||||
*/
|
||||
vector_entry SynchronousExceptionA32
|
||||
mov x0, #SYNC_EXCEPTION_AARCH32
|
||||
bl plat_report_exception
|
||||
no_ret plat_panic_handler
|
||||
end_vector_entry SynchronousExceptionA32
|
||||
|
||||
vector_entry IrqA32
|
||||
mov x0, #IRQ_AARCH32
|
||||
bl plat_report_exception
|
||||
no_ret plat_panic_handler
|
||||
end_vector_entry IrqA32
|
||||
|
||||
vector_entry FiqA32
|
||||
mov x0, #FIQ_AARCH32
|
||||
bl plat_report_exception
|
||||
no_ret plat_panic_handler
|
||||
end_vector_entry FiqA32
|
||||
|
||||
vector_entry SErrorA32
|
||||
mov x0, #SERROR_AARCH32
|
||||
bl plat_report_exception
|
||||
no_ret plat_panic_handler
|
||||
end_vector_entry SErrorA32
|
||||
266
arm-trusted-firmware.t234/common/backtrace/backtrace.c
Normal file
266
arm-trusted-firmware.t234/common/backtrace/backtrace.c
Normal file
@@ -0,0 +1,266 @@
|
||||
/*
|
||||
* Copyright (c) 2018-2022, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include <arch_helpers.h>
|
||||
#include <common/debug.h>
|
||||
#include <drivers/console.h>
|
||||
|
||||
/* Maximum number of entries in the backtrace to display */
|
||||
#define UNWIND_LIMIT 20U
|
||||
|
||||
/*
|
||||
* If -fno-omit-frame-pointer is used:
|
||||
*
|
||||
* - AArch64: The AAPCS defines the format of the frame records and mandates the
|
||||
* usage of r29 as frame pointer.
|
||||
*
|
||||
* - AArch32: The format of the frame records is not defined in the AAPCS.
|
||||
* However, at least GCC and Clang use the same format. When they are forced
|
||||
* to only generate A32 code (with -marm), they use r11 as frame pointer and a
|
||||
* similar format as in AArch64. If interworking with T32 is enabled, the
|
||||
* frame pointer is r7 and the format is different. This is not supported by
|
||||
* this implementation of backtrace, so it is needed to use -marm.
|
||||
*/
|
||||
|
||||
/* Frame records form a linked list in the stack */
|
||||
struct frame_record {
|
||||
/* Previous frame record in the list */
|
||||
struct frame_record *parent;
|
||||
/* Return address of the function at this level */
|
||||
uintptr_t return_addr;
|
||||
};
|
||||
|
||||
static inline uintptr_t extract_address(uintptr_t address)
|
||||
{
|
||||
uintptr_t ret = address;
|
||||
|
||||
#if ENABLE_PAUTH
|
||||
/*
|
||||
* When pointer authentication is enabled, the LR value saved on the
|
||||
* stack contains a PAC. It must be stripped to retrieve the return
|
||||
* address.
|
||||
*/
|
||||
|
||||
xpaci(ret);
|
||||
#endif
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Returns true if the address points to a virtual address that can be read at
|
||||
* the current EL, false otherwise.
|
||||
*/
|
||||
#ifdef __aarch64__
|
||||
static bool is_address_readable(uintptr_t address)
|
||||
{
|
||||
unsigned int el = get_current_el();
|
||||
uintptr_t addr = extract_address(address);
|
||||
|
||||
if (el == 3U) {
|
||||
ats1e3r(addr);
|
||||
} else if (el == 2U) {
|
||||
ats1e2r(addr);
|
||||
} else {
|
||||
AT(ats1e1r, addr);
|
||||
}
|
||||
|
||||
isb();
|
||||
|
||||
/* If PAR.F == 1 the address translation was aborted. */
|
||||
if ((read_par_el1() & PAR_F_MASK) != 0U)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
#else /* !__aarch64__ */
|
||||
static bool is_address_readable(uintptr_t addr)
|
||||
{
|
||||
unsigned int el = get_current_el();
|
||||
|
||||
if (el == 3U) {
|
||||
write_ats1cpr(addr);
|
||||
} else if (el == 2U) {
|
||||
write_ats1hr(addr);
|
||||
} else {
|
||||
write_ats1cpr(addr);
|
||||
}
|
||||
|
||||
isb();
|
||||
|
||||
/* If PAR.F == 1 the address translation was aborted. */
|
||||
if ((read64_par() & PAR_F_MASK) != 0U)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
#endif /* __aarch64__ */
|
||||
|
||||
/*
|
||||
* Returns true if all the bytes in a given object are in mapped memory and an
|
||||
* LDR using this pointer would succeed, false otherwise.
|
||||
*/
|
||||
static bool is_valid_object(uintptr_t addr, size_t size)
|
||||
{
|
||||
assert(size > 0U);
|
||||
|
||||
if (addr == 0U)
|
||||
return false;
|
||||
|
||||
/* Detect overflows */
|
||||
if ((addr + size) < addr)
|
||||
return false;
|
||||
|
||||
/* A pointer not aligned properly could trigger an alignment fault. */
|
||||
if ((addr & (sizeof(uintptr_t) - 1U)) != 0U)
|
||||
return false;
|
||||
|
||||
/* Check that all the object is readable */
|
||||
for (size_t i = 0; i < size; i++) {
|
||||
if (!is_address_readable(addr + i))
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
* Returns true if the specified address is correctly aligned and points to a
|
||||
* valid memory region.
|
||||
*/
|
||||
static bool is_valid_jump_address(uintptr_t addr)
|
||||
{
|
||||
if (addr == 0U)
|
||||
return false;
|
||||
|
||||
/* Check alignment. Both A64 and A32 use 32-bit opcodes */
|
||||
if ((addr & (sizeof(uint32_t) - 1U)) != 0U)
|
||||
return false;
|
||||
|
||||
if (!is_address_readable(addr))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
* Returns true if the pointer points at a valid frame record, false otherwise.
|
||||
*/
|
||||
static bool is_valid_frame_record(struct frame_record *fr)
|
||||
{
|
||||
return is_valid_object((uintptr_t)fr, sizeof(struct frame_record));
|
||||
}
|
||||
|
||||
/*
|
||||
* Adjust the frame-pointer-register value by 4 bytes on AArch32 to have the
|
||||
* same layout as AArch64.
|
||||
*/
|
||||
static struct frame_record *adjust_frame_record(struct frame_record *fr)
|
||||
{
|
||||
#ifdef __aarch64__
|
||||
return fr;
|
||||
#else
|
||||
return (struct frame_record *)((uintptr_t)fr - 4U);
|
||||
#endif
|
||||
}
|
||||
|
||||
static void unwind_stack(struct frame_record *fr, uintptr_t current_pc,
|
||||
uintptr_t link_register)
|
||||
{
|
||||
uintptr_t call_site;
|
||||
static const char *backtrace_str = "%u: %s: 0x%lx\n";
|
||||
const char *el_str = get_el_str(get_current_el());
|
||||
|
||||
if (!is_valid_frame_record(fr)) {
|
||||
printf("ERROR: Corrupted frame pointer (frame record address = %p)\n",
|
||||
fr);
|
||||
return;
|
||||
}
|
||||
|
||||
call_site = extract_address(fr->return_addr);
|
||||
if (call_site != link_register) {
|
||||
printf("ERROR: Corrupted stack (frame record address = %p)\n",
|
||||
fr);
|
||||
return;
|
||||
}
|
||||
|
||||
/* The level 0 of the backtrace is the current backtrace function */
|
||||
printf(backtrace_str, 0U, el_str, current_pc);
|
||||
|
||||
/*
|
||||
* The last frame record pointer in the linked list at the beginning of
|
||||
* the stack should be NULL unless stack is corrupted.
|
||||
*/
|
||||
for (unsigned int i = 1U; i < UNWIND_LIMIT; i++) {
|
||||
/* If an invalid frame record is found, exit. */
|
||||
if (!is_valid_frame_record(fr))
|
||||
return;
|
||||
/*
|
||||
* A32 and A64 are fixed length so the address from where the
|
||||
* call was made is the instruction before the return address,
|
||||
* which is always 4 bytes before it.
|
||||
*/
|
||||
|
||||
call_site = extract_address(fr->return_addr) - 4U;
|
||||
|
||||
/*
|
||||
* If the address is invalid it means that the frame record is
|
||||
* probably corrupted.
|
||||
*/
|
||||
if (!is_valid_jump_address(call_site))
|
||||
return;
|
||||
|
||||
printf(backtrace_str, i, el_str, call_site);
|
||||
|
||||
fr = adjust_frame_record(fr->parent);
|
||||
}
|
||||
|
||||
printf("ERROR: Max backtrace depth reached\n");
|
||||
}
|
||||
|
||||
/*
|
||||
* Display a backtrace. The cookie string parameter is displayed along the
|
||||
* trace to help filter the log messages.
|
||||
*
|
||||
* Many things can prevent displaying the expected backtrace. For example,
|
||||
* compiler optimizations can use a branch instead of branch with link when it
|
||||
* detects a tail call. The backtrace level for this caller will not be
|
||||
* displayed, as it does not appear in the call stack anymore. Also, assembly
|
||||
* functions will not be displayed unless they setup AAPCS compliant frame
|
||||
* records on AArch64 and compliant with GCC-specific frame record format on
|
||||
* AArch32.
|
||||
*
|
||||
* Usage of the trace: addr2line can be used to map the addresses to function
|
||||
* and source code location when given the ELF file compiled with debug
|
||||
* information. The "-i" flag is highly recommended to improve display of
|
||||
* inlined function. The *.dump files generated when building each image can
|
||||
* also be used.
|
||||
*
|
||||
* WARNING: In case of corrupted stack, this function could display security
|
||||
* sensitive information past the beginning of the stack so it must not be used
|
||||
* in production build. This function is only compiled in when ENABLE_BACKTRACE
|
||||
* is set to 1.
|
||||
*/
|
||||
void backtrace(const char *cookie)
|
||||
{
|
||||
uintptr_t return_address = (uintptr_t)__builtin_return_address(0U);
|
||||
struct frame_record *fr = __builtin_frame_address(0U);
|
||||
|
||||
/* Printing the backtrace may crash the system, flush before starting */
|
||||
console_flush();
|
||||
|
||||
fr = adjust_frame_record(fr);
|
||||
|
||||
printf("BACKTRACE: START: %s\n", cookie);
|
||||
|
||||
unwind_stack(fr, (uintptr_t)&backtrace, return_address);
|
||||
|
||||
printf("BACKTRACE: END: %s\n", cookie);
|
||||
}
|
||||
31
arm-trusted-firmware.t234/common/backtrace/backtrace.mk
Normal file
31
arm-trusted-firmware.t234/common/backtrace/backtrace.mk
Normal file
@@ -0,0 +1,31 @@
|
||||
#
|
||||
# Copyright (c) 2018, ARM Limited and Contributors. All rights reserved.
|
||||
#
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
#
|
||||
|
||||
# Enable backtrace by default in DEBUG AArch64 builds
|
||||
ifeq (${ARCH},aarch32)
|
||||
ENABLE_BACKTRACE := 0
|
||||
else
|
||||
ENABLE_BACKTRACE := ${DEBUG}
|
||||
endif
|
||||
|
||||
ifeq (${ENABLE_BACKTRACE},1)
|
||||
# Force the compiler to include the frame pointer
|
||||
TF_CFLAGS += -fno-omit-frame-pointer
|
||||
|
||||
BL_COMMON_SOURCES += common/backtrace/backtrace.c
|
||||
endif
|
||||
|
||||
ifeq (${ARCH},aarch32)
|
||||
ifeq (${ENABLE_BACKTRACE},1)
|
||||
ifneq (${AARCH32_INSTRUCTION_SET},A32)
|
||||
$(error Error: AARCH32_INSTRUCTION_SET=A32 is needed \
|
||||
for ENABLE_BACKTRACE when compiling for AArch32.)
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
$(eval $(call assert_boolean,ENABLE_BACKTRACE))
|
||||
$(eval $(call add_define,ENABLE_BACKTRACE))
|
||||
279
arm-trusted-firmware.t234/common/bl_common.c
Normal file
279
arm-trusted-firmware.t234/common/bl_common.c
Normal file
@@ -0,0 +1,279 @@
|
||||
/*
|
||||
* Copyright (c) 2013-2024, Arm Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <arch.h>
|
||||
#include <arch_features.h>
|
||||
#include <arch_helpers.h>
|
||||
#include <common/bl_common.h>
|
||||
#include <common/build_message.h>
|
||||
#include <common/debug.h>
|
||||
#include <drivers/auth/auth_mod.h>
|
||||
#include <drivers/io/io_storage.h>
|
||||
#include <lib/utils.h>
|
||||
#include <lib/xlat_tables/xlat_tables_defs.h>
|
||||
#include <plat/common/platform.h>
|
||||
|
||||
#if TRUSTED_BOARD_BOOT
|
||||
# ifdef DYN_DISABLE_AUTH
|
||||
static int disable_auth;
|
||||
|
||||
/******************************************************************************
|
||||
* API to dynamically disable authentication. Only meant for development
|
||||
* systems. This is only invoked if DYN_DISABLE_AUTH is defined.
|
||||
*****************************************************************************/
|
||||
void dyn_disable_auth(void)
|
||||
{
|
||||
INFO("Disabling authentication of images dynamically\n");
|
||||
disable_auth = 1;
|
||||
}
|
||||
# endif /* DYN_DISABLE_AUTH */
|
||||
|
||||
/******************************************************************************
|
||||
* Function to determine whether the authentication is disabled dynamically.
|
||||
*****************************************************************************/
|
||||
static int dyn_is_auth_disabled(void)
|
||||
{
|
||||
# ifdef DYN_DISABLE_AUTH
|
||||
return disable_auth;
|
||||
# else
|
||||
return 0;
|
||||
# endif
|
||||
}
|
||||
#endif /* TRUSTED_BOARD_BOOT */
|
||||
|
||||
uintptr_t page_align(uintptr_t value, unsigned dir)
|
||||
{
|
||||
/* Round up the limit to the next page boundary */
|
||||
if ((value & PAGE_SIZE_MASK) != 0U) {
|
||||
value &= ~PAGE_SIZE_MASK;
|
||||
if (dir == UP)
|
||||
value += PAGE_SIZE;
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Internal function to load an image at a specific address given
|
||||
* an image ID and extents of free memory.
|
||||
*
|
||||
* If the load is successful then the image information is updated.
|
||||
*
|
||||
* Returns 0 on success, a negative error code otherwise.
|
||||
******************************************************************************/
|
||||
static int load_image(unsigned int image_id, image_info_t *image_data)
|
||||
{
|
||||
uintptr_t dev_handle;
|
||||
uintptr_t image_handle;
|
||||
uintptr_t image_spec;
|
||||
uintptr_t image_base;
|
||||
size_t image_size;
|
||||
size_t bytes_read;
|
||||
int io_result;
|
||||
|
||||
assert(image_data != NULL);
|
||||
assert(image_data->h.version >= VERSION_2);
|
||||
|
||||
image_base = image_data->image_base;
|
||||
|
||||
/* Obtain a reference to the image by querying the platform layer */
|
||||
io_result = plat_get_image_source(image_id, &dev_handle, &image_spec);
|
||||
if (io_result != 0) {
|
||||
WARN("Failed to obtain reference to image id=%u (%i)\n",
|
||||
image_id, io_result);
|
||||
return io_result;
|
||||
}
|
||||
|
||||
/* Attempt to access the image */
|
||||
io_result = io_open(dev_handle, image_spec, &image_handle);
|
||||
if (io_result != 0) {
|
||||
WARN("Failed to access image id=%u (%i)\n",
|
||||
image_id, io_result);
|
||||
return io_result;
|
||||
}
|
||||
|
||||
INFO("Loading image id=%u at address 0x%lx\n", image_id, image_base);
|
||||
|
||||
/* Find the size of the image */
|
||||
io_result = io_size(image_handle, &image_size);
|
||||
if ((io_result != 0) || (image_size == 0U)) {
|
||||
WARN("Failed to determine the size of the image id=%u (%i)\n",
|
||||
image_id, io_result);
|
||||
goto exit;
|
||||
}
|
||||
|
||||
/* Check that the image size to load is within limit */
|
||||
if (image_size > image_data->image_max_size) {
|
||||
WARN("Image id=%u size out of bounds\n", image_id);
|
||||
io_result = -EFBIG;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
/*
|
||||
* image_data->image_max_size is a uint32_t so image_size will always
|
||||
* fit in image_data->image_size.
|
||||
*/
|
||||
image_data->image_size = (uint32_t)image_size;
|
||||
|
||||
/* We have enough space so load the image now */
|
||||
/* TODO: Consider whether to try to recover/retry a partially successful read */
|
||||
io_result = io_read(image_handle, image_base, image_size, &bytes_read);
|
||||
if ((io_result != 0) || (bytes_read < image_size)) {
|
||||
WARN("Failed to load image id=%u (%i)\n", image_id, io_result);
|
||||
goto exit;
|
||||
}
|
||||
|
||||
INFO("Image id=%u loaded: 0x%lx - 0x%lx\n", image_id, image_base,
|
||||
(uintptr_t)(image_base + image_size));
|
||||
|
||||
exit:
|
||||
(void)io_close(image_handle);
|
||||
/* Ignore improbable/unrecoverable error in 'close' */
|
||||
|
||||
/* TODO: Consider maintaining open device connection from this bootloader stage */
|
||||
(void)io_dev_close(dev_handle);
|
||||
/* Ignore improbable/unrecoverable error in 'dev_close' */
|
||||
|
||||
return io_result;
|
||||
}
|
||||
|
||||
#if TRUSTED_BOARD_BOOT
|
||||
/*
|
||||
* This function uses recursion to authenticate the parent images up to the root
|
||||
* of trust.
|
||||
*/
|
||||
static int load_auth_image_recursive(unsigned int image_id,
|
||||
image_info_t *image_data)
|
||||
{
|
||||
int rc;
|
||||
unsigned int parent_id;
|
||||
|
||||
/* Use recursion to authenticate parent images */
|
||||
rc = auth_mod_get_parent_id(image_id, &parent_id);
|
||||
if (rc == 0) {
|
||||
rc = load_auth_image_recursive(parent_id, image_data);
|
||||
if (rc != 0) {
|
||||
return rc;
|
||||
}
|
||||
}
|
||||
|
||||
/* Load the image */
|
||||
rc = load_image(image_id, image_data);
|
||||
if (rc != 0) {
|
||||
return rc;
|
||||
}
|
||||
|
||||
/* Authenticate it */
|
||||
rc = auth_mod_verify_img(image_id,
|
||||
(void *)image_data->image_base,
|
||||
image_data->image_size);
|
||||
if (rc != 0) {
|
||||
/* Authentication error, zero memory and flush it right away. */
|
||||
zero_normalmem((void *)image_data->image_base,
|
||||
image_data->image_size);
|
||||
flush_dcache_range(image_data->image_base,
|
||||
image_data->image_size);
|
||||
return -EAUTH;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif /* TRUSTED_BOARD_BOOT */
|
||||
|
||||
static int load_auth_image_internal(unsigned int image_id,
|
||||
image_info_t *image_data)
|
||||
{
|
||||
#if TRUSTED_BOARD_BOOT
|
||||
if (dyn_is_auth_disabled() == 0) {
|
||||
return load_auth_image_recursive(image_id, image_data);
|
||||
}
|
||||
#endif
|
||||
|
||||
return load_image(image_id, image_data);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Generic function to load and authenticate an image. The image is actually
|
||||
* loaded by calling the 'load_image()' function. Therefore, it returns the
|
||||
* same error codes if the loading operation failed, or -EAUTH if the
|
||||
* authentication failed. In addition, this function uses recursion to
|
||||
* authenticate the parent images up to the root of trust (if TBB is enabled).
|
||||
******************************************************************************/
|
||||
int load_auth_image(unsigned int image_id, image_info_t *image_data)
|
||||
{
|
||||
int err;
|
||||
|
||||
if ((plat_try_img_ops == NULL) || (plat_try_img_ops->next_instance == NULL)) {
|
||||
err = load_auth_image_internal(image_id, image_data);
|
||||
} else {
|
||||
do {
|
||||
err = load_auth_image_internal(image_id, image_data);
|
||||
if (err != 0) {
|
||||
if (plat_try_img_ops->next_instance(image_id) != 0) {
|
||||
return err;
|
||||
}
|
||||
}
|
||||
} while (err != 0);
|
||||
}
|
||||
|
||||
if (err == 0) {
|
||||
/*
|
||||
* If loading of the image gets passed (along with its
|
||||
* authentication in case of Trusted-Boot flow) then measure
|
||||
* it (if MEASURED_BOOT flag is enabled).
|
||||
*/
|
||||
err = plat_mboot_measure_image(image_id, image_data);
|
||||
if (err != 0) {
|
||||
return err;
|
||||
}
|
||||
|
||||
/*
|
||||
* Flush the image to main memory so that it can be executed
|
||||
* later by any CPU, regardless of cache and MMU state.
|
||||
*/
|
||||
flush_dcache_range(image_data->image_base,
|
||||
image_data->image_size);
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Print the content of an entry_point_info_t structure.
|
||||
******************************************************************************/
|
||||
void print_entry_point_info(const entry_point_info_t *ep_info)
|
||||
{
|
||||
INFO("Entry point address = 0x%lx\n", ep_info->pc);
|
||||
INFO("SPSR = 0x%x\n", ep_info->spsr);
|
||||
|
||||
#define PRINT_IMAGE_ARG(n) \
|
||||
VERBOSE("Argument #" #n " = 0x%llx\n", \
|
||||
(unsigned long long) ep_info->args.arg##n)
|
||||
|
||||
PRINT_IMAGE_ARG(0);
|
||||
PRINT_IMAGE_ARG(1);
|
||||
PRINT_IMAGE_ARG(2);
|
||||
PRINT_IMAGE_ARG(3);
|
||||
#ifdef __aarch64__
|
||||
PRINT_IMAGE_ARG(4);
|
||||
PRINT_IMAGE_ARG(5);
|
||||
PRINT_IMAGE_ARG(6);
|
||||
PRINT_IMAGE_ARG(7);
|
||||
#endif
|
||||
#undef PRINT_IMAGE_ARG
|
||||
}
|
||||
|
||||
/*
|
||||
* This function is for returning the TF-A version
|
||||
*/
|
||||
const char *get_version(void)
|
||||
{
|
||||
return build_version;
|
||||
}
|
||||
351
arm-trusted-firmware.t234/common/desc_image_load.c
Normal file
351
arm-trusted-firmware.t234/common/desc_image_load.c
Normal file
@@ -0,0 +1,351 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2020, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
#include <arch_helpers.h>
|
||||
#include <common/bl_common.h>
|
||||
#include <common/desc_image_load.h>
|
||||
#include <common/tbbr/tbbr_img_def.h>
|
||||
|
||||
static bl_load_info_t bl_load_info;
|
||||
static bl_params_t next_bl_params;
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* This function flushes the data structures so that they are visible
|
||||
* in memory for the next BL image.
|
||||
******************************************************************************/
|
||||
void flush_bl_params_desc(void)
|
||||
{
|
||||
flush_bl_params_desc_args(bl_mem_params_desc_ptr,
|
||||
bl_mem_params_desc_num,
|
||||
&next_bl_params);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* This function flushes the data structures specified as arguments so that they
|
||||
* are visible in memory for the next BL image.
|
||||
******************************************************************************/
|
||||
void flush_bl_params_desc_args(bl_mem_params_node_t *mem_params_desc_ptr,
|
||||
unsigned int mem_params_desc_num,
|
||||
bl_params_t *next_bl_params_ptr)
|
||||
{
|
||||
assert(mem_params_desc_ptr != NULL);
|
||||
assert(mem_params_desc_num != 0U);
|
||||
assert(next_bl_params_ptr != NULL);
|
||||
|
||||
flush_dcache_range((uintptr_t)mem_params_desc_ptr,
|
||||
sizeof(*mem_params_desc_ptr) * mem_params_desc_num);
|
||||
|
||||
flush_dcache_range((uintptr_t)next_bl_params_ptr,
|
||||
sizeof(*next_bl_params_ptr));
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* This function returns the index for given image_id, within the
|
||||
* image descriptor array provided by bl_image_info_descs_ptr, if the
|
||||
* image is found else it returns -1.
|
||||
******************************************************************************/
|
||||
int get_bl_params_node_index(unsigned int image_id)
|
||||
{
|
||||
unsigned int index;
|
||||
assert(image_id != INVALID_IMAGE_ID);
|
||||
|
||||
for (index = 0U; index < bl_mem_params_desc_num; index++) {
|
||||
if (bl_mem_params_desc_ptr[index].image_id == image_id)
|
||||
return (int)index;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* This function returns the pointer to `bl_mem_params_node_t` object for
|
||||
* given image_id, within the image descriptor array provided by
|
||||
* bl_mem_params_desc_ptr, if the image is found else it returns NULL.
|
||||
******************************************************************************/
|
||||
bl_mem_params_node_t *get_bl_mem_params_node(unsigned int image_id)
|
||||
{
|
||||
int index;
|
||||
assert(image_id != INVALID_IMAGE_ID);
|
||||
|
||||
index = get_bl_params_node_index(image_id);
|
||||
if (index >= 0)
|
||||
return &bl_mem_params_desc_ptr[index];
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* This function creates the list of loadable images, by populating and
|
||||
* linking each `bl_load_info_node_t` type node, using the internal array
|
||||
* of image descriptor provided by bl_mem_params_desc_ptr. It also populates
|
||||
* and returns `bl_load_info_t` type structure that contains head of the list
|
||||
* of loadable images.
|
||||
******************************************************************************/
|
||||
bl_load_info_t *get_bl_load_info_from_mem_params_desc(void)
|
||||
{
|
||||
unsigned int index = 0;
|
||||
|
||||
/* If there is no image to start with, return NULL */
|
||||
if (bl_mem_params_desc_num == 0U)
|
||||
return NULL;
|
||||
|
||||
/* Assign initial data structures */
|
||||
bl_load_info_node_t *bl_node_info =
|
||||
&bl_mem_params_desc_ptr[index].load_node_mem;
|
||||
bl_load_info.head = bl_node_info;
|
||||
SET_PARAM_HEAD(&bl_load_info, PARAM_BL_LOAD_INFO, VERSION_2, 0U);
|
||||
|
||||
/* Go through the image descriptor array and create the list */
|
||||
for (; index < bl_mem_params_desc_num; index++) {
|
||||
|
||||
/* Populate the image information */
|
||||
bl_node_info->image_id = bl_mem_params_desc_ptr[index].image_id;
|
||||
bl_node_info->image_info = &bl_mem_params_desc_ptr[index].image_info;
|
||||
|
||||
/* Link next image if present */
|
||||
if ((index + 1U) < bl_mem_params_desc_num) {
|
||||
/* Get the memory and link the next node */
|
||||
bl_node_info->next_load_info =
|
||||
&bl_mem_params_desc_ptr[index + 1U].load_node_mem;
|
||||
bl_node_info = bl_node_info->next_load_info;
|
||||
}
|
||||
}
|
||||
|
||||
return &bl_load_info;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* This function creates the list of executable images, by populating and
|
||||
* linking each `bl_params_node_t` type node, using the internal array of
|
||||
* image descriptor provided by bl_mem_params_desc_ptr. It also populates
|
||||
* and returns `bl_params_t` type structure that contains head of the list
|
||||
* of executable images.
|
||||
******************************************************************************/
|
||||
bl_params_t *get_next_bl_params_from_mem_params_desc(void)
|
||||
{
|
||||
unsigned int count;
|
||||
unsigned int img_id = 0U;
|
||||
unsigned int link_index = 0U;
|
||||
bl_params_node_t *bl_current_exec_node = NULL;
|
||||
bl_params_node_t *bl_last_exec_node = NULL;
|
||||
bl_mem_params_node_t *desc_ptr;
|
||||
|
||||
/* If there is no image to start with, return NULL */
|
||||
if (bl_mem_params_desc_num == 0U)
|
||||
return NULL;
|
||||
|
||||
/* Get the list HEAD */
|
||||
for (count = 0U; count < bl_mem_params_desc_num; count++) {
|
||||
|
||||
desc_ptr = &bl_mem_params_desc_ptr[count];
|
||||
|
||||
if ((EP_GET_EXE(desc_ptr->ep_info.h.attr) == EXECUTABLE) &&
|
||||
(EP_GET_FIRST_EXE(desc_ptr->ep_info.h.attr) == EP_FIRST_EXE)) {
|
||||
next_bl_params.head = &desc_ptr->params_node_mem;
|
||||
link_index = count;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* Make sure we have a HEAD node */
|
||||
assert(next_bl_params.head != NULL);
|
||||
|
||||
/* Populate the HEAD information */
|
||||
SET_PARAM_HEAD(&next_bl_params, PARAM_BL_PARAMS, VERSION_2, 0U);
|
||||
|
||||
/*
|
||||
* Go through the image descriptor array and create the list.
|
||||
* This bounded loop is to make sure that we are not looping forever.
|
||||
*/
|
||||
for (count = 0U; count < bl_mem_params_desc_num; count++) {
|
||||
|
||||
desc_ptr = &bl_mem_params_desc_ptr[link_index];
|
||||
|
||||
/* Make sure the image is executable */
|
||||
assert(EP_GET_EXE(desc_ptr->ep_info.h.attr) == EXECUTABLE);
|
||||
|
||||
/* Get the memory for current node */
|
||||
bl_current_exec_node = &desc_ptr->params_node_mem;
|
||||
|
||||
/* Populate the image information */
|
||||
bl_current_exec_node->image_id = desc_ptr->image_id;
|
||||
bl_current_exec_node->image_info = &desc_ptr->image_info;
|
||||
bl_current_exec_node->ep_info = &desc_ptr->ep_info;
|
||||
|
||||
if (bl_last_exec_node != NULL) {
|
||||
/* Assert if loop detected */
|
||||
assert(bl_last_exec_node->next_params_info == NULL);
|
||||
|
||||
/* Link the previous node to the current one */
|
||||
bl_last_exec_node->next_params_info = bl_current_exec_node;
|
||||
}
|
||||
|
||||
/* Update the last node */
|
||||
bl_last_exec_node = bl_current_exec_node;
|
||||
|
||||
/* If no next hand-off image then break out */
|
||||
img_id = desc_ptr->next_handoff_image_id;
|
||||
if (img_id == INVALID_IMAGE_ID)
|
||||
break;
|
||||
|
||||
/* Get the index for the next hand-off image */
|
||||
link_index = get_bl_params_node_index(img_id);
|
||||
assert((link_index > 0U) &&
|
||||
(link_index < bl_mem_params_desc_num));
|
||||
}
|
||||
|
||||
/* Invalid image is expected to terminate the loop */
|
||||
assert(img_id == INVALID_IMAGE_ID);
|
||||
|
||||
return &next_bl_params;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* This function populates the entry point information with the corresponding
|
||||
* config file for all executable BL images described in bl_params.
|
||||
******************************************************************************/
|
||||
void populate_next_bl_params_config(bl_params_t *bl2_to_next_bl_params)
|
||||
{
|
||||
bl_params_node_t *params_node;
|
||||
unsigned int fw_config_id;
|
||||
uintptr_t fw_config_base;
|
||||
bl_mem_params_node_t *mem_params;
|
||||
uintptr_t hw_config_base = 0;
|
||||
|
||||
assert(bl2_to_next_bl_params != NULL);
|
||||
|
||||
/*
|
||||
* Get the `bl_mem_params_node_t` corresponding to HW_CONFIG
|
||||
* if available.
|
||||
*/
|
||||
mem_params = get_bl_mem_params_node(HW_CONFIG_ID);
|
||||
|
||||
if (mem_params != NULL)
|
||||
hw_config_base = mem_params->image_info.image_base;
|
||||
|
||||
for (params_node = bl2_to_next_bl_params->head; params_node != NULL;
|
||||
params_node = params_node->next_params_info) {
|
||||
|
||||
fw_config_base = 0;
|
||||
|
||||
switch (params_node->image_id) {
|
||||
case BL31_IMAGE_ID:
|
||||
fw_config_id = SOC_FW_CONFIG_ID;
|
||||
break;
|
||||
case BL32_IMAGE_ID:
|
||||
/*
|
||||
* At the moment, OPTEE cannot accept a DTB in secure memory,
|
||||
* so fall back and use NT_FW_CONFIG instead.
|
||||
* This MUST be fixed as soon as OPTEE has support to
|
||||
* receive DTBs in secure memory.
|
||||
*/
|
||||
#ifndef SPD_opteed
|
||||
fw_config_id = TOS_FW_CONFIG_ID;
|
||||
break;
|
||||
#endif
|
||||
case BL33_IMAGE_ID:
|
||||
fw_config_id = NT_FW_CONFIG_ID;
|
||||
break;
|
||||
default:
|
||||
fw_config_id = INVALID_IMAGE_ID;
|
||||
break;
|
||||
}
|
||||
|
||||
if (fw_config_id != INVALID_IMAGE_ID) {
|
||||
mem_params = get_bl_mem_params_node(fw_config_id);
|
||||
if (mem_params != NULL) {
|
||||
fw_config_base = mem_params->image_info.image_base;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef SPD_opteed
|
||||
/*
|
||||
* If SPD_opteed is enabled, arg[0,2] are populated by
|
||||
* parse_optee_header(), which is called by
|
||||
* arm_bl2_handle_post_image_load(). The meaning of the
|
||||
* arguments are:
|
||||
* arg0 <-- MODE_RW
|
||||
* arg1 <-- Paged image base
|
||||
* arg2 <-- Paged image size
|
||||
*/
|
||||
if (params_node->image_id == BL32_IMAGE_ID) {
|
||||
params_node->ep_info->args.arg3 = fw_config_base;
|
||||
} else {
|
||||
#endif
|
||||
/*
|
||||
* Pass hw and tb_fw config addresses to next images.
|
||||
* NOTE - for EL3 runtime images (BL31 for AArch64
|
||||
* and BL32 for AArch32), arg0 is already used by
|
||||
* generic code. Take care of not overwriting the
|
||||
* previous initialisations.
|
||||
*/
|
||||
if (params_node == bl2_to_next_bl_params->head) {
|
||||
if (params_node->ep_info->args.arg1 == 0U)
|
||||
params_node->ep_info->args.arg1 =
|
||||
fw_config_base;
|
||||
if (params_node->ep_info->args.arg2 == 0U)
|
||||
params_node->ep_info->args.arg2 =
|
||||
hw_config_base;
|
||||
} else {
|
||||
if (params_node->ep_info->args.arg0 == 0U)
|
||||
params_node->ep_info->args.arg0 =
|
||||
fw_config_base;
|
||||
if (params_node->ep_info->args.arg1 == 0U)
|
||||
params_node->ep_info->args.arg1 =
|
||||
hw_config_base;
|
||||
}
|
||||
#ifdef SPD_opteed
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Helper to extract BL32/BL33 entry point info from arg0 passed to BL31, for
|
||||
* platforms that are only interested in those. Platforms that need to extract
|
||||
* more information can parse the structures themselves.
|
||||
******************************************************************************/
|
||||
|
||||
void bl31_params_parse_helper(u_register_t param,
|
||||
entry_point_info_t *bl32_ep_info_out,
|
||||
entry_point_info_t *bl33_ep_info_out)
|
||||
{
|
||||
bl_params_node_t *node;
|
||||
bl_params_t *v2 = (void *)(uintptr_t)param;
|
||||
|
||||
#if !ERROR_DEPRECATED
|
||||
if (v2->h.version == PARAM_VERSION_1) {
|
||||
struct { /* Deprecated version 1 parameter structure. */
|
||||
param_header_t h;
|
||||
image_info_t *bl31_image_info;
|
||||
entry_point_info_t *bl32_ep_info;
|
||||
image_info_t *bl32_image_info;
|
||||
entry_point_info_t *bl33_ep_info;
|
||||
image_info_t *bl33_image_info;
|
||||
} *v1 = (void *)(uintptr_t)param;
|
||||
assert(v1->h.type == PARAM_BL31);
|
||||
if (bl32_ep_info_out != NULL)
|
||||
*bl32_ep_info_out = *v1->bl32_ep_info;
|
||||
if (bl33_ep_info_out != NULL)
|
||||
*bl33_ep_info_out = *v1->bl33_ep_info;
|
||||
return;
|
||||
}
|
||||
#endif /* !ERROR_DEPRECATED */
|
||||
|
||||
assert(v2->h.version == PARAM_VERSION_2);
|
||||
assert(v2->h.type == PARAM_BL_PARAMS);
|
||||
for (node = v2->head; node != NULL; node = node->next_params_info) {
|
||||
if (node->image_id == BL32_IMAGE_ID)
|
||||
if (bl32_ep_info_out != NULL)
|
||||
*bl32_ep_info_out = *node->ep_info;
|
||||
if (node->image_id == BL33_IMAGE_ID)
|
||||
if (bl33_ep_info_out != NULL)
|
||||
*bl33_ep_info_out = *node->ep_info;
|
||||
}
|
||||
}
|
||||
645
arm-trusted-firmware.t234/common/fdt_fixup.c
Normal file
645
arm-trusted-firmware.t234/common/fdt_fixup.c
Normal file
@@ -0,0 +1,645 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2022, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
/*
|
||||
* Contains generic routines to fix up the device tree blob passed on to
|
||||
* payloads like BL32 and BL33 (and further down the boot chain).
|
||||
* This allows to easily add PSCI nodes, when the original DT does not have
|
||||
* it or advertises another method.
|
||||
* Also it supports to add reserved memory nodes to describe memory that
|
||||
* is used by the secure world, so that non-secure software avoids using
|
||||
* that.
|
||||
*/
|
||||
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <libfdt.h>
|
||||
|
||||
#include <arch.h>
|
||||
#include <common/debug.h>
|
||||
#include <common/fdt_fixup.h>
|
||||
#include <common/fdt_wrappers.h>
|
||||
#include <drivers/console.h>
|
||||
#include <lib/psci/psci.h>
|
||||
#include <plat/common/platform.h>
|
||||
|
||||
|
||||
static int append_psci_compatible(void *fdt, int offs, const char *str)
|
||||
{
|
||||
return fdt_appendprop(fdt, offs, "compatible", str, strlen(str) + 1);
|
||||
}
|
||||
|
||||
/*
|
||||
* Those defines are for PSCI v0.1 legacy clients, which we expect to use
|
||||
* the same execution state (AArch32/AArch64) as TF-A.
|
||||
* Kernels running in AArch32 on an AArch64 TF-A should use PSCI v0.2.
|
||||
*/
|
||||
#ifdef __aarch64__
|
||||
#define PSCI_CPU_SUSPEND_FNID PSCI_CPU_SUSPEND_AARCH64
|
||||
#define PSCI_CPU_ON_FNID PSCI_CPU_ON_AARCH64
|
||||
#else
|
||||
#define PSCI_CPU_SUSPEND_FNID PSCI_CPU_SUSPEND_AARCH32
|
||||
#define PSCI_CPU_ON_FNID PSCI_CPU_ON_AARCH32
|
||||
#endif
|
||||
|
||||
/*******************************************************************************
|
||||
* dt_add_psci_node() - Add a PSCI node into an existing device tree
|
||||
* @fdt: pointer to the device tree blob in memory
|
||||
*
|
||||
* Add a device tree node describing PSCI into the root level of an existing
|
||||
* device tree blob in memory.
|
||||
* This will add v0.1, v0.2 and v1.0 compatible strings and the standard
|
||||
* function IDs for v0.1 compatibility.
|
||||
* An existing PSCI node will not be touched, the function will return success
|
||||
* in this case. This function will not touch the /cpus enable methods, use
|
||||
* dt_add_psci_cpu_enable_methods() for that.
|
||||
*
|
||||
* Return: 0 on success, -1 otherwise.
|
||||
******************************************************************************/
|
||||
int dt_add_psci_node(void *fdt)
|
||||
{
|
||||
int offs;
|
||||
|
||||
if (fdt_path_offset(fdt, "/psci") >= 0) {
|
||||
WARN("PSCI Device Tree node already exists!\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
offs = fdt_path_offset(fdt, "/");
|
||||
if (offs < 0)
|
||||
return -1;
|
||||
offs = fdt_add_subnode(fdt, offs, "psci");
|
||||
if (offs < 0)
|
||||
return -1;
|
||||
if (append_psci_compatible(fdt, offs, "arm,psci-1.0"))
|
||||
return -1;
|
||||
if (append_psci_compatible(fdt, offs, "arm,psci-0.2"))
|
||||
return -1;
|
||||
if (append_psci_compatible(fdt, offs, "arm,psci"))
|
||||
return -1;
|
||||
if (fdt_setprop_string(fdt, offs, "method", "smc"))
|
||||
return -1;
|
||||
if (fdt_setprop_u32(fdt, offs, "cpu_suspend", PSCI_CPU_SUSPEND_FNID))
|
||||
return -1;
|
||||
if (fdt_setprop_u32(fdt, offs, "cpu_off", PSCI_CPU_OFF))
|
||||
return -1;
|
||||
if (fdt_setprop_u32(fdt, offs, "cpu_on", PSCI_CPU_ON_FNID))
|
||||
return -1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Find the first subnode that has a "device_type" property with the value
|
||||
* "cpu" and which's enable-method is not "psci" (yet).
|
||||
* Returns 0 if no such subnode is found, so all have already been patched
|
||||
* or none have to be patched in the first place.
|
||||
* Returns 1 if *one* such subnode has been found and successfully changed
|
||||
* to "psci".
|
||||
* Returns negative values on error.
|
||||
*
|
||||
* Call in a loop until it returns 0. Recalculate the node offset after
|
||||
* it has returned 1.
|
||||
*/
|
||||
static int dt_update_one_cpu_node(void *fdt, int offset)
|
||||
{
|
||||
int offs;
|
||||
|
||||
/* Iterate over all subnodes to find those with device_type = "cpu". */
|
||||
for (offs = fdt_first_subnode(fdt, offset); offs >= 0;
|
||||
offs = fdt_next_subnode(fdt, offs)) {
|
||||
const char *prop;
|
||||
int len;
|
||||
int ret;
|
||||
|
||||
prop = fdt_getprop(fdt, offs, "device_type", &len);
|
||||
if (prop == NULL)
|
||||
continue;
|
||||
if ((strcmp(prop, "cpu") != 0) || (len != 4))
|
||||
continue;
|
||||
|
||||
/* Ignore any nodes which already use "psci". */
|
||||
prop = fdt_getprop(fdt, offs, "enable-method", &len);
|
||||
if ((prop != NULL) &&
|
||||
(strcmp(prop, "psci") == 0) && (len == 5))
|
||||
continue;
|
||||
|
||||
ret = fdt_setprop_string(fdt, offs, "enable-method", "psci");
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
/*
|
||||
* Subnode found and patched.
|
||||
* Restart to accommodate potentially changed offsets.
|
||||
*/
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (offs == -FDT_ERR_NOTFOUND)
|
||||
return 0;
|
||||
|
||||
return offs;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* dt_add_psci_cpu_enable_methods() - switch CPU nodes in DT to use PSCI
|
||||
* @fdt: pointer to the device tree blob in memory
|
||||
*
|
||||
* Iterate over all CPU device tree nodes (/cpus/cpu@x) in memory to change
|
||||
* the enable-method to PSCI. This will add the enable-method properties, if
|
||||
* required, or will change existing properties to read "psci".
|
||||
*
|
||||
* Return: 0 on success, or a negative error value otherwise.
|
||||
******************************************************************************/
|
||||
|
||||
int dt_add_psci_cpu_enable_methods(void *fdt)
|
||||
{
|
||||
int offs, ret;
|
||||
|
||||
do {
|
||||
offs = fdt_path_offset(fdt, "/cpus");
|
||||
if (offs < 0)
|
||||
return offs;
|
||||
|
||||
ret = dt_update_one_cpu_node(fdt, offs);
|
||||
} while (ret > 0);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
#define HIGH_BITS(x) ((sizeof(x) > 4) ? ((x) >> 32) : (typeof(x))0)
|
||||
|
||||
/*******************************************************************************
|
||||
* fdt_add_reserved_memory() - reserve (secure) memory regions in DT
|
||||
* @dtb: pointer to the device tree blob in memory
|
||||
* @node_name: name of the subnode to be used
|
||||
* @base: physical base address of the reserved region
|
||||
* @size: size of the reserved region
|
||||
*
|
||||
* Add a region of memory to the /reserved-memory node in a device tree in
|
||||
* memory, creating that node if required. Each region goes into a subnode
|
||||
* of that node and has a @node_name, a @base address and a @size.
|
||||
* This will prevent any device tree consumer from using that memory. It
|
||||
* can be used to announce secure memory regions, as it adds the "no-map"
|
||||
* property to prevent mapping and speculative operations on that region.
|
||||
*
|
||||
* See reserved-memory/reserved-memory.txt in the (Linux kernel) DT binding
|
||||
* documentation for details.
|
||||
* According to this binding, the address-cells and size-cells must match
|
||||
* those of the root node.
|
||||
*
|
||||
* Return: 0 on success, a negative error value otherwise.
|
||||
******************************************************************************/
|
||||
int fdt_add_reserved_memory(void *dtb, const char *node_name,
|
||||
uintptr_t base, size_t size)
|
||||
{
|
||||
int offs = fdt_path_offset(dtb, "/reserved-memory");
|
||||
int node;
|
||||
uint32_t addresses[4];
|
||||
int ac, sc;
|
||||
unsigned int idx = 0;
|
||||
|
||||
ac = fdt_address_cells(dtb, 0);
|
||||
sc = fdt_size_cells(dtb, 0);
|
||||
if (offs < 0) { /* create if not existing yet */
|
||||
offs = fdt_add_subnode(dtb, 0, "reserved-memory");
|
||||
if (offs < 0) {
|
||||
return offs;
|
||||
}
|
||||
fdt_setprop_u32(dtb, offs, "#address-cells", ac);
|
||||
fdt_setprop_u32(dtb, offs, "#size-cells", sc);
|
||||
fdt_setprop(dtb, offs, "ranges", NULL, 0);
|
||||
}
|
||||
|
||||
/* Check for existing regions */
|
||||
fdt_for_each_subnode(node, dtb, offs) {
|
||||
uintptr_t c_base;
|
||||
size_t c_size;
|
||||
int ret;
|
||||
|
||||
ret = fdt_get_reg_props_by_index(dtb, node, 0, &c_base, &c_size);
|
||||
/* Ignore illegal subnodes */
|
||||
if (ret != 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
/* existing region entirely contains the new region */
|
||||
if (base >= c_base && (base + size) <= (c_base + c_size)) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (ac > 1) {
|
||||
addresses[idx] = cpu_to_fdt32(HIGH_BITS(base));
|
||||
idx++;
|
||||
}
|
||||
addresses[idx] = cpu_to_fdt32(base & 0xffffffff);
|
||||
idx++;
|
||||
if (sc > 1) {
|
||||
addresses[idx] = cpu_to_fdt32(HIGH_BITS(size));
|
||||
idx++;
|
||||
}
|
||||
addresses[idx] = cpu_to_fdt32(size & 0xffffffff);
|
||||
idx++;
|
||||
offs = fdt_add_subnode(dtb, offs, node_name);
|
||||
fdt_setprop(dtb, offs, "no-map", NULL, 0);
|
||||
fdt_setprop(dtb, offs, "reg", addresses, idx * sizeof(uint32_t));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* fdt_add_cpu() Add a new CPU node to the DT
|
||||
* @dtb: Pointer to the device tree blob in memory
|
||||
* @parent: Offset of the parent node
|
||||
* @mpidr: MPIDR for the current CPU
|
||||
*
|
||||
* Create and add a new cpu node to a DTB.
|
||||
*
|
||||
* Return the offset of the new node or a negative value in case of error
|
||||
******************************************************************************/
|
||||
|
||||
static int fdt_add_cpu(void *dtb, int parent, u_register_t mpidr)
|
||||
{
|
||||
int cpu_offs;
|
||||
int err;
|
||||
char snode_name[15];
|
||||
uint64_t reg_prop;
|
||||
|
||||
reg_prop = mpidr & MPID_MASK & ~MPIDR_MT_MASK;
|
||||
|
||||
snprintf(snode_name, sizeof(snode_name), "cpu@%x",
|
||||
(unsigned int)reg_prop);
|
||||
|
||||
cpu_offs = fdt_add_subnode(dtb, parent, snode_name);
|
||||
if (cpu_offs < 0) {
|
||||
ERROR ("FDT: add subnode \"%s\" failed: %i\n",
|
||||
snode_name, cpu_offs);
|
||||
return cpu_offs;
|
||||
}
|
||||
|
||||
err = fdt_setprop_string(dtb, cpu_offs, "compatible", "arm,armv8");
|
||||
if (err < 0) {
|
||||
ERROR ("FDT: write to \"%s\" property of node at offset %i failed\n",
|
||||
"compatible", cpu_offs);
|
||||
return err;
|
||||
}
|
||||
|
||||
err = fdt_setprop_u64(dtb, cpu_offs, "reg", reg_prop);
|
||||
if (err < 0) {
|
||||
ERROR ("FDT: write to \"%s\" property of node at offset %i failed\n",
|
||||
"reg", cpu_offs);
|
||||
return err;
|
||||
}
|
||||
|
||||
err = fdt_setprop_string(dtb, cpu_offs, "device_type", "cpu");
|
||||
if (err < 0) {
|
||||
ERROR ("FDT: write to \"%s\" property of node at offset %i failed\n",
|
||||
"device_type", cpu_offs);
|
||||
return err;
|
||||
}
|
||||
|
||||
err = fdt_setprop_string(dtb, cpu_offs, "enable-method", "psci");
|
||||
if (err < 0) {
|
||||
ERROR ("FDT: write to \"%s\" property of node at offset %i failed\n",
|
||||
"enable-method", cpu_offs);
|
||||
return err;
|
||||
}
|
||||
|
||||
return cpu_offs;
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
* fdt_add_cpus_node() - Add the cpus node to the DTB
|
||||
* @dtb: pointer to the device tree blob in memory
|
||||
* @afflv0: Maximum number of threads per core (affinity level 0).
|
||||
* @afflv1: Maximum number of CPUs per cluster (affinity level 1).
|
||||
* @afflv2: Maximum number of clusters (affinity level 2).
|
||||
*
|
||||
* Iterate over all the possible MPIDs given the maximum affinity levels and
|
||||
* add a cpus node to the DTB with all the valid CPUs on the system.
|
||||
* If there is already a /cpus node, exit gracefully
|
||||
*
|
||||
* A system with two CPUs would generate a node equivalent or similar to:
|
||||
*
|
||||
* cpus {
|
||||
* #address-cells = <2>;
|
||||
* #size-cells = <0>;
|
||||
*
|
||||
* cpu0: cpu@0 {
|
||||
* compatible = "arm,armv8";
|
||||
* reg = <0x0 0x0>;
|
||||
* device_type = "cpu";
|
||||
* enable-method = "psci";
|
||||
* };
|
||||
* cpu1: cpu@10000 {
|
||||
* compatible = "arm,armv8";
|
||||
* reg = <0x0 0x100>;
|
||||
* device_type = "cpu";
|
||||
* enable-method = "psci";
|
||||
* };
|
||||
* };
|
||||
*
|
||||
* Full documentation about the CPU bindings can be found at:
|
||||
* https://www.kernel.org/doc/Documentation/devicetree/bindings/arm/cpus.txt
|
||||
*
|
||||
* Return the offset of the node or a negative value on error.
|
||||
******************************************************************************/
|
||||
|
||||
int fdt_add_cpus_node(void *dtb, unsigned int afflv0,
|
||||
unsigned int afflv1, unsigned int afflv2)
|
||||
{
|
||||
int offs;
|
||||
int err;
|
||||
unsigned int i, j, k;
|
||||
u_register_t mpidr;
|
||||
int cpuid;
|
||||
|
||||
if (fdt_path_offset(dtb, "/cpus") >= 0) {
|
||||
return -EEXIST;
|
||||
}
|
||||
|
||||
offs = fdt_add_subnode(dtb, 0, "cpus");
|
||||
if (offs < 0) {
|
||||
ERROR ("FDT: add subnode \"cpus\" node to parent node failed");
|
||||
return offs;
|
||||
}
|
||||
|
||||
err = fdt_setprop_u32(dtb, offs, "#address-cells", 2);
|
||||
if (err < 0) {
|
||||
ERROR ("FDT: write to \"%s\" property of node at offset %i failed\n",
|
||||
"#address-cells", offs);
|
||||
return err;
|
||||
}
|
||||
|
||||
err = fdt_setprop_u32(dtb, offs, "#size-cells", 0);
|
||||
if (err < 0) {
|
||||
ERROR ("FDT: write to \"%s\" property of node at offset %i failed\n",
|
||||
"#size-cells", offs);
|
||||
return err;
|
||||
}
|
||||
|
||||
/*
|
||||
* Populate the node with the CPUs.
|
||||
* As libfdt prepends subnodes within a node, reverse the index count
|
||||
* so the CPU nodes would be better ordered.
|
||||
*/
|
||||
for (i = afflv2; i > 0U; i--) {
|
||||
for (j = afflv1; j > 0U; j--) {
|
||||
for (k = afflv0; k > 0U; k--) {
|
||||
mpidr = ((i - 1) << MPIDR_AFF2_SHIFT) |
|
||||
((j - 1) << MPIDR_AFF1_SHIFT) |
|
||||
((k - 1) << MPIDR_AFF0_SHIFT) |
|
||||
(read_mpidr_el1() & MPIDR_MT_MASK);
|
||||
|
||||
cpuid = plat_core_pos_by_mpidr(mpidr);
|
||||
if (cpuid >= 0) {
|
||||
/* Valid MPID found */
|
||||
err = fdt_add_cpu(dtb, offs, mpidr);
|
||||
if (err < 0) {
|
||||
ERROR ("FDT: %s 0x%08x\n",
|
||||
"error adding CPU",
|
||||
(uint32_t)mpidr);
|
||||
return err;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return offs;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* fdt_add_cpu_idle_states() - add PSCI CPU idle states to cpu nodes in the DT
|
||||
* @dtb: pointer to the device tree blob in memory
|
||||
* @states: array of idle state descriptions, ending with empty element
|
||||
*
|
||||
* Add information about CPU idle states to the devicetree. This function
|
||||
* assumes that CPU idle states are not already present in the devicetree, and
|
||||
* that all CPU states are equally applicable to all CPUs.
|
||||
*
|
||||
* See arm/idle-states.yaml and arm/psci.yaml in the (Linux kernel) DT binding
|
||||
* documentation for more details.
|
||||
*
|
||||
* Return: 0 on success, a negative error value otherwise.
|
||||
******************************************************************************/
|
||||
int fdt_add_cpu_idle_states(void *dtb, const struct psci_cpu_idle_state *state)
|
||||
{
|
||||
int cpu_node, cpus_node, idle_states_node, ret;
|
||||
uint32_t count, phandle;
|
||||
|
||||
ret = fdt_find_max_phandle(dtb, &phandle);
|
||||
phandle++;
|
||||
if (ret < 0) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
cpus_node = fdt_path_offset(dtb, "/cpus");
|
||||
if (cpus_node < 0) {
|
||||
return cpus_node;
|
||||
}
|
||||
|
||||
/* Create the idle-states node and its child nodes. */
|
||||
idle_states_node = fdt_add_subnode(dtb, cpus_node, "idle-states");
|
||||
if (idle_states_node < 0) {
|
||||
return idle_states_node;
|
||||
}
|
||||
|
||||
ret = fdt_setprop_string(dtb, idle_states_node, "entry-method", "psci");
|
||||
if (ret < 0) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
for (count = 0U; state->name != NULL; count++, phandle++, state++) {
|
||||
int idle_state_node;
|
||||
|
||||
idle_state_node = fdt_add_subnode(dtb, idle_states_node,
|
||||
state->name);
|
||||
if (idle_state_node < 0) {
|
||||
return idle_state_node;
|
||||
}
|
||||
|
||||
fdt_setprop_string(dtb, idle_state_node, "compatible",
|
||||
"arm,idle-state");
|
||||
fdt_setprop_u32(dtb, idle_state_node, "arm,psci-suspend-param",
|
||||
state->power_state);
|
||||
if (state->local_timer_stop) {
|
||||
fdt_setprop_empty(dtb, idle_state_node,
|
||||
"local-timer-stop");
|
||||
}
|
||||
fdt_setprop_u32(dtb, idle_state_node, "entry-latency-us",
|
||||
state->entry_latency_us);
|
||||
fdt_setprop_u32(dtb, idle_state_node, "exit-latency-us",
|
||||
state->exit_latency_us);
|
||||
fdt_setprop_u32(dtb, idle_state_node, "min-residency-us",
|
||||
state->min_residency_us);
|
||||
if (state->wakeup_latency_us) {
|
||||
fdt_setprop_u32(dtb, idle_state_node,
|
||||
"wakeup-latency-us",
|
||||
state->wakeup_latency_us);
|
||||
}
|
||||
fdt_setprop_u32(dtb, idle_state_node, "phandle", phandle);
|
||||
}
|
||||
|
||||
if (count == 0U) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Link each cpu node to the idle state nodes. */
|
||||
fdt_for_each_subnode(cpu_node, dtb, cpus_node) {
|
||||
const char *device_type;
|
||||
fdt32_t *value;
|
||||
|
||||
/* Only process child nodes with device_type = "cpu". */
|
||||
device_type = fdt_getprop(dtb, cpu_node, "device_type", NULL);
|
||||
if (device_type == NULL || strcmp(device_type, "cpu") != 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Allocate space for the list of phandles. */
|
||||
ret = fdt_setprop_placeholder(dtb, cpu_node, "cpu-idle-states",
|
||||
count * sizeof(phandle),
|
||||
(void **)&value);
|
||||
if (ret < 0) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Fill in the phandles of the idle state nodes. */
|
||||
for (uint32_t i = 0U; i < count; ++i) {
|
||||
value[i] = cpu_to_fdt32(phandle - count + i);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* fdt_adjust_gic_redist() - Adjust GICv3 redistributor size
|
||||
* @dtb: Pointer to the DT blob in memory
|
||||
* @nr_cores: Number of CPU cores on this system.
|
||||
* @gicr_base: Base address of the first GICR frame, or ~0 if unchanged
|
||||
* @gicr_frame_size: Size of the GICR frame per core
|
||||
*
|
||||
* On a GICv3 compatible interrupt controller, the redistributor provides
|
||||
* a number of 64k pages per each supported core. So with a dynamic topology,
|
||||
* this size cannot be known upfront and thus can't be hardcoded into the DTB.
|
||||
*
|
||||
* Find the DT node describing the GICv3 interrupt controller, and adjust
|
||||
* the size of the redistributor to match the number of actual cores on
|
||||
* this system.
|
||||
* A GICv4 compatible redistributor uses four 64K pages per core, whereas GICs
|
||||
* without support for direct injection of virtual interrupts use two 64K pages.
|
||||
* The @gicr_frame_size parameter should be 262144 and 131072, respectively.
|
||||
* Also optionally allow adjusting the GICR frame base address, when this is
|
||||
* different due to ITS frames between distributor and redistributor.
|
||||
*
|
||||
* Return: 0 on success, negative error value otherwise.
|
||||
*/
|
||||
int fdt_adjust_gic_redist(void *dtb, unsigned int nr_cores,
|
||||
uintptr_t gicr_base, unsigned int gicr_frame_size)
|
||||
{
|
||||
int offset = fdt_node_offset_by_compatible(dtb, 0, "arm,gic-v3");
|
||||
uint64_t reg_64;
|
||||
uint32_t reg_32;
|
||||
void *val;
|
||||
int parent, ret;
|
||||
int ac, sc;
|
||||
|
||||
if (offset < 0) {
|
||||
return offset;
|
||||
}
|
||||
|
||||
parent = fdt_parent_offset(dtb, offset);
|
||||
if (parent < 0) {
|
||||
return parent;
|
||||
}
|
||||
ac = fdt_address_cells(dtb, parent);
|
||||
sc = fdt_size_cells(dtb, parent);
|
||||
if (ac < 0 || sc < 0) {
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (gicr_base != INVALID_BASE_ADDR) {
|
||||
if (ac == 1) {
|
||||
reg_32 = cpu_to_fdt32(gicr_base);
|
||||
val = ®_32;
|
||||
} else {
|
||||
reg_64 = cpu_to_fdt64(gicr_base);
|
||||
val = ®_64;
|
||||
}
|
||||
/*
|
||||
* The redistributor base address is the second address in
|
||||
* the "reg" entry, so we have to skip one address and one
|
||||
* size cell.
|
||||
*/
|
||||
ret = fdt_setprop_inplace_namelen_partial(dtb, offset,
|
||||
"reg", 3,
|
||||
(ac + sc) * 4,
|
||||
val, ac * 4);
|
||||
if (ret < 0) {
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
if (sc == 1) {
|
||||
reg_32 = cpu_to_fdt32(nr_cores * gicr_frame_size);
|
||||
val = ®_32;
|
||||
} else {
|
||||
reg_64 = cpu_to_fdt64(nr_cores * (uint64_t)gicr_frame_size);
|
||||
val = ®_64;
|
||||
}
|
||||
|
||||
/*
|
||||
* The redistributor is described in the second "reg" entry.
|
||||
* So we have to skip one address and one size cell, then another
|
||||
* address cell to get to the second size cell.
|
||||
*/
|
||||
return fdt_setprop_inplace_namelen_partial(dtb, offset, "reg", 3,
|
||||
(ac + sc + ac) * 4,
|
||||
val, sc * 4);
|
||||
}
|
||||
/**
|
||||
* fdt_set_mac_address () - store MAC address in device tree
|
||||
* @dtb: pointer to the device tree blob in memory
|
||||
* @eth_idx: number of Ethernet interface in /aliases node
|
||||
* @mac_addr: pointer to 6 byte MAC address to store
|
||||
*
|
||||
* Use the generic local-mac-address property in a network device DT node
|
||||
* to define the MAC address this device should be using. Many platform
|
||||
* network devices lack device-specific non-volatile storage to hold this
|
||||
* address, and leave it up to firmware to find and store a unique MAC
|
||||
* address in the DT.
|
||||
* The MAC address could be read from some board or firmware defined storage,
|
||||
* or could be derived from some other unique property like a serial number.
|
||||
*
|
||||
* Return: 0 on success, a negative libfdt error value otherwise.
|
||||
*/
|
||||
int fdt_set_mac_address(void *dtb, unsigned int ethernet_idx,
|
||||
const uint8_t *mac_addr)
|
||||
{
|
||||
char eth_alias[12];
|
||||
const char *path;
|
||||
int node;
|
||||
|
||||
if (ethernet_idx > 9U) {
|
||||
return -FDT_ERR_BADVALUE;
|
||||
}
|
||||
snprintf(eth_alias, sizeof(eth_alias), "ethernet%d", ethernet_idx);
|
||||
|
||||
path = fdt_get_alias(dtb, eth_alias);
|
||||
if (path == NULL) {
|
||||
return -FDT_ERR_NOTFOUND;
|
||||
}
|
||||
|
||||
node = fdt_path_offset(dtb, path);
|
||||
if (node < 0) {
|
||||
ERROR("Path \"%s\" not found in DT: %d\n", path, node);
|
||||
return node;
|
||||
}
|
||||
|
||||
return fdt_setprop(dtb, node, "local-mac-address", mac_addr, 6);
|
||||
}
|
||||
654
arm-trusted-firmware.t234/common/fdt_wrappers.c
Normal file
654
arm-trusted-firmware.t234/common/fdt_wrappers.c
Normal file
@@ -0,0 +1,654 @@
|
||||
/*
|
||||
* Copyright (c) 2018-2024, Arm Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
/* Helper functions to offer easier navigation of Device Tree Blob */
|
||||
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <inttypes.h>
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <libfdt.h>
|
||||
|
||||
#include <common/debug.h>
|
||||
#include <common/fdt_wrappers.h>
|
||||
#include <common/uuid.h>
|
||||
|
||||
/*
|
||||
* Read cells from a given property of the given node. Any number of 32-bit
|
||||
* cells of the property can be read. Returns 0 on success, or a negative
|
||||
* FDT error value otherwise.
|
||||
*/
|
||||
int fdt_read_uint32_array(const void *dtb, int node, const char *prop_name,
|
||||
unsigned int cells, uint32_t *value)
|
||||
{
|
||||
const fdt32_t *prop;
|
||||
int value_len;
|
||||
|
||||
assert(dtb != NULL);
|
||||
assert(prop_name != NULL);
|
||||
assert(value != NULL);
|
||||
assert(node >= 0);
|
||||
|
||||
/* Access property and obtain its length (in bytes) */
|
||||
prop = fdt_getprop(dtb, node, prop_name, &value_len);
|
||||
if (prop == NULL) {
|
||||
VERBOSE("Couldn't find property %s in dtb\n", prop_name);
|
||||
return -FDT_ERR_NOTFOUND;
|
||||
}
|
||||
|
||||
/* Verify that property length can fill the entire array. */
|
||||
if (NCELLS((unsigned int)value_len) < cells) {
|
||||
WARN("Property length mismatch\n");
|
||||
return -FDT_ERR_BADVALUE;
|
||||
}
|
||||
|
||||
for (unsigned int i = 0U; i < cells; i++) {
|
||||
value[i] = fdt32_to_cpu(prop[i]);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int fdt_read_uint32(const void *dtb, int node, const char *prop_name,
|
||||
uint32_t *value)
|
||||
{
|
||||
return fdt_read_uint32_array(dtb, node, prop_name, 1, value);
|
||||
}
|
||||
|
||||
uint32_t fdt_read_uint32_default(const void *dtb, int node,
|
||||
const char *prop_name, uint32_t dflt_value)
|
||||
{
|
||||
uint32_t ret = dflt_value;
|
||||
int err = fdt_read_uint32(dtb, node, prop_name, &ret);
|
||||
|
||||
if (err < 0) {
|
||||
return dflt_value;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int fdt_read_uint64(const void *dtb, int node, const char *prop_name,
|
||||
uint64_t *value)
|
||||
{
|
||||
uint32_t array[2] = {0, 0};
|
||||
int ret;
|
||||
|
||||
ret = fdt_read_uint32_array(dtb, node, prop_name, 2, array);
|
||||
if (ret < 0) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
*value = ((uint64_t)array[0] << 32) | array[1];
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint64_t fdt_read_uint64_default(const void *dtb, int node,
|
||||
const char *prop_name, uint64_t dflt_value)
|
||||
{
|
||||
uint64_t ret = dflt_value;
|
||||
int err = fdt_read_uint64(dtb, node, prop_name, &ret);
|
||||
|
||||
if (err < 0) {
|
||||
return dflt_value;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Read bytes from a given property of the given node. Any number of
|
||||
* bytes of the property can be read. The fdt pointer is updated.
|
||||
* Returns 0 on success, and -1 on error.
|
||||
*/
|
||||
int fdtw_read_bytes(const void *dtb, int node, const char *prop,
|
||||
unsigned int length, void *value)
|
||||
{
|
||||
const void *ptr;
|
||||
int value_len;
|
||||
|
||||
assert(dtb != NULL);
|
||||
assert(prop != NULL);
|
||||
assert(value != NULL);
|
||||
assert(node >= 0);
|
||||
|
||||
/* Access property and obtain its length (in bytes) */
|
||||
ptr = fdt_getprop_namelen(dtb, node, prop, (int)strlen(prop),
|
||||
&value_len);
|
||||
if (ptr == NULL) {
|
||||
WARN("Couldn't find property %s in dtb\n", prop);
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Verify that property length is not less than number of bytes */
|
||||
if ((unsigned int)value_len < length) {
|
||||
WARN("Property length mismatch\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
(void)memcpy(value, ptr, length);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Read string from a given property of the given node. Up to 'size - 1'
|
||||
* characters are read, and a NUL terminator is added. Returns 0 on success,
|
||||
* and -1 upon error.
|
||||
*/
|
||||
int fdtw_read_string(const void *dtb, int node, const char *prop,
|
||||
char *str, size_t size)
|
||||
{
|
||||
const char *ptr;
|
||||
size_t len;
|
||||
|
||||
assert(dtb != NULL);
|
||||
assert(node >= 0);
|
||||
assert(prop != NULL);
|
||||
assert(str != NULL);
|
||||
assert(size > 0U);
|
||||
|
||||
ptr = fdt_getprop_namelen(dtb, node, prop, (int)strlen(prop), NULL);
|
||||
if (ptr == NULL) {
|
||||
WARN("Couldn't find property %s in dtb\n", prop);
|
||||
return -1;
|
||||
}
|
||||
|
||||
len = strlcpy(str, ptr, size);
|
||||
if (len >= size) {
|
||||
WARN("String of property %s in dtb has been truncated\n", prop);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Read UUID from a given property of the given node. Returns 0 on success,
|
||||
* and a negative value upon error.
|
||||
*/
|
||||
int fdtw_read_uuid(const void *dtb, int node, const char *prop,
|
||||
unsigned int length, uint8_t *uuid)
|
||||
{
|
||||
/* Buffer for UUID string (plus NUL terminator) */
|
||||
char uuid_string[UUID_STRING_LENGTH + 1U];
|
||||
int err;
|
||||
|
||||
assert(dtb != NULL);
|
||||
assert(prop != NULL);
|
||||
assert(uuid != NULL);
|
||||
assert(node >= 0);
|
||||
|
||||
if (length < UUID_BYTES_LENGTH) {
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
err = fdtw_read_string(dtb, node, prop, uuid_string,
|
||||
UUID_STRING_LENGTH + 1U);
|
||||
if (err != 0) {
|
||||
return err;
|
||||
}
|
||||
|
||||
if (read_uuid(uuid, uuid_string) != 0) {
|
||||
return -FDT_ERR_BADVALUE;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Write cells in place to a given property of the given node. At most 2 cells
|
||||
* of the property are written. Returns 0 on success, and -1 upon error.
|
||||
*/
|
||||
int fdtw_write_inplace_cells(void *dtb, int node, const char *prop,
|
||||
unsigned int cells, void *value)
|
||||
{
|
||||
int err, len;
|
||||
|
||||
assert(dtb != NULL);
|
||||
assert(prop != NULL);
|
||||
assert(value != NULL);
|
||||
assert(node >= 0);
|
||||
|
||||
/* We expect either 1 or 2 cell property */
|
||||
assert(cells <= 2U);
|
||||
|
||||
if (cells == 2U)
|
||||
*(fdt64_t *)value = cpu_to_fdt64(*(uint64_t *)value);
|
||||
else
|
||||
*(fdt32_t *)value = cpu_to_fdt32(*(uint32_t *)value);
|
||||
|
||||
len = (int)cells * 4;
|
||||
|
||||
/* Set property value in place */
|
||||
err = fdt_setprop_inplace(dtb, node, prop, value, len);
|
||||
if (err != 0) {
|
||||
WARN("Modify property %s failed with error %d\n", prop, err);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Write bytes in place to a given property of the given node.
|
||||
* Any number of bytes of the property can be written.
|
||||
* Returns 0 on success, and < 0 on error.
|
||||
*/
|
||||
int fdtw_write_inplace_bytes(void *dtb, int node, const char *prop,
|
||||
unsigned int length, const void *data)
|
||||
{
|
||||
const void *ptr;
|
||||
int namelen, value_len, err;
|
||||
|
||||
assert(dtb != NULL);
|
||||
assert(prop != NULL);
|
||||
assert(data != NULL);
|
||||
assert(node >= 0);
|
||||
|
||||
namelen = (int)strlen(prop);
|
||||
|
||||
/* Access property and obtain its length in bytes */
|
||||
ptr = fdt_getprop_namelen(dtb, node, prop, namelen, &value_len);
|
||||
if (ptr == NULL) {
|
||||
WARN("Couldn't find property %s in dtb\n", prop);
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Verify that property length is not less than number of bytes */
|
||||
if ((unsigned int)value_len < length) {
|
||||
WARN("Property length mismatch\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Set property value in place */
|
||||
err = fdt_setprop_inplace_namelen_partial(dtb, node, prop,
|
||||
namelen, 0,
|
||||
data, (int)length);
|
||||
if (err != 0) {
|
||||
WARN("Set property %s failed with error %d\n", prop, err);
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
static uint64_t fdt_read_prop_cells(const fdt32_t *prop, int nr_cells)
|
||||
{
|
||||
uint64_t reg = fdt32_to_cpu(prop[0]);
|
||||
|
||||
if (nr_cells > 1) {
|
||||
reg = (reg << 32) | fdt32_to_cpu(prop[1]);
|
||||
}
|
||||
|
||||
return reg;
|
||||
}
|
||||
|
||||
int fdt_get_reg_props_by_index(const void *dtb, int node, int index,
|
||||
uintptr_t *base, size_t *size)
|
||||
{
|
||||
const fdt32_t *prop;
|
||||
int parent, len;
|
||||
int ac, sc;
|
||||
int cell;
|
||||
|
||||
parent = fdt_parent_offset(dtb, node);
|
||||
if (parent < 0) {
|
||||
return -FDT_ERR_BADOFFSET;
|
||||
}
|
||||
|
||||
ac = fdt_address_cells(dtb, parent);
|
||||
sc = fdt_size_cells(dtb, parent);
|
||||
|
||||
cell = index * (ac + sc);
|
||||
|
||||
prop = fdt_getprop(dtb, node, "reg", &len);
|
||||
if (prop == NULL) {
|
||||
WARN("Couldn't find \"reg\" property in dtb\n");
|
||||
return -FDT_ERR_NOTFOUND;
|
||||
}
|
||||
|
||||
if (((cell + ac + sc) * (int)sizeof(uint32_t)) > len) {
|
||||
return -FDT_ERR_BADVALUE;
|
||||
}
|
||||
|
||||
if (base != NULL) {
|
||||
*base = (uintptr_t)fdt_read_prop_cells(&prop[cell], ac);
|
||||
}
|
||||
|
||||
if (size != NULL) {
|
||||
*size = (size_t)fdt_read_prop_cells(&prop[cell + ac], sc);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* This function fills reg node info (base & size) with an index found by
|
||||
* checking the reg-names node.
|
||||
* Returns 0 on success and a negative FDT error code on failure.
|
||||
******************************************************************************/
|
||||
int fdt_get_reg_props_by_name(const void *dtb, int node, const char *name,
|
||||
uintptr_t *base, size_t *size)
|
||||
{
|
||||
int index;
|
||||
|
||||
index = fdt_stringlist_search(dtb, node, "reg-names", name);
|
||||
if (index < 0) {
|
||||
return index;
|
||||
}
|
||||
|
||||
return fdt_get_reg_props_by_index(dtb, node, index, base, size);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* This function gets the stdout path node.
|
||||
* It reads the value indicated inside the device tree.
|
||||
* Returns node offset on success and a negative FDT error code on failure.
|
||||
******************************************************************************/
|
||||
int fdt_get_stdout_node_offset(const void *dtb)
|
||||
{
|
||||
int node;
|
||||
const char *prop, *path;
|
||||
int len;
|
||||
|
||||
/* The /secure-chosen node takes precedence over the standard one. */
|
||||
node = fdt_path_offset(dtb, "/secure-chosen");
|
||||
if (node < 0) {
|
||||
node = fdt_path_offset(dtb, "/chosen");
|
||||
if (node < 0) {
|
||||
return -FDT_ERR_NOTFOUND;
|
||||
}
|
||||
}
|
||||
|
||||
prop = fdt_getprop(dtb, node, "stdout-path", NULL);
|
||||
if (prop == NULL) {
|
||||
return -FDT_ERR_NOTFOUND;
|
||||
}
|
||||
|
||||
/* Determine the actual path length, as a colon terminates the path. */
|
||||
path = strchr(prop, ':');
|
||||
if (path == NULL) {
|
||||
len = strlen(prop);
|
||||
} else {
|
||||
len = path - prop;
|
||||
}
|
||||
|
||||
/* Aliases cannot start with a '/', so it must be the actual path. */
|
||||
if (prop[0] == '/') {
|
||||
return fdt_path_offset_namelen(dtb, prop, len);
|
||||
}
|
||||
|
||||
/* Lookup the alias, as this contains the actual path. */
|
||||
path = fdt_get_alias_namelen(dtb, prop, len);
|
||||
if (path == NULL) {
|
||||
return -FDT_ERR_NOTFOUND;
|
||||
}
|
||||
|
||||
return fdt_path_offset(dtb, path);
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* Only devices which are direct children of root node use CPU address domain.
|
||||
* All other devices use addresses that are local to the device node and cannot
|
||||
* directly used by CPU. Device tree provides an address translation mechanism
|
||||
* through "ranges" property which provides mappings from local address space to
|
||||
* parent address space. Since a device could be a child of a child node to the
|
||||
* root node, there can be more than one level of address translation needed to
|
||||
* map the device local address space to CPU address space.
|
||||
* fdtw_translate_address() API performs address translation of a local address
|
||||
* to a global address with help of various helper functions.
|
||||
******************************************************************************/
|
||||
|
||||
static bool fdtw_xlat_hit(const fdt32_t *value, int child_addr_size,
|
||||
int parent_addr_size, int range_size, uint64_t base_address,
|
||||
uint64_t *translated_addr)
|
||||
{
|
||||
uint64_t local_address, parent_address, addr_range;
|
||||
|
||||
local_address = fdt_read_prop_cells(value, child_addr_size);
|
||||
parent_address = fdt_read_prop_cells(value + child_addr_size,
|
||||
parent_addr_size);
|
||||
addr_range = fdt_read_prop_cells(value + child_addr_size +
|
||||
parent_addr_size,
|
||||
range_size);
|
||||
VERBOSE("DT: Address %" PRIx64 " mapped to %" PRIx64 " with range %" PRIx64 "\n",
|
||||
local_address, parent_address, addr_range);
|
||||
|
||||
/* Perform range check */
|
||||
if ((base_address < local_address) ||
|
||||
(base_address >= local_address + addr_range)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Found hit for the addr range that needs to be translated */
|
||||
*translated_addr = parent_address + (base_address - local_address);
|
||||
VERBOSE("DT: child address %" PRIx64 "mapped to %" PRIx64 " in parent bus\n",
|
||||
local_address, parent_address);
|
||||
return true;
|
||||
}
|
||||
|
||||
#define ILLEGAL_ADDR ULL(~0)
|
||||
|
||||
static uint64_t fdtw_search_all_xlat_entries(const void *dtb,
|
||||
const struct fdt_property *ranges_prop,
|
||||
int local_bus, uint64_t base_address)
|
||||
{
|
||||
uint64_t translated_addr;
|
||||
const fdt32_t *next_entry;
|
||||
int parent_bus_node, nxlat_entries, length;
|
||||
int self_addr_cells, parent_addr_cells, self_size_cells, ncells_xlat;
|
||||
|
||||
/*
|
||||
* The number of cells in one translation entry in ranges is the sum of
|
||||
* the following values:
|
||||
* self#address-cells + parent#address-cells + self#size-cells
|
||||
* Ex: the iofpga ranges property has one translation entry with 4 cells
|
||||
* They represent iofpga#addr-cells + motherboard#addr-cells + iofpga#size-cells
|
||||
* = 1 + 2 + 1
|
||||
*/
|
||||
|
||||
parent_bus_node = fdt_parent_offset(dtb, local_bus);
|
||||
self_addr_cells = fdt_address_cells(dtb, local_bus);
|
||||
self_size_cells = fdt_size_cells(dtb, local_bus);
|
||||
parent_addr_cells = fdt_address_cells(dtb, parent_bus_node);
|
||||
|
||||
/* Number of cells per translation entry i.e., mapping */
|
||||
ncells_xlat = self_addr_cells + parent_addr_cells + self_size_cells;
|
||||
|
||||
assert(ncells_xlat > 0);
|
||||
|
||||
/*
|
||||
* Find the number of translations(mappings) specified in the current
|
||||
* `ranges` property. Note that length represents number of bytes and
|
||||
* is stored in big endian mode.
|
||||
*/
|
||||
length = fdt32_to_cpu(ranges_prop->len);
|
||||
nxlat_entries = (length/sizeof(uint32_t))/ncells_xlat;
|
||||
|
||||
assert(nxlat_entries > 0);
|
||||
|
||||
next_entry = (const fdt32_t *)ranges_prop->data;
|
||||
|
||||
/* Iterate over the entries in the "ranges" */
|
||||
for (int i = 0; i < nxlat_entries; i++) {
|
||||
if (fdtw_xlat_hit(next_entry, self_addr_cells,
|
||||
parent_addr_cells, self_size_cells, base_address,
|
||||
&translated_addr)){
|
||||
return translated_addr;
|
||||
}
|
||||
next_entry = next_entry + ncells_xlat;
|
||||
}
|
||||
|
||||
INFO("DT: No translation found for address %" PRIx64 " in node %s\n",
|
||||
base_address, fdt_get_name(dtb, local_bus, NULL));
|
||||
return ILLEGAL_ADDR;
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
* address mapping needs to be done recursively starting from current node to
|
||||
* root node through all intermediate parent nodes.
|
||||
* Sample device tree is shown here:
|
||||
|
||||
smb@0,0 {
|
||||
compatible = "simple-bus";
|
||||
|
||||
#address-cells = <2>;
|
||||
#size-cells = <1>;
|
||||
ranges = <0 0 0 0x08000000 0x04000000>,
|
||||
<1 0 0 0x14000000 0x04000000>,
|
||||
<2 0 0 0x18000000 0x04000000>,
|
||||
<3 0 0 0x1c000000 0x04000000>,
|
||||
<4 0 0 0x0c000000 0x04000000>,
|
||||
<5 0 0 0x10000000 0x04000000>;
|
||||
|
||||
motherboard {
|
||||
arm,v2m-memory-map = "rs1";
|
||||
compatible = "arm,vexpress,v2m-p1", "simple-bus";
|
||||
#address-cells = <2>;
|
||||
#size-cells = <1>;
|
||||
ranges;
|
||||
|
||||
iofpga@3,00000000 {
|
||||
compatible = "arm,amba-bus", "simple-bus";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges = <0 3 0 0x200000>;
|
||||
v2m_serial1: uart@a0000 {
|
||||
compatible = "arm,pl011", "arm,primecell";
|
||||
reg = <0x0a0000 0x1000>;
|
||||
interrupts = <0 6 4>;
|
||||
clocks = <&v2m_clk24mhz>, <&v2m_clk24mhz>;
|
||||
clock-names = "uartclk", "apb_pclk";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
* As seen above, there are 3 levels of address translations needed. An empty
|
||||
* `ranges` property denotes identity mapping (as seen in `motherboard` node).
|
||||
* Each ranges property can map a set of child addresses to parent bus. Hence
|
||||
* there can be more than 1 (translation) entry in the ranges property as seen
|
||||
* in the `smb` node which has 6 translation entries.
|
||||
******************************************************************************/
|
||||
|
||||
/* Recursive implementation */
|
||||
uint64_t fdtw_translate_address(const void *dtb, int node,
|
||||
uint64_t base_address)
|
||||
{
|
||||
int length, local_bus_node;
|
||||
const char *node_name;
|
||||
uint64_t global_address;
|
||||
|
||||
local_bus_node = fdt_parent_offset(dtb, node);
|
||||
node_name = fdt_get_name(dtb, local_bus_node, NULL);
|
||||
|
||||
/*
|
||||
* In the example given above, starting from the leaf node:
|
||||
* uart@a000 represents the current node
|
||||
* iofpga@3,00000000 represents the local bus
|
||||
* motherboard represents the parent bus
|
||||
*/
|
||||
|
||||
/* Read the ranges property */
|
||||
const struct fdt_property *property = fdt_get_property(dtb,
|
||||
local_bus_node, "ranges", &length);
|
||||
|
||||
if (property == NULL) {
|
||||
if (local_bus_node == 0) {
|
||||
/*
|
||||
* root node doesn't have range property as addresses
|
||||
* are in CPU address space.
|
||||
*/
|
||||
return base_address;
|
||||
}
|
||||
INFO("DT: Couldn't find ranges property in node %s\n",
|
||||
node_name);
|
||||
return ILLEGAL_ADDR;
|
||||
} else if (length == 0) {
|
||||
/* empty ranges indicates identity map to parent bus */
|
||||
return fdtw_translate_address(dtb, local_bus_node, base_address);
|
||||
}
|
||||
|
||||
VERBOSE("DT: Translation lookup in node %s at offset %d\n", node_name,
|
||||
local_bus_node);
|
||||
global_address = fdtw_search_all_xlat_entries(dtb, property,
|
||||
local_bus_node, base_address);
|
||||
|
||||
if (global_address == ILLEGAL_ADDR) {
|
||||
return ILLEGAL_ADDR;
|
||||
}
|
||||
|
||||
/* Translate the local device address recursively */
|
||||
return fdtw_translate_address(dtb, local_bus_node, global_address);
|
||||
}
|
||||
|
||||
/*
|
||||
* For every CPU node (`/cpus/cpu@n`) in an FDT, execute a callback passing a
|
||||
* pointer to the FDT and the offset of the CPU node. If the return value of the
|
||||
* callback is negative, it is treated as an error and the loop is aborted. In
|
||||
* this situation, the value of the callback is returned from the function.
|
||||
*
|
||||
* Returns `0` on success, or a negative integer representing an error code.
|
||||
*/
|
||||
int fdtw_for_each_cpu(const void *dtb,
|
||||
int (*callback)(const void *dtb, int node, uintptr_t mpidr))
|
||||
{
|
||||
int ret = 0;
|
||||
int parent, node = 0;
|
||||
|
||||
parent = fdt_path_offset(dtb, "/cpus");
|
||||
if (parent < 0) {
|
||||
return parent;
|
||||
}
|
||||
|
||||
fdt_for_each_subnode(node, dtb, parent) {
|
||||
const char *name;
|
||||
int len;
|
||||
|
||||
uintptr_t mpidr = 0U;
|
||||
|
||||
name = fdt_get_name(dtb, node, &len);
|
||||
if (strncmp(name, "cpu@", 4) != 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
ret = fdt_get_reg_props_by_index(dtb, node, 0, &mpidr, NULL);
|
||||
if (ret < 0) {
|
||||
break;
|
||||
}
|
||||
|
||||
ret = callback(dtb, node, mpidr);
|
||||
if (ret < 0) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Find a given node in device tree. If not present, add it.
|
||||
* Returns offset of node found/added on success, and < 0 on error.
|
||||
*/
|
||||
int fdtw_find_or_add_subnode(void *fdt, int parentoffset, const char *name)
|
||||
{
|
||||
int offset;
|
||||
|
||||
offset = fdt_subnode_offset(fdt, parentoffset, name);
|
||||
|
||||
if (offset == -FDT_ERR_NOTFOUND) {
|
||||
offset = fdt_add_subnode(fdt, parentoffset, name);
|
||||
}
|
||||
|
||||
if (offset < 0) {
|
||||
ERROR("%s: %s: %s\n", __func__, name, fdt_strerror(offset));
|
||||
}
|
||||
|
||||
return offset;
|
||||
}
|
||||
7
arm-trusted-firmware.t234/common/fdt_wrappers.mk
Normal file
7
arm-trusted-firmware.t234/common/fdt_wrappers.mk
Normal file
@@ -0,0 +1,7 @@
|
||||
#
|
||||
# Copyright (c) 2021, Arm Limited. All rights reserved.
|
||||
#
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
#
|
||||
|
||||
FDT_WRAPPERS_SOURCES := common/fdt_wrappers.c
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user