Lines Matching defs:mtd

35 #include <linux/mtd/map.h>
36 #include <linux/mtd/mtd.h>
37 #include <linux/mtd/cfi.h>
38 #include <linux/mtd/xip.h>
89 static int cfi_amdstd_panic_write(struct mtd_info *mtd, loff_t to, size_t len,
101 static int cfi_atmel_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len);
102 static int cfi_atmel_unlock(struct mtd_info *mtd, loff_t ofs, uint64_t len);
104 static int cfi_ppb_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len);
105 static int cfi_ppb_unlock(struct mtd_info *mtd, loff_t ofs, uint64_t len);
106 static int cfi_ppb_is_locked(struct mtd_info *mtd, loff_t ofs, uint64_t len);
224 static void fixup_amd_bootblock(struct mtd_info *mtd)
226 struct map_info *map = mtd->priv;
274 static void fixup_use_write_buffers(struct mtd_info *mtd)
276 struct map_info *map = mtd->priv;
284 mtd->_write = cfi_amdstd_write_buffers;
290 static void fixup_convert_atmel_pri(struct mtd_info *mtd)
292 struct map_info *map = mtd->priv;
321 static void fixup_use_secsi(struct mtd_info *mtd)
324 mtd->_read_user_prot_reg = cfi_amdstd_secsi_read;
325 mtd->_read_fact_prot_reg = cfi_amdstd_secsi_read;
328 static void fixup_use_erase_chip(struct mtd_info *mtd)
330 struct map_info *map = mtd->priv;
334 mtd->_erase = cfi_amdstd_erase_chip;
343 static void fixup_use_atmel_lock(struct mtd_info *mtd)
345 mtd->_lock = cfi_atmel_lock;
346 mtd->_unlock = cfi_atmel_unlock;
347 mtd->flags |= MTD_POWERUP_LOCK;
350 static void fixup_old_sst_eraseregion(struct mtd_info *mtd)
352 struct map_info *map = mtd->priv;
364 static void fixup_sst39vf(struct mtd_info *mtd)
366 struct map_info *map = mtd->priv;
369 fixup_old_sst_eraseregion(mtd);
375 static void fixup_sst39vf_rev_b(struct mtd_info *mtd)
377 struct map_info *map = mtd->priv;
380 fixup_old_sst_eraseregion(mtd);
388 static void fixup_sst38vf640x_sectorsize(struct mtd_info *mtd)
390 struct map_info *map = mtd->priv;
393 fixup_sst39vf_rev_b(mtd);
401 mtd->name);
404 static void fixup_s29gl064n_sectors(struct mtd_info *mtd)
406 struct map_info *map = mtd->priv;
412 mtd->name);
416 static void fixup_s29gl032n_sectors(struct mtd_info *mtd)
418 struct map_info *map = mtd->priv;
424 mtd->name);
428 static void fixup_s29ns512p_sectors(struct mtd_info *mtd)
430 struct map_info *map = mtd->priv;
439 mtd->name);
442 static void fixup_quirks(struct mtd_info *mtd)
444 struct map_info *map = mtd->priv;
604 struct mtd_info *mtd;
607 mtd = kzalloc(sizeof(*mtd), GFP_KERNEL);
608 if (!mtd)
610 mtd->priv = map;
611 mtd->type = MTD_NORFLASH;
613 /* Fill in the default mtd operations */
614 mtd->_erase = cfi_amdstd_erase_varsize;
615 mtd->_write = cfi_amdstd_write_words;
616 mtd->_read = cfi_amdstd_read;
617 mtd->_sync = cfi_amdstd_sync;
618 mtd->_suspend = cfi_amdstd_suspend;
619 mtd->_resume = cfi_amdstd_resume;
620 mtd->_read_user_prot_reg = cfi_amdstd_read_user_prot_reg;
621 mtd->_read_fact_prot_reg = cfi_amdstd_read_fact_prot_reg;
622 mtd->_get_fact_prot_info = cfi_amdstd_get_fact_prot_info;
623 mtd->_get_user_prot_info = cfi_amdstd_get_user_prot_info;
624 mtd->_write_user_prot_reg = cfi_amdstd_write_user_prot_reg;
625 mtd->_lock_user_prot_reg = cfi_amdstd_lock_user_prot_reg;
626 mtd->flags = MTD_CAP_NORFLASH;
627 mtd->name = map->name;
628 mtd->writesize = 1;
629 mtd->writebufsize = cfi_interleave(cfi) << cfi->cfiq->MaxBufWriteSize;
632 mtd->writebufsize);
634 mtd->_panic_write = cfi_amdstd_panic_write;
635 mtd->reboot_notifier.notifier_call = cfi_amdstd_reboot;
664 kfree(mtd);
675 cfi_fixup(mtd, cfi_fixup_table);
687 mtd->_lock = cfi_ppb_lock;
688 mtd->_unlock = cfi_ppb_unlock;
689 mtd->_is_locked = cfi_ppb_is_locked;
715 cfi_fixup(mtd, cfi_nopri_fixup_table);
718 kfree(mtd);
725 cfi_fixup(mtd, jedec_fixup_table);
728 cfi_fixup(mtd, fixup_table);
757 return cfi_amdstd_setup(mtd);
765 static struct mtd_info *cfi_amdstd_setup(struct mtd_info *mtd)
767 struct map_info *map = mtd->priv;
776 mtd->size = devsize * cfi->numchips;
778 mtd->numeraseregions = cfi->cfiq->NumEraseRegions * cfi->numchips;
779 mtd->eraseregions = kmalloc_array(mtd->numeraseregions,
782 if (!mtd->eraseregions)
790 if (mtd->erasesize < ersize) {
791 mtd->erasesize = ersize;
794 mtd->eraseregions[(j*cfi->cfiq->NumEraseRegions)+i].offset = (j*devsize)+offset;
795 mtd->eraseregions[(j*cfi->cfiq->NumEraseRegions)+i].erasesize = ersize;
796 mtd->eraseregions[(j*cfi->cfiq->NumEraseRegions)+i].numblocks = ernum;
807 register_reboot_notifier(&mtd->reboot_notifier);
808 return mtd;
811 kfree(mtd->eraseregions);
812 kfree(mtd);
1235 static int cfi_amdstd_read (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf)
1237 struct map_info *map = mtd->priv;
1343 static int cfi_amdstd_secsi_read (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf)
1345 struct map_info *map = mtd->priv;
1480 static int cfi_amdstd_otp_walk(struct mtd_info *mtd, loff_t from, size_t len,
1484 struct map_info *map = mtd->priv;
1598 static int cfi_amdstd_get_fact_prot_info(struct mtd_info *mtd, size_t len,
1601 return cfi_amdstd_otp_walk(mtd, 0, len, retlen, (u_char *)buf,
1605 static int cfi_amdstd_get_user_prot_info(struct mtd_info *mtd, size_t len,
1608 return cfi_amdstd_otp_walk(mtd, 0, len, retlen, (u_char *)buf,
1612 static int cfi_amdstd_read_fact_prot_reg(struct mtd_info *mtd, loff_t from,
1616 return cfi_amdstd_otp_walk(mtd, from, len, retlen,
1620 static int cfi_amdstd_read_user_prot_reg(struct mtd_info *mtd, loff_t from,
1624 return cfi_amdstd_otp_walk(mtd, from, len, retlen,
1628 static int cfi_amdstd_write_user_prot_reg(struct mtd_info *mtd, loff_t from,
1632 return cfi_amdstd_otp_walk(mtd, from, len, retlen, (u_char *)buf,
1636 static int cfi_amdstd_lock_user_prot_reg(struct mtd_info *mtd, loff_t from,
1640 return cfi_amdstd_otp_walk(mtd, from, len, &retlen, NULL,
1815 static int cfi_amdstd_write_words(struct mtd_info *mtd, loff_t to, size_t len,
1818 struct map_info *map = mtd->priv;
2095 static int cfi_amdstd_write_buffers(struct mtd_info *mtd, loff_t to, size_t len,
2098 struct map_info *map = mtd->priv;
2113 ret = cfi_amdstd_write_words(mtd, ofs + (chipnum<<cfi->chipshift),
2160 ret = cfi_amdstd_write_words(mtd, ofs + (chipnum<<cfi->chipshift),
2307 static int cfi_amdstd_panic_write(struct mtd_info *mtd, loff_t to, size_t len,
2310 struct map_info *map = mtd->priv;
2611 static int cfi_amdstd_erase_varsize(struct mtd_info *mtd, struct erase_info *instr)
2613 return cfi_varsize_frob(mtd, do_erase_oneblock, instr->addr,
2618 static int cfi_amdstd_erase_chip(struct mtd_info *mtd, struct erase_info *instr)
2620 struct map_info *map = mtd->priv;
2626 if (instr->len != mtd->size)
2694 static int cfi_atmel_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len)
2696 return cfi_varsize_frob(mtd, do_atmel_lock, ofs, len, NULL);
2699 static int cfi_atmel_unlock(struct mtd_info *mtd, loff_t ofs, uint64_t len)
2701 return cfi_varsize_frob(mtd, do_atmel_unlock, ofs, len, NULL);
2791 static int __maybe_unused cfi_ppb_lock(struct mtd_info *mtd, loff_t ofs,
2794 return cfi_varsize_frob(mtd, do_ppb_xxlock, ofs, len,
2798 static int __maybe_unused cfi_ppb_unlock(struct mtd_info *mtd, loff_t ofs,
2801 struct mtd_erase_region_info *regions = mtd->eraseregions;
2802 struct map_info *map = mtd->priv;
2821 for (i = 0; i < mtd->numeraseregions; i++)
2837 length = mtd->size;
2882 ret = cfi_varsize_frob(mtd, do_ppb_xxlock, ofs, len,
2903 static int __maybe_unused cfi_ppb_is_locked(struct mtd_info *mtd, loff_t ofs,
2906 return cfi_varsize_frob(mtd, do_ppb_xxlock, ofs, len,
2910 static void cfi_amdstd_sync (struct mtd_info *mtd)
2912 struct map_info *map = mtd->priv;
2972 static int cfi_amdstd_suspend(struct mtd_info *mtd)
2974 struct map_info *map = mtd->priv;
3027 static void cfi_amdstd_resume(struct mtd_info *mtd)
3029 struct map_info *map = mtd->priv;
3059 static int cfi_amdstd_reset(struct mtd_info *mtd)
3061 struct map_info *map = mtd->priv;
3089 struct mtd_info *mtd;
3091 mtd = container_of(nb, struct mtd_info, reboot_notifier);
3092 cfi_amdstd_reset(mtd);
3097 static void cfi_amdstd_destroy(struct mtd_info *mtd)
3099 struct map_info *map = mtd->priv;
3102 cfi_amdstd_reset(mtd);
3103 unregister_reboot_notifier(&mtd->reboot_notifier);
3107 kfree(mtd->eraseregions);