12 #include <linux/kernel.h>
13 #include <linux/module.h>
24 #include <linux/slab.h>
31 #define CHIP_DELAY_TIMEOUT (2 * HZ/10)
32 #define NAND_STOP_DELAY (2 * HZ/50)
33 #define PAGE_CHUNK_SIZE (2048)
37 #define NDTR0CS0 (0x04)
38 #define NDTR1CS0 (0x0C)
48 #define NDCR_SPARE_EN (0x1 << 31)
49 #define NDCR_ECC_EN (0x1 << 30)
50 #define NDCR_DMA_EN (0x1 << 29)
51 #define NDCR_ND_RUN (0x1 << 28)
52 #define NDCR_DWIDTH_C (0x1 << 27)
53 #define NDCR_DWIDTH_M (0x1 << 26)
54 #define NDCR_PAGE_SZ (0x1 << 24)
55 #define NDCR_NCSX (0x1 << 23)
56 #define NDCR_ND_MODE (0x3 << 21)
57 #define NDCR_NAND_MODE (0x0)
58 #define NDCR_CLR_PG_CNT (0x1 << 20)
59 #define NDCR_STOP_ON_UNCOR (0x1 << 19)
60 #define NDCR_RD_ID_CNT_MASK (0x7 << 16)
61 #define NDCR_RD_ID_CNT(x) (((x) << 16) & NDCR_RD_ID_CNT_MASK)
63 #define NDCR_RA_START (0x1 << 15)
64 #define NDCR_PG_PER_BLK (0x1 << 14)
65 #define NDCR_ND_ARB_EN (0x1 << 12)
66 #define NDCR_INT_MASK (0xFFF)
68 #define NDSR_MASK (0xfff)
69 #define NDSR_RDY (0x1 << 12)
70 #define NDSR_FLASH_RDY (0x1 << 11)
71 #define NDSR_CS0_PAGED (0x1 << 10)
72 #define NDSR_CS1_PAGED (0x1 << 9)
73 #define NDSR_CS0_CMDD (0x1 << 8)
74 #define NDSR_CS1_CMDD (0x1 << 7)
75 #define NDSR_CS0_BBD (0x1 << 6)
76 #define NDSR_CS1_BBD (0x1 << 5)
77 #define NDSR_DBERR (0x1 << 4)
78 #define NDSR_SBERR (0x1 << 3)
79 #define NDSR_WRDREQ (0x1 << 2)
80 #define NDSR_RDDREQ (0x1 << 1)
81 #define NDSR_WRCMDREQ (0x1)
83 #define NDCB0_ST_ROW_EN (0x1 << 26)
84 #define NDCB0_AUTO_RS (0x1 << 25)
85 #define NDCB0_CSEL (0x1 << 24)
86 #define NDCB0_CMD_TYPE_MASK (0x7 << 21)
87 #define NDCB0_CMD_TYPE(x) (((x) << 21) & NDCB0_CMD_TYPE_MASK)
88 #define NDCB0_NC (0x1 << 20)
89 #define NDCB0_DBC (0x1 << 19)
90 #define NDCB0_ADDR_CYC_MASK (0x7 << 16)
91 #define NDCB0_ADDR_CYC(x) (((x) << 16) & NDCB0_ADDR_CYC_MASK)
92 #define NDCB0_CMD2_MASK (0xff << 8)
93 #define NDCB0_CMD1_MASK (0xff)
94 #define NDCB0_ADDR_CYC_SHIFT (16)
97 #define nand_writel(info, off, val) \
98 __raw_writel((val), (info)->mmio_base + (off))
100 #define nand_readl(info, off) \
101 __raw_readl((info)->mmio_base + (off))
202 .read_status = 0x0070,
208 .lock_status = 0x007A,
212 { 40, 80, 60, 100, 80, 100, 90000, 400, 40, },
213 { 10, 0, 20, 40, 30, 40, 11123, 110, 10, },
214 { 10, 25, 15, 25, 15, 30, 25000, 60, 10, },
215 { 10, 35, 15, 25, 15, 25, 25000, 60, 10, },
219 {
"DEFAULT FLASH", 0, 0, 2048, 8, 8, 0, &timing[0] },
220 {
"64MiB 16-bit", 0x46ec, 32, 512, 16, 16, 4096, &timing[1] },
221 {
"256MiB 8-bit", 0xdaec, 64, 2048, 8, 8, 2048, &timing[1] },
222 {
"4GiB 8-bit", 0xd7ec, 128, 4096, 8, 8, 8192, &timing[1] },
223 {
"128MiB 8-bit", 0xa12c, 64, 2048, 8, 8, 1024, &timing[2] },
224 {
"128MiB 16-bit", 0xb12c, 64, 2048, 16, 16, 1024, &timing[2] },
225 {
"512MiB 8-bit", 0xdc2c, 64, 2048, 8, 8, 4096, &timing[2] },
226 {
"512MiB 16-bit", 0xcc2c, 64, 2048, 16, 16, 4096, &timing[2] },
227 {
"256MiB 16-bit", 0xba20, 64, 2048, 16, 16, 2048, &timing[3] },
231 #define DEFAULT_FLASH_TYPE (&builtin_flash_types[0])
235 #define NDTR0_tCH(c) (min((c), 7) << 19)
236 #define NDTR0_tCS(c) (min((c), 7) << 16)
237 #define NDTR0_tWH(c) (min((c), 7) << 11)
238 #define NDTR0_tWP(c) (min((c), 7) << 8)
239 #define NDTR0_tRH(c) (min((c), 7) << 3)
240 #define NDTR0_tRP(c) (min((c), 7) << 0)
242 #define NDTR1_tR(c) (min((c), 65535) << 16)
243 #define NDTR1_tWHR(c) (min((c), 15) << 4)
244 #define NDTR1_tAR(c) (min((c), 15) << 0)
247 #define ns2cycle(ns, clk) (int)((ns) * (clk / 1000000) / 1000)
329 ndcr &= ~NDCR_ND_RUN;
354 switch (info->
state) {
370 dev_err(&info->
pdev->dev,
"%s: invalid state %d\n", __func__,
384 switch (info->
state) {
396 dev_err(&info->
pdev->dev,
"%s: invalid state %d\n", __func__,
406 static void pxa3xx_nand_data_dma_irq(
int channel,
void *
data)
411 dcsr =
DCSR(channel);
412 DCSR(channel) = dcsr;
426 unsigned int status, is_completed = 0;
449 start_data_dma(info);
450 goto NORMAL_IRQ_EXIT;
454 handle_data_pio(info);
457 if (status & cmd_done) {
461 if (status & ready) {
468 status &= ~NDSR_WRCMDREQ;
483 static inline int is_buf_blank(
uint8_t *
buf,
size_t len)
485 for (; len > 0; len--)
495 int addr_cycle, exec_cmd;
499 host = info->
host[info->
cs];
521 pxa3xx_set_datasize(info);
538 cmd = host->
cmdset->read1;
557 info->
ndcb1 = ((page_addr & 0xFFFFFF) << 8)
562 info->
ndcb1 = ((page_addr & 0xFFFF) << 16)
565 if (page_addr & 0xFF0000)
566 info->
ndcb2 = (page_addr & 0xFF0000) >> 16;
583 cmd = host->
cmdset->program;
593 cmd = host->
cmdset->read_id;
602 cmd = host->
cmdset->read_status;
612 cmd = host->
cmdset->erase;
618 info->
ndcb1 = page_addr;
623 cmd = host->
cmdset->reset;
635 dev_err(&info->
pdev->dev,
"non-supported command %x\n",
643 static void pxa3xx_nand_cmdfunc(
struct mtd_info *mtd,
unsigned command,
644 int column,
int page_addr)
663 if (info->
cs != host->
cs) {
670 exec_cmd = prepare_command_pool(info, command, column, page_addr);
673 pxa3xx_nand_start(info);
680 pxa3xx_nand_stop(info);
686 static int pxa3xx_nand_write_page_hwecc(
struct mtd_info *mtd,
695 static int pxa3xx_nand_read_page_hwecc(
struct mtd_info *mtd,
742 static u16 pxa3xx_nand_read_word(
struct mtd_info *mtd)
755 static void pxa3xx_nand_read_buf(
struct mtd_info *mtd,
uint8_t *buf,
int len)
765 static void pxa3xx_nand_write_buf(
struct mtd_info *mtd,
776 static void pxa3xx_nand_select_chip(
struct mtd_info *mtd,
int chip)
811 dev_err(&pdev->
dev,
"Current only support 2048 and 512 size\n");
816 dev_err(&pdev->
dev,
"Only support 8bit and 16 bit!\n");
821 host->
cmdset = &default_cmdset;
845 pxa3xx_nand_set_timing(host, f->
timing);
867 host->
cmdset = &default_cmdset;
879 #define MAX_BUFF_SIZE PAGE_SIZE
896 dev_err(&pdev->
dev,
"failed to allocate dma buffer\n");
904 pxa3xx_nand_data_dma_irq, info);
906 dev_err(&pdev->
dev,
"failed to request data dma\n");
919 mtd = info->
host[info->
cs]->mtd;
921 ret = pxa3xx_nand_config_flash(info, &builtin_flash_types[0]);
932 static int pxa3xx_nand_scan(
struct mtd_info *mtd)
945 if (pdata->
keep_config && !pxa3xx_nand_detect_config(info))
948 ret = pxa3xx_nand_sensing(info);
950 dev_info(&info->
pdev->dev,
"There is no chip on cs %d!\n",
959 dev_info(&info->
pdev->dev,
"Detect a flash id %x\n",
id);
962 "Read out ID 0, potential timing set wrong!!\n");
968 for (i = 0; i < num; i++) {
969 if (i < pdata->num_flash)
972 f = &builtin_flash_types[i - pdata->
num_flash + 1];
980 dev_err(&info->
pdev->dev,
"ERROR!! flash not defined!!!\n");
985 ret = pxa3xx_nand_config_flash(info, f);
987 dev_err(&info->
pdev->dev,
"ERROR! Configure failed\n");
991 pxa3xx_flash_ids[0].name = f->
name;
992 pxa3xx_flash_ids[0].id = (f->
chip_id >> 8) & 0xffff;
993 pxa3xx_flash_ids[0].pagesize = f->
page_size;
995 pxa3xx_flash_ids[0].chipsize = chipsize >> 20;
999 pxa3xx_flash_ids[1].name =
NULL;
1000 def = pxa3xx_flash_ids;
1004 chip->
ecc.strength = 1;
1037 pdata = pdev->
dev.platform_data;
1038 info = kzalloc(
sizeof(*info) + (
sizeof(*mtd) +
1041 dev_err(&pdev->
dev,
"failed to allocate memory\n");
1046 for (cs = 0; cs < pdata->
num_cs; cs++) {
1047 mtd = (
struct mtd_info *)((
unsigned int)&info[1] +
1048 (
sizeof(*mtd) +
sizeof(*host)) * cs);
1058 chip->
ecc.read_page = pxa3xx_nand_read_page_hwecc;
1059 chip->
ecc.write_page = pxa3xx_nand_write_page_hwecc;
1061 chip->
waitfunc = pxa3xx_nand_waitfunc;
1063 chip->
cmdfunc = pxa3xx_nand_cmdfunc;
1064 chip->
read_word = pxa3xx_nand_read_word;
1065 chip->
read_byte = pxa3xx_nand_read_byte;
1066 chip->
read_buf = pxa3xx_nand_read_buf;
1067 chip->
write_buf = pxa3xx_nand_write_buf;
1073 if (IS_ERR(info->
clk)) {
1074 dev_err(&pdev->
dev,
"failed to get nand clock\n");
1075 ret = PTR_ERR(info->
clk);
1091 dev_err(&pdev->
dev,
"no resource defined for data DMA\n");
1099 dev_err(&pdev->
dev,
"no resource defined for command DMA\n");
1108 dev_err(&pdev->
dev,
"no IRQ resource defined\n");
1115 dev_err(&pdev->
dev,
"no IO memory resource defined\n");
1122 dev_err(&pdev->
dev,
"failed to request memory resource\n");
1135 ret = pxa3xx_nand_init_buff(info);
1145 dev_err(&pdev->
dev,
"failed to request IRQ\n");
1149 platform_set_drvdata(pdev, info);
1183 pdata = pdev->
dev.platform_data;
1184 platform_set_drvdata(pdev,
NULL);
1203 for (cs = 0; cs < pdata->
num_cs; cs++)
1234 of_property_read_u32(np,
"num-cs", &pdata->
num_cs);
1252 int ret,
cs, probe_success;
1254 ret = pxa3xx_nand_probe_dt(pdev);
1258 pdata = pdev->
dev.platform_data;
1260 dev_err(&pdev->
dev,
"no platform data defined\n");
1264 ret = alloc_nand_resource(pdev);
1266 dev_err(&pdev->
dev,
"alloc nand resource failed\n");
1270 info = platform_get_drvdata(pdev);
1272 for (cs = 0; cs < pdata->
num_cs; cs++) {
1274 ret = pxa3xx_nand_scan(info->
host[cs]->mtd);
1276 dev_warn(&pdev->
dev,
"failed to scan nand at cs %d\n",
1283 &ppdata, pdata->
parts[cs],
1289 if (!probe_success) {
1290 pxa3xx_nand_remove(pdev);
1305 pdata = pdev->
dev.platform_data;
1311 for (cs = 0; cs < pdata->
num_cs; cs++) {
1312 mtd = info->
host[
cs]->mtd;
1326 pdata = pdev->
dev.platform_data;
1344 for (cs = 0; cs < pdata->
num_cs; cs++) {
1345 mtd = info->
host[
cs]->mtd;
1352 #define pxa3xx_nand_suspend NULL
1353 #define pxa3xx_nand_resume NULL
1358 .name =
"pxa3xx-nand",
1361 .probe = pxa3xx_nand_probe,
1362 .remove = pxa3xx_nand_remove,