Commit 6270e524 authored by Dmitry Baryshkov's avatar Dmitry Baryshkov
Browse files

drm/msm/dpu: rework static color fill code



Rework static color fill code to separate the pipe / pipe_cfg handling.
This is a preparation for the r_pipe support.

Reviewed-by: default avatarAbhinav Kumar <quic_abhinavk@quicinc.com>
Tested-by: Abhinav Kumar <quic_abhinavk@quicinc.com> # sc7280
Signed-off-by: default avatarDmitry Baryshkov <dmitry.baryshkov@linaro.org>
Patchwork: https://patchwork.freedesktop.org/patch/527340/
Link: https://lore.kernel.org/r/20230316161653.4106395-26-dmitry.baryshkov@linaro.org


Signed-off-by: default avatarDmitry Baryshkov <dmitry.baryshkov@linaro.org>
parent ea2d3612
Loading
Loading
Loading
Loading
+40 −29
Original line number Diff line number Diff line
@@ -641,20 +641,52 @@ static void _dpu_plane_setup_scaler(struct dpu_sw_pipe *pipe,
				fmt);
}

static void _dpu_plane_color_fill_pipe(struct dpu_plane_state *pstate,
				       struct dpu_sw_pipe *pipe,
				       struct drm_rect *dst_rect,
				       u32 fill_color,
				       const struct dpu_format *fmt)
{
	struct dpu_sw_pipe_cfg pipe_cfg;

	/* update sspp */
	if (!pipe->sspp->ops.setup_solidfill)
		return;

	pipe->sspp->ops.setup_solidfill(pipe, fill_color);

	/* override scaler/decimation if solid fill */
	pipe_cfg.dst_rect = *dst_rect;

	pipe_cfg.src_rect.x1 = 0;
	pipe_cfg.src_rect.y1 = 0;
	pipe_cfg.src_rect.x2 =
		drm_rect_width(&pipe_cfg.dst_rect);
	pipe_cfg.src_rect.y2 =
		drm_rect_height(&pipe_cfg.dst_rect);

	if (pipe->sspp->ops.setup_format)
		pipe->sspp->ops.setup_format(pipe, fmt, DPU_SSPP_SOLID_FILL);

	if (pipe->sspp->ops.setup_rects)
		pipe->sspp->ops.setup_rects(pipe, &pipe_cfg);

	_dpu_plane_setup_scaler(pipe, fmt, true, &pipe_cfg, pstate->rotation);
}

/**
 * _dpu_plane_color_fill - enables color fill on plane
 * @pdpu:   Pointer to DPU plane object
 * @color:  RGB fill color value, [23..16] Blue, [15..8] Green, [7..0] Red
 * @alpha:  8-bit fill alpha value, 255 selects 100% alpha
 * Returns: 0 on success
 */
static int _dpu_plane_color_fill(struct dpu_plane *pdpu,
static void _dpu_plane_color_fill(struct dpu_plane *pdpu,
		uint32_t color, uint32_t alpha)
{
	const struct dpu_format *fmt;
	const struct drm_plane *plane = &pdpu->base;
	struct dpu_plane_state *pstate = to_dpu_plane_state(plane->state);
	struct dpu_sw_pipe_cfg pipe_cfg;
	u32 fill_color = (color & 0xFFFFFF) | ((alpha & 0xFF) << 24);

	DPU_DEBUG_PLANE(pdpu, "\n");

@@ -663,34 +695,13 @@ static int _dpu_plane_color_fill(struct dpu_plane *pdpu,
	 * h/w only supports RGB variants
	 */
	fmt = dpu_get_dpu_format(DRM_FORMAT_ABGR8888);
	/* should not happen ever */
	if (!fmt)
		return;

	/* update sspp */
	if (fmt && pstate->pipe.sspp->ops.setup_solidfill) {
		pstate->pipe.sspp->ops.setup_solidfill(&pstate->pipe,
				(color & 0xFFFFFF) | ((alpha & 0xFF) << 24));

		/* override scaler/decimation if solid fill */
		pipe_cfg.dst_rect = pstate->base.dst;

		pipe_cfg.src_rect.x1 = 0;
		pipe_cfg.src_rect.y1 = 0;
		pipe_cfg.src_rect.x2 =
			drm_rect_width(&pipe_cfg.dst_rect);
		pipe_cfg.src_rect.y2 =
			drm_rect_height(&pipe_cfg.dst_rect);

		if (pstate->pipe.sspp->ops.setup_format)
			pstate->pipe.sspp->ops.setup_format(&pstate->pipe,
					fmt, DPU_SSPP_SOLID_FILL);

		if (pstate->pipe.sspp->ops.setup_rects)
			pstate->pipe.sspp->ops.setup_rects(&pstate->pipe,
					&pipe_cfg);

		_dpu_plane_setup_scaler(&pstate->pipe, fmt, true, &pipe_cfg, pstate->rotation);
	}

	return 0;
	_dpu_plane_color_fill_pipe(pstate, &pstate->pipe, &pstate->pipe_cfg.dst_rect,
				   fill_color, fmt);
}

int dpu_plane_validate_multirect_v2(struct dpu_multirect_plane_states *plane)