linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: shijie8@gmail.com (Huang Shijie)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2 12/27] mtd: nand: pxa3xx: Use a completion to signal device ready
Date: Sun, 3 Nov 2013 18:03:39 -0500	[thread overview]
Message-ID: <20131103230337.GF5896@gmail.com> (raw)
In-Reply-To: <1382137374-21251-13-git-send-email-ezequiel.garcia@free-electrons.com>

On Fri, Oct 18, 2013 at 08:02:39PM -0300, Ezequiel Garcia wrote:
> Apparently, the expected behavior of the waitfunc() NAND chip call
> is to wait for the device to be READY (this is a standard chip line).
> However, the current implementation does almost nothing, which opens
> a possibility to issue a command to a non-ready device.
> 
> Fix this by adding a new completion to wait for the ready event to arrive.
> 
> Because the "is ready" flag is cleared from the controller status
> register, it's needed to store that state in the driver, and because the
> field is accesed from an interruption, the field needs to be of an
> atomic type.
> 
> Signed-off-by: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
> ---
>  drivers/mtd/nand/pxa3xx_nand.c | 45 +++++++++++++++++++++++++++++-------------
>  1 file changed, 31 insertions(+), 14 deletions(-)
> 
> diff --git a/drivers/mtd/nand/pxa3xx_nand.c b/drivers/mtd/nand/pxa3xx_nand.c
> index 95e2ce3..1ceccb6 100644
> --- a/drivers/mtd/nand/pxa3xx_nand.c
> +++ b/drivers/mtd/nand/pxa3xx_nand.c
> @@ -35,6 +35,7 @@
>  
>  #include <linux/platform_data/mtd-nand-pxa3xx.h>
>  
> +#define NAND_DEV_READY_TIMEOUT  50
>  #define	CHIP_DELAY_TIMEOUT	(2 * HZ/10)
>  #define NAND_STOP_DELAY		(2 * HZ/50)
>  #define PAGE_CHUNK_SIZE		(2048)
> @@ -166,7 +167,7 @@ struct pxa3xx_nand_info {
>  	struct clk		*clk;
>  	void __iomem		*mmio_base;
>  	unsigned long		mmio_phys;
> -	struct completion	cmd_complete;
> +	struct completion	cmd_complete, dev_ready;
>  
>  	unsigned int 		buf_start;
>  	unsigned int		buf_count;
> @@ -196,7 +197,13 @@ struct pxa3xx_nand_info {
>  	int			use_ecc;	/* use HW ECC ? */
>  	int			use_dma;	/* use DMA ? */
>  	int			use_spare;	/* use spare ? */
> -	int			is_ready;
> +
> +	/*
> +	 * The is_ready flag is accesed from several places,
> +	 * including an interruption hander. We need an atomic
> +	 * type to avoid races.
> +	 */
> +	atomic_t		is_ready;
Do we really need to change it to atomic_t?

IMHO, the write is also a atomic operation.

thanks
Huang Shijie

  reply	other threads:[~2013-11-03 23:03 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-10-18 23:02 [PATCH v2 00/27] Armada 370/XP NAND support Ezequiel Garcia
2013-10-18 23:02 ` [PATCH v2 01/27] clk: mvebu: Add Core Divider clock Ezequiel Garcia
2013-10-23 11:28   ` Jason Cooper
2013-10-23 13:06     ` Ezequiel Garcia
2013-10-18 23:02 ` [PATCH v2 02/27] ARM: mvebu: Add Core Divider clock device-tree binding Ezequiel Garcia
2013-10-18 23:02 ` [PATCH v2 03/27] ARM: mvebu: Add a 2 GHz fixed-clock Armada 370/XP Ezequiel Garcia
2013-10-18 23:02 ` [PATCH v2 04/27] ARM: mvebu: Add the core-divider clock to " Ezequiel Garcia
2013-10-18 23:02 ` [PATCH v2 05/27] mtd: nand: pxa3xx: Make config menu show supported platforms Ezequiel Garcia
2013-10-18 23:02 ` [PATCH v2 06/27] mtd: nand: pxa3xx: Prevent sub-page writes Ezequiel Garcia
2013-10-18 23:02 ` [PATCH v2 07/27] mtd: nand: pxa3xx: Early variant detection Ezequiel Garcia
2013-11-03 21:18   ` Huang Shijie
2013-11-04 12:01     ` Ezequiel Garcia
2013-10-18 23:02 ` [PATCH v2 08/27] mtd: nand: pxa3xx: Use chip->cmdfunc instead of the internal Ezequiel Garcia
2013-11-03 21:32   ` Huang Shijie
2013-11-04 11:58     ` Ezequiel Garcia
2013-10-18 23:02 ` [PATCH v2 09/27] mtd: nand: pxa3xx: Split FIFO size from to-be-read FIFO count Ezequiel Garcia
2013-11-03 22:36   ` Huang Shijie
2013-11-04 12:13     ` Ezequiel Garcia
2013-11-10  8:30       ` Haojian Zhuang
2013-10-18 23:02 ` [PATCH v2 10/27] mtd: nand: pxa3xx: Replace host->page_size by mtd->writesize Ezequiel Garcia
2013-11-03 22:52   ` Huang Shijie
2013-11-04 12:24     ` Ezequiel Garcia
2013-10-18 23:02 ` [PATCH v2 11/27] mtd: nand: pxa3xx: Disable OOB on arbitrary length commands Ezequiel Garcia
2013-11-03 22:59   ` Huang Shijie
2013-11-04 12:41     ` Ezequiel Garcia
2013-10-18 23:02 ` [PATCH v2 12/27] mtd: nand: pxa3xx: Use a completion to signal device ready Ezequiel Garcia
2013-11-03 23:03   ` Huang Shijie [this message]
2013-11-04 13:51     ` Ezequiel Garcia
2013-11-05 18:44       ` Brian Norris
2013-10-18 23:02 ` [PATCH v2 13/27] mtd: nand: pxa3xx: Add bad block handling Ezequiel Garcia
2013-10-18 23:02 ` [PATCH v2 14/27] mtd: nand: pxa3xx: Add driver-specific ECC BCH support Ezequiel Garcia
2013-10-18 23:02 ` [PATCH v2 15/27] mtd: nand: pxa3xx: Clear cmd buffer #3 (NDCB3) on command start Ezequiel Garcia
2013-10-18 23:02 ` [PATCH v2 16/27] mtd: nand: pxa3xx: Add helper function to set page address Ezequiel Garcia
2013-10-18 23:02 ` [PATCH v2 17/27] mtd: nand: pxa3xx: Remove READ0 switch/case falltrough Ezequiel Garcia
2013-10-18 23:02 ` [PATCH v2 18/27] mtd: nand: pxa3xx: Split prepare_command_pool() in two stages Ezequiel Garcia
2013-10-18 23:02 ` [PATCH v2 19/27] mtd: nand: pxa3xx: Move the data buffer clean to prepare_start_command() Ezequiel Garcia
2013-10-18 23:02 ` [PATCH v2 20/27] mtd: nand: pxa3xx: Fix SEQIN column address set Ezequiel Garcia
2013-10-18 23:02 ` [PATCH v2 21/27] mtd: nand: pxa3xx: Add a read/write buffers markers Ezequiel Garcia
2013-10-18 23:02 ` [PATCH v2 22/27] mtd: nand: pxa3xx: Introduce multiple page I/O support Ezequiel Garcia
2013-10-18 23:02 ` [PATCH v2 23/27] mtd: nand: pxa3xx: Add multiple chunk write support Ezequiel Garcia
2013-10-18 23:02 ` [PATCH v2 24/27] mtd: nand: pxa3xx: Add ECC BCH correctable errors detection Ezequiel Garcia
2013-10-18 23:02 ` [PATCH v2 25/27] ARM: mvebu: Add support for NAND controller in Armada 370/XP Ezequiel Garcia
2013-10-18 23:02 ` [PATCH v2 26/27] ARM: mvebu: Enable NAND controller in Armada XP GP board Ezequiel Garcia
2013-10-18 23:02 ` [PATCH v2 27/27] ARM: mvebu: Enable NAND controller in Armada 370 Mirabox Ezequiel Garcia
2013-10-19  6:35 ` [PATCH v2 00/27] Armada 370/XP NAND support Willy Tarreau
2013-10-19 14:25   ` Jason Cooper
2013-10-19 16:21     ` Ezequiel Garcia
2013-10-20 17:50       ` Thomas Petazzoni
2013-10-20 19:24         ` Jason Cooper
2013-10-31 15:58 ` Ezequiel Garcia
2013-10-31 18:22   ` Brian Norris
2013-11-01  2:07   ` 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=20131103230337.GF5896@gmail.com \
    --to=shijie8@gmail.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).