Просмотр исходного кода

msm: camera: memmgr: Add support for non pix secure buffers

Add support to allocate such buffers which need to accessed
by non-pix VM.

CRs-Fixed: 2981372
Change-Id: Iac965a479e05d638c6323bfacd7c6a4d89f2a223
Signed-off-by: Rishabh Jain <[email protected]>
Rishabh Jain 4 лет назад
Родитель
Сommit
e2c7402dfd
2 измененных файлов с 15 добавлено и 1 удалено
  1. 14 1
      drivers/cam_req_mgr/cam_mem_mgr.c
  2. 1 0
      include/uapi/camera/media/cam_req_mgr.h

+ 14 - 1
drivers/cam_req_mgr/cam_mem_mgr.c

@@ -584,6 +584,11 @@ static int cam_mem_util_get_dma_buf(size_t len,
 			perms[num_vmids] = PERM_READ | PERM_WRITE;
 			num_vmids++;
 		}
+	} else if (cam_flags & CAM_MEM_FLAG_EVA_NOPIXEL) {
+		heap = tbl.secure_display_heap;
+		vmids[num_vmids] = VMID_CP_NON_PIXEL;
+		perms[num_vmids] = PERM_READ | PERM_WRITE;
+		num_vmids++;
 	} else if (use_cached_heap) {
 		try_heap = tbl.camera_heap;
 		heap = tbl.system_heap;
@@ -624,7 +629,8 @@ static int cam_mem_util_get_dma_buf(size_t len,
 		}
 	}
 
-	if (cam_flags & CAM_MEM_FLAG_PROTECTED_MODE) {
+	if ((cam_flags & CAM_MEM_FLAG_PROTECTED_MODE) ||
+		(cam_flags & CAM_MEM_FLAG_EVA_NOPIXEL)) {
 		if (num_vmids >= CAM_MAX_VMIDS) {
 			CAM_ERR(CAM_MEM, "Insufficient array size for vmids %d", num_vmids);
 			rc = -EINVAL;
@@ -771,6 +777,13 @@ static int cam_mem_util_check_alloc_flags(struct cam_mem_mgr_alloc_cmd *cmd)
 		return -EINVAL;
 	}
 
+	if ((cmd->flags & CAM_MEM_FLAG_EVA_NOPIXEL) &&
+		(cmd->flags & CAM_MEM_FLAG_PROTECTED_MODE ||
+		cmd->flags & CAM_MEM_FLAG_KMD_ACCESS)){
+		CAM_ERR(CAM_MEM,
+			"Kernel mapping and secure mode not allowed in no pixel mode");
+		return -EINVAL;
+	}
 	return 0;
 }
 

+ 1 - 0
include/uapi/camera/media/cam_req_mgr.h

@@ -290,6 +290,7 @@ struct cam_req_mgr_link_control {
 #define CAM_MEM_FLAG_CDSP_OUTPUT                (1<<12)
 #define CAM_MEM_FLAG_DISABLE_DELAYED_UNMAP      (1<<13)
 #define CAM_MEM_FLAG_KMD_DEBUG_FLAG             (1<<14)
+#define CAM_MEM_FLAG_EVA_NOPIXEL                (1<<15)
 
 
 #define CAM_MEM_MMU_MAX_HANDLE                  16