Lines Matching refs:map

97 static int get_chip(struct map_info *map, struct flchip *chip, unsigned long adr, int mode);
98 static void put_chip(struct map_info *map, struct flchip *chip, unsigned long adr);
129 static int cfi_check_err_status(struct map_info *map, struct flchip *chip, in cfi_check_err_status() argument
132 struct cfi_private *cfi = map->fldrv_priv; in cfi_check_err_status()
138 cfi_send_gen_cmd(0x70, cfi->addr_unlock1, chip->start, map, cfi, in cfi_check_err_status()
140 status = map_read(map, adr); in cfi_check_err_status()
143 if (!map_word_bitsset(map, status, CMD(CFI_SR_DRB))) in cfi_check_err_status()
146 if (map_word_bitsset(map, status, CMD(0x3a))) { in cfi_check_err_status()
151 map->name, chipstatus); in cfi_check_err_status()
154 map->name, chipstatus); in cfi_check_err_status()
157 map->name, chipstatus); in cfi_check_err_status()
160 map->name, chipstatus); in cfi_check_err_status()
226 struct map_info *map = mtd->priv; in fixup_amd_bootblock() local
227 struct cfi_private *cfi = map->fldrv_priv; in fixup_amd_bootblock()
236 map->name, cfi->mfr, cfi->id); in fixup_amd_bootblock()
256 " detected\n", map->name); in fixup_amd_bootblock()
260 …printk(KERN_WARNING "%s: JEDEC Device ID is 0x%02X. Assuming broken CFI table.\n", map->name, cfi-… in fixup_amd_bootblock()
267 " deduced %s from Device ID\n", map->name, major, minor, in fixup_amd_bootblock()
276 struct map_info *map = mtd->priv; in fixup_use_write_buffers() local
277 struct cfi_private *cfi = map->fldrv_priv; in fixup_use_write_buffers()
292 struct map_info *map = mtd->priv; in fixup_convert_atmel_pri() local
293 struct cfi_private *cfi = map->fldrv_priv; in fixup_convert_atmel_pri()
330 struct map_info *map = mtd->priv; in fixup_use_erase_chip() local
331 struct cfi_private *cfi = map->fldrv_priv; in fixup_use_erase_chip()
352 struct map_info *map = mtd->priv; in fixup_old_sst_eraseregion() local
353 struct cfi_private *cfi = map->fldrv_priv; in fixup_old_sst_eraseregion()
366 struct map_info *map = mtd->priv; in fixup_sst39vf() local
367 struct cfi_private *cfi = map->fldrv_priv; in fixup_sst39vf()
377 struct map_info *map = mtd->priv; in fixup_sst39vf_rev_b() local
378 struct cfi_private *cfi = map->fldrv_priv; in fixup_sst39vf_rev_b()
390 struct map_info *map = mtd->priv; in fixup_sst38vf640x_sectorsize() local
391 struct cfi_private *cfi = map->fldrv_priv; in fixup_sst38vf640x_sectorsize()
406 struct map_info *map = mtd->priv; in fixup_s29gl064n_sectors() local
407 struct cfi_private *cfi = map->fldrv_priv; in fixup_s29gl064n_sectors()
418 struct map_info *map = mtd->priv; in fixup_s29gl032n_sectors() local
419 struct cfi_private *cfi = map->fldrv_priv; in fixup_s29gl032n_sectors()
430 struct map_info *map = mtd->priv; in fixup_s29ns512p_sectors() local
431 struct cfi_private *cfi = map->fldrv_priv; in fixup_s29ns512p_sectors()
444 struct map_info *map = mtd->priv; in fixup_quirks() local
445 struct cfi_private *cfi = map->fldrv_priv; in fixup_quirks()
557 static void cfi_fixup_m29ew_erase_suspend(struct map_info *map, in cfi_fixup_m29ew_erase_suspend() argument
560 struct cfi_private *cfi = map->fldrv_priv; in cfi_fixup_m29ew_erase_suspend()
563 map_write(map, CMD(0xF0), adr); in cfi_fixup_m29ew_erase_suspend()
600 struct mtd_info *cfi_cmdset_0002(struct map_info *map, int primary) in cfi_cmdset_0002() argument
602 struct cfi_private *cfi = map->fldrv_priv; in cfi_cmdset_0002()
603 struct device_node __maybe_unused *np = map->device_node; in cfi_cmdset_0002()
610 mtd->priv = map; in cfi_cmdset_0002()
627 mtd->name = map->name; in cfi_cmdset_0002()
642 extp = (struct cfi_pri_amdstd*)cfi_read_pri(map, adr, sizeof(*extp), "Amd/Fujitsu"); in cfi_cmdset_0002()
697 map->name, bootloc); in cfi_cmdset_0002()
702 printk(KERN_WARNING "%s: Swapping erase regions for top-boot CFI table.\n", map->name); in cfi_cmdset_0002()
755 map->fldrv = &cfi_amdstd_chipdrv; in cfi_cmdset_0002()
759 struct mtd_info *cfi_cmdset_0006(struct map_info *map, int primary) __attribute__((alias("cfi_cmdse…
760 struct mtd_info *cfi_cmdset_0701(struct map_info *map, int primary) __attribute__((alias("cfi_cmdse…
767 struct map_info *map = mtd->priv; in cfi_amdstd_setup() local
768 struct cfi_private *cfi = map->fldrv_priv; in cfi_amdstd_setup()
831 static int __xipram chip_ready(struct map_info *map, struct flchip *chip, in chip_ready() argument
834 struct cfi_private *cfi = map->fldrv_priv; in chip_ready()
844 cfi_send_gen_cmd(0x70, cfi->addr_unlock1, chip->start, map, cfi, in chip_ready()
846 curd = map_read(map, addr); in chip_ready()
848 return map_word_andequal(map, curd, ready, ready); in chip_ready()
851 oldd = map_read(map, addr); in chip_ready()
852 curd = map_read(map, addr); in chip_ready()
854 ret = map_word_equal(map, oldd, curd); in chip_ready()
859 return map_word_equal(map, curd, *expected); in chip_ready()
862 static int __xipram chip_good(struct map_info *map, struct flchip *chip, in chip_good() argument
865 struct cfi_private *cfi = map->fldrv_priv; in chip_good()
871 return chip_ready(map, chip, addr, datum); in chip_good()
874 static int get_chip(struct map_info *map, struct flchip *chip, unsigned long adr, int mode) in get_chip() argument
877 struct cfi_private *cfi = map->fldrv_priv; in get_chip()
888 if (chip_ready(map, chip, adr, NULL)) in get_chip()
922 map_write(map, CMD(0xB0), chip->in_progress_block_addr); in get_chip()
927 if (chip_ready(map, chip, adr, NULL)) in get_chip()
936 put_chip(map, chip, adr); in get_chip()
980 static void put_chip(struct map_info *map, struct flchip *chip, unsigned long adr) in put_chip() argument
982 struct cfi_private *cfi = map->fldrv_priv; in put_chip()
986 cfi_fixup_m29ew_erase_suspend(map, in put_chip()
988 map_write(map, cfi->sector_erase_cmd, chip->in_progress_block_addr); in put_chip()
1021 static void xip_disable(struct map_info *map, struct flchip *chip, in xip_disable() argument
1025 (void) map_read(map, adr); /* ensure mmu mapping is up to date */ in xip_disable()
1029 static void __xipram xip_enable(struct map_info *map, struct flchip *chip, in xip_enable() argument
1032 struct cfi_private *cfi = map->fldrv_priv; in xip_enable()
1035 map_write(map, CMD(0xf0), adr); in xip_enable()
1038 (void) map_read(map, adr); in xip_enable()
1056 static void __xipram xip_udelay(struct map_info *map, struct flchip *chip, in xip_udelay() argument
1059 struct cfi_private *cfi = map->fldrv_priv; in xip_udelay()
1080 map_write(map, CMD(0xb0), adr); in xip_udelay()
1093 status = map_read(map, adr); in xip_udelay()
1094 } while (!map_word_andequal(map, status, OK, OK)); in xip_udelay()
1098 if (!map_word_bitsset(map, status, CMD(0x40))) in xip_udelay()
1102 map_write(map, CMD(0xf0), adr); in xip_udelay()
1103 (void) map_read(map, adr); in xip_udelay()
1130 cfi_fixup_m29ew_erase_suspend(map, adr); in xip_udelay()
1132 map_write(map, cfi->sector_erase_cmd, adr); in xip_udelay()
1143 status = map_read(map, adr); in xip_udelay()
1144 } while (!map_word_andequal(map, status, OK, OK) in xip_udelay()
1148 #define UDELAY(map, chip, adr, usec) xip_udelay(map, chip, adr, usec) argument
1157 #define XIP_INVAL_CACHED_RANGE(map, from, size) \ argument
1158 INVALIDATE_CACHED_RANGE(map, from, size)
1160 #define INVALIDATE_CACHE_UDELAY(map, chip, adr, len, usec) \ argument
1161 UDELAY(map, chip, adr, usec)
1182 #define xip_disable(map, chip, adr) argument
1183 #define xip_enable(map, chip, adr) argument
1186 #define UDELAY(map, chip, adr, usec) \ argument
1193 #define INVALIDATE_CACHE_UDELAY(map, chip, adr, len, usec) \ argument
1196 INVALIDATE_CACHED_RANGE(map, adr, len); \
1203 static inline int do_read_onechip(struct map_info *map, struct flchip *chip, loff_t adr, size_t len… in do_read_onechip() argument
1206 struct cfi_private *cfi = map->fldrv_priv; in do_read_onechip()
1212 cmd_addr = adr & ~(map_bankwidth(map)-1); in do_read_onechip()
1215 ret = get_chip(map, chip, cmd_addr, FL_READY); in do_read_onechip()
1222 map_write(map, CMD(0xf0), cmd_addr); in do_read_onechip()
1226 map_copy_from(map, buf, adr, len); in do_read_onechip()
1228 put_chip(map, chip, cmd_addr); in do_read_onechip()
1237 struct map_info *map = mtd->priv; in cfi_amdstd_read() local
1238 struct cfi_private *cfi = map->fldrv_priv; in cfi_amdstd_read()
1258 ret = do_read_onechip(map, &cfi->chips[chipnum], ofs, thislen, buf); in cfi_amdstd_read()
1272 typedef int (*otp_op_t)(struct map_info *map, struct flchip *chip,
1275 static inline void otp_enter(struct map_info *map, struct flchip *chip, in otp_enter() argument
1278 struct cfi_private *cfi = map->fldrv_priv; in otp_enter()
1280 cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, in otp_enter()
1282 cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, in otp_enter()
1284 cfi_send_gen_cmd(0x88, cfi->addr_unlock1, chip->start, map, cfi, in otp_enter()
1287 INVALIDATE_CACHED_RANGE(map, chip->start + adr, len); in otp_enter()
1290 static inline void otp_exit(struct map_info *map, struct flchip *chip, in otp_exit() argument
1293 struct cfi_private *cfi = map->fldrv_priv; in otp_exit()
1295 cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, in otp_exit()
1297 cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, in otp_exit()
1299 cfi_send_gen_cmd(0x90, cfi->addr_unlock1, chip->start, map, cfi, in otp_exit()
1301 cfi_send_gen_cmd(0x00, cfi->addr_unlock1, chip->start, map, cfi, in otp_exit()
1304 INVALIDATE_CACHED_RANGE(map, chip->start + adr, len); in otp_exit()
1307 static inline int do_read_secsi_onechip(struct map_info *map, in do_read_secsi_onechip() argument
1333 otp_enter(map, chip, adr, len); in do_read_secsi_onechip()
1334 map_copy_from(map, buf, adr, len); in do_read_secsi_onechip()
1335 otp_exit(map, chip, adr, len); in do_read_secsi_onechip()
1345 struct map_info *map = mtd->priv; in cfi_amdstd_secsi_read() local
1346 struct cfi_private *cfi = map->fldrv_priv; in cfi_amdstd_secsi_read()
1367 ret = do_read_secsi_onechip(map, &cfi->chips[chipnum], ofs, in cfi_amdstd_secsi_read()
1382 static int __xipram do_write_oneword(struct map_info *map, struct flchip *chip,
1386 static int do_otp_write(struct map_info *map, struct flchip *chip, loff_t adr, in do_otp_write() argument
1391 unsigned long bus_ofs = adr & ~(map_bankwidth(map)-1); in do_otp_write()
1393 int n = min_t(int, len, map_bankwidth(map) - gap); in do_otp_write()
1394 map_word datum = map_word_ff(map); in do_otp_write()
1396 if (n != map_bankwidth(map)) { in do_otp_write()
1398 otp_enter(map, chip, bus_ofs, map_bankwidth(map)); in do_otp_write()
1399 datum = map_read(map, bus_ofs); in do_otp_write()
1400 otp_exit(map, chip, bus_ofs, map_bankwidth(map)); in do_otp_write()
1403 datum = map_word_load_partial(map, datum, buf, gap, n); in do_otp_write()
1404 ret = do_write_oneword(map, chip, bus_ofs, datum, FL_OTP_WRITE); in do_otp_write()
1416 static int do_otp_lock(struct map_info *map, struct flchip *chip, loff_t adr, in do_otp_lock() argument
1419 struct cfi_private *cfi = map->fldrv_priv; in do_otp_lock()
1429 ret = get_chip(map, chip, chip->start, FL_LOCKING); in do_otp_lock()
1437 cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, in do_otp_lock()
1439 cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, in do_otp_lock()
1441 cfi_send_gen_cmd(0x40, cfi->addr_unlock1, chip->start, map, cfi, in do_otp_lock()
1445 lockreg = cfi_read_query(map, 0); in do_otp_lock()
1452 map_write(map, CMD(0xA0), chip->start); in do_otp_lock()
1453 map_write(map, CMD(lockreg), chip->start); in do_otp_lock()
1458 if (chip_ready(map, chip, adr, NULL)) in do_otp_lock()
1466 UDELAY(map, chip, 0, 1); in do_otp_lock()
1470 map_write(map, CMD(0x90), chip->start); in do_otp_lock()
1471 map_write(map, CMD(0x00), chip->start); in do_otp_lock()
1474 put_chip(map, chip, chip->start); in do_otp_lock()
1484 struct map_info *map = mtd->priv; in cfi_amdstd_otp_walk() local
1485 struct cfi_private *cfi = map->fldrv_priv; in cfi_amdstd_otp_walk()
1511 ret = get_chip(map, chip, base, FL_CFI_QUERY); in cfi_amdstd_otp_walk()
1516 cfi_qry_mode_on(base, map, cfi); in cfi_amdstd_otp_walk()
1517 otp = cfi_read_query(map, base + 0x3 * ofs_factor); in cfi_amdstd_otp_walk()
1518 cfi_qry_mode_off(base, map, cfi); in cfi_amdstd_otp_walk()
1519 put_chip(map, chip, base); in cfi_amdstd_otp_walk()
1532 ret = get_chip(map, chip, base, FL_LOCKING); in cfi_amdstd_otp_walk()
1540 chip->start, map, cfi, in cfi_amdstd_otp_walk()
1543 chip->start, map, cfi, in cfi_amdstd_otp_walk()
1546 chip->start, map, cfi, in cfi_amdstd_otp_walk()
1549 lockreg = cfi_read_query(map, 0); in cfi_amdstd_otp_walk()
1551 map_write(map, CMD(0x90), chip->start); in cfi_amdstd_otp_walk()
1552 map_write(map, CMD(0x00), chip->start); in cfi_amdstd_otp_walk()
1553 put_chip(map, chip, chip->start); in cfi_amdstd_otp_walk()
1582 ret = action(map, chip, otpoffset + from, size, buf, in cfi_amdstd_otp_walk()
1644 static int __xipram do_write_oneword_once(struct map_info *map, in do_write_oneword_once() argument
1662 cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL); in do_write_oneword_once()
1663 cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, cfi->device_type, NULL); in do_write_oneword_once()
1664 cfi_send_gen_cmd(0xA0, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL); in do_write_oneword_once()
1665 map_write(map, datum, adr); in do_write_oneword_once()
1668 INVALIDATE_CACHE_UDELAY(map, chip, in do_write_oneword_once()
1669 adr, map_bankwidth(map), in do_write_oneword_once()
1694 !chip_good(map, chip, adr, &datum)) { in do_write_oneword_once()
1695 xip_enable(map, chip, adr); in do_write_oneword_once()
1697 xip_disable(map, chip, adr); in do_write_oneword_once()
1702 if (chip_good(map, chip, adr, &datum)) { in do_write_oneword_once()
1703 if (cfi_check_err_status(map, chip, adr)) in do_write_oneword_once()
1709 UDELAY(map, chip, adr, 1); in do_write_oneword_once()
1715 static int __xipram do_write_oneword_start(struct map_info *map, in do_write_oneword_start() argument
1723 ret = get_chip(map, chip, adr, mode); in do_write_oneword_start()
1730 otp_enter(map, chip, adr, map_bankwidth(map)); in do_write_oneword_start()
1735 static void __xipram do_write_oneword_done(struct map_info *map, in do_write_oneword_done() argument
1740 otp_exit(map, chip, adr, map_bankwidth(map)); in do_write_oneword_done()
1743 DISABLE_VPP(map); in do_write_oneword_done()
1744 put_chip(map, chip, adr); in do_write_oneword_done()
1749 static int __xipram do_write_oneword_retry(struct map_info *map, in do_write_oneword_retry() argument
1754 struct cfi_private *cfi = map->fldrv_priv; in do_write_oneword_retry()
1765 oldd = map_read(map, adr); in do_write_oneword_retry()
1766 if (map_word_equal(map, oldd, datum)) { in do_write_oneword_retry()
1771 XIP_INVAL_CACHED_RANGE(map, adr, map_bankwidth(map)); in do_write_oneword_retry()
1772 ENABLE_VPP(map); in do_write_oneword_retry()
1773 xip_disable(map, chip, adr); in do_write_oneword_retry()
1776 ret = do_write_oneword_once(map, chip, adr, datum, mode, cfi); in do_write_oneword_retry()
1779 map_write(map, CMD(0xF0), chip->start); in do_write_oneword_retry()
1785 xip_enable(map, chip, adr); in do_write_oneword_retry()
1790 static int __xipram do_write_oneword(struct map_info *map, struct flchip *chip, in do_write_oneword() argument
1801 ret = do_write_oneword_start(map, chip, adr, mode); in do_write_oneword()
1805 ret = do_write_oneword_retry(map, chip, adr, datum, mode); in do_write_oneword()
1807 do_write_oneword_done(map, chip, adr, mode); in do_write_oneword()
1816 struct map_info *map = mtd->priv; in cfi_amdstd_write_words() local
1817 struct cfi_private *cfi = map->fldrv_priv; in cfi_amdstd_write_words()
1828 if (ofs & (map_bankwidth(map)-1)) { in cfi_amdstd_write_words()
1829 unsigned long bus_ofs = ofs & ~(map_bankwidth(map)-1); in cfi_amdstd_write_words()
1849 tmp_buf = map_read(map, bus_ofs+chipstart); in cfi_amdstd_write_words()
1854 n = min_t(int, len, map_bankwidth(map)-i); in cfi_amdstd_write_words()
1856 tmp_buf = map_word_load_partial(map, tmp_buf, buf, i, n); in cfi_amdstd_write_words()
1858 ret = do_write_oneword(map, &cfi->chips[chipnum], in cfi_amdstd_write_words()
1877 while(len >= map_bankwidth(map)) { in cfi_amdstd_write_words()
1880 datum = map_word_load(map, buf); in cfi_amdstd_write_words()
1882 ret = do_write_oneword(map, &cfi->chips[chipnum], in cfi_amdstd_write_words()
1887 ofs += map_bankwidth(map); in cfi_amdstd_write_words()
1888 buf += map_bankwidth(map); in cfi_amdstd_write_words()
1889 (*retlen) += map_bankwidth(map); in cfi_amdstd_write_words()
1890 len -= map_bankwidth(map); in cfi_amdstd_write_words()
1902 if (len & (map_bankwidth(map)-1)) { in cfi_amdstd_write_words()
1919 tmp_buf = map_read(map, ofs + chipstart); in cfi_amdstd_write_words()
1923 tmp_buf = map_word_load_partial(map, tmp_buf, buf, 0, len); in cfi_amdstd_write_words()
1925 ret = do_write_oneword(map, &cfi->chips[chipnum], in cfi_amdstd_write_words()
1937 static int __xipram do_write_buffer_wait(struct map_info *map, in do_write_buffer_wait() argument
1972 !chip_good(map, chip, adr, &datum)) { in do_write_buffer_wait()
1979 if (chip_good(map, chip, adr, &datum)) { in do_write_buffer_wait()
1980 if (cfi_check_err_status(map, chip, adr)) in do_write_buffer_wait()
1986 UDELAY(map, chip, adr, 1); in do_write_buffer_wait()
1992 static void __xipram do_write_buffer_reset(struct map_info *map, in do_write_buffer_reset() argument
2004 cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, in do_write_buffer_reset()
2006 cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, in do_write_buffer_reset()
2008 cfi_send_gen_cmd(0xF0, cfi->addr_unlock1, chip->start, map, cfi, in do_write_buffer_reset()
2017 static int __xipram do_write_buffer(struct map_info *map, struct flchip *chip, in do_write_buffer() argument
2021 struct cfi_private *cfi = map->fldrv_priv; in do_write_buffer()
2031 ret = get_chip(map, chip, adr, FL_WRITING); in do_write_buffer()
2037 datum = map_word_load(map, buf); in do_write_buffer()
2042 XIP_INVAL_CACHED_RANGE(map, adr, len); in do_write_buffer()
2043 ENABLE_VPP(map); in do_write_buffer()
2044 xip_disable(map, chip, cmd_adr); in do_write_buffer()
2046 cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL); in do_write_buffer()
2047 cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, cfi->device_type, NULL); in do_write_buffer()
2050 map_write(map, CMD(0x25), cmd_adr); in do_write_buffer()
2055 words = len / map_bankwidth(map); in do_write_buffer()
2056 map_write(map, CMD(words - 1), cmd_adr); in do_write_buffer()
2059 while(z < words * map_bankwidth(map)) { in do_write_buffer()
2060 datum = map_word_load(map, buf); in do_write_buffer()
2061 map_write(map, datum, adr + z); in do_write_buffer()
2063 z += map_bankwidth(map); in do_write_buffer()
2064 buf += map_bankwidth(map); in do_write_buffer()
2066 z -= map_bankwidth(map); in do_write_buffer()
2071 map_write(map, CMD(0x29), cmd_adr); in do_write_buffer()
2074 INVALIDATE_CACHE_UDELAY(map, chip, in do_write_buffer()
2075 adr, map_bankwidth(map), in do_write_buffer()
2078 ret = do_write_buffer_wait(map, chip, adr, datum); in do_write_buffer()
2080 do_write_buffer_reset(map, chip, cfi); in do_write_buffer()
2082 xip_enable(map, chip, adr); in do_write_buffer()
2085 DISABLE_VPP(map); in do_write_buffer()
2086 put_chip(map, chip, adr); in do_write_buffer()
2096 struct map_info *map = mtd->priv; in cfi_amdstd_write_buffers() local
2097 struct cfi_private *cfi = map->fldrv_priv; in cfi_amdstd_write_buffers()
2107 if (ofs & (map_bankwidth(map)-1)) { in cfi_amdstd_write_buffers()
2108 size_t local_len = (-ofs)&(map_bankwidth(map)-1); in cfi_amdstd_write_buffers()
2128 while (len >= map_bankwidth(map) * 2) { in cfi_amdstd_write_buffers()
2134 if (size % map_bankwidth(map)) in cfi_amdstd_write_buffers()
2135 size -= size % map_bankwidth(map); in cfi_amdstd_write_buffers()
2137 ret = do_write_buffer(map, &cfi->chips[chipnum], in cfi_amdstd_write_buffers()
2177 static int cfi_amdstd_panic_wait(struct map_info *map, struct flchip *chip, in cfi_amdstd_panic_wait() argument
2180 struct cfi_private *cfi = map->fldrv_priv; in cfi_amdstd_panic_wait()
2188 if (chip->state == FL_READY && chip_ready(map, chip, adr, NULL)) in cfi_amdstd_panic_wait()
2201 map_write(map, CMD(0xF0), chip->start); in cfi_amdstd_panic_wait()
2205 if (chip_ready(map, chip, adr, NULL)) in cfi_amdstd_panic_wait()
2229 static int do_panic_write_oneword(struct map_info *map, struct flchip *chip, in do_panic_write_oneword() argument
2233 struct cfi_private *cfi = map->fldrv_priv; in do_panic_write_oneword()
2241 ret = cfi_amdstd_panic_wait(map, chip, adr); in do_panic_write_oneword()
2254 oldd = map_read(map, adr); in do_panic_write_oneword()
2255 if (map_word_equal(map, oldd, datum)) { in do_panic_write_oneword()
2260 ENABLE_VPP(map); in do_panic_write_oneword()
2263 cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL); in do_panic_write_oneword()
2264 cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, cfi->device_type, NULL); in do_panic_write_oneword()
2265 cfi_send_gen_cmd(0xA0, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL); in do_panic_write_oneword()
2266 map_write(map, datum, adr); in do_panic_write_oneword()
2269 if (chip_ready(map, chip, adr, NULL)) in do_panic_write_oneword()
2275 if (!chip_ready(map, chip, adr, &datum) || in do_panic_write_oneword()
2276 cfi_check_err_status(map, chip, adr)) { in do_panic_write_oneword()
2278 map_write(map, CMD(0xF0), chip->start); in do_panic_write_oneword()
2288 DISABLE_VPP(map); in do_panic_write_oneword()
2308 struct map_info *map = mtd->priv; in cfi_amdstd_panic_write() local
2309 struct cfi_private *cfi = map->fldrv_priv; in cfi_amdstd_panic_write()
2319 if (ofs & (map_bankwidth(map) - 1)) { in cfi_amdstd_panic_write()
2320 unsigned long bus_ofs = ofs & ~(map_bankwidth(map) - 1); in cfi_amdstd_panic_write()
2325 ret = cfi_amdstd_panic_wait(map, &cfi->chips[chipnum], bus_ofs); in cfi_amdstd_panic_write()
2330 tmp_buf = map_read(map, bus_ofs + chipstart); in cfi_amdstd_panic_write()
2333 n = min_t(int, len, map_bankwidth(map) - i); in cfi_amdstd_panic_write()
2335 tmp_buf = map_word_load_partial(map, tmp_buf, buf, i, n); in cfi_amdstd_panic_write()
2337 ret = do_panic_write_oneword(map, &cfi->chips[chipnum], in cfi_amdstd_panic_write()
2356 while (len >= map_bankwidth(map)) { in cfi_amdstd_panic_write()
2359 datum = map_word_load(map, buf); in cfi_amdstd_panic_write()
2361 ret = do_panic_write_oneword(map, &cfi->chips[chipnum], in cfi_amdstd_panic_write()
2366 ofs += map_bankwidth(map); in cfi_amdstd_panic_write()
2367 buf += map_bankwidth(map); in cfi_amdstd_panic_write()
2368 (*retlen) += map_bankwidth(map); in cfi_amdstd_panic_write()
2369 len -= map_bankwidth(map); in cfi_amdstd_panic_write()
2382 if (len & (map_bankwidth(map) - 1)) { in cfi_amdstd_panic_write()
2385 ret = cfi_amdstd_panic_wait(map, &cfi->chips[chipnum], ofs); in cfi_amdstd_panic_write()
2389 tmp_buf = map_read(map, ofs + chipstart); in cfi_amdstd_panic_write()
2391 tmp_buf = map_word_load_partial(map, tmp_buf, buf, 0, len); in cfi_amdstd_panic_write()
2393 ret = do_panic_write_oneword(map, &cfi->chips[chipnum], in cfi_amdstd_panic_write()
2409 static int __xipram do_erase_chip(struct map_info *map, struct flchip *chip) in do_erase_chip() argument
2411 struct cfi_private *cfi = map->fldrv_priv; in do_erase_chip()
2417 map_word datum = map_word_ff(map); in do_erase_chip()
2422 ret = get_chip(map, chip, adr, FL_ERASING); in do_erase_chip()
2431 XIP_INVAL_CACHED_RANGE(map, adr, map->size); in do_erase_chip()
2432 ENABLE_VPP(map); in do_erase_chip()
2433 xip_disable(map, chip, adr); in do_erase_chip()
2436 cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL); in do_erase_chip()
2437 cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, cfi->device_type, NULL); in do_erase_chip()
2438 cfi_send_gen_cmd(0x80, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL); in do_erase_chip()
2439 cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL); in do_erase_chip()
2440 cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, cfi->device_type, NULL); in do_erase_chip()
2441 cfi_send_gen_cmd(0x10, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL); in do_erase_chip()
2446 chip->in_progress_block_mask = ~(map->size - 1); in do_erase_chip()
2448 INVALIDATE_CACHE_UDELAY(map, chip, in do_erase_chip()
2449 adr, map->size, in do_erase_chip()
2472 if (chip_ready(map, chip, adr, &datum)) { in do_erase_chip()
2473 if (cfi_check_err_status(map, chip, adr)) in do_erase_chip()
2486 UDELAY(map, chip, adr, 1000000/HZ); in do_erase_chip()
2491 map_write(map, CMD(0xF0), chip->start); in do_erase_chip()
2501 xip_enable(map, chip, adr); in do_erase_chip()
2502 DISABLE_VPP(map); in do_erase_chip()
2503 put_chip(map, chip, adr); in do_erase_chip()
2510 static int __xipram do_erase_oneblock(struct map_info *map, struct flchip *chip, unsigned long adr,… in do_erase_oneblock() argument
2512 struct cfi_private *cfi = map->fldrv_priv; in do_erase_oneblock()
2517 map_word datum = map_word_ff(map); in do_erase_oneblock()
2522 ret = get_chip(map, chip, adr, FL_ERASING); in do_erase_oneblock()
2531 XIP_INVAL_CACHED_RANGE(map, adr, len); in do_erase_oneblock()
2532 ENABLE_VPP(map); in do_erase_oneblock()
2533 xip_disable(map, chip, adr); in do_erase_oneblock()
2536 cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL); in do_erase_oneblock()
2537 cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, cfi->device_type, NULL); in do_erase_oneblock()
2538 cfi_send_gen_cmd(0x80, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL); in do_erase_oneblock()
2539 cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL); in do_erase_oneblock()
2540 cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, cfi->device_type, NULL); in do_erase_oneblock()
2541 map_write(map, cfi->sector_erase_cmd, adr); in do_erase_oneblock()
2548 INVALIDATE_CACHE_UDELAY(map, chip, in do_erase_oneblock()
2572 if (chip_ready(map, chip, adr, &datum)) { in do_erase_oneblock()
2573 if (cfi_check_err_status(map, chip, adr)) in do_erase_oneblock()
2586 UDELAY(map, chip, adr, 1000000/HZ); in do_erase_oneblock()
2591 map_write(map, CMD(0xF0), chip->start); in do_erase_oneblock()
2601 xip_enable(map, chip, adr); in do_erase_oneblock()
2602 DISABLE_VPP(map); in do_erase_oneblock()
2603 put_chip(map, chip, adr); in do_erase_oneblock()
2618 struct map_info *map = mtd->priv; in cfi_amdstd_erase_chip() local
2619 struct cfi_private *cfi = map->fldrv_priv; in cfi_amdstd_erase_chip()
2627 return do_erase_chip(map, &cfi->chips[0]); in cfi_amdstd_erase_chip()
2630 static int do_atmel_lock(struct map_info *map, struct flchip *chip, in do_atmel_lock() argument
2633 struct cfi_private *cfi = map->fldrv_priv; in do_atmel_lock()
2637 ret = get_chip(map, chip, adr + chip->start, FL_LOCKING); in do_atmel_lock()
2644 cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, in do_atmel_lock()
2646 cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, in do_atmel_lock()
2648 cfi_send_gen_cmd(0x80, cfi->addr_unlock1, chip->start, map, cfi, in do_atmel_lock()
2650 cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, in do_atmel_lock()
2652 cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, in do_atmel_lock()
2654 map_write(map, CMD(0x40), chip->start + adr); in do_atmel_lock()
2657 put_chip(map, chip, adr + chip->start); in do_atmel_lock()
2665 static int do_atmel_unlock(struct map_info *map, struct flchip *chip, in do_atmel_unlock() argument
2668 struct cfi_private *cfi = map->fldrv_priv; in do_atmel_unlock()
2672 ret = get_chip(map, chip, adr + chip->start, FL_UNLOCKING); in do_atmel_unlock()
2679 cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, in do_atmel_unlock()
2681 map_write(map, CMD(0x70), adr); in do_atmel_unlock()
2684 put_chip(map, chip, adr + chip->start); in do_atmel_unlock()
2716 static int __maybe_unused do_ppb_xxlock(struct map_info *map, in do_ppb_xxlock() argument
2720 struct cfi_private *cfi = map->fldrv_priv; in do_ppb_xxlock()
2726 ret = get_chip(map, chip, adr, FL_LOCKING); in do_ppb_xxlock()
2734 cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, in do_ppb_xxlock()
2736 cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, in do_ppb_xxlock()
2739 cfi_send_gen_cmd(0xC0, cfi->addr_unlock1, chip->start, map, cfi, in do_ppb_xxlock()
2744 map_write(map, CMD(0xA0), adr); in do_ppb_xxlock()
2745 map_write(map, CMD(0x00), adr); in do_ppb_xxlock()
2752 map_write(map, CMD(0x80), chip->start); in do_ppb_xxlock()
2753 map_write(map, CMD(0x30), chip->start); in do_ppb_xxlock()
2757 ret = !cfi_read_query(map, adr); in do_ppb_xxlock()
2766 if (chip_ready(map, chip, adr, NULL)) in do_ppb_xxlock()
2775 UDELAY(map, chip, adr, 1); in do_ppb_xxlock()
2779 map_write(map, CMD(0x90), chip->start); in do_ppb_xxlock()
2780 map_write(map, CMD(0x00), chip->start); in do_ppb_xxlock()
2783 put_chip(map, chip, adr); in do_ppb_xxlock()
2800 struct map_info *map = mtd->priv; in cfi_ppb_unlock() local
2801 struct cfi_private *cfi = map->fldrv_priv; in cfi_ppb_unlock()
2849 map, &cfi->chips[chipnum], adr, 0, in cfi_ppb_unlock()
2893 do_ppb_xxlock(map, sect[i].chip, sect[i].adr, 0, in cfi_ppb_unlock()
2910 struct map_info *map = mtd->priv; in cfi_amdstd_sync() local
2911 struct cfi_private *cfi = map->fldrv_priv; in cfi_amdstd_sync()
2972 struct map_info *map = mtd->priv; in cfi_amdstd_suspend() local
2973 struct cfi_private *cfi = map->fldrv_priv; in cfi_amdstd_suspend()
3027 struct map_info *map = mtd->priv; in cfi_amdstd_resume() local
3028 struct cfi_private *cfi = map->fldrv_priv; in cfi_amdstd_resume()
3040 map_write(map, CMD(0xF0), chip->start); in cfi_amdstd_resume()
3059 struct map_info *map = mtd->priv; in cfi_amdstd_reset() local
3060 struct cfi_private *cfi = map->fldrv_priv; in cfi_amdstd_reset()
3070 ret = get_chip(map, chip, chip->start, FL_SHUTDOWN); in cfi_amdstd_reset()
3072 map_write(map, CMD(0xF0), chip->start); in cfi_amdstd_reset()
3074 put_chip(map, chip, chip->start); in cfi_amdstd_reset()
3097 struct map_info *map = mtd->priv; in cfi_amdstd_destroy() local
3098 struct cfi_private *cfi = map->fldrv_priv; in cfi_amdstd_destroy()