Thanks Kory,

This looks cleaner.
I got ont nit, I don't think you need to cast the states to a unit8.

On Tue, 20 Jan 2026 at 03:35, Kory Maincent <[email protected]> wrote:
>
> Change fwu_state_machine_updates() to accept an enum fwu_bank_states
> parameter instead of a boolean. This makes the function interface more
> explicit and prepares for adding FWU_BANK_INVALID support to handle
> boot failures on the active bank.
>
> Convert the FWU_BANK_* defines to an enum and update all call sites
> accordingly.
>
> Signed-off-by: Kory Maincent <[email protected]>
> ---


Reviewed-by: Ilias Apalodimas <[email protected]>

> Changes in v2:
> - Refactors fwu_state_machine_updates() to use enum as parameter instead
>   of adding a new fwu_invalid_bank() helper.
> ---
>  include/fwu.h                | 22 ++++++++--------
>  lib/efi_loader/efi_capsule.c |  5 ++--
>  lib/fwu_updates/fwu_v1.c     | 16 ++++++------
>  lib/fwu_updates/fwu_v2.c     | 50 +++++++++++++++---------------------
>  4 files changed, 44 insertions(+), 49 deletions(-)
>
> diff --git a/include/fwu.h b/include/fwu.h
> index e7bd1d492af..9cee8fb085c 100644
> --- a/include/fwu.h
> +++ b/include/fwu.h
> @@ -80,9 +80,11 @@ struct fwu_mdata_ops {
>
>  #define FWU_IMAGE_ACCEPTED     0x1
>
> -#define FWU_BANK_INVALID       (uint8_t)0xFF
> -#define FWU_BANK_VALID         (uint8_t)0xFE
> -#define FWU_BANK_ACCEPTED      (uint8_t)0xFC
> +enum fwu_bank_states {
> +       FWU_BANK_INVALID = 0xFF,
> +       FWU_BANK_VALID = 0xFE,
> +       FWU_BANK_ACCEPTED = 0xFC,
> +};
>
>  enum {
>         PRIMARY_PART = 1,
> @@ -396,24 +398,24 @@ int fwu_get_mdata_size(uint32_t *mdata_size);
>
>  /**
>   * fwu_state_machine_updates() - Update FWU state of the platform
> - * @trial_state: Is platform transitioning into Trial State
> + * @state: FWU bank state
>   * @update_index: Bank number to which images have been updated
>   *
> - * On successful completion of updates, transition the platform to
> - * either Trial State or Regular State.
> + * FWU_BANK_VALID transition the platform to Trial state
> + * FWU_BANK_ACCEPTED accept the FWU bank state
> + * FWU_BANK_INVALID invalid the FWU bank state
>   *
>   * To transition the platform to Trial State, start the
>   * TrialStateCtr counter, followed by setting the value of bank_state
>   * field of the metadata to Valid state(applicable only in version 2
>   * of metadata).
>   *
> - * In case, the platform is to transition directly to Regular State,
> - * update the bank_state field of the metadata to Accepted
> - * state(applicable only in version 2 of metadata).
> + * Saving the bank_state field of the metadata is only applicable in
> + * version 2 of metadata.
>   *
>   * Return: 0 if OK, -ve on error
>   */
> -int fwu_state_machine_updates(bool trial_state, uint32_t update_index);
> +int fwu_state_machine_updates(enum fwu_bank_states state, uint32_t 
> update_index);
>
>  /**
>   * fwu_init() - FWU specific initialisations
> diff --git a/lib/efi_loader/efi_capsule.c b/lib/efi_loader/efi_capsule.c
> index 89e63ed8dd5..e0f9a6efa25 100644
> --- a/lib/efi_loader/efi_capsule.c
> +++ b/lib/efi_loader/efi_capsule.c
> @@ -465,7 +465,7 @@ static __maybe_unused efi_status_t 
> fwu_empty_capsule_process(
>                         log_err("Unable to set the Accept bit for the image 
> %pUs\n",
>                                 image_guid);
>
> -               status = fwu_state_machine_updates(0, active_idx);
> +               status = fwu_state_machine_updates(FWU_BANK_ACCEPTED, 
> active_idx);
>                 if (status < 0)
>                         ret = EFI_DEVICE_ERROR;
>
> @@ -510,7 +510,8 @@ static __maybe_unused efi_status_t 
> fwu_post_update_process(bool fw_accept_os)
>                 log_err("Failed to update FWU metadata index values\n");
>         } else {
>                 log_debug("Successfully updated the active_index\n");
> -               status = fwu_state_machine_updates(fw_accept_os ? 1 : 0,
> +               status = fwu_state_machine_updates(fw_accept_os ?
> +                                                  FWU_BANK_VALID : 
> FWU_BANK_ACCEPTED,
>                                                    update_index);
>                 if (status < 0)
>                         ret = EFI_DEVICE_ERROR;
> diff --git a/lib/fwu_updates/fwu_v1.c b/lib/fwu_updates/fwu_v1.c
> index 974abf216f6..5824cca98cf 100644
> --- a/lib/fwu_updates/fwu_v1.c
> +++ b/lib/fwu_updates/fwu_v1.c
> @@ -98,27 +98,27 @@ void fwu_populate_mdata_image_info(struct fwu_data *data)
>
>  /**
>   * fwu_state_machine_updates() - Update FWU state of the platform
> - * @trial_state: Is platform transitioning into Trial State
> + * @state: FWU bank state
>   * @update_index: Bank number to which images have been updated
>   *
> - * On successful completion of updates, transition the platform to
> - * either Trial State or Regular State.
> + * FWU_BANK_VALID transition the platform to Trial state
> + * FWU_BANK_ACCEPTED accept the FWU bank state
> + * FWU_BANK_INVALID invalid the FWU bank state
>   *
>   * To transition the platform to Trial State, start the
>   * TrialStateCtr counter, followed by setting the value of bank_state
>   * field of the metadata to Valid state(applicable only in version 2
>   * of metadata).
>   *
> - * In case, the platform is to transition directly to Regular State,
> - * update the bank_state field of the metadata to Accepted
> - * state(applicable only in version 2 of metadata).
> + * Saving the bank_state field of the metadata is only applicable in
> + * version 2 of metadata.
>   *
>   * Return: 0 if OK, -ve on error
>   */
> -int fwu_state_machine_updates(bool trial_state,
> +int fwu_state_machine_updates(enum fwu_bank_states state,
>                               uint32_t update_index)
>  {
> -       return fwu_trial_state_update(trial_state, update_index);
> +       return fwu_trial_state_update(state == FWU_BANK_VALID, update_index);
>  }
>
>  /**
> diff --git a/lib/fwu_updates/fwu_v2.c b/lib/fwu_updates/fwu_v2.c
> index 159315b45b9..f48b6d1264b 100644
> --- a/lib/fwu_updates/fwu_v2.c
> +++ b/lib/fwu_updates/fwu_v2.c
> @@ -80,42 +80,27 @@ static int fwu_mdata_sanity_checks(void)
>         return 0;
>  }
>
> -static int fwu_bank_state_update(bool trial_state, uint32_t bank)
> +static int fwu_bank_state_update(enum fwu_bank_states state, uint32_t bank)
>  {
>         int ret;
>         struct fwu_data *data = fwu_get_data();
>         struct fwu_mdata *mdata = data->fwu_mdata;
>
> -       if (!trial_state && !fwu_bank_accepted(data, bank))
> +       if (state == FWU_BANK_ACCEPTED && !fwu_bank_accepted(data, bank))
>                 return 0;
>
> -       mdata->bank_state[bank] = data->bank_state[bank] = trial_state ?
> -               FWU_BANK_VALID : FWU_BANK_ACCEPTED;
> +       mdata->bank_state[bank] = (uint8_t)state;
> +       data->bank_state[bank] = (uint8_t)state;
>
>         ret = fwu_sync_mdata(mdata, BOTH_PARTS);
>         if (ret)
>                 log_err("Unable to set bank_state for bank %u\n", bank);
>         else
> -               data->trial_state = trial_state;
> +               data->trial_state = state == FWU_BANK_VALID ? 1 : 0;
>
>         return ret;
>  }
>
> -static int fwu_trial_state_start(uint update_index)
> -{
> -       int ret;
> -
> -       ret = fwu_trial_state_ctr_start();
> -       if (ret)
> -               return ret;
> -
> -       ret = fwu_bank_state_update(1, update_index);
> -       if (ret)
> -               return ret;
> -
> -       return 0;
> -}
> -
>  static bool fwu_get_mdata_mandatory(uint part)
>  {
>         int ret = 0;
> @@ -171,27 +156,34 @@ void fwu_populate_mdata_image_info(struct fwu_data 
> *data)
>
>  /**
>   * fwu_state_machine_updates() - Update FWU state of the platform
> - * @trial_state: Is platform transitioning into Trial State
> + * @state: FWU bank state
>   * @update_index: Bank number to which images have been updated
>   *
> - * On successful completion of updates, transition the platform to
> - * either Trial State or Regular State.
> + * FWU_BANK_VALID transition the platform to Trial state
> + * FWU_BANK_ACCEPTED accept the FWU bank state
> + * FWU_BANK_INVALID invalid the FWU bank state
>   *
>   * To transition the platform to Trial State, start the
>   * TrialStateCtr counter, followed by setting the value of bank_state
>   * field of the metadata to Valid state(applicable only in version 2
>   * of metadata).
>   *
> - * In case, the platform is to transition directly to Regular State,
> - * update the bank_state field of the metadata to Accepted
> - * state(applicable only in version 2 of metadata).
> + * Saving the bank_state field of the metadata is only applicable in
> + * version 2 of metadata.
>   *
>   * Return: 0 if OK, -ve on error
>   */
> -int fwu_state_machine_updates(bool trial_state, uint32_t update_index)
> +int fwu_state_machine_updates(enum fwu_bank_states state, uint32_t 
> update_index)
>  {
> -       return trial_state ? fwu_trial_state_start(update_index) :
> -               fwu_bank_state_update(0, update_index);
> +       int ret;
> +
> +       if (state == FWU_BANK_VALID) {
> +               ret = fwu_trial_state_ctr_start();
> +               if (ret)
> +                       return ret;
> +       }
> +
> +       return fwu_bank_state_update(state, update_index);
>  }
>
>  /**
> --
> 2.43.0
>

Reply via email to