From: Sasha Finkelstein <k@chaosmail.tech>
To: "Sven Peter" <sven@kernel.org>, "Janne Grunau" <j@jannau.net>,
"Vinod Koul" <vkoul@kernel.org>, "Frank Li" <Frank.Li@kernel.org>,
"Rob Herring" <robh@kernel.org>,
"Krzysztof Kozlowski" <krzk+dt@kernel.org>,
"Conor Dooley" <conor+dt@kernel.org>,
"Martin Povišer" <povik+lin@cutebit.org>
Cc: asahi@lists.linux.dev, linux-arm-kernel@lists.infradead.org,
dmaengine@vger.kernel.org, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org,
Sasha Finkelstein <k@chaosmail.tech>
Subject: [PATCH v2 2/2] dmaengine: apple-admac: Add M3 generation ADMACs
Date: Wed, 29 Jul 2026 13:46:35 +0200 [thread overview]
Message-ID: <20260729-t603x-admac-v2-2-e4b2bb6ca45e@chaosmail.tech> (raw)
In-Reply-To: <20260729-t603x-admac-v2-0-e4b2bb6ca45e@chaosmail.tech>
The admacs present on t8122 and t603x SoCs need additional writes in
order to operate correctly. The exact purpose of this register
is unknown
Signed-off-by: Sasha Finkelstein <k@chaosmail.tech>
---
drivers/dma/apple-admac.c | 32 ++++++++++++++++++++++++++++++--
1 file changed, 30 insertions(+), 2 deletions(-)
diff --git a/drivers/dma/apple-admac.c b/drivers/dma/apple-admac.c
index 14a5ee14a481..72ff677c8ce5 100644
--- a/drivers/dma/apple-admac.c
+++ b/drivers/dma/apple-admac.c
@@ -39,10 +39,14 @@
#define FLAG_DESC_NOTIFY BIT(16)
+#define T8122_UNK_28_VAL 0x200000
+
#define REG_TX_START 0x0000
#define REG_TX_STOP 0x0004
#define REG_RX_START 0x0008
#define REG_RX_STOP 0x000c
+#define REG_UNK_28 0x0028
+#define REG_UNK_2C 0x002c
#define REG_IMPRINT 0x0090
#define REG_TX_SRAM_SIZE 0x0094
#define REG_RX_SRAM_SIZE 0x0098
@@ -127,6 +131,7 @@ struct admac_data {
struct mutex cache_alloc_lock;
struct admac_sram txcache, rxcache;
+ bool set_unk28;
int irq;
int irq_index;
int nchannels;
@@ -147,6 +152,10 @@ struct admac_tx {
struct list_head node;
};
+struct admac_hw {
+ bool set_unk28;
+};
+
static int admac_alloc_sram_carveout(struct admac_data *ad,
enum dma_transfer_direction dir,
u32 *out)
@@ -747,6 +756,11 @@ static int admac_device_config(struct dma_chan *chan,
u32 bus_width = readl_relaxed(ad->base + REG_BUS_WIDTH(adchan->no)) &
~(BUS_WIDTH_WORD_SIZE | BUS_WIDTH_FRAME_SIZE);
+ if (ad->set_unk28) {
+ writel_relaxed(T8122_UNK_28_VAL, ad->base + REG_UNK_28);
+ writel_relaxed(T8122_UNK_28_VAL, ad->base + REG_UNK_2C);
+ }
+
switch (is_tx ? config->dst_addr_width : config->src_addr_width) {
case DMA_SLAVE_BUSWIDTH_1_BYTE:
wordsize = 1;
@@ -805,6 +819,7 @@ static int admac_probe(struct platform_device *pdev)
struct device_node *np = pdev->dev.of_node;
struct admac_data *ad;
struct dma_device *dma;
+ const struct admac_hw *hw;
int nchannels;
int err, irq, i;
@@ -813,6 +828,9 @@ static int admac_probe(struct platform_device *pdev)
dev_err(&pdev->dev, "missing or invalid dma-channels property\n");
return -EINVAL;
}
+ hw = of_device_get_match_data(&pdev->dev);
+ if (!hw)
+ return -EINVAL;
ad = devm_kzalloc(&pdev->dev, struct_size(ad, channels, nchannels), GFP_KERNEL);
if (!ad)
@@ -821,6 +839,7 @@ static int admac_probe(struct platform_device *pdev)
platform_set_drvdata(pdev, ad);
ad->dev = &pdev->dev;
ad->nchannels = nchannels;
+ ad->set_unk28 = hw->set_unk28;
mutex_init(&ad->cache_alloc_lock);
/*
@@ -935,9 +954,18 @@ static void admac_remove(struct platform_device *pdev)
reset_control_rearm(ad->rstc);
}
+static const struct admac_hw admac_t8103_hw = {
+ .set_unk28 = false,
+};
+
+static const struct admac_hw admac_t8122_hw = {
+ .set_unk28 = true,
+};
+
static const struct of_device_id admac_of_match[] = {
- { .compatible = "apple,t8103-admac", },
- { .compatible = "apple,admac", },
+ { .compatible = "apple,t8122-admac", .data = &admac_t8122_hw },
+ { .compatible = "apple,t8103-admac", .data = &admac_t8103_hw },
+ { .compatible = "apple,admac", .data = &admac_t8103_hw },
{ }
};
MODULE_DEVICE_TABLE(of, admac_of_match);
--
2.55.0
next prev parent reply other threads:[~2026-07-29 11:46 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-29 11:46 [PATCH v2 0/2] dmaengine: apple-admac: Add support for M3 generation Sasha Finkelstein
2026-07-29 11:46 ` [PATCH v2 1/2] dt-bindings: dma: apple,admac: Add M3 generation ADMACs Sasha Finkelstein
2026-07-29 11:46 ` Sasha Finkelstein [this message]
2026-07-29 11:56 ` [PATCH v2 2/2] dmaengine: apple-admac: " sashiko-bot
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=20260729-t603x-admac-v2-2-e4b2bb6ca45e@chaosmail.tech \
--to=k@chaosmail.tech \
--cc=Frank.Li@kernel.org \
--cc=asahi@lists.linux.dev \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=dmaengine@vger.kernel.org \
--cc=j@jannau.net \
--cc=krzk+dt@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=povik+lin@cutebit.org \
--cc=robh@kernel.org \
--cc=sven@kernel.org \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.