Received: by 2002:ac0:a582:0:0:0:0:0 with SMTP id m2-v6csp4437480imm; Mon, 8 Oct 2018 22:49:10 -0700 (PDT) X-Google-Smtp-Source: ACcGV62AenFYcfcTFS5SQoHStN2o1/+ywg9sdNWEZxxF4o0PCP16qhtNcFsesGNO5x+yDTUsImiE X-Received: by 2002:a62:e057:: with SMTP id f84-v6mr28408508pfh.208.1539064150337; Mon, 08 Oct 2018 22:49:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1539064150; cv=none; d=google.com; s=arc-20160816; b=IyvVvtP6oP4pXNyHqA7J+yC9Sbx+qBOMAPi5YGe1b15lcGod0oa3Fol5kJ761WPjBR h8X7tqqET3T2f2LUPawEfSTkxNUwLBKGEV4UAa/OSY+28LbUeL8cHzoTJjmZOlIvTXz8 gDj7XQyAwrTieA8Ly7raU4gqdGoRBNw/aXM+UdQ0c4oe8FiniwJAwldg5e+b36GpRayo aRP0KlmmycNbjZW1JyiXw8NFg9s1Q7iUq+8dAteAduKe8NJPqrE7VoHFE8GgjDTuSVmR o8NDcb+drptf6tZhpBWzOUDrsLpeN1UUULSJyyWXjEkTvJvGeuYUVaZASHB5eJR/Y3i0 0uWA== 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=X9Pi7kVseJCqn/XAAguX5FsfI2og3DoGIlIZ/tzzQ3U=; b=xnirQhH5Mfd7bCkK9BMR8TkpzxB9kxQM0omvzFyGkixsDMbaHWnVGj4y72Rew0SGg0 zzJCIpky2y5KwTBJIcyLNggGUH6RyN8ADpn2q8VYrqMxPpA8IBTbBT+MJdI99kk5RhkX sBx0MQooapGHIjvffTi3V6lFRY9g2ZFAcxQyToaCio9NZAhL80c3dMO38qgDbQ/3ksRn ZdqREJg/cQ1oTUEXE3EPs8h997r3z9xT66rWyHQU3fyCpbYRtiJ9HuVTACARjboMgVRn cqU/ql8rVA5RDo2cAyGrD7zkg2Aa4pgcEd+mpKXKSYgIht6V7SmjBpXQAXW+EdovgH2f S7eA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@joelfernandes.org header.s=google header.b=LS3IMq7J; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id i61-v6si20630509plb.193.2018.10.08.22.48.56; Mon, 08 Oct 2018 22:49:10 -0700 (PDT) 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=@joelfernandes.org header.s=google header.b=LS3IMq7J; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726781AbeJIND3 (ORCPT + 99 others); Tue, 9 Oct 2018 09:03:29 -0400 Received: from mail-pl1-f194.google.com ([209.85.214.194]:33853 "EHLO mail-pl1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726750AbeJIND2 (ORCPT ); Tue, 9 Oct 2018 09:03:28 -0400 Received: by mail-pl1-f194.google.com with SMTP id f18-v6so254566plr.1 for ; Mon, 08 Oct 2018 22:48:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=joelfernandes.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=X9Pi7kVseJCqn/XAAguX5FsfI2og3DoGIlIZ/tzzQ3U=; b=LS3IMq7Js5UbwUJ/6XVmpfNBh8RhR80Di9PEgmDQg/k0wz9eZhmCky8McL5u5N9+IX 9PzaaFLsu40ymIvYu2pdjowlF4DgQi3lr1rddt6JZ+WH3rtkSLZ+RdyyJBJQiTnTRNv7 MIhzWjTQ6pwa9suwuF2+Bg0xPFuQecllgZjF8= 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:mime-version:content-transfer-encoding; bh=X9Pi7kVseJCqn/XAAguX5FsfI2og3DoGIlIZ/tzzQ3U=; b=GWPdl42sQJODJQ8bCcFjSC/TayF/3PAWFGYDGXg+ld0d1t/9auucnUme0r4PpW0NA1 kQsHvv1Euu87L8uURriEpedV7ftJVK5X8MJB0DBnVyd3H8v/CMTzXFk5parFZ3I+P/sc NA/UA7JR85PP+LhNRHgwYG+TIWcIZ0uLMfhrIsx/jKwEJ723Fv4kpgYgdO2wKbor+AK5 F/kzyzgRMd/q8ictL1nWtXqnBzbudTD5tH2El/gdFlAmv93Zo0D+VKjDiH6P3F6PeGsh D45wOWrWtwHNPneRMgIWuu+KJwsQPlAMPsIb+65mcaUdaKEhR+PifT8JbIUSFw7FC/1l AaJg== X-Gm-Message-State: ABuFfoh+9t3h+WCW4hWVyRnDj5clxAAWkCxXuxWUuXksWz28Uf3+C2HV BoH7+d8SV8VQELpUGbKUrSXe8A== X-Received: by 2002:a17:902:2f41:: with SMTP id s59-v6mr26811116plb.240.1539064095841; Mon, 08 Oct 2018 22:48:15 -0700 (PDT) Received: from joelaf.mtv.corp.google.com ([2620:0:1000:1601:3aef:314f:b9ea:889f]) by smtp.gmail.com with ESMTPSA id a15-v6sm16886234pff.8.2018.10.08.22.48.13 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 08 Oct 2018 22:48:14 -0700 (PDT) From: "Joel Fernandes (Google)" To: stable@vger.kernel.org Cc: Pierre Yves MORDRET , Vinod Koul , gregkh@linuxfoundation.org, Alexandre Torgue , Dan Williams , dmaengine@vger.kernel.org, "Joel Fernandes (Google)" , linux-arm-kernel@lists.infradead.org (moderated list:ARM/STM32 ARCHITECTURE), linux-kernel@vger.kernel.org, Maxime Coquelin Subject: [PATCH 6/7] dmaengine: stm32-dma: fix max items per transfer Date: Mon, 8 Oct 2018 22:47:51 -0700 Message-Id: <20181009054752.145978-7-joel@joelfernandes.org> X-Mailer: git-send-email 2.19.0.605.g01d371f741-goog In-Reply-To: <20181009054752.145978-1-joel@joelfernandes.org> References: <20181009054752.145978-1-joel@joelfernandes.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Pierre Yves MORDRET Having 0 in item counter register is valid and stands for a "No or Ended transfer". Therefore valid transfer starts from @+0 to @+0xFFFE leading to unaligned scatter gather at boundary. Thus it's safer to round down this value on its FIFO size (16 Bytes). Signed-off-by: Pierre-Yves MORDRET Signed-off-by: Vinod Koul --- drivers/dma/stm32-dma.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/drivers/dma/stm32-dma.c b/drivers/dma/stm32-dma.c index b40486454a2c..05a2974cd2c0 100644 --- a/drivers/dma/stm32-dma.c +++ b/drivers/dma/stm32-dma.c @@ -38,10 +38,6 @@ #define STM32_DMA_TEI BIT(3) /* Transfer Error Interrupt */ #define STM32_DMA_DMEI BIT(2) /* Direct Mode Error Interrupt */ #define STM32_DMA_FEI BIT(0) /* FIFO Error Interrupt */ -#define STM32_DMA_MASKI (STM32_DMA_TCI \ - | STM32_DMA_TEI \ - | STM32_DMA_DMEI \ - | STM32_DMA_FEI) /* DMA Stream x Configuration Register */ #define STM32_DMA_SCR(x) (0x0010 + 0x18 * (x)) /* x = 0..7 */ @@ -118,6 +114,13 @@ #define STM32_DMA_FIFO_THRESHOLD_FULL 0x03 #define STM32_DMA_MAX_DATA_ITEMS 0xffff +/* + * Valid transfer starts from @0 to @0xFFFE leading to unaligned scatter + * gather at boundary. Thus it's safer to round down this value on FIFO + * size (16 Bytes) + */ +#define STM32_DMA_ALIGNED_MAX_DATA_ITEMS \ + ALIGN_DOWN(STM32_DMA_MAX_DATA_ITEMS, 16) #define STM32_DMA_MAX_CHANNELS 0x08 #define STM32_DMA_MAX_REQUEST_ID 0x08 #define STM32_DMA_MAX_DATA_PARAM 0x03 @@ -869,7 +872,7 @@ static struct dma_async_tx_descriptor *stm32_dma_prep_slave_sg( desc->sg_req[i].len = sg_dma_len(sg); nb_data_items = desc->sg_req[i].len / buswidth; - if (nb_data_items > STM32_DMA_MAX_DATA_ITEMS) { + if (nb_data_items > STM32_DMA_ALIGNED_MAX_DATA_ITEMS) { dev_err(chan2dev(chan), "nb items not supported\n"); goto err; } @@ -935,7 +938,7 @@ static struct dma_async_tx_descriptor *stm32_dma_prep_dma_cyclic( return NULL; nb_data_items = period_len / buswidth; - if (nb_data_items > STM32_DMA_MAX_DATA_ITEMS) { + if (nb_data_items > STM32_DMA_ALIGNED_MAX_DATA_ITEMS) { dev_err(chan2dev(chan), "number of items not supported\n"); return NULL; } @@ -985,7 +988,7 @@ static struct dma_async_tx_descriptor *stm32_dma_prep_dma_memcpy( u32 num_sgs, best_burst, dma_burst, threshold; int i; - num_sgs = DIV_ROUND_UP(len, STM32_DMA_MAX_DATA_ITEMS); + num_sgs = DIV_ROUND_UP(len, STM32_DMA_ALIGNED_MAX_DATA_ITEMS); desc = stm32_dma_alloc_desc(num_sgs); if (!desc) return NULL; @@ -994,7 +997,7 @@ static struct dma_async_tx_descriptor *stm32_dma_prep_dma_memcpy( for (offset = 0, i = 0; offset < len; offset += xfer_count, i++) { xfer_count = min_t(size_t, len - offset, - STM32_DMA_MAX_DATA_ITEMS); + STM32_DMA_ALIGNED_MAX_DATA_ITEMS); /* Compute best burst size */ max_width = DMA_SLAVE_BUSWIDTH_1_BYTE; -- 2.19.0.605.g01d371f741-goog