diff options
-rw-r--r-- | drivers/gpu/drm/armada/armada_overlay.c | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/drm_plane_helper.c | 28 | ||||
-rw-r--r-- | drivers/gpu/drm/drm_simple_kms_helper.c | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_display.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/mediatek/mtk_drm_plane.c | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 1 | ||||
-rw-r--r-- | include/drm/drm_plane_helper.h | 1 |
7 files changed, 25 insertions, 10 deletions
diff --git a/drivers/gpu/drm/armada/armada_overlay.c b/drivers/gpu/drm/armada/armada_overlay.c index 148e8a42b2c6..1ee707ef6b8d 100644 --- a/drivers/gpu/drm/armada/armada_overlay.c +++ b/drivers/gpu/drm/armada/armada_overlay.c | |||
@@ -121,6 +121,7 @@ armada_ovl_plane_update(struct drm_plane *plane, struct drm_crtc *crtc, | |||
121 | int ret; | 121 | int ret; |
122 | 122 | ||
123 | ret = drm_plane_helper_check_update(plane, crtc, fb, &src, &dest, &clip, | 123 | ret = drm_plane_helper_check_update(plane, crtc, fb, &src, &dest, &clip, |
124 | BIT(DRM_ROTATE_0), | ||
124 | 0, INT_MAX, true, false, &visible); | 125 | 0, INT_MAX, true, false, &visible); |
125 | if (ret) | 126 | if (ret) |
126 | return ret; | 127 | return ret; |
diff --git a/drivers/gpu/drm/drm_plane_helper.c b/drivers/gpu/drm/drm_plane_helper.c index fc51306fe365..16c4a7bd7465 100644 --- a/drivers/gpu/drm/drm_plane_helper.c +++ b/drivers/gpu/drm/drm_plane_helper.c | |||
@@ -115,6 +115,7 @@ static int get_connectors_for_crtc(struct drm_crtc *crtc, | |||
115 | * @src: source coordinates in 16.16 fixed point | 115 | * @src: source coordinates in 16.16 fixed point |
116 | * @dest: integer destination coordinates | 116 | * @dest: integer destination coordinates |
117 | * @clip: integer clipping coordinates | 117 | * @clip: integer clipping coordinates |
118 | * @rotation: plane rotation | ||
118 | * @min_scale: minimum @src:@dest scaling factor in 16.16 fixed point | 119 | * @min_scale: minimum @src:@dest scaling factor in 16.16 fixed point |
119 | * @max_scale: maximum @src:@dest scaling factor in 16.16 fixed point | 120 | * @max_scale: maximum @src:@dest scaling factor in 16.16 fixed point |
120 | * @can_position: is it legal to position the plane such that it | 121 | * @can_position: is it legal to position the plane such that it |
@@ -134,16 +135,17 @@ static int get_connectors_for_crtc(struct drm_crtc *crtc, | |||
134 | * Zero if update appears valid, error code on failure | 135 | * Zero if update appears valid, error code on failure |
135 | */ | 136 | */ |
136 | int drm_plane_helper_check_update(struct drm_plane *plane, | 137 | int drm_plane_helper_check_update(struct drm_plane *plane, |
137 | struct drm_crtc *crtc, | 138 | struct drm_crtc *crtc, |
138 | struct drm_framebuffer *fb, | 139 | struct drm_framebuffer *fb, |
139 | struct drm_rect *src, | 140 | struct drm_rect *src, |
140 | struct drm_rect *dest, | 141 | struct drm_rect *dest, |
141 | const struct drm_rect *clip, | 142 | const struct drm_rect *clip, |
142 | int min_scale, | 143 | unsigned int rotation, |
143 | int max_scale, | 144 | int min_scale, |
144 | bool can_position, | 145 | int max_scale, |
145 | bool can_update_disabled, | 146 | bool can_position, |
146 | bool *visible) | 147 | bool can_update_disabled, |
148 | bool *visible) | ||
147 | { | 149 | { |
148 | int hscale, vscale; | 150 | int hscale, vscale; |
149 | 151 | ||
@@ -163,6 +165,8 @@ int drm_plane_helper_check_update(struct drm_plane *plane, | |||
163 | return -EINVAL; | 165 | return -EINVAL; |
164 | } | 166 | } |
165 | 167 | ||
168 | drm_rect_rotate(src, fb->width << 16, fb->height << 16, rotation); | ||
169 | |||
166 | /* Check scaling */ | 170 | /* Check scaling */ |
167 | hscale = drm_rect_calc_hscale(src, dest, min_scale, max_scale); | 171 | hscale = drm_rect_calc_hscale(src, dest, min_scale, max_scale); |
168 | vscale = drm_rect_calc_vscale(src, dest, min_scale, max_scale); | 172 | vscale = drm_rect_calc_vscale(src, dest, min_scale, max_scale); |
@@ -174,6 +178,9 @@ int drm_plane_helper_check_update(struct drm_plane *plane, | |||
174 | } | 178 | } |
175 | 179 | ||
176 | *visible = drm_rect_clip_scaled(src, dest, clip, hscale, vscale); | 180 | *visible = drm_rect_clip_scaled(src, dest, clip, hscale, vscale); |
181 | |||
182 | drm_rect_rotate_inv(src, fb->width << 16, fb->height << 16, rotation); | ||
183 | |||
177 | if (!*visible) | 184 | if (!*visible) |
178 | /* | 185 | /* |
179 | * Plane isn't visible; some drivers can handle this | 186 | * Plane isn't visible; some drivers can handle this |
@@ -267,6 +274,7 @@ int drm_primary_helper_update(struct drm_plane *plane, struct drm_crtc *crtc, | |||
267 | 274 | ||
268 | ret = drm_plane_helper_check_update(plane, crtc, fb, | 275 | ret = drm_plane_helper_check_update(plane, crtc, fb, |
269 | &src, &dest, &clip, | 276 | &src, &dest, &clip, |
277 | BIT(DRM_ROTATE_0), | ||
270 | DRM_PLANE_HELPER_NO_SCALING, | 278 | DRM_PLANE_HELPER_NO_SCALING, |
271 | DRM_PLANE_HELPER_NO_SCALING, | 279 | DRM_PLANE_HELPER_NO_SCALING, |
272 | false, false, &visible); | 280 | false, false, &visible); |
diff --git a/drivers/gpu/drm/drm_simple_kms_helper.c b/drivers/gpu/drm/drm_simple_kms_helper.c index b2071d495ada..0db36d27e90b 100644 --- a/drivers/gpu/drm/drm_simple_kms_helper.c +++ b/drivers/gpu/drm/drm_simple_kms_helper.c | |||
@@ -105,6 +105,7 @@ static int drm_simple_kms_plane_atomic_check(struct drm_plane *plane, | |||
105 | ret = drm_plane_helper_check_update(plane, &pipe->crtc, | 105 | ret = drm_plane_helper_check_update(plane, &pipe->crtc, |
106 | plane_state->fb, | 106 | plane_state->fb, |
107 | &src, &dest, &clip, | 107 | &src, &dest, &clip, |
108 | plane_state->rotation, | ||
108 | DRM_PLANE_HELPER_NO_SCALING, | 109 | DRM_PLANE_HELPER_NO_SCALING, |
109 | DRM_PLANE_HELPER_NO_SCALING, | 110 | DRM_PLANE_HELPER_NO_SCALING, |
110 | false, true, &visible); | 111 | false, true, &visible); |
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index 49322f6cfa2b..2bf6c58508da 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c | |||
@@ -14102,6 +14102,7 @@ intel_check_primary_plane(struct drm_plane *plane, | |||
14102 | 14102 | ||
14103 | return drm_plane_helper_check_update(plane, crtc, fb, &state->src, | 14103 | return drm_plane_helper_check_update(plane, crtc, fb, &state->src, |
14104 | &state->dst, &state->clip, | 14104 | &state->dst, &state->clip, |
14105 | state->base.rotation, | ||
14105 | min_scale, max_scale, | 14106 | min_scale, max_scale, |
14106 | can_position, true, | 14107 | can_position, true, |
14107 | &state->visible); | 14108 | &state->visible); |
@@ -14293,6 +14294,7 @@ intel_check_cursor_plane(struct drm_plane *plane, | |||
14293 | 14294 | ||
14294 | ret = drm_plane_helper_check_update(plane, crtc, fb, &state->src, | 14295 | ret = drm_plane_helper_check_update(plane, crtc, fb, &state->src, |
14295 | &state->dst, &state->clip, | 14296 | &state->dst, &state->clip, |
14297 | state->base.rotation, | ||
14296 | DRM_PLANE_HELPER_NO_SCALING, | 14298 | DRM_PLANE_HELPER_NO_SCALING, |
14297 | DRM_PLANE_HELPER_NO_SCALING, | 14299 | DRM_PLANE_HELPER_NO_SCALING, |
14298 | true, true, &state->visible); | 14300 | true, true, &state->visible); |
diff --git a/drivers/gpu/drm/mediatek/mtk_drm_plane.c b/drivers/gpu/drm/mediatek/mtk_drm_plane.c index 51bc8988fc26..3995765a90dc 100644 --- a/drivers/gpu/drm/mediatek/mtk_drm_plane.c +++ b/drivers/gpu/drm/mediatek/mtk_drm_plane.c | |||
@@ -170,6 +170,7 @@ static int mtk_plane_atomic_check(struct drm_plane *plane, | |||
170 | 170 | ||
171 | return drm_plane_helper_check_update(plane, state->crtc, fb, | 171 | return drm_plane_helper_check_update(plane, state->crtc, fb, |
172 | &src, &dest, &clip, | 172 | &src, &dest, &clip, |
173 | state->rotation, | ||
173 | DRM_PLANE_HELPER_NO_SCALING, | 174 | DRM_PLANE_HELPER_NO_SCALING, |
174 | DRM_PLANE_HELPER_NO_SCALING, | 175 | DRM_PLANE_HELPER_NO_SCALING, |
175 | true, true, &visible); | 176 | true, true, &visible); |
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c index 8cd840f602b7..6255e5bcd954 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c | |||
@@ -626,6 +626,7 @@ static int vop_plane_atomic_check(struct drm_plane *plane, | |||
626 | 626 | ||
627 | ret = drm_plane_helper_check_update(plane, crtc, state->fb, | 627 | ret = drm_plane_helper_check_update(plane, crtc, state->fb, |
628 | src, dest, &clip, | 628 | src, dest, &clip, |
629 | state->rotation, | ||
629 | min_scale, | 630 | min_scale, |
630 | max_scale, | 631 | max_scale, |
631 | true, true, &visible); | 632 | true, true, &visible); |
diff --git a/include/drm/drm_plane_helper.h b/include/drm/drm_plane_helper.h index 4421f3f4ca8d..0e0c3573cce0 100644 --- a/include/drm/drm_plane_helper.h +++ b/include/drm/drm_plane_helper.h | |||
@@ -46,6 +46,7 @@ int drm_plane_helper_check_update(struct drm_plane *plane, | |||
46 | struct drm_rect *src, | 46 | struct drm_rect *src, |
47 | struct drm_rect *dest, | 47 | struct drm_rect *dest, |
48 | const struct drm_rect *clip, | 48 | const struct drm_rect *clip, |
49 | unsigned int rotation, | ||
49 | int min_scale, | 50 | int min_scale, |
50 | int max_scale, | 51 | int max_scale, |
51 | bool can_position, | 52 | bool can_position, |