[U-Boot] [PATCH] env: Allow accessing non-mtd devices

Lubomir Rintel lkundrak at v3.sk
Thu Feb 7 00:04:26 CET 2013


On Thu, 2013-01-31 at 15:10 +0100, Wolfgang Denk wrote:
> Dear Lubomir Rintel,
> 
> In message <1359630144.16475.6.camel at hobbes> you wrote:
> >
> > Mine is a Kobo Mini e-book reader, which is basically Freescale MX50
> > with the only storage there being an MMC/SD card (removable from a slot
> > if disassembled), which contains uboot and its environment as well as
> > partition table, root and storage volume.
> 
> OK - but you do not comment on my remarks about the actual code?

On Thu, 2013-01-31 at 07:48 +0100, Wolfgang Denk wrote: 
> > diff --git a/tools/env/fw_env.c b/tools/env/fw_env.c
> > index 37b60b8..0d8052d 100644
> > --- a/tools/env/fw_env.c
> > +++ b/tools/env/fw_env.c
> > @@ -838,7 +838,7 @@ static int flash_write_buf (int dev, int fd, void *buf, size_t count,
> >  		ioctl (fd, MEMUNLOCK, &erase);
> >  
> >  		/* Dataflash does not need an explicit erase cycle */
> > -		if (mtd_type != MTD_DATAFLASH)
> > +		if (mtd_type && mtd_type != MTD_DATAFLASH)
> 
> This change appears to be redundant.  If mtd_type is null, then this
> is already caught iun te test mtd_type != MTD_DATAFLASH, isn't it?

No. We don't want the erase ioctl to be called for non-MTD devices and
files (where mtd_type is null).

> > -	rc = ioctl (fd, MEMGETINFO, &mtdinfo);
> > +	rc = fstat (fd, &st);
> >  	if (rc < 0) {
> > -		perror ("Cannot get MTD information");
> > +		perror ("Cannot access MTD device");
> 
> I don't understand this.  You talk about a MTD device here, but expect
> that MEMGETINFO will not work on it?  Please explain in which exact
> circumstances such a situation wouldhappen.

The error message (mention of MTD at that point) is incorrect. fstat()
is called to determine whether the device is a character device (such as
MTD devices -- MEMGETINFO call will follow) or not (it might be a
blockdevice or flat file).

> >  	if (mtdinfo.type != MTD_NORFLASH &&
> >  	    mtdinfo.type != MTD_NANDFLASH &&
> > -	    mtdinfo.type != MTD_DATAFLASH) {
> > +	    mtdinfo.type != MTD_DATAFLASH &&
> > +	    mtdinfo.type) {
> 
> Again, this last line appears to be redundant.

The same response again -- if the type is nul, then the device is not a
flash device at all.

> 
> >  	}
> >  
> >  	DEVTYPE(dev_current) = mtdinfo.type;
> > -
> >  	rc = flash_read_buf(dev_current, fd, environment.image, CUR_ENVSIZE,
> 
> Please don't make such unrelated white space changes in this commit.

That was a mistake.

Have a nice day!
--
Lubo



More information about the U-Boot mailing list