Lines Matching +full:0 +full:x4140

32 #define NFC_REG_CTL		0x0000
33 #define NFC_REG_ST 0x0004
34 #define NFC_REG_INT 0x0008
35 #define NFC_REG_TIMING_CTL 0x000C
36 #define NFC_REG_TIMING_CFG 0x0010
37 #define NFC_REG_ADDR_LOW 0x0014
38 #define NFC_REG_ADDR_HIGH 0x0018
39 #define NFC_REG_SECTOR_NUM 0x001C
40 #define NFC_REG_CNT 0x0020
41 #define NFC_REG_CMD 0x0024
42 #define NFC_REG_RCMD_SET 0x0028
43 #define NFC_REG_WCMD_SET 0x002C
44 #define NFC_REG_A10_IO_DATA 0x0030
45 #define NFC_REG_A23_IO_DATA 0x0300
46 #define NFC_REG_ECC_CTL 0x0034
47 #define NFC_REG_ECC_ST 0x0038
48 #define NFC_REG_DEBUG 0x003C
49 #define NFC_REG_ECC_ERR_CNT(x) ((0x0040 + (x)) & ~0x3)
50 #define NFC_REG_USER_DATA(x) (0x0050 + ((x) * 4))
51 #define NFC_REG_SPARE_AREA 0x00A0
52 #define NFC_REG_PAT_ID 0x00A4
53 #define NFC_REG_MDMA_ADDR 0x00C0
54 #define NFC_REG_MDMA_CNT 0x00C4
55 #define NFC_RAM0_BASE 0x0400
56 #define NFC_RAM1_BASE 0x0800
59 #define NFC_EN BIT(0)
62 #define NFC_BUS_WIDTH_8 (0 << 2)
70 #define NFC_PAGE_SHIFT(x) (((x) < 10 ? 0 : (x) - 10) << 8)
77 #define NFC_RB_B2R BIT(0)
86 #define NFC_B2R_INT_ENABLE BIT(0)
98 (((tWB) & 0x3) | (((tADL) & 0x3) << 2) | \
99 (((tWHR) & 0x3) << 4) | (((tRHW) & 0x3) << 6) | \
100 (((tCAD) & 0x7) << 8))
103 #define NFC_CMD_LOW_BYTE_MSK GENMASK(7, 0)
120 #define NFC_NORMAL_OP (0 << 30)
125 #define NFC_READ_CMD_MSK GENMASK(7, 0)
130 #define NFC_PROGRAM_CMD_MSK GENMASK(7, 0)
136 #define NFC_ECC_EN BIT(0)
150 #define NFC_ECC_ERR_MSK GENMASK(15, 0)
152 #define NFC_ECC_ERR_CNT(b, x) (((x) >> (((b) % 4) * 8)) & 0xff)
299 ret = 0; in sunxi_nfc_wait_events()
301 writel(0, nfc->regs + NFC_REG_INT); in sunxi_nfc_wait_events()
337 writel(0, nfc->regs + NFC_REG_ECC_CTL); in sunxi_nfc_rst()
395 return 0; in sunxi_nfc_dma_op_prepare()
431 if (sel->rb >= 0) in sunxi_nfc_select_chip()
452 int offs = 0; in sunxi_nfc_read_buf()
472 ret = sunxi_nfc_wait_events(nfc, NFC_CMD_INT_FLAG, poll, 0); in sunxi_nfc_read_buf()
490 int offs = 0; in sunxi_nfc_write_buf()
512 ret = sunxi_nfc_wait_events(nfc, NFC_CMD_INT_FLAG, poll, 0); in sunxi_nfc_write_buf()
522 0x2b75, 0x0bd0, 0x5ca3, 0x62d1, 0x1c93, 0x07e9, 0x2162, 0x3a72,
523 0x0d67, 0x67f9, 0x1be7, 0x077d, 0x032f, 0x0dac, 0x2716, 0x2436,
524 0x7922, 0x1510, 0x3860, 0x5287, 0x480f, 0x4252, 0x1789, 0x5a2d,
525 0x2a49, 0x5e10, 0x437f, 0x4b4e, 0x2f45, 0x216e, 0x5cb7, 0x7130,
526 0x2a3f, 0x60e4, 0x4dc9, 0x0ef0, 0x0f52, 0x1bb9, 0x6211, 0x7a56,
527 0x226d, 0x4ea7, 0x6f36, 0x3692, 0x38bf, 0x0c62, 0x05eb, 0x4c55,
528 0x60f4, 0x728c, 0x3b6f, 0x2037, 0x7f69, 0x0936, 0x651a, 0x4ceb,
529 0x6218, 0x79f3, 0x383f, 0x18d9, 0x4f05, 0x5c82, 0x2912, 0x6f17,
530 0x6856, 0x5938, 0x1007, 0x61ab, 0x3e7f, 0x57c2, 0x542f, 0x4f62,
531 0x7454, 0x2eac, 0x7739, 0x42d4, 0x2f90, 0x435a, 0x2e52, 0x2064,
532 0x637c, 0x66ad, 0x2c90, 0x0bad, 0x759c, 0x0029, 0x0986, 0x7126,
533 0x1ca7, 0x1605, 0x386a, 0x27f5, 0x1380, 0x6d75, 0x24c3, 0x0f8e,
534 0x2b7a, 0x1418, 0x1fd1, 0x7dc1, 0x2d8e, 0x43af, 0x2267, 0x7da3,
535 0x4e3d, 0x1338, 0x50db, 0x454d, 0x764d, 0x40a3, 0x42e6, 0x262b,
536 0x2d2e, 0x1aea, 0x2e17, 0x173d, 0x3a6e, 0x71bf, 0x25f9, 0x0a5d,
537 0x7c57, 0x0fbe, 0x46ce, 0x4939, 0x6b17, 0x37bb, 0x3e91, 0x76db,
550 0x3346, 0x367f, 0x1f18, 0x769a, 0x4f64, 0x068c, 0x2ef1, 0x6b64,
551 0x28a9, 0x15d7, 0x30f8, 0x3659, 0x53db, 0x7c5f, 0x71d4, 0x4409,
552 0x26eb, 0x03cc, 0x655d, 0x47d4, 0x4daa, 0x0877, 0x712d, 0x3617,
553 0x3264, 0x49aa, 0x7f9e, 0x588e, 0x4fbc, 0x7176, 0x7f91, 0x6c6d,
554 0x4b95, 0x5fb7, 0x3844, 0x4037, 0x0184, 0x081b, 0x0ee8, 0x5b91,
555 0x293d, 0x1f71, 0x0e6f, 0x402b, 0x5122, 0x1e52, 0x22be, 0x3d2d,
556 0x75bc, 0x7c60, 0x6291, 0x1a2f, 0x61d4, 0x74aa, 0x4140, 0x29ab,
557 0x472d, 0x2852, 0x017e, 0x15e8, 0x5ec2, 0x17cf, 0x7d0f, 0x06b8,
558 0x117a, 0x6b94, 0x789b, 0x3126, 0x6ac5, 0x5be7, 0x150f, 0x51f8,
559 0x7889, 0x0aa5, 0x663d, 0x77e8, 0x0b87, 0x3dcb, 0x360d, 0x218b,
560 0x512f, 0x7dc9, 0x6a4d, 0x630a, 0x3547, 0x1dd2, 0x5aea, 0x69a5,
561 0x7bfa, 0x5e4f, 0x1519, 0x6430, 0x3a0e, 0x5eb3, 0x5425, 0x0c7a,
562 0x5540, 0x3670, 0x63c1, 0x31e9, 0x5a39, 0x2de7, 0x5979, 0x2891,
563 0x1562, 0x014b, 0x5b05, 0x2756, 0x5a34, 0x13aa, 0x6cb5, 0x2c36,
564 0x5e72, 0x1306, 0x0861, 0x15ef, 0x1ee8, 0x5a37, 0x7ac4, 0x45dd,
565 0x44c4, 0x7266, 0x2f41, 0x3ccc, 0x045e, 0x7d40, 0x7c66, 0x0fa0,
569 0x2cf5, 0x35f1, 0x63a4, 0x5274, 0x2bd2, 0x778b, 0x7285, 0x32b6,
570 0x6a5c, 0x70d6, 0x757d, 0x6769, 0x5375, 0x1e81, 0x0cf3, 0x3982,
571 0x6787, 0x042a, 0x6c49, 0x1925, 0x56a8, 0x40a9, 0x063e, 0x7bd9,
572 0x4dbf, 0x55ec, 0x672e, 0x7334, 0x5185, 0x4d00, 0x232a, 0x7e07,
573 0x445d, 0x6b92, 0x528f, 0x4255, 0x53ba, 0x7d82, 0x2a2e, 0x3a4e,
574 0x75eb, 0x450c, 0x6844, 0x1b5d, 0x581a, 0x4cc6, 0x0379, 0x37b2,
575 0x419f, 0x0e92, 0x6b27, 0x5624, 0x01e3, 0x07c1, 0x44a5, 0x130c,
576 0x13e8, 0x5910, 0x0876, 0x60c5, 0x54e3, 0x5b7f, 0x2269, 0x509f,
577 0x7665, 0x36fd, 0x3e9a, 0x0579, 0x6295, 0x14ef, 0x0a81, 0x1bcc,
578 0x4b16, 0x64db, 0x0514, 0x4f07, 0x0591, 0x3576, 0x6853, 0x0d9e,
579 0x259f, 0x38b7, 0x64fb, 0x3094, 0x4693, 0x6ddd, 0x29bb, 0x0bc8,
580 0x3f47, 0x490e, 0x0c0e, 0x7933, 0x3c9e, 0x5840, 0x398d, 0x3e68,
581 0x4af1, 0x71f5, 0x57cf, 0x1121, 0x64eb, 0x3579, 0x15ac, 0x584d,
582 0x5f2a, 0x47e2, 0x6528, 0x6eac, 0x196e, 0x6b96, 0x0450, 0x0179,
583 0x609c, 0x06e1, 0x4626, 0x42c7, 0x273e, 0x486f, 0x0705, 0x1601,
584 0x145b, 0x407e, 0x062b, 0x57a5, 0x53f9, 0x5659, 0x4410, 0x3ccd,
589 state &= 0x7fff; in sunxi_nfc_randomizer_step()
597 (((state ^ (state >> 1)) & 1) << 14)) & 0x7fff; in sunxi_nfc_randomizer_step()
664 bbm[0] ^= state; in sunxi_nfc_randomize_bbm()
699 writel(0, nfc->regs + NFC_REG_ECC_CTL); in sunxi_nfc_hw_ecc_disable()
704 buf[0] = user_data; in sunxi_nfc_user_data_to_buf()
712 return buf[0] | (buf[1] << 8) | (buf[2] << 16) | (buf[3] << 24); in sunxi_nfc_buf_to_user_data()
751 if (ret < 0) { in sunxi_nfc_hw_ecc_update_stats()
774 if (unlikely(!(readl(nfc->regs + NFC_REG_PAT_ID) & 0x1))) { in sunxi_nfc_hw_ecc_correct()
775 pattern = 0x0; in sunxi_nfc_hw_ecc_correct()
777 pattern = 0xff; in sunxi_nfc_hw_ecc_correct()
787 return 0; in sunxi_nfc_hw_ecc_correct()
804 int raw_mode = 0; in sunxi_nfc_hw_ecc_read_chunk()
809 nand_change_read_column_op(nand, data_off, NULL, 0, false); in sunxi_nfc_hw_ecc_read_chunk()
814 nand_change_read_column_op(nand, oob_off, NULL, 0, false); in sunxi_nfc_hw_ecc_read_chunk()
824 ret = sunxi_nfc_wait_events(nfc, NFC_CMD_INT_FLAG, false, 0); in sunxi_nfc_hw_ecc_read_chunk()
831 ret = sunxi_nfc_hw_ecc_correct(nand, data, oob_required ? oob : NULL, 0, in sunxi_nfc_hw_ecc_read_chunk()
837 if (ret < 0) { in sunxi_nfc_hw_ecc_read_chunk()
854 NULL, 0, ecc->strength); in sunxi_nfc_hw_ecc_read_chunk()
855 if (ret >= 0) in sunxi_nfc_hw_ecc_read_chunk()
861 nand_change_read_column_op(nand, oob_off, NULL, 0, in sunxi_nfc_hw_ecc_read_chunk()
866 sunxi_nfc_hw_ecc_get_prot_oob_bytes(nand, oob, 0, in sunxi_nfc_hw_ecc_read_chunk()
885 if (len <= 0) in sunxi_nfc_hw_ecc_read_extra_oob()
889 nand_change_read_column_op(nand, mtd->writesize, NULL, 0, in sunxi_nfc_hw_ecc_read_extra_oob()
910 unsigned int max_bitflips = 0; in sunxi_nfc_hw_ecc_read_chunks_dma()
911 int ret, i, raw_mode = 0; in sunxi_nfc_hw_ecc_read_chunks_dma()
941 ret = sunxi_nfc_wait_events(nfc, wait, false, 0); in sunxi_nfc_hw_ecc_read_chunks_dma()
955 for (i = 0; i < nchunks; i++) { in sunxi_nfc_hw_ecc_read_chunks_dma()
967 if (ret < 0) in sunxi_nfc_hw_ecc_read_chunks_dma()
987 for (i = 0; i < nchunks; i++) { in sunxi_nfc_hw_ecc_read_chunks_dma()
1013 NULL, 0, in sunxi_nfc_hw_ecc_read_chunks_dma()
1015 if (ret >= 0) in sunxi_nfc_hw_ecc_read_chunks_dma()
1041 nand_change_write_column_op(nand, data_off, NULL, 0, false); in sunxi_nfc_hw_ecc_write_chunk()
1046 nand_change_write_column_op(nand, oob_off, NULL, 0, false); in sunxi_nfc_hw_ecc_write_chunk()
1053 sunxi_nfc_hw_ecc_set_prot_oob_bytes(nand, oob, 0, bbm, page); in sunxi_nfc_hw_ecc_write_chunk()
1059 ret = sunxi_nfc_wait_events(nfc, NFC_CMD_INT_FLAG, false, 0); in sunxi_nfc_hw_ecc_write_chunk()
1066 return 0; in sunxi_nfc_hw_ecc_write_chunk()
1078 if (len <= 0) in sunxi_nfc_hw_ecc_write_extra_oob()
1083 NULL, 0, false); in sunxi_nfc_hw_ecc_write_extra_oob()
1096 unsigned int max_bitflips = 0; in sunxi_nfc_hw_ecc_read_page()
1097 int ret, i, cur_off = 0; in sunxi_nfc_hw_ecc_read_page()
1102 nand_read_page_op(nand, page, 0, NULL, 0); in sunxi_nfc_hw_ecc_read_page()
1106 for (i = 0; i < ecc->steps; i++) { in sunxi_nfc_hw_ecc_read_page()
1116 if (ret < 0) in sunxi_nfc_hw_ecc_read_page()
1138 nand_read_page_op(nand, page, 0, NULL, 0); in sunxi_nfc_hw_ecc_read_page_dma()
1142 if (ret >= 0) in sunxi_nfc_hw_ecc_read_page_dma()
1155 int ret, i, cur_off = 0; in sunxi_nfc_hw_ecc_read_subpage()
1156 unsigned int max_bitflips = 0; in sunxi_nfc_hw_ecc_read_subpage()
1160 nand_read_page_op(nand, page, 0, NULL, 0); in sunxi_nfc_hw_ecc_read_subpage()
1176 if (ret < 0) in sunxi_nfc_hw_ecc_read_subpage()
1194 nand_read_page_op(nand, page, 0, NULL, 0); in sunxi_nfc_hw_ecc_read_subpage_dma()
1197 if (ret >= 0) in sunxi_nfc_hw_ecc_read_subpage_dma()
1211 int ret, i, cur_off = 0; in sunxi_nfc_hw_ecc_write_page()
1215 nand_prog_page_begin_op(nand, page, 0, NULL, 0); in sunxi_nfc_hw_ecc_write_page()
1219 for (i = 0; i < ecc->steps; i++) { in sunxi_nfc_hw_ecc_write_page()
1248 int ret, i, cur_off = 0; in sunxi_nfc_hw_ecc_write_subpage()
1252 nand_prog_page_begin_op(nand, page, 0, NULL, 0); in sunxi_nfc_hw_ecc_write_subpage()
1297 for (i = 0; i < ecc->steps; i++) { in sunxi_nfc_hw_ecc_write_page_dma()
1303 nand_prog_page_begin_op(nand, page, 0, NULL, 0); in sunxi_nfc_hw_ecc_write_page_dma()
1323 ret = sunxi_nfc_wait_events(nfc, wait, false, 0); in sunxi_nfc_hw_ecc_write_page_dma()
1359 memset(buf, 0xff, mtd->writesize); in sunxi_nfc_hw_ecc_write_oob()
1377 for (i = 0; i < lut_size; i++) { in _sunxi_nand_lookup_timing()
1395 u32 min_clk_period = 0; in sunxi_nfc_setup_interface()
1485 * 2/ Use EDO mode (only works if timings->tRLOH > 0) in sunxi_nfc_setup_interface()
1492 if (tWB < 0) { in sunxi_nfc_setup_interface()
1511 if (tRHW < 0) { in sunxi_nfc_setup_interface()
1517 return 0; in sunxi_nfc_setup_interface()
1521 * but Allwinner seems to set this to 0x7. Mimic them for now. in sunxi_nfc_setup_interface()
1523 tCAD = 0x7; in sunxi_nfc_setup_interface()
1539 if (real_clk_rate <= 0) { in sunxi_nfc_setup_interface()
1545 sunxi_nand->timing_ctl = 0; in sunxi_nfc_setup_interface()
1556 return 0; in sunxi_nfc_setup_interface()
1571 return 0; in sunxi_nand_ooblayout_ecc()
1592 return 0; in sunxi_nand_ooblayout_free()
1609 return 0; in sunxi_nand_ooblayout_free()
1647 for (i = 0; i < ARRAY_SIZE(strengths); i++) { in sunxi_nand_hw_ecc_ctrl_init()
1653 ecc->strength = 0; in sunxi_nand_hw_ecc_ctrl_init()
1668 for (i = 0; i < ARRAY_SIZE(strengths); i++) { in sunxi_nand_hw_ecc_ctrl_init()
1721 return 0; in sunxi_nand_hw_ecc_ctrl_init()
1761 return 0; in sunxi_nand_attach_chip()
1768 u32 cmd = 0, extcmd = 0, cnt = 0, addrs[2] = { }; in sunxi_nfc_exec_subop()
1773 for (i = 0; i < subop->ninstrs; i++) { in sunxi_nfc_exec_subop()
1793 for (j = 0; j < 8 && j + start < remaining; j++) { in sunxi_nfc_exec_subop()
1833 writel(addrs[0], nfc->regs + NFC_REG_ADDR_LOW); in sunxi_nfc_exec_subop()
1850 0); in sunxi_nfc_exec_subop()
1857 return 0; in sunxi_nfc_exec_subop()
1864 subop->instrs[0].ctx.waitrdy.timeout_ms); in sunxi_nfc_soft_waitrdy()
1906 if (sunxi_nand->sels[op->cs].rb >= 0) in sunxi_nfc_exec_op()
1965 for (i = 0; i < nsels; i++) { in sunxi_nand_chip_init()
2013 ret = mtd_device_register(mtd, NULL, 0); in sunxi_nand_chip_init()
2022 return 0; in sunxi_nand_chip_init()
2038 return 0; in sunxi_nand_chips_init()
2046 return 0; in sunxi_nfc_dma_init()
2068 return 0; in sunxi_nfc_dma_init()
2087 nfc->regs = devm_platform_get_and_ioremap_resource(pdev, 0, &r); in sunxi_nfc_probe()
2091 irq = platform_get_irq(pdev, 0); in sunxi_nfc_probe()
2092 if (irq < 0) in sunxi_nfc_probe()
2127 writel(0, nfc->regs + NFC_REG_INT); in sunxi_nfc_probe()
2129 0, "sunxi-nand", nfc); in sunxi_nfc_probe()
2146 return 0; in sunxi_nfc_probe()