2019-05-19 13:07:45 +01:00
|
|
|
|
2006-05-23 17:18:44 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2007-10-16 01:27:42 -07:00
|
|
|
|
2007-11-28 16:21:43 -08:00
|
|
|
|
2009-06-03 14:22:28 -07:00
|
|
|
|
2007-10-16 01:27:42 -07:00
|
|
|
|
2007-11-28 16:21:43 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2008-06-27 01:21:11 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2007-10-16 01:27:42 -07:00
|
|
|
|
2010-02-09 22:34:54 +01:00
|
|
|
|
2019-11-21 04:19:08 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-02-09 22:34:54 +01:00
|
|
|
|
|
|
|
|
|
2019-11-21 04:19:08 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-02-09 22:34:54 +01:00
|
|
|
|
|
|
|
|
|
2007-10-16 01:27:42 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-11 14:04:21 -07:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
2014-07-11 14:04:21 -07:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
2009-09-08 17:42:51 -07:00
|
|
|
|
|
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-07-07 14:11:19 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-09-28 15:57:37 +02:00
|
|
|
|
|
|
|
|
|
2012-10-23 13:01:54 -07:00
|
|
|
|
2010-09-28 15:57:37 +02:00
|
|
|
|
2012-05-26 14:09:53 +01:00
|
|
|
|
2010-09-28 15:57:37 +02:00
|
|
|
|
2017-05-20 23:42:53 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-09-28 15:57:37 +02:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2007-10-16 01:27:42 -07:00
|
|
|
|
2013-12-09 10:33:16 -08:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
2010-10-07 16:44:50 -07:00
|
|
|
|
2007-10-16 01:27:42 -07:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
2007-10-16 01:27:42 -07:00
|
|
|
|
2009-07-03 19:24:33 +02:00
|
|
|
|
|
|
|
|
|
2012-03-15 11:31:58 +01:00
|
|
|
|
2009-07-03 19:24:33 +02:00
|
|
|
|
|
|
|
|
|
2012-03-15 11:31:58 +01:00
|
|
|
|
2007-10-16 01:27:42 -07:00
|
|
|
|
2014-10-22 17:22:18 +02:00
|
|
|
|
|
|
|
|
|
2014-11-13 11:52:39 +01:00
|
|
|
|
2014-10-22 17:22:18 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2007-10-16 01:27:42 -07:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
2019-02-28 14:39:43 +02:00
|
|
|
|
2007-10-16 01:27:42 -07:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
2019-06-06 13:45:50 +03:00
|
|
|
|
2007-10-16 01:27:42 -07:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2006-05-23 17:18:44 -07:00
|
|
|
|
2017-05-15 10:34:54 +05:30
|
|
|
|
|
|
|
|
|
2017-05-18 15:25:25 +02:00
|
|
|
|
|
|
|
|
|
2017-05-15 10:34:54 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-10-03 10:53:00 +05:30
|
|
|
|
2017-05-15 10:34:54 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-09-02 15:29:49 +05:30
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-08-29 23:32:48 +02:00
|
|
|
|
2015-07-27 18:04:02 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-07-27 18:04:02 +03:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
2016-09-02 15:31:42 +05:30
|
|
|
|
2009-07-03 19:24:33 +02:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
2009-07-03 19:24:33 +02:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-07-03 19:24:33 +02:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
2015-09-04 11:10:18 -07:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
2014-10-22 17:22:18 +02:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
2014-10-22 17:22:18 +02:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-01-29 10:33:29 +08:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-03-06 14:46:14 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
2016-09-02 15:38:43 +05:30
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-10-22 17:22:18 +02:00
|
|
|
|
2008-03-01 07:42:48 -07:00
|
|
|
|
2013-09-26 17:33:43 +08:00
|
|
|
|
2008-09-26 17:00:11 -07:00
|
|
|
|
2008-03-01 07:42:48 -07:00
|
|
|
|
2010-10-07 16:44:50 -07:00
|
|
|
|
2008-03-01 07:42:48 -07:00
|
|
|
|
2013-09-26 17:33:43 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2008-03-01 07:42:48 -07:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-10-30 10:36:00 +08:00
|
|
|
|
2019-11-21 04:19:08 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-10-30 10:36:00 +08:00
|
|
|
|
|
|
|
|
|
2015-03-03 14:26:22 +08:00
|
|
|
|
2019-11-21 04:19:08 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-03-03 14:26:22 +08:00
|
|
|
|
|
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-02-05 03:42:52 +00:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-10-12 17:52:45 +02:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
2011-08-24 08:41:09 +02:00
|
|
|
|
2008-07-08 11:58:36 -07:00
|
|
|
|
i.MX31: Image Processing Unit DMA and IRQ drivers
i.MX3x SoCs contain an Image Processing Unit, consisting of a Control
Module (CM), Display Interface (DI), Synchronous Display Controller (SDC),
Asynchronous Display Controller (ADC), Image Converter (IC), Post-Filter
(PF), Camera Sensor Interface (CSI), and an Image DMA Controller (IDMAC).
CM contains, among other blocks, an Interrupt Generator (IG) and a Clock
and Reset Control Unit (CRCU). This driver serves IDMAC and IG. They are
supported over dmaengine and irq-chip APIs respectively.
IDMAC is a specialised DMA controller, its DMA channels cannot be used for
general-purpose operations, even though it might be possible to configure
a memory-to-memory channel for memcpy operation. This driver will not work
with generic dmaengine clients, clients, wishing to use it must use
respective wrapper structures, they also must specify which channels they
require, as channels are hard-wired to specific IPU functions.
Acked-by: Sascha Hauer <s.hauer@pengutronix.de>
Signed-off-by: Guennadi Liakhovetski <lg@denx.de>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
2009-01-19 15:36:21 -07:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
2008-07-08 11:58:36 -07:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
2011-08-24 08:41:09 +02:00
|
|
|
|
i.MX31: Image Processing Unit DMA and IRQ drivers
i.MX3x SoCs contain an Image Processing Unit, consisting of a Control
Module (CM), Display Interface (DI), Synchronous Display Controller (SDC),
Asynchronous Display Controller (ADC), Image Converter (IC), Post-Filter
(PF), Camera Sensor Interface (CSI), and an Image DMA Controller (IDMAC).
CM contains, among other blocks, an Interrupt Generator (IG) and a Clock
and Reset Control Unit (CRCU). This driver serves IDMAC and IG. They are
supported over dmaengine and irq-chip APIs respectively.
IDMAC is a specialised DMA controller, its DMA channels cannot be used for
general-purpose operations, even though it might be possible to configure
a memory-to-memory channel for memcpy operation. This driver will not work
with generic dmaengine clients, clients, wishing to use it must use
respective wrapper structures, they also must specify which channels they
require, as channels are hard-wired to specific IPU functions.
Acked-by: Sascha Hauer <s.hauer@pengutronix.de>
Signed-off-by: Guennadi Liakhovetski <lg@denx.de>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
2009-01-19 15:36:21 -07:00
|
|
|
|
2018-06-20 00:57:00 +08:00
|
|
|
|
i.MX31: Image Processing Unit DMA and IRQ drivers
i.MX3x SoCs contain an Image Processing Unit, consisting of a Control
Module (CM), Display Interface (DI), Synchronous Display Controller (SDC),
Asynchronous Display Controller (ADC), Image Converter (IC), Post-Filter
(PF), Camera Sensor Interface (CSI), and an Image DMA Controller (IDMAC).
CM contains, among other blocks, an Interrupt Generator (IG) and a Clock
and Reset Control Unit (CRCU). This driver serves IDMAC and IG. They are
supported over dmaengine and irq-chip APIs respectively.
IDMAC is a specialised DMA controller, its DMA channels cannot be used for
general-purpose operations, even though it might be possible to configure
a memory-to-memory channel for memcpy operation. This driver will not work
with generic dmaengine clients, clients, wishing to use it must use
respective wrapper structures, they also must specify which channels they
require, as channels are hard-wired to specific IPU functions.
Acked-by: Sascha Hauer <s.hauer@pengutronix.de>
Signed-off-by: Guennadi Liakhovetski <lg@denx.de>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
2009-01-19 15:36:21 -07:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
i.MX31: Image Processing Unit DMA and IRQ drivers
i.MX3x SoCs contain an Image Processing Unit, consisting of a Control
Module (CM), Display Interface (DI), Synchronous Display Controller (SDC),
Asynchronous Display Controller (ADC), Image Converter (IC), Post-Filter
(PF), Camera Sensor Interface (CSI), and an Image DMA Controller (IDMAC).
CM contains, among other blocks, an Interrupt Generator (IG) and a Clock
and Reset Control Unit (CRCU). This driver serves IDMAC and IG. They are
supported over dmaengine and irq-chip APIs respectively.
IDMAC is a specialised DMA controller, its DMA channels cannot be used for
general-purpose operations, even though it might be possible to configure
a memory-to-memory channel for memcpy operation. This driver will not work
with generic dmaengine clients, clients, wishing to use it must use
respective wrapper structures, they also must specify which channels they
require, as channels are hard-wired to specific IPU functions.
Acked-by: Sascha Hauer <s.hauer@pengutronix.de>
Signed-off-by: Guennadi Liakhovetski <lg@denx.de>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
2009-01-19 15:36:21 -07:00
|
|
|
|
2015-09-21 22:18:45 +05:30
|
|
|
|
2015-09-04 11:10:18 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
i.MX31: Image Processing Unit DMA and IRQ drivers
i.MX3x SoCs contain an Image Processing Unit, consisting of a Control
Module (CM), Display Interface (DI), Synchronous Display Controller (SDC),
Asynchronous Display Controller (ADC), Image Converter (IC), Post-Filter
(PF), Camera Sensor Interface (CSI), and an Image DMA Controller (IDMAC).
CM contains, among other blocks, an Interrupt Generator (IG) and a Clock
and Reset Control Unit (CRCU). This driver serves IDMAC and IG. They are
supported over dmaengine and irq-chip APIs respectively.
IDMAC is a specialised DMA controller, its DMA channels cannot be used for
general-purpose operations, even though it might be possible to configure
a memory-to-memory channel for memcpy operation. This driver will not work
with generic dmaengine clients, clients, wishing to use it must use
respective wrapper structures, they also must specify which channels they
require, as channels are hard-wired to specific IPU functions.
Acked-by: Sascha Hauer <s.hauer@pengutronix.de>
Signed-off-by: Guennadi Liakhovetski <lg@denx.de>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
2009-01-19 15:36:21 -07:00
|
|
|
|
2015-09-04 11:10:18 -07:00
|
|
|
|
|
|
|
|
|
i.MX31: Image Processing Unit DMA and IRQ drivers
i.MX3x SoCs contain an Image Processing Unit, consisting of a Control
Module (CM), Display Interface (DI), Synchronous Display Controller (SDC),
Asynchronous Display Controller (ADC), Image Converter (IC), Post-Filter
(PF), Camera Sensor Interface (CSI), and an Image DMA Controller (IDMAC).
CM contains, among other blocks, an Interrupt Generator (IG) and a Clock
and Reset Control Unit (CRCU). This driver serves IDMAC and IG. They are
supported over dmaengine and irq-chip APIs respectively.
IDMAC is a specialised DMA controller, its DMA channels cannot be used for
general-purpose operations, even though it might be possible to configure
a memory-to-memory channel for memcpy operation. This driver will not work
with generic dmaengine clients, clients, wishing to use it must use
respective wrapper structures, they also must specify which channels they
require, as channels are hard-wired to specific IPU functions.
Acked-by: Sascha Hauer <s.hauer@pengutronix.de>
Signed-off-by: Guennadi Liakhovetski <lg@denx.de>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
2009-01-19 15:36:21 -07:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dmaengine: pxa: add pxa dmaengine driver
This is a new driver for pxa SoCs, which is also compatible with the former
mmp_pdma.
The rationale behind a new driver (as opposed to incremental patching) was :
- the new driver relies on virt-dma, which obsoletes all the internal
structures of mmp_pdma (sw_desc, hw_desc, ...), and by consequence all the
functions
- mmp_pdma allocates dma coherent descriptors containing not only hardware
descriptors but linked list information
The new driver only puts the dma hardware descriptors (ie. 4 u32) into the
dma pool allocated memory. This changes completely the way descriptors are
handled
- the architecture behind the interrupt/tasklet management was rewritten to be
more conforming to virt-dma
- the buffers alignment is handled differently
The former driver assumed that the DMA channel stopped between each
descriptor. The new one chains descriptors to let the channel running. This
is a necessary guarantee for real-time high bandwidth usecases such as video
capture on "old" architectures such as pxa.
- hot chaining / cold chaining / no chaining
Whenever possible, submitting a descriptor "hot chains" it to a running
channel. There is still no guarantee that the descriptor will be issued, as
the channel might be stopped just before the descriptor is submitted. Yet
this allows to submit several video buffers, and resubmit a buffer while
another is under handling.
As before, dma_async_issue_pending() is the only guarantee to have all the
buffers issued.
When an alignment issue is detected (ie. one address in a descriptor is not
a multiple of 8), if the already running channel is in "aligned mode", the
channel will stop, and restarted in "misaligned mode" to finished the issued
list.
- descriptors reusing
A submitted, issued and completed descriptor can be reused, ie resubmitted if
it was prepared with the proper flag (DMA_PREP_ACK). Only a channel
resources release will in this case release that buffer.
This allows a rolling ring of buffers to be reused, where there are several
thousands of hardware descriptors used (video buffer for example).
Additionally, a set of more casual features is introduced :
- debugging traces
- lockless way to know if a descriptor is terminated or not
The driver was tested on zylonite board (pxa3xx) and mioa701 (pxa27x),
with dmatest, pxa_camera and pxamci.
Signed-off-by: Robert Jarzmik <robert.jarzmik@free.fr>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
2015-05-25 23:29:20 +02:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
dmaengine: pxa: add pxa dmaengine driver
This is a new driver for pxa SoCs, which is also compatible with the former
mmp_pdma.
The rationale behind a new driver (as opposed to incremental patching) was :
- the new driver relies on virt-dma, which obsoletes all the internal
structures of mmp_pdma (sw_desc, hw_desc, ...), and by consequence all the
functions
- mmp_pdma allocates dma coherent descriptors containing not only hardware
descriptors but linked list information
The new driver only puts the dma hardware descriptors (ie. 4 u32) into the
dma pool allocated memory. This changes completely the way descriptors are
handled
- the architecture behind the interrupt/tasklet management was rewritten to be
more conforming to virt-dma
- the buffers alignment is handled differently
The former driver assumed that the DMA channel stopped between each
descriptor. The new one chains descriptors to let the channel running. This
is a necessary guarantee for real-time high bandwidth usecases such as video
capture on "old" architectures such as pxa.
- hot chaining / cold chaining / no chaining
Whenever possible, submitting a descriptor "hot chains" it to a running
channel. There is still no guarantee that the descriptor will be issued, as
the channel might be stopped just before the descriptor is submitted. Yet
this allows to submit several video buffers, and resubmit a buffer while
another is under handling.
As before, dma_async_issue_pending() is the only guarantee to have all the
buffers issued.
When an alignment issue is detected (ie. one address in a descriptor is not
a multiple of 8), if the already running channel is in "aligned mode", the
channel will stop, and restarted in "misaligned mode" to finished the issued
list.
- descriptors reusing
A submitted, issued and completed descriptor can be reused, ie resubmitted if
it was prepared with the proper flag (DMA_PREP_ACK). Only a channel
resources release will in this case release that buffer.
This allows a rolling ring of buffers to be reused, where there are several
thousands of hardware descriptors used (video buffer for example).
Additionally, a set of more casual features is introduced :
- debugging traces
- lockless way to know if a descriptor is terminated or not
The driver was tested on zylonite board (pxa3xx) and mioa701 (pxa27x),
with dmatest, pxa_camera and pxamci.
Signed-off-by: Robert Jarzmik <robert.jarzmik@free.fr>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
2015-05-25 23:29:20 +02:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
dmaengine: pxa: add pxa dmaengine driver
This is a new driver for pxa SoCs, which is also compatible with the former
mmp_pdma.
The rationale behind a new driver (as opposed to incremental patching) was :
- the new driver relies on virt-dma, which obsoletes all the internal
structures of mmp_pdma (sw_desc, hw_desc, ...), and by consequence all the
functions
- mmp_pdma allocates dma coherent descriptors containing not only hardware
descriptors but linked list information
The new driver only puts the dma hardware descriptors (ie. 4 u32) into the
dma pool allocated memory. This changes completely the way descriptors are
handled
- the architecture behind the interrupt/tasklet management was rewritten to be
more conforming to virt-dma
- the buffers alignment is handled differently
The former driver assumed that the DMA channel stopped between each
descriptor. The new one chains descriptors to let the channel running. This
is a necessary guarantee for real-time high bandwidth usecases such as video
capture on "old" architectures such as pxa.
- hot chaining / cold chaining / no chaining
Whenever possible, submitting a descriptor "hot chains" it to a running
channel. There is still no guarantee that the descriptor will be issued, as
the channel might be stopped just before the descriptor is submitted. Yet
this allows to submit several video buffers, and resubmit a buffer while
another is under handling.
As before, dma_async_issue_pending() is the only guarantee to have all the
buffers issued.
When an alignment issue is detected (ie. one address in a descriptor is not
a multiple of 8), if the already running channel is in "aligned mode", the
channel will stop, and restarted in "misaligned mode" to finished the issued
list.
- descriptors reusing
A submitted, issued and completed descriptor can be reused, ie resubmitted if
it was prepared with the proper flag (DMA_PREP_ACK). Only a channel
resources release will in this case release that buffer.
This allows a rolling ring of buffers to be reused, where there are several
thousands of hardware descriptors used (video buffer for example).
Additionally, a set of more casual features is introduced :
- debugging traces
- lockless way to know if a descriptor is terminated or not
The driver was tested on zylonite board (pxa3xx) and mioa701 (pxa27x),
with dmatest, pxa_camera and pxamci.
Signed-off-by: Robert Jarzmik <robert.jarzmik@free.fr>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
2015-05-25 23:29:20 +02:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2019-08-09 18:33:18 +02:00
|
|
|
|
2019-09-17 19:04:40 -07:00
|
|
|
|
2009-04-23 00:40:30 +09:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
2009-04-23 00:40:30 +09:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
2009-04-23 00:40:30 +09:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-06-06 10:55:27 +05:30
|
|
|
|
|
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-06-06 10:55:27 +05:30
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-08-29 10:30:53 -07:00
|
|
|
|
2013-10-08 06:42:10 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
2013-10-08 06:42:10 +09:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-09-07 03:26:23 +00:00
|
|
|
|
2018-08-19 19:27:16 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2019-10-14 22:33:59 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2019-10-14 22:32:19 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
2016-09-02 15:55:56 +05:30
|
|
|
|
2009-11-19 19:49:17 +01:00
|
|
|
|
|
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
2009-11-19 19:49:17 +01:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
2016-09-02 15:57:09 +05:30
|
|
|
|
2010-03-30 15:33:42 +02:00
|
|
|
|
2016-09-02 15:57:09 +05:30
|
|
|
|
2016-10-06 17:59:53 -04:00
|
|
|
|
2010-03-30 15:33:42 +02:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-03-30 15:33:42 +02:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-12-11 21:24:44 -07:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
2009-12-11 21:24:44 -07:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-12-11 21:24:44 -07:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-03-25 19:44:21 +01:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
2010-03-25 19:44:21 +01:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
2016-04-29 09:49:08 +02:00
|
|
|
|
2011-10-27 19:22:39 -07:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-10-27 19:22:39 -07:00
|
|
|
|
2016-06-16 14:28:34 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
2017-06-08 19:46:23 -03:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
2011-10-27 19:22:39 -07:00
|
|
|
|
|
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
2017-06-16 11:58:46 -03:00
|
|
|
|
2011-10-27 19:22:39 -07:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-08-22 21:09:34 -04:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
2012-08-22 21:09:34 -04:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
2015-04-09 12:35:49 +03:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-12-11 21:24:44 -07:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
2010-05-23 20:28:19 -07:00
|
|
|
|
2018-07-26 10:36:57 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-07-30 16:23:03 +08:00
|
|
|
|
2011-11-17 16:14:23 +09:00
|
|
|
|
2014-05-16 16:17:37 +02:00
|
|
|
|
2010-07-30 16:23:03 +08:00
|
|
|
|
|
|
|
|
|
2011-01-05 17:43:52 +09:00
|
|
|
|
|
|
|
|
|
2011-11-17 16:14:22 +09:00
|
|
|
|
2011-11-17 16:14:23 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-07-30 16:23:03 +08:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
2010-09-30 13:56:34 +00:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
2010-09-30 13:56:34 +00:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-09-30 13:56:34 +00:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-10-06 10:25:55 +02:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
2010-10-06 10:25:55 +02:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-10-06 10:25:55 +02:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-02-27 00:47:42 +08:00
|
|
|
|
|
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
2011-02-27 00:47:42 +08:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-05-29 13:10:02 +03:00
|
|
|
|
|
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
2011-05-29 13:10:02 +03:00
|
|
|
|
2016-10-18 10:39:11 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-11-17 15:23:01 +05:30
|
|
|
|
2016-10-18 10:39:11 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-10-16 15:59:14 +02:00
|
|
|
|
|
|
|
|
|
2016-09-02 15:57:51 +05:30
|
|
|
|
2015-10-16 15:59:14 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-12-13 14:40:44 +01:00
|
|
|
|
2015-10-16 15:59:14 +02:00
|
|
|
|
|
|
|
|
|
2017-09-22 09:31:30 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-09-28 17:36:41 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-10-11 16:00:04 +02:00
|
|
|
|
2017-09-28 17:36:41 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-10-24 13:47:50 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
2015-11-18 22:31:11 +01:00
|
|
|
|
2016-09-02 16:00:41 +05:30
|
|
|
|
DMA: sa11x0: add SA-11x0 DMA driver
Add support for the SA-11x0 DMA driver, which replaces the private
API version in arch/arm/mach-sa1100/dma.c.
We model this as a set of virtual DMA channels, one for each request
signal, and assign the virtual DMA channel to a physical DMA channel
when there is work to be done. This allows DMA users to claim their
channels, and hold them while not in use, without affecting the
availability of the physical channels.
Another advantage over this approach, compared to the private version,
is that a channel can be reconfigured on the fly without having to
release and re-request it - which for the IrDA driver, allows us to
use DMA for SIR mode transmit without eating up three physical
channels. As IrDA is half-duplex, we actually only need one physical
channel, and this architecture allows us to achieve that.
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2012-01-09 21:44:07 +00:00
|
|
|
|
2012-04-13 12:07:23 +01:00
|
|
|
|
DMA: sa11x0: add SA-11x0 DMA driver
Add support for the SA-11x0 DMA driver, which replaces the private
API version in arch/arm/mach-sa1100/dma.c.
We model this as a set of virtual DMA channels, one for each request
signal, and assign the virtual DMA channel to a physical DMA channel
when there is work to be done. This allows DMA users to claim their
channels, and hold them while not in use, without affecting the
availability of the physical channels.
Another advantage over this approach, compared to the private version,
is that a channel can be reconfigured on the fly without having to
release and re-request it - which for the IrDA driver, allows us to
use DMA for SIR mode transmit without eating up three physical
channels. As IrDA is half-duplex, we actually only need one physical
channel, and this architecture allows us to achieve that.
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2012-01-09 21:44:07 +00:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DMA: sa11x0: add SA-11x0 DMA driver
Add support for the SA-11x0 DMA driver, which replaces the private
API version in arch/arm/mach-sa1100/dma.c.
We model this as a set of virtual DMA channels, one for each request
signal, and assign the virtual DMA channel to a physical DMA channel
when there is work to be done. This allows DMA users to claim their
channels, and hold them while not in use, without affecting the
availability of the physical channels.
Another advantage over this approach, compared to the private version,
is that a channel can be reconfigured on the fly without having to
release and re-request it - which for the IrDA driver, allows us to
use DMA for SIR mode transmit without eating up three physical
channels. As IrDA is half-duplex, we actually only need one physical
channel, and this architecture allows us to achieve that.
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2012-01-09 21:44:07 +00:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-06-15 11:04:08 +08:00
|
|
|
|
|
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
2012-06-15 11:04:08 +08:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-04-13 12:10:24 +01:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-04-13 12:10:24 +01:00
|
|
|
|
2016-05-12 18:02:23 +01:00
|
|
|
|
2016-10-22 18:25:10 -04:00
|
|
|
|
2019-06-20 21:24:19 +05:30
|
|
|
|
2016-05-12 18:02:23 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
2016-09-02 16:07:05 +05:30
|
|
|
|
2014-01-06 20:18:24 +01:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
2014-01-06 20:18:24 +01:00
|
|
|
|
2018-10-12 01:41:03 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-02-18 10:17:12 +08:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
2014-02-18 10:17:12 +08:00
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
2014-01-17 09:46:05 +01:00
|
|
|
|
2016-06-24 10:51:25 +05:30
|
|
|
|
|
|
|
|
|
2016-04-06 10:38:08 +05:30
|
|
|
|
2014-04-23 20:23:26 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-06-24 10:51:25 +05:30
|
|
|
|
2014-04-23 20:23:26 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-06-24 10:51:25 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2019-10-22 22:30:22 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-04-23 20:23:26 +05:30
|
|
|
|
2016-07-01 17:07:06 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-04-23 20:23:26 +05:30
|
|
|
|
2015-05-05 22:06:08 +08:00
|
|
|
|
2016-12-15 22:03:35 +08:00
|
|
|
|
2016-09-02 16:10:07 +05:30
|
|
|
|
2014-12-11 14:59:17 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-12-15 22:03:35 +08:00
|
|
|
|
2014-12-11 14:59:17 -08:00
|
|
|
|
2015-03-18 19:17:34 +05:30
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
|
|
|
|
|
2006-05-23 17:18:44 -07:00
|
|
|
|
2018-03-15 15:40:36 +08:00
|
|
|
|
|
|
|
|
|
2016-02-04 23:34:32 -05:00
|
|
|
|
|
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
2012-04-13 12:07:23 +01:00
|
|
|
|
dmaengine: Add Synopsys eDMA IP core driver
Add Synopsys PCIe Endpoint eDMA IP core driver to kernel.
This IP is generally distributed with Synopsys PCIe Endpoint IP (depends
of the use and licensing agreement).
This core driver, initializes and configures the eDMA IP using vma-helpers
functions and dma-engine subsystem.
This driver can be compile as built-in or external module in kernel.
To enable this driver just select DW_EDMA option in kernel configuration,
however it requires and selects automatically DMA_ENGINE and
DMA_VIRTUAL_CHANNELS option too.
In order to transfer data from point A to B as fast as possible this IP
requires a dedicated memory space containing linked list of elements.
All elements of this linked list are continuous and each one describes a
data transfer (source and destination addresses, length and a control
variable).
For the sake of simplicity, lets assume a memory space for channel write
0 which allows about 42 elements.
+---------+
| Desc #0 |-+
+---------+ |
V
+----------+
| Chunk #0 |-+
| CB = 1 | | +----------+ +-----+ +-----------+ +-----+
+----------+ +->| Burst #0 |->| ... |->| Burst #41 |->| llp |
| +----------+ +-----+ +-----------+ +-----+
V
+----------+
| Chunk #1 |-+
| CB = 0 | | +-----------+ +-----+ +-----------+ +-----+
+----------+ +->| Burst #42 |->| ... |->| Burst #83 |->| llp |
| +-----------+ +-----+ +-----------+ +-----+
V
+----------+
| Chunk #2 |-+
| CB = 1 | | +-----------+ +-----+ +------------+ +-----+
+----------+ +->| Burst #84 |->| ... |->| Burst #125 |->| llp |
| +-----------+ +-----+ +------------+ +-----+
V
+----------+
| Chunk #3 |-+
| CB = 0 | | +------------+ +-----+ +------------+ +-----+
+----------+ +->| Burst #126 |->| ... |->| Burst #129 |->| llp |
+------------+ +-----+ +------------+ +-----+
Legend:
- Linked list, also know as Chunk
- Linked list element*, also know as Burst *CB*, also know as Change Bit,
it's a control bit (and typically is toggled) that allows to easily
identify and differentiate between the current linked list and the
previous or the next one.
- LLP, is a special element that indicates the end of the linked list
element stream also informs that the next CB should be toggle
On every last Burst of the Chunk (Burst #41, Burst #83, Burst #125 or
even Burst #129) is set some flags on their control variable (RIE and
LIE bits) that will trigger the send of "done" interruption.
On the interruptions callback, is decided whether to recycle the linked
list memory space by writing a new set of Bursts elements (if still
exists Chunks to transfer) or is considered completed (if there is no
Chunks available to transfer).
On scatter-gather transfer mode, the client will submit a scatter-gather
list of n (on this case 130) elements, that will be divide in multiple
Chunks, each Chunk will have (on this case 42) a limited number of
Bursts and after transferring all Bursts, an interrupt will be
triggered, which will allow to recycle the all linked list dedicated
memory again with the new information relative to the next Chunk and
respective Burst associated and repeat the whole cycle again.
On cyclic transfer mode, the client will submit a buffer pointer, length
of it and number of repetitions, in this case each burst will correspond
directly to each repetition.
Each Burst can describes a data transfer from point A(source) to point
B(destination) with a length that can be from 1 byte up to 4 GB. Since
dedicated the memory space where the linked list will reside is limited,
the whole n burst elements will be organized in several Chunks, that
will be used later to recycle the dedicated memory space to initiate a
new sequence of data transfers.
The whole transfer is considered has completed when it was transferred
all bursts.
Currently this IP has a set well-known register map, which includes
support for legacy and unroll modes. Legacy mode is version of this
register map that has multiplexer register that allows to switch
registers between all write and read channels and the unroll modes
repeats all write and read channels registers with an offset between
them. This register map is called v0.
The IP team is creating a new register map more suitable to the latest
PCIe features, that very likely will change the map register, which this
version will be called v1. As soon as this new version is released by
the IP team the support for this version in be included on this driver.
According to the logic, patches 1, 2 and 3 should be squashed into 1
unique patch, but for the sake of simplicity of review, it was divided
in this 3 patches files.
Signed-off-by: Gustavo Pimentel <gustavo.pimentel@synopsys.com>
Cc: Vinod Koul <vkoul@kernel.org>
Cc: Dan Williams <dan.j.williams@intel.com>
Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Cc: Russell King <rmk+kernel@armlinux.org.uk>
Cc: Joao Pinto <jpinto@synopsys.com>
Signed-off-by: Vinod Koul <vkoul@kernel.org>
2019-06-04 15:29:22 +02:00
|
|
|
|
|
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
2013-04-09 14:05:43 +03:00
|
|
|
|
2019-11-07 16:49:21 +08:00
|
|
|
|
|
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
2013-02-12 09:15:02 -08:00
|
|
|
|
2018-04-25 11:45:03 +03:00
|
|
|
|
|
|
|
|
|
2019-09-30 02:04:40 +00:00
|
|
|
|
|
|
|
|
|
2015-08-24 13:43:14 +05:30
|
|
|
|
2006-06-17 21:24:58 -07:00
|
|
|
|
2007-10-16 01:27:42 -07:00
|
|
|
|
2006-06-17 21:24:58 -07:00
|
|
|
|
2009-03-25 09:13:25 -07:00
|
|
|
|
|
|
|
|
|
2009-09-08 15:06:10 -07:00
|
|
|
|
2009-03-25 09:13:25 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2008-07-08 11:58:45 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-04-27 14:21:40 +02:00
|
|
|
|
2008-07-08 11:58:45 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2013-12-09 10:33:16 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2007-10-16 01:27:42 -07:00
|
|
|
|