summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorKory Maincent <[email protected]>2026-01-19 17:07:41 +0100
committerIlias Apalodimas <[email protected]>2026-02-11 12:17:18 +0200
commite8d9ad18f068f65537bc04779d6110a1058bfb1e (patch)
treeeba32643cb30206e3755021793d99ed91c9363a7 /lib
parentb99da05e1538b8fa153322da82917af2aa27e1d6 (diff)
fwu: Pass bank state enum to fwu_state_machine_updates()
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]> Signed-off-by: Ilias Apalodimas <[email protected]>
Diffstat (limited to 'lib')
-rw-r--r--lib/efi_loader/efi_capsule.c5
-rw-r--r--lib/fwu_updates/fwu_v1.c16
-rw-r--r--lib/fwu_updates/fwu_v2.c50
3 files changed, 32 insertions, 39 deletions
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);
}
/**