| 13b4cbd1 | 20-Mar-2025 |
Jens Wiklander <jens.wiklander@linaro.org> |
core: arm: mm: fix core_mmu_xlat_table_alloc() for nexus
core_mmu_xlat_table_alloc() allocates new translation tables from boot_mem until during early boot and after the MMU has been enabled with ne
core: arm: mm: fix core_mmu_xlat_table_alloc() for nexus
core_mmu_xlat_table_alloc() allocates new translation tables from boot_mem until during early boot and after the MMU has been enabled with nex_phys_mem_core_alloc() or phys_mem_core_alloc(). However, the logic selecting which function to call doesn't take the default partition into account. The default partition has only a nexus physical memory pool so nex_phys_mem_core_alloc() must be called if that partition is active. So fix the problem with an extra check for default_partition.
Fixes: a28e4a0fe48d ("core: arm: mm: dynamic allocation of LPAE translation tables") Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org> Acked-by: Jerome Forissier <jerome.forissier@linaro.org> Reviewed-by: Etienne Carriere <etienne.carriere@foss.st.com>
show more ...
|
| e6c87b00 | 20-Mar-2025 |
Jens Wiklander <jens.wiklander@linaro.org> |
plat-ti: replace stack_tmp_stride usage
The function resume_springboard() needs to restore the tmp_stack before the rest of the resume process can be started. Since the commit 05994c760d5d ("core: t
plat-ti: replace stack_tmp_stride usage
The function resume_springboard() needs to restore the tmp_stack before the rest of the resume process can be started. Since the commit 05994c760d5d ("core: thread: get stacks from recorded end-va") we can now read the address of the tmp_stack from thread_core_local. So update resume_springboard() as needed.
Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org> Acked-by: Jerome Forissier <jerome.forissier@linaro.org> Acked-by: Etienne Carriere <etienne.carriere@foss.st.com>
show more ...
|
| 7332b18f | 20-Mar-2025 |
Jens Wiklander <jens.wiklander@linaro.org> |
core: pta: update virt_to_phys() self tests
Update pointer in the virt_to_phys() test for a TEE_RAM to make sure it's pointer in the TEE_RAM area since stack pointers may be mapped differently with
core: pta: update virt_to_phys() self tests
Update pointer in the virt_to_phys() test for a TEE_RAM to make sure it's pointer in the TEE_RAM area since stack pointers may be mapped differently with CFG_DYN_CONFIG=y.
Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org> Acked-by: Jerome Forissier <jerome.forissier@linaro.org> Reviewed-by: Etienne Carriere <etienne.carriere@foss.st.com>
show more ...
|
| a2b343ee | 20-Mar-2025 |
Jens Wiklander <jens.wiklander@linaro.org> |
core: arm64: increase tmp stack size for debug
Increase STACK_TMP_SIZE when CFG_CORE_DEBUG_CHECK_STACKS=y.
Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org> Acked-by: Jerome Forissier <jero
core: arm64: increase tmp stack size for debug
Increase STACK_TMP_SIZE when CFG_CORE_DEBUG_CHECK_STACKS=y.
Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org> Acked-by: Jerome Forissier <jerome.forissier@linaro.org> Reviewed-by: Etienne Carriere <etienne.carriere@foss.st.com>
show more ...
|
| 4592d1a4 | 22-Apr-2025 |
Jens Wiklander <jens.wiklander@linaro.org> |
core: arm: ffa: add test logical SP
Add a test LSP with UUID 54b5440e-a3d2-48d1-872a-7b6cbfc34855 to see that LSPs can be found and reached from the normal world.
Signed-off-by: Jens Wiklander <jen
core: arm: ffa: add test logical SP
Add a test LSP with UUID 54b5440e-a3d2-48d1-872a-7b6cbfc34855 to see that LSPs can be found and reached from the normal world.
Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org> Reviewed-by: Etienne Carriere <etienne.carriere@foss.st.com> Reviewed-by: Akshay Belsare <akshay.belsare@amd.com>
show more ...
|
| ecf08061 | 22-Apr-2025 |
Jens Wiklander <jens.wiklander@linaro.org> |
core: arm: ffa: add framework for Logical SPs
Add a framework to register Logical Secure Partitions in parallel with OP-TEE at S-EL1. This is akin to Pseudo TAs, it provides an ABI but it's part of
core: arm: ffa: add framework for Logical SPs
Add a framework to register Logical Secure Partitions in parallel with OP-TEE at S-EL1. This is akin to Pseudo TAs, it provides an ABI but it's part of the OP-TEE binary. A critical difference is that it's only available for FF-A and can only use the non-threaded environment, that is, no mutexes or RPC.
The logical OP-TEE core partition is registered in the framework. The SPMC is also registered in the framework, but with a nil UUID so it's not returned by FFA_PARTITION_INFO_GET.
Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org> Acked-by: Etienne Carriere <etienne.carriere@foss.st.com> Reviewed-by: Akshay Belsare <akshay.belsare@amd.com>
show more ...
|
| 40f03182 | 22-Apr-2025 |
Jens Wiklander <jens.wiklander@linaro.org> |
core: ffa: only accept FFA_RUN for S-EL0 SPs
OP-TEE core is never preemted with FFA_INTERRUPT so it must never be resumed with FFA_RUN. However, S-EL0 SPs are preempted with FFA_INTERRUPT so those a
core: ffa: only accept FFA_RUN for S-EL0 SPs
OP-TEE core is never preemted with FFA_INTERRUPT so it must never be resumed with FFA_RUN. However, S-EL0 SPs are preempted with FFA_INTERRUPT so those are still resumed using FFA_RUN.
Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org> Acked-by: Etienne Carriere <etienne.carriere@foss.st.com> Reviewed-by: Akshay Belsare <akshay.belsare@amd.com>
show more ...
|
| 5c85c87e | 22-Apr-2025 |
Jens Wiklander <jens.wiklander@linaro.org> |
core: ffa: sp_partition_info_get() takes uuid_words[]
Replace the TEE_UUID *ffa_uuid parameter with uint32_t ffa_uuid_words[4] to simplify how sp_partition_info_get() is called.
Signed-off-by: Jens
core: ffa: sp_partition_info_get() takes uuid_words[]
Replace the TEE_UUID *ffa_uuid parameter with uint32_t ffa_uuid_words[4] to simplify how sp_partition_info_get() is called.
Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org> Reviewed-by: Etienne Carriere <etienne.carriere@foss.st.com> Reviewed-by: Akshay Belsare <akshay.belsare@amd.com>
show more ...
|
| fc6415c4 | 22-Apr-2025 |
Jens Wiklander <jens.wiklander@linaro.org> |
core: ffa: add spmc_is_reserved_id()
Add spmc_is_reserved_id() and replace direct checks against spmd_id and spmc_id. spmd_id and spmc_id are changed to static variables since they don't need to be
core: ffa: add spmc_is_reserved_id()
Add spmc_is_reserved_id() and replace direct checks against spmd_id and spmc_id. spmd_id and spmc_id are changed to static variables since they don't need to be exported any longer.
Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org> Reviewed-by: Etienne Carriere <etienne.carriere@foss.st.com> Reviewed-by: Akshay Belsare <akshay.belsare@amd.com>
show more ...
|
| 76d920d3 | 25-Mar-2025 |
Raymond Mao <raymond.mao@linaro.org> |
core: pta: add self tests for transfer list
Add self tests for transfer list. Adapt CFG_TRANSFER_LIST with its dependencies and add CFG_TRANSFER_LIST_TEST.
Signed-off-by: Raymond Mao <raymond.mao@l
core: pta: add self tests for transfer list
Add self tests for transfer list. Adapt CFG_TRANSFER_LIST with its dependencies and add CFG_TRANSFER_LIST_TEST.
Signed-off-by: Raymond Mao <raymond.mao@linaro.org> Acked-by: Jerome Forissier <jerome.forissier@linaro.org> Acked-by: Jens Wiklander <jens.wiklander@linaro.org>
show more ...
|
| 0cd8ec0f | 10-Apr-2025 |
Raymond Mao <raymond.mao@linaro.org> |
core: kernel: remove the last appended void transfer entry
transfer_list_set_data_size() appends a void entry for the following entries to meet the alignment requirement even when it is the last one
core: kernel: remove the last appended void transfer entry
transfer_list_set_data_size() appends a void entry for the following entries to meet the alignment requirement even when it is the last one, thus add a check before appending.
Signed-off-by: Raymond Mao <raymond.mao@linaro.org> Acked-by: Jerome Forissier <jerome.forissier@linaro.org>
show more ...
|
| 95b0e915 | 25-Mar-2025 |
Raymond Mao <raymond.mao@linaro.org> |
core: kernel: fix bug in transfer_list_add()
Fix the missing cast on the target address when doing memmove. Get the address of entry data via transfer_list_entry_data() instead of adding offset.
Fi
core: kernel: fix bug in transfer_list_add()
Fix the missing cast on the target address when doing memmove. Get the address of entry data via transfer_list_entry_data() instead of adding offset.
Fixes: a12225022bd5 ("core: add transfer list API") Signed-off-by: Raymond Mao <raymond.mao@linaro.org> Reviewed-by: Jerome Forissier <jerome.forissier@linaro.org> Acked-by: Jens Wiklander <jens.wiklander@linaro.org> Reviewed-by: Etienne Carriere <etienne.carriere@foss.st.com>
show more ...
|
| d40a2c00 | 30-Apr-2025 |
Jens Wiklander <jens.wiklander@linaro.org> |
core: ffa: reserve physical nexus memory for manifest
In reinit_manifest_dt() when reserving physical memory for the manifest, allocate from physical nexus memory instead to support ns-virtualizatio
core: ffa: reserve physical nexus memory for manifest
In reinit_manifest_dt() when reserving physical memory for the manifest, allocate from physical nexus memory instead to support ns-virtualization.
Fixes: 414123ae8ca5 ("core: ffa: reserve physical memory for manifest") Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org> Reviewed-by: Etienne Carriere <etienne.carriere@foss.st.com>
show more ...
|
| aa6d7fc3 | 11-Sep-2024 |
Levi Yun <yeoreum.yun@arm.com> |
core: applies FF-A v1.2 features on StandaloneMm
edk2's StandaloneMm will be applied with FF-A v1.2. while applying, StandaloneMm doesn't create anymore PHIT hob by itself but it should be passed fr
core: applies FF-A v1.2 features on StandaloneMm
edk2's StandaloneMm will be applied with FF-A v1.2. while applying, StandaloneMm doesn't create anymore PHIT hob by itself but it should be passed from other software stack.
To make StandaloneMm runs properly, create Hob information and deliver it using FF-A Boot protocol according to FF-A specification [1].
Also, apply FF-A management protocol to change it [2] to get/set memory permission instead of using DIRECT_REQ_MSG.
Also, implements some FF-A ABIs to communication StandaloneMm properly.
Link: https://developer.arm.com/documentation/den0077/latest [1] Link: https://developer.arm.com/documentation/den0140/latest [2]
Tested-by: Ilias Apalodimas <ilias.apalodimas@linaro.org> Acked-by: Ilias Apalodimas <ilias.apalodimas@linaro.org> Acked-by: Jens Wiklander <jens.wiklander@linaro.org> Signed-off-by: Levi Yun <yeoreum.yun@arm.com>
show more ...
|
| f072a39a | 11-Sep-2024 |
Levi Yun <yeoreum.yun@arm.com> |
core: introduce libefi for StandaloneMm
According to Platform Initialization (PI) Specification [1] and Discussion on edk2 mailing list [2], StandaloneMm shouldn't create Hob but it should be passed
core: introduce libefi for StandaloneMm
According to Platform Initialization (PI) Specification [1] and Discussion on edk2 mailing list [2], StandaloneMm shouldn't create Hob but it should be passed from TF-A. That's why StandaloneMm in Arm wouldn't produce Hob by itself [3] but other software stack should pass boot information via PHIT Hob.
This patch introduces libefi including create Hob to deliver boot information to StandaloneMm and defines related data structures.
Link: https://uefi.org/sites/default/files/resources/PI_Spec_1_6.pdf [1] Link: https://edk2.groups.io/g/devel/topic/103675962#114283 [2] Link: https://github.com/tianocore/edk2/pull/6116 [3]
Tested-by: Ilias Apalodimas <ilias.apalodimas@linaro.org> Acked-by: Ilias Apalodimas <ilias.apalodimas@linaro.org> Acked-by: Jens Wiklander <jens.wiklander@linaro.org> Signed-off-by: Levi Yun <yeoreum.yun@arm.com>
show more ...
|
| f5dbcd82 | 24-Apr-2025 |
Alvin Chang <alvinga@andestech.com> |
riscv: mm: Fix core_mmu_entry_is_branch()
We must also check V bit to determine non-leaf PTE.
Signed-off-by: Alvin Chang <alvinga@andestech.com> Reviewed-by: Yu-Chien Peter Lin <peter.lin@sifive.co
riscv: mm: Fix core_mmu_entry_is_branch()
We must also check V bit to determine non-leaf PTE.
Signed-off-by: Alvin Chang <alvinga@andestech.com> Reviewed-by: Yu-Chien Peter Lin <peter.lin@sifive.com>
show more ...
|
| 71214c12 | 11-Apr-2025 |
Alvin Chang <alvinga@andestech.com> |
riscv: mm: support Sv48 and Sv57 address translation for core and TA
Add the macros for Sv57 address translation mode. Add CFG_RISCV_MMU_MODE into riscv.mk and set it as 39 by default to enable Sv39
riscv: mm: support Sv48 and Sv57 address translation for core and TA
Add the macros for Sv57 address translation mode. Add CFG_RISCV_MMU_MODE into riscv.mk and set it as 39 by default to enable Sv39 virtual address translation scheme.
Currently, TA virtual memory occupies 1GB space, and TAs page table should be an entry inside a level 2 (VPN[2]) page table, which is decided by user_va_idx variable. For Sv39 translation scheme, it starts from VPN[2], so nothing to do. For Sv48 translation scheme, we need to allocate entry 0 of level 3 (VPN[3]) page table, and let it point to the level 2 page table used by TA. For Sv57 translation scheme, we need to further allocate entry 0 of level 4 (VPN[4]) page table, and let it point to the level 3 page table.
Signed-off-by: Alvin Chang <alvinga@andestech.com> Reviewed-by: Yu-Chien Peter Lin <peter.lin@sifive.com> Acked-by: Jens Wiklander <jens.wiklander@linaro.org>
show more ...
|
| 1da54125 | 11-Apr-2025 |
Alvin Chang <alvinga@andestech.com> |
riscv: mm: Explicitly set user VA range inside L2(RV64) and L1(RV32) VPN
Add macros for level and bit shift of virtual page number (VPN) encoded in RISC-V virtual address. Explicitly set range of us
riscv: mm: Explicitly set user VA range inside L2(RV64) and L1(RV32) VPN
Add macros for level and bit shift of virtual page number (VPN) encoded in RISC-V virtual address. Explicitly set range of user virtual address inside level 2 VPN by giving CORE_MMU_VPN2_SHIFT since the CORE_MMU_BASE_TABLE_SHIFT is not always based on level 2 VPN if the MMU scheme is not Sv39.
For RV32, there is only two-level VPN. The user VA range would be inside level 1 VPN.
Signed-off-by: Alvin Chang <alvinga@andestech.com> Reviewed-by: Yu-Chien Peter Lin <peter.lin@sifive.com> Acked-by: Jens Wiklander <jens.wiklander@linaro.org>
show more ...
|
| 2642a3da | 11-Apr-2025 |
Alvin Chang <alvinga@andestech.com> |
riscv: mm: clean up macro definitions
Rename RISCV_SATP_ASID_SIZE to RISCV_SATP_ASID_WIDTH since it is used to represent width of bits. Also remove redundant RISCV_MMU_ASID_WIDTH since we already ha
riscv: mm: clean up macro definitions
Rename RISCV_SATP_ASID_SIZE to RISCV_SATP_ASID_WIDTH since it is used to represent width of bits. Also remove redundant RISCV_MMU_ASID_WIDTH since we already have RISCV_SATP_ASID_WIDTH. Fix a minor compiler warning due to inconsistent data types on variable comparison.
Signed-off-by: Alvin Chang <alvinga@andestech.com> Reviewed-by: Yu-Chien Peter Lin <peter.lin@sifive.com> Acked-by: Jens Wiklander <jens.wiklander@linaro.org>
show more ...
|
| 3d5c2dd8 | 28-Apr-2025 |
Jerome Forissier <jerome.forissier@linaro.org> |
clang: do not link against the compiler's compiler-rt library
Since commit 45fecab08117 ("Deprecate libgcc for OP-TEE core and ldelf") libgcc is not needed to link the TEE core and ldelf. Therefore,
clang: do not link against the compiler's compiler-rt library
Since commit 45fecab08117 ("Deprecate libgcc for OP-TEE core and ldelf") libgcc is not needed to link the TEE core and ldelf. Therefore, its Clang counterpart (compiler-rt) is not needed anymore either. Note that C++ in TAs has never been supported with Clang, therefore there is nothing to worry about in this regard (while we still have CFG_TA_LIBGCC for GCC).
Signed-off-by: Jerome Forissier <jerome.forissier@linaro.org> Acked-by: Jens Wiklander <jens.wiklander@linaro.org>
show more ...
|
| 3a0fa646 | 28-Apr-2025 |
Jens Wiklander <jens.wiklander@linaro.org> |
libmbedtls: config: re-enable long long divisions
This reverts commit d3ec4328a070 ("libmbedtls: config: disable long long divisions") to address performance regressions introduced by that commit. T
libmbedtls: config: re-enable long long divisions
This reverts commit d3ec4328a070 ("libmbedtls: config: disable long long divisions") to address performance regressions introduced by that commit. The commit can be reverted now that __udivti3() needed by the unsigned long long divisions is available again.
Link: https://github.com/OP-TEE/optee_os/pull/7359 Link: https://github.com/OP-TEE/optee_os/issues/7374 Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org> Reviewed-by: Jerome Forissier <jerome.forissier@linaro.org>
show more ...
|
| f3434bd3 | 28-Apr-2025 |
Jens Wiklander <jens.wiklander@linaro.org> |
core: arm: remove $(libgcccore) usage
Remove all remaining $(libgcccore) usage now that lib/libutils/compiler-rt provides the needed bits.
Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org>
core: arm: remove $(libgcccore) usage
Remove all remaining $(libgcccore) usage now that lib/libutils/compiler-rt provides the needed bits.
Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org> Reviewed-by: Jerome Forissier <jerome.forissier@linaro.org>
show more ...
|
| 48952fd4 | 28-Apr-2025 |
Jens Wiklander <jens.wiklander@linaro.org> |
libutils: add division routines from LLVM compiler-rt
Add division routines needed to provide __udivti3() needed for long long divisions in mbedtls.
Selected files are imported from the compiler-rt
libutils: add division routines from LLVM compiler-rt
Add division routines needed to provide __udivti3() needed for long long divisions in mbedtls.
Selected files are imported from the compiler-rt directory in LLVM version 20.1.3, tag llvmorg-20.1, to lib/libutils/compiler-rt with no local changes except for the added sub.mk files.
Link: https://github.com/OP-TEE/optee_os/pull/7359 Link: https://github.com/OP-TEE/optee_os/issues/7374 Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org> Reviewed-by: Jerome Forissier <jerome.forissier@linaro.org>
show more ...
|
| 00a2b8c7 | 28-Apr-2025 |
Jerome Forissier <jerome.forissier@linaro.org> |
core: kernel: dt_driver: variable may be unused
Fix the following warning with Clang 18.6.1:
core/kernel/dt_driver.c:456:15: error: variable 'count' set but not used [-Werror,-Wunused-but-set-vari
core: kernel: dt_driver: variable may be unused
Fix the following warning with Clang 18.6.1:
core/kernel/dt_driver.c:456:15: error: variable 'count' set but not used [-Werror,-Wunused-but-set-variable] 456 | unsigned int count = 0; | ^
Indeed, when CFG_TEE_CORE_LOG_LEVEL <= 2, the value of count is never read.
Signed-off-by: Jerome Forissier <jerome.forissier@linaro.org> Acked-by: Jens Wiklander <jens.wiklander@linaro.org> Acked-by: Gatien Chevallier <gatien.chevallier@foss.st.com>
show more ...
|
| 414123ae | 03-Apr-2025 |
Jens Wiklander <jens.wiklander@linaro.org> |
core: ffa: reserve physical memory for manifest
With CFG_CORE_SEL2_SPMC=y (Hafnium as SPMC at S-EL2), the FF-A manifest passed to OP-TEE resides in the memory reserved for OP-TEE just before the loa
core: ffa: reserve physical memory for manifest
With CFG_CORE_SEL2_SPMC=y (Hafnium as SPMC at S-EL2), the FF-A manifest passed to OP-TEE resides in the memory reserved for OP-TEE just before the load address. The physical memory pool is initialized with the entire range of secure memory, with holes carved out for already used memory.
Temporarily allocate the physical memory used by the manifest until it's not needed any longer and released by release_manifest_dt().
Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org> Acked-by: Jerome Forissier <jerome.forissier@linaro.org>
show more ...
|