| From foo@baz Thu Mar 22 14:57:32 CET 2018 |
| From: Marek Vasut <marex@denx.de> |
| Date: Tue, 18 Apr 2017 20:09:06 +0200 |
| Subject: spi: dw: Disable clock after unregistering the host |
| |
| From: Marek Vasut <marex@denx.de> |
| |
| |
| [ Upstream commit 400c18e3dc86e04ef5afec9b86a8586ca629b9e9 ] |
| |
| The dw_mmio driver disables the block clock before unregistering |
| the host. The code unregistering the host may access the SPI block |
| registers. If register access happens with block clock disabled, |
| this may lead to a bus hang. Disable the clock after unregistering |
| the host to prevent such situation. |
| |
| This bug was observed on Altera Cyclone V SoC. |
| |
| Signed-off-by: Marek Vasut <marex@denx.de> |
| Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com> |
| Cc: Mark Brown <broonie@kernel.org> |
| Signed-off-by: Mark Brown <broonie@kernel.org> |
| Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/spi/spi-dw-mmio.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/drivers/spi/spi-dw-mmio.c |
| +++ b/drivers/spi/spi-dw-mmio.c |
| @@ -120,8 +120,8 @@ static int dw_spi_mmio_remove(struct pla |
| { |
| struct dw_spi_mmio *dwsmmio = platform_get_drvdata(pdev); |
| |
| - clk_disable_unprepare(dwsmmio->clk); |
| dw_spi_remove_host(&dwsmmio->dws); |
| + clk_disable_unprepare(dwsmmio->clk); |
| |
| return 0; |
| } |