FAILED: patch "[PATCH] spi: sifive: fix controller deregistration" failed to apply to 7.0-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 7.0-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-7.0.y
git checkout FETCH_HEAD
git cherry-pick -x 0f25236694a2854627c1597465a071e6bb6fe572
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2026051546-gestation-vessel-153b@gregkh' --subject-prefix 'PATCH 7.0.y' HEAD^..
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 0f25236694a2854627c1597465a071e6bb6fe572 Mon Sep 17 00:00:00 2001
From: Johan Hovold <[email protected]>
Date: Fri, 10 Apr 2026 10:17:44 +0200
Subject: [PATCH] spi: sifive: fix controller deregistration
Make sure to deregister the controller before disabling underlying resources like interrupts during driver unbind.
Note that clocks were also disabled before the recent commit 140039c23aca ("spi: sifive: Simplify clock handling with devm_clk_get_enabled()").
drivers/spi/spi-sifive.c +7 -1
@@ -392,7 +392,7 @@ static int sifive_spi_probe(struct platform_device *pdev)dev_info (&pdev->dev,"mapped; irq=%d, cs=%d\n" , irq, host->num_chipselect); - ret =devm_spi_register_controller (&pdev->dev, host); + ret =spi_register_controller (host);if (ret <0 ) {dev_err (&pdev->dev,"spi_register_host failed\n" ); goto put_host;
@@ -411,8 +411,14 @@ static void sifive_spi_remove(struct platform_device *pdev)struct spi_controller *host =platform_get_drvdata (pdev);struct sifive_spi *spi =spi_controller_get_devdata (host); +spi_controller_get (host); + +spi_unregister_controller (host); +/* Disable all the interrupts just in case */ sifive_spi_write (spi,SIFIVE_SPI_REG_IE ,0 ); + +spi_controller_put (host); }static int sifive_spi_suspend (struct device *dev)
Sasha Levin
maintainerPATCH 1/2 spi: sifive: Simplify clock handling with devm_clk_get_enabled()
From: Pei Xiao <[email protected]>
[ Upstream commit 140039c23aca067b9ff0242e3c0ce96276bb95f3 ]
Replace devm_clk_get() followed by clk_prepare_enable() with devm_clk_get_enabled() for the bus clock. This reduces boilerplate code and error handling, as the managed API automatically disables the clock when the device is removed or if probe fails.
Remove the now-unnecessary clk_disable_unprepare() calls from the probe error path and the remove callback. Adjust the error handling to use the existing put_host label.
Stable-dep-of: 0f25236694a2 ("spi: sifive: fix controller deregistration")
--- drivers/spi/spi-sifive.c | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-)
drivers/spi/spi-sifive.c +6 -15
@@ -312,7 +312,8 @@ static int sifive_spi_probe(struct platform_device *pdev) goto put_host; } - spi->clk =devm_clk_get (&pdev->dev,NULL ); +/* Spin up the bus clock before hitting registers */ + spi->clk =devm_clk_get_enabled (&pdev->dev,NULL );if (IS_ERR (spi->clk)) {dev_err (&pdev->dev,"Unable to find bus clock\n" ); ret =PTR_ERR (spi->clk);
@@ -342,13 +343,6 @@ static int sifive_spi_probe(struct platform_device *pdev) goto put_host; } -/* Spin up the bus clock before hitting registers */ - ret =clk_prepare_enable (spi->clk); -if (ret) { -dev_err (&pdev->dev,"Unable to enable bus clock\n" ); - goto put_host; - } -/* probe the number of CS lines */ spi->cs_inactive =sifive_spi_read (spi,SIFIVE_SPI_REG_CSDEF );sifive_spi_write (spi,SIFIVE_SPI_REG_CSDEF ,0xffffffffU );
@@ -357,14 +351,14 @@ static int sifive_spi_probe(struct platform_device *pdev)if (!cs_bits) {dev_err (&pdev->dev,"Could not auto probe CS lines\n" ); ret = -EINVAL ; - goto disable_clk; + goto put_host; } num_cs =ilog2 (cs_bits) +1 ;if (num_cs >SIFIVE_SPI_MAX_CS ) {dev_err (&pdev->dev,"Invalid number of spi targets\n" ); ret = -EINVAL ; - goto disable_clk; + goto put_host; }/* Define our host */
@@ -392,7 +386,7 @@ static int sifive_spi_probe(struct platform_device *pdev) dev_name(&pdev->dev), spi);if (ret) {dev_err (&pdev->dev,"Unable to bind to interrupt\n" ); - goto disable_clk; + goto put_host; } dev_info(&pdev->dev, "mapped; irq=%d, cs=%d\n",
@@ -401,13 +395,11 @@ static int sifive_spi_probe(struct platform_device *pdev) ret =devm_spi_register_controller (&pdev->dev, host);if (ret <0 ) {dev_err (&pdev->dev,"spi_register_host failed\n" ); - goto disable_clk; + goto put_host; }return 0 ; -disable_clk: -clk_disable_unprepare (spi->clk); put_host:spi_controller_put (host);
@@ -421,7 +413,6 @@ static void sifive_spi_remove(struct platform_device *pdev)/* Disable all the interrupts just in case */ sifive_spi_write (spi,SIFIVE_SPI_REG_IE ,0 ); -clk_disable_unprepare (spi->clk); }static int sifive_spi_suspend (struct device *dev)
Signature · 1 line
2.53.0
Sasha Levin
maintainerPATCH 2/2 spi: sifive: fix controller deregistration
From: Johan Hovold <[email protected]>
[ Upstream commit 0f25236694a2854627c1597465a071e6bb6fe572 ]
Make sure to deregister the controller before disabling underlying resources like interrupts during driver unbind.
Note that clocks were also disabled before the recent commit 140039c23aca ("spi: sifive: Simplify clock handling with devm_clk_get_enabled()").
--- drivers/spi/spi-sifive.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
drivers/spi/spi-sifive.c +7 -1
@@ -392,7 +392,7 @@ static int sifive_spi_probe(struct platform_device *pdev)dev_info (&pdev->dev,"mapped; irq=%d, cs=%d\n" , irq, host->num_chipselect); - ret =devm_spi_register_controller (&pdev->dev, host); + ret =spi_register_controller (host);if (ret <0 ) {dev_err (&pdev->dev,"spi_register_host failed\n" ); goto put_host;
@@ -411,8 +411,14 @@ static void sifive_spi_remove(struct platform_device *pdev)struct spi_controller *host =platform_get_drvdata (pdev);struct sifive_spi *spi =spi_controller_get_devdata (host); +spi_controller_get (host); + +spi_unregister_controller (host); +/* Disable all the interrupts just in case */ sifive_spi_write (spi,SIFIVE_SPI_REG_IE ,0 ); + +spi_controller_put (host); }static int sifive_spi_suspend (struct device *dev)
Signature · 1 line
2.53.0