mirror of
https://github.com/rd-stuffs/msm-4.14.git
synced 2025-02-20 11:45:48 +08:00
Merge "msm: sde: Allocate memory for SIDs passed in scm_call" into dev/msm-4.14-display
This commit is contained in:
commit
b943045827
@ -584,17 +584,21 @@ static int sde_rotator_import_buffer(struct sde_layer_buffer *buffer,
|
||||
static int sde_rotator_secure_session_ctrl(bool enable)
|
||||
{
|
||||
struct sde_rot_data_type *mdata = sde_rot_get_mdata();
|
||||
uint32_t sid_info;
|
||||
uint32_t *sid_info = NULL;
|
||||
struct scm_desc desc = {0};
|
||||
unsigned int resp = 0;
|
||||
int ret = 0;
|
||||
|
||||
if (test_bit(SDE_CAPS_SEC_ATTACH_DETACH_SMMU,
|
||||
mdata->sde_caps_map)) {
|
||||
sid_info = mdata->sde_smmu[SDE_IOMMU_DOMAIN_ROT_SECURE].sid;
|
||||
if (test_bit(SDE_CAPS_SEC_ATTACH_DETACH_SMMU, mdata->sde_caps_map)) {
|
||||
|
||||
sid_info = kzalloc(sizeof(uint32_t), GFP_KERNEL);
|
||||
if (!sid_info)
|
||||
return -ENOMEM;
|
||||
|
||||
sid_info[0] = mdata->sde_smmu[SDE_IOMMU_DOMAIN_ROT_SECURE].sid;
|
||||
desc.arginfo = SCM_ARGS(4, SCM_VAL, SCM_RW, SCM_VAL, SCM_VAL);
|
||||
desc.args[0] = SDE_ROTATOR_DEVICE;
|
||||
desc.args[1] = SCM_BUFFER_PHYS(&sid_info);
|
||||
desc.args[1] = SCM_BUFFER_PHYS(sid_info);
|
||||
desc.args[2] = sizeof(uint32_t);
|
||||
|
||||
if (!mdata->sec_cam_en && enable) {
|
||||
@ -608,7 +612,7 @@ static int sde_rotator_secure_session_ctrl(bool enable)
|
||||
mdata->sec_cam_en = 1;
|
||||
sde_smmu_secure_ctrl(0);
|
||||
|
||||
dmac_flush_range(&sid_info, &sid_info + 1);
|
||||
dmac_flush_range(sid_info, sid_info + 1);
|
||||
ret = scm_call2(SCM_SIP_FNID(SCM_SVC_MP,
|
||||
MEM_PROTECT_SD_CTRL_SWITCH), &desc);
|
||||
resp = desc.ret[0];
|
||||
@ -618,14 +622,16 @@ static int sde_rotator_secure_session_ctrl(bool enable)
|
||||
/* failure, attach smmu */
|
||||
mdata->sec_cam_en = 0;
|
||||
sde_smmu_secure_ctrl(1);
|
||||
return -EINVAL;
|
||||
ret = -EINVAL;
|
||||
goto end;
|
||||
}
|
||||
|
||||
SDEROT_DBG(
|
||||
"scm(1) sid0x%x dev0x%llx vmid0x%llx ret%d resp%x\n",
|
||||
sid_info, desc.args[0], desc.args[3],
|
||||
sid_info[0], desc.args[0], desc.args[3],
|
||||
ret, resp);
|
||||
SDEROT_EVTLOG(1, sid_info, desc.args[0], desc.args[3],
|
||||
SDEROT_EVTLOG(1, sid_info, sid_info[0],
|
||||
desc.args[0], desc.args[3],
|
||||
ret, resp);
|
||||
} else if (mdata->sec_cam_en && !enable) {
|
||||
/*
|
||||
@ -636,25 +642,30 @@ static int sde_rotator_secure_session_ctrl(bool enable)
|
||||
desc.args[3] = VMID_CP_PIXEL;
|
||||
mdata->sec_cam_en = 0;
|
||||
|
||||
dmac_flush_range(&sid_info, &sid_info + 1);
|
||||
dmac_flush_range(sid_info, sid_info + 1);
|
||||
ret = scm_call2(SCM_SIP_FNID(SCM_SVC_MP,
|
||||
MEM_PROTECT_SD_CTRL_SWITCH), &desc);
|
||||
resp = desc.ret[0];
|
||||
|
||||
SDEROT_DBG(
|
||||
"scm(0) sid0x%x dev0x%llx vmid0x%llx ret%d resp%d\n",
|
||||
sid_info, desc.args[0], desc.args[3],
|
||||
sid_info[0], desc.args[0], desc.args[3],
|
||||
ret, resp);
|
||||
|
||||
/* force smmu to reattach */
|
||||
sde_smmu_secure_ctrl(1);
|
||||
|
||||
SDEROT_EVTLOG(0, sid_info, desc.args[0], desc.args[3],
|
||||
SDEROT_EVTLOG(0, sid_info, sid_info[0],
|
||||
desc.args[0], desc.args[3],
|
||||
ret, resp);
|
||||
}
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
|
||||
end:
|
||||
kfree(sid_info);
|
||||
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user