intel-gsc: Use measured progress steps on real hardware

This commit is contained in:
Richard Hughes 2022-12-06 15:13:47 +00:00
parent 7ad92a8eb9
commit 93d6d6b7f8

View File

@ -631,7 +631,6 @@ fu_igsc_device_reconnect_cb(FuDevice *self, gpointer user_data, GError **error)
return fu_mei_device_connect(FU_MEI_DEVICE(self), 0, error); return fu_mei_device_connect(FU_MEI_DEVICE(self), 0, error);
} }
// FIXME we want to retry this on failure
gboolean gboolean
fu_igsc_device_write_blob(FuIgscDevice *self, fu_igsc_device_write_blob(FuIgscDevice *self,
enum gsc_fwu_heci_payload_type payload_type, enum gsc_fwu_heci_payload_type payload_type,
@ -647,14 +646,23 @@ fu_igsc_device_write_blob(FuIgscDevice *self,
g_autoptr(GPtrArray) chunks = NULL; g_autoptr(GPtrArray) chunks = NULL;
/* progress */ /* progress */
fu_progress_set_id(progress, G_STRLOC); if (payload_type == GSC_FWU_HECI_PAYLOAD_TYPE_GFX_FW) {
fu_progress_add_flag(progress, FU_PROGRESS_FLAG_GUESSED); fu_progress_set_id(progress, G_STRLOC);
fu_progress_add_step(progress, FWUPD_STATUS_DEVICE_BUSY, 1, "get-status"); fu_progress_add_step(progress, FWUPD_STATUS_DEVICE_BUSY, 1, "get-status");
fu_progress_add_step(progress, FWUPD_STATUS_DEVICE_WRITE, 1, "update-start"); fu_progress_add_step(progress, FWUPD_STATUS_DEVICE_WRITE, 1, "update-start");
fu_progress_add_step(progress, FWUPD_STATUS_DEVICE_WRITE, 1, "write-chunks"); fu_progress_add_step(progress, FWUPD_STATUS_DEVICE_WRITE, 50, "write-chunks");
fu_progress_add_step(progress, FWUPD_STATUS_DEVICE_WRITE, 5, "update-end"); fu_progress_add_step(progress, FWUPD_STATUS_DEVICE_WRITE, 1, "update-end");
fu_progress_add_step(progress, FWUPD_STATUS_DEVICE_BUSY, 65, "wait-for-reboot"); fu_progress_add_step(progress, FWUPD_STATUS_DEVICE_BUSY, 1, "wait-for-reboot");
fu_progress_add_step(progress, FWUPD_STATUS_DEVICE_BUSY, 65, "reconnect"); fu_progress_add_step(progress, FWUPD_STATUS_DEVICE_BUSY, 46, "reconnect");
} else {
fu_progress_set_id(progress, G_STRLOC);
fu_progress_add_step(progress, FWUPD_STATUS_DEVICE_BUSY, 1, "get-status");
fu_progress_add_step(progress, FWUPD_STATUS_DEVICE_WRITE, 1, "update-start");
fu_progress_add_step(progress, FWUPD_STATUS_DEVICE_WRITE, 96, "write-chunks");
fu_progress_add_step(progress, FWUPD_STATUS_DEVICE_WRITE, 1, "update-end");
fu_progress_add_step(progress, FWUPD_STATUS_DEVICE_BUSY, 1, "wait-for-reboot");
fu_progress_add_step(progress, FWUPD_STATUS_DEVICE_BUSY, 0, "reconnect");
}
/* need to get the new version in a loop? */ /* need to get the new version in a loop? */
if (!fu_igsc_device_get_fw_status(self, 5, &sts5, error)) if (!fu_igsc_device_get_fw_status(self, 5, &sts5, error))
@ -781,11 +789,10 @@ static void
fu_igsc_device_set_progress(FuDevice *self, FuProgress *progress) fu_igsc_device_set_progress(FuDevice *self, FuProgress *progress)
{ {
fu_progress_set_id(progress, G_STRLOC); fu_progress_set_id(progress, G_STRLOC);
fu_progress_add_flag(progress, FU_PROGRESS_FLAG_GUESSED);
fu_progress_add_step(progress, FWUPD_STATUS_DEVICE_RESTART, 1, "detach"); fu_progress_add_step(progress, FWUPD_STATUS_DEVICE_RESTART, 1, "detach");
fu_progress_add_step(progress, FWUPD_STATUS_DEVICE_WRITE, 88, "write"); fu_progress_add_step(progress, FWUPD_STATUS_DEVICE_WRITE, 96, "write");
fu_progress_add_step(progress, FWUPD_STATUS_DEVICE_RESTART, 1, "attach"); fu_progress_add_step(progress, FWUPD_STATUS_DEVICE_RESTART, 2, "attach");
fu_progress_add_step(progress, FWUPD_STATUS_DEVICE_BUSY, 10, "reload"); fu_progress_add_step(progress, FWUPD_STATUS_DEVICE_BUSY, 1, "reload");
} }
static void static void