From nobody Fri Oct 3 07:42:39 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 73F862EC548 for ; Wed, 3 Sep 2025 13:06:25 +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=1756904787; cv=none; b=VTHnqPLAyZrdOYqh9Y9rKDxibxtgfZxraiXxzjY8QA/ZiSgQXVz/WpyYA2ppMJlzQvxF513dni5GPWrkPItzNcavlhiTeEzB5Dj45oxk6ZDniJLudr8/VYfSnCUYisESrHcpsvbvHSzIDkUe4oeYGIjTRtO7tfleTyKsPzZwNW8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756904787; c=relaxed/simple; bh=SXF4nsn0QyxKfg2TjtolWOsatjZF/s1c7n5JCV+kVAI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ooIGX4XxdVr4hdPq94e+xHgxwVJ9xnYvRb6ba+UdWzd//ZBAsdiUjz6rMul6SzkUElOFuZR631fOrWh3i9SQYsrsVIe2Y0YO37mVzxo+2XFNuz7POTaeKiFRSeVTQOzYh9BAQApPcxygk1FnmoFSeeYmsm1Ibta3WJNkmB2GN6E= 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 1utnBl-00006Z-J9; Wed, 03 Sep 2025 15:06:13 +0200 From: Marco Felsch Date: Wed, 03 Sep 2025 15:06:09 +0200 Subject: [PATCH 01/11] 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: <20250903-v6-16-topic-sdma-v1-1-ac7bab629e8b@pengutronix.de> References: <20250903-v6-16-topic-sdma-v1-0-ac7bab629e8b@pengutronix.de> In-Reply-To: <20250903-v6-16-topic-sdma-v1-0-ac7bab629e8b@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 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. Signed-off-by: Marco Felsch Reviewed-by: Frank Li --- drivers/dma/imx-sdma.c | 32 ++++++++++++++------------------ 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/drivers/dma/imx-sdma.c b/drivers/dma/imx-sdma.c index 02a85d6f1bea2df7d355858094c0c0b0bd07148e..89b4b1266726a9c8a552dc48670= 825ae00717e1c 100644 --- a/drivers/dma/imx-sdma.c +++ b/drivers/dma/imx-sdma.c @@ -2325,11 +2325,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) @@ -2369,21 +2367,19 @@ 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 - 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); + 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 /* * Because that device tree does not encode ROM script address, --=20 2.47.2 From nobody Fri Oct 3 07:42:39 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 19C80304BD5 for ; Wed, 3 Sep 2025 13:06:26 +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=1756904787; cv=none; b=LlqtVlXNyPsqI9ULw9Ma2+1XVsONayEtEtEeZPhGY/Ceo3XRW7wsqSx7O/ULr/Oce7uacP9aKPPcOxExj4aGLJOs3Qi+BId5VrHdlrbYkp9TyFlrbnTMLTWAp3WJU4SkC17od7fubNc+u2NhB+flWEVrjVVK0ymudTLujg73Kwk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756904787; c=relaxed/simple; bh=Y/6IWMSaWYLc08RevVjoMexLbVWlu7SZensZC9s3Sa8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=i5BuPPqG3oml2rJd1fTRD1s2DPouRDN4+NGxVRb6OvWpKBIfLPFAgInmgbJjElZHPXbVs4fnibzLvu5C+NCdfLcFdRwFeS3rBbhjtAobH5fwI+vsivVGemktQnKotvLuBpppRJ5tjaj6Rgyps39Hkqne0NLzOIHh64Q9r8UFwgo= 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 1utnBl-00006Z-KX; Wed, 03 Sep 2025 15:06:13 +0200 From: Marco Felsch Date: Wed, 03 Sep 2025 15:06:10 +0200 Subject: [PATCH 02/11] 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: <20250903-v6-16-topic-sdma-v1-2-ac7bab629e8b@pengutronix.de> References: <20250903-v6-16-topic-sdma-v1-0-ac7bab629e8b@pengutronix.de> In-Reply-To: <20250903-v6-16-topic-sdma-v1-0-ac7bab629e8b@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 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(). Signed-off-by: Marco Felsch Reviewed-by: Frank Li --- 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 89b4b1266726a9c8a552dc48670825ae00717e1c..422086632d3445b2ce3f2e5df9b= 2130174a311e8 100644 --- a/drivers/dma/imx-sdma.c +++ b/drivers/dma/imx-sdma.c @@ -2423,11 +2423,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.2 From nobody Fri Oct 3 07:42:39 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 725B9270572 for ; Wed, 3 Sep 2025 13:06:25 +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=1756904787; cv=none; b=MKUnUTrSLL6HX3hPoW0Ro639/xswzVV7eagoBaN7eU0ld0hCjabD572uxvBdWOYxPr46t7iLJifS5c5em6Jg9GkNERyqbhUMahw+/77Itk+Ivdb+DkRwHry55s1COu4382HGoBQLXc6HHRqnmoBbZEk5DT6IXC3C00ppCmuLNvU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756904787; c=relaxed/simple; bh=tQSJBiKibb4DJjgBw5ixcANjVU0K2CDPdBXgX70RmkQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Q4RoUgTsU526yn4uWdzdv8WBV4kz1PcXEYASn4cKjBR5uFOh8HjH+OoLTfq1HPPJ0A17RBdSCXWEgOLryyK151MwoXMnEg5laijWd/C+7xs3DVcfIcicFA5XJJLwVjXGPtxaYgMVTMO5lkq3OA4+L3nForHsIE7bTRh1UTc4Kz0= 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 1utnBl-00006Z-MM; Wed, 03 Sep 2025 15:06:13 +0200 From: Marco Felsch Date: Wed, 03 Sep 2025 15:06:11 +0200 Subject: [PATCH 03/11] 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: <20250903-v6-16-topic-sdma-v1-3-ac7bab629e8b@pengutronix.de> References: <20250903-v6-16-topic-sdma-v1-0-ac7bab629e8b@pengutronix.de> In-Reply-To: <20250903-v6-16-topic-sdma-v1-0-ac7bab629e8b@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 local struct device pointer to not dereference the platform_device pointer everytime. Signed-off-by: Marco Felsch Reviewed-by: Frank Li --- 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 422086632d3445b2ce3f2e5df9b2130174a311e8..a85739d279f51fdb517fce90b3d= c67673cf2b56c 100644 --- a/drivers/dma/imx-sdma.c +++ b/drivers/dma/imx-sdma.c @@ -2234,7 +2234,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; struct device_node *spba_bus; const char *fw_name; int ret; @@ -2244,18 +2245,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) @@ -2265,11 +2266,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 @@ -2281,8 +2282,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 @@ -2327,7 +2328,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) @@ -2340,7 +2341,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; @@ -2363,13 +2364,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 @@ -2389,11 +2390,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.2 From nobody Fri Oct 3 07:42:39 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 8E24D304BB6 for ; Wed, 3 Sep 2025 13:06:26 +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=1756904788; cv=none; b=YVx43RvowYv4ciw3VG5iISad9TEWux02iNNaZauk9G0m/1JzUPMQt9hC0SnfnjMY1Z32p+WoTgJU/boGmmiSptOVFX+8dcRrA2IL2bBd5AKJ1IuaOi/NmwziaA7ysXtYUOLq0wgPTurQxvActZKKIUz5BNyrX5mfW8Pw7qVlUcI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756904788; c=relaxed/simple; bh=R4rQ0QjdqK60jUB9CHycckkXdaZ+8SOys9bWYtlGlY0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=NfO6sbjYXyZQm6u7iPko74tpoasT1djFfeVO2k2TBkaZ/C5tjbz8x9z/AfBoEKInbfGRWbfGcTGjp91KBk98k4Sfkh0ETfqTw2Sz+f7H2NNyv8UsaPLy6YnZgpFyOk0Av7vltduzz3SBoylpt9ExB+yB84ruvfYba5vr/LdaafE= 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 1utnBl-00006Z-Ns; Wed, 03 Sep 2025 15:06:13 +0200 From: Marco Felsch Date: Wed, 03 Sep 2025 15:06:12 +0200 Subject: [PATCH 04/11] 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: <20250903-v6-16-topic-sdma-v1-4-ac7bab629e8b@pengutronix.de> References: <20250903-v6-16-topic-sdma-v1-0-ac7bab629e8b@pengutronix.de> In-Reply-To: <20250903-v6-16-topic-sdma-v1-0-ac7bab629e8b@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 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. Signed-off-by: Marco Felsch Reviewed-by: Frank Li --- 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 a85739d279f51fdb517fce90b3dc67673cf2b56c..b6e649fda71dbce12a2106c9488= 7f90d0aaaf600 100644 --- a/drivers/dma/imx-sdma.c +++ b/drivers/dma/imx-sdma.c @@ -2253,6 +2253,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; @@ -2289,12 +2293,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++) @@ -2332,11 +2330,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); @@ -2365,7 +2363,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); @@ -2401,8 +2399,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: @@ -2417,7 +2413,6 @@ static void sdma_remove(struct platform_device *pdev) =20 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.2 From nobody Fri Oct 3 07:42:39 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 77DFB30499A for ; Wed, 3 Sep 2025 13:06:25 +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=1756904788; cv=none; b=QlXL4DJeGdULL+9vXm2R9aYW0uvA1LVYdbjVHOf2s5hTUJ+0hga6UgBWDUik2rlZ3DGgbtwt4N5pHMvWo0cga4ALMftaO2/vGeJkxRyfLTw5dZJnAL/xvYMcaugfhn9H3jEZVpPSTOaiXsOxDv4gQC/S+zPq7qJne/JaKBzPn/U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756904788; c=relaxed/simple; bh=KdPXw4hyYoeQOfh7XWD/Ki07ADOS8erkRPk2SJ7dy+4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=jBGTd3SsMacGJLsgvIO+k6HTI7Exzu+bta9G/tVO7o8CMJ7mfUQZ3Iws7E4HBL6EpHE1gp1GWqb0KEqf1jxaQApIdZdPmFemPKiIOil0wsidcwD2aCOYi/NxFaRgRF3RSje5KVkiork2LkzxMTIryz0gAWD1Ecpj4/B1oySaNrw= 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 1utnBl-00006Z-PY; Wed, 03 Sep 2025 15:06:13 +0200 From: Marco Felsch Date: Wed, 03 Sep 2025 15:06:13 +0200 Subject: [PATCH 05/11] 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: <20250903-v6-16-topic-sdma-v1-5-ac7bab629e8b@pengutronix.de> References: <20250903-v6-16-topic-sdma-v1-0-ac7bab629e8b@pengutronix.de> In-Reply-To: <20250903-v6-16-topic-sdma-v1-0-ac7bab629e8b@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_clk_get_prepared() to cleanup the error handling during probe() and to automatically unprepare the clock during remove. Signed-off-by: Marco Felsch Reviewed-by: Frank Li --- 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 b6e649fda71dbce12a2106c94887f90d0aaaf600..5a571d3f33158813e0c56484600= a49b19a6a72e2 100644 --- a/drivers/dma/imx-sdma.c +++ b/drivers/dma/imx-sdma.c @@ -2270,26 +2270,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 @@ -2330,11 +2322,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); @@ -2363,7 +2355,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); @@ -2399,10 +2391,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 @@ -2413,8 +2402,6 @@ static void sdma_remove(struct platform_device *pdev) =20 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.2 From nobody Fri Oct 3 07:42:39 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 77E8030499B for ; Wed, 3 Sep 2025 13:06:25 +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=1756904787; cv=none; b=kywqc6IPQU/boGqte4z2a8e9BUaaZGKpjbhctYEYE3B4BJeZOgqroeXdprnJi8Or0uv/1oqjmeuJ0FjvED0OarShr2j7B42Kwr2p4JfjjE5c2OXWTGU1IdVA3itSHiuVRCfR2Ooc+zfS5f8xfqiwfNA1kJxzaZ10movoTwxWHXk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756904787; c=relaxed/simple; bh=ZSYgiNmAKV3p8BUF1bCLjSthybct+I4PA/kpVGiQY/I=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=c1AUPGNpG6lPctbGkVRFlBy7+fYkiuCQ8UFOmNBSDrjotgh4sTWwPkyyTWGtmyrKdiz2pHb1lBQkuGKSX1AG8lDFS3dFsHcIfR5pchG8c5VaW1NjXu6hvpIAkuAXRk3SGNHygMxtwzZNJ865o6/ekt7+cW5+i1xtal16BwJTbz0= 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 1utnBl-00006Z-R7; Wed, 03 Sep 2025 15:06:13 +0200 From: Marco Felsch Date: Wed, 03 Sep 2025 15:06:14 +0200 Subject: [PATCH 06/11] 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: <20250903-v6-16-topic-sdma-v1-6-ac7bab629e8b@pengutronix.de> References: <20250903-v6-16-topic-sdma-v1-0-ac7bab629e8b@pengutronix.de> In-Reply-To: <20250903-v6-16-topic-sdma-v1-0-ac7bab629e8b@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 since we want to turn of the IRQs before doing the dma_async_device_unregister(). This removes the last goto error handling within the probe function and further trims the remove() function. Instead of freeing the irq, we can disable it and let the devm-irq do the job to free the irq, since the only purpose was to have the irqs disabled before calling dma_async_device_unregister(). Signed-off-by: Marco Felsch --- drivers/dma/imx-sdma.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/drivers/dma/imx-sdma.c b/drivers/dma/imx-sdma.c index 5a571d3f33158813e0c56484600a49b19a6a72e2..f6bb2f88a62781c0431336c365f= a30c46f1401ad 100644 --- a/drivers/dma/imx-sdma.c +++ b/drivers/dma/imx-sdma.c @@ -2232,6 +2232,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; @@ -2358,10 +2366,12 @@ static int sdma_probe(struct platform_device *pdev) return ret; } =20 + devm_add_action_or_reset(dev, sdma_dma_device_unregister_action, sdma); + 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 spba_bus =3D of_find_compatible_node(NULL, NULL, "fsl,spba-bus"); @@ -2388,11 +2398,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) @@ -2400,8 +2405,6 @@ static void sdma_remove(struct platform_device *pdev) struct sdma_engine *sdma =3D platform_get_drvdata(pdev); int i; =20 - 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.2 From nobody Fri Oct 3 07:42:39 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 8E141304BAA for ; Wed, 3 Sep 2025 13:06:26 +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=1756904788; cv=none; b=p5hvciN8axpwYHSitlVitxC79/QMyi5H6STLV1WeTKHCTrGZv8qAbUCuJwM+NalxqWSH5Btp9mjyTec+V97rB4bGwht60KIi+BybbMErGn7WSXXxyKv/6HwFdekETN/gyepSNWjLR1EWjtKfbLmDDCyObxT7R5/0yxSv6HlATMg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756904788; c=relaxed/simple; bh=37VV1I2Hqg8hD248V3Pbbjkx0VlRNKUxdxIH5c9R6jI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=V2EEgZrSNO4JeJvw2MYyLK2dtyZ9T05jHxOiqRgy7b02dyje4m8jmxzRfcFUvFwUwkrXgX3Xel0unY8AaF67I6t+bJvKfuyRApGlmsCC5jrgJna5qvnX7XXrPIYJMryrZn5CPeL5VfFlpfmbeRY+jrrdv+qn2acXNtuc/THEA9w= 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 1utnBl-00006Z-SZ; Wed, 03 Sep 2025 15:06:13 +0200 From: Marco Felsch Date: Wed, 03 Sep 2025 15:06:15 +0200 Subject: [PATCH 07/11] 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: <20250903-v6-16-topic-sdma-v1-7-ac7bab629e8b@pengutronix.de> References: <20250903-v6-16-topic-sdma-v1-0-ac7bab629e8b@pengutronix.de> In-Reply-To: <20250903-v6-16-topic-sdma-v1-0-ac7bab629e8b@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 Convert the probe function to dev_err_probe() which helps users to identify issues better. Signed-off-by: Marco Felsch Reviewed-by: Frank Li --- drivers/dma/imx-sdma.c | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/drivers/dma/imx-sdma.c b/drivers/dma/imx-sdma.c index f6bb2f88a62781c0431336c365fa30c46f1401ad..e30dd46cf6522ee2aa4d3aca986= 8a01afbd29615 100644 --- a/drivers/dma/imx-sdma.c +++ b/drivers/dma/imx-sdma.c @@ -2255,7 +2255,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) @@ -2272,24 +2272,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 @@ -2330,11 +2330,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); @@ -2361,18 +2361,14 @@ 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 devm_add_action_or_reset(dev, sdma_dma_device_unregister_action, sdma); =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 spba_bus =3D of_find_compatible_node(NULL, NULL, "fsl,spba-bus"); ret =3D of_address_to_resource(spba_bus, 0, &spba_res); --=20 2.47.2 From nobody Fri Oct 3 07:42:39 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 3641C2FCBEB for ; Wed, 3 Sep 2025 13:06:26 +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=1756904789; cv=none; b=UC5y61iAPsUWwzheWk/e3XU4/UseqmFm7oXHFFpCfQVRgp10z0+/KGOs7Nn7GITWuKOO2j4Cb4UmYl7Ld8vW6wqKEv85k2xUAAzxeEpVnDUTIpoNxW937LD645DQ3DTqNSryeBgPxgTpBo1qtKc2rX1PYf7k5kv4g+KWxIqSOsk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756904789; c=relaxed/simple; bh=wK9kqRE+190Nmnm4ozR9PGQi5dhCYAkQNurhvOsKnTQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=EI3+eLEOUFr87RLCbCSIvGnjujrDCSf03oDZ2Fzi2CxOBR4WRrzbV92OBNAxEIc/acqYe+ykN62WE0NZgXwdckO9dpxnR5gajefLEmbvU0wn5EHDFoNUUKF9s0ZvAbznUU8i93xcz3FtJyuu2qiWHu6jf/BZKwRV92aIJrSYhhU= 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 1utnBl-00006Z-U1; Wed, 03 Sep 2025 15:06:13 +0200 From: Marco Felsch Date: Wed, 03 Sep 2025 15:06:16 +0200 Subject: [PATCH 08/11] 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: <20250903-v6-16-topic-sdma-v1-8-ac7bab629e8b@pengutronix.de> References: <20250903-v6-16-topic-sdma-v1-0-ac7bab629e8b@pengutronix.de> In-Reply-To: <20250903-v6-16-topic-sdma-v1-0-ac7bab629e8b@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(). 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. Fixes: 23e118113782 ("dma: imx-sdma: use module_platform_driver for SDMA dr= iver") Signed-off-by: Marco Felsch --- drivers/dma/imx-sdma.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/drivers/dma/imx-sdma.c b/drivers/dma/imx-sdma.c index e30dd46cf6522ee2aa4d3aca9868a01afbd29615..6c6d38b202dd2deffc36b1bd27b= c7c60de3d7403 100644 --- a/drivers/dma/imx-sdma.c +++ b/drivers/dma/imx-sdma.c @@ -2232,6 +2232,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; @@ -2370,6 +2377,8 @@ static int sdma_probe(struct platform_device *pdev) if (ret) return dev_err_probe(dev, ret, "failed to register controller\n"); =20 + devm_add_action_or_reset(dev, sdma_dma_of_dma_controller_unregister_actio= n, sdma); + 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) { --=20 2.47.2 From nobody Fri Oct 3 07:42:39 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 8FA74304BC4 for ; Wed, 3 Sep 2025 13:06:26 +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=1756904788; cv=none; b=jBrhNZXv1pq9BDujoDECa6I+E2lMzHkLLVb3D2icirrPssRm/b7Lo67/vWuysMwNuPHNzqY2D8NoJ+c3ntiTryAipEv8GXYr25mKkcGcR0peynYrHVkScGLTAT1zQKhXrC+bfJNBzzwvGQdeaeTVbhe2lB75J9TCvWUTwAzcRHY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756904788; c=relaxed/simple; bh=dO5AouNWL4aNepxpem6zpAWY9cfFLUMSDdsjvpTHUbY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=NtVG9omP7IwVAWFWjMnv5oHLN2tS3d8sp9M3OqVIInRI7QI92ThyqivPGtemXH432GhQ26WtwLugtBSaga64/cyT2Jp2Dg2OqFw/2TRX8F1Ek4uWiQHqf8b/ylHFDP5l+d0rSRZXfIDDrLCb09AKSFb/Bjqf8uf0jIY+hIEJLCQ= 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 1utnBl-00006Z-Vo; Wed, 03 Sep 2025 15:06:13 +0200 From: Marco Felsch Date: Wed, 03 Sep 2025 15:06:17 +0200 Subject: [PATCH 09/11] dmaengine: add support for device_link 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: <20250903-v6-16-topic-sdma-v1-9-ac7bab629e8b@pengutronix.de> References: <20250903-v6-16-topic-sdma-v1-0-ac7bab629e8b@pengutronix.de> In-Reply-To: <20250903-v6-16-topic-sdma-v1-0-ac7bab629e8b@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 support to create device_links between dmaengine suppliers and the dma consumers. This shifts the device dep-chain teardown/bringup logic to the driver core. Moving this to the core allows the dmaengine drivers to simplify the .remove() hooks and also to ensure that no dmaengine driver is ever removed before the consumer is removed. Signed-off-by: Marco Felsch --- drivers/dma/dmaengine.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/dma/dmaengine.c b/drivers/dma/dmaengine.c index 758fcd0546d8bde8e8dddc6039848feeb1e24475..a50652bc70b8ce9d4edabfaa781= b3432ee47d31e 100644 --- a/drivers/dma/dmaengine.c +++ b/drivers/dma/dmaengine.c @@ -817,6 +817,7 @@ struct dma_chan *dma_request_chan(struct device *dev, c= onst char *name) struct fwnode_handle *fwnode =3D dev_fwnode(dev); struct dma_device *d, *_d; struct dma_chan *chan =3D NULL; + struct device_link *dl; =20 if (is_of_node(fwnode)) chan =3D of_dma_request_slave_channel(to_of_node(fwnode), name); @@ -858,6 +859,13 @@ struct dma_chan *dma_request_chan(struct device *dev, = const char *name) /* No functional issue if it fails, users are supposed to test before use= */ #endif =20 + dl =3D device_link_add(dev, chan->device->dev, DL_FLAG_AUTOREMOVE_CONSUME= R); + if (!dl) { + dev_err(dev, "failed to create device link to %s\n", + dev_name(chan->device->dev)); + return ERR_PTR(-EINVAL); + } + chan->name =3D kasprintf(GFP_KERNEL, "dma:%s", name); if (!chan->name) return chan; --=20 2.47.2 From nobody Fri Oct 3 07:42:39 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 1024E3054D6 for ; Wed, 3 Sep 2025 13:06:27 +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=1756904789; cv=none; b=D2esa2lnkNgjE5nhWD943uAqk/GnRCqowCHRT4Grch3OGSI6i3Q+t+NJfkG0RVlEvPm9ASEJDVIjGFAPAYSi+OGB7hT7Rh2CHOgkmHchx/YfFqCvSlkC2krsNu5xltagubzB7sAw+7E+srXxwISyGI5q3qRLYVn/lwcsi2EdT40= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756904789; c=relaxed/simple; bh=XDKPHV75wgIjXXUhw4V5YtDkPybmhaqtXj422XNlmpk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=i7TWyyds3hFVGGjIU6hbW1wI5TKRgwjxE6+A2UunT8o8ZbSNcdoWvVxHHi2d9fz4WsM7Mv7mM/3MbnhCdxD0kdcfiacN2PVL1oiytuIdVs5Nc9vT9fu2zC2gD0Xfg37/1Oo8Rpg3grxFVnOmJZxetv45MC4BkudoZqptcDZV2yE= 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 1utnBm-00006Z-1K; Wed, 03 Sep 2025 15:06:14 +0200 From: Marco Felsch Date: Wed, 03 Sep 2025 15:06:18 +0200 Subject: [PATCH 10/11] dmaengine: imx-sdma: drop remove callback 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: <20250903-v6-16-topic-sdma-v1-10-ac7bab629e8b@pengutronix.de> References: <20250903-v6-16-topic-sdma-v1-0-ac7bab629e8b@pengutronix.de> In-Reply-To: <20250903-v6-16-topic-sdma-v1-0-ac7bab629e8b@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 The whole driver was converted to the devm APIs except for this last for-loop. This loop is buggy due to three reasons: 1) It removes the channels without removing the users first. This can lead to very bad situations. 2) The loop starts at 0 and which is channel0 which is a special control channel not registered via vchan_init(). Therefore the remove() always Oops because of NULL pointer exception. 3) sdma_free_chan_resources() disable the clks unconditional without checking if the clks are enabled. This is done for all MAX_DMA_CHANNELS which hang the system if there is at least one unused channel. Since the dmaengine core supports devlinks we already addressed the first issue. The devlink support also addresses the third issue because during the consumer teardown phase each requested channel is dropped accordingly so the dmaengine driver doesn't need to this. The second issue is fixed by not doing anything on channel0. To sum-up, all issues are fixed by dropping the .remove() callback and let the frameworks do their job. Signed-off-by: Marco Felsch Reviewed-by: Frank Li --- drivers/dma/imx-sdma.c | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/drivers/dma/imx-sdma.c b/drivers/dma/imx-sdma.c index 6c6d38b202dd2deffc36b1bd27bc7c60de3d7403..c31785977351163d6fddf4d8b2f= 90dfebb508400 100644 --- a/drivers/dma/imx-sdma.c +++ b/drivers/dma/imx-sdma.c @@ -2405,25 +2405,11 @@ static int sdma_probe(struct platform_device *pdev) return 0; } =20 -static void sdma_remove(struct platform_device *pdev) -{ - struct sdma_engine *sdma =3D platform_get_drvdata(pdev); - int i; - - /* Kill the tasklet */ - for (i =3D 0; i < MAX_DMA_CHANNELS; i++) { - struct sdma_channel *sdmac =3D &sdma->channel[i]; - - sdma_free_chan_resources(&sdmac->vc.chan); - } -} - static struct platform_driver sdma_driver =3D { .driver =3D { .name =3D "imx-sdma", .of_match_table =3D sdma_dt_ids, }, - .remove =3D sdma_remove, .probe =3D sdma_probe, }; =20 --=20 2.47.2 From nobody Fri Oct 3 07:42:39 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 3E79F30505B for ; Wed, 3 Sep 2025 13:06:27 +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=1756904789; cv=none; b=gc2urVymUhIsSJvMkzVpJfi4lGUNaMVf4stpt5FIhqJwK5ZdpkzEvGLqGvIDUkbpFV0nmU65Q56Z+Uc31s/YCW2eGfjOkZvShmFbY+GS1MnX1OK8ZSqB0qIrN0/V2pyHyAMLMV9ZGl/jvOhD+Jdn0yyJqQ3mw8LbjeV2pUrDWCY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756904789; c=relaxed/simple; bh=l+p0YSax35ZqpVK6u/Uh/pohy4HYLDe2vbH2/NkXimo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=lN+Fww331W0m5jE0Fx9kr4q8E7XGXcoTwXVjuHYUy/4eBJgzo3msc0ytPGYt5X1CjkSH8dlsHkjzwHCbOOR+Ru6cJTAgQ7uMXB1a/f9sNMkl3kyZcpydM6OlR4RXHpt48+jAPlbG1R68qLW56mJ3eoxSifFqWDSPbCMpJBhxflY= 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 1utnBm-00006Z-2s; Wed, 03 Sep 2025 15:06:14 +0200 From: Marco Felsch Date: Wed, 03 Sep 2025 15:06:19 +0200 Subject: [PATCH 11/11] 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: <20250903-v6-16-topic-sdma-v1-11-ac7bab629e8b@pengutronix.de> References: <20250903-v6-16-topic-sdma-v1-0-ac7bab629e8b@pengutronix.de> In-Reply-To: <20250903-v6-16-topic-sdma-v1-0-ac7bab629e8b@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 | 56 ++++++++++++++++++++++++++++++++++------------= ---- 1 file changed, 38 insertions(+), 18 deletions(-) diff --git a/drivers/dma/imx-sdma.c b/drivers/dma/imx-sdma.c index c31785977351163d6fddf4d8b2f90dfebb508400..3ef415aa578a96e35a969ac2488= d08bcab9fadc3 100644 --- a/drivers/dma/imx-sdma.c +++ b/drivers/dma/imx-sdma.c @@ -461,6 +461,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 +536,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 +1236,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 +1261,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 +1445,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 +1550,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 +1862,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 +1893,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 @@ -2251,11 +2281,9 @@ static int sdma_probe(struct platform_device *pdev) { struct device *dev =3D &pdev->dev; struct device_node *np =3D 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; @@ -2379,14 +2407,6 @@ static int sdma_probe(struct platform_device *pdev) =20 devm_add_action_or_reset(dev, sdma_dma_of_dma_controller_unregister_actio= n, sdma); =20 - 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); - /* * Because that device tree does not encode ROM script address, * the RAM script in firmware is mandatory for device tree --=20 2.47.2