Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4e121f0e authored by Osvaldo Banuelos's avatar Osvaldo Banuelos
Browse files

power: qcom: apm: provide mutual exclusion with LMH register accesses



Acquire the LMH scm mutex when performing the VDD_APCC to VDD_MX
or VDD_MX to VDD_APCC APM switch sequences to guarantee mutual
exclusion between APM mode switches and LMH register accesses.

Change-Id: I1541f0fdb79115991b7ee9cf6e98a5aa7ee7511e
Signed-off-by: default avatarOsvaldo Banuelos <osvaldob@codeaurora.org>
parent a161fd21
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@
#include <linux/slab.h>
#include <linux/string.h>
#include <linux/power/qcom/apm.h>
#include <soc/qcom/scm.h>

/*
 *        VDD_APCC
@@ -222,6 +223,7 @@ static int msm_apm_switch_to_mx(struct msm_apm_ctrl_dev *ctrl_dev)
	int ret = 0;
	unsigned long flags;

	mutex_lock(&scm_lmh_lock);
	spin_lock_irqsave(&ctrl_dev->lock, flags);

	/* Perform revision-specific programming steps */
@@ -297,6 +299,7 @@ static int msm_apm_switch_to_mx(struct msm_apm_ctrl_dev *ctrl_dev)
	}

	spin_unlock_irqrestore(&ctrl_dev->lock, flags);
	mutex_unlock(&scm_lmh_lock);

	return ret;
}
@@ -308,6 +311,7 @@ static int msm_apm_switch_to_apcc(struct msm_apm_ctrl_dev *ctrl_dev)
	int ret = 0;
	unsigned long flags;

	mutex_lock(&scm_lmh_lock);
	spin_lock_irqsave(&ctrl_dev->lock, flags);

	/* Perform revision-specific programming steps */
@@ -383,6 +387,7 @@ static int msm_apm_switch_to_apcc(struct msm_apm_ctrl_dev *ctrl_dev)
	}

	spin_unlock_irqrestore(&ctrl_dev->lock, flags);
	mutex_unlock(&scm_lmh_lock);

	return ret;
}