Using GPMI-NAND driver on iMX28 using 3.4-rc1?

Sam Gandhi samgandhi9 at gmail.com
Thu Apr 5 10:38:09 EDT 2012


On Thu, Apr 5, 2012 at 6:48 AM, Vinod Koul <vinod.koul at linux.intel.com> wrote:
> On Thu, 2012-04-05 at 06:02 -0700, Sam Gandhi wrote:
>> Vinod,
>>
>> On Thu, Apr 5, 2012 at 5:27 AM, Vinod Koul <vinod.koul at linux.intel.com> wrote:
>> > 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) {
>> >
>> I applied your suggested change and don't hit the BUG_ON in
>> dmaengine.h with this change UBI torture test has run for last 30 min
>> or so I will let it run for a day. [ I will let mxs-dma authors
>> comment if this is a right change.. ]
> Good I will apply this and send to Linus.
> Care to give your tested-by.

Sure.

-Sam (samgandhi9 at gmail.com )



More information about the linux-mtd mailing list