Prechádzať zdrojové kódy

Merge "msm: camera: reqmgr: skip re_apply of ISP for buf_done request" into camera-kernel.lnx.4.0

Camera Software Integration 5 rokov pred
rodič
commit
52222ca8b2

+ 8 - 0
drivers/cam_isp/cam_isp_context.c

@@ -2486,6 +2486,14 @@ static int __cam_isp_ctx_apply_req_in_activated_state(
 		goto end;
 	}
 
+	if (apply->re_apply)
+		if (apply->request_id <= ctx_isp->last_applied_req_id) {
+			CAM_INFO(CAM_ISP,
+				"Trying to reapply the same request %llu again",
+				apply->request_id);
+			return 0;
+		}
+
 	spin_lock_bh(&ctx->lock);
 	req = list_first_entry(&ctx->pending_req_list, struct cam_ctx_request,
 		list);

+ 5 - 0
drivers/cam_req_mgr/cam_req_mgr_core.c

@@ -662,6 +662,11 @@ static int __cam_req_mgr_send_req(struct cam_req_mgr_core_link *link,
 
 	apply_req.link_hdl = link->link_hdl;
 	apply_req.report_if_bubble = 0;
+	apply_req.re_apply = false;
+	if (link->retry_cnt > 0) {
+		if (g_crm_core_dev->recovery_on_apply_fail)
+			apply_req.re_apply = true;
+	}
 
 	for (i = 0; i < link->num_devs; i++) {
 		dev = &link->l_dev[i];

+ 2 - 0
drivers/cam_req_mgr/cam_req_mgr_core.h

@@ -413,10 +413,12 @@ struct cam_req_mgr_core_session {
  * - Core camera request manager data struct
  * @session_head : list head holding sessions
  * @crm_lock     : mutex lock to protect session creation & destruction
+ * @recovery_on_apply_fail : Recovery on apply failure using debugfs.
  */
 struct cam_req_mgr_core_device {
 	struct list_head             session_head;
 	struct mutex                 crm_lock;
+	bool                         recovery_on_apply_fail;
 };
 
 /**

+ 8 - 1
drivers/cam_req_mgr/cam_req_mgr_debug.c

@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (c) 2016-2018, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2016-2019, The Linux Foundation. All rights reserved.
  */
 
 #include "cam_req_mgr_debug.h"
@@ -128,5 +128,12 @@ int cam_req_mgr_debug_register(struct cam_req_mgr_core_device *core_dev)
 		debugfs_root, core_dev, &bubble_recovery))
 		return -ENOMEM;
 
+	if (!debugfs_create_bool("recovery_on_apply_fail",
+		0644,
+		debugfs_root,
+		&core_dev->recovery_on_apply_fail)) {
+		return -ENOMEM;
+	}
+
 	return 0;
 }

+ 2 - 0
drivers/cam_req_mgr/cam_req_mgr_interface.h

@@ -326,6 +326,7 @@ struct cam_req_mgr_core_dev_link_setup {
  * @request_id       : request id settings to apply
  * @report_if_bubble : report to crm if failure in applying
  * @trigger_point    : the trigger point of this apply
+ * @re_apply         : to skip re_apply for buf_done request
  *
  */
 struct cam_req_mgr_apply_request {
@@ -334,6 +335,7 @@ struct cam_req_mgr_apply_request {
 	uint64_t   request_id;
 	int32_t    report_if_bubble;
 	uint32_t   trigger_point;
+	bool       re_apply;
 };
 
 /**