arm_ffa: Distinguish between uninitialized and failed Add a new FF-A initialization state to distinguish between not-yet-initialized (before calling arm_ffa_init) and failed-to-initialize (after arm_ffa_init). Bug: 284057071 Change-Id: Ib6c243a6490c6a35337b4c9fb53eeb36e769565c
diff --git a/lib/arm_ffa/arm_ffa.c b/lib/arm_ffa/arm_ffa.c index b838423..c87c279 100644 --- a/lib/arm_ffa/arm_ffa.c +++ b/lib/arm_ffa/arm_ffa.c
@@ -38,7 +38,7 @@ #include <sys/types.h> #include <trace.h> -static bool arm_ffa_init_is_success = false; +static enum arm_ffa_init_state ffa_init_state = ARM_FFA_INIT_UNINIT; static uint16_t ffa_local_id; static size_t ffa_buf_size; static void* ffa_tx; @@ -49,8 +49,8 @@ static mutex_t ffa_rxtx_buffer_lock = MUTEX_INITIAL_VALUE(ffa_rxtx_buffer_lock); -bool arm_ffa_is_init(void) { - return arm_ffa_init_is_success; +enum arm_ffa_init_state arm_ffa_init_state(void) { + return ffa_init_state; } static status_t arm_ffa_call_id_get(uint16_t* id) { @@ -1029,7 +1029,7 @@ res = arm_ffa_setup(); if (res == NO_ERROR) { - arm_ffa_init_is_success = true; + ffa_init_state = ARM_FFA_INIT_SUCCESS; #if WITH_SMP res = ffa_call_secondary_ep_register(); @@ -1042,6 +1042,7 @@ #endif } else { TRACEF("Failed to initialize FF-A (err=%d)\n", res); + ffa_init_state = ARM_FFA_INIT_FAILED; } }
diff --git a/lib/arm_ffa/include/lib/arm_ffa/arm_ffa.h b/lib/arm_ffa/include/lib/arm_ffa/arm_ffa.h index 273d4ba..c33437e 100644 --- a/lib/arm_ffa/include/lib/arm_ffa/arm_ffa.h +++ b/lib/arm_ffa/include/lib/arm_ffa/arm_ffa.h
@@ -29,6 +29,25 @@ #include <stdbool.h> /** + * enum arm_ffa_init_state - The current state of FF-A initialization. + * @ARM_FFA_INIT_UNINIT: FF-A has not been initialized yet. + * @ARM_FFA_INIT_SUCCESS: FF-A has been successfully initialized. + * @ARM_FFA_INIT_FAILED: Failed to initialize FF-A. + */ +enum arm_ffa_init_state { + ARM_FFA_INIT_UNINIT, + ARM_FFA_INIT_SUCCESS, + ARM_FFA_INIT_FAILED, +}; + +/** + * arm_ffa_init_state() - Return the current state of FF-A initialization. + * + * Return: one of the &enum arm_ffa_init_state values. + */ +enum arm_ffa_init_state arm_ffa_init_state(void); + +/** * arm_ffa_is_init() - Check whether this module initialized successfully. * * This should only be called once arm_ffa_init() is guaranteed to have @@ -36,7 +55,9 @@ * * Return: %true in case of success, %false otherwise. */ -bool arm_ffa_is_init(void); +static inline bool arm_ffa_is_init(void) { + return arm_ffa_init_state() == ARM_FFA_INIT_SUCCESS; +} /** * arm_ffa_mem_relinquish() - Relinquish Trusty's access to a memory region.