|
@@ -441,20 +441,23 @@ vmw_du_cursor_plane_atomic_update(struct drm_plane *plane,
|
|
|
int vmw_du_primary_plane_atomic_check(struct drm_plane *plane,
|
|
|
struct drm_plane_state *state)
|
|
|
{
|
|
|
+ struct drm_crtc_state *crtc_state = NULL;
|
|
|
struct drm_framebuffer *new_fb = state->fb;
|
|
|
- struct drm_rect clip = {
|
|
|
- .x1 = state->crtc_x,
|
|
|
- .y1 = state->crtc_y,
|
|
|
- .x2 = state->crtc_x + state->crtc_w,
|
|
|
- .y2 = state->crtc_y + state->crtc_h,
|
|
|
- };
|
|
|
+ struct drm_rect clip = {};
|
|
|
int ret;
|
|
|
|
|
|
- ret = drm_plane_helper_check_state(state, &clip,
|
|
|
- DRM_PLANE_HELPER_NO_SCALING,
|
|
|
- DRM_PLANE_HELPER_NO_SCALING,
|
|
|
- false, true);
|
|
|
+ if (state->crtc)
|
|
|
+ crtc_state = drm_atomic_get_new_crtc_state(state->state, state->crtc);
|
|
|
|
|
|
+ if (crtc_state && crtc_state->enable) {
|
|
|
+ clip.x2 = crtc_state->adjusted_mode.hdisplay;
|
|
|
+ clip.y2 = crtc_state->adjusted_mode.vdisplay;
|
|
|
+ }
|
|
|
+
|
|
|
+ ret = drm_plane_helper_check_state(state, &clip,
|
|
|
+ DRM_PLANE_HELPER_NO_SCALING,
|
|
|
+ DRM_PLANE_HELPER_NO_SCALING,
|
|
|
+ false, true);
|
|
|
|
|
|
if (!ret && new_fb) {
|
|
|
struct drm_crtc *crtc = state->crtc;
|