Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp1769006imm; Sat, 2 Jun 2018 08:29:46 -0700 (PDT) X-Google-Smtp-Source: ADUXVKKwaNImuDIk+TK4nmsxCZne2Y7oCxOYnBYv241ZQBDAfb8mErUTcjJsuc9QVIKndhRseM04 X-Received: by 2002:a17:902:6847:: with SMTP id f7-v6mr15570416pln.173.1527953386120; Sat, 02 Jun 2018 08:29:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1527953386; cv=none; d=google.com; s=arc-20160816; b=fOffMHUkGSX/4Z1+hvNZkKcDdHw7rooCJhCh8NsfeD9NzhLvfN7Q5/k6W5ngMgkugB G7cHpiNEG7JtVAfug+waunC/5FngKssibhwN3poWVw1eIgBlb23Mew01oRyet12ZUC6x k75bpx+LYE/pwzXeaZIT9mtf3BWkuXoj1GEYO+23fDUTvtOemzZ0ejQm4/+N+MGgZqb9 aqjDX9INwApJMTEQ1tEueh0u/NKgblDObTb6xxpaGOsAQpltKnIaArdWo0NTQCZowFQE E2EuUm6/EJK58AViNsyAt330atI4Z1g+De3AwW0V7fun8xzWNjjs/Kp32DVqzri+yZqp hPDw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :dkim-signature:arc-authentication-results; bh=vX4c2wiclTLm/np+fx0tJ7uWPmck3OQmM5IbObk4Uzo=; b=EHQ49qfywhmD36xgjySPOgZBMfddhNqow8qMl2aQH9xfkNVerF2i671hrV2gav5jFL JQ9nmOU7TioeSNhwZUctpaJwVPNo9rnMPCXWdHLZui1W5dUHGCZg8Tq/QOilmMmm5MC9 kPTCYmgI11ss/lD9J9zDDi5CHfsPyGoXHVk3Y4xoYK7SCtCmtRJToHdQ08x7/v1/xD3k rWTWmhGZJfROuZ+8khe1k645BYnB7Z4X6nA4FyqixkK8bugJG6sFzr3pLW2q/Xo40vov +b+3Vmn+l4GOG2FLVYTJ23HLaCpd9Y3TVwIeG8KaMfUaIw8aHxBgWb4TAaWNyLZvkPdD lnnQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=hpfUiVuz; 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=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id q70-v6si41238877pfa.272.2018.06.02.08.28.52; Sat, 02 Jun 2018 08:29:46 -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=@gmail.com header.s=20161025 header.b=hpfUiVuz; 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=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751381AbeFBP1x (ORCPT + 99 others); Sat, 2 Jun 2018 11:27:53 -0400 Received: from mail-lf0-f67.google.com ([209.85.215.67]:34519 "EHLO mail-lf0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750850AbeFBP1v (ORCPT ); Sat, 2 Jun 2018 11:27:51 -0400 Received: by mail-lf0-f67.google.com with SMTP id o9-v6so18986804lfk.1; Sat, 02 Jun 2018 08:27:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=vX4c2wiclTLm/np+fx0tJ7uWPmck3OQmM5IbObk4Uzo=; b=hpfUiVuzg2KueJ4DJAh8K/hkyZDBhO+mNZsulL0H5CWQtSjk38xXRkIXo7jpCH5trF 3l303ek8CxE4E5K6zHaba65oUM3YUt8RsfVfChIlUhkM2hpyStCkceKhDHNwlC1x7H5M frsJ2k/KbewuGKHzL79XzxU0H5jf8Mff6u0fskz8NdiVs6VpIDaqsPsyX+uBDqyx2b5r KfIfoA/YdqZvPm32x6hl9uhzR1UNSg5bt2+SSR1oT2xXNhcaigOO09/xwpdDq9LqWvLv a6Qkm3SAxr/bQnz20gYTj9M+GxtQ+IURCtWY6w3vfuouZ/VXtGkU5TKPKeu4RG/v9jmQ HBqA== 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; bh=vX4c2wiclTLm/np+fx0tJ7uWPmck3OQmM5IbObk4Uzo=; b=mk/9ukoGIQ/PVG/fpVUyC7sQ75XwZ9wF7F5dPJLBthHpZ2L8qz7MmtR841HSslYEv+ x4SR8ZEloewbpGWw+bmIUADteAYO9x68Log+7Qlelx0f8/lYnRFTeT1kKbj2WXyOI6mN RYbUtlr+nMDrvTC4dVii6r1ufTH6nqp3o52Ix+pFsWINcbkoHV/fy29n3OerAY+frVi2 maeDXUebHLUdDRI5xfzHk6fWT5YjflVHbuMGbpA/O6Qp4tuRNGm/nugRHBfuNwwR/Rbw sY9Ahi9R2lJCflnwWTXL7+wRwceXa89stJ5GUid5iOWdq5QLEKmstiepamc9CQ3Sx2j5 YiYQ== X-Gm-Message-State: ALKqPwdcWIBk7GBMdDkavMEP4edmJSerdG2ok5kfoOcy7+Qv8VkIrGro flg6F5LlVLpmRsUi2J2vRnQ= X-Received: by 2002:a19:12c7:: with SMTP id 68-v6mr9644169lfs.10.1527953270052; Sat, 02 Jun 2018 08:27:50 -0700 (PDT) Received: from localhost.localdomain ([31.0.82.127]) by smtp.gmail.com with ESMTPSA id q4-v6sm4683993ljh.31.2018.06.02.08.27.46 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 02 Jun 2018 08:27:48 -0700 (PDT) From: Janusz Krzysztofik To: Vinod Koul Cc: dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org, Peter Ujfalusi , Jarkko Nikula , Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai , alsa-devel@alsa-project.org, linux-omap@vger.kernel.org, Aaro Koskinen , Tony Lindgren , linux-arm-kernel@lists.infradead.org, Janusz Krzysztofik Subject: [PATCH v2] DMA: OMAP: fix OMAP1510 incorrect residue_granularity Date: Sat, 2 Jun 2018 17:27:19 +0200 Message-Id: <20180602152719.28464-1-jmkrzyszt@gmail.com> X-Mailer: git-send-email 2.16.1 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Commit 0198d7bb8a0c ("ASoC: omap-mcbsp: Convert to use the sdma-pcm instead of omap-pcm") resulted in broken audio playback on OMAP1510 (discovered on Amstrad Delta). When running on OMAP1510, omap-pcm used to obtain DMA offset from snd_dmaengine_pcm_pointer_no_residue() based on DMA interrupt triggered software calculations instead of snd_dmaengine_pcm_pointer() which depended on residue value calculated from omap_dma_get_src_pos(). Similar code path is still available in now used sound/soc/soc-generic-dmaengine-pcm.c but it is not triggered. It was verified already before that omap_get_dma_src_pos() from arch/arm/plat-omap/dma.c didn't work correctly for OMAP1510 - see commit 1bdd7419910c ("ASoC: OMAP: fix OMAP1510 broken PCM pointer callback") for details. Apparently the same applies to its successor, omap_dma_get_src_pos() from drivers/dma/ti/omap-dma.c. On the other hand, snd_dmaengine_pcm_pointer_no_residue() is described as depreciated and discouraged for use in new drivers because of its unreliable accuracy. However, it seems the only working option for OPAM1510 now, as long as a software calculated residue is not implemented as OMAP1510 fallback in omap-dma. Using snd_dmaengine_pcm_pointer_no_residue() code path instead of snd_dmaengine_pcm_pointer() in sound/soc/soc-generic-dmaengine-pcm.c can be triggered in two ways: - by passing pcm->flags |= SND_DMAENGINE_PCM_FLAG_NO_RESIDUE from sound/soc/omap/sdma-pcm.c, - by passing dma_caps.residue_granularity = DMA_RESIDUE_GRANULARITY_DESCRIPTOR from DMA engine. Let's do the latter. Created and tested against next-20180531 tag from linux-next tree. Signed-off-by: Janusz Krzysztofik --- Changelog: v2: apply the patch against omap-dma.c moved to drivers/dma/ti/ drivers/dma/ti/omap-dma.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/dma/ti/omap-dma.c b/drivers/dma/ti/omap-dma.c index b73fb51fbc81..96b5096c26dd 100644 --- a/drivers/dma/ti/omap-dma.c +++ b/drivers/dma/ti/omap-dma.c @@ -1485,7 +1485,11 @@ static int omap_dma_probe(struct platform_device *pdev) od->ddev.src_addr_widths = OMAP_DMA_BUSWIDTHS; od->ddev.dst_addr_widths = OMAP_DMA_BUSWIDTHS; od->ddev.directions = BIT(DMA_DEV_TO_MEM) | BIT(DMA_MEM_TO_DEV); - od->ddev.residue_granularity = DMA_RESIDUE_GRANULARITY_BURST; + if (__dma_omap15xx(od->plat->dma_attr)) + od->ddev.residue_granularity = + DMA_RESIDUE_GRANULARITY_DESCRIPTOR; + else + od->ddev.residue_granularity = DMA_RESIDUE_GRANULARITY_BURST; od->ddev.max_burst = SZ_16M - 1; /* CCEN: 24bit unsigned */ od->ddev.dev = &pdev->dev; INIT_LIST_HEAD(&od->ddev.channels); -- 2.16.1