From nobody Fri Apr 3 20:51:57 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 06AA139185C; Mon, 23 Mar 2026 10:50:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774263001; cv=none; b=IiSbtK92XfV8WWnf3pvIPMpGzsgJJv6UXJgswvmDssS6riO8HznrNCB+CgOED1T7DFAd3qbPG1HYWVSIysH3u1RE7r/EJEilc2+iYOzTBnb1KkVlcH7xkNLLss/TDJw+5qIiyRSrOlfBD4POEfAfTXiBXLyafV5fA7cmrhQqzIQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774263001; c=relaxed/simple; bh=64eGly1DBdIY4wQ+lw/es7xm3jGmQgoJsTMHjjplrB0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=LMrzN8GNr6UwDTpwpv306eflVwBN7703FywP/bTSGcwKsI2QUL4IKcGbpoNrkH2/JDkC5l4emsOO518/shiq40BvCtf2sXmC4BwhJDHmV5hYngcizTIjjHRKdMWMt8SXvxgb+Apn9Shct2rQT5nF/L38902b6S4/akScq+GIgPc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=IdtAkPGC; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="IdtAkPGC" Received: by smtp.kernel.org (Postfix) with ESMTPSA id B8ACAC2BCB4; Mon, 23 Mar 2026 10:50:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1774263000; bh=64eGly1DBdIY4wQ+lw/es7xm3jGmQgoJsTMHjjplrB0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=IdtAkPGC6x41DpxCgQPUGfbNEc42m140drpyuCj2R9CcSZYhJltdo/2ExuyxScTcd mCDgk1B6VfxJgBt3L3Wo2wJRsvF0f9XcnQq3S7U+lZS4+c2P09MKPZrw4D8A681Ig2 +wLRP2dPzAfhxUDVVzoYPAWJvTL+wkhW2SOqf2IbHI1mNJSVPWCooNIIhEl6N+rgc8 gg/1eeAMn6SELJIpPPCFqWLszubBWR/CgTDH9yGXCt2w7xtCBBe/sQ1qS4160uYx7d sNaL/4m2dt0im2o0gvDYoLvD8TpoVvGWR0o0HNhordV69fc+zTcGJNKBBuLVxiowTw NkSobkiwC79JQ== Received: from johan by xi.lan with local (Exim 4.98.2) (envelope-from ) id 1w4cr8-00000003Xim-1WsK; Mon, 23 Mar 2026 11:49:58 +0100 From: Johan Hovold To: Mark Brown Cc: Frank Li , Sascha Hauer , Heiko Stuebner , Laxman Dewangan , linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org, Johan Hovold , stable@vger.kernel.org, Marc Kleine-Budde Subject: [PATCH 1/5] spi: imx: fix use-after-free on unbind Date: Mon, 23 Mar 2026 11:49:44 +0100 Message-ID: <20260323104948.844583-2-johan@kernel.org> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260323104948.844583-1-johan@kernel.org> References: <20260323104948.844583-1-johan@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The SPI subsystem frees the controller and any subsystem allocated driver data as part of deregistration (unless the allocation is device managed). Take another reference before deregistering the controller so that the driver data is not freed until the driver is done with it. Fixes: 307c897db762 ("spi: spi-imx: replace struct spi_imx_data::bitbang by= pointer to struct spi_controller") Cc: stable@vger.kernel.org # 5.19 Cc: Marc Kleine-Budde Signed-off-by: Johan Hovold Acked-by: Marc Kleine-Budde --- drivers/spi/spi-imx.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/spi/spi-imx.c b/drivers/spi/spi-imx.c index 64c6c09e1e7b..a8d90c86a8a1 100644 --- a/drivers/spi/spi-imx.c +++ b/drivers/spi/spi-imx.c @@ -2401,6 +2401,8 @@ static void spi_imx_remove(struct platform_device *pd= ev) struct spi_imx_data *spi_imx =3D spi_controller_get_devdata(controller); int ret; =20 + spi_controller_get(controller); + spi_unregister_controller(controller); =20 ret =3D pm_runtime_get_sync(spi_imx->dev); @@ -2414,6 +2416,8 @@ static void spi_imx_remove(struct platform_device *pd= ev) pm_runtime_disable(spi_imx->dev); =20 spi_imx_sdma_exit(spi_imx); + + spi_controller_put(controller); } =20 static int spi_imx_runtime_resume(struct device *dev) --=20 2.52.0 From nobody Fri Apr 3 20:51:57 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 06B7D39185D; Mon, 23 Mar 2026 10:50:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774263001; cv=none; b=OG4oZLzxubGxmDXoatlQHP8r78ZTv8OR2pX0tz8/LhlFXLSe3B5kwa5IvucvSIQNbBFEHISN3U7k3G2LGaZ8Ku2wA0b6Rj0ey9OD1kEvW4yrrfOstpaox1IYA6eO9fm1GGj2Drd+DUgHdDYgBX3p3oIvCx8yf3yDkm2Lnq2rHRs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774263001; c=relaxed/simple; bh=zfb0tGDWInGpIdZ033w7Mc3V9tJctj5+EAPSBqUzxMQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=LpYmHlNcvtORLlVn4a5iZoItcbwbeC0nKqhZKiCoepUmM/hlHFpJIRtv6xcyaJETHXuac/Iv1Z2a0IV8EFz+pl198WU5Mnovf3uo92cOVPhfF7WQVRJUkQA3KiZ04i2OJ9+uofm2q32Rn6PNGbMIQNR3r60ixE+IbIPpX2Ct4OE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=lM+deHvV; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="lM+deHvV" Received: by smtp.kernel.org (Postfix) with ESMTPSA id B42FAC2BC87; Mon, 23 Mar 2026 10:50:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1774263000; bh=zfb0tGDWInGpIdZ033w7Mc3V9tJctj5+EAPSBqUzxMQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=lM+deHvVMsb5p15Rcodqs3st9C4TCzSTyfZ1fc5+kSjccvB0qCUWOK9r6ttfQdKMf gr2byY6MykA+H/ryJ0PldAZb4rATpd5/2Y8MnWqMemjRmMc+ju7xZbuVoBBgg4Dh+D OYrcFuwN0V/KDp0qgpdPF8TeI0N/uhEDv9sR50uTmL/TyHimajytO08oGgD2pyndMt K9tcUQqt+2S+ETRwaeMsk9ViMhPkcHD+6j33lTKxRSzft6qL9KPMwY78Ckk/VA7KNR 3zdyfZ2eeVIL2FvzGAiTqtQAcWUa+64DS3XqYMdiGy4EbgHaFMi05w7qgnrLdOr2l8 1324s89q37tsQ== Received: from johan by xi.lan with local (Exim 4.98.2) (envelope-from ) id 1w4cr8-00000003Xio-1ZDt; Mon, 23 Mar 2026 11:49:58 +0100 From: Johan Hovold To: Mark Brown Cc: Frank Li , Sascha Hauer , Heiko Stuebner , Laxman Dewangan , linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org, Johan Hovold Subject: [PATCH 2/5] spi: imx: switch to managed controller allocation Date: Mon, 23 Mar 2026 11:49:45 +0100 Message-ID: <20260323104948.844583-3-johan@kernel.org> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260323104948.844583-1-johan@kernel.org> References: <20260323104948.844583-1-johan@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Switch to device managed controller allocation to simplify error handling and to avoid having to take another reference during deregistration. Signed-off-by: Johan Hovold --- drivers/spi/spi-imx.c | 45 ++++++++++++++----------------------------- 1 file changed, 14 insertions(+), 31 deletions(-) diff --git a/drivers/spi/spi-imx.c b/drivers/spi/spi-imx.c index a8d90c86a8a1..4747899e0646 100644 --- a/drivers/spi/spi-imx.c +++ b/drivers/spi/spi-imx.c @@ -2231,11 +2231,9 @@ static int spi_imx_probe(struct platform_device *pde= v) target_mode =3D devtype_data->has_targetmode && of_property_read_bool(np, "spi-slave"); if (target_mode) - controller =3D spi_alloc_target(&pdev->dev, - sizeof(struct spi_imx_data)); + controller =3D devm_spi_alloc_target(&pdev->dev, sizeof(*spi_imx)); else - controller =3D spi_alloc_host(&pdev->dev, - sizeof(struct spi_imx_data)); + controller =3D devm_spi_alloc_host(&pdev->dev, sizeof(*spi_imx)); if (!controller) return -ENOMEM; =20 @@ -2304,40 +2302,31 @@ static int spi_imx_probe(struct platform_device *pd= ev) init_completion(&spi_imx->xfer_done); =20 spi_imx->base =3D devm_platform_get_and_ioremap_resource(pdev, 0, &res); - if (IS_ERR(spi_imx->base)) { - ret =3D PTR_ERR(spi_imx->base); - goto out_controller_put; - } + if (IS_ERR(spi_imx->base)) + return PTR_ERR(spi_imx->base); + spi_imx->base_phys =3D res->start; =20 irq =3D platform_get_irq(pdev, 0); - if (irq < 0) { - ret =3D irq; - goto out_controller_put; - } + if (irq < 0) + return irq; =20 ret =3D devm_request_irq(&pdev->dev, irq, spi_imx_isr, 0, dev_name(&pdev->dev), spi_imx); - if (ret) { - dev_err(&pdev->dev, "can't get irq%d: %d\n", irq, ret); - goto out_controller_put; - } + if (ret) + return dev_err_probe(&pdev->dev, ret, "can't get irq%d\n", irq); =20 spi_imx->clk_ipg =3D devm_clk_get(&pdev->dev, "ipg"); - if (IS_ERR(spi_imx->clk_ipg)) { - ret =3D PTR_ERR(spi_imx->clk_ipg); - goto out_controller_put; - } + if (IS_ERR(spi_imx->clk_ipg)) + return PTR_ERR(spi_imx->clk_ipg); =20 spi_imx->clk_per =3D devm_clk_get(&pdev->dev, "per"); - if (IS_ERR(spi_imx->clk_per)) { - ret =3D PTR_ERR(spi_imx->clk_per); - goto out_controller_put; - } + if (IS_ERR(spi_imx->clk_per)) + return PTR_ERR(spi_imx->clk_per); =20 ret =3D clk_prepare_enable(spi_imx->clk_per); if (ret) - goto out_controller_put; + return ret; =20 ret =3D clk_prepare_enable(spi_imx->clk_ipg); if (ret) @@ -2389,8 +2378,6 @@ static int spi_imx_probe(struct platform_device *pdev) clk_disable_unprepare(spi_imx->clk_ipg); out_put_per: clk_disable_unprepare(spi_imx->clk_per); -out_controller_put: - spi_controller_put(controller); =20 return ret; } @@ -2401,8 +2388,6 @@ static void spi_imx_remove(struct platform_device *pd= ev) struct spi_imx_data *spi_imx =3D spi_controller_get_devdata(controller); int ret; =20 - spi_controller_get(controller); - spi_unregister_controller(controller); =20 ret =3D pm_runtime_get_sync(spi_imx->dev); @@ -2416,8 +2401,6 @@ static void spi_imx_remove(struct platform_device *pd= ev) pm_runtime_disable(spi_imx->dev); =20 spi_imx_sdma_exit(spi_imx); - - spi_controller_put(controller); } =20 static int spi_imx_runtime_resume(struct device *dev) --=20 2.52.0 From nobody Fri Apr 3 20:51:57 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 069BA39185B; Mon, 23 Mar 2026 10:50:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774263001; cv=none; b=My2s+F857yTtMD9YkcJ1OiCmtKShDlcnGyC7rfI5sbmY96K1u8rFtgCPXQGebIaRY9mMTo/++j3RpAasVl23q1ZemCi9A2A9pNvMtJRmXg0XUDPJwED7v+wxRhrq1n73vljQq1cWD5x+cpoEj09nn1I3jMZ9eX3JuT28ZbVi0s0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774263001; c=relaxed/simple; bh=67pnIC+A2geoNacxUmxh6sPMQbZzlDjvy4uNoR1sE/4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ptNmFr+YavMhVjBni5CKlWVjkYW0g3tBhpm6aRcWv7Tru90ijKVKz86xMCof1jb/iK/6VEqkL+fEguD+2fXDUHoVHkzHMxp10TaJxv8ePdfXqgT0OAM44EaK0TZsEDfZsLouYq9BxXH3ixNAN0HPoaGGbJD9EJI9khhLLOeFB44= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=pq0Xn0+C; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="pq0Xn0+C" Received: by smtp.kernel.org (Postfix) with ESMTPSA id BB174C2BC9E; Mon, 23 Mar 2026 10:50:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1774263000; bh=67pnIC+A2geoNacxUmxh6sPMQbZzlDjvy4uNoR1sE/4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=pq0Xn0+CWpxdyxBK7nMXDmgGee7NHH7NjjNKbyVcUu/tAbrOjg7OidxqAkT9qAm3F HPkTYopOlLKgqRqLgVFAmqw+RAvyTT6JsLy7DEWM6ljdkRxQEZ9rLDWAS344MFqX5X x6n7IMEVfzWUdP5Cu2aR97g0UVRbF0Rfm8UZ/bQSkD83eVVM6SJ0u8yhsVaStAMoE5 93kVB9KHcOMV6KULUsGp8E2c+veOxsWT3AFdotgW8IxOsY/qeYokcqx7sN+tYVpayF wUpo2FkAp9AW7wqmDlliIoNRNO13Py5LbKScRsu4R0JAnkCEr5RSdeQiuFGwUqJbUG gS5D2nFn7hOKQ== Received: from johan by xi.lan with local (Exim 4.98.2) (envelope-from ) id 1w4cr8-00000003Xiq-1bYy; Mon, 23 Mar 2026 11:49:58 +0100 From: Johan Hovold To: Mark Brown Cc: Frank Li , Sascha Hauer , Heiko Stuebner , Laxman Dewangan , linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org, Johan Hovold Subject: [PATCH 3/5] spi: tegra20-slink: switch to managed controller allocation Date: Mon, 23 Mar 2026 11:49:46 +0100 Message-ID: <20260323104948.844583-4-johan@kernel.org> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260323104948.844583-1-johan@kernel.org> References: <20260323104948.844583-1-johan@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Switch to device managed controller allocation to simplify error handling and to avoid having to take another reference during deregistration. Signed-off-by: Johan Hovold --- drivers/spi/spi-tegra20-slink.c | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/drivers/spi/spi-tegra20-slink.c b/drivers/spi/spi-tegra20-slin= k.c index 8c608abd6076..c15c076295cd 100644 --- a/drivers/spi/spi-tegra20-slink.c +++ b/drivers/spi/spi-tegra20-slink.c @@ -1007,7 +1007,7 @@ static int tegra_slink_probe(struct platform_device *= pdev) =20 cdata =3D of_device_get_match_data(&pdev->dev); =20 - host =3D spi_alloc_host(&pdev->dev, sizeof(*tspi)); + host =3D devm_spi_alloc_host(&pdev->dev, sizeof(*tspi)); if (!host) { dev_err(&pdev->dev, "host allocation failed\n"); return -ENOMEM; @@ -1034,37 +1034,34 @@ static int tegra_slink_probe(struct platform_device= *pdev) host->max_speed_hz =3D 25000000; /* 25MHz */ =20 tspi->base =3D devm_platform_get_and_ioremap_resource(pdev, 0, &r); - if (IS_ERR(tspi->base)) { - ret =3D PTR_ERR(tspi->base); - goto exit_free_host; - } + if (IS_ERR(tspi->base)) + return PTR_ERR(tspi->base); + tspi->phys =3D r->start; =20 /* disabled clock may cause interrupt storm upon request */ tspi->clk =3D devm_clk_get(&pdev->dev, NULL); if (IS_ERR(tspi->clk)) { ret =3D PTR_ERR(tspi->clk); - dev_err(&pdev->dev, "Can not get clock %d\n", ret); - goto exit_free_host; + return dev_err_probe(&pdev->dev, ret, "Can not get clock\n"); } =20 tspi->rst =3D devm_reset_control_get_exclusive(&pdev->dev, "spi"); if (IS_ERR(tspi->rst)) { - dev_err(&pdev->dev, "can not get reset\n"); ret =3D PTR_ERR(tspi->rst); - goto exit_free_host; + return dev_err_probe(&pdev->dev, ret, "can not get reset\n"); } =20 ret =3D devm_tegra_core_dev_init_opp_table_common(&pdev->dev); if (ret) - goto exit_free_host; + return ret; =20 tspi->max_buf_size =3D SLINK_FIFO_DEPTH << 2; tspi->dma_buf_size =3D DEFAULT_SPI_DMA_BUF_LEN; =20 ret =3D tegra_slink_init_dma_param(tspi, true); if (ret < 0) - goto exit_free_host; + return ret; ret =3D tegra_slink_init_dma_param(tspi, false); if (ret < 0) goto exit_rx_dma_free; @@ -1125,14 +1122,13 @@ static int tegra_slink_probe(struct platform_device= *pdev) tegra_slink_deinit_dma_param(tspi, false); exit_rx_dma_free: tegra_slink_deinit_dma_param(tspi, true); -exit_free_host: - spi_controller_put(host); + return ret; } =20 static void tegra_slink_remove(struct platform_device *pdev) { - struct spi_controller *host =3D spi_controller_get(platform_get_drvdata(p= dev)); + struct spi_controller *host =3D platform_get_drvdata(pdev); struct tegra_slink_data *tspi =3D spi_controller_get_devdata(host); =20 spi_unregister_controller(host); @@ -1146,8 +1142,6 @@ static void tegra_slink_remove(struct platform_device= *pdev) =20 if (tspi->rx_dma_chan) tegra_slink_deinit_dma_param(tspi, true); - - spi_controller_put(host); } =20 #ifdef CONFIG_PM_SLEEP --=20 2.52.0 From nobody Fri Apr 3 20:51:57 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 0741E391E59; Mon, 23 Mar 2026 10:50:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774263001; cv=none; b=Wt8xhLo/pj7XKsCF00gMZky0dB/Fve2dfURv+lZGTfpGuYE22hZg1ABoWTqw3LPHyeO0tJe2GC3g6JTf9ED2nzg6pWKqonUYPQ2nWAfPJbLtR9elhPJEbfB/o0RbbXM//oHgEylejZz1Nhj9wAYHmKDtMUt9Th+zp5WHI1W3HPk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774263001; c=relaxed/simple; bh=9avy4ppcCMDrHoZeH18htD8v/8YlfQK+8sJuE3Atbi0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=peNIfJGslIWZWaIHIPJ5q7bLpQKj+Eh0N6S7YHapit1alwAVHezBDVvlaKt/SRaGccSEiVtl2n7wxCm6gjnepKZsi4atKS5e3RByicrXexmineEVg20hqTrtk9Sj9fBpFypFty8tQxmhzE4k8UeLVHcphio24SlCG23Zzbc6urY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=vBD9doG8; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="vBD9doG8" Received: by smtp.kernel.org (Postfix) with ESMTPSA id B6611C2BCB1; Mon, 23 Mar 2026 10:50:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1774263000; bh=9avy4ppcCMDrHoZeH18htD8v/8YlfQK+8sJuE3Atbi0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=vBD9doG8Leh8/XOcKN0Fs1G+v1URxOZ+AoEgTfedTBTqoTWEo8xR679NKG4vAomz/ +xoA92izB3krfn4G6xQItIzThkEUsGN66Rs3ii+MTmUUQ8lyBNLR7PcF353QzIhuHO SQVhSxu+Y0mFD2RANyj9vbonSJZIJYdysRlcSNcBgNz0DsM0lSmGZRWWZ65nsRgzuP jjzr8cCyBguVsyh5ryIwDWGVlnBF0WmB/dhnE1T474A7sXThmQKNUkqasdsFnpj1/6 MwNbqJL5UBN18+njL6pXocy71ZMlbRCHU35o9rDOi0YmP8oih1u4rmBFJ7n0oWrnLl batCdJAVNocbw== Received: from johan by xi.lan with local (Exim 4.98.2) (envelope-from ) id 1w4cr8-00000003Xis-1dus; Mon, 23 Mar 2026 11:49:58 +0100 From: Johan Hovold To: Mark Brown Cc: Frank Li , Sascha Hauer , Heiko Stuebner , Laxman Dewangan , linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org, Johan Hovold Subject: [PATCH 4/5] spi: rockchip: fix controller deregistration Date: Mon, 23 Mar 2026 11:49:47 +0100 Message-ID: <20260323104948.844583-5-johan@kernel.org> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260323104948.844583-1-johan@kernel.org> References: <20260323104948.844583-1-johan@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Make sure to deregister the controller before freeing underlying resources like DMA channels during driver unbind. Fixes: 64e36824b32b ("spi/rockchip: add driver for Rockchip RK3xxx SoCs int= egrated SPI") Signed-off-by: Johan Hovold --- drivers/spi/spi-rockchip.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/spi/spi-rockchip.c b/drivers/spi/spi-rockchip.c index fd2ebef4903f..eb1992b4178e 100644 --- a/drivers/spi/spi-rockchip.c +++ b/drivers/spi/spi-rockchip.c @@ -908,7 +908,7 @@ static int rockchip_spi_probe(struct platform_device *p= dev) break; } =20 - ret =3D devm_spi_register_controller(&pdev->dev, ctlr); + ret =3D spi_register_controller(ctlr); if (ret < 0) { dev_err(&pdev->dev, "Failed to register controller\n"); goto err_free_dma_rx; @@ -936,6 +936,8 @@ static void rockchip_spi_remove(struct platform_device = *pdev) =20 pm_runtime_get_sync(&pdev->dev); =20 + spi_unregister_controller(ctlr); + pm_runtime_put_noidle(&pdev->dev); pm_runtime_disable(&pdev->dev); pm_runtime_set_suspended(&pdev->dev); --=20 2.52.0 From nobody Fri Apr 3 20:51:57 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 3520F391E7F; Mon, 23 Mar 2026 10:50:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774263001; cv=none; b=cqybGr+lok5Isn38AKhCuXPOm1RFStCQbnXFCmtBqzcSvNAEx+ZkI0AuvGZhPgex7fUN0ec4x8hEeSjaz/lDdw1knVgdziPr+dyN/1IpmwsdibOwsTAul+Y+6PxiEPOVm24AFcCBc11KgxUAiQ93/m5kVoPxkrhHGq++qJe0N5w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774263001; c=relaxed/simple; bh=VARrRBCImFUXBLN3AofHXXDlpxj1GOHl1SFpB9FPolM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=fbqnu4omNX8ZDhF4FPNyqS4RE7bSnDvg8ELcD+Dr/FZyYKIa+DOJR3zowJx1Kt+RIS9u3yb/980DLXDm3YiRBNlGB+X8xxMuEpTsQKwzmn/HDRQQWuGk7HPXOWG8bf1OtXuf4Kcg7gBCRqQWCCyjE1jlLKXyGbg8peYIi+Tqk1E= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=rRR0b2nH; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="rRR0b2nH" Received: by smtp.kernel.org (Postfix) with ESMTPSA id BD798C2BCB5; Mon, 23 Mar 2026 10:50:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1774263000; bh=VARrRBCImFUXBLN3AofHXXDlpxj1GOHl1SFpB9FPolM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=rRR0b2nH2J7+sVWt5mpJL3F0mhyQlSKTPMy1+LeYa4wCvYsHh2vXMtHfg+mcWhTqA hr7kOjQxmDKCUFI5Ap8SqdQifsuj+9IniZMa9nkB9FZYOK7gS2AxJ5AoSr+aF+L0NQ l0PC97NduE5DD9eYuq7SC5Uvpjd7iPcGhcezkQbBqRH4giUpiU4RVq4xSxDqff+dks iQZii9WuHFHwG6KtB9LBhlaBUfYnOIXO5PhfXa71I1uNKlBqSkDLVG93iizr4+fzK/ undrIpEYhm/XqbJXcF7J7cLPvLWCJmU7IP2+NM8W0UoZJj3GE8hbd6Uh+E1Bet/VoL BAv1AvQuZOzYw== Received: from johan by xi.lan with local (Exim 4.98.2) (envelope-from ) id 1w4cr8-00000003Xiu-1gIr; Mon, 23 Mar 2026 11:49:58 +0100 From: Johan Hovold To: Mark Brown Cc: Frank Li , Sascha Hauer , Heiko Stuebner , Laxman Dewangan , linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org, Johan Hovold Subject: [PATCH 5/5] spi: rockchip: switch to managed controller allocation Date: Mon, 23 Mar 2026 11:49:48 +0100 Message-ID: <20260323104948.844583-6-johan@kernel.org> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260323104948.844583-1-johan@kernel.org> References: <20260323104948.844583-1-johan@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Switch to device managed controller allocation to simplify error handling and to avoid having to take another reference during deregistration. Signed-off-by: Johan Hovold --- drivers/spi/spi-rockchip.c | 36 +++++++++++++----------------------- 1 file changed, 13 insertions(+), 23 deletions(-) diff --git a/drivers/spi/spi-rockchip.c b/drivers/spi/spi-rockchip.c index eb1992b4178e..14cd1b9d9793 100644 --- a/drivers/spi/spi-rockchip.c +++ b/drivers/spi/spi-rockchip.c @@ -767,9 +767,9 @@ static int rockchip_spi_probe(struct platform_device *p= dev) target_mode =3D of_property_read_bool(np, "spi-slave"); =20 if (target_mode) - ctlr =3D spi_alloc_target(&pdev->dev, sizeof(struct rockchip_spi)); + ctlr =3D devm_spi_alloc_target(&pdev->dev, sizeof(*rs)); else - ctlr =3D spi_alloc_host(&pdev->dev, sizeof(struct rockchip_spi)); + ctlr =3D devm_spi_alloc_host(&pdev->dev, sizeof(*rs)); =20 if (!ctlr) return -ENOMEM; @@ -780,35 +780,31 @@ static int rockchip_spi_probe(struct platform_device = *pdev) =20 /* Get basic io resource and map it */ rs->regs =3D devm_platform_get_and_ioremap_resource(pdev, 0, &mem); - if (IS_ERR(rs->regs)) { - ret =3D PTR_ERR(rs->regs); - goto err_put_ctlr; - } + if (IS_ERR(rs->regs)) + return PTR_ERR(rs->regs); =20 rs->apb_pclk =3D devm_clk_get_enabled(&pdev->dev, "apb_pclk"); if (IS_ERR(rs->apb_pclk)) { - ret =3D dev_err_probe(&pdev->dev, PTR_ERR(rs->apb_pclk), - "Failed to get apb_pclk\n"); - goto err_put_ctlr; + return dev_err_probe(&pdev->dev, PTR_ERR(rs->apb_pclk), + "Failed to get apb_pclk\n"); } =20 rs->spiclk =3D devm_clk_get_enabled(&pdev->dev, "spiclk"); if (IS_ERR(rs->spiclk)) { - ret =3D dev_err_probe(&pdev->dev, PTR_ERR(rs->spiclk), - "Failed to get spi_pclk\n"); - goto err_put_ctlr; + return dev_err_probe(&pdev->dev, PTR_ERR(rs->spiclk), + "Failed to get spi_pclk\n"); } =20 spi_enable_chip(rs, false); =20 ret =3D platform_get_irq(pdev, 0); if (ret < 0) - goto err_put_ctlr; + return ret; =20 ret =3D devm_request_irq(&pdev->dev, ret, rockchip_spi_isr, 0, dev_name(&pdev->dev), ctlr); if (ret) - goto err_put_ctlr; + return ret; =20 rs->dev =3D &pdev->dev; rs->freq =3D clk_get_rate(rs->spiclk); @@ -830,10 +826,8 @@ static int rockchip_spi_probe(struct platform_device *= pdev) } =20 rs->fifo_len =3D get_fifo_len(rs); - if (!rs->fifo_len) { - ret =3D dev_err_probe(&pdev->dev, -EINVAL, "Failed to get fifo length\n"= ); - goto err_put_ctlr; - } + if (!rs->fifo_len) + return dev_err_probe(&pdev->dev, -EINVAL, "Failed to get fifo length\n"); =20 pm_runtime_set_autosuspend_delay(&pdev->dev, ROCKCHIP_AUTOSUSPEND_TIMEOUT= ); pm_runtime_use_autosuspend(&pdev->dev); @@ -924,15 +918,13 @@ static int rockchip_spi_probe(struct platform_device = *pdev) dma_release_channel(ctlr->dma_tx); err_disable_pm_runtime: pm_runtime_disable(&pdev->dev); -err_put_ctlr: - spi_controller_put(ctlr); =20 return ret; } =20 static void rockchip_spi_remove(struct platform_device *pdev) { - struct spi_controller *ctlr =3D spi_controller_get(platform_get_drvdata(p= dev)); + struct spi_controller *ctlr =3D platform_get_drvdata(pdev); =20 pm_runtime_get_sync(&pdev->dev); =20 @@ -946,8 +938,6 @@ static void rockchip_spi_remove(struct platform_device = *pdev) dma_release_channel(ctlr->dma_tx); if (ctlr->dma_rx) dma_release_channel(ctlr->dma_rx); - - spi_controller_put(ctlr); } =20 #ifdef CONFIG_PM_SLEEP --=20 2.52.0