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 33192606A33E for ; Sat, 7 Nov 2026 20:13:23 +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=WNeBI1v4 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=ccW4V6cX0dkcFhsNX4ip2RNcUa+kYeBqcazi49t0HGg=; b=WNeBI1v4G0GpZNVDASbvW+siEO UR/9m3dDH+E+4BQi7hf26AEGElWVXCHdBK9QxryKDWPG0awdI8z4jQfU0K66N2wdi9P/UPco1Okii vnWjrKrk5bu1ubqBg9JzdmNam9boIyNBtuDl9Jpby1lXEg4WyRdXLTem2ZkqIm4Clejhi6nxo+Xq0 BB4HAjC7/peA6uG9NJBSkMz4YXKGWA17IekB43fihe++ehJx8dC7PENZ9ApJESWSBdglBhApKSlCk yyAh2r8zRZMmAtR4FhlCmtUg3psfBXkdSoTOZBX3+ZUK+xLRc+iWo7PUHikJMQ1CMK5YQgYn+beoG bjW7BUxg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.100.1 #2 (Red Hat Linux)) id 1xPmmw-0000000FHjt-1t27; Sat, 07 Nov 2026 20:13:22 +0000 Received: from mail-oo1-f49.google.com ([209.85.161.49]) by bombadil.infradead.org with esmtps (Exim 4.100.1 #2 (Red Hat Linux)) id 1xPmmo-0000000FHRK-1fJO for linux-amlogic@lists.infradead.org; Sat, 07 Nov 2026 20:13:20 +0000 Received: by mail-oo1-f49.google.com with SMTP id 006d021491bc7-705cb6cedd5so377266eaf.1 for ; Sat, 07 Nov 2026 12:13:14 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1794082393; x=1794687193; 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=D4/Oq4wk36wTCL/qJN9660jECjYdA2Mdyi8GAjYIaGs=; b=18xfKrpG6CG5tF0Z2e0nbzO903b6Md4k+PklHeWpCSBxA2LSCdJtj/B2nFROl7s7YZ pdlrFooHRoT0Ld17hL7T33WI/7raeKsm+WwDKFu/YPdKK3YLmHjAfYtZwcB++IMN4AT/ TM4EmOI9WhuxWiJk/O83HuqNXxt/JOuvcphtmNFX4E4d/lcnmxLC2sh9iRo8bA9sAijM QgbaMQbAaCjGBUwjLpFBUAf/DjXKtctm/bcBIBsiEnvmVDO2v29r4L2ZYJVRb/NMPvO1 T5QX+xnVuggTXhGUesKfQTeMuB/shw8uFTA6SFnypuI9y/m82QaSW+Wch1ppNHfGhGWB 7Wdg== X-Forwarded-Encrypted: i=1; AKwUvByXJ00mNBRmi0b1Q9AaKdLFsChBght2wbYgjbh0Occpml16wg+ikDDSptX62tIXxA24ZB1BL1Rj5vJrBMEP@lists.infradead.org X-Gm-Message-State: APuU4Z9fAPE/YUeO4oa+hjbiKrjHBTFtiACVlgqRhHuRDB8lydZG/Dmp 6AMyldk0K6j+7EolnekivMJlKfOvwil6H5WIQ/mqwUzGg6bRV1NCrvmRynAroVWgnhU= X-Gm-Gg: AYBFou3BjfEkKNuH9PvfAFaWuhCB+F7y7H/EumRCi5macvEdGTcaei3zRTr2gIAtyW3 /bQu9CPiSrQ66hZmmhuiV5BpjKFlq7F3Jz67lzI1WyCP6AK4pM6gRfP2dlot0uAM+gXTrspfwYG vmlIePFY745VQwl0Rx5+qF8POZwKsCMTq6Zlg9V4X0s7GIHaguOC+11/t58mQwH05xY01v2geJe 4u5XDPjzjkFQSwahw8ZOgcz5kOkJASolUEsDLaUHnvOYr6U4tY2ASi9s6oTKtzxXyO+9EE4jzLT 705vIwtwwmng6E7zH61Kh7s7iKZyaVfoKKcw6aarvXDpFqg6nZ/jgAoLd8uJT+Rn+GFtNF/75L5 RKX3CADxdR4Ve0vXvvZF5hpGn7l7Wsvg/CYfNhCLn7qmAvqltP3yuNzLe8BxAHHmI80SLIXvg+a zCFCGD19LOcjOMiXEWKJHKFJCtw5tBgEMpkxa9UJ3899pxdv6BCwqFv5oX/9ycVQCIjGBGb8XtI QqWUzbvF+5GeqejBu6mLSrjcnp1PLvaT2jtLsDEHBiqE18g/HqwpkwRWss+SFk7r8uv/SDe8U50 WReR/utb/zHQW//2rU6jIadtRG2mITtV16iUQAl0wWw+tuWDggoJwTpP5rfhRw== X-Received: by 2002:a05:6820:188b:b0:704:2628:b1ba with SMTP id 006d021491bc7-71700c850a0mr1064837eaf.23.1794082393182; Sat, 07 Nov 2026 12:13:13 -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.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 07 Nov 2026 12:13:12 -0800 (PST) From: James Hilliard Date: Sat, 07 Nov 2026 03:16:31 -0700 Subject: [PATCH 34/58] mtd: rawnand: omap2: retain open-handle state on removal X-Archived-By: MIME-Version: 1.0 Message-Id: <20261107-submit-rawnand-retained-handle-lifetime-v1-v1-34-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_121314_533777_2A5B9707 X-CRM114-Status: GOOD ( 18.48 ) 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. Preserve the shared GPMC lock and separately retain each device's state. Signed-off-by: James Hilliard --- drivers/mtd/nand/raw/omap2.c | 45 ++++++++++++++++++++++++++++++++++++-------- 1 file changed, 37 insertions(+), 8 deletions(-) diff --git a/drivers/mtd/nand/raw/omap2.c b/drivers/mtd/nand/raw/omap2.c index 4909e62dc11e..9949d4d53299 100644 --- a/drivers/mtd/nand/raw/omap2.c +++ b/drivers/mtd/nand/raw/omap2.c @@ -142,6 +142,7 @@ static u_char bch8_vector[] = {0xf3, 0xdb, 0x14, 0x16, 0x8b, 0xd2, 0xbe, 0xcc, static u_char bch4_vector[] = {0x00, 0x6b, 0x31, 0xdd, 0x41, 0xbc, 0x10}; struct omap_nand_info { + struct kref refcnt; struct nand_chip nand; struct platform_device *pdev; @@ -2208,6 +2209,24 @@ static const struct nand_controller_ops omap_nand_controller_ops = { static struct nand_controller omap_gpmc_controller; static bool omap_gpmc_controller_initialized; +static void omap_nand_info_release(struct kref *ref) +{ + kfree(container_of(ref, struct omap_nand_info, refcnt)); +} + +static void omap_nand_info_put(void *data) +{ + struct omap_nand_info *info = data; + + kref_put(&info->refcnt, omap_nand_info_release); +} + +static void omap_nand_release(struct nand_chip *chip) +{ + rawnand_sw_bch_cleanup(chip); + omap_nand_info_put(mtd_to_omap(nand_to_mtd(chip))); +} + static int omap_nand_probe(struct platform_device *pdev) { struct omap_nand_info *info; @@ -2218,10 +2237,13 @@ static int omap_nand_probe(struct platform_device *pdev) struct device *dev = &pdev->dev; void __iomem *vaddr; - info = devm_kzalloc(&pdev->dev, sizeof(struct omap_nand_info), - GFP_KERNEL); + info = kzalloc_obj(*info); if (!info) return -ENOMEM; + kref_init(&info->refcnt); + err = devm_add_action_or_reset(dev, omap_nand_info_put, info); + if (err) + return err; info->pdev = pdev; @@ -2282,9 +2304,16 @@ static int omap_nand_probe(struct platform_device *pdev) if (err) goto return_error; - err = mtd_device_register(mtd, NULL, 0); + err = nand_set_release(nand_chip, omap_nand_release); if (err) goto cleanup_nand; + kref_get(&info->refcnt); + err = mtd_device_register(mtd, NULL, 0); + if (err) { + nand_disconnect(nand_chip); + mtd_put_master(mtd); + goto release_dma; + } platform_set_drvdata(pdev, mtd); @@ -2294,11 +2323,11 @@ static int omap_nand_probe(struct platform_device *pdev) nand_cleanup(nand_chip); return_error: + rawnand_sw_bch_cleanup(nand_chip); +release_dma: if (!IS_ERR_OR_NULL(info->dma)) dma_release_channel(info->dma); - rawnand_sw_bch_cleanup(nand_chip); - return err; } @@ -2308,12 +2337,12 @@ static void omap_nand_remove(struct platform_device *pdev) struct nand_chip *nand_chip = mtd_to_nand(mtd); struct omap_nand_info *info = mtd_to_omap(mtd); - rawnand_sw_bch_cleanup(nand_chip); + WARN_ON(mtd_device_unregister(mtd)); + nand_disconnect(nand_chip); if (info->dma) dma_release_channel(info->dma); - WARN_ON(mtd_device_unregister(mtd)); - nand_cleanup(nand_chip); + mtd_put_master(mtd); } static const struct of_device_id omap_nand_ids[] = { -- 2.53.0 _______________________________________________ linux-amlogic mailing list linux-amlogic@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-amlogic