From nobody Mon Jun 8 06:36:14 2026 Received: from mail-pl1-f169.google.com (mail-pl1-f169.google.com [209.85.214.169]) (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 2F4523DDDD9 for ; Wed, 3 Jun 2026 02:59:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780455558; cv=none; b=fxA+mXL7/pZt0UrDY/ZPewzoSSfrJCi+IMZFxgwQ6iylgSUw/oooy4aVibSO5hLXPc2HyE7t6cgF8v64N54a/nQZAt9OXdpm7ZFAf1PBc8TMFwzlAS0hNSDr+HtUcsjhzjpCFm8n3GPDL47hL/DAYJ2AZx39LFfLwG4jskCmGu4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780455558; c=relaxed/simple; bh=Mw6uZCGJXMEV6EuSRORcbRYN77L14z2+GP+f8v7Yems=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=KX1jNtmsRkJVzN3XtmEUa4kTjiG0XyUM3xDFqUwQu+YuzRUVbJ06UNDZTTtllLxxY+9gMMSBGrrPtsF/TO0qTelRj1Ytm/Fc2OotV37tjGwi3OxycGN9ZfYaWAUov9SMujAT5zFdE/mzmMZmauxj13pndODhTaYmn4akDo2FH7U= 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=tMj5ARDt; arc=none smtp.client-ip=209.85.214.169 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="tMj5ARDt" Received: by mail-pl1-f169.google.com with SMTP id d9443c01a7336-2bf2247e38eso41938615ad.3 for ; Tue, 02 Jun 2026 19:59:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1780455556; x=1781060356; 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; bh=gYa7LbLjk11lrjjaU1fZoPN6rpBXsfSmsjALmXq19N8=; b=tMj5ARDtvAb3sIOpYfJ5nWeB08tiR2NHulyKjt1PPQGQf8szY0L/PP7ZJXcWxSVghJ WunaQcatVyJwqQuVr1XeLtma3JeqXSlJORYEo+4rN9bExy8XyN0GxeaMaGk3EULrTzJH laBqAhuSlfG6B92njMt9VY+uVJNqec/kFNKp/NyxdEA5u4c7vJkQ3CA2soykyQ67XF8g kazvPZg/XjrAUKoAmy6WQnCLqT8U1/8fZ3Xl9Pp2KMZGxp86NYo9YYpUvITmgu60jcPB eGUJPuiLtPJAYILmpO7f9yeyD5n7uKB0lQ/eYIzkRkQANRie7yWUiJB+34NVhqDa6jO+ prNg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780455556; x=1781060356; 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; bh=gYa7LbLjk11lrjjaU1fZoPN6rpBXsfSmsjALmXq19N8=; b=DWj8abx1dyH7Fe431nsT2z0pMMg4FsSSUCzl3qSw/+Vz3MACFvVQOu4tWH93phrAwI dskP4ipTZEWEaEjTnjs+fMo8lTuDaUf9X3msWHJccsGgy4Y0h3K+GZ3dMSDcceNJweVN mPK1Qcl5OS3oA5DVhdGhSW5+qFSBrr6zkVtqM1bw8Ac1C9wMNHMbaIHb99SHbg4MTpxY aO/J3NKG6xbvIojcwYSFch76X9YPXV13/H1jdRd5kjys1fLVyNKxFzqWmtAF8pbSwzHn OzcI5QmRADf5a+C+hx+Abw5UXyHyNwFqEQJsKUJ5cO+BHX5AQIVu6dgOVVeTsYnBddYF cjHg== X-Forwarded-Encrypted: i=1; AFNElJ+RWne2KORtunrJnpcazN3CPKA3HaqJdhxLsBe8h8aJJDnSzOwiscsEaPY9TKp0RoM9UdRY6pDSXEILE5Q=@vger.kernel.org X-Gm-Message-State: AOJu0Yw0vzG6vB+5/pHOb0hVaBYPLOGPnz/WOICo4lqjRqVjViKI76Va Wzcdg8rXemjyRm/imJdRdq39UvOmoe0J+7Ov0w6pPlVgfaiWk1c10cZd X-Gm-Gg: Acq92OGig3SqIBtL3xe8RlgpexdsPXkksGHj3j27UBU4sE0IbJsVQifOd6TRP03Q9P4 qAMaupYCWeZgeuNJPUtlxpYl4rR11HSmrlyOuJqcNFbGKVlAMR68Hr3sftDH8iICluTG4sNfTfc W/dmVTBigvHWZ+5wsR8lZGj0DdvzzytT7/6U7Wr6SkLBg+bQj+phz5Vn8B1DHIMK0h325NfYjcH DaF6pZGj0Qz2vW71+UvW+huiiepHiYuKIiGuVFNDrH8A+C6VIoMM5dOOUBTIOEIFLSvpBrsEK8t dj0v5kiySvjMWlFTLC8uTRjteV6GpZNNgPoDJuCULBb/ngqJ/gz6DHTTFx1vj6uQ1dYt+SqWkSK FGpgvM9S37If+jTyWTNXimaNeHm/4aNsMOaZITn0MMVMmPNNOdsuec9HbjlK929wOvAlheArxDI Sze63+kYXkSGWdd4UeJejRH0qMRqWpy5kfBJT29gFUp3fb213sVX36kQHMHLWiIMRVobeQvPKB6 Nsxfce8EChEGcTndR9HknuDsQeKdFGV97fMNzzQ/fkZcLK76a8g/v3p X-Received: by 2002:a17:902:d48d:b0:2bf:2015:5b93 with SMTP id d9443c01a7336-2c163a2311amr14365355ad.11.1780455556485; Tue, 02 Jun 2026 19:59:16 -0700 (PDT) Received: from ryzen ([2601:644:8000:5b5d:7285:c2ff:fe45:8a32]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2c164f6d395sm8093805ad.17.2026.06.02.19.59.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Jun 2026 19:59:15 -0700 (PDT) From: Rosen Penev To: linux-serial@vger.kernel.org Cc: Greg Kroah-Hartman , Jiri Slaby , Frank Li , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , linux-kernel@vger.kernel.org (open list:TTY LAYER AND SERIAL DRIVERS), imx@lists.linux.dev (open list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE), linux-arm-kernel@lists.infradead.org (moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE) Subject: [PATCH 1/3] serial: mxs-auart: rework clock handling in mxs_get_clks and probe Date: Tue, 2 Jun 2026 19:58:55 -0700 Message-ID: <20260603025857.287148-2-rosenp@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260603025857.287148-1-rosenp@gmail.com> References: <20260603025857.287148-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: quoted-printable Content-Type: text/plain; charset="utf-8" Use devm_clk_get_enabled for the AHB clock so its enable/disable lifetime is managed by the driver model. Move the mod clock (clk) prepare_enable out of mxs_get_clks and into probe so that clk_set_rate is called while the clock is still disabled, avoiding CLK_SET_RATE_GATE failures. Clean up the error labels accordingly. Assisted-by: opencode:big-pickle Signed-off-by: Rosen Penev --- drivers/tty/serial/mxs-auart.c | 47 ++++++++++++---------------------- 1 file changed, 17 insertions(+), 30 deletions(-) diff --git a/drivers/tty/serial/mxs-auart.c b/drivers/tty/serial/mxs-auart.c index 697318dbb146..1390fa000a5b 100644 --- a/drivers/tty/serial/mxs-auart.c +++ b/drivers/tty/serial/mxs-auart.c @@ -1470,34 +1470,22 @@ static int mxs_get_clks(struct mxs_auart_port *s, return PTR_ERR(s->clk); } =20 - s->clk_ahb =3D devm_clk_get(s->dev, "ahb"); + s->clk_ahb =3D devm_clk_get_enabled(s->dev, "ahb"); if (IS_ERR(s->clk_ahb)) { dev_err(s->dev, "Failed to get \"ahb\" clk\n"); return PTR_ERR(s->clk_ahb); } =20 - err =3D clk_prepare_enable(s->clk_ahb); - if (err) { - dev_err(s->dev, "Failed to enable ahb_clk!\n"); - return err; - } - + /* + * Set mod clock rate while it is still disabled so + * CLK_SET_RATE_GATE does not cause clk_set_rate to fail. + * The mod clock will be enabled in mxs_auart_startup() + * and in probe after mxs_get_clks returns. + */ err =3D clk_set_rate(s->clk, clk_get_rate(s->clk_ahb)); - if (err) { + if (err) dev_err(s->dev, "Failed to set rate!\n"); - goto disable_clk_ahb; - } =20 - err =3D clk_prepare_enable(s->clk); - if (err) { - dev_err(s->dev, "Failed to enable clk!\n"); - goto disable_clk_ahb; - } - - return 0; - -disable_clk_ahb: - clk_disable_unprepare(s->clk_ahb); return err; } =20 @@ -1604,17 +1592,21 @@ static int mxs_auart_probe(struct platform_device *= pdev) if (ret) return ret; =20 + ret =3D clk_prepare_enable(s->clk); + if (ret) + return ret; + r =3D platform_get_resource(pdev, IORESOURCE_MEM, 0); if (!r) { ret =3D -ENXIO; - goto out_disable_clks; + goto out_disable_clk; } =20 s->port.mapbase =3D r->start; s->port.membase =3D ioremap(r->start, resource_size(r)); if (!s->port.membase) { ret =3D -ENOMEM; - goto out_disable_clks; + goto out_disable_clk; } s->port.ops =3D &mxs_auart_ops; s->port.iotype =3D UPIO_MEM; @@ -1681,11 +1673,8 @@ static int mxs_auart_probe(struct platform_device *p= dev) out_iounmap: iounmap(s->port.membase); =20 -out_disable_clks: - if (is_asm9260_auart(s)) { - clk_disable_unprepare(s->clk); - clk_disable_unprepare(s->clk_ahb); - } +out_disable_clk: + clk_disable_unprepare(s->clk); return ret; } =20 @@ -1697,10 +1686,8 @@ static void mxs_auart_remove(struct platform_device = *pdev) auart_port[pdev->id] =3D NULL; mxs_auart_free_gpio_irq(s); iounmap(s->port.membase); - if (is_asm9260_auart(s)) { + if (is_asm9260_auart(s)) clk_disable_unprepare(s->clk); - clk_disable_unprepare(s->clk_ahb); - } } =20 static struct platform_driver mxs_auart_driver =3D { --=20 2.54.0 From nobody Mon Jun 8 06:36:14 2026 Received: from mail-pl1-f169.google.com (mail-pl1-f169.google.com [209.85.214.169]) (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 77F143DD518 for ; Wed, 3 Jun 2026 02:59:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780455564; cv=none; b=J/uayMEfQOZxqif1TH66yRE58qVraFVopYBqPdM1xhYnuD7qztG/SlKlCvNJuE7FwfUEcwCHizZoFk9RerGD0fucbP4It0SfxevwtaRk9KpnkYXBWNQ6zE0cDaj3O74IJI8Pa8uGtBa/bw0FNZXEt1MYglJ97SV7QLesTKrBOdQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780455564; c=relaxed/simple; bh=ro5ZEfTmRSMETPH4SY7HmpTDWhtnqn6QdkxvFDRAIY8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=OoPCBHFKQF0m1ereDLvCKkHkjlFzEccAqTjCYKd20CkRgWusTFBWfVWYiXcW6rwLtvMCkndyLat2IuOSdD3E71+wXrg6jPlL49KqcY1E1TvfaXUt753Ofh1V0WOtBvby2iJLgy7vKSeihvEeMYeQmRY2B0/1jHs8yS1xQxCKReE= 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=Hl/7GjpI; arc=none smtp.client-ip=209.85.214.169 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="Hl/7GjpI" Received: by mail-pl1-f169.google.com with SMTP id d9443c01a7336-2bf30d530bdso47540275ad.3 for ; Tue, 02 Jun 2026 19:59:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1780455558; x=1781060358; 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; bh=EBVGXB/2UTdyKtSi19WHbufi1S2ilaO9ich5RG7k16s=; b=Hl/7GjpIRa8EcyV5ZyELyXbwX0NZfAkoohH8UiVZNB7YOi5J7yCft9UNO2RFOnK5Qn 0EHy2Dz6UNa2L6/6PEJPtsWC81ljf4qJhvxS4zYgf+FRRfXTlVyvUx1xqgCN+9XJ4s9K trgBkWtiGBTrQ4FvydKgC6yJvMXsAbRx1vpqOYi03BTpBU4JlZL2RIzhdXokXRldXtKk hFXBfUnEVIco1ggUQgWji9bxcrfE+HPK+u6PyJryaAJMp3wQWUOXY4u2Zn7QlCXoHlDw l9EWgmX2iFgzKg+iZ5EU/RNxGOQkM1pOiS0SdUFYGBIRCwCgrOA0+q0XGF1GbT0WTu7p 1ddw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780455558; x=1781060358; 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; bh=EBVGXB/2UTdyKtSi19WHbufi1S2ilaO9ich5RG7k16s=; b=A8JNJ6lrvFsZiGc9sGk/EeUIuJwkaD8XX2RpUJaT33W+DljAA/o9XXzJzGrW1e/JXL Ub91suBUgiACLYa4qtK/cVzt2K8LR0s34yxAlRF9RyjlwpCRi/eVZSh2NU4/FEV8W0AX Oq98i64Ylay7naE05dk/N0CsClCQNODK7iokx0CLA2iRl/Ll5G1k1MXAv2eFMhYFbsNL jU9hkp5ye143/BeGsJpLD/wIqYdDl24Wzr6L68r9QyEwIueth8T7NZVUCWdYhGeL2UkO NoCHw7MXB2knDgppfNYY+2d3yG6fXQFsqiBvZhlswBgfO+H3fqBga5qEnJL34zOmiOzk reKQ== X-Forwarded-Encrypted: i=1; AFNElJ8LGIvp+Ttry6lwWbSbxb8ORzMULJmIAwHhP++r1h6BPTi0o2jbV/8bBXDmOpko5c2WF1kxMUpkKkC63jg=@vger.kernel.org X-Gm-Message-State: AOJu0YxoscxdsoQExQecfoksutp5INZKW2O0rZYX/LOvdJSsuTA/RWDI tLNJscJbqru4nTOOrVRKVMgC45x91flG7qVORYTcKmy3s43Wn1WIUO0U X-Gm-Gg: Acq92OEWChV6p+6fW44HhZpdSG688eDQAsaHvQj2cFKbkeP39dwoemY/aVCsPulE0RJ m9UBEd7g9TvwSW48CoAa6+HUkTuahjLFD8xhiLFNzjQVEp2dbuut6Mw/+TXo5RmcCh5M9hu2B42 K4kX0M1a2WnXCsVjQLWfw29aoSwMT0ZDSvYmt9gXRR0Ch2h6Qou1iNNaA9cc3k1Vyr0LkrjV3AK 51MCK2uNKkPl/9vWzTifzeRWifXMp9AV8JHatJDvG2/5x4YjpNX1rUnzcqq7sMbM/+NxvxmTgQ1 xvkB9pxtK3gWFLlqk04ZeNeL4WjOMt+q1AZnDJY8kUun+G4C9nEQDNFrPUSBBUIKH6dpBOKF+Y1 zLW4pWiDgcVggL494G6sc3SoVdAyyshELZKS47xoGUygMwEvM5iqhR/tVgV2GdqKg3GEZQxGsM0 IR49ZlYZTJ2Ug5pRheGBFYJCIKR/s2vL9VJVSTZOHxjURPJPk5dwQPwCiLX1x/OfmKna6tHx66c ePLt6RUzpFJAPPlr3BUetTvE/BLZgyXGr1YM36F8lfz4w== X-Received: by 2002:a17:902:ccd1:b0:2c0:f807:56b6 with SMTP id d9443c01a7336-2c163a16bcdmr15056895ad.4.1780455557822; Tue, 02 Jun 2026 19:59:17 -0700 (PDT) Received: from ryzen ([2601:644:8000:5b5d:7285:c2ff:fe45:8a32]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2c164f6d395sm8093805ad.17.2026.06.02.19.59.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Jun 2026 19:59:17 -0700 (PDT) From: Rosen Penev To: linux-serial@vger.kernel.org Cc: Greg Kroah-Hartman , Jiri Slaby , Frank Li , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , linux-kernel@vger.kernel.org (open list:TTY LAYER AND SERIAL DRIVERS), imx@lists.linux.dev (open list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE), linux-arm-kernel@lists.infradead.org (moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE) Subject: [PATCH 2/3] serial: mxs-auart: use devm resources for iomem and GPIO IRQs Date: Tue, 2 Jun 2026 19:58:56 -0700 Message-ID: <20260603025857.287148-3-rosenp@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260603025857.287148-1-rosenp@gmail.com> References: <20260603025857.287148-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: quoted-printable Content-Type: text/plain; charset="utf-8" Replace platform_get_resource + ioremap with devm_platform_get_and_ioremap_resource and convert GPIO IRQ request_irq/free_irq to devm_request_irq. This eliminates the mxs_auart_free_gpio_irq function and its call sites, and the out_iounmap error label. Simplify the remove function accordingly. Assisted-by: opencode:big-pickle Signed-off-by: Rosen Penev --- drivers/tty/serial/mxs-auart.c | 55 ++++++++-------------------------- 1 file changed, 12 insertions(+), 43 deletions(-) diff --git a/drivers/tty/serial/mxs-auart.c b/drivers/tty/serial/mxs-auart.c index 1390fa000a5b..4499e3206e85 100644 --- a/drivers/tty/serial/mxs-auart.c +++ b/drivers/tty/serial/mxs-auart.c @@ -1517,15 +1517,6 @@ static int mxs_auart_init_gpios(struct mxs_auart_por= t *s, struct device *dev) return 0; } =20 -static void mxs_auart_free_gpio_irq(struct mxs_auart_port *s) -{ - enum mctrl_gpio_idx i; - - for (i =3D 0; i < UART_GPIO_MAX; i++) - if (s->gpio_irq[i] >=3D 0) - free_irq(s->gpio_irq[i], s); -} - static int mxs_auart_request_gpio_irq(struct mxs_auart_port *s) { int *irq =3D s->gpio_irq; @@ -1537,21 +1528,13 @@ static int mxs_auart_request_gpio_irq(struct mxs_au= art_port *s) continue; =20 irq_set_status_flags(irq[i], IRQ_NOAUTOEN); - err =3D request_irq(irq[i], mxs_auart_irq_handle, - IRQ_TYPE_EDGE_BOTH, dev_name(s->dev), s); + err =3D devm_request_irq(s->dev, irq[i], mxs_auart_irq_handle, + IRQ_TYPE_EDGE_BOTH, dev_name(s->dev), s); if (err) dev_err(s->dev, "%s - Can't get %d irq\n", __func__, irq[i]); } =20 - /* - * If something went wrong, rollback. - * Be careful: i may be unsigned. - */ - while (err && (i-- > 0)) - if (irq[i] >=3D 0) - free_irq(irq[i], s); - return err; } =20 @@ -1586,7 +1569,7 @@ static int mxs_auart_probe(struct platform_device *pd= ev) return -EINVAL; } =20 - s->devtype =3D (enum mxs_auart_type)of_device_get_match_data(&pdev->dev); + s->devtype =3D (unsigned long)of_device_get_match_data(&pdev->dev); =20 ret =3D mxs_get_clks(s, pdev); if (ret) @@ -1596,18 +1579,12 @@ static int mxs_auart_probe(struct platform_device *= pdev) if (ret) return ret; =20 - r =3D platform_get_resource(pdev, IORESOURCE_MEM, 0); - if (!r) { - ret =3D -ENXIO; + s->port.membase =3D devm_platform_get_and_ioremap_resource(pdev, 0, &r); + if (IS_ERR(s->port.membase)) { + ret =3D PTR_ERR(s->port.membase); goto out_disable_clk; } - s->port.mapbase =3D r->start; - s->port.membase =3D ioremap(r->start, resource_size(r)); - if (!s->port.membase) { - ret =3D -ENOMEM; - goto out_disable_clk; - } s->port.ops =3D &mxs_auart_ops; s->port.iotype =3D UPIO_MEM; s->port.fifosize =3D MXS_AUART_FIFO_SIZE; @@ -1622,21 +1599,21 @@ static int mxs_auart_probe(struct platform_device *= pdev) irq =3D platform_get_irq(pdev, 0); if (irq < 0) { ret =3D irq; - goto out_iounmap; + goto out_disable_clk; } =20 s->port.irq =3D irq; ret =3D devm_request_irq(&pdev->dev, irq, mxs_auart_irq_handle, 0, dev_name(&pdev->dev), s); if (ret) - goto out_iounmap; + goto out_disable_clk; =20 platform_set_drvdata(pdev, s); =20 ret =3D mxs_auart_init_gpios(s, &pdev->dev); if (ret) { dev_err(&pdev->dev, "Failed to initialize GPIOs.\n"); - goto out_iounmap; + goto out_disable_clk; } =20 /* @@ -1644,7 +1621,7 @@ static int mxs_auart_probe(struct platform_device *pd= ev) */ ret =3D mxs_auart_request_gpio_irq(s); if (ret) - goto out_iounmap; + goto out_disable_clk; =20 auart_port[s->port.line] =3D s; =20 @@ -1667,11 +1644,7 @@ static int mxs_auart_probe(struct platform_device *p= dev) return 0; =20 out_free_qpio_irq: - mxs_auart_free_gpio_irq(s); - auart_port[pdev->id] =3D NULL; - -out_iounmap: - iounmap(s->port.membase); + auart_port[s->port.line] =3D NULL; =20 out_disable_clk: clk_disable_unprepare(s->clk); @@ -1683,11 +1656,7 @@ static void mxs_auart_remove(struct platform_device = *pdev) struct mxs_auart_port *s =3D platform_get_drvdata(pdev); =20 uart_remove_one_port(&auart_driver, &s->port); - auart_port[pdev->id] =3D NULL; - mxs_auart_free_gpio_irq(s); - iounmap(s->port.membase); - if (is_asm9260_auart(s)) - clk_disable_unprepare(s->clk); + auart_port[s->port.line] =3D NULL; } =20 static struct platform_driver mxs_auart_driver =3D { --=20 2.54.0 From nobody Mon Jun 8 06:36:14 2026 Received: from mail-pl1-f171.google.com (mail-pl1-f171.google.com [209.85.214.171]) (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 1386F3DBD5B for ; Wed, 3 Jun 2026 02:59:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780455563; cv=none; b=FP0vNwtgFuV7MqdX3LV9lfTq9GOCbnIYWPChhfRYHfXXtBTFhpg6CIGhvpA1g9dJBFxulYswcIvTEETBlf+IE6bLVhmK+8hDbxC/vYu5ltTj8v1c7bgPGiTVkLcGgdQOKZjfwkuQVoJ1XQbnJrhLgcYgORkrzjI/BbH7hNIZWPo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780455563; c=relaxed/simple; bh=FvzXCTxllUlReWFN1nSFe7p5Rlpa73XzrCT7b2L5aBM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ivhk4+1VNhGMqoiQMav+Cqkb4crM5/eScL2BoNa2K453fxP3flaVtzdofQmznDq3PXS1PwaxFw+PleHFuCawBeOSj6AMJeLq0UaivWEdhzO/DMCeIXvAF8N34mRQ00TU8SoyvUSmVWh/F6nTSBmhn3eA+BpOOsmhOtI/IOfwKSQ= 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=Znd+I2PA; arc=none smtp.client-ip=209.85.214.171 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="Znd+I2PA" Received: by mail-pl1-f171.google.com with SMTP id d9443c01a7336-2c0c20f0c0aso22458625ad.0 for ; Tue, 02 Jun 2026 19:59:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1780455559; x=1781060359; 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; bh=CQM8/bXLwnHI0Nwp6B/mbCtcMHwqmZBefz4Rf3Ov6Bg=; b=Znd+I2PAUjLF896gtUB5FqH8pEHWwb8vmMdAgrCPL/3yjl9ehaqiw/E31OoPCOsQ7m f2ZXPWQ4VhqDV1tQ4lIf17buzTN+Jh4wcw6FrfzrGuRr84bt6qxQMN/41PAKsPXbCoeu KRIYWLb1Dy6XiT5eEK1Kx4NYTuDWYb2BDNPoXLLP7Kd9DKcwWmScGXLsvb5O466X62Rw pnMFJELAjW8hQOQlKxzZOtArn7fhmis1cJw7+IJG5/QZ07mu2/up9+AUnI/EKsPP+76a M41Mp8eUmms2MET8TalBhfwaBG+gSfty4DRNP+Chl3CujSh8S5emCRO2/YqhBLPkARtR 0iQw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780455559; x=1781060359; 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; bh=CQM8/bXLwnHI0Nwp6B/mbCtcMHwqmZBefz4Rf3Ov6Bg=; b=FRhsjRoofcSr4upUSiweRj4Lsi+n3PPRU4DvjYVbw4O3DaNEL73uBWVxCnNU+RBG1D miDdroOoLsB1pI/B948z5cVJ7PpI8RrC84YPxlc+xye/Yk1/0YGx4KHQIzXFKxSCdZ1U RzwinFnisp76XDjFAsBMy2gXDILRv4WUDQ8jgNiRmWgUCuuZsVUhADURTIKE5XdpClDq yHryIpEEZhN4r+dYmWO2ak+8vkfxhCjmxtnptkJPdmPEGiWiPDNeO63le//1i79iFQ/G cg85RZPhDkBRLsqhNURWKQri8gN8MaKSlrYwoQk2Wx7a509580Np3icOHAd+4gD4h7DM phgA== X-Forwarded-Encrypted: i=1; AFNElJ//xk+hdisEBgUXge9kRIr0cWRYJIEUP4P+bWw/1sKeE6lCP6jxtK5tRxsABEb7e7S0C4IpCtmzqd9AnHQ=@vger.kernel.org X-Gm-Message-State: AOJu0YzshakpJQc5VkpejC4l6RcanKUlSrd3fSZ+t+686x1J2YDMTqMh cv2EGGoHpHm9V2vRPC0PxGFVKHIAdHDbiHXmlwl/4Rw/+woneKD01uN7 X-Gm-Gg: Acq92OEHTtnW79cnRv/rklh/yTPYrPah2UREEopGIEYMOP1CKgot7bgPASSOL2c9Tch 6w1a8HaLYZX0utsCcIUcrL+sZ0iPGRs+rfKH53frAii7bHzNg3qc3vittwNdFdyWRJ5FCtKIqVa QTrZ3KRA71nO3MSU4cz9F8kZWhqR2s1Xs7G+xT1UN9/Sb7iz24RyamDedjBRoprSE1ZtiuultvF inIxbYLeo9LV07pGUlSwZ94Wo4BPytWAPhs5QWZLiBwGxOogCBYnlox5HpxhSI7B7+HAKn9W8Wy HcudItTuoFl5kcGPapiujZqWOrlFi1VW4rnznA0NIYyBiNTSsT5iGniLvOgTxOWNzDS+Aobk9Jz H83oStjwzXolG0wbumh3+HwLtyPM/QstutaC2/yex7BjccAOzN87bR6iBybU9FjYX+3XA8ACDsZ UF+IH5rwO2ytpA2oosbUIBaa+rH3t/G6FxhTjJLpGc8bgSFXpFUBnNhPUS1Wr3X3RrFwd41WxmW ia+Vnusbg6cEMx462gYDhNjwiOYh303ansZqyBdsazhTA== X-Received: by 2002:a17:903:948:b0:2bf:23ad:8595 with SMTP id d9443c01a7336-2c1639ec888mr14025245ad.4.1780455559275; Tue, 02 Jun 2026 19:59:19 -0700 (PDT) Received: from ryzen ([2601:644:8000:5b5d:7285:c2ff:fe45:8a32]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2c164f6d395sm8093805ad.17.2026.06.02.19.59.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Jun 2026 19:59:18 -0700 (PDT) From: Rosen Penev To: linux-serial@vger.kernel.org Cc: Greg Kroah-Hartman , Jiri Slaby , Frank Li , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , linux-kernel@vger.kernel.org (open list:TTY LAYER AND SERIAL DRIVERS), imx@lists.linux.dev (open list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE), linux-arm-kernel@lists.infradead.org (moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE) Subject: [PATCH 3/3] serial: mxs-auart: fix IRQ registration ordering and manage console clock Date: Tue, 2 Jun 2026 19:58:57 -0700 Message-ID: <20260603025857.287148-4-rosenp@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260603025857.287148-1-rosenp@gmail.com> References: <20260603025857.287148-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: quoted-printable Content-Type: text/plain; charset="utf-8" Move the main UART IRQ registration after uart_add_one_port so that s->port.state and s->port.lock are initialized before the interrupt handler can run. Mask all UART interrupts before adding the port to prevent spurious IRQs left by the bootloader. After probe succeeds, disable the module clock for non-console ports since startup will re-enable it on port open. For console ports, keep the clock prepared so auart_console_write() can safely call clk_enable() from atomic context. Assisted-by: opencode:big-pickle Signed-off-by: Rosen Penev --- drivers/tty/serial/mxs-auart.c | 39 ++++++++++++++++++++++++++-------- 1 file changed, 30 insertions(+), 9 deletions(-) diff --git a/drivers/tty/serial/mxs-auart.c b/drivers/tty/serial/mxs-auart.c index 4499e3206e85..d40d82f112c0 100644 --- a/drivers/tty/serial/mxs-auart.c +++ b/drivers/tty/serial/mxs-auart.c @@ -1603,10 +1603,6 @@ static int mxs_auart_probe(struct platform_device *p= dev) } s->port.irq =3D irq; - ret =3D devm_request_irq(&pdev->dev, irq, mxs_auart_irq_handle, 0, - dev_name(&pdev->dev), s); - if (ret) - goto out_disable_clk; platform_set_drvdata(pdev, s); @@ -1627,9 +1623,28 @@ static int mxs_auart_probe(struct platform_device *p= dev) mxs_auart_reset_deassert(s); + /* Mask all UART interrupts to prevent spurious IRQs from bootloader */ + mxs_write(0, s, REG_INTR); + ret =3D uart_add_one_port(&auart_driver, &s->port); - if (ret) - goto out_free_qpio_irq; + if (ret) { + auart_port[s->port.line] =3D NULL; + goto out_disable_clk; + } + + /* + * Request the main IRQ after uart_add_one_port so that + * s->port.state and s->port.lock are initialized before + * the handler can run in response to a bootloader-left + * interrupt. + */ + ret =3D devm_request_irq(&pdev->dev, irq, mxs_auart_irq_handle, 0, + dev_name(&pdev->dev), s); + if (ret) { + uart_remove_one_port(&auart_driver, &s->port); + auart_port[s->port.line] =3D NULL; + goto out_disable_clk; + } /* ASM9260 don't have version reg */ if (is_asm9260_auart(s)) { @@ -1641,10 +1656,16 @@ static int mxs_auart_probe(struct platform_device *= pdev) (version >> 16) & 0xff, version & 0xffff); } - return 0; + /* + * Disable clock - startup will re-enable when the port is opened. + * For the console port the clock must stay prepared so that + * auart_console_write() can safely call clk_enable() from + * atomic context. + */ + if (!uart_console(&s->port)) + clk_disable_unprepare(s->clk); -out_free_qpio_irq: - auart_port[s->port.line] =3D NULL; + return 0; out_disable_clk: clk_disable_unprepare(s->clk); -- 2.54.0