mirror of
https://github.com/u-boot/u-boot.git
synced 2024-11-26 13:44:29 +08:00
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> Reviewed-by: Stefano Babic <sbabic@denx.de> Reviewed-by: Łukasz Majewski <lukma@denx.de>
This commit is contained in:
parent
2f005695df
commit
a3774c1c3c
@ -668,6 +668,12 @@ config SPL_DFU_RAM
|
|||||||
|
|
||||||
endchoice
|
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
|
endif
|
||||||
|
|
||||||
config SPL_WATCHDOG_SUPPORT
|
config SPL_WATCHDOG_SUPPORT
|
||||||
|
@ -30,4 +30,5 @@ obj-$(CONFIG_$(SPL_TPL_)SATA_SUPPORT) += spl_sata.o
|
|||||||
obj-$(CONFIG_$(SPL_TPL_)DFU_SUPPORT) += spl_dfu.o
|
obj-$(CONFIG_$(SPL_TPL_)DFU_SUPPORT) += spl_dfu.o
|
||||||
obj-$(CONFIG_$(SPL_TPL_)SPI_LOAD) += spl_spi.o
|
obj-$(CONFIG_$(SPL_TPL_)SPI_LOAD) += spl_spi.o
|
||||||
obj-$(CONFIG_$(SPL_TPL_)RAM_SUPPORT) += spl_ram.o
|
obj-$(CONFIG_$(SPL_TPL_)RAM_SUPPORT) += spl_ram.o
|
||||||
|
obj-$(CONFIG_$(SPL_TPL_)USB_SDP_SUPPORT) += spl_sdp.o
|
||||||
endif
|
endif
|
||||||
|
37
common/spl/spl_sdp.c
Normal file
37
common/spl/spl_sdp.c
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
/*
|
||||||
|
* (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;
|
||||||
|
const int controller_index = 0;
|
||||||
|
|
||||||
|
g_dnl_clear_detach();
|
||||||
|
g_dnl_register("usb_dnl_sdp");
|
||||||
|
|
||||||
|
ret = sdp_init(controller_index);
|
||||||
|
if (ret) {
|
||||||
|
error("SDP init failed: %d", ret);
|
||||||
|
return -ENODEV;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* This command typically does not return but jumps to an image */
|
||||||
|
sdp_handle(controller_index);
|
||||||
|
error("SDP ended");
|
||||||
|
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
SPL_LOAD_IMAGE_METHOD("USB SDP", 0, BOOT_DEVICE_BOARD, spl_sdp_load_image);
|
@ -11,6 +11,7 @@ obj-$(CONFIG_USB_ETHER) += epautoconf.o config.o usbstring.o
|
|||||||
ifdef CONFIG_SPL_BUILD
|
ifdef CONFIG_SPL_BUILD
|
||||||
obj-$(CONFIG_SPL_USB_GADGET_SUPPORT) += g_dnl.o
|
obj-$(CONFIG_SPL_USB_GADGET_SUPPORT) += g_dnl.o
|
||||||
obj-$(CONFIG_SPL_DFU_SUPPORT) += f_dfu.o
|
obj-$(CONFIG_SPL_DFU_SUPPORT) += f_dfu.o
|
||||||
|
obj-$(CONFIG_SPL_USB_SDP_SUPPORT) += f_sdp.o
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# new USB gadget layer dependencies
|
# new USB gadget layer dependencies
|
||||||
|
Loading…
Reference in New Issue
Block a user