Loading drivers/media/platform/msm/camera_v2/isp/msm_buf_mgr.c +19 −8 Original line number Diff line number Diff line Loading @@ -962,6 +962,7 @@ static int msm_isp_attach_ctx(struct msm_isp_buf_mgr *buf_mgr, __func__, i, rc); return -EINVAL; } buf_mgr->attach_state = MSM_ISP_BUF_MGR_ATTACH; } buf_mgr->attach_ref_cnt[NON_SECURE_MODE][i]++; } Loading @@ -979,11 +980,11 @@ static int msm_isp_attach_ctx(struct msm_isp_buf_mgr *buf_mgr, __func__, i, rc); return -EINVAL; } buf_mgr->attach_state = MSM_ISP_BUF_MGR_ATTACH; } buf_mgr->attach_ref_cnt[SECURE_MODE][i]++; } } buf_mgr->attach_state = MSM_ISP_BUF_MGR_ATTACH; return 0; } Loading @@ -991,10 +992,6 @@ static int msm_isp_detach_ctx(struct msm_isp_buf_mgr *buf_mgr) { int i; if (buf_mgr->attach_state == MSM_ISP_BUF_MGR_DETACH || buf_mgr->open_count) return 0; if (buf_mgr->secure_enable == NON_SECURE_MODE) { /*non secure mode*/ for (i = 0; i < buf_mgr->num_iommu_ctx; i++) { Loading @@ -1002,6 +999,7 @@ static int msm_isp_detach_ctx(struct msm_isp_buf_mgr *buf_mgr) if (buf_mgr->attach_ref_cnt[NON_SECURE_MODE][i] == 1) { iommu_detach_device(buf_mgr->iommu_domain, buf_mgr->iommu_ctx[i]); buf_mgr->attach_state = MSM_ISP_BUF_MGR_DETACH; } if (buf_mgr->attach_ref_cnt[NON_SECURE_MODE][i] > 0) --buf_mgr->attach_ref_cnt[NON_SECURE_MODE][i]; Loading @@ -1014,12 +1012,12 @@ static int msm_isp_detach_ctx(struct msm_isp_buf_mgr *buf_mgr) iommu_detach_device( buf_mgr->iommu_domain_secure, buf_mgr->iommu_secure_ctx[i]); buf_mgr->attach_state = MSM_ISP_BUF_MGR_DETACH; } if (buf_mgr->attach_ref_cnt[SECURE_MODE][i] > 0) --buf_mgr->attach_ref_cnt[SECURE_MODE][i]; } } buf_mgr->attach_state = MSM_ISP_BUF_MGR_DETACH; return 0; } Loading @@ -1029,6 +1027,7 @@ int msm_isp_smmu_attach(struct msm_isp_buf_mgr *buf_mgr, struct msm_vfe_smmu_attach_cmd *cmd = arg; int rc = 0; pr_debug("%s: cmd->security_mode : %d\n", __func__, cmd->security_mode); mutex_lock(&buf_mgr->lock); if (cmd->iommu_attach_mode == IOMMU_ATTACH) { buf_mgr->secure_enable = cmd->security_mode; rc = msm_isp_attach_ctx(buf_mgr, cmd); Loading @@ -1040,6 +1039,7 @@ int msm_isp_smmu_attach(struct msm_isp_buf_mgr *buf_mgr, msm_isp_detach_ctx(buf_mgr); iommu_error: mutex_unlock(&buf_mgr->lock); return rc; } Loading @@ -1049,11 +1049,15 @@ static int msm_isp_init_isp_buf_mgr( const char *ctx_name, uint16_t num_buf_q) { int rc = -1; if (buf_mgr->open_count++) mutex_lock(&buf_mgr->lock); if (buf_mgr->open_count++) { mutex_unlock(&buf_mgr->lock); return 0; } if (!num_buf_q) { pr_err("Invalid buffer queue number\n"); mutex_unlock(&buf_mgr->lock); return rc; } CDBG("%s: E\n", __func__); Loading @@ -1070,25 +1074,31 @@ static int msm_isp_init_isp_buf_mgr( buf_mgr->client = msm_ion_client_create(ctx_name); buf_mgr->buf_handle_cnt = 0; buf_mgr->pagefault_debug = 0; mutex_unlock(&buf_mgr->lock); return 0; bufq_error: mutex_unlock(&buf_mgr->lock); return rc; } static int msm_isp_deinit_isp_buf_mgr( struct msm_isp_buf_mgr *buf_mgr) { mutex_lock(&buf_mgr->lock); if (buf_mgr->open_count > 0) buf_mgr->open_count--; if (buf_mgr->open_count) if (buf_mgr->open_count) { mutex_unlock(&buf_mgr->lock); return 0; } msm_isp_release_all_bufq(buf_mgr); ion_client_destroy(buf_mgr->client); kfree(buf_mgr->bufq); buf_mgr->num_buf_q = 0; buf_mgr->pagefault_debug = 0; msm_isp_detach_ctx(buf_mgr); mutex_unlock(&buf_mgr->lock); return 0; } Loading Loading @@ -1216,6 +1226,7 @@ int msm_isp_create_isp_buf_mgr( buf_mgr->pagefault_debug = 0; buf_mgr->secure_enable = NON_SECURE_MODE; buf_mgr->attach_state = MSM_ISP_BUF_MGR_DETACH; mutex_init(&buf_mgr->lock); for (i = 0; i < MAX_PROTECTION_MODE; i++) for (j = 0; j < MAX_IOMMU_CTX; j++) Loading drivers/media/platform/msm/camera_v2/isp/msm_buf_mgr.h +2 −2 Original line number Diff line number Diff line /* Copyright (c) 2013-2014, The Linux Foundation. All rights reserved. /* Copyright (c) 2013-2015, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -158,7 +158,6 @@ struct msm_isp_buf_mgr { int init_done; uint32_t open_count; uint32_t pagefault_debug; spinlock_t lock; uint16_t num_buf_q; struct msm_isp_bufq *bufq; Loading Loading @@ -186,6 +185,7 @@ struct msm_isp_buf_mgr { struct device *iommu_secure_ctx[2]; int attach_ref_cnt[MAX_PROTECTION_MODE][MAX_IOMMU_CTX]; enum msm_isp_buf_mgr_state attach_state; struct mutex lock; }; int msm_isp_create_isp_buf_mgr(struct msm_isp_buf_mgr *buf_mgr, Loading Loading
drivers/media/platform/msm/camera_v2/isp/msm_buf_mgr.c +19 −8 Original line number Diff line number Diff line Loading @@ -962,6 +962,7 @@ static int msm_isp_attach_ctx(struct msm_isp_buf_mgr *buf_mgr, __func__, i, rc); return -EINVAL; } buf_mgr->attach_state = MSM_ISP_BUF_MGR_ATTACH; } buf_mgr->attach_ref_cnt[NON_SECURE_MODE][i]++; } Loading @@ -979,11 +980,11 @@ static int msm_isp_attach_ctx(struct msm_isp_buf_mgr *buf_mgr, __func__, i, rc); return -EINVAL; } buf_mgr->attach_state = MSM_ISP_BUF_MGR_ATTACH; } buf_mgr->attach_ref_cnt[SECURE_MODE][i]++; } } buf_mgr->attach_state = MSM_ISP_BUF_MGR_ATTACH; return 0; } Loading @@ -991,10 +992,6 @@ static int msm_isp_detach_ctx(struct msm_isp_buf_mgr *buf_mgr) { int i; if (buf_mgr->attach_state == MSM_ISP_BUF_MGR_DETACH || buf_mgr->open_count) return 0; if (buf_mgr->secure_enable == NON_SECURE_MODE) { /*non secure mode*/ for (i = 0; i < buf_mgr->num_iommu_ctx; i++) { Loading @@ -1002,6 +999,7 @@ static int msm_isp_detach_ctx(struct msm_isp_buf_mgr *buf_mgr) if (buf_mgr->attach_ref_cnt[NON_SECURE_MODE][i] == 1) { iommu_detach_device(buf_mgr->iommu_domain, buf_mgr->iommu_ctx[i]); buf_mgr->attach_state = MSM_ISP_BUF_MGR_DETACH; } if (buf_mgr->attach_ref_cnt[NON_SECURE_MODE][i] > 0) --buf_mgr->attach_ref_cnt[NON_SECURE_MODE][i]; Loading @@ -1014,12 +1012,12 @@ static int msm_isp_detach_ctx(struct msm_isp_buf_mgr *buf_mgr) iommu_detach_device( buf_mgr->iommu_domain_secure, buf_mgr->iommu_secure_ctx[i]); buf_mgr->attach_state = MSM_ISP_BUF_MGR_DETACH; } if (buf_mgr->attach_ref_cnt[SECURE_MODE][i] > 0) --buf_mgr->attach_ref_cnt[SECURE_MODE][i]; } } buf_mgr->attach_state = MSM_ISP_BUF_MGR_DETACH; return 0; } Loading @@ -1029,6 +1027,7 @@ int msm_isp_smmu_attach(struct msm_isp_buf_mgr *buf_mgr, struct msm_vfe_smmu_attach_cmd *cmd = arg; int rc = 0; pr_debug("%s: cmd->security_mode : %d\n", __func__, cmd->security_mode); mutex_lock(&buf_mgr->lock); if (cmd->iommu_attach_mode == IOMMU_ATTACH) { buf_mgr->secure_enable = cmd->security_mode; rc = msm_isp_attach_ctx(buf_mgr, cmd); Loading @@ -1040,6 +1039,7 @@ int msm_isp_smmu_attach(struct msm_isp_buf_mgr *buf_mgr, msm_isp_detach_ctx(buf_mgr); iommu_error: mutex_unlock(&buf_mgr->lock); return rc; } Loading @@ -1049,11 +1049,15 @@ static int msm_isp_init_isp_buf_mgr( const char *ctx_name, uint16_t num_buf_q) { int rc = -1; if (buf_mgr->open_count++) mutex_lock(&buf_mgr->lock); if (buf_mgr->open_count++) { mutex_unlock(&buf_mgr->lock); return 0; } if (!num_buf_q) { pr_err("Invalid buffer queue number\n"); mutex_unlock(&buf_mgr->lock); return rc; } CDBG("%s: E\n", __func__); Loading @@ -1070,25 +1074,31 @@ static int msm_isp_init_isp_buf_mgr( buf_mgr->client = msm_ion_client_create(ctx_name); buf_mgr->buf_handle_cnt = 0; buf_mgr->pagefault_debug = 0; mutex_unlock(&buf_mgr->lock); return 0; bufq_error: mutex_unlock(&buf_mgr->lock); return rc; } static int msm_isp_deinit_isp_buf_mgr( struct msm_isp_buf_mgr *buf_mgr) { mutex_lock(&buf_mgr->lock); if (buf_mgr->open_count > 0) buf_mgr->open_count--; if (buf_mgr->open_count) if (buf_mgr->open_count) { mutex_unlock(&buf_mgr->lock); return 0; } msm_isp_release_all_bufq(buf_mgr); ion_client_destroy(buf_mgr->client); kfree(buf_mgr->bufq); buf_mgr->num_buf_q = 0; buf_mgr->pagefault_debug = 0; msm_isp_detach_ctx(buf_mgr); mutex_unlock(&buf_mgr->lock); return 0; } Loading Loading @@ -1216,6 +1226,7 @@ int msm_isp_create_isp_buf_mgr( buf_mgr->pagefault_debug = 0; buf_mgr->secure_enable = NON_SECURE_MODE; buf_mgr->attach_state = MSM_ISP_BUF_MGR_DETACH; mutex_init(&buf_mgr->lock); for (i = 0; i < MAX_PROTECTION_MODE; i++) for (j = 0; j < MAX_IOMMU_CTX; j++) Loading
drivers/media/platform/msm/camera_v2/isp/msm_buf_mgr.h +2 −2 Original line number Diff line number Diff line /* Copyright (c) 2013-2014, The Linux Foundation. All rights reserved. /* Copyright (c) 2013-2015, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -158,7 +158,6 @@ struct msm_isp_buf_mgr { int init_done; uint32_t open_count; uint32_t pagefault_debug; spinlock_t lock; uint16_t num_buf_q; struct msm_isp_bufq *bufq; Loading Loading @@ -186,6 +185,7 @@ struct msm_isp_buf_mgr { struct device *iommu_secure_ctx[2]; int attach_ref_cnt[MAX_PROTECTION_MODE][MAX_IOMMU_CTX]; enum msm_isp_buf_mgr_state attach_state; struct mutex lock; }; int msm_isp_create_isp_buf_mgr(struct msm_isp_buf_mgr *buf_mgr, Loading