[PATCH v2 02/11] arm-ffa: add FF-A bus runtime support

Harsimran Singh Tungal harsimransingh.tungal at arm.com
Tue May 26 11:16:19 CEST 2026


On 2026-05-15 12:25 -0600, Simon Glass wrote:
> Hi Harsimran,
> 
> On 2026-05-14T12:49:13, Harsimran Singh Tungal
> <harsimransingh.tungal at arm.com> wrote:
> > arm-ffa: add FF-A bus runtime support
> >
> > Enable FF-A runtime transport for EFI services
> >
> > Add the FF-A runtime infrastructure needed after ExitBootServices() so
> > EFI runtime services can continue to use the FF-A transport layer.
> > Introduce drivers/firmware/arm-ffa/arm-ffa-runtime.c and
> > include/arm_ffa_runtime.h with runtime-resident FF-A helpers for
> > direct messaging, SMC invocation, and error translation. Add the
> > sandbox runtime SMC wrapper, the ARM_FFA_RT_MODE Kconfig option, and
> > the ExitBootServices hook that copies the required FF-A runtime data
> > into resident storage before enabling the runtime context.
> >
> > Tag the runtime code and data with __efi_runtime and
> > __efi_runtime_data so they remain available after
> > ExitBootServices().
> >
> > Signed-off-by: Harsimran Singh Tungal <harsimransingh.tungal at arm.com>
> >
> > ----
> > [...]
> >
> > drivers/firmware/arm-ffa/Kconfig           |  11 ++
> >  drivers/firmware/arm-ffa/Makefile          |   4 +-
> >  drivers/firmware/arm-ffa/arm-ffa-runtime.c | 295 +++++++++++++++++++++++++++++
> >  drivers/firmware/arm-ffa/arm-ffa-uclass.c  | 113 ++---------
> >  drivers/firmware/arm-ffa/arm-ffa.c         |  16 +-
> >  drivers/firmware/arm-ffa/ffa-emul-uclass.c |  12 ++
> >  include/arm_ffa.h                          |  16 +-
> >  include/arm_ffa_priv.h                     |  22 ++-
> >  include/arm_ffa_runtime.h                  | 191 +++++++++++++++++++
> >  test/dm/ffa.c                              |   6 +-
> >  10 files changed, 566 insertions(+), 120 deletions(-)
> 
> Reviewed-by: Simon Glass <sjg at chromium.org>
> 
> > diff --git a/drivers/firmware/arm-ffa/arm-ffa-uclass.c b/drivers/firmware/arm-ffa/arm-ffa-uclass.c
> > @@ -1024,6 +937,7 @@ int ffa_rxtx_unmap(struct udevice *dev)
> >  static int ffa_do_probe(struct udevice *dev)
> >  {
> >       int ret;
> > +     struct ffa_priv *uc_priv = dev_get_uclass_priv(dev);
> >
> >       ret = ffa_get_version_hdlr(dev);
> >       if (ret)
> > @@ -1033,6 +947,12 @@ static int ffa_do_probe(struct udevice *dev)
> >       if (ret)
> >               return ret;
> >
> > +     if (IS_ENABLED(CONFIG_ARM_FFA_RT_MODE)) {
> > +             ret = ffa_setup_efi_exit_boot_services_event(uc_priv);
> > +             if (ret)
> > +                     return ret;
> > +     }
> > +
> >       ret = ffa_get_rxtx_map_features_hdlr(dev);
> 
> The event is installed before the rxtx-map and partition-cache steps.
> If any of those later steps fail, probe returns nonzero but the EBS
> event stays registered against this uc_priv. When ExitBootServices()
> fires the notifier still copies priv->rt and calls
> ffa_enable_runtime_context(), so runtime FF-A appears ready even
> though the bus never finished probing. Either install the event at the
> end of probe, or tear it down on the error paths.
> 
> > diff --git a/drivers/firmware/arm-ffa/arm-ffa-runtime.c b/drivers/firmware/arm-ffa/arm-ffa-runtime.c
> > @@ -0,0 +1,295 @@
> > +#if IS_ENABLED(CONFIG_ARM_FFA_RT_MODE)
> > +static void EFIAPI ffa_rt_exit_boot_services_notify(struct efi_event *event,
> > +                                                 void *context)
> > +{
> > +     struct ffa_priv *priv = context;
> > +
> > +     if (priv) {
> > +             ffa_copy_runtime_priv(&priv->rt);
> > +     } else {
> > +             log_err("FF-A: runtime data missing, keeping RT mode disabled\n");
> > +             return;
> > +     }
> > +
> > +     ffa_enable_runtime_context();
> > +}
> 
> Please flip this around - the usual U-Boot thing is an early-return guard:
> 
>    if (!priv) {
>            log_err("FF-A: runtime data missing, keeping RT mode disabled\n");
>            return;
>    }
>    ffa_copy_runtime_priv(&priv->rt);
>    ffa_enable_runtime_context();
> 
> Also, since the context is set when we create the event, this is
> essentially can't happen - drop to log_warn() or an assert.
> 
> > diff --git a/drivers/firmware/arm-ffa/arm-ffa-runtime.c b/drivers/firmware/arm-ffa/arm-ffa-runtime.c
> > @@ -0,0 +1,295 @@
> > +/* Error mapping declarations */
> > +
> > +int __ffa_runtime_data ffa_to_std_errmap[MAX_NUMBER_FFA_ERR] = {
> > +     [NOT_SUPPORTED] = -EOPNOTSUPP,
> 
> Only referenced inside ffa_to_std_errno() in this file — please make
> it static. Also this is a definition, not a declaration.
>

Hi Simon,

ffa_to_std_errmap is currently also used by ffa-emul-uclass.c, so this
cannot be made it static in arm-ffa-runtime.c without changing those users first.

Regards,
Harsimran Singh Tungal

> > diff --git a/drivers/firmware/arm-ffa/arm-ffa-uclass.c b/drivers/firmware/arm-ffa/arm-ffa-uclass.c
> > @@ -1046,7 +966,6 @@ static int ffa_do_probe(struct udevice *dev)
> >               ffa_unmap_rxtx_buffers_hdlr(dev);
> >               return ret;
> >       }
> > -
> >       return 0;
> >  }
> 
> Unrelated whitespace change - please drop (we normally have a blank
> line before the final return in a function).
> 
> > diff --git a/drivers/firmware/arm-ffa/arm-ffa-runtime.c b/drivers/firmware/arm-ffa/arm-ffa-runtime.c
> > @@ -0,0 +1,295 @@
> > +bool __ffa_runtime ffa_get_status_runtime_context(void)
> > +{
> > +     return ffa_runtime_enabled;
> > +}
> 
> The name reads awkwardly - how about ffa_runtime_is_ready() or
> ffa_runtime_context_ready() ?. Same for ffa_enable_runtime_context() /
> ffa_reset_runtime_context() if you want to keep them parallel.
> 
> >     arm-ffa: add FF-A bus runtime support
> >
> >     Enable FF-A runtime transport for EFI services
> >
> >     Add the FF-A runtime infrastructure needed after ExitBootServices() so
> >     EFI runtime services can continue to use the FF-A transport layer.
> >     Introduce drivers/firmware/arm-ffa/arm-ffa-runtime.c and
> >     include/arm_ffa_runtime.h with runtime-resident FF-A helpers for
> 
> Please use single quotes rather than backticks throughout the commit
> message if you need them at all, also for CONFIG_ARM_FFA_RT_MODE /
> efi_memset_runtime() later on. Filenames such as
> drivers/firmware/arm-ffa/arm-ffa-runtime.c don't need quoting at all.
> 
> Also, the single-line lede ('Enable FF-A runtime transport for EFI
> services') is redundant with the paragraph that follows - drop it and
> let the first paragraph carry the motivation.
> 
> Regards,
> Simon
> 




More information about the U-Boot mailing list