From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 663CD606A33E for ; Sat, 7 Nov 2026 20:13:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=iRDcsQjY; dkim=fail reason="signature verification failed" (2048-bit key, unprotected) header.d=infradead.org header.i=@infradead.org header.a=rsa-sha256 header.s=casper.20170209 header.b=QK0zDWUG DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:Cc:To:In-Reply-To:References:Message-Id :MIME-Version:Subject:Date:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Unsubscribe-Post:List-Owner; bh=6aOC+z3XOfEEZQOGLYC85n2TENAsvWlgIJdeoKgJBoA=; b=iRDcsQjYG6Ceics3hRIuRCf8RX 2eYEIuYRWA/ToPizY/pFSPlOdqDXqXF1CLi/OIyOi6fOF1YvWvei8HPiv2vLNQ2UaOU1PX7cAS3Dd YxrAA6+A7G6UzFpDcbC33De7yEAAcPDyPKLfd5ckpOkVdCMG4K6PLaUzZlzoKWRw7HkXwBMGIfBxl rz/SQyE5nF9GpaSi8X13zynslL7sQSR3/ndpD/sm96QufvQE2OAW6A2M+qcgaKTaa3wNXRI1ctbrn aJs9Y5Aj8Pf4pEJq6k75n7VFZWc8VJCVwVOun3ZSPM/2btuZWLZBylgCABhimZt6JX3vxaJZsFZvX NAUaJoIg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.100.1 #2 (Red Hat Linux)) id 1xPmnI-0000000FIRy-2tzj; Sat, 07 Nov 2026 20:13:44 +0000 Received: from casper.infradead.org ([2001:8b0:10b:1236::1]) by bombadil.infradead.org with esmtps (Exim 4.100.1 #2 (Red Hat Linux)) id 1xPmnA-0000000FIBB-2gzt for linux-amlogic@bombadil.infradead.org; Sat, 07 Nov 2026 20:13:37 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Cc:To:In-Reply-To:References:Message-Id :Content-Transfer-Encoding:Content-Type:MIME-Version:Subject:Date:From:Sender :Reply-To:Content-ID:Content-Description; bh=Y7c6OOYT+qEeDVQYiysesbJy0c+qB96uscD707pwGC0=; b=QK0zDWUGjV/+M48T0ePwL/wVRW kMAyXcZOMMyI8bbd74PfKqi20Zf4iPAkNtyLETijvo/X8o3+SHAyYacdlpwthMHreHAUUmZv8WAcD f4ff8OYXuZxwvBB9rgwKHQM4Xjha+1F/qlKri8yvIKTq0bO+xci7AujtyCQLmvBA3laTYNji4fndv DWGypvSX6muXAo+wDnhjdUY+wOiGUiSzAHoVZKMcy4aaEv21UYHKs88FAMsVuS9a7sng+3CIa6r5m dmizp3u/UZ4242Wl0bSum8p9+EyTiG7XJcS5phYfxUUi0Up6a/aYdMGSilKvYUaNpHkWnPp+AOJdZ 117S89zA==; Received: from mail-oi1-f171.google.com ([209.85.167.171]) by casper.infradead.org with esmtps (Exim 4.100.1 #2 (Red Hat Linux)) id 1xPmn7-00000003Fwk-1hOd for linux-amlogic@lists.infradead.org; Sat, 07 Nov 2026 20:13:35 +0000 Received: by mail-oi1-f171.google.com with SMTP id 5614622812f47-53ec9237600so3415b6e.3 for ; Sat, 07 Nov 2026 12:13:32 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1794082411; x=1794687211; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=Y7c6OOYT+qEeDVQYiysesbJy0c+qB96uscD707pwGC0=; b=r8MDn/eNkqnhuXNJ8h+E474E40LMx45RGGVEpmfF2TKyIpQxEbQroiAk8nrc6f+gdw WQC45+4MDNeiMWHeU/2EaVkkp0WJM/G1D+dCsNXkNfXNSw8HuVaHP8cmAPtkKJrInPLJ TPr30ZxRGlY5URqcSIq16s7QCnT+Az+Q59ITEwQsDkTQGrCirDTWfjE8XPWIX//tnXRf XyYV2jTFmd7cXHlolnjxJubXVln9oKW+l1qQLBO1djsEMRNHrGxV90FS3GdDvz11Ghqi BaReo8yJbPfY1ZooxsdHGm/uoeHmesr6SY+MTqq3/9oyKX09LZJfFAXkFaHm5ubDGAm6 WWAQ== X-Forwarded-Encrypted: i=1; AKwUvBzKynO2/0KbxJ5FYPGWrAMxfc1Xpls1mV/qPN8Lnzs4kc/HgWWv5tCeODh/NDlOpHD9XV2+DK6dUxMqTh7d@lists.infradead.org X-Gm-Message-State: APuU4Z/Js4h4qzUeRk2nCCJ5oG+ZIEfjdHvq3h9EeKmddqmR54KhzLYD Cuu9eBGk+yzLeWkN7N0rAOs/XbOEfRuKj8vD5tKLRo3Wd6BXqGsc6qv1cZgGw8hP0U8= X-Gm-Gg: AYBFou1NVUyhR5n8aOL7f1OOPsTiHgNgIj33uM0ZJ74PPZa4E70XCtE8UgMCHmrGiWb mrCaNWqKPzwoz+T9NlMgl/UXdKyWk05CK4X9NElsdmy8xzfrFkS4EenIStb4z+If4CSQiGZKsrX pE1oWg+xuhekhGpClcG+mdr9WmT1g1ZH0znXYywz7Qa2Vq6hDLLgT0YX7TG3eEFLwV2sZf3zOMJ WDPdBVX3eEa76C6EOegkq1L8xSZI6KL4EXIny5nTn2UamS3GVieDRb0MmtAbNZzxnClqnY8P9yU Xj/LjHczsrqK9yZ0+cve0rmY7JeI99xhAIvdKAks1aOXDcbvPQ3pKvVNNRWLviB9RO1GJr0RU3M 4ZWnVYM+SvJB95DMmiUk0/iv56BVOBOOSb6f8Yqi3npGRHWLiPIdwj9axdEi+37ct52lG0Sn1Jp QsdRmuQXQw2JSsQTBY8wJSgIzrkTmaLNQkzqbX3XpdCkhBV4A29P/sPhVpB3IntcVbXrkqh+Wnu DHQ2erT5I60X4xNvsSV/Uk840+vs4/CgaaF8m1w0nFbVUnfqCLFIEy/vYOHTOEKe0mGlaMRLZEN qwOOlTVRaJfoYAxsjrs+zBQS3B7EL4Fi2QQnh5XkdtACyODAeuz/OmcT1RL7 X-Received: by 2002:a05:6808:6412:b0:4cb:818f:d56f with SMTP id 5614622812f47-567e0f98da3mr4920477b6e.23.1794082410773; Sat, 07 Nov 2026 12:13:30 -0800 (PST) Received: from [127.0.1.1] (174-29-1-49.hlrn.qwest.net. [174.29.1.49]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-4ade68aa561sm226096fac.5.2026.11.07.12.13.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 07 Nov 2026 12:13:30 -0800 (PST) From: James Hilliard Date: Sat, 07 Nov 2026 03:16:37 -0700 Subject: [PATCH 40/58] mtd: rawnand: cafe: retain open-handle state on removal X-Archived-By: MIME-Version: 1.0 Message-Id: <20261107-submit-rawnand-retained-handle-lifetime-v1-v1-40-0181ef0cc4c8@gmail.com> References: <20261107-submit-rawnand-retained-handle-lifetime-v1-v1-0-0181ef0cc4c8@gmail.com> In-Reply-To: <20261107-submit-rawnand-retained-handle-lifetime-v1-v1-0-0181ef0cc4c8@gmail.com> To: Miquel Raynal , Richard Weinberger , Vignesh Raghavendra , Brian Norris , Boris Brezillon , Arseniy Krasnov , Chen-Yu Tsai , Jernej Skrabec , Samuel Holland , Thomas Gleixner , Vitaly Wool , David Woodhouse , Russell King , David Woodhouse , Mike Rapoport , Maxime Coquelin , Alexandre Torgue , Christophe Kerello , Jason Roberts , Michal Simek , Boris Brezillon , Mason Yang , Ramuthevar Vadivel Murugan , Stefan Agner , Lucas Stach , Thierry Reding , Jonathan Hunter , Dmitry Osipenko , Matthias Brugger , AngeloGioacchino Del Regno , Jorge Ramirez-Ortiz , Heiko Stuebner , Yifeng Zhao , Nicolas Ferre , Alexandre Belloni , Claudiu Beznea , Keguang Zhang , Jacky Huang , Shan-Chun Hung , Frank Li , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Han Xu , Liang Yang , Neil Armstrong , Kevin Hilman , Jerome Brunet , Martin Blumenstingl , Manivannan Sadhasivam , Kamal Dasu , Broadcom internal kernel review list , Vladimir Zapolskiy , Piotr Wojtaszczyk , Paul Cercueil , Harvey Hunt , Maxim Levitsky , Michael Walle , Srinivas Kandagatla Cc: Tze Yee Ng , linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-tegra@vger.kernel.org, linux-mediatek@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-mips@vger.kernel.org, imx@lists.linux.dev, linux-renesas-soc@vger.kernel.org, linux-amlogic@lists.infradead.org, linux-arm-msm@vger.kernel.org, James Hilliard X-Mailer: b4 0.15.2 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.9.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20261107_201333_528518_7B26C4C3 X-CRM114-Status: GOOD ( 13.84 ) X-Spam-Score: 1.7 (+) X-BeenThere: linux-amlogic@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-amlogic" X-Spam-Status: No, score=-12.3 required=3.0 tests=BAYES_00,DATE_IN_PAST_06_12, DKIM_ADSP_CUSTOM_MED,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF, FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=4.0.1 X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on aws-us-west-2-korg-listserv-alma10-1 Keep chip metadata and controller storage alive until the final MTD reference is released. Unregister and disconnect each published chip before releasing the resources used by its hardware operations. Free DMA memory at teardown and clear its pointer before deferred detach. Signed-off-by: James Hilliard --- drivers/mtd/nand/raw/cafe_nand.c | 37 +++++++++++++++++++++++++++---------- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/drivers/mtd/nand/raw/cafe_nand.c b/drivers/mtd/nand/raw/cafe_nand.c index f3117b031cd2..bcf7482410e7 100644 --- a/drivers/mtd/nand/raw/cafe_nand.c +++ b/drivers/mtd/nand/raw/cafe_nand.c @@ -651,7 +651,10 @@ static void cafe_nand_detach_chip(struct nand_chip *chip) { struct cafe_priv *cafe = nand_get_controller_data(chip); - dma_free_coherent(&cafe->pdev->dev, 2112, cafe->dmabuf, cafe->dmaaddr); + if (cafe->dmabuf) { + dma_free_coherent(&cafe->pdev->dev, 2112, cafe->dmabuf, cafe->dmaaddr); + cafe->dmabuf = NULL; + } } static const struct nand_controller_ops cafe_nand_controller_ops = { @@ -659,6 +662,11 @@ static const struct nand_controller_ops cafe_nand_controller_ops = { .detach_chip = cafe_nand_detach_chip, }; +static void cafe_nand_release(struct nand_controller *controller) +{ + kfree(container_of(controller, struct cafe_priv, nand.legacy.dummy_controller)); +} + static int cafe_nand_probe(struct pci_dev *pdev, const struct pci_device_id *ent) { @@ -683,6 +691,10 @@ static int cafe_nand_probe(struct pci_dev *pdev, err = -ENOMEM; goto out_disable_device; } + cafe->nand.controller = &cafe->nand.legacy.dummy_controller; + err = devm_nand_controller_init(&pdev->dev, cafe->nand.controller, cafe_nand_release); + if (err) + goto out_disable_device; mtd = nand_to_mtd(&cafe->nand); mtd->dev.parent = &pdev->dev; @@ -693,7 +705,7 @@ static int cafe_nand_probe(struct pci_dev *pdev, if (!cafe->mmio) { dev_warn(&pdev->dev, "failed to iomap\n"); err = -ENOMEM; - goto out_free_mtd; + goto out_disable_device; } cafe->rs = init_rs_non_canonical(12, &cafe_mul, 0, 1, 8); @@ -785,9 +797,16 @@ static int cafe_nand_probe(struct pci_dev *pdev, pci_set_drvdata(pdev, mtd); mtd->name = "cafe_nand"; - err = mtd_device_parse_register(mtd, part_probes, NULL, NULL, 0); + err = nand_set_release(&cafe->nand, NULL); if (err) goto out_cleanup_nand; + err = mtd_device_parse_register(mtd, part_probes, NULL, NULL, 0); + if (err) { + nand_disconnect(&cafe->nand); + cafe_nand_detach_chip(&cafe->nand); + mtd_put_master(mtd); + goto out_irq; + } goto out; @@ -801,8 +820,6 @@ static int cafe_nand_probe(struct pci_dev *pdev, free_rs(cafe->rs); out_ior: pci_iounmap(pdev, cafe->mmio); - out_free_mtd: - kfree(cafe); out_disable_device: pci_disable_device(pdev); out: @@ -816,17 +833,17 @@ static void cafe_nand_remove(struct pci_dev *pdev) struct cafe_priv *cafe = nand_get_controller_data(chip); int ret; + ret = mtd_device_unregister(mtd); + WARN_ON(ret); + nand_disconnect(chip); /* Disable NAND IRQ in global IRQ mask register */ cafe_writel(cafe, ~1 & cafe_readl(cafe, GLOBAL_IRQ_MASK), GLOBAL_IRQ_MASK); free_irq(pdev->irq, mtd); - ret = mtd_device_unregister(mtd); - WARN_ON(ret); - nand_cleanup(chip); + cafe_nand_detach_chip(chip); free_rs(cafe->rs); pci_iounmap(pdev, cafe->mmio); - dma_free_coherent(&cafe->pdev->dev, 2112, cafe->dmabuf, cafe->dmaaddr); - kfree(cafe); pci_disable_device(pdev); + mtd_put_master(mtd); } static const struct pci_device_id cafe_nand_tbl[] = { -- 2.53.0 _______________________________________________ linux-amlogic mailing list linux-amlogic@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-amlogic