drivers/mtd/devices/docg3.c
100
static inline u16 doc_readw(struct docg3 *docg3, u16 reg)
drivers/mtd/devices/docg3.c
1002
doc_read_page_finish(docg3);
drivers/mtd/devices/docg3.c
1015
struct docg3 *docg3 = mtd->priv;
drivers/mtd/devices/docg3.c
1019
docg3->reliable);
drivers/mtd/devices/docg3.c
102
u16 val = readw(docg3->cascade->base + reg);
drivers/mtd/devices/docg3.c
1025
if (block1 > docg3->max_block)
drivers/mtd/devices/docg3.c
1028
is_good = docg3->bbt[block0 >> 3] & (1 << (block0 & 0x7));
drivers/mtd/devices/docg3.c
1043
static int doc_get_erase_count(struct docg3 *docg3, loff_t from)
drivers/mtd/devices/docg3.c
1052
calc_block_sector(from, &block0, &block1, &page, &ofs, docg3->reliable);
drivers/mtd/devices/docg3.c
1053
if (block1 > docg3->max_block)
drivers/mtd/devices/docg3.c
1056
ret = doc_reset_seq(docg3);
drivers/mtd/devices/docg3.c
1058
ret = doc_read_page_prepare(docg3, block0, block1, page,
drivers/mtd/devices/docg3.c
1061
ret = doc_read_page_getbytes(docg3, DOC_LAYOUT_WEAR_SIZE,
drivers/mtd/devices/docg3.c
1063
doc_read_page_finish(docg3);
drivers/mtd/devices/docg3.c
108
static inline void doc_writeb(struct docg3 *docg3, u8 val, u16 reg)
drivers/mtd/devices/docg3.c
1084
static int doc_get_op_status(struct docg3 *docg3)
drivers/mtd/devices/docg3.c
1088
doc_flash_sequence(docg3, DOC_SEQ_PLANES_STATUS);
drivers/mtd/devices/docg3.c
1089
doc_flash_command(docg3, DOC_CMD_PLANES_STATUS);
drivers/mtd/devices/docg3.c
1090
doc_delay(docg3, 5);
drivers/mtd/devices/docg3.c
1092
doc_ecc_disable(docg3);
drivers/mtd/devices/docg3.c
1093
doc_read_data_area(docg3, &status, 1, 1);
drivers/mtd/devices/docg3.c
110
writeb(val, docg3->cascade->base + reg);
drivers/mtd/devices/docg3.c
1107
static int doc_write_erase_wait_status(struct docg3 *docg3)
drivers/mtd/devices/docg3.c
1111
for (i = 0; !doc_is_ready(docg3) && i < 5; i++)
drivers/mtd/devices/docg3.c
1113
if (!doc_is_ready(docg3)) {
drivers/mtd/devices/docg3.c
1119
status = doc_get_op_status(docg3);
drivers/mtd/devices/docg3.c
1127
doc_page_finish(docg3);
drivers/mtd/devices/docg3.c
114
static inline void doc_writew(struct docg3 *docg3, u16 val, u16 reg)
drivers/mtd/devices/docg3.c
1142
static int doc_erase_block(struct docg3 *docg3, int block0, int block1)
drivers/mtd/devices/docg3.c
1147
ret = doc_reset_seq(docg3);
drivers/mtd/devices/docg3.c
1151
doc_set_reliable_mode(docg3);
drivers/mtd/devices/docg3.c
1152
doc_flash_sequence(docg3, DOC_SEQ_ERASE);
drivers/mtd/devices/docg3.c
1155
doc_flash_command(docg3, DOC_CMD_PROG_BLOCK_ADDR);
drivers/mtd/devices/docg3.c
1156
doc_setup_addr_sector(docg3, sector);
drivers/mtd/devices/docg3.c
1158
doc_flash_command(docg3, DOC_CMD_PROG_BLOCK_ADDR);
drivers/mtd/devices/docg3.c
1159
doc_setup_addr_sector(docg3, sector);
drivers/mtd/devices/docg3.c
116
writew(val, docg3->cascade->base + reg);
drivers/mtd/devices/docg3.c
1160
doc_delay(docg3, 1);
drivers/mtd/devices/docg3.c
1162
doc_flash_command(docg3, DOC_CMD_ERASECYCLE2);
drivers/mtd/devices/docg3.c
1163
doc_delay(docg3, 2);
drivers/mtd/devices/docg3.c
1165
if (is_prot_seq_error(docg3)) {
drivers/mtd/devices/docg3.c
1170
return doc_write_erase_wait_status(docg3);
drivers/mtd/devices/docg3.c
1186
struct docg3 *docg3 = mtd->priv;
drivers/mtd/devices/docg3.c
1193
&ofs, docg3->reliable);
drivers/mtd/devices/docg3.c
1198
docg3->reliable);
drivers/mtd/devices/docg3.c
1199
mutex_lock(&docg3->cascade->lock);
drivers/mtd/devices/docg3.c
120
static inline void doc_flash_command(struct docg3 *docg3, u8 cmd)
drivers/mtd/devices/docg3.c
1200
doc_set_device_id(docg3, docg3->device_id);
drivers/mtd/devices/docg3.c
1201
doc_set_reliable_mode(docg3);
drivers/mtd/devices/docg3.c
1203
ret = doc_erase_block(docg3, block0, block1);
drivers/mtd/devices/docg3.c
1207
mutex_unlock(&docg3->cascade->lock);
drivers/mtd/devices/docg3.c
122
doc_writeb(docg3, cmd, DOC_FLASHCOMMAND);
drivers/mtd/devices/docg3.c
1231
static int doc_write_page(struct docg3 *docg3, loff_t to, const u_char *buf,
drivers/mtd/devices/docg3.c
1238
calc_block_sector(to, &block0, &block1, &page, &ofs, docg3->reliable);
drivers/mtd/devices/docg3.c
1240
doc_set_device_id(docg3, docg3->device_id);
drivers/mtd/devices/docg3.c
1241
ret = doc_reset_seq(docg3);
drivers/mtd/devices/docg3.c
1246
ret = doc_write_seek(docg3, block0, block1, page, ofs);
drivers/mtd/devices/docg3.c
125
static inline void doc_flash_sequence(struct docg3 *docg3, u8 seq)
drivers/mtd/devices/docg3.c
1250
doc_write_page_ecc_init(docg3, DOC_ECC_BCH_TOTAL_BYTES);
drivers/mtd/devices/docg3.c
1251
doc_delay(docg3, 2);
drivers/mtd/devices/docg3.c
1252
doc_write_page_putbytes(docg3, DOC_LAYOUT_PAGE_SIZE, buf);
drivers/mtd/devices/docg3.c
1255
doc_write_page_putbytes(docg3, DOC_LAYOUT_OOB_PAGEINFO_SZ, oob);
drivers/mtd/devices/docg3.c
1256
doc_delay(docg3, 2);
drivers/mtd/devices/docg3.c
1259
hamming = doc_register_readb(docg3, DOC_HAMMINGPARITY);
drivers/mtd/devices/docg3.c
1260
doc_delay(docg3, 2);
drivers/mtd/devices/docg3.c
1261
doc_write_page_putbytes(docg3, DOC_LAYOUT_OOB_HAMMING_SZ,
drivers/mtd/devices/docg3.c
1263
doc_delay(docg3, 2);
drivers/mtd/devices/docg3.c
1265
doc_get_bch_hw_ecc(docg3, hwecc);
drivers/mtd/devices/docg3.c
1266
doc_write_page_putbytes(docg3, DOC_LAYOUT_OOB_BCH_SZ, hwecc);
drivers/mtd/devices/docg3.c
1267
doc_delay(docg3, 2);
drivers/mtd/devices/docg3.c
1269
doc_write_page_putbytes(docg3, DOC_LAYOUT_OOB_UNUSED_SZ, oob);
drivers/mtd/devices/docg3.c
127
doc_writeb(docg3, seq, DOC_FLASHSEQUENCE);
drivers/mtd/devices/docg3.c
1272
doc_write_page_putbytes(docg3, DOC_LAYOUT_OOB_SIZE, oob);
drivers/mtd/devices/docg3.c
1274
doc_delay(docg3, 2);
drivers/mtd/devices/docg3.c
1275
doc_page_finish(docg3);
drivers/mtd/devices/docg3.c
1276
doc_delay(docg3, 2);
drivers/mtd/devices/docg3.c
1277
doc_flash_command(docg3, DOC_CMD_PROG_CYCLE2);
drivers/mtd/devices/docg3.c
1278
doc_delay(docg3, 2);
drivers/mtd/devices/docg3.c
1284
ret = doc_write_erase_wait_status(docg3);
drivers/mtd/devices/docg3.c
1287
doc_read_page_finish(docg3);
drivers/mtd/devices/docg3.c
130
static inline void doc_flash_address(struct docg3 *docg3, u8 addr)
drivers/mtd/devices/docg3.c
132
doc_writeb(docg3, addr, DOC_FLASHADDRESS);
drivers/mtd/devices/docg3.c
1344
static int doc_backup_oob(struct docg3 *docg3, loff_t to,
drivers/mtd/devices/docg3.c
1355
docg3->oob_write_ofs = to;
drivers/mtd/devices/docg3.c
1356
docg3->oob_autoecc = autoecc;
drivers/mtd/devices/docg3.c
1358
doc_fill_autooob(docg3->oob_write_buf, ops->oobbuf);
drivers/mtd/devices/docg3.c
1361
memcpy(docg3->oob_write_buf, ops->oobbuf, DOC_LAYOUT_OOB_SIZE);
drivers/mtd/devices/docg3.c
137
static int doc_register_readb(struct docg3 *docg3, int reg)
drivers/mtd/devices/docg3.c
1385
struct docg3 *docg3 = mtd->priv;
drivers/mtd/devices/docg3.c
141
doc_writew(docg3, reg, DOC_READADDRESS);
drivers/mtd/devices/docg3.c
142
val = doc_readb(docg3, reg);
drivers/mtd/devices/docg3.c
1430
return doc_backup_oob(docg3, ofs, ops);
drivers/mtd/devices/docg3.c
1436
mutex_lock(&docg3->cascade->lock);
drivers/mtd/devices/docg3.c
1439
if (ofs == docg3->oob_write_ofs)
drivers/mtd/devices/docg3.c
1440
memcpy(oob, docg3->oob_write_buf, DOC_LAYOUT_OOB_SIZE);
drivers/mtd/devices/docg3.c
1445
ret = doc_write_page(docg3, ofs, buf, oob, autoecc);
drivers/mtd/devices/docg3.c
1458
doc_set_device_id(docg3, 0);
drivers/mtd/devices/docg3.c
1459
mutex_unlock(&docg3->cascade->lock);
drivers/mtd/devices/docg3.c
1463
static struct docg3 *sysfs_dev2docg3(struct device *dev,
drivers/mtd/devices/docg3.c
147
static int doc_register_readw(struct docg3 *docg3, int reg)
drivers/mtd/devices/docg3.c
1479
struct docg3 *docg3 = sysfs_dev2docg3(dev, attr);
drivers/mtd/devices/docg3.c
1482
mutex_lock(&docg3->cascade->lock);
drivers/mtd/devices/docg3.c
1483
doc_set_device_id(docg3, docg3->device_id);
drivers/mtd/devices/docg3.c
1484
dps0 = doc_register_readb(docg3, DOC_DPS0_STATUS);
drivers/mtd/devices/docg3.c
1485
doc_set_device_id(docg3, 0);
drivers/mtd/devices/docg3.c
1486
mutex_unlock(&docg3->cascade->lock);
drivers/mtd/devices/docg3.c
1494
struct docg3 *docg3 = sysfs_dev2docg3(dev, attr);
drivers/mtd/devices/docg3.c
1497
mutex_lock(&docg3->cascade->lock);
drivers/mtd/devices/docg3.c
1498
doc_set_device_id(docg3, docg3->device_id);
drivers/mtd/devices/docg3.c
1499
dps1 = doc_register_readb(docg3, DOC_DPS1_STATUS);
drivers/mtd/devices/docg3.c
1500
doc_set_device_id(docg3, 0);
drivers/mtd/devices/docg3.c
1501
mutex_unlock(&docg3->cascade->lock);
drivers/mtd/devices/docg3.c
151
doc_writew(docg3, reg, DOC_READADDRESS);
drivers/mtd/devices/docg3.c
1510
struct docg3 *docg3 = sysfs_dev2docg3(dev, attr);
drivers/mtd/devices/docg3.c
1516
mutex_lock(&docg3->cascade->lock);
drivers/mtd/devices/docg3.c
1517
doc_set_device_id(docg3, docg3->device_id);
drivers/mtd/devices/docg3.c
1519
doc_writeb(docg3, buf[i], DOC_DPS0_KEY);
drivers/mtd/devices/docg3.c
152
val = doc_readw(docg3, reg);
drivers/mtd/devices/docg3.c
1520
doc_set_device_id(docg3, 0);
drivers/mtd/devices/docg3.c
1521
mutex_unlock(&docg3->cascade->lock);
drivers/mtd/devices/docg3.c
1529
struct docg3 *docg3 = sysfs_dev2docg3(dev, attr);
drivers/mtd/devices/docg3.c
1535
mutex_lock(&docg3->cascade->lock);
drivers/mtd/devices/docg3.c
1536
doc_set_device_id(docg3, docg3->device_id);
drivers/mtd/devices/docg3.c
1538
doc_writeb(docg3, buf[i], DOC_DPS1_KEY);
drivers/mtd/devices/docg3.c
1539
doc_set_device_id(docg3, 0);
drivers/mtd/devices/docg3.c
1540
mutex_unlock(&docg3->cascade->lock);
drivers/mtd/devices/docg3.c
1602
struct docg3 *docg3 = s->private;
drivers/mtd/devices/docg3.c
1606
mutex_lock(&docg3->cascade->lock);
drivers/mtd/devices/docg3.c
1607
fctrl = doc_register_readb(docg3, DOC_FLASHCONTROL);
drivers/mtd/devices/docg3.c
1608
mutex_unlock(&docg3->cascade->lock);
drivers/mtd/devices/docg3.c
1624
struct docg3 *docg3 = s->private;
drivers/mtd/devices/docg3.c
1628
mutex_lock(&docg3->cascade->lock);
drivers/mtd/devices/docg3.c
1629
pctrl = doc_register_readb(docg3, DOC_ASICMODE);
drivers/mtd/devices/docg3.c
1631
mutex_unlock(&docg3->cascade->lock);
drivers/mtd/devices/docg3.c
1661
struct docg3 *docg3 = s->private;
drivers/mtd/devices/docg3.c
1664
mutex_lock(&docg3->cascade->lock);
drivers/mtd/devices/docg3.c
1665
id = doc_register_readb(docg3, DOC_DEVICESELECT);
drivers/mtd/devices/docg3.c
1666
mutex_unlock(&docg3->cascade->lock);
drivers/mtd/devices/docg3.c
1675
struct docg3 *docg3 = s->private;
drivers/mtd/devices/docg3.c
1678
mutex_lock(&docg3->cascade->lock);
drivers/mtd/devices/docg3.c
1679
protect = doc_register_readb(docg3, DOC_PROTECTION);
drivers/mtd/devices/docg3.c
168
static void doc_delay(struct docg3 *docg3, int nbNOPs)
drivers/mtd/devices/docg3.c
1680
dps0 = doc_register_readb(docg3, DOC_DPS0_STATUS);
drivers/mtd/devices/docg3.c
1681
dps0_low = doc_register_readw(docg3, DOC_DPS0_ADDRLOW);
drivers/mtd/devices/docg3.c
1682
dps0_high = doc_register_readw(docg3, DOC_DPS0_ADDRHIGH);
drivers/mtd/devices/docg3.c
1683
dps1 = doc_register_readb(docg3, DOC_DPS1_STATUS);
drivers/mtd/devices/docg3.c
1684
dps1_low = doc_register_readw(docg3, DOC_DPS1_ADDRLOW);
drivers/mtd/devices/docg3.c
1685
dps1_high = doc_register_readw(docg3, DOC_DPS1_ADDRHIGH);
drivers/mtd/devices/docg3.c
1686
mutex_unlock(&docg3->cascade->lock);
drivers/mtd/devices/docg3.c
1728
struct docg3 *docg3 = floor->priv;
drivers/mtd/devices/docg3.c
1738
debugfs_create_file("docg3_flashcontrol", S_IRUSR, root, docg3,
drivers/mtd/devices/docg3.c
174
doc_writeb(docg3, 0, DOC_NOP);
drivers/mtd/devices/docg3.c
1740
debugfs_create_file("docg3_asic_mode", S_IRUSR, root, docg3,
drivers/mtd/devices/docg3.c
1742
debugfs_create_file("docg3_device_id", S_IRUSR, root, docg3,
drivers/mtd/devices/docg3.c
1744
debugfs_create_file("docg3_protection", S_IRUSR, root, docg3,
drivers/mtd/devices/docg3.c
1755
struct docg3 *docg3 = mtd->priv;
drivers/mtd/devices/docg3.c
1758
cfg = doc_register_readb(docg3, DOC_CONFIGURATION);
drivers/mtd/devices/docg3.c
1759
docg3->if_cfg = (cfg & DOC_CONF_IF_CFG ? 1 : 0);
drivers/mtd/devices/docg3.c
1760
docg3->reliable = reliable_mode;
drivers/mtd/devices/docg3.c
1764
mtd->name = devm_kasprintf(docg3->dev, GFP_KERNEL, "docg3.%d",
drivers/mtd/devices/docg3.c
1765
docg3->device_id);
drivers/mtd/devices/docg3.c
1768
docg3->max_block = 2047;
drivers/mtd/devices/docg3.c
177
static int is_prot_seq_error(struct docg3 *docg3)
drivers/mtd/devices/docg3.c
1773
mtd->size = (docg3->max_block + 1) * DOC_LAYOUT_BLOCK_SIZE;
drivers/mtd/devices/docg3.c
1774
if (docg3->reliable == 2)
drivers/mtd/devices/docg3.c
1777
if (docg3->reliable == 2)
drivers/mtd/devices/docg3.c
1809
struct docg3 *docg3;
drivers/mtd/devices/docg3.c
181
ctrl = doc_register_readb(docg3, DOC_FLASHCONTROL);
drivers/mtd/devices/docg3.c
1813
docg3 = kzalloc_obj(struct docg3);
drivers/mtd/devices/docg3.c
1814
if (!docg3)
drivers/mtd/devices/docg3.c
1819
mtd->priv = docg3;
drivers/mtd/devices/docg3.c
1821
bbt_nbpages = DIV_ROUND_UP(docg3->max_block + 1,
drivers/mtd/devices/docg3.c
1823
docg3->bbt = kcalloc(DOC_LAYOUT_PAGE_SIZE, bbt_nbpages, GFP_KERNEL);
drivers/mtd/devices/docg3.c
1824
if (!docg3->bbt)
drivers/mtd/devices/docg3.c
1827
docg3->dev = dev;
drivers/mtd/devices/docg3.c
1828
docg3->device_id = floor;
drivers/mtd/devices/docg3.c
1829
docg3->cascade = cascade;
drivers/mtd/devices/docg3.c
1830
doc_set_device_id(docg3, docg3->device_id);
drivers/mtd/devices/docg3.c
1832
doc_set_asic_mode(docg3, DOC_ASICMODE_RESET);
drivers/mtd/devices/docg3.c
1833
doc_set_asic_mode(docg3, DOC_ASICMODE_NORMAL);
drivers/mtd/devices/docg3.c
1835
chip_id = doc_register_readw(docg3, DOC_CHIPID);
drivers/mtd/devices/docg3.c
1836
chip_id_inv = doc_register_readw(docg3, DOC_CHIPID_INV);
drivers/mtd/devices/docg3.c
1846
docg3->cascade->base, floor);
drivers/mtd/devices/docg3.c
185
static int doc_is_ready(struct docg3 *docg3)
drivers/mtd/devices/docg3.c
1857
doc_hamming_ecc_init(docg3, DOC_LAYOUT_OOB_PAGEINFO_SZ);
drivers/mtd/devices/docg3.c
1858
doc_reload_bbt(docg3);
drivers/mtd/devices/docg3.c
1862
kfree(docg3->bbt);
drivers/mtd/devices/docg3.c
1866
kfree(docg3);
drivers/mtd/devices/docg3.c
1877
struct docg3 *docg3 = mtd->priv;
drivers/mtd/devices/docg3.c
1880
kfree(docg3->bbt);
drivers/mtd/devices/docg3.c
1881
kfree(docg3);
drivers/mtd/devices/docg3.c
189
ctrl = doc_register_readb(docg3, DOC_FLASHCONTROL);
drivers/mtd/devices/docg3.c
1896
struct docg3 *docg3;
drivers/mtd/devices/docg3.c
1901
docg3 = mtd->priv;
drivers/mtd/devices/docg3.c
1905
doc_readb(docg3, DOC_IOSPACE_IPL);
drivers/mtd/devices/docg3.c
1923
struct docg3 *docg3;
drivers/mtd/devices/docg3.c
193
static int doc_wait_ready(struct docg3 *docg3)
drivers/mtd/devices/docg3.c
1932
docg3 = mtd->priv;
drivers/mtd/devices/docg3.c
1934
doc_writeb(docg3, floor, DOC_DEVICESELECT);
drivers/mtd/devices/docg3.c
1935
ctrl = doc_register_readb(docg3, DOC_FLASHCONTROL);
drivers/mtd/devices/docg3.c
1937
doc_writeb(docg3, ctrl, DOC_FLASHCONTROL);
drivers/mtd/devices/docg3.c
1941
pwr_down = doc_register_readb(docg3, DOC_POWERMODE);
drivers/mtd/devices/docg3.c
1956
docg3 = mtd->priv;
drivers/mtd/devices/docg3.c
1957
doc_set_asic_mode(docg3, DOC_ASICMODE_POWERDOWN);
drivers/mtd/devices/docg3.c
198
doc_delay(docg3, 4);
drivers/mtd/devices/docg3.c
200
} while (!doc_is_ready(docg3) && maxWaitCycles--);
drivers/mtd/devices/docg3.c
201
doc_delay(docg3, 2);
drivers/mtd/devices/docg3.c
2052
struct docg3 *docg3 = cascade->floors[0]->priv;
drivers/mtd/devices/docg3.c
2060
bch_free(docg3->cascade->bch);
drivers/mtd/devices/docg3.c
208
static int doc_reset_seq(struct docg3 *docg3)
drivers/mtd/devices/docg3.c
212
doc_writeb(docg3, 0x10, DOC_FLASHCONTROL);
drivers/mtd/devices/docg3.c
213
doc_flash_sequence(docg3, DOC_SEQ_RESET);
drivers/mtd/devices/docg3.c
214
doc_flash_command(docg3, DOC_CMD_RESET);
drivers/mtd/devices/docg3.c
215
doc_delay(docg3, 2);
drivers/mtd/devices/docg3.c
216
ret = doc_wait_ready(docg3);
drivers/mtd/devices/docg3.c
231
static void doc_read_data_area(struct docg3 *docg3, void *buf, int len,
drivers/mtd/devices/docg3.c
243
doc_writew(docg3, DOC_IOSPACE_DATA, DOC_READADDRESS);
drivers/mtd/devices/docg3.c
246
data16 = doc_readw(docg3, DOC_IOSPACE_DATA);
drivers/mtd/devices/docg3.c
254
doc_writew(docg3, DOC_IOSPACE_DATA | DOC_READADDR_ONE_BYTE,
drivers/mtd/devices/docg3.c
256
doc_delay(docg3, 1);
drivers/mtd/devices/docg3.c
259
data8 = doc_readb(docg3, DOC_IOSPACE_DATA);
drivers/mtd/devices/docg3.c
276
static void doc_write_data_area(struct docg3 *docg3, const void *buf, int len)
drivers/mtd/devices/docg3.c
286
doc_writew(docg3, DOC_IOSPACE_DATA, DOC_READADDRESS);
drivers/mtd/devices/docg3.c
289
doc_writew(docg3, *src16, DOC_IOSPACE_DATA);
drivers/mtd/devices/docg3.c
295
doc_writew(docg3, DOC_IOSPACE_DATA | DOC_READADDR_ONE_BYTE,
drivers/mtd/devices/docg3.c
297
doc_writeb(docg3, *src8, DOC_IOSPACE_DATA);
drivers/mtd/devices/docg3.c
317
static void doc_set_reliable_mode(struct docg3 *docg3)
drivers/mtd/devices/docg3.c
321
doc_dbg("doc_set_reliable_mode(%s)\n", strmode[docg3->reliable]);
drivers/mtd/devices/docg3.c
322
switch (docg3->reliable) {
drivers/mtd/devices/docg3.c
326
doc_flash_sequence(docg3, DOC_SEQ_SET_FASTMODE);
drivers/mtd/devices/docg3.c
327
doc_flash_command(docg3, DOC_CMD_FAST_MODE);
drivers/mtd/devices/docg3.c
330
doc_flash_sequence(docg3, DOC_SEQ_SET_RELIABLEMODE);
drivers/mtd/devices/docg3.c
331
doc_flash_command(docg3, DOC_CMD_FAST_MODE);
drivers/mtd/devices/docg3.c
332
doc_flash_command(docg3, DOC_CMD_RELIABLE_MODE);
drivers/mtd/devices/docg3.c
338
doc_delay(docg3, 2);
drivers/mtd/devices/docg3.c
351
static void doc_set_asic_mode(struct docg3 *docg3, u8 mode)
drivers/mtd/devices/docg3.c
356
doc_readb(docg3, DOC_IOSPACE_IPL);
drivers/mtd/devices/docg3.c
360
doc_writeb(docg3, mode, DOC_ASICMODE);
drivers/mtd/devices/docg3.c
361
doc_writeb(docg3, ~mode, DOC_ASICMODECONFIRM);
drivers/mtd/devices/docg3.c
362
doc_delay(docg3, 1);
drivers/mtd/devices/docg3.c
373
static void doc_set_device_id(struct docg3 *docg3, int id)
drivers/mtd/devices/docg3.c
378
doc_writeb(docg3, id, DOC_DEVICESELECT);
drivers/mtd/devices/docg3.c
379
ctrl = doc_register_readb(docg3, DOC_FLASHCONTROL);
drivers/mtd/devices/docg3.c
383
doc_writeb(docg3, ctrl, DOC_FLASHCONTROL);
drivers/mtd/devices/docg3.c
397
static int doc_set_extra_page_mode(struct docg3 *docg3)
drivers/mtd/devices/docg3.c
402
doc_flash_sequence(docg3, DOC_SEQ_PAGE_SIZE_532);
drivers/mtd/devices/docg3.c
403
doc_flash_command(docg3, DOC_CMD_PAGE_SIZE_532);
drivers/mtd/devices/docg3.c
404
doc_delay(docg3, 2);
drivers/mtd/devices/docg3.c
406
fctrl = doc_register_readb(docg3, DOC_FLASHCONTROL);
drivers/mtd/devices/docg3.c
418
static void doc_setup_addr_sector(struct docg3 *docg3, int sector)
drivers/mtd/devices/docg3.c
420
doc_delay(docg3, 1);
drivers/mtd/devices/docg3.c
421
doc_flash_address(docg3, sector & 0xff);
drivers/mtd/devices/docg3.c
422
doc_flash_address(docg3, (sector >> 8) & 0xff);
drivers/mtd/devices/docg3.c
423
doc_flash_address(docg3, (sector >> 16) & 0xff);
drivers/mtd/devices/docg3.c
424
doc_delay(docg3, 1);
drivers/mtd/devices/docg3.c
433
static void doc_setup_writeaddr_sector(struct docg3 *docg3, int sector, int ofs)
drivers/mtd/devices/docg3.c
436
doc_delay(docg3, 1);
drivers/mtd/devices/docg3.c
437
doc_flash_address(docg3, ofs & 0xff);
drivers/mtd/devices/docg3.c
438
doc_flash_address(docg3, sector & 0xff);
drivers/mtd/devices/docg3.c
439
doc_flash_address(docg3, (sector >> 8) & 0xff);
drivers/mtd/devices/docg3.c
440
doc_flash_address(docg3, (sector >> 16) & 0xff);
drivers/mtd/devices/docg3.c
441
doc_delay(docg3, 1);
drivers/mtd/devices/docg3.c
456
static int doc_read_seek(struct docg3 *docg3, int block0, int block1, int page,
drivers/mtd/devices/docg3.c
465
doc_flash_sequence(docg3, DOC_SEQ_SET_PLANE1);
drivers/mtd/devices/docg3.c
466
doc_flash_command(docg3, DOC_CMD_READ_PLANE1);
drivers/mtd/devices/docg3.c
467
doc_delay(docg3, 2);
drivers/mtd/devices/docg3.c
469
doc_flash_sequence(docg3, DOC_SEQ_SET_PLANE2);
drivers/mtd/devices/docg3.c
470
doc_flash_command(docg3, DOC_CMD_READ_PLANE2);
drivers/mtd/devices/docg3.c
471
doc_delay(docg3, 2);
drivers/mtd/devices/docg3.c
474
doc_set_reliable_mode(docg3);
drivers/mtd/devices/docg3.c
476
ret = doc_set_extra_page_mode(docg3);
drivers/mtd/devices/docg3.c
480
doc_flash_sequence(docg3, DOC_SEQ_READ);
drivers/mtd/devices/docg3.c
482
doc_flash_command(docg3, DOC_CMD_PROG_BLOCK_ADDR);
drivers/mtd/devices/docg3.c
483
doc_setup_addr_sector(docg3, sector);
drivers/mtd/devices/docg3.c
486
doc_flash_command(docg3, DOC_CMD_PROG_BLOCK_ADDR);
drivers/mtd/devices/docg3.c
487
doc_setup_addr_sector(docg3, sector);
drivers/mtd/devices/docg3.c
488
doc_delay(docg3, 1);
drivers/mtd/devices/docg3.c
505
static int doc_write_seek(struct docg3 *docg3, int block0, int block1, int page,
drivers/mtd/devices/docg3.c
513
doc_set_reliable_mode(docg3);
drivers/mtd/devices/docg3.c
516
doc_flash_sequence(docg3, DOC_SEQ_SET_PLANE1);
drivers/mtd/devices/docg3.c
517
doc_flash_command(docg3, DOC_CMD_READ_PLANE1);
drivers/mtd/devices/docg3.c
518
doc_delay(docg3, 2);
drivers/mtd/devices/docg3.c
520
doc_flash_sequence(docg3, DOC_SEQ_SET_PLANE2);
drivers/mtd/devices/docg3.c
521
doc_flash_command(docg3, DOC_CMD_READ_PLANE2);
drivers/mtd/devices/docg3.c
522
doc_delay(docg3, 2);
drivers/mtd/devices/docg3.c
525
doc_flash_sequence(docg3, DOC_SEQ_PAGE_SETUP);
drivers/mtd/devices/docg3.c
526
doc_flash_command(docg3, DOC_CMD_PROG_CYCLE1);
drivers/mtd/devices/docg3.c
529
doc_setup_writeaddr_sector(docg3, sector, ofs);
drivers/mtd/devices/docg3.c
531
doc_flash_command(docg3, DOC_CMD_PROG_CYCLE3);
drivers/mtd/devices/docg3.c
532
doc_delay(docg3, 2);
drivers/mtd/devices/docg3.c
533
ret = doc_wait_ready(docg3);
drivers/mtd/devices/docg3.c
537
doc_flash_command(docg3, DOC_CMD_PROG_CYCLE1);
drivers/mtd/devices/docg3.c
539
doc_setup_writeaddr_sector(docg3, sector, ofs);
drivers/mtd/devices/docg3.c
540
doc_delay(docg3, 1);
drivers/mtd/devices/docg3.c
557
static int doc_read_page_ecc_init(struct docg3 *docg3, int len)
drivers/mtd/devices/docg3.c
559
doc_writew(docg3, DOC_ECCCONF0_READ_MODE
drivers/mtd/devices/docg3.c
563
doc_delay(docg3, 4);
drivers/mtd/devices/docg3.c
564
doc_register_readb(docg3, DOC_FLASHCONTROL);
drivers/mtd/devices/docg3.c
565
return doc_wait_ready(docg3);
drivers/mtd/devices/docg3.c
578
static int doc_write_page_ecc_init(struct docg3 *docg3, int len)
drivers/mtd/devices/docg3.c
580
doc_writew(docg3, DOC_ECCCONF0_WRITE_MODE
drivers/mtd/devices/docg3.c
584
doc_delay(docg3, 4);
drivers/mtd/devices/docg3.c
585
doc_register_readb(docg3, DOC_FLASHCONTROL);
drivers/mtd/devices/docg3.c
586
return doc_wait_ready(docg3);
drivers/mtd/devices/docg3.c
596
static void doc_ecc_disable(struct docg3 *docg3)
drivers/mtd/devices/docg3.c
598
doc_writew(docg3, DOC_ECCCONF0_READ_MODE, DOC_ECCCONF0);
drivers/mtd/devices/docg3.c
599
doc_delay(docg3, 4);
drivers/mtd/devices/docg3.c
610
static void doc_hamming_ecc_init(struct docg3 *docg3, int nb_bytes)
drivers/mtd/devices/docg3.c
614
ecc_conf1 = doc_register_readb(docg3, DOC_ECCCONF1);
drivers/mtd/devices/docg3.c
617
doc_writeb(docg3, ecc_conf1, DOC_ECCCONF1);
drivers/mtd/devices/docg3.c
643
static int doc_ecc_bch_fix_data(struct docg3 *docg3, void *buf, u8 *hwecc)
drivers/mtd/devices/docg3.c
650
numerrs = bch_decode(docg3->cascade->bch, NULL,
drivers/mtd/devices/docg3.c
695
static int doc_read_page_prepare(struct docg3 *docg3, int block0, int block1,
drivers/mtd/devices/docg3.c
707
doc_set_device_id(docg3, docg3->device_id);
drivers/mtd/devices/docg3.c
708
ret = doc_reset_seq(docg3);
drivers/mtd/devices/docg3.c
713
ret = doc_read_seek(docg3, block0, block1, page, wear_area, offset);
drivers/mtd/devices/docg3.c
717
doc_flash_command(docg3, DOC_CMD_READ_ALL_PLANES);
drivers/mtd/devices/docg3.c
718
doc_delay(docg3, 2);
drivers/mtd/devices/docg3.c
719
doc_wait_ready(docg3);
drivers/mtd/devices/docg3.c
721
doc_flash_command(docg3, DOC_CMD_SET_ADDR_READ);
drivers/mtd/devices/docg3.c
722
doc_delay(docg3, 1);
drivers/mtd/devices/docg3.c
725
doc_flash_address(docg3, offset >> 2);
drivers/mtd/devices/docg3.c
726
doc_delay(docg3, 1);
drivers/mtd/devices/docg3.c
727
doc_wait_ready(docg3);
drivers/mtd/devices/docg3.c
729
doc_flash_command(docg3, DOC_CMD_READ_FLASH);
drivers/mtd/devices/docg3.c
733
doc_writeb(docg3, 0, DOC_DATAEND);
drivers/mtd/devices/docg3.c
734
doc_delay(docg3, 2);
drivers/mtd/devices/docg3.c
753
static int doc_read_page_getbytes(struct docg3 *docg3, int len, u_char *buf,
drivers/mtd/devices/docg3.c
757
doc_read_data_area(docg3, buf, 1, first);
drivers/mtd/devices/docg3.c
758
doc_read_data_area(docg3, buf ? buf + 1 : buf, len - 1, 0);
drivers/mtd/devices/docg3.c
760
doc_read_data_area(docg3, buf, len, first);
drivers/mtd/devices/docg3.c
762
doc_delay(docg3, 2);
drivers/mtd/devices/docg3.c
773
static void doc_write_page_putbytes(struct docg3 *docg3, int len,
drivers/mtd/devices/docg3.c
776
doc_write_data_area(docg3, buf, len);
drivers/mtd/devices/docg3.c
777
doc_delay(docg3, 2);
drivers/mtd/devices/docg3.c
785
static void doc_get_bch_hw_ecc(struct docg3 *docg3, u8 *hwecc)
drivers/mtd/devices/docg3.c
790
hwecc[i] = doc_register_readb(docg3, DOC_BCH_HW_ECC(i));
drivers/mtd/devices/docg3.c
797
static void doc_page_finish(struct docg3 *docg3)
drivers/mtd/devices/docg3.c
799
doc_writeb(docg3, 0, DOC_DATAEND);
drivers/mtd/devices/docg3.c
800
doc_delay(docg3, 2);
drivers/mtd/devices/docg3.c
811
static void doc_read_page_finish(struct docg3 *docg3)
drivers/mtd/devices/docg3.c
813
doc_page_finish(docg3);
drivers/mtd/devices/docg3.c
814
doc_set_device_id(docg3, 0);
drivers/mtd/devices/docg3.c
868
struct docg3 *docg3 = mtd->priv;
drivers/mtd/devices/docg3.c
898
mutex_lock(&docg3->cascade->lock);
drivers/mtd/devices/docg3.c
902
docg3->reliable);
drivers/mtd/devices/docg3.c
905
ret = doc_read_page_prepare(docg3, block0, block1, page, ofs);
drivers/mtd/devices/docg3.c
908
ret = doc_read_page_ecc_init(docg3, DOC_ECC_BCH_TOTAL_BYTES);
drivers/mtd/devices/docg3.c
911
ret = doc_read_page_getbytes(docg3, skip, NULL, 1, 0);
drivers/mtd/devices/docg3.c
914
ret = doc_read_page_getbytes(docg3, nbdata, buf, 0, skip % 2);
drivers/mtd/devices/docg3.c
917
doc_read_page_getbytes(docg3,
drivers/mtd/devices/docg3.c
92
static inline u8 doc_readb(struct docg3 *docg3, u16 reg)
drivers/mtd/devices/docg3.c
920
ret = doc_read_page_getbytes(docg3, nboob, oobbuf, 0, 0);
drivers/mtd/devices/docg3.c
923
doc_read_page_getbytes(docg3, DOC_LAYOUT_OOB_SIZE - nboob,
drivers/mtd/devices/docg3.c
926
doc_get_bch_hw_ecc(docg3, hwecc);
drivers/mtd/devices/docg3.c
927
eccconf1 = doc_register_readb(docg3, DOC_ECCCONF1);
drivers/mtd/devices/docg3.c
939
if (is_prot_seq_error(docg3))
drivers/mtd/devices/docg3.c
94
u8 val = readb(docg3->cascade->base + reg);
drivers/mtd/devices/docg3.c
947
ret = doc_ecc_bch_fix_data(docg3, buf, hwecc);
drivers/mtd/devices/docg3.c
959
doc_read_page_finish(docg3);
drivers/mtd/devices/docg3.c
977
mutex_unlock(&docg3->cascade->lock);
drivers/mtd/devices/docg3.c
980
doc_read_page_finish(docg3);
drivers/mtd/devices/docg3.c
984
static int doc_reload_bbt(struct docg3 *docg3)
drivers/mtd/devices/docg3.c
988
u_char *buf = docg3->bbt;
drivers/mtd/devices/docg3.c
990
nbpages = DIV_ROUND_UP(docg3->max_block + 1, 8 * DOC_LAYOUT_PAGE_SIZE);
drivers/mtd/devices/docg3.c
992
ret = doc_read_page_prepare(docg3, block, block + 1,
drivers/mtd/devices/docg3.c
995
ret = doc_read_page_ecc_init(docg3,
drivers/mtd/devices/docg3.c
998
doc_read_page_getbytes(docg3, DOC_LAYOUT_PAGE_SIZE,
drivers/mtd/devices/docg3.h
302
#define doc_err(fmt, arg...) dev_err(docg3->dev, (fmt), ## arg)
drivers/mtd/devices/docg3.h
303
#define doc_info(fmt, arg...) dev_info(docg3->dev, (fmt), ## arg)
drivers/mtd/devices/docg3.h
304
#define doc_dbg(fmt, arg...) dev_dbg(docg3->dev, (fmt), ## arg)
drivers/mtd/devices/docg3.h
305
#define doc_vdbg(fmt, arg...) dev_vdbg(docg3->dev, (fmt), ## arg)
drivers/mtd/devices/docg3.h
312
#define TRACE_SYSTEM docg3
drivers/mtd/devices/docg3.h
342
#define TRACE_INCLUDE_FILE docg3