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

Commit 73f0e661 authored by bait_dispatcher_monitor_system's avatar bait_dispatcher_monitor_system Committed by Gerrit - the friendly Code Review server
Browse files

Merge "msm: mdss: increase wait for kickoff timeout in display thread"

parents 1cac96e2 ced5376f
Loading
Loading
Loading
Loading
+7 −4
Original line number Diff line number Diff line
@@ -2399,7 +2399,7 @@ static void __mdss_fb_copy_fence(struct msm_sync_pt_data *sync_pt_data,
	mutex_unlock(&sync_pt_data->sync_mutex);
}

static void __mdss_fb_wait_for_fence_sub(struct msm_sync_pt_data *sync_pt_data,
static int __mdss_fb_wait_for_fence_sub(struct msm_sync_pt_data *sync_pt_data,
	struct sync_fence **fences, int fence_cnt)
{
	int i, ret = 0;
@@ -2454,7 +2454,7 @@ static void __mdss_fb_wait_for_fence_sub(struct msm_sync_pt_data *sync_pt_data,
		for (; i < fence_cnt; i++)
			sync_fence_put(fences[i]);
	}

	return ret;
}

int mdss_fb_wait_for_fence(struct msm_sync_pt_data *sync_pt_data)
@@ -2544,6 +2544,7 @@ static int __mdss_fb_sync_buf_done_callback(struct notifier_block *p,
	struct msm_sync_pt_data *sync_pt_data;
	struct msm_fb_data_type *mfd;
	int fence_cnt;
	int ret = NOTIFY_OK;

	sync_pt_data = container_of(p, struct msm_sync_pt_data, notifier);
	mfd = container_of(sync_pt_data, struct msm_fb_data_type,
@@ -2562,7 +2563,7 @@ static int __mdss_fb_sync_buf_done_callback(struct notifier_block *p,
			sync_pt_data->temp_fen_cnt) {
			fence_cnt = sync_pt_data->temp_fen_cnt;
			sync_pt_data->temp_fen_cnt = 0;
			__mdss_fb_wait_for_fence_sub(sync_pt_data,
			ret = __mdss_fb_wait_for_fence_sub(sync_pt_data,
				sync_pt_data->temp_fen, fence_cnt);
		}
		if (mfd->idle_time && !mod_delayed_work(system_wq,
@@ -2570,6 +2571,8 @@ static int __mdss_fb_sync_buf_done_callback(struct notifier_block *p,
					msecs_to_jiffies(mfd->idle_time)))
			pr_debug("fb%d: restarted idle work\n",
					mfd->index);
		if (ret == -ETIME)
			ret = NOTIFY_BAD;
		break;
	case MDP_NOTIFY_FRAME_FLUSHED:
		pr_debug("%s: frame flushed\n", sync_pt_data->fence_name);
@@ -2594,7 +2597,7 @@ static int __mdss_fb_sync_buf_done_callback(struct notifier_block *p,
		break;
	}

	return NOTIFY_OK;
	return ret;
}

/**
+1 −1
Original line number Diff line number Diff line
@@ -41,7 +41,7 @@
 * unreasonably large. Set to 1s more than first wait + final wait which
 * are already quite long and proceed without any further waits. */
#define WAIT_DISP_OP_TIMEOUT (WAIT_FENCE_FIRST_TIMEOUT + \
		WAIT_FENCE_FINAL_TIMEOUT + 1)
		WAIT_FENCE_FINAL_TIMEOUT + MSEC_PER_SEC)

#ifndef MAX
#define  MAX(x, y) (((x) > (y)) ? (x) : (y))
+39 −1
Original line number Diff line number Diff line
@@ -3474,6 +3474,32 @@ int mdss_mdp_display_wait4pingpong(struct mdss_mdp_ctl *ctl, bool use_lock)
	return ret;
}

static void mdss_mdp_force_border_color(struct mdss_mdp_ctl *ctl)
{
	struct mdss_mdp_ctl *sctl = mdss_mdp_get_split_ctl(ctl);

	ctl->force_screen_state = MDSS_SCREEN_FORCE_BLANK;

	if (sctl)
		sctl->force_screen_state = MDSS_SCREEN_FORCE_BLANK;

	mdss_mdp_mixer_setup(ctl, MDSS_MDP_MIXER_MUX_LEFT);
	mdss_mdp_mixer_setup(ctl, MDSS_MDP_MIXER_MUX_RIGHT);

	ctl->force_screen_state = MDSS_SCREEN_DEFAULT;
	if (sctl)
		sctl->force_screen_state = MDSS_SCREEN_DEFAULT;

	/*
	 * Update the params changed for mixer for the next frame to
	 * configure the mixer setup properly.
	 */
	if (ctl->mixer_left)
		ctl->mixer_left->params_changed++;
	if (ctl->mixer_right)
		ctl->mixer_right->params_changed++;
}

int mdss_mdp_display_commit(struct mdss_mdp_ctl *ctl, void *arg,
	struct mdss_mdp_commit_cb *commit_cb)
{
@@ -3576,7 +3602,19 @@ int mdss_mdp_display_commit(struct mdss_mdp_ctl *ctl, void *arg,
		commit_cb->commit_cb_fnc(
			MDP_COMMIT_STAGE_SETUP_DONE,
			commit_cb->data);
	mdss_mdp_ctl_notify(ctl, MDP_NOTIFY_FRAME_READY);
	ret = mdss_mdp_ctl_notify(ctl, MDP_NOTIFY_FRAME_READY);

	/*
	 * When wait for fence timed out, driver ignores the fences
	 * for signalling. Hardware needs to access only on the buffers
	 * that are valid and driver needs to ensure it. This function
	 * would set the mixer state to border when there is timeout.
	 */
	if (ret == NOTIFY_BAD) {
		mdss_mdp_force_border_color(ctl);
		ret = 0;
	}

	ATRACE_END("frame_ready");

	if (ctl->ops.wait_pingpong && !mdata->serialize_wait4pp)