From nobody Thu Oct 2 19:27:59 2025 Received: from metis.whiteo.stw.pengutronix.de (metis.whiteo.stw.pengutronix.de [185.203.201.7]) (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 5F4352D1319 for ; Thu, 11 Sep 2025 21:56:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.203.201.7 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757627817; cv=none; b=RapfCZmvAgTCu5arbFyGJxvx7TCUyH4nyURueMkvrFSYj6bmPX2ZP3bzbRqNtExpVVvXJjd8zvLk30yXyAxHtd7xaAJ5aTx0HxpAUewaHZ8WKSaygo61Aal63O2LuYx8rPB8GUMG6ciwiTNMi6q6JUz+Ihi83DEqf6S2PSqcGEU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757627817; c=relaxed/simple; bh=9zF4mej1ibTbrnImtNt9POEB2AmOALM3WqplmmIKV4Y=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=SseBMyhOuZTzmPF0caia3XWJ14c4s94m2OYU8xkwBc92ZarjPD4PQt5XkVbwlYcJZKTlfWwJ4EkLQWB29qciyIL55JD01JuB4UpwRSmJILL2CK2Do95a4DxbT0jEem/YOEP5H2adLbGtsYQzTl1x2Z2eTU4HCaQPZvLIPCEcmZM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de; spf=pass smtp.mailfrom=pengutronix.de; arc=none smtp.client-ip=185.203.201.7 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pengutronix.de Received: from dude02.red.stw.pengutronix.de ([2a0a:edc0:0:1101:1d::28]) by metis.whiteo.stw.pengutronix.de with esmtp (Exim 4.92) (envelope-from ) id 1uwpHe-0004g5-0q; Thu, 11 Sep 2025 23:56:50 +0200 From: Marco Felsch Date: Thu, 11 Sep 2025 23:56:42 +0200 Subject: [PATCH v2 01/10] dmaengine: imx-sdma: fix missing of_dma_controller_free() 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 Message-Id: <20250911-v6-16-topic-sdma-v2-1-d315f56343b5@pengutronix.de> References: <20250911-v6-16-topic-sdma-v2-0-d315f56343b5@pengutronix.de> In-Reply-To: <20250911-v6-16-topic-sdma-v2-0-d315f56343b5@pengutronix.de> To: Vinod Koul , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Jiada Wang Cc: dmaengine@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Marco Felsch X-Mailer: b4 0.14.2 X-SA-Exim-Connect-IP: 2a0a:edc0:0:1101:1d::28 X-SA-Exim-Mail-From: m.felsch@pengutronix.de X-SA-Exim-Scanned: No (on metis.whiteo.stw.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org Add the missing of_dma_controller_free() to free the resources allocated via of_dma_controller_register() during probe(). The missing free was introduced long time ago by commit 23e118113782 ("dma: imx-sdma: use module_platform_driver for SDMA driver") while adding a proper .remove() implementation. Use the driver remove() callback to make it possible to backport this commit. Fixes: 23e118113782 ("dma: imx-sdma: use module_platform_driver for SDMA dr= iver") Signed-off-by: Marco Felsch Reviewed-by: Frank Li Reviewed-by: Peng Fan --- drivers/dma/imx-sdma.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/dma/imx-sdma.c b/drivers/dma/imx-sdma.c index 02a85d6f1bea2df7d355858094c0c0b0bd07148e..3ecb917214b1268b148a29df697= b780bc462afa4 100644 --- a/drivers/dma/imx-sdma.c +++ b/drivers/dma/imx-sdma.c @@ -2418,6 +2418,7 @@ static void sdma_remove(struct platform_device *pdev) struct sdma_engine *sdma =3D platform_get_drvdata(pdev); int i; =20 + of_dma_controller_free(sdma->dev->of_node); devm_free_irq(&pdev->dev, sdma->irq, sdma); dma_async_device_unregister(&sdma->dma_device); kfree(sdma->script_addrs); --=20 2.47.3 From nobody Thu Oct 2 19:27:59 2025 Received: from metis.whiteo.stw.pengutronix.de (metis.whiteo.stw.pengutronix.de [185.203.201.7]) (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 AB7172DEA97 for ; Thu, 11 Sep 2025 21:56:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.203.201.7 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757627819; cv=none; b=GXQk/te2F//59UwJuKcJpKhGCS4AWdHgf4jAJxr1WF7R7WxSz+iaO5cQUBn76N7Ln5UKT+umgFMScYcBuLoWCLZVKSV5Zkj+OX6q6dkcW92AoGBo9XauKLbzzZAHxmI5LfVzjhyMNN7ew2SiqW/yVYe9iZ1X8tVRxiZOGm691Jg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757627819; c=relaxed/simple; bh=9XMlvzNYoZzkzFAt5rhIauateBrCJZ5ozp+/0Knxpes=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=i0VYR0nEZB0PSrwqpyzopedxox9TeAD7erRYNvdzMZ1pA/FqIpj3qGD0H2vfbC1jbF81hSnj98IwAQ7t0YiyREjogJgnDcR+lXp/0Dm49FHvtwVw0S5Vb62o3OuEsVYGqgjDP8uUcveeb9afkWQ/rgyJiw7Acn47PrzXUliRL0w= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de; spf=pass smtp.mailfrom=pengutronix.de; arc=none smtp.client-ip=185.203.201.7 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pengutronix.de Received: from dude02.red.stw.pengutronix.de ([2a0a:edc0:0:1101:1d::28]) by metis.whiteo.stw.pengutronix.de with esmtp (Exim 4.92) (envelope-from ) id 1uwpHe-0004g5-2J; Thu, 11 Sep 2025 23:56:50 +0200 From: Marco Felsch Date: Thu, 11 Sep 2025 23:56:43 +0200 Subject: [PATCH v2 02/10] dmaengine: imx-sdma: fix spba-bus handling for i.MX8M 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 Message-Id: <20250911-v6-16-topic-sdma-v2-2-d315f56343b5@pengutronix.de> References: <20250911-v6-16-topic-sdma-v2-0-d315f56343b5@pengutronix.de> In-Reply-To: <20250911-v6-16-topic-sdma-v2-0-d315f56343b5@pengutronix.de> To: Vinod Koul , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Jiada Wang Cc: dmaengine@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Marco Felsch X-Mailer: b4 0.14.2 X-SA-Exim-Connect-IP: 2a0a:edc0:0:1101:1d::28 X-SA-Exim-Mail-From: m.felsch@pengutronix.de X-SA-Exim-Scanned: No (on metis.whiteo.stw.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org Starting with i.MX8M* devices there are multiple spba-busses so we can't just search the whole DT for the first spba-bus match and take it. Instead we need to check for each device to which bus it belongs and setup the spba_{start,end}_addr accordingly per sdma_channel. While on it, don't ignore errors from of_address_to_resource() if they are valid. Signed-off-by: Marco Felsch --- drivers/dma/imx-sdma.c | 58 ++++++++++++++++++++++++++++++++++------------= ---- 1 file changed, 40 insertions(+), 18 deletions(-) diff --git a/drivers/dma/imx-sdma.c b/drivers/dma/imx-sdma.c index 3ecb917214b1268b148a29df697b780bc462afa4..56daaeb7df03986850c9c74273d= 0816700581dc0 100644 --- a/drivers/dma/imx-sdma.c +++ b/drivers/dma/imx-sdma.c @@ -429,6 +429,8 @@ struct sdma_desc { * @event_mask: event mask used in p_2_p script * @watermark_level: value for gReg[7], some script will extend it from * basic watermark such as p_2_p + * @spba_start_addr: SDMA controller SPBA bus start address + * @spba_end_addr: SDMA controller SPBA bus end address * @shp_addr: value for gReg[6] * @per_addr: value for gReg[2] * @status: status of dma channel @@ -461,6 +463,8 @@ struct sdma_channel { dma_addr_t per_address, per_address2; unsigned long event_mask[2]; unsigned long watermark_level; + u32 spba_start_addr; + u32 spba_end_addr; u32 shp_addr, per_addr; enum dma_status status; struct imx_dma_data data; @@ -534,8 +538,6 @@ struct sdma_engine { u32 script_number; struct sdma_script_start_addrs *script_addrs; const struct sdma_driver_data *drvdata; - u32 spba_start_addr; - u32 spba_end_addr; unsigned int irq; dma_addr_t bd0_phys; struct sdma_buffer_descriptor *bd0; @@ -1236,8 +1238,6 @@ static void sdma_channel_synchronize(struct dma_chan = *chan) =20 static void sdma_set_watermarklevel_for_p2p(struct sdma_channel *sdmac) { - struct sdma_engine *sdma =3D sdmac->sdma; - int lwml =3D sdmac->watermark_level & SDMA_WATERMARK_LEVEL_LWML; int hwml =3D (sdmac->watermark_level & SDMA_WATERMARK_LEVEL_HWML) >> 16; =20 @@ -1263,12 +1263,12 @@ static void sdma_set_watermarklevel_for_p2p(struct = sdma_channel *sdmac) swap(sdmac->event_mask[0], sdmac->event_mask[1]); } =20 - if (sdmac->per_address2 >=3D sdma->spba_start_addr && - sdmac->per_address2 <=3D sdma->spba_end_addr) + if (sdmac->per_address2 >=3D sdmac->spba_start_addr && + sdmac->per_address2 <=3D sdmac->spba_end_addr) sdmac->watermark_level |=3D SDMA_WATERMARK_LEVEL_SP; =20 - if (sdmac->per_address >=3D sdma->spba_start_addr && - sdmac->per_address <=3D sdma->spba_end_addr) + if (sdmac->per_address >=3D sdmac->spba_start_addr && + sdmac->per_address <=3D sdmac->spba_end_addr) sdmac->watermark_level |=3D SDMA_WATERMARK_LEVEL_DP; =20 sdmac->watermark_level |=3D SDMA_WATERMARK_LEVEL_CONT; @@ -1447,6 +1447,31 @@ static void sdma_desc_free(struct virt_dma_desc *vd) kfree(desc); } =20 +static int sdma_config_spba_slave(struct dma_chan *chan) +{ + struct sdma_channel *sdmac =3D to_sdma_chan(chan); + struct device_node *spba_bus; + struct resource spba_res; + int ret; + + spba_bus =3D of_get_parent(chan->slave->of_node); + /* Device doesn't belong to the spba-bus */ + if (!of_device_is_compatible(spba_bus, "fsl,spba-bus")) + return 0; + + ret =3D of_address_to_resource(spba_bus, 0, &spba_res); + of_node_put(spba_bus); + if (ret) { + dev_err(sdmac->sdma->dev, "Failed to get spba-bus resources\n"); + return -EINVAL; + } + + sdmac->spba_start_addr =3D spba_res.start; + sdmac->spba_end_addr =3D spba_res.end; + + return 0; +} + static int sdma_alloc_chan_resources(struct dma_chan *chan) { struct sdma_channel *sdmac =3D to_sdma_chan(chan); @@ -1527,6 +1552,8 @@ static void sdma_free_chan_resources(struct dma_chan = *chan) =20 sdmac->event_id0 =3D 0; sdmac->event_id1 =3D 0; + sdmac->spba_start_addr =3D 0; + sdmac->spba_end_addr =3D 0; =20 sdma_set_channel_priority(sdmac, 0); =20 @@ -1837,6 +1864,7 @@ static int sdma_config(struct dma_chan *chan, { struct sdma_channel *sdmac =3D to_sdma_chan(chan); struct sdma_engine *sdma =3D sdmac->sdma; + int ret; =20 memcpy(&sdmac->slave_config, dmaengine_cfg, sizeof(*dmaengine_cfg)); =20 @@ -1867,6 +1895,10 @@ static int sdma_config(struct dma_chan *chan, sdma_event_enable(sdmac, sdmac->event_id1); } =20 + ret =3D sdma_config_spba_slave(chan); + if (ret) + return ret; + return 0; } =20 @@ -2235,11 +2267,9 @@ static struct dma_chan *sdma_xlate(struct of_phandle= _args *dma_spec, static int sdma_probe(struct platform_device *pdev) { struct device_node *np =3D pdev->dev.of_node; - struct device_node *spba_bus; const char *fw_name; int ret; int irq; - struct resource spba_res; int i; struct sdma_engine *sdma; s32 *saddr_arr; @@ -2375,14 +2405,6 @@ static int sdma_probe(struct platform_device *pdev) dev_err(&pdev->dev, "failed to register controller\n"); goto err_register; } - - spba_bus =3D of_find_compatible_node(NULL, NULL, "fsl,spba-bus"); - ret =3D of_address_to_resource(spba_bus, 0, &spba_res); - if (!ret) { - sdma->spba_start_addr =3D spba_res.start; - sdma->spba_end_addr =3D spba_res.end; - } - of_node_put(spba_bus); } =20 /* --=20 2.47.3 From nobody Thu Oct 2 19:27:59 2025 Received: from metis.whiteo.stw.pengutronix.de (metis.whiteo.stw.pengutronix.de [185.203.201.7]) (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 975132DECAF for ; Thu, 11 Sep 2025 21:56:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.203.201.7 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757627819; cv=none; b=L9Fw9UfDYvaCoxTW6FrZbrGnJw4jwtlMd8sQ1amXaVfKSx+64lYWMl9VPvIn9ajtY+3E4U5a0gDfXxbtgUHwzvsCCT5crPPnVjYxw9Q6g3hTUtnEues9r3sAqw3rasbwtdcm8ftdXtpuzK2Yh1nFLv2gvyvgyr9WjVd+nt95bc0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757627819; c=relaxed/simple; bh=CsgSMovVoDnzJjuEAN8azFQLgpLqXfWaErM5h/J1l1Q=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=K2xD7kJR9k4aAT2wCAR8Cr9TKAhVtjJ9o+3YShHUx1RIM5IHk6AhyQJin/SEHqDwXEqmcBDHkG+BtrC5MXlsZr22e89AmVP7bSIWE72Y4ovivJ9o0r2dwIVBZFKw9NKLoCsE0rNwqSi6PGWDHDkVOyXZXcNLCOWbOdd/fDV41EM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de; spf=pass smtp.mailfrom=pengutronix.de; arc=none smtp.client-ip=185.203.201.7 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pengutronix.de Received: from dude02.red.stw.pengutronix.de ([2a0a:edc0:0:1101:1d::28]) by metis.whiteo.stw.pengutronix.de with esmtp (Exim 4.92) (envelope-from ) id 1uwpHe-0004g5-3h; Thu, 11 Sep 2025 23:56:50 +0200 From: Marco Felsch Date: Thu, 11 Sep 2025 23:56:44 +0200 Subject: [PATCH v2 03/10] dmaengine: imx-sdma: drop legacy device_node np check 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 Message-Id: <20250911-v6-16-topic-sdma-v2-3-d315f56343b5@pengutronix.de> References: <20250911-v6-16-topic-sdma-v2-0-d315f56343b5@pengutronix.de> In-Reply-To: <20250911-v6-16-topic-sdma-v2-0-d315f56343b5@pengutronix.de> To: Vinod Koul , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Jiada Wang Cc: dmaengine@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Marco Felsch , Frank Li X-Mailer: b4 0.14.2 X-SA-Exim-Connect-IP: 2a0a:edc0:0:1101:1d::28 X-SA-Exim-Mail-From: m.felsch@pengutronix.de X-SA-Exim-Scanned: No (on metis.whiteo.stw.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org The legacy 'if (np)' was required in past where we had pdata and dt. Nowadays the driver binds only to dt platforms. So using a new kernel but still use pdata is not possible, therefore we can drop the legacy 'if' code path. Reviewed-by: Frank Li Signed-off-by: Marco Felsch Reviewed-by: Peng Fan --- drivers/dma/imx-sdma.c | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/drivers/dma/imx-sdma.c b/drivers/dma/imx-sdma.c index 56daaeb7df03986850c9c74273d0816700581dc0..dab3589e1c8d9efe06e16925c53= 554f8e22ce679 100644 --- a/drivers/dma/imx-sdma.c +++ b/drivers/dma/imx-sdma.c @@ -2355,11 +2355,9 @@ static int sdma_probe(struct platform_device *pdev) vchan_init(&sdmac->vc, &sdma->dma_device); } =20 - if (np) { - sdma->iram_pool =3D of_gen_pool_get(np, "iram", 0); - if (sdma->iram_pool) - dev_info(&pdev->dev, "alloc bd from iram.\n"); - } + sdma->iram_pool =3D of_gen_pool_get(np, "iram", 0); + if (sdma->iram_pool) + dev_info(&pdev->dev, "alloc bd from iram.\n"); =20 ret =3D sdma_init(sdma); if (ret) @@ -2399,12 +2397,10 @@ static int sdma_probe(struct platform_device *pdev) goto err_init; } =20 - if (np) { - ret =3D of_dma_controller_register(np, sdma_xlate, sdma); - if (ret) { - dev_err(&pdev->dev, "failed to register controller\n"); - goto err_register; - } + ret =3D of_dma_controller_register(np, sdma_xlate, sdma); + if (ret) { + dev_err(&pdev->dev, "failed to register controller\n"); + goto err_register; } =20 /* --=20 2.47.3 From nobody Thu Oct 2 19:27:59 2025 Received: from metis.whiteo.stw.pengutronix.de (metis.whiteo.stw.pengutronix.de [185.203.201.7]) (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 15F0428E579 for ; Thu, 11 Sep 2025 21:56:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.203.201.7 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757627817; cv=none; b=sAfZr/5zXA8F3G8N9tagPAtPUhxhpH8BOE+vCeAeDQcXWfDasgX2Vi12bHdFq0wGuz0sHXEEIkf7r5cHH9/kjV8fpn3h5Km0QOcq/TuVPP5ru4lZuoMyy4Le+JqlKffeiXktmJdaV6pDcNOYnoibqrJqHdSDfOtir9CHSgf5fVM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757627817; c=relaxed/simple; bh=9JBExctI+l2MIs5a270p1JQ4VYHxvk44V9VY5IfRnR0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=IdrkmppBMXgidhp1P6Gk2WQRbg7IAzgrJfkRjGifi1DVBUhgtJtcyZ3wJamLKXe11Q1keE34wB45y7cfVotJAjQwVEbrvjoBKGP4eN+TVAiCvTLrzI2/MZiYrTKiclRlOkBTLfJ+RZt19brSVf4D8jl08/4JR5H1eBTQq4MKs18= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de; spf=pass smtp.mailfrom=pengutronix.de; arc=none smtp.client-ip=185.203.201.7 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pengutronix.de Received: from dude02.red.stw.pengutronix.de ([2a0a:edc0:0:1101:1d::28]) by metis.whiteo.stw.pengutronix.de with esmtp (Exim 4.92) (envelope-from ) id 1uwpHe-0004g5-5B; Thu, 11 Sep 2025 23:56:50 +0200 From: Marco Felsch Date: Thu, 11 Sep 2025 23:56:45 +0200 Subject: [PATCH v2 04/10] dmaengine: imx-sdma: sdma_remove minor cleanups 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 Message-Id: <20250911-v6-16-topic-sdma-v2-4-d315f56343b5@pengutronix.de> References: <20250911-v6-16-topic-sdma-v2-0-d315f56343b5@pengutronix.de> In-Reply-To: <20250911-v6-16-topic-sdma-v2-0-d315f56343b5@pengutronix.de> To: Vinod Koul , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Jiada Wang Cc: dmaengine@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Marco Felsch , Frank Li X-Mailer: b4 0.14.2 X-SA-Exim-Connect-IP: 2a0a:edc0:0:1101:1d::28 X-SA-Exim-Mail-From: m.felsch@pengutronix.de X-SA-Exim-Scanned: No (on metis.whiteo.stw.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org We don't need to set the pdev driver data to NULL since the device will be freed anyways. Also drop the tasklet_kill() since this is done by the virt-dma driver during the vchan_synchronize(). Reviewed-by: Frank Li Signed-off-by: Marco Felsch Reviewed-by: Peng Fan --- drivers/dma/imx-sdma.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/drivers/dma/imx-sdma.c b/drivers/dma/imx-sdma.c index dab3589e1c8d9efe06e16925c53554f8e22ce679..44411c15029c9b09f307c4b9e3f= 7b1ab77fa5093 100644 --- a/drivers/dma/imx-sdma.c +++ b/drivers/dma/imx-sdma.c @@ -2446,11 +2446,8 @@ static void sdma_remove(struct platform_device *pdev) for (i =3D 0; i < MAX_DMA_CHANNELS; i++) { struct sdma_channel *sdmac =3D &sdma->channel[i]; =20 - tasklet_kill(&sdmac->vc.task); sdma_free_chan_resources(&sdmac->vc.chan); } - - platform_set_drvdata(pdev, NULL); } =20 static struct platform_driver sdma_driver =3D { --=20 2.47.3 From nobody Thu Oct 2 19:27:59 2025 Received: from metis.whiteo.stw.pengutronix.de (metis.whiteo.stw.pengutronix.de [185.203.201.7]) (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 A89482DC34B for ; Thu, 11 Sep 2025 21:56:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.203.201.7 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757627818; cv=none; b=KaEtUAeaJ0lIVWO2KPeW1HG9+FOnrwRhumHfUu+1m71VUo+SUKFgmH2TLeR9xqdAOfoYAXuCx+cYVauR7wPD49QlqFWGPvZM9RHiHZFxWZjPVNvWbn0zk4l1vXxYYMMwBrfsf9BKIq7kqs72eFDMZh6nPOGwh5iT1HfemwzZq58= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757627818; c=relaxed/simple; bh=Zifnmig/mmN0xCIOodUFIJ/i4rpbpjL4rBicSOwNiOw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=mhlUZbT504RT7P0YFfOh4ye9v1lcKrdubxsJQTYbZH3hGlIfa6On6kfav4GyzwVOJHU8JWApINj6LgPxszxEI7cKLRXtEAI1P7wFw1gRxTFtRH8kycGAfbjyoeGmlTTNuuTatUTp/5SlvOpDGMzPqXsiFbGVc+7NO+sD2KoniNc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de; spf=pass smtp.mailfrom=pengutronix.de; arc=none smtp.client-ip=185.203.201.7 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pengutronix.de Received: from dude02.red.stw.pengutronix.de ([2a0a:edc0:0:1101:1d::28]) by metis.whiteo.stw.pengutronix.de with esmtp (Exim 4.92) (envelope-from ) id 1uwpHe-0004g5-7I; Thu, 11 Sep 2025 23:56:50 +0200 From: Marco Felsch Date: Thu, 11 Sep 2025 23:56:46 +0200 Subject: [PATCH v2 05/10] dmaengine: imx-sdma: cosmetic cleanup 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 Message-Id: <20250911-v6-16-topic-sdma-v2-5-d315f56343b5@pengutronix.de> References: <20250911-v6-16-topic-sdma-v2-0-d315f56343b5@pengutronix.de> In-Reply-To: <20250911-v6-16-topic-sdma-v2-0-d315f56343b5@pengutronix.de> To: Vinod Koul , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Jiada Wang Cc: dmaengine@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Marco Felsch , Frank Li X-Mailer: b4 0.14.2 X-SA-Exim-Connect-IP: 2a0a:edc0:0:1101:1d::28 X-SA-Exim-Mail-From: m.felsch@pengutronix.de X-SA-Exim-Scanned: No (on metis.whiteo.stw.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org Make use of local struct device pointer to not dereference the platform_device pointer everytime. Reviewed-by: Frank Li Signed-off-by: Marco Felsch Reviewed-by: Peng Fan --- drivers/dma/imx-sdma.c | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/drivers/dma/imx-sdma.c b/drivers/dma/imx-sdma.c index 44411c15029c9b09f307c4b9e3f7b1ab77fa5093..b0def2bde77fe53b0805bddc0c5= d6116c9cefcbe 100644 --- a/drivers/dma/imx-sdma.c +++ b/drivers/dma/imx-sdma.c @@ -2266,7 +2266,8 @@ static struct dma_chan *sdma_xlate(struct of_phandle_= args *dma_spec, =20 static int sdma_probe(struct platform_device *pdev) { - struct device_node *np =3D pdev->dev.of_node; + struct device *dev =3D &pdev->dev; + struct device_node *np =3D dev->of_node; const char *fw_name; int ret; int irq; @@ -2274,18 +2275,18 @@ static int sdma_probe(struct platform_device *pdev) struct sdma_engine *sdma; s32 *saddr_arr; =20 - ret =3D dma_coerce_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32)); + ret =3D dma_coerce_mask_and_coherent(dev, DMA_BIT_MASK(32)); if (ret) return ret; =20 - sdma =3D devm_kzalloc(&pdev->dev, sizeof(*sdma), GFP_KERNEL); + sdma =3D devm_kzalloc(dev, sizeof(*sdma), GFP_KERNEL); if (!sdma) return -ENOMEM; =20 spin_lock_init(&sdma->channel_0_lock); =20 - sdma->dev =3D &pdev->dev; - sdma->drvdata =3D of_device_get_match_data(sdma->dev); + sdma->dev =3D dev; + sdma->drvdata =3D of_device_get_match_data(dev); =20 irq =3D platform_get_irq(pdev, 0); if (irq < 0) @@ -2295,11 +2296,11 @@ static int sdma_probe(struct platform_device *pdev) if (IS_ERR(sdma->regs)) return PTR_ERR(sdma->regs); =20 - sdma->clk_ipg =3D devm_clk_get(&pdev->dev, "ipg"); + sdma->clk_ipg =3D devm_clk_get(dev, "ipg"); if (IS_ERR(sdma->clk_ipg)) return PTR_ERR(sdma->clk_ipg); =20 - sdma->clk_ahb =3D devm_clk_get(&pdev->dev, "ahb"); + sdma->clk_ahb =3D devm_clk_get(dev, "ahb"); if (IS_ERR(sdma->clk_ahb)) return PTR_ERR(sdma->clk_ahb); =20 @@ -2311,8 +2312,8 @@ static int sdma_probe(struct platform_device *pdev) if (ret) goto err_clk; =20 - ret =3D devm_request_irq(&pdev->dev, irq, sdma_int_handler, 0, - dev_name(&pdev->dev), sdma); + ret =3D devm_request_irq(dev, irq, sdma_int_handler, 0, + dev_name(dev), sdma); if (ret) goto err_irq; =20 @@ -2357,7 +2358,7 @@ static int sdma_probe(struct platform_device *pdev) =20 sdma->iram_pool =3D of_gen_pool_get(np, "iram", 0); if (sdma->iram_pool) - dev_info(&pdev->dev, "alloc bd from iram.\n"); + dev_info(dev, "alloc bd from iram.\n"); =20 ret =3D sdma_init(sdma); if (ret) @@ -2370,7 +2371,7 @@ static int sdma_probe(struct platform_device *pdev) if (sdma->drvdata->script_addrs) sdma_add_scripts(sdma, sdma->drvdata->script_addrs); =20 - sdma->dma_device.dev =3D &pdev->dev; + sdma->dma_device.dev =3D dev; =20 sdma->dma_device.device_alloc_chan_resources =3D sdma_alloc_chan_resource= s; sdma->dma_device.device_free_chan_resources =3D sdma_free_chan_resources; @@ -2393,13 +2394,13 @@ static int sdma_probe(struct platform_device *pdev) =20 ret =3D dma_async_device_register(&sdma->dma_device); if (ret) { - dev_err(&pdev->dev, "unable to register\n"); + dev_err(dev, "unable to register\n"); goto err_init; } =20 ret =3D of_dma_controller_register(np, sdma_xlate, sdma); if (ret) { - dev_err(&pdev->dev, "failed to register controller\n"); + dev_err(dev, "failed to register controller\n"); goto err_register; } =20 @@ -2411,11 +2412,11 @@ static int sdma_probe(struct platform_device *pdev) ret =3D of_property_read_string(np, "fsl,sdma-ram-script-name", &fw_name); if (ret) { - dev_warn(&pdev->dev, "failed to get firmware name\n"); + dev_warn(dev, "failed to get firmware name\n"); } else { ret =3D sdma_get_firmware(sdma, fw_name); if (ret) - dev_warn(&pdev->dev, "failed to get firmware from device tree\n"); + dev_warn(dev, "failed to get firmware from device tree\n"); } =20 return 0; --=20 2.47.3 From nobody Thu Oct 2 19:27:59 2025 Received: from metis.whiteo.stw.pengutronix.de (metis.whiteo.stw.pengutronix.de [185.203.201.7]) (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 F173F2DECA5 for ; Thu, 11 Sep 2025 21:56:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.203.201.7 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757627818; cv=none; b=qMJcKHROJldkhdFDYd8hjnTVT2zU8I//m8PCkrum8Hi9J2aSB/vEFMqbiPZGdnA+UJh8YeVsZoaWKj/q/BK9QY7dNqf6SMWDFaQx7Y8adpml/aNjXMbnmckzDAESi6JCjRhu41InmJyuDlwEUdBj5sxh9hOD1S4u+rsSlMb226U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757627818; c=relaxed/simple; bh=HJggFXsaK9sz5oEWiS9Gu/aCotSecUTWXBCVj5P5gxg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=boDds+IgwPIh0XhQamVIIQ13JpC601+drmBohKjeKXCfQpMcJ1uzKyhKs6oPvz8jzKNGJy7MJX9zsPTZD4CtF8D1sl+IK0kuMUiOsk/P0Lk1Ew0WQ5HnUipLWBG60zJJeD+SH+B4A8Mf9I0afNibqbCBAP82uix47u3/2U5TqVU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de; spf=pass smtp.mailfrom=pengutronix.de; arc=none smtp.client-ip=185.203.201.7 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pengutronix.de Received: from dude02.red.stw.pengutronix.de ([2a0a:edc0:0:1101:1d::28]) by metis.whiteo.stw.pengutronix.de with esmtp (Exim 4.92) (envelope-from ) id 1uwpHe-0004g5-9F; Thu, 11 Sep 2025 23:56:50 +0200 From: Marco Felsch Date: Thu, 11 Sep 2025 23:56:47 +0200 Subject: [PATCH v2 06/10] dmaengine: imx-sdma: make use of devm_kzalloc for script_addrs 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 Message-Id: <20250911-v6-16-topic-sdma-v2-6-d315f56343b5@pengutronix.de> References: <20250911-v6-16-topic-sdma-v2-0-d315f56343b5@pengutronix.de> In-Reply-To: <20250911-v6-16-topic-sdma-v2-0-d315f56343b5@pengutronix.de> To: Vinod Koul , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Jiada Wang Cc: dmaengine@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Marco Felsch , Frank Li X-Mailer: b4 0.14.2 X-SA-Exim-Connect-IP: 2a0a:edc0:0:1101:1d::28 X-SA-Exim-Mail-From: m.felsch@pengutronix.de X-SA-Exim-Scanned: No (on metis.whiteo.stw.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org Shuffle the allocation of script_addrs and make use of devm_kzalloc() to drop the local error handling as well as the kfree() during the remove. Reviewed-by: Frank Li Signed-off-by: Marco Felsch Reviewed-by: Peng Fan --- drivers/dma/imx-sdma.c | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/drivers/dma/imx-sdma.c b/drivers/dma/imx-sdma.c index b0def2bde77fe53b0805bddc0c5d6116c9cefcbe..d6239900ba12063bdb7d807db1b= dbdc2b446a94c 100644 --- a/drivers/dma/imx-sdma.c +++ b/drivers/dma/imx-sdma.c @@ -2283,6 +2283,10 @@ static int sdma_probe(struct platform_device *pdev) if (!sdma) return -ENOMEM; =20 + sdma->script_addrs =3D devm_kzalloc(dev, sizeof(*sdma->script_addrs), GFP= _KERNEL); + if (!sdma->script_addrs) + return -ENOMEM; + spin_lock_init(&sdma->channel_0_lock); =20 sdma->dev =3D dev; @@ -2319,12 +2323,6 @@ static int sdma_probe(struct platform_device *pdev) =20 sdma->irq =3D irq; =20 - sdma->script_addrs =3D kzalloc(sizeof(*sdma->script_addrs), GFP_KERNEL); - if (!sdma->script_addrs) { - ret =3D -ENOMEM; - goto err_irq; - } - /* initially no scripts available */ saddr_arr =3D (s32 *)sdma->script_addrs; for (i =3D 0; i < sizeof(*sdma->script_addrs) / sizeof(s32); i++) @@ -2362,11 +2360,11 @@ static int sdma_probe(struct platform_device *pdev) =20 ret =3D sdma_init(sdma); if (ret) - goto err_init; + goto err_irq; =20 ret =3D sdma_event_remap(sdma); if (ret) - goto err_init; + goto err_irq; =20 if (sdma->drvdata->script_addrs) sdma_add_scripts(sdma, sdma->drvdata->script_addrs); @@ -2395,7 +2393,7 @@ static int sdma_probe(struct platform_device *pdev) ret =3D dma_async_device_register(&sdma->dma_device); if (ret) { dev_err(dev, "unable to register\n"); - goto err_init; + goto err_irq; } =20 ret =3D of_dma_controller_register(np, sdma_xlate, sdma); @@ -2423,8 +2421,6 @@ static int sdma_probe(struct platform_device *pdev) =20 err_register: dma_async_device_unregister(&sdma->dma_device); -err_init: - kfree(sdma->script_addrs); err_irq: clk_unprepare(sdma->clk_ahb); err_clk: @@ -2440,7 +2436,6 @@ static void sdma_remove(struct platform_device *pdev) of_dma_controller_free(sdma->dev->of_node); devm_free_irq(&pdev->dev, sdma->irq, sdma); dma_async_device_unregister(&sdma->dma_device); - kfree(sdma->script_addrs); clk_unprepare(sdma->clk_ahb); clk_unprepare(sdma->clk_ipg); /* Kill the tasklet */ --=20 2.47.3 From nobody Thu Oct 2 19:27:59 2025 Received: from metis.whiteo.stw.pengutronix.de (metis.whiteo.stw.pengutronix.de [185.203.201.7]) (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 CE9B62E03EF for ; Thu, 11 Sep 2025 21:56:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.203.201.7 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757627820; cv=none; b=NVQMdZ50I1QD2VqqJf2kx3oWYWwV2SjuSJhA1cubWTwokanlQwxd1WSn4i8kVBjMaA9/607HwlyHy0tUCYr00B1X4OOjyb1I4hnhU76ikOf5db7+de+wZInsQbmZI9bUXnan7cI+bzriktkqsqOMx915Eu4w0u52o1K9pg8459g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757627820; c=relaxed/simple; bh=0Z7xBaweOqz5htFkvcQWh3jEoPpIESsJuZDczDl62SU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=TIvIQs1RQ2DoflHodowLJ5RSeVVdxLi5KcYmIL+fAh7NJjvDQN57Kt4rMelN0CLN2pz+eEO4CYst107J46JTWyg+Smlx28ME9O/IR0LjnAaWF8OkYwuFi8c1YQgTB/fdaGKn0bX5uAMfh9mUm8ElUNoJSCdNpwCP3GVoybRw+Fc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de; spf=pass smtp.mailfrom=pengutronix.de; arc=none smtp.client-ip=185.203.201.7 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pengutronix.de Received: from dude02.red.stw.pengutronix.de ([2a0a:edc0:0:1101:1d::28]) by metis.whiteo.stw.pengutronix.de with esmtp (Exim 4.92) (envelope-from ) id 1uwpHe-0004g5-BD; Thu, 11 Sep 2025 23:56:50 +0200 From: Marco Felsch Date: Thu, 11 Sep 2025 23:56:48 +0200 Subject: [PATCH v2 07/10] dmaengine: imx-sdma: make use of devm_clk_get_prepared() 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 Message-Id: <20250911-v6-16-topic-sdma-v2-7-d315f56343b5@pengutronix.de> References: <20250911-v6-16-topic-sdma-v2-0-d315f56343b5@pengutronix.de> In-Reply-To: <20250911-v6-16-topic-sdma-v2-0-d315f56343b5@pengutronix.de> To: Vinod Koul , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Jiada Wang Cc: dmaengine@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Marco Felsch , Frank Li X-Mailer: b4 0.14.2 X-SA-Exim-Connect-IP: 2a0a:edc0:0:1101:1d::28 X-SA-Exim-Mail-From: m.felsch@pengutronix.de X-SA-Exim-Scanned: No (on metis.whiteo.stw.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org Make use of the devm_clk_get_prepared() to cleanup the error handling during probe() and to automatically unprepare the clock during remove. Reviewed-by: Frank Li Signed-off-by: Marco Felsch Reviewed-by: Peng Fan --- drivers/dma/imx-sdma.c | 27 +++++++-------------------- 1 file changed, 7 insertions(+), 20 deletions(-) diff --git a/drivers/dma/imx-sdma.c b/drivers/dma/imx-sdma.c index d6239900ba12063bdb7d807db1bdbdc2b446a94c..d39589c20c4b2a26d0239feb86c= ce8d5a0f5acdd 100644 --- a/drivers/dma/imx-sdma.c +++ b/drivers/dma/imx-sdma.c @@ -2300,26 +2300,18 @@ static int sdma_probe(struct platform_device *pdev) if (IS_ERR(sdma->regs)) return PTR_ERR(sdma->regs); =20 - sdma->clk_ipg =3D devm_clk_get(dev, "ipg"); + sdma->clk_ipg =3D devm_clk_get_prepared(dev, "ipg"); if (IS_ERR(sdma->clk_ipg)) return PTR_ERR(sdma->clk_ipg); =20 - sdma->clk_ahb =3D devm_clk_get(dev, "ahb"); + sdma->clk_ahb =3D devm_clk_get_prepared(dev, "ahb"); if (IS_ERR(sdma->clk_ahb)) return PTR_ERR(sdma->clk_ahb); =20 - ret =3D clk_prepare(sdma->clk_ipg); - if (ret) - return ret; - - ret =3D clk_prepare(sdma->clk_ahb); - if (ret) - goto err_clk; - ret =3D devm_request_irq(dev, irq, sdma_int_handler, 0, dev_name(dev), sdma); if (ret) - goto err_irq; + return ret; =20 sdma->irq =3D irq; =20 @@ -2360,11 +2352,11 @@ static int sdma_probe(struct platform_device *pdev) =20 ret =3D sdma_init(sdma); if (ret) - goto err_irq; + return ret; =20 ret =3D sdma_event_remap(sdma); if (ret) - goto err_irq; + return ret; =20 if (sdma->drvdata->script_addrs) sdma_add_scripts(sdma, sdma->drvdata->script_addrs); @@ -2393,7 +2385,7 @@ static int sdma_probe(struct platform_device *pdev) ret =3D dma_async_device_register(&sdma->dma_device); if (ret) { dev_err(dev, "unable to register\n"); - goto err_irq; + return ret; } =20 ret =3D of_dma_controller_register(np, sdma_xlate, sdma); @@ -2421,10 +2413,7 @@ static int sdma_probe(struct platform_device *pdev) =20 err_register: dma_async_device_unregister(&sdma->dma_device); -err_irq: - clk_unprepare(sdma->clk_ahb); -err_clk: - clk_unprepare(sdma->clk_ipg); + return ret; } =20 @@ -2436,8 +2425,6 @@ static void sdma_remove(struct platform_device *pdev) of_dma_controller_free(sdma->dev->of_node); devm_free_irq(&pdev->dev, sdma->irq, sdma); dma_async_device_unregister(&sdma->dma_device); - clk_unprepare(sdma->clk_ahb); - clk_unprepare(sdma->clk_ipg); /* Kill the tasklet */ for (i =3D 0; i < MAX_DMA_CHANNELS; i++) { struct sdma_channel *sdmac =3D &sdma->channel[i]; --=20 2.47.3 From nobody Thu Oct 2 19:27:59 2025 Received: from metis.whiteo.stw.pengutronix.de (metis.whiteo.stw.pengutronix.de [185.203.201.7]) (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 7F2432DE6E8 for ; Thu, 11 Sep 2025 21:56:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.203.201.7 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757627819; cv=none; b=ueJBSrN/ugCZiLKy/6wrYbYPc3VYyMQOdSftNP4zYXNWvREffWdinx84EKKkh9f2hX/pqK1dqfIe5o263YURrxIBl4mHyR5S61MPnvjq0qBa21ielL8oJ1MttLVetw1KuF+GIAVPSNFzX4b3qvp8BDQm3B+Qch7PJ5uKuLxwKNs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757627819; c=relaxed/simple; bh=Ay7fyy4+Nh1sAgUywbsWUgoNJm6SMj/lBy4PrkKWamU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=VDRwFPejucxURoaqApdesttcNYxaAXUDcfKLZutTsRIbw+viMe/+W8/mN7j2rZHaCaACbarOLQJ9CfrAUmiD6ZeJgk0wZ2S0rPsyiHLFCDxEsd84M4j+XCED4QJLe++xGcrkZGKqANUoaF2pU8Q8FK0vZbmi3SDG5oVXJhEXMtU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de; spf=pass smtp.mailfrom=pengutronix.de; arc=none smtp.client-ip=185.203.201.7 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pengutronix.de Received: from dude02.red.stw.pengutronix.de ([2a0a:edc0:0:1101:1d::28]) by metis.whiteo.stw.pengutronix.de with esmtp (Exim 4.92) (envelope-from ) id 1uwpHe-0004g5-D5; Thu, 11 Sep 2025 23:56:50 +0200 From: Marco Felsch Date: Thu, 11 Sep 2025 23:56:49 +0200 Subject: [PATCH v2 08/10] dmaengine: imx-sdma: make use of devm_add_action_or_reset to unregiser the dma_device 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 Message-Id: <20250911-v6-16-topic-sdma-v2-8-d315f56343b5@pengutronix.de> References: <20250911-v6-16-topic-sdma-v2-0-d315f56343b5@pengutronix.de> In-Reply-To: <20250911-v6-16-topic-sdma-v2-0-d315f56343b5@pengutronix.de> To: Vinod Koul , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Jiada Wang Cc: dmaengine@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Marco Felsch X-Mailer: b4 0.14.2 X-SA-Exim-Connect-IP: 2a0a:edc0:0:1101:1d::28 X-SA-Exim-Mail-From: m.felsch@pengutronix.de X-SA-Exim-Scanned: No (on metis.whiteo.stw.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org Make use of the devm_add_action_or_reset() to register a custom devm_ release hook. This is required to turn off the IRQs before calling dma_async_device_unregister(). Furthermore it removes the last goto error handling within probe() and trims the remove(). Make use of disable_irq() and let the devm-irq do the job to free the IRQ, because the only purpose of using devm_free_irq() was to disable the IRQ before calling dma_async_device_unregister(). Signed-off-by: Marco Felsch Reviewed-by: Peng Fan --- drivers/dma/imx-sdma.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/drivers/dma/imx-sdma.c b/drivers/dma/imx-sdma.c index d39589c20c4b2a26d0239feb86cce8d5a0f5acdd..d6d0d4300f540268a3ab4a6b14a= f685f7b93275a 100644 --- a/drivers/dma/imx-sdma.c +++ b/drivers/dma/imx-sdma.c @@ -2264,6 +2264,14 @@ static struct dma_chan *sdma_xlate(struct of_phandle= _args *dma_spec, ofdma->of_node); } =20 +static void sdma_dma_device_unregister_action(void *data) +{ + struct sdma_engine *sdma =3D data; + + disable_irq(sdma->irq); + dma_async_device_unregister(&sdma->dma_device); +} + static int sdma_probe(struct platform_device *pdev) { struct device *dev =3D &pdev->dev; @@ -2388,10 +2396,16 @@ static int sdma_probe(struct platform_device *pdev) return ret; } =20 + ret =3D devm_add_action_or_reset(dev, sdma_dma_device_unregister_action, = sdma); + if (ret) { + dev_err(dev, "Unable to register release hook\n"); + return ret; + } + ret =3D of_dma_controller_register(np, sdma_xlate, sdma); if (ret) { dev_err(dev, "failed to register controller\n"); - goto err_register; + return ret; } =20 /* @@ -2410,11 +2424,6 @@ static int sdma_probe(struct platform_device *pdev) } =20 return 0; - -err_register: - dma_async_device_unregister(&sdma->dma_device); - - return ret; } =20 static void sdma_remove(struct platform_device *pdev) @@ -2423,8 +2432,6 @@ static void sdma_remove(struct platform_device *pdev) int i; =20 of_dma_controller_free(sdma->dev->of_node); - devm_free_irq(&pdev->dev, sdma->irq, sdma); - dma_async_device_unregister(&sdma->dma_device); /* Kill the tasklet */ for (i =3D 0; i < MAX_DMA_CHANNELS; i++) { struct sdma_channel *sdmac =3D &sdma->channel[i]; --=20 2.47.3 From nobody Thu Oct 2 19:27:59 2025 Received: from metis.whiteo.stw.pengutronix.de (metis.whiteo.stw.pengutronix.de [185.203.201.7]) (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 868C22DE70A for ; Thu, 11 Sep 2025 21:56:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.203.201.7 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757627818; cv=none; b=hVeeY/cHl2ZE5ycVzaq6OW4EPmC+Jkf0owDy0OgxUw4DWQ3NuKG5wasd9rKqZUd5NnaVLaln6uvHS56R2572biVtUyoYvZXsENSaJeDe9BPxt8RPBlJFRAYwb2ewYM6PAmZWeharPrWwbTa+RKDrWgNpyNk+0voeO0c51ddUwoE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757627818; c=relaxed/simple; bh=cL1unuE3WF08z+2/1hEr0+OZ0Bd6FXIqUHhnJzPyAA4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=P1A86Klg6sgDNgrk2/qrGi50szPe4NW+CZO+6/OcxqBWXd1DFCQOZJG4vlAFZ6vdh6vqbYKiycJXGGaWpkDeyWB7N0F7PAGevCB7ZWz1nhrDiAyodun+x1pri7ACkNIcBdyfgugOX4Cl2/YOaVX2l3/54k8mEzUbDZhxKMXwZC0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de; spf=pass smtp.mailfrom=pengutronix.de; arc=none smtp.client-ip=185.203.201.7 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pengutronix.de Received: from dude02.red.stw.pengutronix.de ([2a0a:edc0:0:1101:1d::28]) by metis.whiteo.stw.pengutronix.de with esmtp (Exim 4.92) (envelope-from ) id 1uwpHe-0004g5-ES; Thu, 11 Sep 2025 23:56:50 +0200 From: Marco Felsch Date: Thu, 11 Sep 2025 23:56:50 +0200 Subject: [PATCH v2 09/10] dmaengine: imx-sdma: make use of devm_add_action_or_reset to unregiser the dma-controller 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 Message-Id: <20250911-v6-16-topic-sdma-v2-9-d315f56343b5@pengutronix.de> References: <20250911-v6-16-topic-sdma-v2-0-d315f56343b5@pengutronix.de> In-Reply-To: <20250911-v6-16-topic-sdma-v2-0-d315f56343b5@pengutronix.de> To: Vinod Koul , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Jiada Wang Cc: dmaengine@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Marco Felsch X-Mailer: b4 0.14.2 X-SA-Exim-Connect-IP: 2a0a:edc0:0:1101:1d::28 X-SA-Exim-Mail-From: m.felsch@pengutronix.de X-SA-Exim-Scanned: No (on metis.whiteo.stw.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org Use the devres capabilities to cleanup the driver remove() callback. Signed-off-by: Marco Felsch Reviewed-by: Peng Fan --- drivers/dma/imx-sdma.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/drivers/dma/imx-sdma.c b/drivers/dma/imx-sdma.c index d6d0d4300f540268a3ab4a6b14af685f7b93275a..a7e6554ca223e2e980caf2e2dea= 832db9ad60ed6 100644 --- a/drivers/dma/imx-sdma.c +++ b/drivers/dma/imx-sdma.c @@ -2264,6 +2264,13 @@ static struct dma_chan *sdma_xlate(struct of_phandle= _args *dma_spec, ofdma->of_node); } =20 +static void sdma_dma_of_dma_controller_unregister_action(void *data) +{ + struct sdma_engine *sdma =3D data; + + of_dma_controller_free(sdma->dev->of_node); +} + static void sdma_dma_device_unregister_action(void *data) { struct sdma_engine *sdma =3D data; @@ -2408,6 +2415,12 @@ static int sdma_probe(struct platform_device *pdev) return ret; } =20 + ret =3D devm_add_action_or_reset(dev, sdma_dma_of_dma_controller_unregist= er_action, sdma); + if (ret) { + dev_err(dev, "failed to register of-dma-controller unregister hook\n"); + return ret; + } + /* * Because that device tree does not encode ROM script address, * the RAM script in firmware is mandatory for device tree @@ -2431,7 +2444,6 @@ static void sdma_remove(struct platform_device *pdev) struct sdma_engine *sdma =3D platform_get_drvdata(pdev); int i; =20 - of_dma_controller_free(sdma->dev->of_node); /* Kill the tasklet */ for (i =3D 0; i < MAX_DMA_CHANNELS; i++) { struct sdma_channel *sdmac =3D &sdma->channel[i]; --=20 2.47.3 From nobody Thu Oct 2 19:27:59 2025 Received: from metis.whiteo.stw.pengutronix.de (metis.whiteo.stw.pengutronix.de [185.203.201.7]) (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 DA3B02E0B68 for ; Thu, 11 Sep 2025 21:56:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.203.201.7 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757627821; cv=none; b=t+hpIjv10cHxwZ+l/kWcCyyYS8VLU4ljd94NRQQdnsW+yvff3V8i/u9TxxzRHO+Dk+M1Uk9GEhwSfSBKvykIhp0sfkwinhuNTOsclQyP+toD0wnZkT0H3XTIACYKeFG8Y1WDHlbnHJhnItskV5orZ2Sq39Nno8gwPDHhH5uEAI4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757627821; c=relaxed/simple; bh=YVmSvLmXA4fSHddIJODfvJPQ3kUAobuiJCXsXHGJMhg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=He/ZocKDuCmPyrgUgpDQvvm4GfVWc2a7uTY5ve1HppWd2CB3uW5J7GHnEU3+f5Y+4AHhoixbAVyciBYIzxwjmNkPpPvyoXLDqWtcgtvDzde9eYJvEZE0q9d7DPAEeV2GU1v1ZdaUyfoLdI5swwYi1JIISFZAg4O5I2LGB5/GO9g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de; spf=pass smtp.mailfrom=pengutronix.de; arc=none smtp.client-ip=185.203.201.7 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pengutronix.de Received: from dude02.red.stw.pengutronix.de ([2a0a:edc0:0:1101:1d::28]) by metis.whiteo.stw.pengutronix.de with esmtp (Exim 4.92) (envelope-from ) id 1uwpHe-0004g5-G9; Thu, 11 Sep 2025 23:56:50 +0200 From: Marco Felsch Date: Thu, 11 Sep 2025 23:56:51 +0200 Subject: [PATCH v2 10/10] dmaengine: imx-sdma: make use of dev_err_probe() 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 Message-Id: <20250911-v6-16-topic-sdma-v2-10-d315f56343b5@pengutronix.de> References: <20250911-v6-16-topic-sdma-v2-0-d315f56343b5@pengutronix.de> In-Reply-To: <20250911-v6-16-topic-sdma-v2-0-d315f56343b5@pengutronix.de> To: Vinod Koul , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Jiada Wang Cc: dmaengine@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Marco Felsch , Frank Li X-Mailer: b4 0.14.2 X-SA-Exim-Connect-IP: 2a0a:edc0:0:1101:1d::28 X-SA-Exim-Mail-From: m.felsch@pengutronix.de X-SA-Exim-Scanned: No (on metis.whiteo.stw.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org Add dev_err_probe() at return path of probe() to support users to identify issues easier. Reviewed-by: Frank Li Signed-off-by: Marco Felsch Reviewed-by: Peng Fan --- drivers/dma/imx-sdma.c | 41 +++++++++++++++++------------------------ 1 file changed, 17 insertions(+), 24 deletions(-) diff --git a/drivers/dma/imx-sdma.c b/drivers/dma/imx-sdma.c index a7e6554ca223e2e980caf2e2dea832db9ad60ed6..d4430e6e56deda7de3538e42af7= 987a456957b43 100644 --- a/drivers/dma/imx-sdma.c +++ b/drivers/dma/imx-sdma.c @@ -2292,7 +2292,7 @@ static int sdma_probe(struct platform_device *pdev) =20 ret =3D dma_coerce_mask_and_coherent(dev, DMA_BIT_MASK(32)); if (ret) - return ret; + return dev_err_probe(dev, ret, "Failed to set DMA mask\n"); =20 sdma =3D devm_kzalloc(dev, sizeof(*sdma), GFP_KERNEL); if (!sdma) @@ -2309,24 +2309,24 @@ static int sdma_probe(struct platform_device *pdev) =20 irq =3D platform_get_irq(pdev, 0); if (irq < 0) - return irq; + return dev_err_probe(dev, irq, "Failed to get IRQ\n"); =20 sdma->regs =3D devm_platform_ioremap_resource(pdev, 0); if (IS_ERR(sdma->regs)) - return PTR_ERR(sdma->regs); + return dev_err_probe(dev, PTR_ERR(sdma->regs), "ioremap failed\n"); =20 sdma->clk_ipg =3D devm_clk_get_prepared(dev, "ipg"); if (IS_ERR(sdma->clk_ipg)) - return PTR_ERR(sdma->clk_ipg); + return dev_err_probe(dev, PTR_ERR(sdma->clk_ipg), "IPG clk_get_prepared = failed\n"); =20 sdma->clk_ahb =3D devm_clk_get_prepared(dev, "ahb"); if (IS_ERR(sdma->clk_ahb)) - return PTR_ERR(sdma->clk_ahb); + return dev_err_probe(dev, PTR_ERR(sdma->clk_ahb), "AHB clk_get_prepared = failed\n"); =20 ret =3D devm_request_irq(dev, irq, sdma_int_handler, 0, dev_name(dev), sdma); if (ret) - return ret; + return dev_err_probe(dev, ret, "Failed to request IRQ\n"); =20 sdma->irq =3D irq; =20 @@ -2367,11 +2367,11 @@ static int sdma_probe(struct platform_device *pdev) =20 ret =3D sdma_init(sdma); if (ret) - return ret; + return dev_err_probe(dev, ret, "sdma_init failed\n"); =20 ret =3D sdma_event_remap(sdma); if (ret) - return ret; + return dev_err_probe(dev, ret, "sdma_event_remap failed\n"); =20 if (sdma->drvdata->script_addrs) sdma_add_scripts(sdma, sdma->drvdata->script_addrs); @@ -2398,28 +2398,21 @@ static int sdma_probe(struct platform_device *pdev) platform_set_drvdata(pdev, sdma); =20 ret =3D dma_async_device_register(&sdma->dma_device); - if (ret) { - dev_err(dev, "unable to register\n"); - return ret; - } + if (ret) + return dev_err_probe(dev, ret, "unable to register\n"); =20 ret =3D devm_add_action_or_reset(dev, sdma_dma_device_unregister_action, = sdma); - if (ret) { - dev_err(dev, "Unable to register release hook\n"); - return ret; - } + if (ret) + return dev_err_probe(dev, ret, "Unable to register release hook\n"); =20 ret =3D of_dma_controller_register(np, sdma_xlate, sdma); - if (ret) { - dev_err(dev, "failed to register controller\n"); - return ret; - } + if (ret) + return dev_err_probe(dev, ret, "failed to register controller\n"); =20 ret =3D devm_add_action_or_reset(dev, sdma_dma_of_dma_controller_unregist= er_action, sdma); - if (ret) { - dev_err(dev, "failed to register of-dma-controller unregister hook\n"); - return ret; - } + if (ret) + return dev_err_probe(dev, ret, + "failed to register of-dma-controller unregister hook\n"); =20 /* * Because that device tree does not encode ROM script address, --=20 2.47.3