mirror of
https://github.com/Divested-Mobile/DivestOS-Build.git
synced 2024-10-01 01:35:54 -04:00
75 lines
2.6 KiB
Diff
75 lines
2.6 KiB
Diff
|
From a225074c0494ca8125ca0ac2f9ebc8a2bd3612de Mon Sep 17 00:00:00 2001
|
||
|
From: Dilip Kota <dkota@codeaurora.org>
|
||
|
Date: Mon, 21 Mar 2016 11:28:51 +0530
|
||
|
Subject: 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>
|
||
|
---
|
||
|
drivers/slimbus/slim-msm-ngd.c | 5 +++++
|
||
|
drivers/slimbus/slim-msm.h | 3 ++-
|
||
|
2 files changed, 7 insertions(+), 1 deletion(-)
|
||
|
|
||
|
diff --git a/drivers/slimbus/slim-msm-ngd.c b/drivers/slimbus/slim-msm-ngd.c
|
||
|
index 3684984..1328e76 100644
|
||
|
--- a/drivers/slimbus/slim-msm-ngd.c
|
||
|
+++ b/drivers/slimbus/slim-msm-ngd.c
|
||
|
@@ -1449,11 +1449,13 @@ static void ngd_adsp_down(struct msm_slim_ctrl *dev)
|
||
|
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)
|
||
|
@@ -1462,7 +1464,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,
|
||
|
@@ -1626,6 +1630,7 @@ static int ngd_slim_probe(struct platform_device *pdev)
|
||
|
init_completion(&dev->reconf);
|
||
|
init_completion(&dev->ctrl_up);
|
||
|
mutex_init(&dev->tx_lock);
|
||
|
+ mutex_init(&dev->ssr_lock);
|
||
|
spin_lock_init(&dev->tx_buf_lock);
|
||
|
spin_lock_init(&dev->rx_lock);
|
||
|
dev->ee = 1;
|
||
|
diff --git a/drivers/slimbus/slim-msm.h b/drivers/slimbus/slim-msm.h
|
||
|
index 86d2606..7859d1e 100644
|
||
|
--- a/drivers/slimbus/slim-msm.h
|
||
|
+++ b/drivers/slimbus/slim-msm.h
|
||
|
@@ -1,4 +1,4 @@
|
||
|
-/* Copyright (c) 2011-2015, The Linux Foundation. All rights reserved.
|
||
|
+/* Copyright (c) 2011-2016, The Linux Foundation. All rights reserved.
|
||
|
*
|
||
|
* This program is free software; you can redistribute it and/or modify
|
||
|
* it under the terms of the GNU General Public License version 2 and
|
||
|
@@ -284,6 +284,7 @@ struct msm_slim_ctrl {
|
||
|
struct clk *rclk;
|
||
|
struct clk *hclk;
|
||
|
struct mutex tx_lock;
|
||
|
+ struct mutex ssr_lock;
|
||
|
spinlock_t tx_buf_lock;
|
||
|
u8 pgdla;
|
||
|
enum msm_slim_msgq use_rx_msgqs;
|
||
|
--
|
||
|
cgit v1.1
|
||
|
|