From nobody Mon Jun 8 07:30:43 2026 Received: from galois.linutronix.de (Galois.linutronix.de [193.142.43.55]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EF00B480977; Wed, 3 Jun 2026 13:05:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=193.142.43.55 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780491922; cv=none; b=TswivlTd82TxMKjtS1GG1T9XaXNMIyysjDwv9Oa7PztAWRQtcQdiFzvv0Bg1zbt4E+P74PEvpVsDKUUbWk61A8NVsJjg4aKlK9rr4jXCbkwlne329CwLOSA9nuq/xQrl9joZnEZHlWSxarPURq92gv9uYfpliW60RR8Kjo7l3Kc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780491922; c=relaxed/simple; bh=DhHCUTotCOW1SQ4uyv4cW+s9PZn1ax0gXuAh5YkqP6U=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=dBegUqlLBQtoLwgTqXooYxhCZaQqryqdaI/b02k0y9D04eGkASjiOE0vkNF2qjBUEvsN+dRpwRY96zHKCS0Mj65EIyZHr+UR5bzUSzd5vlV22YPyhYu6n6ccOHB2mKNJP9Oa6XEfXPGnHUleDyYV8i3jAYzIUeFZQDGMafukjK0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de; spf=pass smtp.mailfrom=linutronix.de; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=XN1tXWP7; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=zgqQhrwa; arc=none smtp.client-ip=193.142.43.55 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linutronix.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="XN1tXWP7"; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="zgqQhrwa" From: Sebastian Andrzej Siewior DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1780491919; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ZV+ffJlIUH8tNWX0DeCQvrDENvjacC7P6NDhKlFacYE=; b=XN1tXWP71myVvUCIXKexPpY8nMfbTz8r15adUKvwXewFNemGgf0Iv0SPtwRa9nNKBXSreT r42AQaIt18LJqJTVK5DzUF/J7PJ0NAhmEk3KD+TBVvTmCdk3XLoIe/I54YhIgMVyk63Gyj bIIFOQkuC3RslnNxUDHZxLm2y+EEAgQh6MYxOtehud+NJx7P4KHsT6xNSpNCYX8SZ3fjKB TVvs47obijIjAK6+QmtDyiSwHDSyaG/CM3Hm8KYnMLMB6xjjDX1r55sDYuE4KFqj5XAynh QS5DkxjM4TSXqEn/yKvJrC6Lp0fqJtSzS2aW+sIeyrdSMIMWg8ygoOkHCLXHbg== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1780491919; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ZV+ffJlIUH8tNWX0DeCQvrDENvjacC7P6NDhKlFacYE=; b=zgqQhrwaEkJLOlZYMC2Qn4EJhVjXGEhZuh5YCYVdTnw5poJHkXWnlEECxM3/xzOSD2Wm0U XBt6KLoXSvvDteBw== To: linux-kernel@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-remoteproc@vger.kernel.org, linux-rt-devel@lists.linux.dev Cc: Sebastian Andrzej Siewior , Bjorn Andersson , Clark Williams , Fabio Estevam , Frank Li , Jassi Brar , Mathieu Poirier , Pengutronix Kernel Team , Sascha Hauer , Steven Rostedt Subject: [PATCH v2 1/9] mailbox: imx: Add a channel shutdown field Date: Wed, 3 Jun 2026 15:05:04 +0200 Message-ID: <20260603-imx_mbox_rproc-v2-1-a0059dc3b69a@linutronix.de> In-Reply-To: <20260603-imx_mbox_rproc-v2-0-a0059dc3b69a@linutronix.de> References: <20260603-imx_mbox_rproc-v2-0-a0059dc3b69a@linutronix.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable sashiko complained about possible teardown problem. The scenario CPU 0 CPU 1 imx_mu_isr() imx_mu_shutdown() imx_mu_xcr_rmw(priv, IMX_MU_RCR, 0, IMX_= MU_xCR_RIEn(priv->dcfg->type, cp->idx)); imx_mu_specific_rx() imx_mu_xcr_rmw(priv, IMX_MU_RCR, IMX_MU_xCR_RIEn(priv->dcfg->type, 0)= , 0); free_irq() The RX event remains enabled because in this short window the RX event was disabled in ->shutdown() while the interrupt was active and then enabled again by the ISR while ->shutdown waited in free_irq(). This race requires timing and if happens can be problematic on shared handlers if the "removed" channel triggers an interrupt. In this case the irq-core will shutdown the interrupt with the "nobody cared" message. Introduce imx_mu_con_priv::shutdown to signal that the channel is shutting down. This flag is set with the lock held (by imx_mu_xcr_clr_shut()). The unmask side uses imx_mu_xcr_set_act() which only enables the event if the channel has not been shutdown and serialises on the same lock. Signed-off-by: Sebastian Andrzej Siewior Reviewed-by: Peng Fan --- drivers/mailbox/imx-mailbox.c | 40 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 36 insertions(+), 4 deletions(-) diff --git a/drivers/mailbox/imx-mailbox.c b/drivers/mailbox/imx-mailbox.c index 246a9a9e39520..34edc2f31dcb5 100644 --- a/drivers/mailbox/imx-mailbox.c +++ b/drivers/mailbox/imx-mailbox.c @@ -80,6 +80,7 @@ struct imx_mu_con_priv { enum imx_mu_chan_type type; struct mbox_chan *chan; struct work_struct txdb_work; + bool shutdown; }; =20 struct imx_mu_priv { @@ -219,6 +220,36 @@ static u32 imx_mu_xcr_rmw(struct imx_mu_priv *priv, en= um imx_mu_xcr type, u32 se return val; } =20 +static void imx_mu_xcr_clr_shut(struct imx_mu_priv *priv, struct imx_mu_co= n_priv *cp, + enum imx_mu_xcr type, u32 clr) +{ + unsigned long flags; + u32 val; + + spin_lock_irqsave(&priv->xcr_lock, flags); + cp->shutdown =3D true; + + val =3D imx_mu_read(priv, priv->dcfg->xCR[type]); + val &=3D ~clr; + imx_mu_write(priv, val, priv->dcfg->xCR[type]); + spin_unlock_irqrestore(&priv->xcr_lock, flags); +} + +static void imx_mu_xcr_set_act(struct imx_mu_priv *priv, struct imx_mu_con= _priv *cp, + enum imx_mu_xcr type, u32 set) +{ + unsigned long flags; + u32 val; + + spin_lock_irqsave(&priv->xcr_lock, flags); + if (!cp->shutdown) { + val =3D imx_mu_read(priv, priv->dcfg->xCR[type]); + val |=3D set; + imx_mu_write(priv, val, priv->dcfg->xCR[type]); + } + spin_unlock_irqrestore(&priv->xcr_lock, flags); +} + static int imx_mu_generic_tx(struct imx_mu_priv *priv, struct imx_mu_con_priv *cp, void *data) @@ -376,7 +407,7 @@ static int imx_mu_specific_rx(struct imx_mu_priv *priv,= struct imx_mu_con_priv * *data++ =3D imx_mu_read(priv, priv->dcfg->xRR + (i % num_rr) * 4); } =20 - imx_mu_xcr_rmw(priv, IMX_MU_RCR, IMX_MU_xCR_RIEn(priv->dcfg->type, 0), 0); + imx_mu_xcr_set_act(priv, cp, IMX_MU_RCR, IMX_MU_xCR_RIEn(priv->dcfg->type= , 0)); mbox_chan_received_data(cp->chan, (void *)priv->msg); =20 return 0; @@ -604,6 +635,7 @@ static int imx_mu_startup(struct mbox_chan *chan) return ret; } =20 + cp->shutdown =3D false; switch (cp->type) { case IMX_MU_TYPE_RX: imx_mu_xcr_rmw(priv, IMX_MU_RCR, IMX_MU_xCR_RIEn(priv->dcfg->type, cp->i= dx), 0); @@ -638,13 +670,13 @@ static void imx_mu_shutdown(struct mbox_chan *chan) =20 switch (cp->type) { case IMX_MU_TYPE_TX: - imx_mu_xcr_rmw(priv, IMX_MU_TCR, 0, IMX_MU_xCR_TIEn(priv->dcfg->type, cp= ->idx)); + imx_mu_xcr_clr_shut(priv, cp, IMX_MU_TCR, IMX_MU_xCR_TIEn(priv->dcfg->ty= pe, cp->idx)); break; case IMX_MU_TYPE_RX: - imx_mu_xcr_rmw(priv, IMX_MU_RCR, 0, IMX_MU_xCR_RIEn(priv->dcfg->type, cp= ->idx)); + imx_mu_xcr_clr_shut(priv, cp, IMX_MU_RCR, IMX_MU_xCR_RIEn(priv->dcfg->ty= pe, cp->idx)); break; case IMX_MU_TYPE_RXDB: - imx_mu_xcr_rmw(priv, IMX_MU_GIER, 0, IMX_MU_xCR_GIEn(priv->dcfg->type, c= p->idx)); + imx_mu_xcr_clr_shut(priv, cp, IMX_MU_GIER, IMX_MU_xCR_GIEn(priv->dcfg->t= ype, cp->idx)); break; case IMX_MU_TYPE_RST: imx_mu_xcr_rmw(priv, IMX_MU_CR, IMX_MU_xCR_RST(priv->dcfg->type), 0); --=20 2.53.0 From nobody Mon Jun 8 07:30:43 2026 Received: from galois.linutronix.de (Galois.linutronix.de [193.142.43.55]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 507D3480DCC; Wed, 3 Jun 2026 13:05:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=193.142.43.55 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780491922; cv=none; b=EmUVFgivAdr3icBtZDELPL4yUggCBg21sPcb/qEQjiTpn1VDyIWwNwyz42EiCL6T/KMHh0hKJ01nf9pBdIp/6paseCcPOCnUKKd8TvN4TnYkZ9RY2ZufvX0llwJd+weSbVhsYRscVp3oGIEQFrYJgK5QWFA9uJ+OdcaXy5vT8I0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780491922; c=relaxed/simple; bh=um3Q3O07JbrhlBvCpvy4uDKTX0c9Y3LOxG0TU6kUriY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=d57oAR8FCdaZrLwLs4Sciyrta53TbZOw/dtVm3D/uUypC+zyVNXCC8ViXMSW4Q6zQ6ZUbkZ7lTD/jSMjCO6Uz+7S6Ix6wryO8ws/7+EOBNq3teiSXDi0x2riL599FYB6VB5cHZN++MVQ4ctRZmxkoMtg3HIz2JD5pavk+T67Ths= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de; spf=pass smtp.mailfrom=linutronix.de; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=nmG0UQZ3; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=s2TKqXuf; arc=none smtp.client-ip=193.142.43.55 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linutronix.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="nmG0UQZ3"; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="s2TKqXuf" From: Sebastian Andrzej Siewior DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1780491919; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=9c+IJqqXc5Um/JnqM9Fs6W5B34mNQPyzW5r2N0OJlp0=; b=nmG0UQZ3uRRN421PZnIKKsQ/6CUuMSXFdXHRToidgzlX6MbhOua4omBZxgwYrJ+9EIDwNa VOLxH4eon4lO0Q5Tr0PUuxKGLJ11rP0slhUuGDDPVtpbT5X+4AqDZfLTAyKh6slnqyn5gK +niXF+JR4Px1NC1KXEjDQerjPG1mN3zsm8lJggu6d79WndRE1uWLfIHXXhN2HI0Hl/STHY FBlvoaXiZRN4sniNzsrpGjFKi/6OqVhQo3NQvWBrPlac1fzoSy0LB1m1t9sqmyHCCGzjFa dlNCQc1OfxXEk1El0mcdDTPxLhyPSN1dVycTRObLqJfHCdhrCHZt1ooA7m1Zcg== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1780491919; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=9c+IJqqXc5Um/JnqM9Fs6W5B34mNQPyzW5r2N0OJlp0=; b=s2TKqXuf2rV/21XHS+15u8efIO2Hw6iOXn8HyAluV9CkNUkjgbXX2FmbpkcMU+7h19BJpl IsOqMLnf6sGAASBQ== To: linux-kernel@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-remoteproc@vger.kernel.org, linux-rt-devel@lists.linux.dev Cc: Sebastian Andrzej Siewior , Bjorn Andersson , Clark Williams , Fabio Estevam , Frank Li , Jassi Brar , Mathieu Poirier , Pengutronix Kernel Team , Sascha Hauer , Steven Rostedt Subject: [PATCH v2 2/9] mailbox: imx: Use devm_pm_runtime_enable() Date: Wed, 3 Jun 2026 15:05:05 +0200 Message-ID: <20260603-imx_mbox_rproc-v2-2-a0059dc3b69a@linutronix.de> In-Reply-To: <20260603-imx_mbox_rproc-v2-0-a0059dc3b69a@linutronix.de> References: <20260603-imx_mbox_rproc-v2-0-a0059dc3b69a@linutronix.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable sashiko complained about early usage of the device while probe isn't completed. This can be mitigated by delaying the pm_runtime_enable() into the removal path instead doing it early. This ensures that in an error case the device is removed (and imx_mu_shutdown()) before pm_runtime_disable() so we don't have to do this manually. For the order to work, lets move devm_mbox_controller_register() until after the pm-runtime part. So the reverse order will be mbox-controller removal followed by disabling pm runtime. Use devm_pm_runtime_enable(), remove manual pm_runtime_disable() invocations and move the pm_runtime handling in probe before devm_mbox_controller_register(). Signed-off-by: Sebastian Andrzej Siewior Reviewed-by: Peng Fan --- drivers/mailbox/imx-mailbox.c | 31 ++++++++++++++----------------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/drivers/mailbox/imx-mailbox.c b/drivers/mailbox/imx-mailbox.c index 34edc2f31dcb5..24cf704b4f9bd 100644 --- a/drivers/mailbox/imx-mailbox.c +++ b/drivers/mailbox/imx-mailbox.c @@ -965,28 +965,28 @@ static int imx_mu_probe(struct platform_device *pdev) =20 platform_set_drvdata(pdev, priv); =20 + ret =3D devm_pm_runtime_enable(dev); + if (ret < 0) + goto disable_clk; + + ret =3D pm_runtime_resume_and_get(dev); + if (ret < 0) + goto disable_clk; + + ret =3D pm_runtime_put_sync(dev); + if (ret < 0) + goto disable_clk; + + clk_disable_unprepare(priv->clk); + ret =3D devm_mbox_controller_register(dev, &priv->mbox); if (ret) goto disable_clk; =20 of_platform_populate(dev->of_node, NULL, NULL, dev); =20 - pm_runtime_enable(dev); - - ret =3D pm_runtime_resume_and_get(dev); - if (ret < 0) - goto disable_runtime_pm; - - ret =3D pm_runtime_put_sync(dev); - if (ret < 0) - goto disable_runtime_pm; - - clk_disable_unprepare(priv->clk); - return 0; =20 -disable_runtime_pm: - pm_runtime_disable(dev); disable_clk: clk_disable_unprepare(priv->clk); return ret; @@ -994,9 +994,6 @@ static int imx_mu_probe(struct platform_device *pdev) =20 static void imx_mu_remove(struct platform_device *pdev) { - struct imx_mu_priv *priv =3D platform_get_drvdata(pdev); - - pm_runtime_disable(priv->dev); } =20 static const struct imx_mu_dcfg imx_mu_cfg_imx6sx =3D { --=20 2.53.0 From nobody Mon Jun 8 07:30:43 2026 Received: from galois.linutronix.de (Galois.linutronix.de [193.142.43.55]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C5061480DD2; Wed, 3 Jun 2026 13:05:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=193.142.43.55 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780491923; cv=none; b=jJFkArJu1ZrMHSDEOcN++IWB/1zztUDQNfyCHEqWFx0rbx4d+i9exQ1QttHVYX1YEPiGcNr/OLxsKrbWYhGiVMgWPP3/2wqweWFYwWQl0NR2Y/d6LPsaeC3eKxBlv1mpwr8iByv37QBWYjzEIWsUnPwybgCpKIpbXFsCGMyLVS8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780491923; c=relaxed/simple; bh=YKaJvq4W9QVoH0S2jVv6q5tyBikTchZuE2gKNHaFg6E=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=cj6CPtp2vjzf43M78VPOS7Ana0Kaz8s4MLjMY7ireGCTTX25wQmp+IvuGc6YCJCWGxZ/JsPNx78iIHQuV71gwz7S0X8GYxHzzZx5R0otiZ85grx6GuUbSmZ7rWUHdXz9vNoRbtDRX2DQyjocosNgqBjxebvGXCznz0dXfntpZCw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de; spf=pass smtp.mailfrom=linutronix.de; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=Xi/Otzu3; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=u1VUUSx+; arc=none smtp.client-ip=193.142.43.55 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linutronix.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="Xi/Otzu3"; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="u1VUUSx+" From: Sebastian Andrzej Siewior DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1780491920; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=eHu0ybf8Zw3NyxF6mPleRKwZui1BrbXzpLJ2arEvlYg=; b=Xi/Otzu3nBL9YUMNqwEBz+6aq67HhwSN+0y9o0e3LpE1s4kW2RLmrfOBP2yU0/ubiJCslA hHn8oK2c1UXqnf1MIToBPULK+GxrpqePqmltthBxkJqeYOIv/2feEZOug9H5So0kA+f24c RrY112CugTbswQtjv5KKQ/Zv0royimccGgjrq7ABm60O/ZAA3xaQkhEqRNiyLATE1gZNWq WNpASo1MC5C/8dJzvNsAr2peJtLnsje3MV1utZOscwZGMzpUvWQEnzyOdkSlQIqPFqlWPZ r05nHQv94oYoPUVk2JGIKBzQ+LyijYgZxiHyyK4k+hw7Kwzg7Xsk9Zgj5RMWJg== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1780491920; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=eHu0ybf8Zw3NyxF6mPleRKwZui1BrbXzpLJ2arEvlYg=; b=u1VUUSx+QLpX4dqAbUVgaZVjJP9IJiLjmmKyAGbcqnB7MHXGpAhHy9RnM/002XpHjA1F1e 7x3OKcKywHQA9RAA== To: linux-kernel@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-remoteproc@vger.kernel.org, linux-rt-devel@lists.linux.dev Cc: Sebastian Andrzej Siewior , Bjorn Andersson , Clark Williams , Fabio Estevam , Frank Li , Jassi Brar , Mathieu Poirier , Pengutronix Kernel Team , Sascha Hauer , Steven Rostedt Subject: [PATCH v2 3/9] mailbox: imx: use devm_of_platform_populate() Date: Wed, 3 Jun 2026 15:05:06 +0200 Message-ID: <20260603-imx_mbox_rproc-v2-3-a0059dc3b69a@linutronix.de> In-Reply-To: <20260603-imx_mbox_rproc-v2-0-a0059dc3b69a@linutronix.de> References: <20260603-imx_mbox_rproc-v2-0-a0059dc3b69a@linutronix.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable The driver uses of_platform_populate() but does not remove the added devices on removal. This can lead to "double devices" on module removal followed by adding the module again. Use devm_of_platform_populate() to remove the populated devices once the parent device is removed. Signed-off-by: Sebastian Andrzej Siewior Reviewed-by: Peng Fan --- drivers/mailbox/imx-mailbox.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/mailbox/imx-mailbox.c b/drivers/mailbox/imx-mailbox.c index 24cf704b4f9bd..1dda1437b87f6 100644 --- a/drivers/mailbox/imx-mailbox.c +++ b/drivers/mailbox/imx-mailbox.c @@ -983,7 +983,7 @@ static int imx_mu_probe(struct platform_device *pdev) if (ret) goto disable_clk; =20 - of_platform_populate(dev->of_node, NULL, NULL, dev); + devm_of_platform_populate(dev); =20 return 0; =20 --=20 2.53.0 From nobody Mon Jun 8 07:30:43 2026 Received: from galois.linutronix.de (Galois.linutronix.de [193.142.43.55]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 348CF480DE0; Wed, 3 Jun 2026 13:05:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=193.142.43.55 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780491923; cv=none; b=n6Vkag0leYPXIZGn1RrcmEd5DRVoKMaglEiwWzJxa8V3XAV2gR0lDUacAomd1Md0hJxKIh9JQ8UcyyfcqZmHHmBo0oq2Db73mGDre60AjruwUrg7p45LgYmFOl3XiN86GZfdKT4N7KQ7Bk4gajxfyNb33rRn1g8GVNj+mpcBVJg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780491923; c=relaxed/simple; bh=OnGN29T3WNoMUOJKKHNXVWq4a1RN4jNrXeuqbtmMD/I=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=dmVQk2lMoen9dKqIlxbFykkbqfQupR7DSH9q2xKEAtb1jwd6qjNI7IcH1to7kXY9w1dcW/n7qaRWM4cP3XTlFFjOW41O4bmEPTxJVoRn88vY5krNvwZOIzOkwEjmg0VQsTdzBKtE0FiyTlLqPd7xikTmmi8ijCjaKa+KjkD0RHk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de; spf=pass smtp.mailfrom=linutronix.de; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=z/7sL9Na; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=6tWwcYEa; arc=none smtp.client-ip=193.142.43.55 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linutronix.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="z/7sL9Na"; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="6tWwcYEa" From: Sebastian Andrzej Siewior DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1780491920; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=tQw5lyjGpMXFlBOE2LL7wmUpV6nFm6/pguDg6ZWbcPE=; b=z/7sL9Nazcyq4OSdck02yPF9unIjlwIWxrj0YVVqBR4tJQb5aZ3W9rMYMdcSU4BYRbNgs7 5M2Mbr8Avs+893GwD8rU1gph9/UJbAUyTJvCoFWr5fOCV+0+NecUMZKY65+UNH08j2Ubsh fCRoklxDD76nsWYLgbEmdxczbSQ8nMor6b5l6bSbAE2IDzuAlE/GHZ1XiLiI7D5xJ87xZn mR0tmj9lCsq8fH8zkczsaGJQV6E02suz9PDJh75o9iAx863kgqEcjabcKnYf3oOJFD7cAG 6cflJ3vhVd+s6HHfnCAGJAI96ku5Lc67cSzQrrgtRLL6cHxEdV6+B2NQLkOKkA== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1780491920; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=tQw5lyjGpMXFlBOE2LL7wmUpV6nFm6/pguDg6ZWbcPE=; b=6tWwcYEaEm+e9zkwgFr7t/R2M+yhJL1XbO2yBMOHA4AZ+Cnt7RWh3A0HciQKZf6MTXzqEz 8QDweHENd8lRKUAw== To: linux-kernel@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-remoteproc@vger.kernel.org, linux-rt-devel@lists.linux.dev Cc: Sebastian Andrzej Siewior , Bjorn Andersson , Clark Williams , Fabio Estevam , Frank Li , Jassi Brar , Mathieu Poirier , Pengutronix Kernel Team , Sascha Hauer , Steven Rostedt Subject: [PATCH v2 4/9] mailbox: imx: Use channel index instead of zero in imx_mu_specific_rx() Date: Wed, 3 Jun 2026 15:05:07 +0200 Message-ID: <20260603-imx_mbox_rproc-v2-4-a0059dc3b69a@linutronix.de> In-Reply-To: <20260603-imx_mbox_rproc-v2-0-a0059dc3b69a@linutronix.de> References: <20260603-imx_mbox_rproc-v2-0-a0059dc3b69a@linutronix.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable imx_mu_specific_rx() masks channel 0 and unmasks it again at the end of the function. Given that at startup the channel index got unmasked it should do the right job. This here either unmasks the actual channel or another one but should have no impact given that it reverses its doing at the end. Use the channel index instead of zero. Signed-off-by: Sebastian Andrzej Siewior Reviewed-by: Peng Fan --- drivers/mailbox/imx-mailbox.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/mailbox/imx-mailbox.c b/drivers/mailbox/imx-mailbox.c index 1dda1437b87f6..d1de07cc0ed62 100644 --- a/drivers/mailbox/imx-mailbox.c +++ b/drivers/mailbox/imx-mailbox.c @@ -380,7 +380,7 @@ static int imx_mu_specific_rx(struct imx_mu_priv *priv,= struct imx_mu_con_priv * =20 data =3D (u32 *)priv->msg; =20 - imx_mu_xcr_rmw(priv, IMX_MU_RCR, 0, IMX_MU_xCR_RIEn(priv->dcfg->type, 0)); + imx_mu_xcr_rmw(priv, IMX_MU_RCR, 0, IMX_MU_xCR_RIEn(priv->dcfg->type, cp-= >idx)); *data++ =3D imx_mu_read(priv, priv->dcfg->xRR); =20 if (priv->dcfg->type & IMX_MU_V2_S4) { @@ -407,7 +407,7 @@ static int imx_mu_specific_rx(struct imx_mu_priv *priv,= struct imx_mu_con_priv * *data++ =3D imx_mu_read(priv, priv->dcfg->xRR + (i % num_rr) * 4); } =20 - imx_mu_xcr_set_act(priv, cp, IMX_MU_RCR, IMX_MU_xCR_RIEn(priv->dcfg->type= , 0)); + imx_mu_xcr_set_act(priv, cp, IMX_MU_RCR, IMX_MU_xCR_RIEn(priv->dcfg->type= , cp->idx)); mbox_chan_received_data(cp->chan, (void *)priv->msg); =20 return 0; --=20 2.53.0 From nobody Mon Jun 8 07:30:43 2026 Received: from galois.linutronix.de (Galois.linutronix.de [193.142.43.55]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 62C2148122B; Wed, 3 Jun 2026 13:05:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=193.142.43.55 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780491925; cv=none; b=XSDl9esZBHjH9SDC0q1HKdXkq67hulHG6b+6IsDWSox4xJkzjCyhbAzD5O79NDGnUz4j288s31lr85CGUG78xzRuQprI2GSlNuki8fuRsbUAAxs7xyF2gyZ7B4g7UO1EoK0+49EImMbeh+p/lgz6E6hXpWyCAFrMvvJs0/xwD6Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780491925; c=relaxed/simple; bh=ar7weazsSFejktseea/mhSlOoaOx04l8Z/I5D2ICyyk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=d9ovE/K5F0ZMOPoxEvUeXd1Qp4Pz6k0YjbLlyjDHt7UpzDOjf7LjbDp2gV+t9j7zIRwOXWm+5acT3iWQeZ+HhfMucAYRBRxrnucfbDwsoS/R9OnpL5VSDhBndTCEIeZC+tgDTnBXYagwnLAn81IY2nY9jj4fF9MXF1EZjcqZf5Q= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de; spf=pass smtp.mailfrom=linutronix.de; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=Z0pHmSo2; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=jeVfsNNS; arc=none smtp.client-ip=193.142.43.55 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linutronix.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="Z0pHmSo2"; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="jeVfsNNS" From: Sebastian Andrzej Siewior DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1780491921; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=qsswPfnnXsB1CCpGvONqYTMOqIRDSE3ZuW24UofC3Kc=; b=Z0pHmSo2e9HDjyvJRggfuyCHJ6y6zW13ZP/RkWeojZN3vR5/icaM16ZmgYP7Szm0s2XoT9 oM72YLKc6J5H/8Ab/7G+cmC/JXKbp+ZaVqQ7RPm2GOedLO+1QyBx/VzDrS4xuxXqQu8gbo hF7Hk9AKHmz8K8j4DKqMLVaGIl9/JU2mmNgzaKeTn/B6zCYq9RtT+DwWX5FVJnqs8HwmBX +M5qwo1M48PRouUa7kyhVMrspMwoKsqo+PVrwLQegYV5a7lrMQBI5buIo9Ht57CxlBGjOv Cs3PtCIQ3UGRaJJZzS9Km1olhDdBIAxxZ79lnPP2idWG/NwtcXJhVm2hYxn3+w== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1780491921; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=qsswPfnnXsB1CCpGvONqYTMOqIRDSE3ZuW24UofC3Kc=; b=jeVfsNNSjrj1ZI/nR2d3BwMidOmkeqY6W5NaTimA1P5kTSMZHU8CUP1+/aw8SruGy8vidq qOS0E3qXqa4qa+CQ== To: linux-kernel@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-remoteproc@vger.kernel.org, linux-rt-devel@lists.linux.dev Cc: Sebastian Andrzej Siewior , Bjorn Andersson , Clark Williams , Fabio Estevam , Frank Li , Jassi Brar , Mathieu Poirier , Pengutronix Kernel Team , Sascha Hauer , Steven Rostedt Subject: [PATCH v2 5/9] mailbox: imx: Start splitting the IRQ handler in primary and threaded handler Date: Wed, 3 Jun 2026 15:05:08 +0200 Message-ID: <20260603-imx_mbox_rproc-v2-5-a0059dc3b69a@linutronix.de> In-Reply-To: <20260603-imx_mbox_rproc-v2-0-a0059dc3b69a@linutronix.de> References: <20260603-imx_mbox_rproc-v2-0-a0059dc3b69a@linutronix.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Split the mailbox irq handling into a primary handler (imx_mu_isr()) and a threaded handler (imx_mu_isr_th()). The primary handler masks the interrupt event so the threaded handler can run without raising the interrupt again. The threaded handler can invoke the actuall callback in preemtible context. As a first step, prepare the logic and move TX handling part. Signed-off-by: Sebastian Andrzej Siewior Reviewed-by: Peng Fan --- drivers/mailbox/imx-mailbox.c | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/drivers/mailbox/imx-mailbox.c b/drivers/mailbox/imx-mailbox.c index d1de07cc0ed62..006aa76b74b62 100644 --- a/drivers/mailbox/imx-mailbox.c +++ b/drivers/mailbox/imx-mailbox.c @@ -81,6 +81,7 @@ struct imx_mu_con_priv { struct mbox_chan *chan; struct work_struct txdb_work; bool shutdown; + bool pending; }; =20 struct imx_mu_priv { @@ -539,11 +540,35 @@ static void imx_mu_txdb_work(struct work_struct *t) mbox_chan_txdone(cp->chan, 0); } =20 +static irqreturn_t imx_mu_isr_th(int irq, void *p) +{ + struct mbox_chan *chan =3D p; + struct imx_mu_priv *priv =3D to_imx_mu_priv(chan->mbox); + struct imx_mu_con_priv *cp =3D chan->con_priv; + + if (!cp->pending) + return IRQ_NONE; + + switch (cp->type) { + case IMX_MU_TYPE_TX: + cp->pending =3D false; + mbox_chan_txdone(chan, 0); + break; + + default: + dev_warn_ratelimited(priv->dev, "Unhandled channel type %d\n", + cp->type); + return IRQ_NONE; + } + return IRQ_HANDLED; +} + static irqreturn_t imx_mu_isr(int irq, void *p) { struct mbox_chan *chan =3D p; struct imx_mu_priv *priv =3D to_imx_mu_priv(chan->mbox); struct imx_mu_con_priv *cp =3D chan->con_priv; + irqreturn_t ret =3D IRQ_HANDLED; u32 val, ctrl; =20 switch (cp->type) { @@ -579,7 +604,8 @@ static irqreturn_t imx_mu_isr(int irq, void *p) if ((val =3D=3D IMX_MU_xSR_TEn(priv->dcfg->type, cp->idx)) && (cp->type =3D=3D IMX_MU_TYPE_TX)) { imx_mu_xcr_rmw(priv, IMX_MU_TCR, 0, IMX_MU_xCR_TIEn(priv->dcfg->type, cp= ->idx)); - mbox_chan_txdone(chan, 0); + cp->pending =3D true; + ret =3D IRQ_WAKE_THREAD; } else if ((val =3D=3D IMX_MU_xSR_RFn(priv->dcfg->type, cp->idx)) && (cp->type =3D=3D IMX_MU_TYPE_RX)) { priv->dcfg->rx(priv, cp); @@ -594,7 +620,7 @@ static irqreturn_t imx_mu_isr(int irq, void *p) if (priv->suspend) pm_system_wakeup(); =20 - return IRQ_HANDLED; + return ret; } =20 static int imx_mu_send_data(struct mbox_chan *chan, void *data) @@ -629,7 +655,8 @@ static int imx_mu_startup(struct mbox_chan *chan) if (!(priv->dcfg->type & IMX_MU_V2_IRQ)) irq_flag |=3D IRQF_SHARED; =20 - ret =3D request_irq(priv->irq[cp->type], imx_mu_isr, irq_flag, cp->irq_de= sc, chan); + ret =3D request_threaded_irq(priv->irq[cp->type], imx_mu_isr, imx_mu_isr_= th, + irq_flag, cp->irq_desc, chan); if (ret) { dev_err(priv->dev, "Unable to acquire IRQ %d\n", priv->irq[cp->type]); return ret; --=20 2.53.0 From nobody Mon Jun 8 07:30:43 2026 Received: from galois.linutronix.de (Galois.linutronix.de [193.142.43.55]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 400A0480DC6; Wed, 3 Jun 2026 13:05:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=193.142.43.55 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780491925; cv=none; b=Q/j9Nwxde8+YT/772l+mRtraQDRTxAw/J7ZbfrNkbmSbXZeRv7bKFFmUTdWJ5wFhgdmruUlhT2JzBaZmBJNzX3ovcArQAjCV3W7Ozv/MQe4Slqb6JrbyEN1VsOgiy2RqfZsQNtXycMZQaQDpkmft207q3J0IrRBWYM11tY3H9mI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780491925; c=relaxed/simple; bh=BOl2wsCu0ZNuK8rXYXZLez2+XB4yp6fD/1H27+cUDyc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=OmD2fcp66Za9DVARPLeSjnMk7sScwMRi01wJ1QTCMfW8TPlNUKj3R/TKQXv3Sm5BFNtHpsmjnPx60xuo9qC4fb2OqlFZHo7+PseHr7w4JLcwZGrfDDhrGHOY1Aaq0YdlG3Qw/2RdccVkMl8XXzHEcvvvztpzzkaODd0R88T7mzs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de; spf=pass smtp.mailfrom=linutronix.de; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=FGIOtHH+; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=rW6SgbHd; arc=none smtp.client-ip=193.142.43.55 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linutronix.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="FGIOtHH+"; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="rW6SgbHd" From: Sebastian Andrzej Siewior DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1780491921; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=SxginL0VzWoH90KNXApA+NxBaJrkO5Ug7aBj3PGDxKY=; b=FGIOtHH+62eyiSPpX1ym5EYBO9137G89yAPMrXPVLhD3z5HMhbxxE5KQtAJF/uCpyxO5Vf fc/w0YzLSrrO+BoP8631TRTB7Vuii8eSkczhdQ/n2BtAR4k0ryCNd5TIow9RFx/+AwfOs2 HkDNyHN5zU/ZPO4ELyTiqyngLf8L2zqOIYxkLcpPX+gwv60wxRlK7/IVnwV3eWmL9+xVAM zy6rhORzJJDvEHtgZt8Z4PrBLcHyboHGhUYJuP7stx8ssK3DzkSZycifJInKJifFClRdD8 LVH5++gcTdlCRf3hOPBIR/PDlut1o7FX9xnVwLvsu7Ui+SsFrvN4acIBCRrR0A== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1780491921; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=SxginL0VzWoH90KNXApA+NxBaJrkO5Ug7aBj3PGDxKY=; b=rW6SgbHdNWEVjfOlEyKRS9oveGSHkYhxj7WNjLXocZY+P6Hg7LdIssf2Y2y8GyUSZbKXMB BN/6m9UtaQynhODQ== To: linux-kernel@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-remoteproc@vger.kernel.org, linux-rt-devel@lists.linux.dev Cc: Sebastian Andrzej Siewior , Bjorn Andersson , Clark Williams , Fabio Estevam , Frank Li , Jassi Brar , Mathieu Poirier , Pengutronix Kernel Team , Sascha Hauer , Steven Rostedt Subject: [PATCH v2 6/9] mailbox: imx: Move the RX part of the mailbox into the threaded handler Date: Wed, 3 Jun 2026 15:05:09 +0200 Message-ID: <20260603-imx_mbox_rproc-v2-6-a0059dc3b69a@linutronix.de> In-Reply-To: <20260603-imx_mbox_rproc-v2-0-a0059dc3b69a@linutronix.de> References: <20260603-imx_mbox_rproc-v2-0-a0059dc3b69a@linutronix.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Move RX callback handling into the threaded handler. This is similar to the TX side except that we explicitly mask the source interrupt in the primary handler and unmask it in the threaded handler again after success. This was done automatically in the TX part. The masking/ unmasking can be removed from imx_mu_specific_rx() since it already happens in the primary/ threaded handler before invoking the channel specific callback. Move RX channel handling into threaded handler. Signed-off-by: Sebastian Andrzej Siewior Reviewed-by: Peng Fan --- drivers/mailbox/imx-mailbox.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/drivers/mailbox/imx-mailbox.c b/drivers/mailbox/imx-mailbox.c index 006aa76b74b62..6fe202593592f 100644 --- a/drivers/mailbox/imx-mailbox.c +++ b/drivers/mailbox/imx-mailbox.c @@ -381,7 +381,6 @@ static int imx_mu_specific_rx(struct imx_mu_priv *priv,= struct imx_mu_con_priv * =20 data =3D (u32 *)priv->msg; =20 - imx_mu_xcr_rmw(priv, IMX_MU_RCR, 0, IMX_MU_xCR_RIEn(priv->dcfg->type, cp-= >idx)); *data++ =3D imx_mu_read(priv, priv->dcfg->xRR); =20 if (priv->dcfg->type & IMX_MU_V2_S4) { @@ -408,7 +407,6 @@ static int imx_mu_specific_rx(struct imx_mu_priv *priv,= struct imx_mu_con_priv * *data++ =3D imx_mu_read(priv, priv->dcfg->xRR + (i % num_rr) * 4); } =20 - imx_mu_xcr_set_act(priv, cp, IMX_MU_RCR, IMX_MU_xCR_RIEn(priv->dcfg->type= , cp->idx)); mbox_chan_received_data(cp->chan, (void *)priv->msg); =20 return 0; @@ -555,6 +553,12 @@ static irqreturn_t imx_mu_isr_th(int irq, void *p) mbox_chan_txdone(chan, 0); break; =20 + case IMX_MU_TYPE_RX: + cp->pending =3D false; + if (!priv->dcfg->rx(priv, cp)) + imx_mu_xcr_set_act(priv, cp, IMX_MU_RCR, IMX_MU_xCR_RIEn(priv->dcfg->ty= pe, cp->idx)); + break; + default: dev_warn_ratelimited(priv->dev, "Unhandled channel type %d\n", cp->type); @@ -608,7 +612,9 @@ static irqreturn_t imx_mu_isr(int irq, void *p) ret =3D IRQ_WAKE_THREAD; } else if ((val =3D=3D IMX_MU_xSR_RFn(priv->dcfg->type, cp->idx)) && (cp->type =3D=3D IMX_MU_TYPE_RX)) { - priv->dcfg->rx(priv, cp); + cp->pending =3D true; + imx_mu_xcr_rmw(priv, IMX_MU_RCR, 0, IMX_MU_xCR_RIEn(priv->dcfg->type, cp= ->idx)); + ret =3D IRQ_WAKE_THREAD; } else if ((val =3D=3D IMX_MU_xSR_GIPn(priv->dcfg->type, cp->idx)) && (cp->type =3D=3D IMX_MU_TYPE_RXDB)) { priv->dcfg->rxdb(priv, cp); --=20 2.53.0 From nobody Mon Jun 8 07:30:43 2026 Received: from galois.linutronix.de (Galois.linutronix.de [193.142.43.55]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 085A848124B; Wed, 3 Jun 2026 13:05:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=193.142.43.55 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780491926; cv=none; b=RGv5MhZalfEjTjt5Y4NZjPP4i+cGKYCZ03vzqbNMcQD87MJpPowZzlkkxxAvcy6ie7TG0680eihbDASSXSMeMCcz+YBME9d+f/l2R+At4qFPIVj3ix/SMSdlG9qKWE9fNfzrbRJHGVw5BBYZArs7qY/+qQ+ruJtcJef5L7gaecc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780491926; c=relaxed/simple; bh=I3XlPjVeGaUl7tcqyQ8JubRrz/ZfqITkqWXd9ykonvs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=X9JS3i8mpwSG7GzQZ2v2SwbnpElAjYzLUwS/j3Fokuj8R8IucazsWlBioJ4fP0+jr1GlFEE8o8gkDL3IXO3s00t7U9oAmekitTrbMZFkMJyE8r1bNi7Hi1FhlQqFEPkGunFjVZIFgGuRjGRFPtC/0yoNVlkbQtcRkCAbzjV1sRA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de; spf=pass smtp.mailfrom=linutronix.de; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=wI2jUlzb; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=PtDBb86+; arc=none smtp.client-ip=193.142.43.55 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linutronix.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="wI2jUlzb"; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="PtDBb86+" From: Sebastian Andrzej Siewior DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1780491921; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=wVrQgH307p2rx62VD32KF6aFAEvmCWdX4MSBe18SAfM=; b=wI2jUlzb8ILVRCLjA2FboDh8h3YpRarNz0Kd9mme46WiQFy39clzl6/RhVJLY2FiTXUalx ZDyhXisKCQZnIA0mumgW5DQu/fvCM82tna5U7p47JkUfdeJbNp46asqGQcbzbGkdHzm6ZB BisMSSOQHC6rx3K9ghktMRmuyxhdrQB2DohacbR2T0GTotFyO/sAq/QYntfQrHHG5CPLhl JAMkIE7g39M5iO3o4Y3bAses158jubYVVsEhdWVkwHewZolu38DKaF8hTJSrLv1o8slABf 9VeBB/4p/7zMzB8hDCwM3rRgmrY8rmqZjWKUO6M7zeNpmP6Exh9y6ILlZCvVpg== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1780491921; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=wVrQgH307p2rx62VD32KF6aFAEvmCWdX4MSBe18SAfM=; b=PtDBb86+MufClB2Givo/ph5u3yuVMJSdhbUdE+JC6gje8EJ1jwcGPgzBd29HZoa2H3R6VX X4HGzmoN9uILQ6Ag== To: linux-kernel@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-remoteproc@vger.kernel.org, linux-rt-devel@lists.linux.dev Cc: Sebastian Andrzej Siewior , Bjorn Andersson , Clark Williams , Fabio Estevam , Frank Li , Jassi Brar , Mathieu Poirier , Pengutronix Kernel Team , Sascha Hauer , Steven Rostedt Subject: [PATCH v2 7/9] mailbox: imx: Move the RXDB part of the mailbox into the threaded handler Date: Wed, 3 Jun 2026 15:05:10 +0200 Message-ID: <20260603-imx_mbox_rproc-v2-7-a0059dc3b69a@linutronix.de> In-Reply-To: <20260603-imx_mbox_rproc-v2-0-a0059dc3b69a@linutronix.de> References: <20260603-imx_mbox_rproc-v2-0-a0059dc3b69a@linutronix.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Move RXDB callback handling into the threaded handler. This similar to the RX side except that we unmask it unconditionally in threaded handler. Move RXDB callback handling into the threaded handler. Signed-off-by: Sebastian Andrzej Siewior Reviewed-by: Peng Fan --- drivers/mailbox/imx-mailbox.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/drivers/mailbox/imx-mailbox.c b/drivers/mailbox/imx-mailbox.c index 6fe202593592f..f0a14449652f1 100644 --- a/drivers/mailbox/imx-mailbox.c +++ b/drivers/mailbox/imx-mailbox.c @@ -559,6 +559,12 @@ static irqreturn_t imx_mu_isr_th(int irq, void *p) imx_mu_xcr_set_act(priv, cp, IMX_MU_RCR, IMX_MU_xCR_RIEn(priv->dcfg->ty= pe, cp->idx)); break; =20 + case IMX_MU_TYPE_RXDB: + cp->pending =3D false; + priv->dcfg->rxdb(priv, cp); + imx_mu_xcr_set_act(priv, cp, IMX_MU_GIER, IMX_MU_xCR_GIEn(priv->dcfg->ty= pe, cp->idx)); + break; + default: dev_warn_ratelimited(priv->dev, "Unhandled channel type %d\n", cp->type); @@ -617,7 +623,9 @@ static irqreturn_t imx_mu_isr(int irq, void *p) ret =3D IRQ_WAKE_THREAD; } else if ((val =3D=3D IMX_MU_xSR_GIPn(priv->dcfg->type, cp->idx)) && (cp->type =3D=3D IMX_MU_TYPE_RXDB)) { - priv->dcfg->rxdb(priv, cp); + cp->pending =3D true; + imx_mu_xcr_rmw(priv, IMX_MU_GIER, 0, IMX_MU_xCR_GIEn(priv->dcfg->type, c= p->idx)); + ret =3D IRQ_WAKE_THREAD; } else { dev_warn_ratelimited(priv->dev, "Not handled interrupt\n"); return IRQ_NONE; --=20 2.53.0 From nobody Mon Jun 8 07:30:43 2026 Received: from galois.linutronix.de (Galois.linutronix.de [193.142.43.55]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EF2A0481248; Wed, 3 Jun 2026 13:05:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=193.142.43.55 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780491926; cv=none; b=LHHyf6eKNIWXGRst5Q4PwyvWp5HmGo90hqT0sg9Mei2IH3yd6zwF0FO9SJYkSc5ZhRLHZc9hAdUlWtzny6MCu7V7j98yxe+NuJbCDqSvTZAN36Eza8meN8NY1QOxeT8wiQ+kIuDhGc1FJhg58hrbEuF8Rv+wj0izHxTMpyt0e3E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780491926; c=relaxed/simple; bh=wb8mby7OqMqwNUsM4e621APpRoR4X04lMeOtvgCpZa8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=X7DVSUXqgJufPvwvNtjUhxG/QRTuPBLhXpH/IpYdemZIlStKeg5cIphpSVJfP+yatYAgoC8CDMxxE4TUvfv2q38tFYmp+0C3o0zrMm2nUO97i2MyFtepuWpWkdSO5NtDHd2Nrc1PQgMGTR6nXptbYNrR7nctgLlADbdtZlBQLck= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de; spf=pass smtp.mailfrom=linutronix.de; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=zWM5R/8f; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=hv5eVAbn; arc=none smtp.client-ip=193.142.43.55 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linutronix.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="zWM5R/8f"; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="hv5eVAbn" From: Sebastian Andrzej Siewior DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1780491922; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=hUrx0WQ2t1MaZcUsq14gpCwZ9IGi87ebAm9MbfGcKCk=; b=zWM5R/8fIknuyuyYycP5CBUsNVSWf/DrkdJ2KBUl1FRwA6AxWz764VLUnOxdVMuMQ2XEv6 jUH8KdSKaQ0IjX6LBPB7eEBbQjOrWRuBuiwaB/PoL00Tp6uLJunFMkcV1Ih74NJ90BEW2w sE2FcbKcBdwuS6+N3XIJqVeNOzGrdKagVkv1k9vhxwo89fZO2U97AmVSU3+s6s+z90KFVq sBMI5Iw2whWMnOfhuzATmLCMvwHT9/T3pfRSSEiUWAjcgBhSEuGiqUm6Ky3bNK7oHNQ6Mz 98V/GG2fFOGKicVEB+NVmoexvG2Bny5J/X7ZXZOpJWsjGkBWKitSxYtE/1+fgg== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1780491922; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=hUrx0WQ2t1MaZcUsq14gpCwZ9IGi87ebAm9MbfGcKCk=; b=hv5eVAbngf3l5mQkTK0BjMSUJ1qdqwZ8o/r7sk3qO/SewV8uZ2kMb43s1dxk/gEl2Pc5oj r0qcgZivq2+RXmAA== To: linux-kernel@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-remoteproc@vger.kernel.org, linux-rt-devel@lists.linux.dev Cc: Sebastian Andrzej Siewior , Bjorn Andersson , Clark Williams , Fabio Estevam , Frank Li , Jassi Brar , Mathieu Poirier , Pengutronix Kernel Team , Sascha Hauer , Steven Rostedt Subject: [PATCH v2 8/9] mailbox: imx: Don't force-thread the primary handler Date: Wed, 3 Jun 2026 15:05:11 +0200 Message-ID: <20260603-imx_mbox_rproc-v2-8-a0059dc3b69a@linutronix.de> In-Reply-To: <20260603-imx_mbox_rproc-v2-0-a0059dc3b69a@linutronix.de> References: <20260603-imx_mbox_rproc-v2-0-a0059dc3b69a@linutronix.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable The primary interrupt handler (imx_mu_isr()) no longer invokes any callbacks it only masks the interrupt source and returns. In a forced-threaded environment the IRQ-core will force-thread the primary handler which can be avoided. The primary handler uses a spinlock_t to protect the RMW operation in imx_mu_xcr_rmw() - nothing that may introduce long latencies. The lock can be turned into a raw_spinlock_t and then the primary handler can run in hardirq context even on PREEMPT_RT skipping one thread. Make struct imx_mu_priv::xcr_lock a raw_spinlock_t and skip force-threading the primrary handler by marking it IRQF_NO_THREAD. Signed-off-by: Sebastian Andrzej Siewior Reviewed-by: Peng Fan --- drivers/mailbox/imx-mailbox.c | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/drivers/mailbox/imx-mailbox.c b/drivers/mailbox/imx-mailbox.c index f0a14449652f1..f3de47908e00f 100644 --- a/drivers/mailbox/imx-mailbox.c +++ b/drivers/mailbox/imx-mailbox.c @@ -88,7 +88,7 @@ struct imx_mu_priv { struct device *dev; void __iomem *base; void *msg; - spinlock_t xcr_lock; /* control register lock */ + raw_spinlock_t xcr_lock; /* control register lock */ =20 struct mbox_controller mbox; struct mbox_chan mbox_chans[IMX_MU_CHANS]; @@ -208,15 +208,14 @@ static int imx_mu_rx_waiting_read(struct imx_mu_priv = *priv, u32 *val, u32 idx) =20 static u32 imx_mu_xcr_rmw(struct imx_mu_priv *priv, enum imx_mu_xcr type, = u32 set, u32 clr) { - unsigned long flags; u32 val; =20 - spin_lock_irqsave(&priv->xcr_lock, flags); + guard(raw_spinlock_irqsave)(&priv->xcr_lock); + val =3D imx_mu_read(priv, priv->dcfg->xCR[type]); val &=3D ~clr; val |=3D set; imx_mu_write(priv, val, priv->dcfg->xCR[type]); - spin_unlock_irqrestore(&priv->xcr_lock, flags); =20 return val; } @@ -224,31 +223,27 @@ static u32 imx_mu_xcr_rmw(struct imx_mu_priv *priv, e= num imx_mu_xcr type, u32 se static void imx_mu_xcr_clr_shut(struct imx_mu_priv *priv, struct imx_mu_co= n_priv *cp, enum imx_mu_xcr type, u32 clr) { - unsigned long flags; u32 val; =20 - spin_lock_irqsave(&priv->xcr_lock, flags); + guard(raw_spinlock_irqsave)(&priv->xcr_lock); cp->shutdown =3D true; =20 val =3D imx_mu_read(priv, priv->dcfg->xCR[type]); val &=3D ~clr; imx_mu_write(priv, val, priv->dcfg->xCR[type]); - spin_unlock_irqrestore(&priv->xcr_lock, flags); } =20 static void imx_mu_xcr_set_act(struct imx_mu_priv *priv, struct imx_mu_con= _priv *cp, enum imx_mu_xcr type, u32 set) { - unsigned long flags; u32 val; =20 - spin_lock_irqsave(&priv->xcr_lock, flags); + guard(raw_spinlock_irqsave)(&priv->xcr_lock); if (!cp->shutdown) { val =3D imx_mu_read(priv, priv->dcfg->xCR[type]); val |=3D set; imx_mu_write(priv, val, priv->dcfg->xCR[type]); } - spin_unlock_irqrestore(&priv->xcr_lock, flags); } =20 static int imx_mu_generic_tx(struct imx_mu_priv *priv, @@ -649,7 +644,7 @@ static int imx_mu_startup(struct mbox_chan *chan) { struct imx_mu_priv *priv =3D to_imx_mu_priv(chan->mbox); struct imx_mu_con_priv *cp =3D chan->con_priv; - unsigned long irq_flag =3D 0; + unsigned long irq_flag =3D IRQF_NO_THREAD; int ret; =20 pm_runtime_get_sync(priv->dev); @@ -997,7 +992,7 @@ static int imx_mu_probe(struct platform_device *pdev) goto disable_clk; } =20 - spin_lock_init(&priv->xcr_lock); + raw_spin_lock_init(&priv->xcr_lock); =20 priv->mbox.dev =3D dev; priv->mbox.ops =3D &imx_mu_ops; --=20 2.53.0 From nobody Mon Jun 8 07:30:43 2026 Received: from galois.linutronix.de (Galois.linutronix.de [193.142.43.55]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 33593481253; Wed, 3 Jun 2026 13:05:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=193.142.43.55 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780491926; cv=none; b=tAS0c7azZ195pELnHOnNsrqYOGHkeH4Wd1ZRPUKl8p/V0hf8kwIAWbtQYJU53l7XudjZMj+ytVeYsfbEYdE9U1TwKwz90kGGgFvZ7YqAsqMYqcOQ+6ix7JQiA2gUBdmjTTH6Qo1xxza0TczBkmo+qMm/sBWn4PUwL20ibAsW4AE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780491926; c=relaxed/simple; bh=rB2UKiyDcM7IWJbPPVp1cw1OH36OaEEat8ZM5+jzFDo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=H2vsuJH6NyC6M9jGAtjqs5rOiawnIzxVxMepggscWJJxubjbil8Yn/hmb2Rwd3cPM2eEKlqnlRPaXyrTcM2CQRajC2y7VB76siKq6CNigsW6/8GuzyZZoKKjoC1WzT2MdxhdlnMBt3tMkG1xheolrovFMgaa9Mj2t7VJNrD8Tp8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de; spf=pass smtp.mailfrom=linutronix.de; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=VIphKkJH; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=FdaI/vTP; arc=none smtp.client-ip=193.142.43.55 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linutronix.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="VIphKkJH"; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="FdaI/vTP" From: Sebastian Andrzej Siewior DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1780491922; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=rg4CWBKqcg/43kRp7XELQX8SwIZj03OaAVdBvFZ3LCA=; b=VIphKkJHQCRIH+HaolCSm0qkoMV/vpBsMu8KbZcQuJBE9ua8VZe3rFQe7TmdHQDqEkZSSH CTTs9UBef/qc/hRIoT6vM+IR+fvOtHX1TNS6W0qeFNHWm658l4+VXvy+MuaVH52OBYdGad 9c38/jUq+6DmHfRhQcrMfaGdp3dboeQ9DP7xgj7JsIf4CbvBW4d+fTimte/2SIoj2m2uQT YJH78KEElIFg9wbgu2bcHoEXm6Vp1OLcJXi11qeS1fWK8PIHahdNPOIvDY1PNU/TaKXCVK 5h+Ou0sFPjakAEi7AX8vc8yyQowYrMkQWnwYTXxULdm0ZAWjI40juG/UAhx8dw== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1780491922; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=rg4CWBKqcg/43kRp7XELQX8SwIZj03OaAVdBvFZ3LCA=; b=FdaI/vTPqi+vjz8LzpQeIj7r/QhPZwNHZFdSc8cIISer7KnLruWkdgESv2k6qaH28nQJ0A o12XgVpfQZFZPvDw== To: linux-kernel@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-remoteproc@vger.kernel.org, linux-rt-devel@lists.linux.dev Cc: Sebastian Andrzej Siewior , Bjorn Andersson , Clark Williams , Fabio Estevam , Frank Li , Jassi Brar , Mathieu Poirier , Pengutronix Kernel Team , Sascha Hauer , Steven Rostedt Subject: [PATCH v2 9/9] remoteproc: imx_rproc: Invoke the callback directly Date: Wed, 3 Jun 2026 15:05:12 +0200 Message-ID: <20260603-imx_mbox_rproc-v2-9-a0059dc3b69a@linutronix.de> In-Reply-To: <20260603-imx_mbox_rproc-v2-0-a0059dc3b69a@linutronix.de> References: <20260603-imx_mbox_rproc-v2-0-a0059dc3b69a@linutronix.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable The imx-mailbox driver moved the callback invocation into the threaded IRQ handler. This means the callback is invoked in preemptible context and there is no need to schedule the kworker for the imx_rproc_notified_idr_cb() invocation. This was tested with the rpmsg-tty driver on imx93. Remove the workqueue handling and invoke the imx_rproc_notified_idr_cb() callback directly. Signed-off-by: Sebastian Andrzej Siewior Reviewed-by: Peng Fan --- drivers/remoteproc/imx_rproc.c | 33 +-------------------------------- 1 file changed, 1 insertion(+), 32 deletions(-) diff --git a/drivers/remoteproc/imx_rproc.c b/drivers/remoteproc/imx_rproc.c index 0dd80e688b0ea..c97bc1c401655 100644 --- a/drivers/remoteproc/imx_rproc.c +++ b/drivers/remoteproc/imx_rproc.c @@ -24,7 +24,6 @@ #include #include #include -#include =20 #include "imx_rproc.h" #include "remoteproc_internal.h" @@ -115,8 +114,6 @@ struct imx_rproc { struct mbox_client cl; struct mbox_chan *tx_ch; struct mbox_chan *rx_ch; - struct work_struct rproc_work; - struct workqueue_struct *workqueue; void __iomem *rsc_table; struct imx_sc_ipc *ipc_handle; struct notifier_block rproc_nb; @@ -835,21 +832,11 @@ static int imx_rproc_notified_idr_cb(int id, void *pt= r, void *data) return 0; } =20 -static void imx_rproc_vq_work(struct work_struct *work) -{ - struct imx_rproc *priv =3D container_of(work, struct imx_rproc, - rproc_work); - struct rproc *rproc =3D priv->rproc; - - idr_for_each(&rproc->notifyids, imx_rproc_notified_idr_cb, rproc); -} - static void imx_rproc_rx_callback(struct mbox_client *cl, void *msg) { struct rproc *rproc =3D dev_get_drvdata(cl->dev); - struct imx_rproc *priv =3D rproc->priv; =20 - queue_work(priv->workqueue, &priv->rproc_work); + idr_for_each(&rproc->notifyids, imx_rproc_notified_idr_cb, rproc); } =20 static int imx_rproc_xtr_mbox_init(struct rproc *rproc, bool tx_block) @@ -1214,13 +1201,6 @@ static int imx_rproc_sys_off_handler(struct sys_off_= data *data) return NOTIFY_DONE; } =20 -static void imx_rproc_destroy_workqueue(void *data) -{ - struct workqueue_struct *workqueue =3D data; - - destroy_workqueue(workqueue); -} - static int imx_rproc_probe(struct platform_device *pdev) { struct device *dev =3D &pdev->dev; @@ -1249,17 +1229,6 @@ static int imx_rproc_probe(struct platform_device *p= dev) priv->ops =3D dcfg->ops; =20 dev_set_drvdata(dev, rproc); - priv->workqueue =3D create_workqueue(dev_name(dev)); - if (!priv->workqueue) { - dev_err(dev, "cannot create workqueue\n"); - return -ENOMEM; - } - - ret =3D devm_add_action_or_reset(dev, imx_rproc_destroy_workqueue, priv->= workqueue); - if (ret) - return dev_err_probe(dev, ret, "Failed to add devm destroy workqueue act= ion\n"); - - INIT_WORK(&priv->rproc_work, imx_rproc_vq_work); =20 ret =3D imx_rproc_xtr_mbox_init(rproc, true); if (ret) --=20 2.53.0