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>
This commit is contained in:
Andrew Featherstone 2024-10-16 13:46:30 +01:00 committed by Benjamin Cabé
parent 6e9635679f
commit 2d768fd3a5
5 changed files with 92 additions and 0 deletions

View file

@ -51,6 +51,9 @@ hardware features:
* - Counter
- :kconfig:option:`CONFIG_COUNTER`
- :dtcompatible:`raspberrypi,pico-timer`
* - DMA
- :kconfig:option:`CONFIG_DMA`
- :dtcompatible:`raspberrypi,pico-dma`
* - GPIO
- :kconfig:option:`CONFIG_GPIO`
- :dtcompatible:`raspberrypi,pico-gpio`

View file

@ -12,6 +12,7 @@ supported:
- adc
- clock
- counter
- dma
- gpio
- hwinfo
- i2c

View file

@ -375,6 +375,21 @@
status = "disabled";
};
dma: dma@50000000 {
compatible = "raspberrypi,pico-dma";
reg = <0x50000000 DT_SIZE_K(64)>;
resets = <&reset RPI_PICO_RESETS_RESET_DMA>;
clocks = <&clocks RPI_PICO_CLKID_CLK_SYS>;
interrupts = <10 RPI_PICO_DEFAULT_IRQ_PRIORITY>,
<11 RPI_PICO_DEFAULT_IRQ_PRIORITY>,
<12 RPI_PICO_DEFAULT_IRQ_PRIORITY>,
<13 RPI_PICO_DEFAULT_IRQ_PRIORITY>;
interrupt-names = "dma0", "dma1", "dma2", "dma3";
dma-channels = <16>;
status = "disabled";
#dma-cells = <3>;
};
usbd: usbd@50100000 {
compatible = "raspberrypi,pico-usbd";
reg = <0x50100000 0x10000>;

View file

@ -15,6 +15,7 @@
#define RPI_PICO_DMA_SLOT_TO_DREQ(s) (~(s)&0x3F)
#define RPI_PICO_DMA_DREQ_TO_SLOT RPI_PICO_DMA_SLOT_TO_DREQ
#if defined(CONFIG_SOC_SERIES_RP2040)
#define RPI_PICO_DMA_SLOT_PIO0_TX0 RPI_PICO_DMA_DREQ_TO_SLOT(0x00)
#define RPI_PICO_DMA_SLOT_PIO0_TX1 RPI_PICO_DMA_DREQ_TO_SLOT(0x01)
#define RPI_PICO_DMA_SLOT_PIO0_TX2 RPI_PICO_DMA_DREQ_TO_SLOT(0x02)
@ -60,5 +61,69 @@
#define RPI_PICO_DMA_SLOT_DMA_TIMER2 RPI_PICO_DMA_DREQ_TO_SLOT(0x3D)
#define RPI_PICO_DMA_SLOT_DMA_TIMER3 RPI_PICO_DMA_DREQ_TO_SLOT(0x3E)
#define RPI_PICO_DMA_SLOT_FORCE RPI_PICO_DMA_DREQ_TO_SLOT(0x3F)
#endif /* defined(CONFIG_SOC_SERIES_RP2040) */
#if defined(CONFIG_SOC_SERIES_RP2350)
#define RPI_PICO2_DMA_SLOT_PIO0_TX0 RPI_PICO_DMA_DREQ_TO_SLOT(0x00)
#define RPI_PICO2_DMA_SLOT_PIO0_TX1 RPI_PICO_DMA_DREQ_TO_SLOT(0x01)
#define RPI_PICO2_DMA_SLOT_PIO0_TX2 RPI_PICO_DMA_DREQ_TO_SLOT(0x02)
#define RPI_PICO2_DMA_SLOT_PIO0_TX3 RPI_PICO_DMA_DREQ_TO_SLOT(0x03)
#define RPI_PICO2_DMA_SLOT_PIO0_RX0 RPI_PICO_DMA_DREQ_TO_SLOT(0x04)
#define RPI_PICO2_DMA_SLOT_PIO0_RX1 RPI_PICO_DMA_DREQ_TO_SLOT(0x05)
#define RPI_PICO2_DMA_SLOT_PIO0_RX2 RPI_PICO_DMA_DREQ_TO_SLOT(0x06)
#define RPI_PICO2_DMA_SLOT_PIO0_RX3 RPI_PICO_DMA_DREQ_TO_SLOT(0x07)
#define RPI_PICO2_DMA_SLOT_PIO1_TX0 RPI_PICO_DMA_DREQ_TO_SLOT(0x08)
#define RPI_PICO2_DMA_SLOT_PIO1_TX1 RPI_PICO_DMA_DREQ_TO_SLOT(0x09)
#define RPI_PICO2_DMA_SLOT_PIO1_TX2 RPI_PICO_DMA_DREQ_TO_SLOT(0x0A)
#define RPI_PICO2_DMA_SLOT_PIO1_TX3 RPI_PICO_DMA_DREQ_TO_SLOT(0x0B)
#define RPI_PICO2_DMA_SLOT_PIO1_RX0 RPI_PICO_DMA_DREQ_TO_SLOT(0x0C)
#define RPI_PICO2_DMA_SLOT_PIO1_RX1 RPI_PICO_DMA_DREQ_TO_SLOT(0x0D)
#define RPI_PICO2_DMA_SLOT_PIO1_RX2 RPI_PICO_DMA_DREQ_TO_SLOT(0x0E)
#define RPI_PICO2_DMA_SLOT_PIO1_RX3 RPI_PICO_DMA_DREQ_TO_SLOT(0x0F)
#define RPI_PICO2_DMA_SLOT_PIO2_TX0 RPI_PICO_DMA_DREQ_TO_SLOT(0x10)
#define RPI_PICO2_DMA_SLOT_PIO2_TX1 RPI_PICO_DMA_DREQ_TO_SLOT(0x11)
#define RPI_PICO2_DMA_SLOT_PIO2_TX2 RPI_PICO_DMA_DREQ_TO_SLOT(0x12)
#define RPI_PICO2_DMA_SLOT_PIO2_TX3 RPI_PICO_DMA_DREQ_TO_SLOT(0x13)
#define RPI_PICO2_DMA_SLOT_PIO2_RX0 RPI_PICO_DMA_DREQ_TO_SLOT(0x14)
#define RPI_PICO2_DMA_SLOT_PIO2_RX1 RPI_PICO_DMA_DREQ_TO_SLOT(0x15)
#define RPI_PICO2_DMA_SLOT_PIO2_RX2 RPI_PICO_DMA_DREQ_TO_SLOT(0x16)
#define RPI_PICO2_DMA_SLOT_PIO2_RX3 RPI_PICO_DMA_DREQ_TO_SLOT(0x17)
#define RPI_PICO2_DMA_SLOT_SPI0_TX RPI_PICO_DMA_DREQ_TO_SLOT(0x18)
#define RPI_PICO2_DMA_SLOT_SPI0_RX RPI_PICO_DMA_DREQ_TO_SLOT(0x19)
#define RPI_PICO2_DMA_SLOT_SPI1_TX RPI_PICO_DMA_DREQ_TO_SLOT(0x1A)
#define RPI_PICO2_DMA_SLOT_SPI1_RX RPI_PICO_DMA_DREQ_TO_SLOT(0x1B)
#define RPI_PICO2_DMA_SLOT_UART0_TX RPI_PICO_DMA_DREQ_TO_SLOT(0x1C)
#define RPI_PICO2_DMA_SLOT_UART0_RX RPI_PICO_DMA_DREQ_TO_SLOT(0x1D)
#define RPI_PICO2_DMA_SLOT_UART1_TX RPI_PICO_DMA_DREQ_TO_SLOT(0x1E)
#define RPI_PICO2_DMA_SLOT_UART1_RX RPI_PICO_DMA_DREQ_TO_SLOT(0x1F)
#define RPI_PICO2_DMA_SLOT_PWM_WRAP0 RPI_PICO_DMA_DREQ_TO_SLOT(0x20)
#define RPI_PICO2_DMA_SLOT_PWM_WRAP1 RPI_PICO_DMA_DREQ_TO_SLOT(0x21)
#define RPI_PICO2_DMA_SLOT_PWM_WRAP2 RPI_PICO_DMA_DREQ_TO_SLOT(0x22)
#define RPI_PICO2_DMA_SLOT_PWM_WRAP3 RPI_PICO_DMA_DREQ_TO_SLOT(0x23)
#define RPI_PICO2_DMA_SLOT_PWM_WRAP4 RPI_PICO_DMA_DREQ_TO_SLOT(0x24)
#define RPI_PICO2_DMA_SLOT_PWM_WRAP5 RPI_PICO_DMA_DREQ_TO_SLOT(0x25)
#define RPI_PICO2_DMA_SLOT_PWM_WRAP6 RPI_PICO_DMA_DREQ_TO_SLOT(0x26)
#define RPI_PICO2_DMA_SLOT_PWM_WRAP7 RPI_PICO_DMA_DREQ_TO_SLOT(0x27)
#define RPI_PICO2_DMA_SLOT_PWM_WRAP8 RPI_PICO_DMA_DREQ_TO_SLOT(0x28)
#define RPI_PICO2_DMA_SLOT_PWM_WRAP9 RPI_PICO_DMA_DREQ_TO_SLOT(0x29)
#define RPI_PICO2_DMA_SLOT_PWM_WRAP10 RPI_PICO_DMA_DREQ_TO_SLOT(0x2A)
#define RPI_PICO2_DMA_SLOT_PWM_WRAP11 RPI_PICO_DMA_DREQ_TO_SLOT(0x2B)
#define RPI_PICO2_DMA_SLOT_I2C0_TX RPI_PICO_DMA_DREQ_TO_SLOT(0x2C)
#define RPI_PICO2_DMA_SLOT_I2C0_RX RPI_PICO_DMA_DREQ_TO_SLOT(0x2D)
#define RPI_PICO2_DMA_SLOT_I2C1_TX RPI_PICO_DMA_DREQ_TO_SLOT(0x2E)
#define RPI_PICO2_DMA_SLOT_I2C1_RX RPI_PICO_DMA_DREQ_TO_SLOT(0x2F)
#define RPI_PICO2_DMA_SLOT_ADC RPI_PICO_DMA_DREQ_TO_SLOT(0x30)
#define RPI_PICO2_DMA_SLOT_XIP_STREAM RPI_PICO_DMA_DREQ_TO_SLOT(0x31)
#define RPI_PICO2_DMA_SLOT_XIP_QMITX RPI_PICO_DMA_DREQ_TO_SLOT(0x32)
#define RPI_PICO2_DMA_SLOT_XIP_QMIRX RPI_PICO_DMA_DREQ_TO_SLOT(0x33)
#define RPI_PICO2_DMA_SLOT_HSTX RPI_PICO_DMA_DREQ_TO_SLOT(0x34)
#define RPI_PICO2_DMA_SLOT_CORESIGHT RPI_PICO_DMA_DREQ_TO_SLOT(0x35)
#define RPI_PICO2_DMA_SLOT_SHA256 RPI_PICO_DMA_DREQ_TO_SLOT(0x36)
#define RPI_PICO2_DMA_SLOT_DMA_TIMER0 RPI_PICO_DMA_DREQ_TO_SLOT(0x3B)
#define RPI_PICO2_DMA_SLOT_DMA_TIMER1 RPI_PICO_DMA_DREQ_TO_SLOT(0x3C)
#define RPI_PICO2_DMA_SLOT_DMA_TIMER2 RPI_PICO_DMA_DREQ_TO_SLOT(0x3D)
#define RPI_PICO2_DMA_SLOT_DMA_TIMER3 RPI_PICO_DMA_DREQ_TO_SLOT(0x3E)
#define RPI_PICO2_DMA_SLOT_FORCE RPI_PICO_DMA_DREQ_TO_SLOT(0x3F)
#endif /* defined(CONFIG_SOC_SERIES_RP2350) */
#endif /* ZEPHYR_INCLUDE_DT_BINDINGS_RPI_PICO_DMA_H_ */

View file

@ -0,0 +1,8 @@
/*
* SPDX-License-Identifier: Apache-2.0
*
* Copyright (c) 2024 Andrew Featherstone <andrew.featherstone@gmail.com>
*/
/* Pico 2 is compatible with the Pico 1, so reuse. */
#include "rpi_pico.overlay"