Lines Matching refs:mtd

50 	struct mtd_info *mtd = NULL;  in mtd_blk_map_table_init()  local
59 mtd = desc->bdev->priv; in mtd_blk_map_table_init()
65 if (!mtd) { in mtd_blk_map_table_init()
68 blk_total = (mtd->size + mtd->erasesize - 1) >> mtd->erasesize_shift; in mtd_blk_map_table_init()
77 blk_begin = (u32)offset >> mtd->erasesize_shift; in mtd_blk_map_table_init()
78 blk_cnt = ((u32)((offset & mtd->erasesize_mask) + length + \ in mtd_blk_map_table_init()
79 mtd->erasesize - 1) >> mtd->erasesize_shift); in mtd_blk_map_table_init()
96 if (!mtd_block_isbad(mtd, (blk_begin + j) << mtd->erasesize_shift)) { in mtd_blk_map_table_init()
110 static bool get_mtd_blk_map_address(struct mtd_info *mtd, loff_t *off) in get_mtd_blk_map_address() argument
114 size_t block_offset = offset & (mtd->erasesize - 1); in get_mtd_blk_map_address()
118 mtd_map_blk_table[(u64)offset >> mtd->erasesize_shift] == in get_mtd_blk_map_address()
120 mtd_map_blk_table[(u64)offset >> mtd->erasesize_shift] == in get_mtd_blk_map_address()
126 mtd->erasesize_shift] << mtd->erasesize_shift) + block_offset); in get_mtd_blk_map_address()
157 struct mtd_info *mtd = NULL; in mtd_blk_map_fit() local
165 mtd = dev_get_priv(desc->bdev->parent); in mtd_blk_map_fit()
169 mtd = desc->bdev->priv; in mtd_blk_map_fit()
177 if (mtd && totalsize) { in mtd_blk_map_fit()
178 if (mtd_blk_map_table_init(desc, sector << 9, totalsize + (size_t)mtd->erasesize)) in mtd_blk_map_fit()
183 static __maybe_unused int mtd_map_read(struct mtd_info *mtd, loff_t offset, in mtd_map_read() argument
199 size_t block_offset = offset & (mtd->erasesize - 1); in mtd_map_read()
203 if (offset >= mtd->size) in mtd_map_read()
207 if (!get_mtd_blk_map_address(mtd, &mapped_offset)) { in mtd_map_read()
208 if (mtd_block_isbad(mtd, mapped_offset & in mtd_map_read()
209 ~(mtd->erasesize - 1))) { in mtd_map_read()
211 (u32)(offset & ~(mtd->erasesize - 1))); in mtd_map_read()
212 offset += mtd->erasesize - block_offset; in mtd_map_read()
214 usbplug_dummy_partition_read_seek += mtd->erasesize; in mtd_map_read()
220 if (left_to_read < (mtd->erasesize - block_offset)) in mtd_map_read()
223 read_length = mtd->erasesize - block_offset; in mtd_map_read()
225 rval = mtd_read(mtd, mapped_offset, read_length, &read_length, in mtd_map_read()
242 static __maybe_unused int mtd_map_write(struct mtd_info *mtd, loff_t offset, in mtd_map_write() argument
251 blocksize = mtd->erasesize; in mtd_map_write()
271 if ((offset & (mtd->writesize - 1)) != 0) { in mtd_map_write()
278 size_t block_offset = offset & (mtd->erasesize - 1); in mtd_map_write()
282 if (offset >= mtd->size) in mtd_map_write()
286 if (!get_mtd_blk_map_address(mtd, &mapped_offset)) { in mtd_map_write()
287 if (mtd_block_isbad(mtd, mapped_offset & in mtd_map_write()
288 ~(mtd->erasesize - 1))) { in mtd_map_write()
290 (u32)(offset & ~(mtd->erasesize - 1))); in mtd_map_write()
291 offset += mtd->erasesize - block_offset; in mtd_map_write()
293 usbplug_dummy_partition_write_seek += mtd->erasesize; in mtd_map_write()
299 if (!(mapped_offset & mtd->erasesize_mask)) { in mtd_map_write()
302 ei.len = mtd->erasesize; in mtd_map_write()
303 rval = mtd_erase(mtd, &ei); in mtd_map_write()
317 rval = mtd_write(mtd, mapped_offset, truncated_write_size, in mtd_map_write()
336 static __maybe_unused int mtd_map_erase(struct mtd_info *mtd, loff_t offset, in mtd_map_erase() argument
346 if ((pos & mtd->erasesize_mask) || (len & mtd->erasesize_mask)) { in mtd_map_erase()
357 if (!get_mtd_blk_map_address(mtd, &mapped_offset)) { in mtd_map_erase()
358 if (mtd_block_isbad(mtd, pos) || mtd_block_isreserved(mtd, pos)) { in mtd_map_erase()
361 pos += mtd->erasesize; in mtd_map_erase()
368 ei.len = mtd->erasesize; in mtd_map_erase()
369 ret = mtd_erase(mtd, &ei); in mtd_map_erase()
376 pos += mtd->erasesize; in mtd_map_erase()
377 len -= mtd->erasesize; in mtd_map_erase()
389 struct mtd_info *mtd; in mtd_part_parse() local
400 mtd = (struct mtd_info *)dev_desc->bdev->priv; in mtd_part_parse()
401 if (!mtd) in mtd_part_parse()
461 (mtd->erasesize >> 9) - 1) << 9, in mtd_part_parse()
496 struct mtd_info *mtd; in mtd_dread() local
505 mtd = desc->bdev->priv; in mtd_dread()
506 if (!mtd) in mtd_dread()
516 ret = mtd_map_read(mtd, off, &rwsize, in mtd_dread()
517 NULL, mtd->size, in mtd_dread()
523 struct spinand_device *spinand = mtd_to_spinand(mtd); in mtd_dread()
529 ret = mtd_read(mtd, off, rwsize, in mtd_dread()
536 ret = mtd_read(mtd, off, rwsize, in mtd_dread()
540 ret = mtd_map_read(mtd, off, &rwsize, in mtd_dread()
541 NULL, mtd->size, in mtd_dread()
549 struct spi_nor *nor = (struct spi_nor *)mtd->priv; in mtd_dread()
555 ret = mtd_read(mtd, off, rwsize, &retlen_nor, dst); in mtd_dread()
565 …pr_err("mtd dread %s %lx %lx cost %ldus: %ldMB/s\n\n", mtd->name, start, blkcnt, us, (blkcnt / 2) … in mtd_dread()
567 pr_debug("mtd dread %s %lx %lx\n\n", mtd->name, start, blkcnt); in mtd_dread()
582 struct mtd_info *mtd; in mtd_dwrite() local
588 mtd = desc->bdev->priv; in mtd_dwrite()
589 if (!mtd) in mtd_dwrite()
592 pr_debug("mtd dwrite %s %lx %lx\n", mtd->name, start, blkcnt); in mtd_dwrite()
607 ret = mtd_map_write(mtd, off, &rwsize, in mtd_dwrite()
608 NULL, mtd->size, in mtd_dwrite()
619 alinged = off & mtd->erasesize_mask; in mtd_dwrite()
622 rwsize_aligned = (rwsize_aligned + mtd->erasesize - 1) & in mtd_dwrite()
623 ~(mtd->erasesize - 1); in mtd_dwrite()
631 ret = mtd_map_read(mtd, off_aligned, &rwsize_aligned, in mtd_dwrite()
632 NULL, mtd->size, in mtd_dwrite()
641 ret = mtd_map_write(mtd, off_aligned, &rwsize_aligned, in mtd_dwrite()
642 NULL, mtd->size, in mtd_dwrite()
665 struct mtd_info *mtd; in mtd_derase() local
671 mtd = desc->bdev->priv; in mtd_derase()
672 if (!mtd) in mtd_derase()
675 pr_debug("mtd derase %s %lx %lx\n", mtd->name, start, blkcnt); in mtd_derase()
676 len = round_up(len, mtd->erasesize); in mtd_derase()
684 ret = mtd_map_erase(mtd, off, len); in mtd_derase()
697 struct mtd_info *mtd; in mtd_blk_probe() local
701 mtd = dev_get_uclass_priv(udev->parent); in mtd_blk_probe()
702 if (mtd->type == MTD_NANDFLASH && desc->devnum == BLK_MTD_NAND) { in mtd_blk_probe()
704 mtd = dev_get_priv(udev->parent); in mtd_blk_probe()
709 if (is_power_of_2(mtd->erasesize)) in mtd_blk_probe()
710 mtd->erasesize_shift = ffs(mtd->erasesize) - 1; in mtd_blk_probe()
712 mtd->erasesize_shift = 0; in mtd_blk_probe()
714 if (is_power_of_2(mtd->writesize)) in mtd_blk_probe()
715 mtd->writesize_shift = ffs(mtd->writesize) - 1; in mtd_blk_probe()
717 mtd->writesize_shift = 0; in mtd_blk_probe()
719 mtd->erasesize_mask = (1 << mtd->erasesize_shift) - 1; in mtd_blk_probe()
720 mtd->writesize_mask = (1 << mtd->writesize_shift) - 1; in mtd_blk_probe()
722 desc->bdev->priv = mtd; in mtd_blk_probe()
724 if (strncmp(mtd->name, "nand", 4) == 0) in mtd_blk_probe()
727 memcpy(desc->product, mtd->name, strlen(mtd->name)); in mtd_blk_probe()
729 if (mtd->type == MTD_NANDFLASH) { in mtd_blk_probe()
743 for (; i < (mtd->size / mtd->erasesize); i++) { in mtd_blk_probe()
744 ret = mtd_block_isbad(mtd, in mtd_blk_probe()
745 mtd->size - mtd->erasesize * (i + 1)); in mtd_blk_probe()
747 desc->lba = (mtd->size >> 9) - in mtd_blk_probe()
748 (mtd->erasesize >> 9) * i; in mtd_blk_probe()
754 desc->lba = mtd->size >> 9; in mtd_blk_probe()