Lines Matching refs:mtd

74 static int cfi_amdstd_panic_write(struct mtd_info *mtd, loff_t to, size_t len,
86 static int cfi_atmel_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len);
87 static int cfi_atmel_unlock(struct mtd_info *mtd, loff_t ofs, uint64_t len);
89 static int cfi_ppb_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len);
90 static int cfi_ppb_unlock(struct mtd_info *mtd, loff_t ofs, uint64_t len);
91 static int cfi_ppb_is_locked(struct mtd_info *mtd, loff_t ofs, uint64_t len);
156 static void fixup_amd_bootblock(struct mtd_info *mtd) in fixup_amd_bootblock() argument
158 struct map_info *map = mtd->priv; in fixup_amd_bootblock()
205 static void fixup_use_write_buffers(struct mtd_info *mtd) in fixup_use_write_buffers() argument
207 struct map_info *map = mtd->priv; in fixup_use_write_buffers()
211 mtd->_write = cfi_amdstd_write_buffers; in fixup_use_write_buffers()
216 static void fixup_convert_atmel_pri(struct mtd_info *mtd) in fixup_convert_atmel_pri() argument
218 struct map_info *map = mtd->priv; in fixup_convert_atmel_pri()
247 static void fixup_use_secsi(struct mtd_info *mtd) in fixup_use_secsi() argument
250 mtd->_read_user_prot_reg = cfi_amdstd_secsi_read; in fixup_use_secsi()
251 mtd->_read_fact_prot_reg = cfi_amdstd_secsi_read; in fixup_use_secsi()
254 static void fixup_use_erase_chip(struct mtd_info *mtd) in fixup_use_erase_chip() argument
256 struct map_info *map = mtd->priv; in fixup_use_erase_chip()
260 mtd->_erase = cfi_amdstd_erase_chip; in fixup_use_erase_chip()
269 static void fixup_use_atmel_lock(struct mtd_info *mtd) in fixup_use_atmel_lock() argument
271 mtd->_lock = cfi_atmel_lock; in fixup_use_atmel_lock()
272 mtd->_unlock = cfi_atmel_unlock; in fixup_use_atmel_lock()
273 mtd->flags |= MTD_POWERUP_LOCK; in fixup_use_atmel_lock()
276 static void fixup_old_sst_eraseregion(struct mtd_info *mtd) in fixup_old_sst_eraseregion() argument
278 struct map_info *map = mtd->priv; in fixup_old_sst_eraseregion()
290 static void fixup_sst39vf(struct mtd_info *mtd) in fixup_sst39vf() argument
292 struct map_info *map = mtd->priv; in fixup_sst39vf()
295 fixup_old_sst_eraseregion(mtd); in fixup_sst39vf()
301 static void fixup_sst39vf_rev_b(struct mtd_info *mtd) in fixup_sst39vf_rev_b() argument
303 struct map_info *map = mtd->priv; in fixup_sst39vf_rev_b()
306 fixup_old_sst_eraseregion(mtd); in fixup_sst39vf_rev_b()
314 static void fixup_sst38vf640x_sectorsize(struct mtd_info *mtd) in fixup_sst38vf640x_sectorsize() argument
316 struct map_info *map = mtd->priv; in fixup_sst38vf640x_sectorsize()
319 fixup_sst39vf_rev_b(mtd); in fixup_sst38vf640x_sectorsize()
326 pr_warning("%s: Bad 38VF640x CFI data; adjusting sector size from 64 to 8KiB\n", mtd->name); in fixup_sst38vf640x_sectorsize()
329 static void fixup_s29gl064n_sectors(struct mtd_info *mtd) in fixup_s29gl064n_sectors() argument
331 struct map_info *map = mtd->priv; in fixup_s29gl064n_sectors()
336 pr_warning("%s: Bad S29GL064N CFI data; adjust from 64 to 128 sectors\n", mtd->name); in fixup_s29gl064n_sectors()
340 static void fixup_s29gl032n_sectors(struct mtd_info *mtd) in fixup_s29gl032n_sectors() argument
342 struct map_info *map = mtd->priv; in fixup_s29gl032n_sectors()
347 pr_warning("%s: Bad S29GL032N CFI data; adjust from 127 to 63 sectors\n", mtd->name); in fixup_s29gl032n_sectors()
351 static void fixup_s29ns512p_sectors(struct mtd_info *mtd) in fixup_s29ns512p_sectors() argument
353 struct map_info *map = mtd->priv; in fixup_s29ns512p_sectors()
361 pr_warning("%s: Bad S29NS512P CFI data; adjust to 512 sectors\n", mtd->name); in fixup_s29ns512p_sectors()
516 struct mtd_info *mtd; in cfi_cmdset_0002() local
519 mtd = kzalloc(sizeof(*mtd), GFP_KERNEL); in cfi_cmdset_0002()
520 if (!mtd) in cfi_cmdset_0002()
522 mtd->priv = map; in cfi_cmdset_0002()
523 mtd->type = MTD_NORFLASH; in cfi_cmdset_0002()
526 mtd->_erase = cfi_amdstd_erase_varsize; in cfi_cmdset_0002()
527 mtd->_write = cfi_amdstd_write_words; in cfi_cmdset_0002()
528 mtd->_read = cfi_amdstd_read; in cfi_cmdset_0002()
529 mtd->_sync = cfi_amdstd_sync; in cfi_cmdset_0002()
530 mtd->_suspend = cfi_amdstd_suspend; in cfi_cmdset_0002()
531 mtd->_resume = cfi_amdstd_resume; in cfi_cmdset_0002()
532 mtd->_read_user_prot_reg = cfi_amdstd_read_user_prot_reg; in cfi_cmdset_0002()
533 mtd->_read_fact_prot_reg = cfi_amdstd_read_fact_prot_reg; in cfi_cmdset_0002()
534 mtd->_get_fact_prot_info = cfi_amdstd_get_fact_prot_info; in cfi_cmdset_0002()
535 mtd->_get_user_prot_info = cfi_amdstd_get_user_prot_info; in cfi_cmdset_0002()
536 mtd->_write_user_prot_reg = cfi_amdstd_write_user_prot_reg; in cfi_cmdset_0002()
537 mtd->_lock_user_prot_reg = cfi_amdstd_lock_user_prot_reg; in cfi_cmdset_0002()
538 mtd->flags = MTD_CAP_NORFLASH; in cfi_cmdset_0002()
539 mtd->name = map->name; in cfi_cmdset_0002()
540 mtd->writesize = 1; in cfi_cmdset_0002()
541 mtd->writebufsize = cfi_interleave(cfi) << cfi->cfiq->MaxBufWriteSize; in cfi_cmdset_0002()
544 mtd->writebufsize); in cfi_cmdset_0002()
546 mtd->_panic_write = cfi_amdstd_panic_write; in cfi_cmdset_0002()
547 mtd->reboot_notifier.notifier_call = cfi_amdstd_reboot; in cfi_cmdset_0002()
576 kfree(mtd); in cfi_cmdset_0002()
587 cfi_fixup(mtd, cfi_fixup_table); in cfi_cmdset_0002()
599 mtd->_lock = cfi_ppb_lock; in cfi_cmdset_0002()
600 mtd->_unlock = cfi_ppb_unlock; in cfi_cmdset_0002()
601 mtd->_is_locked = cfi_ppb_is_locked; in cfi_cmdset_0002()
629 cfi_fixup(mtd, cfi_nopri_fixup_table); in cfi_cmdset_0002()
632 kfree(mtd); in cfi_cmdset_0002()
639 cfi_fixup(mtd, jedec_fixup_table); in cfi_cmdset_0002()
642 cfi_fixup(mtd, fixup_table); in cfi_cmdset_0002()
671 return cfi_amdstd_setup(mtd); in cfi_cmdset_0002()
679 static struct mtd_info *cfi_amdstd_setup(struct mtd_info *mtd) in cfi_amdstd_setup() argument
681 struct map_info *map = mtd->priv; in cfi_amdstd_setup()
690 mtd->size = devsize * cfi->numchips; in cfi_amdstd_setup()
692 mtd->numeraseregions = cfi->cfiq->NumEraseRegions * cfi->numchips; in cfi_amdstd_setup()
693 mtd->eraseregions = kmalloc(sizeof(struct mtd_erase_region_info) in cfi_amdstd_setup()
694 * mtd->numeraseregions, GFP_KERNEL); in cfi_amdstd_setup()
695 if (!mtd->eraseregions) in cfi_amdstd_setup()
703 if (mtd->erasesize < ersize) { in cfi_amdstd_setup()
704 mtd->erasesize = ersize; in cfi_amdstd_setup()
707 mtd->eraseregions[(j*cfi->cfiq->NumEraseRegions)+i].offset = (j*devsize)+offset; in cfi_amdstd_setup()
708 mtd->eraseregions[(j*cfi->cfiq->NumEraseRegions)+i].erasesize = ersize; in cfi_amdstd_setup()
709 mtd->eraseregions[(j*cfi->cfiq->NumEraseRegions)+i].numblocks = ernum; in cfi_amdstd_setup()
720 register_reboot_notifier(&mtd->reboot_notifier); in cfi_amdstd_setup()
721 return mtd; in cfi_amdstd_setup()
724 kfree(mtd->eraseregions); in cfi_amdstd_setup()
725 kfree(mtd); in cfi_amdstd_setup()
1137 static int cfi_amdstd_read (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *… in cfi_amdstd_read() argument
1139 struct map_info *map = mtd->priv; in cfi_amdstd_read()
1247 static int cfi_amdstd_secsi_read (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_… in cfi_amdstd_secsi_read() argument
1249 struct map_info *map = mtd->priv; in cfi_amdstd_secsi_read()
1384 static int cfi_amdstd_otp_walk(struct mtd_info *mtd, loff_t from, size_t len, in cfi_amdstd_otp_walk() argument
1388 struct map_info *map = mtd->priv; in cfi_amdstd_otp_walk()
1502 static int cfi_amdstd_get_fact_prot_info(struct mtd_info *mtd, size_t len, in cfi_amdstd_get_fact_prot_info() argument
1505 return cfi_amdstd_otp_walk(mtd, 0, len, retlen, (u_char *)buf, in cfi_amdstd_get_fact_prot_info()
1509 static int cfi_amdstd_get_user_prot_info(struct mtd_info *mtd, size_t len, in cfi_amdstd_get_user_prot_info() argument
1512 return cfi_amdstd_otp_walk(mtd, 0, len, retlen, (u_char *)buf, in cfi_amdstd_get_user_prot_info()
1516 static int cfi_amdstd_read_fact_prot_reg(struct mtd_info *mtd, loff_t from, in cfi_amdstd_read_fact_prot_reg() argument
1520 return cfi_amdstd_otp_walk(mtd, from, len, retlen, in cfi_amdstd_read_fact_prot_reg()
1524 static int cfi_amdstd_read_user_prot_reg(struct mtd_info *mtd, loff_t from, in cfi_amdstd_read_user_prot_reg() argument
1528 return cfi_amdstd_otp_walk(mtd, from, len, retlen, in cfi_amdstd_read_user_prot_reg()
1532 static int cfi_amdstd_write_user_prot_reg(struct mtd_info *mtd, loff_t from, in cfi_amdstd_write_user_prot_reg() argument
1536 return cfi_amdstd_otp_walk(mtd, from, len, retlen, buf, in cfi_amdstd_write_user_prot_reg()
1540 static int cfi_amdstd_lock_user_prot_reg(struct mtd_info *mtd, loff_t from, in cfi_amdstd_lock_user_prot_reg() argument
1544 return cfi_amdstd_otp_walk(mtd, from, len, &retlen, NULL, in cfi_amdstd_lock_user_prot_reg()
1665 static int cfi_amdstd_write_words(struct mtd_info *mtd, loff_t to, size_t len, in cfi_amdstd_write_words() argument
1668 struct map_info *map = mtd->priv; in cfi_amdstd_write_words()
1920 static int cfi_amdstd_write_buffers(struct mtd_info *mtd, loff_t to, size_t len, in cfi_amdstd_write_buffers() argument
1923 struct map_info *map = mtd->priv; in cfi_amdstd_write_buffers()
1938 ret = cfi_amdstd_write_words(mtd, ofs + (chipnum<<cfi->chipshift), in cfi_amdstd_write_buffers()
1985 ret = cfi_amdstd_write_words(mtd, ofs + (chipnum<<cfi->chipshift), in cfi_amdstd_write_buffers()
2130 static int cfi_amdstd_panic_write(struct mtd_info *mtd, loff_t to, size_t len, in cfi_amdstd_panic_write() argument
2133 struct map_info *map = mtd->priv; in cfi_amdstd_panic_write()
2414 static int cfi_amdstd_erase_varsize(struct mtd_info *mtd, struct erase_info *instr) in cfi_amdstd_erase_varsize() argument
2422 ret = cfi_varsize_frob(mtd, do_erase_oneblock, ofs, len, NULL); in cfi_amdstd_erase_varsize()
2433 static int cfi_amdstd_erase_chip(struct mtd_info *mtd, struct erase_info *instr) in cfi_amdstd_erase_chip() argument
2435 struct map_info *map = mtd->priv; in cfi_amdstd_erase_chip()
2442 if (instr->len != mtd->size) in cfi_amdstd_erase_chip()
2517 static int cfi_atmel_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len) in cfi_atmel_lock() argument
2519 return cfi_varsize_frob(mtd, do_atmel_lock, ofs, len, NULL); in cfi_atmel_lock()
2522 static int cfi_atmel_unlock(struct mtd_info *mtd, loff_t ofs, uint64_t len) in cfi_atmel_unlock() argument
2524 return cfi_varsize_frob(mtd, do_atmel_unlock, ofs, len, NULL); in cfi_atmel_unlock()
2615 static int __maybe_unused cfi_ppb_lock(struct mtd_info *mtd, loff_t ofs, in cfi_ppb_lock() argument
2618 return cfi_varsize_frob(mtd, do_ppb_xxlock, ofs, len, in cfi_ppb_lock()
2622 static int __maybe_unused cfi_ppb_unlock(struct mtd_info *mtd, loff_t ofs, in cfi_ppb_unlock() argument
2625 struct mtd_erase_region_info *regions = mtd->eraseregions; in cfi_ppb_unlock()
2626 struct map_info *map = mtd->priv; in cfi_ppb_unlock()
2656 length = mtd->size; in cfi_ppb_unlock()
2699 ret = cfi_varsize_frob(mtd, do_ppb_xxlock, ofs, len, in cfi_ppb_unlock()
2720 static int __maybe_unused cfi_ppb_is_locked(struct mtd_info *mtd, loff_t ofs, in cfi_ppb_is_locked() argument
2723 return cfi_varsize_frob(mtd, do_ppb_xxlock, ofs, len, in cfi_ppb_is_locked()
2727 static void cfi_amdstd_sync (struct mtd_info *mtd) in cfi_amdstd_sync() argument
2729 struct map_info *map = mtd->priv; in cfi_amdstd_sync()
2788 static int cfi_amdstd_suspend(struct mtd_info *mtd) in cfi_amdstd_suspend() argument
2790 struct map_info *map = mtd->priv; in cfi_amdstd_suspend()
2842 static void cfi_amdstd_resume(struct mtd_info *mtd) in cfi_amdstd_resume() argument
2844 struct map_info *map = mtd->priv; in cfi_amdstd_resume()
2874 static int cfi_amdstd_reset(struct mtd_info *mtd) in cfi_amdstd_reset() argument
2876 struct map_info *map = mtd->priv; in cfi_amdstd_reset()
2904 struct mtd_info *mtd; in cfi_amdstd_reboot() local
2906 mtd = container_of(nb, struct mtd_info, reboot_notifier); in cfi_amdstd_reboot()
2907 cfi_amdstd_reset(mtd); in cfi_amdstd_reboot()
2912 static void cfi_amdstd_destroy(struct mtd_info *mtd) in cfi_amdstd_destroy() argument
2914 struct map_info *map = mtd->priv; in cfi_amdstd_destroy()
2917 cfi_amdstd_reset(mtd); in cfi_amdstd_destroy()
2918 unregister_reboot_notifier(&mtd->reboot_notifier); in cfi_amdstd_destroy()
2922 kfree(mtd->eraseregions); in cfi_amdstd_destroy()