]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
capsule: fwu: transition the platform state on a successful update
authorSughosh Ganu <sughosh.ganu@linaro.org>
Fri, 22 Mar 2024 10:57:22 +0000 (16:27 +0530)
committerTom Rini <trini@konsulko.com>
Fri, 24 May 2024 19:40:04 +0000 (13:40 -0600)
Transition the platform to either Trial State or Regular State on a
successful update. Do this by calling the fwu_state_machine_updates()
API function.

For version 1 of the FWU metadata, the transition to Trial State is
done by starting the Trial State counter, while for version 2, in
addition to the counter, the bank_state field of the FWU metadata is
also updated to Valid.

For transitioning the platform to Regular State, no action is needed
with version 1 of the FWU metadata structure, while for version 2, the
bank_state field is set to Accepted.

Signed-off-by: Sughosh Ganu <sughosh.ganu@linaro.org>
Tested-by: Michal Simek <michal.simek@amd.com>
lib/efi_loader/efi_capsule.c

index de0d49ebebda66490dead14faec70330bd69facf..0937800e588fdaf3bf3011bd16e036bfdfa8c928 100644 (file)
@@ -480,6 +480,11 @@ static __maybe_unused efi_status_t fwu_empty_capsule_process(
                if (ret != EFI_SUCCESS)
                        log_err("Unable to set the Accept bit for the image %pUs\n",
                                image_guid);
+
+               status = fwu_state_machine_updates(0, active_idx);
+               if (status < 0)
+                       ret = EFI_DEVICE_ERROR;
+
        }
 
        return ret;
@@ -521,11 +526,10 @@ 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");
-               if (fw_accept_os) {
-                       status = fwu_trial_state_ctr_start();
-                       if (status < 0)
-                               ret = EFI_DEVICE_ERROR;
-               }
+               status = fwu_state_machine_updates(fw_accept_os ? 1 : 0,
+                                                  update_index);
+               if (status < 0)
+                       ret = EFI_DEVICE_ERROR;
        }
 
        return ret;