Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp3503520ybl; Mon, 27 Jan 2020 05:21:45 -0800 (PST) X-Google-Smtp-Source: APXvYqyfL5AGe6TH+KLqhzhzSlfiBZ15pSqWWqFivNhu3hZsa0YaZ1wJ+JFySvlyqa239QLws7cq X-Received: by 2002:a05:6830:1607:: with SMTP id g7mr12394933otr.320.1580131304876; Mon, 27 Jan 2020 05:21:44 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1580131304; cv=none; d=google.com; s=arc-20160816; b=bAENf81OaA7TbCUHwzuykXVG4Io2oA0QMTcivY1n3kMZovQOcZQyrf0um9kyuY2u4I UspsBxpEjNQyt/m+ytVNID9PHkU1/+qAcifON9Hb5CCO9JNZKI7W3R7mAueozKb+mnJ9 1iD8nftkDfc2yRC7pcSXQ/VVuuVr6FS2lBgVNVk4OcroAn86oKp7kfpCBsNnrGpK+RSo 5prmY2EMS/KSrocNopvbmASVPNWrJ3iBJCJjCNFjF1DwBLBmWX8lI2C9sIb/evDLXLZ0 pO3bPPqoR5plKfzYpTvwqcv7jI1yXTMAJOIsa/5zubUx6mlSrGBn5anZzG0mFKXawvvH oYCQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=gXzS2h5LUCwG6H/9ZUQm3pQgqmTnpwsji7vRctJN/RU=; b=QF8wJeJWrOILE4E6NL6bynWT2kjqst/DYHFay2Bg7zJrF6ZZVnPyylcQGINauYgzYV 1KpE4FXDRet1n1X/gmAn1l1Gnd4S33Bu/9eEqrf7bqOr0hl7so01/+vkYOMbFJN5YTXL UK8mW7xis6MueYZ+w98lGz/bIDKQpEVpkd6/BpL3pU9vOs41ykWtztwBLS3kLbbLTS/f Z8WCyAYHT4Zyg4LB3Elo50vT/H5oZfedvbwwBMR5LBEqekjWr3559gJqUSBYa2FyYeOy Z34S6nOo0sgpROUZWa8EFbbwLavs/di+RCYUhcPPTU9WSQ4nYtxUtwqkyQAH39LXQX8B kn7g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@ti.com header.s=ti-com-17Q1 header.b=iA63bBkp; 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=QUARANTINE sp=NONE dis=NONE) header.from=ti.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id w26si6568199otl.213.2020.01.27.05.21.32; Mon, 27 Jan 2020 05:21:44 -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=@ti.com header.s=ti-com-17Q1 header.b=iA63bBkp; 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=QUARANTINE sp=NONE dis=NONE) header.from=ti.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727046AbgA0NUi (ORCPT + 99 others); Mon, 27 Jan 2020 08:20:38 -0500 Received: from fllv0016.ext.ti.com ([198.47.19.142]:40008 "EHLO fllv0016.ext.ti.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726485AbgA0NUf (ORCPT ); Mon, 27 Jan 2020 08:20:35 -0500 Received: from fllv0035.itg.ti.com ([10.64.41.0]) by fllv0016.ext.ti.com (8.15.2/8.15.2) with ESMTP id 00RDKXuF022227; Mon, 27 Jan 2020 07:20:33 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1580131233; bh=gXzS2h5LUCwG6H/9ZUQm3pQgqmTnpwsji7vRctJN/RU=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=iA63bBkpTehgIDPgSjR5wbkhxiOETsIL1kTiqmLKSZwboedOJXWG/GxUMdcZrThqm rMPW7FHG7WVgLp+EpNY9NSnhx3bswOl2s7BZX+wrYWkvZsF62xgZ0AIEDX3+wy3Qn+ vmg6/s16555V/Wd9f09Gy5O16j5+GYqFfmFDQ7mE= Received: from DFLE103.ent.ti.com (dfle103.ent.ti.com [10.64.6.24]) by fllv0035.itg.ti.com (8.15.2/8.15.2) with ESMTP id 00RDKX5H118204; Mon, 27 Jan 2020 07:20:33 -0600 Received: from DFLE115.ent.ti.com (10.64.6.36) by DFLE103.ent.ti.com (10.64.6.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1847.3; Mon, 27 Jan 2020 07:20:32 -0600 Received: from fllv0039.itg.ti.com (10.64.41.19) by DFLE115.ent.ti.com (10.64.6.36) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1847.3 via Frontend Transport; Mon, 27 Jan 2020 07:20:33 -0600 Received: from feketebors.ti.com (ileax41-snat.itg.ti.com [10.172.224.153]) by fllv0039.itg.ti.com (8.15.2/8.15.2) with ESMTP id 00RDKPa5020427; Mon, 27 Jan 2020 07:20:31 -0600 From: Peter Ujfalusi To: CC: , , , , Subject: [PATCH for-next 3/4] dmaengine: ti: k3-udma: Move the TR counter calculation to helper function Date: Mon, 27 Jan 2020 15:21:10 +0200 Message-ID: <20200127132111.20464-4-peter.ujfalusi@ti.com> X-Mailer: git-send-email 2.25.0 In-Reply-To: <20200127132111.20464-1-peter.ujfalusi@ti.com> References: <20200127132111.20464-1-peter.ujfalusi@ti.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-EXCLAIMER-MD-CONFIG: e1e8a2fd-e40a-4ac6-ac9b-f7e9cc9ee180 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Move the TR counter parameter configuration code out from the prep_memcpy callback to a helper function to allow a generic re-usable code for other TR based transfers. Signed-off-by: Peter Ujfalusi --- drivers/dma/ti/k3-udma.c | 74 +++++++++++++++++++++++++++------------- 1 file changed, 51 insertions(+), 23 deletions(-) diff --git a/drivers/dma/ti/k3-udma.c b/drivers/dma/ti/k3-udma.c index cb9259e104b4..9b00013d6f63 100644 --- a/drivers/dma/ti/k3-udma.c +++ b/drivers/dma/ti/k3-udma.c @@ -2029,6 +2029,51 @@ static struct udma_desc *udma_alloc_tr_desc(struct udma_chan *uc, return d; } +/** + * udma_get_tr_counters - calculate TR counters for a given length + * @len: Length of the trasnfer + * @align_to: Preferred alignment + * @tr0_cnt0: First TR icnt0 + * @tr0_cnt1: First TR icnt1 + * @tr1_cnt0: Second (if used) TR icnt0 + * + * For len < SZ_64K only one TR is enough, tr1_cnt0 is not updated + * For len >= SZ_64K two TRs are used in a simple way: + * First TR: SZ_64K-alignment blocks (tr0_cnt0, tr0_cnt1) + * Second TR: the remaining length (tr1_cnt0) + * + * Returns the number of TRs the length needs (1 or 2) + * -EINVAL if the length can not be supported + */ +static int udma_get_tr_counters(size_t len, unsigned long align_to, + u16 *tr0_cnt0, u16 *tr0_cnt1, u16 *tr1_cnt0) +{ + if (len < SZ_64K) { + *tr0_cnt0 = len; + *tr0_cnt1 = 1; + + return 1; + } + + if (align_to > 3) + align_to = 3; + +realign: + *tr0_cnt0 = SZ_64K - BIT(align_to); + if (len / *tr0_cnt0 >= SZ_64K) { + if (align_to) { + align_to--; + goto realign; + } + return -EINVAL; + } + + *tr0_cnt1 = len / *tr0_cnt0; + *tr1_cnt0 = len % *tr0_cnt0; + + return 2; +} + static struct udma_desc * udma_prep_slave_sg_tr(struct udma_chan *uc, struct scatterlist *sgl, unsigned int sglen, enum dma_transfer_direction dir, @@ -2581,29 +2626,12 @@ udma_prep_dma_memcpy(struct dma_chan *chan, dma_addr_t dest, dma_addr_t src, return NULL; } - if (len < SZ_64K) { - num_tr = 1; - tr0_cnt0 = len; - tr0_cnt1 = 1; - } else { - unsigned long align_to = __ffs(src | dest); - - if (align_to > 3) - align_to = 3; - /* - * Keep simple: tr0: SZ_64K-alignment blocks, - * tr1: the remaining - */ - num_tr = 2; - tr0_cnt0 = (SZ_64K - BIT(align_to)); - if (len / tr0_cnt0 >= SZ_64K) { - dev_err(uc->ud->dev, "size %zu is not supported\n", - len); - return NULL; - } - - tr0_cnt1 = len / tr0_cnt0; - tr1_cnt0 = len % tr0_cnt0; + num_tr = udma_get_tr_counters(len, __ffs(src | dest), &tr0_cnt0, + &tr0_cnt1, &tr1_cnt0); + if (num_tr < 0) { + dev_err(uc->ud->dev, "size %zu is not supported\n", + len); + return NULL; } d = udma_alloc_tr_desc(uc, tr_size, num_tr, DMA_MEM_TO_MEM); -- Peter Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki. Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki