Lines Matching refs:mtd

41 static int nand_dump(struct mtd_info *mtd, ulong off, int only_oob,  in nand_dump()  argument
50 off = last + mtd->writesize; in nand_dump()
54 datbuf = memalign(ARCH_DMA_MINALIGN, mtd->writesize); in nand_dump()
60 oobbuf = memalign(ARCH_DMA_MINALIGN, mtd->oobsize); in nand_dump()
66 off &= ~(mtd->writesize - 1); in nand_dump()
72 ops.len = mtd->writesize; in nand_dump()
73 ops.ooblen = mtd->oobsize; in nand_dump()
75 i = mtd_read_oob(mtd, addr, &ops); in nand_dump()
84 i = mtd->writesize >> 4; in nand_dump()
98 i = mtd->oobsize >> 3; in nand_dump()
118 struct mtd_info *mtd = get_nand_dev_by_index(dev); in set_dev() local
120 if (!mtd) in set_dev()
126 printf("Device %d: %s", dev, mtd->name); in set_dev()
131 board_nand_select_device(mtd_to_nand(mtd), dev); in set_dev()
155 static void do_nand_status(struct mtd_info *mtd) in do_nand_status() argument
161 struct nand_chip *nand_chip = mtd_to_nand(mtd); in do_nand_status()
163 nand_chip->cmdfunc(mtd, NAND_CMD_STATUS, -1, -1); in do_nand_status()
165 (nand_chip->read_byte(mtd) & 0x80 ? in do_nand_status()
168 for (off = 0; off < mtd->size; off += mtd->erasesize) { in do_nand_status()
169 int s = nand_get_lock_status(mtd, off); in do_nand_status()
173 print_status(block_start, off, mtd->erasesize, in do_nand_status()
180 print_status(block_start, off, mtd->erasesize, last_status); in do_nand_status()
191 struct mtd_info *mtd = get_nand_dev_by_index(0); in do_nand_env_oob() local
194 if (CONFIG_SYS_MAX_NAND_DEVICE == 0 || !mtd) { in do_nand_env_oob()
202 ret = get_nand_env_oob(mtd, &nand_env_oob_offset); in do_nand_env_oob()
216 mtd = get_nand_dev_by_index(idx); in do_nand_env_oob()
219 MTD_DEV_TYPE_NAND, mtd->size)) { in do_nand_env_oob()
233 if (mtd->oobavail < ENV_OFFSET_SIZE) { in do_nand_env_oob()
237 mtd->oobavail, ENV_OFFSET_SIZE); in do_nand_env_oob()
241 if ((addr & (mtd->erasesize - 1)) != 0) { in do_nand_env_oob()
253 oob_buf[1] = addr / mtd->erasesize; in do_nand_env_oob()
255 ret = mtd->write_oob(mtd, ENV_OFFSET_SIZE, &ops); in do_nand_env_oob()
261 ret = get_nand_env_oob(mtd, &nand_env_oob_offset); in do_nand_env_oob()
287 struct mtd_info *mtd; in nand_print_and_set_info() local
290 mtd = get_nand_dev_by_index(idx); in nand_print_and_set_info()
291 if (!mtd) in nand_print_and_set_info()
294 chip = mtd_to_nand(mtd); in nand_print_and_set_info()
299 mtd->name, mtd->erasesize >> 10); in nand_print_and_set_info()
300 printf(" Page size %8d b\n", mtd->writesize); in nand_print_and_set_info()
301 printf(" OOB size %8d b\n", mtd->oobsize); in nand_print_and_set_info()
302 printf(" Erase size %8d b\n", mtd->erasesize); in nand_print_and_set_info()
308 env_set_hex("nand_writesize", mtd->writesize); in nand_print_and_set_info()
309 env_set_hex("nand_oobsize", mtd->oobsize); in nand_print_and_set_info()
310 env_set_hex("nand_erasesize", mtd->erasesize); in nand_print_and_set_info()
313 static bool mtd_is_aligned_with_block_size(struct mtd_info *mtd, u64 size) in mtd_is_aligned_with_block_size() argument
315 return !do_div(size, mtd->erasesize); in mtd_is_aligned_with_block_size()
318 static int raw_access(struct mtd_info *mtd, ulong addr, loff_t off, in raw_access() argument
323 while (count && (off + mtd->writesize) <= mtd->size) { in raw_access()
328 if (mtd_is_aligned_with_block_size(mtd, off) && in raw_access()
329 mtd_block_isbad(mtd, off)) { in raw_access()
331 off & ~(mtd->erasesize - 1)); in raw_access()
332 off += mtd->erasesize; in raw_access()
339 .oobbuf = ((u8 *)addr) + mtd->writesize, in raw_access()
340 .len = mtd->writesize, in raw_access()
341 .ooblen = mtd->oobsize, in raw_access()
346 ret = mtd_read_oob(mtd, off, &ops); in raw_access()
348 ret = mtd_write_oob(mtd, off, &ops); in raw_access()
350 ret = nand_verify_page_oob(mtd, &ops, off); in raw_access()
359 addr += mtd->writesize + mtd->oobsize; in raw_access()
360 off += mtd->writesize; in raw_access()
375 struct mtd_info *mtd = get_nand_dev_by_index(dev); in adjust_size_for_badblocks() local
380 for (; offset < maxoffset; offset += mtd->erasesize) { in adjust_size_for_badblocks()
381 if (nand_block_isbad(mtd, offset)) in adjust_size_for_badblocks()
386 *size -= badblocks * mtd->erasesize; in adjust_size_for_badblocks()
398 struct mtd_info *mtd; in do_nand() local
457 mtd = get_nand_dev_by_index(dev); in do_nand()
458 if (!mtd) { in do_nand()
465 for (off = 0; off < mtd->size; off += mtd->erasesize) in do_nand()
466 if (nand_block_isbad(mtd, off)) in do_nand()
520 mtd->size) != 0) in do_nand()
526 mtd = get_nand_dev_by_index(dev); in do_nand()
548 ret = nand_erase_opts(mtd, &opts); in do_nand()
559 ret = nand_dump(mtd, off, !strcmp(&cmd[4], ".oob"), repeat); in do_nand()
589 mtd->size)) in do_nand()
595 mtd = get_nand_dev_by_index(dev); in do_nand()
603 if (pagecount % (mtd->writesize + mtd->oobsize)) { in do_nand()
607 pagecount = pagecount / (mtd->writesize + mtd->oobsize); in do_nand()
610 if (pagecount * mtd->writesize > size) { in do_nand()
615 rwsize = pagecount * (mtd->writesize + mtd->oobsize); in do_nand()
620 mtd->size) != 0) in do_nand()
632 mtd = get_nand_dev_by_index(dev); in do_nand()
637 ret = nand_read_skip_bad(mtd, off, &rwsize, in do_nand()
641 ret = nand_write_skip_bad(mtd, off, &rwsize, in do_nand()
651 ret = nand_write_skip_bad(mtd, off, &rwsize, NULL, in do_nand()
664 ret = mtd_read_oob(mtd, off, &ops); in do_nand()
666 ret = mtd_write_oob(mtd, off, &ops); in do_nand()
668 ret = raw_access(mtd, addr, off, pagecount, read, in do_nand()
694 size = mtd->erasesize; in do_nand()
703 if (endoff > mtd->size) { in do_nand()
708 off = round_down(off, mtd->erasesize); in do_nand()
709 endoff = round_up(endoff, mtd->erasesize); in do_nand()
712 dev, off, size, mtd->erasesize); in do_nand()
714 ret = nand_torture(mtd, off); in do_nand()
721 off += mtd->erasesize; in do_nand()
738 if (mtd_block_markbad(mtd, addr)) { in do_nand()
770 do_nand_status(mtd); in do_nand()
772 if (!nand_lock(mtd, tight)) { in do_nand()
792 mtd->size) < 0) in do_nand()
798 mtd = get_nand_dev_by_index(dev); in do_nand()
800 if (!nand_unlock(mtd, off, size, allexcept)) { in do_nand()
870 static int nand_load_image(cmd_tbl_t *cmdtp, struct mtd_info *mtd, in nand_load_image() argument
891 printf("\nLoading from %s, offset 0x%lx\n", mtd->name, offset); in nand_load_image()
893 cnt = mtd->writesize; in nand_load_image()
894 r = nand_read_skip_bad(mtd, offset, &cnt, NULL, mtd->size, in nand_load_image()
929 r = nand_read_skip_bad(mtd, offset, &cnt, NULL, mtd->size, in nand_load_image()
964 struct mtd_info *mtd; in do_nandboot() local
985 mtd = get_nand_dev_by_index(dev->id->num); in do_nandboot()
986 return nand_load_image(cmdtp, mtd, part->offset, in do_nandboot()
1029 mtd = get_nand_dev_by_index(idx); in do_nandboot()
1030 if (!mtd) { in do_nandboot()
1037 return nand_load_image(cmdtp, mtd, offset, addr, argv[0]); in do_nandboot()