dma: edma: Setup parameters to DMA MAX_NR_SG at a time

Changes are made here for configuring existing parameters to support
DMA'ing them out in batches as needed.

Also allocate as many as slots as needed by the SG list, but not more
than MAX_NR_SG. Then these slots will be reused accordingly.
For ex, if MAX_NR_SG=10, and number of SG entries is 40, still only
10 slots will be allocated to DMA the entire SG list of size 40.

Also enable TC interrupts for slots that are a last in a current
iteration, or that fall on a MAX_NR_SG boundary.

Signed-off-by: Joel Fernandes <joelf@ti.com>
dma: edma: Write out and handle MAX_NR_SG at a given time

Process SG-elements in batches of MAX_NR_SG if they are greater
than MAX_NR_SG. Due to this, at any given time only those many
slots will be used in the given channel no matter how long the
scatter list is. We keep track of how much has been written
inorder to process the next batch of elements in the scatter-list
and detect completion.

For such intermediate transfer completions (one batch of MAX_NR_SG),
make use of pause and resume functions instead of start and stop
when such intermediate transfer is in progress or completed as we
donot want to clear any pending events.

Signed-off-by: Joel Fernandes <joelf@ti.com>
ARM: edma: Add function to manually trigger an EDMA channel

Manual trigger for events missed as a result of splitting a
scatter gather list and DMA'ing it in batches. Add a helper
function to trigger a channel incase any such events are missed.

Signed-off-by: Joel Fernandes <joelf@ti.com>
dma: edma: Find missed events and issue them

In an effort to move to using Scatter gather lists of any size with
EDMA as discussed at [1] instead of placing limitations on the driver,
we work through the limitations of the EDMAC hardware to find missed
events and issue them.

The sequence of events that require this are:

For the scenario where MAX slots for an EDMA channel is 3:

SG1 -> SG2 -> SG3 -> SG4 -> SG5 -> SG6 -> Null

The above SG list will have to be DMA'd in 2 sets:

(1) SG1 -> SG2 -> SG3 -> Null
(2) SG4 -> SG5 -> SG6 -> Null

After (1) is succesfully transferred, the events from the MMC controller
donot stop coming and are missed by the time we have setup the transfer
for (2). So here, we catch the events missed as an error condition and
issue them manually.

In the second part of the patch, we make handle the NULL slot cases:
For crypto IP, we continue to receive events even continuously in
NULL slot, the setup of the next set of SG elements happens after
the error handler executes. This is results in some recursion problems.
Due to this, we continously receive error interrupts when we manually
trigger an event from the error handler.

We fix this, by first detecting if the Channel is currently transferring
from a NULL slot or not, that's where the edma_read_slot in the error
callback from interrupt handler comes in. With this we can determine if
the set up of the next SG list has completed, and we manually trigger
only in this case. If the setup has _not_ completed, we are still in NULL
so we just set a missed flag and allow the manual triggerring to happen
in edma_execute which will be eventually called. This fixes the above
mentioned race conditions seen with the crypto drivers.

[1] http://marc.info/?l=linux-omap&m=137416733628831&w=2

Signed-off-by: Joel Fernandes <joelf@ti.com>
dma: edma: Leave linked to Null slot instead of DUMMY slot

Dummy slot has been used as a way for missed-events not to be
reported as missing. This has been particularly troublesome for cases
where we might want to temporarily pause all incoming events.

For EDMA DMAC, there is no way to do any such pausing of events as
the occurence of the "next" event is not software controlled.
Using "edma_pause" in IRQ handlers doesn't help as by then the event
in concern from the slave is already missed.

Linking a dummy slot, is seen to absorb these events which we didn't
want to miss. So we don't link to dummy, but instead leave it linked
to NULL set, allow an error condition and detect the channel that
missed it.

Signed-off-by: Joel Fernandes <joelf@ti.com>

dma: edma: Link to dummy slot only for last SG list split

Consider the case where we have a scatter-list like:
SG1->SG2->SG3->SG4->SG5->SG6->Null

For ex, for a MAX_NR_SG of 2, earlier we were splitting this as:
SG1->SG2->Null
SG3->SG4->Null
SG5->SG6->Null

Now we split it as
SG1->SG2->Null
SG3->SG4->Null
SG5->SG6->Dummy

This approach results in lesser unwanted interrupts that occur
for the last list split. The Dummy slot has the property of not
raising an error condition if events are missed unlike the Null
slot. We are OK with this as we're done with processing the
whole list once we reach Dummy.

Signed-off-by: Joel Fernandes <joelf@ti.com>
dma: edma: Remove limits on number of slots

With this series, this check is no longer required and
we shouldn't need to reject drivers DMA'ing more than the
MAX number of slots.

Signed-off-by: Joel Fernandes <joelf@ti.com>
tcrypt: Add tcrypt code for testing DMA on arbritary size messages

Example: insmod /tcrypt.ko mode=510 bsize=$((8192*3))

Signed-off-by: Joel Fernandes <joelf@ti.com>
tcrypt: Add bufshift support to tcrypt

Signed-off-by: Joel Fernandes <joelf@ti.com>
SoC: davinci-mcasp: Add pinctrl support

Signed-off-by: Hebbar, Gururaja <gururaja.hebbar@ti.com>
Signed-off-by: Joel A Fernandes <agnel.joel@gmail.com>
ASoC: Davinci: machine: Add device tree binding

Device tree support for Davinci Machine driver

When the board boots with device tree, the driver will receive card,
codec, dai interface details (like the card name, DAPM routing map,
phandle for the audio components described in the dts file, codec mclk
speed).
The card will be set up based on this information.
Since the routing is provided via DT we can mark the card fully routed
so core can take care of disconnecting the unused pins.

Signed-off-by: Hebbar, Gururaja <gururaja.hebbar@ti.com>
am33xx: Add mcasp0 and mcasp1 device tree entries

Add missing mcasp entries in teh am33xx.dtsi include file.

Signed-off-by: Pantelis Antoniou <panto@antoniou-consulting.com>
ASoC/dts: OMAP2+: AM33xx: [HACK] Add missing dma info

This patch adds dma related  dt entries and functions that later will be
replaced by actual DMA porting

Signed-off-by: Hebbar, Gururaja <gururaja.hebbar@ti.com>

Conflicts:
	arch/arm/boot/dts/am33xx.dtsi
ASoC: Davinci: McASP: Include EDMA header

Signed-off-by: Joel Fernandes <joelf@ti.com>
ASoC: AM33XX: Add support for AM33xx SoC Audio

AM33xx uses same McASP IP as the Davinci Platform. This patch updates
Kconfig and makefile to enable build or McASP, PCM & Codec drivers

Signed-off-by: Hebbar, Gururaja <gururaja.hebbar@ti.com>
am33xx: mcasp: Add dma channel definitions

Add DMA channel definitions even though they are not used yet.
The channels still come from hwmod but it's nice to have them
in the DT too.

Signed-off-by: Pantelis Antoniou <panto@antoniou-consulting.com>
ARM: OMAP2+: AM33xx: removed invalid McASP HWMOD data

McASP Data Address space is used for edma operation. Driver uses this
address to setup edma dst/src. No Mapping is done on this address and
hence it is not required to create a new hwmod entry

Signed-off-by: Hebbar, Gururaja <gururaja.hebbar@ti.com>
sndsoc: mcasp: Get DMA channels via byname

Use get resource by name for DMA channels. Note that even for the
case where we're booting with DT, they still come out of hwmod data.

Signed-off-by: Pantelis Antoniou <panto@antoniou-consulting.com>
sound-soc: Davinci: Remove __devinit/__devexit

__devinit/__devexit and the like has been purged. Remove them.

Signed-off-by: Pantelis Antoniou <panto@antoniou-consulting.com>
regulator: DUMMY_REGULATOR should work for OF too

Dummy regulator should work when using Device Tree.
So don't set has_full_constraints when it is set.

Signed-off-by: Pantelis Antoniou <panto@antoniou-consulting.com>
Disable regulator crap till it is cleaned up

Signed-off-by: Joel Fernandes <joelf@ti.com>