Messages in this thread | | | From | "Chew, Chiau Ee" <> | Subject | RE: [PATCH] dma: dw: Add suspend and resume handling for PCI mode DW_DMAC. | Date | Tue, 28 Jan 2014 07:21:17 +0000 |
| |
> -----Original Message----- > From: Andy Shevchenko [mailto:andriy.shevchenko@linux.intel.com] > Sent: Monday, January 27, 2014 6:17 PM > To: Koul, Vinod > Cc: Andy Shevchenko; Chew, Chiau Ee; Viresh Kumar; Williams, Dan J; > dmaengine@vger.kernel.org; linux-kernel@vger.kernel.org > Subject: Re: [PATCH] dma: dw: Add suspend and resume handling for PCI mode > DW_DMAC. > > On Sun, 2014-01-26 at 16:47 +0530, Vinod Koul wrote: > > > > > > > For these cases, I have been using suspend_late. Since the > > > > > > dmaengine driver is providing service to other clients (SPI), > > > > > > it needs to esnure that it suspends after SPI using > > > > > > suspend_late and resume using resume_early. That way dma is > > > > > > availble whenever the client is active > > > > > > > > > > suspend_late is working in context that interrupt handler may be > > > > > invoked. Thus, to have DMA driver be properly shut down we have > > > > > to wait / terminate possible ongoing transfer. > > > > Well client is already suspended via .suspend. So where is the > > > > transaction :) > > > > > > ...as I already wrote before we have no parent-child relationship > > > between DMA and, for example, SPI. That means we may possible have > > > the case when SPI's .suspend() will be called later than DMA's one. > > > > > > > > It seems for me all DMA drivers that are using system > > > > > .suspend()/.resume() are potentially buggy. > > > > Yup! > > > > > > So, we have to decide what to do with them. .suspend_late() still > > > seems for me not the best approach. *Or* we have to check for > > > ongoing transaction and do something with it. *Or* just shut down > > > the device and rely on DMA transaction initiator that it handles the > > > terminated transaction properly. > > > > As you clearly said, we dont have a parent-child relatation though we > > have big dependency. I think this is true for DMA clients, i ran into > > similar situation with i2c few days back! > > > > So only think which can give us a good system behaviour would be > > clients getting suspended first and then then service providing subsystems. > > Agree. > > > (same reason why we > > do dma driver loading and init much before others drivers) > > Yes, it would be done via deferred probe. > > > So yes in the .suspend callback of the client, it needs to > > 1) abort any transactions it has > > 2) make the client quiscent > > > > then the .late_suspend kicks in and suspend the core drivers like dma. > > > > This is how it has worked reliably for me in production systems. I am > > all ears if we have a better and cleaner apprach to this problem :) > > Yes, summarize everything we discussed we have to: > - provide suspend_late, resume_early callbacks in the DMA driver instead of > *_noirq versions > - ensure that all clients on our platforms follow the described scenario > > Chiau Ee, I think you may to change your patch accordingly.
Ok. Noted
> > > -- > Andy Shevchenko <andriy.shevchenko@linux.intel.com> > Intel Finland Oy
| |