Received: by 2002:a25:868d:0:0:0:0:0 with SMTP id z13csp1535324ybk; Sun, 10 May 2020 20:19:10 -0700 (PDT) X-Google-Smtp-Source: APiQypL2zEzxCYtVVSWesbCPkLsJIwCa4GC6VtITYAuAGYDE1mixmMXy+Cv8VC7+C3QD4VJS9dwl X-Received: by 2002:aa7:d455:: with SMTP id q21mr11293050edr.235.1589167149941; Sun, 10 May 2020 20:19:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1589167149; cv=none; d=google.com; s=arc-20160816; b=lV2rgHweSjSKPcyB6Vbmc2jL6qaq4BIkiD9ks1eCY+kKZyU4GIYg7FWsWBb+uD1bmM cNVcptIiDXzHmf9hJk7QUjXQoCto833IJgQu5CL9atKt8IGxDdoKYxPHt0XHohSpGwzj lUD4XAP0axVMYe6UEMyzuz/c4/8PPY1/yeU7jPRmsfjS/Z5//IskDqCSGpq8wZnR5xx7 OJYNDtD1r+bW5UzjGwfZSRjj2/EzQkUrTIhqx8qRyd1mfvGBSZ0iDMiqyCU0DZQsA7Ek C0MaNo8YlpMj2Iyq2xd9CEV58jbjd3nORmy6cesDSucrPQXBO4W+8Lg+7INjfwMc5ixP 6WtQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:in-reply-to:content-disposition :mime-version:references:message-id:subject:cc:to:from:date; bh=bkIkaUE5NNVLFnUBW5OecIA3DmtQLN57j+uEal9j9c4=; b=omZgzHs6EQ+28HGdYtAGV34t5Qe0YlNKaUHjENoeiBhqeqOKnnk+3rgJQbqoAtIaKh pF75oaBahuCQIdbq44qjcRevt4vK++TbBkhWYsrVct2rqYbSwWc2yjdapGc71grLRSi6 6k66pPej1IeJYsIHvi5MZMU35zlQPnqG15pcY+e/a46zL+HvIdFgkNcqwiYnfHDYkQe4 mhP/PbDvH6QUJXAMLSM0YxOy7HLUYDWNC3b8fzESH9TLNR1TV3yM2O7BPBvvjL+oYjPG mnZAcOz1vCUy8yFbjvCRHfjg2MMle44nZ0qF8qFKLMvlzmncbQBH1wfp/Vorg1N6FdqN q8wA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id j2si5127311edk.17.2020.05.10.20.18.43; Sun, 10 May 2020 20:19:09 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728436AbgEKDOL (ORCPT + 99 others); Sun, 10 May 2020 23:14:11 -0400 Received: from mail.baikalelectronics.com ([87.245.175.226]:47868 "EHLO mail.baikalelectronics.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727094AbgEKDOL (ORCPT ); Sun, 10 May 2020 23:14:11 -0400 Received: from localhost (unknown [127.0.0.1]) by mail.baikalelectronics.ru (Postfix) with ESMTP id 7EFF88030807; Mon, 11 May 2020 03:13:46 +0000 (UTC) X-Virus-Scanned: amavisd-new at baikalelectronics.ru Received: from mail.baikalelectronics.ru ([127.0.0.1]) by localhost (mail.baikalelectronics.ru [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 39Gwz_y8nH4Q; Mon, 11 May 2020 06:13:45 +0300 (MSK) Date: Mon, 11 May 2020 06:13:44 +0300 From: Serge Semin To: Andy Shevchenko CC: Serge Semin , Mark Brown , Vinod Koul , Viresh Kumar , Dan Williams , Alexey Malahov , Thomas Bogendoerfer , Paul Burton , Ralf Baechle , Arnd Bergmann , Rob Herring , , , , Subject: Re: [PATCH v2 4/6] dmaengine: dw: Print warning if multi-block is unsupported Message-ID: <20200511031344.lnq3wesjuy5cwbfj@mobilestation> References: <20200306131048.ADBE18030797@mail.baikalelectronics.ru> <20200508105304.14065-1-Sergey.Semin@baikalelectronics.ru> <20200508105304.14065-5-Sergey.Semin@baikalelectronics.ru> <20200508112604.GJ185537@smile.fi.intel.com> <20200508115334.GE4820@sirena.org.uk> <20200508190622.GQ185537@smile.fi.intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Disposition: inline In-Reply-To: <20200508190622.GQ185537@smile.fi.intel.com> X-ClientProxiedBy: MAIL.baikal.int (192.168.51.25) To mail (192.168.51.25) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, May 08, 2020 at 10:06:22PM +0300, Andy Shevchenko wrote: > On Fri, May 08, 2020 at 12:53:34PM +0100, Mark Brown wrote: > > On Fri, May 08, 2020 at 02:26:04PM +0300, Andy Shevchenko wrote: > > > On Fri, May 08, 2020 at 01:53:02PM +0300, Serge Semin wrote: > > > > > > Multi-block support provides a way to map the kernel-specific SG-table so > > > > the DW DMA device would handle it as a whole instead of handling the > > > > SG-list items or so called LLP block items one by one. So if true LLP > > > > list isn't supported by the DW DMA engine, then soft-LLP mode will be > > > > utilized to load and execute each LLP-block one by one. A problem may > > > > happen for multi-block DMA slave transfers, when the slave device buffers > > > > (for example Tx and Rx FIFOs) depend on each other and have size smaller > > > > than the block size. In this case writing data to the DMA slave Tx buffer > > > > may cause the Rx buffer overflow if Rx DMA channel is paused to > > > > reinitialize the DW DMA controller with a next Rx LLP item. In particular > > > > We've discovered this problem in the framework of the DW APB SPI device > > > > > Mark, do we have any adjustment knobs in SPI core to cope with this? > > > > Frankly I'm not sure I follow what the issue is - is an LLP block item > > different from a SG list entry? As far as I can tell the problem is > > that the DMA controller does not support chaining transactions together > > and possibly also has a limit on the transfer size? Or possibly some > > issue with the DMA controller locking the CPU out of the I/O bus for > > noticable periods? I can't really think what we could do about that if > > the issue is transfer sizes, that just seems like hardware which is > > never going to work reliably. If the issue is not being able to chain > > transfers then possibly an option to linearize messages into a single > > transfer as suggested to cope with PIO devices with ill considered > > automated chip select handling, though at some point you have to worry > > about the cost of the memcpy() vs the cost of just doing PIO. > > My understanding that the programmed transfers (as separate items in SG list) > can be desynchronized due to LLP emulation in DMA driver. And suggestion > probably is to use only single entry (block) SG lists will do the trick (I > guess that we can configure SPI core do or do not change CS between them). CS has nothing to do with this. The problem is pure in the LLP emulation and Tx channel being enabled before the Rx channel initialization during the next LLP reload. Yes, if we have Tx and Rx SG/LLP list consisting of a single item, then there is no problem. Though it would be good to fix the issue in general instead of setting such fatal restrictions. If we had some fence of blocking one channel before another is reinitialized, the problem could theoretically be solved. It could be an interdependent DMA channels functionality. If two channels are interdependent than the Rx channel could pause the Tx channel while it's in the IRQ handling procedure (or at some other point... call a callback?). This !might! fix the problem, but with no 100% guarantee of success. It will work only if IRQ handler is executed with small latency, so the Tx channel is paused before the Rx FIFO has been filled and overrun. Another solution could be to reinitialize the interdependent channels synchronously. Tx channel stops and waits until the Rx channel is finished its business of data retrieval from SPI Rx FIFO. Though this solution implies the Tx and Rx buffers of SG/LLP items being of the same size. Although non of these solutions I really like to spend some time for its development. > > > > > working in conjunction with DW DMA. Since there is no comprehensive way to > > > > fix it right now lets at least print a warning for the first found > > > > multi-blockless DW DMAC channel. This shall point a developer to the > > > > possible cause of the problem if one would experience a sudden data loss. > > > > I thought from the description of the SPI driver I just reviewed that > > this hardware didn't have DMA? Or are there separate blocks in the > > hardware that have a more standard instantiation of the DesignWare SPI > > controller with DMA attached? > > I speculate that the right words there should be 'we don't enable DMA right now > due to some issues' (see above). It's your speculation and it's kind of offensive implicitly implying I was lying. If our System SPI controller had DMA I would have said that and would have made it supported in the driver and probably wouldn't bother with a dedicated driver development. Again the Baikal-T1 System Boot SPI controller doesn't have DMA, doesn't have IRQ, is equipped with only 8 bytes FIFO, is embedded into the Boot Controller, provides a dirmap interface to an SPI flash and so on. Baikal-T1 has also got two more normal DW APB SSI interfaces with 64 bytes FIFO, IRQ and DMA. -Sergey > > -- > With Best Regards, > Andy Shevchenko > >