[U-Boot] SPI flash protection

Simon Guinot simon at sequanux.org
Sun Jan 30 15:56:10 CET 2011


Hi Albert,

On Sun, Jan 30, 2011 at 10:36:17AM +0100, Albert ARIBAUD wrote:
> Hi Simon :)
> 
> Le 29/01/2011 18:00, Simon Guinot a écrit :
> > Hi,
> >
> > I am looking to add U-Boot support for the LaCie Network Space v2 board.
> >
> > The SoC is a Kirkwood 88F6281_A0 and the boot device is a Macronix SPI
> > flash (MX25L4005A). My problem is that the embedded stock U-Boot (1.1.4
> > version patched by Marvell and LaCie) enable write protection for the
> > SPI flash. Then, after an U-Boot update, turn off this protection is
> > needed to allow saving U-Boot environment.
> >
> > It is not clear for me how to proceed. Disable the write protection from
> > the board setup code could be an idea but a problem is that the SPI flash
> > API don't export any helpful method...
> > Maybe I should add one ?
> >
> > An another idea is disabling the write protection anyway while
> > initializing the flash (from the low level macronix driver). It is quite
> > straightforward but I don't know if a flash driver is allowed to do
> > that. After all, a flash could be protected for some good reasons.
> >
> > My last idea is doing nothing and let an another piece of software
> > handle the problem...
> >
> > Thanks in advance for advices.
> 
> My personal take: let users of the board do their own mistakes and thus, 
> do not protect the Flash, *except* for U-Boot itself.
> 
> So, if SPI Flash protection is possible on block or sector levels, 
> protect the blocks/sectors where U-Boot is located, including the 
> environment.

For a Macronix SPI flash, the status register export 3 bits (or 4
depending the model and size) to configure the block protection.

Here is the protect area map for a MX25L4005A 4Mb flash:

  bit  2 1 0 | protect level
 ____________|_______________
       0 0 0 | none
       0 0 1 | block 7
       0 1 0 | block 6-7
       0 1 1 | block 4-7
       1 * * | all

As you can figure, deal with a per block protection in a generic way is
not easy..

> 
> Saveenv should unprotect and re-protect the environment sector/block.

If I understand well, macronix_{erase,write}() are called from either
"saveenv" or "spi erase/write" commands and the low level macronix
functions don't have any flash map knowledge. Then, leave protect or not
a flash sector after a write/erase operation is not an easy decision.

Maybe the status register protection can be configured during the board
initialization ? after all, the required flash informations (as device
size, u-boot and environment localization) are available within the
board setup code.

> 
> As for the kernel and rootfs... You can either leave them unprotected or 
> protected.

As a side note, the Macronix Linux driver (m25p80) don't deal either
with the block protect bits.

> 
> > Simon
> >
> > PS: some pointers about this project:
> >
> > git : http://git.lacie-nas.org/u-boot-lacie.git (branch netspace_v2)
> 
> You should keep this branch based on u-boot/master generally, and on 
> u-boot-arm/master right now because it has the most recent ARM commits.

OK, done :)

Simon
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
Url : http://lists.denx.de/pipermail/u-boot/attachments/20110130/0e034156/attachment.pgp 


More information about the U-Boot mailing list