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