From patchwork Tue Apr 1 13:06:08 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Ujfalusi X-Patchwork-Id: 3922571 Return-Path: X-Original-To: patchwork-davinci@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 94FB99F2F7 for ; Tue, 1 Apr 2014 13:10:09 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 6BC1E20380 for ; Tue, 1 Apr 2014 13:10:08 +0000 (UTC) Received: from devils.ext.ti.com (devils.ext.ti.com [198.47.26.153]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 795D22021A for ; Tue, 1 Apr 2014 13:10:07 +0000 (UTC) Received: from dlelxv90.itg.ti.com ([172.17.2.17]) by devils.ext.ti.com (8.13.7/8.13.7) with ESMTP id s31DA6fA031085 for ; Tue, 1 Apr 2014 08:10:06 -0500 Received: from DFLE73.ent.ti.com (dfle73.ent.ti.com [128.247.5.110]) by dlelxv90.itg.ti.com (8.14.3/8.13.8) with ESMTP id s31DA5CE014015 for ; Tue, 1 Apr 2014 08:10:06 -0500 Received: from dflp32.itg.ti.com (10.64.6.15) by DFLE73.ent.ti.com (128.247.5.110) with Microsoft SMTP Server id 14.3.174.1; Tue, 1 Apr 2014 08:10:05 -0500 Received: from linux.omap.com (dlelxs01.itg.ti.com [157.170.227.31]) by dflp32.itg.ti.com (8.14.3/8.13.8) with ESMTP id s31DA5Ah017517 for ; Tue, 1 Apr 2014 08:10:05 -0500 Received: from linux.omap.com (localhost [127.0.0.1]) by linux.omap.com (Postfix) with ESMTP id 8BFAF80626 for ; Tue, 1 Apr 2014 07:10:05 -0600 (CST) X-Original-To: davinci-linux-open-source@linux.davincidsp.com Delivered-To: davinci-linux-open-source@linux.davincidsp.com Received: from dflxv15.itg.ti.com (dflxv15.itg.ti.com [128.247.5.124]) by linux.omap.com (Postfix) with ESMTP id 704B680626 for ; Tue, 1 Apr 2014 07:06:40 -0600 (CST) Received: from DFLE72.ent.ti.com (dfle72.ent.ti.com [128.247.5.109]) by dflxv15.itg.ti.com (8.14.3/8.13.8) with ESMTP id s31D6eid018898; Tue, 1 Apr 2014 08:06:40 -0500 Received: from dlep32.itg.ti.com (157.170.170.100) by DFLE72.ent.ti.com (128.247.5.109) with Microsoft SMTP Server id 14.3.174.1; Tue, 1 Apr 2014 08:06:39 -0500 Received: from dflp33.itg.ti.com (ileax41-snat.itg.ti.com [10.172.224.153]) by dlep32.itg.ti.com (8.14.3/8.13.8) with ESMTP id s31D6Hfh012538; Tue, 1 Apr 2014 08:06:37 -0500 From: Peter Ujfalusi To: , , Subject: [PATCH v2 07/14] arm: common: edma: API to request non default queue for a channel Date: Tue, 1 Apr 2014 16:06:08 +0300 Message-ID: <1396357575-30585-8-git-send-email-peter.ujfalusi@ti.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1396357575-30585-1-git-send-email-peter.ujfalusi@ti.com> References: <1396357575-30585-1-git-send-email-peter.ujfalusi@ti.com> MIME-Version: 1.0 CC: , , , , , , X-BeenThere: davinci-linux-open-source@linux.davincidsp.com X-Mailman-Version: 2.1.12 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: Errors-To: davinci-linux-open-source-bounces+patchwork-davinci=patchwork.kernel.org@linux.davincidsp.com X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP When using eDMA3 via dmaengine all dma channels will use the default queue. Since during request time we do not have means to change this it need to be done later, before the DMA has been started. With the added function it is possible to move the channel to a non default queue if it is possible, otherwise (when only one EQ/TC is available for the CC) the default queue is going to be used. For example: For optimal system performance the audio (cyclic) DMA should be placed to a separate queue which is different than what the rest of the system is using. Signed-off-by: Peter Ujfalusi --- arch/arm/common/edma.c | 27 +++++++++++++++++++++++++++ include/linux/platform_data/edma.h | 2 ++ 2 files changed, 29 insertions(+) diff --git a/arch/arm/common/edma.c b/arch/arm/common/edma.c index be267b2080be..eaf6dd19f082 100644 --- a/arch/arm/common/edma.c +++ b/arch/arm/common/edma.c @@ -712,6 +712,33 @@ int edma_alloc_channel(int channel, } EXPORT_SYMBOL(edma_alloc_channel); +/** + * edma_request_non_default_queue - try to map the channel to non default queue + * @channel: dma channel returned from edma_alloc_channel() + * + * For certain type of applications like audio it is preferred to not use the + * default event queue/tc to avoid eDMA caused latency. + * + * This function will iterate through the event queues available for the CC and + * picks the first EQ/TC which is not set as the default for the CC + */ +void edma_request_non_default_queue(int channel) +{ + unsigned ctlr = EDMA_CTLR(channel); + enum dma_event_q eventq_no = EVENTQ_DEFAULT; + int i; + + for (i = 0; i < edma_cc[ctlr]->num_tc; i++) { + if (i != edma_cc[ctlr]->default_queue) { + eventq_no = i; + break; + } + } + + channel = EDMA_CHAN_SLOT(channel); + map_dmach_queue(ctlr, channel, eventq_no); +} +EXPORT_SYMBOL(edma_request_non_default_queue); /** * edma_free_channel - deallocate DMA channel diff --git a/include/linux/platform_data/edma.h b/include/linux/platform_data/edma.h index 923f8a3e4ce0..5d0a1b98f205 100644 --- a/include/linux/platform_data/edma.h +++ b/include/linux/platform_data/edma.h @@ -117,6 +117,8 @@ int edma_alloc_channel(int channel, void *data, enum dma_event_q); void edma_free_channel(unsigned channel); +void edma_request_non_default_queue(int channel); + /* alloc/free parameter RAM slots */ int edma_alloc_slot(unsigned ctlr, int slot); void edma_free_slot(unsigned slot);