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

Commit e47d6f4d 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: Add pipe type selection in overlay request"

parents 79ceed59 9317ea92
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -2295,6 +2295,8 @@ static int __from_user_mdp_overlay(struct mdp_overlay *ov,
	    put_user(data, &ov->transp_mask) ||
	    get_user(data, &ov32->flags) ||
	    put_user(data, &ov->flags) ||
	    get_user(data, &ov32->pipe_type) ||
	    put_user(data, &ov->pipe_type) ||
	    get_user(data, &ov32->id) ||
	    put_user(data, &ov->id) ||
	    get_user(data, &ov32->priority) ||
+1 −0
Original line number Diff line number Diff line
@@ -359,6 +359,7 @@ struct mdp_overlay32 {
	uint32_t blend_op;
	uint32_t transp_mask;
	uint32_t flags;
	uint32_t pipe_type;
	uint32_t id;
	uint8_t priority;
	uint32_t user_data[6];
+24 −7
Original line number Diff line number Diff line
@@ -555,18 +555,34 @@ int mdss_mdp_overlay_pipe_setup(struct msm_fb_data_type *mfd,
		is_vig_needed = true;

	if (req->id == MSMFB_NEW_REQUEST) {
		switch (req->pipe_type) {
		case PIPE_TYPE_VIG:
			pipe_type = MDSS_MDP_PIPE_TYPE_VIG;
			break;
		case PIPE_TYPE_RGB:
			pipe_type = MDSS_MDP_PIPE_TYPE_RGB;
			break;
		case PIPE_TYPE_DMA:
			pipe_type = MDSS_MDP_PIPE_TYPE_DMA;
			break;
		case PIPE_TYPE_AUTO:
		default:
			if (req->flags & MDP_OV_PIPE_FORCE_DMA)
				pipe_type = MDSS_MDP_PIPE_TYPE_DMA;
		else if (fmt->is_yuv || (req->flags & MDP_OV_PIPE_SHARE) ||
			else if (fmt->is_yuv ||
				(req->flags & MDP_OV_PIPE_SHARE) ||
				is_vig_needed)
				pipe_type = MDSS_MDP_PIPE_TYPE_VIG;
			else
				pipe_type = MDSS_MDP_PIPE_TYPE_RGB;
			break;
		}

		pipe = mdss_mdp_pipe_alloc(mixer, pipe_type, left_blend_pipe);

		/* RGB pipes can be used instead of DMA */
		if (!pipe && (pipe_type == MDSS_MDP_PIPE_TYPE_DMA)) {
		if ((req->pipe_type == PIPE_TYPE_AUTO) && !pipe &&
		    (pipe_type == MDSS_MDP_PIPE_TYPE_DMA)) {
			pr_debug("giving RGB pipe for fb%d. flags:0x%x\n",
				mfd->index, req->flags);
			pipe_type = MDSS_MDP_PIPE_TYPE_RGB;
@@ -575,7 +591,8 @@ int mdss_mdp_overlay_pipe_setup(struct msm_fb_data_type *mfd,
		}

		/* VIG pipes can also support RGB format */
		if (!pipe && pipe_type == MDSS_MDP_PIPE_TYPE_RGB) {
		if ((req->pipe_type == PIPE_TYPE_AUTO) && !pipe &&
		    (pipe_type == MDSS_MDP_PIPE_TYPE_RGB)) {
			pr_debug("giving ViG pipe for fb%d. flags:0x%x\n",
				mfd->index, req->flags);
			pipe_type = MDSS_MDP_PIPE_TYPE_VIG;
+19 −0
Original line number Diff line number Diff line
@@ -547,6 +547,23 @@ struct mdp_scale_data {
	uint32_t roi_w[MAX_PLANES];
};

/**
 * enum mdp_overlay_pipe_type - Different pipe type set by userspace
 *
 * @PIPE_TYPE_AUTO:    Not specified, pipe will be selected according to flags.
 * @PIPE_TYPE_VIG:     VIG pipe.
 * @PIPE_TYPE_RGB:     RGB pipe.
 * @PIPE_TYPE_DMA:     DMA pipe.
 * @PIPE_TYPE_MAX:     Used to track maximum number of pipe type.
 */
enum mdp_overlay_pipe_type {
	PIPE_TYPE_AUTO = 0,
	PIPE_TYPE_VIG,
	PIPE_TYPE_RGB,
	PIPE_TYPE_DMA,
	PIPE_TYPE_MAX,
};

/**
 * struct mdp_overlay - overlay surface structure
 * @src:	Source image information (width, height, format).
@@ -569,6 +586,7 @@ struct mdp_scale_data {
 *		The color should be in same format as the source image format.
 * @flags:	This is used to customize operation of overlay. See MDP flags
 *		for more information.
 * @pipe_type:  Used to specify the type of overlay pipe.
 * @user_data:	DEPRECATED* Used to store user application specific information.
 * @bg_color:	Solid color used to fill the overlay surface when no source
 *		buffer is provided.
@@ -606,6 +624,7 @@ struct mdp_overlay {
	uint32_t blend_op;
	uint32_t transp_mask;
	uint32_t flags;
	uint32_t pipe_type;
	uint32_t id;
	uint8_t priority;
	uint32_t user_data[6];