From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [4/5] dmaengine: sprd: Add Spreadtrum DMA configuration From: Baolin Wang Message-Id: Date: Fri, 13 Apr 2018 14:17:34 +0800 To: Vinod Koul Cc: Dan Williams , Eric Long , Mark Brown , dmaengine@vger.kernel.org, LKML List-ID: T24gMTMgQXByaWwgMjAxOCBhdCAxMTo0MywgVmlub2QgS291bCA8dmlub2Qua291bEBpbnRlbC5j b20+IHdyb3RlOgo+IE9uIFRodSwgQXByIDEyLCAyMDE4IGF0IDA3OjM2OjM0UE0gKzA4MDAsIEJh b2xpbiBXYW5nIHdyb3RlOgo+PiA+Pj4gPj4gKy8qCj4+ID4+PiA+PiArICogc3RydWN0IHNwcmRf ZG1hX2NvbmZpZyAtIERNQSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZQo+PiA+Pj4gPj4gKyAqIEBj b25maWc6IGRtYSBzbGF2ZSBjaGFubmVsIGNvbmZpZwo+PiA+Pj4gPj4gKyAqIEBmcmFnbWVudF9s ZW46IHNwZWNpZnkgb25lIGZyYWdtZW50IHRyYW5zZmVyIGxlbmd0aAo+PiA+Pj4gPj4gKyAqIEBi bG9ja19sZW46IHNwZWNpZnkgb25lIGJsb2NrIHRyYW5zZmVyIGxlbmd0aAo+PiA+Pj4gPj4gKyAq IEB0cmFuc2NhdGlvbl9sZW46IHNwZWNpZnkgb25lIHRyYW5zY2F0aW9uIHRyYW5zZmVyIGxlbmd0 aAo+PiA+Pj4gPj4gKyAqIEB3cmFwX3B0cjogd3JhcCBwb2ludGVyIGFkZHJlc3MsIG9uY2UgdGhl IHRyYW5zZmVyIGFkZHJlc3MgcmVhY2hlcyB0aGUKPj4gPj4+ID4+ICsgKiAnd3JhcF9wdHInLCB0 aGUgbmV4dCB0cmFuc2ZlciBhZGRyZXNzIHdpbGwganVtcCB0byB0aGUgJ3dyYXBfdG8nIGFkZHJl c3MuCj4+ID4+PiA+PiArICogQHdyYXBfdG86IHdyYXAganVtcCB0byBhZGRyZXNzCj4+ID4+PiA+ PiArICogQHJlcV9tb2RlOiBzcGVjaWZ5IHRoZSBETUEgcmVxdWVzdCBtb2RlCj4+ID4+PiA+PiAr ICogQGludF9tb2RlOiBzcGVjaWZ5IHRoZSBETUEgaW50ZXJydXB0IHR5cGUKPj4gPj4+ID4+ICsg Ki8KPj4gPj4+ID4+ICtzdHJ1Y3Qgc3ByZF9kbWFfY29uZmlnIHsKPj4gPj4+ID4+ICsgICAgIHN0 cnVjdCBkbWFfc2xhdmVfY29uZmlnIGNvbmZpZzsKPj4gPj4+ID4+ICsgICAgIHUzMiBmcmFnbWVu dF9sZW47Cj4+ID4+PiA+Cj4+ID4+PiA+IHdoeSBub3QgdXNlIF9tYXhidXJzdD8KPj4gPj4+Cj4+ ID4+PiBZZXMsIEkgY2FuIHVzZSBtYXhidXJzdC4KPj4gPj4+Cj4+ID4+PiA+Cj4+ID4+PiA+PiAr ICAgICB1MzIgYmxvY2tfbGVuOwo+PiA+Pj4gPj4gKyAgICAgdTMyIHRyYW5zY2F0aW9uX2xlbjsK Pj4gPj4+ID4KPj4gPj4+ID4gd2hhdCBkb2VzIGJsb2NrIGFuZCB0cmFuc2FjdGlvbiBsZW4gcmVm ZXIgdG8gaGVyZQo+PiA+Pj4KPj4gPj4+ICBPdXIgRE1BIGhhcyAzIHRyYW5zZmVyIG1vZGU6IHRy YW5zYWN0aW9uIHRyYW5zZmVyLCBibG9jayB0cmFuc2ZlciBhbmQKPj4gPj4+IGZyYWdtZW50IHRy YW5zZmVyLiBPbmUgdHJhbnNhY3Rpb24gdHJhbnNmZXIgY2FuIGNvbnRhaW4gc2V2ZXJhbCBibG9j a3MKPj4gPj4+IHRyYW5zZmVyLCBhbmQgZWFjaCBibG9jayBjYW4gYmUgc2V0IHByb3BlciBibG9j ayBzdGVwLiBPbmUgYmxvY2sgY2FuCj4+ID4+PiBjb250YWluIHNldmVyYWwgZnJhZ21lbnRzIHRy YW5zZmVyIHdpdGggcHJvcGVyIGZyYWdtZW50IHN0ZXAuIEl0IGNhbgo+PiA+Pj4gZ2VuZXJhdGUg aW50ZXJydXB0cyB3aGVuIG9uZSB0cmFuc2FjdGlvbiB0cmFuc2ZlciBvciBibG9jayB0cmFuc2Zl ciBvcgo+PiA+Pj4gZnJhZ21lbnQgdHJhbnNmZXIgaXMgY29tcGxldGVkIGlmIHVzZXIgc2V0IHRo ZSBpbnRlcnJ1cHQgdHlwZS4gU28gaGVyZQo+PiA+Pj4gd2Ugc2hvdWxkIHNldCB0aGUgbGVuZ3Ro IGZvciB0cmFuc2FjdGlvbiB0cmFuc2ZlciwgYmxvY2sgdHJhbnNmZXIgYW5kCj4+ID4+PiBmcmFn bWVudCB0cmFuc2Zlci4KPj4gPj4KPj4gPj4gd2hhdCBhcmUgdGhlIG1heCBzaXplIHRoZXNlIHR5 cGVzIHN1cHBvcnQ/Cj4+ID4KPj4gPiBUaGVzZSB0eXBlcyBtYXggc2l6ZSBkZWZpbml0aW9uOgo+ PiA+Cj4+ID4gI2RlZmluZSBTUFJEX0RNQV9GUkdfTEVOX01BU0sgR0VOTUFTSygxNiwgMCkKPj4g Pgo+PiA+ICNkZWZpbmUgU1BSRF9ETUFfQkxLX0xFTl9NQVNLIEdFTk1BU0soMTYsIDApCj4+ID4K Pj4gPiAjZGVmaW5lIFNQUkRfRE1BX1RSU0NfTEVOX01BU0sgR0VOTUFTSygyNywgMCkKPj4gPgo+ PiA+Pj4KPj4gPj4+ID4KPj4gPj4+ID4+ICsgICAgIHBoeXNfYWRkcl90IHdyYXBfcHRyOwo+PiA+ Pj4gPj4gKyAgICAgcGh5c19hZGRyX3Qgd3JhcF90bzsKPj4gPj4+ID4KPj4gPj4+ID4gdGhpcyBz b3VuZCBzZ19saXN0IHRvIG1lLCB3aHkgYXJlIHdlIG5vdCB1c2luZyB0aGF0IGhlcmUKPj4gPj4+ Cj4+ID4+PiBJdCBpcyBzaW1pbGFyIHRvIHNnIGxpc3QsIGJ1dCBpdCBpcyBub3Qgb25lIHNvZnR3 YXJlIGFjdGlvbiwgd2UgaGF2ZQo+PiA+Pj4gaGFyZHdhcmUgcmVnaXN0ZXJzIHRvIGhlbHAgdG8g anVtcCBvbmUgc3BlY2lmaWVkIGFkZHJlc3MuCj4+ID4+Pgo+PiA+Pj4gPgo+PiA+Pj4gPj4gKyAg ICAgZW51bSBzcHJkX2RtYV9yZXFfbW9kZSByZXFfbW9kZTsKPj4gPj4+ID4KPj4gPj4+ID4gTG9v a2luZyBhdCBkZWZpbml0aW9uIG9mIHJlcXVlc3QgbW9kZSB3ZSBoYXZlIGZyYWcsIGJsb2NrLCB0 cmFuc2FjdGlvbiBsaXN0Cj4+ID4+PiA+IGV0Yy4uIFRoYXQgc2hvdWxkIGRlcGVuZCB1cG9uIGRt YSByZXF1ZXN0LiBJZiB5b3UgaGF2ZSBiZWVuIGFza2VkIHRvCj4+ID4+PiA+IHRyYW5zZmVyIGEg bGlzdCwgeW91IHNoYWxsIGNvbmZpZ3VyZSBsaXN0IG1vZGUuIGlmIGl0IGlzIGEgc2luZ2xlCj4+ ID4+PiA+IHRyYW5zYWN0aW9uIHRoZW4gaXQgc2hvdWxkIGJlIHRyYW5zYWN0aW9uIG1vZGUhCj4+ ID4+Pgo+PiA+Pj4gSWYgSSB1bmRlcnN0YW5kIHlvdXIgcG9pbnRzIGNvcnJlY3RseSwgeW91IG1l YW4gd2UgY2FuIHNwZWNpZnkgdGhlCj4+ID4+PiByZXF1ZXN0IG1vZGUgd2hlbiByZXF1ZXN0aW5n IG9uZSBzbGF2ZSBjaGFubmVsIGJ5Cj4+ID4+PiAnZG1hX3JlcXVlc3Rfc2xhdmVfY2hhbm5lbCgp Jy4gQnV0IHdlIG5lZWQgY2hhbmdlIHRoZSByZXF1ZXN0IG1vZGUKPj4gPj4+IGR5bmFtaWNhbGx5 IGZvbGxvd2luZyBkaWZmZXJlbnQgdHJhbnNmZXIgdGFzayBmb3IgdGhpcyBjaGFubmVsLCBzbyBJ Cj4+ID4+PiBhbSBhZnJhaWQgd2UgY2FuIG5vdCBzcGVjaWZ5IHRoZSByZXF1ZXN0IG1vZGUgb2Yg dGhpcyBjaGFubmVsIGF0Cj4+ID4+PiByZXF1ZXN0aW5nIHRpbWUuCj4+ID4+Cj4+ID4+IE5vcGUg YSBjaGFubmVsIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggcmVxdWVzdCB0eXBlLiBZb3UgcmVxdWVz dCBhbmQgZ3JhYiBhCj4+ID4+IGNoYW5uZWwuIFRoZW4geW91IHByZXBhcmUgYSBkZXNjcmlwdG9y IGZvciBhIGRtYSB0cmFuc2FjdGlvbi4gQmFzZWQgb24KPj4gPj4gdHJhbnNhY3Rpb24gcmVxdWVz dGVkIHlvdSBzaG91bGQgaW50ZWxsaWdlbnRseSBicmVhayBpdCBkb3duIGFuZCBjcmVhdGUgYQo+ PiA+PiBkZXNjcmlwdG9yIHdoaWNoIHVzZXMgdHJhbnNhY3Rpb24vYmxvY2svZnJhZ21lbnQgc28g dGhhdCBETUEgdGhyb3VnaHB1dCBpcwo+PiA+PiBlZmZpY2llbnQuIElmIHByZXBhcmUgaGFzIHNn IGxpc3QgdGhlbiB5b3Ugc2hvdWxkIHVzZSBsaW5rIGxpc3QgbW9kZS4KPj4gPj4gRnVydGhlciBp ZiB5b3Ugc3VwcG9ydCBtYXggbGVuZ3RoLCBzYXkgMTZLQiBhbmQgcmVxdWVzdCBpcyBmb3IgMjBL QiB5b3UgbWF5Cj4+ID4+IGJyZWFrIGl0IGRvd24gZm9yIGxpbmsgbGlzdCB3aXRoIHR3byBzZWdt ZW50cy4KPj4gPgo+PiA+IE9LLiBTbyBJIGNhbiBhZGQgb25lIG1vcmUgY2VsbCB0byBzcGVjaWZ5 IHRoZSByZXF1ZXN0IG1vZGUgZm9yIHRoaXMgY2hhbm5lbC4KPj4gPgo+PiA+IGRtYXMgPSA8JmFw ZG1hIDExIFNQUkRfRE1BX0JMS19SRVE+Cj4+ID4KPj4gPj4KPj4gPj4gRWFjaCBwcmVwIGNhbGwg aGFzIGZsYWdzIGFzc29jaWF0ZWQsIHRoYXQgY2FuIGhlbHAgeW91IGNvbmZpZ3VyZSBpbnRlcnJ1 cHQKPj4gPj4gYmVoYXZpb3VyLgo+Pgo+PiBBZnRlciBtb3JlIHRoaW5raW5nLCBJIHRoaW5rIHRo aXMgd2lsbCBiZSBub3QgdXNlZnVsIGZvciB1c2Vycywgc2luY2UKPj4gdXNlcnMgbmVlZCBjb25m aWd1cmUgb25lIERNQSBjaGFubmVsIHRocm91Z2ggZGlmZmVyZW50IDMgcGxhY2VzLAo+PiBzcGVj aWZ5IHRoZSByZXF1ZXN0IG1vZGUgaW4gZHRzLCBzcGVjaWZ5IHRoZSBpbnRlcnJ1cHQgdHlwZSB0 aHJvdWdoCj4+IHByZXAgY2FsbCBmbGFncywgYW5kIG90aGVyIGNvbmZpZ3VyYXRpb24gbmVlZCB0 byBiZSBjb25maWd1cmVkIHRocm91Z2gKPj4gJ3N0cnVjdCBzcHJkX2RtYV9jb25maWcnLiBUaGF0 IGlzIG5vdCBvbmUgZ29vZCBkZXNpZ24gZm9yIHVzZXJzLiBXaGF0Cj4+IGRvIHlvdSB0aGluaz8g VGhhbmtzLgo+Cj4gQWdyZWVkLCB1c2VycyBvbmx5IGNhcmUgYWJvdXQgZ3JhYmJpbmcgYSBjaGFu bmVsLCBzZXR0aW5nIGEgZGVzY3JpcHRvciBhbmQKPiBzdWJtaXR0aW5nIHRoYXQuCj4KPiBJIHRo aW5rIHlvdSBuZWVkIHRvIGdvIGJhY2sgYW5kIHRoaW5rIGFib3V0IHRoaXMgYSBiaXQsIHBsZWFz ZSBkbyBnbyB0aHJ1Cj4gZG1hZW5naW5lIGRvY3VtZW50YXRpb24gYW5kIHNlZSBvdGhlciBkcml2 ZXIgZXhhbXBsZXMuCj4KPiBXZSBkb24ndCB0eXBpY2FsbHkgZXhwb3NlIHRoZXNlIHRvIHVzZXJz LCB0aGV5IGdpdmUgdXMgYSB0cmFuc2ZlciBhbmQgd2Ugc2V0Cj4gdGhhdCB1cCBpbiBoYXJkd2Fy ZSBmb3IgZWZmaWNpZW50LiBJdHMgRE1BIHNvIHBlb3BsZSBleHBlY3QgdXMgdG8gdXNlIGZhc3Rl c3QKPiBtZWNoYW5pc20gYXZhaWxhYmxlLgoKQnV0IHRoZXJlIGFyZSBzb21lIGNvbmZpZ3VyYXRp b24gYXJlIHJlYWxseSBzcGVjaWFsIGZvciBTcHJlYWR0cnVtCkRNQSwgYW5kIG11c3QgbmVlZCB1 c2VyIHRvIHNwZWNpZnkgaG93IHRvIGNvbmZpZ3VyZSwgZXNwZWNpYWxseSBzb21lCnNjZW5hcmlv cyBvZiBhdWRpby4gU28gSSB3YW5kZXIgaWYgd2UgY2FuIGFkZCBvbmUgcG9pbnRlciBmb3IKJ2Rt YV9zbGF2ZV9jb25maWcnIHRvIGV4cGFuZCBzb21lIHNwZWNpYWwgRE1BIGNvbmZpZ3VyYXRpb24K cmVxdWlyZW1lbnRzLCBsaWtlOgoKc3RydWN0IGRtYV9zbGF2ZV9jb25maWcgewogICAgLi4uLi4u CiAgICB1bnNpZ25lZCBpbnQgc2xhdmVfaWQ7CiAgICB2b2lkICpwbGF0Zm9ybV9kYXRhOwp9OwoK U28gaWYgc29tZSBETUEgaGFzIHNvbWUgc3BlY2lhbCBjb25maWd1cmF0aW9uIChzdWNoIGFzIFNw cmVhZHRydW0KRE1BKSwgdGhleSBjYW4gdXNlciB0aGlzIHBsYXRmb3JtX2RhdGEgcG9pbnRlci4g TGlrZSB4aWxpbnggRE1BLCB0aGV5CmFsc28gaGF2ZSBzb21lIHNwZWNpYWwgY29uZmlndXJhdGlv bi4KCj4KPiBJIHdvdWxkIHNheSBzZXR1cCBhcyBMaW5rIGxpc3QgZm9yIHNnIHRyYW5zZmVycyBh bmQgdXNlIG9uZSBvZiB0aGVtIG1vZGVzCj4gKGFnYWluIHRoaW5rIGVmZmljaWVuY3kpIGZvciBz aW5nbGUgdHJhbnNmZXJzLgo+Cj4gQWxzbyB1c2UgYWxsIHRoZSBwYXJhbWV0ZXJzIGluIGRtYV9z bGF2ZV9jb25maWcgYW5kIGFsc28gc2V0dXAgY2FwYWJpbGl0aWVzIGlmCj4gbm90IGRvbmUuCg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753450AbeDMGRh (ORCPT ); Fri, 13 Apr 2018 02:17:37 -0400 Received: from mail-ot0-f174.google.com ([74.125.82.174]:46658 "EHLO mail-ot0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753112AbeDMGRf (ORCPT ); Fri, 13 Apr 2018 02:17:35 -0400 X-Google-Smtp-Source: AIpwx49X0TcvOLERjR9J3uM5vezHFHix6arCO49GWsFayuWwpM/wpGWFwTRlm8DPRDqmerQyO3xtJfkgtf4zawVx0jc= MIME-Version: 1.0 In-Reply-To: <20180413034332.GI6014@localhost> References: <0c2b76aba6a49e583f920ae582d6815fa9cc4361.1523346135.git.baolin.wang@linaro.org> <20180411093634.GC6014@localhost> <20180412093735.GF6014@localhost> <20180413034332.GI6014@localhost> From: Baolin Wang Date: Fri, 13 Apr 2018 14:17:34 +0800 Message-ID: Subject: Re: [PATCH 4/5] dmaengine: sprd: Add Spreadtrum DMA configuration To: Vinod Koul Cc: Dan Williams , Eric Long , Mark Brown , dmaengine@vger.kernel.org, LKML Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 13 April 2018 at 11:43, Vinod Koul wrote: > On Thu, Apr 12, 2018 at 07:36:34PM +0800, Baolin Wang wrote: >> >>> >> +/* >> >>> >> + * struct sprd_dma_config - DMA configuration structure >> >>> >> + * @config: dma slave channel config >> >>> >> + * @fragment_len: specify one fragment transfer length >> >>> >> + * @block_len: specify one block transfer length >> >>> >> + * @transcation_len: specify one transcation transfer length >> >>> >> + * @wrap_ptr: wrap pointer address, once the transfer address reaches the >> >>> >> + * 'wrap_ptr', the next transfer address will jump to the 'wrap_to' address. >> >>> >> + * @wrap_to: wrap jump to address >> >>> >> + * @req_mode: specify the DMA request mode >> >>> >> + * @int_mode: specify the DMA interrupt type >> >>> >> + */ >> >>> >> +struct sprd_dma_config { >> >>> >> + struct dma_slave_config config; >> >>> >> + u32 fragment_len; >> >>> > >> >>> > why not use _maxburst? >> >>> >> >>> Yes, I can use maxburst. >> >>> >> >>> > >> >>> >> + u32 block_len; >> >>> >> + u32 transcation_len; >> >>> > >> >>> > what does block and transaction len refer to here >> >>> >> >>> Our DMA has 3 transfer mode: transaction transfer, block transfer and >> >>> fragment transfer. One transaction transfer can contain several blocks >> >>> transfer, and each block can be set proper block step. One block can >> >>> contain several fragments transfer with proper fragment step. It can >> >>> generate interrupts when one transaction transfer or block transfer or >> >>> fragment transfer is completed if user set the interrupt type. So here >> >>> we should set the length for transaction transfer, block transfer and >> >>> fragment transfer. >> >> >> >> what are the max size these types support? >> > >> > These types max size definition: >> > >> > #define SPRD_DMA_FRG_LEN_MASK GENMASK(16, 0) >> > >> > #define SPRD_DMA_BLK_LEN_MASK GENMASK(16, 0) >> > >> > #define SPRD_DMA_TRSC_LEN_MASK GENMASK(27, 0) >> > >> >>> >> >>> > >> >>> >> + phys_addr_t wrap_ptr; >> >>> >> + phys_addr_t wrap_to; >> >>> > >> >>> > this sound sg_list to me, why are we not using that here >> >>> >> >>> It is similar to sg list, but it is not one software action, we have >> >>> hardware registers to help to jump one specified address. >> >>> >> >>> > >> >>> >> + enum sprd_dma_req_mode req_mode; >> >>> > >> >>> > Looking at definition of request mode we have frag, block, transaction list >> >>> > etc.. That should depend upon dma request. If you have been asked to >> >>> > transfer a list, you shall configure list mode. if it is a single >> >>> > transaction then it should be transaction mode! >> >>> >> >>> If I understand your points correctly, you mean we can specify the >> >>> request mode when requesting one slave channel by >> >>> 'dma_request_slave_channel()'. But we need change the request mode >> >>> dynamically following different transfer task for this channel, so I >> >>> am afraid we can not specify the request mode of this channel at >> >>> requesting time. >> >> >> >> Nope a channel has nothing to do with request type. You request and grab a >> >> channel. Then you prepare a descriptor for a dma transaction. Based on >> >> transaction requested you should intelligently break it down and create a >> >> descriptor which uses transaction/block/fragment so that DMA throughput is >> >> efficient. If prepare has sg list then you should use link list mode. >> >> Further if you support max length, say 16KB and request is for 20KB you may >> >> break it down for link list with two segments. >> > >> > OK. So I can add one more cell to specify the request mode for this channel. >> > >> > dmas = <&apdma 11 SPRD_DMA_BLK_REQ> >> > >> >> >> >> Each prep call has flags associated, that can help you configure interrupt >> >> behaviour. >> >> After more thinking, I think this will be not useful for users, since >> users need configure one DMA channel through different 3 places, >> specify the request mode in dts, specify the interrupt type through >> prep call flags, and other configuration need to be configured through >> 'struct sprd_dma_config'. That is not one good design for users. What >> do you think? Thanks. > > Agreed, users only care about grabbing a channel, setting a descriptor and > submitting that. > > I think you need to go back and think about this a bit, please do go thru > dmaengine documentation and see other driver examples. > > We don't typically expose these to users, they give us a transfer and we set > that up in hardware for efficient. Its DMA so people expect us to use fastest > mechanism available. But there are some configuration are really special for Spreadtrum DMA, and must need user to specify how to configure, especially some scenarios of audio. So I wander if we can add one pointer for 'dma_slave_config' to expand some special DMA configuration requirements, like: struct dma_slave_config { ...... unsigned int slave_id; void *platform_data; }; So if some DMA has some special configuration (such as Spreadtrum DMA), they can user this platform_data pointer. Like xilinx DMA, they also have some special configuration. > > I would say setup as Link list for sg transfers and use one of them modes > (again think efficiency) for single transfers. > > Also use all the parameters in dma_slave_config and also setup capabilities if > not done. -- Baolin.wang Best Regards