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

Commit 513f0c17 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "msm: display: set up vsync_retire_handler in commit thread"

parents 8ce79a6d b651c8d6
Loading
Loading
Loading
Loading
+28 −9
Original line number Diff line number Diff line
@@ -52,6 +52,7 @@ static int mdss_mdp_overlay_fb_parse_dt(struct msm_fb_data_type *mfd);
static int mdss_mdp_overlay_off(struct msm_fb_data_type *mfd);
static void __overlay_kickoff_requeue(struct msm_fb_data_type *mfd);
static void __vsync_retire_signal(struct msm_fb_data_type *mfd, int val);
static int __vsync_set_vsync_handler(struct msm_fb_data_type *mfd);

static inline bool is_ov_right_blend(struct mdp_rect *left_blend,
	struct mdp_rect *right_blend, u32 left_lm_w)
@@ -1385,6 +1386,8 @@ int mdss_mdp_overlay_kickoff(struct msm_fb_data_type *mfd,

	mdss_mdp_clk_ctrl(MDP_BLOCK_POWER_ON);

	__vsync_set_vsync_handler(mfd);

	if (data) {
		mdss_mdp_set_roi(ctl, data);
	} else {
@@ -3538,7 +3541,7 @@ __vsync_retire_get_fence(struct msm_sync_pt_data *sync_pt_data)
	struct msm_fb_data_type *mfd;
	struct mdss_overlay_private *mdp5_data;
	struct mdss_mdp_ctl *ctl;
	int rc, value;
	int value;

	mfd = container_of(sync_pt_data, typeof(*mfd), mdp_sync_pt_data);
	mdp5_data = mfd_to_mdp5_data(mfd);
@@ -3555,14 +3558,6 @@ __vsync_retire_get_fence(struct msm_sync_pt_data *sync_pt_data)
		return ERR_PTR(-EPERM);
	}

	if (!mdp5_data->vsync_retire_handler.enabled) {
		mdss_mdp_clk_ctrl(MDP_BLOCK_POWER_ON);
		rc = ctl->add_vsync_handler(ctl,
				&mdp5_data->vsync_retire_handler);
		mdss_mdp_clk_ctrl(MDP_BLOCK_POWER_OFF);
		if (IS_ERR_VALUE(rc))
			return ERR_PTR(rc);
	}
	value = mdp5_data->vsync_timeline->value + 1 + mdp5_data->retire_cnt;
	mdp5_data->retire_cnt++;

@@ -3570,6 +3565,30 @@ __vsync_retire_get_fence(struct msm_sync_pt_data *sync_pt_data)
			"mdp-retire", value);
}

static int __vsync_set_vsync_handler(struct msm_fb_data_type *mfd)
{
	struct mdss_overlay_private *mdp5_data = mfd_to_mdp5_data(mfd);
	struct mdss_mdp_ctl *ctl;
	int rc;

	ctl = mdp5_data->ctl;
	if (!mdp5_data->retire_cnt ||
		mdp5_data->vsync_retire_handler.enabled)
		return 0;

	if (!ctl->add_vsync_handler)
		return -EOPNOTSUPP;

	if (!ctl->power_on) {
		pr_debug("fb%d vsync pending first update\n", mfd->index);
		return -EPERM;
	}

	rc = ctl->add_vsync_handler(ctl,
			&mdp5_data->vsync_retire_handler);
	return rc;
}

static int __vsync_retire_setup(struct msm_fb_data_type *mfd)
{
	struct mdss_overlay_private *mdp5_data = mfd_to_mdp5_data(mfd);