Lines Matching defs:mtd

37 #include <linux/mtd/map.h>
38 #include <linux/mtd/mtd.h>
39 #include <linux/mtd/cfi.h>
40 #include <linux/mtd/xip.h>
90 static int cfi_amdstd_panic_write(struct mtd_info *mtd, loff_t to, size_t len,
102 static int cfi_atmel_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len);
103 static int cfi_atmel_unlock(struct mtd_info *mtd, loff_t ofs, uint64_t len);
105 static int cfi_ppb_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len);
106 static int cfi_ppb_unlock(struct mtd_info *mtd, loff_t ofs, uint64_t len);
107 static int cfi_ppb_is_locked(struct mtd_info *mtd, loff_t ofs, uint64_t len);
225 static void fixup_amd_bootblock(struct mtd_info *mtd)
227 struct map_info *map = mtd->priv;
275 static void fixup_use_write_buffers(struct mtd_info *mtd)
277 struct map_info *map = mtd->priv;
281 mtd->_write = cfi_amdstd_write_buffers;
287 static void fixup_convert_atmel_pri(struct mtd_info *mtd)
289 struct map_info *map = mtd->priv;
318 static void fixup_use_secsi(struct mtd_info *mtd)
321 mtd->_read_user_prot_reg = cfi_amdstd_secsi_read;
322 mtd->_read_fact_prot_reg = cfi_amdstd_secsi_read;
325 static void fixup_use_erase_chip(struct mtd_info *mtd)
327 struct map_info *map = mtd->priv;
331 mtd->_erase = cfi_amdstd_erase_chip;
340 static void fixup_use_atmel_lock(struct mtd_info *mtd)
342 mtd->_lock = cfi_atmel_lock;
343 mtd->_unlock = cfi_atmel_unlock;
344 mtd->flags |= MTD_POWERUP_LOCK;
347 static void fixup_old_sst_eraseregion(struct mtd_info *mtd)
349 struct map_info *map = mtd->priv;
361 static void fixup_sst39vf(struct mtd_info *mtd)
363 struct map_info *map = mtd->priv;
366 fixup_old_sst_eraseregion(mtd);
372 static void fixup_sst39vf_rev_b(struct mtd_info *mtd)
374 struct map_info *map = mtd->priv;
377 fixup_old_sst_eraseregion(mtd);
385 static void fixup_sst38vf640x_sectorsize(struct mtd_info *mtd)
387 struct map_info *map = mtd->priv;
390 fixup_sst39vf_rev_b(mtd);
398 mtd->name);
401 static void fixup_s29gl064n_sectors(struct mtd_info *mtd)
403 struct map_info *map = mtd->priv;
409 mtd->name);
413 static void fixup_s29gl032n_sectors(struct mtd_info *mtd)
415 struct map_info *map = mtd->priv;
421 mtd->name);
425 static void fixup_s29ns512p_sectors(struct mtd_info *mtd)
427 struct map_info *map = mtd->priv;
436 mtd->name);
439 static void fixup_quirks(struct mtd_info *mtd)
441 struct map_info *map = mtd->priv;
601 struct mtd_info *mtd;
604 mtd = kzalloc(sizeof(*mtd), GFP_KERNEL);
605 if (!mtd)
607 mtd->priv = map;
608 mtd->type = MTD_NORFLASH;
610 /* Fill in the default mtd operations */
611 mtd->_erase = cfi_amdstd_erase_varsize;
612 mtd->_write = cfi_amdstd_write_words;
613 mtd->_read = cfi_amdstd_read;
614 mtd->_sync = cfi_amdstd_sync;
615 mtd->_suspend = cfi_amdstd_suspend;
616 mtd->_resume = cfi_amdstd_resume;
617 mtd->_read_user_prot_reg = cfi_amdstd_read_user_prot_reg;
618 mtd->_read_fact_prot_reg = cfi_amdstd_read_fact_prot_reg;
619 mtd->_get_fact_prot_info = cfi_amdstd_get_fact_prot_info;
620 mtd->_get_user_prot_info = cfi_amdstd_get_user_prot_info;
621 mtd->_write_user_prot_reg = cfi_amdstd_write_user_prot_reg;
622 mtd->_lock_user_prot_reg = cfi_amdstd_lock_user_prot_reg;
623 mtd->flags = MTD_CAP_NORFLASH;
624 mtd->name = map->name;
625 mtd->writesize = 1;
626 mtd->writebufsize = cfi_interleave(cfi) << cfi->cfiq->MaxBufWriteSize;
629 mtd->writebufsize);
631 mtd->_panic_write = cfi_amdstd_panic_write;
632 mtd->reboot_notifier.notifier_call = cfi_amdstd_reboot;
661 kfree(mtd);
672 cfi_fixup(mtd, cfi_fixup_table);
684 mtd->_lock = cfi_ppb_lock;
685 mtd->_unlock = cfi_ppb_unlock;
686 mtd->_is_locked = cfi_ppb_is_locked;
712 cfi_fixup(mtd, cfi_nopri_fixup_table);
715 kfree(mtd);
722 cfi_fixup(mtd, jedec_fixup_table);
725 cfi_fixup(mtd, fixup_table);
754 return cfi_amdstd_setup(mtd);
762 static struct mtd_info *cfi_amdstd_setup(struct mtd_info *mtd)
764 struct map_info *map = mtd->priv;
773 mtd->size = devsize * cfi->numchips;
775 mtd->numeraseregions = cfi->cfiq->NumEraseRegions * cfi->numchips;
776 mtd->eraseregions = kmalloc_array(mtd->numeraseregions,
779 if (!mtd->eraseregions)
787 if (mtd->erasesize < ersize) {
788 mtd->erasesize = ersize;
791 mtd->eraseregions[(j*cfi->cfiq->NumEraseRegions)+i].offset = (j*devsize)+offset;
792 mtd->eraseregions[(j*cfi->cfiq->NumEraseRegions)+i].erasesize = ersize;
793 mtd->eraseregions[(j*cfi->cfiq->NumEraseRegions)+i].numblocks = ernum;
804 register_reboot_notifier(&mtd->reboot_notifier);
805 return mtd;
808 kfree(mtd->eraseregions);
809 kfree(mtd);
1231 static int cfi_amdstd_read (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf)
1233 struct map_info *map = mtd->priv;
1339 static int cfi_amdstd_secsi_read (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf)
1341 struct map_info *map = mtd->priv;
1476 static int cfi_amdstd_otp_walk(struct mtd_info *mtd, loff_t from, size_t len,
1480 struct map_info *map = mtd->priv;
1594 static int cfi_amdstd_get_fact_prot_info(struct mtd_info *mtd, size_t len,
1597 return cfi_amdstd_otp_walk(mtd, 0, len, retlen, (u_char *)buf,
1601 static int cfi_amdstd_get_user_prot_info(struct mtd_info *mtd, size_t len,
1604 return cfi_amdstd_otp_walk(mtd, 0, len, retlen, (u_char *)buf,
1608 static int cfi_amdstd_read_fact_prot_reg(struct mtd_info *mtd, loff_t from,
1612 return cfi_amdstd_otp_walk(mtd, from, len, retlen,
1616 static int cfi_amdstd_read_user_prot_reg(struct mtd_info *mtd, loff_t from,
1620 return cfi_amdstd_otp_walk(mtd, from, len, retlen,
1624 static int cfi_amdstd_write_user_prot_reg(struct mtd_info *mtd, loff_t from,
1628 return cfi_amdstd_otp_walk(mtd, from, len, retlen, buf,
1632 static int cfi_amdstd_lock_user_prot_reg(struct mtd_info *mtd, loff_t from,
1636 return cfi_amdstd_otp_walk(mtd, from, len, &retlen, NULL,
1811 static int cfi_amdstd_write_words(struct mtd_info *mtd, loff_t to, size_t len,
1814 struct map_info *map = mtd->priv;
2091 static int cfi_amdstd_write_buffers(struct mtd_info *mtd, loff_t to, size_t len,
2094 struct map_info *map = mtd->priv;
2109 ret = cfi_amdstd_write_words(mtd, ofs + (chipnum<<cfi->chipshift),
2156 ret = cfi_amdstd_write_words(mtd, ofs + (chipnum<<cfi->chipshift),
2303 static int cfi_amdstd_panic_write(struct mtd_info *mtd, loff_t to, size_t len,
2306 struct map_info *map = mtd->priv;
2607 static int cfi_amdstd_erase_varsize(struct mtd_info *mtd, struct erase_info *instr)
2609 return cfi_varsize_frob(mtd, do_erase_oneblock, instr->addr,
2614 static int cfi_amdstd_erase_chip(struct mtd_info *mtd, struct erase_info *instr)
2616 struct map_info *map = mtd->priv;
2622 if (instr->len != mtd->size)
2690 static int cfi_atmel_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len)
2692 return cfi_varsize_frob(mtd, do_atmel_lock, ofs, len, NULL);
2695 static int cfi_atmel_unlock(struct mtd_info *mtd, loff_t ofs, uint64_t len)
2697 return cfi_varsize_frob(mtd, do_atmel_unlock, ofs, len, NULL);
2787 static int __maybe_unused cfi_ppb_lock(struct mtd_info *mtd, loff_t ofs,
2790 return cfi_varsize_frob(mtd, do_ppb_xxlock, ofs, len,
2794 static int __maybe_unused cfi_ppb_unlock(struct mtd_info *mtd, loff_t ofs,
2797 struct mtd_erase_region_info *regions = mtd->eraseregions;
2798 struct map_info *map = mtd->priv;
2817 for (i = 0; i < mtd->numeraseregions; i++)
2833 length = mtd->size;
2878 ret = cfi_varsize_frob(mtd, do_ppb_xxlock, ofs, len,
2899 static int __maybe_unused cfi_ppb_is_locked(struct mtd_info *mtd, loff_t ofs,
2902 return cfi_varsize_frob(mtd, do_ppb_xxlock, ofs, len,
2906 static void cfi_amdstd_sync (struct mtd_info *mtd)
2908 struct map_info *map = mtd->priv;
2968 static int cfi_amdstd_suspend(struct mtd_info *mtd)
2970 struct map_info *map = mtd->priv;
3022 static void cfi_amdstd_resume(struct mtd_info *mtd)
3024 struct map_info *map = mtd->priv;
3054 static int cfi_amdstd_reset(struct mtd_info *mtd)
3056 struct map_info *map = mtd->priv;
3084 struct mtd_info *mtd;
3086 mtd = container_of(nb, struct mtd_info, reboot_notifier);
3087 cfi_amdstd_reset(mtd);
3092 static void cfi_amdstd_destroy(struct mtd_info *mtd)
3094 struct map_info *map = mtd->priv;
3097 cfi_amdstd_reset(mtd);
3098 unregister_reboot_notifier(&mtd->reboot_notifier);
3102 kfree(mtd->eraseregions);