Skip to content

Commit 2d768fd

Browse files
ajf58kartben
authored andcommitted
rpi_pico2: rp2350: Add DMA support
Add initial support for the RP2350's DMA peripheral, allow tests under drivers/dma/loop_transfer to run on on the Raspberry Pi Pico 2, and update the board's documentation. Signed-off-by: Manuel Aebischer <manuel.aebischer@belden.com> Signed-off-by: Andrew Featherstone <andrew.featherstone@gmail.com>
1 parent 6e96356 commit 2d768fd

File tree

5 files changed

+92
-0
lines changed

5 files changed

+92
-0
lines changed

boards/raspberrypi/rpi_pico2/doc/index.rst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,9 @@ hardware features:
5151
* - Counter
5252
- :kconfig:option:`CONFIG_COUNTER`
5353
- :dtcompatible:`raspberrypi,pico-timer`
54+
* - DMA
55+
- :kconfig:option:`CONFIG_DMA`
56+
- :dtcompatible:`raspberrypi,pico-dma`
5457
* - GPIO
5558
- :kconfig:option:`CONFIG_GPIO`
5659
- :dtcompatible:`raspberrypi,pico-gpio`

boards/raspberrypi/rpi_pico2/rpi_pico2_rp2350a_m33.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ supported:
1212
- adc
1313
- clock
1414
- counter
15+
- dma
1516
- gpio
1617
- hwinfo
1718
- i2c

dts/arm/raspberrypi/rpi_pico/rp2350.dtsi

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -375,6 +375,21 @@
375375
status = "disabled";
376376
};
377377

378+
dma: dma@50000000 {
379+
compatible = "raspberrypi,pico-dma";
380+
reg = <0x50000000 DT_SIZE_K(64)>;
381+
resets = <&reset RPI_PICO_RESETS_RESET_DMA>;
382+
clocks = <&clocks RPI_PICO_CLKID_CLK_SYS>;
383+
interrupts = <10 RPI_PICO_DEFAULT_IRQ_PRIORITY>,
384+
<11 RPI_PICO_DEFAULT_IRQ_PRIORITY>,
385+
<12 RPI_PICO_DEFAULT_IRQ_PRIORITY>,
386+
<13 RPI_PICO_DEFAULT_IRQ_PRIORITY>;
387+
interrupt-names = "dma0", "dma1", "dma2", "dma3";
388+
dma-channels = <16>;
389+
status = "disabled";
390+
#dma-cells = <3>;
391+
};
392+
378393
usbd: usbd@50100000 {
379394
compatible = "raspberrypi,pico-usbd";
380395
reg = <0x50100000 0x10000>;

include/zephyr/dt-bindings/dma/rpi_pico_dma.h

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#define RPI_PICO_DMA_SLOT_TO_DREQ(s) (~(s)&0x3F)
1616
#define RPI_PICO_DMA_DREQ_TO_SLOT RPI_PICO_DMA_SLOT_TO_DREQ
1717

18+
#if defined(CONFIG_SOC_SERIES_RP2040)
1819
#define RPI_PICO_DMA_SLOT_PIO0_TX0 RPI_PICO_DMA_DREQ_TO_SLOT(0x00)
1920
#define RPI_PICO_DMA_SLOT_PIO0_TX1 RPI_PICO_DMA_DREQ_TO_SLOT(0x01)
2021
#define RPI_PICO_DMA_SLOT_PIO0_TX2 RPI_PICO_DMA_DREQ_TO_SLOT(0x02)
@@ -60,5 +61,69 @@
6061
#define RPI_PICO_DMA_SLOT_DMA_TIMER2 RPI_PICO_DMA_DREQ_TO_SLOT(0x3D)
6162
#define RPI_PICO_DMA_SLOT_DMA_TIMER3 RPI_PICO_DMA_DREQ_TO_SLOT(0x3E)
6263
#define RPI_PICO_DMA_SLOT_FORCE RPI_PICO_DMA_DREQ_TO_SLOT(0x3F)
64+
#endif /* defined(CONFIG_SOC_SERIES_RP2040) */
65+
66+
#if defined(CONFIG_SOC_SERIES_RP2350)
67+
#define RPI_PICO2_DMA_SLOT_PIO0_TX0 RPI_PICO_DMA_DREQ_TO_SLOT(0x00)
68+
#define RPI_PICO2_DMA_SLOT_PIO0_TX1 RPI_PICO_DMA_DREQ_TO_SLOT(0x01)
69+
#define RPI_PICO2_DMA_SLOT_PIO0_TX2 RPI_PICO_DMA_DREQ_TO_SLOT(0x02)
70+
#define RPI_PICO2_DMA_SLOT_PIO0_TX3 RPI_PICO_DMA_DREQ_TO_SLOT(0x03)
71+
#define RPI_PICO2_DMA_SLOT_PIO0_RX0 RPI_PICO_DMA_DREQ_TO_SLOT(0x04)
72+
#define RPI_PICO2_DMA_SLOT_PIO0_RX1 RPI_PICO_DMA_DREQ_TO_SLOT(0x05)
73+
#define RPI_PICO2_DMA_SLOT_PIO0_RX2 RPI_PICO_DMA_DREQ_TO_SLOT(0x06)
74+
#define RPI_PICO2_DMA_SLOT_PIO0_RX3 RPI_PICO_DMA_DREQ_TO_SLOT(0x07)
75+
#define RPI_PICO2_DMA_SLOT_PIO1_TX0 RPI_PICO_DMA_DREQ_TO_SLOT(0x08)
76+
#define RPI_PICO2_DMA_SLOT_PIO1_TX1 RPI_PICO_DMA_DREQ_TO_SLOT(0x09)
77+
#define RPI_PICO2_DMA_SLOT_PIO1_TX2 RPI_PICO_DMA_DREQ_TO_SLOT(0x0A)
78+
#define RPI_PICO2_DMA_SLOT_PIO1_TX3 RPI_PICO_DMA_DREQ_TO_SLOT(0x0B)
79+
#define RPI_PICO2_DMA_SLOT_PIO1_RX0 RPI_PICO_DMA_DREQ_TO_SLOT(0x0C)
80+
#define RPI_PICO2_DMA_SLOT_PIO1_RX1 RPI_PICO_DMA_DREQ_TO_SLOT(0x0D)
81+
#define RPI_PICO2_DMA_SLOT_PIO1_RX2 RPI_PICO_DMA_DREQ_TO_SLOT(0x0E)
82+
#define RPI_PICO2_DMA_SLOT_PIO1_RX3 RPI_PICO_DMA_DREQ_TO_SLOT(0x0F)
83+
#define RPI_PICO2_DMA_SLOT_PIO2_TX0 RPI_PICO_DMA_DREQ_TO_SLOT(0x10)
84+
#define RPI_PICO2_DMA_SLOT_PIO2_TX1 RPI_PICO_DMA_DREQ_TO_SLOT(0x11)
85+
#define RPI_PICO2_DMA_SLOT_PIO2_TX2 RPI_PICO_DMA_DREQ_TO_SLOT(0x12)
86+
#define RPI_PICO2_DMA_SLOT_PIO2_TX3 RPI_PICO_DMA_DREQ_TO_SLOT(0x13)
87+
#define RPI_PICO2_DMA_SLOT_PIO2_RX0 RPI_PICO_DMA_DREQ_TO_SLOT(0x14)
88+
#define RPI_PICO2_DMA_SLOT_PIO2_RX1 RPI_PICO_DMA_DREQ_TO_SLOT(0x15)
89+
#define RPI_PICO2_DMA_SLOT_PIO2_RX2 RPI_PICO_DMA_DREQ_TO_SLOT(0x16)
90+
#define RPI_PICO2_DMA_SLOT_PIO2_RX3 RPI_PICO_DMA_DREQ_TO_SLOT(0x17)
91+
#define RPI_PICO2_DMA_SLOT_SPI0_TX RPI_PICO_DMA_DREQ_TO_SLOT(0x18)
92+
#define RPI_PICO2_DMA_SLOT_SPI0_RX RPI_PICO_DMA_DREQ_TO_SLOT(0x19)
93+
#define RPI_PICO2_DMA_SLOT_SPI1_TX RPI_PICO_DMA_DREQ_TO_SLOT(0x1A)
94+
#define RPI_PICO2_DMA_SLOT_SPI1_RX RPI_PICO_DMA_DREQ_TO_SLOT(0x1B)
95+
#define RPI_PICO2_DMA_SLOT_UART0_TX RPI_PICO_DMA_DREQ_TO_SLOT(0x1C)
96+
#define RPI_PICO2_DMA_SLOT_UART0_RX RPI_PICO_DMA_DREQ_TO_SLOT(0x1D)
97+
#define RPI_PICO2_DMA_SLOT_UART1_TX RPI_PICO_DMA_DREQ_TO_SLOT(0x1E)
98+
#define RPI_PICO2_DMA_SLOT_UART1_RX RPI_PICO_DMA_DREQ_TO_SLOT(0x1F)
99+
#define RPI_PICO2_DMA_SLOT_PWM_WRAP0 RPI_PICO_DMA_DREQ_TO_SLOT(0x20)
100+
#define RPI_PICO2_DMA_SLOT_PWM_WRAP1 RPI_PICO_DMA_DREQ_TO_SLOT(0x21)
101+
#define RPI_PICO2_DMA_SLOT_PWM_WRAP2 RPI_PICO_DMA_DREQ_TO_SLOT(0x22)
102+
#define RPI_PICO2_DMA_SLOT_PWM_WRAP3 RPI_PICO_DMA_DREQ_TO_SLOT(0x23)
103+
#define RPI_PICO2_DMA_SLOT_PWM_WRAP4 RPI_PICO_DMA_DREQ_TO_SLOT(0x24)
104+
#define RPI_PICO2_DMA_SLOT_PWM_WRAP5 RPI_PICO_DMA_DREQ_TO_SLOT(0x25)
105+
#define RPI_PICO2_DMA_SLOT_PWM_WRAP6 RPI_PICO_DMA_DREQ_TO_SLOT(0x26)
106+
#define RPI_PICO2_DMA_SLOT_PWM_WRAP7 RPI_PICO_DMA_DREQ_TO_SLOT(0x27)
107+
#define RPI_PICO2_DMA_SLOT_PWM_WRAP8 RPI_PICO_DMA_DREQ_TO_SLOT(0x28)
108+
#define RPI_PICO2_DMA_SLOT_PWM_WRAP9 RPI_PICO_DMA_DREQ_TO_SLOT(0x29)
109+
#define RPI_PICO2_DMA_SLOT_PWM_WRAP10 RPI_PICO_DMA_DREQ_TO_SLOT(0x2A)
110+
#define RPI_PICO2_DMA_SLOT_PWM_WRAP11 RPI_PICO_DMA_DREQ_TO_SLOT(0x2B)
111+
#define RPI_PICO2_DMA_SLOT_I2C0_TX RPI_PICO_DMA_DREQ_TO_SLOT(0x2C)
112+
#define RPI_PICO2_DMA_SLOT_I2C0_RX RPI_PICO_DMA_DREQ_TO_SLOT(0x2D)
113+
#define RPI_PICO2_DMA_SLOT_I2C1_TX RPI_PICO_DMA_DREQ_TO_SLOT(0x2E)
114+
#define RPI_PICO2_DMA_SLOT_I2C1_RX RPI_PICO_DMA_DREQ_TO_SLOT(0x2F)
115+
#define RPI_PICO2_DMA_SLOT_ADC RPI_PICO_DMA_DREQ_TO_SLOT(0x30)
116+
#define RPI_PICO2_DMA_SLOT_XIP_STREAM RPI_PICO_DMA_DREQ_TO_SLOT(0x31)
117+
#define RPI_PICO2_DMA_SLOT_XIP_QMITX RPI_PICO_DMA_DREQ_TO_SLOT(0x32)
118+
#define RPI_PICO2_DMA_SLOT_XIP_QMIRX RPI_PICO_DMA_DREQ_TO_SLOT(0x33)
119+
#define RPI_PICO2_DMA_SLOT_HSTX RPI_PICO_DMA_DREQ_TO_SLOT(0x34)
120+
#define RPI_PICO2_DMA_SLOT_CORESIGHT RPI_PICO_DMA_DREQ_TO_SLOT(0x35)
121+
#define RPI_PICO2_DMA_SLOT_SHA256 RPI_PICO_DMA_DREQ_TO_SLOT(0x36)
122+
#define RPI_PICO2_DMA_SLOT_DMA_TIMER0 RPI_PICO_DMA_DREQ_TO_SLOT(0x3B)
123+
#define RPI_PICO2_DMA_SLOT_DMA_TIMER1 RPI_PICO_DMA_DREQ_TO_SLOT(0x3C)
124+
#define RPI_PICO2_DMA_SLOT_DMA_TIMER2 RPI_PICO_DMA_DREQ_TO_SLOT(0x3D)
125+
#define RPI_PICO2_DMA_SLOT_DMA_TIMER3 RPI_PICO_DMA_DREQ_TO_SLOT(0x3E)
126+
#define RPI_PICO2_DMA_SLOT_FORCE RPI_PICO_DMA_DREQ_TO_SLOT(0x3F)
127+
#endif /* defined(CONFIG_SOC_SERIES_RP2350) */
63128

64129
#endif /* ZEPHYR_INCLUDE_DT_BINDINGS_RPI_PICO_DMA_H_ */
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
/*
2+
* SPDX-License-Identifier: Apache-2.0
3+
*
4+
* Copyright (c) 2024 Andrew Featherstone <andrew.featherstone@gmail.com>
5+
*/
6+
7+
/* Pico 2 is compatible with the Pico 1, so reuse. */
8+
#include "rpi_pico.overlay"

0 commit comments

Comments
 (0)