All of lore.kernel.org
 help / color / mirror / Atom feed
From: Schrempf Frieder <frieder.schrempf@kontron.de>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 4/5] usb: gadget: f_sdp: Allow SPL to load and boot FIT via SDP
Date: Tue, 4 Jun 2019 07:09:31 +0000	[thread overview]
Message-ID: <d6fa0303-a5bc-2811-ebc8-f6255c2f3593@kontron.de> (raw)
In-Reply-To: <20190603190029.10373-5-sjoerd.simons@collabora.co.uk>

Hi Sjoerd,

On 03.06.19 21:00, Sjoerd Simons wrote:
> From: Frieder Schrempf <frieder.schrempf@kontron.de>
> 
> Add support for loading u-boot FIT images over the USB SPD protocol in
> the SPL

I always get confused by this acronym too, but *SPD* is the Social 
Democratic Party of Germany, currently in a deep crisis after the recent 
election and after their leader resigned from all offices two days ago.

And *SDP* is the Serial Download Protocol ;)

> 
> [Small fixes to build]
> Signed-off-by: Sjoerd Simons <sjoerd.simons@collabora.co.uk>

Signed-off-by: Frieder Schrempf <frieder.schrempf@kontron.de>

Thanks a lot for preparing the patch and sending it!

Regards,
Frieder

> ---
> 
>   common/spl/spl_sdp.c       | 11 ++++++++--
>   drivers/usb/gadget/f_sdp.c | 41 ++++++++++++++++++++++++++++++++------
>   include/sdp.h              |  4 +++-
>   3 files changed, 47 insertions(+), 9 deletions(-)
> 
> diff --git a/common/spl/spl_sdp.c b/common/spl/spl_sdp.c
> index 807256e908..dc57171966 100644
> --- a/common/spl/spl_sdp.c
> +++ b/common/spl/spl_sdp.c
> @@ -26,9 +26,16 @@ static int spl_sdp_load_image(struct spl_image_info *spl_image,
>   	}
>   
>   	/* This command typically does not return but jumps to an image */
> -	sdp_handle(controller_index);
> +	sdp_handle(controller_index, spl_image);
>   	pr_err("SDP ended\n");
> +	/*
> +	 * This command either loads a legacy image, jumps and never returns,
> +	 * or it loads a FIT image and returns it to be handled by the SPL
> +	 * code.
> +	 */
> +	ret = sdp_handle(controller_index, spl_image);
> +	debug("SDP ended\n");
>   
> -	return -EINVAL;
> +	return ret;
>   }
>   SPL_LOAD_IMAGE_METHOD("USB SDP", 0, BOOT_DEVICE_BOARD, spl_sdp_load_image);
> diff --git a/drivers/usb/gadget/f_sdp.c b/drivers/usb/gadget/f_sdp.c
> index ae97ab2b49..2a23160d91 100644
> --- a/drivers/usb/gadget/f_sdp.c
> +++ b/drivers/usb/gadget/f_sdp.c
> @@ -638,7 +638,18 @@ static u32 sdp_jump_imxheader(void *address)
>   	return 0;
>   }
>   
> -static void sdp_handle_in_ep(void)
> +#ifdef CONFIG_SPL_LOAD_FIT
> +static ulong sdp_fit_read(struct spl_load_info *load, ulong sector,
> +			  ulong count, void *buf)
> +{
> +	debug("%s: sector %lx, count %lx, buf %lx\n",
> +	      __func__, sector, count, (ulong)buf);
> +	memcpy(buf, (void *)(load->dev + sector), count);
> +	return count;
> +}
> +#endif
> +
> +static void sdp_handle_in_ep(struct spl_image_info *spl_image)
>   {
>   	u8 *data = sdp_func->in_req->buf;
>   	u32 status;
> @@ -689,11 +700,26 @@ static void sdp_handle_in_ep(void)
>   
>   		/* If imx header fails, try some U-Boot specific headers */
>   		if (status) {
> +			image_header_t *header =
> +				sdp_ptr(sdp_func->jmp_address);
>   #ifdef CONFIG_SPL_BUILD
> +#ifdef CONFIG_SPL_LOAD_FIT
> +			if (image_get_magic(header) == FDT_MAGIC) {
> +				struct spl_load_info load;
> +
> +				debug("Found FIT\n");
> +				load.dev = header;
> +				load.bl_len = 1;
> +				load.read = sdp_fit_read;
> +				spl_load_simple_fit(spl_image, &load, 0,
> +						    header);
> +
> +				return;
> +			}
> +#endif
>   			/* In SPL, allow jumps to U-Boot images */
>   			struct spl_image_info spl_image = {};
> -			spl_parse_image_header(&spl_image,
> -				(struct image_header *)sdp_func->jmp_address);
> +			spl_parse_image_header(&spl_image, header);
>   			jump_to_image_no_args(&spl_image);
>   #else
>   			/* In U-Boot, allow jumps to scripts */
> @@ -715,19 +741,22 @@ static void sdp_handle_in_ep(void)
>   	};
>   }
>   
> -void sdp_handle(int controller_index)
> +int sdp_handle(int controller_index, struct spl_image_info *spl_image)
>   {
>   	printf("SDP: handle requests...\n");
>   	while (1) {
>   		if (ctrlc()) {
>   			puts("\rCTRL+C - Operation aborted.\n");
> -			return;
> +			return -EINVAL;
>   		}
>   
> +		if (spl_image->flags & SPL_FIT_FOUND)
> +			return 0;
> +
>   		WATCHDOG_RESET();
>   		usb_gadget_handle_interrupts(controller_index);
>   
> -		sdp_handle_in_ep();
> +		sdp_handle_in_ep(spl_image);
>   	}
>   }
>   
> diff --git a/include/sdp.h b/include/sdp.h
> index f6252d027f..f30e2bca19 100644
> --- a/include/sdp.h
> +++ b/include/sdp.h
> @@ -9,7 +9,9 @@
>   #ifndef __SDP_H_
>   #define __SDP_H_
>   
> +#include <spl.h>
> +
>   int sdp_init(int controller_index);
> -void sdp_handle(int controller_index);
> +int sdp_handle(int controller_index, struct spl_image_info *spl_image);
>   
>   #endif /* __SDP_H_ */
> 

  parent reply	other threads:[~2019-06-04  7:09 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-06-03 19:00 [U-Boot] [PATCH 0/5] Enable usage of SDP for i.MX6 Sabre Auto Boards Sjoerd Simons
2019-06-03 19:00 ` [U-Boot] [PATCH 1/5] mx6sabreauto: Remove CONFIG_SPL_DM to decrease the SPL size Sjoerd Simons
2019-06-04  2:48   ` Peng Fan
2019-06-03 19:00 ` [U-Boot] [PATCH 2/5] mx6sabreauto: Select pinctrl driver Sjoerd Simons
2019-06-04  2:49   ` Peng Fan
2019-06-04 14:15   ` Fabio Estevam
2019-06-04 20:09     ` Sjoerd Simons
2019-06-03 19:00 ` [U-Boot] [PATCH 3/5] mx6sabreauto: Enable SPL SDP support Sjoerd Simons
2019-06-03 19:00 ` [U-Boot] [PATCH 4/5] usb: gadget: f_sdp: Allow SPL to load and boot FIT via SDP Sjoerd Simons
2019-06-03 19:17   ` Fabio Estevam
2019-06-03 19:30     ` Sjoerd Simons
2019-06-03 21:18   ` Lukasz Majewski
2019-06-04  7:09   ` Schrempf Frieder [this message]
2019-06-04 13:50     ` Fabio Estevam
2019-06-03 19:00 ` [U-Boot] [PATCH 5/5] mx6sabreauto: set SYS_MALLOC_F for video Sjoerd Simons
2019-06-04  2:49   ` Peng Fan
2019-06-03 21:15 ` [U-Boot] [PATCH 0/5] Enable usage of SDP for i.MX6 Sabre Auto Boards Lukasz Majewski

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=d6fa0303-a5bc-2811-ebc8-f6255c2f3593@kontron.de \
    --to=frieder.schrempf@kontron.de \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.