[PATCH] memory: fsl_ifc: Do not free unrequested NAND interrupt

From: Krzysztof Kozlowski

Date: Fri Oct 30 2026 - 10:35:04 EST


The IFC controller may have no NAND interrupt and driver requests it
only if it was provided. However driver unconditionally frees such
interrupt, even if it was not requested, leading to free_irq() of a
valid, unrequested here 0 interrupt (valid on legacy platforms like some
PowerPC platforms).

Fixes: 721c0705906e ("powerpc/mpc85xx: Update interrupt handling for IFC controller")
Fixes: 3e25f800afb8 ("memory: fsl_ifc: populate child devices without relying on simple-bus")
Reported-by: Sashiko <sashiko-bot@xxxxxxxxxx>
Closes: https://sashiko.dev/#/bug/linux-1bbccb12-0e0d-40df-bddb-e6251bc0409b
Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@xxxxxxxxxxxxxxxx>

---

Not tested on hardware
---
drivers/memory/fsl_ifc.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/memory/fsl_ifc.c b/drivers/memory/fsl_ifc.c
index e89e0c6cc4bc..6dcc317d95d4 100644
--- a/drivers/memory/fsl_ifc.c
+++ b/drivers/memory/fsl_ifc.c
@@ -89,7 +89,8 @@ static void fsl_ifc_ctrl_remove(struct platform_device *dev)
struct fsl_ifc_ctrl *ctrl = dev_get_drvdata(&dev->dev);

of_platform_depopulate(&dev->dev);
- free_irq(ctrl->nand_irq, ctrl);
+ if (ctrl->nand_irq)
+ free_irq(ctrl->nand_irq, ctrl);
free_irq(ctrl->irq, ctrl);

irq_dispose_mapping(ctrl->nand_irq);
@@ -292,7 +293,8 @@ static int fsl_ifc_ctrl_probe(struct platform_device *dev)
return 0;

err_free_nandirq:
- free_irq(fsl_ifc_ctrl_dev->nand_irq, fsl_ifc_ctrl_dev);
+ if (fsl_ifc_ctrl_dev->nand_irq)
+ 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_unmap_nandirq:
--
2.53.0