aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mtd
diff options
context:
space:
mode:
authorAnup Patel <anup.patel@broadcom.com>2015-10-30 02:59:20 -0400
committerBrian Norris <computersforpeace@gmail.com>2015-10-30 14:50:38 -0400
commit4d1ea982a9beb4e47bba41131973329e2a012b38 (patch)
tree4c577523fde06b865d5ef06d7dd0c3430680393b /drivers/mtd
parent3f06d2a912b55c53e9efbd799f7205dbfe041029 (diff)
mtd: brcmnand: Force 8bit mode before doing nand_scan_ident()
Just like other NAND controllers, the NAND READID command only works in 8bit mode for all versions of BRCMNAND controller. This patch forces 8bit mode for each NAND CS in brcmnand_init_cs() before doing nand_scan_ident() to ensure that BRCMNAND controller is in 8bit mode when NAND READID command is issued. Signed-off-by: Anup Patel <anup.patel@broadcom.com> Reviewed-by: Ray Jui <rjui@broadcom.com> Reviewed-by: Scott Branden <sbranden@broadcom.com> Signed-off-by: Brian Norris <computersforpeace@gmail.com>
Diffstat (limited to 'drivers/mtd')
-rw-r--r--drivers/mtd/nand/brcmnand/brcmnand.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/mtd/nand/brcmnand/brcmnand.c b/drivers/mtd/nand/brcmnand/brcmnand.c
index 3bd31a6055b6..12c6190c6e33 100644
--- a/drivers/mtd/nand/brcmnand/brcmnand.c
+++ b/drivers/mtd/nand/brcmnand/brcmnand.c
@@ -1913,6 +1913,7 @@ static int brcmnand_init_cs(struct brcmnand_host *host)
1913 struct mtd_info *mtd; 1913 struct mtd_info *mtd;
1914 struct nand_chip *chip; 1914 struct nand_chip *chip;
1915 int ret; 1915 int ret;
1916 u16 cfg_offs;
1916 struct mtd_part_parser_data ppdata = { .of_node = dn }; 1917 struct mtd_part_parser_data ppdata = { .of_node = dn };
1917 1918
1918 ret = of_property_read_u32(dn, "reg", &host->cs); 1919 ret = of_property_read_u32(dn, "reg", &host->cs);
@@ -1955,6 +1956,15 @@ static int brcmnand_init_cs(struct brcmnand_host *host)
1955 1956
1956 chip->controller = &ctrl->controller; 1957 chip->controller = &ctrl->controller;
1957 1958
1959 /*
1960 * The bootloader might have configured 16bit mode but
1961 * NAND READID command only works in 8bit mode. We force
1962 * 8bit mode here to ensure that NAND READID commands works.
1963 */
1964 cfg_offs = brcmnand_cs_offset(ctrl, host->cs, BRCMNAND_CS_CFG);
1965 nand_writereg(ctrl, cfg_offs,
1966 nand_readreg(ctrl, cfg_offs) & ~CFG_BUS_WIDTH);
1967
1958 if (nand_scan_ident(mtd, 1, NULL)) 1968 if (nand_scan_ident(mtd, 1, NULL))
1959 return -ENXIO; 1969 return -ENXIO;
1960 1970