From: Rosen Penev <rosenp@gmail.com>
To: dmaengine@vger.kernel.org
Cc: Vinod Koul <vkoul@kernel.org>, Frank Li <Frank.Li@kernel.org>,
"Christophe Leroy (CS GROUP)" <chleroy@kernel.org>,
linux-kernel@vger.kernel.org (open list),
linuxppc-dev@lists.ozlabs.org (open list:FREESCALE SOC DRIVERS),
linux-arm-kernel@lists.infradead.org (moderated list:FREESCALE
SOC DRIVERS)
Subject: [PATCHv2] dmaengine: bestcomm: use platform machinery to get irq
Date: Wed, 16 Sep 2026 15:41:56 -0700 [thread overview]
Message-ID: <20260916224156.276511-1-rosenp@gmail.com> (raw)
platform_get_irq() avoids having to explicitly map and dispose of an irq
by having the platform_device machinery take care of it.
This requires replacing the device_node with a platform_device in the
bcom_eng struct so that platform_get_irq() can use it.
Conveniently, this also allows getting rid of of_node_get and
of_node_put as the platform_device machinery also handles that.
Replace the open-coded resource lookup, request_mem_region, ioremap and
the manual iounmap/release_mem_region cleanup in probe/remove with the
managed devm_platform_get_and_ioremap_resource() helper. This removes the
now-unused error-unmap/release paths and simplifies the driver.
Adjust the goto labels in bcom_task_alloc to match what is being freed.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
v2: resend.
drivers/dma/bestcomm/bestcomm.c | 47 ++++++++--------------
include/linux/fsl/bestcomm/bestcomm_priv.h | 2 +-
2 files changed, 18 insertions(+), 31 deletions(-)
diff --git a/drivers/dma/bestcomm/bestcomm.c b/drivers/dma/bestcomm/bestcomm.c
index 241a91936fe8..1006030ff167 100644
--- a/drivers/dma/bestcomm/bestcomm.c
+++ b/drivers/dma/bestcomm/bestcomm.c
@@ -47,6 +47,7 @@ bcom_task_alloc(int bd_count, int bd_size, int priv_size)
{
int i, tasknum = -1;
struct bcom_task *tsk;
+ int irq;
/* Don't try to do anything if bestcomm init failed */
if (!bcom_eng)
@@ -67,30 +68,32 @@ bcom_task_alloc(int bd_count, int bd_size, int priv_size)
if (tasknum < 0)
return NULL;
+ irq = platform_get_irq(bcom_eng->pdev, tasknum);
+ if (irq < 0)
+ goto err1;
+
/* Allocate our structure */
tsk = kzalloc(sizeof(struct bcom_task) + priv_size, GFP_KERNEL);
if (!tsk)
- goto error;
+ goto err1;
tsk->tasknum = tasknum;
if (priv_size)
tsk->priv = (void*)tsk + sizeof(struct bcom_task);
/* Get IRQ of that task */
- tsk->irq = irq_of_parse_and_map(bcom_eng->ofnode, tsk->tasknum);
- if (!tsk->irq)
- goto error;
+ tsk->irq = irq;
/* Init the BDs, if needed */
if (bd_count) {
tsk->cookie = kmalloc_array(bd_count, sizeof(void *),
GFP_KERNEL);
if (!tsk->cookie)
- goto error;
+ goto err2;
tsk->bd = bcom_sram_alloc(bd_count * bd_size, 4, &tsk->bd_pa);
if (!tsk->bd)
- goto error;
+ goto err3;
memset_io(tsk->bd, 0x00, bd_count * bd_size);
tsk->num_bd = bd_count;
@@ -99,17 +102,12 @@ bcom_task_alloc(int bd_count, int bd_size, int priv_size)
return tsk;
-error:
- if (tsk) {
- if (tsk->irq)
- irq_dispose_mapping(tsk->irq);
- bcom_sram_free(tsk->bd);
- kfree(tsk->cookie);
- kfree(tsk);
- }
-
+err3:
+ kfree(tsk->cookie);
+err2:
+ kfree(tsk);
+err1:
bcom_eng->tdt[tasknum].stop = 0;
-
return NULL;
}
EXPORT_SYMBOL_GPL(bcom_task_alloc);
@@ -125,7 +123,6 @@ bcom_task_free(struct bcom_task *tsk)
bcom_eng->tdt[tsk->tasknum].stop = 0;
/* Free everything */
- irq_dispose_mapping(tsk->irq);
bcom_sram_free(tsk->bd);
kfree(tsk->cookie);
kfree(tsk);
@@ -377,16 +374,12 @@ static int mpc52xx_bcom_probe(struct platform_device *op)
if (IS_ERR(regs))
return PTR_ERR(regs);
- /* Get the bestcomm node */
- of_node_get(op->dev.of_node);
-
/* Prepare SRAM */
ofn_sram = of_find_matching_node(NULL, mpc52xx_sram_ids);
if (!ofn_sram) {
printk(KERN_ERR DRIVER_NAME ": "
"No SRAM found in device tree\n");
- rv = -ENODEV;
- goto error_ofput;
+ return -ENODEV;
}
rv = bcom_sram_init(ofn_sram, DRIVER_NAME);
of_node_put(ofn_sram);
@@ -394,7 +387,7 @@ static int mpc52xx_bcom_probe(struct platform_device *op)
if (rv) {
printk(KERN_ERR DRIVER_NAME ": "
"Error in SRAM init\n");
- goto error_ofput;
+ return rv;
}
/* Get a clean struct */
@@ -405,8 +398,7 @@ static int mpc52xx_bcom_probe(struct platform_device *op)
}
/* Save the node */
- bcom_eng->ofnode = op->dev.of_node;
-
+ bcom_eng->pdev = op;
bcom_eng->regs = regs;
bcom_eng->regs_base = res_bcom->start;
@@ -426,8 +418,6 @@ static int mpc52xx_bcom_probe(struct platform_device *op)
kfree(bcom_eng);
bcom_eng = NULL;
bcom_sram_cleanup();
-error_ofput:
- of_node_put(op->dev.of_node);
printk(KERN_ERR "DMA: MPC52xx BestComm init failed !\n");
@@ -443,9 +433,6 @@ static void mpc52xx_bcom_remove(struct platform_device *op)
/* Cleanup SRAM */
bcom_sram_cleanup();
- /* Release the node */
- of_node_put(bcom_eng->ofnode);
-
/* Release memory */
kfree(bcom_eng);
bcom_eng = NULL;
diff --git a/include/linux/fsl/bestcomm/bestcomm_priv.h b/include/linux/fsl/bestcomm/bestcomm_priv.h
index 3b52f3ffbdf8..cddde7c74cb5 100644
--- a/include/linux/fsl/bestcomm/bestcomm_priv.h
+++ b/include/linux/fsl/bestcomm/bestcomm_priv.h
@@ -66,7 +66,7 @@ struct bcom_tdt {
* This holds all info needed globaly to handle the engine
*/
struct bcom_engine {
- struct device_node *ofnode;
+ struct platform_device *pdev;
struct mpc52xx_sdma __iomem *regs;
phys_addr_t regs_base;
--
2.55.0
next reply other threads:[~2026-09-16 22:42 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-16 22:41 Rosen Penev [this message]
2026-09-16 22:52 ` [PATCHv2] dmaengine: bestcomm: use platform machinery to get irq sashiko-bot
2026-09-17 3:25 ` Frank Li
2026-09-18 0:16 ` Rosen Penev
2026-09-18 6:16 ` Christophe Leroy (CS GROUP)
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=20260916224156.276511-1-rosenp@gmail.com \
--to=rosenp@gmail.com \
--cc=Frank.Li@kernel.org \
--cc=chleroy@kernel.org \
--cc=dmaengine@vger.kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.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.