mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-16 00:34:20 +08:00
media: mexon-ge2d: fixup frames size in registers
[ Upstream commit79e8c421a0
] The CLIP, SRC & DST registers are coded to take the pixel/line start & end, starting from 0. Thus the end should be the width/height minus 1. It can be an issue with clipping and rotation, where it will add spurious lines from uninitialized or unwanted data with a shift in the result. Fixes:59a635327c
("media: meson: Add M2M driver for the Amlogic GE2D Accelerator Unit") Signed-off-by: Neil Armstrong <narmstrong@baylibre.com> Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
498ab2d70a
commit
0d05a58ea3
@ -215,35 +215,35 @@ static void ge2d_hw_start(struct meson_ge2d *ge2d)
|
||||
|
||||
regmap_write(ge2d->map, GE2D_SRC1_CLIPY_START_END,
|
||||
FIELD_PREP(GE2D_START, ctx->in.crop.top) |
|
||||
FIELD_PREP(GE2D_END, ctx->in.crop.top + ctx->in.crop.height));
|
||||
FIELD_PREP(GE2D_END, ctx->in.crop.top + ctx->in.crop.height - 1));
|
||||
regmap_write(ge2d->map, GE2D_SRC1_CLIPX_START_END,
|
||||
FIELD_PREP(GE2D_START, ctx->in.crop.left) |
|
||||
FIELD_PREP(GE2D_END, ctx->in.crop.left + ctx->in.crop.width));
|
||||
FIELD_PREP(GE2D_END, ctx->in.crop.left + ctx->in.crop.width - 1));
|
||||
regmap_write(ge2d->map, GE2D_SRC2_CLIPY_START_END,
|
||||
FIELD_PREP(GE2D_START, ctx->out.crop.top) |
|
||||
FIELD_PREP(GE2D_END, ctx->out.crop.top + ctx->out.crop.height));
|
||||
FIELD_PREP(GE2D_END, ctx->out.crop.top + ctx->out.crop.height - 1));
|
||||
regmap_write(ge2d->map, GE2D_SRC2_CLIPX_START_END,
|
||||
FIELD_PREP(GE2D_START, ctx->out.crop.left) |
|
||||
FIELD_PREP(GE2D_END, ctx->out.crop.left + ctx->out.crop.width));
|
||||
FIELD_PREP(GE2D_END, ctx->out.crop.left + ctx->out.crop.width - 1));
|
||||
regmap_write(ge2d->map, GE2D_DST_CLIPY_START_END,
|
||||
FIELD_PREP(GE2D_START, ctx->out.crop.top) |
|
||||
FIELD_PREP(GE2D_END, ctx->out.crop.top + ctx->out.crop.height));
|
||||
FIELD_PREP(GE2D_END, ctx->out.crop.top + ctx->out.crop.height - 1));
|
||||
regmap_write(ge2d->map, GE2D_DST_CLIPX_START_END,
|
||||
FIELD_PREP(GE2D_START, ctx->out.crop.left) |
|
||||
FIELD_PREP(GE2D_END, ctx->out.crop.left + ctx->out.crop.width));
|
||||
FIELD_PREP(GE2D_END, ctx->out.crop.left + ctx->out.crop.width - 1));
|
||||
|
||||
regmap_write(ge2d->map, GE2D_SRC1_Y_START_END,
|
||||
FIELD_PREP(GE2D_END, ctx->in.pix_fmt.height));
|
||||
FIELD_PREP(GE2D_END, ctx->in.pix_fmt.height - 1));
|
||||
regmap_write(ge2d->map, GE2D_SRC1_X_START_END,
|
||||
FIELD_PREP(GE2D_END, ctx->in.pix_fmt.width));
|
||||
FIELD_PREP(GE2D_END, ctx->in.pix_fmt.width - 1));
|
||||
regmap_write(ge2d->map, GE2D_SRC2_Y_START_END,
|
||||
FIELD_PREP(GE2D_END, ctx->out.pix_fmt.height));
|
||||
FIELD_PREP(GE2D_END, ctx->out.pix_fmt.height - 1));
|
||||
regmap_write(ge2d->map, GE2D_SRC2_X_START_END,
|
||||
FIELD_PREP(GE2D_END, ctx->out.pix_fmt.width));
|
||||
FIELD_PREP(GE2D_END, ctx->out.pix_fmt.width - 1));
|
||||
regmap_write(ge2d->map, GE2D_DST_Y_START_END,
|
||||
FIELD_PREP(GE2D_END, ctx->out.pix_fmt.height));
|
||||
FIELD_PREP(GE2D_END, ctx->out.pix_fmt.height - 1));
|
||||
regmap_write(ge2d->map, GE2D_DST_X_START_END,
|
||||
FIELD_PREP(GE2D_END, ctx->out.pix_fmt.width));
|
||||
FIELD_PREP(GE2D_END, ctx->out.pix_fmt.width - 1));
|
||||
|
||||
/* Color, no blend, use source color */
|
||||
reg = GE2D_ALU_DO_COLOR_OPERATION_LOGIC(LOGIC_OPERATION_COPY,
|
||||
|
Loading…
Reference in New Issue
Block a user