diff mbox

[U-Boot,v4,2/2] ORIGEN: Add MMC SPL support

Message ID 1311914519-10531-3-git-send-email-chander.kashyap@linaro.org
State Changes Requested
Headers show

Commit Message

Chander Kashyap July 29, 2011, 4:41 a.m. UTC
Adds mmc boot support.

Signed-off-by: Chander Kashyap <chander.kashyap@linaro.org>
---
 mmc_spl/board/samsung/origen/Makefile             |  106 ++++++++++++++++
 mmc_spl/board/samsung/origen/mmc_boot.c           |   57 +++++++++
 mmc_spl/board/samsung/origen/tools/mkv310_image.c |  140 +++++++++++++++++++++
 mmc_spl/board/samsung/origen/u-boot.lds           |   88 +++++++++++++
 4 files changed, 391 insertions(+), 0 deletions(-)
 create mode 100644 mmc_spl/board/samsung/origen/Makefile
 create mode 100644 mmc_spl/board/samsung/origen/mmc_boot.c
 create mode 100644 mmc_spl/board/samsung/origen/tools/mkv310_image.c
 create mode 100644 mmc_spl/board/samsung/origen/u-boot.lds

Comments

Lei Wen July 31, 2011, 6:56 a.m. UTC | #1
Hi Chander,

On Fri, Jul 29, 2011 at 12:41 PM, Chander Kashyap
<chander.kashyap@linaro.org> wrote:
> Adds mmc boot support.
>
> Signed-off-by: Chander Kashyap <chander.kashyap@linaro.org>
> ---
>  mmc_spl/board/samsung/origen/Makefile             |  106 ++++++++++++++++
>  mmc_spl/board/samsung/origen/mmc_boot.c           |   57 +++++++++
>  mmc_spl/board/samsung/origen/tools/mkv310_image.c |  140 +++++++++++++++++++++
>  mmc_spl/board/samsung/origen/u-boot.lds           |   88 +++++++++++++
>  4 files changed, 391 insertions(+), 0 deletions(-)
>  create mode 100644 mmc_spl/board/samsung/origen/Makefile
>  create mode 100644 mmc_spl/board/samsung/origen/mmc_boot.c
>  create mode 100644 mmc_spl/board/samsung/origen/tools/mkv310_image.c
>  create mode 100644 mmc_spl/board/samsung/origen/u-boot.lds
>
> diff --git a/mmc_spl/board/samsung/origen/Makefile b/mmc_spl/board/samsung/origen/Makefile
> new file mode 100644
> index 0000000..1d61cc0
> --- /dev/null
> +++ b/mmc_spl/board/samsung/origen/Makefile
> @@ -0,0 +1,106 @@
> +#
> +# (C) Copyright 2006-2007
> +# Stefan Roese, DENX Software Engineering, sr@denx.de.
> +#
> +# (C) Copyright 2008
> +# Guennadi Liakhovetki, DENX Software Engineering, <lg@denx.de>
> +#
> +# (C) Copyright 2011
> +# Chander Kashyap, Samsung Electronics, <k.chander@samsung.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
> +#
> +
> +CONFIG_MMC_SPL = y
> +
> +include $(TOPDIR)/config.mk
> +
> +LDSCRIPT= $(TOPDIR)/mmc_spl/board/$(BOARDDIR)/u-boot.lds
> +LDFLAGS        = -Bstatic -T $(mmcobj)u-boot.lds -Ttext $(CONFIG_SYS_TEXT_BASE) $(PLATFORM_LDFLAGS)
> +AFLAGS += -DCONFIG_MMC_SPL
> +AFLAGS += -DCONFIG_SPL_BUILD
> +CFLAGS += -DCONFIG_MMC_SPL
> +CFLAGS += -DCONFIG_SPL_BUILD
> +
> +SOBJS  = start.o mem_setup.o lowlevel_init.o
> +COBJS  = mmc_boot.o
> +
> +SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
> +OBJS   := $(addprefix $(obj),$(SOBJS) $(COBJS))
> +__OBJS := $(SOBJS) $(COBJS)
> +LNDIR  := $(OBJTREE)/mmc_spl/board/$(BOARDDIR)
> +
> +mmcobj := $(OBJTREE)/mmc_spl/
> +
> +
> +MKV310_MMC_SPL_EXEC = mkv310_mmc_spl_exec
> +MMC_SPL_BIN = u-boot-mmc-spl.bin
> +
> +ALL = $(mmcobj)u-boot-spl $(mmcobj)u-boot-spl.bin $(mmcobj)$(MMC_SPL_BIN)
> +
> +all:    $(obj).depend $(ALL)
> +
> +$(mmcobj)$(MMC_SPL_BIN):  $(mmcobj)u-boot-spl.bin tools/$(MKV310_MMC_SPL_EXEC)
> +       ./tools/$(MKV310_MMC_SPL_EXEC) $(mmcobj)u-boot-spl.bin $(mmcobj)$(MMC_SPL_BIN)
> +       rm -f tools/$(MKV310_MMC_SPL_EXEC)
> +
> +tools/$(MKV310_MMC_SPL_EXEC): tools/mkv310_image.c
> +       $(HOSTCC) tools/mkv310_image.c -o tools/$(MKV310_MMC_SPL_EXEC)
> +
> +$(mmcobj)u-boot-spl.bin:       $(mmcobj)u-boot-spl
> +       $(OBJCOPY) ${OBJCFLAGS} -O binary $< $@
> +
> +$(mmcobj)u-boot-spl:   $(OBJS) $(mmcobj)u-boot.lds
> +       cd $(LNDIR) && $(LD) $(LDFLAGS) $(__OBJS) \
> +               -Map $(mmcobj)u-boot-spl.map \
> +               -o $(mmcobj)u-boot-spl
> +
> +$(mmcobj)u-boot.lds: $(LDSCRIPT)
> +       $(CPP) $(CPPFLAGS) $(LDPPFLAGS) -ansi -D__ASSEMBLY__ -P - <$^ >$@
> +
> +# create symbolic links for common files
> +
> +# from cpu directory
> +start.S:
> +       @rm -f $@
> +       @ln -s $(TOPDIR)/arch/arm/cpu/armv7/start.S $@
> +
> +# from board directory
> +mem_setup.S:
> +       @rm -f $@
> +       @ln -s $(TOPDIR)/board/samsung/origen/mem_setup.S $@
> +
> +lowlevel_init.S:
> +       @rm -f $@
> +       @ln -s $(TOPDIR)/board/samsung/origen/lowlevel_init.S $@
> +
> +#########################################################################
> +
> +$(obj)%.o:     %.S
> +       $(CC) $(AFLAGS) -c -o $@ $<
> +
> +$(obj)%.o:     %.c
> +       $(CC) $(CFLAGS) -c -o $@ $<
> +
> +# defines $(obj).depend target
> +include $(SRCTREE)/rules.mk
> +
> +sinclude $(obj).depend
> +
> +#########################################################################
> diff --git a/mmc_spl/board/samsung/origen/mmc_boot.c b/mmc_spl/board/samsung/origen/mmc_boot.c
> new file mode 100644
> index 0000000..d9b44d8
> --- /dev/null
> +++ b/mmc_spl/board/samsung/origen/mmc_boot.c
> @@ -0,0 +1,57 @@
> +/*
> + * Copyright (C) 2011 Samsung Electronics
> + *
> + * 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<config.h>
> +
> +typedef u32(*copy_sd_mmc_to_mem) \
> +       (u32 start_block, u32 block_count, u32 *dest_addr);
> +
> +
> +void copy_uboot_to_ram(void)
> +{
> +       copy_sd_mmc_to_mem copy_bl2 = (copy_sd_mmc_to_mem)*(u32 *)(0x02020030);
> +       copy_bl2(BL2_START_OFFSET,\
> +               BL2_SIZE_BLOC_COUNT, (u32 *)CONFIG_SYS_TEXT_BASE);
> +}

Curious to know, what the 0x02020030 hardcoding number means here?
It is a pointer to a API or hardware register, or anything else, how
this simple function perform the
data transfer from mmc to ram?

Best regards,
Lei
Wolfgang Denk July 31, 2011, 8:19 a.m. UTC | #2
Dear Chander Kashyap,

In message <CALZhoSTV0zYX=ySw-vS6D51X0B_MHxt8sq1sTw7XEkyV1C=Odg@mail.gmail.com> Lei Wen wrote:
>
> On Fri, Jul 29, 2011 at 12:41 PM, Chander Kashyap
> <chander.kashyap@linaro.org> wrote:
> > Adds mmc boot support.
> >
> > Signed-off-by: Chander Kashyap <chander.kashyap@linaro.org>
> > ---
> >  mmc_spl/board/samsung/origen/Makefile             |  106 ++++++++++++++++
> >  mmc_spl/board/samsung/origen/mmc_boot.c           |   57 +++++++++
> >  mmc_spl/board/samsung/origen/tools/mkv310_image.c |  140 +++++++++++++++++++++
> >  mmc_spl/board/samsung/origen/u-boot.lds           |   88 +++++++++++++
> >  4 files changed, 391 insertions(+), 0 deletions(-)
> >  create mode 100644 mmc_spl/board/samsung/origen/Makefile
> >  create mode 100644 mmc_spl/board/samsung/origen/mmc_boot.c
> >  create mode 100644 mmc_spl/board/samsung/origen/tools/mkv310_image.c
> >  create mode 100644 mmc_spl/board/samsung/origen/u-boot.lds

It appears this patch has never been posted on the U-Boot mailing
list.Lei Wen
Wolfgang Denk July 31, 2011, 9:47 a.m. UTC | #3
In message <20110731081909.DFB8D12B7AE4@gemini.denx.de> I wrote:
> 
> In message <CALZhoSTV0zYX=ySw-vS6D51X0B_MHxt8sq1sTw7XEkyV1C=Odg@mail.gmail.com> Lei Wen wrote:
> >
> > On Fri, Jul 29, 2011 at 12:41 PM, Chander Kashyap
> > <chander.kashyap@linaro.org> wrote:
> > > Adds mmc boot support.
> > >
> > > Signed-off-by: Chander Kashyap <chander.kashyap@linaro.org>
...
> It appears this patch has never been posted on the U-Boot mailing
> list.Lei Wen

oops.  Sorry, my fault.  Please ignore me.

Best regards,

Wolfgang Denk
Wolfgang Denk July 31, 2011, 10:03 a.m. UTC | #4
Dear Chander Kashyap,

In message <1311914519-10531-3-git-send-email-chander.kashyap@linaro.org> you wrote:
> Adds mmc boot support.
> 
> Signed-off-by: Chander Kashyap <chander.kashyap@linaro.org>
> ---
>  mmc_spl/board/samsung/origen/Makefile             |  106 ++++++++++++++++
>  mmc_spl/board/samsung/origen/mmc_boot.c           |   57 +++++++++
>  mmc_spl/board/samsung/origen/tools/mkv310_image.c |  140 +++++++++++++++++++++
>  mmc_spl/board/samsung/origen/u-boot.lds           |   88 +++++++++++++
>  4 files changed, 391 insertions(+), 0 deletions(-)
>  create mode 100644 mmc_spl/board/samsung/origen/Makefile
>  create mode 100644 mmc_spl/board/samsung/origen/mmc_boot.c
>  create mode 100644 mmc_spl/board/samsung/origen/tools/mkv310_image.c
>  create mode 100644 mmc_spl/board/samsung/origen/u-boot.lds

PLease adapt this code to the new SPL infrastructure that has recently
been introduced.


> +typedef u32(*copy_sd_mmc_to_mem) \
> +	(u32 start_block, u32 block_count, u32 *dest_addr);

Quote CodingStyle:

	Lots of people think that typedefs "help readability". Not so.

> +void copy_uboot_to_ram(void)
> +{
> +	copy_sd_mmc_to_mem copy_bl2 = (copy_sd_mmc_to_mem)*(u32 *)(0x02020030);
> +	copy_bl2(BL2_START_OFFSET,\
> +		BL2_SIZE_BLOC_COUNT, (u32 *)CONFIG_SYS_TEXT_BASE);
> +}

This code is, in addition to the magic 0x02020030 constant, basicly
unreadable.

The typedef is especially useless as it is used only in this single
case.  Please clean this up.

> diff --git a/mmc_spl/board/samsung/origen/u-boot.lds b/mmc_spl/board/samsung/origen/u-boot.lds
> new file mode 100644
> index 0000000..4a231d9
> --- /dev/null
> +++ b/mmc_spl/board/samsung/origen/u-boot.lds

What exactly is the reason for needing your own, custom linker script?

Best regards,

Wolfgang Denk
Chander Kashyap Aug. 1, 2011, 6:59 a.m. UTC | #5
Hi Lei Wen,

On 31 July 2011 12:26, Lei Wen <adrian.wenl@gmail.com> wrote:

> Hi Chander,
>
> On Fri, Jul 29, 2011 at 12:41 PM, Chander Kashyap
> <chander.kashyap@linaro.org> wrote:
> > Adds mmc boot support.
> >
> > Signed-off-by: Chander Kashyap <chander.kashyap@linaro.org>
> > ---
> >  mmc_spl/board/samsung/origen/Makefile             |  106
> ++++++++++++++++
> >  mmc_spl/board/samsung/origen/mmc_boot.c           |   57 +++++++++
> >  mmc_spl/board/samsung/origen/tools/mkv310_image.c |  140
> +++++++++++++++++++++
> >  mmc_spl/board/samsung/origen/u-boot.lds           |   88 +++++++++++++
> >  4 files changed, 391 insertions(+), 0 deletions(-)
> >  create mode 100644 mmc_spl/board/samsung/origen/Makefile
> >  create mode 100644 mmc_spl/board/samsung/origen/mmc_boot.c
> >  create mode 100644 mmc_spl/board/samsung/origen/tools/mkv310_image.c
> >  create mode 100644 mmc_spl/board/samsung/origen/u-boot.lds
> >
> > diff --git a/mmc_spl/board/samsung/origen/Makefile
> b/mmc_spl/board/samsung/origen/Makefile
> > new file mode 100644
> > index 0000000..1d61cc0
> > --- /dev/null
> > +++ b/mmc_spl/board/samsung/origen/Makefile
> > @@ -0,0 +1,106 @@
> > +#
> > +# (C) Copyright 2006-2007
> > +# Stefan Roese, DENX Software Engineering, sr@denx.de.
> > +#
> > +# (C) Copyright 2008
> > +# Guennadi Liakhovetki, DENX Software Engineering, <lg@denx.de>
> > +#
> > +# (C) Copyright 2011
> > +# Chander Kashyap, Samsung Electronics, <k.chander@samsung.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
> > +#
> > +
> > +CONFIG_MMC_SPL = y
> > +
> > +include $(TOPDIR)/config.mk
> > +
> > +LDSCRIPT= $(TOPDIR)/mmc_spl/board/$(BOARDDIR)/u-boot.lds
> > +LDFLAGS        = -Bstatic -T $(mmcobj)u-boot.lds -Ttext
> $(CONFIG_SYS_TEXT_BASE) $(PLATFORM_LDFLAGS)
> > +AFLAGS += -DCONFIG_MMC_SPL
> > +AFLAGS += -DCONFIG_SPL_BUILD
> > +CFLAGS += -DCONFIG_MMC_SPL
> > +CFLAGS += -DCONFIG_SPL_BUILD
> > +
> > +SOBJS  = start.o mem_setup.o lowlevel_init.o
> > +COBJS  = mmc_boot.o
> > +
> > +SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
> > +OBJS   := $(addprefix $(obj),$(SOBJS) $(COBJS))
> > +__OBJS := $(SOBJS) $(COBJS)
> > +LNDIR  := $(OBJTREE)/mmc_spl/board/$(BOARDDIR)
> > +
> > +mmcobj := $(OBJTREE)/mmc_spl/
> > +
> > +
> > +MKV310_MMC_SPL_EXEC = mkv310_mmc_spl_exec
> > +MMC_SPL_BIN = u-boot-mmc-spl.bin
> > +
> > +ALL = $(mmcobj)u-boot-spl $(mmcobj)u-boot-spl.bin
> $(mmcobj)$(MMC_SPL_BIN)
> > +
> > +all:    $(obj).depend $(ALL)
> > +
> > +$(mmcobj)$(MMC_SPL_BIN):  $(mmcobj)u-boot-spl.bin
> tools/$(MKV310_MMC_SPL_EXEC)
> > +       ./tools/$(MKV310_MMC_SPL_EXEC) $(mmcobj)u-boot-spl.bin
> $(mmcobj)$(MMC_SPL_BIN)
> > +       rm -f tools/$(MKV310_MMC_SPL_EXEC)
> > +
> > +tools/$(MKV310_MMC_SPL_EXEC): tools/mkv310_image.c
> > +       $(HOSTCC) tools/mkv310_image.c -o tools/$(MKV310_MMC_SPL_EXEC)
> > +
> > +$(mmcobj)u-boot-spl.bin:       $(mmcobj)u-boot-spl
> > +       $(OBJCOPY) ${OBJCFLAGS} -O binary $< $@
> > +
> > +$(mmcobj)u-boot-spl:   $(OBJS) $(mmcobj)u-boot.lds
> > +       cd $(LNDIR) && $(LD) $(LDFLAGS) $(__OBJS) \
> > +               -Map $(mmcobj)u-boot-spl.map \
> > +               -o $(mmcobj)u-boot-spl
> > +
> > +$(mmcobj)u-boot.lds: $(LDSCRIPT)
> > +       $(CPP) $(CPPFLAGS) $(LDPPFLAGS) -ansi -D__ASSEMBLY__ -P - <$^ >$@
> > +
> > +# create symbolic links for common files
> > +
> > +# from cpu directory
> > +start.S:
> > +       @rm -f $@
> > +       @ln -s $(TOPDIR)/arch/arm/cpu/armv7/start.S $@
> > +
> > +# from board directory
> > +mem_setup.S:
> > +       @rm -f $@
> > +       @ln -s $(TOPDIR)/board/samsung/origen/mem_setup.S $@
> > +
> > +lowlevel_init.S:
> > +       @rm -f $@
> > +       @ln -s $(TOPDIR)/board/samsung/origen/lowlevel_init.S $@
> > +
> >
> +#########################################################################
> > +
> > +$(obj)%.o:     %.S
> > +       $(CC) $(AFLAGS) -c -o $@ $<
> > +
> > +$(obj)%.o:     %.c
> > +       $(CC) $(CFLAGS) -c -o $@ $<
> > +
> > +# defines $(obj).depend target
> > +include $(SRCTREE)/rules.mk
> > +
> > +sinclude $(obj).depend
> > +
> >
> +#########################################################################
> > diff --git a/mmc_spl/board/samsung/origen/mmc_boot.c
> b/mmc_spl/board/samsung/origen/mmc_boot.c
> > new file mode 100644
> > index 0000000..d9b44d8
> > --- /dev/null
> > +++ b/mmc_spl/board/samsung/origen/mmc_boot.c
> > @@ -0,0 +1,57 @@
> > +/*
> > + * Copyright (C) 2011 Samsung Electronics
> > + *
> > + * 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<config.h>
> > +
> > +typedef u32(*copy_sd_mmc_to_mem) \
> > +       (u32 start_block, u32 block_count, u32 *dest_addr);
> > +
> > +
> > +void copy_uboot_to_ram(void)
> > +{
> > +       copy_sd_mmc_to_mem copy_bl2 = (copy_sd_mmc_to_mem)*(u32
> *)(0x02020030);
> > +       copy_bl2(BL2_START_OFFSET,\
> > +               BL2_SIZE_BLOC_COUNT, (u32 *)CONFIG_SYS_TEXT_BASE);
> > +}
>
> Curious to know, what the 0x02020030 hardcoding number means here?
> It is a pointer to a API or hardware register, or anything else, how
> this simple function perform the
> data transfer from mmc to ram?
>
>  0x02020030 is iROM address, which contains pointer to API (copy from mmc
from DDR) in iROM.

Best regards,
> Lei
>
Wolfgang Denk Aug. 1, 2011, 10:09 a.m. UTC | #6
Dear Chander Kashyap,

In message <CANuQgHGGaB3fWEFCXfgd97QxOfnizxLYvO8ke-v=5PzHyTN-Jg@mail.gmail.com> you wrote:
>
[200+ lines of unrelated quote deleted.]

> > > +void copy_uboot_to_ram(void)
> > > +{
> > > +       copy_sd_mmc_to_mem copy_bl2 = (copy_sd_mmc_to_mem)*(u32 *)(0x02020030);
> > > +       copy_bl2(BL2_START_OFFSET,\
> > > +               BL2_SIZE_BLOC_COUNT, (u32 *)CONFIG_SYS_TEXT_BASE);
> > > +}
> >
> > Curious to know, what the 0x02020030 hardcoding number means here?
> > It is a pointer to a API or hardware register, or anything else, how
> > this simple function perform the
> > data transfer from mmc to ram?
> >
> >  0x02020030 is iROM address, which contains pointer to API (copy from mmc
> from DDR) in iROM.

Well, as you can see yourself here, an external reviewer has no
chance to reand and understand this code. As mentioned before, this
needs serious rework.

Best regards,

Wolfgang Denk
Chander Kashyap Aug. 1, 2011, 11:52 a.m. UTC | #7
Dear Wolfgang Denk,

On 1 August 2011 15:39, Wolfgang Denk <wd@denx.de> wrote:

> Dear Chander Kashyap,
>
> In message <CANuQgHGGaB3fWEFCXfgd97QxOfnizxLYvO8ke-v=
> 5PzHyTN-Jg@mail.gmail.com> you wrote:
> >
> [200+ lines of unrelated quote deleted.]
>
> > > > +void copy_uboot_to_ram(void)
> > > > +{
> > > > +       copy_sd_mmc_to_mem copy_bl2 = (copy_sd_mmc_to_mem)*(u32
> *)(0x02020030);
> > > > +       copy_bl2(BL2_START_OFFSET,\
> > > > +               BL2_SIZE_BLOC_COUNT, (u32 *)CONFIG_SYS_TEXT_BASE);
> > > > +}
> > >
> > > Curious to know, what the 0x02020030 hardcoding number means here?
> > > It is a pointer to a API or hardware register, or anything else, how
> > > this simple function perform the
> > > data transfer from mmc to ram?
> > >
> > >  0x02020030 is iROM address, which contains pointer to API (copy from
> mmc
> > from DDR) in iROM.
>
> Well, as you can see yourself here, an external reviewer has no
> chance to reand and understand this code. As mentioned before, this
> needs serious rework.
>
Yes I am reworking on it. I make it more readable. But still i need to use
the inbuilt function to copy u-boot from mmc to ddr.

>
> Best regards,
>
> Wolfgang Denk
>
> --
> DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
> HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
> Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd@denx.de
> Those who hate and fight must stop themselves -- otherwise it is  not
> stopped.
>        -- Spock, "Day of the Dove", stardate unknown
>
Chander Kashyap Aug. 3, 2011, 3:49 a.m. UTC | #8
Dear Wolfgang Denk,

On 31 July 2011 15:33, Wolfgang Denk <wd@denx.de> wrote:

> Dear Chander Kashyap,
>
> In message <1311914519-10531-3-git-send-email-chander.kashyap@linaro.org>
> you wrote:
> > Adds mmc boot support.
> >
> > Signed-off-by: Chander Kashyap <chander.kashyap@linaro.org>
> > ---
> >  mmc_spl/board/samsung/origen/Makefile             |  106
> ++++++++++++++++
> >  mmc_spl/board/samsung/origen/mmc_boot.c           |   57 +++++++++
> >  mmc_spl/board/samsung/origen/tools/mkv310_image.c |  140
> +++++++++++++++++++++
> >  mmc_spl/board/samsung/origen/u-boot.lds           |   88 +++++++++++++
> >  4 files changed, 391 insertions(+), 0 deletions(-)
> >  create mode 100644 mmc_spl/board/samsung/origen/Makefile
> >  create mode 100644 mmc_spl/board/samsung/origen/mmc_boot.c
> >  create mode 100644 mmc_spl/board/samsung/origen/tools/mkv310_image.c
> >  create mode 100644 mmc_spl/board/samsung/origen/u-boot.lds
>
> PLease adapt this code to the new SPL infrastructure that has recently
> been introduced.
>
Yes i will use the new SPL Infrastructure.

>
>
> > +typedef u32(*copy_sd_mmc_to_mem) \
> > +     (u32 start_block, u32 block_count, u32 *dest_addr);
>
> Quote CodingStyle:
>
>        Lots of people think that typedefs "help readability". Not so.
>
> > +void copy_uboot_to_ram(void)
> > +{
> > +     copy_sd_mmc_to_mem copy_bl2 = (copy_sd_mmc_to_mem)*(u32
> *)(0x02020030);
> > +     copy_bl2(BL2_START_OFFSET,\
> > +             BL2_SIZE_BLOC_COUNT, (u32 *)CONFIG_SYS_TEXT_BASE);
> > +}
>
> This code is, in addition to the magic 0x02020030 constant, basicly
> unreadable.
>
> The typedef is especially useless as it is used only in this single
> case.  Please clean this up.
>
> > diff --git a/mmc_spl/board/samsung/origen/u-boot.lds
> b/mmc_spl/board/samsung/origen/u-boot.lds
> > new file mode 100644
> > index 0000000..4a231d9
> > --- /dev/null
> > +++ b/mmc_spl/board/samsung/origen/u-boot.lds
>
> What exactly is the reason for needing your own, custom linker script?
>
> Best regards,
>
> Wolfgang Denk
>
> --
> DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
> HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
> Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd@denx.de
> Defaults are wonderful, just like fire.
>                  - Larry Wall in <1996Mar6.004121.27890@netlabs.com>
>
diff mbox

Patch

diff --git a/mmc_spl/board/samsung/origen/Makefile b/mmc_spl/board/samsung/origen/Makefile
new file mode 100644
index 0000000..1d61cc0
--- /dev/null
+++ b/mmc_spl/board/samsung/origen/Makefile
@@ -0,0 +1,106 @@ 
+#
+# (C) Copyright 2006-2007
+# Stefan Roese, DENX Software Engineering, sr@denx.de.
+#
+# (C) Copyright 2008
+# Guennadi Liakhovetki, DENX Software Engineering, <lg@denx.de>
+#
+# (C) Copyright 2011
+# Chander Kashyap, Samsung Electronics, <k.chander@samsung.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
+#
+
+CONFIG_MMC_SPL	= y
+
+include $(TOPDIR)/config.mk
+
+LDSCRIPT= $(TOPDIR)/mmc_spl/board/$(BOARDDIR)/u-boot.lds
+LDFLAGS	= -Bstatic -T $(mmcobj)u-boot.lds -Ttext $(CONFIG_SYS_TEXT_BASE) $(PLATFORM_LDFLAGS)
+AFLAGS	+= -DCONFIG_MMC_SPL
+AFLAGS	+= -DCONFIG_SPL_BUILD
+CFLAGS	+= -DCONFIG_MMC_SPL
+CFLAGS	+= -DCONFIG_SPL_BUILD
+
+SOBJS	= start.o mem_setup.o lowlevel_init.o
+COBJS	= mmc_boot.o
+
+SRCS	:= $(SOBJS:.o=.S) $(COBJS:.o=.c)
+OBJS	:= $(addprefix $(obj),$(SOBJS) $(COBJS))
+__OBJS	:= $(SOBJS) $(COBJS)
+LNDIR	:= $(OBJTREE)/mmc_spl/board/$(BOARDDIR)
+
+mmcobj	:= $(OBJTREE)/mmc_spl/
+
+
+MKV310_MMC_SPL_EXEC = mkv310_mmc_spl_exec
+MMC_SPL_BIN = u-boot-mmc-spl.bin
+
+ALL = $(mmcobj)u-boot-spl $(mmcobj)u-boot-spl.bin $(mmcobj)$(MMC_SPL_BIN)
+
+all:    $(obj).depend $(ALL)
+
+$(mmcobj)$(MMC_SPL_BIN):  $(mmcobj)u-boot-spl.bin tools/$(MKV310_MMC_SPL_EXEC)
+	./tools/$(MKV310_MMC_SPL_EXEC) $(mmcobj)u-boot-spl.bin $(mmcobj)$(MMC_SPL_BIN)
+	rm -f tools/$(MKV310_MMC_SPL_EXEC)
+
+tools/$(MKV310_MMC_SPL_EXEC): tools/mkv310_image.c
+	$(HOSTCC) tools/mkv310_image.c -o tools/$(MKV310_MMC_SPL_EXEC)
+
+$(mmcobj)u-boot-spl.bin:	$(mmcobj)u-boot-spl
+	$(OBJCOPY) ${OBJCFLAGS} -O binary $< $@
+
+$(mmcobj)u-boot-spl:	$(OBJS) $(mmcobj)u-boot.lds
+	cd $(LNDIR) && $(LD) $(LDFLAGS) $(__OBJS) \
+		-Map $(mmcobj)u-boot-spl.map \
+		-o $(mmcobj)u-boot-spl
+
+$(mmcobj)u-boot.lds: $(LDSCRIPT)
+	$(CPP) $(CPPFLAGS) $(LDPPFLAGS) -ansi -D__ASSEMBLY__ -P - <$^ >$@
+
+# create symbolic links for common files
+
+# from cpu directory
+start.S:
+	@rm -f $@
+	@ln -s $(TOPDIR)/arch/arm/cpu/armv7/start.S $@
+
+# from board directory
+mem_setup.S:
+	@rm -f $@
+	@ln -s $(TOPDIR)/board/samsung/origen/mem_setup.S $@
+
+lowlevel_init.S:
+	@rm -f $@
+	@ln -s $(TOPDIR)/board/samsung/origen/lowlevel_init.S $@
+
+#########################################################################
+
+$(obj)%.o:	%.S
+	$(CC) $(AFLAGS) -c -o $@ $<
+
+$(obj)%.o:	%.c
+	$(CC) $(CFLAGS) -c -o $@ $<
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/mmc_spl/board/samsung/origen/mmc_boot.c b/mmc_spl/board/samsung/origen/mmc_boot.c
new file mode 100644
index 0000000..d9b44d8
--- /dev/null
+++ b/mmc_spl/board/samsung/origen/mmc_boot.c
@@ -0,0 +1,57 @@ 
+/*
+ * Copyright (C) 2011 Samsung Electronics
+ *
+ * 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<config.h>
+
+typedef u32(*copy_sd_mmc_to_mem) \
+	(u32 start_block, u32 block_count, u32 *dest_addr);
+
+
+void copy_uboot_to_ram(void)
+{
+	copy_sd_mmc_to_mem copy_bl2 = (copy_sd_mmc_to_mem)*(u32 *)(0x02020030);
+	copy_bl2(BL2_START_OFFSET,\
+		BL2_SIZE_BLOC_COUNT, (u32 *)CONFIG_SYS_TEXT_BASE);
+}
+
+void board_init_f(unsigned long bootflag)
+{
+	__attribute__((noreturn)) void (*uboot)(void);
+	copy_uboot_to_ram();
+
+	/* Jump to U-Boot image */
+	uboot = (void *)CONFIG_SYS_TEXT_BASE;
+	(*uboot)();
+	/* Never returns Here */
+}
+
+/* Place Holders */
+void board_init_r(gd_t *id, ulong dest_addr)
+{
+	/* Function attribute is no-return */
+	/* This Function never executes */
+	while (1)
+		;
+}
+
+void save_boot_params(u32 r0, u32 r1, u32 r2, u32 r3) {}
diff --git a/mmc_spl/board/samsung/origen/tools/mkv310_image.c b/mmc_spl/board/samsung/origen/tools/mkv310_image.c
new file mode 100644
index 0000000..571e400
--- /dev/null
+++ b/mmc_spl/board/samsung/origen/tools/mkv310_image.c
@@ -0,0 +1,140 @@ 
+/*
+ * Copyright (C) 2011 Samsung Electronics
+ *
+ * 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 <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <string.h>
+#include <sys/stat.h>
+
+#define BUFSIZE			(16*1024)
+#define IMG_SIZE		(16*1024)
+#define HEADER_SIZE		16
+#define FILE_PERM		(S_IRUSR | S_IWUSR | S_IRGRP \
+				| S_IWGRP | S_IROTH | S_IWOTH)
+/*
+* Requirement:
+* IROM code reads first 14K bytes from boot device.
+* It then calculates the checksum of 14K-4 bytes and compare with data at
+* 14K-4 offset.
+*
+* This function takes two filenames:
+* IN  "u-boot-spl.bin" and
+* OUT "u-boot-mmc-spl.bin" as filenames.
+* It reads the "u-boot-spl.bin" in 16K buffer.
+* It calculates checksum of 14K-4 Bytes and stores at 14K-4 offset in buffer.
+* It writes the buffer to "u-boot-mmc-spl.bin" file.
+*/
+
+int main(int argc, char **argv)
+{
+	int i, len;
+	unsigned char buffer[BUFSIZE] = {0};
+	int ifd, ofd;
+	unsigned int checksum = 0, count;
+
+	if (argc != 3) {
+		printf(" %d Wrong number of arguments\n", argc);
+		exit(EXIT_FAILURE);
+	}
+
+	ifd = open(argv[1], O_RDONLY);
+	if (ifd < 0) {
+		fprintf(stderr, "%s: Can't open %s: %s\n",
+			argv[0], argv[1], strerror(errno));
+		exit(EXIT_FAILURE);
+	}
+
+	ofd = open(argv[2], O_WRONLY | O_CREAT | O_TRUNC, FILE_PERM);
+	if (ifd < 0) {
+		fprintf(stderr, "%s: Can't open %s: %s\n",
+			argv[0], argv[2], strerror(errno));
+		if (ifd)
+			close(ifd);
+		exit(EXIT_FAILURE);
+	}
+
+	len = lseek(ifd, 0, SEEK_END);
+	lseek(ifd, 0, SEEK_SET);
+
+	count = (len < (IMG_SIZE - HEADER_SIZE))
+		? len : (IMG_SIZE - HEADER_SIZE);
+
+	if (read(ifd, buffer + HEADER_SIZE, count) != count) {
+		fprintf(stderr, "%s: Can't read %s: %s\n",
+			argv[0], argv[1], strerror(errno));
+
+		if (ifd)
+			close(ifd);
+		if (ofd)
+			close(ofd);
+
+		exit(EXIT_FAILURE);
+	}
+
+	for (i = 0; i < IMG_SIZE - HEADER_SIZE; i++)
+		checksum += buffer[i+16];
+
+	*(ulong *)buffer = 0x1f;
+	*(ulong *)(buffer+4) = checksum;
+
+	buffer[0] ^= 0x53;
+	buffer[1] ^= 0x35;
+	buffer[2] ^= 0x50;
+	buffer[3] ^= 0x43;
+	buffer[4] ^= 0x32;
+	buffer[5] ^= 0x31;
+	buffer[6] ^= 0x30;
+	buffer[7] ^= 0x20;
+	buffer[8] ^= 0x48;
+	buffer[9] ^= 0x45;
+	buffer[10] ^= 0x41;
+	buffer[11] ^= 0x44;
+	buffer[12] ^= 0x45;
+	buffer[13] ^= 0x52;
+	buffer[14] ^= 0x20;
+	buffer[15] ^= 0x20;
+
+	for (i = 1; i < HEADER_SIZE; i++)
+		buffer[i] ^= buffer[i-1];
+
+	if (write(ofd, buffer, BUFSIZE) != BUFSIZE) {
+		fprintf(stderr, "%s: Can't write %s: %s\n",
+			argv[0], argv[2], strerror(errno));
+
+		if (ifd)
+			close(ifd);
+		if (ofd)
+			close(ofd);
+
+		exit(EXIT_FAILURE);
+	}
+
+	if (ifd)
+		close(ifd);
+	if (ofd)
+		close(ofd);
+
+	return EXIT_SUCCESS;
+}
diff --git a/mmc_spl/board/samsung/origen/u-boot.lds b/mmc_spl/board/samsung/origen/u-boot.lds
new file mode 100644
index 0000000..4a231d9
--- /dev/null
+++ b/mmc_spl/board/samsung/origen/u-boot.lds
@@ -0,0 +1,88 @@ 
+/*
+ * (C) Copyright 2011
+ * Chander Kashyap, Samsung Electronics, <k.chander@samsung.com>
+ *
+ * January 2004 - Changed to support H4 device
+ * Copyright (c) 2004-2008 Texas Instruments
+ *
+ * (C) Copyright 2002
+ * Gary Jennejohn, DENX Software Engineering, <garyj@denx.de>
+ *
+ * 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
+ */
+
+OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SECTIONS
+{
+	. = 0x00000000;
+
+	. = ALIGN(4);
+	.text	:
+	{
+		start.o	(.text)
+		*(.text)
+	}
+
+	. = ALIGN(4);
+	.rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
+
+	. = ALIGN(4);
+	.data : {
+		*(.data)
+	}
+
+	. = ALIGN(4);
+
+	. = .;
+	__u_boot_cmd_start = .;
+	.u_boot_cmd : { *(.u_boot_cmd) }
+	__u_boot_cmd_end = .;
+
+	. = ALIGN(4);
+
+	__image_copy_end = .;
+
+	.rel.dyn : {
+		__rel_dyn_start = .;
+		*(.rel*)
+		__rel_dyn_end = .;
+	}
+
+	.dynsym : {
+		__dynsym_start = .;
+		*(.dynsym)
+	}
+
+	_end = .;
+
+	.bss __rel_dyn_start (OVERLAY) : {
+		__bss_start = .;
+		*(.bss)
+		 . = ALIGN(4);
+		__bss_end__ = .;
+	}
+
+	/DISCARD/ : { *(.dynstr*) }
+	/DISCARD/ : { *(.dynamic*) }
+	/DISCARD/ : { *(.plt*) }
+	/DISCARD/ : { *(.interp*) }
+	/DISCARD/ : { *(.gnu*) }
+}