diff options
author | Ye Li <ye.li@nxp.com> | 2018-06-20 23:01:52 -0700 |
---|---|---|
committer | Ye Li <ye.li@nxp.com> | 2018-06-21 19:25:55 -0700 |
commit | 2c7b640aefe7e807248c9f5e35e2f8c76a8e23d9 (patch) | |
tree | 22b7871177de5f6a3476a2c89c30b649e1b5f301 /drivers/usb | |
parent | 518b585b37cb79a52a558b9fc03fd9311855dab9 (diff) |
MLK-18654-1 usb: gadget: Update SDP to support FIT
Current SDP only supports to boot legacy image(raw). Add support to
boot FIT image.
Signed-off-by: Ye Li <ye.li@nxp.com>
Diffstat (limited to 'drivers/usb')
-rw-r--r-- | drivers/usb/gadget/f_sdp.c | 34 |
1 files changed, 31 insertions, 3 deletions
diff --git a/drivers/usb/gadget/f_sdp.c b/drivers/usb/gadget/f_sdp.c index 43c5cfbb77..26345bbb5c 100644 --- a/drivers/usb/gadget/f_sdp.c +++ b/drivers/usb/gadget/f_sdp.c @@ -634,6 +634,14 @@ static u32 sdp_jump_imxheader(void *address) return 0; } +static ulong sdp_spl_fit_read(struct spl_load_info *load, ulong sector, + ulong count, void *buf) +{ + memcpy(buf, (void *)sector, count); + + return count; +} + static void sdp_handle_in_ep(void) { u8 *data = sdp_func->in_req->buf; @@ -686,10 +694,30 @@ static void sdp_handle_in_ep(void) /* If imx header fails, try some U-Boot specific headers */ if (status) { #ifdef CONFIG_SPL_BUILD - /* In SPL, allow jumps to U-Boot images */ + struct image_header *header; struct spl_image_info spl_image = {}; - spl_parse_image_header(&spl_image, - (struct image_header *)sdp_func->jmp_address); + + header = (struct image_header *)(ulong)(sdp_func->jmp_address); + + if (IS_ENABLED(CONFIG_SPL_LOAD_FIT) && + image_get_magic(header) == FDT_MAGIC) { + struct spl_load_info load; + + debug("Found FIT\n"); + load.dev = NULL; + load.priv = NULL; + load.filename = NULL; + load.bl_len = 1; + load.read = sdp_spl_fit_read; + spl_load_simple_fit(&spl_image, &load, + sdp_func->jmp_address, + (void *)header); + } else { + /* In SPL, allow jumps to U-Boot images */ + spl_parse_image_header(&spl_image, + (struct image_header *)(ulong)(sdp_func->jmp_address)); + } + jump_to_image_no_args(&spl_image); #else /* In U-Boot, allow jumps to scripts */ |