[PATCH] mtd: spi-nor: read 6 bytes for the ID

Huang Shijie shijie8 at gmail.com
Mon Apr 14 07:44:01 PDT 2014


On Mon, Apr 14, 2014 at 01:53:07PM +0200, Marek Vasut wrote:
> > @@ -614,8 +616,23 @@ static const struct spi_device_id
> > *spi_nor_read_id(struct spi_nor *nor) for (tmp = 0; tmp <
> > ARRAY_SIZE(spi_nor_ids) - 1; tmp++) {
> >  		info = (void *)spi_nor_ids[tmp].driver_data;
> >  		if (info->jedec_id == jedec) {
> > -			if (info->ext_id == 0 || info->ext_id == ext_jedec)
> > +			if (info->ext_id == 0)
> >  				return &spi_nor_ids[tmp];
> > +
> > +			/* the legacy two bytes ext_id */
> > +			if ((info->ext_id >> 16) == 0) {
> > +				if (info->ext_id == ext_jedec)
> > +					matched = tmp;
> > +			} else {
> > +				/* check the sixth byte now */
> > +				ext_jedec = ext_jedec << 8 | id[5];
> > +				if (info->ext_id == ext_jedec)
> > +					return &spi_nor_ids[tmp];
> > +			}
> > +		} else {
> > +			/* shortcut */
> > +			if (matched != -1)
> > +				return &spi_nor_ids[matched];
> 
> I wonder if the ID-bytes wraparound cannot cause us trouble here. For example if 
> we try to detect a SPI NOR which has 5-byte ID code, but in the table, we'd also 
> have a SPI NOR with has a 6-byte code where the last byte of ext-jedec matches 
> the first byte of JEDEC ID , this would actually match on the later.
could you give me detail example?

I feel sorry that i do not quit understand your meaning.

thanks
Huang Shijie







More information about the linux-mtd mailing list