Received: by 2002:a25:ab43:0:0:0:0:0 with SMTP id u61csp3427235ybi; Tue, 18 Jun 2019 00:14:12 -0700 (PDT) X-Google-Smtp-Source: APXvYqx5A0n/dTwYL0oS2zvoT6DlnWmvOhOsqfDf2i5PrhXdwDSXYFIsJIVx2/zPyzYllJhHqzzZ X-Received: by 2002:a17:90a:1785:: with SMTP id q5mr3471498pja.106.1560842052651; Tue, 18 Jun 2019 00:14:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1560842052; cv=none; d=google.com; s=arc-20160816; b=k4/TdfHksf3JOl7vcKNFuu4ctu/rzKdGXk6oM2sWCXFYDhRNtEaajy9QNWtOGKi5WZ rKOVO3113xjGl9ys5DbXJBWIl4xtTtzPBX6xCeL6aOmVX0v2iJ7kXRCWiOe455YY0Qbc wu0NDr0tyLW1B1j/+HfmalBcKPzPncNBdYjv565d9Ed4MQlmI+URL73EOlBwxx3/zTfh Yh5m6xyC8B4Jr1kkHQc8WZZRri9G2QYZ0V0iGNsqscv672eL2BejG2a6u9+G6BV7IyiA wCRFg7gNa58MYcnW9+TkT2bT80ap4hXBdvbfzYxt1zaR2zeb05nuo9tsZsievZDZg8bC EdOw== 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 :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject:dmarc-filter :dkim-signature:dkim-signature; bh=QWVLUKljBjaduII51qnvw227QLAmMiADCILr1F54K/M=; b=B+pl10ZX16eZ5mst1kCve4jABTpQ27iNHwFzWIyssJHBb19dgRrJL75Si6W93QqzGG 0OJPU+ygkO/n4B9hvNzU3PELBfv0XohEUmhFdm6x46g2KpJNRKfXtM8bvkGw7z/0gZlT 0R8wnirxioDgQ8U6260bkBcma/0nuuo4FnY03F96TX6v9SqaooYAgobRz9Xa9VfWPFHH ovSy9E90iN9Cgfjdk8waUY+FJQN7qgRkrkvlwO5kQoMd2/APFif5+wqgpn8LYyIHcB5Z 3l5kJJH9ksb0C5BE4vzat+AwBzTUqHKI3H7O0TZ/hf3tD6SM1TAMKfmGaYayFSA9j41D nnvw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@codeaurora.org header.s=default header.b=B5HKKSVZ; dkim=pass header.i=@codeaurora.org header.s=default header.b=atN1Si4h; 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 n75si1487858pjc.27.2019.06.18.00.13.56; Tue, 18 Jun 2019 00:14:12 -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=@codeaurora.org header.s=default header.b=B5HKKSVZ; dkim=pass header.i=@codeaurora.org header.s=default header.b=atN1Si4h; 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 S1728913AbfFRHNm (ORCPT + 99 others); Tue, 18 Jun 2019 03:13:42 -0400 Received: from smtp.codeaurora.org ([198.145.29.96]:40570 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725919AbfFRHNm (ORCPT ); Tue, 18 Jun 2019 03:13:42 -0400 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id 1E30B6090E; Tue, 18 Jun 2019 07:13:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1560842021; bh=XTiimhV+n9VzS1rZyfIwb9pLvIYzN1Osq4PZikeOl/4=; h=Subject:To:Cc:References:From:Date:In-Reply-To:From; b=B5HKKSVZtAPIdRyC3FIXb3LV8KFcX+dbVBp1rqarNtbdm/clH0IKb80cSXpOfP0pa mwN25N8RhWG8ungDBKCrG6de/pRJeMCTcZkulUrln5kgwdq650TOGqxvIFVySUzrpd I1udRLOjLEzlNUSn4rnWuLoKwEQpWcjj+wPsOO7o= X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on pdx-caf-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.7 required=2.0 tests=ALL_TRUSTED,BAYES_00, DKIM_INVALID,DKIM_SIGNED,SPF_NONE autolearn=no autolearn_force=no version=3.4.0 Received: from [10.201.2.161] (blr-c-bdr-fw-01_globalnat_allzones-outside.qualcomm.com [103.229.19.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: sricharan@smtp.codeaurora.org) by smtp.codeaurora.org (Postfix) with ESMTPSA id 30887602BC; Tue, 18 Jun 2019 07:13:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1560842019; bh=XTiimhV+n9VzS1rZyfIwb9pLvIYzN1Osq4PZikeOl/4=; h=Subject:To:Cc:References:From:Date:In-Reply-To:From; b=atN1Si4hNIPPz+RxguhRNz9bE9uWQZ1ukCyEbAdtLm1WsHgFACS5aWiBBY39HnJt0 OhThHmAdJxVJLbzajmtEBFRzm9kDHG5gxRLrEmhI/bFVQ5+qGOLFqmzl5V6s6ZHJOY zyG2oH9rQ/3R4SEVodbGQb6IcbTrAICXmajFolpM= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 30887602BC Authentication-Results: pdx-caf-mail.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: pdx-caf-mail.web.codeaurora.org; spf=none smtp.mailfrom=sricharan@codeaurora.org Subject: Re: [PATCH] dmaengine: qcom-bam: fix circular buffer handling To: Srinivas Kandagatla , vkoul@kernel.org Cc: dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org References: <20190614142012.31384-1-srinivas.kandagatla@linaro.org> From: Sricharan R Message-ID: Date: Tue, 18 Jun 2019 12:43:35 +0530 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.7.0 MIME-Version: 1.0 In-Reply-To: <20190614142012.31384-1-srinivas.kandagatla@linaro.org> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Srini, On 6/14/2019 7:50 PM, Srinivas Kandagatla wrote: > For some reason arguments to most of the circular buffers > macros are used in reverse, tail is used for head and vice versa. > > This leads to bam thinking that there is an extra descriptor at the > end and leading to retransmitting descriptor which was not scheduled > by any driver. This happens after MAX_DESCRIPTORS (4096) are scheduled > and done, so most of the drivers would not notice this, unless they are > heavily using bam dma. Originally found this issue while testing > SoundWire over SlimBus on DB845c which uses DMA very heavily for > read/writes. > > Signed-off-by: Srinivas Kandagatla > --- > drivers/dma/qcom/bam_dma.c | 9 ++++----- > 1 file changed, 4 insertions(+), 5 deletions(-) > > diff --git a/drivers/dma/qcom/bam_dma.c b/drivers/dma/qcom/bam_dma.c > index cb860cb53c27..43d7b0a9713a 100644 > --- a/drivers/dma/qcom/bam_dma.c > +++ b/drivers/dma/qcom/bam_dma.c > @@ -350,8 +350,8 @@ static const struct reg_offset_data bam_v1_7_reg_info[] = { > #define BAM_DESC_FIFO_SIZE SZ_32K > #define MAX_DESCRIPTORS (BAM_DESC_FIFO_SIZE / sizeof(struct bam_desc_hw) - 1) > #define BAM_FIFO_SIZE (SZ_32K - 8) > -#define IS_BUSY(chan) (CIRC_SPACE(bchan->tail, bchan->head,\ > - MAX_DESCRIPTORS + 1) == 0) > +#define IS_BUSY(chan) (CIRC_SPACE(bchan->head, bchan->tail,\ > + MAX_DESCRIPTORS) == 0) > > struct bam_chan { > struct virt_dma_chan vc; > @@ -806,7 +806,7 @@ static u32 process_channel_irqs(struct bam_device *bdev) > offset /= sizeof(struct bam_desc_hw); > > /* Number of bytes available to read */ > - avail = CIRC_CNT(offset, bchan->head, MAX_DESCRIPTORS + 1); > + avail = CIRC_CNT(bchan->head, offset, MAX_DESCRIPTORS); > one question, so MAX_DESCRIPTORS is already a mask, #define MAX_DESCRIPTORS (BAM_DESC_FIFO_SIZE / sizeof(struct bam_desc_hw) - 1) CIRC_CNT/SPACE macros also does a size - 1, so would it not be a problem if we just pass MAX_DESCRIPTORS ? Regards, Sricharan > list_for_each_entry_safe(async_desc, tmp, > &bchan->desc_list, desc_node) { > @@ -997,8 +997,7 @@ static void bam_start_dma(struct bam_chan *bchan) > bam_apply_new_config(bchan, async_desc->dir); > > desc = async_desc->curr_desc; > - avail = CIRC_SPACE(bchan->tail, bchan->head, > - MAX_DESCRIPTORS + 1); > + avail = CIRC_SPACE(bchan->head, bchan->tail, MAX_DESCRIPTORS); > > if (async_desc->num_desc > avail) > async_desc->xfer_len = avail; > -- "QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation