Lines Matching full:nand

23 static int nanddev_read_bbt(struct nand_device *nand, u32 block, bool update)  in nanddev_read_bbt()  argument
26 unsigned int nblocks = nanddev_neraseblocks(nand); in nanddev_read_bbt()
28 BITS_PER_LONG) * sizeof(*nand->bbt.cache); in nanddev_read_bbt()
29 struct mtd_info *mtd = nanddev_to_mtd(nand); in nanddev_read_bbt()
37 if (!nand->bbt.cache) in nanddev_read_bbt()
80 if (update && version > nand->bbt.version) { in nanddev_read_bbt()
81 memcpy(nand->bbt.cache, data_buf, nbytes); in nanddev_read_bbt()
82 nand->bbt.version = version; in nanddev_read_bbt()
92 static int nanddev_write_bbt(struct nand_device *nand, u32 block) in nanddev_write_bbt() argument
95 unsigned int nblocks = nanddev_neraseblocks(nand); in nanddev_write_bbt()
97 BITS_PER_LONG) * sizeof(*nand->bbt.cache); in nanddev_write_bbt()
98 struct mtd_info *mtd = nanddev_to_mtd(nand); in nanddev_write_bbt()
106 BBT_DBG("write_bbt to blk=%d ver=%d\n", block, nand->bbt.version); in nanddev_write_bbt()
107 if (!nand->bbt.cache) in nanddev_write_bbt()
130 memcpy(data_buf, nand->bbt.cache, nbytes); in nanddev_write_bbt()
132 bbt_info->version = nand->bbt.version; in nanddev_write_bbt()
134 nanddev_offs_to_pos(nand, block * mtd->erasesize, &pos); in nanddev_write_bbt()
135 ret = nand->ops->erase(nand, &pos); in nanddev_write_bbt()
155 static int nanddev_bbt_format(struct nand_device *nand) in nanddev_bbt_format() argument
157 unsigned int nblocks = nanddev_neraseblocks(nand); in nanddev_bbt_format()
158 struct mtd_info *mtd = nanddev_to_mtd(nand); in nanddev_bbt_format()
165 nanddev_offs_to_pos(nand, block * mtd->erasesize, &pos); in nanddev_bbt_format()
166 if (nanddev_isbad(nand, &pos)) in nanddev_bbt_format()
167 nanddev_bbt_set_block_status(nand, block, in nanddev_bbt_format()
172 if (nanddev_bbt_get_block_status(nand, start_block + block) == in nanddev_bbt_format()
174 nanddev_bbt_set_block_status(nand, start_block + block, in nanddev_bbt_format()
183 * @nand: nand device
189 int nanddev_scan_bbt_in_flash(struct nand_device *nand) in nanddev_scan_bbt_in_flash() argument
191 unsigned int nblocks = nanddev_neraseblocks(nand); in nanddev_scan_bbt_in_flash()
195 nand->bbt.version = 0; in nanddev_scan_bbt_in_flash()
198 nanddev_read_bbt(nand, start_block + block, true); in nanddev_scan_bbt_in_flash()
200 if (nand->bbt.version == 0) { in nanddev_scan_bbt_in_flash()
201 nanddev_bbt_format(nand); in nanddev_scan_bbt_in_flash()
202 ret = nanddev_bbt_in_flash_update(nand); in nanddev_scan_bbt_in_flash()
204 nand->bbt.option = 0; in nanddev_scan_bbt_in_flash()
209 nand->bbt.option |= NANDDEV_BBT_SCANNED; in nanddev_scan_bbt_in_flash()
217 * @nand: nand device
223 int nanddev_bbt_in_flash_update(struct nand_device *nand) in nanddev_bbt_in_flash_update() argument
225 if (nand->bbt.option & NANDDEV_BBT_SCANNED) { in nanddev_bbt_in_flash_update()
226 unsigned int nblocks = nanddev_neraseblocks(nand); in nanddev_bbt_in_flash_update()
234 ret = nanddev_bbt_get_block_status(nand, start_block + block); in nanddev_bbt_in_flash_update()
239 ret = nanddev_read_bbt(nand, start_block + block, in nanddev_bbt_in_flash_update()
259 nand->bbt.version++; in nanddev_bbt_in_flash_update()
260 ret = nanddev_write_bbt(nand, block_des); in nanddev_bbt_in_flash_update()