Thread (73 messages) 73 messages, 7 authors, 2011-07-28
STALE5424d

[PATCH V4 06/14] ARM: SAMSUNG: Add common DMA operations

From: jassisinghbrar@gmail.com (Jassi Brar)
Date: 2011-07-27 01:33:36
Also in: linux-samsung-soc

On Tue, Jul 26, 2011 at 3:05 PM, Boojin Kim [off-list ref] wrote:
Jassi Brar Wrote:
quoted
Sent: Monday, July 25, 2011 8:52 PM
To: Boojin Kim
Cc: linux-arm-kernel at lists.infradead.org; linux-samsung-
soc at vger.kernel.org; Vinod Koul; Dan Williams; Kukjin Kim; Grant
Likely; Mark Brown
Subject: Re: [PATCH V4 06/14] ARM: SAMSUNG: Add common DMA operations

On Mon, Jul 25, 2011 at 6:58 AM, Boojin Kim [off-list ref]
wrote:
quoted
+
+static bool pl330_filter(struct dma_chan *chan, void *param)
+{
+ ? ? ? struct dma_pl330_peri *peri = (struct dma_pl330_peri *)chan-
private;
+ ? ? ? unsigned dma_ch = (unsigned)param;
+
+ ? ? ? if (peri->peri_id != dma_ch)
+ ? ? ? ? ? ? ? return false;
+
+ ? ? ? return true;
+}
This is what I meant... if we keep chan_id for paltform assigned IDs,
these filter functions could simply become

static bool pl330_filter(struct dma_chan *chan, void *param)
{
? ? ? ? return chan->chan_id == param
}

And ideally in the long run, we could just drop the filter callback
and add expected channel ID to the request_channel call.
The chan_id is set by dmaengine. So, We don't use it to hold the user specific
Id.
Not for long.
See  https://lkml.org/lkml/2011/7/26/245

quoted
quoted
+
+static inline int s3c_dma_trigger(unsigned ch)
+{
+ ? ? ? return s3c2410_dma_ctrl(ch, S3C2410_DMAOP_START);
+}
+
+static inline int s3c_dma_started(unsigned ch)
+{
+ ? ? ? return s3c2410_dma_ctrl(ch, S3C2410_DMAOP_STARTED);
+}
+
+static inline int s3c_dma_flush(unsigned ch)
+{
+ ? ? ? return s3c2410_dma_ctrl(ch, S3C2410_DMAOP_FLUSH);
+}
+
+static inline int s3c_dma_stop(unsigned ch)
+{
+ ? ? ? return s3c2410_dma_ctrl(ch, S3C2410_DMAOP_STOP);
+}
+
+static struct samsung_dma_ops s3c_dma_ops = {
+ ? ? ? .request ? ? ? ?= s3c_dma_request,
+ ? ? ? .release ? ? ? ?= s3c_dma_release,
+ ? ? ? .prepare ? ? ? ?= s3c_dma_prepare,
+ ? ? ? .trigger ? ? ? ?= s3c_dma_trigger,
+ ? ? ? .started ? ? ? ?= s3c_dma_started,
+ ? ? ? .flush ? ? ? ? ?= s3c_dma_flush,
+ ? ? ? .stop ? ? ? ? ? = s3c_dma_stop,
These last 4 should be gnereallized into one callback with OP argument.
I don't have any idea about it. Can you explain it in more detail?
static int s3c_dma_control(unsigned ch, enum s3c2410_chan_op/*or similar*/ op)
 {
        return s3c2410_dma_ctrl(ch, op);
 }

static struct samsung_dma_ops s3c_dma_ops = {
        .request        = s3c_dma_request,
        .release        = s3c_dma_release,
        .prepare        = s3c_dma_prepare,
        .control        = s3c_dma_control,
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help