From: Russell King - ARM Linux <linux@arm.linux.org.uk>
To: Huang Shijie <b32955@freescale.com>
Cc: alsa-devel@alsa-project.org, shawn.guo@linaro.org,
vinod.koul@intel.com, shijie8@gmail.com,
linux-mmc@vger.kernel.org, linux-kernel@vger.kernel.org,
w.sang@pengutronix.de, linux-mtd@lists.infradead.org,
artem.bityutskiy@intel.com, b29396@freescale.com,
linux-arm-kernel@lists.infradead.org, LW@KARO-electronics.de
Subject: Re: [PATCH 06/10] MXS-DMA : add more flags for MXS-DMA
Date: Thu, 19 Jan 2012 09:02:39 +0000 [thread overview]
Message-ID: <20120119090238.GU1068@n2100.arm.linux.org.uk> (raw)
In-Reply-To: <1326953767-24155-7-git-send-email-b32955@freescale.com>
On Thu, Jan 19, 2012 at 02:16:03PM +0800, Huang Shijie wrote:
> [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)
Err, the 'flags' argument to device_prep_slave_sg() is supposed to be
from the set of enum dma_ctrl_flags. What this means is that your
MXS_DMA_F_APPEND is equivalent to DMA_PREP_INTERRUPT, and
MXS_DMA_F_WAIT4END is equivalent to DMA_CTRL_ACK.
What this does is make your drivers completely dependent on your DMA
engine implementation. That's not a good idea when devices get
reused in different SoCs.
If you need to supply extra flags which aren't in the dma_ctrl_flags,
at least make sure that they're using different bits. For bonus points,
also have your driver _check_ the DMA engine it's connected to before
it passes these flags.
next prev parent reply other threads:[~2012-01-19 9:02 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 ` [PATCH 06/10] MXS-DMA : add more flags for MXS-DMA Huang Shijie
2012-01-19 9:02 ` Russell King - ARM Linux [this message]
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=20120119090238.GU1068@n2100.arm.linux.org.uk \
--to=linux@arm.linux.org.uk \
--cc=LW@KARO-electronics.de \
--cc=alsa-devel@alsa-project.org \
--cc=artem.bityutskiy@intel.com \
--cc=b29396@freescale.com \
--cc=b32955@freescale.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mmc@vger.kernel.org \
--cc=linux-mtd@lists.infradead.org \
--cc=shawn.guo@linaro.org \
--cc=shijie8@gmail.com \
--cc=vinod.koul@intel.com \
--cc=w.sang@pengutronix.de \
/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).