summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnastasia Klimchuk <aklm@chromium.org>2021-04-30 11:25:44 +1000
committerNico Huber <nico.h@gmx.de>2021-05-12 23:17:58 +0000
commite4261e342531d9a23a85d34169cb658b8e1ea050 (patch)
tree124b1d94068e4e5da158a13189c7c0aa275d73ac
parentb3b860154ddb69f0596c2ee98fb1da21091ecc84 (diff)
downloadflashrom-e4261e342531d9a23a85d34169cb658b8e1ea050.tar.gz
flashrom-e4261e342531d9a23a85d34169cb658b8e1ea050.tar.bz2
flashrom-e4261e342531d9a23a85d34169cb658b8e1ea050.zip
pickit2_spi.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 BUG=b:185191942 Change-Id: I1b672b33169a7a1b6ceab190ad3f48c2f35c3a1f Signed-off-by: Anastasia Klimchuk <aklm@chromium.org> Reviewed-on: https://review.coreboot.org/c/flashrom/+/52773 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Nico Huber <nico.h@gmx.de> Reviewed-by: Angel Pons <th3fanbus@gmail.com>
-rw-r--r--pickit2_spi.c27
1 files changed, 13 insertions, 14 deletions
diff --git a/pickit2_spi.c b/pickit2_spi.c
index 0bc17afb8..367d0fcdf 100644
--- a/pickit2_spi.c
+++ b/pickit2_spi.c
@@ -458,34 +458,33 @@ int pickit2_spi_init(void)
return 1;
}
- if (register_shutdown(pickit2_shutdown, NULL) != 0) {
- return 1;
- }
-
- if (pickit2_get_firmware_version()) {
- return 1;
- }
+ if (pickit2_get_firmware_version())
+ goto init_err_cleanup_exit;
/* Command Set SPI Speed */
- if (pickit2_set_spi_speed(spispeed_idx)) {
- return 1;
- }
+ if (pickit2_set_spi_speed(spispeed_idx))
+ goto init_err_cleanup_exit;
/* Command Set SPI Voltage */
msg_pdbg("Setting voltage to %i mV.\n", millivolt);
- if (pickit2_set_spi_voltage(millivolt) != 0) {
- return 1;
- }
+ if (pickit2_set_spi_voltage(millivolt) != 0)
+ goto init_err_cleanup_exit;
/* Perform basic setup.
* Configure pin directions and logic levels, turn Vdd on, turn busy LED on and clear buffers. */
int transferred;
if (libusb_interrupt_transfer(pickit2_handle, ENDPOINT_OUT, buf, CMD_LENGTH, &transferred, DFLT_TIMEOUT) != 0) {
msg_perr("Command Setup failed!\n");
- return 1;
+ goto init_err_cleanup_exit;
}
+ if (register_shutdown(pickit2_shutdown, NULL))
+ goto init_err_cleanup_exit;
register_spi_master(&spi_master_pickit2);
return 0;
+
+init_err_cleanup_exit:
+ pickit2_shutdown(NULL);
+ return 1;
}