lkml.org 
[lkml]   [2020]   [Jun]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Date
    SubjectRe: [PATCH v4 1/4] spi: spi-fsl-dspi: Fix lockup if device is removed during SPI transfer
    On Mon, 22 Jun 2020 at 14:06, Krzysztof Kozlowski <krzk@kernel.org> wrote:
    >
    > During device removal, the driver should unregister the SPI controller
    > and stop the hardware. Otherwise the dspi_transfer_one_message() could
    > wait on completion infinitely.
    >
    > Additionally, calling spi_unregister_controller() first in device
    > removal reverse-matches the probe function, where SPI controller is
    > registered at the end.
    >
    > Fixes: 05209f457069 ("spi: fsl-dspi: add missing clk_disable_unprepare() in dspi_remove()")
    > Cc: <stable@vger.kernel.org>
    > Reported-by: Vladimir Oltean <olteanv@gmail.com>
    > Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>
    >
    > ---

    Reviewed-by: Vladimir Oltean <vladimir.oltean@nxp.com>
    Tested-by: Vladimir Oltean <vladimir.oltean@nxp.com>

    >
    > Changes since v3:
    > 1. New patch.
    > ---
    > drivers/spi/spi-fsl-dspi.c | 11 ++++++++++-
    > 1 file changed, 10 insertions(+), 1 deletion(-)
    >
    > diff --git a/drivers/spi/spi-fsl-dspi.c b/drivers/spi/spi-fsl-dspi.c
    > index 58190c94561f..ec0fd0d366eb 100644
    > --- a/drivers/spi/spi-fsl-dspi.c
    > +++ b/drivers/spi/spi-fsl-dspi.c
    > @@ -1434,9 +1434,18 @@ static int dspi_remove(struct platform_device *pdev)
    > struct fsl_dspi *dspi = spi_controller_get_devdata(ctlr);
    >
    > /* Disconnect from the SPI framework */
    > + spi_unregister_controller(dspi->ctlr);
    > +
    > + /* Disable RX and TX */
    > + regmap_update_bits(dspi->regmap, SPI_MCR,
    > + SPI_MCR_DIS_TXF | SPI_MCR_DIS_RXF,
    > + SPI_MCR_DIS_TXF | SPI_MCR_DIS_RXF);
    > +
    > + /* Stop Running */
    > + regmap_update_bits(dspi->regmap, SPI_MCR, SPI_MCR_HALT, SPI_MCR_HALT);
    > +
    > dspi_release_dma(dspi);
    > clk_disable_unprepare(dspi->clk);
    > - spi_unregister_controller(dspi->ctlr);
    >
    > return 0;
    > }
    > --
    > 2.17.1
    >

    \
     
     \ /
      Last update: 2020-06-22 13:25    [W:3.323 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site