diff options
author | Tom Rini <trini@konsulko.com> | 2018-06-27 13:09:55 -0400 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2018-06-27 13:09:55 -0400 |
commit | de76610545f4350f8e3eac7c0c4ff6349106a9bf (patch) | |
tree | 7a8df8ce032c6b53ac64864c91c213c8a93492da /drivers/mtd/nand/mxs_nand_spl.c | |
parent | 3925b2ac97b50b1facab096ac98243615683c295 (diff) | |
parent | b4cb809289235eb39dc2a3e521d8254da0ad752e (diff) | |
download | u-boot-de76610545f4350f8e3eac7c0c4ff6349106a9bf.tar.gz |
Merge git://git.denx.de/u-boot-imx
Diffstat (limited to 'drivers/mtd/nand/mxs_nand_spl.c')
-rw-r--r-- | drivers/mtd/nand/mxs_nand_spl.c | 40 |
1 files changed, 38 insertions, 2 deletions
diff --git a/drivers/mtd/nand/mxs_nand_spl.c b/drivers/mtd/nand/mxs_nand_spl.c index 3e8b35f04a..2d7bbe83cc 100644 --- a/drivers/mtd/nand/mxs_nand_spl.c +++ b/drivers/mtd/nand/mxs_nand_spl.c @@ -6,6 +6,7 @@ #include <common.h> #include <nand.h> #include <malloc.h> +#include "mxs_nand.h" static struct mtd_info *mtd; static struct nand_chip nand_chip; @@ -48,7 +49,29 @@ static void mxs_nand_command(struct mtd_info *mtd, unsigned int command, } } -static int mxs_flash_ident(struct mtd_info *mtd) +#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); int i; @@ -108,6 +131,19 @@ static int mxs_flash_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; +} + static int mxs_read_page_ecc(struct mtd_info *mtd, void *buf, unsigned int page) { register struct nand_chip *chip = mtd_to_nand(mtd); @@ -145,7 +181,7 @@ static int mxs_nand_init(void) return 0; /* init mxs nand driver */ - board_nand_init(&nand_chip); + mxs_nand_init_spl(&nand_chip); mtd = nand_to_mtd(&nand_chip); /* set mtd functions */ nand_chip.cmdfunc = mxs_nand_command; |