Anastasia Klimchuk has uploaded this change for review.
mec1308.c: Separate shutdown from failed init cleanup
Shutdown function was covering two different jobs here:
1) the actual shutdown which is run at the end of the
driver's lifecycle and 2) cleanup in cases when
initialisation failed. Now, shutdown is only doing its
main job (#1), and the driver itself is doing cleanup
when init fails (#2).
The good thing is that now resources are released/closed
immediately in cases when init fails (vs shutdown
function which was run at some point later), and
the driver leaves clean space after itself if init fails.
And very importantly this unlocks API change which plans
to move register_shutdown inside register master API,
see https://review.coreboot.org/c/flashrom/+/51761
TEST=builds and ninja test from 51487
BUG=b:185191942
Change-Id: I6d62d43dd8b6ebc595f9fd747e0f4cd80f3c10da
Signed-off-by: Anastasia Klimchuk <aklm@chromium.org>
---
M mec1308.c
1 file changed, 16 insertions(+), 4 deletions(-)
git pull ssh://review.coreboot.org:29418/flashrom refs/changes/97/52597/1
diff --git a/mec1308.c b/mec1308.c
index c3b555d..9621c91 100644
--- a/mec1308.c
+++ b/mec1308.c
@@ -496,9 +496,6 @@
goto mec1308_init_exit;
}
- if (register_shutdown(mec1308_shutdown, ctx_data))
- goto mec1308_init_exit;
-
/*
* Enter SPI Pass-Thru Mode after commands which do not require access
* to SPI ROM are complete. We'll start by doing the exit_passthru_mode
@@ -507,15 +504,30 @@
mec1308_exit_passthru_mode(ctx_data);
if (enter_passthru_mode(ctx_data))
- goto mec1308_init_exit;
+ goto failed_init_cleanup;
internal_buses_supported |= BUS_LPC; /* for LPC <--> SPI bridging */
spi_master_mec1308.data = ctx_data;
+
+ if (register_shutdown(mec1308_shutdown, ctx_data))
+ goto failed_init_cleanup;
register_spi_master(&spi_master_mec1308);
msg_pdbg("%s(): successfully initialized mec1308\n", __func__);
return 0;
+failed_init_cleanup:
+ /* Exit passthru mode before performing commands which do not affect
+ the SPI ROM */
+ mec1308_exit_passthru_mode(ctx_data);
+
+ /* Re-enable SMI and ACPI.
+ FIXME: is there an ordering dependency? */
+ if (mbx_write(ctx_data, MEC1308_MBX_CMD, MEC1308_CMD_SMI_ENABLE))
+ msg_pdbg("%s: unable to re-enable SMI\n", __func__);
+ if (mbx_write(ctx_data, MEC1308_MBX_CMD, MEC1308_CMD_ACPI_ENABLE))
+ msg_pdbg("%s: unable to re-enable ACPI\n", __func__);
+
mec1308_init_exit:
free(ctx_data);
return 1;
To view, visit change 52597. To unsubscribe, or for help writing mail filters, visit settings.