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

Commit 78333605 authored by Suresh Vankadara's avatar Suresh Vankadara Committed by Gerrit - the friendly Code Review server
Browse files

Merge "msm: camera: reqmgr: reset the slot on buf_done" into dev/msm-4.14-camx

parents 9e7de92d a436b4fc
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -935,6 +935,7 @@ static int __cam_isp_ctx_notify_sof_in_activated_state(
			notify.dev_hdl = ctx->dev_hdl;
			notify.frame_id = ctx_isp->frame_id;
			notify.trigger = CAM_TRIGGER_POINT_SOF;
			notify.req_id = ctx_isp->req_info.last_bufdone_req_id;
			notify.sof_timestamp_val = ctx_isp->sof_timestamp_val;

			ctx->ctx_crm_intf->notify_trigger(&notify);
+21 −5
Original line number Diff line number Diff line
@@ -356,7 +356,8 @@ static void __cam_req_mgr_reset_req_slot(struct cam_req_mgr_core_link *link,

	/* Check if CSL has already pushed new request*/
	if (slot->status == CRM_SLOT_STATUS_REQ_ADDED ||
		in_q->last_applied_idx == idx)
		in_q->last_applied_idx == idx ||
		idx < 0)
		return;

	/* Reset input queue slot */
@@ -1311,10 +1312,6 @@ static int __cam_req_mgr_process_req(struct cam_req_mgr_core_link *link,
			if (slot->req_id > 0) {
				last_app_idx = in_q->last_applied_idx;
				in_q->last_applied_idx = idx;
				if (abs(last_app_idx - idx) >=
					reset_step + 1)
					__cam_req_mgr_reset_req_slot(link,
						last_app_idx);
			}

			__cam_req_mgr_dec_idx(
@@ -2203,6 +2200,12 @@ int cam_req_mgr_process_error(void *priv, void *data)
			__cam_req_mgr_tbl_set_all_skip_cnt(&link->req.l_tbl);
			in_q->rd_idx = idx;
			in_q->slot[idx].status = CRM_SLOT_STATUS_REQ_ADDED;
			if (link->sync_link) {
				in_q->slot[idx].sync_mode = 0;
				__cam_req_mgr_inc_idx(&idx, 1,
					link->req.l_tbl->num_slots);
				in_q->slot[idx].sync_mode = 0;
			}
			spin_lock_bh(&link->link_state_spin_lock);
			link->state = CAM_CRM_LINK_STATE_ERR;
			spin_unlock_bh(&link->link_state_spin_lock);
@@ -2227,6 +2230,7 @@ int cam_req_mgr_process_error(void *priv, void *data)
static int cam_req_mgr_process_trigger(void *priv, void *data)
{
	int                                  rc = 0;
	int32_t                              idx = -1;
	struct cam_req_mgr_trigger_notify   *trigger_data = NULL;
	struct cam_req_mgr_core_link        *link = NULL;
	struct cam_req_mgr_req_queue        *in_q = NULL;
@@ -2249,6 +2253,17 @@ static int cam_req_mgr_process_trigger(void *priv, void *data)
	in_q = link->req.in_q;

	mutex_lock(&link->req.lock);

	if (trigger_data->trigger == CAM_TRIGGER_POINT_SOF) {
		idx = __cam_req_mgr_find_slot_for_req(in_q,
			trigger_data->req_id);
		if (idx >= 0) {
			if (idx == in_q->last_applied_idx)
				in_q->last_applied_idx = -1;
			__cam_req_mgr_reset_req_slot(link, idx);
		}
	}

	/*
	 * Check if current read index is in applied state, if yes make it free
	 *    and increment read index to next slot.
@@ -2515,6 +2530,7 @@ static int cam_req_mgr_cb_notify_trigger(
	notify_trigger->link_hdl = trigger_data->link_hdl;
	notify_trigger->dev_hdl = trigger_data->dev_hdl;
	notify_trigger->trigger = trigger_data->trigger;
	notify_trigger->req_id = trigger_data->req_id;
	notify_trigger->sof_timestamp_val = trigger_data->sof_timestamp_val;
	task->process_cb = &cam_req_mgr_process_trigger;
	rc = cam_req_mgr_workq_enqueue_task(task, link, CRM_TASK_PRIORITY_0);
+2 −0
Original line number Diff line number Diff line
@@ -207,6 +207,7 @@ enum cam_req_mgr_link_evt_type {
 * @trigger  : trigger point of this notification, CRM will send apply
 * only to the devices which subscribe to this point.
 * @sof_timestamp_val: Captured time stamp value at sof hw event
 * @req_id   : req id which returned buf_done
 */
struct cam_req_mgr_trigger_notify {
	int32_t  link_hdl;
@@ -214,6 +215,7 @@ struct cam_req_mgr_trigger_notify {
	int64_t  frame_id;
	uint32_t trigger;
	uint64_t sof_timestamp_val;
	uint64_t req_id;
};

/**