All of lore.kernel.org
 help / color / mirror / Atom feed
From: Wolfgang Grandegegr <wg@grandegger.com>
To: linux-mtd@lists.infradead.org
Cc: linuxppc-dev@ozlabs.org,
	Anton Vorontsov <avorontsov@ru.mvista.com>,
	Wolfgang Grandegger <wg@grandegger.com>
Subject: [PATCH 3/4] NAND: FSL-UPM: Add wait flags to support board/chip specific delays
Date: Tue, 17 Mar 2009 10:12:21 +0100	[thread overview]
Message-ID: <1237281143-8768-4-git-send-email-wg@grandegger.com> (raw)
In-Reply-To: <1237281143-8768-3-git-send-email-wg@grandegger.com>

From: Wolfgang Grandegger <wg@grandegger.com>

The NAND flash on the TQM8548_BE modules requires a short delay after
running the UPM pattern. The TQM8548_BE requires a further short delay
after writing out a buffer. Normally the R/B pin should be checked, but
it's not connected on the TQM8548_BE. The existing driver uses similar
fixed delay points. To manage these extra delays in a more general way,
I introduced the "wait_flags" field allowing the board-specific driver
to specify various types of extra delay.

Signed-off-by: Wolfgang Grandegger <wg@grandegger.com>
---
 drivers/mtd/nand/fsl_upm.c |   20 ++++++++++++++++++--
 1 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/drivers/mtd/nand/fsl_upm.c b/drivers/mtd/nand/fsl_upm.c
index f42955c..0ffc872 100644
--- a/drivers/mtd/nand/fsl_upm.c
+++ b/drivers/mtd/nand/fsl_upm.c
@@ -25,6 +25,10 @@
 
 #define FSL_UPM_NAND_MAX_CHIPS 4
 
+#define FSL_UPM_WAIT_RUN_PATTERN  0x1
+#define FSL_UPM_WAIT_WRITE_BYTE   0x2
+#define FSL_UPM_WAIT_WRITE_BUFFER 0x4
+
 struct fsl_upm_nand {
 	struct device *dev;
 	struct mtd_info mtd;
@@ -44,6 +48,7 @@ struct fsl_upm_nand {
 	uint32_t max_chips;
 	uint32_t chip_number;
 	uint32_t chip_offset;
+	uint32_t wait_flags;
 };
 
 #define to_fsl_upm_nand(mtd) container_of(mtd, struct fsl_upm_nand, mtd)
@@ -101,7 +106,8 @@ static void fun_cmd_ctrl(struct mtd_info *mtd, int cmd, unsigned int ctrl)
 	}
 	fsl_upm_run_pattern(&fun->upm, chip->IO_ADDR_R, mar);
 
-	fun_wait_rnb(fun);
+	if (fun->wait_flags & FSL_UPM_WAIT_RUN_PATTERN)
+		fun_wait_rnb(fun);
 }
 
 static void fun_select_chip(struct mtd_info *mtd, int chip_nr)
@@ -143,8 +149,11 @@ static void fun_write_buf(struct mtd_info *mtd, const uint8_t *buf, int len)
 
 	for (i = 0; i < len; i++) {
 		out_8(fun->chip.IO_ADDR_W, buf[i]);
-		fun_wait_rnb(fun);
+		if (fun->wait_flags & FSL_UPM_WAIT_WRITE_BYTE)
+			fun_wait_rnb(fun);
 	}
+	if (fun->wait_flags & FSL_UPM_WAIT_WRITE_BUFFER)
+		fun_wait_rnb(fun);
 }
 
 static int __devinit fun_chip_init(struct fsl_upm_nand *fun,
@@ -293,6 +302,13 @@ static int __devinit fun_probe(struct of_device *ofdev,
 	if (prop && size == sizeof(uint32_t))
 		fun->chip_offset = *prop;
 
+	prop = of_get_property(ofdev->node, "wait-flags", &size);
+	if (prop && size == sizeof(uint32_t))
+		fun->wait_flags = *prop;
+	else
+		fun->wait_flags = (FSL_UPM_WAIT_RUN_PATTERN |
+				   FSL_UPM_WAIT_WRITE_BYTE);
+
 	fun->io_base = devm_ioremap_nocache(&ofdev->dev, io_res.start,
 					  io_res.end - io_res.start + 1);
 	if (!fun->io_base) {
-- 
1.6.0.6

WARNING: multiple messages have this Message-ID (diff)
From: Wolfgang Grandegegr <wg@grandegger.com>
To: linux-mtd@lists.infradead.org
Cc: linuxppc-dev@ozlabs.org
Subject: [PATCH 3/4] NAND: FSL-UPM: Add wait flags to support board/chip specific delays
Date: Tue, 17 Mar 2009 10:12:21 +0100	[thread overview]
Message-ID: <1237281143-8768-4-git-send-email-wg@grandegger.com> (raw)
In-Reply-To: <1237281143-8768-3-git-send-email-wg@grandegger.com>

From: Wolfgang Grandegger <wg@grandegger.com>

The NAND flash on the TQM8548_BE modules requires a short delay after
running the UPM pattern. The TQM8548_BE requires a further short delay
after writing out a buffer. Normally the R/B pin should be checked, but
it's not connected on the TQM8548_BE. The existing driver uses similar
fixed delay points. To manage these extra delays in a more general way,
I introduced the "wait_flags" field allowing the board-specific driver
to specify various types of extra delay.

Signed-off-by: Wolfgang Grandegger <wg@grandegger.com>
---
 drivers/mtd/nand/fsl_upm.c |   20 ++++++++++++++++++--
 1 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/drivers/mtd/nand/fsl_upm.c b/drivers/mtd/nand/fsl_upm.c
index f42955c..0ffc872 100644
--- a/drivers/mtd/nand/fsl_upm.c
+++ b/drivers/mtd/nand/fsl_upm.c
@@ -25,6 +25,10 @@
 
 #define FSL_UPM_NAND_MAX_CHIPS 4
 
+#define FSL_UPM_WAIT_RUN_PATTERN  0x1
+#define FSL_UPM_WAIT_WRITE_BYTE   0x2
+#define FSL_UPM_WAIT_WRITE_BUFFER 0x4
+
 struct fsl_upm_nand {
 	struct device *dev;
 	struct mtd_info mtd;
@@ -44,6 +48,7 @@ struct fsl_upm_nand {
 	uint32_t max_chips;
 	uint32_t chip_number;
 	uint32_t chip_offset;
+	uint32_t wait_flags;
 };
 
 #define to_fsl_upm_nand(mtd) container_of(mtd, struct fsl_upm_nand, mtd)
@@ -101,7 +106,8 @@ static void fun_cmd_ctrl(struct mtd_info *mtd, int cmd, unsigned int ctrl)
 	}
 	fsl_upm_run_pattern(&fun->upm, chip->IO_ADDR_R, mar);
 
-	fun_wait_rnb(fun);
+	if (fun->wait_flags & FSL_UPM_WAIT_RUN_PATTERN)
+		fun_wait_rnb(fun);
 }
 
 static void fun_select_chip(struct mtd_info *mtd, int chip_nr)
@@ -143,8 +149,11 @@ static void fun_write_buf(struct mtd_info *mtd, const uint8_t *buf, int len)
 
 	for (i = 0; i < len; i++) {
 		out_8(fun->chip.IO_ADDR_W, buf[i]);
-		fun_wait_rnb(fun);
+		if (fun->wait_flags & FSL_UPM_WAIT_WRITE_BYTE)
+			fun_wait_rnb(fun);
 	}
+	if (fun->wait_flags & FSL_UPM_WAIT_WRITE_BUFFER)
+		fun_wait_rnb(fun);
 }
 
 static int __devinit fun_chip_init(struct fsl_upm_nand *fun,
@@ -293,6 +302,13 @@ static int __devinit fun_probe(struct of_device *ofdev,
 	if (prop && size == sizeof(uint32_t))
 		fun->chip_offset = *prop;
 
+	prop = of_get_property(ofdev->node, "wait-flags", &size);
+	if (prop && size == sizeof(uint32_t))
+		fun->wait_flags = *prop;
+	else
+		fun->wait_flags = (FSL_UPM_WAIT_RUN_PATTERN |
+				   FSL_UPM_WAIT_WRITE_BYTE);
+
 	fun->io_base = devm_ioremap_nocache(&ofdev->dev, io_res.start,
 					  io_res.end - io_res.start + 1);
 	if (!fun->io_base) {
-- 
1.6.0.6

  reply	other threads:[~2009-03-17  9:13 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-03-17  9:12 [PATCH 0/4] NAND: Multi-chip support for FSL-UPM for TQM8548 modules Wolfgang Grandegegr
2009-03-17  9:12 ` Wolfgang Grandegegr
2009-03-17  9:12 ` [PATCH 1/4] NAND: FSL-UPM: add multi chip support Wolfgang Grandegegr
2009-03-17  9:12   ` Wolfgang Grandegegr
2009-03-17  9:12   ` [PATCH 2/4] NAND: FSL-UPM: add support for selecting chips via MAR Wolfgang Grandegegr
2009-03-17  9:12     ` Wolfgang Grandegegr
2009-03-17  9:12     ` Wolfgang Grandegegr [this message]
2009-03-17  9:12       ` [PATCH 3/4] NAND: FSL-UPM: Add wait flags to support board/chip specific delays Wolfgang Grandegegr
2009-03-17  9:12       ` [PATCH 4/4] powerpc/85xx: TQM8548: Update DTS file for multi-chip support Wolfgang Grandegegr
2009-03-17  9:12         ` Wolfgang Grandegegr
2009-03-17  9:12         ` Wolfgang Grandegegr
2009-03-17  9:12           ` Wolfgang Grandegegr
2009-03-17 19:23         ` Anton Vorontsov
2009-03-18  7:34           ` Wolfgang Grandegger
2009-03-18 18:51         ` Scott Wood
2009-03-17 19:01       ` [PATCH 3/4] NAND: FSL-UPM: Add wait flags to support board/chip specific delays Anton Vorontsov
2009-03-17 19:27   ` [PATCH 1/4] NAND: FSL-UPM: add multi chip support Anton Vorontsov
2009-03-18  7:41     ` Wolfgang Grandegger
2009-03-18 13:02       ` Anton Vorontsov
2009-03-17 13:56 ` [PATCH 0/4] NAND: Multi-chip support for FSL-UPM for TQM8548 modules Kumar Gala

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1237281143-8768-4-git-send-email-wg@grandegger.com \
    --to=wg@grandegger.com \
    --cc=avorontsov@ru.mvista.com \
    --cc=linux-mtd@lists.infradead.org \
    --cc=linuxppc-dev@ozlabs.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.