Thread (16 messages) 16 messages, 4 authors, 2019-02-20

Re: [PATCH 1/3] dt-bindings: dmaengine: Add one new cell to present hardware slave id

From: Baolin Wang <hidden>
Date: 2019-02-20 11:29:39
Also in: dmaengine, linux-devicetree, lkml

On Wed, 20 Feb 2019 at 17:08, Arnd Bergmann [off-list ref] wrote:
On Wed, Feb 20, 2019 at 4:13 AM Baolin Wang [off-list ref] wrote:
quoted
On Tue, 19 Feb 2019 at 20:20, Vinod Koul [off-list ref] wrote:
quoted
On 19-02-19, 17:49, Baolin Wang wrote:
quoted
On Tue, 19 Feb 2019 at 17:30, Geert Uytterhoeven [off-list ref] wrote:
quoted
On Tue, Feb 19, 2019 at 4:15 AM Baolin Wang [off-list ref] wrote:
quoted
On Mon, 18 Feb 2019 at 20:23, Arnd Bergmann [off-list ref] wrote:
quoted
On Mon, Feb 18, 2019 at 11:52 AM Baolin Wang [off-list ref] wrote:
quoted
On Mon, 18 Feb 2019 at 18:31, Arnd Bergmann [off-list ref] wrote:
I did understand the need for a slave-id, I was instead wondering about
the channel-id number. On many SoCs, all channels are equal, and you
just have to pick one of those with the right capabilities for a particular
slave.
Yes, all channels are equal. We just set a unique slave id for the
channel for a particular slave. For example, the SPI slave can use
channel 10 for tx transfer by setting slave id 11, or it also can use
channel 9 for tx transfer by setting same slave id 11.
So the channel selection is software policy, not hardware description, and
thus doesn't belong in DT?

Can't the DMA engine driver allocate channels dynamically, removing the
need to specify this in DT?
In theory we can do as you suggested. But we still want to
manage/assign the DMA channel resources manually for one SoC, we can
make sure some important DMA slaves (such as audio)  can request a DMA
channel at runtime firstly, another benefit is that it is easy to
debug since we can easily know which channel is assigned for this
slave.
Are  you suggesting that you have more users than channels available?
Until now we have not met this issue, but we can not make sure if this
can happen in future. Moreover DMA channel resources are belonging to
the DMA engine's hardware resources, I think it should be described in
DT like many other drivers did.
As far as I can tell, most platforms do not describe the assignment
of resources in DT for dma engines, the numbers in there are meant to
describe whatever is fixed, and most platforms should do it that way.

The naming is sometimes a bit confusing, as a dma request line
assignment can be called a slave-id or a channel-id depending whose
documentation you read. The drivers/dma/virt-dma.c implementation
is used in some cases to represent request numbers as virtual
channels, so a dmaengine driver can allow one dma_request_chan()
per slave, and then assign the hardware channels dynamically
while doing a transfer, rather than having a fixed channel assignment
when we first ask for a channel.
Okay, sounds reasonable to me, and I think no issues will happen if we
assign channels dynamically after some slave usages' investigation.

I will remove channel id from DT in next version. Thanks for all your help.

-- 
Baolin Wang
Best Regards

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help