WARNING: This driver might brick the hardware. See below. Hi Naga, On Mon, Apr 15, 2019 at 04:40:13PM +0530, Naga Sureshkumar Relli wrote: > Changes in v14: > - Removed legacy hooks as per Miquel comments Thank you for the update. > +static inline int pl353_wait_for_dev_ready(struct nand_chip *chip) > +{ > + unsigned long timeout = jiffies + PL353_NAND_DEV_BUSY_TIMEOUT; > + > + do { > + if (pl353_smc_get_nand_int_status_raw()) { > + pl353_smc_clr_nand_int(); > + break; A closing brace is missing here. This causes a compilation failure. > + > + cpu_relax(); You previously used cond_resched (via nand_wait_ready) here. Why did you change it to cpu_relax()? > + } while (!time_after_eq(jiffies, timeout)); > + > + if (time_after_eq(jiffies, timeout)) { > + pr_err("%s timed out\n", __func__); > + return -ETIMEDOUT; > + } > + > + return 0; > +} > +static int pl353_nand_read_page_hwecc(struct nand_chip *chip, > + u8 *buf, int oob_required, int page) > +{ > + int i, stat, eccsize = chip->ecc.size; > + int eccbytes = chip->ecc.bytes; > + int eccsteps = chip->ecc.steps; > + u8 *p = buf; > + u8 *ecc_calc = chip->ecc.calc_buf; > + u8 *ecc = chip->ecc.code_buf; > + unsigned int max_bitflips = 0; > + u8 *oob_ptr; > + u32 ret; > + unsigned long data_phase_addr; > + unsigned long nand_offset = (unsigned long __force)xnfc->regs; The variable xnfc is undeclared here. Consider swapping the line with the next one. > + struct pl353_nand_controller *xnfc = to_pl353_nand(chip); > + struct mtd_info *mtd = nand_to_mtd(chip); After loading the driver, the device does not work. The dmesg output is: nand: device found, Manufacturer ID: 0x2c, Chip ID: 0xda nand: Micron MT29F2G08ABAEAWP nand: 256 MiB, SLC, erase size: 128 KiB, page size: 2048, OOB size: 64 Bad block table not found for chip 0 Bad block table not found for chip 0 Scanning device for bad blocks nand_bbt: error while writing BBT block -524 nand_bbt: error while writing BBT block -524 nand_bbt: error while writing BBT block -524 nand_bbt: error while writing BBT block -524 No space left to write bad block table nand_bbt: error while writing bad block table -28 pl353-nand e1000000.flash: could not scan the nand chip pl353-nand: probe of e1000000.flash failed with error -28 After trying the driver, the flash chip was bricked. Neither the old driver nor the uboot-xlnx driver nor the Xilinx fsbl are able to talk to the chip afterwards. This behaviour persists even after a full power cycle. I'll try reinitializing the flash chip next. I've only seen this behaviour once, so there is a slight chance that the cause is something else. Helmut ______________________________________________________ Linux MTD discussion mailing list http://lists.infradead.org/mailman/listinfo/linux-mtd/