From: Rosen Penev <rosenp@gmail.com>
To: linux-kernel@vger.kernel.org
Cc: Krzysztof Kozlowski <krzk@kernel.org>
Subject: [PATCHv2 2/4] memory: fsl_ifc: Use devm_platform_ioremap_resource and fix error paths
Date: Tue, 21 Jul 2026 13:24:47 -0700 [thread overview]
Message-ID: <20260721202450.485171-3-rosenp@gmail.com> (raw)
In-Reply-To: <20260721202450.485171-1-rosenp@gmail.com>
Replace of_iomap() with devm_platform_ioremap_resource() for automatic
resource management, eliminating manual iounmap in remove and error
paths. devm_ioremap_resource() reserves the region and checks for
overlaps, which is safe here since the IFC controller register space
and child chip-select ranges are always at distinct addresses in all
DTS files.
As one of the errors is -EPROBE_DEFER, run it before anything else to
avoid doing actual work in such a case.
Assisted-by: opencode:big-pickle
Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
drivers/memory/fsl_ifc.c | 23 +++++++++--------------
1 file changed, 9 insertions(+), 14 deletions(-)
diff --git a/drivers/memory/fsl_ifc.c b/drivers/memory/fsl_ifc.c
index dce94d8b05b9..7e6800fc8480 100644
--- a/drivers/memory/fsl_ifc.c
+++ b/drivers/memory/fsl_ifc.c
@@ -92,10 +92,6 @@ static void fsl_ifc_ctrl_remove(struct platform_device *dev)
if (ctrl->nand_irq > 0)
free_irq(ctrl->nand_irq, ctrl);
free_irq(ctrl->irq, ctrl);
-
- iounmap(ctrl->gregs);
-
- dev_set_drvdata(&dev->dev, NULL);
}
/*
@@ -201,6 +197,7 @@ static int fsl_ifc_ctrl_probe(struct platform_device *dev)
{
int ret = 0;
int version, banks;
+ void __iomem *gregs;
void __iomem *addr;
int nand_irq;
int irq;
@@ -217,6 +214,11 @@ static int fsl_ifc_ctrl_probe(struct platform_device *dev)
if (nand_irq == -EPROBE_DEFER)
return nand_irq;
+ /* IOMAP the entire IFC region */
+ gregs = devm_platform_ioremap_resource(dev, 0);
+ if (IS_ERR(gregs))
+ return PTR_ERR(gregs);
+
fsl_ifc_ctrl_dev = devm_kzalloc(&dev->dev, sizeof(*fsl_ifc_ctrl_dev),
GFP_KERNEL);
if (!fsl_ifc_ctrl_dev)
@@ -224,12 +226,7 @@ static int fsl_ifc_ctrl_probe(struct platform_device *dev)
dev_set_drvdata(&dev->dev, fsl_ifc_ctrl_dev);
- /* IOMAP the entire IFC region */
- fsl_ifc_ctrl_dev->gregs = of_iomap(dev->dev.of_node, 0);
- if (!fsl_ifc_ctrl_dev->gregs) {
- dev_err(&dev->dev, "failed to get memory region\n");
- return -ENODEV;
- }
+ fsl_ifc_ctrl_dev->gregs = gregs;
if (of_property_read_bool(dev->dev.of_node, "little-endian")) {
fsl_ifc_ctrl_dev->little_endian = true;
@@ -262,7 +259,7 @@ static int fsl_ifc_ctrl_probe(struct platform_device *dev)
ret = fsl_ifc_ctrl_init(fsl_ifc_ctrl_dev);
if (ret < 0)
- goto err;
+ return ret;
init_waitqueue_head(&fsl_ifc_ctrl_dev->nand_wait);
@@ -271,7 +268,7 @@ static int fsl_ifc_ctrl_probe(struct platform_device *dev)
if (ret != 0) {
dev_err(&dev->dev, "failed to install irq (%d)\n",
fsl_ifc_ctrl_dev->irq);
- goto err;
+ goto err_free_irq;
}
fsl_ifc_ctrl_dev->nand_irq = nand_irq;
@@ -297,8 +294,6 @@ static int fsl_ifc_ctrl_probe(struct platform_device *dev)
free_irq(fsl_ifc_ctrl_dev->nand_irq, fsl_ifc_ctrl_dev);
err_free_irq:
free_irq(fsl_ifc_ctrl_dev->irq, fsl_ifc_ctrl_dev);
-err:
- iounmap(fsl_ifc_ctrl_dev->gregs);
return ret;
}
--
2.55.0
next prev parent reply other threads:[~2026-07-21 20:24 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-21 20:24 [PATCHv2 0/4] memory: fsl_ifc: Switch to modern devm and platform IRQ APIs Rosen Penev
2026-07-21 20:24 ` [PATCHv2 1/4] memory: fsl_ifc: Fix optional NAND IRQ handling and migrate to platform IRQ API Rosen Penev
2026-09-01 15:29 ` Krzysztof Kozlowski
2026-09-06 18:34 ` Rosen Penev
2026-09-09 6:00 ` Krzysztof Kozlowski
2026-09-09 22:33 ` Rosen Penev
2026-09-10 6:28 ` Krzysztof Kozlowski
2026-07-21 20:24 ` Rosen Penev [this message]
2026-09-01 15:34 ` [PATCHv2 2/4] memory: fsl_ifc: Use devm_platform_ioremap_resource and fix error paths Krzysztof Kozlowski
2026-07-21 20:24 ` [PATCHv2 3/4] memory: fsl_ifc: Use devm_request_irq and simplify remove Rosen Penev
2026-07-21 20:24 ` [PATCHv2 4/4] memory: fsl_ifc: drop simple-bus emulation Rosen Penev
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=20260721202450.485171-3-rosenp@gmail.com \
--to=rosenp@gmail.com \
--cc=krzk@kernel.org \
--cc=linux-kernel@vger.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.