diff options
author | Stefan Agner <stefan.agner@toradex.com> | 2016-08-16 10:13:36 -0700 |
---|---|---|
committer | Max Krummenacher <max.krummenacher@toradex.com> | 2017-01-18 09:46:40 +0100 |
commit | 6a638b1936026523d6206c3b93066f3386da2937 (patch) | |
tree | 5c6626672b0bca4d7fdfebe039cc5865904c46fe | |
parent | 0b4ddd907a633ca9b5c8407d66e074a31c805336 (diff) |
spl: add serial download protocol (SDP) support
Add USB serial download protocol support to SPL. If the SoC started
in recovery mode the SPL will immediately switch to SDP and wait for
further downloads/commands from the host side.
Signed-off-by: Stefan Agner <stefan.agner@toradex.com>
Acked-by: Max Krummenacher <max.krummenacher@toradex.com>
-rw-r--r-- | common/spl/Kconfig | 6 | ||||
-rw-r--r-- | common/spl/Makefile | 1 | ||||
-rw-r--r-- | common/spl/spl.c | 3 | ||||
-rw-r--r-- | common/spl/spl_sdp.c | 38 | ||||
-rw-r--r-- | drivers/usb/gadget/Makefile | 1 |
5 files changed, 49 insertions, 0 deletions
diff --git a/common/spl/Kconfig b/common/spl/Kconfig index 3305299721d..6cdc31b5919 100644 --- a/common/spl/Kconfig +++ b/common/spl/Kconfig @@ -530,6 +530,12 @@ config SPL_DFU_RAM endchoice +config SPL_USB_SDP_SUPPORT + bool "Support SDP (Serial Download Protocol)" + help + Enable Serial Download Protocol (SDP) device support in SPL. This + allows to download images into memory and execute (jump to) them + using the same protocol as implemented by the i.MX family's boot ROM. endif config SPL_WATCHDOG_SUPPORT diff --git a/common/spl/Makefile b/common/spl/Makefile index ed02635e720..69fe2cacf6c 100644 --- a/common/spl/Makefile +++ b/common/spl/Makefile @@ -26,4 +26,5 @@ obj-$(CONFIG_SPL_EXT_SUPPORT) += spl_ext.o obj-$(CONFIG_SPL_SATA_SUPPORT) += spl_sata.o obj-$(CONFIG_SPL_DFU_SUPPORT) += spl_dfu.o obj-$(CONFIG_SPL_SPI_LOAD) += spl_spi.o +obj-$(CONFIG_SPL_USB_SDP_SUPPORT) += spl_sdp.o endif diff --git a/common/spl/spl.c b/common/spl/spl.c index 32b9f1e95cd..8d07321784e 100644 --- a/common/spl/spl.c +++ b/common/spl/spl.c @@ -319,6 +319,9 @@ struct boot_device_name boot_name_table[] = { #ifdef CONFIG_SPL_DFU_SUPPORT { BOOT_DEVICE_DFU, "USB DFU" }, #endif +#ifdef CONFIG_SPL_USB_SDP_SUPPORT + { BOOT_DEVICE_SDP, "USB SDP" }, +#endif #ifdef CONFIG_SPL_SATA_SUPPORT { BOOT_DEVICE_SATA, "SATA" }, #endif diff --git a/common/spl/spl_sdp.c b/common/spl/spl_sdp.c new file mode 100644 index 00000000000..6252a452a86 --- /dev/null +++ b/common/spl/spl_sdp.c @@ -0,0 +1,38 @@ +/* + * (C) Copyright 2016 Toradex + * Author: Stefan Agner <stefan.agner@toradex.com> + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include <common.h> +#include <spl.h> +#include <usb.h> +#include <g_dnl.h> +#include <sdp.h> + +DECLARE_GLOBAL_DATA_PTR; + +static int spl_sdp_load_image(struct spl_image_info *spl_image, + struct spl_boot_device *bootdev) +{ + int ret; + + g_dnl_clear_detach(); + g_dnl_register("usb_dnl_sdp"); + + ret = sdp_init(); + if (ret) { + error("SDP init failed: %d", ret); + return -ENODEV; + } + + ret = sdp_handle(); + if (ret) { + error("SDP failed: %d", ret); + return -ENODEV; + } + + return 0; +} +SPL_LOAD_IMAGE_METHOD(0, BOOT_DEVICE_SDP, spl_sdp_load_image); diff --git a/drivers/usb/gadget/Makefile b/drivers/usb/gadget/Makefile index 34993c10e44..93a41ef7ce3 100644 --- a/drivers/usb/gadget/Makefile +++ b/drivers/usb/gadget/Makefile @@ -11,6 +11,7 @@ obj-$(CONFIG_USB_ETHER) += epautoconf.o config.o usbstring.o ifdef CONFIG_SPL_BUILD obj-$(CONFIG_SPL_USB_GADGET_SUPPORT) += g_dnl.o obj-$(CONFIG_SPL_DFU_SUPPORT) += f_dfu.o +obj-$(CONFIG_SPL_USB_SDP_SUPPORT) += f_sdp.o endif # new USB gadget layer dependencies |