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

Reply via email to