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

Commit d3fd3155 authored by Camus Wong's avatar Camus Wong Committed by Gerrit - the friendly Code Review server
Browse files

[drm/sde] fix uninitialized src/dst size in sde plane



SDE plane src/dst size is uninitialized and programmed to hw when
only color format is changed. This change will only configure hw
when src/dst size is calculated.

Change-Id: I5953f899a2c503b1d8f2577c28a67711b9ed9a67
Signed-off-by: default avatarCamus Wong <camusw@codeaurora.org>
Signed-off-by: default avatarRahul Sharma <rahsha@codeaurora.org>
parent 4be74d4c
Loading
Loading
Loading
Loading
+40 −36
Original line number Diff line number Diff line
@@ -1359,19 +1359,20 @@ static int _sde_plane_mode_set(struct drm_plane *plane,
			src.y  = DIV_ROUND_UP(src.y, 2);
			src.y &= ~0x1;
		}
	}

		list_for_each_entry(pp, &psde->phy_plane_head, phy_plane_list)
			num_of_phy_planes++;

		/*
	 * Only need to use one physical plane if plane width is still within
	 * the limitation.
		 * Only need to use one physical plane if plane width
		 * is still within the limitation.
		 */
	is_across_mixer_boundary = (plane->state->crtc_x < crtc_split_width) &&
		is_across_mixer_boundary =
				(plane->state->crtc_x < crtc_split_width) &&
				(plane->state->crtc_x + plane->state->crtc_w >
					crtc_split_width);
	if (crtc_split_width >= (src.x + src.w) && !is_across_mixer_boundary)
		if (crtc_split_width >= (src.x + src.w) &&
				!is_across_mixer_boundary)
			num_of_phy_planes = 1;

		if (num_of_phy_planes > 1) {
@@ -1390,8 +1391,8 @@ static int _sde_plane_mode_set(struct drm_plane *plane,
			pp->pipe_cfg.dst_rect = dst;

			/* check for color fill */
		pp->color_fill = (uint32_t)sde_plane_get_property(pstate,
				PLANE_PROP_COLOR_FILL);
			pp->color_fill = (uint32_t)sde_plane_get_property(
					pstate, PLANE_PROP_COLOR_FILL);
			if (pp->color_fill & SDE_PLANE_COLOR_FILL_FLAG) {
				/* skip remaining processing on color fill */
				pstate->dirty = 0x0;
@@ -1402,7 +1403,10 @@ static int _sde_plane_mode_set(struct drm_plane *plane,
						&pp->pipe_cfg, &pp->pixel_ext,
						pp->scaler3_cfg);
			}
		}
	}

	list_for_each_entry(pp, &psde->phy_plane_head, phy_plane_list) {
		if (((pstate->dirty & SDE_PLANE_DIRTY_FORMAT) ||
				(src_flags &
				 SDE_SSPP_SECURE_OVERLAY_SESSION)) &&