From patchwork Thu Apr 5 12:03:54 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: Using GPMI-NAND driver on iMX28 using 3.4-rc1? Date: Thu, 05 Apr 2012 02:03:54 -0000 From: Sam Gandhi X-Patchwork-Id: 150943 Message-Id: To: Huang Shijie Cc: Russell King - ARM Linux , Vinod Koul , Wolfram Sang , linux-mtd@lists.infradead.org, Shawn Guo , Fabio Estevam , "linux-arm-kernel@lists.infradead.org" 2012/4/4 Huang Shijie : > Hi All: >> On Wed, Apr 4, 2012 at 7:07 PM, Sam Gandhi  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 tx->cookie = 0; } Regards, -Sam 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;