[U-Boot] [PATCH 1/4] common: imx: Implement generic u-boot.nand target

Marek Vasut
2013-02-25T21:09:07Z

Dear Beno?t Th?baudeau,

> Dear Marek Vasut,
>
> On Monday, February 25, 2013 7:19:54 PM, Marek Vasut wrote:
> > Implement u-boot.nand target that can be reused with a small amount of
> > churn across all CPU models. The idea is to delegate the u-boot.nand
> > target out of the main Makefile and into the CPU's Makefile (very
> > similar to what u-boot.imx does now). The main Makefile shall only
> > contain path to which the u-boot.nand target is delegated. Hopefully
> > this will not produce too much bloat in the main Makefile.
> >
> > To demonstrate this implementation, add u-boot.nand target for i.MX53.
> >
> > Signed-off-by: Marek Vasut <marex@denx.de>
> > Cc: Beno?t Th?baudeau <benoit.thebaudeau@advansee.com>
> > Cc: Fabio Estevam <fabio.estevam@freescale.com>
> > Cc: Stefano Babic <sbabic@denx.de>
> > ---
> >
> > Makefile | 18 ++++++++++++++++++
> > arch/arm/imx-common/Makefile | 6 ++++++
> > 2 files changed, 24 insertions(+)
> >
> > diff --git a/Makefile b/Makefile
> > index 41054b7..8b1010a 100644
> > --- a/Makefile
> > +++ b/Makefile
> > @@ -470,6 +470,23 @@ $(obj)u-boot.img: $(obj)u-boot.bin
> >
> > $(obj)u-boot.imx: $(obj)u-boot.bin depend
> >
> > $(MAKE) -C $(SRCTREE)/arch/arm/imx-common $(obj)u-boot.imx
> >
> > +#
> > +# Generic u-boot.nand target.
> > +#
> > +# Every CPU that needs u-boot.nand must add a path to an implementation
> > of +# the actual u-boot.nand generator below.
> > +#
> > +ifdef CONFIG_MX53
> > +CONFIG_NAND_TRG_PATH := $(SRCTREE)/arch/arm/imx-common
>
> What about calling it rather CONFIG_NAND_TGT_PATH? TRG looks more like
> trigger.
>
> > +endif
> > +
> > +$(obj)u-boot.nand: $(obj)u-boot.bin depend
>
> ^
> $(obj)u-boot.bin already depends on depend through $(obj)u-boot, so it's
> useless here.
>
> > + if [ "X$(CONFIG_NAND_TRG_PATH)X" = "XX" ] ; then
\
> > + echo "This CPU does not support u-boot.nand target!" ;
\
> > + exit 1 ;
\
> > + fi
> > + $(MAKE) -C $(CONFIG_NAND_TRG_PATH) $(obj)u-boot.nand
>
> ^
> $(OBJTREE)/
>
> > +
> >
> > $(obj)u-boot.kwb: $(obj)u-boot.bin
> >
> > $(obj)tools/mkimage -n $(CONFIG_SYS_KWD_CONFIG) -T kwbimage \
> > -a $(CONFIG_SYS_TEXT_BASE) -e $(CONFIG_SYS_TEXT_BASE) -d $< $@
> >
> > @@ -857,6 +874,7 @@ clobber: tidy
> >
> > @rm -f $(obj)u-boot.kwb
> > @rm -f $(obj)u-boot.pbl
> > @rm -f $(obj)u-boot.imx
> >
> > + @rm -f $(obj)u-boot.nand
> >
> > @rm -f $(obj)u-boot.ubl
> > @rm -f $(obj)u-boot.ais
> > @rm -f $(obj)u-boot.dtb
> >
> > diff --git a/arch/arm/imx-common/Makefile b/arch/arm/imx-common/Makefile
> > index 5d5c5b2..71ea36f 100644
> > --- a/arch/arm/imx-common/Makefile
> > +++ b/arch/arm/imx-common/Makefile
> > @@ -50,6 +50,12 @@ $(obj)u-boot.imx: $(OBJTREE)/u-boot.bin
> > $(OBJTREE)/$(patsubst "%",%,$(CONFIG_IMX
> >
> > $(OBJTREE)/tools/mkimage -n $(filter-out %.bin,$^) -T imximage \
> > -e $(CONFIG_SYS_TEXT_BASE) -d $< $@
> >
> > +$(obj)u-boot.nand: $(obj)u-boot.imx
> > + ( \
> > + echo -ne '\x00\x00\x00\x00\x46\x43\x42\x20\x01' ; \
> > + dd if=/dev/zero bs=1015 count=1 2>/dev/null ) | \
> > + cat - $< > $@
>
> Is that all?

That's all for now, that's how it boots and how others do it as well. In the
long run though, I'd prefer to bend mxsboot to generate the DBBT.

> According to 7.5.2.2 (i.MX53 RM), the boot ROM switches to
> serial mode if anything goes wrong with the NAND. Hence, for reliable NAND
> boot, you have to choose either DBBT or SPL (or both, but that would be
> waste).
>
> Populating the DBBT would be complicated, so I'd go for SPL. You could just
> use my u-boot-with-nand-spl.imx and change the dummy header to a true FCB
> with the fingerprint like you did in your header above. u-boot.nand then
> becomes useless.
>
> > +
> >
> > $(obj)SPL: $(OBJTREE)/spl/u-boot-spl.bin $(OBJTREE)/$(patsubst
> > "%",%,$(CONFIG_IMX_CONFIG)).cfgtmp
> >
> > $(OBJTREE)/tools/mkimage -n $(filter-out %.bin,$^) -T imximage \
> > -e $(CONFIG_SPL_TEXT_BASE) -d $< $@
>
> Best regards,
> Beno?t

Best regards,
Marek Vasut