From patchwork Mon Jun 26 08:01:29 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amit Pundir X-Patchwork-Id: 106314 Delivered-To: patch@linaro.org Received: by 10.140.101.48 with SMTP id t45csp103200qge; Mon, 26 Jun 2017 01:01:53 -0700 (PDT) X-Received: by 10.84.218.206 with SMTP id g14mr21696413plm.290.1498464113883; Mon, 26 Jun 2017 01:01:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1498464113; cv=none; d=google.com; s=arc-20160816; b=qVwSjq6khj02lKp/H5tHvQum5+1fKNKQxjv0Ep2VHCNs/HkdE1O1WyOLcOClrLdTed lUkTtsEZx8XaA2GWaAqrL9428ymLS1Nr9ioz8iwvOklz6syUwLcw4AJ4uCSGZZtZYpzr 2ki/RH4ImqNX9Lo9ZWfG2v8HBXVrN8RY/9FFbTUBIUWeKzb4Z+i17E+vdFfHfvX7YcmN q6caSF4neEW8YNVwi5pKBmj/K/rTMpV9JA/QzcMolYeAfC6hxVvtGqrDuNF5bVUg8UUF Wefl1gaHlR7HDDSbI0IrIDdAcTcn85a6YAQG1ByI+zRXjCfpH600LkrHPdkY8EYKfOsZ xNhQ== 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:message-id:date :subject:cc:to:from:dkim-signature:arc-authentication-results; bh=q8yHvBGBJbKosLm4h+QZlpTOMgJroSG2EwSzSh+ZvTo=; b=ZWQfCy65I659M/9SU8SUJm7fm5TFqkRfE2/JfNHuKECtaD3UF2YzPWO30yHqjqpcFJ nJlj1tad/dayjSgik0GumtEWuodX7QJixV2QJ3pMk9LU1bR8RDKhSgu1AxvBfGSe3Afg c17yMVeaIf4+wIwt9+7IKc/qFDFX04GmDR80938+9P2TYNSufUuvmqR2y6RaGZrQ+3SE 0flbQMfobLdewJyG7enHTh7qs63d91FWKln1hdv291f774QHcW0bQkEXbXTfcwgFK2pK blcMaDrgKAj8/YMiwR5up5tMWY9Ck+ysWwkhroblhEiv8MtkzUxksyZnaBR7LbQuUBq+ /9ig== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.b=KkqEpks7; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-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 102si8959663pld.125.2017.06.26.01.01.53; Mon, 26 Jun 2017 01:01:53 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-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.b=KkqEpks7; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-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 S1751391AbdFZIBx (ORCPT + 6 others); Mon, 26 Jun 2017 04:01:53 -0400 Received: from mail-pg0-f43.google.com ([74.125.83.43]:34315 "EHLO mail-pg0-f43.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751353AbdFZIBw (ORCPT ); Mon, 26 Jun 2017 04:01:52 -0400 Received: by mail-pg0-f43.google.com with SMTP id t186so5466886pgb.1 for ; Mon, 26 Jun 2017 01:01:52 -0700 (PDT) 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; bh=q8yHvBGBJbKosLm4h+QZlpTOMgJroSG2EwSzSh+ZvTo=; b=KkqEpks757b7f20rHqRdZ38LWPxqqqEkf6upNfnIZSPr24pXQJYaeV+tGmdxmexbM/ qHXKsnJlFesC/yvr5ZEHQdGuQrVe3riVVLIoLxVKDNqswYfgd3DUzc+J/fM1l3O894q1 YJIhPr9gPV5/rewCeSeTpElTo4zkE1aUtfjAY= 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; bh=q8yHvBGBJbKosLm4h+QZlpTOMgJroSG2EwSzSh+ZvTo=; b=j3JVz3N51399Tal1D3Y0WcHPSa/PkZbVQLXXYk19PhVhSloeuxGPoDwXGj0qcK7Xe4 4OBDvMP9zhunnK5N4vUNx+WYfC0nFBnhQ7k5MTwaomiBsVk/p+xV3BaVyNm7bdK7OIOR kDsYMRVD1t/9uQcTwiaviznKHnux3EqKz9/tXwOOIfvmC+ZBJ3KP3fObMR+r1YpHJ8Ji mQmMUWjWTpVhjruK5URBQXskGc6JB6Lvy7migUkqM8uqxyNWAwhCTHOfiDdjg5xBZ+n6 zL4OatzFwvN2vPplcLoU7KWevDNdA/dIAwgmA8+Yrs61LT69LXp3KJsLQjfZUWpl4rLm 5Zxw== X-Gm-Message-State: AKS2vOxFoWuZ4wn9Bf8Jf0Whv7ANb2nrGGRKJSigtnoiDWsP1sy4sukF qrekALwbQQ1NmAX49PZtUQ== X-Received: by 10.84.171.193 with SMTP id l59mr22892528plb.139.1498464111861; Mon, 26 Jun 2017 01:01:51 -0700 (PDT) Received: from localhost.localdomain ([106.51.139.251]) by smtp.gmail.com with ESMTPSA id 67sm23673640pfa.83.2017.06.26.01.01.48 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 26 Jun 2017 01:01:50 -0700 (PDT) From: Amit Pundir To: Greg KH Cc: Stable , Matthias Reichl , Martin Sperl , Vinod Koul Subject: [PATCH for-4.9 5/7] dmaengine: bcm2835: Fix cyclic DMA period splitting Date: Mon, 26 Jun 2017 13:31:29 +0530 Message-Id: <1498464091-26753-6-git-send-email-amit.pundir@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1498464091-26753-1-git-send-email-amit.pundir@linaro.org> References: <1498464091-26753-1-git-send-email-amit.pundir@linaro.org> Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Matthias Reichl commit 2201ac6129fa162ac24da089a034bb0971648ebb upstream. The code responsible for splitting periods into chunks that can be handled by the DMA controller missed to update total_len, the number of bytes processed in the current period, when there are more chunks to follow. Therefore total_len was stuck at 0 and the code didn't work at all. This resulted in a wrong control block layout and audio issues because the cyclic DMA callback wasn't executing on period boundaries. Fix this by adding the missing total_len update. Signed-off-by: Matthias Reichl Signed-off-by: Martin Sperl Tested-by: Clive Messer Reviewed-by: Eric Anholt Signed-off-by: Vinod Koul Signed-off-by: Amit Pundir --- drivers/dma/bcm2835-dma.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) -- 2.7.4 diff --git a/drivers/dma/bcm2835-dma.c b/drivers/dma/bcm2835-dma.c index e18dc596cf24..6204cc32d09c 100644 --- a/drivers/dma/bcm2835-dma.c +++ b/drivers/dma/bcm2835-dma.c @@ -251,8 +251,11 @@ static void bcm2835_dma_create_cb_set_length( */ /* have we filled in period_length yet? */ - if (*total_len + control_block->length < period_len) + if (*total_len + control_block->length < period_len) { + /* update number of bytes in this period so far */ + *total_len += control_block->length; return; + } /* calculate the length that remains to reach period_length */ control_block->length = period_len - *total_len;