Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit eafa6a10 authored by Ashwini Muduganti's avatar Ashwini Muduganti
Browse files

Revert "msm: camera: Correct kernel cpu dma buffer operations"



This reverts commit edad88f8.

Change-Id: I559a86f912f12c967baa95bf29e05e32b06f9059
Signed-off-by: default avatarAshwini Muduganti <amudug@codeaurora.org>
parent 9e725ec4
Loading
Loading
Loading
Loading
+13 −15
Original line number Diff line number Diff line
@@ -337,13 +337,15 @@ int32_t cam_context_prepare_dev_to_hw(struct cam_context *ctx,

	if (!ctx || !cmd) {
		CAM_ERR(CAM_CTXT, "Invalid input params %pK %pK", ctx, cmd);
		return -EINVAL;
		rc = -EINVAL;
		goto end;
	}

	if (!ctx->hw_mgr_intf) {
		CAM_ERR(CAM_CTXT, "[%s][%d] HW interface is not ready",
			ctx->dev_name, ctx->ctx_id);
		return -EFAULT;
		rc = -EFAULT;
		goto end;
	}
	rc = cam_context_validate_thread();
	if (rc)
@@ -360,7 +362,8 @@ int32_t cam_context_prepare_dev_to_hw(struct cam_context *ctx,
	if (!req) {
		CAM_ERR(CAM_CTXT, "[%s][%d] No more request obj free",
			ctx->dev_name, ctx->ctx_id);
		return -ENOMEM;
		rc = -ENOMEM;
		goto end;
	}

	memset(req, 0, sizeof(*req));
@@ -386,7 +389,7 @@ int32_t cam_context_prepare_dev_to_hw(struct cam_context *ctx,
			"request %lld has been flushed, reject packet",
			packet->header.request_id);
		rc = -EINVAL;
		goto free_cpu_buf;
		goto free_req;
	}

	if (packet->header.request_id > ctx->last_flush_req)
@@ -412,7 +415,7 @@ int32_t cam_context_prepare_dev_to_hw(struct cam_context *ctx,
			"[%s][%d] Prepare config packet failed in HW layer",
			ctx->dev_name, ctx->ctx_id);
		rc = -EFAULT;
		goto free_cpu_buf;
		goto free_req;
	}
	req->num_hw_update_entries = cfg.num_hw_update_entries;
	req->num_out_map_entries = cfg.num_out_map_entries;
@@ -463,35 +466,30 @@ int32_t cam_context_prepare_dev_to_hw(struct cam_context *ctx,
						req->request_id);

				cam_context_putref(ctx);

				goto put_ref;
			}
			CAM_DBG(CAM_CTXT, "register in fence cb: %d ret = %d",
				req->in_map_entries[j].sync_id, rc);
		}
		goto end;
	}

	if (cam_mem_put_cpu_buf((int32_t) cmd->packet_handle))
		CAM_WARN(CAM_CTXT, "[%s][%d] Can not put packet address",
			ctx->dev_name, ctx->ctx_id);

	return rc;

put_ref:
	for (--i; i >= 0; i--) {
		if (cam_sync_put_obj_ref(req->out_map_entries[i].sync_id))
		rc = cam_sync_put_obj_ref(req->out_map_entries[i].sync_id);
		if (rc)
			CAM_ERR(CAM_CTXT, "Failed to put ref of fence %d",
				req->out_map_entries[i].sync_id);
	}
free_cpu_buf:
	if (cam_mem_put_cpu_buf((int32_t) cmd->packet_handle))
		CAM_WARN(CAM_CTXT, "[%s][%d] Can not put packet address",
			ctx->dev_name, ctx->ctx_id);
free_req:
	spin_lock(&ctx->lock);
	list_add_tail(&req->list, &ctx->free_req_list);
	req->ctx = NULL;
	spin_unlock(&ctx->lock);

end:
	return rc;
}

+4 −33
Original line number Diff line number Diff line
@@ -534,8 +534,7 @@ static int cam_fd_mgr_util_prepare_io_buf_info(int32_t iommu_hdl,
	struct cam_fd_hw_io_buffer *output_buf, uint32_t io_buf_size)
{
	int rc = -EINVAL;
	uint32_t plane, num_out_buf, num_in_buf;
	int i, j, k;
	uint32_t i, j, plane, num_out_buf, num_in_buf;
	struct cam_buf_io_cfg *io_cfg;
	dma_addr_t io_addr[CAM_PACKET_MAX_PLANES];
	uintptr_t cpu_addr[CAM_PACKET_MAX_PLANES];
@@ -607,7 +606,7 @@ static int cam_fd_mgr_util_prepare_io_buf_info(int32_t iommu_hdl,
						io_cfg[i].direction,
						io_cfg[i].resource_type, plane,
						rc);
					goto rel_cpu_buf;
					return rc;
				}

				cpu_addr[plane] += io_cfg[i].offsets[plane];
@@ -657,42 +656,14 @@ static int cam_fd_mgr_util_prepare_io_buf_info(int32_t iommu_hdl,
		default:
			CAM_ERR(CAM_FD, "Unsupported io direction %d",
				io_cfg[i].direction);
			rc = -EINVAL;
			break;
		}

		if (plane != 0) {
			for (k = plane - 1; k >= 0; k--) {
				if (need_cpu_map) {
					if (cam_mem_put_cpu_buf(
						io_cfg[i].mem_handle[k]))
						CAM_WARN(CAM_FD,
						"Invalid cpu buf %d %d %d %d",
						io_cfg[i].direction,
						io_cfg[i].resource_type, k);
				}
			}
			return -EINVAL;
		}
	}

	prepare->num_in_map_entries  = num_in_buf;
	prepare->num_out_map_entries = num_out_buf;
	return rc;

rel_cpu_buf:
	if (plane != 0) {
		for (k = plane - 1; k >= 0; k--) {
			if (need_cpu_map) {
				if (cam_mem_put_cpu_buf(
					io_cfg[i].mem_handle[k]))
					CAM_WARN(CAM_FD,
						"Fail to put cpu buf %d %d %d",
						io_cfg[i].direction,
						io_cfg[i].resource_type, k);
			}
		}
	}
	return rc;
	return 0;
}

static int cam_fd_mgr_util_prepare_hw_update_entries(
+9 −41
Original line number Diff line number Diff line
@@ -3273,32 +3273,12 @@ static int cam_icp_mgr_pkt_validation(struct cam_packet *packet)
	return 0;
}

static int cam_icp_mgr_put_cmd_buf(struct cam_packet *packet)
{
	int i = 0;
	struct cam_cmd_buf_desc *cmd_desc = NULL;

	cmd_desc = (struct cam_cmd_buf_desc *)
		((uint32_t *) &packet->payload + packet->cmd_buf_offset/4);

	for (i = 0; i < packet->num_cmd_buf; i++) {
		if (cmd_desc[i].type == CAM_CMD_BUF_FW) {
			if (cam_mem_put_cpu_buf(cmd_desc[i].mem_handle))
				CAM_WARN(CAM_ICP, "put cmd buf failed: %x",
					cmd_desc[i].mem_handle);
		}
	}

	return 0;
}

static int cam_icp_mgr_process_cmd_desc(struct cam_icp_hw_mgr *hw_mgr,
	struct cam_packet *packet, struct cam_icp_hw_ctx_data *ctx_data,
	uint32_t *fw_cmd_buf_iova_addr)
{
	int rc = 0;
	int i, j, k;
	int num_cmd_buf = 0;
	uint64_t addr;
	size_t len;
	struct cam_cmd_buf_desc *cmd_desc = NULL;
@@ -3312,34 +3292,35 @@ static int cam_icp_mgr_process_cmd_desc(struct cam_icp_hw_mgr *hw_mgr,
		((uint32_t *) &packet->payload + packet->cmd_buf_offset/4);

	*fw_cmd_buf_iova_addr = 0;
	for (i = 0; i < packet->num_cmd_buf; i++, num_cmd_buf++) {
	for (i = 0; i < packet->num_cmd_buf; i++) {
		if (cmd_desc[i].type == CAM_CMD_BUF_FW) {
			rc = cam_mem_get_io_buf(cmd_desc[i].mem_handle,
				hw_mgr->iommu_hdl, &addr, &len);
			if (rc) {
				CAM_ERR(CAM_ICP, "get cmd buf failed %x",
					hw_mgr->iommu_hdl);
				num_cmd_buf = (num_cmd_buf > 0) ?
					num_cmd_buf-- : 0;
				goto rel_cmd_buf;
				return rc;
			}
			*fw_cmd_buf_iova_addr = addr;
			*fw_cmd_buf_iova_addr =
				(*fw_cmd_buf_iova_addr + cmd_desc[i].offset);
			rc = cam_mem_get_cpu_buf(cmd_desc[i].mem_handle,
				&cpu_addr, &len);
			if (rc || !cpu_addr) {
			if (rc) {
				CAM_ERR(CAM_ICP, "get cmd buf failed %x",
					hw_mgr->iommu_hdl);
				*fw_cmd_buf_iova_addr = 0;
				num_cmd_buf = (num_cmd_buf > 0) ?
					num_cmd_buf-- : 0;
				goto rel_cmd_buf;
				return rc;
			}
			cpu_addr = cpu_addr + cmd_desc[i].offset;
		}
	}

	if (!cpu_addr) {
		CAM_ERR(CAM_ICP, "Invalid cpu addr");
		return -EINVAL;
	}

	if (ctx_data->icp_dev_acquire_info->dev_type !=
		CAM_ICP_RES_TYPE_BPS) {
		CAM_DBG(CAM_ICP, "cpu addr = %zx", cpu_addr);
@@ -3383,18 +3364,6 @@ static int cam_icp_mgr_process_cmd_desc(struct cam_icp_hw_mgr *hw_mgr,
		}
	}

	return rc;

rel_cmd_buf:
	for (i = num_cmd_buf; i >= 0; i--) {
		if (cmd_desc[i].type == CAM_CMD_BUF_FW) {
			if (cam_mem_put_cpu_buf(cmd_desc[i].mem_handle)) {
				CAM_WARN(CAM_ICP, "put cmd buf failed %x",
					hw_mgr->iommu_hdl);
			}
		}
	}

	return rc;
}

@@ -3963,7 +3932,6 @@ static int cam_icp_mgr_prepare_hw_update(void *hw_mgr_priv,

	CAM_DBG(CAM_ICP, "X: req id = %lld ctx_id = %u",
		packet->header.request_id, ctx_data->ctx_id);
	cam_icp_mgr_put_cmd_buf(packet);
	mutex_unlock(&ctx_data->ctx_mutex);
	return rc;
}
+6 −10
Original line number Diff line number Diff line
@@ -2215,7 +2215,8 @@ static int __cam_isp_ctx_config_dev_in_top_state(

	if (!req) {
		CAM_ERR(CAM_ISP, "No more request obj free");
		return -ENOMEM;
		rc = -ENOMEM;
		goto end;
	}

	req_isp = (struct cam_isp_ctx_req *) req->req_priv;
@@ -2271,7 +2272,7 @@ static int __cam_isp_ctx_config_dev_in_top_state(
	if (rc != 0) {
		CAM_ERR(CAM_ISP, "Prepare config packet failed in HW layer");
		rc = -EFAULT;
		goto free_cpu_buf;
		goto free_req;
	}
	req_isp->num_cfg = cfg.num_hw_update_entries;
	req_isp->num_fence_map_out = cfg.num_out_map_entries;
@@ -2332,9 +2333,6 @@ static int __cam_isp_ctx_config_dev_in_top_state(
	if (rc)
		goto put_ref;

	if (cam_mem_put_cpu_buf((int32_t) cmd->packet_handle))
		CAM_WARN(CAM_ISP, "Can not put packet address");

	CAM_DBG(CAM_REQ,
		"Preprocessing Config req_id %lld successful on ctx %u",
		req->request_id, ctx->ctx_id);
@@ -2343,18 +2341,16 @@ static int __cam_isp_ctx_config_dev_in_top_state(

put_ref:
	for (--i; i >= 0; i--) {
		if (cam_sync_put_obj_ref(req_isp->fence_map_out[i].sync_id))
		rc = cam_sync_put_obj_ref(req_isp->fence_map_out[i].sync_id);
		if (rc)
			CAM_ERR(CAM_CTXT, "Failed to put ref of fence %d",
				req_isp->fence_map_out[i].sync_id);
	}
free_cpu_buf:
	if (cam_mem_put_cpu_buf((int32_t) cmd->packet_handle))
		CAM_WARN(CAM_ISP, "Can not put packet address");
free_req:
	spin_lock_bh(&ctx->lock);
	list_add_tail(&req->list, &ctx->free_req_list);
	spin_unlock_bh(&ctx->lock);

end:
	return rc;
}

+5 −19
Original line number Diff line number Diff line
@@ -178,11 +178,6 @@ static int cam_jpeg_mgr_process_irq(void *priv, void *data)

	list_add_tail(&p_cfg_req->list, &hw_mgr->free_req_list);

	if (cam_mem_put_cpu_buf(
	p_cfg_req->hw_cfg_args.hw_update_entries[CAM_JPEG_PARAM].handle))
		CAM_WARN(CAM_JPEG, "unable to put info for cmd buf: %x",
			hw_mgr->iommu_hdl);

	return rc;
}

@@ -263,7 +258,7 @@ static int cam_jpeg_insert_cdm_change_base(
	struct cam_jpeg_hw_ctx_data *ctx_data,
	struct cam_jpeg_hw_mgr *hw_mgr)
{
	int rc = 0;
	int rc;
	uint32_t dev_type;
	struct cam_cdm_bl_request *cdm_cmd;
	uint32_t size;
@@ -465,13 +460,13 @@ static int cam_jpeg_mgr_process_cmd(void *priv, void *data)
		hw_mgr->cdm_info[dev_type][0].cdm_handle, cdm_cmd);
	if (rc) {
		CAM_ERR(CAM_JPEG, "Failed to apply the configs %d", rc);
		goto rel_cpu_buf;
		goto end_callcb;
	}

	if (!hw_mgr->devices[dev_type][0]->hw_ops.start) {
		CAM_ERR(CAM_JPEG, "op start null ");
		rc = -EINVAL;
		goto rel_cpu_buf;
		goto end_callcb;
	}
	rc = hw_mgr->devices[dev_type][0]->hw_ops.start(
		hw_mgr->devices[dev_type][0]->hw_priv,
@@ -479,22 +474,12 @@ static int cam_jpeg_mgr_process_cmd(void *priv, void *data)
	if (rc) {
		CAM_ERR(CAM_JPEG, "Failed to start hw %d",
			rc);
		goto rel_cpu_buf;
		goto end_callcb;
	}

	if (cam_mem_put_cpu_buf(
		config_args->hw_update_entries[CAM_JPEG_CHBASE].handle))
		CAM_WARN(CAM_JPEG, "unable to put info for cmd buf: %x",
			config_args->hw_update_entries[CAM_JPEG_CHBASE].handle);

	mutex_unlock(&hw_mgr->hw_mgr_mutex);
	return rc;

rel_cpu_buf:
	if (cam_mem_put_cpu_buf(
		config_args->hw_update_entries[CAM_JPEG_CHBASE].handle))
		CAM_WARN(CAM_JPEG, "unable to put info for cmd buf: %pK",
			config_args->hw_update_entries[CAM_JPEG_CHBASE].handle);
end_callcb:
	mutex_unlock(&hw_mgr->hw_mgr_mutex);
	if (p_cfg_req) {
@@ -509,6 +494,7 @@ static int cam_jpeg_mgr_process_cmd(void *priv, void *data)
			(uintptr_t)p_cfg_req->hw_cfg_args.priv;
		ctx_data->ctxt_event_cb(ctx_data->context_priv, 0, &buf_data);
	}

end_unusedev:
	mutex_lock(&hw_mgr->hw_mgr_mutex);
	hw_mgr->device_in_use[p_cfg_req->dev_type][0] = false;
Loading