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;
301 writel(0, nfc->regs + NFC_REG_INT);
337 writel(0, nfc->regs + NFC_REG_ECC_CTL);
395 return 0;
431 if (sel->rb >= 0)
452 int offs = 0;
472 ret = sunxi_nfc_wait_events(nfc, NFC_CMD_INT_FLAG, poll, 0);
490 int offs = 0;
512 ret = sunxi_nfc_wait_events(nfc, NFC_CMD_INT_FLAG, poll, 0);
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;
597 (((state ^ (state >> 1)) & 1) << 14)) & 0x7fff;
664 bbm[0] ^= state;
699 writel(0, nfc->regs + NFC_REG_ECC_CTL);
704 buf[0] = user_data;
712 return buf[0] | (buf[1] << 8) | (buf[2] << 16) | (buf[3] << 24);
751 if (ret < 0) {
774 if (unlikely(!(readl(nfc->regs + NFC_REG_PAT_ID) & 0x1))) {
775 pattern = 0x0;
777 pattern = 0xff;
787 return 0;
804 int raw_mode = 0;
809 nand_change_read_column_op(nand, data_off, NULL, 0, false);
814 nand_change_read_column_op(nand, oob_off, NULL, 0, false);
825 ret = sunxi_nfc_wait_events(nfc, NFC_CMD_INT_FLAG, false, 0);
832 ret = sunxi_nfc_hw_ecc_correct(nand, data, oob_required ? oob : NULL, 0,
838 if (ret < 0) {
855 NULL, 0, ecc->strength);
856 if (ret >= 0)
862 nand_change_read_column_op(nand, oob_off, NULL, 0,
867 sunxi_nfc_hw_ecc_get_prot_oob_bytes(nand, oob, 0,
886 if (len <= 0)
890 nand_change_read_column_op(nand, mtd->writesize, NULL, 0,
911 unsigned int max_bitflips = 0;
912 int ret, i, raw_mode = 0;
942 ret = sunxi_nfc_wait_events(nfc, wait, false, 0);
956 for (i = 0; i < nchunks; i++) {
968 if (ret < 0)
988 for (i = 0; i < nchunks; i++) {
1014 NULL, 0,
1016 if (ret >= 0)
1042 nand_change_write_column_op(nand, data_off, NULL, 0, false);
1047 nand_change_write_column_op(nand, oob_off, NULL, 0, false);
1055 sunxi_nfc_hw_ecc_set_prot_oob_bytes(nand, oob, 0, bbm, page);
1061 ret = sunxi_nfc_wait_events(nfc, NFC_CMD_INT_FLAG, false, 0);
1068 return 0;
1080 if (len <= 0)
1085 NULL, 0, false);
1098 unsigned int max_bitflips = 0;
1099 int ret, i, cur_off = 0;
1104 nand_read_page_op(nand, page, 0, NULL, 0);
1108 for (i = 0; i < ecc->steps; i++) {
1118 if (ret < 0)
1140 nand_read_page_op(nand, page, 0, NULL, 0);
1144 if (ret >= 0)
1157 int ret, i, cur_off = 0;
1158 unsigned int max_bitflips = 0;
1162 nand_read_page_op(nand, page, 0, NULL, 0);
1178 if (ret < 0)
1196 nand_read_page_op(nand, page, 0, NULL, 0);
1199 if (ret >= 0)
1213 int ret, i, cur_off = 0;
1217 nand_prog_page_begin_op(nand, page, 0, NULL, 0);
1221 for (i = 0; i < ecc->steps; i++) {
1250 int ret, i, cur_off = 0;
1254 nand_prog_page_begin_op(nand, page, 0, NULL, 0);
1299 for (i = 0; i < ecc->steps; i++) {
1305 nand_prog_page_begin_op(nand, page, 0, NULL, 0);
1325 ret = sunxi_nfc_wait_events(nfc, wait, false, 0);
1361 memset(buf, 0xff, mtd->writesize);
1379 for (i = 0; i < lut_size; i++) {
1397 u32 min_clk_period = 0;
1487 * 2/ Use EDO mode (only works if timings->tRLOH > 0)
1494 if (tWB < 0) {
1513 if (tRHW < 0) {
1519 return 0;
1523 * but Allwinner seems to set this to 0x7. Mimic them for now.
1525 tCAD = 0x7;
1541 if (real_clk_rate <= 0) {
1547 sunxi_nand->timing_ctl = 0;
1558 return 0;
1573 return 0;
1594 return 0;
1611 return 0;
1649 for (i = 0; i < ARRAY_SIZE(strengths); i++) {
1655 ecc->strength = 0;
1670 for (i = 0; i < ARRAY_SIZE(strengths); i++) {
1723 return 0;
1763 return 0;
1770 u32 cmd = 0, extcmd = 0, cnt = 0, addrs[2] = { };
1775 for (i = 0; i < subop->ninstrs; i++) {
1795 for (j = 0; j < 8 && j + start < remaining; j++) {
1835 writel(addrs[0], nfc->regs + NFC_REG_ADDR_LOW);
1852 0);
1859 return 0;
1866 subop->instrs[0].ctx.waitrdy.timeout_ms);
1908 if (sunxi_nand->sels[op->cs].rb >= 0)
1967 for (i = 0; i < nsels; i++) {
2015 ret = mtd_device_register(mtd, NULL, 0);
2024 return 0;
2040 return 0;
2048 return 0;
2070 return 0;
2089 nfc->regs = devm_platform_get_and_ioremap_resource(pdev, 0, &r);
2093 irq = platform_get_irq(pdev, 0);
2094 if (irq < 0)
2129 writel(0, nfc->regs + NFC_REG_INT);
2131 0, "sunxi-nand", nfc);
2148 return 0;