Bladeren bron

Merge "msm: eva: New attribute for secure camera mapping"

qctecmdr 2 jaren geleden
bovenliggende
commit
de003e633c
2 gewijzigde bestanden met toevoegingen van 18 en 6 verwijderingen
  1. 7 3
      msm/eva/cvp_smem.c
  2. 11 3
      msm/eva/msm_cvp_res_parse.c

+ 7 - 3
msm/eva/cvp_smem.c

@@ -99,6 +99,8 @@ static int msm_dma_get_device_address(struct dma_buf *dbuf, u32 align,
 		 * required buffer size
 		 */
 		attach->dma_map_attrs |= DMA_ATTR_SKIP_CPU_SYNC;
+		if (flags & SMEM_CAMERA)
+			attach->dma_map_attrs |= DMA_ATTR_QTI_SMMU_PROXY_MAP;
 		if (res->sys_cache_present)
 			attach->dma_map_attrs |=
 				DMA_ATTR_IOMMU_USE_UPSTREAM_HINT;
@@ -232,7 +234,9 @@ int msm_cvp_map_smem(struct msm_cvp_inst *inst,
 			smem->flags |= (SMEM_SECURE | SMEM_PIXEL);
 		else if (vmid_list[temp] == VMID_CP_NON_PIXEL)
 			smem->flags |= (SMEM_SECURE | SMEM_NON_PIXEL);
-		else if (vmid_list[temp] == VMID_CP_CAMERA)
+		else if (vmid_list[temp] == VMID_CP_CAMERA ||
+				/* To-do: what if the EVA driver runs in TVM */
+				vmid_list[temp] == VMID_TVM)
 			smem->flags |= (SMEM_SECURE | SMEM_CAMERA);
 		dprintk(CVP_MEM, "inst %pK VM idx %d VM_ID %d fd %d pkt_type %#x\n",
 			inst, temp, vmid_list[temp], smem->fd, smem->pkt_type);
@@ -536,7 +540,7 @@ struct context_bank_info *msm_cvp_smem_get_context_bank(
 	char *non_secure_cb = "cvp_hlos";
 	char *secure_nonpixel_cb = "cvp_sec_nonpixel";
 	char *secure_pixel_cb = "cvp_sec_pixel";
-	char *dummy_cb = "cvp_dummy";
+	char *camera_cb = "cvp_camera";
 	bool is_secure = (flags & SMEM_SECURE) ? true : false;
 
 	if (flags & SMEM_PIXEL)
@@ -545,7 +549,7 @@ struct context_bank_info *msm_cvp_smem_get_context_bank(
 		search_str = secure_nonpixel_cb;
 	else if (flags & SMEM_CAMERA)
 		/* Secure Camera pixel buffer */
-		search_str = dummy_cb;
+		search_str = camera_cb;
 	else
 		search_str = non_secure_cb;
 

+ 11 - 3
msm/eva/msm_cvp_res_parse.c

@@ -1092,8 +1092,17 @@ static int msm_cvp_populate_context_bank(struct device *dev,
 	}
 
 	dprintk(CVP_CORE, "%s: context bank has name %s\n", __func__, cb->name);
-	if (!strcmp(cb->name, "cvp_dummy"))
-		goto success_setup_cb;
+	if (!strcmp(cb->name, "cvp_camera")) {
+		cb->is_secure = true;
+		rc = msm_cvp_setup_context_bank(&core->resources, cb, dev);
+		if (rc) {
+			dprintk(CVP_ERR, "Cannot setup context bank %s %d\n",
+					cb->name, rc);
+			goto err_setup_cb;
+		}
+
+		return 0;
+	}
 
 	rc = of_property_read_u32_array(np, "qcom,iommu-dma-addr-pool",
 			(u32 *)&cb->addr_range, 2);
@@ -1120,7 +1129,6 @@ static int msm_cvp_populate_context_bank(struct device *dev,
 		cb->name, cb->addr_range.start,
 		cb->addr_range.size, cb->buffer_type);
 
-success_setup_cb:
 	cb->domain = iommu_get_domain_for_dev(dev);
 	if (IS_ERR_OR_NULL(cb->domain)) {
 		dprintk(CVP_ERR, "Create domain failed\n");