Browse Source

Merge "msm: camera: isp: Logging improvements to ISP context" into camera-kernel.lnx.5.0

Camera Software Integration 3 years ago
parent
commit
4a203b01d7

+ 50 - 28
drivers/cam_core/cam_context_utils.c

@@ -405,9 +405,7 @@ int32_t cam_context_prepare_dev_to_hw(struct cam_context *ctx,
 	int rc = 0;
 	int rc = 0;
 	struct cam_ctx_request *req = NULL;
 	struct cam_ctx_request *req = NULL;
 	struct cam_hw_prepare_update_args cfg;
 	struct cam_hw_prepare_update_args cfg;
-	uintptr_t packet_addr;
 	struct cam_packet *packet;
 	struct cam_packet *packet;
-	size_t len = 0;
 	size_t remain_len = 0;
 	size_t remain_len = 0;
 	int32_t i = 0, j = 0;
 	int32_t i = 0, j = 0;
 
 
@@ -449,35 +447,12 @@ int32_t cam_context_prepare_dev_to_hw(struct cam_context *ctx,
 	atomic_set(&req->num_in_acked, 0);
 	atomic_set(&req->num_in_acked, 0);
 	memset(&req->pf_data, 0, sizeof(struct cam_hw_mgr_dump_pf_data));
 	memset(&req->pf_data, 0, sizeof(struct cam_hw_mgr_dump_pf_data));
 
 
-	/* for config dev, only memory handle is supported */
-	/* map packet from the memhandle */
-	rc = cam_mem_get_cpu_buf((int32_t) cmd->packet_handle,
-		&packet_addr, &len);
-	if (rc != 0) {
-		CAM_ERR(CAM_CTXT, "[%s][%d] Can not get packet address",
-			ctx->dev_name, ctx->ctx_id);
-		rc = -EINVAL;
+	remain_len = cam_context_parse_config_cmd(ctx, cmd, &packet);
+	if (IS_ERR(packet)) {
+		rc = PTR_ERR(packet);
 		goto free_req;
 		goto free_req;
 	}
 	}
 
 
-	if ((len < sizeof(struct cam_packet)) ||
-		(cmd->offset >= (len - sizeof(struct cam_packet)))) {
-		CAM_ERR(CAM_CTXT, "Not enough buf");
-		return -EINVAL;
-
-	}
-	remain_len = len;
-	if ((len < sizeof(struct cam_packet)) ||
-		((size_t)cmd->offset >= len - sizeof(struct cam_packet))) {
-		CAM_ERR(CAM_CTXT, "invalid buff length: %zu or offset", len);
-		rc = -EINVAL;
-		goto free_req;
-	}
-
-	remain_len -= (size_t)cmd->offset;
-	packet = (struct cam_packet *) ((uint8_t *)packet_addr +
-		(uint32_t)cmd->offset);
-
 	if (packet->header.request_id <= ctx->last_flush_req) {
 	if (packet->header.request_id <= ctx->last_flush_req) {
 		CAM_ERR(CAM_CORE,
 		CAM_ERR(CAM_CORE,
 			"request %lld has been flushed, reject packet",
 			"request %lld has been flushed, reject packet",
@@ -1295,3 +1270,50 @@ int32_t cam_context_dump_dev_to_hw(struct cam_context *ctx,
 	}
 	}
 	return rc;
 	return rc;
 }
 }
+
+size_t cam_context_parse_config_cmd(struct cam_context *ctx, struct cam_config_dev_cmd *cmd,
+	struct cam_packet **packet)
+{
+	size_t len;
+	uintptr_t packet_addr;
+	int rc = 0;
+
+	if (!ctx || !cmd || !packet) {
+		CAM_ERR(CAM_CTXT, "invalid args");
+		rc = -EINVAL;
+		goto err;
+	}
+
+	/* for config dev, only memory handle is supported */
+	/* map packet from the memhandle */
+	rc = cam_mem_get_cpu_buf((int32_t) cmd->packet_handle, &packet_addr, &len);
+	if (rc != 0) {
+		CAM_ERR(CAM_CTXT, "[%s][%d] Can not get packet address for handle:%llx",
+			ctx->dev_name, ctx->ctx_id, cmd->packet_handle);
+		rc = -EINVAL;
+		goto err;
+	}
+
+	if ((len < sizeof(struct cam_packet)) ||
+		((size_t)cmd->offset >= len - sizeof(struct cam_packet))) {
+		CAM_ERR(CAM_CTXT, "invalid buff length: %zu or offset: %zu", len,
+			(size_t)cmd->offset);
+		rc = -EINVAL;
+		goto err;
+	}
+
+	*packet = (struct cam_packet *) ((uint8_t *)packet_addr + (uint32_t)cmd->offset);
+
+	CAM_DBG(CAM_CTXT,
+		"handle:%llx, addr:0x%zx, offset:%0xllx, len:%zu, req:%llu, size:%u, opcode:0x%x",
+		cmd->packet_handle, packet_addr, cmd->offset, len, (*packet)->header.request_id,
+		(*packet)->header.size, (*packet)->header.op_code);
+
+	return (len - (size_t)cmd->offset);
+
+err:
+	if (packet)
+		*packet = ERR_PTR(rc);
+
+	return 0;
+}

+ 3 - 1
drivers/cam_core/cam_context_utils.h

@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0-only */
 /* SPDX-License-Identifier: GPL-2.0-only */
 /*
 /*
- * Copyright (c) 2017-2020, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2017-2021, The Linux Foundation. All rights reserved.
  */
  */
 
 
 #ifndef _CAM_CONTEXT_UTILS_H_
 #ifndef _CAM_CONTEXT_UTILS_H_
@@ -34,4 +34,6 @@ int32_t cam_context_dump_pf_info_to_hw(struct cam_context *ctx,
 int32_t cam_context_dump_hw_acq_info(struct cam_context *ctx);
 int32_t cam_context_dump_hw_acq_info(struct cam_context *ctx);
 int32_t cam_context_dump_dev_to_hw(struct cam_context *ctx,
 int32_t cam_context_dump_dev_to_hw(struct cam_context *ctx,
 	struct cam_dump_req_cmd *cmd);
 	struct cam_dump_req_cmd *cmd);
+size_t cam_context_parse_config_cmd(struct cam_context *ctx, struct cam_config_dev_cmd *cmd,
+	struct cam_packet **packet);
 #endif /* _CAM_CONTEXT_UTILS_H_ */
 #endif /* _CAM_CONTEXT_UTILS_H_ */

+ 3 - 19
drivers/cam_cust/cam_custom_context.c

@@ -1152,9 +1152,7 @@ static int __cam_custom_ctx_config_dev(struct cam_context *ctx,
 	int rc = 0, i;
 	int rc = 0, i;
 	struct cam_ctx_request           *req = NULL;
 	struct cam_ctx_request           *req = NULL;
 	struct cam_custom_dev_ctx_req    *req_custom;
 	struct cam_custom_dev_ctx_req    *req_custom;
-	uintptr_t                         packet_addr;
 	struct cam_packet                *packet;
 	struct cam_packet                *packet;
-	size_t                            len = 0;
 	struct cam_hw_prepare_update_args cfg;
 	struct cam_hw_prepare_update_args cfg;
 	struct cam_req_mgr_add_request    add_req;
 	struct cam_req_mgr_add_request    add_req;
 	struct cam_custom_context        *ctx_custom =
 	struct cam_custom_context        *ctx_custom =
@@ -1176,26 +1174,12 @@ static int __cam_custom_ctx_config_dev(struct cam_context *ctx,
 
 
 	req_custom = (struct cam_custom_dev_ctx_req *) req->req_priv;
 	req_custom = (struct cam_custom_dev_ctx_req *) req->req_priv;
 
 
-	/* for config dev, only memory handle is supported */
-	/* map packet from the memhandle */
-	rc = cam_mem_get_cpu_buf((int32_t) cmd->packet_handle,
-		&packet_addr, &len);
-	if (rc != 0) {
-		CAM_ERR(CAM_CUSTOM, "Can not get packet address");
-		rc = -EINVAL;
+	cam_context_parse_config_cmd(ctx, cmd, &packet);
+	if (IS_ERR(packet)) {
+		rc = PTR_ERR(packet);
 		goto free_req;
 		goto free_req;
 	}
 	}
 
 
-	packet = (struct cam_packet *)(packet_addr + (uint32_t)cmd->offset);
-	CAM_DBG(CAM_CUSTOM, "pack_handle %llx", cmd->packet_handle);
-	CAM_DBG(CAM_CUSTOM, "packet address is 0x%zx", packet_addr);
-	CAM_DBG(CAM_CUSTOM, "packet with length %zu, offset 0x%llx",
-		len, cmd->offset);
-	CAM_DBG(CAM_CUSTOM, "Packet request id %lld",
-		packet->header.request_id);
-	CAM_DBG(CAM_CUSTOM, "Packet size 0x%x", packet->header.size);
-	CAM_DBG(CAM_CUSTOM, "packet op %d", packet->header.op_code);
-
 	if ((((packet->header.op_code) & 0xF) ==
 	if ((((packet->header.op_code) & 0xF) ==
 		CAM_CUSTOM_PACKET_UPDATE_DEV)
 		CAM_CUSTOM_PACKET_UPDATE_DEV)
 		&& (packet->header.request_id <= ctx->last_flush_req)) {
 		&& (packet->header.request_id <= ctx->last_flush_req)) {

+ 21 - 51
drivers/cam_isp/cam_isp_context.c

@@ -2619,15 +2619,17 @@ static int __cam_isp_ctx_handle_error(struct cam_isp_context *ctx_isp,
 		&ctx->active_req_list, list) {
 		&ctx->active_req_list, list) {
 		req_isp = (struct cam_isp_ctx_req *) req->req_priv;
 		req_isp = (struct cam_isp_ctx_req *) req->req_priv;
 		if (!req_isp->bubble_report) {
 		if (!req_isp->bubble_report) {
+			CAM_ERR(CAM_ISP, "signalled error for req %llu",
+				req->request_id);
 			for (i = 0; i < req_isp->num_fence_map_out; i++) {
 			for (i = 0; i < req_isp->num_fence_map_out; i++) {
 				fence_map_out =
 				fence_map_out =
 					&req_isp->fence_map_out[i];
 					&req_isp->fence_map_out[i];
-				CAM_ERR(CAM_ISP,
-					"req %llu, Sync fd 0x%x ctx %u",
-					req->request_id,
-					req_isp->fence_map_out[i].sync_id,
-					ctx->ctx_id);
 				if (req_isp->fence_map_out[i].sync_id != -1) {
 				if (req_isp->fence_map_out[i].sync_id != -1) {
+					CAM_DBG(CAM_ISP,
+						"req %llu, Sync fd 0x%x ctx %u",
+						req->request_id,
+						req_isp->fence_map_out[i].sync_id,
+						ctx->ctx_id);
 					rc = cam_sync_signal(
 					rc = cam_sync_signal(
 						fence_map_out->sync_id,
 						fence_map_out->sync_id,
 						CAM_SYNC_STATE_SIGNALED_ERROR,
 						CAM_SYNC_STATE_SIGNALED_ERROR,
@@ -2651,15 +2653,17 @@ static int __cam_isp_ctx_handle_error(struct cam_isp_context *ctx_isp,
 		&ctx->wait_req_list, list) {
 		&ctx->wait_req_list, list) {
 		req_isp = (struct cam_isp_ctx_req *) req->req_priv;
 		req_isp = (struct cam_isp_ctx_req *) req->req_priv;
 		if (!req_isp->bubble_report) {
 		if (!req_isp->bubble_report) {
+			CAM_ERR(CAM_ISP, "signalled error for req %llu",
+				req->request_id);
 			for (i = 0; i < req_isp->num_fence_map_out; i++) {
 			for (i = 0; i < req_isp->num_fence_map_out; i++) {
 				fence_map_out =
 				fence_map_out =
 					&req_isp->fence_map_out[i];
 					&req_isp->fence_map_out[i];
-				CAM_ERR(CAM_ISP,
-					"req %llu, Sync fd 0x%x ctx %u",
-					req->request_id,
-					req_isp->fence_map_out[i].sync_id,
-					ctx->ctx_id);
 				if (req_isp->fence_map_out[i].sync_id != -1) {
 				if (req_isp->fence_map_out[i].sync_id != -1) {
+					CAM_DBG(CAM_ISP,
+						"req %llu, Sync fd 0x%x ctx %u",
+						req->request_id,
+						req_isp->fence_map_out[i].sync_id,
+						ctx->ctx_id);
 					rc = cam_sync_signal(
 					rc = cam_sync_signal(
 						fence_map_out->sync_id,
 						fence_map_out->sync_id,
 						CAM_SYNC_STATE_SIGNALED_ERROR,
 						CAM_SYNC_STATE_SIGNALED_ERROR,
@@ -2669,7 +2673,6 @@ static int __cam_isp_ctx_handle_error(struct cam_isp_context *ctx_isp,
 			}
 			}
 			list_del_init(&req->list);
 			list_del_init(&req->list);
 			list_add_tail(&req->list, &ctx->free_req_list);
 			list_add_tail(&req->list, &ctx->free_req_list);
-			ctx_isp->active_req_cnt--;
 		} else {
 		} else {
 			found = 1;
 			found = 1;
 			break;
 			break;
@@ -2700,7 +2703,6 @@ move_to_pending:
 			req_isp = (struct cam_isp_ctx_req *) req->req_priv;
 			req_isp = (struct cam_isp_ctx_req *) req->req_priv;
 			list_del_init(&req->list);
 			list_del_init(&req->list);
 			list_add(&req->list, &ctx->pending_req_list);
 			list_add(&req->list, &ctx->pending_req_list);
-			ctx_isp->active_req_cnt--;
 		}
 		}
 	}
 	}
 
 
@@ -4873,9 +4875,7 @@ static int __cam_isp_ctx_config_dev_in_top_state(
 	int rc = 0, i;
 	int rc = 0, i;
 	struct cam_ctx_request           *req = NULL;
 	struct cam_ctx_request           *req = NULL;
 	struct cam_isp_ctx_req           *req_isp;
 	struct cam_isp_ctx_req           *req_isp;
-	uintptr_t                         packet_addr;
 	struct cam_packet                *packet;
 	struct cam_packet                *packet;
-	size_t                            len = 0;
 	size_t                            remain_len = 0;
 	size_t                            remain_len = 0;
 	struct cam_hw_prepare_update_args cfg = {0};
 	struct cam_hw_prepare_update_args cfg = {0};
 	struct cam_req_mgr_add_request    add_req;
 	struct cam_req_mgr_add_request    add_req;
@@ -4903,35 +4903,12 @@ static int __cam_isp_ctx_config_dev_in_top_state(
 
 
 	req_isp = (struct cam_isp_ctx_req *) req->req_priv;
 	req_isp = (struct cam_isp_ctx_req *) req->req_priv;
 
 
-	/* for config dev, only memory handle is supported */
-	/* map packet from the memhandle */
-	rc = cam_mem_get_cpu_buf((int32_t) cmd->packet_handle,
-		&packet_addr, &len);
-	if (rc != 0) {
-		CAM_ERR(CAM_ISP, "Can not get packet address");
-		rc = -EINVAL;
-		goto free_req;
-	}
-
-	remain_len = len;
-	if ((len < sizeof(struct cam_packet)) ||
-		((size_t)cmd->offset >= len - sizeof(struct cam_packet))) {
-		CAM_ERR(CAM_ISP, "invalid buff length: %zu or offset", len);
-		rc = -EINVAL;
+	remain_len = cam_context_parse_config_cmd(ctx, cmd, &packet);
+	if (IS_ERR(packet)) {
+		rc = PTR_ERR(packet);
 		goto free_req;
 		goto free_req;
 	}
 	}
 
 
-	remain_len -= (size_t)cmd->offset;
-	packet = (struct cam_packet *)(packet_addr + (uint32_t)cmd->offset);
-	CAM_DBG(CAM_ISP, "pack_handle %llx", cmd->packet_handle);
-	CAM_DBG(CAM_ISP, "packet address is 0x%zx", packet_addr);
-	CAM_DBG(CAM_ISP, "packet with length %zu, offset 0x%llx",
-		len, cmd->offset);
-	CAM_DBG(CAM_ISP, "Packet request id %lld",
-		packet->header.request_id);
-	CAM_DBG(CAM_ISP, "Packet size 0x%x", packet->header.size);
-	CAM_DBG(CAM_ISP, "packet op %d", packet->header.op_code);
-
 	/* Query the packet opcode */
 	/* Query the packet opcode */
 	hw_cmd_args.ctxt_to_hw_map = ctx_isp->hw_ctx;
 	hw_cmd_args.ctxt_to_hw_map = ctx_isp->hw_ctx;
 	hw_cmd_args.cmd_type = CAM_HW_MGR_CMD_INTERNAL;
 	hw_cmd_args.cmd_type = CAM_HW_MGR_CMD_INTERNAL;
@@ -4946,8 +4923,6 @@ static int __cam_isp_ctx_config_dev_in_top_state(
 	}
 	}
 
 
 	packet_opcode = isp_hw_cmd_args.u.packet_op_code;
 	packet_opcode = isp_hw_cmd_args.u.packet_op_code;
-	CAM_DBG(CAM_ISP, "packet op %d", packet_opcode);
-
 	if ((packet_opcode == CAM_ISP_PACKET_UPDATE_DEV)
 	if ((packet_opcode == CAM_ISP_PACKET_UPDATE_DEV)
 		&& (packet->header.request_id <= ctx->last_flush_req)) {
 		&& (packet->header.request_id <= ctx->last_flush_req)) {
 		CAM_INFO(CAM_ISP,
 		CAM_INFO(CAM_ISP,
@@ -4974,8 +4949,6 @@ static int __cam_isp_ctx_config_dev_in_top_state(
 	req_isp->hw_update_data.fps = -1;
 	req_isp->hw_update_data.fps = -1;
 	req_isp->hw_update_data.packet = packet;
 	req_isp->hw_update_data.packet = packet;
 
 
-	CAM_DBG(CAM_ISP, "try to prepare config packet......");
-
 	rc = ctx->hw_mgr_intf->hw_prepare_update(
 	rc = ctx->hw_mgr_intf->hw_prepare_update(
 		ctx->hw_mgr_intf->hw_mgr_priv, &cfg);
 		ctx->hw_mgr_intf->hw_mgr_priv, &cfg);
 	if (rc != 0) {
 	if (rc != 0) {
@@ -5002,17 +4975,14 @@ static int __cam_isp_ctx_config_dev_in_top_state(
 		}
 		}
 	}
 	}
 
 
-	CAM_DBG(CAM_ISP, "num_entry: %d, num fence out: %d, num fence in: %d",
-		req_isp->num_cfg, req_isp->num_fence_map_out,
-		req_isp->num_fence_map_in);
+	CAM_DBG(CAM_ISP,
+		"packet req-id:%lld, opcode:%d, num_entry:%d, num_fence_out: %d, num_fence_in: %d",
+		packet->header.request_id, req_isp->hw_update_data.packet_opcode_type,
+		req_isp->num_cfg, req_isp->num_fence_map_out, req_isp->num_fence_map_in);
 
 
 	req->request_id = packet->header.request_id;
 	req->request_id = packet->header.request_id;
 	req->status = 1;
 	req->status = 1;
 
 
-	CAM_DBG(CAM_ISP, "Packet request id %lld packet opcode:%d",
-		packet->header.request_id,
-		req_isp->hw_update_data.packet_opcode_type);
-
 	if (req_isp->hw_update_data.packet_opcode_type ==
 	if (req_isp->hw_update_data.packet_opcode_type ==
 		CAM_ISP_PACKET_INIT_DEV) {
 		CAM_ISP_PACKET_INIT_DEV) {
 		if (ctx->state < CAM_CTX_ACTIVATED) {
 		if (ctx->state < CAM_CTX_ACTIVATED) {