From: Peter Robinson <pbrobinson@gmail.com>
To: Florian Fainelli <florian.fainelli@broadcom.com>,
Dave Stevenson <dave.stevenson@raspberrypi.com>,
Ray Jui <rjui@broadcom.com>,
Scott Branden <sbranden@broadcom.com>,
Vinod Koul <vkoul@kernel.org>, Frank Li <Frank.Li@kernel.org>,
dmaengine@vger.kernel.org, devicetree@vger.kernel.org,
linux-rpi-kernel@lists.infradead.org,
linux-arm-kernel@lists.infradead.org,
bcm-kernel-feedback-list@broadcom.com
Cc: Peter Robinson <pbrobinson@gmail.com>
Subject: [PATCH 5/9] dmaengine: bcm2835: Add BCM2712 support
Date: Mon, 2 Nov 2026 09:06:55 +0000 [thread overview]
Message-ID: <20261102090713.896324-6-pbrobinson@gmail.com> (raw)
In-Reply-To: <20261102090713.896324-1-pbrobinson@gmail.com>
BCM2712 legacy layout channels carry address bits [39:32] in the
STRIDE field and use 32-byte units for control block pointers.
Channels 6-11 are DMA4 engines. Peripherals are seen at 0x10_7c000000.
Add the brcm,bcm2712-dma compatible with a 40-bit DMA mask.
Signed-off-by: Peter Robinson <pbrobinson@gmail.com>
---
drivers/dma/bcm2835-dma.c | 23 ++++++++++++++++++++++-
1 file changed, 22 insertions(+), 1 deletion(-)
diff --git a/drivers/dma/bcm2835-dma.c b/drivers/dma/bcm2835-dma.c
index 35f8c47dea89f..f06609b04a098 100644
--- a/drivers/dma/bcm2835-dma.c
+++ b/drivers/dma/bcm2835-dma.c
@@ -44,11 +44,14 @@
* @chan_40bit_mask: channels implementing the BCM2711 40-bit register layout
* @periph_offset: offset at which channels with extended addressing see the
* legacy 0x7c000000 - 0x7fffffff peripheral window
+ * @ext_addr: legacy layout channels carry address bits [39:32] in the STRIDE
+ * field and control block pointers are stored right-shifted by 5
*/
struct bcm2835_dma_cfg {
u64 dma_mask;
u32 chan_40bit_mask;
u64 periph_offset;
+ bool ext_addr;
};
/**
@@ -212,6 +215,10 @@ struct bcm2835_desc {
#define MAX_DMA_LEN SZ_1G
#define MAX_LITE_DMA_LEN (SZ_64K - 4)
+/* BCM2712 legacy layout channels: address bits [39:32] in the STRIDE field */
+#define BCM2712_DMA_STRIDE_SRC_HI GENMASK(7, 0)
+#define BCM2712_DMA_STRIDE_DST_HI GENMASK(15, 8)
+
/* Legacy peripheral bus window used by DMA clients for FIFO addresses */
#define BCM2835_DMA_PERIPH_BASE 0x7c000000
#define BCM2835_DMA_PERIPH_END 0x80000000
@@ -271,6 +278,13 @@ static const struct bcm2835_dma_cfg bcm2711_dma_cfg = {
.periph_offset = 0x400000000ULL,
};
+static const struct bcm2835_dma_cfg bcm2712_dma_cfg = {
+ .dma_mask = DMA_BIT_MASK(40),
+ .chan_40bit_mask = GENMASK(11, 6),
+ .periph_offset = 0x1000000000ULL,
+ .ext_addr = true,
+};
+
static inline size_t bcm2835_dma_max_frame_length(struct bcm2835_chan *c)
{
/* lite and normal channels have different max frame length */
@@ -349,6 +363,9 @@ static void bcm2835_dma_cb_set_src(struct bcm2835_chan *c,
}
e->cb->src = lower_32_bits(addr);
+ if (c->ext_addr)
+ FIELD_MODIFY(BCM2712_DMA_STRIDE_SRC_HI, &e->cb->stride,
+ upper_32_bits(addr));
}
static void bcm2835_dma_cb_set_dst(struct bcm2835_chan *c,
@@ -362,6 +379,9 @@ static void bcm2835_dma_cb_set_dst(struct bcm2835_chan *c,
}
e->cb->dst = lower_32_bits(addr);
+ if (c->ext_addr)
+ FIELD_MODIFY(BCM2712_DMA_STRIDE_DST_HI, &e->cb->stride,
+ upper_32_bits(addr));
}
static void bcm2835_dma_cb_init(struct bcm2835_chan *c,
@@ -1127,7 +1147,7 @@ static int bcm2835_dma_chan_init(struct bcm2835_dmadev *d, int chan_id,
BCM2835_DMA_DEBUG_LITE)
c->is_lite_channel = true;
- c->ext_addr = c->is_40bit_channel;
+ c->ext_addr = c->is_40bit_channel || d->cfg->ext_addr;
if (c->ext_addr)
c->periph_offset = d->cfg->periph_offset;
@@ -1151,6 +1171,7 @@ static void bcm2835_dma_free(struct bcm2835_dmadev *od)
static const struct of_device_id bcm2835_dma_of_match[] = {
{ .compatible = "brcm,bcm2835-dma", .data = &bcm2835_dma_cfg },
{ .compatible = "brcm,bcm2711-dma", .data = &bcm2711_dma_cfg },
+ { .compatible = "brcm,bcm2712-dma", .data = &bcm2712_dma_cfg },
{},
};
MODULE_DEVICE_TABLE(of, bcm2835_dma_of_match);
--
2.56.0
next prev parent reply other threads:[~2026-11-02 9:07 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-02 9:06 [PATCH 0/9] dma: Add BCM2711 and BCM2712 support to bcm2835-dma Peter Robinson
2026-11-02 9:06 ` [PATCH 1/9] dt-bindings: dma: brcm,bcm2835-dma: Add BCM2711 and BCM2712 Peter Robinson
2026-11-02 19:39 ` Conor Dooley
2026-11-02 20:18 ` Peter Robinson
2026-11-02 20:38 ` Florian Fainelli
2026-11-02 21:35 ` Peter Robinson
2026-11-02 9:06 ` [PATCH 2/9] dmaengine: bcm2835: Refactor control block handling Peter Robinson
2026-11-02 9:06 ` [PATCH 3/9] dmaengine: bcm2835: Support controllers split across several nodes Peter Robinson
2026-11-02 9:06 ` [PATCH 4/9] dmaengine: bcm2835: Add BCM2711 40-bit channel support Peter Robinson
2026-11-02 9:06 ` Peter Robinson [this message]
2026-11-02 9:25 ` [PATCH 5/9] dmaengine: bcm2835: Add BCM2712 support sashiko-bot
2026-11-02 9:06 ` [PATCH 6/9] ARM: dts: bcm2711: Add 40-bit DMA controller Peter Robinson
2026-11-02 9:06 ` [PATCH 7/9] ARM: dts: bcm2711-rpi: Use 40-bit DMA for HDMI audio Peter Robinson
2026-11-02 9:22 ` sashiko-bot
2026-11-02 9:06 ` [PATCH 8/9] arm64: dts: broadcom: bcm2712: Add DMA controllers Peter Robinson
2026-11-02 9:06 ` [PATCH 9/9] arm64: dts: broadcom: bcm2712-rpi-5-b: Enable HDMI audio Peter Robinson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261102090713.896324-6-pbrobinson@gmail.com \
--to=pbrobinson@gmail.com \
--cc=Frank.Li@kernel.org \
--cc=bcm-kernel-feedback-list@broadcom.com \
--cc=dave.stevenson@raspberrypi.com \
--cc=devicetree@vger.kernel.org \
--cc=dmaengine@vger.kernel.org \
--cc=florian.fainelli@broadcom.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-rpi-kernel@lists.infradead.org \
--cc=rjui@broadcom.com \
--cc=sbranden@broadcom.com \
--cc=vkoul@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox