From: b32955@freescale.com (Huang Shijie)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 06/10] MXS-DMA : add more flags for MXS-DMA
Date: Thu, 19 Jan 2012 14:16:03 +0800 [thread overview]
Message-ID: <1326953767-24155-7-git-send-email-b32955@freescale.com> (raw)
In-Reply-To: <1326953767-24155-1-git-send-email-b32955@freescale.com>
[1] Background :
The GPMI does ECC read page operation with a DMA chain consist of three DMA
Command Structures. The middle one of the chain is used to enable the BCH,
and read out the NAND page.
The WAIT4END(wait for command end) is a comunication signal between
the GPMI and MXS-DMA.
[2] The current DMA code sets the WAIT4END bit at the last one, such as:
+-----+ +-----+ +-----+
| cmd | ------------> | cmd | ------------------> | cmd |
+-----+ +-----+ +-----+
^
|
|
set WAIT4END here
This chain works fine in the mx23/mx28.
[3] But in the new GPMI version (used in MX50/MX60), the WAIT4END bit should
be set not only at the last DMA Command Structure,
but also at the middle one, such as:
+-----+ +-----+ +-----+
| cmd | ------------> | cmd | ------------------> | cmd |
+-----+ +-----+ +-----+
^ ^
| |
| |
set WAIT4END here too set WAIT4END here
If we do not set WAIT4END, the BCH maybe stall in "ECC reading page" state.
In the next ECC write page operation, a DMA-timeout occurs.
This has been catched in the MX6Q board.
In order to fix the bug, we should let the driver to
set the proper DMA flags in the DMA command structrues.
So add the new flags for MXS-DMA.
The driver can use these flags to control the DMA in a more flexible way.
Signed-off-by: Huang Shijie <b32955@freescale.com>
---
include/linux/mxs-dma.h | 26 ++++++++++++++++++++++++++
1 files changed, 26 insertions(+), 0 deletions(-)
diff --git a/include/linux/mxs-dma.h b/include/linux/mxs-dma.h
index 203d7c4..3ef73b8 100644
--- a/include/linux/mxs-dma.h
+++ b/include/linux/mxs-dma.h
@@ -11,6 +11,32 @@
#include <linux/dmaengine.h>
+/*
+ * The drivers use these flags for ->device_prep_slave_sg() :
+ * [1] If there is only one DMA command in the DMA chain, the code should be:
+ * ......
+ * ->device_prep_slave_sg(MXS_DMA_F_WAIT4END);
+ * ......
+ * [2] If there are two DMA commands in the DMA chain, the code should be
+ * ......
+ * ->device_prep_slave_sg(0);
+ * ......
+ * ->device_prep_slave_sg(MXS_DMA_F_LASTONE);
+ * ......
+ * [3] If there are more than two DMA commands in the DMA chain, the code
+ * should be:
+ * ......
+ * ->device_prep_slave_sg(0); // First
+ * ......
+ * ->device_prep_slave_sg(MXS_DMA_F_APPEND [| MXS_DMA_F_WAIT4END]);
+ * ......
+ * ->device_prep_slave_sg(MXS_DMA_F_LASTONE); // Last
+ */
+#define MXS_DMA_F_APPEND (1 << 0)
+#define MXS_DMA_F_WAIT4END (1 << 1)
+
+#define MXS_DMA_F_LASTONE (MXS_DMA_F_APPEND | MXS_DMA_F_WAIT4END)
+
struct mxs_dma_data {
int chan_irq;
};
--
1.7.0.4
next prev parent reply other threads:[~2012-01-19 6:16 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-01-19 6:15 [PATCH 00/10] patch set about the MXS-DMA Huang Shijie
2012-01-19 6:15 ` [PATCH 01/10] MXS-DMA : move the mxs-dma.h to a more common place Huang Shijie
2012-01-19 8:58 ` Wolfram Sang
2012-01-19 11:20 ` Mark Brown
2012-01-19 13:04 ` Shawn Guo
2012-01-19 6:15 ` [PATCH 02/10] MXS-DMA : change the header Huang Shijie
2012-01-19 6:16 ` [PATCH 03/10] MXS-MMC : change the DMA header file Huang Shijie
2012-01-19 6:16 ` [PATCH 04/10] MTD/GPMI " Huang Shijie
2012-01-19 6:16 ` [PATCH 05/10] ASoc " Huang Shijie
2012-01-19 6:16 ` Huang Shijie [this message]
2012-01-19 9:02 ` [PATCH 06/10] MXS-DMA : add more flags for MXS-DMA Russell King - ARM Linux
2012-01-19 9:31 ` Huang Shijie
2012-01-19 6:16 ` [PATCH 07/10] MXS-DMA : change the last parameter of mxs_dma_prep_slave_sg() Huang Shijie
2012-01-19 6:16 ` [PATCH 08/10] MXS-MMC : use the new DMA flags Huang Shijie
2012-01-19 6:16 ` [PATCH 09/10] MTD/GPMI : add a new field `gpmi_version` Huang Shijie
2012-01-19 6:16 ` [PATCH 10/10] MTD/GPMI : change the code for new DMA interface Huang Shijie
2012-01-19 9:10 ` [PATCH 00/10] patch set about the MXS-DMA Shawn Guo
2012-01-19 9:45 ` Wolfram Sang
2012-01-20 3:29 ` Huang Shijie
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=1326953767-24155-7-git-send-email-b32955@freescale.com \
--to=b32955@freescale.com \
--cc=linux-arm-kernel@lists.infradead.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).