diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2010-05-03 14:19:19 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2010-05-03 14:19:19 +0200 |
commit | d840493e2886ad54490d8d31cb9c05e1cc52b7b5 (patch) | |
tree | 38d25676859cbac57016fc8e2d8470e4991cd41a /drivers | |
parent | 3a1617d96f8b4e093917bf05fca4d1e0bd6983e0 (diff) | |
download | barebox-d840493e2886ad54490d8d31cb9c05e1cc52b7b5.tar.gz barebox-d840493e2886ad54490d8d31cb9c05e1cc52b7b5.tar.xz |
Revert "nand_imx: Speed up sequential read"
This breaks at least on v1 type controllers with 2k pages. Lets
revert it for now and rework it.
This reverts commit d5578b81799a61eecca90152a3a1c392caab3638.
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/nand/nand_imx.c | 60 |
1 files changed, 13 insertions, 47 deletions
diff --git a/drivers/nand/nand_imx.c b/drivers/nand/nand_imx.c index cacf91ca96..74cdf10a50 100644 --- a/drivers/nand/nand_imx.c +++ b/drivers/nand/nand_imx.c @@ -295,7 +295,7 @@ static void __nand_boot_init noinline send_addr(struct imx_nand_host *host, u16 * @param spare_only set true if only the spare area is transferred */ static void __nand_boot_init send_page(struct imx_nand_host *host, - unsigned int ops, int wait) + unsigned int ops) { int bufs, i; @@ -311,8 +311,7 @@ static void __nand_boot_init send_page(struct imx_nand_host *host, writew(ops, host->regs + NFC_CONFIG2); /* Wait for operation to complete */ - if (wait) - wait_op_done(host); + wait_op_done(host); } } @@ -672,17 +671,11 @@ static void imx_nand_command(struct mtd_info *mtd, unsigned command, { struct nand_chip *nand_chip = mtd->priv; struct imx_nand_host *host = nand_chip->priv; - static int cached = -1; MTD_DEBUG(MTD_DEBUG_LEVEL3, "imx_nand_command (cmd = 0x%x, col = 0x%x, page = 0x%x)\n", command, column, page_addr); - if (cached != -1) - wait_op_done(host); - if (command != NAND_CMD_READ0) - cached = -1; - /* * Reset command state information */ @@ -709,44 +702,17 @@ static void imx_nand_command(struct mtd_info *mtd, unsigned command, command = NAND_CMD_READ0; - if (cached == page_addr) { - memcpy32(host->data_buf, host->main_area0, mtd->writesize); - copy_spare(mtd, 1); - - send_cmd(host, command); - mxc_do_addr_cycle(mtd, column, page_addr + 1); - - if (host->pagesize_2k) - /* send read confirm command */ - send_cmd(host, NAND_CMD_READSTART); - - send_page(host, NFC_OUTPUT, 0); - - cached = page_addr + 1; - } else { - host->buf_start = column; - send_cmd(host, command); - mxc_do_addr_cycle(mtd, column, page_addr); - - if (host->pagesize_2k) - /* send read confirm command */ - send_cmd(host, NAND_CMD_READSTART); - - send_page(host, NFC_OUTPUT, 1); - memcpy32(host->data_buf, host->main_area0, mtd->writesize); - copy_spare(mtd, 1); - - send_cmd(host, command); - mxc_do_addr_cycle(mtd, column, page_addr + 1); + send_cmd(host, command); + mxc_do_addr_cycle(mtd, column, page_addr); - if (host->pagesize_2k) - /* send read confirm command */ - send_cmd(host, NAND_CMD_READSTART); + if (host->pagesize_2k) + /* send read confirm command */ + send_cmd(host, NAND_CMD_READSTART); - send_page(host, NFC_OUTPUT, 0); - cached = page_addr + 1; - } + send_page(host, NFC_OUTPUT); + memcpy32(host->data_buf, host->main_area0, mtd->writesize); + copy_spare(mtd, 1); break; case NAND_CMD_SEQIN: @@ -783,7 +749,7 @@ static void imx_nand_command(struct mtd_info *mtd, unsigned command, case NAND_CMD_PAGEPROG: memcpy32(host->main_area0, host->data_buf, mtd->writesize); copy_spare(mtd, 0); - send_page(host, NFC_INPUT, 1); + send_page(host, NFC_INPUT); send_cmd(host, command); mxc_do_addr_cycle(mtd, column, page_addr); break; @@ -884,7 +850,7 @@ static int __init imxnd_probe(struct device_d *dev) #endif /* Allocate memory for MTD device structure and private data */ host = kzalloc(sizeof(struct imx_nand_host) + NAND_MAX_PAGESIZE + - NAND_MAX_OOBSIZE * 2, GFP_KERNEL); + NAND_MAX_OOBSIZE, GFP_KERNEL); if (!host) return -ENOMEM; @@ -1171,7 +1137,7 @@ void __nand_boot_init imx_nand_load_image(void *dest, int size) page * pagesize); if (host.pagesize_2k) send_cmd(&host, NAND_CMD_READSTART); - send_page(&host, NFC_OUTPUT, 1); + send_page(&host, NFC_OUTPUT); page++; if (host.pagesize_2k) { |