From nobody Fri Apr 3 16:01:28 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 15CDB242D70; Tue, 24 Mar 2026 08:23:50 +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=1774340631; cv=none; b=EoW7aiYFexs6p/u7WVT1lQVThbuWPd5oKEvZo4FCREeTdMWCi+jwlBOgDyTjIF29aWmJOsF6Y+15skZPGXmrq1KaiUv5BK973DZnYYtRbSvQfguLtia+N6yjkzPvwIruyEFUazc2nYXVhFmJCzA/Ti4z9xsMsHoZa8F0uEJnbDs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774340631; c=relaxed/simple; bh=RvljTYU5d8WDlmSw0H+HgYtGCn3oPYpDa9eMKvKBYvE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=M04SoCuNyurLz6Pb2O0yW6s7pafdHfmdvD/BqY8CanTf2P5KqwwjX0pM3sxtrwqW0llvp8b2w6FdoQi7QhWcSilaHDocoEJD7BPBl+AoXYRtypDSBsDAmQ5Q6LZ4jZnMqDFiGmSIn1WiAjig9Xam+0tndrJDKTbgbyKB6YvjE8E= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=qH/R0Lrw; 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="qH/R0Lrw" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8022EC19424; Tue, 24 Mar 2026 08:23:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1774340630; bh=RvljTYU5d8WDlmSw0H+HgYtGCn3oPYpDa9eMKvKBYvE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=qH/R0Lrw0QYesJMokvLgB0dl0J7gfN22JUBVDPwKRaIvqsrl2sM8tv54Wj3Nby3K6 q5dlU2fAxDIbKPwr7jP/wGLJ2vtCufZZ2W/2HA3LR8OXOuNygyEuZrx75L8pVWVhd9 fjuQ3MBcpJBxsly7PYZ4jae8Gtxjkv7NE4mI/t4zlTAKnUjj4Zl/CUadUNF6DhUGE6 ZOpGz/OPdbl5B2Eg6CajteZG0Q+5JjDsif/VmyJhcvuOV4cJRJyRZJtOuGwf9l7hmu go4kUgF7Ue2vlpQVewAYJcvKwzjM+5Lw3jMNAS4tSv8x+cgU8MTAGiFmE5Na/H5dGl N9joSy4zNN7Bg== Received: from johan by xi.lan with local (Exim 4.98.2) (envelope-from ) id 1w4x3E-00000003mQC-1IMP; Tue, 24 Mar 2026 09:23:48 +0100 From: Johan Hovold To: Mark Brown Cc: Frank Li , Sascha Hauer , Heiko Stuebner , Laxman Dewangan , Marc Kleine-Budde , linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org, Johan Hovold , stable@vger.kernel.org Subject: [PATCH v2 1/5] spi: imx: fix use-after-free on unbind Date: Tue, 24 Mar 2026 09:23:22 +0100 Message-ID: <20260324082326.901043-2-johan@kernel.org> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260324082326.901043-1-johan@kernel.org> References: <20260324082326.901043-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 Acked-by: Marc Kleine-Budde Signed-off-by: Johan Hovold --- 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 16:01:28 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 47FBD390C95; Tue, 24 Mar 2026 08:23:51 +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=1774340631; cv=none; b=GNvTLU23BgQP2xxi7tsTN2raoTTcW+I3MLM18zGVK1ifR0Ui4rDsrteFdnxXDM2UNrmjnJg2lBFbT6k+75nU32Ebs0d4FzXgvUkmoqyy/znytU1jC3uDZHKWMNUT7KzFfV5LyEf336pUtrsVxZpy75unEHG48hizC3ZRNpEahxs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774340631; c=relaxed/simple; bh=k3YtsUOZ02FudyzraP3IJRi+FC88W1D4DLa4KDfOTDY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=rxwjLYkn0R1WmG7Ian+e6fifRQPnYw9HmXfCi+FrFYyNlLraB7iNiWm8eOXpY5xDvBZCxvRZQOKp6RP4tjcn0gxiLrL6lbMRqrmwYTvOhM/g2tPcpoJk0W6tOJtqBpw4y3dGbS93ePVnQywfYxvGtJhbJNToQJNoM6LFLD/IrSQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=l3ft6Tf2; 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="l3ft6Tf2" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 95F84C2BCB4; Tue, 24 Mar 2026 08:23:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1774340630; bh=k3YtsUOZ02FudyzraP3IJRi+FC88W1D4DLa4KDfOTDY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=l3ft6Tf20pZaf/bAr/pt+6rq8cuNfY2CE7Q0miiUhYO8kKyYv76tgy/UvxbsVS8q5 HHcfCnnM90nGytDuQrQX0NErGLfPkEWk/EstbhrpnYGX8iVJLghN+nDoFqbc/BgSCW zdE7S3iP4o8urBlJyE3EXg2GL28DGET0zBqlv1mSNH6DIesJlpLrIZqaQtv/XXP/bE HMGnC29ublElFNAaY2ZgHcOtdk9R6P73Yp5Zr8TgEp5Ra5WC8Bby0TUhtn2EFXvmLQ M0UzicKnYqWJuk3cs+xznSPrL+bTkRAowdb58/2dKs6b3tJMZzNy5hF23EhySTctcF D4i1tsr9tzlBg== Received: from johan by xi.lan with local (Exim 4.98.2) (envelope-from ) id 1w4x3E-00000003mQE-1Kq7; Tue, 24 Mar 2026 09:23:48 +0100 From: Johan Hovold To: Mark Brown Cc: Frank Li , Sascha Hauer , Heiko Stuebner , Laxman Dewangan , Marc Kleine-Budde , linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org, Johan Hovold , stable@vger.kernel.org, addy ke Subject: [PATCH v2 2/5] spi: rockchip: fix controller deregistration Date: Tue, 24 Mar 2026 09:23:23 +0100 Message-ID: <20260324082326.901043-3-johan@kernel.org> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260324082326.901043-1-johan@kernel.org> References: <20260324082326.901043-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") Cc: stable@vger.kernel.org # 3.17 Cc: addy ke 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 16:01:28 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 1381D367F3B; Tue, 24 Mar 2026 08:23:50 +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=1774340631; cv=none; b=oKAEfjMjioxnuLl75ad29A628fbMoQiVVLMDp3t5AsKS7baUXnKNqwwyiYuKcxyiw2hCLsz1FZWNdJMBp+gLP21SoJ5I/74F2mO0pvLh1tQDB7hsSQM1EOMSFRX4KgoybDQ3eVaybkhdcHGrTYA70g4rtuZhuvoQ1OLepWq55sg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774340631; c=relaxed/simple; bh=zfb0tGDWInGpIdZ033w7Mc3V9tJctj5+EAPSBqUzxMQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=OWE2wJok2PtF0UdMGV8WCpDC8u6gmRcVQrS8QatCjb8KX9xZ8njKeQLWb8qYYL9Yraxzz5ypzyif9IFw+BcxCw0t8EZS8DuEUdjPhrTqHiKWfi99du/PcA/K70mKnjmWpJS0cCGIg4VxOHsN+C/RF9zd1Cxo1PQCHCIJZRtjyfw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ZpkEQram; 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="ZpkEQram" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8A86AC2BCB5; Tue, 24 Mar 2026 08:23:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1774340630; bh=zfb0tGDWInGpIdZ033w7Mc3V9tJctj5+EAPSBqUzxMQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ZpkEQramLUaMF+12j3g7VkcnpicWLdMpirC8/7TGGlFwT0RkVrHBVqnZHBKIHvV0G g2SMIKU3rPzkIAM4xGO7/+Z+KHlhyhvInqm7YhaXAHbvLblWqzOTsYkzzc0LcP/Ybg yRAiSg3ext6EiAHjAJ50mWoW+TiyPOKJxfy5rUutGs+zbI6I80zOwCUbLCVcMA+6Y4 Af6VHA8xG8F9yIEEU3/AUfjZhTtQfvJeHwS3D3yAdzWkpmADkcyeAoEagYf6gSQ/7Q GHOHCIU4jkI6luXBysmnzrLZjH+/Slfmmgntv6mXtJ1gGiSuccd0qOp8f3ZE0NZX9P OrcbjQumsPsdQ== Received: from johan by xi.lan with local (Exim 4.98.2) (envelope-from ) id 1w4x3E-00000003mQG-1NBF; Tue, 24 Mar 2026 09:23:48 +0100 From: Johan Hovold To: Mark Brown Cc: Frank Li , Sascha Hauer , Heiko Stuebner , Laxman Dewangan , Marc Kleine-Budde , linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org, Johan Hovold Subject: [PATCH v2 3/5] spi: imx: switch to managed controller allocation Date: Tue, 24 Mar 2026 09:23:24 +0100 Message-ID: <20260324082326.901043-4-johan@kernel.org> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260324082326.901043-1-johan@kernel.org> References: <20260324082326.901043-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 16:01:28 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 1394236CE19; Tue, 24 Mar 2026 08:23:50 +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=1774340631; cv=none; b=liPmW4jY/4TVF404Q6LUCXPmN1/1zMyDCT8fATrnpINgiTVO7xMfMcydCyTwke8vIA6yo4RX3ft33QYwpN2K6txfPZ37oMhTu77sBIRrI/Evvqpn5iPS1rJLbS0s6tBaloBbQ5DkLbdEwHWnobohVRQYJUCMSf+lTS9gRVaG508= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774340631; c=relaxed/simple; bh=67pnIC+A2geoNacxUmxh6sPMQbZzlDjvy4uNoR1sE/4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=VUgA9ZsNoGgQeFpsNDjy1ZqiTfbTNVksY0mR7+2pTtpX9d7YJXO8VcwzxTAl67JXI9uXWf3QV8jfPZ3oSVYVx8W2MgDWk5t2cu8DSFwL7VqupabLMA6Spt1Aoexo0dqg0Xq3Pox9bOawegDrPNGkxR4coBJROGe3ruNXTWLdUqA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=RXi565sw; 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="RXi565sw" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 85EF8C2BCB3; Tue, 24 Mar 2026 08:23:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1774340630; bh=67pnIC+A2geoNacxUmxh6sPMQbZzlDjvy4uNoR1sE/4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=RXi565swY7iEfbsqZ6sRInRNWbsj875aYEUolSA1NtoEW2wXEQlakVzwzX+IgYFAt ciKxDXOXHjSJElD+cH71BwDRuzELYiwwzYE4QZXUv02hh0CDtr1RO3TpdCW4L+L/+6 dmtE9BaRaYBHJmMXfcfKND3h9hmn4MsSVmqlTSiUy+zkb/itB/bLRXzdKIIaAvg23V NCbe1za6tPwIsYvFPdSDbgFbgCsnXHyasK+e9sE1MHqp07KDFtGKCWDB+PGkBHAIW0 gRwBIgygMyM15TMaNHhq/XNBOJZJD9gQY6RSYWVNaLWkrA8pmd8ikSS4ZV7hT5pHzD g1fhZleLw518Q== Received: from johan by xi.lan with local (Exim 4.98.2) (envelope-from ) id 1w4x3E-00000003mQI-1PSh; Tue, 24 Mar 2026 09:23:48 +0100 From: Johan Hovold To: Mark Brown Cc: Frank Li , Sascha Hauer , Heiko Stuebner , Laxman Dewangan , Marc Kleine-Budde , linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org, Johan Hovold Subject: [PATCH v2 4/5] spi: tegra20-slink: switch to managed controller allocation Date: Tue, 24 Mar 2026 09:23:25 +0100 Message-ID: <20260324082326.901043-5-johan@kernel.org> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260324082326.901043-1-johan@kernel.org> References: <20260324082326.901043-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 16:01:28 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 CB7AA38C2CA; Tue, 24 Mar 2026 08:23:50 +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=1774340630; cv=none; b=jmr3QEQ9rH8eOCw3NmCBzAOC1TsZ3s77qYNiMErZwvPhFWCdxOAQ70R63wSFIRrgumv3TsvOYFH9bCGEUrNv0ndXxAWcV/mj4lwnO21NzBl8RJkPckLJfOFu6rveNsMytmAVrVc2mpJ9Zz9Pc73QlU8YhDLxN8AeMgCeLcqX7sI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774340630; c=relaxed/simple; bh=VARrRBCImFUXBLN3AofHXXDlpxj1GOHl1SFpB9FPolM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=rWb6ZT16TVfmZL9i0/qovehcjgmzye0LW5iwfkVKuMaRLN4TRdON3zcua1rzbrFTaprD0JOjwivOSB2HT+DVWQYU67DNMIyLagGHIeidqJCmomu97Tem7rvhHPvEZynbDFfCyZdnQkRIv5LzMVg0TIgk7nHrSPl/QqaKGQtLNtA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ltsWJ+1o; 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="ltsWJ+1o" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 839B3C2BC9E; Tue, 24 Mar 2026 08:23:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1774340630; bh=VARrRBCImFUXBLN3AofHXXDlpxj1GOHl1SFpB9FPolM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ltsWJ+1oll9d3qAwfmY3Ih5OZTJpV+A5EY++Pm1mjoI2od6aAeIjhlfV67e3+o0vX ylNeb5q9eXIZpjMpxbTed7/FmDqp5R29ZClkzU2b5BncvmK5cZ2giYPUEyW/L8bzrK 1Gh0+KGChFGZnxno0yWLPKb4Mn7JzjZXCwkFQ5jhRvzcyF4aS+y9Z3OmFNsJ2VQOuK Y6wS/Rgdd1CMGSIVdx+X+kHTjr5In6BgX/TAmgQgpaCK6P8XY3N24X1AGqjRf46E9J YKaTMAKi3Xr5OcUeVaFCdfWCtj6yn0rzhpsPxEgWNS2IakqweNNUqMEQkJObKE8y26 glQWdDcV/Wx8A== Received: from johan by xi.lan with local (Exim 4.98.2) (envelope-from ) id 1w4x3E-00000003mQL-1Rba; Tue, 24 Mar 2026 09:23:48 +0100 From: Johan Hovold To: Mark Brown Cc: Frank Li , Sascha Hauer , Heiko Stuebner , Laxman Dewangan , Marc Kleine-Budde , linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org, Johan Hovold Subject: [PATCH v2 5/5] spi: rockchip: switch to managed controller allocation Date: Tue, 24 Mar 2026 09:23:26 +0100 Message-ID: <20260324082326.901043-6-johan@kernel.org> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260324082326.901043-1-johan@kernel.org> References: <20260324082326.901043-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