Lines Matching full:doc
83 #define DoC_is_MillenniumPlus(doc) ((doc)->ChipID == DOC_ChipID_DocMilPlus16 || (doc)->ChipID == DO… argument
84 #define DoC_is_Millennium(doc) ((doc)->ChipID == DOC_ChipID_DocMil) argument
85 #define DoC_is_2000(doc) ((doc)->ChipID == DOC_ChipID_Doc2k) argument
129 * The HW decoder in the DoC ASIC's provides us a error syndrome,
183 * in the DoC ASIC's. in doc_ecc_decode()
219 static void DoC_Delay(struct doc_priv *doc, unsigned short cycles) in DoC_Delay() argument
225 if (DoC_is_Millennium(doc)) in DoC_Delay()
226 dummy = ReadDOC(doc->virtadr, NOP); in DoC_Delay()
227 else if (DoC_is_MillenniumPlus(doc)) in DoC_Delay()
228 dummy = ReadDOC(doc->virtadr, Mplus_NOP); in DoC_Delay()
230 dummy = ReadDOC(doc->virtadr, DOCStatus); in DoC_Delay()
238 static int _DoC_WaitReady(struct doc_priv *doc) in _DoC_WaitReady() argument
240 void __iomem *docptr = doc->virtadr; in _DoC_WaitReady()
246 if (DoC_is_MillenniumPlus(doc)) { in _DoC_WaitReady()
269 static inline int DoC_WaitReady(struct doc_priv *doc) in DoC_WaitReady() argument
271 void __iomem *docptr = doc->virtadr; in DoC_WaitReady()
274 if (DoC_is_MillenniumPlus(doc)) { in DoC_WaitReady()
275 DoC_Delay(doc, 4); in DoC_WaitReady()
279 ret = _DoC_WaitReady(doc); in DoC_WaitReady()
281 DoC_Delay(doc, 4); in DoC_WaitReady()
285 ret = _DoC_WaitReady(doc); in DoC_WaitReady()
286 DoC_Delay(doc, 2); in DoC_WaitReady()
296 struct doc_priv *doc = nand_get_controller_data(this); in doc2000_write_byte() local
297 void __iomem *docptr = doc->virtadr; in doc2000_write_byte()
307 struct doc_priv *doc = nand_get_controller_data(this); in doc2000_read_byte() local
308 void __iomem *docptr = doc->virtadr; in doc2000_read_byte()
312 DoC_Delay(doc, 2); in doc2000_read_byte()
322 struct doc_priv *doc = nand_get_controller_data(this); in doc2000_writebuf() local
323 void __iomem *docptr = doc->virtadr; in doc2000_writebuf()
338 struct doc_priv *doc = nand_get_controller_data(this); in doc2000_readbuf() local
339 void __iomem *docptr = doc->virtadr; in doc2000_readbuf()
351 struct doc_priv *doc = nand_get_controller_data(this); in doc2000_readbuf_dword() local
352 void __iomem *docptr = doc->virtadr; in doc2000_readbuf_dword()
372 struct doc_priv *doc = nand_get_controller_data(this); in doc200x_ident_chip() local
389 if (doc->ChipID == DOC_ChipID_Doc2k && try_dword && !nr) { in doc200x_ident_chip()
395 void __iomem *docptr = doc->virtadr; in doc200x_ident_chip()
418 struct doc_priv *doc = nand_get_controller_data(this); in doc2000_count_chips() local
423 doc->chips_per_floor = 4; in doc2000_count_chips()
433 doc->chips_per_floor = i; in doc2000_count_chips()
439 struct doc_priv *doc = nand_get_controller_data(this); in doc200x_wait() local
443 DoC_WaitReady(doc); in doc200x_wait()
445 DoC_WaitReady(doc); in doc200x_wait()
453 struct doc_priv *doc = nand_get_controller_data(this); in doc2001_write_byte() local
454 void __iomem *docptr = doc->virtadr; in doc2001_write_byte()
463 struct doc_priv *doc = nand_get_controller_data(this); in doc2001_read_byte() local
464 void __iomem *docptr = doc->virtadr; in doc2001_read_byte()
468 DoC_Delay(doc, 2); in doc2001_read_byte()
476 struct doc_priv *doc = nand_get_controller_data(this); in doc2001_writebuf() local
477 void __iomem *docptr = doc->virtadr; in doc2001_writebuf()
488 struct doc_priv *doc = nand_get_controller_data(this); in doc2001_readbuf() local
489 void __iomem *docptr = doc->virtadr; in doc2001_readbuf()
504 struct doc_priv *doc = nand_get_controller_data(this); in doc2001plus_read_byte() local
505 void __iomem *docptr = doc->virtadr; in doc2001plus_read_byte()
518 struct doc_priv *doc = nand_get_controller_data(this); in doc2001plus_writebuf() local
519 void __iomem *docptr = doc->virtadr; in doc2001plus_writebuf()
535 struct doc_priv *doc = nand_get_controller_data(this); in doc2001plus_readbuf() local
536 void __iomem *docptr = doc->virtadr; in doc2001plus_readbuf()
565 struct doc_priv *doc = nand_get_controller_data(this); in doc2001plus_select_chip() local
566 void __iomem *docptr = doc->virtadr; in doc2001plus_select_chip()
578 floor = chip / doc->chips_per_floor; in doc2001plus_select_chip()
579 chip -= (floor * doc->chips_per_floor); in doc2001plus_select_chip()
585 doc->curchip = chip; in doc2001plus_select_chip()
586 doc->curfloor = floor; in doc2001plus_select_chip()
591 struct doc_priv *doc = nand_get_controller_data(this); in doc200x_select_chip() local
592 void __iomem *docptr = doc->virtadr; in doc200x_select_chip()
601 floor = chip / doc->chips_per_floor; in doc200x_select_chip()
602 chip -= (floor * doc->chips_per_floor); in doc200x_select_chip()
612 doc->curchip = chip; in doc200x_select_chip()
613 doc->curfloor = floor; in doc200x_select_chip()
621 struct doc_priv *doc = nand_get_controller_data(this); in doc200x_hwcontrol() local
622 void __iomem *docptr = doc->virtadr; in doc200x_hwcontrol()
625 doc->CDSNControl &= ~CDSN_CTRL_MSK; in doc200x_hwcontrol()
626 doc->CDSNControl |= ctrl & CDSN_CTRL_MSK; in doc200x_hwcontrol()
628 printk("hwcontrol(%d): %02x\n", cmd, doc->CDSNControl); in doc200x_hwcontrol()
629 WriteDOC(doc->CDSNControl, docptr, CDSNControl); in doc200x_hwcontrol()
631 DoC_Delay(doc, 4); in doc200x_hwcontrol()
634 if (DoC_is_2000(doc)) in doc200x_hwcontrol()
645 struct doc_priv *doc = nand_get_controller_data(this); in doc2001plus_command() local
646 void __iomem *docptr = doc->virtadr; in doc2001plus_command()
749 struct doc_priv *doc = nand_get_controller_data(this); in doc200x_dev_ready() local
750 void __iomem *docptr = doc->virtadr; in doc200x_dev_ready()
752 if (DoC_is_MillenniumPlus(doc)) { in doc200x_dev_ready()
754 DoC_Delay(doc, 4); in doc200x_dev_ready()
765 DoC_Delay(doc, 4); in doc200x_dev_ready()
772 DoC_Delay(doc, 2); in doc200x_dev_ready()
788 struct doc_priv *doc = nand_get_controller_data(this); in doc200x_enable_hwecc() local
789 void __iomem *docptr = doc->virtadr; in doc200x_enable_hwecc()
806 struct doc_priv *doc = nand_get_controller_data(this); in doc2001plus_enable_hwecc() local
807 void __iomem *docptr = doc->virtadr; in doc2001plus_enable_hwecc()
826 struct doc_priv *doc = nand_get_controller_data(this); in doc200x_calculate_ecc() local
827 void __iomem *docptr = doc->virtadr; in doc200x_calculate_ecc()
832 if (DoC_is_2000(doc)) { in doc200x_calculate_ecc()
833 WriteDOC(doc->CDSNControl & ~CDSN_CTRL_FLASH_IO, docptr, CDSNControl); in doc200x_calculate_ecc()
837 WriteDOC(doc->CDSNControl, docptr, CDSNControl); in doc200x_calculate_ecc()
838 } else if (DoC_is_MillenniumPlus(doc)) { in doc200x_calculate_ecc()
849 if (DoC_is_MillenniumPlus(doc)) in doc200x_calculate_ecc()
856 if (DoC_is_MillenniumPlus(doc)) in doc200x_calculate_ecc()
886 struct doc_priv *doc = nand_get_controller_data(this); in doc200x_correct_data() local
887 void __iomem *docptr = doc->virtadr; in doc200x_correct_data()
892 if (DoC_is_2000(doc)) { in doc200x_correct_data()
896 } else if (DoC_is_MillenniumPlus(doc)) { in doc200x_correct_data()
909 if (DoC_is_MillenniumPlus(doc)) in doc200x_correct_data()
915 ret = doc_ecc_decode(doc->rs_decoder, dat, calc_ecc); in doc200x_correct_data()
920 if (DoC_is_MillenniumPlus(doc)) in doc200x_correct_data()
984 mh1_page in the DOC private structure. */
988 struct doc_priv *doc = nand_get_controller_data(this); in find_media_headers() local
998 pr_warn("ECC error scanning DOC at 0x%x\n", offs); in find_media_headers()
1003 if (doc->mh0_page == -1) { in find_media_headers()
1004 doc->mh0_page = offs >> this->page_shift; in find_media_headers()
1009 doc->mh1_page = offs >> this->page_shift; in find_media_headers()
1012 if (doc->mh0_page == -1) { in find_media_headers()
1018 offs = doc->mh0_page << this->page_shift; in find_media_headers()
1031 struct doc_priv *doc = nand_get_controller_data(this); in nftl_partscan() local
1102 offs = max(doc->mh0_page, doc->mh1_page); in nftl_partscan()
1137 struct doc_priv *doc = nand_get_controller_data(this); in inftl_partscan() local
1158 doc->mh1_page = doc->mh0_page + (4096 >> this->page_shift); in inftl_partscan()
1194 blocks = doc->chips_per_floor << (this->chip_shift - this->phys_erase_shift); in inftl_partscan()
1257 struct doc_priv *doc = nand_get_controller_data(this); in nftl_scan_bbt() local
1270 this->bbt_td->pages[0] = doc->mh0_page + 1; in nftl_scan_bbt()
1271 if (doc->mh1_page != -1) { in nftl_scan_bbt()
1276 this->bbt_md->pages[0] = doc->mh1_page + 1; in nftl_scan_bbt()
1292 struct doc_priv *doc = nand_get_controller_data(this); in inftl_scan_bbt() local
1295 if (nanddev_ntargets(&this->base) > doc->chips_per_floor) { in inftl_scan_bbt()
1300 if (DoC_is_MillenniumPlus(doc)) { in inftl_scan_bbt()
1345 struct doc_priv *doc = nand_get_controller_data(this); in doc2000_init() local
1350 doc->late_init = nftl_scan_bbt; in doc2000_init()
1352 doc->CDSNControl = CDSN_CTRL_FLASH_IO | CDSN_CTRL_ECC_IO; in doc2000_init()
1355 return (4 * doc->chips_per_floor); in doc2000_init()
1361 struct doc_priv *doc = nand_get_controller_data(this); in doc2001_init() local
1367 ReadDOC(doc->virtadr, ChipID); in doc2001_init()
1368 ReadDOC(doc->virtadr, ChipID); in doc2001_init()
1369 ReadDOC(doc->virtadr, ChipID); in doc2001_init()
1370 if (ReadDOC(doc->virtadr, ChipID) != DOC_ChipID_DocMil) { in doc2001_init()
1377 doc->late_init = inftl_scan_bbt; in doc2001_init()
1378 return (4 * doc->chips_per_floor); in doc2001_init()
1381 doc->chips_per_floor = 1; in doc2001_init()
1383 doc->late_init = nftl_scan_bbt; in doc2001_init()
1391 struct doc_priv *doc = nand_get_controller_data(this); in doc2001plus_init() local
1396 doc->late_init = inftl_scan_bbt; in doc2001plus_init()
1402 doc->chips_per_floor = 1; in doc2001plus_init()
1411 struct doc_priv *doc = NULL; in doc_probe() local
1506 for (mtd = doclist; mtd; mtd = doc->nextdoc) { in doc_probe()
1510 doc = nand_get_controller_data(nand); in doc_probe()
1512 in fact the same DOC aliased to a new address. If writes in doc_probe()
1516 oldval = ReadDOC(doc->virtadr, Mplus_AliasResolution); in doc_probe()
1519 oldval = ReadDOC(doc->virtadr, AliasResolution); in doc_probe()
1526 oldval = ReadDOC(doc->virtadr, Mplus_AliasResolution); in doc_probe()
1530 oldval = ReadDOC(doc->virtadr, AliasResolution); in doc_probe()
1535 pr_debug("Found alias of DOC at 0x%lx to 0x%lx\n", in doc_probe()
1536 doc->physadr, physadr); in doc_probe()
1561 doc = (struct doc_priv *) (nand + 1); in doc_probe()
1562 doc->rs_decoder = init_rs(10, 0x409, FCR, 1, NROOTS); in doc_probe()
1563 if (!doc->rs_decoder) { in doc_probe()
1570 nand->bbt_td = (struct nand_bbt_descr *) (doc + 1); in doc_probe()
1576 nand_set_controller_data(nand, doc); in doc_probe()
1595 doc->physadr = physadr; in doc_probe()
1596 doc->virtadr = virtadr; in doc_probe()
1597 doc->ChipID = ChipID; in doc_probe()
1598 doc->curfloor = -1; in doc_probe()
1599 doc->curchip = -1; in doc_probe()
1600 doc->mh0_page = -1; in doc_probe()
1601 doc->mh1_page = -1; in doc_probe()
1602 doc->nextdoc = doclist; in doc_probe()
1611 if ((ret = nand_scan(nand, numchips)) || (ret = doc->late_init(mtd))) { in doc_probe()
1631 if (doc) in doc_probe()
1632 free_rs(doc->rs_decoder); in doc_probe()
1646 struct doc_priv *doc; in release_nanddoc() local
1650 doc = nand_get_controller_data(nand); in release_nanddoc()
1652 nextmtd = doc->nextdoc; in release_nanddoc()
1654 iounmap(doc->virtadr); in release_nanddoc()
1655 release_mem_region(doc->physadr, DOC_IOREMAP_LEN); in release_nanddoc()
1656 free_rs(doc->rs_decoder); in release_nanddoc()
1687 /* Cleanup the nand/DoC resources */ in cleanup_nanddoc()