• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/linux/linux-2.6.36/drivers/mtd/chips/

Lines Matching refs:map

36 #include <linux/mtd/map.h>
67 static int get_chip(struct map_info *map, struct flchip *chip, unsigned long adr, int mode);
68 static void put_chip(struct map_info *map, struct flchip *chip, unsigned long adr);
139 struct map_info *map = mtd->priv;
140 struct cfi_private *cfi = map->fldrv_priv;
150 map->name, cfi->mfr, cfi->id);
171 " detected\n", map->name);
175 printk(KERN_WARNING "%s: JEDEC Device ID is 0x%02X. Assuming broken CFI table.\n", map->name, cfi->id);
183 " deduced %s from Device ID\n", map->name, major, minor,
191 struct map_info *map = mtd->priv;
192 struct cfi_private *cfi = map->fldrv_priv;
202 struct map_info *map = mtd->priv;
203 struct cfi_private *cfi = map->fldrv_priv;
240 struct map_info *map = mtd->priv;
241 struct cfi_private *cfi = map->fldrv_priv;
262 struct map_info *map = mtd->priv;
263 struct cfi_private *cfi = map->fldrv_priv;
276 struct map_info *map = mtd->priv;
277 struct cfi_private *cfi = map->fldrv_priv;
287 struct map_info *map = mtd->priv;
288 struct cfi_private *cfi = map->fldrv_priv;
298 struct map_info *map = mtd->priv;
299 struct cfi_private *cfi = map->fldrv_priv;
309 struct map_info *map = mtd->priv;
310 struct cfi_private *cfi = map->fldrv_priv;
379 struct mtd_info *cfi_cmdset_0002(struct map_info *map, int primary)
381 struct cfi_private *cfi = map->fldrv_priv;
390 mtd->priv = map;
401 mtd->name = map->name;
411 extp = (struct cfi_pri_amdstd*)cfi_read_pri(map, adr, sizeof(*extp), "Amd/Fujitsu");
454 map->name, bootloc);
459 printk(KERN_WARNING "%s: Swapping erase regions for top-boot CFI table.\n", map->name);
497 map->fldrv = &cfi_amdstd_chipdrv;
501 struct mtd_info *cfi_cmdset_0006(struct map_info *map, int primary) __attribute__((alias("cfi_cmdset_0002")));
502 struct mtd_info *cfi_cmdset_0701(struct map_info *map, int primary) __attribute__((alias("cfi_cmdset_0002")));
509 struct map_info *map = mtd->priv;
510 struct cfi_private *cfi = map->fldrv_priv;
572 static int __xipram chip_ready(struct map_info *map, unsigned long addr)
576 d = map_read(map, addr);
577 t = map_read(map, addr);
579 return map_word_equal(map, d, t);
597 static int __xipram chip_good(struct map_info *map, unsigned long addr, map_word expected)
601 oldd = map_read(map, addr);
602 curd = map_read(map, addr);
604 return map_word_equal(map, oldd, curd) &&
605 map_word_equal(map, curd, expected);
608 static int get_chip(struct map_info *map, struct flchip *chip, unsigned long adr, int mode)
611 struct cfi_private *cfi = map->fldrv_priv;
622 if (chip_ready(map, adr))
654 map_write(map, CMD(0xB0), chip->in_progress_block_addr);
659 if (chip_ready(map, adr))
668 map_write(map, CMD(0x30), chip->in_progress_block_addr);
714 static void put_chip(struct map_info *map, struct flchip *chip, unsigned long adr)
716 struct cfi_private *cfi = map->fldrv_priv;
721 map_write(map, CMD(0x30), chip->in_progress_block_addr);
734 DISABLE_VPP(map);
755 static void xip_disable(struct map_info *map, struct flchip *chip,
759 (void) map_read(map, adr); /* ensure mmu mapping is up to date */
763 static void __xipram xip_enable(struct map_info *map, struct flchip *chip,
766 struct cfi_private *cfi = map->fldrv_priv;
769 map_write(map, CMD(0xf0), adr);
772 (void) map_read(map, adr);
790 static void __xipram xip_udelay(struct map_info *map, struct flchip *chip,
793 struct cfi_private *cfi = map->fldrv_priv;
814 map_write(map, CMD(0xb0), adr);
827 status = map_read(map, adr);
828 } while (!map_word_andequal(map, status, OK, OK));
832 if (!map_word_bitsset(map, status, CMD(0x40)))
836 map_write(map, CMD(0xf0), adr);
837 (void) map_read(map, adr);
864 map_write(map, CMD(0x30), adr);
875 status = map_read(map, adr);
876 } while (!map_word_andequal(map, status, OK, OK)
880 #define UDELAY(map, chip, adr, usec) xip_udelay(map, chip, adr, usec)
889 #define XIP_INVAL_CACHED_RANGE(map, from, size) \
890 INVALIDATE_CACHED_RANGE(map, from, size)
892 #define INVALIDATE_CACHE_UDELAY(map, chip, adr, len, usec) \
893 UDELAY(map, chip, adr, usec)
914 #define xip_disable(map, chip, adr)
915 #define xip_enable(map, chip, adr)
918 #define UDELAY(map, chip, adr, usec) \
925 #define INVALIDATE_CACHE_UDELAY(map, chip, adr, len, usec) \
928 INVALIDATE_CACHED_RANGE(map, adr, len); \
935 static inline int do_read_onechip(struct map_info *map, struct flchip *chip, loff_t adr, size_t len, u_char *buf)
938 struct cfi_private *cfi = map->fldrv_priv;
944 cmd_addr = adr & ~(map_bankwidth(map)-1);
947 ret = get_chip(map, chip, cmd_addr, FL_READY);
954 map_write(map, CMD(0xf0), cmd_addr);
958 map_copy_from(map, buf, adr, len);
960 put_chip(map, chip, cmd_addr);
969 struct map_info *map = mtd->priv;
970 struct cfi_private *cfi = map->fldrv_priv;
994 ret = do_read_onechip(map, &cfi->chips[chipnum], ofs, thislen, buf);
1009 static inline int do_read_secsi_onechip(struct map_info *map, struct flchip *chip, loff_t adr, size_t len, u_char *buf)
1013 struct cfi_private *cfi = map->fldrv_priv;
1035 cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL);
1036 cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, cfi->device_type, NULL);
1037 cfi_send_gen_cmd(0x88, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL);
1039 map_copy_from(map, buf, adr, len);
1041 cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL);
1042 cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, cfi->device_type, NULL);
1043 cfi_send_gen_cmd(0x90, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL);
1044 cfi_send_gen_cmd(0x00, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL);
1054 struct map_info *map = mtd->priv;
1055 struct cfi_private *cfi = map->fldrv_priv;
1081 ret = do_read_secsi_onechip(map, &cfi->chips[chipnum], ofs, thislen, buf);
1096 static int __xipram do_write_oneword(struct map_info *map, struct flchip *chip, unsigned long adr, map_word datum)
1098 struct cfi_private *cfi = map->fldrv_priv;
1117 ret = get_chip(map, chip, adr, FL_WRITING);
1132 oldd = map_read(map, adr);
1133 if (map_word_equal(map, oldd, datum)) {
1139 XIP_INVAL_CACHED_RANGE(map, adr, map_bankwidth(map));
1140 ENABLE_VPP(map);
1141 xip_disable(map, chip, adr);
1143 cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL);
1144 cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, cfi->device_type, NULL);
1145 cfi_send_gen_cmd(0xA0, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL);
1146 map_write(map, datum, adr);
1149 INVALIDATE_CACHE_UDELAY(map, chip,
1150 adr, map_bankwidth(map),
1170 if (time_after(jiffies, timeo) && !chip_ready(map, adr)){
1171 xip_enable(map, chip, adr);
1173 xip_disable(map, chip, adr);
1177 if (chip_ready(map, adr))
1181 UDELAY(map, chip, adr, 1);
1184 if (!chip_good(map, adr, datum)) {
1186 map_write( map, CMD(0xF0), chip->start );
1193 xip_enable(map, chip, adr);
1196 put_chip(map, chip, adr);
1206 struct map_info *map = mtd->priv;
1207 struct cfi_private *cfi = map->fldrv_priv;
1222 if (ofs & (map_bankwidth(map)-1)) {
1223 unsigned long bus_ofs = ofs & ~(map_bankwidth(map)-1);
1243 tmp_buf = map_read(map, bus_ofs+chipstart);
1248 n = min_t(int, len, map_bankwidth(map)-i);
1250 tmp_buf = map_word_load_partial(map, tmp_buf, buf, i, n);
1252 ret = do_write_oneword(map, &cfi->chips[chipnum],
1271 while(len >= map_bankwidth(map)) {
1274 datum = map_word_load(map, buf);
1276 ret = do_write_oneword(map, &cfi->chips[chipnum],
1281 ofs += map_bankwidth(map);
1282 buf += map_bankwidth(map);
1283 (*retlen) += map_bankwidth(map);
1284 len -= map_bankwidth(map);
1296 if (len & (map_bankwidth(map)-1)) {
1313 tmp_buf = map_read(map, ofs + chipstart);
1317 tmp_buf = map_word_load_partial(map, tmp_buf, buf, 0, len);
1319 ret = do_write_oneword(map, &cfi->chips[chipnum],
1331 static int __xipram do_write_buffer(struct map_info *map, struct flchip *chip,
1335 struct cfi_private *cfi = map->fldrv_priv;
1348 ret = get_chip(map, chip, adr, FL_WRITING);
1354 datum = map_word_load(map, buf);
1359 XIP_INVAL_CACHED_RANGE(map, adr, len);
1360 ENABLE_VPP(map);
1361 xip_disable(map, chip, cmd_adr);
1363 cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL);
1364 cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, cfi->device_type, NULL);
1365 //cfi_send_gen_cmd(0xA0, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL);
1368 map_write(map, CMD(0x25), cmd_adr);
1373 words = len / map_bankwidth(map);
1374 map_write(map, CMD(words - 1), cmd_adr);
1377 while(z < words * map_bankwidth(map)) {
1378 datum = map_word_load(map, buf);
1379 map_write(map, datum, adr + z);
1381 z += map_bankwidth(map);
1382 buf += map_bankwidth(map);
1384 z -= map_bankwidth(map);
1389 map_write(map, CMD(0x29), cmd_adr);
1392 INVALIDATE_CACHE_UDELAY(map, chip,
1393 adr, map_bankwidth(map),
1413 if (time_after(jiffies, timeo) && !chip_ready(map, adr))
1416 if (chip_ready(map, adr)) {
1417 xip_enable(map, chip, adr);
1422 UDELAY(map, chip, adr, 1);
1426 map_write( map, CMD(0xF0), chip->start );
1427 xip_enable(map, chip, adr);
1435 put_chip(map, chip, adr);
1445 struct map_info *map = mtd->priv;
1446 struct cfi_private *cfi = map->fldrv_priv;
1460 if (ofs & (map_bankwidth(map)-1)) {
1461 size_t local_len = (-ofs)&(map_bankwidth(map)-1);
1481 while (len >= map_bankwidth(map) * 2) {
1487 if (size % map_bankwidth(map))
1488 size -= size % map_bankwidth(map);
1490 ret = do_write_buffer(map, &cfi->chips[chipnum],
1526 static int __xipram do_erase_chip(struct map_info *map, struct flchip *chip)
1528 struct cfi_private *cfi = map->fldrv_priv;
1537 ret = get_chip(map, chip, adr, FL_WRITING);
1546 XIP_INVAL_CACHED_RANGE(map, adr, map->size);
1547 ENABLE_VPP(map);
1548 xip_disable(map, chip, adr);
1550 cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL);
1551 cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, cfi->device_type, NULL);
1552 cfi_send_gen_cmd(0x80, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL);
1553 cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL);
1554 cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, cfi->device_type, NULL);
1555 cfi_send_gen_cmd(0x10, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL);
1561 INVALIDATE_CACHE_UDELAY(map, chip,
1562 adr, map->size,
1585 if (chip_ready(map, adr))
1595 UDELAY(map, chip, adr, 1000000/HZ);
1598 if (!chip_good(map, adr, map_word_ff(map))) {
1600 map_write( map, CMD(0xF0), chip->start );
1606 xip_enable(map, chip, adr);
1607 put_chip(map, chip, adr);
1614 static int __xipram do_erase_oneblock(struct map_info *map, struct flchip *chip, unsigned long adr, int len, void *thunk)
1616 struct cfi_private *cfi = map->fldrv_priv;
1624 ret = get_chip(map, chip, adr, FL_ERASING);
1633 XIP_INVAL_CACHED_RANGE(map, adr, len);
1634 ENABLE_VPP(map);
1635 xip_disable(map, chip, adr);
1637 cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL);
1638 cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, cfi->device_type, NULL);
1639 cfi_send_gen_cmd(0x80, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL);
1640 cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL);
1641 cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, cfi->device_type, NULL);
1642 map_write(map, CMD(0x30), adr);
1648 INVALIDATE_CACHE_UDELAY(map, chip,
1672 if (chip_ready(map, adr)) {
1673 xip_enable(map, chip, adr);
1678 xip_enable(map, chip, adr);
1685 UDELAY(map, chip, adr, 1000000/HZ);
1688 if (!chip_good(map, adr, map_word_ff(map))) {
1690 map_write( map, CMD(0xF0), chip->start );
1696 put_chip(map, chip, adr);
1723 struct map_info *map = mtd->priv;
1724 struct cfi_private *cfi = map->fldrv_priv;
1733 ret = do_erase_chip(map, &cfi->chips[0]);
1743 static int do_atmel_lock(struct map_info *map, struct flchip *chip,
1746 struct cfi_private *cfi = map->fldrv_priv;
1750 ret = get_chip(map, chip, adr + chip->start, FL_LOCKING);
1758 cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi,
1760 cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi,
1762 cfi_send_gen_cmd(0x80, cfi->addr_unlock1, chip->start, map, cfi,
1764 cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi,
1766 cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi,
1768 map_write(map, CMD(0x40), chip->start + adr);
1771 put_chip(map, chip, adr + chip->start);
1779 static int do_atmel_unlock(struct map_info *map, struct flchip *chip,
1782 struct cfi_private *cfi = map->fldrv_priv;
1786 ret = get_chip(map, chip, adr + chip->start, FL_UNLOCKING);
1794 cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi,
1796 map_write(map, CMD(0x70), adr);
1799 put_chip(map, chip, adr + chip->start);
1820 struct map_info *map = mtd->priv;
1821 struct cfi_private *cfi = map->fldrv_priv;
1881 struct map_info *map = mtd->priv;
1882 struct cfi_private *cfi = map->fldrv_priv;
1935 struct map_info *map = mtd->priv;
1936 struct cfi_private *cfi = map->fldrv_priv;
1948 map_write(map, CMD(0xF0), chip->start);
1967 struct map_info *map = mtd->priv;
1968 struct cfi_private *cfi = map->fldrv_priv;
1978 ret = get_chip(map, chip, chip->start, FL_SHUTDOWN);
1980 map_write(map, CMD(0xF0), chip->start);
1982 put_chip(map, chip, chip->start);
2005 struct map_info *map = mtd->priv;
2006 struct cfi_private *cfi = map->fldrv_priv;