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

Commit 213dadae authored by Suman Tatiraju's avatar Suman Tatiraju
Browse files

PM / devfreq: Don't hold spin lock when calling scm_call



Non atomic scm_call is being called for the new tz cmd ids.
This call for 64 bit support is single threaded, hence
don't hold a spinlock before calling it.

Change-Id: Ib19b2f6b5d62111395f4cae2197c3243d4a408ce
Signed-off-by: default avatarSuman Tatiraju <sumant@codeaurora.org>
parent e1b6fe17
Loading
Loading
Loading
Loading
+7 −6
Original line number Original line Diff line number Diff line
@@ -59,16 +59,17 @@ static int __secure_tz_reset_entry2(unsigned int *scm_data, u32 size_scm_data,
					bool is_64)
					bool is_64)
{
{
	int ret;
	int ret;
	spin_lock(&tz_lock);
	/* sync memory before sending the commands to tz*/
	/* sync memory before sending the commands to tz*/
	__iowmb();
	__iowmb();
	if (!is_64)
	if (!is_64) {
		spin_lock(&tz_lock);
		ret = scm_call_atomic2(SCM_SVC_IO, TZ_RESET_ID, scm_data[0],
		ret = scm_call_atomic2(SCM_SVC_IO, TZ_RESET_ID, scm_data[0],
					scm_data[1]);
					scm_data[1]);
	else
		spin_unlock(&tz_lock);
	} else {
		ret = scm_call(SCM_SVC_DCVS, TZ_RESET_ID_64, scm_data,
		ret = scm_call(SCM_SVC_DCVS, TZ_RESET_ID_64, scm_data,
				size_scm_data, NULL, 0);
				size_scm_data, NULL, 0);
	spin_unlock(&tz_lock);
	}
	return ret;
	return ret;
}
}


@@ -76,18 +77,18 @@ static int __secure_tz_update_entry3(unsigned int *scm_data, u32 size_scm_data,
					int *val, u32 size_val, bool is_64)
					int *val, u32 size_val, bool is_64)
{
{
	int ret;
	int ret;
	spin_lock(&tz_lock);
	/* sync memory before sending the commands to tz*/
	/* sync memory before sending the commands to tz*/
	__iowmb();
	__iowmb();
	if (!is_64) {
	if (!is_64) {
		spin_lock(&tz_lock);
		ret = scm_call_atomic3(SCM_SVC_IO, TZ_UPDATE_ID,
		ret = scm_call_atomic3(SCM_SVC_IO, TZ_UPDATE_ID,
					scm_data[0], scm_data[1], scm_data[2]);
					scm_data[0], scm_data[1], scm_data[2]);
		spin_unlock(&tz_lock);
		*val = ret;
		*val = ret;
	} else {
	} else {
		ret = scm_call(SCM_SVC_DCVS, TZ_UPDATE_ID_64, scm_data,
		ret = scm_call(SCM_SVC_DCVS, TZ_UPDATE_ID_64, scm_data,
				size_scm_data, val, size_val);
				size_scm_data, val, size_val);
	}
	}
	spin_unlock(&tz_lock);
	return ret;
	return ret;
}
}