RE: [PATCH v2 09/11] OMAP: DMA: Implement generic errata handling

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



 

> -----Original Message-----
> From: Cousson, Benoit 
> Sent: Friday, September 17, 2010 8:21 PM
> To: G, Manjunath Kondaiah
> Cc: Kevin Hilman; linux-omap@xxxxxxxxxxxxxxx; Shilimkar, Santosh
> Subject: Re: [PATCH v2 09/11] OMAP: DMA: Implement generic 
> errata handling
> 
> On 9/17/2010 1:28 PM, G, Manjunath Kondaiah wrote:
> >> From: Cousson, Benoit
> >> Sent: Friday, September 17, 2010 3:59 PM
> >>
> >> On 9/17/2010 10:09 AM, G, Manjunath Kondaiah wrote:
> >>> Hi Benoit,
> >>>
> >>
> >> <...>
> >>
> >>>>>
> >>>>> I assume you are ok with option #1. Let me know if you have any 
> >>>>> issues/concenrs with above approach. I am in the process of
> >>>> consolidating
> >>>>> all the review comments and addressing all applicable
> >>>> review comments.
> >>>>
> >>>> Not really, the option #1 will still require you to use the oh 
> >>>> pointer, which is supposed to be private to the omap_device.
> >>>>
> >>>> What is still not clear is why and when you need to change the 
> >>>> sysconfig setting.
> >>>
> >>> It is required before stopping DMA chain transfer.
> >>
> >> OK, but why? What happen if you do not do that? Could you 
> please give 
> >> the full errata description to help us understanding?
> >
> > Here is summary of errata description:
> >
> > Software will program DMA to transfer an arbitrary high number of 
> > data, and disable the DMA channel whenever it is sure that all the 
> > data have been read from the source and transferred to the 
> destination.
> >
> > When doing this, software must ensure that the DMA is 
> configured in No 
> > Standby mode (DMAx_OCP_SYSCONFIG.MIDLEMODE = "01"). If this 
> is not the 
> > case, the software may disable the channel when it is 
> transitioning to 
> > standby state. This would cause the DMA internal FIFO 
> pointer not to 
> > be reset correctly and available DMA FIFO space to be artificially 
> > decreased. The consequences range from unnecessary 
> unaligned accesses performed, to complete DMA transfer hanging.
> 
> Thanks for the details.
> 
> That's an interesting bug to handle...
> 
> And what happen if you do not disable the DMA channel at that time?

I don't know since this errata is applicable only for 3430 ES1.0 and
from ES2.0 onwards it is fixed. This was implemented during 3430 post wakeup
period.

> 
> 
> > WORKAROUND
> > The correct procedure to disable a DMA channel before it 
> reaches end of block is:
> 
> That part is not clear: Why do we have to disable a channel 
> before its completion? Cannot we wait?

Not before completion, it is after completion of data transfer and before
disabling channel, sysconfig register needs to be set to standby mode.

> 
> > 1. Set OCP_SYSCONFIG.MIDLEMODE to "01"
> > 2. Disable DMA channel by writing bit DMA4_CCR_i[7].Enable='0'
> > 3. Ensure current DMA transfer is completed by polling the relevant 
> > DMA4_CCR_i[9].RD_ACTIVE/ DMA4_CCR_i[10].WR_ACTIVE bit.
> > 4. Restore OCP_SYSCONFIG.MIDLEMODE to its previous value.
> 
> >>>> Do you have a details explanation? Ideally you should try
> >> to couple
> >>>> the sysconfig change along with pm_runtime / hwmod state
> >> change, then
> >>>> we will be able to handle that smoothly in the framework.
> >>>
> >>> Since channel is already requested(and there is possibility
> >> of other
> >>> channels also used at the same time), using pm_runtime
> >> API's will only
> >>> increase usage count and will not invoke omap_device_enable.
> >>
> >> This is the part that is not clear, and where the full 
> errata should 
> >> help, because if you do have other channel in use, you will not be 
> >> able to do any clock gating anyway, that why changing the 
> sysconfig 
> >> at that time might be useless.
> >
> > Errata description provided.
> >
> >>
> >>>> If you cannot do that, you will need to add an 
> omap_device API as 
> >>>> well.
> >>>
> >>> There is already one such API exists in hwmod layer for
> >> handling this
> >>> type of errata(omap_hwmod_set_slave_idlemode in omap_hwmod.c).
> >>> Above proposal is based on similar implementation.
> >>
> >> Maybe, but this is not enough. In both case you should not use 
> >> directly this API from the driver, so if you want to use 
> that kind of 
> >> approach, you will need the omap_device layer as well.
> >
> > Does that mean, extending omap device layer for modifying sysconfig?
> 
> Yes,

This part is not clear. Is it implementing new API in omap device layer or
extending existing API? 

-Manjunath
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux