Lines Matching refs:map
82 static int get_chip(struct map_info *map, struct flchip *chip, unsigned long adr, int mode);
83 static void put_chip(struct map_info *map, struct flchip *chip, unsigned long adr);
158 struct map_info *map = mtd->priv; in fixup_amd_bootblock() local
159 struct cfi_private *cfi = map->fldrv_priv; in fixup_amd_bootblock()
168 map->name, cfi->mfr, cfi->id); in fixup_amd_bootblock()
188 " detected\n", map->name); in fixup_amd_bootblock()
192 …printk(KERN_WARNING "%s: JEDEC Device ID is 0x%02X. Assuming broken CFI table.\n", map->name, cfi-… in fixup_amd_bootblock()
199 " deduced %s from Device ID\n", map->name, major, minor, in fixup_amd_bootblock()
207 struct map_info *map = mtd->priv; in fixup_use_write_buffers() local
208 struct cfi_private *cfi = map->fldrv_priv; in fixup_use_write_buffers()
218 struct map_info *map = mtd->priv; in fixup_convert_atmel_pri() local
219 struct cfi_private *cfi = map->fldrv_priv; in fixup_convert_atmel_pri()
256 struct map_info *map = mtd->priv; in fixup_use_erase_chip() local
257 struct cfi_private *cfi = map->fldrv_priv; in fixup_use_erase_chip()
278 struct map_info *map = mtd->priv; in fixup_old_sst_eraseregion() local
279 struct cfi_private *cfi = map->fldrv_priv; in fixup_old_sst_eraseregion()
292 struct map_info *map = mtd->priv; in fixup_sst39vf() local
293 struct cfi_private *cfi = map->fldrv_priv; in fixup_sst39vf()
303 struct map_info *map = mtd->priv; in fixup_sst39vf_rev_b() local
304 struct cfi_private *cfi = map->fldrv_priv; in fixup_sst39vf_rev_b()
316 struct map_info *map = mtd->priv; in fixup_sst38vf640x_sectorsize() local
317 struct cfi_private *cfi = map->fldrv_priv; in fixup_sst38vf640x_sectorsize()
331 struct map_info *map = mtd->priv; in fixup_s29gl064n_sectors() local
332 struct cfi_private *cfi = map->fldrv_priv; in fixup_s29gl064n_sectors()
342 struct map_info *map = mtd->priv; in fixup_s29gl032n_sectors() local
343 struct cfi_private *cfi = map->fldrv_priv; in fixup_s29gl032n_sectors()
353 struct map_info *map = mtd->priv; in fixup_s29ns512p_sectors() local
354 struct cfi_private *cfi = map->fldrv_priv; in fixup_s29ns512p_sectors()
469 static void cfi_fixup_m29ew_erase_suspend(struct map_info *map, in cfi_fixup_m29ew_erase_suspend() argument
472 struct cfi_private *cfi = map->fldrv_priv; in cfi_fixup_m29ew_erase_suspend()
475 map_write(map, CMD(0xF0), adr); in cfi_fixup_m29ew_erase_suspend()
512 struct mtd_info *cfi_cmdset_0002(struct map_info *map, int primary) in cfi_cmdset_0002() argument
514 struct cfi_private *cfi = map->fldrv_priv; in cfi_cmdset_0002()
515 struct device_node __maybe_unused *np = map->device_node; in cfi_cmdset_0002()
522 mtd->priv = map; in cfi_cmdset_0002()
539 mtd->name = map->name; in cfi_cmdset_0002()
554 extp = (struct cfi_pri_amdstd*)cfi_read_pri(map, adr, sizeof(*extp), "Amd/Fujitsu"); in cfi_cmdset_0002()
609 map->name, bootloc); in cfi_cmdset_0002()
614 printk(KERN_WARNING "%s: Swapping erase regions for top-boot CFI table.\n", map->name); in cfi_cmdset_0002()
669 map->fldrv = &cfi_amdstd_chipdrv; in cfi_cmdset_0002()
673 struct mtd_info *cfi_cmdset_0006(struct map_info *map, int primary) __attribute__((alias("cfi_cmdse…
674 struct mtd_info *cfi_cmdset_0701(struct map_info *map, int primary) __attribute__((alias("cfi_cmdse…
681 struct map_info *map = mtd->priv; in cfi_amdstd_setup() local
682 struct cfi_private *cfi = map->fldrv_priv; in cfi_amdstd_setup()
742 static int __xipram chip_ready(struct map_info *map, unsigned long addr) in chip_ready() argument
746 d = map_read(map, addr); in chip_ready()
747 t = map_read(map, addr); in chip_ready()
749 return map_word_equal(map, d, t); in chip_ready()
767 static int __xipram chip_good(struct map_info *map, unsigned long addr, map_word expected) in chip_good() argument
771 oldd = map_read(map, addr); in chip_good()
772 curd = map_read(map, addr); in chip_good()
774 return map_word_equal(map, oldd, curd) && in chip_good()
775 map_word_equal(map, curd, expected); in chip_good()
778 static int get_chip(struct map_info *map, struct flchip *chip, unsigned long adr, int mode) in get_chip() argument
781 struct cfi_private *cfi = map->fldrv_priv; in get_chip()
792 if (chip_ready(map, adr)) in get_chip()
824 map_write(map, CMD(0xB0), chip->in_progress_block_addr); in get_chip()
829 if (chip_ready(map, adr)) in get_chip()
838 put_chip(map, chip, adr); in get_chip()
882 static void put_chip(struct map_info *map, struct flchip *chip, unsigned long adr) in put_chip() argument
884 struct cfi_private *cfi = map->fldrv_priv; in put_chip()
888 cfi_fixup_m29ew_erase_suspend(map, in put_chip()
890 map_write(map, cfi->sector_erase_cmd, chip->in_progress_block_addr); in put_chip()
923 static void xip_disable(struct map_info *map, struct flchip *chip, in xip_disable() argument
927 (void) map_read(map, adr); /* ensure mmu mapping is up to date */ in xip_disable()
931 static void __xipram xip_enable(struct map_info *map, struct flchip *chip, in xip_enable() argument
934 struct cfi_private *cfi = map->fldrv_priv; in xip_enable()
937 map_write(map, CMD(0xf0), adr); in xip_enable()
940 (void) map_read(map, adr); in xip_enable()
958 static void __xipram xip_udelay(struct map_info *map, struct flchip *chip, in xip_udelay() argument
961 struct cfi_private *cfi = map->fldrv_priv; in xip_udelay()
982 map_write(map, CMD(0xb0), adr); in xip_udelay()
995 status = map_read(map, adr); in xip_udelay()
996 } while (!map_word_andequal(map, status, OK, OK)); in xip_udelay()
1000 if (!map_word_bitsset(map, status, CMD(0x40))) in xip_udelay()
1004 map_write(map, CMD(0xf0), adr); in xip_udelay()
1005 (void) map_read(map, adr); in xip_udelay()
1032 cfi_fixup_m29ew_erase_suspend(map, adr); in xip_udelay()
1034 map_write(map, cfi->sector_erase_cmd, adr); in xip_udelay()
1045 status = map_read(map, adr); in xip_udelay()
1046 } while (!map_word_andequal(map, status, OK, OK) in xip_udelay()
1050 #define UDELAY(map, chip, adr, usec) xip_udelay(map, chip, adr, usec) argument
1059 #define XIP_INVAL_CACHED_RANGE(map, from, size) \ argument
1060 INVALIDATE_CACHED_RANGE(map, from, size)
1062 #define INVALIDATE_CACHE_UDELAY(map, chip, adr, len, usec) \ argument
1063 UDELAY(map, chip, adr, usec)
1084 #define xip_disable(map, chip, adr) argument
1085 #define xip_enable(map, chip, adr) argument
1088 #define UDELAY(map, chip, adr, usec) \ argument
1095 #define INVALIDATE_CACHE_UDELAY(map, chip, adr, len, usec) \ argument
1098 INVALIDATE_CACHED_RANGE(map, adr, len); \
1105 static inline int do_read_onechip(struct map_info *map, struct flchip *chip, loff_t adr, size_t len… in do_read_onechip() argument
1108 struct cfi_private *cfi = map->fldrv_priv; in do_read_onechip()
1114 cmd_addr = adr & ~(map_bankwidth(map)-1); in do_read_onechip()
1117 ret = get_chip(map, chip, cmd_addr, FL_READY); in do_read_onechip()
1124 map_write(map, CMD(0xf0), cmd_addr); in do_read_onechip()
1128 map_copy_from(map, buf, adr, len); in do_read_onechip()
1130 put_chip(map, chip, cmd_addr); in do_read_onechip()
1139 struct map_info *map = mtd->priv; in cfi_amdstd_read() local
1140 struct cfi_private *cfi = map->fldrv_priv; in cfi_amdstd_read()
1160 ret = do_read_onechip(map, &cfi->chips[chipnum], ofs, thislen, buf); in cfi_amdstd_read()
1174 typedef int (*otp_op_t)(struct map_info *map, struct flchip *chip,
1177 static inline void otp_enter(struct map_info *map, struct flchip *chip, in otp_enter() argument
1180 struct cfi_private *cfi = map->fldrv_priv; in otp_enter()
1182 cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, in otp_enter()
1184 cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, in otp_enter()
1186 cfi_send_gen_cmd(0x88, cfi->addr_unlock1, chip->start, map, cfi, in otp_enter()
1189 INVALIDATE_CACHED_RANGE(map, chip->start + adr, len); in otp_enter()
1192 static inline void otp_exit(struct map_info *map, struct flchip *chip, in otp_exit() argument
1195 struct cfi_private *cfi = map->fldrv_priv; in otp_exit()
1197 cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, in otp_exit()
1199 cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, in otp_exit()
1201 cfi_send_gen_cmd(0x90, cfi->addr_unlock1, chip->start, map, cfi, in otp_exit()
1203 cfi_send_gen_cmd(0x00, cfi->addr_unlock1, chip->start, map, cfi, in otp_exit()
1206 INVALIDATE_CACHED_RANGE(map, chip->start + adr, len); in otp_exit()
1209 static inline int do_read_secsi_onechip(struct map_info *map, in do_read_secsi_onechip() argument
1237 otp_enter(map, chip, adr, len); in do_read_secsi_onechip()
1238 map_copy_from(map, buf, adr, len); in do_read_secsi_onechip()
1239 otp_exit(map, chip, adr, len); in do_read_secsi_onechip()
1249 struct map_info *map = mtd->priv; in cfi_amdstd_secsi_read() local
1250 struct cfi_private *cfi = map->fldrv_priv; in cfi_amdstd_secsi_read()
1271 ret = do_read_secsi_onechip(map, &cfi->chips[chipnum], ofs, in cfi_amdstd_secsi_read()
1286 static int __xipram do_write_oneword(struct map_info *map, struct flchip *chip,
1290 static int do_otp_write(struct map_info *map, struct flchip *chip, loff_t adr, in do_otp_write() argument
1295 unsigned long bus_ofs = adr & ~(map_bankwidth(map)-1); in do_otp_write()
1297 int n = min_t(int, len, map_bankwidth(map) - gap); in do_otp_write()
1300 if (n != map_bankwidth(map)) { in do_otp_write()
1302 otp_enter(map, chip, bus_ofs, map_bankwidth(map)); in do_otp_write()
1303 datum = map_read(map, bus_ofs); in do_otp_write()
1304 otp_exit(map, chip, bus_ofs, map_bankwidth(map)); in do_otp_write()
1307 datum = map_word_load_partial(map, datum, buf, gap, n); in do_otp_write()
1308 ret = do_write_oneword(map, chip, bus_ofs, datum, FL_OTP_WRITE); in do_otp_write()
1320 static int do_otp_lock(struct map_info *map, struct flchip *chip, loff_t adr, in do_otp_lock() argument
1323 struct cfi_private *cfi = map->fldrv_priv; in do_otp_lock()
1333 ret = get_chip(map, chip, chip->start, FL_LOCKING); in do_otp_lock()
1341 cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, in do_otp_lock()
1343 cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, in do_otp_lock()
1345 cfi_send_gen_cmd(0x40, cfi->addr_unlock1, chip->start, map, cfi, in do_otp_lock()
1349 lockreg = cfi_read_query(map, 0); in do_otp_lock()
1356 map_write(map, CMD(0xA0), chip->start); in do_otp_lock()
1357 map_write(map, CMD(lockreg), chip->start); in do_otp_lock()
1362 if (chip_ready(map, adr)) in do_otp_lock()
1370 UDELAY(map, chip, 0, 1); in do_otp_lock()
1374 map_write(map, CMD(0x90), chip->start); in do_otp_lock()
1375 map_write(map, CMD(0x00), chip->start); in do_otp_lock()
1378 put_chip(map, chip, chip->start); in do_otp_lock()
1388 struct map_info *map = mtd->priv; in cfi_amdstd_otp_walk() local
1389 struct cfi_private *cfi = map->fldrv_priv; in cfi_amdstd_otp_walk()
1415 ret = get_chip(map, chip, base, FL_CFI_QUERY); in cfi_amdstd_otp_walk()
1420 cfi_qry_mode_on(base, map, cfi); in cfi_amdstd_otp_walk()
1421 otp = cfi_read_query(map, base + 0x3 * ofs_factor); in cfi_amdstd_otp_walk()
1422 cfi_qry_mode_off(base, map, cfi); in cfi_amdstd_otp_walk()
1423 put_chip(map, chip, base); in cfi_amdstd_otp_walk()
1436 ret = get_chip(map, chip, base, FL_LOCKING); in cfi_amdstd_otp_walk()
1444 chip->start, map, cfi, in cfi_amdstd_otp_walk()
1447 chip->start, map, cfi, in cfi_amdstd_otp_walk()
1450 chip->start, map, cfi, in cfi_amdstd_otp_walk()
1453 lockreg = cfi_read_query(map, 0); in cfi_amdstd_otp_walk()
1455 map_write(map, CMD(0x90), chip->start); in cfi_amdstd_otp_walk()
1456 map_write(map, CMD(0x00), chip->start); in cfi_amdstd_otp_walk()
1457 put_chip(map, chip, chip->start); in cfi_amdstd_otp_walk()
1486 ret = action(map, chip, otpoffset + from, size, buf, in cfi_amdstd_otp_walk()
1548 static int __xipram do_write_oneword(struct map_info *map, struct flchip *chip, in do_write_oneword() argument
1552 struct cfi_private *cfi = map->fldrv_priv; in do_write_oneword()
1571 ret = get_chip(map, chip, adr, mode); in do_write_oneword()
1581 otp_enter(map, chip, adr, map_bankwidth(map)); in do_write_oneword()
1589 oldd = map_read(map, adr); in do_write_oneword()
1590 if (map_word_equal(map, oldd, datum)) { in do_write_oneword()
1596 XIP_INVAL_CACHED_RANGE(map, adr, map_bankwidth(map)); in do_write_oneword()
1597 ENABLE_VPP(map); in do_write_oneword()
1598 xip_disable(map, chip, adr); in do_write_oneword()
1601 cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL); in do_write_oneword()
1602 cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, cfi->device_type, NULL); in do_write_oneword()
1603 cfi_send_gen_cmd(0xA0, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL); in do_write_oneword()
1604 map_write(map, datum, adr); in do_write_oneword()
1607 INVALIDATE_CACHE_UDELAY(map, chip, in do_write_oneword()
1608 adr, map_bankwidth(map), in do_write_oneword()
1628 if (time_after(jiffies, timeo) && !chip_ready(map, adr)){ in do_write_oneword()
1629 xip_enable(map, chip, adr); in do_write_oneword()
1631 xip_disable(map, chip, adr); in do_write_oneword()
1635 if (chip_ready(map, adr)) in do_write_oneword()
1639 UDELAY(map, chip, adr, 1); in do_write_oneword()
1642 if (!chip_good(map, adr, datum)) { in do_write_oneword()
1644 map_write( map, CMD(0xF0), chip->start ); in do_write_oneword()
1652 xip_enable(map, chip, adr); in do_write_oneword()
1655 otp_exit(map, chip, adr, map_bankwidth(map)); in do_write_oneword()
1657 DISABLE_VPP(map); in do_write_oneword()
1658 put_chip(map, chip, adr); in do_write_oneword()
1668 struct map_info *map = mtd->priv; in cfi_amdstd_write_words() local
1669 struct cfi_private *cfi = map->fldrv_priv; in cfi_amdstd_write_words()
1680 if (ofs & (map_bankwidth(map)-1)) { in cfi_amdstd_write_words()
1681 unsigned long bus_ofs = ofs & ~(map_bankwidth(map)-1); in cfi_amdstd_write_words()
1701 tmp_buf = map_read(map, bus_ofs+chipstart); in cfi_amdstd_write_words()
1706 n = min_t(int, len, map_bankwidth(map)-i); in cfi_amdstd_write_words()
1708 tmp_buf = map_word_load_partial(map, tmp_buf, buf, i, n); in cfi_amdstd_write_words()
1710 ret = do_write_oneword(map, &cfi->chips[chipnum], in cfi_amdstd_write_words()
1729 while(len >= map_bankwidth(map)) { in cfi_amdstd_write_words()
1732 datum = map_word_load(map, buf); in cfi_amdstd_write_words()
1734 ret = do_write_oneword(map, &cfi->chips[chipnum], in cfi_amdstd_write_words()
1739 ofs += map_bankwidth(map); in cfi_amdstd_write_words()
1740 buf += map_bankwidth(map); in cfi_amdstd_write_words()
1741 (*retlen) += map_bankwidth(map); in cfi_amdstd_write_words()
1742 len -= map_bankwidth(map); in cfi_amdstd_write_words()
1754 if (len & (map_bankwidth(map)-1)) { in cfi_amdstd_write_words()
1771 tmp_buf = map_read(map, ofs + chipstart); in cfi_amdstd_write_words()
1775 tmp_buf = map_word_load_partial(map, tmp_buf, buf, 0, len); in cfi_amdstd_write_words()
1777 ret = do_write_oneword(map, &cfi->chips[chipnum], in cfi_amdstd_write_words()
1792 static int __xipram do_write_buffer(struct map_info *map, struct flchip *chip, in do_write_buffer() argument
1796 struct cfi_private *cfi = map->fldrv_priv; in do_write_buffer()
1813 ret = get_chip(map, chip, adr, FL_WRITING); in do_write_buffer()
1819 datum = map_word_load(map, buf); in do_write_buffer()
1824 XIP_INVAL_CACHED_RANGE(map, adr, len); in do_write_buffer()
1825 ENABLE_VPP(map); in do_write_buffer()
1826 xip_disable(map, chip, cmd_adr); in do_write_buffer()
1828 cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL); in do_write_buffer()
1829 cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, cfi->device_type, NULL); in do_write_buffer()
1832 map_write(map, CMD(0x25), cmd_adr); in do_write_buffer()
1837 words = len / map_bankwidth(map); in do_write_buffer()
1838 map_write(map, CMD(words - 1), cmd_adr); in do_write_buffer()
1841 while(z < words * map_bankwidth(map)) { in do_write_buffer()
1842 datum = map_word_load(map, buf); in do_write_buffer()
1843 map_write(map, datum, adr + z); in do_write_buffer()
1845 z += map_bankwidth(map); in do_write_buffer()
1846 buf += map_bankwidth(map); in do_write_buffer()
1848 z -= map_bankwidth(map); in do_write_buffer()
1853 map_write(map, CMD(0x29), cmd_adr); in do_write_buffer()
1856 INVALIDATE_CACHE_UDELAY(map, chip, in do_write_buffer()
1857 adr, map_bankwidth(map), in do_write_buffer()
1877 if (time_after(jiffies, timeo) && !chip_ready(map, adr)) in do_write_buffer()
1880 if (chip_ready(map, adr)) { in do_write_buffer()
1881 xip_enable(map, chip, adr); in do_write_buffer()
1886 UDELAY(map, chip, adr, 1); in do_write_buffer()
1897 cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, in do_write_buffer()
1899 cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, in do_write_buffer()
1901 cfi_send_gen_cmd(0xF0, cfi->addr_unlock1, chip->start, map, cfi, in do_write_buffer()
1903 xip_enable(map, chip, adr); in do_write_buffer()
1912 DISABLE_VPP(map); in do_write_buffer()
1913 put_chip(map, chip, adr); in do_write_buffer()
1923 struct map_info *map = mtd->priv; in cfi_amdstd_write_buffers() local
1924 struct cfi_private *cfi = map->fldrv_priv; in cfi_amdstd_write_buffers()
1934 if (ofs & (map_bankwidth(map)-1)) { in cfi_amdstd_write_buffers()
1935 size_t local_len = (-ofs)&(map_bankwidth(map)-1); in cfi_amdstd_write_buffers()
1955 while (len >= map_bankwidth(map) * 2) { in cfi_amdstd_write_buffers()
1961 if (size % map_bankwidth(map)) in cfi_amdstd_write_buffers()
1962 size -= size % map_bankwidth(map); in cfi_amdstd_write_buffers()
1964 ret = do_write_buffer(map, &cfi->chips[chipnum], in cfi_amdstd_write_buffers()
2003 static int cfi_amdstd_panic_wait(struct map_info *map, struct flchip *chip, in cfi_amdstd_panic_wait() argument
2006 struct cfi_private *cfi = map->fldrv_priv; in cfi_amdstd_panic_wait()
2014 if (chip->state == FL_READY && chip_ready(map, adr)) in cfi_amdstd_panic_wait()
2027 map_write(map, CMD(0xF0), chip->start); in cfi_amdstd_panic_wait()
2031 if (chip_ready(map, adr)) in cfi_amdstd_panic_wait()
2055 static int do_panic_write_oneword(struct map_info *map, struct flchip *chip, in do_panic_write_oneword() argument
2059 struct cfi_private *cfi = map->fldrv_priv; in do_panic_write_oneword()
2067 ret = cfi_amdstd_panic_wait(map, chip, adr); in do_panic_write_oneword()
2080 oldd = map_read(map, adr); in do_panic_write_oneword()
2081 if (map_word_equal(map, oldd, datum)) { in do_panic_write_oneword()
2086 ENABLE_VPP(map); in do_panic_write_oneword()
2089 cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL); in do_panic_write_oneword()
2090 cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, cfi->device_type, NULL); in do_panic_write_oneword()
2091 cfi_send_gen_cmd(0xA0, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL); in do_panic_write_oneword()
2092 map_write(map, datum, adr); in do_panic_write_oneword()
2095 if (chip_ready(map, adr)) in do_panic_write_oneword()
2101 if (!chip_good(map, adr, datum)) { in do_panic_write_oneword()
2103 map_write(map, CMD(0xF0), chip->start); in do_panic_write_oneword()
2113 DISABLE_VPP(map); in do_panic_write_oneword()
2133 struct map_info *map = mtd->priv; in cfi_amdstd_panic_write() local
2134 struct cfi_private *cfi = map->fldrv_priv; in cfi_amdstd_panic_write()
2144 if (ofs & (map_bankwidth(map) - 1)) { in cfi_amdstd_panic_write()
2145 unsigned long bus_ofs = ofs & ~(map_bankwidth(map) - 1); in cfi_amdstd_panic_write()
2150 ret = cfi_amdstd_panic_wait(map, &cfi->chips[chipnum], bus_ofs); in cfi_amdstd_panic_write()
2155 tmp_buf = map_read(map, bus_ofs + chipstart); in cfi_amdstd_panic_write()
2158 n = min_t(int, len, map_bankwidth(map) - i); in cfi_amdstd_panic_write()
2160 tmp_buf = map_word_load_partial(map, tmp_buf, buf, i, n); in cfi_amdstd_panic_write()
2162 ret = do_panic_write_oneword(map, &cfi->chips[chipnum], in cfi_amdstd_panic_write()
2181 while (len >= map_bankwidth(map)) { in cfi_amdstd_panic_write()
2184 datum = map_word_load(map, buf); in cfi_amdstd_panic_write()
2186 ret = do_panic_write_oneword(map, &cfi->chips[chipnum], in cfi_amdstd_panic_write()
2191 ofs += map_bankwidth(map); in cfi_amdstd_panic_write()
2192 buf += map_bankwidth(map); in cfi_amdstd_panic_write()
2193 (*retlen) += map_bankwidth(map); in cfi_amdstd_panic_write()
2194 len -= map_bankwidth(map); in cfi_amdstd_panic_write()
2207 if (len & (map_bankwidth(map) - 1)) { in cfi_amdstd_panic_write()
2210 ret = cfi_amdstd_panic_wait(map, &cfi->chips[chipnum], ofs); in cfi_amdstd_panic_write()
2214 tmp_buf = map_read(map, ofs + chipstart); in cfi_amdstd_panic_write()
2216 tmp_buf = map_word_load_partial(map, tmp_buf, buf, 0, len); in cfi_amdstd_panic_write()
2218 ret = do_panic_write_oneword(map, &cfi->chips[chipnum], in cfi_amdstd_panic_write()
2234 static int __xipram do_erase_chip(struct map_info *map, struct flchip *chip) in do_erase_chip() argument
2236 struct cfi_private *cfi = map->fldrv_priv; in do_erase_chip()
2245 ret = get_chip(map, chip, adr, FL_WRITING); in do_erase_chip()
2254 XIP_INVAL_CACHED_RANGE(map, adr, map->size); in do_erase_chip()
2255 ENABLE_VPP(map); in do_erase_chip()
2256 xip_disable(map, chip, adr); in do_erase_chip()
2258 cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL); in do_erase_chip()
2259 cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, cfi->device_type, NULL); in do_erase_chip()
2260 cfi_send_gen_cmd(0x80, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL); in do_erase_chip()
2261 cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL); in do_erase_chip()
2262 cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, cfi->device_type, NULL); in do_erase_chip()
2263 cfi_send_gen_cmd(0x10, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL); in do_erase_chip()
2269 INVALIDATE_CACHE_UDELAY(map, chip, in do_erase_chip()
2270 adr, map->size, in do_erase_chip()
2293 if (chip_ready(map, adr)) in do_erase_chip()
2303 UDELAY(map, chip, adr, 1000000/HZ); in do_erase_chip()
2306 if (!chip_good(map, adr, map_word_ff(map))) { in do_erase_chip()
2308 map_write( map, CMD(0xF0), chip->start ); in do_erase_chip()
2315 xip_enable(map, chip, adr); in do_erase_chip()
2316 DISABLE_VPP(map); in do_erase_chip()
2317 put_chip(map, chip, adr); in do_erase_chip()
2324 static int __xipram do_erase_oneblock(struct map_info *map, struct flchip *chip, unsigned long adr,… in do_erase_oneblock() argument
2326 struct cfi_private *cfi = map->fldrv_priv; in do_erase_oneblock()
2334 ret = get_chip(map, chip, adr, FL_ERASING); in do_erase_oneblock()
2343 XIP_INVAL_CACHED_RANGE(map, adr, len); in do_erase_oneblock()
2344 ENABLE_VPP(map); in do_erase_oneblock()
2345 xip_disable(map, chip, adr); in do_erase_oneblock()
2347 cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL); in do_erase_oneblock()
2348 cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, cfi->device_type, NULL); in do_erase_oneblock()
2349 cfi_send_gen_cmd(0x80, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL); in do_erase_oneblock()
2350 cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL); in do_erase_oneblock()
2351 cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, cfi->device_type, NULL); in do_erase_oneblock()
2352 map_write(map, cfi->sector_erase_cmd, adr); in do_erase_oneblock()
2358 INVALIDATE_CACHE_UDELAY(map, chip, in do_erase_oneblock()
2382 if (chip_ready(map, adr)) { in do_erase_oneblock()
2383 xip_enable(map, chip, adr); in do_erase_oneblock()
2388 xip_enable(map, chip, adr); in do_erase_oneblock()
2395 UDELAY(map, chip, adr, 1000000/HZ); in do_erase_oneblock()
2398 if (!chip_good(map, adr, map_word_ff(map))) { in do_erase_oneblock()
2400 map_write( map, CMD(0xF0), chip->start ); in do_erase_oneblock()
2407 DISABLE_VPP(map); in do_erase_oneblock()
2408 put_chip(map, chip, adr); in do_erase_oneblock()
2435 struct map_info *map = mtd->priv; in cfi_amdstd_erase_chip() local
2436 struct cfi_private *cfi = map->fldrv_priv; in cfi_amdstd_erase_chip()
2445 ret = do_erase_chip(map, &cfi->chips[0]); in cfi_amdstd_erase_chip()
2455 static int do_atmel_lock(struct map_info *map, struct flchip *chip, in do_atmel_lock() argument
2458 struct cfi_private *cfi = map->fldrv_priv; in do_atmel_lock()
2462 ret = get_chip(map, chip, adr + chip->start, FL_LOCKING); in do_atmel_lock()
2469 cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, in do_atmel_lock()
2471 cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, in do_atmel_lock()
2473 cfi_send_gen_cmd(0x80, cfi->addr_unlock1, chip->start, map, cfi, in do_atmel_lock()
2475 cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, in do_atmel_lock()
2477 cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, in do_atmel_lock()
2479 map_write(map, CMD(0x40), chip->start + adr); in do_atmel_lock()
2482 put_chip(map, chip, adr + chip->start); in do_atmel_lock()
2490 static int do_atmel_unlock(struct map_info *map, struct flchip *chip, in do_atmel_unlock() argument
2493 struct cfi_private *cfi = map->fldrv_priv; in do_atmel_unlock()
2497 ret = get_chip(map, chip, adr + chip->start, FL_UNLOCKING); in do_atmel_unlock()
2504 cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, in do_atmel_unlock()
2506 map_write(map, CMD(0x70), adr); in do_atmel_unlock()
2509 put_chip(map, chip, adr + chip->start); in do_atmel_unlock()
2543 static int __maybe_unused do_ppb_xxlock(struct map_info *map, in do_ppb_xxlock() argument
2547 struct cfi_private *cfi = map->fldrv_priv; in do_ppb_xxlock()
2552 ret = get_chip(map, chip, adr + chip->start, FL_LOCKING); in do_ppb_xxlock()
2560 cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, in do_ppb_xxlock()
2562 cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, in do_ppb_xxlock()
2565 cfi_send_gen_cmd(0xC0, cfi->addr_unlock1, chip->start, map, cfi, in do_ppb_xxlock()
2570 map_write(map, CMD(0xA0), chip->start + adr); in do_ppb_xxlock()
2571 map_write(map, CMD(0x00), chip->start + adr); in do_ppb_xxlock()
2578 map_write(map, CMD(0x80), chip->start); in do_ppb_xxlock()
2579 map_write(map, CMD(0x30), chip->start); in do_ppb_xxlock()
2583 ret = !cfi_read_query(map, adr); in do_ppb_xxlock()
2592 if (chip_ready(map, adr)) in do_ppb_xxlock()
2601 UDELAY(map, chip, adr, 1); in do_ppb_xxlock()
2605 map_write(map, CMD(0x90), chip->start); in do_ppb_xxlock()
2606 map_write(map, CMD(0x00), chip->start); in do_ppb_xxlock()
2609 put_chip(map, chip, adr + chip->start); in do_ppb_xxlock()
2626 struct map_info *map = mtd->priv; in cfi_ppb_unlock() local
2627 struct cfi_private *cfi = map->fldrv_priv; in cfi_ppb_unlock()
2670 map, &cfi->chips[chipnum], adr, 0, in cfi_ppb_unlock()
2712 do_ppb_xxlock(map, sect[i].chip, sect[i].offset, 0, in cfi_ppb_unlock()
2729 struct map_info *map = mtd->priv; in cfi_amdstd_sync() local
2730 struct cfi_private *cfi = map->fldrv_priv; in cfi_amdstd_sync()
2790 struct map_info *map = mtd->priv; in cfi_amdstd_suspend() local
2791 struct cfi_private *cfi = map->fldrv_priv; in cfi_amdstd_suspend()
2844 struct map_info *map = mtd->priv; in cfi_amdstd_resume() local
2845 struct cfi_private *cfi = map->fldrv_priv; in cfi_amdstd_resume()
2857 map_write(map, CMD(0xF0), chip->start); in cfi_amdstd_resume()
2876 struct map_info *map = mtd->priv; in cfi_amdstd_reset() local
2877 struct cfi_private *cfi = map->fldrv_priv; in cfi_amdstd_reset()
2887 ret = get_chip(map, chip, chip->start, FL_SHUTDOWN); in cfi_amdstd_reset()
2889 map_write(map, CMD(0xF0), chip->start); in cfi_amdstd_reset()
2891 put_chip(map, chip, chip->start); in cfi_amdstd_reset()
2914 struct map_info *map = mtd->priv; in cfi_amdstd_destroy() local
2915 struct cfi_private *cfi = map->fldrv_priv; in cfi_amdstd_destroy()