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 1C1B76083603 for ; Sat, 7 Nov 2026 20:14:24 +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=b6KeYZ6I; dkim=fail reason="signature verification failed" (2048-bit key) header.d=infradead.org header.i=@infradead.org header.a=rsa-sha256 header.s=desiato.20200630 header.b=BTF18Tls 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=q/9eFX98F5lSqFPl9D8PPh2S2/IxsDnREdp+5vEsCsA=; b=b6KeYZ6IfpTsP+uipc0HJh6ceM 1U7QTs9r6RSBBXuc3eXCmX0Wje6eBhbwZxFWwzCczC/s74SoCci+vYhR7UHu3PUYzDNNveWva1f1P gN6NtT5AoeOviIVs7YQAbfDLtV3NqLGWUaL9rT/EKd5NUN/lYNWrNoQQSmA+lqB5vGkd2jVpCr+Gy Ja+fRls3NPVl8TbYPUETRGTA0zzfQBObRr0vtyoq+iVtA3Du4XYmC0JQa5yZej/7YIhJE2yTVv6AV FLSPv2f24V5M/TfQnqgoULuoNSu8kcftz+YcbBxuzQDeMLGg3SyzN68PSx8nRoh+Psz1lddlxScJY E6zDFGWA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.100.1 #2 (Red Hat Linux)) id 1xPmnu-0000000FJY2-41sV; Sat, 07 Nov 2026 20:14:23 +0000 Received: from desiato.infradead.org ([2001:8b0:10b:1:d65d:64ff:fe57:4e05]) by bombadil.infradead.org with esmtps (Exim 4.100.1 #2 (Red Hat Linux)) id 1xPmnY-0000000FIvm-0oyW for linux-amlogic@bombadil.infradead.org; Sat, 07 Nov 2026 20:14:00 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=desiato.20200630; 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=qoIL+h3VRnDc2UQ+UqSvvQ4SKOAi/m0jcVk5/5iZOfM=; b=BTF18TlsMl70lpKiySv20IFtdv Dp8tTrboVf7qG34Q6r+HZLiAQN5WiTDEKAw97E/xTCoCwrt67VvtW02IOzGmPbkHKM1H2N3mrpiBY Ksh3C0ZPK9uM9IjXJjMN5CIHqxNJFo5GzvnEoMUkRLLB7LAatOluHB4ovx9SXh3oJY9o31VaMQfD3 BW8zp4L2tQRnwm/SghE02HoGz1sD/TY3oJZg4z3ZrsD7+OdQFbStzPc9ui4INL61mi7Ujdir9LtB1 peQ1FJUL8Tx+keIv5FVYnM4yg7+4NIMaA9ne0jugattVy+cNlx5MVGfTySwiLbHlJU/wXpgRo6EBI 5fHqXyJg==; Received: from mail-oo1-f53.google.com ([209.85.161.53]) by desiato.infradead.org with esmtps (Exim 4.100.1 #2 (Red Hat Linux)) id 1xPmnT-00000005Qq5-3Wls for linux-amlogic@lists.infradead.org; Sat, 07 Nov 2026 20:13:57 +0000 Received: by mail-oo1-f53.google.com with SMTP id 006d021491bc7-6f8a519e215so22915eaf.1 for ; Sat, 07 Nov 2026 12:13:55 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1794082434; x=1794687234; 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=qoIL+h3VRnDc2UQ+UqSvvQ4SKOAi/m0jcVk5/5iZOfM=; b=ioISbCeVof5zD1VwFmOi3MZpsyz7L1WyJEja/5MkMoI1FmWag+p7DA/gShUFw3h8ML GKhqDEn84Iwy6Rq3wnxR3qa+E1GcPrL7EmSWQxXCm+4qPy5+p6Wl72bfCURZHYCyo/Mv I7NlFLclMvQqZUUa3LJ/kbew47Kw2cL4eKbVxzTAa6UWU2KDZuDXjZvhBvpgIO31evSO eU/X2Jx7q6v6j5qPOL40OCok9h+1i06QTy6T7zwq4K9JIufkgtUVrVVLdEfHEDf0EKqt tpXOViY9k0gECyRjRYXnfbwM1AUMwbm9+I4M65aNvQddq2rNtt+D4glzNKofYH88DWZq TRnQ== X-Forwarded-Encrypted: i=1; AKwUvBzf47CQTKfvEoYakAc6xTzOlb0o0EnKRgaBULbrtBo/TfF95hi5w1Bm50VFUesK8gCYoRGxX4aCRgndn5cK@lists.infradead.org X-Gm-Message-State: APuU4Z85iiiF7bdvhYQrj/knw0NtYEQtwaIbyE1e4xOWYXq/RuIW/6/7 UX80q9tz/gZ5NeE28nK8GOxEsjCz5a27C777iXgS2yAtI8RVH7ZiGMsSgiEm0QtfMao= X-Gm-Gg: AYBFou1B8osLOjv6Fk5RulN7LMiZna8AsxKArBaKvUJkhLDMi6haU0EKYBe3mYbs47b HpqoXOWXkF4ga+G99CNJM+Qtlahwueolj1GYP7xoCslOFrpgFHw0E1scr3p/viLWqKtFuCramil 9D/NBBuSjOCaGmPhao2E+U883qiAeBssQhaO9MWYZ0Q2qldhJIvk0utefxqU1DRZUbG14gISCXh gGWKLz12VF1eP/yXVQRTVeclvOGaM9uHPscF3vm/2eQE0aEaBYGnI4D51jzh7P3tizNZus0ddR7 mquUeaXXzxXhBgyEyzVzOVvBvQZg+VGZQ+EldGJXdLWpy8fTV510DgIEVki/lm5BJcvAsqxwqau b/AELBYpe2QbCZ8JpuQu+XbRG2+mn4bo4ZAIu2Uce6kBuVrjU9oEcXyBrrvwfdJBXo6Mf7fobdA n8KJb1KCpfz8MMCREVC0EE8o/bluRF2u6X5+uHRsZ16VMynPYvt2sOWVSjAXB53Y+wnvUfoOIuK VqVzWdFRK5nwhfJ8esqbE5DPib7343uKqxtPyAEpMD5RwvUzbWh5LUB2D2NHeji2plKWaUlARYn OqEJh4kMali8Pn2nUtaOaFgQwOIEd822iYFK11+07IFyyiF7DP+kIR6hV1EswMXfmfK4/zVsLep 16g/+Mg== X-Received: by 2002:a05:6820:2910:b0:6f6:baee:3ccb with SMTP id 006d021491bc7-717009e3477mr1267617eaf.9.1794082434177; Sat, 07 Nov 2026 12:13:54 -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.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 07 Nov 2026 12:13:53 -0800 (PST) From: James Hilliard Date: Sat, 07 Nov 2026 03:16:45 -0700 Subject: [PATCH 48/58] mtd: rawnand: ndfc: retain chip state across removal X-Archived-By: MIME-Version: 1.0 Message-Id: <20261107-submit-rawnand-retained-handle-lifetime-v1-v1-48-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_201356_140666_96D38EBB X-CRM114-Status: GOOD ( 17.80 ) X-Spam-Score: 3.5 (+++) 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 Allocate controller state per binding instead of reusing the static chip-select slots. A retained MTD handle must keep its original chip state when the platform device is rebound. Disconnect the old chip before device resources disappear and release its state at the final MTD put. Signed-off-by: James Hilliard --- drivers/mtd/nand/raw/ndfc.c | 37 +++++++++++++++++++++++++++---------- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/drivers/mtd/nand/raw/ndfc.c b/drivers/mtd/nand/raw/ndfc.c index d7b119028a71..50506ad87fd4 100644 --- a/drivers/mtd/nand/raw/ndfc.c +++ b/drivers/mtd/nand/raw/ndfc.c @@ -37,8 +37,6 @@ struct ndfc_controller { struct nand_controller ndfc_control; }; -static struct ndfc_controller ndfc_ctrl[NDFC_MAX_CS]; - static void ndfc_select_chip(struct nand_chip *nchip, int chip) { uint32_t ccr; @@ -173,13 +171,27 @@ static int ndfc_chip_init(struct ndfc_controller *ndfc, if (ret) goto err; + ret = nand_set_release(chip, NULL); + if (ret) { + nand_cleanup(chip); + goto err; + } ret = mtd_device_register(mtd, NULL, 0); + if (ret) { + nand_disconnect(chip); + mtd_put_master(mtd); + } err: of_node_put(flash_np); return ret; } +static void ndfc_release(struct nand_controller *controller) +{ + kfree(container_of(controller, struct ndfc_controller, ndfc_control)); +} + static int ndfc_probe(struct platform_device *ofdev) { struct ndfc_controller *ndfc; @@ -187,11 +199,7 @@ static int ndfc_probe(struct platform_device *ofdev) const __be32 *reg; u32 ccr; u32 cs; - int len = 0; - - ndfcbase = devm_platform_ioremap_resource(ofdev, 0); - if (IS_ERR(ndfcbase)) - return PTR_ERR(ndfcbase); + int len = 0, ret; /* Read the reg property to get the chip select */ reg = of_get_property(ofdev->dev.of_node, "reg", &len); @@ -206,10 +214,18 @@ static int ndfc_probe(struct platform_device *ofdev) return -EINVAL; } - ndfc = &ndfc_ctrl[cs]; + ndfc = kzalloc_obj(*ndfc); + if (!ndfc) + return -ENOMEM; + ret = devm_nand_controller_init(&ofdev->dev, &ndfc->ndfc_control, ndfc_release); + if (ret) + return ret; + + ndfcbase = devm_platform_ioremap_resource(ofdev, 0); + if (IS_ERR(ndfcbase)) + return PTR_ERR(ndfcbase); ndfc->chip_select = cs; - nand_controller_init(&ndfc->ndfc_control); ndfc->ofdev = ofdev; dev_set_drvdata(&ofdev->dev, ndfc); @@ -243,7 +259,8 @@ static void ndfc_remove(struct platform_device *ofdev) ret = mtd_device_unregister(mtd); WARN_ON(ret); - nand_cleanup(chip); + nand_disconnect(chip); + mtd_put_master(mtd); } static const struct of_device_id ndfc_match[] = { -- 2.53.0 _______________________________________________ linux-amlogic mailing list linux-amlogic@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-amlogic