From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f181.google.com (mail-pl1-f181.google.com [209.85.214.181]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 93A59434E5D for ; Tue, 21 Jul 2026 20:24:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.181 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784665495; cv=none; b=RRdk60KJXKuQGUmuBLKJXC9dskacVLf+DcHvIampLPh7zDNG7J18v2nH8QXIoLjfb7pbdVkZ5luumEakcqz73SC/cYNNPTK1F3+37KrFFkW0I9OejArCM5GKZO2vwbqDemHd1ODkRzMHUsEM6aIZASUmQyWN28+525i5zTH0bcI= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784665495; c=relaxed/simple; bh=/NSeXyQh14q1RLsVh3IApyRF+1dSX1jbXYLoxHJu748=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=fCKpukCIKb89gPGCKFB0VVBDpkAqahHKZtPlg/BogKNP/okI3kc9y2eI6vXXzc2F+/UwWinXrLThnGFIzzOg693lbFbcie71yWzQvCTbli7V4XRGdA1slpqUEe5L36KQlbBfkFARVZHBSk5oykwI/0Oed5WeqDRC7dnKYGJBAbA= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=ocfrdmgA; arc=none smtp.client-ip=209.85.214.181 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ocfrdmgA" Received: by mail-pl1-f181.google.com with SMTP id d9443c01a7336-2cc61541f8cso66416025ad.0 for ; Tue, 21 Jul 2026 13:24:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1784665493; x=1785270293; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=mcyzzR0Udigzqoz4SO6o94OdysLxvgEhiMGWzRV+U34=; b=ocfrdmgAAuxOCHmlZklV87TTfMBtdeNh67rTBViEraW/fZIc2jeYiAnInsZ+DHcIsn yLZvZ6CATM0R6f++BReGegYSqJ0BZgEELScaJ3tTVGsXQATtQz3B+M3L20W9Hwfw0x1J wTdf3B4y9xkTNNqNUPNZUPu+iwIzdN11dw8uIrZ7k3SgHHFSESJ+76bMklxsyzS5VRjR m49RMLeTsHPNs0aLVv2/L5CzdzfIMrQ5zJRhz1smGakYAJe7PSsA+rlQ46fUl+UgHlDl lkaQINzbdk7D36ggw7WcfJu9lVmZfAPONh7NmVRRMp8jbltBwcuc/71GhuagK9UfIcbt MesA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784665493; x=1785270293; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=mcyzzR0Udigzqoz4SO6o94OdysLxvgEhiMGWzRV+U34=; b=Zb0VDc4d6IZQAgpspns+Lc2IvwxdFPT+KwjR9xa3p0gL/v3mjS861GZZOV2zyy9BW9 Tr6dzOjxJhYHtQPtO8kRsO3z/NXkks1ou+E4xIaD0LG+Slm1Y/e1Rk+m68HnZmh8nqJj coi5jnWizNhk+rtbl4fQ+OSYxp9Rtzcw1DLiXi0oiR9+jEY9IvaGO+kF+k+Ql/77nRPa 2ms/gvJ6EqkhxqrYNLcl+smyAGHxNvVrH7izFNotRMQ7vdUi0HdRgL/DpzhWVuK16jXo cpVx/TmDPfwszH0C2yIlHnsI11h0R8Ku2rUs34edlIBcchjWTM9VS2miDevffIjWvjn3 STBA== X-Gm-Message-State: AOJu0Yy9REhxqPO9N8s3LXuYIILD/Q6xo5XGr4z4lcPlN6s1AUpPGVSV ADEjc3J2SyWZ0+YHfiBkdoUXdUvKmi9hRzk548AULreS/Z8UKdXaqPN32rUdZQ== X-Gm-Gg: AfdE7cmjfhlyodqfu/LlBCKlyyqb3e/im3yZCUOY+vLQ9weIZTvUnVQFxvfWL79M0x3 0PW3wCW3Gd8q1VKA0tt1kZ9i1UPfi/6Jxbcf5X5YvqISJ05Uw4umbhsanYRdJnS77EDprT3JVpS cAnUjmAWdO0pozYALfLfxh8Jga8rUbiUi1UTrlF1DV0yKyUmQQd5uzGfqJI2wlXWvMHwZ9V7x0t 95Cr1Lr5tYJ34iRaOlTR+bmLTDegjO/kKoEZugq0YWH58PtOQVGdS1TsZbYkJIg2CNdsH2Ggc4y rSXe5vux4hzmTN7zYdJ1uIcHT68dbZ/KGZEnaBGq1FAVTK1Gg9RmG1eefaTS686Kr5dI6xTSCrd or2Z0odffZkEqnUJV51eDf7ah7t8/65CYMVE7WWirPKW1PknU27O3K0VAf2OG4GuwA8/UeX8jBZ aA7/EA6s4TEzyA5Mk8UlkN9RCdaphFOMU0vKNDikL1PeqrQ2fTdzzm9E/QiN1Uj4cyeYPCCNyNy Jxhtn4xuN2RSBJrqhoA0gLwtctlxrO+3VwwfxOQ7FyACWF/K0Ep4vM= X-Received: by 2002:a17:902:f688:b0:2ca:2390:ff13 with SMTP id d9443c01a7336-2cf8dc97414mr12661185ad.5.1784665492839; Tue, 21 Jul 2026 13:24:52 -0700 (PDT) Received: from ryzen.lan ([2601:644:8000:7a86::e34]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2cf8f2e7a83sm2592285ad.42.2026.07.21.13.24.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 21 Jul 2026 13:24:52 -0700 (PDT) From: Rosen Penev To: linux-kernel@vger.kernel.org Cc: Krzysztof Kozlowski Subject: [PATCHv2 1/4] memory: fsl_ifc: Fix optional NAND IRQ handling and migrate to platform IRQ API Date: Tue, 21 Jul 2026 13:24:46 -0700 Message-ID: <20260721202450.485171-2-rosenp@gmail.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260721202450.485171-1-rosenp@gmail.com> References: <20260721202450.485171-1-rosenp@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Switch from irq_of_parse_and_map() to platform_get_irq() for the main controller IRQ, and use platform_get_irq_optional() for the NAND IRQ which is optional. Guard free_irq() calls on the NAND IRQ with a nand_irq > 0 check to avoid passing invalid IRQ numbers on platforms without a dedicated NAND interrupt line. Get IRQs first as they can return a probe defferal error. Helps avoid doing actual work in such a case. Assisted-by: opencode:big-pickle Signed-off-by: Rosen Penev --- drivers/memory/fsl_ifc.c | 43 ++++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 22 deletions(-) diff --git a/drivers/memory/fsl_ifc.c b/drivers/memory/fsl_ifc.c index e89e0c6cc4bc..dce94d8b05b9 100644 --- a/drivers/memory/fsl_ifc.c +++ b/drivers/memory/fsl_ifc.c @@ -89,12 +89,10 @@ 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 > 0) + free_irq(ctrl->nand_irq, ctrl); free_irq(ctrl->irq, ctrl); - irq_dispose_mapping(ctrl->nand_irq); - irq_dispose_mapping(ctrl->irq); - iounmap(ctrl->gregs); dev_set_drvdata(&dev->dev, NULL); @@ -204,9 +202,21 @@ static int fsl_ifc_ctrl_probe(struct platform_device *dev) int ret = 0; int version, banks; void __iomem *addr; + int nand_irq; + int irq; dev_info(&dev->dev, "Freescale Integrated Flash Controller\n"); + /* get the Controller level irq */ + irq = platform_get_irq(dev, 0); + if (irq < 0) + return irq; + + /* get the nand machine irq */ + nand_irq = platform_get_irq_optional(dev, 1); + if (nand_irq == -EPROBE_DEFER) + return nand_irq; + fsl_ifc_ctrl_dev = devm_kzalloc(&dev->dev, sizeof(*fsl_ifc_ctrl_dev), GFP_KERNEL); if (!fsl_ifc_ctrl_dev) @@ -246,23 +256,13 @@ static int fsl_ifc_ctrl_probe(struct platform_device *dev) addr += PGOFFSET_4K; fsl_ifc_ctrl_dev->rregs = addr; - /* get the Controller level irq */ - fsl_ifc_ctrl_dev->irq = irq_of_parse_and_map(dev->dev.of_node, 0); - if (fsl_ifc_ctrl_dev->irq == 0) { - dev_err(&dev->dev, "failed to get irq resource for IFC\n"); - ret = -ENODEV; - goto err; - } - - /* get the nand machine irq */ - fsl_ifc_ctrl_dev->nand_irq = - irq_of_parse_and_map(dev->dev.of_node, 1); + fsl_ifc_ctrl_dev->irq = irq; fsl_ifc_ctrl_dev->dev = &dev->dev; ret = fsl_ifc_ctrl_init(fsl_ifc_ctrl_dev); if (ret < 0) - goto err_unmap_nandirq; + goto err; init_waitqueue_head(&fsl_ifc_ctrl_dev->nand_wait); @@ -271,10 +271,11 @@ 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_unmap_nandirq; + goto err; } - if (fsl_ifc_ctrl_dev->nand_irq) { + fsl_ifc_ctrl_dev->nand_irq = nand_irq; + if (fsl_ifc_ctrl_dev->nand_irq > 0) { ret = request_irq(fsl_ifc_ctrl_dev->nand_irq, fsl_ifc_nand_irq, 0, "fsl-ifc-nand", fsl_ifc_ctrl_dev); if (ret != 0) { @@ -292,12 +293,10 @@ 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 > 0) + 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: - irq_dispose_mapping(fsl_ifc_ctrl_dev->nand_irq); - irq_dispose_mapping(fsl_ifc_ctrl_dev->irq); err: iounmap(fsl_ifc_ctrl_dev->gregs); return ret; -- 2.55.0