[U-Boot] [PATCH 1/2] SPL: Add YMODEM over UART load support
Christian Riesch
christian.riesch at omicron.at
Wed Feb 1 07:40:42 CET 2012
Hi Tom, Hi Matt,
On Tuesday, January 31, 2012, Tom Rini <trini at ti.com> wrote:
> From: Matt Porter <mporter at ti.com>
>
> Adds support for loading U-Boot from UART using YMODEM protocol.
> If YMODEM support is enabled in SPL and the romcode indicates
> that SPL loaded via UART then SPL will wait for start of a
> YMODEM transfer via the console port.
:-) I like this feature!
I tried something similar a few month ago for the da850evm and my own
board, it worked but I never had time to finished it and submit it, it was
just a hack.
For my tests I used the UART loader utility from TI to load the SPL and
then minicom for loading u-boot. Do you have an automated solution for
this? Would be nice to have something like this in tools/.
> Signed-off-by: Matt Porter <mporter at ti.com>
> Signed-off-by: Tom Rini <trini at ti.com>
> ---
> arch/arm/cpu/armv7/omap-common/Makefile | 3 +
> arch/arm/cpu/armv7/omap-common/spl.c | 5 ++
> arch/arm/cpu/armv7/omap-common/spl_ymodem.c | 76
+++++++++++++++++++++++++++
> arch/arm/include/asm/omap_common.h | 3 +
> common/Makefile | 3 +
> lib/Makefile | 3 +
> 6 files changed, 93 insertions(+), 0 deletions(-)
> create mode 100644 arch/arm/cpu/armv7/omap-common/spl_ymodem.c
>
[...]
> diff --git a/arch/arm/cpu/armv7/omap-common/spl_ymodem.c
b/arch/arm/cpu/armv7/omap-common/spl_ymodem.c
Could this be somewhere where it's accessible for other SoC families like
davinci? E.g. We have nand_spl_load.c in drivers/mtd/nand and something
similar for SPI flash.
Regards, Christian
> new file mode 100644
> index 0000000..47663f7
> --- /dev/null
> +++ b/arch/arm/cpu/armv7/omap-common/spl_ymodem.c
> @@ -0,0 +1,76 @@
> +/*
> + * (C) Copyright 2000-2004
> + * Wolfgang Denk, DENX Software Engineering, wd at denx.de.
> + *
> + * (C) Copyright 2011
> + * Texas Instruments, <www.ti.com>
> + *
> + * Matt Porter <mporter at ti.com>
> + *
> + * See file CREDITS for list of people who contributed to this
> + * project.
> + *
> + * This program is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU General Public License as
> + * published by the Free Software Foundation; either version 2 of
> + * the License, or (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
> + * MA 02111-1307 USA
> + */
> +#include <common.h>
> +#include <xyzModem.h>
> +#include <asm/u-boot.h>
> +#include <asm/utils.h>
> +#include <asm/arch/sys_proto.h>
> +#include <asm/omap_common.h>
> +
> +#define BUF_SIZE 1024
> +
> +static int getcymodem(void) {
> + if (tstc())
> + return (getc());
> + return -1;
> +}
> +
> +void spl_ymodem_load_image(void)
> +{
> + int size = 0;
> + int err;
> + int res;
> + int ret;
> + connection_info_t info;
> + char buf[BUF_SIZE];
> + ulong store_addr = ~0;
> + ulong addr = 0;
> +
> + info.mode = xyzModem_ymodem;
> + ret = xyzModem_stream_open(&info, &err);
> +
> + if (!ret) {
> + while ((res =
> + xyzModem_stream_read(buf, BUF_SIZE, &err)) > 0) {
> + if (addr == 0)
> + spl_parse_image_header((struct
image_header *)buf);
> + store_addr = addr + spl_image.load_addr;
> + size += res;
> + addr += res;
> + memcpy((char *)(store_addr), buf, res);
> + }
> + } else {
> + printf("spl: ymodem err - %s\n", xyzModem_error(err));
> + hang();
> + }
> +
> + xyzModem_stream_close(&err);
> + xyzModem_stream_terminate(false, &getcymodem);
> +
> + printf("Loaded %d bytes\n", size);
> +}
More information about the U-Boot
mailing list