msm: rotator: Add secure session flag to rotator start data
Add flag for handling secure session to rotator data passed during start ioctl call. Change-Id: Id5db8b4be1f5058cb9cb9227963acc288eebc1dd Signed-off-by: Ravishangar Kalyanam <rkalya@codeaurora.org>
This commit is contained in:
committed by
Stephen Boyd
parent
a00a29607c
commit
e1ea31bf7b
@@ -171,11 +171,10 @@ enum {
|
||||
CLK_SUSPEND,
|
||||
};
|
||||
|
||||
int msm_rotator_iommu_map_buf(int mem_id, unsigned char src,
|
||||
int msm_rotator_iommu_map_buf(int mem_id, int domain,
|
||||
unsigned long *start, unsigned long *len,
|
||||
struct ion_handle **pihdl)
|
||||
struct ion_handle **pihdl, unsigned int secure)
|
||||
{
|
||||
int domain;
|
||||
if (!msm_rotator_dev->client)
|
||||
return -EINVAL;
|
||||
|
||||
@@ -187,16 +186,30 @@ int msm_rotator_iommu_map_buf(int mem_id, unsigned char src,
|
||||
pr_debug("%s(): ion_hdl %p, ion_fd %d\n", __func__, *pihdl,
|
||||
ion_share_dma_buf(msm_rotator_dev->client, *pihdl));
|
||||
|
||||
if (rot_iommu_split_domain)
|
||||
domain = src ? ROTATOR_SRC_DOMAIN : ROTATOR_DST_DOMAIN;
|
||||
else
|
||||
domain = ROTATOR_SRC_DOMAIN;
|
||||
|
||||
if (ion_map_iommu(msm_rotator_dev->client,
|
||||
*pihdl, domain, GEN_POOL,
|
||||
SZ_4K, 0, start, len, 0, ION_IOMMU_UNMAP_DELAYED)) {
|
||||
pr_err("ion_map_iommu() failed\n");
|
||||
return -EINVAL;
|
||||
if (rot_iommu_split_domain) {
|
||||
if (secure) {
|
||||
if (ion_phys(msm_rotator_dev->client,
|
||||
*pihdl, start, (unsigned *)len)) {
|
||||
pr_err("%s:%d: ion_phys map failed\n",
|
||||
__func__, __LINE__);
|
||||
return -ENOMEM;
|
||||
}
|
||||
} else {
|
||||
if (ion_map_iommu(msm_rotator_dev->client,
|
||||
*pihdl, domain, GEN_POOL,
|
||||
SZ_4K, 0, start, len, 0,
|
||||
ION_IOMMU_UNMAP_DELAYED)) {
|
||||
pr_err("ion_map_iommu() failed\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (ion_map_iommu(msm_rotator_dev->client,
|
||||
*pihdl, ROTATOR_SRC_DOMAIN, GEN_POOL,
|
||||
SZ_4K, 0, start, len, 0, ION_IOMMU_UNMAP_DELAYED)) {
|
||||
pr_err("ion_map_iommu() failed\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
|
||||
pr_debug("%s(): mem_id %d, start 0x%lx, len 0x%lx\n",
|
||||
@@ -813,9 +826,9 @@ static int msm_rotator_rgb_types(struct msm_rotator_img_info *info,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int get_img(struct msmfb_data *fbd, unsigned char src,
|
||||
static int get_img(struct msmfb_data *fbd, int domain,
|
||||
unsigned long *start, unsigned long *len, struct file **p_file,
|
||||
int *p_need, struct ion_handle **p_ihdl)
|
||||
int *p_need, struct ion_handle **p_ihdl, unsigned int secure)
|
||||
{
|
||||
int ret = 0;
|
||||
#ifdef CONFIG_FB
|
||||
@@ -857,8 +870,8 @@ static int get_img(struct msmfb_data *fbd, unsigned char src,
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_MSM_MULTIMEDIA_USE_ION
|
||||
return msm_rotator_iommu_map_buf(fbd->memory_id, src, start,
|
||||
len, p_ihdl);
|
||||
return msm_rotator_iommu_map_buf(fbd->memory_id, domain, start,
|
||||
len, p_ihdl, secure);
|
||||
#endif
|
||||
#ifdef CONFIG_ANDROID_PMEM
|
||||
if (!get_pmem_file(fbd->memory_id, start, &vstart, len, p_file))
|
||||
@@ -870,7 +883,7 @@ static int get_img(struct msmfb_data *fbd, unsigned char src,
|
||||
}
|
||||
|
||||
static void put_img(struct file *p_file, struct ion_handle *p_ihdl,
|
||||
unsigned char src)
|
||||
int domain, unsigned int secure)
|
||||
{
|
||||
#ifdef CONFIG_ANDROID_PMEM
|
||||
if (p_file != NULL)
|
||||
@@ -879,14 +892,15 @@ static void put_img(struct file *p_file, struct ion_handle *p_ihdl,
|
||||
|
||||
#ifdef CONFIG_MSM_MULTIMEDIA_USE_ION
|
||||
if (!IS_ERR_OR_NULL(p_ihdl)) {
|
||||
int domain;
|
||||
if (rot_iommu_split_domain)
|
||||
domain = src ? ROTATOR_SRC_DOMAIN : ROTATOR_DST_DOMAIN;
|
||||
else
|
||||
domain = ROTATOR_SRC_DOMAIN;
|
||||
pr_debug("%s(): p_ihdl %p\n", __func__, p_ihdl);
|
||||
ion_unmap_iommu(msm_rotator_dev->client,
|
||||
p_ihdl, domain, GEN_POOL);
|
||||
if (rot_iommu_split_domain) {
|
||||
if (!secure)
|
||||
ion_unmap_iommu(msm_rotator_dev->client,
|
||||
p_ihdl, domain, GEN_POOL);
|
||||
} else {
|
||||
ion_unmap_iommu(msm_rotator_dev->client,
|
||||
p_ihdl, ROTATOR_SRC_DOMAIN, GEN_POOL);
|
||||
}
|
||||
|
||||
ion_free(msm_rotator_dev->client, p_ihdl);
|
||||
}
|
||||
@@ -953,18 +967,18 @@ static int msm_rotator_do_rotate(unsigned long arg)
|
||||
goto do_rotate_unlock_mutex;
|
||||
}
|
||||
|
||||
rc = get_img(&info.src, 1, (unsigned long *)&in_paddr,
|
||||
rc = get_img(&info.src, ROTATOR_SRC_DOMAIN, (unsigned long *)&in_paddr,
|
||||
(unsigned long *)&src_len, &srcp0_file, &ps0_need,
|
||||
&srcp0_ihdl);
|
||||
&srcp0_ihdl, 0);
|
||||
if (rc) {
|
||||
pr_err("%s: in get_img() failed id=0x%08x\n",
|
||||
DRIVER_NAME, info.src.memory_id);
|
||||
goto do_rotate_unlock_mutex;
|
||||
}
|
||||
|
||||
rc = get_img(&info.dst, 0, (unsigned long *)&out_paddr,
|
||||
rc = get_img(&info.dst, ROTATOR_DST_DOMAIN, (unsigned long *)&out_paddr,
|
||||
(unsigned long *)&dst_len, &dstp0_file, &p_need,
|
||||
&dstp0_ihdl);
|
||||
&dstp0_ihdl, img_info->secure);
|
||||
if (rc) {
|
||||
pr_err("%s: out get_img() failed id=0x%08x\n",
|
||||
DRIVER_NAME, info.dst.memory_id);
|
||||
@@ -992,20 +1006,20 @@ static int msm_rotator_do_rotate(unsigned long arg)
|
||||
goto do_rotate_unlock_mutex;
|
||||
}
|
||||
|
||||
rc = get_img(&info.src_chroma, 1,
|
||||
rc = get_img(&info.src_chroma, ROTATOR_SRC_DOMAIN,
|
||||
(unsigned long *)&in_chroma_paddr,
|
||||
(unsigned long *)&src_len, &srcp1_file, &p_need,
|
||||
&srcp1_ihdl);
|
||||
&srcp1_ihdl, 0);
|
||||
if (rc) {
|
||||
pr_err("%s: in chroma get_img() failed id=0x%08x\n",
|
||||
DRIVER_NAME, info.src_chroma.memory_id);
|
||||
goto do_rotate_unlock_mutex;
|
||||
}
|
||||
|
||||
rc = get_img(&info.dst_chroma, 0,
|
||||
rc = get_img(&info.dst_chroma, ROTATOR_DST_DOMAIN,
|
||||
(unsigned long *)&out_chroma_paddr,
|
||||
(unsigned long *)&dst_len, &dstp1_file, &p_need,
|
||||
&dstp1_ihdl);
|
||||
&dstp1_ihdl, img_info->secure);
|
||||
if (rc) {
|
||||
pr_err("%s: out chroma get_img() failed id=0x%08x\n",
|
||||
DRIVER_NAME, info.dst_chroma.memory_id);
|
||||
@@ -1176,15 +1190,17 @@ do_rotate_exit:
|
||||
#endif
|
||||
schedule_delayed_work(&msm_rotator_dev->rot_clk_work, HZ);
|
||||
do_rotate_unlock_mutex:
|
||||
put_img(dstp1_file, dstp1_ihdl, 0);
|
||||
put_img(srcp1_file, srcp1_ihdl, 1);
|
||||
put_img(dstp0_file, dstp0_ihdl, 0);
|
||||
put_img(dstp1_file, dstp1_ihdl, ROTATOR_DST_DOMAIN,
|
||||
msm_rotator_dev->img_info[s]->secure);
|
||||
put_img(srcp1_file, srcp1_ihdl, ROTATOR_SRC_DOMAIN, 0);
|
||||
put_img(dstp0_file, dstp0_ihdl, ROTATOR_DST_DOMAIN,
|
||||
msm_rotator_dev->img_info[s]->secure);
|
||||
|
||||
/* only source may use frame buffer */
|
||||
if (info.src.flags & MDP_MEMORY_ID_TYPE_FB)
|
||||
fput_light(srcp0_file, ps0_need);
|
||||
else
|
||||
put_img(srcp0_file, srcp0_ihdl, 1);
|
||||
put_img(srcp0_file, srcp0_ihdl, ROTATOR_SRC_DOMAIN, 0);
|
||||
mutex_unlock(&msm_rotator_dev->rotator_lock);
|
||||
dev_dbg(msm_rotator_dev->device, "%s() returning rc = %d\n",
|
||||
__func__, rc);
|
||||
|
||||
@@ -31,6 +31,7 @@ struct msm_rotator_img_info {
|
||||
unsigned char rotations;
|
||||
int enable;
|
||||
unsigned int downscale_ratio;
|
||||
unsigned int secure;
|
||||
};
|
||||
|
||||
struct msm_rotator_data_info {
|
||||
|
||||
Reference in New Issue
Block a user