LinuxPPC-Dev Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] MPC813 NAND fixes
@ 2008-03-19 15:28 Mike Hench
  2008-03-19 17:02 ` [PATCH] MPC8313 " Scott Wood
  0 siblings, 1 reply; 2+ messages in thread
From: Mike Hench @ 2008-03-19 15:28 UTC (permalink / raw)
  To: linuxppc-dev

[-- Attachment #1: Type: text/plain, Size: 3015 bytes --]

 

 

________________________________

From: Mike Hench 
Sent: Wednesday, March 19, 2008 10:22 AM
To: 'mhench@wi.rr.com'
Subject: [PATCH] MPC813 NAND fixes

 

Fix a race condition in fsl_elbc_run_command

Declare a variable written by an interrupt volatile.

Added parentheses to make timeout non-zero

Fix incorrect usage of clearbits32 that bashed option register

Remove work around for bashed register

 

Signed-off-by: Mike Hench <mhench@elutions.com>

 

---

 

--- linux-2.6.25-rc5.orig/drivers/mtd/nand/fsl_elbc_nand.c   2008-03-10
00:22:27.000000000 -0500

+++ linux-2.6.25-rc5/drivers/mtd/nand/fsl_elbc_nand.c       2008-03-19
10:08:22.000000000 -0500

@@ -264,7 +264,7 @@ struct fsl_elbc_ctrl {

            struct elbc_regs __iomem *regs;

            int irq;

            wait_queue_head_t irq_wait;

-           unsigned int irq_status; /* status read from LTESR by irq
handler */

+          volatile unsigned int irq_status; /* status read from LTESR
by irq handler */

            u8 __iomem *addr;        /* Address of assigned FCM buffer
*/

            unsigned int page;       /* Last page written to / read from
*/

            unsigned int read_bytes; /* Number of bytes read during
command   */

@@ -379,13 +379,13 @@ static int fsl_elbc_run_command(struct m

                     in_be32(&lbc->fbar), in_be32(&lbc->fpar),

                     in_be32(&lbc->fbcr), priv->bank);

 

+          ctrl->irq_status = 0;

            /* execute special operation */

            out_be32(&lbc->lsor, priv->bank);

 

            /* wait for FCM complete flag or timeout */

-           ctrl->irq_status = 0;

            wait_event_timeout(ctrl->irq_wait, ctrl->irq_status,

-                              FCM_TIMEOUT_MSECS * HZ/1000);

+                             (FCM_TIMEOUT_MSECS * HZ)/1000);

            ctrl->status = ctrl->irq_status;

 

            /* store mdr value in case it was needed */

@@ -861,7 +861,7 @@ static int fsl_elbc_chip_init_tail(struc

            /* adjust Option Register and ECC to match Flash page size
*/

            if (mtd->writesize == 512) {

                        priv->page_size = 0;

-                       clrbits32(&lbc->bank[priv->bank].or,
~OR_FCM_PGS);

+                      clrbits32(&lbc->bank[priv->bank].or, OR_FCM_PGS);

            } else if (mtd->writesize == 2048) {

                        priv->page_size = 1;

                        setbits32(&lbc->bank[priv->bank].or,
OR_FCM_PGS);

@@ -882,11 +882,6 @@ static int fsl_elbc_chip_init_tail(struc

                        return -1;

            }

 

-           /* The default u-boot configuration on MPC8313ERDB causes
errors;

-           * more delay is needed.  This should be safe for other
boards

-           * as well.

-           */

-           setbits32(&lbc->bank[priv->bank].or, 0x70);

            return 0;

 }

 


[-- Attachment #2: Type: text/html, Size: 15881 bytes --]

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2008-03-19 17:02 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-03-19 15:28 [PATCH] MPC813 NAND fixes Mike Hench
2008-03-19 17:02 ` [PATCH] MPC8313 " Scott Wood

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox