Lines Matching refs:mtd
67 static int cfi_intelext_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len);
68 static int cfi_intelext_unlock(struct mtd_info *mtd, loff_t ofs, uint64_t len);
69 static int cfi_intelext_is_locked(struct mtd_info *mtd, loff_t ofs,
92 static int cfi_intelext_point (struct mtd_info *mtd, loff_t from, size_t len,
94 static int cfi_intelext_unpoint(struct mtd_info *mtd, loff_t from, size_t len);
169 static void fixup_convert_atmel_pri(struct mtd_info *mtd) in fixup_convert_atmel_pri() argument
171 struct map_info *map = mtd->priv; in fixup_convert_atmel_pri()
209 static void fixup_at49bv640dx_lock(struct mtd_info *mtd) in fixup_at49bv640dx_lock() argument
211 struct map_info *map = mtd->priv; in fixup_at49bv640dx_lock()
216 mtd->flags |= MTD_POWERUP_LOCK; in fixup_at49bv640dx_lock()
221 static void fixup_intel_strataflash(struct mtd_info *mtd) in fixup_intel_strataflash() argument
223 struct map_info *map = mtd->priv; in fixup_intel_strataflash()
234 static void fixup_no_write_suspend(struct mtd_info *mtd) in fixup_no_write_suspend() argument
236 struct map_info *map = mtd->priv; in fixup_no_write_suspend()
247 static void fixup_st_m28w320ct(struct mtd_info *mtd) in fixup_st_m28w320ct() argument
249 struct map_info *map = mtd->priv; in fixup_st_m28w320ct()
256 static void fixup_st_m28w320cb(struct mtd_info *mtd) in fixup_st_m28w320cb() argument
258 struct map_info *map = mtd->priv; in fixup_st_m28w320cb()
276 static void fixup_LH28F640BF(struct mtd_info *mtd) in fixup_LH28F640BF() argument
278 struct map_info *map = mtd->priv; in fixup_LH28F640BF()
296 static void fixup_use_point(struct mtd_info *mtd) in fixup_use_point() argument
298 struct map_info *map = mtd->priv; in fixup_use_point()
299 if (!mtd->_point && map_is_linear(map)) { in fixup_use_point()
300 mtd->_point = cfi_intelext_point; in fixup_use_point()
301 mtd->_unpoint = cfi_intelext_unpoint; in fixup_use_point()
305 static void fixup_use_write_buffers(struct mtd_info *mtd) in fixup_use_write_buffers() argument
307 struct map_info *map = mtd->priv; in fixup_use_write_buffers()
311 mtd->_write = cfi_intelext_write_buffers; in fixup_use_write_buffers()
312 mtd->_writev = cfi_intelext_writev; in fixup_use_write_buffers()
319 static void fixup_unlock_powerup_lock(struct mtd_info *mtd) in fixup_unlock_powerup_lock() argument
321 struct map_info *map = mtd->priv; in fixup_unlock_powerup_lock()
327 mtd->flags |= MTD_POWERUP_LOCK; in fixup_unlock_powerup_lock()
470 struct mtd_info *mtd; in cfi_cmdset_0001() local
473 mtd = kzalloc(sizeof(*mtd), GFP_KERNEL); in cfi_cmdset_0001()
474 if (!mtd) in cfi_cmdset_0001()
476 mtd->priv = map; in cfi_cmdset_0001()
477 mtd->type = MTD_NORFLASH; in cfi_cmdset_0001()
480 mtd->_erase = cfi_intelext_erase_varsize; in cfi_cmdset_0001()
481 mtd->_read = cfi_intelext_read; in cfi_cmdset_0001()
482 mtd->_write = cfi_intelext_write_words; in cfi_cmdset_0001()
483 mtd->_sync = cfi_intelext_sync; in cfi_cmdset_0001()
484 mtd->_lock = cfi_intelext_lock; in cfi_cmdset_0001()
485 mtd->_unlock = cfi_intelext_unlock; in cfi_cmdset_0001()
486 mtd->_is_locked = cfi_intelext_is_locked; in cfi_cmdset_0001()
487 mtd->_suspend = cfi_intelext_suspend; in cfi_cmdset_0001()
488 mtd->_resume = cfi_intelext_resume; in cfi_cmdset_0001()
489 mtd->flags = MTD_CAP_NORFLASH; in cfi_cmdset_0001()
490 mtd->name = map->name; in cfi_cmdset_0001()
491 mtd->writesize = 1; in cfi_cmdset_0001()
492 mtd->writebufsize = cfi_interleave(cfi) << cfi->cfiq->MaxBufWriteSize; in cfi_cmdset_0001()
494 mtd->reboot_notifier.notifier_call = cfi_intelext_reboot; in cfi_cmdset_0001()
507 kfree(mtd); in cfi_cmdset_0001()
514 cfi_fixup(mtd, cfi_fixup_table); in cfi_cmdset_0001()
527 cfi_fixup(mtd, jedec_fixup_table); in cfi_cmdset_0001()
530 cfi_fixup(mtd, fixup_table); in cfi_cmdset_0001()
578 return cfi_intelext_setup(mtd); in cfi_cmdset_0001()
586 static struct mtd_info *cfi_intelext_setup(struct mtd_info *mtd) in cfi_intelext_setup() argument
588 struct map_info *map = mtd->priv; in cfi_intelext_setup()
596 mtd->size = devsize * cfi->numchips; in cfi_intelext_setup()
598 mtd->numeraseregions = cfi->cfiq->NumEraseRegions * cfi->numchips; in cfi_intelext_setup()
599 mtd->eraseregions = kmalloc(sizeof(struct mtd_erase_region_info) in cfi_intelext_setup()
600 * mtd->numeraseregions, GFP_KERNEL); in cfi_intelext_setup()
601 if (!mtd->eraseregions) in cfi_intelext_setup()
609 if (mtd->erasesize < ersize) { in cfi_intelext_setup()
610 mtd->erasesize = ersize; in cfi_intelext_setup()
613 mtd->eraseregions[(j*cfi->cfiq->NumEraseRegions)+i].offset = (j*devsize)+offset; in cfi_intelext_setup()
614 mtd->eraseregions[(j*cfi->cfiq->NumEraseRegions)+i].erasesize = ersize; in cfi_intelext_setup()
615 mtd->eraseregions[(j*cfi->cfiq->NumEraseRegions)+i].numblocks = ernum; in cfi_intelext_setup()
616 mtd->eraseregions[(j*cfi->cfiq->NumEraseRegions)+i].lockmap = kmalloc(ernum / 8 + 1, GFP_KERNEL); in cfi_intelext_setup()
627 for (i=0; i<mtd->numeraseregions;i++){ in cfi_intelext_setup()
629 i,(unsigned long long)mtd->eraseregions[i].offset, in cfi_intelext_setup()
630 mtd->eraseregions[i].erasesize, in cfi_intelext_setup()
631 mtd->eraseregions[i].numblocks); in cfi_intelext_setup()
635 mtd->_read_fact_prot_reg = cfi_intelext_read_fact_prot_reg; in cfi_intelext_setup()
636 mtd->_read_user_prot_reg = cfi_intelext_read_user_prot_reg; in cfi_intelext_setup()
637 mtd->_write_user_prot_reg = cfi_intelext_write_user_prot_reg; in cfi_intelext_setup()
638 mtd->_lock_user_prot_reg = cfi_intelext_lock_user_prot_reg; in cfi_intelext_setup()
639 mtd->_get_fact_prot_info = cfi_intelext_get_fact_prot_info; in cfi_intelext_setup()
640 mtd->_get_user_prot_info = cfi_intelext_get_user_prot_info; in cfi_intelext_setup()
645 if (cfi_intelext_partition_fixup(mtd, &cfi) != 0) in cfi_intelext_setup()
649 register_reboot_notifier(&mtd->reboot_notifier); in cfi_intelext_setup()
650 return mtd; in cfi_intelext_setup()
653 kfree(mtd->eraseregions); in cfi_intelext_setup()
654 kfree(mtd); in cfi_intelext_setup()
659 static int cfi_intelext_partition_fixup(struct mtd_info *mtd, in cfi_intelext_partition_fixup() argument
662 struct map_info *map = mtd->priv; in cfi_intelext_partition_fixup()
717 mtd->writesize = cfi->interleave << prinfo->ProgRegShift; in cfi_intelext_partition_fixup()
718 mtd->flags &= ~MTD_BIT_WRITEABLE; in cfi_intelext_partition_fixup()
720 map->name, mtd->writesize, in cfi_intelext_partition_fixup()
732 if ((1 << partshift) < mtd->erasesize) { in cfi_intelext_partition_fixup()
1348 static int cfi_intelext_point(struct mtd_info *mtd, loff_t from, size_t len, in cfi_intelext_point() argument
1351 struct map_info *map = mtd->priv; in cfi_intelext_point()
1401 static int cfi_intelext_unpoint(struct mtd_info *mtd, loff_t from, size_t len) in cfi_intelext_unpoint() argument
1403 struct map_info *map = mtd->priv; in cfi_intelext_unpoint()
1480 static int cfi_intelext_read (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char… in cfi_intelext_read() argument
1482 struct map_info *map = mtd->priv; in cfi_intelext_read()
1592 static int cfi_intelext_write_words (struct mtd_info *mtd, loff_t to , size_t len, size_t *retlen, … in cfi_intelext_write_words() argument
1594 struct map_info *map = mtd->priv; in cfi_intelext_write_words()
1837 static int cfi_intelext_writev (struct mtd_info *mtd, const struct kvec *vecs, in cfi_intelext_writev() argument
1840 struct map_info *map = mtd->priv; in cfi_intelext_writev()
1889 static int cfi_intelext_write_buffers (struct mtd_info *mtd, loff_t to, in cfi_intelext_write_buffers() argument
1897 return cfi_intelext_writev(mtd, &vec, 1, to, retlen); in cfi_intelext_write_buffers()
1988 static int cfi_intelext_erase_varsize(struct mtd_info *mtd, struct erase_info *instr) in cfi_intelext_erase_varsize() argument
1996 ret = cfi_varsize_frob(mtd, do_erase_oneblock, ofs, len, NULL); in cfi_intelext_erase_varsize()
2006 static void cfi_intelext_sync (struct mtd_info *mtd) in cfi_intelext_sync() argument
2008 struct map_info *map = mtd->priv; in cfi_intelext_sync()
2139 static int cfi_intelext_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len) in cfi_intelext_lock() argument
2146 cfi_varsize_frob(mtd, do_printlockstatus_oneblock, in cfi_intelext_lock()
2150 ret = cfi_varsize_frob(mtd, do_xxlock_oneblock, in cfi_intelext_lock()
2156 cfi_varsize_frob(mtd, do_printlockstatus_oneblock, in cfi_intelext_lock()
2163 static int cfi_intelext_unlock(struct mtd_info *mtd, loff_t ofs, uint64_t len) in cfi_intelext_unlock() argument
2170 cfi_varsize_frob(mtd, do_printlockstatus_oneblock, in cfi_intelext_unlock()
2174 ret = cfi_varsize_frob(mtd, do_xxlock_oneblock, in cfi_intelext_unlock()
2180 cfi_varsize_frob(mtd, do_printlockstatus_oneblock, in cfi_intelext_unlock()
2187 static int cfi_intelext_is_locked(struct mtd_info *mtd, loff_t ofs, in cfi_intelext_is_locked() argument
2190 return cfi_varsize_frob(mtd, do_getlockstatus_oneblock, in cfi_intelext_is_locked()
2274 static int cfi_intelext_otp_walk(struct mtd_info *mtd, loff_t from, size_t len, in cfi_intelext_otp_walk() argument
2278 struct map_info *map = mtd->priv; in cfi_intelext_otp_walk()
2408 static int cfi_intelext_read_fact_prot_reg(struct mtd_info *mtd, loff_t from, in cfi_intelext_read_fact_prot_reg() argument
2412 return cfi_intelext_otp_walk(mtd, from, len, retlen, in cfi_intelext_read_fact_prot_reg()
2416 static int cfi_intelext_read_user_prot_reg(struct mtd_info *mtd, loff_t from, in cfi_intelext_read_user_prot_reg() argument
2420 return cfi_intelext_otp_walk(mtd, from, len, retlen, in cfi_intelext_read_user_prot_reg()
2424 static int cfi_intelext_write_user_prot_reg(struct mtd_info *mtd, loff_t from, in cfi_intelext_write_user_prot_reg() argument
2428 return cfi_intelext_otp_walk(mtd, from, len, retlen, in cfi_intelext_write_user_prot_reg()
2432 static int cfi_intelext_lock_user_prot_reg(struct mtd_info *mtd, in cfi_intelext_lock_user_prot_reg() argument
2436 return cfi_intelext_otp_walk(mtd, from, len, &retlen, in cfi_intelext_lock_user_prot_reg()
2440 static int cfi_intelext_get_fact_prot_info(struct mtd_info *mtd, size_t len, in cfi_intelext_get_fact_prot_info() argument
2444 return cfi_intelext_otp_walk(mtd, 0, len, retlen, (u_char *)buf, in cfi_intelext_get_fact_prot_info()
2448 static int cfi_intelext_get_user_prot_info(struct mtd_info *mtd, size_t len, in cfi_intelext_get_user_prot_info() argument
2451 return cfi_intelext_otp_walk(mtd, 0, len, retlen, (u_char *)buf, in cfi_intelext_get_user_prot_info()
2457 static void cfi_intelext_save_locks(struct mtd_info *mtd) in cfi_intelext_save_locks() argument
2464 for (i = 0; i < mtd->numeraseregions; i++) { in cfi_intelext_save_locks()
2465 region = &mtd->eraseregions[i]; in cfi_intelext_save_locks()
2473 status = cfi_varsize_frob(mtd, in cfi_intelext_save_locks()
2483 static int cfi_intelext_suspend(struct mtd_info *mtd) in cfi_intelext_suspend() argument
2485 struct map_info *map = mtd->priv; in cfi_intelext_suspend()
2492 if ((mtd->flags & MTD_POWERUP_LOCK) in cfi_intelext_suspend()
2494 cfi_intelext_save_locks(mtd); in cfi_intelext_suspend()
2557 static void cfi_intelext_restore_locks(struct mtd_info *mtd) in cfi_intelext_restore_locks() argument
2564 for (i = 0; i < mtd->numeraseregions; i++) { in cfi_intelext_restore_locks()
2565 region = &mtd->eraseregions[i]; in cfi_intelext_restore_locks()
2572 cfi_intelext_unlock(mtd, adr, len); in cfi_intelext_restore_locks()
2577 static void cfi_intelext_resume(struct mtd_info *mtd) in cfi_intelext_resume() argument
2579 struct map_info *map = mtd->priv; in cfi_intelext_resume()
2594 fixup_LH28F640BF(mtd); in cfi_intelext_resume()
2603 if ((mtd->flags & MTD_POWERUP_LOCK) in cfi_intelext_resume()
2605 cfi_intelext_restore_locks(mtd); in cfi_intelext_resume()
2608 static int cfi_intelext_reset(struct mtd_info *mtd) in cfi_intelext_reset() argument
2610 struct map_info *map = mtd->priv; in cfi_intelext_reset()
2636 struct mtd_info *mtd; in cfi_intelext_reboot() local
2638 mtd = container_of(nb, struct mtd_info, reboot_notifier); in cfi_intelext_reboot()
2639 cfi_intelext_reset(mtd); in cfi_intelext_reboot()
2643 static void cfi_intelext_destroy(struct mtd_info *mtd) in cfi_intelext_destroy() argument
2645 struct map_info *map = mtd->priv; in cfi_intelext_destroy()
2649 cfi_intelext_reset(mtd); in cfi_intelext_destroy()
2650 unregister_reboot_notifier(&mtd->reboot_notifier); in cfi_intelext_destroy()
2655 for (i = 0; i < mtd->numeraseregions; i++) { in cfi_intelext_destroy()
2656 region = &mtd->eraseregions[i]; in cfi_intelext_destroy()
2659 kfree(mtd->eraseregions); in cfi_intelext_destroy()