Using GPMI-NAND driver on iMX28 using 3.4-rc1?
Vinod Koul
vinod.koul at linux.intel.com
Thu Apr 5 08:27:41 EDT 2012
On Thu, 2012-04-05 at 05:03 -0700, Sam Gandhi wrote:
> 2012/4/4 Huang Shijie <b32955 at freescale.com>:
> > Hi All:
> >> On Wed, Apr 4, 2012 at 7:07 PM, Sam Gandhi<samgandhi9 at gmail.com> wrote:
> >>
> >>> I reverted that commit and I still see following error!
> >> Huang,
> >>
> >> Are you able to use gpmi on mx28 running 3.4-rc1?
> >>
> > I also meet the same problem today.
> >
> >
> >>> flash_erase /dev/mtd1 0 0
> >>> Erasing 1------------[ cut here ]------------
> >>> kernel BUG at /home/sam/linux/drivers/dma/dmaengine.h:53!
> > the mxs-dma has added some patches about the cookie.
> > The bug is in the dmaengine.h.
> >
> > So let more people know this bug.
> >
> > BR
> > Huang Shijie
> >
> >
> FWIW, Just a data point.
>
> I coverted BUG_ON in dmaengine.h to printk as shown below. With this
> change I was able to format nand, create UBI partition. I have been
> running UBI torture test called integck on my board that does lot of
> I/O, mounting/unmounting of filesystem for close to 8 hour now without
> crash. But I do see those printks. I haven't followed logic of
> tx->cookie well enough to figure out what the appropriate change
> should be. Note this is with commit
> 00292bbf769620dea923dbd906afd88955f7ea19 reverted in my tree.
>
> Cookie 0 completed 102118268 DMA_MIN 1
> Cookie 0 completed 102120401 DMA_MIN 1
> Cookie 0 completed 102237726 DMA_MIN 1
>
> git diff drivers/dma/dmaengine.h
> diff --git a/drivers/dma/dmaengine.h b/drivers/dma/dmaengine.h
> index 17f983a..3d10a70 100644
> --- a/drivers/dma/dmaengine.h
> +++ b/drivers/dma/dmaengine.h
> @@ -50,7 +50,11 @@ static inline dma_cookie_t dma_cookie_assign(struct
> dma_async_tx_descriptor *tx)
> */
> static inline void dma_cookie_complete(struct dma_async_tx_descriptor *tx)
> {
> - BUG_ON(tx->cookie < DMA_MIN_COOKIE);
> + if ( tx->cookie < DMA_MIN_COOKIE)
> + printk(KERN_ERR "Cookie %d, completed %d DMA_MIN %d
> ",tx->cookie,
> + tx->chan->completed_cookie,
> + DMA_MIN_COOKIE);
> + /* BUG_ON(tx->cookie < DMA_MIN_COOKIE); */
> tx->chan->completed_cookie = tx->cookie;
> tx->cookie = 0;
> }
This means you are trying to mark a cookie complete when it is already
marked so!, hence dmaengine screams.
The bug is is mxs-dma.
Let me know if below fixes it (assuming you are not using cyclic API,
that would need fixup as well)
diff --git a/drivers/dma/mxs-dma.c b/drivers/dma/mxs-dma.c
index c81ef7e..5ddd84e 100644
--- a/drivers/dma/mxs-dma.c
+++ b/drivers/dma/mxs-dma.c
@@ -399,6 +399,10 @@ static struct dma_async_tx_descriptor
*mxs_dma_prep_slave_sg(
ccw->bits &= ~CCW_DEC_SEM;
} else {
idx = 0;
+ /* assign cookie here,
+ * hopefully for above case we dont need it
+ */
+ dma_cookie_assign(&mxs_chan->desc);
}
if (direction == DMA_TRANS_NONE) {
--
~Vinod
More information about the linux-mtd
mailing list