summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Bénard <eric@eukrea.com>2013-04-10 18:04:52 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2013-04-11 10:43:34 +0200
commit4c2bdc8728016b3412523e3264651651fe752860 (patch)
tree773113a9c2c7878544cc54dc8bddb8bcb307fb97
parentbe78f86efc1f03c6b77e1685c93afbd615ee8ece (diff)
downloadbarebox-4c2bdc8728016b3412523e3264651651fe752860.tar.gz
barebox-4c2bdc8728016b3412523e3264651651fe752860.tar.xz
nand_base: detect more ONFI flash
if the flash has a known type, the ONFI detection won't occur and thus we may not detect the right parameters. By testing both namd and pagesize, as done in the kernel, we can detect ONFI flash with know IDs. As an example on an i.MX53 board : - without the patch : NAND device: Manufacturer ID: 0x2c, Chip ID: 0xd3 (Micron NAND 1GiB 3,3V 8-bit), page size: 4096, OOB size: 128 - with the patch : ONFI flash detected ... ONFI param page 0 valid NAND device: Manufacturer ID: 0x2c, Chip ID: 0xd3 (Micron MT29F8G08ABACAWP), page size: 4096, OOB size: 224 in the first case the OOB size is wrong. Signed-off-by: Eric Bénard <eric@eukrea.com> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
-rw-r--r--drivers/mtd/nand/nand_base.c13
1 files changed, 6 insertions, 7 deletions
diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
index fa10d9581e..c63aaf9dc1 100644
--- a/drivers/mtd/nand/nand_base.c
+++ b/drivers/mtd/nand/nand_base.c
@@ -1179,16 +1179,15 @@ static struct nand_flash_dev *nand_get_flash_type(struct mtd_info *mtd,
return ERR_PTR(-ENODEV);
}
- /* Lookup the flash id */
- for (i = 0; nand_flash_ids[i].name != NULL; i++) {
- if (dev_id == nand_flash_ids[i].id) {
- type = &nand_flash_ids[i];
+ if (!type)
+ type = nand_flash_ids;
+
+ for (; type->name != NULL; type++)
+ if (dev_id == type->id)
break;
- }
- }
chip->onfi_version = 0;
- if (!type) {
+ if (!type->name || !type->pagesize) {
/* Check is chip is ONFI compliant */
ret = nand_flash_detect_onfi(mtd, chip, &busw);
if (ret)