21 #include <linux/slab.h>
23 #include <linux/module.h>
28 #include <linux/device.h>
40 #include <mach/hardware.h>
42 #define DRIVER_NAME "mxc_nand"
44 #define nfc_is_v21() (cpu_is_mx25() || cpu_is_mx35())
45 #define nfc_is_v1() (cpu_is_mx31() || cpu_is_mx27() || cpu_is_mx21())
46 #define nfc_is_v3_2a() cpu_is_mx51()
47 #define nfc_is_v3_2b() cpu_is_mx53()
50 #define NFC_V1_V2_BUF_SIZE (host->regs + 0x00)
51 #define NFC_V1_V2_BUF_ADDR (host->regs + 0x04)
52 #define NFC_V1_V2_FLASH_ADDR (host->regs + 0x06)
53 #define NFC_V1_V2_FLASH_CMD (host->regs + 0x08)
54 #define NFC_V1_V2_CONFIG (host->regs + 0x0a)
55 #define NFC_V1_V2_ECC_STATUS_RESULT (host->regs + 0x0c)
56 #define NFC_V1_V2_RSLTMAIN_AREA (host->regs + 0x0e)
57 #define NFC_V1_V2_RSLTSPARE_AREA (host->regs + 0x10)
58 #define NFC_V1_V2_WRPROT (host->regs + 0x12)
59 #define NFC_V1_UNLOCKSTART_BLKADDR (host->regs + 0x14)
60 #define NFC_V1_UNLOCKEND_BLKADDR (host->regs + 0x16)
61 #define NFC_V21_UNLOCKSTART_BLKADDR0 (host->regs + 0x20)
62 #define NFC_V21_UNLOCKSTART_BLKADDR1 (host->regs + 0x24)
63 #define NFC_V21_UNLOCKSTART_BLKADDR2 (host->regs + 0x28)
64 #define NFC_V21_UNLOCKSTART_BLKADDR3 (host->regs + 0x2c)
65 #define NFC_V21_UNLOCKEND_BLKADDR0 (host->regs + 0x22)
66 #define NFC_V21_UNLOCKEND_BLKADDR1 (host->regs + 0x26)
67 #define NFC_V21_UNLOCKEND_BLKADDR2 (host->regs + 0x2a)
68 #define NFC_V21_UNLOCKEND_BLKADDR3 (host->regs + 0x2e)
69 #define NFC_V1_V2_NF_WRPRST (host->regs + 0x18)
70 #define NFC_V1_V2_CONFIG1 (host->regs + 0x1a)
71 #define NFC_V1_V2_CONFIG2 (host->regs + 0x1c)
73 #define NFC_V2_CONFIG1_ECC_MODE_4 (1 << 0)
74 #define NFC_V1_V2_CONFIG1_SP_EN (1 << 2)
75 #define NFC_V1_V2_CONFIG1_ECC_EN (1 << 3)
76 #define NFC_V1_V2_CONFIG1_INT_MSK (1 << 4)
77 #define NFC_V1_V2_CONFIG1_BIG (1 << 5)
78 #define NFC_V1_V2_CONFIG1_RST (1 << 6)
79 #define NFC_V1_V2_CONFIG1_CE (1 << 7)
80 #define NFC_V2_CONFIG1_ONE_CYCLE (1 << 8)
81 #define NFC_V2_CONFIG1_PPB(x) (((x) & 0x3) << 9)
82 #define NFC_V2_CONFIG1_FP_INT (1 << 11)
84 #define NFC_V1_V2_CONFIG2_INT (1 << 15)
90 #define NFC_CMD (1 << 0)
91 #define NFC_ADDR (1 << 1)
92 #define NFC_INPUT (1 << 2)
93 #define NFC_OUTPUT (1 << 3)
94 #define NFC_ID (1 << 4)
95 #define NFC_STATUS (1 << 5)
97 #define NFC_V3_FLASH_CMD (host->regs_axi + 0x00)
98 #define NFC_V3_FLASH_ADDR0 (host->regs_axi + 0x04)
100 #define NFC_V3_CONFIG1 (host->regs_axi + 0x34)
101 #define NFC_V3_CONFIG1_SP_EN (1 << 0)
102 #define NFC_V3_CONFIG1_RBA(x) (((x) & 0x7 ) << 4)
104 #define NFC_V3_ECC_STATUS_RESULT (host->regs_axi + 0x38)
106 #define NFC_V3_LAUNCH (host->regs_axi + 0x40)
108 #define NFC_V3_WRPROT (host->regs_ip + 0x0)
109 #define NFC_V3_WRPROT_LOCK_TIGHT (1 << 0)
110 #define NFC_V3_WRPROT_LOCK (1 << 1)
111 #define NFC_V3_WRPROT_UNLOCK (1 << 2)
112 #define NFC_V3_WRPROT_BLS_UNLOCK (2 << 6)
114 #define NFC_V3_WRPROT_UNLOCK_BLK_ADD0 (host->regs_ip + 0x04)
116 #define NFC_V3_CONFIG2 (host->regs_ip + 0x24)
117 #define NFC_V3_CONFIG2_PS_512 (0 << 0)
118 #define NFC_V3_CONFIG2_PS_2048 (1 << 0)
119 #define NFC_V3_CONFIG2_PS_4096 (2 << 0)
120 #define NFC_V3_CONFIG2_ONE_CYCLE (1 << 2)
121 #define NFC_V3_CONFIG2_ECC_EN (1 << 3)
122 #define NFC_V3_CONFIG2_2CMD_PHASES (1 << 4)
123 #define NFC_V3_CONFIG2_NUM_ADDR_PHASE0 (1 << 5)
124 #define NFC_V3_CONFIG2_ECC_MODE_8 (1 << 6)
125 #define NFC_V3_CONFIG2_PPB(x, shift) (((x) & 0x3) << shift)
126 #define NFC_V3_CONFIG2_NUM_ADDR_PHASE1(x) (((x) & 0x3) << 12)
127 #define NFC_V3_CONFIG2_INT_MSK (1 << 15)
128 #define NFC_V3_CONFIG2_ST_CMD(x) (((x) & 0xff) << 24)
129 #define NFC_V3_CONFIG2_SPAS(x) (((x) & 0xff) << 16)
131 #define NFC_V3_CONFIG3 (host->regs_ip + 0x28)
132 #define NFC_V3_CONFIG3_ADD_OP(x) (((x) & 0x3) << 0)
133 #define NFC_V3_CONFIG3_FW8 (1 << 3)
134 #define NFC_V3_CONFIG3_SBB(x) (((x) & 0x7) << 8)
135 #define NFC_V3_CONFIG3_NUM_OF_DEVICES(x) (((x) & 0x7) << 12)
136 #define NFC_V3_CONFIG3_RBB_MODE (1 << 15)
137 #define NFC_V3_CONFIG3_NO_SDMA (1 << 20)
139 #define NFC_V3_IPC (host->regs_ip + 0x2C)
140 #define NFC_V3_IPC_CREQ (1 << 0)
141 #define NFC_V3_IPC_INT (1 << 31)
143 #define NFC_V3_DELAY_LINE (host->regs_ip + 0x34)
211 .eccpos = {6, 7, 8, 9, 10},
212 .oobfree = {{0, 5}, {12, 4}, }
217 .eccpos = {6, 7, 8, 9, 10, 22, 23, 24, 25, 26,
218 38, 39, 40, 41, 42, 54, 55, 56, 57, 58},
219 .oobfree = {{2, 4}, {11, 10}, {27, 10}, {43, 10}, {59, 5}, }
226 7, 8, 9, 10, 11, 12, 13, 14, 15
229 {.offset = 0, .length = 5}
237 7, 8, 9, 10, 11, 12, 13, 14, 15,
238 23, 24, 25, 26, 27, 28, 29, 30, 31,
239 39, 40, 41, 42, 43, 44, 45, 46, 47,
240 55, 56, 57, 58, 59, 60, 61, 62, 63
243 {.offset = 2, .length = 4},
244 {.offset = 16, .length = 7},
245 {.offset = 32, .length = 7},
246 {.offset = 48, .length = 7}
254 7, 8, 9, 10, 11, 12, 13, 14, 15,
255 23, 24, 25, 26, 27, 28, 29, 30, 31,
256 39, 40, 41, 42, 43, 44, 45, 46, 47,
257 55, 56, 57, 58, 59, 60, 61, 62, 63,
258 71, 72, 73, 74, 75, 76, 77, 78, 79,
259 87, 88, 89, 90, 91, 92, 93, 94, 95,
260 103, 104, 105, 106, 107, 108, 109, 110, 111,
261 119, 120, 121, 122, 123, 124, 125, 126, 127,
264 {.offset = 2, .length = 4},
265 {.offset = 16, .length = 7},
266 {.offset = 32, .length = 7},
267 {.offset = 48, .length = 7},
268 {.offset = 64, .length = 7},
269 {.offset = 80, .length = 7},
270 {.offset = 96, .length = 7},
271 {.offset = 112, .length = 7},
275 static const char *part_probes[] = {
"RedBoot",
"cmdlinepart",
"ofpart",
NULL };
277 static void memcpy32_fromio(
void *trg,
const void __iomem *
src,
size_t size)
283 for (i = 0; i < (size >> 2); i++)
287 static void memcpy32_toio(
void __iomem *trg,
const void *src,
int size)
293 for (i = 0; i < (size >> 2); i++)
305 tmp &= ~NFC_V3_IPC_INT;
325 static void irq_control_v1_v2(
struct mxc_nand_host *host,
int activate)
339 static void irq_control_v3(
struct mxc_nand_host *host,
int activate)
353 static void irq_control(
struct mxc_nand_host *host,
int activate)
387 irq_control(host, 0);
397 static void wait_op_done(
struct mxc_nand_host *host,
int useirq)
399 int max_retries = 8000;
404 irq_control(host, 1);
408 while (max_retries-- > 0) {
415 pr_debug(
"%s: INT not set\n", __func__);
428 wait_op_done(host, useirq);
435 pr_debug(
"send_cmd(host, 0x%x, %d)\n", cmd, useirq);
441 int max_retries = 100;
444 while (max_retries-- > 0) {
451 pr_debug(
"%s: RESET failed\n", __func__);
454 wait_op_done(host, useirq);
466 wait_op_done(host, 0);
474 pr_debug(
"send_addr(host, 0x%x %d)\n", addr, islast);
480 wait_op_done(host, islast);
483 static void send_page_v3(
struct mtd_info *
mtd,
unsigned int ops)
496 wait_op_done(host,
false);
499 static void send_page_v2(
struct mtd_info *
mtd,
unsigned int ops)
510 wait_op_done(host,
true);
513 static void send_page_v1(
struct mtd_info *
mtd,
unsigned int ops)
524 for (i = 0; i <
bufs; i++) {
532 wait_op_done(host,
true);
541 wait_op_done(host,
true);
549 struct nand_chip *
this = &host->
nand;
557 wait_op_done(host,
true);
574 wait_op_done(host,
true);
594 store =
readl(main_buf);
597 wait_op_done(host,
true);
599 ret =
readw(main_buf);
607 static int mxc_nand_dev_ready(
struct mtd_info *mtd)
616 static void mxc_nand_enable_hwecc(
struct mtd_info *mtd,
int mode)
627 struct nand_chip *nand_chip = mtd->
priv;
635 uint16_t ecc_status = get_ecc_status_v1(host);
637 if (((ecc_status & 0x3) == 2) || ((ecc_status >> 2) == 2)) {
638 pr_debug(
"MXC_NAND: HWECC uncorrectable 2-bit ECC error\n");
645 static int mxc_nand_correct_data_v2_v3(
struct mtd_info *mtd,
u_char *dat,
648 struct nand_chip *nand_chip = mtd->
priv;
653 u8 ecc_bit_mask, err_limit;
655 ecc_bit_mask = (host->
eccsize == 4) ? 0x7 : 0xf;
656 err_limit = (host->
eccsize == 4) ? 0x4 : 0x8;
663 err = ecc_stat & ecc_bit_mask;
664 if (err > err_limit) {
671 }
while (--no_subpages);
674 pr_debug(
"%d Symbol Correctable RS-ECC Error\n", ret);
679 static int mxc_nand_calculate_ecc(
struct mtd_info *mtd,
const u_char *dat,
687 struct nand_chip *nand_chip = mtd->
priv;
703 struct nand_chip *nand_chip = mtd->
priv;
716 static void mxc_nand_write_buf(
struct mtd_info *mtd,
719 struct nand_chip *nand_chip = mtd->
priv;
737 struct nand_chip *nand_chip = mtd->
priv;
751 static void mxc_nand_select_chip_v1_v3(
struct mtd_info *mtd,
int chip)
753 struct nand_chip *nand_chip = mtd->
priv;
759 clk_disable_unprepare(host->
clk);
767 clk_prepare_enable(host->
clk);
772 static void mxc_nand_select_chip_v2(
struct mtd_info *mtd,
int chip)
774 struct nand_chip *nand_chip = mtd->
priv;
780 clk_disable_unprepare(host->
clk);
788 clk_prepare_enable(host->
clk);
799 static void copy_spare(
struct mtd_info *mtd,
bool bfrom)
801 struct nand_chip *
this = mtd->
priv;
809 j = (mtd->
oobsize / n >> 1) << 1;
812 for (i = 0; i < n - 1; i++)
813 memcpy32_fromio(d + i * j, s + i * t, j);
816 memcpy32_fromio(d + i * j, s + i * t, mtd->
oobsize - i * j);
818 for (i = 0; i < n - 1; i++)
819 memcpy32_toio(&s[i * t], &d[i * j], j);
822 memcpy32_toio(&s[i * t], &d[i * j], mtd->
oobsize - i * j);
826 static void mxc_do_addr_cycle(
struct mtd_info *mtd,
int column,
int page_addr)
828 struct nand_chip *nand_chip = mtd->
priv;
839 host->
devtype_data->send_addr(host, 0, page_addr == -1);
846 if (page_addr != -1) {
848 host->
devtype_data->send_addr(host, (page_addr & 0xff),
false);
851 if (mtd->
size >= 0x10000000) {
854 (page_addr >> 8) & 0xff,
857 (page_addr >> 16) & 0xff,
862 (page_addr >> 8) & 0xff,
true);
865 if (mtd->
size >= 0x4000000) {
868 (page_addr >> 8) & 0xff,
871 (page_addr >> 16) & 0xff,
876 (page_addr >> 8) & 0xff,
true);
886 static int get_eccsize(
struct mtd_info *mtd)
888 int oobbytes_per_512 = 0;
892 if (oobbytes_per_512 < 26)
898 static void preset_v1(
struct mtd_info *mtd)
900 struct nand_chip *nand_chip = mtd->
priv;
926 static void preset_v2(
struct mtd_info *mtd)
928 struct nand_chip *nand_chip = mtd->
priv;
943 host->
eccsize = get_eccsize(mtd);
972 static void preset_v3(
struct mtd_info *mtd)
974 struct nand_chip *chip = mtd->
priv;
988 writel(0x0 | (0xffff << 16),
1003 addr_phases = fls(chip->
pagemask) >> 3;
1020 host->
eccsize = get_eccsize(mtd);
1044 int column,
int page_addr)
1046 struct nand_chip *nand_chip = mtd->
priv;
1049 pr_debug(
"mxc_nand_command (cmd = 0x%x, col = 0x%x, page = 0x%x)\n",
1050 command, column, page_addr);
1067 mxc_do_addr_cycle(mtd, column, page_addr);
1080 mxc_do_addr_cycle(mtd, column, page_addr);
1090 copy_spare(mtd,
true);
1101 mxc_do_addr_cycle(mtd, column, page_addr);
1106 copy_spare(mtd,
false);
1109 mxc_do_addr_cycle(mtd, column, page_addr);
1114 mxc_do_addr_cycle(mtd, column, page_addr);
1122 mxc_do_addr_cycle(mtd, column, page_addr);
1132 static uint8_t bbt_pattern[] = {
'B',
'b',
't',
'0' };
1133 static uint8_t mirror_pattern[] = {
'1',
't',
'b',
'B' };
1142 .pattern = bbt_pattern,
1152 .pattern = mirror_pattern,
1157 .preset = preset_v1,
1158 .send_cmd = send_cmd_v1_v2,
1159 .send_addr = send_addr_v1_v2,
1160 .send_page = send_page_v1,
1161 .send_read_id = send_read_id_v1_v2,
1162 .get_dev_status = get_dev_status_v1_v2,
1163 .check_int = check_int_v1_v2,
1164 .irq_control = irq_control_v1_v2,
1165 .get_ecc_status = get_ecc_status_v1,
1166 .ecclayout_512 = &nandv1_hw_eccoob_smallpage,
1167 .ecclayout_2k = &nandv1_hw_eccoob_largepage,
1168 .ecclayout_4k = &nandv1_hw_eccoob_smallpage,
1169 .select_chip = mxc_nand_select_chip_v1_v3,
1170 .correct_data = mxc_nand_correct_data_v1,
1171 .irqpending_quirk = 1,
1173 .regs_offset = 0xe00,
1174 .spare0_offset = 0x800,
1182 .preset = preset_v1,
1183 .send_cmd = send_cmd_v1_v2,
1184 .send_addr = send_addr_v1_v2,
1185 .send_page = send_page_v1,
1186 .send_read_id = send_read_id_v1_v2,
1187 .get_dev_status = get_dev_status_v1_v2,
1188 .check_int = check_int_v1_v2,
1189 .irq_control = irq_control_v1_v2,
1190 .get_ecc_status = get_ecc_status_v1,
1191 .ecclayout_512 = &nandv1_hw_eccoob_smallpage,
1192 .ecclayout_2k = &nandv1_hw_eccoob_largepage,
1193 .ecclayout_4k = &nandv1_hw_eccoob_smallpage,
1194 .select_chip = mxc_nand_select_chip_v1_v3,
1195 .correct_data = mxc_nand_correct_data_v1,
1196 .irqpending_quirk = 0,
1198 .regs_offset = 0xe00,
1199 .spare0_offset = 0x800,
1208 .preset = preset_v2,
1209 .send_cmd = send_cmd_v1_v2,
1210 .send_addr = send_addr_v1_v2,
1211 .send_page = send_page_v2,
1212 .send_read_id = send_read_id_v1_v2,
1213 .get_dev_status = get_dev_status_v1_v2,
1214 .check_int = check_int_v1_v2,
1215 .irq_control = irq_control_v1_v2,
1216 .get_ecc_status = get_ecc_status_v2,
1217 .ecclayout_512 = &nandv2_hw_eccoob_smallpage,
1218 .ecclayout_2k = &nandv2_hw_eccoob_largepage,
1219 .ecclayout_4k = &nandv2_hw_eccoob_4k,
1220 .select_chip = mxc_nand_select_chip_v2,
1221 .correct_data = mxc_nand_correct_data_v2_v3,
1222 .irqpending_quirk = 0,
1224 .regs_offset = 0x1e00,
1225 .spare0_offset = 0x1000,
1234 .preset = preset_v3,
1235 .send_cmd = send_cmd_v3,
1236 .send_addr = send_addr_v3,
1237 .send_page = send_page_v3,
1238 .send_read_id = send_read_id_v3,
1239 .get_dev_status = get_dev_status_v3,
1240 .check_int = check_int_v3,
1241 .irq_control = irq_control_v3,
1242 .get_ecc_status = get_ecc_status_v3,
1243 .ecclayout_512 = &nandv2_hw_eccoob_smallpage,
1244 .ecclayout_2k = &nandv2_hw_eccoob_largepage,
1245 .ecclayout_4k = &nandv2_hw_eccoob_smallpage,
1246 .select_chip = mxc_nand_select_chip_v1_v3,
1247 .correct_data = mxc_nand_correct_data_v2_v3,
1248 .irqpending_quirk = 0,
1251 .spare0_offset = 0x1000,
1252 .axi_offset = 0x1e00,
1261 .preset = preset_v3,
1262 .send_cmd = send_cmd_v3,
1263 .send_addr = send_addr_v3,
1264 .send_page = send_page_v3,
1265 .send_read_id = send_read_id_v3,
1266 .get_dev_status = get_dev_status_v3,
1267 .check_int = check_int_v3,
1268 .irq_control = irq_control_v3,
1269 .get_ecc_status = get_ecc_status_v3,
1270 .ecclayout_512 = &nandv2_hw_eccoob_smallpage,
1271 .ecclayout_2k = &nandv2_hw_eccoob_largepage,
1272 .ecclayout_4k = &nandv2_hw_eccoob_smallpage,
1273 .select_chip = mxc_nand_select_chip_v1_v3,
1274 .correct_data = mxc_nand_correct_data_v2_v3,
1275 .irqpending_quirk = 0,
1278 .spare0_offset = 0x1000,
1279 .axi_offset = 0x1e00,
1286 #ifdef CONFIG_OF_MTD
1290 .data = &imx21_nand_devtype_data,
1292 .compatible =
"fsl,imx27-nand",
1293 .data = &imx27_nand_devtype_data,
1295 .compatible =
"fsl,imx25-nand",
1296 .data = &imx25_nand_devtype_data,
1298 .compatible =
"fsl,imx51-nand",
1299 .data = &imx51_nand_devtype_data,
1301 .compatible =
"fsl,imx53-nand",
1302 .data = &imx53_nand_devtype_data,
1327 pdata->
width = buswidth / 8;
1368 struct nand_chip *
this;
1388 mtd->
dev.parent = &pdev->
dev;
1392 this->chip_delay = 5;
1395 this->dev_ready = mxc_nand_dev_ready;
1396 this->cmdfunc = mxc_nand_command;
1397 this->read_byte = mxc_nand_read_byte;
1398 this->read_word = mxc_nand_read_word;
1400 this->read_buf = mxc_nand_read_buf;
1403 if (IS_ERR(host->
clk))
1404 return PTR_ERR(host->
clk);
1406 err = mxcnd_probe_dt(host);
1408 err = mxcnd_probe_pdata(host);
1444 this->
ecc.size = 512;
1447 if (host->
pdata.hw_ecc) {
1448 this->
ecc.calculate = mxc_nand_calculate_ecc;
1449 this->
ecc.hwctl = mxc_nand_enable_hwecc;
1457 if (host->
pdata.width == 2)
1460 if (host->
pdata.flash_bbt) {
1461 this->bbt_td = &bbt_main_descr;
1462 this->bbt_md = &bbt_mirror_descr;
1478 err = devm_request_irq(&pdev->
dev, host->
irq, mxc_nfc_irq,
1483 clk_prepare_enable(host->
clk);
1512 this->
ecc.strength = 1;
1514 this->
ecc.strength = (host->
eccsize == 4) ? 4 : 8;
1526 .of_node = pdev->
dev.of_node,
1529 host->
pdata.nr_parts);
1531 platform_set_drvdata(pdev, host);
1536 clk_disable_unprepare(host->
clk);
1545 platform_set_drvdata(pdev,
NULL);
1558 .probe = mxcnd_probe,