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: [PATCHv4] dmaengine: bestcomm: use platform machinery to get irq
Date: Fri, 18 Sep 2026 17:19:31 -0700 [thread overview]
Message-ID: <20260919001931.723402-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.
Adjust the goto labels in bcom_task_alloc to match what is being freed.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
v4: drop whitespace change
v3: drop stale description
v2: resend
drivers/dma/bestcomm/bestcomm.c | 46 ++++++++--------------
include/linux/fsl/bestcomm/bestcomm_priv.h | 2 +-
2 files changed, 18 insertions(+), 30 deletions(-)
diff --git a/drivers/dma/bestcomm/bestcomm.c b/drivers/dma/bestcomm/bestcomm.c
index 241a91936fe8..310792ccd748 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,15 +102,11 @@ 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;
@@ -125,7 +124,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 +375,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 +388,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 +399,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 +419,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 +434,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-19 0:19 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-19 0:19 Rosen Penev [this message]
2026-09-30 20:19 ` [PATCHv4] dmaengine: bestcomm: use platform machinery to get irq Frank Li
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=20260919001931.723402-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.