Rabin Vincent
8ca84687b9
dma40: use helper for channel registers base
...
The register offset computation for accessing channel registers is copy/pasted
in several places. Create a helper function to do it.
Acked-by: Per Forlin <per.forlin@stericsson.com >
Acked-by: Jonas Aaberg <jonas.aberg@stericsson.com >
Signed-off-by: Rabin Vincent <rabin.vincent@stericsson.com >
Signed-off-by: Linus Walleij <linus.walleij@stericsson.com >
Signed-off-by: Dan Williams <dan.j.williams@intel.com >
2011-01-30 22:27:16 -08:00
Rabin Vincent
7d83a854a1
dma40: remove "hardware link with previous jobs" code
...
This link in hardware with previous jobs code is:
- unused, no clients using or requiring this feature
- incomplete, being implemented only for physical channels
- broken, only working to perform one link
Remove it. This also allows us to get rid of the channel pause in the
submit_tx() routine.
Acked-by: Per Forlin <per.forlin@stericsson.com >
Acked-by: Jonas Aaberg <jonas.aberg@stericsson.com >
Signed-off-by: Rabin Vincent <rabin.vincent@stericsson.com >
Signed-off-by: Linus Walleij <linus.walleij@stericsson.com >
Signed-off-by: Dan Williams <dan.j.williams@intel.com >
2011-01-30 22:27:15 -08:00
Rabin Vincent
262d2915d4
dma40: ensure event lines get enabled
...
The controller sometimes fails to register the enable of the event line when
both src and dst event lines are used on the same logical channel. Implement
the recommended software workaround, which is to retry the write until it
works.
Acked-by: Per Forlin <per.forlin@stericsson.com >
Acked-by: Jonas Aaberg <jonas.aberg@stericsson.com >
Signed-off-by: Rabin Vincent <rabin.vincent@stericsson.com >
Signed-off-by: Linus Walleij <linus.walleij@stericsson.com >
Signed-off-by: Dan Williams <dan.j.williams@intel.com >
2011-01-30 22:27:15 -08:00
Rabin Vincent
cb9ab2d8e4
dma40: make init function static
...
Acked-by: Per Forlin <per.forlin@stericsson.com >
Acked-by: Jonas Aaberg <jonas.aberg@stericsson.com >
Signed-off-by: Rabin Vincent <rabin.vincent@stericsson.com >
Signed-off-by: Linus Walleij <linus.walleij@stericsson.com >
Signed-off-by: Dan Williams <dan.j.williams@intel.com >
2011-01-30 22:27:15 -08:00
Per Forlin
d49278e335
dmaengine: dma40: Add support to split up large elements
...
The maximum transfer size of the stedma40 is (64k-1) x data-width.
If the transfer size of one element exceeds this limit
the job is split up and sent as linked transfer.
Signed-off-by: Per Forlin <per.forlin@linaro.org >
Signed-off-by: Dan Williams <dan.j.williams@intel.com >
2011-01-04 17:20:43 -08:00
Dan Williams
42e55736f7
Merge branch 'dma40' into dmaengine
2010-10-19 15:34:26 -07:00
Rabin Vincent
51f5d744ed
ste_dma40: remove enum for endianess
...
A bool will suffice. The default is little endian.
Acked-by: Jonas Aaberg <jonas.aberg@stericsson.com >
Signed-off-by: Rabin Vincent <rabin.vincent@stericsson.com >
Signed-off-by: Linus Walleij <linus.walleij@stericsson.com >
Signed-off-by: Dan Williams <dan.j.williams@intel.com >
2010-10-19 15:17:07 -07:00
Rabin Vincent
20a5b6d043
ste_dma40: move mode_opt to separate config
...
Defaults are "basic mode" for physical channels, and "logical source
logical destination" for logical channels.
Acked-by: Jonas Aaberg <jonas.aberg@stericsson.com >
Signed-off-by: Rabin Vincent <rabin.vincent@stericsson.com >
Signed-off-by: Linus Walleij <linus.walleij@stericsson.com >
Signed-off-by: Dan Williams <dan.j.williams@intel.com >
2010-10-19 15:17:07 -07:00
Rabin Vincent
38bdbf020a
ste_dma40: move channel mode to a separate field
...
And keep it logical by default.
Acked-by: Jonas Aaberg <jonas.aberg@stericsson.com >
Signed-off-by: Rabin Vincent <rabin.vincent@stericsson.com >
Signed-off-by: Linus Walleij <linus.walleij@stericsson.com >
Signed-off-by: Dan Williams <dan.j.williams@intel.com >
2010-10-19 15:17:07 -07:00
Rabin Vincent
ce2ca1252b
ste_dma40: add variable to indicate valid dma_cfg
...
Since we want to reduce the amount of required channel
configuration and remove channel_type, don't depend on it
to indicate whether the configuration is valid.
Acked-by: Jonas Aaberg <jonas.aberg@stericsson.com >
Signed-off-by: Rabin Vincent <rabin.vincent@stericsson.com >
Signed-off-by: Linus Walleij <linus.walleij@stericsson.com >
Signed-off-by: Dan Williams <dan.j.williams@intel.com >
2010-10-19 15:17:06 -07:00
Dan Williams
6391987d6f
Merge branches 'dma40', 'pl08x', 'fsldma', 'imx' and 'intel-mid' into dmaengine
2010-10-07 15:19:01 -07:00
Per Forlin
661385f9c3
DMAENGINE: Remove stedma40_set_psize and pre_transfer hook in ste_dma40
...
Remove obsolete pre_transfer hook in stedma40_chan_cfg. The
intent of this hook is merely to handle burst size
compensation for ux500 variant MMCI. Remove obsolete stedma40_set_psize
since it is only called from pre_transfer. DMAEngine device_control
replaces the functionality of stedma40_set_psize.
Signed-off-by: Per Forlin <per.forlin@stericsson.com >
Signed-off-by: Dan Williams <dan.j.williams@intel.com >
2010-10-07 14:56:36 -07:00
Per Forlin
a59670a40b
DMAENGINE: Set burst size for phy and log chans in ste_dma40 dev_control
...
Set burst for physical or logical channels respectively.
Convert the values in dma_cfg to dma reg bits
for physical or logical channels.
Signed-off-by: Per Forlin <per.forlin@stericsson.com >
Signed-off-by: Linus Walleij <linus.walleij@stericsson.com >
Signed-off-by: Dan Williams <dan.j.williams@intel.com >
2010-10-07 14:56:35 -07:00
Rabin Vincent
819504f486
DMAENGINE: ste_dma40: fix resource leaks in error paths.
...
Fix some leaks of allocated descriptors in error paths.
Acked-by: Jonas Aaberg <jonas.aberg@stericsson.com >
Signed-off-by: Rabin Vincent <rabin.vincent@stericsson.com >
Signed-off-by: Linus Walleij <linus.walleij@stericsson.com >
Signed-off-by: Dan Williams <dan.j.williams@intel.com >
2010-10-07 14:54:55 -07:00
Rabin Vincent
a2c15fa4c1
DMAENGINE: ste_dma40: fix desc_get
...
Fix desc_get to alloc a descriptor from the cache if the ones in the
list are waiting for the ack. Also, memzero the descriptor when
allocated from the list to ensure all fields are cleared.
Acked-by: Jonas Aaberg <jonas.aberg@stericsson.com >
Signed-off-by: Rabin Vincent <rabin.vincent@stericsson.com >
Signed-off-by: Linus Walleij <linus.walleij@stericsson.com >
Signed-off-by: Dan Williams <dan.j.williams@intel.com >
2010-10-07 14:54:55 -07:00
Rabin Vincent
c6134c967c
DMAENGINE: ste_dma40: fix clk_get failure path
...
clk_get returns an ERR_PTR.
Acked-by: Jonas Aaberg <jonas.aberg@stericsson.com >
Signed-off-by: Rabin Vincent <rabin.vincent@stericsson.com >
Signed-off-by: Linus Walleij <linus.walleij@stericsson.com >
Signed-off-by: Dan Williams <dan.j.williams@intel.com >
2010-10-07 14:54:55 -07:00
Rabin Vincent
f57b407cfd
DMAENGINE: ste_dma40: fix disabled channels list
...
The value in the array, not the index, specifies the channel to be
disabled.
Acked-by: Jonas Aaberg <jonas.aberg@stericsson.com >
Signed-off-by: Rabin Vincent <rabin.vincent@stericsson.com >
Signed-off-by: Linus Walleij <linus.walleij@stericsson.com >
Signed-off-by: Dan Williams <dan.j.williams@intel.com >
2010-10-07 14:54:54 -07:00
Ira Snyder
0d688662aa
ste_dma40: implement support for scatterlist to scatterlist copy
...
Now that the DMAEngine API has support for scatterlist to scatterlist
copy, implement support for the STE DMA40 DMA controller.
Cc: Linus Walleij <linus.ml.walleij@gmail.com >
Acked-by: Per Fridén <per.friden@stericsson.com >
Signed-off-by: Ira W. Snyder <iws@ovro.caltech.edu >
Signed-off-by: Dan Williams <dan.j.williams@intel.com >
2010-10-07 14:41:41 -07:00
Jonas Aaberg
3ac012af3b
DMAENGINE: ste_dma40: don't pause/resume non-executing channels
...
There is no point in pausing what isn't running.
Signed-off-by: Jonas Aaberg <jonas.aberg@stericsson.com >
Signed-off-by: Linus Walleij <linus.walleij@stericsson.com >
Signed-off-by: Dan Williams <dan.j.williams@intel.com >
2010-09-22 14:53:47 -07:00
Jonas Aaberg
698e4732e7
DMAENGINE: ste_dma40: rewrote LCLA entries allocation code
...
LLI allocation is now done on job level instead of channel level.
Previously the maximum length of a linked job in hw on a logical
channel was 8, since the LLIs where evenly divided. Now only
executing jobs have allocated LLIs which increase the length to
a maximum of 64 links in HW.
Signed-off-by: Jonas Aaberg <jonas.aberg@stericsson.com >
Signed-off-by: Linus Walleij <linus.walleij@stericsson.com >
Signed-off-by: Dan Williams <dan.j.williams@intel.com >
2010-09-22 14:53:46 -07:00
Jonas Aaberg
69f93faa57
DMAENGINE: ste_dma40: fix possible use of uninitialized variable
...
Signed-off-by: Jonas Aaberg <jonas.aberg@stericsson.com >
Signed-off-by: Linus Walleij <linus.walleij@stericsson.com >
Signed-off-by: Dan Williams <dan.j.williams@intel.com >
2010-09-22 14:53:46 -07:00
Jonas Aaberg
9dbfbd35ce
DMAENGINE: ste_dma40: corrected is_paused behavior
...
The handling of pause detection was slightly incorrect.
Signed-off-by: Jonas Aaberg <jonas.aberg@stericsson.com >
Signed-off-by: Linus Walleij <linus.walleij@stericsson.com >
Signed-off-by: Dan Williams <dan.j.williams@intel.com >
2010-09-22 14:53:46 -07:00
Jonas Aaberg
767a9675c4
DMAENGINE: ste_dma40: code clean-up
...
This patch includes non functional code clean up changes,
file header updates and a few magic numbers got defined.
Signed-off-by: Jonas Aaberg <jonas.aberg@stericsson.com >
Signed-off-by: Linus Walleij <linus.walleij@stericsson.com >
Signed-off-by: Dan Williams <dan.j.williams@intel.com >
2010-09-22 14:53:46 -07:00
Jonas Aaberg
aa182ae262
DMAENGINE: ste_dma40: added support for link jobs in hw
...
If a new job is added on a physical channel that already has
a job, the new job is linked in hw to the old job instead of
queueing up the jobs.
Signed-off-by: Jonas Aaberg <jonas.aberg@stericsson.com >
Signed-off-by: Linus Walleij <linus.walleij@stericsson.com >
Signed-off-by: Dan Williams <dan.j.williams@intel.com >
2010-09-22 14:53:45 -07:00
Jonas Aaberg
3ae0267fd5
DMAENGINE: ste_dma40: removed a few magic numbers
...
Make sure to extract the revision field explicitly and document
what bits are being accessed here without magic numbers.
Signed-off-by: Jonas Aaberg <jonas.aberg@stericsson.com >
Signed-off-by: Linus Walleij <linus.walleij@stericsson.com >
Signed-off-by: Dan Williams <dan.j.williams@intel.com >
2010-09-22 14:53:45 -07:00
Jonas Aaberg
0246e77b4d
DMAENGINE: ste_dma40: fix bug related to callback handling
...
The callback got called even when it was not supposed to. Also
removed some not needed interrupt trigger on/off code.
Signed-off-by: Jonas Aaberg <jonas.aberg@stericsson.com >
Signed-off-by: Linus Walleij <linus.walleij@stericsson.com >
Signed-off-by: Dan Williams <dan.j.williams@intel.com >
2010-09-22 14:53:45 -07:00
Jonas Aaberg
b55912c66a
DMAENGINE: ste_dma40: Code clean-up and removed an unneeded suspend request
...
This patch cleans up some code and removes a suspend request that was pointless
since the hw was never configured nor running when it was called.
Signed-off-by: Jonas Aaberg <jonas.aberg@stericsson.com >
Signed-off-by: Linus Walleij <linus.walleij@stericsson.com >
Signed-off-by: Dan Williams <dan.j.williams@intel.com >
2010-09-22 14:53:45 -07:00
Jonas Aaberg
1b00348d5d
DMAENGINE: ste_dma40: No need reading, masking and setting a set register
...
Removes an unnecessary register read and a few lines of code.
Signed-off-by: Jonas Aaberg <jonas.aberg@stericsson.com >
Signed-off-by: Linus Walleij <linus.walleij@stericsson.com >
Signed-off-by: Dan Williams <dan.j.williams@intel.com >
2010-09-22 14:53:45 -07:00
Jonas Aaberg
be8cb7dfd9
DMAENGINE: ste_dma40: Fix failed to restart logical channel bug
...
A transfer that runs in the different direction on the same
channel will now be resumed when the other is suspend/stopped.
Signed-off-by: Jonas Aaberg <jonas.aberg@stericsson.com >
Signed-off-by: Linus Walleij <linus.walleij@stericsson.com >
Signed-off-by: Dan Williams <dan.j.williams@intel.com >
2010-09-22 14:53:44 -07:00
Linus Walleij
0747c7bae5
DMAENGINE: ste_dma40: config checks
...
Added various configuration checks.
Signed-off-by: Jonas Aaberg <jonas.aberg@stericsson.com >
Signed-off-by: Linus Walleij <linus.walleij@stericsson.com >
Signed-off-by: Dan Williams <dan.j.williams@intel.com >
2010-09-22 14:53:44 -07:00
Linus Walleij
95e1400fa1
DMAENGINE: add runtime slave config to DMA40 v3
...
This extends the DMA engine driver for the DMA40 used in the
U8500 platform with the generic runtime slave configuration
interface.
Signed-off-by: Linus Walleij <linus.walleij@stericsson.com >
Signed-off-by: Dan Williams <dan.j.williams@intel.com >
2010-08-04 14:14:05 -07:00
Linus Walleij
f41855929c
DMAENGINE: ste_dma40: support older silicon
...
This makes sure the DMA40 driver will also work on the oldest
silicon revisions that have the on-chip memory on another location
in the DB8500 and also requires explicit suspend before starting
or resuming a logical channel.
Signed-off-by: Linus Walleij <linus.walleij@stericsson.com >
[added parenthesis to the definition of U8500_DMA_LCPA_BASE_ED]
Signed-off-by: Dan Williams <dan.j.williams@intel.com >
2010-06-22 18:06:42 -07:00
Jonas Aaberg
6b7acd8442
DMAENGINE: ste_dma40: support disabling physical channels
...
This makes it possible to disable physical channels.
Signed-off-by: Jonas Aaberg <jonas.aberg@stericsson.com >
Signed-off-by: Linus Walleij <linus.walleij@stericsson.com >
Signed-off-by: Dan Williams <dan.j.williams@intel.com >
2010-06-22 18:01:57 -07:00
Jonas Aaberg
d181b3a8cb
DMAENGINE: ste_dma40: fix suspend bug
...
This fixes a bug when suspending channels: first make the checks,
then suspend the channel, not the other way around.
Signed-off-by: Jonas Aaberg <jonas.aberg@stericsson.com >
Signed-off-by: Linus Walleij <linus.walleij@stericsson.com >
Signed-off-by: Dan Williams <dan.j.williams@intel.com >
2010-06-22 18:01:56 -07:00
Linus Walleij
508849ade2
DMAENGINE: ste_dma40: allocate LCLA dynamically
...
Switch to allocating LCLA in memory instead of having a fixed
address.
Signed-off-by: Jonas Aaberg <jonas.aberg@stericsson.com >
Signed-off-by: Linus Walleij <linus.walleij@stericsson.com >
Signed-off-by: Dan Williams <dan.j.williams@intel.com >
2010-06-22 18:01:55 -07:00
Jonas Aaberg
1d392a7ba4
DMAENGINE: ste_dma40: no premature stop
...
Correct bug that could cause paused channels to stop.
Signed-off-by: Jonas Aaberg <jonas.aberg@stericsson.com >
Signed-off-by: Linus Walleij <linus.walleij@stericsson.com >
Signed-off-by: Dan Williams <dan.j.williams@intel.com >
2010-06-22 18:01:55 -07:00
Jonas Aaberg
2123a61e17
DMAENGINE: ste_dma40: interrupts only on dst
...
We don't want interrupts when the source is done, only when
the destination is done and everything is complete at the
recieveing end of a transfer.
Signed-off-by: Jonas Aaberg <jonas.aberg@stericsson.com >
Signed-off-by: Linus Walleij <linus.walleij@stericsson.com >
Signed-off-by: Dan Williams <dan.j.williams@intel.com >
2010-06-22 18:01:55 -07:00
Jonas Aaberg
0c32269d81
DMAENGINE: ste_dma40: avoid doing unnessecary suspend
...
Avoid doing unnessecary suspend when modifying logical channels.
Signed-off-by: Jonas Aaberg <jonas.aberg@stericsson.com >
Signed-off-by: Linus Walleij <linus.walleij@stericsson.com >
Signed-off-by: Dan Williams <dan.j.williams@intel.com >
2010-06-22 18:01:54 -07:00
Jonas Aaberg
2292b880e4
DMAENGINE: ste_dma40: lock fix
...
Fix up some locking issues found by enabling lock debugging.
Signed-off-by: Jonas Aaberg <jonas.aberg@stericsson.com >
Signed-off-by: Linus Walleij <linus.walleij@stericsson.com >
Signed-off-by: Dan Williams <dan.j.williams@intel.com >
2010-06-22 18:01:54 -07:00
Jonas Aaberg
0d0f6b8bbb
DMAENGINE: ste_dma40: deny ops on non-alloc channels
...
Added checks to deny operating on none-allocated channels.
Signed-off-by: Jonas Aaberg <jonas.aberg@stericsson.com >
Signed-off-by: Linus Walleij <linus.walleij@stericsson.com >
Signed-off-by: Dan Williams <dan.j.williams@intel.com >
2010-06-22 18:01:54 -07:00
Jonas Aaberg
2a6143407d
DMAENGINE: ste_dma40: various cosmetic clean-ups
...
This cleans up some extra newlines, removes some code duplication
and moves the code to comply better with checkpatch.
Signed-off-by: Jonas Aaberg <jonas.aberg@stericsson.com >
Signed-off-by: Linus Walleij <linus.walleij@stericsson.com >
Signed-off-by: Dan Williams <dan.j.williams@intel.com >
2010-06-22 18:01:54 -07:00
Jonas Aaberg
ff0b12baa5
DMAENGINE: ste_dma40: improve allocation error handling
...
Better error handling when channel allocation fails.
Signed-off-by: Jonas Aaberg <jonas.aberg@stericsson.com >
Signed-off-by: Linus Walleij <linus.walleij@stericsson.com >
Signed-off-by: Dan Williams <dan.j.williams@intel.com >
2010-06-22 18:01:54 -07:00
Jonas Aaberg
c675b1b424
DMAENGINE: ste_dma40: use kmem cache
...
Use kmem cache instead of own cache, reducing code duplication
and bug sources.
Signed-off-by: Jonas Aaberg <jonas.aberg@stericsson.com >
Signed-off-by: Linus Walleij <linus.walleij@stericsson.com >
Signed-off-by: Dan Williams <dan.j.williams@intel.com >
2010-06-22 18:01:53 -07:00
Per Friden
a8be8627a3
DMAENGINE: ste_dma40: moved freeing of client owned desc
...
fixed typo and moved freeing of client owned desc to free_dma.
Signed-off-by: Jonas Aaberg <jonas.aberg@stericsson.com >
Signed-off-by: Linus Walleij <linus.walleij@stericsson.com >
Signed-off-by: Dan Williams <dan.j.williams@intel.com >
2010-06-22 18:01:53 -07:00
Linus Walleij
ef1872ec65
DMAENGINE: ste_dma40: only write phy channel config first time
...
We only need to write the configuration to a physical channel if
it is free, else it is already written.
Signed-off-by: Jonas Aaberg <jonas.aberg@stericsson.com >
Signed-off-by: Linus Walleij <linus.walleij@stericsson.com >
Signed-off-by: Dan Williams <dan.j.williams@intel.com >
2010-06-22 18:01:53 -07:00
Per Friden
941b77a3b6
DMAENGINE: ste_dma40: fixed lli_max=1 issue
...
Fixed lli_max=1 issue in case of full lcla, currently this case
is not properly handled.
Signed-off-by: Jonas Aaberg <jonas.aberg@stericsson.com >
Signed-off-by: Linus Walleij <linus.walleij@stericsson.com >
Signed-off-by: Dan Williams <dan.j.williams@intel.com >
2010-06-22 18:01:53 -07:00
Linus Walleij
058276303d
DMAENGINE: extend the control command to include an arg
...
This adds an argument to the DMAengine control function, so that
we can later provide control commands that need some external data
passed in through an argument akin to the ioctl() operation
prototype.
[dan.j.williams@intel.com: fix up some missed conversions]
Signed-off-by: Linus Walleij <linus.walleij@stericsson.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
2010-05-17 16:30:42 -07:00
Marcin Mielczarczyk
4aed79b281
DMAENGINE: DMA40 fix for allocation of logical channel 0
...
Fix for allocation failure of logical channel when event line
happens to be number 0.
Signed-off-by: Marcin Mielczarczyk <marcin.mielczarczyk@tieto.com >
Signed-off-by: Linus Walleij <linus.walleij@stericsson.com >
Signed-off-by: Dan Williams <dan.j.williams@intel.com >
2010-05-17 15:45:06 -07:00
Jonas Aaberg
a5ebca4769
DMAENGINE: DMA40 support paused channel status
...
Support determining whether a channel is paused or
not using the status function.
Signed-off-by: Jonas Aaberg <jonas.aberg@stericsson.com >
Signed-off-by: Linus Walleij <linus.walleij@stericsson.com >
Signed-off-by: Dan Williams <dan.j.williams@intel.com >
2010-05-17 15:45:03 -07:00
Linus Walleij
8d318a50b3
DMAENGINE: Support for ST-Ericssons DMA40 block v3
...
This is a straightforward driver for the ST-Ericsson DMA40 DMA
controller found in U8500, implemented akin to the existing
COH 901 318 driver.
Signed-off-by: Linus Walleij <linus.walleij@stericsson.com >
Acked-by: Srinidh Kasagar <srinidhi.kasagar@stericsson.com >
Cc: STEricsson_nomadik_linux@list.st.com
Cc: Alessandro Rubini <rubini@unipv.it >
Signed-off-by: Andrew Morton <akpm@linux-foundation.org >
Signed-off-by: Dan Williams <dan.j.williams@intel.com >
2010-04-14 14:49:20 -07:00