Lines Matching refs:docg3

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