[...] > } > > +/** > + * ffa_memory_reclaim_hdlr() - FFA_MEM_RECLAIM handler function > + * @dev: The FF-A bus device > + * @g_handle: The memory region globally unique Handle > + * @flags: Zero memory and time slicing flags > + * > + * Implement FFA_MEM_RECLAIM FF-A function > + * to restore exclusive access to a memory region back to its Owner. > + * > + * Return: > + * > + * 0 on success. Otherwise, failure > + */ > +int ffa_memory_reclaim_hdlr(struct udevice *dev, u64 g_handle, u32 flags) > +{ > + ffa_value_t res; > + int ffa_errno; > + > + invoke_ffa_fn((ffa_value_t){ > + .a0 = FFA_SMC_32(FFA_MEM_RECLAIM), > + .a1 = HANDLE_LOW(g_handle), .a2 = HANDLE_HIGH(g_handle), > + .a3 = flags, > + }, > + &res > + ); > + > + if (res.a0 != FFA_SMC_32(FFA_SUCCESS)) { > + ffa_errno = res.a2; > + ffa_print_error_log(FFA_MEM_RECLAIM, ffa_errno); > + return ffa_to_std_errno(ffa_errno); > + } > + > + return 0; > +}
Is there a reason you have to define both ffa_memory_reclaim_hdlr() and ffa_memory_reclaim()? Can't you just move the checks of ffa_memory_reclaim() to ffa_memory_reclaim_hdlr()? > + > /* FF-A driver operations (used by clients for communicating with FF-A)*/ > > /** > @@ -1214,6 +1261,29 @@ int ffa_memory_share(struct udevice *dev, struct > ffa_mem_ops_args *args) > return ops->memory_share(dev, args); > } > > +/** > + * ffa_memory_reclaim() - FFA_MEM_RECLAIM driver operation > + * @dev: The FF-A bus device > + * @g_handle: The memory region globally unique Handle > + * @flags: Zero memory and time slicing flags > + * > + * Driver operation for FFA_MEM_RECLAIM. > + * Please see ffa_memory_reclaim_hdlr() description for more details. > + * > + * Return: > + * > + * 0 on success. Otherwise, failure > + */ > +int ffa_memory_reclaim(struct udevice *dev, u64 g_handle, u32 flags) > +{ > + struct ffa_bus_ops *ops = ffa_get_ops(dev); > + > + if (!ops || !ops->memory_reclaim) > + return -ENOSYS; > + > + return ops->memory_reclaim(dev, g_handle, flags); > +} > + > /** > * ffa_do_probe() - probing FF-A framework > * @dev: the FF-A bus device (arm_ffa) > diff --git a/drivers/firmware/arm-ffa/arm-ffa.c > b/drivers/firmware/arm-ffa/arm-ffa.c > index c4211c953ef..b7e751e3821 100644 > --- a/drivers/firmware/arm-ffa/arm-ffa.c > +++ b/drivers/firmware/arm-ffa/arm-ffa.c > @@ -85,6 +85,7 @@ static const struct ffa_bus_ops ffa_ops = { > .sync_send_receive = ffa_msg_send_direct_req_hdlr, > .rxtx_unmap = ffa_unmap_rxtx_buffers_hdlr, > .memory_share = ffa_memory_share_hdlr, > + .memory_reclaim = ffa_memory_reclaim_hdlr, > }; > [...] Thanks /Ilias