summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2016-12-30 06:28:07 -0800
committerGerrit - the friendly Code Review server <code-review@localhost>2016-12-30 06:28:07 -0800
commit06dc59aba02a111c5745c379e652744e2f14e359 (patch)
treef9e074544e89ddd66f24f71ad2f2dba2c2ef0b5b
parent1a8ee67acfba99be6b73f55f83d0356a9dfcc443 (diff)
parentb04e18f49e3a617cc00fe98069c39d4e7c7622b3 (diff)
Merge "msm: sde: Switch to non-secure at session close"
-rw-r--r--drivers/media/platform/msm/sde/rotator/sde_rotator_core.c26
1 files changed, 14 insertions, 12 deletions
diff --git a/drivers/media/platform/msm/sde/rotator/sde_rotator_core.c b/drivers/media/platform/msm/sde/rotator/sde_rotator_core.c
index 57b4560acdb2..2fc130137c25 100644
--- a/drivers/media/platform/msm/sde/rotator/sde_rotator_core.c
+++ b/drivers/media/platform/msm/sde/rotator/sde_rotator_core.c
@@ -530,7 +530,7 @@ static int sde_rotator_import_buffer(struct sde_layer_buffer *buffer,
return ret;
}
-static int sde_rotator_secure_session_ctrl(struct sde_rot_entry *entry)
+static int sde_rotator_secure_session_ctrl(bool enable)
{
struct sde_rot_data_type *mdata = sde_rot_get_mdata();
uint32_t sid_info;
@@ -546,8 +546,7 @@ static int sde_rotator_secure_session_ctrl(struct sde_rot_entry *entry)
desc.args[1] = SCM_BUFFER_PHYS(&sid_info);
desc.args[2] = sizeof(uint32_t);
- if (!mdata->sec_cam_en &&
- (entry->item.flags & SDE_ROTATION_SECURE_CAMERA)) {
+ if (!mdata->sec_cam_en && enable) {
/*
* Enable secure camera operation
* Send SCM call to hypervisor to switch the
@@ -573,11 +572,8 @@ static int sde_rotator_secure_session_ctrl(struct sde_rot_entry *entry)
SDEROT_DBG("scm_call(1) ret=%d, resp=%x",
ret, resp);
- SDEROT_EVTLOG(1, entry->item.flags,
- entry->src_buf.p[0].addr,
- entry->dst_buf.p[0].addr);
- } else if (mdata->sec_cam_en && !(entry->item.flags &
- SDE_ROTATION_SECURE_CAMERA)) {
+ SDEROT_EVTLOG(1);
+ } else if (mdata->sec_cam_en && !enable) {
/*
* Disable secure camera operation
* Send SCM call to hypervisor to switch the
@@ -596,9 +592,7 @@ static int sde_rotator_secure_session_ctrl(struct sde_rot_entry *entry)
/* force smmu to reattach */
sde_smmu_secure_ctrl(1);
- SDEROT_EVTLOG(0, entry->item.flags,
- entry->src_buf.p[0].addr,
- entry->dst_buf.p[0].addr);
+ SDEROT_EVTLOG(0);
}
} else {
return 0;
@@ -618,6 +612,7 @@ static int sde_rotator_map_and_check_data(struct sde_rot_entry *entry)
struct sde_mdp_format_params *fmt;
struct sde_mdp_plane_sizes ps;
bool rotation;
+ bool secure;
input = &entry->item.input;
output = &entry->item.output;
@@ -628,7 +623,9 @@ static int sde_rotator_map_and_check_data(struct sde_rot_entry *entry)
if (IS_ERR_VALUE(ret))
return ret;
- ret = sde_rotator_secure_session_ctrl(entry);
+ secure = (entry->item.flags & SDE_ROTATION_SECURE_CAMERA) ?
+ true : false;
+ ret = sde_rotator_secure_session_ctrl(secure);
if (ret) {
SDEROT_ERR("failed secure session enabling/disabling %d\n",
ret);
@@ -2194,6 +2191,11 @@ static int sde_rotator_close(struct sde_rot_mgr *mgr,
return -EINVAL;
}
+ /*
+ * if secure camera session was enabled
+ * go back to non secure state
+ */
+ sde_rotator_secure_session_ctrl(false);
sde_rotator_release_rotator_perf_session(mgr, private);
list_del_init(&private->list);