Lines Matching full:nand

33  * @nand: NAND device
42 static int nanddev_read_bbt(struct snand_mtd_dev *nand, u32 block, bool update) in nanddev_read_bbt() argument
45 unsigned int nblocks = snanddev_neraseblocks(nand); in nanddev_read_bbt()
47 BITS_PER_LONG) * sizeof(*nand->bbt.cache); in nanddev_read_bbt()
48 struct mtd_info *mtd = snanddev_to_mtd(nand); in nanddev_read_bbt()
57 if (!nand->bbt.cache) in nanddev_read_bbt()
114 if (update && version > nand->bbt.version) { in nanddev_read_bbt()
115 memcpy(nand->bbt.cache, data_buf, nbytes); in nanddev_read_bbt()
116 nand->bbt.version = version; in nanddev_read_bbt()
126 static int nanddev_write_bbt(struct snand_mtd_dev *nand, u32 block) in nanddev_write_bbt() argument
129 unsigned int nblocks = snanddev_neraseblocks(nand); in nanddev_write_bbt()
131 BITS_PER_LONG) * sizeof(*nand->bbt.cache); in nanddev_write_bbt()
132 struct mtd_info *mtd = snanddev_to_mtd(nand); in nanddev_write_bbt()
140 BBT_DBG("write_bbt to blk=%d ver=%d\n", block, nand->bbt.version); in nanddev_write_bbt()
141 if (!nand->bbt.cache) in nanddev_write_bbt()
164 memcpy(data_buf, nand->bbt.cache, nbytes); in nanddev_write_bbt()
166 bbt_info->version = nand->bbt.version; in nanddev_write_bbt()
209 static int nanddev_bbt_format(struct snand_mtd_dev *nand) in nanddev_bbt_format() argument
211 unsigned int nblocks = snanddev_neraseblocks(nand); in nanddev_bbt_format()
212 struct mtd_info *mtd = snanddev_to_mtd(nand); in nanddev_bbt_format()
219 snanddev_bbt_set_block_status(nand, block, in nanddev_bbt_format()
224 if (snanddev_bbt_get_block_status(nand, start_block + block) == in nanddev_bbt_format()
226 snanddev_bbt_set_block_status(nand, start_block + block, in nanddev_bbt_format()
233 static int nanddev_scan_bbt(struct snand_mtd_dev *nand) in nanddev_scan_bbt() argument
235 unsigned int nblocks = snanddev_neraseblocks(nand); in nanddev_scan_bbt()
239 nand->bbt.version = 0; in nanddev_scan_bbt()
242 nanddev_read_bbt(nand, start_block + block, true); in nanddev_scan_bbt()
244 nand->bbt.option |= NANDDEV_BBT_SCANNED; in nanddev_scan_bbt()
245 if (nand->bbt.version == 0) { in nanddev_scan_bbt()
246 nanddev_bbt_format(nand); in nanddev_scan_bbt()
247 ret = snanddev_bbt_update(nand); in nanddev_scan_bbt()
249 nand->bbt.option = 0; in nanddev_scan_bbt()
261 * @nand: NAND device
267 int snanddev_bbt_init(struct snand_mtd_dev *nand) in snanddev_bbt_init() argument
270 unsigned int nblocks = snanddev_neraseblocks(nand); in snanddev_bbt_init()
274 nand->bbt.cache = kcalloc(nwords, sizeof(*nand->bbt.cache), in snanddev_bbt_init()
276 if (!nand->bbt.cache) in snanddev_bbt_init()
285 * @nand: NAND device
289 void snanddev_bbt_cleanup(struct snand_mtd_dev *nand) in snanddev_bbt_cleanup() argument
291 kfree(nand->bbt.cache); in snanddev_bbt_cleanup()
297 * @nand: nand device
304 int snanddev_bbt_update(struct snand_mtd_dev *nand) in snanddev_bbt_update() argument
307 if (nand->bbt.cache && in snanddev_bbt_update()
308 nand->bbt.option & NANDDEV_BBT_USE_FLASH) { in snanddev_bbt_update()
309 unsigned int nblocks = snanddev_neraseblocks(nand); in snanddev_bbt_update()
317 ret = snanddev_bbt_get_block_status(nand, start_block + block); in snanddev_bbt_update()
322 ret = nanddev_read_bbt(nand, start_block + block, in snanddev_bbt_update()
342 nand->bbt.version++; in snanddev_bbt_update()
343 ret = nanddev_write_bbt(nand, block_des); in snanddev_bbt_update()
368 * @nand: nand device
374 int snanddev_bbt_get_block_status(const struct snand_mtd_dev *nand, in snanddev_bbt_get_block_status() argument
378 unsigned long *pos = nand->bbt.cache + in snanddev_bbt_get_block_status()
384 if (nand->bbt.option & NANDDEV_BBT_USE_FLASH && in snanddev_bbt_get_block_status()
385 !(nand->bbt.option & NANDDEV_BBT_SCANNED)) in snanddev_bbt_get_block_status()
386 nanddev_scan_bbt((struct snand_mtd_dev *)nand); in snanddev_bbt_get_block_status()
389 if (entry >= snanddev_neraseblocks(nand)) in snanddev_bbt_get_block_status()
403 * @nand: nand device
408 * the NAND you should call nanddev_bbt_update().
413 int snanddev_bbt_set_block_status(struct snand_mtd_dev *nand, in snanddev_bbt_set_block_status() argument
418 unsigned long *pos = nand->bbt.cache + in snanddev_bbt_set_block_status()
423 if (entry >= snanddev_neraseblocks(nand)) in snanddev_bbt_set_block_status()