imx-drm: ipuv3-plane: fix plane updates for active planes
While the DMA channel is running, it is not allowed to change anything but the inactive (double) buffer base address, so resizing a plane or changing to a frame buffer with different pixel format is not possible. Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
356f952472
commit
9a6660308c
|
@ -143,6 +143,18 @@ int ipu_plane_mode_set(struct ipu_plane *ipu_plane, struct drm_crtc *crtc,
|
|||
if (crtc_h < 2)
|
||||
return -EINVAL;
|
||||
|
||||
/*
|
||||
* since we cannot touch active IDMAC channels, we do not support
|
||||
* resizing the enabled plane or changing its format
|
||||
*/
|
||||
if (ipu_plane->enabled) {
|
||||
if (src_w != ipu_plane->w || src_h != ipu_plane->h ||
|
||||
fb->pixel_format != ipu_plane->base.fb->pixel_format)
|
||||
return -EINVAL;
|
||||
|
||||
return ipu_plane_set_base(ipu_plane, fb, src_x, src_y);
|
||||
}
|
||||
|
||||
switch (ipu_plane->dp_flow) {
|
||||
case IPU_DP_FLOW_SYNC_BG:
|
||||
ret = ipu_dp_setup_channel(ipu_plane->dp,
|
||||
|
@ -202,6 +214,9 @@ int ipu_plane_mode_set(struct ipu_plane *ipu_plane, struct drm_crtc *crtc,
|
|||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
ipu_plane->w = src_w;
|
||||
ipu_plane->h = src_h;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -26,6 +26,8 @@ struct ipu_plane {
|
|||
|
||||
int x;
|
||||
int y;
|
||||
int w;
|
||||
int h;
|
||||
|
||||
bool enabled;
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue