mbox series

[RFC,00/11] dmaengine: bcm2835: add BCM2711 40-bit DMA support

Message ID 1640606743-10993-1-git-send-email-stefan.wahren@i2se.com (mailing list archive)
Headers show
Series dmaengine: bcm2835: add BCM2711 40-bit DMA support | expand

Message

Stefan Wahren Dec. 27, 2021, 12:05 p.m. UTC
The BCM2711 has 4 DMA channels with a 40-bit address range, allowing them
to access the full 4GB of memory on a Pi 4. This patch series serves as a
basis for a discussion (just compile tested, so don't expect anything working)
which include the following points:

* correct DT binding and representation for BCM2711

According to the vendor DTS [1] the 4 DMA channels are connected to SCB.
I'm not sure how this is properly adapted to the mainline DT.

* general implementation approach

The vendor approach mapped all the BCM2835 control block bits to the BCM2711
layout and the rest of the differences are handled by a lot of is_40bit_channel
conditions. An advantage of this is the small amount of changes to the driver.
But on the down side the code is now much harder to understand and maintain.

This series tries to implement this feature in a more cleaner way
while keeping it in the bcm2835-dma driver. Before this series the driver
has ~ 1000 lines and after that ~ 1500 lines.

So the question is this approach acceptable?

Patches 1 - 3 are just clean-ups.

Disclaimer: my knowledge about the DMA controller is very limited

More information:

https://datasheets.raspberrypi.com/bcm2711/bcm2711-peripherals.pdf

[1] - https://github.com/raspberrypi/linux/blob/561deffcf471ba0f7bd48541d06a79d5aa38d297/arch/arm/boot/dts/bcm2711-rpi-ds.dtsi#L47
[2] - https://github.com/raspberrypi/linux/commit/44364bd140b0bc9187c881fbdc4ee358961059d5

Stefan Wahren (11):
  ARM: dts: bcm283x: Update DMA node name per DT schema
  dt-bindings: dma: Convert brcm,bcm2835-dma to json-schema
  dmaengine: bcm2835: Support common dma-channel-mask
  dmaengine: bcm2835: move CB info generation into separate function
  dmaengine: bcm2835: move CB final extra info generation into function
  dmaengine: bcm2835: make address increment platform independent
  dmaengine: bcm2385: drop info parameters
  dmaengine: bcm2835: pass dma_chan to generic functions
  dmaengine: bcm2835: introduce multi platform support
  dmaengine: bcm2835: add BCM2711 40-bit DMA support
  ARM: dts: bcm2711: add bcm2711-dma node

 .../devicetree/bindings/dma/brcm,bcm2835-dma.txt   |  83 ---
 .../devicetree/bindings/dma/brcm,bcm2835-dma.yaml  | 107 +++
 arch/arm/boot/dts/bcm2711.dtsi                     |  18 +-
 arch/arm/boot/dts/bcm2835-common.dtsi              |   2 +-
 drivers/dma/bcm2835-dma.c                          | 745 +++++++++++++++++----
 5 files changed, 734 insertions(+), 221 deletions(-)
 delete mode 100644 Documentation/devicetree/bindings/dma/brcm,bcm2835-dma.txt
 create mode 100644 Documentation/devicetree/bindings/dma/brcm,bcm2835-dma.yaml

Comments

Stefan Wahren Jan. 23, 2022, 2:08 p.m. UTC | #1
Hi,

Am 27.12.21 um 13:05 schrieb Stefan Wahren:
> The BCM2711 has 4 DMA channels with a 40-bit address range, allowing them
> to access the full 4GB of memory on a Pi 4. This patch series serves as a
> basis for a discussion (just compile tested, so don't expect anything working)
> which include the following points:
>
> * correct DT binding and representation for BCM2711
>
> According to the vendor DTS [1] the 4 DMA channels are connected to SCB.
> I'm not sure how this is properly adapted to the mainline DT.
>
> * general implementation approach
>
> The vendor approach mapped all the BCM2835 control block bits to the BCM2711
> layout and the rest of the differences are handled by a lot of is_40bit_channel
> conditions. An advantage of this is the small amount of changes to the driver.
> But on the down side the code is now much harder to understand and maintain.
>
> This series tries to implement this feature in a more cleaner way
> while keeping it in the bcm2835-dma driver. Before this series the driver
> has ~ 1000 lines and after that ~ 1500 lines.
>
> So the question is this approach acceptable?
>
> Patches 1 - 3 are just clean-ups.
>
> Disclaimer: my knowledge about the DMA controller is very limited
>
> More information:
>
> https://datasheets.raspberrypi.com/bcm2711/bcm2711-peripherals.pdf
>
> [1] - https://github.com/raspberrypi/linux/blob/561deffcf471ba0f7bd48541d06a79d5aa38d297/arch/arm/boot/dts/bcm2711-rpi-ds.dtsi#L47
> [2] - https://github.com/raspberrypi/linux/commit/44364bd140b0bc9187c881fbdc4ee358961059d5
would be nice to get some input aka gentle ping.
Vinod Koul Feb. 15, 2022, 11:20 a.m. UTC | #2
On 23-01-22, 15:08, Stefan Wahren wrote:
> Hi,
> 
> Am 27.12.21 um 13:05 schrieb Stefan Wahren:
> > The BCM2711 has 4 DMA channels with a 40-bit address range, allowing them
> > to access the full 4GB of memory on a Pi 4. This patch series serves as a
> > basis for a discussion (just compile tested, so don't expect anything working)
> > which include the following points:
> >
> > * correct DT binding and representation for BCM2711
> >
> > According to the vendor DTS [1] the 4 DMA channels are connected to SCB.
> > I'm not sure how this is properly adapted to the mainline DT.
> >
> > * general implementation approach
> >
> > The vendor approach mapped all the BCM2835 control block bits to the BCM2711
> > layout and the rest of the differences are handled by a lot of is_40bit_channel
> > conditions. An advantage of this is the small amount of changes to the driver.
> > But on the down side the code is now much harder to understand and maintain.
> >
> > This series tries to implement this feature in a more cleaner way
> > while keeping it in the bcm2835-dma driver. Before this series the driver
> > has ~ 1000 lines and after that ~ 1500 lines.
> >
> > So the question is this approach acceptable?
> >
> > Patches 1 - 3 are just clean-ups.
> >
> > Disclaimer: my knowledge about the DMA controller is very limited
> >
> > More information:
> >
> > https://datasheets.raspberrypi.com/bcm2711/bcm2711-peripherals.pdf
> >
> > [1] - https://github.com/raspberrypi/linux/blob/561deffcf471ba0f7bd48541d06a79d5aa38d297/arch/arm/boot/dts/bcm2711-rpi-ds.dtsi#L47
> > [2] - https://github.com/raspberrypi/linux/commit/44364bd140b0bc9187c881fbdc4ee358961059d5
> would be nice to get some input aka gentle ping.

Somehow patch 10/11 is appearing split from rest of the series. The
series looks fairly okay, dts needs more polishing as Rob indicated
Shengyu Qu June 18, 2023, 7:43 p.m. UTC | #3
Hello Stefan,

Sorry to reply to this old series, but I wonder what happens to this 
series?

Best regards,

Shengyu

> The BCM2711 has 4 DMA channels with a 40-bit address range, allowing them
> to access the full 4GB of memory on a Pi 4. This patch series serves as a
> basis for a discussion (just compile tested, so don't expect anything working)
> which include the following points:
>
> * correct DT binding and representation for BCM2711
>
> According to the vendor DTS [1] the 4 DMA channels are connected to SCB.
> I'm not sure how this is properly adapted to the mainline DT.
>
> * general implementation approach
>
> The vendor approach mapped all the BCM2835 control block bits to the BCM2711
> layout and the rest of the differences are handled by a lot of is_40bit_channel
> conditions. An advantage of this is the small amount of changes to the driver.
> But on the down side the code is now much harder to understand and maintain.
>
> This series tries to implement this feature in a more cleaner way
> while keeping it in the bcm2835-dma driver. Before this series the driver
> has ~ 1000 lines and after that ~ 1500 lines.
>
> So the question is this approach acceptable?
>
> Patches 1 - 3 are just clean-ups.
>
> Disclaimer: my knowledge about the DMA controller is very limited
>
> More information:
>
> https://datasheets.raspberrypi.com/bcm2711/bcm2711-peripherals.pdf
>
> [1] - https://github.com/raspberrypi/linux/blob/561deffcf471ba0f7bd48541d06a79d5aa38d297/arch/arm/boot/dts/bcm2711-rpi-ds.dtsi#L47
> [2] - https://github.com/raspberrypi/linux/commit/44364bd140b0bc9187c881fbdc4ee358961059d5
>
> Stefan Wahren (11):
>    ARM: dts: bcm283x: Update DMA node name per DT schema
>    dt-bindings: dma: Convert brcm,bcm2835-dma to json-schema
>    dmaengine: bcm2835: Support common dma-channel-mask
>    dmaengine: bcm2835: move CB info generation into separate function
>    dmaengine: bcm2835: move CB final extra info generation into function
>    dmaengine: bcm2835: make address increment platform independent
>    dmaengine: bcm2385: drop info parameters
>    dmaengine: bcm2835: pass dma_chan to generic functions
>    dmaengine: bcm2835: introduce multi platform support
>    dmaengine: bcm2835: add BCM2711 40-bit DMA support
>    ARM: dts: bcm2711: add bcm2711-dma node
>
>   .../devicetree/bindings/dma/brcm,bcm2835-dma.txt   |  83 ---
>   .../devicetree/bindings/dma/brcm,bcm2835-dma.yaml  | 107 +++
>   arch/arm/boot/dts/bcm2711.dtsi                     |  18 +-
>   arch/arm/boot/dts/bcm2835-common.dtsi              |   2 +-
>   drivers/dma/bcm2835-dma.c                          | 745 +++++++++++++++++----
>   5 files changed, 734 insertions(+), 221 deletions(-)
>   delete mode 100644 Documentation/devicetree/bindings/dma/brcm,bcm2835-dma.txt
>   create mode 100644 Documentation/devicetree/bindings/dma/brcm,bcm2835-dma.yaml
>
Stefan Wahren June 18, 2023, 9:14 p.m. UTC | #4
Hi Sengyu,

Am 18.06.23 um 21:43 schrieb Shengyu Qu:
> Hello Stefan,
> 
> Sorry to reply to this old series, but I wonder what happens to this 
> series?

i never found the time to prepare a newer version. Unfortunately the 
downstream kernel had a lot of changes regarding this feature recently.

> 
> Best regards,
> 
> Shengyu
> 
>> The BCM2711 has 4 DMA channels with a 40-bit address range, allowing them
>> to access the full 4GB of memory on a Pi 4. This patch series serves as a
>> basis for a discussion (just compile tested, so don't expect anything 
>> working)
>> which include the following points:
>>
>> * correct DT binding and representation for BCM2711
>>
>> According to the vendor DTS [1] the 4 DMA channels are connected to SCB.
>> I'm not sure how this is properly adapted to the mainline DT.
>>
>> * general implementation approach
>>
>> The vendor approach mapped all the BCM2835 control block bits to the 
>> BCM2711
>> layout and the rest of the differences are handled by a lot of 
>> is_40bit_channel
>> conditions. An advantage of this is the small amount of changes to the 
>> driver.
>> But on the down side the code is now much harder to understand and 
>> maintain.
>>
>> This series tries to implement this feature in a more cleaner way
>> while keeping it in the bcm2835-dma driver. Before this series the driver
>> has ~ 1000 lines and after that ~ 1500 lines.
>>
>> So the question is this approach acceptable?
>>
>> Patches 1 - 3 are just clean-ups.
>>
>> Disclaimer: my knowledge about the DMA controller is very limited
>>
>> More information:
>>
>> https://datasheets.raspberrypi.com/bcm2711/bcm2711-peripherals.pdf
>>
>> [1] - 
>> https://github.com/raspberrypi/linux/blob/561deffcf471ba0f7bd48541d06a79d5aa38d297/arch/arm/boot/dts/bcm2711-rpi-ds.dtsi#L47
>> [2] - 
>> https://github.com/raspberrypi/linux/commit/44364bd140b0bc9187c881fbdc4ee358961059d5
>>
>> Stefan Wahren (11):
>>    ARM: dts: bcm283x: Update DMA node name per DT schema
>>    dt-bindings: dma: Convert brcm,bcm2835-dma to json-schema
>>    dmaengine: bcm2835: Support common dma-channel-mask
>>    dmaengine: bcm2835: move CB info generation into separate function
>>    dmaengine: bcm2835: move CB final extra info generation into function
>>    dmaengine: bcm2835: make address increment platform independent
>>    dmaengine: bcm2385: drop info parameters
>>    dmaengine: bcm2835: pass dma_chan to generic functions
>>    dmaengine: bcm2835: introduce multi platform support
>>    dmaengine: bcm2835: add BCM2711 40-bit DMA support
>>    ARM: dts: bcm2711: add bcm2711-dma node
>>
>>   .../devicetree/bindings/dma/brcm,bcm2835-dma.txt   |  83 ---
>>   .../devicetree/bindings/dma/brcm,bcm2835-dma.yaml  | 107 +++
>>   arch/arm/boot/dts/bcm2711.dtsi                     |  18 +-
>>   arch/arm/boot/dts/bcm2835-common.dtsi              |   2 +-
>>   drivers/dma/bcm2835-dma.c                          | 745 
>> +++++++++++++++++----
>>   5 files changed, 734 insertions(+), 221 deletions(-)
>>   delete mode 100644 
>> Documentation/devicetree/bindings/dma/brcm,bcm2835-dma.txt
>>   create mode 100644 
>> Documentation/devicetree/bindings/dma/brcm,bcm2835-dma.yaml
>>