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 int raw_access(struct mtd_info *mtd, ulong addr, loff_t off, in raw_access() argument
322 .oobbuf = ((u8 *)addr) + mtd->writesize, in raw_access()
323 .len = mtd->writesize, in raw_access()
324 .ooblen = mtd->oobsize, in raw_access()
329 ret = mtd_read_oob(mtd, off, &ops); in raw_access()
331 ret = mtd_write_oob(mtd, off, &ops); in raw_access()
333 ret = nand_verify_page_oob(mtd, &ops, off); in raw_access()
342 addr += mtd->writesize + mtd->oobsize; in raw_access()
343 off += mtd->writesize; in raw_access()
357 struct mtd_info *mtd = get_nand_dev_by_index(dev); in adjust_size_for_badblocks() local
362 for (; offset < maxoffset; offset += mtd->erasesize) { in adjust_size_for_badblocks()
363 if (nand_block_isbad(mtd, offset)) in adjust_size_for_badblocks()
368 *size -= badblocks * mtd->erasesize; in adjust_size_for_badblocks()
380 struct mtd_info *mtd; in do_nand() local
439 mtd = get_nand_dev_by_index(dev); in do_nand()
440 if (!mtd) { in do_nand()
447 for (off = 0; off < mtd->size; off += mtd->erasesize) in do_nand()
448 if (nand_block_isbad(mtd, off)) in do_nand()
502 mtd->size) != 0) in do_nand()
508 mtd = get_nand_dev_by_index(dev); in do_nand()
530 ret = nand_erase_opts(mtd, &opts); in do_nand()
541 ret = nand_dump(mtd, off, !strcmp(&cmd[4], ".oob"), repeat); in do_nand()
571 mtd->size)) in do_nand()
577 mtd = get_nand_dev_by_index(dev); in do_nand()
585 if (pagecount % (mtd->writesize + mtd->oobsize)) { in do_nand()
589 pagecount = pagecount / (mtd->writesize + mtd->oobsize); in do_nand()
592 if (pagecount * mtd->writesize > size) { in do_nand()
597 rwsize = pagecount * (mtd->writesize + mtd->oobsize); in do_nand()
602 mtd->size) != 0) in do_nand()
614 mtd = get_nand_dev_by_index(dev); in do_nand()
619 ret = nand_read_skip_bad(mtd, off, &rwsize, in do_nand()
623 ret = nand_write_skip_bad(mtd, off, &rwsize, in do_nand()
633 ret = nand_write_skip_bad(mtd, off, &rwsize, NULL, in do_nand()
646 ret = mtd_read_oob(mtd, off, &ops); in do_nand()
648 ret = mtd_write_oob(mtd, off, &ops); in do_nand()
650 ret = raw_access(mtd, addr, off, pagecount, read, in do_nand()
676 size = mtd->erasesize; in do_nand()
685 if (endoff > mtd->size) { in do_nand()
690 off = round_down(off, mtd->erasesize); in do_nand()
691 endoff = round_up(endoff, mtd->erasesize); in do_nand()
694 dev, off, size, mtd->erasesize); in do_nand()
696 ret = nand_torture(mtd, off); in do_nand()
703 off += mtd->erasesize; in do_nand()
720 if (mtd_block_markbad(mtd, addr)) { in do_nand()
752 do_nand_status(mtd); in do_nand()
754 if (!nand_lock(mtd, tight)) { in do_nand()
774 mtd->size) < 0) in do_nand()
780 mtd = get_nand_dev_by_index(dev); in do_nand()
782 if (!nand_unlock(mtd, off, size, allexcept)) { in do_nand()
851 static int nand_load_image(cmd_tbl_t *cmdtp, struct mtd_info *mtd, in nand_load_image() argument
872 printf("\nLoading from %s, offset 0x%lx\n", mtd->name, offset); in nand_load_image()
874 cnt = mtd->writesize; in nand_load_image()
875 r = nand_read_skip_bad(mtd, offset, &cnt, NULL, mtd->size, in nand_load_image()
910 r = nand_read_skip_bad(mtd, offset, &cnt, NULL, mtd->size, in nand_load_image()
945 struct mtd_info *mtd; in do_nandboot() local
966 mtd = get_nand_dev_by_index(dev->id->num); in do_nandboot()
967 return nand_load_image(cmdtp, mtd, part->offset, in do_nandboot()
1010 mtd = get_nand_dev_by_index(idx); in do_nandboot()
1011 if (!mtd) { in do_nandboot()
1018 return nand_load_image(cmdtp, mtd, offset, addr, argv[0]); in do_nandboot()