In case anything errors out during the SDP transfer, detach the controller instead of bailing out right away. This way, the controller can be reattached on next attempt.
Reviewed-by: Mattijs Korpershoek <mkorpersh...@baylibre.com> Signed-off-by: Marek Vasut <ma...@denx.de> --- Cc: Angus Ainslie <an...@akkea.ca> Cc: Dmitrii Merkurev <dimori...@google.com> Cc: Eddie Cai <eddie.cai.li...@gmail.com> Cc: Kever Yang <kever.y...@rock-chips.com> Cc: Lukasz Majewski <lu...@denx.de> Cc: Miquel Raynal <miquel.ray...@bootlin.com> Cc: Mattijs Korpershoek <mkorpersh...@baylibre.com> Cc: Nishanth Menon <n...@ti.com> Cc: Patrice Chotard <patrice.chot...@foss.st.com> Cc: Patrick Delaunay <patrick.delau...@foss.st.com> Cc: Philipp Tomsich <philipp.toms...@vrull.eu> Cc: Simon Glass <s...@chromium.org> Cc: Stefan Roese <s...@denx.de> Cc: ker...@puri.sm --- V2: - Call g_dnl_unregister() in case sdp_init() fails and on regular exit - Add RB from Mattijs --- common/spl/spl_sdp.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/common/spl/spl_sdp.c b/common/spl/spl_sdp.c index cc4fb4f7cca..aae886d2e57 100644 --- a/common/spl/spl_sdp.c +++ b/common/spl/spl_sdp.c @@ -25,13 +25,13 @@ static int spl_sdp_load_image(struct spl_image_info *spl_image, ret = g_dnl_register("usb_dnl_sdp"); if (ret) { pr_err("SDP dnl register failed: %d\n", ret); - return ret; + goto err_detach; } ret = sdp_init(controller_index); if (ret) { pr_err("SDP init failed: %d\n", ret); - return -ENODEV; + goto err_unregister; } /* @@ -42,6 +42,9 @@ static int spl_sdp_load_image(struct spl_image_info *spl_image, ret = spl_sdp_handle(controller_index, spl_image, bootdev); debug("SDP ended\n"); +err_unregister: + g_dnl_unregister(); +err_detach: usb_gadget_release(controller_index); return ret; } -- 2.40.1