[U-Boot] [linux-sunxi] [RFC 11/11] mtd/nand: Sunxi NAND boot partition definitions

Boris Brezillon boris.brezillon at free-electrons.com
Sun Jun 14 13:25:04 CEST 2015


Hi Michal,

On Sun, 7 Jun 2015 18:48:26 +0200
Michal Suchanek <hramrach at gmail.com> wrote:

> Hello,
> 
> On 5 June 2015 at 13:52, Roy Spliet <r.spliet at ultimaker.com> wrote:
> > Based on the default layout of the android image used at least on Olimex Lime
> >
> > Signed-off-by: Roy Spliet <r.spliet at ultimaker.com>
> > ---
> >  include/configs/sunxi-common.h | 9 +++++++++
> >  1 file changed, 9 insertions(+)
> >
> > diff --git a/include/configs/sunxi-common.h b/include/configs/sunxi-common.h
> > index ec28c40..b38f2f5 100644
> > --- a/include/configs/sunxi-common.h
> > +++ b/include/configs/sunxi-common.h
> > @@ -404,8 +404,15 @@ extern int soft_i2c_gpio_scl;
> >  #define BOOT_TARGET_DEVICES_USB(func)
> >  #endif
> >
> > +#ifdef CONFIG_NAND
> > +#define BOOT_TARGET_DEVICES_NAND(func) func(NAND, nand , 0)
> > +#else
> > +#define BOOT_TARGET_DEVICES_NAND(func)
> > +#endif
> > +
> >  #define BOOT_TARGET_DEVICES(func) \
> >         BOOT_TARGET_DEVICES_MMC(func) \
> > +       BOOT_TARGET_DEVICES_NAND(func) \
> >         BOOT_TARGET_DEVICES_SCSI(func) \
> >         BOOT_TARGET_DEVICES_USB(func) \
> >         func(PXE, pxe, na) \
> > @@ -441,6 +448,8 @@ extern int soft_i2c_gpio_scl;
> >         MEM_LAYOUT_ENV_SETTINGS \
> >         "fdtfile=" CONFIG_DEFAULT_DEVICE_TREE ".dtb\0" \
> >         "console=ttyS0,115200\0" \
> > +       "mtdids=nand0=mtd2\0" \
> > +       "mtdparts=mtdparts=mtd2:0xffc00000 at 0x400000(nand0_main)\0" \
> >         BOOTENV
> 
> From what I heard the nand boot partition size should be specified in
> nand pages rather than bytes because the boot rom loads a fixed number
> of pages and just uses the start of each page regardless of page size.

AFAIK, the mtdparts format only allows you to express partition offsets
and sizes in bytes, and even if we had to change for something else, we
should choose NAND blocks rather than NAND pages.
The reason partitions should be block aligned in because the you can't
erase specific pages in a block, which means that if you define 2
partitions sharing the same block, you won't be able to update one
partition without potentially corrupting the other one.

> 
> I did not find any document regarding the nand boot partition layout
> so I would like to see some input from somebody familiar with the
> driver.

AFAIR, the mtd partition code checks for block alignment anyway, so you
shouldn't be allowed to create two partitions sharing the same block.

> 
> While it is fine for testing to hand-edit the environment the final
> nand support should have
> 
> 1) way to express the boot partition size in nand pages

Why should we add that ? The conversion from a number of blocks to a
number bytes is pretty straightforward (number_of_blocks *
block_size_in_bytes).

> 2) way to make the main partition start at the end of boot partition
> and extend to the end of the flash

Again, that's not a good idea, the main partition should be aligned on
a block (see the above explanation).

Best Regards,

Boris

-- 
Boris Brezillon, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com


More information about the U-Boot mailing list