From nobody Sat Oct 4 09:39:51 2025 Received: from pegase2.c-s.fr (pegase2.c-s.fr [93.17.235.10]) by smtp.subspace.kernel.org (Postfix) with ESMTP id B94BB30E83F; Mon, 18 Aug 2025 12:50:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=93.17.235.10 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755521447; cv=none; b=gA1a3uTzZLSss0wlu7n6KgKhfTcdRwMgOzDlYhANetghehCbqvngswwaSPGKwmNRQuc/TotXSKqGcHXHppgzwkyL24zbjvoReQ+LLV4DT4Xu7Care2ODGmPkChqCVVbrggOdr//MuHaoH3vwib3mBvp8ur8r67f41fEtu1lbPSE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755521447; c=relaxed/simple; bh=8RKYPBgcb30PVBpGEIRd0OTuJmNgZfajD3OtFlexfHU=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=s26Dk9yRlRTu1rRh1KN4ECOvUb1JusG+i0OZrdm73K2i5H5Bi8uF/VCMwpGUtVtN8XBpVH6pECJNazvEzBRcdxhwnA74jR7rjxwD8kcarO76pXSV5ReYtSPmiQ6o9MOxZ9ktFZ6Aa+pWfJjKsUpmC7Atc0IgJUtxohdP/DQWO1M= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=csgroup.eu; spf=pass smtp.mailfrom=csgroup.eu; arc=none smtp.client-ip=93.17.235.10 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=csgroup.eu Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=csgroup.eu Received: from localhost (mailhub4.si.c-s.fr [172.26.127.67]) by localhost (Postfix) with ESMTP id 4c5BVG53JJz9sV1; Mon, 18 Aug 2025 14:14:46 +0200 (CEST) X-Virus-Scanned: amavisd-new at c-s.fr Received: from pegase2.c-s.fr ([172.26.127.65]) by localhost (pegase2.c-s.fr [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id ts7rHCiLYxVq; Mon, 18 Aug 2025 14:14:46 +0200 (CEST) Received: from messagerie.si.c-s.fr (messagerie.si.c-s.fr [192.168.25.192]) by pegase2.c-s.fr (Postfix) with ESMTP id 4c5BVG3hg9z9sTn; Mon, 18 Aug 2025 14:14:46 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by messagerie.si.c-s.fr (Postfix) with ESMTP id 689778B764; Mon, 18 Aug 2025 14:14:46 +0200 (CEST) X-Virus-Scanned: amavisd-new at c-s.fr Received: from messagerie.si.c-s.fr ([127.0.0.1]) by localhost (messagerie.si.c-s.fr [127.0.0.1]) (amavisd-new, port 10023) with ESMTP id v5SaTmB0tJsW; Mon, 18 Aug 2025 14:14:46 +0200 (CEST) Received: from PO20335.idsi0.si.c-s.fr (unknown [10.25.207.160]) by messagerie.si.c-s.fr (Postfix) with ESMTP id 38B258B763; Mon, 18 Aug 2025 14:14:46 +0200 (CEST) From: Christophe Leroy To: Michael Ellerman , Nicholas Piggin , Madhavan Srinivasan Cc: Christophe Leroy , linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-gpio@vger.kernel.org, Bartosz Golaszewski , Linus Walleij Subject: [PATCH] powerpc/cpm2: Drop legacy-of-mm-gpiochip.h header Date: Mon, 18 Aug 2025 14:14:36 +0200 Message-ID: <2662f24c539db393f11b27f0feae2dc14bb2f08f.1755518891.git.christophe.leroy@csgroup.eu> X-Mailer: git-send-email 2.49.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Developer-Signature: v=1; a=ed25519-sha256; t=1755519277; l=7042; i=christophe.leroy@csgroup.eu; s=20211009; h=from:subject:message-id; bh=8RKYPBgcb30PVBpGEIRd0OTuJmNgZfajD3OtFlexfHU=; b=oOokUcmjwNZdcWy7b9jBwmz8uDBVVsYb17+K9YIYEqRQ/tfkozSrMR/zQWauwjNc4KoOTkrEo ITurVnxbWMWCwbbqG0Q9Sp+slmTw0vaf0jZ++qyPYlLuBG7qPM4B33e X-Developer-Key: i=christophe.leroy@csgroup.eu; a=ed25519; pk=HIzTzUj91asvincQGOFx6+ZF5AoUuP9GdOtQChs7Mm0= Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Remove legacy-of-mm-gpiochip.h header file. The above mentioned file provides an OF API that's deprecated. There is no agnostic alternatives to it and we have to open code the logic which was hidden behind of_mm_gpiochip_add_data(). Note, most of the GPIO drivers are using their own labeling schemas and resource retrieval that only a few may gain of the code deduplication, so whenever alternative is appear we can move drivers again to use that one. As a side effect this change fixes a potential memory leak on an error path, if of_mm_gpiochip_add_data() fails. [text copied from commit 34064c8267a6 ("powerpc/8xx: Drop legacy-of-mm-gpiochip.h header")] Signed-off-by: Christophe Leroy --- arch/powerpc/platforms/8xx/Kconfig | 1 - arch/powerpc/platforms/Kconfig | 1 - arch/powerpc/sysdev/cpm_common.c | 56 +++++++++++++++--------------- 3 files changed, 28 insertions(+), 30 deletions(-) diff --git a/arch/powerpc/platforms/8xx/Kconfig b/arch/powerpc/platforms/8x= x/Kconfig index 8623aebfac48..abb2b45b2789 100644 --- a/arch/powerpc/platforms/8xx/Kconfig +++ b/arch/powerpc/platforms/8xx/Kconfig @@ -101,7 +101,6 @@ comment "Generic MPC8xx Options" config 8xx_GPIO bool "GPIO API Support" select GPIOLIB - select OF_GPIO_MM_GPIOCHIP help Saying Y here will cause the ports on an MPC8xx processor to be used with the GPIO API. If you say N here, the kernel needs less memory. diff --git a/arch/powerpc/platforms/Kconfig b/arch/powerpc/platforms/Kconfig index fea3766eac0f..364eef32ddcc 100644 --- a/arch/powerpc/platforms/Kconfig +++ b/arch/powerpc/platforms/Kconfig @@ -243,7 +243,6 @@ config CPM2 select CPM select HAVE_PCI select GPIOLIB - select OF_GPIO_MM_GPIOCHIP help The CPM2 (Communications Processor Module) is a coprocessor on embedded CPUs made by Freescale. Selecting this option means that diff --git a/arch/powerpc/sysdev/cpm_common.c b/arch/powerpc/sysdev/cpm_com= mon.c index f469f6a9f6e0..07ea605ab0e6 100644 --- a/arch/powerpc/sysdev/cpm_common.c +++ b/arch/powerpc/sysdev/cpm_common.c @@ -28,10 +28,6 @@ =20 #include =20 -#if defined(CONFIG_CPM2) || defined(CONFIG_8xx_GPIO) -#include -#endif - static int __init cpm_init(void) { struct device_node *np; @@ -91,32 +87,33 @@ void __init udbg_init_cpm(void) =20 #if defined(CONFIG_CPM2) || defined(CONFIG_8xx_GPIO) =20 +#include + struct cpm2_ioports { u32 dir, par, sor, odr, dat; u32 res[3]; }; =20 struct cpm2_gpio32_chip { - struct of_mm_gpio_chip mm_gc; + struct gpio_chip gc; + void __iomem *regs; spinlock_t lock; =20 /* shadowed data register to clear/set bits safely */ u32 cpdata; }; =20 -static void cpm2_gpio32_save_regs(struct of_mm_gpio_chip *mm_gc) +static void cpm2_gpio32_save_regs(struct cpm2_gpio32_chip *cpm2_gc) { - struct cpm2_gpio32_chip *cpm2_gc =3D - container_of(mm_gc, struct cpm2_gpio32_chip, mm_gc); - struct cpm2_ioports __iomem *iop =3D mm_gc->regs; + struct cpm2_ioports __iomem *iop =3D cpm2_gc->regs; =20 cpm2_gc->cpdata =3D in_be32(&iop->dat); } =20 static int cpm2_gpio32_get(struct gpio_chip *gc, unsigned int gpio) { - struct of_mm_gpio_chip *mm_gc =3D to_of_mm_gpio_chip(gc); - struct cpm2_ioports __iomem *iop =3D mm_gc->regs; + struct cpm2_gpio32_chip *cpm2_gc =3D gpiochip_get_data(gc); + struct cpm2_ioports __iomem *iop =3D cpm2_gc->regs; u32 pin_mask; =20 pin_mask =3D 1 << (31 - gpio); @@ -124,11 +121,9 @@ static int cpm2_gpio32_get(struct gpio_chip *gc, unsig= ned int gpio) return !!(in_be32(&iop->dat) & pin_mask); } =20 -static void __cpm2_gpio32_set(struct of_mm_gpio_chip *mm_gc, u32 pin_mask, - int value) +static void __cpm2_gpio32_set(struct cpm2_gpio32_chip *cpm2_gc, u32 pin_ma= sk, int value) { - struct cpm2_gpio32_chip *cpm2_gc =3D gpiochip_get_data(&mm_gc->gc); - struct cpm2_ioports __iomem *iop =3D mm_gc->regs; + struct cpm2_ioports __iomem *iop =3D cpm2_gc->regs; =20 if (value) cpm2_gc->cpdata |=3D pin_mask; @@ -140,14 +135,13 @@ static void __cpm2_gpio32_set(struct of_mm_gpio_chip = *mm_gc, u32 pin_mask, =20 static int cpm2_gpio32_set(struct gpio_chip *gc, unsigned int gpio, int va= lue) { - struct of_mm_gpio_chip *mm_gc =3D to_of_mm_gpio_chip(gc); struct cpm2_gpio32_chip *cpm2_gc =3D gpiochip_get_data(gc); unsigned long flags; u32 pin_mask =3D 1 << (31 - gpio); =20 spin_lock_irqsave(&cpm2_gc->lock, flags); =20 - __cpm2_gpio32_set(mm_gc, pin_mask, value); + __cpm2_gpio32_set(cpm2_gc, pin_mask, value); =20 spin_unlock_irqrestore(&cpm2_gc->lock, flags); =20 @@ -156,16 +150,15 @@ static int cpm2_gpio32_set(struct gpio_chip *gc, unsi= gned int gpio, int value) =20 static int cpm2_gpio32_dir_out(struct gpio_chip *gc, unsigned int gpio, in= t val) { - struct of_mm_gpio_chip *mm_gc =3D to_of_mm_gpio_chip(gc); struct cpm2_gpio32_chip *cpm2_gc =3D gpiochip_get_data(gc); - struct cpm2_ioports __iomem *iop =3D mm_gc->regs; + struct cpm2_ioports __iomem *iop =3D cpm2_gc->regs; unsigned long flags; u32 pin_mask =3D 1 << (31 - gpio); =20 spin_lock_irqsave(&cpm2_gc->lock, flags); =20 setbits32(&iop->dir, pin_mask); - __cpm2_gpio32_set(mm_gc, pin_mask, val); + __cpm2_gpio32_set(cpm2_gc, pin_mask, val); =20 spin_unlock_irqrestore(&cpm2_gc->lock, flags); =20 @@ -174,9 +167,8 @@ static int cpm2_gpio32_dir_out(struct gpio_chip *gc, un= signed int gpio, int val) =20 static int cpm2_gpio32_dir_in(struct gpio_chip *gc, unsigned int gpio) { - struct of_mm_gpio_chip *mm_gc =3D to_of_mm_gpio_chip(gc); struct cpm2_gpio32_chip *cpm2_gc =3D gpiochip_get_data(gc); - struct cpm2_ioports __iomem *iop =3D mm_gc->regs; + struct cpm2_ioports __iomem *iop =3D cpm2_gc->regs; unsigned long flags; u32 pin_mask =3D 1 << (31 - gpio); =20 @@ -193,19 +185,17 @@ int cpm2_gpiochip_add32(struct device *dev) { struct device_node *np =3D dev->of_node; struct cpm2_gpio32_chip *cpm2_gc; - struct of_mm_gpio_chip *mm_gc; struct gpio_chip *gc; =20 - cpm2_gc =3D kzalloc(sizeof(*cpm2_gc), GFP_KERNEL); + cpm2_gc =3D devm_kzalloc(dev, sizeof(*cpm2_gc), GFP_KERNEL); if (!cpm2_gc) return -ENOMEM; =20 spin_lock_init(&cpm2_gc->lock); =20 - mm_gc =3D &cpm2_gc->mm_gc; - gc =3D &mm_gc->gc; + gc =3D &cpm2_gc->gc; =20 - mm_gc->save_regs =3D cpm2_gpio32_save_regs; + gc->base =3D -1; gc->ngpio =3D 32; gc->direction_input =3D cpm2_gpio32_dir_in; gc->direction_output =3D cpm2_gpio32_dir_out; @@ -214,6 +204,16 @@ int cpm2_gpiochip_add32(struct device *dev) gc->parent =3D dev; gc->owner =3D THIS_MODULE; =20 - return of_mm_gpiochip_add_data(np, mm_gc, cpm2_gc); + gc->label =3D devm_kasprintf(dev, GFP_KERNEL, "%pOF", np); + if (!gc->label) + return -ENOMEM; + + cpm2_gc->regs =3D devm_of_iomap(dev, np, 0, NULL); + if (IS_ERR(cpm2_gc->regs)) + return PTR_ERR(cpm2_gc->regs); + + cpm2_gpio32_save_regs(cpm2_gc); + + return devm_gpiochip_add_data(dev, gc, cpm2_gc); } #endif /* CONFIG_CPM2 || CONFIG_8xx_GPIO */ --=20 2.49.0