| c0cfb36c | 08-Jan-2019 |
Etienne Carriere <etienne.carriere@linaro.org> |
core: dt: introduce _fdt_fill_device_info()
_fdt_fill_device_info() gets some generic properties from a given node in a single always successful sequence.
Retrieved device information from the DT:
core: dt: introduce _fdt_fill_device_info()
_fdt_fill_device_info() gets some generic properties from a given node in a single always successful sequence.
Retrieved device information from the DT: - The status/secure-status state as per DT_STATUS_*, - The first register base address found or DT_INFO_INVALID_REG (zero). If there are several register base addresses others are ignored. - The first clock identifier found or DT_INFO_INVALID_CLOCK (negative). - This first reset identifier found or DT_INFO_INVALID_RESET (negative).
Signed-off-by: Etienne Carriere <etienne.carriere@linaro.org> Acked-by: Joakim Bech <joakim.bech@linaro.org> Acked-by: Jerome Forissier <jerome.forissier@linaro.org>
show more ...
|
| 770b2afa | 08-Jan-2019 |
Etienne Carriere <etienne.carriere@linaro.org> |
core: more flexible console init from DT
Introduce get_console_node_from_dt() that collects the references to the console configuration in the DTB.
Existing configure_console_from_dt() relies on it
core: more flexible console init from DT
Introduce get_console_node_from_dt() that collects the references to the console configuration in the DTB.
Existing configure_console_from_dt() relies on it when initiating the console from the early core inits based on registered matching device tables.
get_console_node_from_dt() allows a driver probed from the driver initialization sequence (i.e registered from driver_init()) to get the console DT directive.
Signed-off-by: Etienne Carriere <etienne.carriere@linaro.org> Acked-by: Joakim Bech <joakim.bech@linaro.org> Acked-by: Jerome Forissier <jerome.forissier@linaro.org>
show more ...
|
| d30ae5dd | 17-Dec-2018 |
Etienne Carriere <etienne.carriere@st.com> |
core: move io_pa_va support out of serial drivers
io_pa_or_va() is generic enough to be useful for non serial driver matters. Move it to core_mem_prot.h.
Signed-off-by: Etienne Carriere <etienne.ca
core: move io_pa_va support out of serial drivers
io_pa_or_va() is generic enough to be useful for non serial driver matters. Move it to core_mem_prot.h.
Signed-off-by: Etienne Carriere <etienne.carriere@st.com> Acked-by: Jerome Forissier <jerome.forissier@linaro.org>
show more ...
|
| b8bb0afa | 15-Nov-2018 |
Sumit Garg <sumit.garg@linaro.org> |
libtomcrypt: Import SHA512/256 approved hash algorithm
SHA-512/256 is an approved hash algorithm and a vetted conditioner as per NIST.SP.800-90B spec. We have used it to condition raw thermal sensor
libtomcrypt: Import SHA512/256 approved hash algorithm
SHA-512/256 is an approved hash algorithm and a vetted conditioner as per NIST.SP.800-90B spec. We have used it to condition raw thermal sensor noise on Developerbox to condense entropy.
It is imported from libtomcrypt: Git url: https://github.com/libtom/libtomcrypt.git, release tag: v1.18.0.
Signed-off-by: Sumit Garg <sumit.garg@linaro.org> Acked-by: Jerome Forissier <jerome.forissier@linaro.org> Acked-by: Joakim Bech <joakim.bech@linaro.org>
show more ...
|
| 54815590 | 17-Dec-2018 |
Etienne Carriere <etienne.carriere@linaro.org> |
core: io_{set|clr|clrset}bits32() helpers
Introduce new iomem util functions to set, clear or set and clear bit masks in peripheral interfaces.
io_setbits32(addr, mask) sets the bits enabled in mas
core: io_{set|clr|clrset}bits32() helpers
Introduce new iomem util functions to set, clear or set and clear bit masks in peripheral interfaces.
io_setbits32(addr, mask) sets the bits enabled in mask at address. io_clrbits32(addr, mask) clears the bits enabled in mask. io_clrsetbits32(addr, clear_mask, set_mask) clears the bits enabled in clear_mask and sets the bits enabled in set_mask.
These functions are more friendly in instruction blocks to sets and clears bitmasks in peripheral registers. They provide a more readable implementation than playing with io_mask32() for the equivalent sequence, for example, extracted from a DDR controller driver:
(...) /* IOs powering down (PUBL registers) */
io_setbits32(ddrphy_base + DDRPHYC_ACIOCR, DDRPHYC_ACIOCR_ACPDD); io_setbits_32(ddrphy_base + DDRPHYC_ACIOCR, DDRPHYC_ACIOCR_ACPDR);
io_clrsetbits32(ddrphy_base + DDRPHYC_ACIOCR, DDRPHYC_ACIOCR_CKPDD_MASK, DDRPHYC_ACIOCR_CKPDD_0);
io_clrsetbits32(ddrphy_base + DDRPHYC_ACIOCR, DDRPHYC_ACIOCR_CKPDR_MASK, DDRPHYC_ACIOCR_CKPDR_0);
io_clrsetbits32(ddrphy_base + DDRPHYC_ACIOCR, DDRPHYC_ACIOCR_CSPDD_MASK, DDRPHYC_ACIOCR_CSPDD_0); (...)
Signed-off-by: Etienne Carriere <etienne.carriere@linaro.org> Acked-by: Jens Wiklander <jens.wiklander@linaro.org>
show more ...
|
| b7c94e43 | 14-Dec-2018 |
Etienne Carriere <etienne.carriere@linaro.org> |
core: framework to register PM callbacks
Introduce a framework for power management callback registering.
Drivers and services can register a callback function for the platform suspend and resume s
core: framework to register PM callbacks
Introduce a framework for power management callback registering.
Drivers and services can register a callback function for the platform suspend and resume sequences. A private address handle can be registered with the callback and retrieved from the callback. Callback can be registered with a specific call order as defined per PM_CB_ORDER_*.
Callback shall return an error if failing to complete target transition. This information may be used by the platform to resume a platform on non-fatal failure to suspend.
Callbacks are related to a callback level. It defines the callbacks call ordering, allowing core low level drivers (as clocks or the GIC) to be suspended after all drivers and resume before these.
Signed-off-by: Etienne Carriere <etienne.carriere@linaro.org> Reviewed-by: Jens Wiklander <jens.wiklander@linaro.org> Acked-by: Cedric Neveux <cedric.neveux@nxp.com>
show more ...
|
| e147a447 | 05-Dec-2018 |
Jerome Forissier <jerome.forissier@linaro.org> |
Remove Secure Element API support
There is probably no-one using the Secure Element API. We have never heard anyone asking questions about it, have no way to test it and we believe it is not even wo
Remove Secure Element API support
There is probably no-one using the Secure Element API. We have never heard anyone asking questions about it, have no way to test it and we believe it is not even working right now. Therefore, remove it.
- The reserved syscalls are still present, but return TEE_ERROR_NOT_SUPPORTED - The TEE_SE* functions (GlobalPlatform TEE Secure Element API, GPD_SPE_024) are removed from libutee.a and the header file tee_internal_se_api.h is removed as well
Signed-off-by: Jerome Forissier <jerome.forissier@linaro.org> Acked-by: Joakim Bech <joakim.bech@linaro.org> Reviewed-by: Jens Wiklander <jens.wiklander@linaro.org> Acked-by: Etienne Carriere <etienne.carriere@linaro.org>
show more ...
|
| 12941fdc | 30-Nov-2018 |
Etienne Carriere <etienne.carriere@st.com> |
stm32mp1: device tree platform description
This change introduces the device tree source files describing boards EV1 and ED1 and the related bindings.
The stm32mp1 DTS files and bindings header fil
stm32mp1: device tree platform description
This change introduces the device tree source files describing boards EV1 and ED1 and the related bindings.
The stm32mp1 DTS files and bindings header files are dumped from latest Linux kernel (v4.19). Bindings documentation is not stored in OP-TEE OS source tree, one shall refer to the bindings documentation from latest Linux kernel source tree.
Note that license terms where changed for binding header file gpio.h to release them under dual 2-Clause DSB/GPLv2.0 instead of GPLv2.0 as release in the Linux kernel.
Platform relies on DT source file (CFG_EMBED_DTB_SOURCE_FILE) to distinguish between the platform flavors for the few configuration directive that are static and cannot be provided only through FDT.
Default configuration locates the secure DDR area (TZDRAM) from the base address of the last 32MBytes of the DDR over 30Mbyte. The last 2MBytes of the DDR are the OP-TEE static shared memory.
Many contributors not listed below.
Signed-off-by: Etienne Carriere <etienne.carriere@st.com> Acked-by: Jerome Forissier <jerome.forissier@linaro.org>
show more ...
|
| 9e592338 | 22-Nov-2018 |
Jens Wiklander <jens.wiklander@linaro.org> |
core: initcall.h use scattered array
Initcalls uses generic scattered array instead of special implementation.
Acked-by: Etienne Carriere <etienne.carriere@linaro.org> Reviewed-by: Jerome Forissier
core: initcall.h use scattered array
Initcalls uses generic scattered array instead of special implementation.
Acked-by: Etienne Carriere <etienne.carriere@linaro.org> Reviewed-by: Jerome Forissier <jerome.forissier@linaro.org> Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org>
show more ...
|
| 5e4210e9 | 22-Nov-2018 |
Jens Wiklander <jens.wiklander@linaro.org> |
core: add scattered array
Adds a scattered array which allows defining arrays scattered over several source files. The implementation is based on some support by the linker.
This is a generic solut
core: add scattered array
Adds a scattered array which allows defining arrays scattered over several source files. The implementation is based on some support by the linker.
This is a generic solution to initcalls and other similar scattered initializations.
Acked-by: Etienne Carriere <etienne.carriere@linaro.org> Reviewed-by: Jerome Forissier <jerome.forissier@linaro.org> Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org>
show more ...
|
| 8d527cd6 | 22-Nov-2018 |
Jens Wiklander <jens.wiklander@linaro.org> |
core: keep.h: avoid duplicate symbols
Prior to this patch if the KEEP_*() macros are used with two static variables with the same name but in different source files it will result in a duplicated gl
core: keep.h: avoid duplicate symbols
Prior to this patch if the KEEP_*() macros are used with two static variables with the same name but in different source files it will result in a duplicated global symbol. This happens because the internal trickery uses global variables based on the static symbol it's supposed to keep. With this patch the global variables uses the file unique define __FILE_ID__ to avoid the conflict.
Acked-by: Etienne Carriere <etienne.carriere@linaro.org> Reviewed-by: Jerome Forissier <jerome.forissier@linaro.org> Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org>
show more ...
|
| 6009538c | 24-Oct-2018 |
Jens Wiklander <jens.wiklander@linaro.org> |
core: introduce generic optee_rpc_cmd.h
Replaces the OPTEE_MSG RPC command protocol descriptions in optee_msg.h and optee_msg_supplicant with a generic optee_rpc_cmd.h. Defined names are also refact
core: introduce generic optee_rpc_cmd.h
Replaces the OPTEE_MSG RPC command protocol descriptions in optee_msg.h and optee_msg_supplicant with a generic optee_rpc_cmd.h. Defined names are also refactored to mirror the new structure.
Acked-by: Etienne Carriere <etienne.carriere@linaro.org> Reviewed-by: Jerome Forissier <jerome.forissier@linaro.org> Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org>
show more ...
|
| 4cdeb627 | 19-Oct-2018 |
Jens Wiklander <jens.wiklander@linaro.org> |
core: msg_param: remove unused functions
Removes the unused functions msg_param_init_memparam() and msg_param_get_buf_size().
Acked-by: Etienne Carriere <etienne.carriere@linaro.org> Acked-by: Jero
core: msg_param: remove unused functions
Removes the unused functions msg_param_init_memparam() and msg_param_get_buf_size().
Acked-by: Etienne Carriere <etienne.carriere@linaro.org> Acked-by: Jerome Forissier <jerome.forissier@linaro.org> Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org>
show more ...
|
| 13eb4e3c | 19-Oct-2018 |
Jens Wiklander <jens.wiklander@linaro.org> |
core: use struct thread_param for RPC
Use struct thread_param as an abstraction of the parameters used for RPC.
Acked-by: Etienne Carriere <etienne.carriere@linaro.org> Acked-by: Jerome Forissier <
core: use struct thread_param for RPC
Use struct thread_param as an abstraction of the parameters used for RPC.
Acked-by: Etienne Carriere <etienne.carriere@linaro.org> Acked-by: Jerome Forissier <jerome.forissier@linaro.org> Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org>
show more ...
|
| fd118772 | 12-Nov-2018 |
Jerome Forissier <jerome.forissier@linaro.org> |
core: force read-only flag on .rodata.* sections
This commit fixes a warning with GCC 8.2 that did not occur with GCC 6.2:
$ make out/arm-plat-vexpress/core/arch/arm/kernel/user_ta.o CHK ou
core: force read-only flag on .rodata.* sections
This commit fixes a warning with GCC 8.2 that did not occur with GCC 6.2:
$ make out/arm-plat-vexpress/core/arch/arm/kernel/user_ta.o CHK out/arm-plat-vexpress/conf.mk CHK out/arm-plat-vexpress/include/generated/conf.h CHK out/arm-plat-vexpress/core/include/generated/asm-defines.h CC out/arm-plat-vexpress/core/arch/arm/kernel/user_ta.o {standard input}: Assembler messages: {standard input}:4087: Warning: setting incorrect section attributes for .rodata.__unpaged
The message is printed as the assembler processes this code fragment, generated by the C compiler:
.section .rodata.__unpaged,"aw"
The older compiler (GCC 6.2) would generate instead:
.section .rodata.__unpaged,"a",%progbits
The problem with .rodata.__unpaged,"aw" is that the "w" (writeable) flag is not consistent with the section name (.rodata.*), which by convention is supposed to be read-only.
- The section name (".rodata.__unpaged") is given by our macro: __rodata_unpaged. - The "w" flag is added by GCC, not sure why exactly. One reason [1] is when a relocatable binary is being generated and the structure contains relocatable data. But, we are not explicitly asking for a relocatable binary, so this might as well be a bug or counter-intuitive feature of the compiler.
Anyway, to avoid the warning, we need to fix the section flags. The section type (%progbits) is optional, it is deduced from the section name by default. %progbits indicates that the section contains data (i.e., is not empty).
Link: [1] https://gcc.gnu.org/ml/gcc/2004-05/msg01016.html Signed-off-by: Jerome Forissier <jerome.forissier@linaro.org> Tested-by: Jerome Forissier <jerome.forissier@linaro.org> (QEMU) Tested-by: Jerome Forissier <jerome.forissier@linaro.org> (HiKey960) Acked-by: Jens Wiklander <jens.wiklander@linaro.org> Acked-by: Etienne Carriere <etienne.carriere@linaro.org>
show more ...
|
| ab0df69e | 15-Oct-2018 |
Jerome Forissier <jerome.forissier@linaro.org> |
core: instrument mutexes with lockdep
Implements lockdep hooks for mutexes. CFG_LOCKDEP is disabled by default, because it causes a noticeable slowdown (plain xtest runs 2-4x slower).
Tested-by: Je
core: instrument mutexes with lockdep
Implements lockdep hooks for mutexes. CFG_LOCKDEP is disabled by default, because it causes a noticeable slowdown (plain xtest runs 2-4x slower).
Tested-by: Jerome Forissier <jerome.forissier@linaro.org> (QEMU, HiKey960) Signed-off-by: Jerome Forissier <jerome.forissier@linaro.org> Reviewed-by: Joakim Bech <joakim.bech@linaro.org> Reviewed-by: Etienne Carriere <etienne.carriere@linaro.org> Acked-by: Jens Wiklander <jens.wiklander@linaro.org>
show more ...
|
| b3fd78c4 | 14-Sep-2018 |
Jerome Forissier <jerome.forissier@linaro.org> |
core: introduce lockdep algorithm
This commit introduces an algorithm that may be used to detect improper usage of locks at runtime. It can detect two kinds errors:
1. A thread tries to release a
core: introduce lockdep algorithm
This commit introduces an algorithm that may be used to detect improper usage of locks at runtime. It can detect two kinds errors:
1. A thread tries to release a lock it does not own, 2. A thread tries to aquire a lock and the operation could *potentially* result in a deadlock.
The potential deadlock detection assumes that the code adheres to a strict locking hierarchy, in other word, that there is a partial ordering on the locks so that there can be no situation where circular waits can occur. To put things simply, any two locks should be acquired in the same order in the same thread. This addresses the following case:
[Thread #1] [Thread #2]
lock(A) lock(B) lock(B) lock(A) <-- deadlock! ...
The algorithm builds the lock hierarchy dynamically and reports as soon as a violation is detected.
The interface is made of two functions: lockdep_lock_acquire() and lockdep_lock_release(), which are meant to be introduced in the implementation of the actual lock objects. The "acquire" hook tells the algorithm that a particular lock is about to be requested by a particular thread, while the "release" hook is meant to be called before the lock is actually released. If an error is detected, debugging information is sent to the console, and panic() is called. The debugging information includes the lock cycle that was detected (in the above example, {A, B}), as well as the call stacks at the points where the locks were acquired.
The good thing with such an instrumentation of the locking code is that there is no need to wait for an actual deadlock to occur in order to detect potential problems. For instance, the timing of execution in the above example could be different but the problem would still be detected:
[Thread #1] [Thread #2]
lock(A) lock(B) unlock(B) unlock(A) lock(B) lock(A) <-- error!
A pseudo-TA is added for testing (pta/core_lockdep_tests.c).
This code is based on two sources: - A presentation called "Dl-Check: dynamic potential deadlock detection tool for Java programs" [1], although the somewhat complex MNR algorithm for topological ordering of a DAG was not used; - A depth-first search algorithm [2] was used instead.
Link: [1] https://www.slideshare.net/IosifItkin/tmpa2017-dlcheck-dynamic-potential-deadlock-detection-tool-for-java-programs Link: [2] https://en.wikipedia.org/wiki/Topological_sorting#Depth-first_search Signed-off-by: Jerome Forissier <jerome.forissier@linaro.org> Reviewed-by: Joakim Bech <joakim.bech@linaro.org> Reviewed-by: Etienne Carriere <etienne.carriere@linaro.org> Acked-by: Jens Wiklander <jens.wiklander@linaro.org>
show more ...
|
| cd278f78 | 19-Oct-2018 |
Jens Wiklander <jens.wiklander@linaro.org> |
core: simplify shm cookie handling
Simplifies SHM cookie handling by storing the cookie in the mobj instead of putting the burden on the caller. The cookie parameter is dropped from the thread_rpc_*
core: simplify shm cookie handling
Simplifies SHM cookie handling by storing the cookie in the mobj instead of putting the burden on the caller. The cookie parameter is dropped from the thread_rpc_*_payload() functions. All callers of those functions are also updated and unused cookie members of related structs are removed too.
Acked-by: Jerome Forissier <jerome.forissier@linaro.org> Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org>
show more ...
|
| daaf4f11 | 12-Oct-2018 |
Daniel McIlvaney <damcilva@microsoft.com> |
core: modify tee_otp_get_hw_unique_key to return TEE_Result
Getting the hardware key can fail on some platforms. Modify the function signature to return an appropriate error code.
Signed-off-by: Da
core: modify tee_otp_get_hw_unique_key to return TEE_Result
Getting the hardware key can fail on some platforms. Modify the function signature to return an appropriate error code.
Signed-off-by: Daniel McIlvaney <damcilva@microsoft.com> Signed-off-by: Jordan Rhee <jordanrh@microsoft.com> Reviewed-by: Jens Wiklander <jens.wiklander@linaro.org>
show more ...
|
| 2197c7c2 | 26-Sep-2018 |
Jens Wiklander <jens.wiklander@linaro.org> |
optee_msg.h: remove OPTEE_MSG_ATTR_FRAGMENT
OPTEE_MSG_ATTR_FRAGMENT isn't defined. Remove it from comments and replace with OPTEE_MSG_ATTR_NONCONTIG where applicable.
Acked-by: Jerome Forissier <je
optee_msg.h: remove OPTEE_MSG_ATTR_FRAGMENT
OPTEE_MSG_ATTR_FRAGMENT isn't defined. Remove it from comments and replace with OPTEE_MSG_ATTR_NONCONTIG where applicable.
Acked-by: Jerome Forissier <jerome.forissier@linaro.org> Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org>
show more ...
|
| 81801f83 | 03-Sep-2018 |
Volodymyr Babchuk <vlad.babchuk@gmail.com> |
io.h: add READ_ONCE macro
Compiler can rearrange memory reads and writes if it does not see any dependency on them. This can be troublesome if we deal with memory which is shared with non-secure wor
io.h: add READ_ONCE macro
Compiler can rearrange memory reads and writes if it does not see any dependency on them. This can be troublesome if we deal with memory which is shared with non-secure world.
READ_ONCE macro ensures that compiler will read memory only once. It is simple wrapper over __compiler_atomic_load(), but it's name emphasizes it's function.
Signed-off-by: Volodymyr Babchuk <vlad.babchuk@gmail.com> Reviewed-by: Jens Wiklander <jens.wiklander@linaro.org>
show more ...
|
| af8149de | 27-Jun-2018 |
Jens Wiklander <jens.wiklander@linaro.org> |
core: make stack trace robust
Makes stack trace robust by checking addresses before copying data. Kernel stack traces are a bit more relaxed as we have crashed already.
Reviewed-by: Jerome Forissie
core: make stack trace robust
Makes stack trace robust by checking addresses before copying data. Kernel stack traces are a bit more relaxed as we have crashed already.
Reviewed-by: Jerome Forissier <jerome.forissier@linaro.org> Tested-by: Jerome Forissier <jerome.forissier@linaro.org> (HiKey960 AArch32, Aarch64) Tested-by: Jens Wiklander <jens.wiklander@linaro.org> (Juno, QEMU) Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org>
show more ...
|
| ce0eb3c6 | 23-Mar-2018 |
Silvano di Ninno <silvano.dininno@nxp.com> |
drivers: tzc380: fix tzc_configure_region api
Signed-off-by: Silvano di Ninno <silvano.dininno@nxp.com> Reviewed-by: Jerome Forissier <jerome.forissier@linaro.org> |
| afefa2cc | 05-Feb-2018 |
Igor Opaniuk <igor.opaniuk@linaro.org> |
core: support for global shared buffers
Add support of allocating SHM shared with non-secure kernel and exported to a non-secure userspace application.
Reviewed-by: Jens Wiklander <jens.wiklander@l
core: support for global shared buffers
Add support of allocating SHM shared with non-secure kernel and exported to a non-secure userspace application.
Reviewed-by: Jens Wiklander <jens.wiklander@linaro.org> Signed-off-by: Igor Opaniuk <igor.opaniuk@linaro.org>
show more ...
|
| 0a16c8ca | 19-Jun-2018 |
Etienne Carriere <etienne.carriere@st.com> |
core: stm32_uart driver
Used by platform stm32mp1.
Signed-off-by: Etienne Carriere <etienne.carriere@st.com> Reviewed-by: Jerome Forissier <jerome.forissier@linaro.org> Acked-by: Jens Wiklander <je
core: stm32_uart driver
Used by platform stm32mp1.
Signed-off-by: Etienne Carriere <etienne.carriere@st.com> Reviewed-by: Jerome Forissier <jerome.forissier@linaro.org> Acked-by: Jens Wiklander <jens.wiklander@linaro.org>
show more ...
|