FAILED: patch "[PATCH] spi: microchip-core-qspi: fix controller deregistration" failed to apply to 6.6-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 6.6-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-6.6.y
git checkout FETCH_HEAD
git cherry-pick -x e6464140d439f2d42f072eb422a5b1fec470c5a6
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2026051251-shrimp-duller-1ca2@gregkh' --subject-prefix 'PATCH 6.6.y' HEAD^..
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From e6464140d439f2d42f072eb422a5b1fec470c5a6 Mon Sep 17 00:00:00 2001
From: Johan Hovold <[email protected]>
Date: Thu, 9 Apr 2026 14:04:17 +0200
Subject: [PATCH] spi: microchip-core-qspi: fix controller deregistration
Make sure to deregister the controller before disabling underlying resources like interrupts during driver unbind.
drivers/spi/spi-microchip-core-qspi.c +8 -4
@@ -692,7 +692,7 @@ static int mchp_coreqspi_probe(struct platform_device *pdev)return -ENOMEM ; qspi =spi_controller_get_devdata (ctlr); -platform_set_drvdata (pdev, qspi); +platform_set_drvdata (pdev, ctlr); qspi->regs =devm_platform_ioremap_resource (pdev,0 );if (IS_ERR (qspi->regs))
@@ -732,7 +732,7 @@ static int mchp_coreqspi_probe(struct platform_device *pdev) ctlr->num_chipselect =2 ; ctlr->use_gpio_descriptors = true; - ret =devm_spi_register_controller (&pdev->dev, ctlr); + ret =spi_register_controller (ctlr);if (ret)return dev_err_probe (&pdev->dev, ret,"spi_register_controller failed\n" );
@@ -742,9 +742,13 @@ static int mchp_coreqspi_probe(struct platform_device *pdev)static void mchp_coreqspi_remove (struct platform_device *pdev) { -struct mchp_coreqspi *qspi =platform_get_drvdata (pdev); -u32 control =readl_relaxed (qspi->regs +REG_CONTROL ); +struct spi_controller *ctlr =platform_get_drvdata (pdev); +struct mchp_coreqspi *qspi =spi_controller_get_devdata (ctlr); +u32 control; +spi_unregister_controller (ctlr); + + control =readl_relaxed (qspi->regs +REG_CONTROL );mchp_coreqspi_disable_ints (qspi); control &= ~CONTROL_ENABLE ;writel_relaxed (control, qspi->regs +REG_CONTROL );
Sasha Levin
maintainerPATCH 1/2 spi: microchip-core-qspi: Use helper function devm_clk_get_enabled()
From: Li Zetao <[email protected]>
[ Upstream commit e922f3fff21445117e9196bd8e940ad8e15ca8c7 ]
Since commit 7ef9651e9792 ("clk: Provide new devm_clk helpers for prepared and enabled clocks"), devm_clk_get() and clk_prepare_enable() can now be replaced by devm_clk_get_enabled() when driver enables (and possibly prepares) the clocks for the whole lifetime of the device. Moreover, it is no longer necessary to unprepare and disable the clocks explicitly.
Stable-dep-of: e6464140d439 ("spi: microchip-core-qspi: fix controller deregistration")
--- drivers/spi/spi-microchip-core-qspi.c | 29 +++++++-------------------- 1 file changed, 7 insertions(+), 22 deletions(-)
drivers/spi/spi-microchip-core-qspi.c +7 -22
@@ -519,30 +519,23 @@ static int mchp_coreqspi_probe(struct platform_device *pdev)return dev_err_probe (&pdev->dev,PTR_ERR (qspi->regs),"failed to map registers\n" ); - qspi->clk =devm_clk_get (&pdev->dev,NULL ); + qspi->clk =devm_clk_get_enabled (&pdev->dev,NULL );if (IS_ERR (qspi->clk))return dev_err_probe (&pdev->dev,PTR_ERR (qspi->clk),"could not get clock\n" ); - ret =clk_prepare_enable (qspi->clk); -if (ret) -return dev_err_probe (&pdev->dev, ret, -"failed to enable clock\n" ); -init_completion (&qspi->data_completion);mutex_init (&qspi->op_lock); qspi->irq =platform_get_irq (pdev,0 ); -if (qspi->irq <0 ) { - ret = qspi->irq; - goto out; - } +if (qspi->irq <0 ) +return qspi->irq; ret =devm_request_irq (&pdev->dev, qspi->irq, mchp_coreqspi_isr,IRQF_SHARED , pdev->name, qspi);if (ret) {dev_err (&pdev->dev,"request_irq failed %d\n" , ret); - goto out; +return ret; } ctlr->bits_per_word_mask =SPI_BPW_MASK (8 );
@@ -553,18 +546,11 @@ static int mchp_coreqspi_probe(struct platform_device *pdev) ctlr->dev.of_node = np; ret =devm_spi_register_controller (&pdev->dev, ctlr); -if (ret) { -dev_err_probe (&pdev->dev, ret, -"spi_register_controller failed\n" ); - goto out; - } +if (ret) +return dev_err_probe (&pdev->dev, ret, +"spi_register_controller failed\n" );return 0 ; - -out: -clk_disable_unprepare (qspi->clk); - -return ret; }static void mchp_coreqspi_remove (struct platform_device *pdev)
@@ -575,7 +561,6 @@ static void mchp_coreqspi_remove(struct platform_device *pdev)mchp_coreqspi_disable_ints (qspi); control &= ~CONTROL_ENABLE ;writel_relaxed (control, qspi->regs +REG_CONTROL ); -clk_disable_unprepare (qspi->clk); }static const struct of_device_id mchp_coreqspi_of_match[] = {
Signature · 1 line
2.53.0
Sasha Levin
maintainerPATCH 2/2 spi: microchip-core-qspi: fix controller deregistration
From: Johan Hovold <[email protected]>
[ Upstream commit e6464140d439f2d42f072eb422a5b1fec470c5a6 ]
Make sure to deregister the controller before disabling underlying resources like interrupts during driver unbind.
--- drivers/spi/spi-microchip-core-qspi.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-)
drivers/spi/spi-microchip-core-qspi.c +8 -4
@@ -512,7 +512,7 @@ static int mchp_coreqspi_probe(struct platform_device *pdev) "unable to allocate master for QSPI controller\n"); qspi =spi_controller_get_devdata (ctlr); -platform_set_drvdata (pdev, qspi); +platform_set_drvdata (pdev, ctlr); qspi->regs =devm_platform_ioremap_resource (pdev,0 );if (IS_ERR (qspi->regs))
@@ -545,7 +545,7 @@ static int mchp_coreqspi_probe(struct platform_device *pdev)SPI_TX_DUAL |SPI_TX_QUAD ; ctlr->dev.of_node = np; - ret =devm_spi_register_controller (&pdev->dev, ctlr); + ret =spi_register_controller (ctlr);if (ret)return dev_err_probe (&pdev->dev, ret,"spi_register_controller failed\n" );
@@ -555,9 +555,13 @@ static int mchp_coreqspi_probe(struct platform_device *pdev)static void mchp_coreqspi_remove (struct platform_device *pdev) { -struct mchp_coreqspi *qspi =platform_get_drvdata (pdev); -u32 control =readl_relaxed (qspi->regs +REG_CONTROL ); +struct spi_controller *ctlr =platform_get_drvdata (pdev); +struct mchp_coreqspi *qspi =spi_controller_get_devdata (ctlr); +u32 control; +spi_unregister_controller (ctlr); + + control =readl_relaxed (qspi->regs +REG_CONTROL );mchp_coreqspi_disable_ints (qspi); control &= ~CONTROL_ENABLE ;writel_relaxed (control, qspi->regs +REG_CONTROL );
Signature · 1 line
2.53.0