On Tue, Aug 30, 2022 at 12:07 PM Sudeep Holla sudeep.holla@arm.com wrote:
Add support for FFA_FEATURES to discover properties supported at the FF-A interface. This interface can be used to query:
- If an FF-A interface is implemented by the component at the higher EL,
- If an implemented FF-A interface also implements any optional features described in its interface definition, and
- Any implementation details exported by an implemented FF-A interface as described in its interface definition.
Signed-off-by: Sudeep Holla sudeep.holla@arm.com
drivers/firmware/arm_ffa/driver.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+)
diff --git a/drivers/firmware/arm_ffa/driver.c b/drivers/firmware/arm_ffa/driver.c index 04e7cbb1b9aa..de94073f4109 100644 --- a/drivers/firmware/arm_ffa/driver.c +++ b/drivers/firmware/arm_ffa/driver.c @@ -571,6 +571,29 @@ static int ffa_memory_reclaim(u64 g_handle, u32 flags) return 0; }
+static int ffa_features(u32 func_feat_id, u32 input_props, u32 *if_props) +{
ffa_value_t id;
if (!ARM_SMCCC_IS_FAST_CALL(func_feat_id) && input_props) {
pr_err("%s: Invalid Parameters: %x, %x", __func__,
func_feat_id, input_props);
return ffa_to_linux_errno(FFA_RET_INVALID_PARAMETERS);
}
invoke_ffa_fn((ffa_value_t){
.a0 = FFA_FEATURES, .a1 = func_feat_id, .a2 = input_props,
}, &id);
if (id.a0 == FFA_ERROR)
return ffa_to_linux_errno((int)id.a2);
if (if_props)
*if_props = id.a2;
w3 (id.a3) also contains a value when querying for FFA_MEM_RETRIEVE_REQ. I see that in "[PATCH 5/9] firmware: arm_ffa: Use FFA_FEATURES to detect if native versions are supported" you're using this function with if_props = NULL. So I guess that at the moment we have more than needed, but in case you need to add another parameter to this function you'll need to update all the call sites too.
Cheers, Jens
return 0;
+}
static u32 ffa_api_version_get(void) { return drv_info->version; -- 2.37.2