Lines Matching +full:0 +full:x4140
33 #define NFC_REG_CTL 0x0000
34 #define NFC_REG_ST 0x0004
35 #define NFC_REG_INT 0x0008
36 #define NFC_REG_TIMING_CTL 0x000C
37 #define NFC_REG_TIMING_CFG 0x0010
38 #define NFC_REG_ADDR_LOW 0x0014
39 #define NFC_REG_ADDR_HIGH 0x0018
40 #define NFC_REG_SECTOR_NUM 0x001C
41 #define NFC_REG_CNT 0x0020
42 #define NFC_REG_CMD 0x0024
43 #define NFC_REG_RCMD_SET 0x0028
44 #define NFC_REG_WCMD_SET 0x002C
45 #define NFC_REG_A10_IO_DATA 0x0030
46 #define NFC_REG_A23_IO_DATA 0x0300
47 #define NFC_REG_ECC_CTL 0x0034
48 #define NFC_REG_ECC_ST 0x0038
49 #define NFC_REG_DEBUG 0x003C
50 #define NFC_REG_ECC_ERR_CNT(x) ((0x0040 + (x)) & ~0x3)
51 #define NFC_REG_USER_DATA(x) (0x0050 + ((x) * 4))
52 #define NFC_REG_SPARE_AREA 0x00A0
53 #define NFC_REG_PAT_ID 0x00A4
54 #define NFC_REG_MDMA_ADDR 0x00C0
55 #define NFC_REG_MDMA_CNT 0x00C4
56 #define NFC_RAM0_BASE 0x0400
57 #define NFC_RAM1_BASE 0x0800
60 #define NFC_EN BIT(0)
63 #define NFC_BUS_WIDTH_8 (0 << 2)
71 #define NFC_PAGE_SHIFT(x) (((x) < 10 ? 0 : (x) - 10) << 8)
78 #define NFC_RB_B2R BIT(0)
87 #define NFC_B2R_INT_ENABLE BIT(0)
99 (((tWB) & 0x3) | (((tADL) & 0x3) << 2) | \
100 (((tWHR) & 0x3) << 4) | (((tRHW) & 0x3) << 6) | \
101 (((tCAD) & 0x7) << 8))
104 #define NFC_CMD_LOW_BYTE_MSK GENMASK(7, 0)
121 #define NFC_NORMAL_OP (0 << 30)
126 #define NFC_READ_CMD_MSK GENMASK(7, 0)
131 #define NFC_PROGRAM_CMD_MSK GENMASK(7, 0)
137 #define NFC_ECC_EN BIT(0)
151 #define NFC_ECC_ERR_MSK GENMASK(15, 0)
153 #define NFC_ECC_ERR_CNT(b, x) (((x) >> (((b) % 4) * 8)) & 0xff)
300 ret = 0; in sunxi_nfc_wait_events()
302 writel(0, nfc->regs + NFC_REG_INT); in sunxi_nfc_wait_events()
338 writel(0, nfc->regs + NFC_REG_ECC_CTL); in sunxi_nfc_rst()
396 return 0; in sunxi_nfc_dma_op_prepare()
424 if (cs > 0 && cs >= sunxi_nand->nsels) in sunxi_nfc_select_chip()
432 if (sel->rb >= 0) in sunxi_nfc_select_chip()
453 int offs = 0; in sunxi_nfc_read_buf()
473 ret = sunxi_nfc_wait_events(nfc, NFC_CMD_INT_FLAG, poll, 0); in sunxi_nfc_read_buf()
491 int offs = 0; in sunxi_nfc_write_buf()
513 ret = sunxi_nfc_wait_events(nfc, NFC_CMD_INT_FLAG, poll, 0); in sunxi_nfc_write_buf()
523 0x2b75, 0x0bd0, 0x5ca3, 0x62d1, 0x1c93, 0x07e9, 0x2162, 0x3a72,
524 0x0d67, 0x67f9, 0x1be7, 0x077d, 0x032f, 0x0dac, 0x2716, 0x2436,
525 0x7922, 0x1510, 0x3860, 0x5287, 0x480f, 0x4252, 0x1789, 0x5a2d,
526 0x2a49, 0x5e10, 0x437f, 0x4b4e, 0x2f45, 0x216e, 0x5cb7, 0x7130,
527 0x2a3f, 0x60e4, 0x4dc9, 0x0ef0, 0x0f52, 0x1bb9, 0x6211, 0x7a56,
528 0x226d, 0x4ea7, 0x6f36, 0x3692, 0x38bf, 0x0c62, 0x05eb, 0x4c55,
529 0x60f4, 0x728c, 0x3b6f, 0x2037, 0x7f69, 0x0936, 0x651a, 0x4ceb,
530 0x6218, 0x79f3, 0x383f, 0x18d9, 0x4f05, 0x5c82, 0x2912, 0x6f17,
531 0x6856, 0x5938, 0x1007, 0x61ab, 0x3e7f, 0x57c2, 0x542f, 0x4f62,
532 0x7454, 0x2eac, 0x7739, 0x42d4, 0x2f90, 0x435a, 0x2e52, 0x2064,
533 0x637c, 0x66ad, 0x2c90, 0x0bad, 0x759c, 0x0029, 0x0986, 0x7126,
534 0x1ca7, 0x1605, 0x386a, 0x27f5, 0x1380, 0x6d75, 0x24c3, 0x0f8e,
535 0x2b7a, 0x1418, 0x1fd1, 0x7dc1, 0x2d8e, 0x43af, 0x2267, 0x7da3,
536 0x4e3d, 0x1338, 0x50db, 0x454d, 0x764d, 0x40a3, 0x42e6, 0x262b,
537 0x2d2e, 0x1aea, 0x2e17, 0x173d, 0x3a6e, 0x71bf, 0x25f9, 0x0a5d,
538 0x7c57, 0x0fbe, 0x46ce, 0x4939, 0x6b17, 0x37bb, 0x3e91, 0x76db,
551 0x3346, 0x367f, 0x1f18, 0x769a, 0x4f64, 0x068c, 0x2ef1, 0x6b64,
552 0x28a9, 0x15d7, 0x30f8, 0x3659, 0x53db, 0x7c5f, 0x71d4, 0x4409,
553 0x26eb, 0x03cc, 0x655d, 0x47d4, 0x4daa, 0x0877, 0x712d, 0x3617,
554 0x3264, 0x49aa, 0x7f9e, 0x588e, 0x4fbc, 0x7176, 0x7f91, 0x6c6d,
555 0x4b95, 0x5fb7, 0x3844, 0x4037, 0x0184, 0x081b, 0x0ee8, 0x5b91,
556 0x293d, 0x1f71, 0x0e6f, 0x402b, 0x5122, 0x1e52, 0x22be, 0x3d2d,
557 0x75bc, 0x7c60, 0x6291, 0x1a2f, 0x61d4, 0x74aa, 0x4140, 0x29ab,
558 0x472d, 0x2852, 0x017e, 0x15e8, 0x5ec2, 0x17cf, 0x7d0f, 0x06b8,
559 0x117a, 0x6b94, 0x789b, 0x3126, 0x6ac5, 0x5be7, 0x150f, 0x51f8,
560 0x7889, 0x0aa5, 0x663d, 0x77e8, 0x0b87, 0x3dcb, 0x360d, 0x218b,
561 0x512f, 0x7dc9, 0x6a4d, 0x630a, 0x3547, 0x1dd2, 0x5aea, 0x69a5,
562 0x7bfa, 0x5e4f, 0x1519, 0x6430, 0x3a0e, 0x5eb3, 0x5425, 0x0c7a,
563 0x5540, 0x3670, 0x63c1, 0x31e9, 0x5a39, 0x2de7, 0x5979, 0x2891,
564 0x1562, 0x014b, 0x5b05, 0x2756, 0x5a34, 0x13aa, 0x6cb5, 0x2c36,
565 0x5e72, 0x1306, 0x0861, 0x15ef, 0x1ee8, 0x5a37, 0x7ac4, 0x45dd,
566 0x44c4, 0x7266, 0x2f41, 0x3ccc, 0x045e, 0x7d40, 0x7c66, 0x0fa0,
570 0x2cf5, 0x35f1, 0x63a4, 0x5274, 0x2bd2, 0x778b, 0x7285, 0x32b6,
571 0x6a5c, 0x70d6, 0x757d, 0x6769, 0x5375, 0x1e81, 0x0cf3, 0x3982,
572 0x6787, 0x042a, 0x6c49, 0x1925, 0x56a8, 0x40a9, 0x063e, 0x7bd9,
573 0x4dbf, 0x55ec, 0x672e, 0x7334, 0x5185, 0x4d00, 0x232a, 0x7e07,
574 0x445d, 0x6b92, 0x528f, 0x4255, 0x53ba, 0x7d82, 0x2a2e, 0x3a4e,
575 0x75eb, 0x450c, 0x6844, 0x1b5d, 0x581a, 0x4cc6, 0x0379, 0x37b2,
576 0x419f, 0x0e92, 0x6b27, 0x5624, 0x01e3, 0x07c1, 0x44a5, 0x130c,
577 0x13e8, 0x5910, 0x0876, 0x60c5, 0x54e3, 0x5b7f, 0x2269, 0x509f,
578 0x7665, 0x36fd, 0x3e9a, 0x0579, 0x6295, 0x14ef, 0x0a81, 0x1bcc,
579 0x4b16, 0x64db, 0x0514, 0x4f07, 0x0591, 0x3576, 0x6853, 0x0d9e,
580 0x259f, 0x38b7, 0x64fb, 0x3094, 0x4693, 0x6ddd, 0x29bb, 0x0bc8,
581 0x3f47, 0x490e, 0x0c0e, 0x7933, 0x3c9e, 0x5840, 0x398d, 0x3e68,
582 0x4af1, 0x71f5, 0x57cf, 0x1121, 0x64eb, 0x3579, 0x15ac, 0x584d,
583 0x5f2a, 0x47e2, 0x6528, 0x6eac, 0x196e, 0x6b96, 0x0450, 0x0179,
584 0x609c, 0x06e1, 0x4626, 0x42c7, 0x273e, 0x486f, 0x0705, 0x1601,
585 0x145b, 0x407e, 0x062b, 0x57a5, 0x53f9, 0x5659, 0x4410, 0x3ccd,
590 state &= 0x7fff; in sunxi_nfc_randomizer_step()
598 (((state ^ (state >> 1)) & 1) << 14)) & 0x7fff; in sunxi_nfc_randomizer_step()
665 bbm[0] ^= state; in sunxi_nfc_randomize_bbm()
716 buf[0] = user_data; in sunxi_nfc_user_data_to_buf()
724 return buf[0] | (buf[1] << 8) | (buf[2] << 16) | (buf[3] << 24); in sunxi_nfc_buf_to_user_data()
763 if (ret < 0) { in sunxi_nfc_hw_ecc_update_stats()
786 if (unlikely(!(readl(nfc->regs + NFC_REG_PAT_ID) & 0x1))) { in sunxi_nfc_hw_ecc_correct()
787 pattern = 0x0; in sunxi_nfc_hw_ecc_correct()
789 pattern = 0xff; in sunxi_nfc_hw_ecc_correct()
799 return 0; in sunxi_nfc_hw_ecc_correct()
816 int raw_mode = 0; in sunxi_nfc_hw_ecc_read_chunk()
821 nand_change_read_column_op(nand, data_off, NULL, 0, false); in sunxi_nfc_hw_ecc_read_chunk()
826 nand_change_read_column_op(nand, oob_off, NULL, 0, false); in sunxi_nfc_hw_ecc_read_chunk()
836 ret = sunxi_nfc_wait_events(nfc, NFC_CMD_INT_FLAG, false, 0); in sunxi_nfc_hw_ecc_read_chunk()
843 ret = sunxi_nfc_hw_ecc_correct(nand, data, oob_required ? oob : NULL, 0, in sunxi_nfc_hw_ecc_read_chunk()
849 if (ret < 0) { in sunxi_nfc_hw_ecc_read_chunk()
866 NULL, 0, ecc->strength); in sunxi_nfc_hw_ecc_read_chunk()
867 if (ret >= 0) in sunxi_nfc_hw_ecc_read_chunk()
873 nand_change_read_column_op(nand, oob_off, NULL, 0, in sunxi_nfc_hw_ecc_read_chunk()
878 sunxi_nfc_hw_ecc_get_prot_oob_bytes(nand, oob, 0, in sunxi_nfc_hw_ecc_read_chunk()
897 if (len <= 0) in sunxi_nfc_hw_ecc_read_extra_oob()
901 nand_change_read_column_op(nand, mtd->writesize, NULL, 0, in sunxi_nfc_hw_ecc_read_extra_oob()
922 unsigned int max_bitflips = 0; in sunxi_nfc_hw_ecc_read_chunks_dma()
923 int ret, i, raw_mode = 0; in sunxi_nfc_hw_ecc_read_chunks_dma()
953 ret = sunxi_nfc_wait_events(nfc, wait, false, 0); in sunxi_nfc_hw_ecc_read_chunks_dma()
967 for (i = 0; i < nchunks; i++) { in sunxi_nfc_hw_ecc_read_chunks_dma()
979 if (ret < 0) in sunxi_nfc_hw_ecc_read_chunks_dma()
999 for (i = 0; i < nchunks; i++) { in sunxi_nfc_hw_ecc_read_chunks_dma()
1025 NULL, 0, in sunxi_nfc_hw_ecc_read_chunks_dma()
1027 if (ret >= 0) in sunxi_nfc_hw_ecc_read_chunks_dma()
1053 nand_change_write_column_op(nand, data_off, NULL, 0, false); in sunxi_nfc_hw_ecc_write_chunk()
1058 nand_change_write_column_op(nand, oob_off, NULL, 0, false); in sunxi_nfc_hw_ecc_write_chunk()
1065 sunxi_nfc_hw_ecc_set_prot_oob_bytes(nand, oob, 0, bbm, page); in sunxi_nfc_hw_ecc_write_chunk()
1071 ret = sunxi_nfc_wait_events(nfc, NFC_CMD_INT_FLAG, false, 0); in sunxi_nfc_hw_ecc_write_chunk()
1078 return 0; in sunxi_nfc_hw_ecc_write_chunk()
1090 if (len <= 0) in sunxi_nfc_hw_ecc_write_extra_oob()
1095 NULL, 0, false); in sunxi_nfc_hw_ecc_write_extra_oob()
1108 unsigned int max_bitflips = 0; in sunxi_nfc_hw_ecc_read_page()
1109 int ret, i, cur_off = 0; in sunxi_nfc_hw_ecc_read_page()
1114 nand_read_page_op(nand, page, 0, NULL, 0); in sunxi_nfc_hw_ecc_read_page()
1118 for (i = 0; i < ecc->steps; i++) { in sunxi_nfc_hw_ecc_read_page()
1128 if (ret < 0) in sunxi_nfc_hw_ecc_read_page()
1150 nand_read_page_op(nand, page, 0, NULL, 0); in sunxi_nfc_hw_ecc_read_page_dma()
1154 if (ret >= 0) in sunxi_nfc_hw_ecc_read_page_dma()
1167 int ret, i, cur_off = 0; in sunxi_nfc_hw_ecc_read_subpage()
1168 unsigned int max_bitflips = 0; in sunxi_nfc_hw_ecc_read_subpage()
1172 nand_read_page_op(nand, page, 0, NULL, 0); in sunxi_nfc_hw_ecc_read_subpage()
1188 if (ret < 0) in sunxi_nfc_hw_ecc_read_subpage()
1206 nand_read_page_op(nand, page, 0, NULL, 0); in sunxi_nfc_hw_ecc_read_subpage_dma()
1209 if (ret >= 0) in sunxi_nfc_hw_ecc_read_subpage_dma()
1223 int ret, i, cur_off = 0; in sunxi_nfc_hw_ecc_write_page()
1227 nand_prog_page_begin_op(nand, page, 0, NULL, 0); in sunxi_nfc_hw_ecc_write_page()
1231 for (i = 0; i < ecc->steps; i++) { in sunxi_nfc_hw_ecc_write_page()
1260 int ret, i, cur_off = 0; in sunxi_nfc_hw_ecc_write_subpage()
1264 nand_prog_page_begin_op(nand, page, 0, NULL, 0); in sunxi_nfc_hw_ecc_write_subpage()
1309 for (i = 0; i < ecc->steps; i++) { in sunxi_nfc_hw_ecc_write_page_dma()
1315 nand_prog_page_begin_op(nand, page, 0, NULL, 0); in sunxi_nfc_hw_ecc_write_page_dma()
1335 ret = sunxi_nfc_wait_events(nfc, wait, false, 0); in sunxi_nfc_hw_ecc_write_page_dma()
1371 memset(buf, 0xff, mtd->writesize); in sunxi_nfc_hw_ecc_write_oob()
1389 for (i = 0; i < lut_size; i++) { in _sunxi_nand_lookup_timing()
1407 u32 min_clk_period = 0; in sunxi_nfc_setup_interface()
1497 * 2/ Use EDO mode (only works if timings->tRLOH > 0) in sunxi_nfc_setup_interface()
1504 if (tWB < 0) { in sunxi_nfc_setup_interface()
1523 if (tRHW < 0) { in sunxi_nfc_setup_interface()
1529 return 0; in sunxi_nfc_setup_interface()
1533 * but Allwinner seems to set this to 0x7. Mimic them for now. in sunxi_nfc_setup_interface()
1535 tCAD = 0x7; in sunxi_nfc_setup_interface()
1551 if (real_clk_rate <= 0) { in sunxi_nfc_setup_interface()
1557 sunxi_nand->timing_ctl = 0; in sunxi_nfc_setup_interface()
1568 return 0; in sunxi_nfc_setup_interface()
1583 return 0; in sunxi_nand_ooblayout_ecc()
1604 return 0; in sunxi_nand_ooblayout_free()
1614 return 0; in sunxi_nand_ooblayout_free()
1658 for (i = 0; i < ARRAY_SIZE(strengths); i++) { in sunxi_nand_hw_ecc_ctrl_init()
1664 ecc->strength = 0; in sunxi_nand_hw_ecc_ctrl_init()
1683 for (i = 0; i < ARRAY_SIZE(strengths); i++) { in sunxi_nand_hw_ecc_ctrl_init()
1735 return 0; in sunxi_nand_hw_ecc_ctrl_init()
1794 return 0; in sunxi_nand_attach_chip()
1801 u32 cmd = 0, extcmd = 0, cnt = 0, addrs[2] = { }; in sunxi_nfc_exec_subop()
1806 for (i = 0; i < subop->ninstrs; i++) { in sunxi_nfc_exec_subop()
1826 for (j = 0; j < 8 && j + start < remaining; j++) { in sunxi_nfc_exec_subop()
1866 writel(addrs[0], nfc->regs + NFC_REG_ADDR_LOW); in sunxi_nfc_exec_subop()
1883 0); in sunxi_nfc_exec_subop()
1890 return 0; in sunxi_nfc_exec_subop()
1897 subop->instrs[0].ctx.waitrdy.timeout_ms); in sunxi_nfc_soft_waitrdy()
1939 if (sunxi_nand->sels[op->cs].rb >= 0) in sunxi_nfc_exec_op()
1980 for (i = 0; i < nsels; i++) { in sunxi_nand_chip_init()
2028 ret = mtd_device_register(mtd, NULL, 0); in sunxi_nand_chip_init()
2037 return 0; in sunxi_nand_chip_init()
2060 return 0; in sunxi_nand_chips_init()
2087 return 0; in sunxi_nfc_dma_init()
2109 return 0; in sunxi_nfc_dma_init()
2128 r = platform_get_resource(pdev, IORESOURCE_MEM, 0); in sunxi_nfc_probe()
2133 irq = platform_get_irq(pdev, 0); in sunxi_nfc_probe()
2134 if (irq < 0) in sunxi_nfc_probe()
2180 writel(0, nfc->regs + NFC_REG_INT); in sunxi_nfc_probe()
2182 0, "sunxi-nand", nfc); in sunxi_nfc_probe()
2199 return 0; in sunxi_nfc_probe()
2227 return 0; in sunxi_nfc_remove()