Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp7391308imu; Tue, 22 Jan 2019 05:23:31 -0800 (PST) X-Google-Smtp-Source: ALg8bN5DSOnx1tGQN+ogvUqKOcHLdB4Bx9MLOut/1frcx6K/LSxg37FajB8BDPZVtBFrc7SLCAfk X-Received: by 2002:a63:f658:: with SMTP id u24mr32251496pgj.267.1548163411046; Tue, 22 Jan 2019 05:23:31 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1548163411; cv=none; d=google.com; s=arc-20160816; b=h39skALB7X12GfAkcZWQbAx9GQ1tDOTKQ/hbi/sIpULsDIW01+0TLDZb2nc6wxyACg +5d3VtIXQQ6Qcy4MAl4rJLVVqSTgnKuf+zH+UAo7rWkrQBT1mvaZI8lKzj1JaHWZtgSl +I9Y0jqeP5btw7U8FEFRiZarVIRwUBXetF85ZWT8JQ8pZPl7ruDhV/ICmFAk8OIpFZ4M /kfFCpXD6Q8Hs0jppG7dHfC9k/OwOHW+NJ1sC2lyjEEn4pzmVx0+33KE1WOQh+iTG/a3 cp/PsBRTlW0IyBBf1vQmKC1ud0LZWWmlOaeADiFqam89U5IGeRXeS33luZHNgJ/XZWVj RNYQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:dkim-signature; bh=aThP/Y0UG/Bg6pZXhNtucLsiLRzzJRNdslnI1cWQFgk=; b=CW/PUotVcBYxQR8dn+NQKwViiqhXNvEbp61ea65XiPLd8zlkNff+ozzxPm9kbRtTwa 21n1GSNLUy0HbwIVHid43I6Yg6QlHRb/x2ZNQseVLzV9vrotwJtvr5QuvmDnJNWxh0z6 RRKSkmJz0DYmVGPPUHtTmPWJgPtaBgx9U2k0wD7DAaX5BMN3b89CEclzn8/TDM1MqsL/ Gwz6XGMvg4wrSSQtZeG2ZVnsgAypPNRAyBVnqGaUOL2ciKOC4WGiFul+DRKp2xVuO7vv CstPGJARRyvV/6XoMHBhp6wQmTxQICxVqKmNLqWGUFxkMeZ+GnLu2oMUbekR/tqHBdfW xzRg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=L3KhXxkK; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 34si9422195pgt.455.2019.01.22.05.23.12; Tue, 22 Jan 2019 05:23:31 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=L3KhXxkK; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728577AbfAVNVu (ORCPT + 99 others); Tue, 22 Jan 2019 08:21:50 -0500 Received: from mail-pg1-f196.google.com ([209.85.215.196]:34780 "EHLO mail-pg1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728483AbfAVNVs (ORCPT ); Tue, 22 Jan 2019 08:21:48 -0500 Received: by mail-pg1-f196.google.com with SMTP id j10so11087279pga.1 for ; Tue, 22 Jan 2019 05:21:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=aThP/Y0UG/Bg6pZXhNtucLsiLRzzJRNdslnI1cWQFgk=; b=L3KhXxkKfjsH+L/BnnSqvkjQnyke/EFblv6Xj9LR5HpaDYCG2SW+L1rZPux21lQZOy 6QlGOs3Fk+PCVOn136Z1R+D+jrRAPLWxAxVmDq5npItzATHgmUGDTEYJ19DG8oRODYc7 elvbX1t+aPoMNLPjK3juuGj4wpVIYB0zb/f+w= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:in-reply-to:references; bh=aThP/Y0UG/Bg6pZXhNtucLsiLRzzJRNdslnI1cWQFgk=; b=N4RpROWaQP97RBuQMRifsiW479Jblj6pPcQUccWXdZQwB50wqjSecb+kPVI+EYMNXP ZkjFtp3Fc57jTs850gFqe9UxoZhPPMM2U2THzaaEQ6MuLNr/EzE/hL9m1f+Mr/uJSXO/ jYalB5Gg3w5o8JEYM7Hwh8mYdNKfNYrO4AmSwD3+WYWJ72iINkdRpe60CnX/xHKHdtcb ILOiUzF51xtTwV5WEW746VW7EWBHytUBdgjMbNS3T8+iggT89tc8obaZw/AZLLx3sylv 5uLt2CqgsseCcim+66uCRFnNTbl6AZU3tYkShsOYRq3hKJ7y5VSubsniHbBt8F0+1Ydf TlCg== X-Gm-Message-State: AJcUukfznQjpims74CwmMjtsC6k1d0sFLqwSwBNGFH4rg31gAbrk+HFt eu2KSGDSox4NNjwK+FY364JiGA== X-Received: by 2002:a62:35c7:: with SMTP id c190mr34406112pfa.76.1548163307648; Tue, 22 Jan 2019 05:21:47 -0800 (PST) Received: from baolinwangubtpc.spreadtrum.com ([117.18.48.102]) by smtp.gmail.com with ESMTPSA id l185sm21609574pfl.54.2019.01.22.05.21.42 (version=TLS1 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 22 Jan 2019 05:21:46 -0800 (PST) From: Baolin Wang To: vkoul@kernel.org, robh+dt@kernel.org, mark.rutland@arm.com Cc: arnd@arndb.de, olof@lixom.net, orsonzhai@gmail.com, zhang.lyra@gmail.com, dan.j.williams@intel.com, devicetree@vger.kernel.org, arm@kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, dmaengine@vger.kernel.org, eric.long@unisoc.com, broonie@kernel.org, baolin.wang@linaro.org Subject: [PATCH 2/3] dmaengine: sprd: Add new DMA engine translation function Date: Tue, 22 Jan 2019 21:20:52 +0800 Message-Id: <529bc30b34a14bf7849fc852c7cbff34dee47aaa.1548158832.git.baolin.wang@linaro.org> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: References: In-Reply-To: References: Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Add new DMA engine translation function to get the hardware slave id of the corresponding DMA engine channel. Meanwhile we do not need to set default slave id in sprd_dma_alloc_chan_resources(), remove it. Signed-off-by: Baolin Wang --- drivers/dma/sprd-dma.c | 49 ++++++++++++++++++++++++++++-------------------- 1 file changed, 29 insertions(+), 20 deletions(-) diff --git a/drivers/dma/sprd-dma.c b/drivers/dma/sprd-dma.c index e2f0167..7d180bb 100644 --- a/drivers/dma/sprd-dma.c +++ b/drivers/dma/sprd-dma.c @@ -204,9 +204,9 @@ struct sprd_dma_dev { struct sprd_dma_chn channels[0]; }; -static bool sprd_dma_filter_fn(struct dma_chan *chan, void *param); -static struct of_dma_filter_info sprd_dma_info = { - .filter_fn = sprd_dma_filter_fn, +struct sprd_dma_filter_param { + u32 chn_id; + u32 slave_id; }; static inline struct sprd_dma_chn *to_sprd_dma_chan(struct dma_chan *c) @@ -580,15 +580,7 @@ static irqreturn_t dma_irq_handle(int irq, void *dev_id) static int sprd_dma_alloc_chan_resources(struct dma_chan *chan) { - struct sprd_dma_chn *schan = to_sprd_dma_chan(chan); - int ret; - - ret = pm_runtime_get_sync(chan->device->dev); - if (ret < 0) - return ret; - - schan->dev_id = SPRD_DMA_SOFTWARE_UID; - return 0; + return pm_runtime_get_sync(chan->device->dev); } static void sprd_dma_free_chan_resources(struct dma_chan *chan) @@ -1022,12 +1014,31 @@ static bool sprd_dma_filter_fn(struct dma_chan *chan, void *param) { struct sprd_dma_chn *schan = to_sprd_dma_chan(chan); struct sprd_dma_dev *sdev = to_sprd_dma_dev(&schan->vc.chan); - u32 req = *(u32 *)param; + struct sprd_dma_filter_param *sparam = param; - if (req < sdev->total_chns) - return req == schan->chn_num + 1; - else - return false; + if (sparam->chn_id < sdev->total_chns && + sparam->chn_id == schan->chn_num + 1) { + schan->dev_id = sparam->slave_id; + return true; + } + + return false; +} + +static struct dma_chan *sprd_dma_xlate(struct of_phandle_args *dma_spec, + struct of_dma *ofdma) +{ + struct sprd_dma_dev *sdev = ofdma->of_dma_data; + dma_cap_mask_t mask = sdev->dma_dev.cap_mask; + struct sprd_dma_filter_param param; + + if (dma_spec->args_count != 2) + return NULL; + + param.chn_id = dma_spec->args[0]; + param.slave_id = dma_spec->args[1]; + + return dma_request_channel(mask, sprd_dma_filter_fn, ¶m); } static int sprd_dma_probe(struct platform_device *pdev) @@ -1133,9 +1144,7 @@ static int sprd_dma_probe(struct platform_device *pdev) goto err_register; } - sprd_dma_info.dma_cap = sdev->dma_dev.cap_mask; - ret = of_dma_controller_register(np, of_dma_simple_xlate, - &sprd_dma_info); + ret = of_dma_controller_register(np, sprd_dma_xlate, sdev); if (ret) goto err_of_register; -- 1.7.9.5