diff options
| author | Dilip Kota <dkota@codeaurora.org> | 2016-03-21 11:28:51 +0530 |
|---|---|---|
| committer | Joey Rizzoli <joey@lineageos.org> | 2017-06-14 22:14:00 +0200 |
| commit | c5d8d26f66386d81549771bf26b97cb63b79afbc (patch) | |
| tree | 322467d237cc43c0729bd1ae89c56ef91c5c6635 | |
| parent | 981fd7db6627097e74c5071d596b4672d6b7e38c (diff) | |
slim-msm: Synchronize SSR callbacks
Subsystem will restart within short timeframe.
Synchronise subsytem up/down callback notifications
to avoid functionality failures.
Use mutex locks to achieve synchronization.
Change-Id: I5881c7d468507bb8402a2e9f8178b9c31e57e8a5
Signed-off-by: Dilip Kota <dkota@codeaurora.org>
| -rw-r--r-- | drivers/slimbus/slim-msm-ngd.c | 5 | ||||
| -rw-r--r-- | drivers/slimbus/slim-msm.h | 1 |
2 files changed, 6 insertions, 0 deletions
diff --git a/drivers/slimbus/slim-msm-ngd.c b/drivers/slimbus/slim-msm-ngd.c index f3a886bca09..a88619d4bc6 100644 --- a/drivers/slimbus/slim-msm-ngd.c +++ b/drivers/slimbus/slim-msm-ngd.c @@ -1266,11 +1266,13 @@ static void ngd_adsp_down(struct work_struct *work) struct slim_controller *ctrl = &dev->ctrl; struct slim_device *sbdev; + mutex_lock(&dev->ssr_lock); ngd_slim_enable(dev, false); /* device up should be called again after SSR */ list_for_each_entry(sbdev, &ctrl->devs, dev_list) slim_report_absent(sbdev); SLIM_INFO(dev, "SLIM ADSP SSR (DOWN) done\n"); + mutex_unlock(&dev->ssr_lock); } static void ngd_adsp_up(struct work_struct *work) @@ -1279,7 +1281,9 @@ static void ngd_adsp_up(struct work_struct *work) container_of(work, struct msm_slim_qmi, ssr_up); struct msm_slim_ctrl *dev = container_of(qmi, struct msm_slim_ctrl, qmi); + mutex_lock(&dev->ssr_lock); ngd_slim_enable(dev, true); + mutex_unlock(&dev->ssr_lock); } static ssize_t show_mask(struct device *device, struct device_attribute *attr, @@ -1433,6 +1437,7 @@ static int __devinit ngd_slim_probe(struct platform_device *pdev) init_completion(&dev->ctrl_up); mutex_init(&dev->tx_lock); mutex_init(&dev->tx_buf_lock); + mutex_init(&dev->ssr_lock); spin_lock_init(&dev->rx_lock); dev->ee = 1; dev->irq = irq->start; diff --git a/drivers/slimbus/slim-msm.h b/drivers/slimbus/slim-msm.h index 99297a95f45..91a739edc0a 100644 --- a/drivers/slimbus/slim-msm.h +++ b/drivers/slimbus/slim-msm.h @@ -256,6 +256,7 @@ struct msm_slim_ctrl { struct clk *hclk; struct mutex tx_lock; struct mutex tx_buf_lock; + struct mutex ssr_lock; u8 pgdla; enum msm_slim_msgq use_rx_msgqs; enum msm_slim_msgq use_tx_msgqs; |
