Lines Matching refs:docg3

84 static inline u8 doc_readb(struct docg3 *docg3, u16 reg)  in doc_readb()  argument
86 u8 val = readb(docg3->cascade->base + reg); in doc_readb()
92 static inline u16 doc_readw(struct docg3 *docg3, u16 reg) in doc_readw() argument
94 u16 val = readw(docg3->cascade->base + reg); in doc_readw()
100 static inline void doc_writeb(struct docg3 *docg3, u8 val, u16 reg) in doc_writeb() argument
102 writeb(val, docg3->cascade->base + reg); in doc_writeb()
106 static inline void doc_writew(struct docg3 *docg3, u16 val, u16 reg) in doc_writew() argument
108 writew(val, docg3->cascade->base + reg); in doc_writew()
112 static inline void doc_flash_command(struct docg3 *docg3, u8 cmd) in doc_flash_command() argument
114 doc_writeb(docg3, cmd, DOC_FLASHCOMMAND); in doc_flash_command()
117 static inline void doc_flash_sequence(struct docg3 *docg3, u8 seq) in doc_flash_sequence() argument
119 doc_writeb(docg3, seq, DOC_FLASHSEQUENCE); in doc_flash_sequence()
122 static inline void doc_flash_address(struct docg3 *docg3, u8 addr) in doc_flash_address() argument
124 doc_writeb(docg3, addr, DOC_FLASHADDRESS); in doc_flash_address()
129 static int doc_register_readb(struct docg3 *docg3, int reg) in doc_register_readb() argument
133 doc_writew(docg3, reg, DOC_READADDRESS); in doc_register_readb()
134 val = doc_readb(docg3, reg); in doc_register_readb()
139 static int doc_register_readw(struct docg3 *docg3, int reg) in doc_register_readw() argument
143 doc_writew(docg3, reg, DOC_READADDRESS); in doc_register_readw()
144 val = doc_readw(docg3, reg); in doc_register_readw()
160 static void doc_delay(struct docg3 *docg3, int nbNOPs) in doc_delay() argument
166 doc_writeb(docg3, 0, DOC_NOP); in doc_delay()
169 static int is_prot_seq_error(struct docg3 *docg3) in is_prot_seq_error() argument
173 ctrl = doc_register_readb(docg3, DOC_FLASHCONTROL); in is_prot_seq_error()
177 static int doc_is_ready(struct docg3 *docg3) in doc_is_ready() argument
181 ctrl = doc_register_readb(docg3, DOC_FLASHCONTROL); in doc_is_ready()
185 static int doc_wait_ready(struct docg3 *docg3) in doc_wait_ready() argument
190 doc_delay(docg3, 4); in doc_wait_ready()
192 } while (!doc_is_ready(docg3) && maxWaitCycles--); in doc_wait_ready()
193 doc_delay(docg3, 2); in doc_wait_ready()
200 static int doc_reset_seq(struct docg3 *docg3) in doc_reset_seq() argument
204 doc_writeb(docg3, 0x10, DOC_FLASHCONTROL); in doc_reset_seq()
205 doc_flash_sequence(docg3, DOC_SEQ_RESET); in doc_reset_seq()
206 doc_flash_command(docg3, DOC_CMD_RESET); in doc_reset_seq()
207 doc_delay(docg3, 2); in doc_reset_seq()
208 ret = doc_wait_ready(docg3); in doc_reset_seq()
223 static void doc_read_data_area(struct docg3 *docg3, void *buf, int len, in doc_read_data_area() argument
235 doc_writew(docg3, DOC_IOSPACE_DATA, DOC_READADDRESS); in doc_read_data_area()
238 data16 = doc_readw(docg3, DOC_IOSPACE_DATA); in doc_read_data_area()
246 doc_writew(docg3, DOC_IOSPACE_DATA | DOC_READADDR_ONE_BYTE, in doc_read_data_area()
248 doc_delay(docg3, 1); in doc_read_data_area()
251 data8 = doc_readb(docg3, DOC_IOSPACE_DATA); in doc_read_data_area()
268 static void doc_write_data_area(struct docg3 *docg3, const void *buf, int len) in doc_write_data_area() argument
278 doc_writew(docg3, DOC_IOSPACE_DATA, DOC_READADDRESS); in doc_write_data_area()
281 doc_writew(docg3, *src16, DOC_IOSPACE_DATA); in doc_write_data_area()
287 doc_writew(docg3, DOC_IOSPACE_DATA | DOC_READADDR_ONE_BYTE, in doc_write_data_area()
289 doc_writeb(docg3, *src8, DOC_IOSPACE_DATA); in doc_write_data_area()
309 static void doc_set_reliable_mode(struct docg3 *docg3) in doc_set_reliable_mode() argument
313 doc_dbg("doc_set_reliable_mode(%s)\n", strmode[docg3->reliable]); in doc_set_reliable_mode()
314 switch (docg3->reliable) { in doc_set_reliable_mode()
318 doc_flash_sequence(docg3, DOC_SEQ_SET_FASTMODE); in doc_set_reliable_mode()
319 doc_flash_command(docg3, DOC_CMD_FAST_MODE); in doc_set_reliable_mode()
322 doc_flash_sequence(docg3, DOC_SEQ_SET_RELIABLEMODE); in doc_set_reliable_mode()
323 doc_flash_command(docg3, DOC_CMD_FAST_MODE); in doc_set_reliable_mode()
324 doc_flash_command(docg3, DOC_CMD_RELIABLE_MODE); in doc_set_reliable_mode()
330 doc_delay(docg3, 2); in doc_set_reliable_mode()
343 static void doc_set_asic_mode(struct docg3 *docg3, u8 mode) in doc_set_asic_mode() argument
348 doc_readb(docg3, DOC_IOSPACE_IPL); in doc_set_asic_mode()
352 doc_writeb(docg3, mode, DOC_ASICMODE); in doc_set_asic_mode()
353 doc_writeb(docg3, ~mode, DOC_ASICMODECONFIRM); in doc_set_asic_mode()
354 doc_delay(docg3, 1); in doc_set_asic_mode()
365 static void doc_set_device_id(struct docg3 *docg3, int id) in doc_set_device_id() argument
370 doc_writeb(docg3, id, DOC_DEVICESELECT); in doc_set_device_id()
371 ctrl = doc_register_readb(docg3, DOC_FLASHCONTROL); in doc_set_device_id()
375 doc_writeb(docg3, ctrl, DOC_FLASHCONTROL); in doc_set_device_id()
389 static int doc_set_extra_page_mode(struct docg3 *docg3) in doc_set_extra_page_mode() argument
394 doc_flash_sequence(docg3, DOC_SEQ_PAGE_SIZE_532); in doc_set_extra_page_mode()
395 doc_flash_command(docg3, DOC_CMD_PAGE_SIZE_532); in doc_set_extra_page_mode()
396 doc_delay(docg3, 2); in doc_set_extra_page_mode()
398 fctrl = doc_register_readb(docg3, DOC_FLASHCONTROL); in doc_set_extra_page_mode()
410 static void doc_setup_addr_sector(struct docg3 *docg3, int sector) in doc_setup_addr_sector() argument
412 doc_delay(docg3, 1); in doc_setup_addr_sector()
413 doc_flash_address(docg3, sector & 0xff); in doc_setup_addr_sector()
414 doc_flash_address(docg3, (sector >> 8) & 0xff); in doc_setup_addr_sector()
415 doc_flash_address(docg3, (sector >> 16) & 0xff); in doc_setup_addr_sector()
416 doc_delay(docg3, 1); in doc_setup_addr_sector()
425 static void doc_setup_writeaddr_sector(struct docg3 *docg3, int sector, int ofs) in doc_setup_writeaddr_sector() argument
428 doc_delay(docg3, 1); in doc_setup_writeaddr_sector()
429 doc_flash_address(docg3, ofs & 0xff); in doc_setup_writeaddr_sector()
430 doc_flash_address(docg3, sector & 0xff); in doc_setup_writeaddr_sector()
431 doc_flash_address(docg3, (sector >> 8) & 0xff); in doc_setup_writeaddr_sector()
432 doc_flash_address(docg3, (sector >> 16) & 0xff); in doc_setup_writeaddr_sector()
433 doc_delay(docg3, 1); in doc_setup_writeaddr_sector()
448 static int doc_read_seek(struct docg3 *docg3, int block0, int block1, int page, in doc_read_seek() argument
457 doc_flash_sequence(docg3, DOC_SEQ_SET_PLANE1); in doc_read_seek()
458 doc_flash_command(docg3, DOC_CMD_READ_PLANE1); in doc_read_seek()
459 doc_delay(docg3, 2); in doc_read_seek()
461 doc_flash_sequence(docg3, DOC_SEQ_SET_PLANE2); in doc_read_seek()
462 doc_flash_command(docg3, DOC_CMD_READ_PLANE2); in doc_read_seek()
463 doc_delay(docg3, 2); in doc_read_seek()
466 doc_set_reliable_mode(docg3); in doc_read_seek()
468 ret = doc_set_extra_page_mode(docg3); in doc_read_seek()
472 doc_flash_sequence(docg3, DOC_SEQ_READ); in doc_read_seek()
474 doc_flash_command(docg3, DOC_CMD_PROG_BLOCK_ADDR); in doc_read_seek()
475 doc_setup_addr_sector(docg3, sector); in doc_read_seek()
478 doc_flash_command(docg3, DOC_CMD_PROG_BLOCK_ADDR); in doc_read_seek()
479 doc_setup_addr_sector(docg3, sector); in doc_read_seek()
480 doc_delay(docg3, 1); in doc_read_seek()
497 static int doc_write_seek(struct docg3 *docg3, int block0, int block1, int page, in doc_write_seek() argument
505 doc_set_reliable_mode(docg3); in doc_write_seek()
508 doc_flash_sequence(docg3, DOC_SEQ_SET_PLANE1); in doc_write_seek()
509 doc_flash_command(docg3, DOC_CMD_READ_PLANE1); in doc_write_seek()
510 doc_delay(docg3, 2); in doc_write_seek()
512 doc_flash_sequence(docg3, DOC_SEQ_SET_PLANE2); in doc_write_seek()
513 doc_flash_command(docg3, DOC_CMD_READ_PLANE2); in doc_write_seek()
514 doc_delay(docg3, 2); in doc_write_seek()
517 doc_flash_sequence(docg3, DOC_SEQ_PAGE_SETUP); in doc_write_seek()
518 doc_flash_command(docg3, DOC_CMD_PROG_CYCLE1); in doc_write_seek()
521 doc_setup_writeaddr_sector(docg3, sector, ofs); in doc_write_seek()
523 doc_flash_command(docg3, DOC_CMD_PROG_CYCLE3); in doc_write_seek()
524 doc_delay(docg3, 2); in doc_write_seek()
525 ret = doc_wait_ready(docg3); in doc_write_seek()
529 doc_flash_command(docg3, DOC_CMD_PROG_CYCLE1); in doc_write_seek()
531 doc_setup_writeaddr_sector(docg3, sector, ofs); in doc_write_seek()
532 doc_delay(docg3, 1); in doc_write_seek()
549 static int doc_read_page_ecc_init(struct docg3 *docg3, int len) in doc_read_page_ecc_init() argument
551 doc_writew(docg3, DOC_ECCCONF0_READ_MODE in doc_read_page_ecc_init()
555 doc_delay(docg3, 4); in doc_read_page_ecc_init()
556 doc_register_readb(docg3, DOC_FLASHCONTROL); in doc_read_page_ecc_init()
557 return doc_wait_ready(docg3); in doc_read_page_ecc_init()
570 static int doc_write_page_ecc_init(struct docg3 *docg3, int len) in doc_write_page_ecc_init() argument
572 doc_writew(docg3, DOC_ECCCONF0_WRITE_MODE in doc_write_page_ecc_init()
576 doc_delay(docg3, 4); in doc_write_page_ecc_init()
577 doc_register_readb(docg3, DOC_FLASHCONTROL); in doc_write_page_ecc_init()
578 return doc_wait_ready(docg3); in doc_write_page_ecc_init()
588 static void doc_ecc_disable(struct docg3 *docg3) in doc_ecc_disable() argument
590 doc_writew(docg3, DOC_ECCCONF0_READ_MODE, DOC_ECCCONF0); in doc_ecc_disable()
591 doc_delay(docg3, 4); in doc_ecc_disable()
602 static void doc_hamming_ecc_init(struct docg3 *docg3, int nb_bytes) in doc_hamming_ecc_init() argument
606 ecc_conf1 = doc_register_readb(docg3, DOC_ECCCONF1); in doc_hamming_ecc_init()
609 doc_writeb(docg3, ecc_conf1, DOC_ECCCONF1); in doc_hamming_ecc_init()
635 static int doc_ecc_bch_fix_data(struct docg3 *docg3, void *buf, u8 *hwecc) in doc_ecc_bch_fix_data() argument
642 numerrs = decode_bch(docg3->cascade->bch, NULL, in doc_ecc_bch_fix_data()
687 static int doc_read_page_prepare(struct docg3 *docg3, int block0, int block1, in doc_read_page_prepare() argument
699 doc_set_device_id(docg3, docg3->device_id); in doc_read_page_prepare()
700 ret = doc_reset_seq(docg3); in doc_read_page_prepare()
705 ret = doc_read_seek(docg3, block0, block1, page, wear_area, offset); in doc_read_page_prepare()
709 doc_flash_command(docg3, DOC_CMD_READ_ALL_PLANES); in doc_read_page_prepare()
710 doc_delay(docg3, 2); in doc_read_page_prepare()
711 doc_wait_ready(docg3); in doc_read_page_prepare()
713 doc_flash_command(docg3, DOC_CMD_SET_ADDR_READ); in doc_read_page_prepare()
714 doc_delay(docg3, 1); in doc_read_page_prepare()
717 doc_flash_address(docg3, offset >> 2); in doc_read_page_prepare()
718 doc_delay(docg3, 1); in doc_read_page_prepare()
719 doc_wait_ready(docg3); in doc_read_page_prepare()
721 doc_flash_command(docg3, DOC_CMD_READ_FLASH); in doc_read_page_prepare()
725 doc_writeb(docg3, 0, DOC_DATAEND); in doc_read_page_prepare()
726 doc_delay(docg3, 2); in doc_read_page_prepare()
745 static int doc_read_page_getbytes(struct docg3 *docg3, int len, u_char *buf, in doc_read_page_getbytes() argument
749 doc_read_data_area(docg3, buf, 1, first); in doc_read_page_getbytes()
750 doc_read_data_area(docg3, buf ? buf + 1 : buf, len - 1, 0); in doc_read_page_getbytes()
752 doc_read_data_area(docg3, buf, len, first); in doc_read_page_getbytes()
754 doc_delay(docg3, 2); in doc_read_page_getbytes()
765 static void doc_write_page_putbytes(struct docg3 *docg3, int len, in doc_write_page_putbytes() argument
768 doc_write_data_area(docg3, buf, len); in doc_write_page_putbytes()
769 doc_delay(docg3, 2); in doc_write_page_putbytes()
777 static void doc_get_bch_hw_ecc(struct docg3 *docg3, u8 *hwecc) in doc_get_bch_hw_ecc() argument
782 hwecc[i] = doc_register_readb(docg3, DOC_BCH_HW_ECC(i)); in doc_get_bch_hw_ecc()
789 static void doc_page_finish(struct docg3 *docg3) in doc_page_finish() argument
791 doc_writeb(docg3, 0, DOC_DATAEND); in doc_page_finish()
792 doc_delay(docg3, 2); in doc_page_finish()
803 static void doc_read_page_finish(struct docg3 *docg3) in doc_read_page_finish() argument
805 doc_page_finish(docg3); in doc_read_page_finish()
806 doc_set_device_id(docg3, 0); in doc_read_page_finish()
860 struct docg3 *docg3 = mtd->priv; in doc_read_oob() local
892 mutex_lock(&docg3->cascade->lock); in doc_read_oob()
895 docg3->reliable); in doc_read_oob()
898 ret = doc_read_page_prepare(docg3, block0, block1, page, ofs); in doc_read_oob()
901 ret = doc_read_page_ecc_init(docg3, DOC_ECC_BCH_TOTAL_BYTES); in doc_read_oob()
904 ret = doc_read_page_getbytes(docg3, skip, NULL, 1, 0); in doc_read_oob()
907 ret = doc_read_page_getbytes(docg3, nbdata, buf, 0, skip % 2); in doc_read_oob()
910 doc_read_page_getbytes(docg3, in doc_read_oob()
913 ret = doc_read_page_getbytes(docg3, nboob, oobbuf, 0, 0); in doc_read_oob()
916 doc_read_page_getbytes(docg3, DOC_LAYOUT_OOB_SIZE - nboob, in doc_read_oob()
919 doc_get_bch_hw_ecc(docg3, hwecc); in doc_read_oob()
920 eccconf1 = doc_register_readb(docg3, DOC_ECCCONF1); in doc_read_oob()
932 if (is_prot_seq_error(docg3)) in doc_read_oob()
940 ret = doc_ecc_bch_fix_data(docg3, buf, hwecc); in doc_read_oob()
952 doc_read_page_finish(docg3); in doc_read_oob()
964 mutex_unlock(&docg3->cascade->lock); in doc_read_oob()
967 doc_read_page_finish(docg3); in doc_read_oob()
1001 static int doc_reload_bbt(struct docg3 *docg3) in doc_reload_bbt() argument
1005 u_char *buf = docg3->bbt; in doc_reload_bbt()
1007 nbpages = DIV_ROUND_UP(docg3->max_block + 1, 8 * DOC_LAYOUT_PAGE_SIZE); in doc_reload_bbt()
1009 ret = doc_read_page_prepare(docg3, block, block + 1, in doc_reload_bbt()
1012 ret = doc_read_page_ecc_init(docg3, in doc_reload_bbt()
1015 doc_read_page_getbytes(docg3, DOC_LAYOUT_PAGE_SIZE, in doc_reload_bbt()
1019 doc_read_page_finish(docg3); in doc_reload_bbt()
1032 struct docg3 *docg3 = mtd->priv; in doc_block_isbad() local
1036 docg3->reliable); in doc_block_isbad()
1042 if (block1 > docg3->max_block) in doc_block_isbad()
1045 is_good = docg3->bbt[block0 >> 3] & (1 << (block0 & 0x7)); in doc_block_isbad()
1060 static int doc_get_erase_count(struct docg3 *docg3, loff_t from)
1069 calc_block_sector(from, &block0, &block1, &page, &ofs, docg3->reliable);
1070 if (block1 > docg3->max_block)
1073 ret = doc_reset_seq(docg3);
1075 ret = doc_read_page_prepare(docg3, block0, block1, page,
1078 ret = doc_read_page_getbytes(docg3, DOC_LAYOUT_WEAR_SIZE,
1080 doc_read_page_finish(docg3);
1101 static int doc_get_op_status(struct docg3 *docg3) in doc_get_op_status() argument
1105 doc_flash_sequence(docg3, DOC_SEQ_PLANES_STATUS); in doc_get_op_status()
1106 doc_flash_command(docg3, DOC_CMD_PLANES_STATUS); in doc_get_op_status()
1107 doc_delay(docg3, 5); in doc_get_op_status()
1109 doc_ecc_disable(docg3); in doc_get_op_status()
1110 doc_read_data_area(docg3, &status, 1, 1); in doc_get_op_status()
1124 static int doc_write_erase_wait_status(struct docg3 *docg3) in doc_write_erase_wait_status() argument
1128 for (i = 0; !doc_is_ready(docg3) && i < 5; i++) in doc_write_erase_wait_status()
1130 if (!doc_is_ready(docg3)) { in doc_write_erase_wait_status()
1136 status = doc_get_op_status(docg3); in doc_write_erase_wait_status()
1144 doc_page_finish(docg3); in doc_write_erase_wait_status()
1159 static int doc_erase_block(struct docg3 *docg3, int block0, int block1) in doc_erase_block() argument
1164 ret = doc_reset_seq(docg3); in doc_erase_block()
1168 doc_set_reliable_mode(docg3); in doc_erase_block()
1169 doc_flash_sequence(docg3, DOC_SEQ_ERASE); in doc_erase_block()
1172 doc_flash_command(docg3, DOC_CMD_PROG_BLOCK_ADDR); in doc_erase_block()
1173 doc_setup_addr_sector(docg3, sector); in doc_erase_block()
1175 doc_flash_command(docg3, DOC_CMD_PROG_BLOCK_ADDR); in doc_erase_block()
1176 doc_setup_addr_sector(docg3, sector); in doc_erase_block()
1177 doc_delay(docg3, 1); in doc_erase_block()
1179 doc_flash_command(docg3, DOC_CMD_ERASECYCLE2); in doc_erase_block()
1180 doc_delay(docg3, 2); in doc_erase_block()
1182 if (is_prot_seq_error(docg3)) { in doc_erase_block()
1187 return doc_write_erase_wait_status(docg3); in doc_erase_block()
1203 struct docg3 *docg3 = mtd->priv; in doc_erase() local
1211 &ofs, docg3->reliable); in doc_erase()
1218 docg3->reliable); in doc_erase()
1219 mutex_lock(&docg3->cascade->lock); in doc_erase()
1220 doc_set_device_id(docg3, docg3->device_id); in doc_erase()
1221 doc_set_reliable_mode(docg3); in doc_erase()
1224 ret = doc_erase_block(docg3, block0, block1); in doc_erase()
1228 mutex_unlock(&docg3->cascade->lock); in doc_erase()
1260 static int doc_write_page(struct docg3 *docg3, loff_t to, const u_char *buf, in doc_write_page() argument
1267 calc_block_sector(to, &block0, &block1, &page, &ofs, docg3->reliable); in doc_write_page()
1269 doc_set_device_id(docg3, docg3->device_id); in doc_write_page()
1270 ret = doc_reset_seq(docg3); in doc_write_page()
1275 ret = doc_write_seek(docg3, block0, block1, page, ofs); in doc_write_page()
1279 doc_write_page_ecc_init(docg3, DOC_ECC_BCH_TOTAL_BYTES); in doc_write_page()
1280 doc_delay(docg3, 2); in doc_write_page()
1281 doc_write_page_putbytes(docg3, DOC_LAYOUT_PAGE_SIZE, buf); in doc_write_page()
1284 doc_write_page_putbytes(docg3, DOC_LAYOUT_OOB_PAGEINFO_SZ, oob); in doc_write_page()
1285 doc_delay(docg3, 2); in doc_write_page()
1288 hamming = doc_register_readb(docg3, DOC_HAMMINGPARITY); in doc_write_page()
1289 doc_delay(docg3, 2); in doc_write_page()
1290 doc_write_page_putbytes(docg3, DOC_LAYOUT_OOB_HAMMING_SZ, in doc_write_page()
1292 doc_delay(docg3, 2); in doc_write_page()
1294 doc_get_bch_hw_ecc(docg3, hwecc); in doc_write_page()
1295 doc_write_page_putbytes(docg3, DOC_LAYOUT_OOB_BCH_SZ, hwecc); in doc_write_page()
1296 doc_delay(docg3, 2); in doc_write_page()
1298 doc_write_page_putbytes(docg3, DOC_LAYOUT_OOB_UNUSED_SZ, oob); in doc_write_page()
1301 doc_write_page_putbytes(docg3, DOC_LAYOUT_OOB_SIZE, oob); in doc_write_page()
1303 doc_delay(docg3, 2); in doc_write_page()
1304 doc_page_finish(docg3); in doc_write_page()
1305 doc_delay(docg3, 2); in doc_write_page()
1306 doc_flash_command(docg3, DOC_CMD_PROG_CYCLE2); in doc_write_page()
1307 doc_delay(docg3, 2); in doc_write_page()
1313 ret = doc_write_erase_wait_status(docg3); in doc_write_page()
1316 doc_read_page_finish(docg3); in doc_write_page()
1373 static int doc_backup_oob(struct docg3 *docg3, loff_t to, in doc_backup_oob() argument
1384 docg3->oob_write_ofs = to; in doc_backup_oob()
1385 docg3->oob_autoecc = autoecc; in doc_backup_oob()
1387 doc_fill_autooob(docg3->oob_write_buf, ops->oobbuf); in doc_backup_oob()
1390 memcpy(docg3->oob_write_buf, ops->oobbuf, DOC_LAYOUT_OOB_SIZE); in doc_backup_oob()
1414 struct docg3 *docg3 = mtd->priv; in doc_write_oob() local
1461 return doc_backup_oob(docg3, ofs, ops); in doc_write_oob()
1467 mutex_lock(&docg3->cascade->lock); in doc_write_oob()
1470 if (ofs == docg3->oob_write_ofs) in doc_write_oob()
1471 memcpy(oob, docg3->oob_write_buf, DOC_LAYOUT_OOB_SIZE); in doc_write_oob()
1476 ret = doc_write_page(docg3, ofs, buf, oob, autoecc); in doc_write_oob()
1489 doc_set_device_id(docg3, 0); in doc_write_oob()
1490 mutex_unlock(&docg3->cascade->lock); in doc_write_oob()
1510 struct docg3 *docg3 = mtd->priv; in doc_write() local
1527 static struct docg3 *sysfs_dev2docg3(struct device *dev, in sysfs_dev2docg3()
1544 struct docg3 *docg3 = sysfs_dev2docg3(dev, attr); in dps0_is_key_locked() local
1547 mutex_lock(&docg3->cascade->lock); in dps0_is_key_locked()
1548 doc_set_device_id(docg3, docg3->device_id); in dps0_is_key_locked()
1549 dps0 = doc_register_readb(docg3, DOC_DPS0_STATUS); in dps0_is_key_locked()
1550 doc_set_device_id(docg3, 0); in dps0_is_key_locked()
1551 mutex_unlock(&docg3->cascade->lock); in dps0_is_key_locked()
1559 struct docg3 *docg3 = sysfs_dev2docg3(dev, attr); in dps1_is_key_locked() local
1562 mutex_lock(&docg3->cascade->lock); in dps1_is_key_locked()
1563 doc_set_device_id(docg3, docg3->device_id); in dps1_is_key_locked()
1564 dps1 = doc_register_readb(docg3, DOC_DPS1_STATUS); in dps1_is_key_locked()
1565 doc_set_device_id(docg3, 0); in dps1_is_key_locked()
1566 mutex_unlock(&docg3->cascade->lock); in dps1_is_key_locked()
1575 struct docg3 *docg3 = sysfs_dev2docg3(dev, attr); in dps0_insert_key() local
1581 mutex_lock(&docg3->cascade->lock); in dps0_insert_key()
1582 doc_set_device_id(docg3, docg3->device_id); in dps0_insert_key()
1584 doc_writeb(docg3, buf[i], DOC_DPS0_KEY); in dps0_insert_key()
1585 doc_set_device_id(docg3, 0); in dps0_insert_key()
1586 mutex_unlock(&docg3->cascade->lock); in dps0_insert_key()
1594 struct docg3 *docg3 = sysfs_dev2docg3(dev, attr); in dps1_insert_key() local
1600 mutex_lock(&docg3->cascade->lock); in dps1_insert_key()
1601 doc_set_device_id(docg3, docg3->device_id); in dps1_insert_key()
1603 doc_writeb(docg3, buf[i], DOC_DPS1_KEY); in dps1_insert_key()
1604 doc_set_device_id(docg3, 0); in dps1_insert_key()
1605 mutex_unlock(&docg3->cascade->lock); in dps1_insert_key()
1667 struct docg3 *docg3 = (struct docg3 *)s->private; in dbg_flashctrl_show() local
1671 mutex_lock(&docg3->cascade->lock); in dbg_flashctrl_show()
1672 fctrl = doc_register_readb(docg3, DOC_FLASHCONTROL); in dbg_flashctrl_show()
1673 mutex_unlock(&docg3->cascade->lock); in dbg_flashctrl_show()
1689 struct docg3 *docg3 = (struct docg3 *)s->private; in dbg_asicmode_show() local
1693 mutex_lock(&docg3->cascade->lock); in dbg_asicmode_show()
1694 pctrl = doc_register_readb(docg3, DOC_ASICMODE); in dbg_asicmode_show()
1696 mutex_unlock(&docg3->cascade->lock); in dbg_asicmode_show()
1726 struct docg3 *docg3 = (struct docg3 *)s->private; in dbg_device_id_show() local
1729 mutex_lock(&docg3->cascade->lock); in dbg_device_id_show()
1730 id = doc_register_readb(docg3, DOC_DEVICESELECT); in dbg_device_id_show()
1731 mutex_unlock(&docg3->cascade->lock); in dbg_device_id_show()
1740 struct docg3 *docg3 = (struct docg3 *)s->private; in dbg_protection_show() local
1743 mutex_lock(&docg3->cascade->lock); in dbg_protection_show()
1744 protect = doc_register_readb(docg3, DOC_PROTECTION); in dbg_protection_show()
1745 dps0 = doc_register_readb(docg3, DOC_DPS0_STATUS); in dbg_protection_show()
1746 dps0_low = doc_register_readw(docg3, DOC_DPS0_ADDRLOW); in dbg_protection_show()
1747 dps0_high = doc_register_readw(docg3, DOC_DPS0_ADDRHIGH); in dbg_protection_show()
1748 dps1 = doc_register_readb(docg3, DOC_DPS1_STATUS); in dbg_protection_show()
1749 dps1_low = doc_register_readw(docg3, DOC_DPS1_ADDRLOW); in dbg_protection_show()
1750 dps1_high = doc_register_readw(docg3, DOC_DPS1_ADDRHIGH); in dbg_protection_show()
1751 mutex_unlock(&docg3->cascade->lock); in dbg_protection_show()
1790 static int __init doc_dbg_register(struct docg3 *docg3) in doc_dbg_register() argument
1798 entry = debugfs_create_file("flashcontrol", S_IRUSR, root, docg3, in doc_dbg_register()
1802 docg3, &asic_mode_fops); in doc_dbg_register()
1805 docg3, &device_id_fops); in doc_dbg_register()
1808 docg3, &protection_fops); in doc_dbg_register()
1810 docg3->debugfs_root = root; in doc_dbg_register()
1818 static void doc_dbg_unregister(struct docg3 *docg3) in doc_dbg_unregister() argument
1820 debugfs_remove_recursive(docg3->debugfs_root); in doc_dbg_unregister()
1830 struct docg3 *docg3 = mtd->priv; in doc_set_driver_info() local
1833 cfg = doc_register_readb(docg3, DOC_CONFIGURATION); in doc_set_driver_info()
1834 docg3->if_cfg = (cfg & DOC_CONF_IF_CFG ? 1 : 0); in doc_set_driver_info()
1835 docg3->reliable = reliable_mode; in doc_set_driver_info()
1840 docg3->device_id); in doc_set_driver_info()
1843 docg3->max_block = 2047; in doc_set_driver_info()
1848 mtd->size = (docg3->max_block + 1) * DOC_LAYOUT_BLOCK_SIZE; in doc_set_driver_info()
1849 if (docg3->reliable == 2) in doc_set_driver_info()
1852 if (docg3->reliable == 2) in doc_set_driver_info()
1886 struct docg3 *docg3; in doc_probe_device() local
1890 docg3 = kzalloc(sizeof(struct docg3), GFP_KERNEL); in doc_probe_device()
1891 if (!docg3) in doc_probe_device()
1896 mtd->priv = docg3; in doc_probe_device()
1898 bbt_nbpages = DIV_ROUND_UP(docg3->max_block + 1, in doc_probe_device()
1900 docg3->bbt = kzalloc(bbt_nbpages * DOC_LAYOUT_PAGE_SIZE, GFP_KERNEL); in doc_probe_device()
1901 if (!docg3->bbt) in doc_probe_device()
1904 docg3->dev = dev; in doc_probe_device()
1905 docg3->device_id = floor; in doc_probe_device()
1906 docg3->cascade = cascade; in doc_probe_device()
1907 doc_set_device_id(docg3, docg3->device_id); in doc_probe_device()
1909 doc_set_asic_mode(docg3, DOC_ASICMODE_RESET); in doc_probe_device()
1910 doc_set_asic_mode(docg3, DOC_ASICMODE_NORMAL); in doc_probe_device()
1912 chip_id = doc_register_readw(docg3, DOC_CHIPID); in doc_probe_device()
1913 chip_id_inv = doc_register_readw(docg3, DOC_CHIPID_INV); in doc_probe_device()
1923 docg3->cascade->base, floor); in doc_probe_device()
1934 doc_hamming_ecc_init(docg3, DOC_LAYOUT_OOB_PAGEINFO_SZ); in doc_probe_device()
1935 doc_reload_bbt(docg3); in doc_probe_device()
1939 kfree(docg3->bbt); in doc_probe_device()
1943 kfree(docg3); in doc_probe_device()
1954 struct docg3 *docg3 = mtd->priv; in doc_release_device() local
1957 kfree(docg3->bbt); in doc_release_device()
1958 kfree(docg3); in doc_release_device()
1974 struct docg3 *docg3; in docg3_resume() local
1979 docg3 = mtd->priv; in docg3_resume()
1983 doc_readb(docg3, DOC_IOSPACE_IPL); in docg3_resume()
2001 struct docg3 *docg3; in docg3_suspend() local
2010 docg3 = mtd->priv; in docg3_suspend()
2012 doc_writeb(docg3, floor, DOC_DEVICESELECT); in docg3_suspend()
2013 ctrl = doc_register_readb(docg3, DOC_FLASHCONTROL); in docg3_suspend()
2015 doc_writeb(docg3, ctrl, DOC_FLASHCONTROL); in docg3_suspend()
2019 pwr_down = doc_register_readb(docg3, DOC_POWERMODE); in docg3_suspend()
2034 docg3 = mtd->priv; in docg3_suspend()
2035 doc_set_asic_mode(docg3, DOC_ASICMODE_POWERDOWN); in docg3_suspend()
2124 struct docg3 *docg3 = cascade->floors[0]->priv; in docg3_release() local
2128 doc_dbg_unregister(docg3); in docg3_release()
2133 free_bch(docg3->cascade->bch); in docg3_release()