Lines Matching refs:docg3
106 static inline u8 doc_readb(struct docg3 *docg3, u16 reg) in doc_readb() argument
108 u8 val = readb(docg3->cascade->base + reg); in doc_readb()
114 static inline u16 doc_readw(struct docg3 *docg3, u16 reg) in doc_readw() argument
116 u16 val = readw(docg3->cascade->base + reg); in doc_readw()
122 static inline void doc_writeb(struct docg3 *docg3, u8 val, u16 reg) in doc_writeb() argument
124 writeb(val, docg3->cascade->base + reg); in doc_writeb()
128 static inline void doc_writew(struct docg3 *docg3, u16 val, u16 reg) in doc_writew() argument
130 writew(val, docg3->cascade->base + reg); in doc_writew()
134 static inline void doc_flash_command(struct docg3 *docg3, u8 cmd) in doc_flash_command() argument
136 doc_writeb(docg3, cmd, DOC_FLASHCOMMAND); in doc_flash_command()
139 static inline void doc_flash_sequence(struct docg3 *docg3, u8 seq) in doc_flash_sequence() argument
141 doc_writeb(docg3, seq, DOC_FLASHSEQUENCE); in doc_flash_sequence()
144 static inline void doc_flash_address(struct docg3 *docg3, u8 addr) in doc_flash_address() argument
146 doc_writeb(docg3, addr, DOC_FLASHADDRESS); in doc_flash_address()
151 static int doc_register_readb(struct docg3 *docg3, int reg) in doc_register_readb() argument
155 doc_writew(docg3, reg, DOC_READADDRESS); in doc_register_readb()
156 val = doc_readb(docg3, reg); in doc_register_readb()
161 static int doc_register_readw(struct docg3 *docg3, int reg) in doc_register_readw() argument
165 doc_writew(docg3, reg, DOC_READADDRESS); in doc_register_readw()
166 val = doc_readw(docg3, reg); in doc_register_readw()
182 static void doc_delay(struct docg3 *docg3, int nbNOPs) in doc_delay() argument
188 doc_writeb(docg3, 0, DOC_NOP); in doc_delay()
191 static int is_prot_seq_error(struct docg3 *docg3) in is_prot_seq_error() argument
195 ctrl = doc_register_readb(docg3, DOC_FLASHCONTROL); in is_prot_seq_error()
199 static int doc_is_ready(struct docg3 *docg3) in doc_is_ready() argument
203 ctrl = doc_register_readb(docg3, DOC_FLASHCONTROL); in doc_is_ready()
207 static int doc_wait_ready(struct docg3 *docg3) in doc_wait_ready() argument
212 doc_delay(docg3, 4); in doc_wait_ready()
214 } while (!doc_is_ready(docg3) && maxWaitCycles--); in doc_wait_ready()
215 doc_delay(docg3, 2); in doc_wait_ready()
222 static int doc_reset_seq(struct docg3 *docg3) in doc_reset_seq() argument
226 doc_writeb(docg3, 0x10, DOC_FLASHCONTROL); in doc_reset_seq()
227 doc_flash_sequence(docg3, DOC_SEQ_RESET); in doc_reset_seq()
228 doc_flash_command(docg3, DOC_CMD_RESET); in doc_reset_seq()
229 doc_delay(docg3, 2); in doc_reset_seq()
230 ret = doc_wait_ready(docg3); in doc_reset_seq()
245 static void doc_read_data_area(struct docg3 *docg3, void *buf, int len, in doc_read_data_area() argument
257 doc_writew(docg3, DOC_IOSPACE_DATA, DOC_READADDRESS); in doc_read_data_area()
260 data16 = doc_readw(docg3, DOC_IOSPACE_DATA); in doc_read_data_area()
268 doc_writew(docg3, DOC_IOSPACE_DATA | DOC_READADDR_ONE_BYTE, in doc_read_data_area()
270 doc_delay(docg3, 1); in doc_read_data_area()
273 data8 = doc_readb(docg3, DOC_IOSPACE_DATA); in doc_read_data_area()
290 static void doc_write_data_area(struct docg3 *docg3, const void *buf, int len) in doc_write_data_area() argument
300 doc_writew(docg3, DOC_IOSPACE_DATA, DOC_READADDRESS); in doc_write_data_area()
303 doc_writew(docg3, *src16, DOC_IOSPACE_DATA); in doc_write_data_area()
309 doc_writew(docg3, DOC_IOSPACE_DATA | DOC_READADDR_ONE_BYTE, in doc_write_data_area()
311 doc_writeb(docg3, *src8, DOC_IOSPACE_DATA); in doc_write_data_area()
331 static void doc_set_reliable_mode(struct docg3 *docg3) in doc_set_reliable_mode() argument
335 doc_dbg("doc_set_reliable_mode(%s)\n", strmode[docg3->reliable]); in doc_set_reliable_mode()
336 switch (docg3->reliable) { in doc_set_reliable_mode()
340 doc_flash_sequence(docg3, DOC_SEQ_SET_FASTMODE); in doc_set_reliable_mode()
341 doc_flash_command(docg3, DOC_CMD_FAST_MODE); in doc_set_reliable_mode()
344 doc_flash_sequence(docg3, DOC_SEQ_SET_RELIABLEMODE); in doc_set_reliable_mode()
345 doc_flash_command(docg3, DOC_CMD_FAST_MODE); in doc_set_reliable_mode()
346 doc_flash_command(docg3, DOC_CMD_RELIABLE_MODE); in doc_set_reliable_mode()
352 doc_delay(docg3, 2); in doc_set_reliable_mode()
365 static void doc_set_asic_mode(struct docg3 *docg3, u8 mode) in doc_set_asic_mode() argument
370 doc_readb(docg3, DOC_IOSPACE_IPL); in doc_set_asic_mode()
374 doc_writeb(docg3, mode, DOC_ASICMODE); in doc_set_asic_mode()
375 doc_writeb(docg3, ~mode, DOC_ASICMODECONFIRM); in doc_set_asic_mode()
376 doc_delay(docg3, 1); in doc_set_asic_mode()
387 static void doc_set_device_id(struct docg3 *docg3, int id) in doc_set_device_id() argument
392 doc_writeb(docg3, id, DOC_DEVICESELECT); in doc_set_device_id()
393 ctrl = doc_register_readb(docg3, DOC_FLASHCONTROL); in doc_set_device_id()
397 doc_writeb(docg3, ctrl, DOC_FLASHCONTROL); in doc_set_device_id()
411 static int doc_set_extra_page_mode(struct docg3 *docg3) in doc_set_extra_page_mode() argument
416 doc_flash_sequence(docg3, DOC_SEQ_PAGE_SIZE_532); in doc_set_extra_page_mode()
417 doc_flash_command(docg3, DOC_CMD_PAGE_SIZE_532); in doc_set_extra_page_mode()
418 doc_delay(docg3, 2); in doc_set_extra_page_mode()
420 fctrl = doc_register_readb(docg3, DOC_FLASHCONTROL); in doc_set_extra_page_mode()
432 static void doc_setup_addr_sector(struct docg3 *docg3, int sector) in doc_setup_addr_sector() argument
434 doc_delay(docg3, 1); in doc_setup_addr_sector()
435 doc_flash_address(docg3, sector & 0xff); in doc_setup_addr_sector()
436 doc_flash_address(docg3, (sector >> 8) & 0xff); in doc_setup_addr_sector()
437 doc_flash_address(docg3, (sector >> 16) & 0xff); in doc_setup_addr_sector()
438 doc_delay(docg3, 1); in doc_setup_addr_sector()
447 static void doc_setup_writeaddr_sector(struct docg3 *docg3, int sector, int ofs) in doc_setup_writeaddr_sector() argument
450 doc_delay(docg3, 1); in doc_setup_writeaddr_sector()
451 doc_flash_address(docg3, ofs & 0xff); in doc_setup_writeaddr_sector()
452 doc_flash_address(docg3, sector & 0xff); in doc_setup_writeaddr_sector()
453 doc_flash_address(docg3, (sector >> 8) & 0xff); in doc_setup_writeaddr_sector()
454 doc_flash_address(docg3, (sector >> 16) & 0xff); in doc_setup_writeaddr_sector()
455 doc_delay(docg3, 1); in doc_setup_writeaddr_sector()
470 static int doc_read_seek(struct docg3 *docg3, int block0, int block1, int page, in doc_read_seek() argument
479 doc_flash_sequence(docg3, DOC_SEQ_SET_PLANE1); in doc_read_seek()
480 doc_flash_command(docg3, DOC_CMD_READ_PLANE1); in doc_read_seek()
481 doc_delay(docg3, 2); in doc_read_seek()
483 doc_flash_sequence(docg3, DOC_SEQ_SET_PLANE2); in doc_read_seek()
484 doc_flash_command(docg3, DOC_CMD_READ_PLANE2); in doc_read_seek()
485 doc_delay(docg3, 2); in doc_read_seek()
488 doc_set_reliable_mode(docg3); in doc_read_seek()
490 ret = doc_set_extra_page_mode(docg3); in doc_read_seek()
494 doc_flash_sequence(docg3, DOC_SEQ_READ); in doc_read_seek()
496 doc_flash_command(docg3, DOC_CMD_PROG_BLOCK_ADDR); in doc_read_seek()
497 doc_setup_addr_sector(docg3, sector); in doc_read_seek()
500 doc_flash_command(docg3, DOC_CMD_PROG_BLOCK_ADDR); in doc_read_seek()
501 doc_setup_addr_sector(docg3, sector); in doc_read_seek()
502 doc_delay(docg3, 1); in doc_read_seek()
519 static int doc_write_seek(struct docg3 *docg3, int block0, int block1, int page, in doc_write_seek() argument
527 doc_set_reliable_mode(docg3); in doc_write_seek()
530 doc_flash_sequence(docg3, DOC_SEQ_SET_PLANE1); in doc_write_seek()
531 doc_flash_command(docg3, DOC_CMD_READ_PLANE1); in doc_write_seek()
532 doc_delay(docg3, 2); in doc_write_seek()
534 doc_flash_sequence(docg3, DOC_SEQ_SET_PLANE2); in doc_write_seek()
535 doc_flash_command(docg3, DOC_CMD_READ_PLANE2); in doc_write_seek()
536 doc_delay(docg3, 2); in doc_write_seek()
539 doc_flash_sequence(docg3, DOC_SEQ_PAGE_SETUP); in doc_write_seek()
540 doc_flash_command(docg3, DOC_CMD_PROG_CYCLE1); in doc_write_seek()
543 doc_setup_writeaddr_sector(docg3, sector, ofs); in doc_write_seek()
545 doc_flash_command(docg3, DOC_CMD_PROG_CYCLE3); in doc_write_seek()
546 doc_delay(docg3, 2); in doc_write_seek()
547 ret = doc_wait_ready(docg3); in doc_write_seek()
551 doc_flash_command(docg3, DOC_CMD_PROG_CYCLE1); in doc_write_seek()
553 doc_setup_writeaddr_sector(docg3, sector, ofs); in doc_write_seek()
554 doc_delay(docg3, 1); in doc_write_seek()
571 static int doc_read_page_ecc_init(struct docg3 *docg3, int len) in doc_read_page_ecc_init() argument
573 doc_writew(docg3, DOC_ECCCONF0_READ_MODE in doc_read_page_ecc_init()
577 doc_delay(docg3, 4); in doc_read_page_ecc_init()
578 doc_register_readb(docg3, DOC_FLASHCONTROL); in doc_read_page_ecc_init()
579 return doc_wait_ready(docg3); in doc_read_page_ecc_init()
592 static int doc_write_page_ecc_init(struct docg3 *docg3, int len) in doc_write_page_ecc_init() argument
594 doc_writew(docg3, DOC_ECCCONF0_WRITE_MODE in doc_write_page_ecc_init()
598 doc_delay(docg3, 4); in doc_write_page_ecc_init()
599 doc_register_readb(docg3, DOC_FLASHCONTROL); in doc_write_page_ecc_init()
600 return doc_wait_ready(docg3); in doc_write_page_ecc_init()
610 static void doc_ecc_disable(struct docg3 *docg3) in doc_ecc_disable() argument
612 doc_writew(docg3, DOC_ECCCONF0_READ_MODE, DOC_ECCCONF0); in doc_ecc_disable()
613 doc_delay(docg3, 4); in doc_ecc_disable()
624 static void doc_hamming_ecc_init(struct docg3 *docg3, int nb_bytes) in doc_hamming_ecc_init() argument
628 ecc_conf1 = doc_register_readb(docg3, DOC_ECCCONF1); in doc_hamming_ecc_init()
631 doc_writeb(docg3, ecc_conf1, DOC_ECCCONF1); in doc_hamming_ecc_init()
657 static int doc_ecc_bch_fix_data(struct docg3 *docg3, void *buf, u8 *hwecc) in doc_ecc_bch_fix_data() argument
664 numerrs = decode_bch(docg3->cascade->bch, NULL, in doc_ecc_bch_fix_data()
709 static int doc_read_page_prepare(struct docg3 *docg3, int block0, int block1, in doc_read_page_prepare() argument
721 doc_set_device_id(docg3, docg3->device_id); in doc_read_page_prepare()
722 ret = doc_reset_seq(docg3); in doc_read_page_prepare()
727 ret = doc_read_seek(docg3, block0, block1, page, wear_area, offset); in doc_read_page_prepare()
731 doc_flash_command(docg3, DOC_CMD_READ_ALL_PLANES); in doc_read_page_prepare()
732 doc_delay(docg3, 2); in doc_read_page_prepare()
733 doc_wait_ready(docg3); in doc_read_page_prepare()
735 doc_flash_command(docg3, DOC_CMD_SET_ADDR_READ); in doc_read_page_prepare()
736 doc_delay(docg3, 1); in doc_read_page_prepare()
739 doc_flash_address(docg3, offset >> 2); in doc_read_page_prepare()
740 doc_delay(docg3, 1); in doc_read_page_prepare()
741 doc_wait_ready(docg3); in doc_read_page_prepare()
743 doc_flash_command(docg3, DOC_CMD_READ_FLASH); in doc_read_page_prepare()
747 doc_writeb(docg3, 0, DOC_DATAEND); in doc_read_page_prepare()
748 doc_delay(docg3, 2); in doc_read_page_prepare()
767 static int doc_read_page_getbytes(struct docg3 *docg3, int len, u_char *buf, in doc_read_page_getbytes() argument
771 doc_read_data_area(docg3, buf, 1, first); in doc_read_page_getbytes()
772 doc_read_data_area(docg3, buf ? buf + 1 : buf, len - 1, 0); in doc_read_page_getbytes()
774 doc_read_data_area(docg3, buf, len, first); in doc_read_page_getbytes()
776 doc_delay(docg3, 2); in doc_read_page_getbytes()
787 static void doc_write_page_putbytes(struct docg3 *docg3, int len, in doc_write_page_putbytes() argument
790 doc_write_data_area(docg3, buf, len); in doc_write_page_putbytes()
791 doc_delay(docg3, 2); in doc_write_page_putbytes()
799 static void doc_get_bch_hw_ecc(struct docg3 *docg3, u8 *hwecc) in doc_get_bch_hw_ecc() argument
804 hwecc[i] = doc_register_readb(docg3, DOC_BCH_HW_ECC(i)); in doc_get_bch_hw_ecc()
811 static void doc_page_finish(struct docg3 *docg3) in doc_page_finish() argument
813 doc_writeb(docg3, 0, DOC_DATAEND); in doc_page_finish()
814 doc_delay(docg3, 2); in doc_page_finish()
825 static void doc_read_page_finish(struct docg3 *docg3) in doc_read_page_finish() argument
827 doc_page_finish(docg3); in doc_read_page_finish()
828 doc_set_device_id(docg3, 0); in doc_read_page_finish()
882 struct docg3 *docg3 = mtd->priv; in doc_read_oob() local
911 mutex_lock(&docg3->cascade->lock); in doc_read_oob()
914 docg3->reliable); in doc_read_oob()
917 ret = doc_read_page_prepare(docg3, block0, block1, page, ofs); in doc_read_oob()
920 ret = doc_read_page_ecc_init(docg3, DOC_ECC_BCH_TOTAL_BYTES); in doc_read_oob()
923 ret = doc_read_page_getbytes(docg3, skip, NULL, 1, 0); in doc_read_oob()
926 ret = doc_read_page_getbytes(docg3, nbdata, buf, 0, skip % 2); in doc_read_oob()
929 doc_read_page_getbytes(docg3, in doc_read_oob()
932 ret = doc_read_page_getbytes(docg3, nboob, oobbuf, 0, 0); in doc_read_oob()
935 doc_read_page_getbytes(docg3, DOC_LAYOUT_OOB_SIZE - nboob, in doc_read_oob()
938 doc_get_bch_hw_ecc(docg3, hwecc); in doc_read_oob()
939 eccconf1 = doc_register_readb(docg3, DOC_ECCCONF1); in doc_read_oob()
951 if (is_prot_seq_error(docg3)) in doc_read_oob()
959 ret = doc_ecc_bch_fix_data(docg3, buf, hwecc); in doc_read_oob()
971 doc_read_page_finish(docg3); in doc_read_oob()
983 mutex_unlock(&docg3->cascade->lock); in doc_read_oob()
986 doc_read_page_finish(docg3); in doc_read_oob()
990 static int doc_reload_bbt(struct docg3 *docg3) in doc_reload_bbt() argument
994 u_char *buf = docg3->bbt; in doc_reload_bbt()
996 nbpages = DIV_ROUND_UP(docg3->max_block + 1, 8 * DOC_LAYOUT_PAGE_SIZE); in doc_reload_bbt()
998 ret = doc_read_page_prepare(docg3, block, block + 1, in doc_reload_bbt()
1001 ret = doc_read_page_ecc_init(docg3, in doc_reload_bbt()
1004 doc_read_page_getbytes(docg3, DOC_LAYOUT_PAGE_SIZE, in doc_reload_bbt()
1008 doc_read_page_finish(docg3); in doc_reload_bbt()
1021 struct docg3 *docg3 = mtd->priv; in doc_block_isbad() local
1025 docg3->reliable); in doc_block_isbad()
1031 if (block1 > docg3->max_block) in doc_block_isbad()
1034 is_good = docg3->bbt[block0 >> 3] & (1 << (block0 & 0x7)); in doc_block_isbad()
1049 static int doc_get_erase_count(struct docg3 *docg3, loff_t from)
1058 calc_block_sector(from, &block0, &block1, &page, &ofs, docg3->reliable);
1059 if (block1 > docg3->max_block)
1062 ret = doc_reset_seq(docg3);
1064 ret = doc_read_page_prepare(docg3, block0, block1, page,
1067 ret = doc_read_page_getbytes(docg3, DOC_LAYOUT_WEAR_SIZE,
1069 doc_read_page_finish(docg3);
1090 static int doc_get_op_status(struct docg3 *docg3) in doc_get_op_status() argument
1094 doc_flash_sequence(docg3, DOC_SEQ_PLANES_STATUS); in doc_get_op_status()
1095 doc_flash_command(docg3, DOC_CMD_PLANES_STATUS); in doc_get_op_status()
1096 doc_delay(docg3, 5); in doc_get_op_status()
1098 doc_ecc_disable(docg3); in doc_get_op_status()
1099 doc_read_data_area(docg3, &status, 1, 1); in doc_get_op_status()
1113 static int doc_write_erase_wait_status(struct docg3 *docg3) in doc_write_erase_wait_status() argument
1117 for (i = 0; !doc_is_ready(docg3) && i < 5; i++) in doc_write_erase_wait_status()
1119 if (!doc_is_ready(docg3)) { in doc_write_erase_wait_status()
1125 status = doc_get_op_status(docg3); in doc_write_erase_wait_status()
1133 doc_page_finish(docg3); in doc_write_erase_wait_status()
1148 static int doc_erase_block(struct docg3 *docg3, int block0, int block1) in doc_erase_block() argument
1153 ret = doc_reset_seq(docg3); in doc_erase_block()
1157 doc_set_reliable_mode(docg3); in doc_erase_block()
1158 doc_flash_sequence(docg3, DOC_SEQ_ERASE); in doc_erase_block()
1161 doc_flash_command(docg3, DOC_CMD_PROG_BLOCK_ADDR); in doc_erase_block()
1162 doc_setup_addr_sector(docg3, sector); in doc_erase_block()
1164 doc_flash_command(docg3, DOC_CMD_PROG_BLOCK_ADDR); in doc_erase_block()
1165 doc_setup_addr_sector(docg3, sector); in doc_erase_block()
1166 doc_delay(docg3, 1); in doc_erase_block()
1168 doc_flash_command(docg3, DOC_CMD_ERASECYCLE2); in doc_erase_block()
1169 doc_delay(docg3, 2); in doc_erase_block()
1171 if (is_prot_seq_error(docg3)) { in doc_erase_block()
1176 return doc_write_erase_wait_status(docg3); in doc_erase_block()
1192 struct docg3 *docg3 = mtd->priv; in doc_erase() local
1199 &ofs, docg3->reliable); in doc_erase()
1204 docg3->reliable); in doc_erase()
1205 mutex_lock(&docg3->cascade->lock); in doc_erase()
1206 doc_set_device_id(docg3, docg3->device_id); in doc_erase()
1207 doc_set_reliable_mode(docg3); in doc_erase()
1209 ret = doc_erase_block(docg3, block0, block1); in doc_erase()
1213 mutex_unlock(&docg3->cascade->lock); in doc_erase()
1237 static int doc_write_page(struct docg3 *docg3, loff_t to, const u_char *buf, in doc_write_page() argument
1244 calc_block_sector(to, &block0, &block1, &page, &ofs, docg3->reliable); in doc_write_page()
1246 doc_set_device_id(docg3, docg3->device_id); in doc_write_page()
1247 ret = doc_reset_seq(docg3); in doc_write_page()
1252 ret = doc_write_seek(docg3, block0, block1, page, ofs); in doc_write_page()
1256 doc_write_page_ecc_init(docg3, DOC_ECC_BCH_TOTAL_BYTES); in doc_write_page()
1257 doc_delay(docg3, 2); in doc_write_page()
1258 doc_write_page_putbytes(docg3, DOC_LAYOUT_PAGE_SIZE, buf); in doc_write_page()
1261 doc_write_page_putbytes(docg3, DOC_LAYOUT_OOB_PAGEINFO_SZ, oob); in doc_write_page()
1262 doc_delay(docg3, 2); in doc_write_page()
1265 hamming = doc_register_readb(docg3, DOC_HAMMINGPARITY); in doc_write_page()
1266 doc_delay(docg3, 2); in doc_write_page()
1267 doc_write_page_putbytes(docg3, DOC_LAYOUT_OOB_HAMMING_SZ, in doc_write_page()
1269 doc_delay(docg3, 2); in doc_write_page()
1271 doc_get_bch_hw_ecc(docg3, hwecc); in doc_write_page()
1272 doc_write_page_putbytes(docg3, DOC_LAYOUT_OOB_BCH_SZ, hwecc); in doc_write_page()
1273 doc_delay(docg3, 2); in doc_write_page()
1275 doc_write_page_putbytes(docg3, DOC_LAYOUT_OOB_UNUSED_SZ, oob); in doc_write_page()
1278 doc_write_page_putbytes(docg3, DOC_LAYOUT_OOB_SIZE, oob); in doc_write_page()
1280 doc_delay(docg3, 2); in doc_write_page()
1281 doc_page_finish(docg3); in doc_write_page()
1282 doc_delay(docg3, 2); in doc_write_page()
1283 doc_flash_command(docg3, DOC_CMD_PROG_CYCLE2); in doc_write_page()
1284 doc_delay(docg3, 2); in doc_write_page()
1290 ret = doc_write_erase_wait_status(docg3); in doc_write_page()
1293 doc_read_page_finish(docg3); in doc_write_page()
1350 static int doc_backup_oob(struct docg3 *docg3, loff_t to, in doc_backup_oob() argument
1361 docg3->oob_write_ofs = to; in doc_backup_oob()
1362 docg3->oob_autoecc = autoecc; in doc_backup_oob()
1364 doc_fill_autooob(docg3->oob_write_buf, ops->oobbuf); in doc_backup_oob()
1367 memcpy(docg3->oob_write_buf, ops->oobbuf, DOC_LAYOUT_OOB_SIZE); in doc_backup_oob()
1391 struct docg3 *docg3 = mtd->priv; in doc_write_oob() local
1436 return doc_backup_oob(docg3, ofs, ops); in doc_write_oob()
1442 mutex_lock(&docg3->cascade->lock); in doc_write_oob()
1445 if (ofs == docg3->oob_write_ofs) in doc_write_oob()
1446 memcpy(oob, docg3->oob_write_buf, DOC_LAYOUT_OOB_SIZE); in doc_write_oob()
1451 ret = doc_write_page(docg3, ofs, buf, oob, autoecc); in doc_write_oob()
1464 doc_set_device_id(docg3, 0); in doc_write_oob()
1465 mutex_unlock(&docg3->cascade->lock); in doc_write_oob()
1469 static struct docg3 *sysfs_dev2docg3(struct device *dev, in sysfs_dev2docg3()
1485 struct docg3 *docg3 = sysfs_dev2docg3(dev, attr); in dps0_is_key_locked() local
1488 mutex_lock(&docg3->cascade->lock); in dps0_is_key_locked()
1489 doc_set_device_id(docg3, docg3->device_id); in dps0_is_key_locked()
1490 dps0 = doc_register_readb(docg3, DOC_DPS0_STATUS); in dps0_is_key_locked()
1491 doc_set_device_id(docg3, 0); in dps0_is_key_locked()
1492 mutex_unlock(&docg3->cascade->lock); in dps0_is_key_locked()
1500 struct docg3 *docg3 = sysfs_dev2docg3(dev, attr); in dps1_is_key_locked() local
1503 mutex_lock(&docg3->cascade->lock); in dps1_is_key_locked()
1504 doc_set_device_id(docg3, docg3->device_id); in dps1_is_key_locked()
1505 dps1 = doc_register_readb(docg3, DOC_DPS1_STATUS); in dps1_is_key_locked()
1506 doc_set_device_id(docg3, 0); in dps1_is_key_locked()
1507 mutex_unlock(&docg3->cascade->lock); in dps1_is_key_locked()
1516 struct docg3 *docg3 = sysfs_dev2docg3(dev, attr); in dps0_insert_key() local
1522 mutex_lock(&docg3->cascade->lock); in dps0_insert_key()
1523 doc_set_device_id(docg3, docg3->device_id); in dps0_insert_key()
1525 doc_writeb(docg3, buf[i], DOC_DPS0_KEY); in dps0_insert_key()
1526 doc_set_device_id(docg3, 0); in dps0_insert_key()
1527 mutex_unlock(&docg3->cascade->lock); in dps0_insert_key()
1535 struct docg3 *docg3 = sysfs_dev2docg3(dev, attr); in dps1_insert_key() local
1541 mutex_lock(&docg3->cascade->lock); in dps1_insert_key()
1542 doc_set_device_id(docg3, docg3->device_id); in dps1_insert_key()
1544 doc_writeb(docg3, buf[i], DOC_DPS1_KEY); in dps1_insert_key()
1545 doc_set_device_id(docg3, 0); in dps1_insert_key()
1546 mutex_unlock(&docg3->cascade->lock); in dps1_insert_key()
1608 struct docg3 *docg3 = (struct docg3 *)s->private; in dbg_flashctrl_show() local
1612 mutex_lock(&docg3->cascade->lock); in dbg_flashctrl_show()
1613 fctrl = doc_register_readb(docg3, DOC_FLASHCONTROL); in dbg_flashctrl_show()
1614 mutex_unlock(&docg3->cascade->lock); in dbg_flashctrl_show()
1630 struct docg3 *docg3 = (struct docg3 *)s->private; in dbg_asicmode_show() local
1634 mutex_lock(&docg3->cascade->lock); in dbg_asicmode_show()
1635 pctrl = doc_register_readb(docg3, DOC_ASICMODE); in dbg_asicmode_show()
1637 mutex_unlock(&docg3->cascade->lock); in dbg_asicmode_show()
1667 struct docg3 *docg3 = (struct docg3 *)s->private; in dbg_device_id_show() local
1670 mutex_lock(&docg3->cascade->lock); in dbg_device_id_show()
1671 id = doc_register_readb(docg3, DOC_DEVICESELECT); in dbg_device_id_show()
1672 mutex_unlock(&docg3->cascade->lock); in dbg_device_id_show()
1681 struct docg3 *docg3 = (struct docg3 *)s->private; in dbg_protection_show() local
1684 mutex_lock(&docg3->cascade->lock); in dbg_protection_show()
1685 protect = doc_register_readb(docg3, DOC_PROTECTION); in dbg_protection_show()
1686 dps0 = doc_register_readb(docg3, DOC_DPS0_STATUS); in dbg_protection_show()
1687 dps0_low = doc_register_readw(docg3, DOC_DPS0_ADDRLOW); in dbg_protection_show()
1688 dps0_high = doc_register_readw(docg3, DOC_DPS0_ADDRHIGH); in dbg_protection_show()
1689 dps1 = doc_register_readb(docg3, DOC_DPS1_STATUS); in dbg_protection_show()
1690 dps1_low = doc_register_readw(docg3, DOC_DPS1_ADDRLOW); in dbg_protection_show()
1691 dps1_high = doc_register_readw(docg3, DOC_DPS1_ADDRHIGH); in dbg_protection_show()
1692 mutex_unlock(&docg3->cascade->lock); in dbg_protection_show()
1734 struct docg3 *docg3 = floor->priv; in doc_dbg_register() local
1744 debugfs_create_file("docg3_flashcontrol", S_IRUSR, root, docg3, in doc_dbg_register()
1746 debugfs_create_file("docg3_asic_mode", S_IRUSR, root, docg3, in doc_dbg_register()
1748 debugfs_create_file("docg3_device_id", S_IRUSR, root, docg3, in doc_dbg_register()
1750 debugfs_create_file("docg3_protection", S_IRUSR, root, docg3, in doc_dbg_register()
1761 struct docg3 *docg3 = mtd->priv; in doc_set_driver_info() local
1764 cfg = doc_register_readb(docg3, DOC_CONFIGURATION); in doc_set_driver_info()
1765 docg3->if_cfg = (cfg & DOC_CONF_IF_CFG ? 1 : 0); in doc_set_driver_info()
1766 docg3->reliable = reliable_mode; in doc_set_driver_info()
1771 docg3->device_id); in doc_set_driver_info()
1774 docg3->max_block = 2047; in doc_set_driver_info()
1779 mtd->size = (docg3->max_block + 1) * DOC_LAYOUT_BLOCK_SIZE; in doc_set_driver_info()
1780 if (docg3->reliable == 2) in doc_set_driver_info()
1783 if (docg3->reliable == 2) in doc_set_driver_info()
1816 struct docg3 *docg3; in doc_probe_device() local
1820 docg3 = kzalloc(sizeof(struct docg3), GFP_KERNEL); in doc_probe_device()
1821 if (!docg3) in doc_probe_device()
1826 mtd->priv = docg3; in doc_probe_device()
1828 bbt_nbpages = DIV_ROUND_UP(docg3->max_block + 1, in doc_probe_device()
1830 docg3->bbt = kcalloc(DOC_LAYOUT_PAGE_SIZE, bbt_nbpages, GFP_KERNEL); in doc_probe_device()
1831 if (!docg3->bbt) in doc_probe_device()
1834 docg3->dev = dev; in doc_probe_device()
1835 docg3->device_id = floor; in doc_probe_device()
1836 docg3->cascade = cascade; in doc_probe_device()
1837 doc_set_device_id(docg3, docg3->device_id); in doc_probe_device()
1839 doc_set_asic_mode(docg3, DOC_ASICMODE_RESET); in doc_probe_device()
1840 doc_set_asic_mode(docg3, DOC_ASICMODE_NORMAL); in doc_probe_device()
1842 chip_id = doc_register_readw(docg3, DOC_CHIPID); in doc_probe_device()
1843 chip_id_inv = doc_register_readw(docg3, DOC_CHIPID_INV); in doc_probe_device()
1853 docg3->cascade->base, floor); in doc_probe_device()
1864 doc_hamming_ecc_init(docg3, DOC_LAYOUT_OOB_PAGEINFO_SZ); in doc_probe_device()
1865 doc_reload_bbt(docg3); in doc_probe_device()
1869 kfree(docg3->bbt); in doc_probe_device()
1873 kfree(docg3); in doc_probe_device()
1884 struct docg3 *docg3 = mtd->priv; in doc_release_device() local
1887 kfree(docg3->bbt); in doc_release_device()
1888 kfree(docg3); in doc_release_device()
1904 struct docg3 *docg3; in docg3_resume() local
1909 docg3 = mtd->priv; in docg3_resume()
1913 doc_readb(docg3, DOC_IOSPACE_IPL); in docg3_resume()
1931 struct docg3 *docg3; in docg3_suspend() local
1940 docg3 = mtd->priv; in docg3_suspend()
1942 doc_writeb(docg3, floor, DOC_DEVICESELECT); in docg3_suspend()
1943 ctrl = doc_register_readb(docg3, DOC_FLASHCONTROL); in docg3_suspend()
1945 doc_writeb(docg3, ctrl, DOC_FLASHCONTROL); in docg3_suspend()
1949 pwr_down = doc_register_readb(docg3, DOC_POWERMODE); in docg3_suspend()
1964 docg3 = mtd->priv; in docg3_suspend()
1965 doc_set_asic_mode(docg3, DOC_ASICMODE_POWERDOWN); in docg3_suspend()
2055 struct docg3 *docg3 = cascade->floors[0]->priv; in docg3_release() local
2063 free_bch(docg3->cascade->bch); in docg3_release()