| From 34de9aba6c23e82086262e69cd1c34eb1c2be58b Mon Sep 17 00:00:00 2001 |
| From: Yuji Sasaki <sasakiy@chromium.org> |
| Date: Fri, 14 Feb 2020 13:13:40 +0530 |
| Subject: [PATCH] spi: qup: call spi_qup_pm_resume_runtime before suspending |
| |
| commit 136b5cd2e2f97581ae560cff0db2a3b5369112da upstream. |
| |
| spi_qup_suspend() will cause synchronous external abort when |
| runtime suspend is enabled and applied, as it tries to |
| access SPI controller register while clock is already disabled |
| in spi_qup_pm_suspend_runtime(). |
| |
| Signed-off-by: Yuji sasaki <sasakiy@chromium.org> |
| Signed-off-by: Vinod Koul <vkoul@kernel.org> |
| Link: https://lore.kernel.org/r/20200214074340.2286170-1-vkoul@kernel.org |
| Signed-off-by: Mark Brown <broonie@kernel.org> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/spi/spi-qup.c b/drivers/spi/spi-qup.c |
| index f22dbb4b87a5..33d195f06f7a 100644 |
| --- a/drivers/spi/spi-qup.c |
| +++ b/drivers/spi/spi-qup.c |
| @@ -1182,6 +1182,11 @@ static int spi_qup_suspend(struct device *device) |
| struct spi_qup *controller = spi_master_get_devdata(master); |
| int ret; |
| |
| + if (pm_runtime_suspended(device)) { |
| + ret = spi_qup_pm_resume_runtime(device); |
| + if (ret) |
| + return ret; |
| + } |
| ret = spi_master_suspend(master); |
| if (ret) |
| return ret; |
| @@ -1190,10 +1195,8 @@ static int spi_qup_suspend(struct device *device) |
| if (ret) |
| return ret; |
| |
| - if (!pm_runtime_suspended(device)) { |
| - clk_disable_unprepare(controller->cclk); |
| - clk_disable_unprepare(controller->iclk); |
| - } |
| + clk_disable_unprepare(controller->cclk); |
| + clk_disable_unprepare(controller->iclk); |
| return 0; |
| } |
| |
| -- |
| 2.7.4 |
| |