Prechádzať zdrojové kódy

msm: camera: ope: Corrected batch mode and stripe for ope

Corrected the striping creation for non real time device.
Disabled the ope stripe base bus. Corrected the batch mode
creation for ope bus read.

CRs-Fixed: 2594541
Change-Id: I87adbab25b84d74162a6a8ce2db1412a6d9058d0
Signed-off-by: Rishabh Jain <[email protected]>
Signed-off-by: Trishansh Bhardwaj <[email protected]>
Trishansh Bhardwaj 5 rokov pred
rodič
commit
41533c5eb2

+ 2 - 0
drivers/cam_ope/ope_hw_mgr/cam_ope_hw_mgr.c

@@ -1504,6 +1504,8 @@ static int cam_ope_mgr_process_cmd_io_buf_req(struct cam_ope_hw_mgr *hw_mgr,
 					stripe_info->pack_format = pack_format;
 					stripe_info->unpack_format =
 						unpack_format;
+					stripe_info->disable_bus =
+						in_stripe_info->disable_bus;
 					cam_ope_mgr_print_stripe_info(i, j,
 						k, l, stripe_info, iova_addr);
 				}

+ 9 - 5
drivers/cam_ope/ope_hw_mgr/ope_hw/bus_rd/ope_bus_rd.c

@@ -346,11 +346,15 @@ static int cam_ope_bus_rd_prepare(struct ope_hw *ope_hw_info,
 
 	header_size =
 	cdm_ops->cdm_get_cmd_header_size(CAM_CDM_CMD_REG_RANDOM);
-	io_port_cdm->go_cmd_addr = kmd_buf;
-	io_port_cdm->go_cmd_len =
-		sizeof(temp) * (count + header_size);
-	io_port_cdm->go_cmd_offset =
-		prepare->kmd_buf_offset;
+	for (i = 0; i < ope_request->num_batch; i++) {
+		io_port_cdm =
+			&bus_rd_ctx->io_port_cdm_batch.io_port_cdm[i];
+		io_port_cdm->go_cmd_addr = kmd_buf;
+		io_port_cdm->go_cmd_len =
+			sizeof(temp) * (count + header_size);
+		io_port_cdm->go_cmd_offset =
+			prepare->kmd_buf_offset;
+	}
 	kmd_buf = cdm_ops->cdm_write_regrandom(
 		kmd_buf, count/2, temp_reg);
 	prepare->kmd_buf_offset +=

+ 10 - 13
drivers/cam_ope/ope_hw_mgr/ope_hw/ope_core.c

@@ -772,7 +772,7 @@ static uint32_t *ope_create_frame_cmd(struct cam_ope_hw_mgr *hw_mgr,
 					hw_mgr->iommu_hdl);
 				return NULL;
 			}
-			iova_addr = iova_addr + frm_proc->cmd_buf[j][i].offset;
+			iova_addr = iova_addr + frm_proc->cmd_buf[i][j].offset;
 
 			rc = cam_mem_get_cpu_buf(
 				frm_proc->cmd_buf[i][j].mem_handle,
@@ -1123,7 +1123,7 @@ static uint32_t *ope_create_stripes_nrt(struct cam_ope_hw_mgr *hw_mgr,
 	struct cam_ope_ctx *ctx_data, uint32_t req_idx,
 	uint32_t *kmd_buf,
 	struct cam_ope_dev_prepare_req *ope_dev_prepare_req,
-	uint32_t kmd_buf_offset)
+	uint32_t *kmd_buf_offset, uint32_t **cdm_kmd_start_addr)
 {
 	int i, j;
 	struct cam_ope_request *ope_request;
@@ -1133,13 +1133,10 @@ static uint32_t *ope_create_stripes_nrt(struct cam_ope_hw_mgr *hw_mgr,
 	uint32_t stripe_idx = 0;
 	struct cam_cdm_utils_ops *cdm_ops;
 	uint32_t len;
-	uint32_t *cdm_kmd_start_addr;
 	int num_nrt_stripes, num_arb;
 
 	frm_proc = ope_dev_prepare_req->frame_process;
 	ope_request = ctx_data->req_list[req_idx];
-	cdm_kmd_start_addr = (uint32_t *)ope_request->ope_kmd_buf.cpu_addr +
-		(kmd_buf_offset / sizeof(len));
 	num_nrt_stripes = ctx_data->ope_acquire.nrt_stripes_for_arb;
 	num_arb = ope_request->num_stripes[0] /
 		ctx_data->ope_acquire.nrt_stripes_for_arb;
@@ -1162,17 +1159,17 @@ static uint32_t *ope_create_stripes_nrt(struct cam_ope_hw_mgr *hw_mgr,
 				kmd_buf = cdm_ops->cdm_write_wait_comp_event(
 					kmd_buf,
 					OPE_WAIT_COMP_IDLE, 0x0);
-				len = (kmd_buf - cdm_kmd_start_addr) *
+				len = (kmd_buf - *cdm_kmd_start_addr) *
 					sizeof(uint32_t);
 				cam_ope_dev_prepare_cdm_request(
 					ope_dev_prepare_req->hw_mgr,
 					ope_dev_prepare_req->prepare_args,
 					ope_dev_prepare_req->ctx_data,
 					ope_dev_prepare_req->req_idx,
-					kmd_buf_offset, ope_dev_prepare_req,
+					*kmd_buf_offset, ope_dev_prepare_req,
 					len, true);
-				cdm_kmd_start_addr = kmd_buf;
-				kmd_buf_offset += len;
+				*cdm_kmd_start_addr = kmd_buf;
+				*kmd_buf_offset += len;
 			}
 			/* cmd buffer stripes */
 			kmd_buf = ope_create_stripe_cmd(hw_mgr, ctx_data,
@@ -1317,7 +1314,7 @@ static int cam_ope_dev_create_kmd_buf_nrt(struct cam_ope_hw_mgr *hw_mgr,
 
 	/* Stripes */
 	kmd_buf = ope_create_stripes_nrt(hw_mgr, ctx_data, req_idx, kmd_buf,
-		ope_dev_prepare_req, kmd_buf_offset);
+		ope_dev_prepare_req, &kmd_buf_offset, &cdm_kmd_start_addr);
 	if (!kmd_buf) {
 		rc = -EINVAL;
 		goto end;
@@ -1358,7 +1355,7 @@ static int cam_ope_dev_create_kmd_buf_batch(struct cam_ope_hw_mgr *hw_mgr,
 	frm_proc = ope_dev_prepare_req->frame_process;
 	ope_request = ctx_data->req_list[req_idx];
 	kmd_buf = (uint32_t *)ope_request->ope_kmd_buf.cpu_addr +
-		kmd_buf_offset;
+		(kmd_buf_offset / sizeof(len));
 	cdm_kmd_start_addr = kmd_buf;
 	cdm_ops = ctx_data->ope_cdm.cdm_ops;
 
@@ -1436,11 +1433,11 @@ static int cam_ope_dev_create_kmd_buf_batch(struct cam_ope_hw_mgr *hw_mgr,
 			OPE_WAIT_COMP_IDLE, 0x0);
 
 	/* prepare CDM submit packet */
-	len = (cdm_kmd_start_addr - kmd_buf) * sizeof(uint32_t);
+	len = (kmd_buf - cdm_kmd_start_addr) * sizeof(uint32_t);
 	cam_ope_dev_prepare_cdm_request(ope_dev_prepare_req->hw_mgr,
 		ope_dev_prepare_req->prepare_args,
 		ope_dev_prepare_req->ctx_data, ope_dev_prepare_req->req_idx,
-		ope_dev_prepare_req->kmd_buf_offset, ope_dev_prepare_req,
+		kmd_buf_offset, ope_dev_prepare_req,
 		len, false);
 
 end: