]> git.sur5r.net Git - u-boot/commitdiff
mtd: nand: mxs_nand_spl: add mxs_flash_full_ident
authorJörg Krause <joerg.krause@embedded.rocks>
Sun, 14 Jan 2018 18:26:40 +0000 (19:26 +0100)
committerStefano Babic <sbabic@denx.de>
Wed, 27 Jun 2018 10:20:55 +0000 (12:20 +0200)
For now, the existing SPL MXS NAND driver only supports to identify
ONFi-compliant NAND chips. In order to allow identifying
non-ONFi-compliant chips add `mxs_flash_full_ident()` which uses the
`nand_get_flash_type()` functionality from `nand_base.c` to lookup
for supported NAND chips in the chip ID list.

For compatibility reason the full identification support is only
available if the config option `CONFIG_SPL_NAND_IDENT` is enabled.

The lookup was tested on a custom i.MX6ULL board with a Toshiba
TC58NVG1S3HTAI0 NAND chip.

Signed-off-by: Jörg Krause <joerg.krause@embedded.rocks>
drivers/mtd/nand/mxs_nand_spl.c

index adb12c531ec118918057339f71cf856b3f207da7..2d7bbe83cce5419ad7030736a4ebd19708d5523f 100644 (file)
@@ -49,6 +49,28 @@ static void mxs_nand_command(struct mtd_info *mtd, unsigned int command,
        }
 }
 
+#if defined (CONFIG_SPL_NAND_IDENT)
+
+/* Trying to detect the NAND flash using ONFi, JEDEC, and (extended) IDs */
+static int mxs_flash_full_ident(struct mtd_info *mtd)
+{
+       int nand_maf_id, nand_dev_id;
+       struct nand_chip *chip = mtd_to_nand(mtd);
+       struct nand_flash_dev *type;
+
+       type = nand_get_flash_type(mtd, chip, &nand_maf_id, &nand_dev_id, NULL);
+
+       if (IS_ERR(type)) {
+               chip->select_chip(mtd, -1);
+               return PTR_ERR(type);
+       }
+
+       return 0;
+}
+
+#else
+
+/* Trying to detect the NAND flash using ONFi only */
 static int mxs_flash_onfi_ident(struct mtd_info *mtd)
 {
        register struct nand_chip *chip = mtd_to_nand(mtd);
@@ -109,10 +131,16 @@ static int mxs_flash_onfi_ident(struct mtd_info *mtd)
        return 0;
 }
 
+#endif /* CONFIG_SPL_NAND_IDENT */
+
 static int mxs_flash_ident(struct mtd_info *mtd)
 {
        int ret;
+#if defined (CONFIG_SPL_NAND_IDENT)
+       ret = mxs_flash_full_ident(mtd);
+#else
        ret = mxs_flash_onfi_ident(mtd);
+#endif
        return ret;
 }