* [PATCH 1/5] drm/rcar-du: Use drm_mode_get_hv_timing() to populate plane clip rectangle
@ 2018-01-23 17:08 Ville Syrjala
2018-01-23 17:08 ` [PATCH 2/5] drm/sun4i: " Ville Syrjala
` (4 more replies)
0 siblings, 5 replies; 34+ messages in thread
From: Ville Syrjala @ 2018-01-23 17:08 UTC (permalink / raw)
To: dri-devel; +Cc: Laurent Pinchart
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
Use drm_mode_get_hv_timing() to fill out the plane clip rectangle.
No functional changes as the code already uses crtc_state->mode
to populate the clip, which is also what drm_mode_get_hv_timing()
uses.
Once everyone agrees on this we can move the clip handling into
drm_atomic_helper_check_plane_state().
Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
drivers/gpu/drm/rcar-du/rcar_du_plane.c | 9 ++++-----
1 file changed, 4 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/rcar-du/rcar_du_plane.c b/drivers/gpu/drm/rcar-du/rcar_du_plane.c
index 4a3d16cf3ed6..5687a94d4cb1 100644
--- a/drivers/gpu/drm/rcar-du/rcar_du_plane.c
+++ b/drivers/gpu/drm/rcar-du/rcar_du_plane.c
@@ -572,7 +572,7 @@ int __rcar_du_plane_atomic_check(struct drm_plane *plane,
{
struct drm_device *dev = plane->dev;
struct drm_crtc_state *crtc_state;
- struct drm_rect clip;
+ struct drm_rect clip = {};
int ret;
if (!state->crtc) {
@@ -589,10 +589,9 @@ int __rcar_du_plane_atomic_check(struct drm_plane *plane,
if (IS_ERR(crtc_state))
return PTR_ERR(crtc_state);
- clip.x1 = 0;
- clip.y1 = 0;
- clip.x2 = crtc_state->mode.hdisplay;
- clip.y2 = crtc_state->mode.vdisplay;
+ if (crtc_state->enable)
+ drm_mode_get_hv_timing(&crtc_state->mode,
+ &clip.x2, &clip.y2);
ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
DRM_PLANE_HELPER_NO_SCALING,
--
2.13.6
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [PATCH 2/5] drm/sun4i: Use drm_mode_get_hv_timing() to populate plane clip rectangle
2018-01-23 17:08 [PATCH 1/5] drm/rcar-du: Use drm_mode_get_hv_timing() to populate plane clip rectangle Ville Syrjala
@ 2018-01-23 17:08 ` Ville Syrjala
2018-02-02 15:04 ` Ville Syrjälä
2018-01-23 17:08 ` [PATCH 3/5] drm/armada: Construct a temporary crtc state for plane checks Ville Syrjala
` (3 subsequent siblings)
4 siblings, 1 reply; 34+ messages in thread
From: Ville Syrjala @ 2018-01-23 17:08 UTC (permalink / raw)
To: dri-devel; +Cc: Maxime Ripard
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
Use drm_mode_get_hv_timing() to fill out the plane clip rectangle.
Note that this replaces crtc_state->adjusted_mode usage with
crtc_state->mode. The latter is the correct choice since that's the
mode the user provided and it matches the plane crtc coordinates
the user also provided.
Once everyone agrees on this we can move the clip handling into
drm_atomic_helper_check_plane_state().
Cc: Maxime Ripard <maxime.ripard@free-electrons.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
drivers/gpu/drm/sun4i/sun8i_ui_layer.c | 9 ++++-----
drivers/gpu/drm/sun4i/sun8i_vi_layer.c | 9 ++++-----
2 files changed, 8 insertions(+), 10 deletions(-)
diff --git a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c
index 28d7c48d50fe..2f0ccd50b54d 100644
--- a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c
+++ b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c
@@ -211,7 +211,7 @@ static int sun8i_ui_layer_atomic_check(struct drm_plane *plane,
struct drm_crtc *crtc = state->crtc;
struct drm_crtc_state *crtc_state;
int min_scale, max_scale;
- struct drm_rect clip;
+ struct drm_rect clip = {};
if (!crtc)
return 0;
@@ -220,10 +220,9 @@ static int sun8i_ui_layer_atomic_check(struct drm_plane *plane,
if (WARN_ON(!crtc_state))
return -EINVAL;
- clip.x1 = 0;
- clip.y1 = 0;
- clip.x2 = crtc_state->adjusted_mode.hdisplay;
- clip.y2 = crtc_state->adjusted_mode.vdisplay;
+ if (crtc_state->enable)
+ drm_mode_get_hv_timing(&crtc_state->mode,
+ &clip.x2, &clip.y2);
min_scale = DRM_PLANE_HELPER_NO_SCALING;
max_scale = DRM_PLANE_HELPER_NO_SCALING;
diff --git a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c
index 40c3b303068a..eb3bf2d7291a 100644
--- a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c
+++ b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c
@@ -239,7 +239,7 @@ static int sun8i_vi_layer_atomic_check(struct drm_plane *plane,
struct drm_crtc *crtc = state->crtc;
struct drm_crtc_state *crtc_state;
int min_scale, max_scale;
- struct drm_rect clip;
+ struct drm_rect clip = {};
if (!crtc)
return 0;
@@ -248,10 +248,9 @@ static int sun8i_vi_layer_atomic_check(struct drm_plane *plane,
if (WARN_ON(!crtc_state))
return -EINVAL;
- clip.x1 = 0;
- clip.y1 = 0;
- clip.x2 = crtc_state->adjusted_mode.hdisplay;
- clip.y2 = crtc_state->adjusted_mode.vdisplay;
+ if (crtc_state->enable)
+ drm_mode_get_hv_timing(&crtc_state->mode,
+ &clip.x2, &clip.y2);
min_scale = DRM_PLANE_HELPER_NO_SCALING;
max_scale = DRM_PLANE_HELPER_NO_SCALING;
--
2.13.6
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [PATCH 3/5] drm/armada: Construct a temporary crtc state for plane checks
2018-01-23 17:08 [PATCH 1/5] drm/rcar-du: Use drm_mode_get_hv_timing() to populate plane clip rectangle Ville Syrjala
2018-01-23 17:08 ` [PATCH 2/5] drm/sun4i: " Ville Syrjala
@ 2018-01-23 17:08 ` Ville Syrjala
2018-01-23 18:42 ` Russell King - ARM Linux
2018-01-23 17:08 ` [PATCH 4/5] drm/armada: Use drm_mode_get_hv_timing() to populate plane clip rectangle Ville Syrjala
` (2 subsequent siblings)
4 siblings, 1 reply; 34+ messages in thread
From: Ville Syrjala @ 2018-01-23 17:08 UTC (permalink / raw)
To: dri-devel; +Cc: Dave Airlie, Russell King
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
As armada isn't an atomic driver trying to pass a non-populated
crtc->state to drm_atomic_helper_check_plane_state() will end in tears.
Construct a temporary crtc state a la drm_plane_helper_check_update()
and pass that instead. For now we just really need crtc_state->enable
to be there.
Cc: Dave Airlie <airlied@redhat.com>
Cc: Russell King <rmk+kernel@armlinux.org.uk>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
drivers/gpu/drm/armada/armada_crtc.c | 6 +++++-
drivers/gpu/drm/armada/armada_overlay.c | 6 +++++-
2 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/armada/armada_crtc.c b/drivers/gpu/drm/armada/armada_crtc.c
index e2adfbef7d6b..9621ed5d3f98 100644
--- a/drivers/gpu/drm/armada/armada_crtc.c
+++ b/drivers/gpu/drm/armada/armada_crtc.c
@@ -1200,13 +1200,17 @@ static int armada_drm_primary_update(struct drm_plane *plane,
.crtc_h = crtc_h,
.rotation = DRM_MODE_ROTATE_0,
};
+ struct drm_crtc_state crtc_state = {
+ .crtc = crtc,
+ .enable = crtc->enabled,
+ };
const struct drm_rect clip = {
.x2 = crtc->mode.hdisplay,
.y2 = crtc->mode.vdisplay,
};
int ret;
- ret = drm_atomic_helper_check_plane_state(&state, crtc->state, &clip, 0,
+ ret = drm_atomic_helper_check_plane_state(&state, &crtc_state, &clip, 0,
INT_MAX, true, false);
if (ret)
return ret;
diff --git a/drivers/gpu/drm/armada/armada_overlay.c b/drivers/gpu/drm/armada/armada_overlay.c
index 77b55adaa2ac..825cb642b55e 100644
--- a/drivers/gpu/drm/armada/armada_overlay.c
+++ b/drivers/gpu/drm/armada/armada_overlay.c
@@ -205,6 +205,10 @@ armada_ovl_plane_update(struct drm_plane *plane, struct drm_crtc *crtc,
.crtc_h = crtc_h,
.rotation = DRM_MODE_ROTATE_0,
};
+ struct drm_crtc_state crtc_state = {
+ .crtc = crtc,
+ .enable = crtc->enabled,
+ };
const struct drm_rect clip = {
.x2 = crtc->mode.hdisplay,
.y2 = crtc->mode.vdisplay,
@@ -215,7 +219,7 @@ armada_ovl_plane_update(struct drm_plane *plane, struct drm_crtc *crtc,
crtc_x, crtc_y, crtc_w, crtc_h,
src_x, src_y, src_w, src_h);
- ret = drm_atomic_helper_check_plane_state(&state, crtc->state, &clip, 0,
+ ret = drm_atomic_helper_check_plane_state(&state, &crtc_state, &clip, 0,
INT_MAX, true, false);
if (ret)
return ret;
--
2.13.6
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [PATCH 4/5] drm/armada: Use drm_mode_get_hv_timing() to populate plane clip rectangle
2018-01-23 17:08 [PATCH 1/5] drm/rcar-du: Use drm_mode_get_hv_timing() to populate plane clip rectangle Ville Syrjala
2018-01-23 17:08 ` [PATCH 2/5] drm/sun4i: " Ville Syrjala
2018-01-23 17:08 ` [PATCH 3/5] drm/armada: Construct a temporary crtc state for plane checks Ville Syrjala
@ 2018-01-23 17:08 ` Ville Syrjala
2018-03-05 8:41 ` Daniel Vetter
2018-01-23 17:08 ` Ville Syrjala
2018-01-24 0:07 ` [PATCH 1/5] drm/rcar-du: Use drm_mode_get_hv_timing() to populate plane clip rectangle Laurent Pinchart
4 siblings, 1 reply; 34+ messages in thread
From: Ville Syrjala @ 2018-01-23 17:08 UTC (permalink / raw)
To: dri-devel; +Cc: Dave Airlie, Russell King
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
Use drm_mode_get_hv_timing() to fill out the plane clip rectangle.
Since armada isn't atomic we'll use crtc->enabled and crtc->mode instead
of the stuff under crtc_state.
Once everyone agrees on how the clip rectangle gets set up we can
move the code into drm_atomic_helper_check_plane_state().
Cc: Dave Airlie <airlied@redhat.com>
Cc: Russell King <rmk+kernel@armlinux.org.uk>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
drivers/gpu/drm/armada/armada_crtc.c | 9 +++++----
drivers/gpu/drm/armada/armada_overlay.c | 9 +++++----
2 files changed, 10 insertions(+), 8 deletions(-)
diff --git a/drivers/gpu/drm/armada/armada_crtc.c b/drivers/gpu/drm/armada/armada_crtc.c
index 9621ed5d3f98..fdc34ad4ca62 100644
--- a/drivers/gpu/drm/armada/armada_crtc.c
+++ b/drivers/gpu/drm/armada/armada_crtc.c
@@ -1204,12 +1204,13 @@ static int armada_drm_primary_update(struct drm_plane *plane,
.crtc = crtc,
.enable = crtc->enabled,
};
- const struct drm_rect clip = {
- .x2 = crtc->mode.hdisplay,
- .y2 = crtc->mode.vdisplay,
- };
+ struct drm_rect clip = {};
int ret;
+ if (crtc->enabled)
+ drm_mode_get_hv_timing(&crtc->mode,
+ &clip.x2, &clip.y2);
+
ret = drm_atomic_helper_check_plane_state(&state, &crtc_state, &clip, 0,
INT_MAX, true, false);
if (ret)
diff --git a/drivers/gpu/drm/armada/armada_overlay.c b/drivers/gpu/drm/armada/armada_overlay.c
index 825cb642b55e..4f2a7a6e0fd3 100644
--- a/drivers/gpu/drm/armada/armada_overlay.c
+++ b/drivers/gpu/drm/armada/armada_overlay.c
@@ -209,16 +209,17 @@ armada_ovl_plane_update(struct drm_plane *plane, struct drm_crtc *crtc,
.crtc = crtc,
.enable = crtc->enabled,
};
- const struct drm_rect clip = {
- .x2 = crtc->mode.hdisplay,
- .y2 = crtc->mode.vdisplay,
- };
+ struct drm_rect clip = {};
int ret;
trace_armada_ovl_plane_update(plane, crtc, fb,
crtc_x, crtc_y, crtc_w, crtc_h,
src_x, src_y, src_w, src_h);
+ if (crtc->enabled)
+ drm_mode_get_hv_timing(&crtc->mode,
+ &clip.x2, &clip.y2);
+
ret = drm_atomic_helper_check_plane_state(&state, &crtc_state, &clip, 0,
INT_MAX, true, false);
if (ret)
--
2.13.6
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [PATCH 5/5] drm: Don't pass clip to drm_atomic_helper_check_plane_state()
2018-01-23 17:08 [PATCH 1/5] drm/rcar-du: Use drm_mode_get_hv_timing() to populate plane clip rectangle Ville Syrjala
2018-01-23 17:08 ` [PATCH 2/5] drm/sun4i: " Ville Syrjala
@ 2018-01-23 17:08 ` Ville Syrjala
2018-01-23 17:08 ` [PATCH 4/5] drm/armada: Use drm_mode_get_hv_timing() to populate plane clip rectangle Ville Syrjala
` (2 subsequent siblings)
4 siblings, 0 replies; 34+ messages in thread
From: Ville Syrjala @ 2018-01-23 17:08 UTC (permalink / raw)
To: linus-amlogic
From: Ville Syrj?l? <ville.syrjala@linux.intel.com>
Move the plane clip rectangle handling into
drm_atomic_helper_check_plane_state(). Drivers no longer
have to worry about such mundane details.
v2: Convert armada, rcar, and sun4i as well
Cc: Liviu Dudau <liviu.dudau@arm.com>
Cc: Brian Starkey <brian.starkey@arm.com>
Cc: Mali DP Maintainers <malidp@foss.arm.com>
Cc: Daniel Vetter <daniel.vetter@intel.com>
Cc: Gustavo Padovan <gustavo@padovan.org>
Cc: Sean Paul <seanpaul@chromium.org>
Cc: Philipp Zabel <p.zabel@pengutronix.de>
Cc: CK Hu <ck.hu@mediatek.com>
Cc: Neil Armstrong <narmstrong@baylibre.com>
Cc: Rob Clark <robdclark@gmail.com>
Cc: Ben Skeggs <bskeggs@redhat.com>
Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Cc: Sandy Huang <hjc@rock-chips.com>
Cc: "Heiko St?bner" <heiko@sntech.de>
Cc: Maxime Ripard <maxime.ripard@free-electrons.com>
Cc: Thierry Reding <thierry.reding@gmail.com>
Cc: VMware Graphics <linux-graphics-maintainer@vmware.com>
Cc: Sinclair Yeh <syeh@vmware.com>
Cc: Thomas Hellstrom <thellstrom@vmware.com>
Cc: Shawn Guo <shawnguo@kernel.org>
Cc: Archit Taneja <architt@codeaurora.org>
Cc: linux-amlogic at lists.infradead.org
Cc: linux-arm-msm at vger.kernel.org
Cc: freedreno at lists.freedesktop.org
Cc: nouveau at lists.freedesktop.org
Cc: linux-renesas-soc at vger.kernel.org
Cc: linux-tegra at vger.kernel.org
Cc: Russell King <rmk+kernel@armlinux.org.uk>
Suggested-by: Daniel Vetter <daniel@ffwll.ch>
Signed-off-by: Ville Syrj?l? <ville.syrjala@linux.intel.com>
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Reviewed-by: Thierry Reding <treding@nvidia.com>
Reviewed-by: Archit Taneja <architt@codeaurora.org> #msm
---
drivers/gpu/drm/arm/hdlcd_crtc.c | 7 +------
drivers/gpu/drm/arm/malidp_planes.c | 7 +------
drivers/gpu/drm/armada/armada_crtc.c | 8 ++------
drivers/gpu/drm/armada/armada_overlay.c | 8 ++------
drivers/gpu/drm/drm_atomic_helper.c | 12 +++++++-----
drivers/gpu/drm/drm_plane_helper.c | 11 +++--------
drivers/gpu/drm/drm_simple_kms_helper.c | 6 ------
drivers/gpu/drm/i915/intel_display.c | 12 ------------
drivers/gpu/drm/imx/ipuv3-plane.c | 7 +------
drivers/gpu/drm/mediatek/mtk_drm_plane.c | 7 +------
drivers/gpu/drm/meson/meson_plane.c | 7 +------
drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c | 14 ++------------
drivers/gpu/drm/nouveau/nv50_display.c | 12 ------------
drivers/gpu/drm/rcar-du/rcar_du_plane.c | 7 +------
drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 7 +------
drivers/gpu/drm/sun4i/sun8i_ui_layer.c | 7 +------
drivers/gpu/drm/sun4i/sun8i_vi_layer.c | 7 +------
drivers/gpu/drm/tegra/plane.c | 7 +------
drivers/gpu/drm/vmwgfx/vmwgfx_kms.c | 7 +------
drivers/gpu/drm/zte/zx_plane.c | 13 +------------
include/drm/drm_atomic_helper.h | 1 -
include/drm/drm_plane_helper.h | 1 -
22 files changed, 28 insertions(+), 147 deletions(-)
diff --git a/drivers/gpu/drm/arm/hdlcd_crtc.c b/drivers/gpu/drm/arm/hdlcd_crtc.c
index 877647ef35a9..cf5cbd63ecdf 100644
--- a/drivers/gpu/drm/arm/hdlcd_crtc.c
+++ b/drivers/gpu/drm/arm/hdlcd_crtc.c
@@ -229,7 +229,6 @@ static const struct drm_crtc_helper_funcs hdlcd_crtc_helper_funcs = {
static int hdlcd_plane_atomic_check(struct drm_plane *plane,
struct drm_plane_state *state)
{
- struct drm_rect clip = { 0 };
struct drm_crtc_state *crtc_state;
u32 src_h = state->src_h >> 16;
@@ -249,11 +248,7 @@ static int hdlcd_plane_atomic_check(struct drm_plane *plane,
return -EINVAL;
}
- if (crtc_state->enable)
- drm_mode_get_hv_timing(&crtc_state->mode,
- &clip.x2, &clip.y2);
-
- return drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
+ return drm_atomic_helper_check_plane_state(state, crtc_state,
DRM_PLANE_HELPER_NO_SCALING,
DRM_PLANE_HELPER_NO_SCALING,
false, true);
diff --git a/drivers/gpu/drm/arm/malidp_planes.c b/drivers/gpu/drm/arm/malidp_planes.c
index 2885d69af456..ee32361c87ac 100644
--- a/drivers/gpu/drm/arm/malidp_planes.c
+++ b/drivers/gpu/drm/arm/malidp_planes.c
@@ -141,18 +141,13 @@ static int malidp_se_check_scaling(struct malidp_plane *mp,
struct drm_crtc_state *crtc_state =
drm_atomic_get_existing_crtc_state(state->state, state->crtc);
struct malidp_crtc_state *mc;
- struct drm_rect clip = { 0 };
u32 src_w, src_h;
int ret;
if (!crtc_state)
return -EINVAL;
- if (crtc_state->enable)
- drm_mode_get_hv_timing(&crtc_state->mode,
- &clip.x2, &clip.y2);
-
- ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
+ ret = drm_atomic_helper_check_plane_state(state, crtc_state,
0, INT_MAX, true, true);
if (ret)
return ret;
diff --git a/drivers/gpu/drm/armada/armada_crtc.c b/drivers/gpu/drm/armada/armada_crtc.c
index fdc34ad4ca62..03eeee11dd5b 100644
--- a/drivers/gpu/drm/armada/armada_crtc.c
+++ b/drivers/gpu/drm/armada/armada_crtc.c
@@ -1203,15 +1203,11 @@ static int armada_drm_primary_update(struct drm_plane *plane,
struct drm_crtc_state crtc_state = {
.crtc = crtc,
.enable = crtc->enabled,
+ .mode = crtc->mode,
};
- struct drm_rect clip = {};
int ret;
- if (crtc->enabled)
- drm_mode_get_hv_timing(&crtc->mode,
- &clip.x2, &clip.y2);
-
- ret = drm_atomic_helper_check_plane_state(&state, &crtc_state, &clip, 0,
+ ret = drm_atomic_helper_check_plane_state(&state, &crtc_state, 0,
INT_MAX, true, false);
if (ret)
return ret;
diff --git a/drivers/gpu/drm/armada/armada_overlay.c b/drivers/gpu/drm/armada/armada_overlay.c
index 4f2a7a6e0fd3..c391955009d6 100644
--- a/drivers/gpu/drm/armada/armada_overlay.c
+++ b/drivers/gpu/drm/armada/armada_overlay.c
@@ -208,19 +208,15 @@ armada_ovl_plane_update(struct drm_plane *plane, struct drm_crtc *crtc,
struct drm_crtc_state crtc_state = {
.crtc = crtc,
.enable = crtc->enabled,
+ .mode = crtc->mode,
};
- struct drm_rect clip = {};
int ret;
trace_armada_ovl_plane_update(plane, crtc, fb,
crtc_x, crtc_y, crtc_w, crtc_h,
src_x, src_y, src_w, src_h);
- if (crtc->enabled)
- drm_mode_get_hv_timing(&crtc->mode,
- &clip.x2, &clip.y2);
-
- ret = drm_atomic_helper_check_plane_state(&state, &crtc_state, &clip, 0,
+ ret = drm_atomic_helper_check_plane_state(&state, &crtc_state, 0,
INT_MAX, true, false);
if (ret)
return ret;
diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
index ab4032167094..9fb96f9cc36e 100644
--- a/drivers/gpu/drm/drm_atomic_helper.c
+++ b/drivers/gpu/drm/drm_atomic_helper.c
@@ -699,7 +699,6 @@ EXPORT_SYMBOL(drm_atomic_helper_check_modeset);
* drm_atomic_helper_check_plane_state() - Check plane state for validity
* @plane_state: plane state to check
* @crtc_state: crtc state to check
- * @clip: integer clipping coordinates
* @min_scale: minimum @src:@dest scaling factor in 16.16 fixed point
* @max_scale: maximum @src:@dest scaling factor in 16.16 fixed point
* @can_position: is it legal to position the plane such that it
@@ -719,7 +718,6 @@ EXPORT_SYMBOL(drm_atomic_helper_check_modeset);
*/
int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
const struct drm_crtc_state *crtc_state,
- const struct drm_rect *clip,
int min_scale,
int max_scale,
bool can_position,
@@ -729,6 +727,7 @@ int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
struct drm_rect *src = &plane_state->src;
struct drm_rect *dst = &plane_state->dst;
unsigned int rotation = plane_state->rotation;
+ struct drm_rect clip = {};
int hscale, vscale;
WARN_ON(plane_state->crtc && plane_state->crtc != crtc_state->crtc);
@@ -764,7 +763,10 @@ int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
return -ERANGE;
}
- plane_state->visible = drm_rect_clip_scaled(src, dst, clip, hscale, vscale);
+ if (crtc_state->enable)
+ drm_mode_get_hv_timing(&crtc_state->mode, &clip.x2, &clip.y2);
+
+ plane_state->visible = drm_rect_clip_scaled(src, dst, &clip, hscale, vscale);
drm_rect_rotate_inv(src, fb->width << 16, fb->height << 16, rotation);
@@ -778,10 +780,10 @@ int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
*/
return 0;
- if (!can_position && !drm_rect_equals(dst, clip)) {
+ if (!can_position && !drm_rect_equals(dst, &clip)) {
DRM_DEBUG_KMS("Plane must cover entire CRTC\n");
drm_rect_debug_print("dst: ", dst, false);
- drm_rect_debug_print("clip: ", clip, false);
+ drm_rect_debug_print("clip: ", &clip, false);
return -EINVAL;
}
diff --git a/drivers/gpu/drm/drm_plane_helper.c b/drivers/gpu/drm/drm_plane_helper.c
index f1be8cd4e387..f88f68161519 100644
--- a/drivers/gpu/drm/drm_plane_helper.c
+++ b/drivers/gpu/drm/drm_plane_helper.c
@@ -106,7 +106,6 @@ static int get_connectors_for_crtc(struct drm_crtc *crtc,
* @fb: framebuffer to flip onto plane
* @src: source coordinates in 16.16 fixed point
* @dst: integer destination coordinates
- * @clip: integer clipping coordinates
* @rotation: plane rotation
* @min_scale: minimum @src:@dest scaling factor in 16.16 fixed point
* @max_scale: maximum @src:@dest scaling factor in 16.16 fixed point
@@ -131,7 +130,6 @@ int drm_plane_helper_check_update(struct drm_plane *plane,
struct drm_framebuffer *fb,
struct drm_rect *src,
struct drm_rect *dst,
- const struct drm_rect *clip,
unsigned int rotation,
int min_scale,
int max_scale,
@@ -157,11 +155,12 @@ int drm_plane_helper_check_update(struct drm_plane *plane,
struct drm_crtc_state crtc_state = {
.crtc = crtc,
.enable = crtc->enabled,
+ .mode = crtc->mode,
};
int ret;
ret = drm_atomic_helper_check_plane_state(&plane_state, &crtc_state,
- clip, min_scale, max_scale,
+ min_scale, max_scale,
can_position,
can_update_disabled);
if (ret)
@@ -239,16 +238,12 @@ int drm_primary_helper_update(struct drm_plane *plane, struct drm_crtc *crtc,
.x2 = crtc_x + crtc_w,
.y2 = crtc_y + crtc_h,
};
- const struct drm_rect clip = {
- .x2 = crtc->mode.hdisplay,
- .y2 = crtc->mode.vdisplay,
- };
struct drm_connector **connector_list;
int num_connectors, ret;
bool visible;
ret = drm_plane_helper_check_update(plane, crtc, fb,
- &src, &dest, &clip,
+ &src, &dest,
DRM_MODE_ROTATE_0,
DRM_PLANE_HELPER_NO_SCALING,
DRM_PLANE_HELPER_NO_SCALING,
diff --git a/drivers/gpu/drm/drm_simple_kms_helper.c b/drivers/gpu/drm/drm_simple_kms_helper.c
index 9d3f6b70812c..165bc756af96 100644
--- a/drivers/gpu/drm/drm_simple_kms_helper.c
+++ b/drivers/gpu/drm/drm_simple_kms_helper.c
@@ -89,7 +89,6 @@ static const struct drm_crtc_funcs drm_simple_kms_crtc_funcs = {
static int drm_simple_kms_plane_atomic_check(struct drm_plane *plane,
struct drm_plane_state *plane_state)
{
- struct drm_rect clip = { 0 };
struct drm_simple_display_pipe *pipe;
struct drm_crtc_state *crtc_state;
int ret;
@@ -100,12 +99,7 @@ static int drm_simple_kms_plane_atomic_check(struct drm_plane *plane,
if (!crtc_state->enable)
return 0; /* nothing to check when disabling or disabled */
- if (crtc_state->enable)
- drm_mode_get_hv_timing(&crtc_state->mode,
- &clip.x2, &clip.y2);
-
ret = drm_atomic_helper_check_plane_state(plane_state, crtc_state,
- &clip,
DRM_PLANE_HELPER_NO_SCALING,
DRM_PLANE_HELPER_NO_SCALING,
false, true);
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index d585ce4c8732..3933420c6911 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -9309,18 +9309,12 @@ static int intel_check_cursor(struct intel_crtc_state *crtc_state,
struct intel_plane_state *plane_state)
{
const struct drm_framebuffer *fb = plane_state->base.fb;
- struct drm_rect clip = {};
int src_x, src_y;
u32 offset;
int ret;
- if (crtc_state->base.enable)
- drm_mode_get_hv_timing(&crtc_state->base.mode,
- &clip.x2, &clip.y2);
-
ret = drm_atomic_helper_check_plane_state(&plane_state->base,
&crtc_state->base,
- &clip,
DRM_PLANE_HELPER_NO_SCALING,
DRM_PLANE_HELPER_NO_SCALING,
true, true);
@@ -12755,7 +12749,6 @@ intel_check_primary_plane(struct intel_plane *plane,
int min_scale = DRM_PLANE_HELPER_NO_SCALING;
int max_scale = DRM_PLANE_HELPER_NO_SCALING;
bool can_position = false;
- struct drm_rect clip = {};
int ret;
if (INTEL_GEN(dev_priv) >= 9) {
@@ -12767,13 +12760,8 @@ intel_check_primary_plane(struct intel_plane *plane,
can_position = true;
}
- if (crtc_state->base.enable)
- drm_mode_get_hv_timing(&crtc_state->base.mode,
- &clip.x2, &clip.y2);
-
ret = drm_atomic_helper_check_plane_state(&state->base,
&crtc_state->base,
- &clip,
min_scale, max_scale,
can_position, true);
if (ret)
diff --git a/drivers/gpu/drm/imx/ipuv3-plane.c b/drivers/gpu/drm/imx/ipuv3-plane.c
index 150628293c51..d7e3583e608e 100644
--- a/drivers/gpu/drm/imx/ipuv3-plane.c
+++ b/drivers/gpu/drm/imx/ipuv3-plane.c
@@ -351,7 +351,6 @@ static int ipu_plane_atomic_check(struct drm_plane *plane,
struct drm_framebuffer *old_fb = old_state->fb;
unsigned long eba, ubo, vbo, old_ubo, old_vbo, alpha_eba;
bool can_position = (plane->type == DRM_PLANE_TYPE_OVERLAY);
- struct drm_rect clip = {};
int hsub, vsub;
int ret;
@@ -367,11 +366,7 @@ static int ipu_plane_atomic_check(struct drm_plane *plane,
if (WARN_ON(!crtc_state))
return -EINVAL;
- if (crtc_state->enable)
- drm_mode_get_hv_timing(&crtc_state->mode,
- &clip.x2, &clip.y2);
-
- ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
+ ret = drm_atomic_helper_check_plane_state(state, crtc_state,
DRM_PLANE_HELPER_NO_SCALING,
DRM_PLANE_HELPER_NO_SCALING,
can_position, true);
diff --git a/drivers/gpu/drm/mediatek/mtk_drm_plane.c b/drivers/gpu/drm/mediatek/mtk_drm_plane.c
index b5c6eec9a584..2f4b0ffee598 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_plane.c
+++ b/drivers/gpu/drm/mediatek/mtk_drm_plane.c
@@ -91,7 +91,6 @@ static int mtk_plane_atomic_check(struct drm_plane *plane,
{
struct drm_framebuffer *fb = state->fb;
struct drm_crtc_state *crtc_state;
- struct drm_rect clip = { 0, };
if (!fb)
return 0;
@@ -108,11 +107,7 @@ static int mtk_plane_atomic_check(struct drm_plane *plane,
if (IS_ERR(crtc_state))
return PTR_ERR(crtc_state);
- if (crtc_state->enable)
- drm_mode_get_hv_timing(&crtc_state->mode,
- &clip.x2, &clip.y2);
-
- return drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
+ return drm_atomic_helper_check_plane_state(state, crtc_state,
DRM_PLANE_HELPER_NO_SCALING,
DRM_PLANE_HELPER_NO_SCALING,
true, true);
diff --git a/drivers/gpu/drm/meson/meson_plane.c b/drivers/gpu/drm/meson/meson_plane.c
index 3801bee1f9e6..c78a3a59f58c 100644
--- a/drivers/gpu/drm/meson/meson_plane.c
+++ b/drivers/gpu/drm/meson/meson_plane.c
@@ -49,7 +49,6 @@ static int meson_plane_atomic_check(struct drm_plane *plane,
struct drm_plane_state *state)
{
struct drm_crtc_state *crtc_state;
- struct drm_rect clip = { 0, };
if (!state->crtc)
return 0;
@@ -58,11 +57,7 @@ static int meson_plane_atomic_check(struct drm_plane *plane,
if (IS_ERR(crtc_state))
return PTR_ERR(crtc_state);
- if (crtc_state->enable)
- drm_mode_get_hv_timing(&crtc_state->mode,
- &clip.x2, &clip.y2);
-
- return drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
+ return drm_atomic_helper_check_plane_state(state, crtc_state,
DRM_PLANE_HELPER_NO_SCALING,
DRM_PLANE_HELPER_NO_SCALING,
true, true);
diff --git a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c
index 98d4d7331767..44fc9fe4737a 100644
--- a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c
+++ b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c
@@ -286,7 +286,6 @@ static int mdp5_plane_atomic_check_with_state(struct drm_crtc_state *crtc_state,
uint32_t max_width, max_height;
bool out_of_bounds = false;
uint32_t caps = 0;
- struct drm_rect clip = {};
int min_scale, max_scale;
int ret;
@@ -323,11 +322,7 @@ static int mdp5_plane_atomic_check_with_state(struct drm_crtc_state *crtc_state,
min_scale = FRAC_16_16(1, 8);
max_scale = FRAC_16_16(8, 1);
- if (crtc_state->enable)
- drm_mode_get_hv_timing(&crtc_state->mode,
- &clip.x2, &clip.y2);
-
- ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
+ ret = drm_atomic_helper_check_plane_state(state, crtc_state,
min_scale, max_scale,
true, true);
if (ret)
@@ -471,7 +466,6 @@ static int mdp5_plane_atomic_async_check(struct drm_plane *plane,
{
struct mdp5_plane_state *mdp5_state = to_mdp5_plane_state(state);
struct drm_crtc_state *crtc_state;
- struct drm_rect clip = {};
int min_scale, max_scale;
int ret;
@@ -502,11 +496,7 @@ static int mdp5_plane_atomic_async_check(struct drm_plane *plane,
min_scale = FRAC_16_16(1, 8);
max_scale = FRAC_16_16(8, 1);
- if (crtc_state->enable)
- drm_mode_get_hv_timing(&crtc_state->mode,
- &clip.x2, &clip.y2);
-
- ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
+ ret = drm_atomic_helper_check_plane_state(state, crtc_state,
min_scale, max_scale,
true, true);
if (ret)
diff --git a/drivers/gpu/drm/nouveau/nv50_display.c b/drivers/gpu/drm/nouveau/nv50_display.c
index 5a9a51c735f0..eea94c098237 100644
--- a/drivers/gpu/drm/nouveau/nv50_display.c
+++ b/drivers/gpu/drm/nouveau/nv50_display.c
@@ -1135,15 +1135,9 @@ static int
nv50_curs_acquire(struct nv50_wndw *wndw, struct nv50_wndw_atom *asyw,
struct nv50_head_atom *asyh)
{
- struct drm_rect clip = {};
int ret;
- if (asyh->state.enable)
- drm_mode_get_hv_timing(&asyh->state.mode,
- &clip.x2, &clip.y2);
-
ret = drm_atomic_helper_check_plane_state(&asyw->state, &asyh->state,
- &clip,
DRM_PLANE_HELPER_NO_SCALING,
DRM_PLANE_HELPER_NO_SCALING,
true, true);
@@ -1427,18 +1421,12 @@ nv50_base_acquire(struct nv50_wndw *wndw, struct nv50_wndw_atom *asyw,
struct nv50_head_atom *asyh)
{
const struct drm_framebuffer *fb = asyw->state.fb;
- struct drm_rect clip = {};
int ret;
if (!fb->format->depth)
return -EINVAL;
- if (asyh->state.enable)
- drm_mode_get_hv_timing(&asyh->state.mode,
- &clip.x2, &clip.y2);
-
ret = drm_atomic_helper_check_plane_state(&asyw->state, &asyh->state,
- &clip,
DRM_PLANE_HELPER_NO_SCALING,
DRM_PLANE_HELPER_NO_SCALING,
false, true);
diff --git a/drivers/gpu/drm/rcar-du/rcar_du_plane.c b/drivers/gpu/drm/rcar-du/rcar_du_plane.c
index 5687a94d4cb1..68556bd9dad2 100644
--- a/drivers/gpu/drm/rcar-du/rcar_du_plane.c
+++ b/drivers/gpu/drm/rcar-du/rcar_du_plane.c
@@ -572,7 +572,6 @@ int __rcar_du_plane_atomic_check(struct drm_plane *plane,
{
struct drm_device *dev = plane->dev;
struct drm_crtc_state *crtc_state;
- struct drm_rect clip = {};
int ret;
if (!state->crtc) {
@@ -589,11 +588,7 @@ int __rcar_du_plane_atomic_check(struct drm_plane *plane,
if (IS_ERR(crtc_state))
return PTR_ERR(crtc_state);
- if (crtc_state->enable)
- drm_mode_get_hv_timing(&crtc_state->mode,
- &clip.x2, &clip.y2);
-
- ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
+ ret = drm_atomic_helper_check_plane_state(state, crtc_state,
DRM_PLANE_HELPER_NO_SCALING,
DRM_PLANE_HELPER_NO_SCALING,
true, true);
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
index cd2c72389629..b95e9d45a435 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
@@ -641,7 +641,6 @@ static int vop_plane_atomic_check(struct drm_plane *plane,
struct vop_win *vop_win = to_vop_win(plane);
const struct vop_win_data *win = vop_win->data;
int ret;
- struct drm_rect clip = {};
int min_scale = win->phy->scl ? FRAC_16_16(1, 8) :
DRM_PLANE_HELPER_NO_SCALING;
int max_scale = win->phy->scl ? FRAC_16_16(8, 1) :
@@ -654,11 +653,7 @@ static int vop_plane_atomic_check(struct drm_plane *plane,
if (WARN_ON(!crtc_state))
return -EINVAL;
- if (crtc_state->enable)
- drm_mode_get_hv_timing(&crtc_state->mode,
- &clip.x2, &clip.y2);
-
- ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
+ ret = drm_atomic_helper_check_plane_state(state, crtc_state,
min_scale, max_scale,
true, true);
if (ret)
diff --git a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c
index 2f0ccd50b54d..9a540330cb79 100644
--- a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c
+++ b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c
@@ -211,7 +211,6 @@ static int sun8i_ui_layer_atomic_check(struct drm_plane *plane,
struct drm_crtc *crtc = state->crtc;
struct drm_crtc_state *crtc_state;
int min_scale, max_scale;
- struct drm_rect clip = {};
if (!crtc)
return 0;
@@ -220,10 +219,6 @@ static int sun8i_ui_layer_atomic_check(struct drm_plane *plane,
if (WARN_ON(!crtc_state))
return -EINVAL;
- if (crtc_state->enable)
- drm_mode_get_hv_timing(&crtc_state->mode,
- &clip.x2, &clip.y2);
-
min_scale = DRM_PLANE_HELPER_NO_SCALING;
max_scale = DRM_PLANE_HELPER_NO_SCALING;
@@ -232,7 +227,7 @@ static int sun8i_ui_layer_atomic_check(struct drm_plane *plane,
max_scale = SUN8I_UI_SCALER_SCALE_MAX;
}
- return drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
+ return drm_atomic_helper_check_plane_state(state, crtc_state,
min_scale, max_scale,
true, true);
}
diff --git a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c
index eb3bf2d7291a..5877f8ef5895 100644
--- a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c
+++ b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c
@@ -239,7 +239,6 @@ static int sun8i_vi_layer_atomic_check(struct drm_plane *plane,
struct drm_crtc *crtc = state->crtc;
struct drm_crtc_state *crtc_state;
int min_scale, max_scale;
- struct drm_rect clip = {};
if (!crtc)
return 0;
@@ -248,10 +247,6 @@ static int sun8i_vi_layer_atomic_check(struct drm_plane *plane,
if (WARN_ON(!crtc_state))
return -EINVAL;
- if (crtc_state->enable)
- drm_mode_get_hv_timing(&crtc_state->mode,
- &clip.x2, &clip.y2);
-
min_scale = DRM_PLANE_HELPER_NO_SCALING;
max_scale = DRM_PLANE_HELPER_NO_SCALING;
@@ -260,7 +255,7 @@ static int sun8i_vi_layer_atomic_check(struct drm_plane *plane,
max_scale = SUN8I_VI_SCALER_SCALE_MAX;
}
- return drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
+ return drm_atomic_helper_check_plane_state(state, crtc_state,
min_scale, max_scale,
true, true);
}
diff --git a/drivers/gpu/drm/tegra/plane.c b/drivers/gpu/drm/tegra/plane.c
index 7267a01e6f08..a056fbf83b53 100644
--- a/drivers/gpu/drm/tegra/plane.c
+++ b/drivers/gpu/drm/tegra/plane.c
@@ -82,7 +82,6 @@ int tegra_plane_state_add(struct tegra_plane *plane,
{
struct drm_crtc_state *crtc_state;
struct tegra_dc_state *tegra;
- struct drm_rect clip = {};
int err;
/* Propagate errors from allocation or locking failures. */
@@ -90,12 +89,8 @@ int tegra_plane_state_add(struct tegra_plane *plane,
if (IS_ERR(crtc_state))
return PTR_ERR(crtc_state);
- if (crtc_state->enable)
- drm_mode_get_hv_timing(&crtc_state->mode,
- &clip.x2, &clip.y2);
-
/* Check plane state for visibility and calculate clipping bounds */
- err = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
+ err = drm_atomic_helper_check_plane_state(state, crtc_state,
0, INT_MAX, true, true);
if (err < 0)
return err;
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
index 1107d6d03506..34ecc27fc30a 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
@@ -443,17 +443,12 @@ int vmw_du_primary_plane_atomic_check(struct drm_plane *plane,
{
struct drm_crtc_state *crtc_state = NULL;
struct drm_framebuffer *new_fb = state->fb;
- struct drm_rect clip = {};
int ret;
if (state->crtc)
crtc_state = drm_atomic_get_new_crtc_state(state->state, state->crtc);
- if (crtc_state && crtc_state->enable)
- drm_mode_get_hv_timing(&crtc_state->mode,
- &clip.x2, &clip.y2);
-
- ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
+ ret = drm_atomic_helper_check_plane_state(state, crtc_state,
DRM_PLANE_HELPER_NO_SCALING,
DRM_PLANE_HELPER_NO_SCALING,
false, true);
diff --git a/drivers/gpu/drm/zte/zx_plane.c b/drivers/gpu/drm/zte/zx_plane.c
index 8e1f34274e24..94545adac50d 100644
--- a/drivers/gpu/drm/zte/zx_plane.c
+++ b/drivers/gpu/drm/zte/zx_plane.c
@@ -55,7 +55,6 @@ static int zx_vl_plane_atomic_check(struct drm_plane *plane,
struct drm_framebuffer *fb = plane_state->fb;
struct drm_crtc *crtc = plane_state->crtc;
struct drm_crtc_state *crtc_state;
- struct drm_rect clip = {};
int min_scale = FRAC_16_16(1, 8);
int max_scale = FRAC_16_16(8, 1);
@@ -75,12 +74,8 @@ static int zx_vl_plane_atomic_check(struct drm_plane *plane,
if (!plane_state->crtc)
return -EINVAL;
- if (crtc_state->enable)
- drm_mode_get_hv_timing(&crtc_state->mode,
- &clip.x2, &clip.y2);
-
return drm_atomic_helper_check_plane_state(plane_state, crtc_state,
- &clip, min_scale, max_scale,
+ min_scale, max_scale,
true, true);
}
@@ -291,7 +286,6 @@ static int zx_gl_plane_atomic_check(struct drm_plane *plane,
struct drm_framebuffer *fb = plane_state->fb;
struct drm_crtc *crtc = plane_state->crtc;
struct drm_crtc_state *crtc_state;
- struct drm_rect clip = {};
if (!crtc || !fb)
return 0;
@@ -309,12 +303,7 @@ static int zx_gl_plane_atomic_check(struct drm_plane *plane,
if (!plane_state->crtc)
return -EINVAL;
- if (crtc_state->enable)
- drm_mode_get_hv_timing(&crtc_state->mode,
- &clip.x2, &clip.y2);
-
return drm_atomic_helper_check_plane_state(plane_state, crtc_state,
- &clip,
DRM_PLANE_HELPER_NO_SCALING,
DRM_PLANE_HELPER_NO_SCALING,
false, true);
diff --git a/include/drm/drm_atomic_helper.h b/include/drm/drm_atomic_helper.h
index 4842ee9485ce..26aaba58d6ce 100644
--- a/include/drm/drm_atomic_helper.h
+++ b/include/drm/drm_atomic_helper.h
@@ -40,7 +40,6 @@ int drm_atomic_helper_check_modeset(struct drm_device *dev,
struct drm_atomic_state *state);
int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
const struct drm_crtc_state *crtc_state,
- const struct drm_rect *clip,
int min_scale,
int max_scale,
bool can_position,
diff --git a/include/drm/drm_plane_helper.h b/include/drm/drm_plane_helper.h
index 8aa49c0ecd4d..28d7ce620729 100644
--- a/include/drm/drm_plane_helper.h
+++ b/include/drm/drm_plane_helper.h
@@ -43,7 +43,6 @@ int drm_plane_helper_check_update(struct drm_plane *plane,
struct drm_framebuffer *fb,
struct drm_rect *src,
struct drm_rect *dest,
- const struct drm_rect *clip,
unsigned int rotation,
int min_scale,
int max_scale,
--
2.13.6
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [PATCH 5/5] drm: Don't pass clip to drm_atomic_helper_check_plane_state()
@ 2018-01-23 17:08 ` Ville Syrjala
0 siblings, 0 replies; 34+ messages in thread
From: Ville Syrjala @ 2018-01-23 17:08 UTC (permalink / raw)
To: dri-devel
Cc: Liviu Dudau, Brian Starkey, Mali DP Maintainers, Daniel Vetter,
Gustavo Padovan, Sean Paul, Philipp Zabel, CK Hu, Neil Armstrong,
Rob Clark, Ben Skeggs, Laurent Pinchart, Sandy Huang,
Heiko Stübner, Maxime Ripard, Thierry Reding,
VMware Graphics, Sinclair Yeh
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
Move the plane clip rectangle handling into
drm_atomic_helper_check_plane_state(). Drivers no longer
have to worry about such mundane details.
v2: Convert armada, rcar, and sun4i as well
Cc: Liviu Dudau <liviu.dudau@arm.com>
Cc: Brian Starkey <brian.starkey@arm.com>
Cc: Mali DP Maintainers <malidp@foss.arm.com>
Cc: Daniel Vetter <daniel.vetter@intel.com>
Cc: Gustavo Padovan <gustavo@padovan.org>
Cc: Sean Paul <seanpaul@chromium.org>
Cc: Philipp Zabel <p.zabel@pengutronix.de>
Cc: CK Hu <ck.hu@mediatek.com>
Cc: Neil Armstrong <narmstrong@baylibre.com>
Cc: Rob Clark <robdclark@gmail.com>
Cc: Ben Skeggs <bskeggs@redhat.com>
Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Cc: Sandy Huang <hjc@rock-chips.com>
Cc: "Heiko Stübner" <heiko@sntech.de>
Cc: Maxime Ripard <maxime.ripard@free-electrons.com>
Cc: Thierry Reding <thierry.reding@gmail.com>
Cc: VMware Graphics <linux-graphics-maintainer@vmware.com>
Cc: Sinclair Yeh <syeh@vmware.com>
Cc: Thomas Hellstrom <thellstrom@vmware.com>
Cc: Shawn Guo <shawnguo@kernel.org>
Cc: Archit Taneja <architt@codeaurora.org>
Cc: linux-amlogic@lists.infradead.org
Cc: linux-arm-msm@vger.kernel.org
Cc: freedreno@lists.freedesktop.org
Cc: nouveau@lists.freedesktop.org
Cc: linux-renesas-soc@vger.kernel.org
Cc: linux-tegra@vger.kernel.org
Cc: Russell King <rmk+kernel@armlinux.org.uk>
Suggested-by: Daniel Vetter <daniel@ffwll.ch>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Reviewed-by: Thierry Reding <treding@nvidia.com>
Reviewed-by: Archit Taneja <architt@codeaurora.org> #msm
---
drivers/gpu/drm/arm/hdlcd_crtc.c | 7 +------
drivers/gpu/drm/arm/malidp_planes.c | 7 +------
drivers/gpu/drm/armada/armada_crtc.c | 8 ++------
drivers/gpu/drm/armada/armada_overlay.c | 8 ++------
drivers/gpu/drm/drm_atomic_helper.c | 12 +++++++-----
drivers/gpu/drm/drm_plane_helper.c | 11 +++--------
drivers/gpu/drm/drm_simple_kms_helper.c | 6 ------
drivers/gpu/drm/i915/intel_display.c | 12 ------------
drivers/gpu/drm/imx/ipuv3-plane.c | 7 +------
drivers/gpu/drm/mediatek/mtk_drm_plane.c | 7 +------
drivers/gpu/drm/meson/meson_plane.c | 7 +------
drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c | 14 ++------------
drivers/gpu/drm/nouveau/nv50_display.c | 12 ------------
drivers/gpu/drm/rcar-du/rcar_du_plane.c | 7 +------
drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 7 +------
drivers/gpu/drm/sun4i/sun8i_ui_layer.c | 7 +------
drivers/gpu/drm/sun4i/sun8i_vi_layer.c | 7 +------
drivers/gpu/drm/tegra/plane.c | 7 +------
drivers/gpu/drm/vmwgfx/vmwgfx_kms.c | 7 +------
drivers/gpu/drm/zte/zx_plane.c | 13 +------------
include/drm/drm_atomic_helper.h | 1 -
include/drm/drm_plane_helper.h | 1 -
22 files changed, 28 insertions(+), 147 deletions(-)
diff --git a/drivers/gpu/drm/arm/hdlcd_crtc.c b/drivers/gpu/drm/arm/hdlcd_crtc.c
index 877647ef35a9..cf5cbd63ecdf 100644
--- a/drivers/gpu/drm/arm/hdlcd_crtc.c
+++ b/drivers/gpu/drm/arm/hdlcd_crtc.c
@@ -229,7 +229,6 @@ static const struct drm_crtc_helper_funcs hdlcd_crtc_helper_funcs = {
static int hdlcd_plane_atomic_check(struct drm_plane *plane,
struct drm_plane_state *state)
{
- struct drm_rect clip = { 0 };
struct drm_crtc_state *crtc_state;
u32 src_h = state->src_h >> 16;
@@ -249,11 +248,7 @@ static int hdlcd_plane_atomic_check(struct drm_plane *plane,
return -EINVAL;
}
- if (crtc_state->enable)
- drm_mode_get_hv_timing(&crtc_state->mode,
- &clip.x2, &clip.y2);
-
- return drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
+ return drm_atomic_helper_check_plane_state(state, crtc_state,
DRM_PLANE_HELPER_NO_SCALING,
DRM_PLANE_HELPER_NO_SCALING,
false, true);
diff --git a/drivers/gpu/drm/arm/malidp_planes.c b/drivers/gpu/drm/arm/malidp_planes.c
index 2885d69af456..ee32361c87ac 100644
--- a/drivers/gpu/drm/arm/malidp_planes.c
+++ b/drivers/gpu/drm/arm/malidp_planes.c
@@ -141,18 +141,13 @@ static int malidp_se_check_scaling(struct malidp_plane *mp,
struct drm_crtc_state *crtc_state =
drm_atomic_get_existing_crtc_state(state->state, state->crtc);
struct malidp_crtc_state *mc;
- struct drm_rect clip = { 0 };
u32 src_w, src_h;
int ret;
if (!crtc_state)
return -EINVAL;
- if (crtc_state->enable)
- drm_mode_get_hv_timing(&crtc_state->mode,
- &clip.x2, &clip.y2);
-
- ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
+ ret = drm_atomic_helper_check_plane_state(state, crtc_state,
0, INT_MAX, true, true);
if (ret)
return ret;
diff --git a/drivers/gpu/drm/armada/armada_crtc.c b/drivers/gpu/drm/armada/armada_crtc.c
index fdc34ad4ca62..03eeee11dd5b 100644
--- a/drivers/gpu/drm/armada/armada_crtc.c
+++ b/drivers/gpu/drm/armada/armada_crtc.c
@@ -1203,15 +1203,11 @@ static int armada_drm_primary_update(struct drm_plane *plane,
struct drm_crtc_state crtc_state = {
.crtc = crtc,
.enable = crtc->enabled,
+ .mode = crtc->mode,
};
- struct drm_rect clip = {};
int ret;
- if (crtc->enabled)
- drm_mode_get_hv_timing(&crtc->mode,
- &clip.x2, &clip.y2);
-
- ret = drm_atomic_helper_check_plane_state(&state, &crtc_state, &clip, 0,
+ ret = drm_atomic_helper_check_plane_state(&state, &crtc_state, 0,
INT_MAX, true, false);
if (ret)
return ret;
diff --git a/drivers/gpu/drm/armada/armada_overlay.c b/drivers/gpu/drm/armada/armada_overlay.c
index 4f2a7a6e0fd3..c391955009d6 100644
--- a/drivers/gpu/drm/armada/armada_overlay.c
+++ b/drivers/gpu/drm/armada/armada_overlay.c
@@ -208,19 +208,15 @@ armada_ovl_plane_update(struct drm_plane *plane, struct drm_crtc *crtc,
struct drm_crtc_state crtc_state = {
.crtc = crtc,
.enable = crtc->enabled,
+ .mode = crtc->mode,
};
- struct drm_rect clip = {};
int ret;
trace_armada_ovl_plane_update(plane, crtc, fb,
crtc_x, crtc_y, crtc_w, crtc_h,
src_x, src_y, src_w, src_h);
- if (crtc->enabled)
- drm_mode_get_hv_timing(&crtc->mode,
- &clip.x2, &clip.y2);
-
- ret = drm_atomic_helper_check_plane_state(&state, &crtc_state, &clip, 0,
+ ret = drm_atomic_helper_check_plane_state(&state, &crtc_state, 0,
INT_MAX, true, false);
if (ret)
return ret;
diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
index ab4032167094..9fb96f9cc36e 100644
--- a/drivers/gpu/drm/drm_atomic_helper.c
+++ b/drivers/gpu/drm/drm_atomic_helper.c
@@ -699,7 +699,6 @@ EXPORT_SYMBOL(drm_atomic_helper_check_modeset);
* drm_atomic_helper_check_plane_state() - Check plane state for validity
* @plane_state: plane state to check
* @crtc_state: crtc state to check
- * @clip: integer clipping coordinates
* @min_scale: minimum @src:@dest scaling factor in 16.16 fixed point
* @max_scale: maximum @src:@dest scaling factor in 16.16 fixed point
* @can_position: is it legal to position the plane such that it
@@ -719,7 +718,6 @@ EXPORT_SYMBOL(drm_atomic_helper_check_modeset);
*/
int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
const struct drm_crtc_state *crtc_state,
- const struct drm_rect *clip,
int min_scale,
int max_scale,
bool can_position,
@@ -729,6 +727,7 @@ int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
struct drm_rect *src = &plane_state->src;
struct drm_rect *dst = &plane_state->dst;
unsigned int rotation = plane_state->rotation;
+ struct drm_rect clip = {};
int hscale, vscale;
WARN_ON(plane_state->crtc && plane_state->crtc != crtc_state->crtc);
@@ -764,7 +763,10 @@ int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
return -ERANGE;
}
- plane_state->visible = drm_rect_clip_scaled(src, dst, clip, hscale, vscale);
+ if (crtc_state->enable)
+ drm_mode_get_hv_timing(&crtc_state->mode, &clip.x2, &clip.y2);
+
+ plane_state->visible = drm_rect_clip_scaled(src, dst, &clip, hscale, vscale);
drm_rect_rotate_inv(src, fb->width << 16, fb->height << 16, rotation);
@@ -778,10 +780,10 @@ int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
*/
return 0;
- if (!can_position && !drm_rect_equals(dst, clip)) {
+ if (!can_position && !drm_rect_equals(dst, &clip)) {
DRM_DEBUG_KMS("Plane must cover entire CRTC\n");
drm_rect_debug_print("dst: ", dst, false);
- drm_rect_debug_print("clip: ", clip, false);
+ drm_rect_debug_print("clip: ", &clip, false);
return -EINVAL;
}
diff --git a/drivers/gpu/drm/drm_plane_helper.c b/drivers/gpu/drm/drm_plane_helper.c
index f1be8cd4e387..f88f68161519 100644
--- a/drivers/gpu/drm/drm_plane_helper.c
+++ b/drivers/gpu/drm/drm_plane_helper.c
@@ -106,7 +106,6 @@ static int get_connectors_for_crtc(struct drm_crtc *crtc,
* @fb: framebuffer to flip onto plane
* @src: source coordinates in 16.16 fixed point
* @dst: integer destination coordinates
- * @clip: integer clipping coordinates
* @rotation: plane rotation
* @min_scale: minimum @src:@dest scaling factor in 16.16 fixed point
* @max_scale: maximum @src:@dest scaling factor in 16.16 fixed point
@@ -131,7 +130,6 @@ int drm_plane_helper_check_update(struct drm_plane *plane,
struct drm_framebuffer *fb,
struct drm_rect *src,
struct drm_rect *dst,
- const struct drm_rect *clip,
unsigned int rotation,
int min_scale,
int max_scale,
@@ -157,11 +155,12 @@ int drm_plane_helper_check_update(struct drm_plane *plane,
struct drm_crtc_state crtc_state = {
.crtc = crtc,
.enable = crtc->enabled,
+ .mode = crtc->mode,
};
int ret;
ret = drm_atomic_helper_check_plane_state(&plane_state, &crtc_state,
- clip, min_scale, max_scale,
+ min_scale, max_scale,
can_position,
can_update_disabled);
if (ret)
@@ -239,16 +238,12 @@ int drm_primary_helper_update(struct drm_plane *plane, struct drm_crtc *crtc,
.x2 = crtc_x + crtc_w,
.y2 = crtc_y + crtc_h,
};
- const struct drm_rect clip = {
- .x2 = crtc->mode.hdisplay,
- .y2 = crtc->mode.vdisplay,
- };
struct drm_connector **connector_list;
int num_connectors, ret;
bool visible;
ret = drm_plane_helper_check_update(plane, crtc, fb,
- &src, &dest, &clip,
+ &src, &dest,
DRM_MODE_ROTATE_0,
DRM_PLANE_HELPER_NO_SCALING,
DRM_PLANE_HELPER_NO_SCALING,
diff --git a/drivers/gpu/drm/drm_simple_kms_helper.c b/drivers/gpu/drm/drm_simple_kms_helper.c
index 9d3f6b70812c..165bc756af96 100644
--- a/drivers/gpu/drm/drm_simple_kms_helper.c
+++ b/drivers/gpu/drm/drm_simple_kms_helper.c
@@ -89,7 +89,6 @@ static const struct drm_crtc_funcs drm_simple_kms_crtc_funcs = {
static int drm_simple_kms_plane_atomic_check(struct drm_plane *plane,
struct drm_plane_state *plane_state)
{
- struct drm_rect clip = { 0 };
struct drm_simple_display_pipe *pipe;
struct drm_crtc_state *crtc_state;
int ret;
@@ -100,12 +99,7 @@ static int drm_simple_kms_plane_atomic_check(struct drm_plane *plane,
if (!crtc_state->enable)
return 0; /* nothing to check when disabling or disabled */
- if (crtc_state->enable)
- drm_mode_get_hv_timing(&crtc_state->mode,
- &clip.x2, &clip.y2);
-
ret = drm_atomic_helper_check_plane_state(plane_state, crtc_state,
- &clip,
DRM_PLANE_HELPER_NO_SCALING,
DRM_PLANE_HELPER_NO_SCALING,
false, true);
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index d585ce4c8732..3933420c6911 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -9309,18 +9309,12 @@ static int intel_check_cursor(struct intel_crtc_state *crtc_state,
struct intel_plane_state *plane_state)
{
const struct drm_framebuffer *fb = plane_state->base.fb;
- struct drm_rect clip = {};
int src_x, src_y;
u32 offset;
int ret;
- if (crtc_state->base.enable)
- drm_mode_get_hv_timing(&crtc_state->base.mode,
- &clip.x2, &clip.y2);
-
ret = drm_atomic_helper_check_plane_state(&plane_state->base,
&crtc_state->base,
- &clip,
DRM_PLANE_HELPER_NO_SCALING,
DRM_PLANE_HELPER_NO_SCALING,
true, true);
@@ -12755,7 +12749,6 @@ intel_check_primary_plane(struct intel_plane *plane,
int min_scale = DRM_PLANE_HELPER_NO_SCALING;
int max_scale = DRM_PLANE_HELPER_NO_SCALING;
bool can_position = false;
- struct drm_rect clip = {};
int ret;
if (INTEL_GEN(dev_priv) >= 9) {
@@ -12767,13 +12760,8 @@ intel_check_primary_plane(struct intel_plane *plane,
can_position = true;
}
- if (crtc_state->base.enable)
- drm_mode_get_hv_timing(&crtc_state->base.mode,
- &clip.x2, &clip.y2);
-
ret = drm_atomic_helper_check_plane_state(&state->base,
&crtc_state->base,
- &clip,
min_scale, max_scale,
can_position, true);
if (ret)
diff --git a/drivers/gpu/drm/imx/ipuv3-plane.c b/drivers/gpu/drm/imx/ipuv3-plane.c
index 150628293c51..d7e3583e608e 100644
--- a/drivers/gpu/drm/imx/ipuv3-plane.c
+++ b/drivers/gpu/drm/imx/ipuv3-plane.c
@@ -351,7 +351,6 @@ static int ipu_plane_atomic_check(struct drm_plane *plane,
struct drm_framebuffer *old_fb = old_state->fb;
unsigned long eba, ubo, vbo, old_ubo, old_vbo, alpha_eba;
bool can_position = (plane->type == DRM_PLANE_TYPE_OVERLAY);
- struct drm_rect clip = {};
int hsub, vsub;
int ret;
@@ -367,11 +366,7 @@ static int ipu_plane_atomic_check(struct drm_plane *plane,
if (WARN_ON(!crtc_state))
return -EINVAL;
- if (crtc_state->enable)
- drm_mode_get_hv_timing(&crtc_state->mode,
- &clip.x2, &clip.y2);
-
- ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
+ ret = drm_atomic_helper_check_plane_state(state, crtc_state,
DRM_PLANE_HELPER_NO_SCALING,
DRM_PLANE_HELPER_NO_SCALING,
can_position, true);
diff --git a/drivers/gpu/drm/mediatek/mtk_drm_plane.c b/drivers/gpu/drm/mediatek/mtk_drm_plane.c
index b5c6eec9a584..2f4b0ffee598 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_plane.c
+++ b/drivers/gpu/drm/mediatek/mtk_drm_plane.c
@@ -91,7 +91,6 @@ static int mtk_plane_atomic_check(struct drm_plane *plane,
{
struct drm_framebuffer *fb = state->fb;
struct drm_crtc_state *crtc_state;
- struct drm_rect clip = { 0, };
if (!fb)
return 0;
@@ -108,11 +107,7 @@ static int mtk_plane_atomic_check(struct drm_plane *plane,
if (IS_ERR(crtc_state))
return PTR_ERR(crtc_state);
- if (crtc_state->enable)
- drm_mode_get_hv_timing(&crtc_state->mode,
- &clip.x2, &clip.y2);
-
- return drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
+ return drm_atomic_helper_check_plane_state(state, crtc_state,
DRM_PLANE_HELPER_NO_SCALING,
DRM_PLANE_HELPER_NO_SCALING,
true, true);
diff --git a/drivers/gpu/drm/meson/meson_plane.c b/drivers/gpu/drm/meson/meson_plane.c
index 3801bee1f9e6..c78a3a59f58c 100644
--- a/drivers/gpu/drm/meson/meson_plane.c
+++ b/drivers/gpu/drm/meson/meson_plane.c
@@ -49,7 +49,6 @@ static int meson_plane_atomic_check(struct drm_plane *plane,
struct drm_plane_state *state)
{
struct drm_crtc_state *crtc_state;
- struct drm_rect clip = { 0, };
if (!state->crtc)
return 0;
@@ -58,11 +57,7 @@ static int meson_plane_atomic_check(struct drm_plane *plane,
if (IS_ERR(crtc_state))
return PTR_ERR(crtc_state);
- if (crtc_state->enable)
- drm_mode_get_hv_timing(&crtc_state->mode,
- &clip.x2, &clip.y2);
-
- return drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
+ return drm_atomic_helper_check_plane_state(state, crtc_state,
DRM_PLANE_HELPER_NO_SCALING,
DRM_PLANE_HELPER_NO_SCALING,
true, true);
diff --git a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c
index 98d4d7331767..44fc9fe4737a 100644
--- a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c
+++ b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c
@@ -286,7 +286,6 @@ static int mdp5_plane_atomic_check_with_state(struct drm_crtc_state *crtc_state,
uint32_t max_width, max_height;
bool out_of_bounds = false;
uint32_t caps = 0;
- struct drm_rect clip = {};
int min_scale, max_scale;
int ret;
@@ -323,11 +322,7 @@ static int mdp5_plane_atomic_check_with_state(struct drm_crtc_state *crtc_state,
min_scale = FRAC_16_16(1, 8);
max_scale = FRAC_16_16(8, 1);
- if (crtc_state->enable)
- drm_mode_get_hv_timing(&crtc_state->mode,
- &clip.x2, &clip.y2);
-
- ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
+ ret = drm_atomic_helper_check_plane_state(state, crtc_state,
min_scale, max_scale,
true, true);
if (ret)
@@ -471,7 +466,6 @@ static int mdp5_plane_atomic_async_check(struct drm_plane *plane,
{
struct mdp5_plane_state *mdp5_state = to_mdp5_plane_state(state);
struct drm_crtc_state *crtc_state;
- struct drm_rect clip = {};
int min_scale, max_scale;
int ret;
@@ -502,11 +496,7 @@ static int mdp5_plane_atomic_async_check(struct drm_plane *plane,
min_scale = FRAC_16_16(1, 8);
max_scale = FRAC_16_16(8, 1);
- if (crtc_state->enable)
- drm_mode_get_hv_timing(&crtc_state->mode,
- &clip.x2, &clip.y2);
-
- ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
+ ret = drm_atomic_helper_check_plane_state(state, crtc_state,
min_scale, max_scale,
true, true);
if (ret)
diff --git a/drivers/gpu/drm/nouveau/nv50_display.c b/drivers/gpu/drm/nouveau/nv50_display.c
index 5a9a51c735f0..eea94c098237 100644
--- a/drivers/gpu/drm/nouveau/nv50_display.c
+++ b/drivers/gpu/drm/nouveau/nv50_display.c
@@ -1135,15 +1135,9 @@ static int
nv50_curs_acquire(struct nv50_wndw *wndw, struct nv50_wndw_atom *asyw,
struct nv50_head_atom *asyh)
{
- struct drm_rect clip = {};
int ret;
- if (asyh->state.enable)
- drm_mode_get_hv_timing(&asyh->state.mode,
- &clip.x2, &clip.y2);
-
ret = drm_atomic_helper_check_plane_state(&asyw->state, &asyh->state,
- &clip,
DRM_PLANE_HELPER_NO_SCALING,
DRM_PLANE_HELPER_NO_SCALING,
true, true);
@@ -1427,18 +1421,12 @@ nv50_base_acquire(struct nv50_wndw *wndw, struct nv50_wndw_atom *asyw,
struct nv50_head_atom *asyh)
{
const struct drm_framebuffer *fb = asyw->state.fb;
- struct drm_rect clip = {};
int ret;
if (!fb->format->depth)
return -EINVAL;
- if (asyh->state.enable)
- drm_mode_get_hv_timing(&asyh->state.mode,
- &clip.x2, &clip.y2);
-
ret = drm_atomic_helper_check_plane_state(&asyw->state, &asyh->state,
- &clip,
DRM_PLANE_HELPER_NO_SCALING,
DRM_PLANE_HELPER_NO_SCALING,
false, true);
diff --git a/drivers/gpu/drm/rcar-du/rcar_du_plane.c b/drivers/gpu/drm/rcar-du/rcar_du_plane.c
index 5687a94d4cb1..68556bd9dad2 100644
--- a/drivers/gpu/drm/rcar-du/rcar_du_plane.c
+++ b/drivers/gpu/drm/rcar-du/rcar_du_plane.c
@@ -572,7 +572,6 @@ int __rcar_du_plane_atomic_check(struct drm_plane *plane,
{
struct drm_device *dev = plane->dev;
struct drm_crtc_state *crtc_state;
- struct drm_rect clip = {};
int ret;
if (!state->crtc) {
@@ -589,11 +588,7 @@ int __rcar_du_plane_atomic_check(struct drm_plane *plane,
if (IS_ERR(crtc_state))
return PTR_ERR(crtc_state);
- if (crtc_state->enable)
- drm_mode_get_hv_timing(&crtc_state->mode,
- &clip.x2, &clip.y2);
-
- ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
+ ret = drm_atomic_helper_check_plane_state(state, crtc_state,
DRM_PLANE_HELPER_NO_SCALING,
DRM_PLANE_HELPER_NO_SCALING,
true, true);
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
index cd2c72389629..b95e9d45a435 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
@@ -641,7 +641,6 @@ static int vop_plane_atomic_check(struct drm_plane *plane,
struct vop_win *vop_win = to_vop_win(plane);
const struct vop_win_data *win = vop_win->data;
int ret;
- struct drm_rect clip = {};
int min_scale = win->phy->scl ? FRAC_16_16(1, 8) :
DRM_PLANE_HELPER_NO_SCALING;
int max_scale = win->phy->scl ? FRAC_16_16(8, 1) :
@@ -654,11 +653,7 @@ static int vop_plane_atomic_check(struct drm_plane *plane,
if (WARN_ON(!crtc_state))
return -EINVAL;
- if (crtc_state->enable)
- drm_mode_get_hv_timing(&crtc_state->mode,
- &clip.x2, &clip.y2);
-
- ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
+ ret = drm_atomic_helper_check_plane_state(state, crtc_state,
min_scale, max_scale,
true, true);
if (ret)
diff --git a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c
index 2f0ccd50b54d..9a540330cb79 100644
--- a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c
+++ b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c
@@ -211,7 +211,6 @@ static int sun8i_ui_layer_atomic_check(struct drm_plane *plane,
struct drm_crtc *crtc = state->crtc;
struct drm_crtc_state *crtc_state;
int min_scale, max_scale;
- struct drm_rect clip = {};
if (!crtc)
return 0;
@@ -220,10 +219,6 @@ static int sun8i_ui_layer_atomic_check(struct drm_plane *plane,
if (WARN_ON(!crtc_state))
return -EINVAL;
- if (crtc_state->enable)
- drm_mode_get_hv_timing(&crtc_state->mode,
- &clip.x2, &clip.y2);
-
min_scale = DRM_PLANE_HELPER_NO_SCALING;
max_scale = DRM_PLANE_HELPER_NO_SCALING;
@@ -232,7 +227,7 @@ static int sun8i_ui_layer_atomic_check(struct drm_plane *plane,
max_scale = SUN8I_UI_SCALER_SCALE_MAX;
}
- return drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
+ return drm_atomic_helper_check_plane_state(state, crtc_state,
min_scale, max_scale,
true, true);
}
diff --git a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c
index eb3bf2d7291a..5877f8ef5895 100644
--- a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c
+++ b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c
@@ -239,7 +239,6 @@ static int sun8i_vi_layer_atomic_check(struct drm_plane *plane,
struct drm_crtc *crtc = state->crtc;
struct drm_crtc_state *crtc_state;
int min_scale, max_scale;
- struct drm_rect clip = {};
if (!crtc)
return 0;
@@ -248,10 +247,6 @@ static int sun8i_vi_layer_atomic_check(struct drm_plane *plane,
if (WARN_ON(!crtc_state))
return -EINVAL;
- if (crtc_state->enable)
- drm_mode_get_hv_timing(&crtc_state->mode,
- &clip.x2, &clip.y2);
-
min_scale = DRM_PLANE_HELPER_NO_SCALING;
max_scale = DRM_PLANE_HELPER_NO_SCALING;
@@ -260,7 +255,7 @@ static int sun8i_vi_layer_atomic_check(struct drm_plane *plane,
max_scale = SUN8I_VI_SCALER_SCALE_MAX;
}
- return drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
+ return drm_atomic_helper_check_plane_state(state, crtc_state,
min_scale, max_scale,
true, true);
}
diff --git a/drivers/gpu/drm/tegra/plane.c b/drivers/gpu/drm/tegra/plane.c
index 7267a01e6f08..a056fbf83b53 100644
--- a/drivers/gpu/drm/tegra/plane.c
+++ b/drivers/gpu/drm/tegra/plane.c
@@ -82,7 +82,6 @@ int tegra_plane_state_add(struct tegra_plane *plane,
{
struct drm_crtc_state *crtc_state;
struct tegra_dc_state *tegra;
- struct drm_rect clip = {};
int err;
/* Propagate errors from allocation or locking failures. */
@@ -90,12 +89,8 @@ int tegra_plane_state_add(struct tegra_plane *plane,
if (IS_ERR(crtc_state))
return PTR_ERR(crtc_state);
- if (crtc_state->enable)
- drm_mode_get_hv_timing(&crtc_state->mode,
- &clip.x2, &clip.y2);
-
/* Check plane state for visibility and calculate clipping bounds */
- err = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
+ err = drm_atomic_helper_check_plane_state(state, crtc_state,
0, INT_MAX, true, true);
if (err < 0)
return err;
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
index 1107d6d03506..34ecc27fc30a 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
@@ -443,17 +443,12 @@ int vmw_du_primary_plane_atomic_check(struct drm_plane *plane,
{
struct drm_crtc_state *crtc_state = NULL;
struct drm_framebuffer *new_fb = state->fb;
- struct drm_rect clip = {};
int ret;
if (state->crtc)
crtc_state = drm_atomic_get_new_crtc_state(state->state, state->crtc);
- if (crtc_state && crtc_state->enable)
- drm_mode_get_hv_timing(&crtc_state->mode,
- &clip.x2, &clip.y2);
-
- ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
+ ret = drm_atomic_helper_check_plane_state(state, crtc_state,
DRM_PLANE_HELPER_NO_SCALING,
DRM_PLANE_HELPER_NO_SCALING,
false, true);
diff --git a/drivers/gpu/drm/zte/zx_plane.c b/drivers/gpu/drm/zte/zx_plane.c
index 8e1f34274e24..94545adac50d 100644
--- a/drivers/gpu/drm/zte/zx_plane.c
+++ b/drivers/gpu/drm/zte/zx_plane.c
@@ -55,7 +55,6 @@ static int zx_vl_plane_atomic_check(struct drm_plane *plane,
struct drm_framebuffer *fb = plane_state->fb;
struct drm_crtc *crtc = plane_state->crtc;
struct drm_crtc_state *crtc_state;
- struct drm_rect clip = {};
int min_scale = FRAC_16_16(1, 8);
int max_scale = FRAC_16_16(8, 1);
@@ -75,12 +74,8 @@ static int zx_vl_plane_atomic_check(struct drm_plane *plane,
if (!plane_state->crtc)
return -EINVAL;
- if (crtc_state->enable)
- drm_mode_get_hv_timing(&crtc_state->mode,
- &clip.x2, &clip.y2);
-
return drm_atomic_helper_check_plane_state(plane_state, crtc_state,
- &clip, min_scale, max_scale,
+ min_scale, max_scale,
true, true);
}
@@ -291,7 +286,6 @@ static int zx_gl_plane_atomic_check(struct drm_plane *plane,
struct drm_framebuffer *fb = plane_state->fb;
struct drm_crtc *crtc = plane_state->crtc;
struct drm_crtc_state *crtc_state;
- struct drm_rect clip = {};
if (!crtc || !fb)
return 0;
@@ -309,12 +303,7 @@ static int zx_gl_plane_atomic_check(struct drm_plane *plane,
if (!plane_state->crtc)
return -EINVAL;
- if (crtc_state->enable)
- drm_mode_get_hv_timing(&crtc_state->mode,
- &clip.x2, &clip.y2);
-
return drm_atomic_helper_check_plane_state(plane_state, crtc_state,
- &clip,
DRM_PLANE_HELPER_NO_SCALING,
DRM_PLANE_HELPER_NO_SCALING,
false, true);
diff --git a/include/drm/drm_atomic_helper.h b/include/drm/drm_atomic_helper.h
index 4842ee9485ce..26aaba58d6ce 100644
--- a/include/drm/drm_atomic_helper.h
+++ b/include/drm/drm_atomic_helper.h
@@ -40,7 +40,6 @@ int drm_atomic_helper_check_modeset(struct drm_device *dev,
struct drm_atomic_state *state);
int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
const struct drm_crtc_state *crtc_state,
- const struct drm_rect *clip,
int min_scale,
int max_scale,
bool can_position,
diff --git a/include/drm/drm_plane_helper.h b/include/drm/drm_plane_helper.h
index 8aa49c0ecd4d..28d7ce620729 100644
--- a/include/drm/drm_plane_helper.h
+++ b/include/drm/drm_plane_helper.h
@@ -43,7 +43,6 @@ int drm_plane_helper_check_update(struct drm_plane *plane,
struct drm_framebuffer *fb,
struct drm_rect *src,
struct drm_rect *dest,
- const struct drm_rect *clip,
unsigned int rotation,
int min_scale,
int max_scale,
--
2.13.6
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [PATCH 5/5] drm: Don't pass clip to drm_atomic_helper_check_plane_state()
@ 2018-01-23 17:08 ` Ville Syrjala
0 siblings, 0 replies; 34+ messages in thread
From: Ville Syrjala @ 2018-01-23 17:08 UTC (permalink / raw)
To: dri-devel
Cc: Liviu Dudau, Brian Starkey, Mali DP Maintainers, Daniel Vetter,
Gustavo Padovan, Sean Paul, Philipp Zabel, CK Hu, Neil Armstrong,
Rob Clark, Ben Skeggs, Laurent Pinchart, Sandy Huang,
Heiko Stübner, Maxime Ripard, Thierry Reding,
VMware Graphics, Sinclair Yeh, Thomas Hellstrom, Shawn Guo,
Archit Taneja, linux-amlogic, linux-arm-msm, freedreno, nouveau,
linux-renesas-soc, linux-tegra, Russell King
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
Move the plane clip rectangle handling into
drm_atomic_helper_check_plane_state(). Drivers no longer
have to worry about such mundane details.
v2: Convert armada, rcar, and sun4i as well
Cc: Liviu Dudau <liviu.dudau@arm.com>
Cc: Brian Starkey <brian.starkey@arm.com>
Cc: Mali DP Maintainers <malidp@foss.arm.com>
Cc: Daniel Vetter <daniel.vetter@intel.com>
Cc: Gustavo Padovan <gustavo@padovan.org>
Cc: Sean Paul <seanpaul@chromium.org>
Cc: Philipp Zabel <p.zabel@pengutronix.de>
Cc: CK Hu <ck.hu@mediatek.com>
Cc: Neil Armstrong <narmstrong@baylibre.com>
Cc: Rob Clark <robdclark@gmail.com>
Cc: Ben Skeggs <bskeggs@redhat.com>
Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Cc: Sandy Huang <hjc@rock-chips.com>
Cc: "Heiko Stübner" <heiko@sntech.de>
Cc: Maxime Ripard <maxime.ripard@free-electrons.com>
Cc: Thierry Reding <thierry.reding@gmail.com>
Cc: VMware Graphics <linux-graphics-maintainer@vmware.com>
Cc: Sinclair Yeh <syeh@vmware.com>
Cc: Thomas Hellstrom <thellstrom@vmware.com>
Cc: Shawn Guo <shawnguo@kernel.org>
Cc: Archit Taneja <architt@codeaurora.org>
Cc: linux-amlogic@lists.infradead.org
Cc: linux-arm-msm@vger.kernel.org
Cc: freedreno@lists.freedesktop.org
Cc: nouveau@lists.freedesktop.org
Cc: linux-renesas-soc@vger.kernel.org
Cc: linux-tegra@vger.kernel.org
Cc: Russell King <rmk+kernel@armlinux.org.uk>
Suggested-by: Daniel Vetter <daniel@ffwll.ch>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Reviewed-by: Thierry Reding <treding@nvidia.com>
Reviewed-by: Archit Taneja <architt@codeaurora.org> #msm
---
drivers/gpu/drm/arm/hdlcd_crtc.c | 7 +------
drivers/gpu/drm/arm/malidp_planes.c | 7 +------
drivers/gpu/drm/armada/armada_crtc.c | 8 ++------
drivers/gpu/drm/armada/armada_overlay.c | 8 ++------
drivers/gpu/drm/drm_atomic_helper.c | 12 +++++++-----
drivers/gpu/drm/drm_plane_helper.c | 11 +++--------
drivers/gpu/drm/drm_simple_kms_helper.c | 6 ------
drivers/gpu/drm/i915/intel_display.c | 12 ------------
drivers/gpu/drm/imx/ipuv3-plane.c | 7 +------
drivers/gpu/drm/mediatek/mtk_drm_plane.c | 7 +------
drivers/gpu/drm/meson/meson_plane.c | 7 +------
drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c | 14 ++------------
drivers/gpu/drm/nouveau/nv50_display.c | 12 ------------
drivers/gpu/drm/rcar-du/rcar_du_plane.c | 7 +------
drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 7 +------
drivers/gpu/drm/sun4i/sun8i_ui_layer.c | 7 +------
drivers/gpu/drm/sun4i/sun8i_vi_layer.c | 7 +------
drivers/gpu/drm/tegra/plane.c | 7 +------
drivers/gpu/drm/vmwgfx/vmwgfx_kms.c | 7 +------
drivers/gpu/drm/zte/zx_plane.c | 13 +------------
include/drm/drm_atomic_helper.h | 1 -
include/drm/drm_plane_helper.h | 1 -
22 files changed, 28 insertions(+), 147 deletions(-)
diff --git a/drivers/gpu/drm/arm/hdlcd_crtc.c b/drivers/gpu/drm/arm/hdlcd_crtc.c
index 877647ef35a9..cf5cbd63ecdf 100644
--- a/drivers/gpu/drm/arm/hdlcd_crtc.c
+++ b/drivers/gpu/drm/arm/hdlcd_crtc.c
@@ -229,7 +229,6 @@ static const struct drm_crtc_helper_funcs hdlcd_crtc_helper_funcs = {
static int hdlcd_plane_atomic_check(struct drm_plane *plane,
struct drm_plane_state *state)
{
- struct drm_rect clip = { 0 };
struct drm_crtc_state *crtc_state;
u32 src_h = state->src_h >> 16;
@@ -249,11 +248,7 @@ static int hdlcd_plane_atomic_check(struct drm_plane *plane,
return -EINVAL;
}
- if (crtc_state->enable)
- drm_mode_get_hv_timing(&crtc_state->mode,
- &clip.x2, &clip.y2);
-
- return drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
+ return drm_atomic_helper_check_plane_state(state, crtc_state,
DRM_PLANE_HELPER_NO_SCALING,
DRM_PLANE_HELPER_NO_SCALING,
false, true);
diff --git a/drivers/gpu/drm/arm/malidp_planes.c b/drivers/gpu/drm/arm/malidp_planes.c
index 2885d69af456..ee32361c87ac 100644
--- a/drivers/gpu/drm/arm/malidp_planes.c
+++ b/drivers/gpu/drm/arm/malidp_planes.c
@@ -141,18 +141,13 @@ static int malidp_se_check_scaling(struct malidp_plane *mp,
struct drm_crtc_state *crtc_state =
drm_atomic_get_existing_crtc_state(state->state, state->crtc);
struct malidp_crtc_state *mc;
- struct drm_rect clip = { 0 };
u32 src_w, src_h;
int ret;
if (!crtc_state)
return -EINVAL;
- if (crtc_state->enable)
- drm_mode_get_hv_timing(&crtc_state->mode,
- &clip.x2, &clip.y2);
-
- ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
+ ret = drm_atomic_helper_check_plane_state(state, crtc_state,
0, INT_MAX, true, true);
if (ret)
return ret;
diff --git a/drivers/gpu/drm/armada/armada_crtc.c b/drivers/gpu/drm/armada/armada_crtc.c
index fdc34ad4ca62..03eeee11dd5b 100644
--- a/drivers/gpu/drm/armada/armada_crtc.c
+++ b/drivers/gpu/drm/armada/armada_crtc.c
@@ -1203,15 +1203,11 @@ static int armada_drm_primary_update(struct drm_plane *plane,
struct drm_crtc_state crtc_state = {
.crtc = crtc,
.enable = crtc->enabled,
+ .mode = crtc->mode,
};
- struct drm_rect clip = {};
int ret;
- if (crtc->enabled)
- drm_mode_get_hv_timing(&crtc->mode,
- &clip.x2, &clip.y2);
-
- ret = drm_atomic_helper_check_plane_state(&state, &crtc_state, &clip, 0,
+ ret = drm_atomic_helper_check_plane_state(&state, &crtc_state, 0,
INT_MAX, true, false);
if (ret)
return ret;
diff --git a/drivers/gpu/drm/armada/armada_overlay.c b/drivers/gpu/drm/armada/armada_overlay.c
index 4f2a7a6e0fd3..c391955009d6 100644
--- a/drivers/gpu/drm/armada/armada_overlay.c
+++ b/drivers/gpu/drm/armada/armada_overlay.c
@@ -208,19 +208,15 @@ armada_ovl_plane_update(struct drm_plane *plane, struct drm_crtc *crtc,
struct drm_crtc_state crtc_state = {
.crtc = crtc,
.enable = crtc->enabled,
+ .mode = crtc->mode,
};
- struct drm_rect clip = {};
int ret;
trace_armada_ovl_plane_update(plane, crtc, fb,
crtc_x, crtc_y, crtc_w, crtc_h,
src_x, src_y, src_w, src_h);
- if (crtc->enabled)
- drm_mode_get_hv_timing(&crtc->mode,
- &clip.x2, &clip.y2);
-
- ret = drm_atomic_helper_check_plane_state(&state, &crtc_state, &clip, 0,
+ ret = drm_atomic_helper_check_plane_state(&state, &crtc_state, 0,
INT_MAX, true, false);
if (ret)
return ret;
diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
index ab4032167094..9fb96f9cc36e 100644
--- a/drivers/gpu/drm/drm_atomic_helper.c
+++ b/drivers/gpu/drm/drm_atomic_helper.c
@@ -699,7 +699,6 @@ EXPORT_SYMBOL(drm_atomic_helper_check_modeset);
* drm_atomic_helper_check_plane_state() - Check plane state for validity
* @plane_state: plane state to check
* @crtc_state: crtc state to check
- * @clip: integer clipping coordinates
* @min_scale: minimum @src:@dest scaling factor in 16.16 fixed point
* @max_scale: maximum @src:@dest scaling factor in 16.16 fixed point
* @can_position: is it legal to position the plane such that it
@@ -719,7 +718,6 @@ EXPORT_SYMBOL(drm_atomic_helper_check_modeset);
*/
int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
const struct drm_crtc_state *crtc_state,
- const struct drm_rect *clip,
int min_scale,
int max_scale,
bool can_position,
@@ -729,6 +727,7 @@ int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
struct drm_rect *src = &plane_state->src;
struct drm_rect *dst = &plane_state->dst;
unsigned int rotation = plane_state->rotation;
+ struct drm_rect clip = {};
int hscale, vscale;
WARN_ON(plane_state->crtc && plane_state->crtc != crtc_state->crtc);
@@ -764,7 +763,10 @@ int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
return -ERANGE;
}
- plane_state->visible = drm_rect_clip_scaled(src, dst, clip, hscale, vscale);
+ if (crtc_state->enable)
+ drm_mode_get_hv_timing(&crtc_state->mode, &clip.x2, &clip.y2);
+
+ plane_state->visible = drm_rect_clip_scaled(src, dst, &clip, hscale, vscale);
drm_rect_rotate_inv(src, fb->width << 16, fb->height << 16, rotation);
@@ -778,10 +780,10 @@ int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
*/
return 0;
- if (!can_position && !drm_rect_equals(dst, clip)) {
+ if (!can_position && !drm_rect_equals(dst, &clip)) {
DRM_DEBUG_KMS("Plane must cover entire CRTC\n");
drm_rect_debug_print("dst: ", dst, false);
- drm_rect_debug_print("clip: ", clip, false);
+ drm_rect_debug_print("clip: ", &clip, false);
return -EINVAL;
}
diff --git a/drivers/gpu/drm/drm_plane_helper.c b/drivers/gpu/drm/drm_plane_helper.c
index f1be8cd4e387..f88f68161519 100644
--- a/drivers/gpu/drm/drm_plane_helper.c
+++ b/drivers/gpu/drm/drm_plane_helper.c
@@ -106,7 +106,6 @@ static int get_connectors_for_crtc(struct drm_crtc *crtc,
* @fb: framebuffer to flip onto plane
* @src: source coordinates in 16.16 fixed point
* @dst: integer destination coordinates
- * @clip: integer clipping coordinates
* @rotation: plane rotation
* @min_scale: minimum @src:@dest scaling factor in 16.16 fixed point
* @max_scale: maximum @src:@dest scaling factor in 16.16 fixed point
@@ -131,7 +130,6 @@ int drm_plane_helper_check_update(struct drm_plane *plane,
struct drm_framebuffer *fb,
struct drm_rect *src,
struct drm_rect *dst,
- const struct drm_rect *clip,
unsigned int rotation,
int min_scale,
int max_scale,
@@ -157,11 +155,12 @@ int drm_plane_helper_check_update(struct drm_plane *plane,
struct drm_crtc_state crtc_state = {
.crtc = crtc,
.enable = crtc->enabled,
+ .mode = crtc->mode,
};
int ret;
ret = drm_atomic_helper_check_plane_state(&plane_state, &crtc_state,
- clip, min_scale, max_scale,
+ min_scale, max_scale,
can_position,
can_update_disabled);
if (ret)
@@ -239,16 +238,12 @@ int drm_primary_helper_update(struct drm_plane *plane, struct drm_crtc *crtc,
.x2 = crtc_x + crtc_w,
.y2 = crtc_y + crtc_h,
};
- const struct drm_rect clip = {
- .x2 = crtc->mode.hdisplay,
- .y2 = crtc->mode.vdisplay,
- };
struct drm_connector **connector_list;
int num_connectors, ret;
bool visible;
ret = drm_plane_helper_check_update(plane, crtc, fb,
- &src, &dest, &clip,
+ &src, &dest,
DRM_MODE_ROTATE_0,
DRM_PLANE_HELPER_NO_SCALING,
DRM_PLANE_HELPER_NO_SCALING,
diff --git a/drivers/gpu/drm/drm_simple_kms_helper.c b/drivers/gpu/drm/drm_simple_kms_helper.c
index 9d3f6b70812c..165bc756af96 100644
--- a/drivers/gpu/drm/drm_simple_kms_helper.c
+++ b/drivers/gpu/drm/drm_simple_kms_helper.c
@@ -89,7 +89,6 @@ static const struct drm_crtc_funcs drm_simple_kms_crtc_funcs = {
static int drm_simple_kms_plane_atomic_check(struct drm_plane *plane,
struct drm_plane_state *plane_state)
{
- struct drm_rect clip = { 0 };
struct drm_simple_display_pipe *pipe;
struct drm_crtc_state *crtc_state;
int ret;
@@ -100,12 +99,7 @@ static int drm_simple_kms_plane_atomic_check(struct drm_plane *plane,
if (!crtc_state->enable)
return 0; /* nothing to check when disabling or disabled */
- if (crtc_state->enable)
- drm_mode_get_hv_timing(&crtc_state->mode,
- &clip.x2, &clip.y2);
-
ret = drm_atomic_helper_check_plane_state(plane_state, crtc_state,
- &clip,
DRM_PLANE_HELPER_NO_SCALING,
DRM_PLANE_HELPER_NO_SCALING,
false, true);
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index d585ce4c8732..3933420c6911 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -9309,18 +9309,12 @@ static int intel_check_cursor(struct intel_crtc_state *crtc_state,
struct intel_plane_state *plane_state)
{
const struct drm_framebuffer *fb = plane_state->base.fb;
- struct drm_rect clip = {};
int src_x, src_y;
u32 offset;
int ret;
- if (crtc_state->base.enable)
- drm_mode_get_hv_timing(&crtc_state->base.mode,
- &clip.x2, &clip.y2);
-
ret = drm_atomic_helper_check_plane_state(&plane_state->base,
&crtc_state->base,
- &clip,
DRM_PLANE_HELPER_NO_SCALING,
DRM_PLANE_HELPER_NO_SCALING,
true, true);
@@ -12755,7 +12749,6 @@ intel_check_primary_plane(struct intel_plane *plane,
int min_scale = DRM_PLANE_HELPER_NO_SCALING;
int max_scale = DRM_PLANE_HELPER_NO_SCALING;
bool can_position = false;
- struct drm_rect clip = {};
int ret;
if (INTEL_GEN(dev_priv) >= 9) {
@@ -12767,13 +12760,8 @@ intel_check_primary_plane(struct intel_plane *plane,
can_position = true;
}
- if (crtc_state->base.enable)
- drm_mode_get_hv_timing(&crtc_state->base.mode,
- &clip.x2, &clip.y2);
-
ret = drm_atomic_helper_check_plane_state(&state->base,
&crtc_state->base,
- &clip,
min_scale, max_scale,
can_position, true);
if (ret)
diff --git a/drivers/gpu/drm/imx/ipuv3-plane.c b/drivers/gpu/drm/imx/ipuv3-plane.c
index 150628293c51..d7e3583e608e 100644
--- a/drivers/gpu/drm/imx/ipuv3-plane.c
+++ b/drivers/gpu/drm/imx/ipuv3-plane.c
@@ -351,7 +351,6 @@ static int ipu_plane_atomic_check(struct drm_plane *plane,
struct drm_framebuffer *old_fb = old_state->fb;
unsigned long eba, ubo, vbo, old_ubo, old_vbo, alpha_eba;
bool can_position = (plane->type == DRM_PLANE_TYPE_OVERLAY);
- struct drm_rect clip = {};
int hsub, vsub;
int ret;
@@ -367,11 +366,7 @@ static int ipu_plane_atomic_check(struct drm_plane *plane,
if (WARN_ON(!crtc_state))
return -EINVAL;
- if (crtc_state->enable)
- drm_mode_get_hv_timing(&crtc_state->mode,
- &clip.x2, &clip.y2);
-
- ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
+ ret = drm_atomic_helper_check_plane_state(state, crtc_state,
DRM_PLANE_HELPER_NO_SCALING,
DRM_PLANE_HELPER_NO_SCALING,
can_position, true);
diff --git a/drivers/gpu/drm/mediatek/mtk_drm_plane.c b/drivers/gpu/drm/mediatek/mtk_drm_plane.c
index b5c6eec9a584..2f4b0ffee598 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_plane.c
+++ b/drivers/gpu/drm/mediatek/mtk_drm_plane.c
@@ -91,7 +91,6 @@ static int mtk_plane_atomic_check(struct drm_plane *plane,
{
struct drm_framebuffer *fb = state->fb;
struct drm_crtc_state *crtc_state;
- struct drm_rect clip = { 0, };
if (!fb)
return 0;
@@ -108,11 +107,7 @@ static int mtk_plane_atomic_check(struct drm_plane *plane,
if (IS_ERR(crtc_state))
return PTR_ERR(crtc_state);
- if (crtc_state->enable)
- drm_mode_get_hv_timing(&crtc_state->mode,
- &clip.x2, &clip.y2);
-
- return drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
+ return drm_atomic_helper_check_plane_state(state, crtc_state,
DRM_PLANE_HELPER_NO_SCALING,
DRM_PLANE_HELPER_NO_SCALING,
true, true);
diff --git a/drivers/gpu/drm/meson/meson_plane.c b/drivers/gpu/drm/meson/meson_plane.c
index 3801bee1f9e6..c78a3a59f58c 100644
--- a/drivers/gpu/drm/meson/meson_plane.c
+++ b/drivers/gpu/drm/meson/meson_plane.c
@@ -49,7 +49,6 @@ static int meson_plane_atomic_check(struct drm_plane *plane,
struct drm_plane_state *state)
{
struct drm_crtc_state *crtc_state;
- struct drm_rect clip = { 0, };
if (!state->crtc)
return 0;
@@ -58,11 +57,7 @@ static int meson_plane_atomic_check(struct drm_plane *plane,
if (IS_ERR(crtc_state))
return PTR_ERR(crtc_state);
- if (crtc_state->enable)
- drm_mode_get_hv_timing(&crtc_state->mode,
- &clip.x2, &clip.y2);
-
- return drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
+ return drm_atomic_helper_check_plane_state(state, crtc_state,
DRM_PLANE_HELPER_NO_SCALING,
DRM_PLANE_HELPER_NO_SCALING,
true, true);
diff --git a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c
index 98d4d7331767..44fc9fe4737a 100644
--- a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c
+++ b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c
@@ -286,7 +286,6 @@ static int mdp5_plane_atomic_check_with_state(struct drm_crtc_state *crtc_state,
uint32_t max_width, max_height;
bool out_of_bounds = false;
uint32_t caps = 0;
- struct drm_rect clip = {};
int min_scale, max_scale;
int ret;
@@ -323,11 +322,7 @@ static int mdp5_plane_atomic_check_with_state(struct drm_crtc_state *crtc_state,
min_scale = FRAC_16_16(1, 8);
max_scale = FRAC_16_16(8, 1);
- if (crtc_state->enable)
- drm_mode_get_hv_timing(&crtc_state->mode,
- &clip.x2, &clip.y2);
-
- ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
+ ret = drm_atomic_helper_check_plane_state(state, crtc_state,
min_scale, max_scale,
true, true);
if (ret)
@@ -471,7 +466,6 @@ static int mdp5_plane_atomic_async_check(struct drm_plane *plane,
{
struct mdp5_plane_state *mdp5_state = to_mdp5_plane_state(state);
struct drm_crtc_state *crtc_state;
- struct drm_rect clip = {};
int min_scale, max_scale;
int ret;
@@ -502,11 +496,7 @@ static int mdp5_plane_atomic_async_check(struct drm_plane *plane,
min_scale = FRAC_16_16(1, 8);
max_scale = FRAC_16_16(8, 1);
- if (crtc_state->enable)
- drm_mode_get_hv_timing(&crtc_state->mode,
- &clip.x2, &clip.y2);
-
- ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
+ ret = drm_atomic_helper_check_plane_state(state, crtc_state,
min_scale, max_scale,
true, true);
if (ret)
diff --git a/drivers/gpu/drm/nouveau/nv50_display.c b/drivers/gpu/drm/nouveau/nv50_display.c
index 5a9a51c735f0..eea94c098237 100644
--- a/drivers/gpu/drm/nouveau/nv50_display.c
+++ b/drivers/gpu/drm/nouveau/nv50_display.c
@@ -1135,15 +1135,9 @@ static int
nv50_curs_acquire(struct nv50_wndw *wndw, struct nv50_wndw_atom *asyw,
struct nv50_head_atom *asyh)
{
- struct drm_rect clip = {};
int ret;
- if (asyh->state.enable)
- drm_mode_get_hv_timing(&asyh->state.mode,
- &clip.x2, &clip.y2);
-
ret = drm_atomic_helper_check_plane_state(&asyw->state, &asyh->state,
- &clip,
DRM_PLANE_HELPER_NO_SCALING,
DRM_PLANE_HELPER_NO_SCALING,
true, true);
@@ -1427,18 +1421,12 @@ nv50_base_acquire(struct nv50_wndw *wndw, struct nv50_wndw_atom *asyw,
struct nv50_head_atom *asyh)
{
const struct drm_framebuffer *fb = asyw->state.fb;
- struct drm_rect clip = {};
int ret;
if (!fb->format->depth)
return -EINVAL;
- if (asyh->state.enable)
- drm_mode_get_hv_timing(&asyh->state.mode,
- &clip.x2, &clip.y2);
-
ret = drm_atomic_helper_check_plane_state(&asyw->state, &asyh->state,
- &clip,
DRM_PLANE_HELPER_NO_SCALING,
DRM_PLANE_HELPER_NO_SCALING,
false, true);
diff --git a/drivers/gpu/drm/rcar-du/rcar_du_plane.c b/drivers/gpu/drm/rcar-du/rcar_du_plane.c
index 5687a94d4cb1..68556bd9dad2 100644
--- a/drivers/gpu/drm/rcar-du/rcar_du_plane.c
+++ b/drivers/gpu/drm/rcar-du/rcar_du_plane.c
@@ -572,7 +572,6 @@ int __rcar_du_plane_atomic_check(struct drm_plane *plane,
{
struct drm_device *dev = plane->dev;
struct drm_crtc_state *crtc_state;
- struct drm_rect clip = {};
int ret;
if (!state->crtc) {
@@ -589,11 +588,7 @@ int __rcar_du_plane_atomic_check(struct drm_plane *plane,
if (IS_ERR(crtc_state))
return PTR_ERR(crtc_state);
- if (crtc_state->enable)
- drm_mode_get_hv_timing(&crtc_state->mode,
- &clip.x2, &clip.y2);
-
- ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
+ ret = drm_atomic_helper_check_plane_state(state, crtc_state,
DRM_PLANE_HELPER_NO_SCALING,
DRM_PLANE_HELPER_NO_SCALING,
true, true);
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
index cd2c72389629..b95e9d45a435 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
@@ -641,7 +641,6 @@ static int vop_plane_atomic_check(struct drm_plane *plane,
struct vop_win *vop_win = to_vop_win(plane);
const struct vop_win_data *win = vop_win->data;
int ret;
- struct drm_rect clip = {};
int min_scale = win->phy->scl ? FRAC_16_16(1, 8) :
DRM_PLANE_HELPER_NO_SCALING;
int max_scale = win->phy->scl ? FRAC_16_16(8, 1) :
@@ -654,11 +653,7 @@ static int vop_plane_atomic_check(struct drm_plane *plane,
if (WARN_ON(!crtc_state))
return -EINVAL;
- if (crtc_state->enable)
- drm_mode_get_hv_timing(&crtc_state->mode,
- &clip.x2, &clip.y2);
-
- ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
+ ret = drm_atomic_helper_check_plane_state(state, crtc_state,
min_scale, max_scale,
true, true);
if (ret)
diff --git a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c
index 2f0ccd50b54d..9a540330cb79 100644
--- a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c
+++ b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c
@@ -211,7 +211,6 @@ static int sun8i_ui_layer_atomic_check(struct drm_plane *plane,
struct drm_crtc *crtc = state->crtc;
struct drm_crtc_state *crtc_state;
int min_scale, max_scale;
- struct drm_rect clip = {};
if (!crtc)
return 0;
@@ -220,10 +219,6 @@ static int sun8i_ui_layer_atomic_check(struct drm_plane *plane,
if (WARN_ON(!crtc_state))
return -EINVAL;
- if (crtc_state->enable)
- drm_mode_get_hv_timing(&crtc_state->mode,
- &clip.x2, &clip.y2);
-
min_scale = DRM_PLANE_HELPER_NO_SCALING;
max_scale = DRM_PLANE_HELPER_NO_SCALING;
@@ -232,7 +227,7 @@ static int sun8i_ui_layer_atomic_check(struct drm_plane *plane,
max_scale = SUN8I_UI_SCALER_SCALE_MAX;
}
- return drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
+ return drm_atomic_helper_check_plane_state(state, crtc_state,
min_scale, max_scale,
true, true);
}
diff --git a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c
index eb3bf2d7291a..5877f8ef5895 100644
--- a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c
+++ b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c
@@ -239,7 +239,6 @@ static int sun8i_vi_layer_atomic_check(struct drm_plane *plane,
struct drm_crtc *crtc = state->crtc;
struct drm_crtc_state *crtc_state;
int min_scale, max_scale;
- struct drm_rect clip = {};
if (!crtc)
return 0;
@@ -248,10 +247,6 @@ static int sun8i_vi_layer_atomic_check(struct drm_plane *plane,
if (WARN_ON(!crtc_state))
return -EINVAL;
- if (crtc_state->enable)
- drm_mode_get_hv_timing(&crtc_state->mode,
- &clip.x2, &clip.y2);
-
min_scale = DRM_PLANE_HELPER_NO_SCALING;
max_scale = DRM_PLANE_HELPER_NO_SCALING;
@@ -260,7 +255,7 @@ static int sun8i_vi_layer_atomic_check(struct drm_plane *plane,
max_scale = SUN8I_VI_SCALER_SCALE_MAX;
}
- return drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
+ return drm_atomic_helper_check_plane_state(state, crtc_state,
min_scale, max_scale,
true, true);
}
diff --git a/drivers/gpu/drm/tegra/plane.c b/drivers/gpu/drm/tegra/plane.c
index 7267a01e6f08..a056fbf83b53 100644
--- a/drivers/gpu/drm/tegra/plane.c
+++ b/drivers/gpu/drm/tegra/plane.c
@@ -82,7 +82,6 @@ int tegra_plane_state_add(struct tegra_plane *plane,
{
struct drm_crtc_state *crtc_state;
struct tegra_dc_state *tegra;
- struct drm_rect clip = {};
int err;
/* Propagate errors from allocation or locking failures. */
@@ -90,12 +89,8 @@ int tegra_plane_state_add(struct tegra_plane *plane,
if (IS_ERR(crtc_state))
return PTR_ERR(crtc_state);
- if (crtc_state->enable)
- drm_mode_get_hv_timing(&crtc_state->mode,
- &clip.x2, &clip.y2);
-
/* Check plane state for visibility and calculate clipping bounds */
- err = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
+ err = drm_atomic_helper_check_plane_state(state, crtc_state,
0, INT_MAX, true, true);
if (err < 0)
return err;
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
index 1107d6d03506..34ecc27fc30a 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
@@ -443,17 +443,12 @@ int vmw_du_primary_plane_atomic_check(struct drm_plane *plane,
{
struct drm_crtc_state *crtc_state = NULL;
struct drm_framebuffer *new_fb = state->fb;
- struct drm_rect clip = {};
int ret;
if (state->crtc)
crtc_state = drm_atomic_get_new_crtc_state(state->state, state->crtc);
- if (crtc_state && crtc_state->enable)
- drm_mode_get_hv_timing(&crtc_state->mode,
- &clip.x2, &clip.y2);
-
- ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
+ ret = drm_atomic_helper_check_plane_state(state, crtc_state,
DRM_PLANE_HELPER_NO_SCALING,
DRM_PLANE_HELPER_NO_SCALING,
false, true);
diff --git a/drivers/gpu/drm/zte/zx_plane.c b/drivers/gpu/drm/zte/zx_plane.c
index 8e1f34274e24..94545adac50d 100644
--- a/drivers/gpu/drm/zte/zx_plane.c
+++ b/drivers/gpu/drm/zte/zx_plane.c
@@ -55,7 +55,6 @@ static int zx_vl_plane_atomic_check(struct drm_plane *plane,
struct drm_framebuffer *fb = plane_state->fb;
struct drm_crtc *crtc = plane_state->crtc;
struct drm_crtc_state *crtc_state;
- struct drm_rect clip = {};
int min_scale = FRAC_16_16(1, 8);
int max_scale = FRAC_16_16(8, 1);
@@ -75,12 +74,8 @@ static int zx_vl_plane_atomic_check(struct drm_plane *plane,
if (!plane_state->crtc)
return -EINVAL;
- if (crtc_state->enable)
- drm_mode_get_hv_timing(&crtc_state->mode,
- &clip.x2, &clip.y2);
-
return drm_atomic_helper_check_plane_state(plane_state, crtc_state,
- &clip, min_scale, max_scale,
+ min_scale, max_scale,
true, true);
}
@@ -291,7 +286,6 @@ static int zx_gl_plane_atomic_check(struct drm_plane *plane,
struct drm_framebuffer *fb = plane_state->fb;
struct drm_crtc *crtc = plane_state->crtc;
struct drm_crtc_state *crtc_state;
- struct drm_rect clip = {};
if (!crtc || !fb)
return 0;
@@ -309,12 +303,7 @@ static int zx_gl_plane_atomic_check(struct drm_plane *plane,
if (!plane_state->crtc)
return -EINVAL;
- if (crtc_state->enable)
- drm_mode_get_hv_timing(&crtc_state->mode,
- &clip.x2, &clip.y2);
-
return drm_atomic_helper_check_plane_state(plane_state, crtc_state,
- &clip,
DRM_PLANE_HELPER_NO_SCALING,
DRM_PLANE_HELPER_NO_SCALING,
false, true);
diff --git a/include/drm/drm_atomic_helper.h b/include/drm/drm_atomic_helper.h
index 4842ee9485ce..26aaba58d6ce 100644
--- a/include/drm/drm_atomic_helper.h
+++ b/include/drm/drm_atomic_helper.h
@@ -40,7 +40,6 @@ int drm_atomic_helper_check_modeset(struct drm_device *dev,
struct drm_atomic_state *state);
int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
const struct drm_crtc_state *crtc_state,
- const struct drm_rect *clip,
int min_scale,
int max_scale,
bool can_position,
diff --git a/include/drm/drm_plane_helper.h b/include/drm/drm_plane_helper.h
index 8aa49c0ecd4d..28d7ce620729 100644
--- a/include/drm/drm_plane_helper.h
+++ b/include/drm/drm_plane_helper.h
@@ -43,7 +43,6 @@ int drm_plane_helper_check_update(struct drm_plane *plane,
struct drm_framebuffer *fb,
struct drm_rect *src,
struct drm_rect *dest,
- const struct drm_rect *clip,
unsigned int rotation,
int min_scale,
int max_scale,
--
2.13.6
^ permalink raw reply related [flat|nested] 34+ messages in thread
* [PATCH 5/5] drm: Don't pass clip to drm_atomic_helper_check_plane_state()
@ 2018-01-23 17:46 ` Liviu Dudau
0 siblings, 0 replies; 34+ messages in thread
From: Liviu Dudau @ 2018-01-23 17:46 UTC (permalink / raw)
To: linus-amlogic
On Tue, Jan 23, 2018 at 07:08:57PM +0200, Ville Syrjala wrote:
> From: Ville Syrj?l? <ville.syrjala@linux.intel.com>
>
> Move the plane clip rectangle handling into
> drm_atomic_helper_check_plane_state(). Drivers no longer
> have to worry about such mundane details.
>
> v2: Convert armada, rcar, and sun4i as well
>
> Cc: Liviu Dudau <liviu.dudau@arm.com>
> Cc: Brian Starkey <brian.starkey@arm.com>
> Cc: Mali DP Maintainers <malidp@foss.arm.com>
> Cc: Daniel Vetter <daniel.vetter@intel.com>
> Cc: Gustavo Padovan <gustavo@padovan.org>
> Cc: Sean Paul <seanpaul@chromium.org>
> Cc: Philipp Zabel <p.zabel@pengutronix.de>
> Cc: CK Hu <ck.hu@mediatek.com>
> Cc: Neil Armstrong <narmstrong@baylibre.com>
> Cc: Rob Clark <robdclark@gmail.com>
> Cc: Ben Skeggs <bskeggs@redhat.com>
> Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> Cc: Sandy Huang <hjc@rock-chips.com>
> Cc: "Heiko St?bner" <heiko@sntech.de>
> Cc: Maxime Ripard <maxime.ripard@free-electrons.com>
> Cc: Thierry Reding <thierry.reding@gmail.com>
> Cc: VMware Graphics <linux-graphics-maintainer@vmware.com>
> Cc: Sinclair Yeh <syeh@vmware.com>
> Cc: Thomas Hellstrom <thellstrom@vmware.com>
> Cc: Shawn Guo <shawnguo@kernel.org>
> Cc: Archit Taneja <architt@codeaurora.org>
> Cc: linux-amlogic at lists.infradead.org
> Cc: linux-arm-msm at vger.kernel.org
> Cc: freedreno at lists.freedesktop.org
> Cc: nouveau at lists.freedesktop.org
> Cc: linux-renesas-soc at vger.kernel.org
> Cc: linux-tegra at vger.kernel.org
> Cc: Russell King <rmk+kernel@armlinux.org.uk>
> Suggested-by: Daniel Vetter <daniel@ffwll.ch>
> Signed-off-by: Ville Syrj?l? <ville.syrjala@linux.intel.com>
> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> Reviewed-by: Thierry Reding <treding@nvidia.com>
> Reviewed-by: Archit Taneja <architt@codeaurora.org> #msm
> ---
> drivers/gpu/drm/arm/hdlcd_crtc.c | 7 +------
> drivers/gpu/drm/arm/malidp_planes.c | 7 +------
> drivers/gpu/drm/armada/armada_crtc.c | 8 ++------
> drivers/gpu/drm/armada/armada_overlay.c | 8 ++------
> drivers/gpu/drm/drm_atomic_helper.c | 12 +++++++-----
> drivers/gpu/drm/drm_plane_helper.c | 11 +++--------
> drivers/gpu/drm/drm_simple_kms_helper.c | 6 ------
> drivers/gpu/drm/i915/intel_display.c | 12 ------------
> drivers/gpu/drm/imx/ipuv3-plane.c | 7 +------
> drivers/gpu/drm/mediatek/mtk_drm_plane.c | 7 +------
> drivers/gpu/drm/meson/meson_plane.c | 7 +------
> drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c | 14 ++------------
> drivers/gpu/drm/nouveau/nv50_display.c | 12 ------------
> drivers/gpu/drm/rcar-du/rcar_du_plane.c | 7 +------
> drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 7 +------
> drivers/gpu/drm/sun4i/sun8i_ui_layer.c | 7 +------
> drivers/gpu/drm/sun4i/sun8i_vi_layer.c | 7 +------
> drivers/gpu/drm/tegra/plane.c | 7 +------
> drivers/gpu/drm/vmwgfx/vmwgfx_kms.c | 7 +------
> drivers/gpu/drm/zte/zx_plane.c | 13 +------------
> include/drm/drm_atomic_helper.h | 1 -
> include/drm/drm_plane_helper.h | 1 -
> 22 files changed, 28 insertions(+), 147 deletions(-)
>
> diff --git a/drivers/gpu/drm/arm/hdlcd_crtc.c b/drivers/gpu/drm/arm/hdlcd_crtc.c
> index 877647ef35a9..cf5cbd63ecdf 100644
> --- a/drivers/gpu/drm/arm/hdlcd_crtc.c
> +++ b/drivers/gpu/drm/arm/hdlcd_crtc.c
> @@ -229,7 +229,6 @@ static const struct drm_crtc_helper_funcs hdlcd_crtc_helper_funcs = {
> static int hdlcd_plane_atomic_check(struct drm_plane *plane,
> struct drm_plane_state *state)
> {
> - struct drm_rect clip = { 0 };
> struct drm_crtc_state *crtc_state;
> u32 src_h = state->src_h >> 16;
>
> @@ -249,11 +248,7 @@ static int hdlcd_plane_atomic_check(struct drm_plane *plane,
> return -EINVAL;
> }
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - return drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + return drm_atomic_helper_check_plane_state(state, crtc_state,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> false, true);
> diff --git a/drivers/gpu/drm/arm/malidp_planes.c b/drivers/gpu/drm/arm/malidp_planes.c
> index 2885d69af456..ee32361c87ac 100644
> --- a/drivers/gpu/drm/arm/malidp_planes.c
> +++ b/drivers/gpu/drm/arm/malidp_planes.c
> @@ -141,18 +141,13 @@ static int malidp_se_check_scaling(struct malidp_plane *mp,
> struct drm_crtc_state *crtc_state =
> drm_atomic_get_existing_crtc_state(state->state, state->crtc);
> struct malidp_crtc_state *mc;
> - struct drm_rect clip = { 0 };
> u32 src_w, src_h;
> int ret;
>
> if (!crtc_state)
> return -EINVAL;
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + ret = drm_atomic_helper_check_plane_state(state, crtc_state,
> 0, INT_MAX, true, true);
> if (ret)
> return ret;
For the HDLCD and Mali DP changes:
Acked-by: Liviu Dudau <liviu.dudau@arm.com>
Best regards,
Liviu
> diff --git a/drivers/gpu/drm/armada/armada_crtc.c b/drivers/gpu/drm/armada/armada_crtc.c
> index fdc34ad4ca62..03eeee11dd5b 100644
> --- a/drivers/gpu/drm/armada/armada_crtc.c
> +++ b/drivers/gpu/drm/armada/armada_crtc.c
> @@ -1203,15 +1203,11 @@ static int armada_drm_primary_update(struct drm_plane *plane,
> struct drm_crtc_state crtc_state = {
> .crtc = crtc,
> .enable = crtc->enabled,
> + .mode = crtc->mode,
> };
> - struct drm_rect clip = {};
> int ret;
>
> - if (crtc->enabled)
> - drm_mode_get_hv_timing(&crtc->mode,
> - &clip.x2, &clip.y2);
> -
> - ret = drm_atomic_helper_check_plane_state(&state, &crtc_state, &clip, 0,
> + ret = drm_atomic_helper_check_plane_state(&state, &crtc_state, 0,
> INT_MAX, true, false);
> if (ret)
> return ret;
> diff --git a/drivers/gpu/drm/armada/armada_overlay.c b/drivers/gpu/drm/armada/armada_overlay.c
> index 4f2a7a6e0fd3..c391955009d6 100644
> --- a/drivers/gpu/drm/armada/armada_overlay.c
> +++ b/drivers/gpu/drm/armada/armada_overlay.c
> @@ -208,19 +208,15 @@ armada_ovl_plane_update(struct drm_plane *plane, struct drm_crtc *crtc,
> struct drm_crtc_state crtc_state = {
> .crtc = crtc,
> .enable = crtc->enabled,
> + .mode = crtc->mode,
> };
> - struct drm_rect clip = {};
> int ret;
>
> trace_armada_ovl_plane_update(plane, crtc, fb,
> crtc_x, crtc_y, crtc_w, crtc_h,
> src_x, src_y, src_w, src_h);
>
> - if (crtc->enabled)
> - drm_mode_get_hv_timing(&crtc->mode,
> - &clip.x2, &clip.y2);
> -
> - ret = drm_atomic_helper_check_plane_state(&state, &crtc_state, &clip, 0,
> + ret = drm_atomic_helper_check_plane_state(&state, &crtc_state, 0,
> INT_MAX, true, false);
> if (ret)
> return ret;
> diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
> index ab4032167094..9fb96f9cc36e 100644
> --- a/drivers/gpu/drm/drm_atomic_helper.c
> +++ b/drivers/gpu/drm/drm_atomic_helper.c
> @@ -699,7 +699,6 @@ EXPORT_SYMBOL(drm_atomic_helper_check_modeset);
> * drm_atomic_helper_check_plane_state() - Check plane state for validity
> * @plane_state: plane state to check
> * @crtc_state: crtc state to check
> - * @clip: integer clipping coordinates
> * @min_scale: minimum @src:@dest scaling factor in 16.16 fixed point
> * @max_scale: maximum @src:@dest scaling factor in 16.16 fixed point
> * @can_position: is it legal to position the plane such that it
> @@ -719,7 +718,6 @@ EXPORT_SYMBOL(drm_atomic_helper_check_modeset);
> */
> int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
> const struct drm_crtc_state *crtc_state,
> - const struct drm_rect *clip,
> int min_scale,
> int max_scale,
> bool can_position,
> @@ -729,6 +727,7 @@ int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
> struct drm_rect *src = &plane_state->src;
> struct drm_rect *dst = &plane_state->dst;
> unsigned int rotation = plane_state->rotation;
> + struct drm_rect clip = {};
> int hscale, vscale;
>
> WARN_ON(plane_state->crtc && plane_state->crtc != crtc_state->crtc);
> @@ -764,7 +763,10 @@ int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
> return -ERANGE;
> }
>
> - plane_state->visible = drm_rect_clip_scaled(src, dst, clip, hscale, vscale);
> + if (crtc_state->enable)
> + drm_mode_get_hv_timing(&crtc_state->mode, &clip.x2, &clip.y2);
> +
> + plane_state->visible = drm_rect_clip_scaled(src, dst, &clip, hscale, vscale);
>
> drm_rect_rotate_inv(src, fb->width << 16, fb->height << 16, rotation);
>
> @@ -778,10 +780,10 @@ int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
> */
> return 0;
>
> - if (!can_position && !drm_rect_equals(dst, clip)) {
> + if (!can_position && !drm_rect_equals(dst, &clip)) {
> DRM_DEBUG_KMS("Plane must cover entire CRTC\n");
> drm_rect_debug_print("dst: ", dst, false);
> - drm_rect_debug_print("clip: ", clip, false);
> + drm_rect_debug_print("clip: ", &clip, false);
> return -EINVAL;
> }
>
> diff --git a/drivers/gpu/drm/drm_plane_helper.c b/drivers/gpu/drm/drm_plane_helper.c
> index f1be8cd4e387..f88f68161519 100644
> --- a/drivers/gpu/drm/drm_plane_helper.c
> +++ b/drivers/gpu/drm/drm_plane_helper.c
> @@ -106,7 +106,6 @@ static int get_connectors_for_crtc(struct drm_crtc *crtc,
> * @fb: framebuffer to flip onto plane
> * @src: source coordinates in 16.16 fixed point
> * @dst: integer destination coordinates
> - * @clip: integer clipping coordinates
> * @rotation: plane rotation
> * @min_scale: minimum @src:@dest scaling factor in 16.16 fixed point
> * @max_scale: maximum @src:@dest scaling factor in 16.16 fixed point
> @@ -131,7 +130,6 @@ int drm_plane_helper_check_update(struct drm_plane *plane,
> struct drm_framebuffer *fb,
> struct drm_rect *src,
> struct drm_rect *dst,
> - const struct drm_rect *clip,
> unsigned int rotation,
> int min_scale,
> int max_scale,
> @@ -157,11 +155,12 @@ int drm_plane_helper_check_update(struct drm_plane *plane,
> struct drm_crtc_state crtc_state = {
> .crtc = crtc,
> .enable = crtc->enabled,
> + .mode = crtc->mode,
> };
> int ret;
>
> ret = drm_atomic_helper_check_plane_state(&plane_state, &crtc_state,
> - clip, min_scale, max_scale,
> + min_scale, max_scale,
> can_position,
> can_update_disabled);
> if (ret)
> @@ -239,16 +238,12 @@ int drm_primary_helper_update(struct drm_plane *plane, struct drm_crtc *crtc,
> .x2 = crtc_x + crtc_w,
> .y2 = crtc_y + crtc_h,
> };
> - const struct drm_rect clip = {
> - .x2 = crtc->mode.hdisplay,
> - .y2 = crtc->mode.vdisplay,
> - };
> struct drm_connector **connector_list;
> int num_connectors, ret;
> bool visible;
>
> ret = drm_plane_helper_check_update(plane, crtc, fb,
> - &src, &dest, &clip,
> + &src, &dest,
> DRM_MODE_ROTATE_0,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> diff --git a/drivers/gpu/drm/drm_simple_kms_helper.c b/drivers/gpu/drm/drm_simple_kms_helper.c
> index 9d3f6b70812c..165bc756af96 100644
> --- a/drivers/gpu/drm/drm_simple_kms_helper.c
> +++ b/drivers/gpu/drm/drm_simple_kms_helper.c
> @@ -89,7 +89,6 @@ static const struct drm_crtc_funcs drm_simple_kms_crtc_funcs = {
> static int drm_simple_kms_plane_atomic_check(struct drm_plane *plane,
> struct drm_plane_state *plane_state)
> {
> - struct drm_rect clip = { 0 };
> struct drm_simple_display_pipe *pipe;
> struct drm_crtc_state *crtc_state;
> int ret;
> @@ -100,12 +99,7 @@ static int drm_simple_kms_plane_atomic_check(struct drm_plane *plane,
> if (!crtc_state->enable)
> return 0; /* nothing to check when disabling or disabled */
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> ret = drm_atomic_helper_check_plane_state(plane_state, crtc_state,
> - &clip,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> false, true);
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index d585ce4c8732..3933420c6911 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -9309,18 +9309,12 @@ static int intel_check_cursor(struct intel_crtc_state *crtc_state,
> struct intel_plane_state *plane_state)
> {
> const struct drm_framebuffer *fb = plane_state->base.fb;
> - struct drm_rect clip = {};
> int src_x, src_y;
> u32 offset;
> int ret;
>
> - if (crtc_state->base.enable)
> - drm_mode_get_hv_timing(&crtc_state->base.mode,
> - &clip.x2, &clip.y2);
> -
> ret = drm_atomic_helper_check_plane_state(&plane_state->base,
> &crtc_state->base,
> - &clip,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> true, true);
> @@ -12755,7 +12749,6 @@ intel_check_primary_plane(struct intel_plane *plane,
> int min_scale = DRM_PLANE_HELPER_NO_SCALING;
> int max_scale = DRM_PLANE_HELPER_NO_SCALING;
> bool can_position = false;
> - struct drm_rect clip = {};
> int ret;
>
> if (INTEL_GEN(dev_priv) >= 9) {
> @@ -12767,13 +12760,8 @@ intel_check_primary_plane(struct intel_plane *plane,
> can_position = true;
> }
>
> - if (crtc_state->base.enable)
> - drm_mode_get_hv_timing(&crtc_state->base.mode,
> - &clip.x2, &clip.y2);
> -
> ret = drm_atomic_helper_check_plane_state(&state->base,
> &crtc_state->base,
> - &clip,
> min_scale, max_scale,
> can_position, true);
> if (ret)
> diff --git a/drivers/gpu/drm/imx/ipuv3-plane.c b/drivers/gpu/drm/imx/ipuv3-plane.c
> index 150628293c51..d7e3583e608e 100644
> --- a/drivers/gpu/drm/imx/ipuv3-plane.c
> +++ b/drivers/gpu/drm/imx/ipuv3-plane.c
> @@ -351,7 +351,6 @@ static int ipu_plane_atomic_check(struct drm_plane *plane,
> struct drm_framebuffer *old_fb = old_state->fb;
> unsigned long eba, ubo, vbo, old_ubo, old_vbo, alpha_eba;
> bool can_position = (plane->type == DRM_PLANE_TYPE_OVERLAY);
> - struct drm_rect clip = {};
> int hsub, vsub;
> int ret;
>
> @@ -367,11 +366,7 @@ static int ipu_plane_atomic_check(struct drm_plane *plane,
> if (WARN_ON(!crtc_state))
> return -EINVAL;
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + ret = drm_atomic_helper_check_plane_state(state, crtc_state,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> can_position, true);
> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_plane.c b/drivers/gpu/drm/mediatek/mtk_drm_plane.c
> index b5c6eec9a584..2f4b0ffee598 100644
> --- a/drivers/gpu/drm/mediatek/mtk_drm_plane.c
> +++ b/drivers/gpu/drm/mediatek/mtk_drm_plane.c
> @@ -91,7 +91,6 @@ static int mtk_plane_atomic_check(struct drm_plane *plane,
> {
> struct drm_framebuffer *fb = state->fb;
> struct drm_crtc_state *crtc_state;
> - struct drm_rect clip = { 0, };
>
> if (!fb)
> return 0;
> @@ -108,11 +107,7 @@ static int mtk_plane_atomic_check(struct drm_plane *plane,
> if (IS_ERR(crtc_state))
> return PTR_ERR(crtc_state);
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - return drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + return drm_atomic_helper_check_plane_state(state, crtc_state,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> true, true);
> diff --git a/drivers/gpu/drm/meson/meson_plane.c b/drivers/gpu/drm/meson/meson_plane.c
> index 3801bee1f9e6..c78a3a59f58c 100644
> --- a/drivers/gpu/drm/meson/meson_plane.c
> +++ b/drivers/gpu/drm/meson/meson_plane.c
> @@ -49,7 +49,6 @@ static int meson_plane_atomic_check(struct drm_plane *plane,
> struct drm_plane_state *state)
> {
> struct drm_crtc_state *crtc_state;
> - struct drm_rect clip = { 0, };
>
> if (!state->crtc)
> return 0;
> @@ -58,11 +57,7 @@ static int meson_plane_atomic_check(struct drm_plane *plane,
> if (IS_ERR(crtc_state))
> return PTR_ERR(crtc_state);
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - return drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + return drm_atomic_helper_check_plane_state(state, crtc_state,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> true, true);
> diff --git a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c
> index 98d4d7331767..44fc9fe4737a 100644
> --- a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c
> +++ b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c
> @@ -286,7 +286,6 @@ static int mdp5_plane_atomic_check_with_state(struct drm_crtc_state *crtc_state,
> uint32_t max_width, max_height;
> bool out_of_bounds = false;
> uint32_t caps = 0;
> - struct drm_rect clip = {};
> int min_scale, max_scale;
> int ret;
>
> @@ -323,11 +322,7 @@ static int mdp5_plane_atomic_check_with_state(struct drm_crtc_state *crtc_state,
> min_scale = FRAC_16_16(1, 8);
> max_scale = FRAC_16_16(8, 1);
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + ret = drm_atomic_helper_check_plane_state(state, crtc_state,
> min_scale, max_scale,
> true, true);
> if (ret)
> @@ -471,7 +466,6 @@ static int mdp5_plane_atomic_async_check(struct drm_plane *plane,
> {
> struct mdp5_plane_state *mdp5_state = to_mdp5_plane_state(state);
> struct drm_crtc_state *crtc_state;
> - struct drm_rect clip = {};
> int min_scale, max_scale;
> int ret;
>
> @@ -502,11 +496,7 @@ static int mdp5_plane_atomic_async_check(struct drm_plane *plane,
> min_scale = FRAC_16_16(1, 8);
> max_scale = FRAC_16_16(8, 1);
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + ret = drm_atomic_helper_check_plane_state(state, crtc_state,
> min_scale, max_scale,
> true, true);
> if (ret)
> diff --git a/drivers/gpu/drm/nouveau/nv50_display.c b/drivers/gpu/drm/nouveau/nv50_display.c
> index 5a9a51c735f0..eea94c098237 100644
> --- a/drivers/gpu/drm/nouveau/nv50_display.c
> +++ b/drivers/gpu/drm/nouveau/nv50_display.c
> @@ -1135,15 +1135,9 @@ static int
> nv50_curs_acquire(struct nv50_wndw *wndw, struct nv50_wndw_atom *asyw,
> struct nv50_head_atom *asyh)
> {
> - struct drm_rect clip = {};
> int ret;
>
> - if (asyh->state.enable)
> - drm_mode_get_hv_timing(&asyh->state.mode,
> - &clip.x2, &clip.y2);
> -
> ret = drm_atomic_helper_check_plane_state(&asyw->state, &asyh->state,
> - &clip,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> true, true);
> @@ -1427,18 +1421,12 @@ nv50_base_acquire(struct nv50_wndw *wndw, struct nv50_wndw_atom *asyw,
> struct nv50_head_atom *asyh)
> {
> const struct drm_framebuffer *fb = asyw->state.fb;
> - struct drm_rect clip = {};
> int ret;
>
> if (!fb->format->depth)
> return -EINVAL;
>
> - if (asyh->state.enable)
> - drm_mode_get_hv_timing(&asyh->state.mode,
> - &clip.x2, &clip.y2);
> -
> ret = drm_atomic_helper_check_plane_state(&asyw->state, &asyh->state,
> - &clip,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> false, true);
> diff --git a/drivers/gpu/drm/rcar-du/rcar_du_plane.c b/drivers/gpu/drm/rcar-du/rcar_du_plane.c
> index 5687a94d4cb1..68556bd9dad2 100644
> --- a/drivers/gpu/drm/rcar-du/rcar_du_plane.c
> +++ b/drivers/gpu/drm/rcar-du/rcar_du_plane.c
> @@ -572,7 +572,6 @@ int __rcar_du_plane_atomic_check(struct drm_plane *plane,
> {
> struct drm_device *dev = plane->dev;
> struct drm_crtc_state *crtc_state;
> - struct drm_rect clip = {};
> int ret;
>
> if (!state->crtc) {
> @@ -589,11 +588,7 @@ int __rcar_du_plane_atomic_check(struct drm_plane *plane,
> if (IS_ERR(crtc_state))
> return PTR_ERR(crtc_state);
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + ret = drm_atomic_helper_check_plane_state(state, crtc_state,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> true, true);
> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
> index cd2c72389629..b95e9d45a435 100644
> --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
> @@ -641,7 +641,6 @@ static int vop_plane_atomic_check(struct drm_plane *plane,
> struct vop_win *vop_win = to_vop_win(plane);
> const struct vop_win_data *win = vop_win->data;
> int ret;
> - struct drm_rect clip = {};
> int min_scale = win->phy->scl ? FRAC_16_16(1, 8) :
> DRM_PLANE_HELPER_NO_SCALING;
> int max_scale = win->phy->scl ? FRAC_16_16(8, 1) :
> @@ -654,11 +653,7 @@ static int vop_plane_atomic_check(struct drm_plane *plane,
> if (WARN_ON(!crtc_state))
> return -EINVAL;
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + ret = drm_atomic_helper_check_plane_state(state, crtc_state,
> min_scale, max_scale,
> true, true);
> if (ret)
> diff --git a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c
> index 2f0ccd50b54d..9a540330cb79 100644
> --- a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c
> +++ b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c
> @@ -211,7 +211,6 @@ static int sun8i_ui_layer_atomic_check(struct drm_plane *plane,
> struct drm_crtc *crtc = state->crtc;
> struct drm_crtc_state *crtc_state;
> int min_scale, max_scale;
> - struct drm_rect clip = {};
>
> if (!crtc)
> return 0;
> @@ -220,10 +219,6 @@ static int sun8i_ui_layer_atomic_check(struct drm_plane *plane,
> if (WARN_ON(!crtc_state))
> return -EINVAL;
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> min_scale = DRM_PLANE_HELPER_NO_SCALING;
> max_scale = DRM_PLANE_HELPER_NO_SCALING;
>
> @@ -232,7 +227,7 @@ static int sun8i_ui_layer_atomic_check(struct drm_plane *plane,
> max_scale = SUN8I_UI_SCALER_SCALE_MAX;
> }
>
> - return drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + return drm_atomic_helper_check_plane_state(state, crtc_state,
> min_scale, max_scale,
> true, true);
> }
> diff --git a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c
> index eb3bf2d7291a..5877f8ef5895 100644
> --- a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c
> +++ b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c
> @@ -239,7 +239,6 @@ static int sun8i_vi_layer_atomic_check(struct drm_plane *plane,
> struct drm_crtc *crtc = state->crtc;
> struct drm_crtc_state *crtc_state;
> int min_scale, max_scale;
> - struct drm_rect clip = {};
>
> if (!crtc)
> return 0;
> @@ -248,10 +247,6 @@ static int sun8i_vi_layer_atomic_check(struct drm_plane *plane,
> if (WARN_ON(!crtc_state))
> return -EINVAL;
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> min_scale = DRM_PLANE_HELPER_NO_SCALING;
> max_scale = DRM_PLANE_HELPER_NO_SCALING;
>
> @@ -260,7 +255,7 @@ static int sun8i_vi_layer_atomic_check(struct drm_plane *plane,
> max_scale = SUN8I_VI_SCALER_SCALE_MAX;
> }
>
> - return drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + return drm_atomic_helper_check_plane_state(state, crtc_state,
> min_scale, max_scale,
> true, true);
> }
> diff --git a/drivers/gpu/drm/tegra/plane.c b/drivers/gpu/drm/tegra/plane.c
> index 7267a01e6f08..a056fbf83b53 100644
> --- a/drivers/gpu/drm/tegra/plane.c
> +++ b/drivers/gpu/drm/tegra/plane.c
> @@ -82,7 +82,6 @@ int tegra_plane_state_add(struct tegra_plane *plane,
> {
> struct drm_crtc_state *crtc_state;
> struct tegra_dc_state *tegra;
> - struct drm_rect clip = {};
> int err;
>
> /* Propagate errors from allocation or locking failures. */
> @@ -90,12 +89,8 @@ int tegra_plane_state_add(struct tegra_plane *plane,
> if (IS_ERR(crtc_state))
> return PTR_ERR(crtc_state);
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> /* Check plane state for visibility and calculate clipping bounds */
> - err = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + err = drm_atomic_helper_check_plane_state(state, crtc_state,
> 0, INT_MAX, true, true);
> if (err < 0)
> return err;
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
> index 1107d6d03506..34ecc27fc30a 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
> @@ -443,17 +443,12 @@ int vmw_du_primary_plane_atomic_check(struct drm_plane *plane,
> {
> struct drm_crtc_state *crtc_state = NULL;
> struct drm_framebuffer *new_fb = state->fb;
> - struct drm_rect clip = {};
> int ret;
>
> if (state->crtc)
> crtc_state = drm_atomic_get_new_crtc_state(state->state, state->crtc);
>
> - if (crtc_state && crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + ret = drm_atomic_helper_check_plane_state(state, crtc_state,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> false, true);
> diff --git a/drivers/gpu/drm/zte/zx_plane.c b/drivers/gpu/drm/zte/zx_plane.c
> index 8e1f34274e24..94545adac50d 100644
> --- a/drivers/gpu/drm/zte/zx_plane.c
> +++ b/drivers/gpu/drm/zte/zx_plane.c
> @@ -55,7 +55,6 @@ static int zx_vl_plane_atomic_check(struct drm_plane *plane,
> struct drm_framebuffer *fb = plane_state->fb;
> struct drm_crtc *crtc = plane_state->crtc;
> struct drm_crtc_state *crtc_state;
> - struct drm_rect clip = {};
> int min_scale = FRAC_16_16(1, 8);
> int max_scale = FRAC_16_16(8, 1);
>
> @@ -75,12 +74,8 @@ static int zx_vl_plane_atomic_check(struct drm_plane *plane,
> if (!plane_state->crtc)
> return -EINVAL;
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> return drm_atomic_helper_check_plane_state(plane_state, crtc_state,
> - &clip, min_scale, max_scale,
> + min_scale, max_scale,
> true, true);
> }
>
> @@ -291,7 +286,6 @@ static int zx_gl_plane_atomic_check(struct drm_plane *plane,
> struct drm_framebuffer *fb = plane_state->fb;
> struct drm_crtc *crtc = plane_state->crtc;
> struct drm_crtc_state *crtc_state;
> - struct drm_rect clip = {};
>
> if (!crtc || !fb)
> return 0;
> @@ -309,12 +303,7 @@ static int zx_gl_plane_atomic_check(struct drm_plane *plane,
> if (!plane_state->crtc)
> return -EINVAL;
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> return drm_atomic_helper_check_plane_state(plane_state, crtc_state,
> - &clip,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> false, true);
> diff --git a/include/drm/drm_atomic_helper.h b/include/drm/drm_atomic_helper.h
> index 4842ee9485ce..26aaba58d6ce 100644
> --- a/include/drm/drm_atomic_helper.h
> +++ b/include/drm/drm_atomic_helper.h
> @@ -40,7 +40,6 @@ int drm_atomic_helper_check_modeset(struct drm_device *dev,
> struct drm_atomic_state *state);
> int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
> const struct drm_crtc_state *crtc_state,
> - const struct drm_rect *clip,
> int min_scale,
> int max_scale,
> bool can_position,
> diff --git a/include/drm/drm_plane_helper.h b/include/drm/drm_plane_helper.h
> index 8aa49c0ecd4d..28d7ce620729 100644
> --- a/include/drm/drm_plane_helper.h
> +++ b/include/drm/drm_plane_helper.h
> @@ -43,7 +43,6 @@ int drm_plane_helper_check_update(struct drm_plane *plane,
> struct drm_framebuffer *fb,
> struct drm_rect *src,
> struct drm_rect *dest,
> - const struct drm_rect *clip,
> unsigned int rotation,
> int min_scale,
> int max_scale,
> --
> 2.13.6
>
--
====================
| I would like to |
| fix the world, |
| but they're not |
| giving me the |
\ source code! /
---------------
?\_(?)_/?
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 5/5] drm: Don't pass clip to drm_atomic_helper_check_plane_state()
@ 2018-01-23 17:46 ` Liviu Dudau
0 siblings, 0 replies; 34+ messages in thread
From: Liviu Dudau @ 2018-01-23 17:46 UTC (permalink / raw)
To: Ville Syrjala
Cc: dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW, Brian Starkey,
Mali DP Maintainers, Daniel Vetter, Gustavo Padovan, Sean Paul,
Philipp Zabel, CK Hu, Neil Armstrong, Rob Clark, Ben Skeggs,
Laurent Pinchart, Sandy Huang, Heiko Stübner, Maxime Ripard,
Thierry Reding, VMware Graphics, Sinclair Yeh
On Tue, Jan 23, 2018 at 07:08:57PM +0200, Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrjala-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
>
> Move the plane clip rectangle handling into
> drm_atomic_helper_check_plane_state(). Drivers no longer
> have to worry about such mundane details.
>
> v2: Convert armada, rcar, and sun4i as well
>
> Cc: Liviu Dudau <liviu.dudau-5wv7dgnIgG8@public.gmane.org>
> Cc: Brian Starkey <brian.starkey-5wv7dgnIgG8@public.gmane.org>
> Cc: Mali DP Maintainers <malidp-VeJGdqYn5oNWk0Htik3J/w@public.gmane.org>
> Cc: Daniel Vetter <daniel.vetter-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
> Cc: Gustavo Padovan <gustavo-THi1TnShQwVAfugRpC6u6w@public.gmane.org>
> Cc: Sean Paul <seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
> Cc: Philipp Zabel <p.zabel-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
> Cc: CK Hu <ck.hu-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org>
> Cc: Neil Armstrong <narmstrong-rdvid1DuHRBWk0Htik3J/w@public.gmane.org>
> Cc: Rob Clark <robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
> Cc: Ben Skeggs <bskeggs-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
> Cc: Laurent Pinchart <laurent.pinchart-ryLnwIuWjnjg/C1BVhZhaw@public.gmane.org>
> Cc: Sandy Huang <hjc-TNX95d0MmH7DzftRWevZcw@public.gmane.org>
> Cc: "Heiko Stübner" <heiko-4mtYJXux2i+zQB+pC5nmwQ@public.gmane.org>
> Cc: Maxime Ripard <maxime.ripard-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>
> Cc: Thierry Reding <thierry.reding-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
> Cc: VMware Graphics <linux-graphics-maintainer-pghWNbHTmq7QT0dZR+AlfA@public.gmane.org>
> Cc: Sinclair Yeh <syeh-pghWNbHTmq7QT0dZR+AlfA@public.gmane.org>
> Cc: Thomas Hellstrom <thellstrom-pghWNbHTmq7QT0dZR+AlfA@public.gmane.org>
> Cc: Shawn Guo <shawnguo-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
> Cc: Archit Taneja <architt-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
> Cc: linux-amlogic-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org
> Cc: linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
> Cc: freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org
> Cc: nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org
> Cc: linux-renesas-soc-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
> Cc: linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
> Cc: Russell King <rmk+kernel-I+IVW8TIWO2tmTQ+vhA3Yw@public.gmane.org>
> Suggested-by: Daniel Vetter <daniel-/w4YWyX8dFk@public.gmane.org>
> Signed-off-by: Ville Syrjälä <ville.syrjala-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
> Reviewed-by: Daniel Vetter <daniel.vetter-/w4YWyX8dFk@public.gmane.org>
> Reviewed-by: Thierry Reding <treding-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
> Reviewed-by: Archit Taneja <architt-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> #msm
> ---
> drivers/gpu/drm/arm/hdlcd_crtc.c | 7 +------
> drivers/gpu/drm/arm/malidp_planes.c | 7 +------
> drivers/gpu/drm/armada/armada_crtc.c | 8 ++------
> drivers/gpu/drm/armada/armada_overlay.c | 8 ++------
> drivers/gpu/drm/drm_atomic_helper.c | 12 +++++++-----
> drivers/gpu/drm/drm_plane_helper.c | 11 +++--------
> drivers/gpu/drm/drm_simple_kms_helper.c | 6 ------
> drivers/gpu/drm/i915/intel_display.c | 12 ------------
> drivers/gpu/drm/imx/ipuv3-plane.c | 7 +------
> drivers/gpu/drm/mediatek/mtk_drm_plane.c | 7 +------
> drivers/gpu/drm/meson/meson_plane.c | 7 +------
> drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c | 14 ++------------
> drivers/gpu/drm/nouveau/nv50_display.c | 12 ------------
> drivers/gpu/drm/rcar-du/rcar_du_plane.c | 7 +------
> drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 7 +------
> drivers/gpu/drm/sun4i/sun8i_ui_layer.c | 7 +------
> drivers/gpu/drm/sun4i/sun8i_vi_layer.c | 7 +------
> drivers/gpu/drm/tegra/plane.c | 7 +------
> drivers/gpu/drm/vmwgfx/vmwgfx_kms.c | 7 +------
> drivers/gpu/drm/zte/zx_plane.c | 13 +------------
> include/drm/drm_atomic_helper.h | 1 -
> include/drm/drm_plane_helper.h | 1 -
> 22 files changed, 28 insertions(+), 147 deletions(-)
>
> diff --git a/drivers/gpu/drm/arm/hdlcd_crtc.c b/drivers/gpu/drm/arm/hdlcd_crtc.c
> index 877647ef35a9..cf5cbd63ecdf 100644
> --- a/drivers/gpu/drm/arm/hdlcd_crtc.c
> +++ b/drivers/gpu/drm/arm/hdlcd_crtc.c
> @@ -229,7 +229,6 @@ static const struct drm_crtc_helper_funcs hdlcd_crtc_helper_funcs = {
> static int hdlcd_plane_atomic_check(struct drm_plane *plane,
> struct drm_plane_state *state)
> {
> - struct drm_rect clip = { 0 };
> struct drm_crtc_state *crtc_state;
> u32 src_h = state->src_h >> 16;
>
> @@ -249,11 +248,7 @@ static int hdlcd_plane_atomic_check(struct drm_plane *plane,
> return -EINVAL;
> }
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - return drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + return drm_atomic_helper_check_plane_state(state, crtc_state,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> false, true);
> diff --git a/drivers/gpu/drm/arm/malidp_planes.c b/drivers/gpu/drm/arm/malidp_planes.c
> index 2885d69af456..ee32361c87ac 100644
> --- a/drivers/gpu/drm/arm/malidp_planes.c
> +++ b/drivers/gpu/drm/arm/malidp_planes.c
> @@ -141,18 +141,13 @@ static int malidp_se_check_scaling(struct malidp_plane *mp,
> struct drm_crtc_state *crtc_state =
> drm_atomic_get_existing_crtc_state(state->state, state->crtc);
> struct malidp_crtc_state *mc;
> - struct drm_rect clip = { 0 };
> u32 src_w, src_h;
> int ret;
>
> if (!crtc_state)
> return -EINVAL;
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + ret = drm_atomic_helper_check_plane_state(state, crtc_state,
> 0, INT_MAX, true, true);
> if (ret)
> return ret;
For the HDLCD and Mali DP changes:
Acked-by: Liviu Dudau <liviu.dudau-5wv7dgnIgG8@public.gmane.org>
Best regards,
Liviu
> diff --git a/drivers/gpu/drm/armada/armada_crtc.c b/drivers/gpu/drm/armada/armada_crtc.c
> index fdc34ad4ca62..03eeee11dd5b 100644
> --- a/drivers/gpu/drm/armada/armada_crtc.c
> +++ b/drivers/gpu/drm/armada/armada_crtc.c
> @@ -1203,15 +1203,11 @@ static int armada_drm_primary_update(struct drm_plane *plane,
> struct drm_crtc_state crtc_state = {
> .crtc = crtc,
> .enable = crtc->enabled,
> + .mode = crtc->mode,
> };
> - struct drm_rect clip = {};
> int ret;
>
> - if (crtc->enabled)
> - drm_mode_get_hv_timing(&crtc->mode,
> - &clip.x2, &clip.y2);
> -
> - ret = drm_atomic_helper_check_plane_state(&state, &crtc_state, &clip, 0,
> + ret = drm_atomic_helper_check_plane_state(&state, &crtc_state, 0,
> INT_MAX, true, false);
> if (ret)
> return ret;
> diff --git a/drivers/gpu/drm/armada/armada_overlay.c b/drivers/gpu/drm/armada/armada_overlay.c
> index 4f2a7a6e0fd3..c391955009d6 100644
> --- a/drivers/gpu/drm/armada/armada_overlay.c
> +++ b/drivers/gpu/drm/armada/armada_overlay.c
> @@ -208,19 +208,15 @@ armada_ovl_plane_update(struct drm_plane *plane, struct drm_crtc *crtc,
> struct drm_crtc_state crtc_state = {
> .crtc = crtc,
> .enable = crtc->enabled,
> + .mode = crtc->mode,
> };
> - struct drm_rect clip = {};
> int ret;
>
> trace_armada_ovl_plane_update(plane, crtc, fb,
> crtc_x, crtc_y, crtc_w, crtc_h,
> src_x, src_y, src_w, src_h);
>
> - if (crtc->enabled)
> - drm_mode_get_hv_timing(&crtc->mode,
> - &clip.x2, &clip.y2);
> -
> - ret = drm_atomic_helper_check_plane_state(&state, &crtc_state, &clip, 0,
> + ret = drm_atomic_helper_check_plane_state(&state, &crtc_state, 0,
> INT_MAX, true, false);
> if (ret)
> return ret;
> diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
> index ab4032167094..9fb96f9cc36e 100644
> --- a/drivers/gpu/drm/drm_atomic_helper.c
> +++ b/drivers/gpu/drm/drm_atomic_helper.c
> @@ -699,7 +699,6 @@ EXPORT_SYMBOL(drm_atomic_helper_check_modeset);
> * drm_atomic_helper_check_plane_state() - Check plane state for validity
> * @plane_state: plane state to check
> * @crtc_state: crtc state to check
> - * @clip: integer clipping coordinates
> * @min_scale: minimum @src:@dest scaling factor in 16.16 fixed point
> * @max_scale: maximum @src:@dest scaling factor in 16.16 fixed point
> * @can_position: is it legal to position the plane such that it
> @@ -719,7 +718,6 @@ EXPORT_SYMBOL(drm_atomic_helper_check_modeset);
> */
> int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
> const struct drm_crtc_state *crtc_state,
> - const struct drm_rect *clip,
> int min_scale,
> int max_scale,
> bool can_position,
> @@ -729,6 +727,7 @@ int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
> struct drm_rect *src = &plane_state->src;
> struct drm_rect *dst = &plane_state->dst;
> unsigned int rotation = plane_state->rotation;
> + struct drm_rect clip = {};
> int hscale, vscale;
>
> WARN_ON(plane_state->crtc && plane_state->crtc != crtc_state->crtc);
> @@ -764,7 +763,10 @@ int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
> return -ERANGE;
> }
>
> - plane_state->visible = drm_rect_clip_scaled(src, dst, clip, hscale, vscale);
> + if (crtc_state->enable)
> + drm_mode_get_hv_timing(&crtc_state->mode, &clip.x2, &clip.y2);
> +
> + plane_state->visible = drm_rect_clip_scaled(src, dst, &clip, hscale, vscale);
>
> drm_rect_rotate_inv(src, fb->width << 16, fb->height << 16, rotation);
>
> @@ -778,10 +780,10 @@ int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
> */
> return 0;
>
> - if (!can_position && !drm_rect_equals(dst, clip)) {
> + if (!can_position && !drm_rect_equals(dst, &clip)) {
> DRM_DEBUG_KMS("Plane must cover entire CRTC\n");
> drm_rect_debug_print("dst: ", dst, false);
> - drm_rect_debug_print("clip: ", clip, false);
> + drm_rect_debug_print("clip: ", &clip, false);
> return -EINVAL;
> }
>
> diff --git a/drivers/gpu/drm/drm_plane_helper.c b/drivers/gpu/drm/drm_plane_helper.c
> index f1be8cd4e387..f88f68161519 100644
> --- a/drivers/gpu/drm/drm_plane_helper.c
> +++ b/drivers/gpu/drm/drm_plane_helper.c
> @@ -106,7 +106,6 @@ static int get_connectors_for_crtc(struct drm_crtc *crtc,
> * @fb: framebuffer to flip onto plane
> * @src: source coordinates in 16.16 fixed point
> * @dst: integer destination coordinates
> - * @clip: integer clipping coordinates
> * @rotation: plane rotation
> * @min_scale: minimum @src:@dest scaling factor in 16.16 fixed point
> * @max_scale: maximum @src:@dest scaling factor in 16.16 fixed point
> @@ -131,7 +130,6 @@ int drm_plane_helper_check_update(struct drm_plane *plane,
> struct drm_framebuffer *fb,
> struct drm_rect *src,
> struct drm_rect *dst,
> - const struct drm_rect *clip,
> unsigned int rotation,
> int min_scale,
> int max_scale,
> @@ -157,11 +155,12 @@ int drm_plane_helper_check_update(struct drm_plane *plane,
> struct drm_crtc_state crtc_state = {
> .crtc = crtc,
> .enable = crtc->enabled,
> + .mode = crtc->mode,
> };
> int ret;
>
> ret = drm_atomic_helper_check_plane_state(&plane_state, &crtc_state,
> - clip, min_scale, max_scale,
> + min_scale, max_scale,
> can_position,
> can_update_disabled);
> if (ret)
> @@ -239,16 +238,12 @@ int drm_primary_helper_update(struct drm_plane *plane, struct drm_crtc *crtc,
> .x2 = crtc_x + crtc_w,
> .y2 = crtc_y + crtc_h,
> };
> - const struct drm_rect clip = {
> - .x2 = crtc->mode.hdisplay,
> - .y2 = crtc->mode.vdisplay,
> - };
> struct drm_connector **connector_list;
> int num_connectors, ret;
> bool visible;
>
> ret = drm_plane_helper_check_update(plane, crtc, fb,
> - &src, &dest, &clip,
> + &src, &dest,
> DRM_MODE_ROTATE_0,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> diff --git a/drivers/gpu/drm/drm_simple_kms_helper.c b/drivers/gpu/drm/drm_simple_kms_helper.c
> index 9d3f6b70812c..165bc756af96 100644
> --- a/drivers/gpu/drm/drm_simple_kms_helper.c
> +++ b/drivers/gpu/drm/drm_simple_kms_helper.c
> @@ -89,7 +89,6 @@ static const struct drm_crtc_funcs drm_simple_kms_crtc_funcs = {
> static int drm_simple_kms_plane_atomic_check(struct drm_plane *plane,
> struct drm_plane_state *plane_state)
> {
> - struct drm_rect clip = { 0 };
> struct drm_simple_display_pipe *pipe;
> struct drm_crtc_state *crtc_state;
> int ret;
> @@ -100,12 +99,7 @@ static int drm_simple_kms_plane_atomic_check(struct drm_plane *plane,
> if (!crtc_state->enable)
> return 0; /* nothing to check when disabling or disabled */
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> ret = drm_atomic_helper_check_plane_state(plane_state, crtc_state,
> - &clip,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> false, true);
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index d585ce4c8732..3933420c6911 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -9309,18 +9309,12 @@ static int intel_check_cursor(struct intel_crtc_state *crtc_state,
> struct intel_plane_state *plane_state)
> {
> const struct drm_framebuffer *fb = plane_state->base.fb;
> - struct drm_rect clip = {};
> int src_x, src_y;
> u32 offset;
> int ret;
>
> - if (crtc_state->base.enable)
> - drm_mode_get_hv_timing(&crtc_state->base.mode,
> - &clip.x2, &clip.y2);
> -
> ret = drm_atomic_helper_check_plane_state(&plane_state->base,
> &crtc_state->base,
> - &clip,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> true, true);
> @@ -12755,7 +12749,6 @@ intel_check_primary_plane(struct intel_plane *plane,
> int min_scale = DRM_PLANE_HELPER_NO_SCALING;
> int max_scale = DRM_PLANE_HELPER_NO_SCALING;
> bool can_position = false;
> - struct drm_rect clip = {};
> int ret;
>
> if (INTEL_GEN(dev_priv) >= 9) {
> @@ -12767,13 +12760,8 @@ intel_check_primary_plane(struct intel_plane *plane,
> can_position = true;
> }
>
> - if (crtc_state->base.enable)
> - drm_mode_get_hv_timing(&crtc_state->base.mode,
> - &clip.x2, &clip.y2);
> -
> ret = drm_atomic_helper_check_plane_state(&state->base,
> &crtc_state->base,
> - &clip,
> min_scale, max_scale,
> can_position, true);
> if (ret)
> diff --git a/drivers/gpu/drm/imx/ipuv3-plane.c b/drivers/gpu/drm/imx/ipuv3-plane.c
> index 150628293c51..d7e3583e608e 100644
> --- a/drivers/gpu/drm/imx/ipuv3-plane.c
> +++ b/drivers/gpu/drm/imx/ipuv3-plane.c
> @@ -351,7 +351,6 @@ static int ipu_plane_atomic_check(struct drm_plane *plane,
> struct drm_framebuffer *old_fb = old_state->fb;
> unsigned long eba, ubo, vbo, old_ubo, old_vbo, alpha_eba;
> bool can_position = (plane->type == DRM_PLANE_TYPE_OVERLAY);
> - struct drm_rect clip = {};
> int hsub, vsub;
> int ret;
>
> @@ -367,11 +366,7 @@ static int ipu_plane_atomic_check(struct drm_plane *plane,
> if (WARN_ON(!crtc_state))
> return -EINVAL;
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + ret = drm_atomic_helper_check_plane_state(state, crtc_state,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> can_position, true);
> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_plane.c b/drivers/gpu/drm/mediatek/mtk_drm_plane.c
> index b5c6eec9a584..2f4b0ffee598 100644
> --- a/drivers/gpu/drm/mediatek/mtk_drm_plane.c
> +++ b/drivers/gpu/drm/mediatek/mtk_drm_plane.c
> @@ -91,7 +91,6 @@ static int mtk_plane_atomic_check(struct drm_plane *plane,
> {
> struct drm_framebuffer *fb = state->fb;
> struct drm_crtc_state *crtc_state;
> - struct drm_rect clip = { 0, };
>
> if (!fb)
> return 0;
> @@ -108,11 +107,7 @@ static int mtk_plane_atomic_check(struct drm_plane *plane,
> if (IS_ERR(crtc_state))
> return PTR_ERR(crtc_state);
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - return drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + return drm_atomic_helper_check_plane_state(state, crtc_state,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> true, true);
> diff --git a/drivers/gpu/drm/meson/meson_plane.c b/drivers/gpu/drm/meson/meson_plane.c
> index 3801bee1f9e6..c78a3a59f58c 100644
> --- a/drivers/gpu/drm/meson/meson_plane.c
> +++ b/drivers/gpu/drm/meson/meson_plane.c
> @@ -49,7 +49,6 @@ static int meson_plane_atomic_check(struct drm_plane *plane,
> struct drm_plane_state *state)
> {
> struct drm_crtc_state *crtc_state;
> - struct drm_rect clip = { 0, };
>
> if (!state->crtc)
> return 0;
> @@ -58,11 +57,7 @@ static int meson_plane_atomic_check(struct drm_plane *plane,
> if (IS_ERR(crtc_state))
> return PTR_ERR(crtc_state);
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - return drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + return drm_atomic_helper_check_plane_state(state, crtc_state,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> true, true);
> diff --git a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c
> index 98d4d7331767..44fc9fe4737a 100644
> --- a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c
> +++ b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c
> @@ -286,7 +286,6 @@ static int mdp5_plane_atomic_check_with_state(struct drm_crtc_state *crtc_state,
> uint32_t max_width, max_height;
> bool out_of_bounds = false;
> uint32_t caps = 0;
> - struct drm_rect clip = {};
> int min_scale, max_scale;
> int ret;
>
> @@ -323,11 +322,7 @@ static int mdp5_plane_atomic_check_with_state(struct drm_crtc_state *crtc_state,
> min_scale = FRAC_16_16(1, 8);
> max_scale = FRAC_16_16(8, 1);
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + ret = drm_atomic_helper_check_plane_state(state, crtc_state,
> min_scale, max_scale,
> true, true);
> if (ret)
> @@ -471,7 +466,6 @@ static int mdp5_plane_atomic_async_check(struct drm_plane *plane,
> {
> struct mdp5_plane_state *mdp5_state = to_mdp5_plane_state(state);
> struct drm_crtc_state *crtc_state;
> - struct drm_rect clip = {};
> int min_scale, max_scale;
> int ret;
>
> @@ -502,11 +496,7 @@ static int mdp5_plane_atomic_async_check(struct drm_plane *plane,
> min_scale = FRAC_16_16(1, 8);
> max_scale = FRAC_16_16(8, 1);
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + ret = drm_atomic_helper_check_plane_state(state, crtc_state,
> min_scale, max_scale,
> true, true);
> if (ret)
> diff --git a/drivers/gpu/drm/nouveau/nv50_display.c b/drivers/gpu/drm/nouveau/nv50_display.c
> index 5a9a51c735f0..eea94c098237 100644
> --- a/drivers/gpu/drm/nouveau/nv50_display.c
> +++ b/drivers/gpu/drm/nouveau/nv50_display.c
> @@ -1135,15 +1135,9 @@ static int
> nv50_curs_acquire(struct nv50_wndw *wndw, struct nv50_wndw_atom *asyw,
> struct nv50_head_atom *asyh)
> {
> - struct drm_rect clip = {};
> int ret;
>
> - if (asyh->state.enable)
> - drm_mode_get_hv_timing(&asyh->state.mode,
> - &clip.x2, &clip.y2);
> -
> ret = drm_atomic_helper_check_plane_state(&asyw->state, &asyh->state,
> - &clip,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> true, true);
> @@ -1427,18 +1421,12 @@ nv50_base_acquire(struct nv50_wndw *wndw, struct nv50_wndw_atom *asyw,
> struct nv50_head_atom *asyh)
> {
> const struct drm_framebuffer *fb = asyw->state.fb;
> - struct drm_rect clip = {};
> int ret;
>
> if (!fb->format->depth)
> return -EINVAL;
>
> - if (asyh->state.enable)
> - drm_mode_get_hv_timing(&asyh->state.mode,
> - &clip.x2, &clip.y2);
> -
> ret = drm_atomic_helper_check_plane_state(&asyw->state, &asyh->state,
> - &clip,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> false, true);
> diff --git a/drivers/gpu/drm/rcar-du/rcar_du_plane.c b/drivers/gpu/drm/rcar-du/rcar_du_plane.c
> index 5687a94d4cb1..68556bd9dad2 100644
> --- a/drivers/gpu/drm/rcar-du/rcar_du_plane.c
> +++ b/drivers/gpu/drm/rcar-du/rcar_du_plane.c
> @@ -572,7 +572,6 @@ int __rcar_du_plane_atomic_check(struct drm_plane *plane,
> {
> struct drm_device *dev = plane->dev;
> struct drm_crtc_state *crtc_state;
> - struct drm_rect clip = {};
> int ret;
>
> if (!state->crtc) {
> @@ -589,11 +588,7 @@ int __rcar_du_plane_atomic_check(struct drm_plane *plane,
> if (IS_ERR(crtc_state))
> return PTR_ERR(crtc_state);
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + ret = drm_atomic_helper_check_plane_state(state, crtc_state,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> true, true);
> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
> index cd2c72389629..b95e9d45a435 100644
> --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
> @@ -641,7 +641,6 @@ static int vop_plane_atomic_check(struct drm_plane *plane,
> struct vop_win *vop_win = to_vop_win(plane);
> const struct vop_win_data *win = vop_win->data;
> int ret;
> - struct drm_rect clip = {};
> int min_scale = win->phy->scl ? FRAC_16_16(1, 8) :
> DRM_PLANE_HELPER_NO_SCALING;
> int max_scale = win->phy->scl ? FRAC_16_16(8, 1) :
> @@ -654,11 +653,7 @@ static int vop_plane_atomic_check(struct drm_plane *plane,
> if (WARN_ON(!crtc_state))
> return -EINVAL;
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + ret = drm_atomic_helper_check_plane_state(state, crtc_state,
> min_scale, max_scale,
> true, true);
> if (ret)
> diff --git a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c
> index 2f0ccd50b54d..9a540330cb79 100644
> --- a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c
> +++ b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c
> @@ -211,7 +211,6 @@ static int sun8i_ui_layer_atomic_check(struct drm_plane *plane,
> struct drm_crtc *crtc = state->crtc;
> struct drm_crtc_state *crtc_state;
> int min_scale, max_scale;
> - struct drm_rect clip = {};
>
> if (!crtc)
> return 0;
> @@ -220,10 +219,6 @@ static int sun8i_ui_layer_atomic_check(struct drm_plane *plane,
> if (WARN_ON(!crtc_state))
> return -EINVAL;
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> min_scale = DRM_PLANE_HELPER_NO_SCALING;
> max_scale = DRM_PLANE_HELPER_NO_SCALING;
>
> @@ -232,7 +227,7 @@ static int sun8i_ui_layer_atomic_check(struct drm_plane *plane,
> max_scale = SUN8I_UI_SCALER_SCALE_MAX;
> }
>
> - return drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + return drm_atomic_helper_check_plane_state(state, crtc_state,
> min_scale, max_scale,
> true, true);
> }
> diff --git a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c
> index eb3bf2d7291a..5877f8ef5895 100644
> --- a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c
> +++ b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c
> @@ -239,7 +239,6 @@ static int sun8i_vi_layer_atomic_check(struct drm_plane *plane,
> struct drm_crtc *crtc = state->crtc;
> struct drm_crtc_state *crtc_state;
> int min_scale, max_scale;
> - struct drm_rect clip = {};
>
> if (!crtc)
> return 0;
> @@ -248,10 +247,6 @@ static int sun8i_vi_layer_atomic_check(struct drm_plane *plane,
> if (WARN_ON(!crtc_state))
> return -EINVAL;
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> min_scale = DRM_PLANE_HELPER_NO_SCALING;
> max_scale = DRM_PLANE_HELPER_NO_SCALING;
>
> @@ -260,7 +255,7 @@ static int sun8i_vi_layer_atomic_check(struct drm_plane *plane,
> max_scale = SUN8I_VI_SCALER_SCALE_MAX;
> }
>
> - return drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + return drm_atomic_helper_check_plane_state(state, crtc_state,
> min_scale, max_scale,
> true, true);
> }
> diff --git a/drivers/gpu/drm/tegra/plane.c b/drivers/gpu/drm/tegra/plane.c
> index 7267a01e6f08..a056fbf83b53 100644
> --- a/drivers/gpu/drm/tegra/plane.c
> +++ b/drivers/gpu/drm/tegra/plane.c
> @@ -82,7 +82,6 @@ int tegra_plane_state_add(struct tegra_plane *plane,
> {
> struct drm_crtc_state *crtc_state;
> struct tegra_dc_state *tegra;
> - struct drm_rect clip = {};
> int err;
>
> /* Propagate errors from allocation or locking failures. */
> @@ -90,12 +89,8 @@ int tegra_plane_state_add(struct tegra_plane *plane,
> if (IS_ERR(crtc_state))
> return PTR_ERR(crtc_state);
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> /* Check plane state for visibility and calculate clipping bounds */
> - err = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + err = drm_atomic_helper_check_plane_state(state, crtc_state,
> 0, INT_MAX, true, true);
> if (err < 0)
> return err;
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
> index 1107d6d03506..34ecc27fc30a 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
> @@ -443,17 +443,12 @@ int vmw_du_primary_plane_atomic_check(struct drm_plane *plane,
> {
> struct drm_crtc_state *crtc_state = NULL;
> struct drm_framebuffer *new_fb = state->fb;
> - struct drm_rect clip = {};
> int ret;
>
> if (state->crtc)
> crtc_state = drm_atomic_get_new_crtc_state(state->state, state->crtc);
>
> - if (crtc_state && crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + ret = drm_atomic_helper_check_plane_state(state, crtc_state,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> false, true);
> diff --git a/drivers/gpu/drm/zte/zx_plane.c b/drivers/gpu/drm/zte/zx_plane.c
> index 8e1f34274e24..94545adac50d 100644
> --- a/drivers/gpu/drm/zte/zx_plane.c
> +++ b/drivers/gpu/drm/zte/zx_plane.c
> @@ -55,7 +55,6 @@ static int zx_vl_plane_atomic_check(struct drm_plane *plane,
> struct drm_framebuffer *fb = plane_state->fb;
> struct drm_crtc *crtc = plane_state->crtc;
> struct drm_crtc_state *crtc_state;
> - struct drm_rect clip = {};
> int min_scale = FRAC_16_16(1, 8);
> int max_scale = FRAC_16_16(8, 1);
>
> @@ -75,12 +74,8 @@ static int zx_vl_plane_atomic_check(struct drm_plane *plane,
> if (!plane_state->crtc)
> return -EINVAL;
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> return drm_atomic_helper_check_plane_state(plane_state, crtc_state,
> - &clip, min_scale, max_scale,
> + min_scale, max_scale,
> true, true);
> }
>
> @@ -291,7 +286,6 @@ static int zx_gl_plane_atomic_check(struct drm_plane *plane,
> struct drm_framebuffer *fb = plane_state->fb;
> struct drm_crtc *crtc = plane_state->crtc;
> struct drm_crtc_state *crtc_state;
> - struct drm_rect clip = {};
>
> if (!crtc || !fb)
> return 0;
> @@ -309,12 +303,7 @@ static int zx_gl_plane_atomic_check(struct drm_plane *plane,
> if (!plane_state->crtc)
> return -EINVAL;
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> return drm_atomic_helper_check_plane_state(plane_state, crtc_state,
> - &clip,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> false, true);
> diff --git a/include/drm/drm_atomic_helper.h b/include/drm/drm_atomic_helper.h
> index 4842ee9485ce..26aaba58d6ce 100644
> --- a/include/drm/drm_atomic_helper.h
> +++ b/include/drm/drm_atomic_helper.h
> @@ -40,7 +40,6 @@ int drm_atomic_helper_check_modeset(struct drm_device *dev,
> struct drm_atomic_state *state);
> int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
> const struct drm_crtc_state *crtc_state,
> - const struct drm_rect *clip,
> int min_scale,
> int max_scale,
> bool can_position,
> diff --git a/include/drm/drm_plane_helper.h b/include/drm/drm_plane_helper.h
> index 8aa49c0ecd4d..28d7ce620729 100644
> --- a/include/drm/drm_plane_helper.h
> +++ b/include/drm/drm_plane_helper.h
> @@ -43,7 +43,6 @@ int drm_plane_helper_check_update(struct drm_plane *plane,
> struct drm_framebuffer *fb,
> struct drm_rect *src,
> struct drm_rect *dest,
> - const struct drm_rect *clip,
> unsigned int rotation,
> int min_scale,
> int max_scale,
> --
> 2.13.6
>
--
====================
| I would like to |
| fix the world, |
| but they're not |
| giving me the |
\ source code! /
---------------
¯\_(ツ)_/¯
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 5/5] drm: Don't pass clip to drm_atomic_helper_check_plane_state()
@ 2018-01-23 17:46 ` Liviu Dudau
0 siblings, 0 replies; 34+ messages in thread
From: Liviu Dudau @ 2018-01-23 17:46 UTC (permalink / raw)
To: Ville Syrjala
Cc: dri-devel, Brian Starkey, Mali DP Maintainers, Daniel Vetter,
Gustavo Padovan, Sean Paul, Philipp Zabel, CK Hu, Neil Armstrong,
Rob Clark, Ben Skeggs, Laurent Pinchart, Sandy Huang,
Heiko Stübner, Maxime Ripard, Thierry Reding,
VMware Graphics, Sinclair Yeh, Thomas Hellstrom, Shawn Guo,
Archit Taneja, linux-amlogic, linux-arm-msm, freedreno, nouveau,
linux-renesas-soc, linux-tegra, Russell King
On Tue, Jan 23, 2018 at 07:08:57PM +0200, Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Move the plane clip rectangle handling into
> drm_atomic_helper_check_plane_state(). Drivers no longer
> have to worry about such mundane details.
>
> v2: Convert armada, rcar, and sun4i as well
>
> Cc: Liviu Dudau <liviu.dudau@arm.com>
> Cc: Brian Starkey <brian.starkey@arm.com>
> Cc: Mali DP Maintainers <malidp@foss.arm.com>
> Cc: Daniel Vetter <daniel.vetter@intel.com>
> Cc: Gustavo Padovan <gustavo@padovan.org>
> Cc: Sean Paul <seanpaul@chromium.org>
> Cc: Philipp Zabel <p.zabel@pengutronix.de>
> Cc: CK Hu <ck.hu@mediatek.com>
> Cc: Neil Armstrong <narmstrong@baylibre.com>
> Cc: Rob Clark <robdclark@gmail.com>
> Cc: Ben Skeggs <bskeggs@redhat.com>
> Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> Cc: Sandy Huang <hjc@rock-chips.com>
> Cc: "Heiko Stübner" <heiko@sntech.de>
> Cc: Maxime Ripard <maxime.ripard@free-electrons.com>
> Cc: Thierry Reding <thierry.reding@gmail.com>
> Cc: VMware Graphics <linux-graphics-maintainer@vmware.com>
> Cc: Sinclair Yeh <syeh@vmware.com>
> Cc: Thomas Hellstrom <thellstrom@vmware.com>
> Cc: Shawn Guo <shawnguo@kernel.org>
> Cc: Archit Taneja <architt@codeaurora.org>
> Cc: linux-amlogic@lists.infradead.org
> Cc: linux-arm-msm@vger.kernel.org
> Cc: freedreno@lists.freedesktop.org
> Cc: nouveau@lists.freedesktop.org
> Cc: linux-renesas-soc@vger.kernel.org
> Cc: linux-tegra@vger.kernel.org
> Cc: Russell King <rmk+kernel@armlinux.org.uk>
> Suggested-by: Daniel Vetter <daniel@ffwll.ch>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> Reviewed-by: Thierry Reding <treding@nvidia.com>
> Reviewed-by: Archit Taneja <architt@codeaurora.org> #msm
> ---
> drivers/gpu/drm/arm/hdlcd_crtc.c | 7 +------
> drivers/gpu/drm/arm/malidp_planes.c | 7 +------
> drivers/gpu/drm/armada/armada_crtc.c | 8 ++------
> drivers/gpu/drm/armada/armada_overlay.c | 8 ++------
> drivers/gpu/drm/drm_atomic_helper.c | 12 +++++++-----
> drivers/gpu/drm/drm_plane_helper.c | 11 +++--------
> drivers/gpu/drm/drm_simple_kms_helper.c | 6 ------
> drivers/gpu/drm/i915/intel_display.c | 12 ------------
> drivers/gpu/drm/imx/ipuv3-plane.c | 7 +------
> drivers/gpu/drm/mediatek/mtk_drm_plane.c | 7 +------
> drivers/gpu/drm/meson/meson_plane.c | 7 +------
> drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c | 14 ++------------
> drivers/gpu/drm/nouveau/nv50_display.c | 12 ------------
> drivers/gpu/drm/rcar-du/rcar_du_plane.c | 7 +------
> drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 7 +------
> drivers/gpu/drm/sun4i/sun8i_ui_layer.c | 7 +------
> drivers/gpu/drm/sun4i/sun8i_vi_layer.c | 7 +------
> drivers/gpu/drm/tegra/plane.c | 7 +------
> drivers/gpu/drm/vmwgfx/vmwgfx_kms.c | 7 +------
> drivers/gpu/drm/zte/zx_plane.c | 13 +------------
> include/drm/drm_atomic_helper.h | 1 -
> include/drm/drm_plane_helper.h | 1 -
> 22 files changed, 28 insertions(+), 147 deletions(-)
>
> diff --git a/drivers/gpu/drm/arm/hdlcd_crtc.c b/drivers/gpu/drm/arm/hdlcd_crtc.c
> index 877647ef35a9..cf5cbd63ecdf 100644
> --- a/drivers/gpu/drm/arm/hdlcd_crtc.c
> +++ b/drivers/gpu/drm/arm/hdlcd_crtc.c
> @@ -229,7 +229,6 @@ static const struct drm_crtc_helper_funcs hdlcd_crtc_helper_funcs = {
> static int hdlcd_plane_atomic_check(struct drm_plane *plane,
> struct drm_plane_state *state)
> {
> - struct drm_rect clip = { 0 };
> struct drm_crtc_state *crtc_state;
> u32 src_h = state->src_h >> 16;
>
> @@ -249,11 +248,7 @@ static int hdlcd_plane_atomic_check(struct drm_plane *plane,
> return -EINVAL;
> }
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - return drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + return drm_atomic_helper_check_plane_state(state, crtc_state,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> false, true);
> diff --git a/drivers/gpu/drm/arm/malidp_planes.c b/drivers/gpu/drm/arm/malidp_planes.c
> index 2885d69af456..ee32361c87ac 100644
> --- a/drivers/gpu/drm/arm/malidp_planes.c
> +++ b/drivers/gpu/drm/arm/malidp_planes.c
> @@ -141,18 +141,13 @@ static int malidp_se_check_scaling(struct malidp_plane *mp,
> struct drm_crtc_state *crtc_state =
> drm_atomic_get_existing_crtc_state(state->state, state->crtc);
> struct malidp_crtc_state *mc;
> - struct drm_rect clip = { 0 };
> u32 src_w, src_h;
> int ret;
>
> if (!crtc_state)
> return -EINVAL;
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + ret = drm_atomic_helper_check_plane_state(state, crtc_state,
> 0, INT_MAX, true, true);
> if (ret)
> return ret;
For the HDLCD and Mali DP changes:
Acked-by: Liviu Dudau <liviu.dudau@arm.com>
Best regards,
Liviu
> diff --git a/drivers/gpu/drm/armada/armada_crtc.c b/drivers/gpu/drm/armada/armada_crtc.c
> index fdc34ad4ca62..03eeee11dd5b 100644
> --- a/drivers/gpu/drm/armada/armada_crtc.c
> +++ b/drivers/gpu/drm/armada/armada_crtc.c
> @@ -1203,15 +1203,11 @@ static int armada_drm_primary_update(struct drm_plane *plane,
> struct drm_crtc_state crtc_state = {
> .crtc = crtc,
> .enable = crtc->enabled,
> + .mode = crtc->mode,
> };
> - struct drm_rect clip = {};
> int ret;
>
> - if (crtc->enabled)
> - drm_mode_get_hv_timing(&crtc->mode,
> - &clip.x2, &clip.y2);
> -
> - ret = drm_atomic_helper_check_plane_state(&state, &crtc_state, &clip, 0,
> + ret = drm_atomic_helper_check_plane_state(&state, &crtc_state, 0,
> INT_MAX, true, false);
> if (ret)
> return ret;
> diff --git a/drivers/gpu/drm/armada/armada_overlay.c b/drivers/gpu/drm/armada/armada_overlay.c
> index 4f2a7a6e0fd3..c391955009d6 100644
> --- a/drivers/gpu/drm/armada/armada_overlay.c
> +++ b/drivers/gpu/drm/armada/armada_overlay.c
> @@ -208,19 +208,15 @@ armada_ovl_plane_update(struct drm_plane *plane, struct drm_crtc *crtc,
> struct drm_crtc_state crtc_state = {
> .crtc = crtc,
> .enable = crtc->enabled,
> + .mode = crtc->mode,
> };
> - struct drm_rect clip = {};
> int ret;
>
> trace_armada_ovl_plane_update(plane, crtc, fb,
> crtc_x, crtc_y, crtc_w, crtc_h,
> src_x, src_y, src_w, src_h);
>
> - if (crtc->enabled)
> - drm_mode_get_hv_timing(&crtc->mode,
> - &clip.x2, &clip.y2);
> -
> - ret = drm_atomic_helper_check_plane_state(&state, &crtc_state, &clip, 0,
> + ret = drm_atomic_helper_check_plane_state(&state, &crtc_state, 0,
> INT_MAX, true, false);
> if (ret)
> return ret;
> diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
> index ab4032167094..9fb96f9cc36e 100644
> --- a/drivers/gpu/drm/drm_atomic_helper.c
> +++ b/drivers/gpu/drm/drm_atomic_helper.c
> @@ -699,7 +699,6 @@ EXPORT_SYMBOL(drm_atomic_helper_check_modeset);
> * drm_atomic_helper_check_plane_state() - Check plane state for validity
> * @plane_state: plane state to check
> * @crtc_state: crtc state to check
> - * @clip: integer clipping coordinates
> * @min_scale: minimum @src:@dest scaling factor in 16.16 fixed point
> * @max_scale: maximum @src:@dest scaling factor in 16.16 fixed point
> * @can_position: is it legal to position the plane such that it
> @@ -719,7 +718,6 @@ EXPORT_SYMBOL(drm_atomic_helper_check_modeset);
> */
> int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
> const struct drm_crtc_state *crtc_state,
> - const struct drm_rect *clip,
> int min_scale,
> int max_scale,
> bool can_position,
> @@ -729,6 +727,7 @@ int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
> struct drm_rect *src = &plane_state->src;
> struct drm_rect *dst = &plane_state->dst;
> unsigned int rotation = plane_state->rotation;
> + struct drm_rect clip = {};
> int hscale, vscale;
>
> WARN_ON(plane_state->crtc && plane_state->crtc != crtc_state->crtc);
> @@ -764,7 +763,10 @@ int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
> return -ERANGE;
> }
>
> - plane_state->visible = drm_rect_clip_scaled(src, dst, clip, hscale, vscale);
> + if (crtc_state->enable)
> + drm_mode_get_hv_timing(&crtc_state->mode, &clip.x2, &clip.y2);
> +
> + plane_state->visible = drm_rect_clip_scaled(src, dst, &clip, hscale, vscale);
>
> drm_rect_rotate_inv(src, fb->width << 16, fb->height << 16, rotation);
>
> @@ -778,10 +780,10 @@ int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
> */
> return 0;
>
> - if (!can_position && !drm_rect_equals(dst, clip)) {
> + if (!can_position && !drm_rect_equals(dst, &clip)) {
> DRM_DEBUG_KMS("Plane must cover entire CRTC\n");
> drm_rect_debug_print("dst: ", dst, false);
> - drm_rect_debug_print("clip: ", clip, false);
> + drm_rect_debug_print("clip: ", &clip, false);
> return -EINVAL;
> }
>
> diff --git a/drivers/gpu/drm/drm_plane_helper.c b/drivers/gpu/drm/drm_plane_helper.c
> index f1be8cd4e387..f88f68161519 100644
> --- a/drivers/gpu/drm/drm_plane_helper.c
> +++ b/drivers/gpu/drm/drm_plane_helper.c
> @@ -106,7 +106,6 @@ static int get_connectors_for_crtc(struct drm_crtc *crtc,
> * @fb: framebuffer to flip onto plane
> * @src: source coordinates in 16.16 fixed point
> * @dst: integer destination coordinates
> - * @clip: integer clipping coordinates
> * @rotation: plane rotation
> * @min_scale: minimum @src:@dest scaling factor in 16.16 fixed point
> * @max_scale: maximum @src:@dest scaling factor in 16.16 fixed point
> @@ -131,7 +130,6 @@ int drm_plane_helper_check_update(struct drm_plane *plane,
> struct drm_framebuffer *fb,
> struct drm_rect *src,
> struct drm_rect *dst,
> - const struct drm_rect *clip,
> unsigned int rotation,
> int min_scale,
> int max_scale,
> @@ -157,11 +155,12 @@ int drm_plane_helper_check_update(struct drm_plane *plane,
> struct drm_crtc_state crtc_state = {
> .crtc = crtc,
> .enable = crtc->enabled,
> + .mode = crtc->mode,
> };
> int ret;
>
> ret = drm_atomic_helper_check_plane_state(&plane_state, &crtc_state,
> - clip, min_scale, max_scale,
> + min_scale, max_scale,
> can_position,
> can_update_disabled);
> if (ret)
> @@ -239,16 +238,12 @@ int drm_primary_helper_update(struct drm_plane *plane, struct drm_crtc *crtc,
> .x2 = crtc_x + crtc_w,
> .y2 = crtc_y + crtc_h,
> };
> - const struct drm_rect clip = {
> - .x2 = crtc->mode.hdisplay,
> - .y2 = crtc->mode.vdisplay,
> - };
> struct drm_connector **connector_list;
> int num_connectors, ret;
> bool visible;
>
> ret = drm_plane_helper_check_update(plane, crtc, fb,
> - &src, &dest, &clip,
> + &src, &dest,
> DRM_MODE_ROTATE_0,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> diff --git a/drivers/gpu/drm/drm_simple_kms_helper.c b/drivers/gpu/drm/drm_simple_kms_helper.c
> index 9d3f6b70812c..165bc756af96 100644
> --- a/drivers/gpu/drm/drm_simple_kms_helper.c
> +++ b/drivers/gpu/drm/drm_simple_kms_helper.c
> @@ -89,7 +89,6 @@ static const struct drm_crtc_funcs drm_simple_kms_crtc_funcs = {
> static int drm_simple_kms_plane_atomic_check(struct drm_plane *plane,
> struct drm_plane_state *plane_state)
> {
> - struct drm_rect clip = { 0 };
> struct drm_simple_display_pipe *pipe;
> struct drm_crtc_state *crtc_state;
> int ret;
> @@ -100,12 +99,7 @@ static int drm_simple_kms_plane_atomic_check(struct drm_plane *plane,
> if (!crtc_state->enable)
> return 0; /* nothing to check when disabling or disabled */
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> ret = drm_atomic_helper_check_plane_state(plane_state, crtc_state,
> - &clip,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> false, true);
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index d585ce4c8732..3933420c6911 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -9309,18 +9309,12 @@ static int intel_check_cursor(struct intel_crtc_state *crtc_state,
> struct intel_plane_state *plane_state)
> {
> const struct drm_framebuffer *fb = plane_state->base.fb;
> - struct drm_rect clip = {};
> int src_x, src_y;
> u32 offset;
> int ret;
>
> - if (crtc_state->base.enable)
> - drm_mode_get_hv_timing(&crtc_state->base.mode,
> - &clip.x2, &clip.y2);
> -
> ret = drm_atomic_helper_check_plane_state(&plane_state->base,
> &crtc_state->base,
> - &clip,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> true, true);
> @@ -12755,7 +12749,6 @@ intel_check_primary_plane(struct intel_plane *plane,
> int min_scale = DRM_PLANE_HELPER_NO_SCALING;
> int max_scale = DRM_PLANE_HELPER_NO_SCALING;
> bool can_position = false;
> - struct drm_rect clip = {};
> int ret;
>
> if (INTEL_GEN(dev_priv) >= 9) {
> @@ -12767,13 +12760,8 @@ intel_check_primary_plane(struct intel_plane *plane,
> can_position = true;
> }
>
> - if (crtc_state->base.enable)
> - drm_mode_get_hv_timing(&crtc_state->base.mode,
> - &clip.x2, &clip.y2);
> -
> ret = drm_atomic_helper_check_plane_state(&state->base,
> &crtc_state->base,
> - &clip,
> min_scale, max_scale,
> can_position, true);
> if (ret)
> diff --git a/drivers/gpu/drm/imx/ipuv3-plane.c b/drivers/gpu/drm/imx/ipuv3-plane.c
> index 150628293c51..d7e3583e608e 100644
> --- a/drivers/gpu/drm/imx/ipuv3-plane.c
> +++ b/drivers/gpu/drm/imx/ipuv3-plane.c
> @@ -351,7 +351,6 @@ static int ipu_plane_atomic_check(struct drm_plane *plane,
> struct drm_framebuffer *old_fb = old_state->fb;
> unsigned long eba, ubo, vbo, old_ubo, old_vbo, alpha_eba;
> bool can_position = (plane->type == DRM_PLANE_TYPE_OVERLAY);
> - struct drm_rect clip = {};
> int hsub, vsub;
> int ret;
>
> @@ -367,11 +366,7 @@ static int ipu_plane_atomic_check(struct drm_plane *plane,
> if (WARN_ON(!crtc_state))
> return -EINVAL;
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + ret = drm_atomic_helper_check_plane_state(state, crtc_state,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> can_position, true);
> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_plane.c b/drivers/gpu/drm/mediatek/mtk_drm_plane.c
> index b5c6eec9a584..2f4b0ffee598 100644
> --- a/drivers/gpu/drm/mediatek/mtk_drm_plane.c
> +++ b/drivers/gpu/drm/mediatek/mtk_drm_plane.c
> @@ -91,7 +91,6 @@ static int mtk_plane_atomic_check(struct drm_plane *plane,
> {
> struct drm_framebuffer *fb = state->fb;
> struct drm_crtc_state *crtc_state;
> - struct drm_rect clip = { 0, };
>
> if (!fb)
> return 0;
> @@ -108,11 +107,7 @@ static int mtk_plane_atomic_check(struct drm_plane *plane,
> if (IS_ERR(crtc_state))
> return PTR_ERR(crtc_state);
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - return drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + return drm_atomic_helper_check_plane_state(state, crtc_state,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> true, true);
> diff --git a/drivers/gpu/drm/meson/meson_plane.c b/drivers/gpu/drm/meson/meson_plane.c
> index 3801bee1f9e6..c78a3a59f58c 100644
> --- a/drivers/gpu/drm/meson/meson_plane.c
> +++ b/drivers/gpu/drm/meson/meson_plane.c
> @@ -49,7 +49,6 @@ static int meson_plane_atomic_check(struct drm_plane *plane,
> struct drm_plane_state *state)
> {
> struct drm_crtc_state *crtc_state;
> - struct drm_rect clip = { 0, };
>
> if (!state->crtc)
> return 0;
> @@ -58,11 +57,7 @@ static int meson_plane_atomic_check(struct drm_plane *plane,
> if (IS_ERR(crtc_state))
> return PTR_ERR(crtc_state);
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - return drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + return drm_atomic_helper_check_plane_state(state, crtc_state,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> true, true);
> diff --git a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c
> index 98d4d7331767..44fc9fe4737a 100644
> --- a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c
> +++ b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c
> @@ -286,7 +286,6 @@ static int mdp5_plane_atomic_check_with_state(struct drm_crtc_state *crtc_state,
> uint32_t max_width, max_height;
> bool out_of_bounds = false;
> uint32_t caps = 0;
> - struct drm_rect clip = {};
> int min_scale, max_scale;
> int ret;
>
> @@ -323,11 +322,7 @@ static int mdp5_plane_atomic_check_with_state(struct drm_crtc_state *crtc_state,
> min_scale = FRAC_16_16(1, 8);
> max_scale = FRAC_16_16(8, 1);
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + ret = drm_atomic_helper_check_plane_state(state, crtc_state,
> min_scale, max_scale,
> true, true);
> if (ret)
> @@ -471,7 +466,6 @@ static int mdp5_plane_atomic_async_check(struct drm_plane *plane,
> {
> struct mdp5_plane_state *mdp5_state = to_mdp5_plane_state(state);
> struct drm_crtc_state *crtc_state;
> - struct drm_rect clip = {};
> int min_scale, max_scale;
> int ret;
>
> @@ -502,11 +496,7 @@ static int mdp5_plane_atomic_async_check(struct drm_plane *plane,
> min_scale = FRAC_16_16(1, 8);
> max_scale = FRAC_16_16(8, 1);
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + ret = drm_atomic_helper_check_plane_state(state, crtc_state,
> min_scale, max_scale,
> true, true);
> if (ret)
> diff --git a/drivers/gpu/drm/nouveau/nv50_display.c b/drivers/gpu/drm/nouveau/nv50_display.c
> index 5a9a51c735f0..eea94c098237 100644
> --- a/drivers/gpu/drm/nouveau/nv50_display.c
> +++ b/drivers/gpu/drm/nouveau/nv50_display.c
> @@ -1135,15 +1135,9 @@ static int
> nv50_curs_acquire(struct nv50_wndw *wndw, struct nv50_wndw_atom *asyw,
> struct nv50_head_atom *asyh)
> {
> - struct drm_rect clip = {};
> int ret;
>
> - if (asyh->state.enable)
> - drm_mode_get_hv_timing(&asyh->state.mode,
> - &clip.x2, &clip.y2);
> -
> ret = drm_atomic_helper_check_plane_state(&asyw->state, &asyh->state,
> - &clip,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> true, true);
> @@ -1427,18 +1421,12 @@ nv50_base_acquire(struct nv50_wndw *wndw, struct nv50_wndw_atom *asyw,
> struct nv50_head_atom *asyh)
> {
> const struct drm_framebuffer *fb = asyw->state.fb;
> - struct drm_rect clip = {};
> int ret;
>
> if (!fb->format->depth)
> return -EINVAL;
>
> - if (asyh->state.enable)
> - drm_mode_get_hv_timing(&asyh->state.mode,
> - &clip.x2, &clip.y2);
> -
> ret = drm_atomic_helper_check_plane_state(&asyw->state, &asyh->state,
> - &clip,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> false, true);
> diff --git a/drivers/gpu/drm/rcar-du/rcar_du_plane.c b/drivers/gpu/drm/rcar-du/rcar_du_plane.c
> index 5687a94d4cb1..68556bd9dad2 100644
> --- a/drivers/gpu/drm/rcar-du/rcar_du_plane.c
> +++ b/drivers/gpu/drm/rcar-du/rcar_du_plane.c
> @@ -572,7 +572,6 @@ int __rcar_du_plane_atomic_check(struct drm_plane *plane,
> {
> struct drm_device *dev = plane->dev;
> struct drm_crtc_state *crtc_state;
> - struct drm_rect clip = {};
> int ret;
>
> if (!state->crtc) {
> @@ -589,11 +588,7 @@ int __rcar_du_plane_atomic_check(struct drm_plane *plane,
> if (IS_ERR(crtc_state))
> return PTR_ERR(crtc_state);
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + ret = drm_atomic_helper_check_plane_state(state, crtc_state,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> true, true);
> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
> index cd2c72389629..b95e9d45a435 100644
> --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
> @@ -641,7 +641,6 @@ static int vop_plane_atomic_check(struct drm_plane *plane,
> struct vop_win *vop_win = to_vop_win(plane);
> const struct vop_win_data *win = vop_win->data;
> int ret;
> - struct drm_rect clip = {};
> int min_scale = win->phy->scl ? FRAC_16_16(1, 8) :
> DRM_PLANE_HELPER_NO_SCALING;
> int max_scale = win->phy->scl ? FRAC_16_16(8, 1) :
> @@ -654,11 +653,7 @@ static int vop_plane_atomic_check(struct drm_plane *plane,
> if (WARN_ON(!crtc_state))
> return -EINVAL;
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + ret = drm_atomic_helper_check_plane_state(state, crtc_state,
> min_scale, max_scale,
> true, true);
> if (ret)
> diff --git a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c
> index 2f0ccd50b54d..9a540330cb79 100644
> --- a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c
> +++ b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c
> @@ -211,7 +211,6 @@ static int sun8i_ui_layer_atomic_check(struct drm_plane *plane,
> struct drm_crtc *crtc = state->crtc;
> struct drm_crtc_state *crtc_state;
> int min_scale, max_scale;
> - struct drm_rect clip = {};
>
> if (!crtc)
> return 0;
> @@ -220,10 +219,6 @@ static int sun8i_ui_layer_atomic_check(struct drm_plane *plane,
> if (WARN_ON(!crtc_state))
> return -EINVAL;
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> min_scale = DRM_PLANE_HELPER_NO_SCALING;
> max_scale = DRM_PLANE_HELPER_NO_SCALING;
>
> @@ -232,7 +227,7 @@ static int sun8i_ui_layer_atomic_check(struct drm_plane *plane,
> max_scale = SUN8I_UI_SCALER_SCALE_MAX;
> }
>
> - return drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + return drm_atomic_helper_check_plane_state(state, crtc_state,
> min_scale, max_scale,
> true, true);
> }
> diff --git a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c
> index eb3bf2d7291a..5877f8ef5895 100644
> --- a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c
> +++ b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c
> @@ -239,7 +239,6 @@ static int sun8i_vi_layer_atomic_check(struct drm_plane *plane,
> struct drm_crtc *crtc = state->crtc;
> struct drm_crtc_state *crtc_state;
> int min_scale, max_scale;
> - struct drm_rect clip = {};
>
> if (!crtc)
> return 0;
> @@ -248,10 +247,6 @@ static int sun8i_vi_layer_atomic_check(struct drm_plane *plane,
> if (WARN_ON(!crtc_state))
> return -EINVAL;
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> min_scale = DRM_PLANE_HELPER_NO_SCALING;
> max_scale = DRM_PLANE_HELPER_NO_SCALING;
>
> @@ -260,7 +255,7 @@ static int sun8i_vi_layer_atomic_check(struct drm_plane *plane,
> max_scale = SUN8I_VI_SCALER_SCALE_MAX;
> }
>
> - return drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + return drm_atomic_helper_check_plane_state(state, crtc_state,
> min_scale, max_scale,
> true, true);
> }
> diff --git a/drivers/gpu/drm/tegra/plane.c b/drivers/gpu/drm/tegra/plane.c
> index 7267a01e6f08..a056fbf83b53 100644
> --- a/drivers/gpu/drm/tegra/plane.c
> +++ b/drivers/gpu/drm/tegra/plane.c
> @@ -82,7 +82,6 @@ int tegra_plane_state_add(struct tegra_plane *plane,
> {
> struct drm_crtc_state *crtc_state;
> struct tegra_dc_state *tegra;
> - struct drm_rect clip = {};
> int err;
>
> /* Propagate errors from allocation or locking failures. */
> @@ -90,12 +89,8 @@ int tegra_plane_state_add(struct tegra_plane *plane,
> if (IS_ERR(crtc_state))
> return PTR_ERR(crtc_state);
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> /* Check plane state for visibility and calculate clipping bounds */
> - err = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + err = drm_atomic_helper_check_plane_state(state, crtc_state,
> 0, INT_MAX, true, true);
> if (err < 0)
> return err;
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
> index 1107d6d03506..34ecc27fc30a 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
> @@ -443,17 +443,12 @@ int vmw_du_primary_plane_atomic_check(struct drm_plane *plane,
> {
> struct drm_crtc_state *crtc_state = NULL;
> struct drm_framebuffer *new_fb = state->fb;
> - struct drm_rect clip = {};
> int ret;
>
> if (state->crtc)
> crtc_state = drm_atomic_get_new_crtc_state(state->state, state->crtc);
>
> - if (crtc_state && crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + ret = drm_atomic_helper_check_plane_state(state, crtc_state,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> false, true);
> diff --git a/drivers/gpu/drm/zte/zx_plane.c b/drivers/gpu/drm/zte/zx_plane.c
> index 8e1f34274e24..94545adac50d 100644
> --- a/drivers/gpu/drm/zte/zx_plane.c
> +++ b/drivers/gpu/drm/zte/zx_plane.c
> @@ -55,7 +55,6 @@ static int zx_vl_plane_atomic_check(struct drm_plane *plane,
> struct drm_framebuffer *fb = plane_state->fb;
> struct drm_crtc *crtc = plane_state->crtc;
> struct drm_crtc_state *crtc_state;
> - struct drm_rect clip = {};
> int min_scale = FRAC_16_16(1, 8);
> int max_scale = FRAC_16_16(8, 1);
>
> @@ -75,12 +74,8 @@ static int zx_vl_plane_atomic_check(struct drm_plane *plane,
> if (!plane_state->crtc)
> return -EINVAL;
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> return drm_atomic_helper_check_plane_state(plane_state, crtc_state,
> - &clip, min_scale, max_scale,
> + min_scale, max_scale,
> true, true);
> }
>
> @@ -291,7 +286,6 @@ static int zx_gl_plane_atomic_check(struct drm_plane *plane,
> struct drm_framebuffer *fb = plane_state->fb;
> struct drm_crtc *crtc = plane_state->crtc;
> struct drm_crtc_state *crtc_state;
> - struct drm_rect clip = {};
>
> if (!crtc || !fb)
> return 0;
> @@ -309,12 +303,7 @@ static int zx_gl_plane_atomic_check(struct drm_plane *plane,
> if (!plane_state->crtc)
> return -EINVAL;
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> return drm_atomic_helper_check_plane_state(plane_state, crtc_state,
> - &clip,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> false, true);
> diff --git a/include/drm/drm_atomic_helper.h b/include/drm/drm_atomic_helper.h
> index 4842ee9485ce..26aaba58d6ce 100644
> --- a/include/drm/drm_atomic_helper.h
> +++ b/include/drm/drm_atomic_helper.h
> @@ -40,7 +40,6 @@ int drm_atomic_helper_check_modeset(struct drm_device *dev,
> struct drm_atomic_state *state);
> int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
> const struct drm_crtc_state *crtc_state,
> - const struct drm_rect *clip,
> int min_scale,
> int max_scale,
> bool can_position,
> diff --git a/include/drm/drm_plane_helper.h b/include/drm/drm_plane_helper.h
> index 8aa49c0ecd4d..28d7ce620729 100644
> --- a/include/drm/drm_plane_helper.h
> +++ b/include/drm/drm_plane_helper.h
> @@ -43,7 +43,6 @@ int drm_plane_helper_check_update(struct drm_plane *plane,
> struct drm_framebuffer *fb,
> struct drm_rect *src,
> struct drm_rect *dest,
> - const struct drm_rect *clip,
> unsigned int rotation,
> int min_scale,
> int max_scale,
> --
> 2.13.6
>
--
====================
| I would like to |
| fix the world, |
| but they're not |
| giving me the |
\ source code! /
---------------
¯\_(ツ)_/¯
^ permalink raw reply [flat|nested] 34+ messages in thread
* [PATCH 5/5] drm: Don't pass clip to drm_atomic_helper_check_plane_state()
2018-01-23 17:08 ` Ville Syrjala
(?)
@ 2018-01-23 18:06 ` Philipp Zabel
-1 siblings, 0 replies; 34+ messages in thread
From: Philipp Zabel @ 2018-01-23 18:06 UTC (permalink / raw)
To: linus-amlogic
On Tue, 2018-01-23 at 19:08 +0200, Ville Syrjala wrote:
> From: Ville Syrj?l? <ville.syrjala@linux.intel.com>
>
> Move the plane clip rectangle handling into
> drm_atomic_helper_check_plane_state(). Drivers no longer
> have to worry about such mundane details.
>
> v2: Convert armada, rcar, and sun4i as well
>
> Cc: Liviu Dudau <liviu.dudau@arm.com>
> Cc: Brian Starkey <brian.starkey@arm.com>
> Cc: Mali DP Maintainers <malidp@foss.arm.com>
> Cc: Daniel Vetter <daniel.vetter@intel.com>
> Cc: Gustavo Padovan <gustavo@padovan.org>
> Cc: Sean Paul <seanpaul@chromium.org>
> Cc: Philipp Zabel <p.zabel@pengutronix.de>
> Cc: CK Hu <ck.hu@mediatek.com>
> Cc: Neil Armstrong <narmstrong@baylibre.com>
> Cc: Rob Clark <robdclark@gmail.com>
> Cc: Ben Skeggs <bskeggs@redhat.com>
> Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> Cc: Sandy Huang <hjc@rock-chips.com>
> Cc: "Heiko St?bner" <heiko@sntech.de>
> Cc: Maxime Ripard <maxime.ripard@free-electrons.com>
> Cc: Thierry Reding <thierry.reding@gmail.com>
> Cc: VMware Graphics <linux-graphics-maintainer@vmware.com>
> Cc: Sinclair Yeh <syeh@vmware.com>
> Cc: Thomas Hellstrom <thellstrom@vmware.com>
> Cc: Shawn Guo <shawnguo@kernel.org>
> Cc: Archit Taneja <architt@codeaurora.org>
> Cc: linux-amlogic at lists.infradead.org
> Cc: linux-arm-msm at vger.kernel.org
> Cc: freedreno at lists.freedesktop.org
> Cc: nouveau at lists.freedesktop.org
> Cc: linux-renesas-soc at vger.kernel.org
> Cc: linux-tegra at vger.kernel.org
> Cc: Russell King <rmk+kernel@armlinux.org.uk>
> Suggested-by: Daniel Vetter <daniel@ffwll.ch>
> Signed-off-by: Ville Syrj?l? <ville.syrjala@linux.intel.com>
> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> Reviewed-by: Thierry Reding <treding@nvidia.com>
> Reviewed-by: Archit Taneja <architt@codeaurora.org> #msm
> ---
> drivers/gpu/drm/arm/hdlcd_crtc.c | 7 +------
> drivers/gpu/drm/arm/malidp_planes.c | 7 +------
> drivers/gpu/drm/armada/armada_crtc.c | 8 ++------
> drivers/gpu/drm/armada/armada_overlay.c | 8 ++------
> drivers/gpu/drm/drm_atomic_helper.c | 12 +++++++-----
> drivers/gpu/drm/drm_plane_helper.c | 11 +++--------
> drivers/gpu/drm/drm_simple_kms_helper.c | 6 ------
> drivers/gpu/drm/i915/intel_display.c | 12 ------------
> drivers/gpu/drm/imx/ipuv3-plane.c | 7 +------
> drivers/gpu/drm/mediatek/mtk_drm_plane.c | 7 +------
> drivers/gpu/drm/meson/meson_plane.c | 7 +------
> drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c | 14 ++------------
> drivers/gpu/drm/nouveau/nv50_display.c | 12 ------------
> drivers/gpu/drm/rcar-du/rcar_du_plane.c | 7 +------
> drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 7 +------
> drivers/gpu/drm/sun4i/sun8i_ui_layer.c | 7 +------
> drivers/gpu/drm/sun4i/sun8i_vi_layer.c | 7 +------
> drivers/gpu/drm/tegra/plane.c | 7 +------
> drivers/gpu/drm/vmwgfx/vmwgfx_kms.c | 7 +------
> drivers/gpu/drm/zte/zx_plane.c | 13 +------------
> include/drm/drm_atomic_helper.h | 1 -
> include/drm/drm_plane_helper.h | 1 -
> 22 files changed, 28 insertions(+), 147 deletions(-)
>
[...]
> diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
> index ab4032167094..9fb96f9cc36e 100644
> --- a/drivers/gpu/drm/drm_atomic_helper.c
> +++ b/drivers/gpu/drm/drm_atomic_helper.c
> @@ -699,7 +699,6 @@ EXPORT_SYMBOL(drm_atomic_helper_check_modeset);
> * drm_atomic_helper_check_plane_state() - Check plane state for validity
> * @plane_state: plane state to check
> * @crtc_state: crtc state to check
> - * @clip: integer clipping coordinates
> * @min_scale: minimum @src:@dest scaling factor in 16.16 fixed point
> * @max_scale: maximum @src:@dest scaling factor in 16.16 fixed point
> * @can_position: is it legal to position the plane such that it
> @@ -719,7 +718,6 @@ EXPORT_SYMBOL(drm_atomic_helper_check_modeset);
> */
> int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
> const struct drm_crtc_state *crtc_state,
> - const struct drm_rect *clip,
> int min_scale,
> int max_scale,
> bool can_position,
> @@ -729,6 +727,7 @@ int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
> struct drm_rect *src = &plane_state->src;
> struct drm_rect *dst = &plane_state->dst;
> unsigned int rotation = plane_state->rotation;
> + struct drm_rect clip = {};
> int hscale, vscale;
>
> WARN_ON(plane_state->crtc && plane_state->crtc != crtc_state->crtc);
> @@ -764,7 +763,10 @@ int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
> return -ERANGE;
> }
>
> - plane_state->visible = drm_rect_clip_scaled(src, dst, clip, hscale, vscale);
> + if (crtc_state->enable)
> + drm_mode_get_hv_timing(&crtc_state->mode, &clip.x2, &clip.y2);
> +
> + plane_state->visible = drm_rect_clip_scaled(src, dst, &clip, hscale, vscale);
>
> drm_rect_rotate_inv(src, fb->width << 16, fb->height << 16, rotation);
>
> @@ -778,10 +780,10 @@ int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
> */
> return 0;
>
> - if (!can_position && !drm_rect_equals(dst, clip)) {
> + if (!can_position && !drm_rect_equals(dst, &clip)) {
> DRM_DEBUG_KMS("Plane must cover entire CRTC\n");
> drm_rect_debug_print("dst: ", dst, false);
> - drm_rect_debug_print("clip: ", clip, false);
> + drm_rect_debug_print("clip: ", &clip, false);
> return -EINVAL;
> }
>
> diff --git a/drivers/gpu/drm/drm_plane_helper.c b/drivers/gpu/drm/drm_plane_helper.c
> index f1be8cd4e387..f88f68161519 100644
> --- a/drivers/gpu/drm/drm_plane_helper.c
> +++ b/drivers/gpu/drm/drm_plane_helper.c
> @@ -106,7 +106,6 @@ static int get_connectors_for_crtc(struct drm_crtc *crtc,
> * @fb: framebuffer to flip onto plane
> * @src: source coordinates in 16.16 fixed point
> * @dst: integer destination coordinates
> - * @clip: integer clipping coordinates
> * @rotation: plane rotation
> * @min_scale: minimum @src:@dest scaling factor in 16.16 fixed point
> * @max_scale: maximum @src:@dest scaling factor in 16.16 fixed point
> @@ -131,7 +130,6 @@ int drm_plane_helper_check_update(struct drm_plane *plane,
> struct drm_framebuffer *fb,
> struct drm_rect *src,
> struct drm_rect *dst,
> - const struct drm_rect *clip,
> unsigned int rotation,
> int min_scale,
> int max_scale,
> @@ -157,11 +155,12 @@ int drm_plane_helper_check_update(struct drm_plane *plane,
> struct drm_crtc_state crtc_state = {
> .crtc = crtc,
> .enable = crtc->enabled,
> + .mode = crtc->mode,
> };
> int ret;
>
> ret = drm_atomic_helper_check_plane_state(&plane_state, &crtc_state,
> - clip, min_scale, max_scale,
> + min_scale, max_scale,
> can_position,
> can_update_disabled);
> if (ret)
> @@ -239,16 +238,12 @@ int drm_primary_helper_update(struct drm_plane *plane, struct drm_crtc *crtc,
> .x2 = crtc_x + crtc_w,
> .y2 = crtc_y + crtc_h,
> };
> - const struct drm_rect clip = {
> - .x2 = crtc->mode.hdisplay,
> - .y2 = crtc->mode.vdisplay,
> - };
> struct drm_connector **connector_list;
> int num_connectors, ret;
> bool visible;
>
> ret = drm_plane_helper_check_update(plane, crtc, fb,
> - &src, &dest, &clip,
> + &src, &dest,
> DRM_MODE_ROTATE_0,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
[...]
> diff --git a/drivers/gpu/drm/imx/ipuv3-plane.c b/drivers/gpu/drm/imx/ipuv3-plane.c
> index 150628293c51..d7e3583e608e 100644
> --- a/drivers/gpu/drm/imx/ipuv3-plane.c
> +++ b/drivers/gpu/drm/imx/ipuv3-plane.c
> @@ -351,7 +351,6 @@ static int ipu_plane_atomic_check(struct drm_plane *plane,
> struct drm_framebuffer *old_fb = old_state->fb;
> unsigned long eba, ubo, vbo, old_ubo, old_vbo, alpha_eba;
> bool can_position = (plane->type == DRM_PLANE_TYPE_OVERLAY);
> - struct drm_rect clip = {};
> int hsub, vsub;
> int ret;
>
> @@ -367,11 +366,7 @@ static int ipu_plane_atomic_check(struct drm_plane *plane,
> if (WARN_ON(!crtc_state))
> return -EINVAL;
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + ret = drm_atomic_helper_check_plane_state(state, crtc_state,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> can_position, true);
> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_plane.c b/drivers/gpu/drm/mediatek/mtk_drm_plane.c
> index b5c6eec9a584..2f4b0ffee598 100644
> --- a/drivers/gpu/drm/mediatek/mtk_drm_plane.c
> +++ b/drivers/gpu/drm/mediatek/mtk_drm_plane.c
> @@ -91,7 +91,6 @@ static int mtk_plane_atomic_check(struct drm_plane *plane,
> {
> struct drm_framebuffer *fb = state->fb;
> struct drm_crtc_state *crtc_state;
> - struct drm_rect clip = { 0, };
>
> if (!fb)
> return 0;
> @@ -108,11 +107,7 @@ static int mtk_plane_atomic_check(struct drm_plane *plane,
> if (IS_ERR(crtc_state))
> return PTR_ERR(crtc_state);
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - return drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + return drm_atomic_helper_check_plane_state(state, crtc_state,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> true, true);
[...]
For the imx and mtk changes,
Acked-by: Philipp Zabel <p.zabel@pengutronix.de>
regards
Philipp
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 5/5] drm: Don't pass clip to drm_atomic_helper_check_plane_state()
@ 2018-01-23 18:06 ` Philipp Zabel
0 siblings, 0 replies; 34+ messages in thread
From: Philipp Zabel @ 2018-01-23 18:06 UTC (permalink / raw)
To: Ville Syrjala, dri-devel
Cc: Liviu Dudau, Brian Starkey, Mali DP Maintainers, Daniel Vetter,
Gustavo Padovan, Sean Paul, CK Hu, Neil Armstrong, Rob Clark,
Ben Skeggs, Laurent Pinchart, Sandy Huang, Heiko Stübner,
Maxime Ripard, Thierry Reding, VMware Graphics, Sinclair Yeh,
Thomas Hellstrom, Shawn Guo
On Tue, 2018-01-23 at 19:08 +0200, Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Move the plane clip rectangle handling into
> drm_atomic_helper_check_plane_state(). Drivers no longer
> have to worry about such mundane details.
>
> v2: Convert armada, rcar, and sun4i as well
>
> Cc: Liviu Dudau <liviu.dudau@arm.com>
> Cc: Brian Starkey <brian.starkey@arm.com>
> Cc: Mali DP Maintainers <malidp@foss.arm.com>
> Cc: Daniel Vetter <daniel.vetter@intel.com>
> Cc: Gustavo Padovan <gustavo@padovan.org>
> Cc: Sean Paul <seanpaul@chromium.org>
> Cc: Philipp Zabel <p.zabel@pengutronix.de>
> Cc: CK Hu <ck.hu@mediatek.com>
> Cc: Neil Armstrong <narmstrong@baylibre.com>
> Cc: Rob Clark <robdclark@gmail.com>
> Cc: Ben Skeggs <bskeggs@redhat.com>
> Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> Cc: Sandy Huang <hjc@rock-chips.com>
> Cc: "Heiko Stübner" <heiko@sntech.de>
> Cc: Maxime Ripard <maxime.ripard@free-electrons.com>
> Cc: Thierry Reding <thierry.reding@gmail.com>
> Cc: VMware Graphics <linux-graphics-maintainer@vmware.com>
> Cc: Sinclair Yeh <syeh@vmware.com>
> Cc: Thomas Hellstrom <thellstrom@vmware.com>
> Cc: Shawn Guo <shawnguo@kernel.org>
> Cc: Archit Taneja <architt@codeaurora.org>
> Cc: linux-amlogic@lists.infradead.org
> Cc: linux-arm-msm@vger.kernel.org
> Cc: freedreno@lists.freedesktop.org
> Cc: nouveau@lists.freedesktop.org
> Cc: linux-renesas-soc@vger.kernel.org
> Cc: linux-tegra@vger.kernel.org
> Cc: Russell King <rmk+kernel@armlinux.org.uk>
> Suggested-by: Daniel Vetter <daniel@ffwll.ch>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> Reviewed-by: Thierry Reding <treding@nvidia.com>
> Reviewed-by: Archit Taneja <architt@codeaurora.org> #msm
> ---
> drivers/gpu/drm/arm/hdlcd_crtc.c | 7 +------
> drivers/gpu/drm/arm/malidp_planes.c | 7 +------
> drivers/gpu/drm/armada/armada_crtc.c | 8 ++------
> drivers/gpu/drm/armada/armada_overlay.c | 8 ++------
> drivers/gpu/drm/drm_atomic_helper.c | 12 +++++++-----
> drivers/gpu/drm/drm_plane_helper.c | 11 +++--------
> drivers/gpu/drm/drm_simple_kms_helper.c | 6 ------
> drivers/gpu/drm/i915/intel_display.c | 12 ------------
> drivers/gpu/drm/imx/ipuv3-plane.c | 7 +------
> drivers/gpu/drm/mediatek/mtk_drm_plane.c | 7 +------
> drivers/gpu/drm/meson/meson_plane.c | 7 +------
> drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c | 14 ++------------
> drivers/gpu/drm/nouveau/nv50_display.c | 12 ------------
> drivers/gpu/drm/rcar-du/rcar_du_plane.c | 7 +------
> drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 7 +------
> drivers/gpu/drm/sun4i/sun8i_ui_layer.c | 7 +------
> drivers/gpu/drm/sun4i/sun8i_vi_layer.c | 7 +------
> drivers/gpu/drm/tegra/plane.c | 7 +------
> drivers/gpu/drm/vmwgfx/vmwgfx_kms.c | 7 +------
> drivers/gpu/drm/zte/zx_plane.c | 13 +------------
> include/drm/drm_atomic_helper.h | 1 -
> include/drm/drm_plane_helper.h | 1 -
> 22 files changed, 28 insertions(+), 147 deletions(-)
>
[...]
> diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
> index ab4032167094..9fb96f9cc36e 100644
> --- a/drivers/gpu/drm/drm_atomic_helper.c
> +++ b/drivers/gpu/drm/drm_atomic_helper.c
> @@ -699,7 +699,6 @@ EXPORT_SYMBOL(drm_atomic_helper_check_modeset);
> * drm_atomic_helper_check_plane_state() - Check plane state for validity
> * @plane_state: plane state to check
> * @crtc_state: crtc state to check
> - * @clip: integer clipping coordinates
> * @min_scale: minimum @src:@dest scaling factor in 16.16 fixed point
> * @max_scale: maximum @src:@dest scaling factor in 16.16 fixed point
> * @can_position: is it legal to position the plane such that it
> @@ -719,7 +718,6 @@ EXPORT_SYMBOL(drm_atomic_helper_check_modeset);
> */
> int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
> const struct drm_crtc_state *crtc_state,
> - const struct drm_rect *clip,
> int min_scale,
> int max_scale,
> bool can_position,
> @@ -729,6 +727,7 @@ int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
> struct drm_rect *src = &plane_state->src;
> struct drm_rect *dst = &plane_state->dst;
> unsigned int rotation = plane_state->rotation;
> + struct drm_rect clip = {};
> int hscale, vscale;
>
> WARN_ON(plane_state->crtc && plane_state->crtc != crtc_state->crtc);
> @@ -764,7 +763,10 @@ int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
> return -ERANGE;
> }
>
> - plane_state->visible = drm_rect_clip_scaled(src, dst, clip, hscale, vscale);
> + if (crtc_state->enable)
> + drm_mode_get_hv_timing(&crtc_state->mode, &clip.x2, &clip.y2);
> +
> + plane_state->visible = drm_rect_clip_scaled(src, dst, &clip, hscale, vscale);
>
> drm_rect_rotate_inv(src, fb->width << 16, fb->height << 16, rotation);
>
> @@ -778,10 +780,10 @@ int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
> */
> return 0;
>
> - if (!can_position && !drm_rect_equals(dst, clip)) {
> + if (!can_position && !drm_rect_equals(dst, &clip)) {
> DRM_DEBUG_KMS("Plane must cover entire CRTC\n");
> drm_rect_debug_print("dst: ", dst, false);
> - drm_rect_debug_print("clip: ", clip, false);
> + drm_rect_debug_print("clip: ", &clip, false);
> return -EINVAL;
> }
>
> diff --git a/drivers/gpu/drm/drm_plane_helper.c b/drivers/gpu/drm/drm_plane_helper.c
> index f1be8cd4e387..f88f68161519 100644
> --- a/drivers/gpu/drm/drm_plane_helper.c
> +++ b/drivers/gpu/drm/drm_plane_helper.c
> @@ -106,7 +106,6 @@ static int get_connectors_for_crtc(struct drm_crtc *crtc,
> * @fb: framebuffer to flip onto plane
> * @src: source coordinates in 16.16 fixed point
> * @dst: integer destination coordinates
> - * @clip: integer clipping coordinates
> * @rotation: plane rotation
> * @min_scale: minimum @src:@dest scaling factor in 16.16 fixed point
> * @max_scale: maximum @src:@dest scaling factor in 16.16 fixed point
> @@ -131,7 +130,6 @@ int drm_plane_helper_check_update(struct drm_plane *plane,
> struct drm_framebuffer *fb,
> struct drm_rect *src,
> struct drm_rect *dst,
> - const struct drm_rect *clip,
> unsigned int rotation,
> int min_scale,
> int max_scale,
> @@ -157,11 +155,12 @@ int drm_plane_helper_check_update(struct drm_plane *plane,
> struct drm_crtc_state crtc_state = {
> .crtc = crtc,
> .enable = crtc->enabled,
> + .mode = crtc->mode,
> };
> int ret;
>
> ret = drm_atomic_helper_check_plane_state(&plane_state, &crtc_state,
> - clip, min_scale, max_scale,
> + min_scale, max_scale,
> can_position,
> can_update_disabled);
> if (ret)
> @@ -239,16 +238,12 @@ int drm_primary_helper_update(struct drm_plane *plane, struct drm_crtc *crtc,
> .x2 = crtc_x + crtc_w,
> .y2 = crtc_y + crtc_h,
> };
> - const struct drm_rect clip = {
> - .x2 = crtc->mode.hdisplay,
> - .y2 = crtc->mode.vdisplay,
> - };
> struct drm_connector **connector_list;
> int num_connectors, ret;
> bool visible;
>
> ret = drm_plane_helper_check_update(plane, crtc, fb,
> - &src, &dest, &clip,
> + &src, &dest,
> DRM_MODE_ROTATE_0,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
[...]
> diff --git a/drivers/gpu/drm/imx/ipuv3-plane.c b/drivers/gpu/drm/imx/ipuv3-plane.c
> index 150628293c51..d7e3583e608e 100644
> --- a/drivers/gpu/drm/imx/ipuv3-plane.c
> +++ b/drivers/gpu/drm/imx/ipuv3-plane.c
> @@ -351,7 +351,6 @@ static int ipu_plane_atomic_check(struct drm_plane *plane,
> struct drm_framebuffer *old_fb = old_state->fb;
> unsigned long eba, ubo, vbo, old_ubo, old_vbo, alpha_eba;
> bool can_position = (plane->type == DRM_PLANE_TYPE_OVERLAY);
> - struct drm_rect clip = {};
> int hsub, vsub;
> int ret;
>
> @@ -367,11 +366,7 @@ static int ipu_plane_atomic_check(struct drm_plane *plane,
> if (WARN_ON(!crtc_state))
> return -EINVAL;
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + ret = drm_atomic_helper_check_plane_state(state, crtc_state,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> can_position, true);
> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_plane.c b/drivers/gpu/drm/mediatek/mtk_drm_plane.c
> index b5c6eec9a584..2f4b0ffee598 100644
> --- a/drivers/gpu/drm/mediatek/mtk_drm_plane.c
> +++ b/drivers/gpu/drm/mediatek/mtk_drm_plane.c
> @@ -91,7 +91,6 @@ static int mtk_plane_atomic_check(struct drm_plane *plane,
> {
> struct drm_framebuffer *fb = state->fb;
> struct drm_crtc_state *crtc_state;
> - struct drm_rect clip = { 0, };
>
> if (!fb)
> return 0;
> @@ -108,11 +107,7 @@ static int mtk_plane_atomic_check(struct drm_plane *plane,
> if (IS_ERR(crtc_state))
> return PTR_ERR(crtc_state);
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - return drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + return drm_atomic_helper_check_plane_state(state, crtc_state,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> true, true);
[...]
For the imx and mtk changes,
Acked-by: Philipp Zabel <p.zabel@pengutronix.de>
regards
Philipp
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 5/5] drm: Don't pass clip to drm_atomic_helper_check_plane_state()
@ 2018-01-23 18:06 ` Philipp Zabel
0 siblings, 0 replies; 34+ messages in thread
From: Philipp Zabel @ 2018-01-23 18:06 UTC (permalink / raw)
To: Ville Syrjala, dri-devel
Cc: Liviu Dudau, Brian Starkey, Mali DP Maintainers, Daniel Vetter,
Gustavo Padovan, Sean Paul, CK Hu, Neil Armstrong, Rob Clark,
Ben Skeggs, Laurent Pinchart, Sandy Huang, Heiko Stübner,
Maxime Ripard, Thierry Reding, VMware Graphics, Sinclair Yeh,
Thomas Hellstrom, Shawn Guo, Archit Taneja, linux-amlogic,
linux-arm-msm, freedreno, nouveau, linux-renesas-soc, linux-tegra,
Russell King
On Tue, 2018-01-23 at 19:08 +0200, Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Move the plane clip rectangle handling into
> drm_atomic_helper_check_plane_state(). Drivers no longer
> have to worry about such mundane details.
>
> v2: Convert armada, rcar, and sun4i as well
>
> Cc: Liviu Dudau <liviu.dudau@arm.com>
> Cc: Brian Starkey <brian.starkey@arm.com>
> Cc: Mali DP Maintainers <malidp@foss.arm.com>
> Cc: Daniel Vetter <daniel.vetter@intel.com>
> Cc: Gustavo Padovan <gustavo@padovan.org>
> Cc: Sean Paul <seanpaul@chromium.org>
> Cc: Philipp Zabel <p.zabel@pengutronix.de>
> Cc: CK Hu <ck.hu@mediatek.com>
> Cc: Neil Armstrong <narmstrong@baylibre.com>
> Cc: Rob Clark <robdclark@gmail.com>
> Cc: Ben Skeggs <bskeggs@redhat.com>
> Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> Cc: Sandy Huang <hjc@rock-chips.com>
> Cc: "Heiko Stübner" <heiko@sntech.de>
> Cc: Maxime Ripard <maxime.ripard@free-electrons.com>
> Cc: Thierry Reding <thierry.reding@gmail.com>
> Cc: VMware Graphics <linux-graphics-maintainer@vmware.com>
> Cc: Sinclair Yeh <syeh@vmware.com>
> Cc: Thomas Hellstrom <thellstrom@vmware.com>
> Cc: Shawn Guo <shawnguo@kernel.org>
> Cc: Archit Taneja <architt@codeaurora.org>
> Cc: linux-amlogic@lists.infradead.org
> Cc: linux-arm-msm@vger.kernel.org
> Cc: freedreno@lists.freedesktop.org
> Cc: nouveau@lists.freedesktop.org
> Cc: linux-renesas-soc@vger.kernel.org
> Cc: linux-tegra@vger.kernel.org
> Cc: Russell King <rmk+kernel@armlinux.org.uk>
> Suggested-by: Daniel Vetter <daniel@ffwll.ch>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> Reviewed-by: Thierry Reding <treding@nvidia.com>
> Reviewed-by: Archit Taneja <architt@codeaurora.org> #msm
> ---
> drivers/gpu/drm/arm/hdlcd_crtc.c | 7 +------
> drivers/gpu/drm/arm/malidp_planes.c | 7 +------
> drivers/gpu/drm/armada/armada_crtc.c | 8 ++------
> drivers/gpu/drm/armada/armada_overlay.c | 8 ++------
> drivers/gpu/drm/drm_atomic_helper.c | 12 +++++++-----
> drivers/gpu/drm/drm_plane_helper.c | 11 +++--------
> drivers/gpu/drm/drm_simple_kms_helper.c | 6 ------
> drivers/gpu/drm/i915/intel_display.c | 12 ------------
> drivers/gpu/drm/imx/ipuv3-plane.c | 7 +------
> drivers/gpu/drm/mediatek/mtk_drm_plane.c | 7 +------
> drivers/gpu/drm/meson/meson_plane.c | 7 +------
> drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c | 14 ++------------
> drivers/gpu/drm/nouveau/nv50_display.c | 12 ------------
> drivers/gpu/drm/rcar-du/rcar_du_plane.c | 7 +------
> drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 7 +------
> drivers/gpu/drm/sun4i/sun8i_ui_layer.c | 7 +------
> drivers/gpu/drm/sun4i/sun8i_vi_layer.c | 7 +------
> drivers/gpu/drm/tegra/plane.c | 7 +------
> drivers/gpu/drm/vmwgfx/vmwgfx_kms.c | 7 +------
> drivers/gpu/drm/zte/zx_plane.c | 13 +------------
> include/drm/drm_atomic_helper.h | 1 -
> include/drm/drm_plane_helper.h | 1 -
> 22 files changed, 28 insertions(+), 147 deletions(-)
>
[...]
> diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
> index ab4032167094..9fb96f9cc36e 100644
> --- a/drivers/gpu/drm/drm_atomic_helper.c
> +++ b/drivers/gpu/drm/drm_atomic_helper.c
> @@ -699,7 +699,6 @@ EXPORT_SYMBOL(drm_atomic_helper_check_modeset);
> * drm_atomic_helper_check_plane_state() - Check plane state for validity
> * @plane_state: plane state to check
> * @crtc_state: crtc state to check
> - * @clip: integer clipping coordinates
> * @min_scale: minimum @src:@dest scaling factor in 16.16 fixed point
> * @max_scale: maximum @src:@dest scaling factor in 16.16 fixed point
> * @can_position: is it legal to position the plane such that it
> @@ -719,7 +718,6 @@ EXPORT_SYMBOL(drm_atomic_helper_check_modeset);
> */
> int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
> const struct drm_crtc_state *crtc_state,
> - const struct drm_rect *clip,
> int min_scale,
> int max_scale,
> bool can_position,
> @@ -729,6 +727,7 @@ int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
> struct drm_rect *src = &plane_state->src;
> struct drm_rect *dst = &plane_state->dst;
> unsigned int rotation = plane_state->rotation;
> + struct drm_rect clip = {};
> int hscale, vscale;
>
> WARN_ON(plane_state->crtc && plane_state->crtc != crtc_state->crtc);
> @@ -764,7 +763,10 @@ int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
> return -ERANGE;
> }
>
> - plane_state->visible = drm_rect_clip_scaled(src, dst, clip, hscale, vscale);
> + if (crtc_state->enable)
> + drm_mode_get_hv_timing(&crtc_state->mode, &clip.x2, &clip.y2);
> +
> + plane_state->visible = drm_rect_clip_scaled(src, dst, &clip, hscale, vscale);
>
> drm_rect_rotate_inv(src, fb->width << 16, fb->height << 16, rotation);
>
> @@ -778,10 +780,10 @@ int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
> */
> return 0;
>
> - if (!can_position && !drm_rect_equals(dst, clip)) {
> + if (!can_position && !drm_rect_equals(dst, &clip)) {
> DRM_DEBUG_KMS("Plane must cover entire CRTC\n");
> drm_rect_debug_print("dst: ", dst, false);
> - drm_rect_debug_print("clip: ", clip, false);
> + drm_rect_debug_print("clip: ", &clip, false);
> return -EINVAL;
> }
>
> diff --git a/drivers/gpu/drm/drm_plane_helper.c b/drivers/gpu/drm/drm_plane_helper.c
> index f1be8cd4e387..f88f68161519 100644
> --- a/drivers/gpu/drm/drm_plane_helper.c
> +++ b/drivers/gpu/drm/drm_plane_helper.c
> @@ -106,7 +106,6 @@ static int get_connectors_for_crtc(struct drm_crtc *crtc,
> * @fb: framebuffer to flip onto plane
> * @src: source coordinates in 16.16 fixed point
> * @dst: integer destination coordinates
> - * @clip: integer clipping coordinates
> * @rotation: plane rotation
> * @min_scale: minimum @src:@dest scaling factor in 16.16 fixed point
> * @max_scale: maximum @src:@dest scaling factor in 16.16 fixed point
> @@ -131,7 +130,6 @@ int drm_plane_helper_check_update(struct drm_plane *plane,
> struct drm_framebuffer *fb,
> struct drm_rect *src,
> struct drm_rect *dst,
> - const struct drm_rect *clip,
> unsigned int rotation,
> int min_scale,
> int max_scale,
> @@ -157,11 +155,12 @@ int drm_plane_helper_check_update(struct drm_plane *plane,
> struct drm_crtc_state crtc_state = {
> .crtc = crtc,
> .enable = crtc->enabled,
> + .mode = crtc->mode,
> };
> int ret;
>
> ret = drm_atomic_helper_check_plane_state(&plane_state, &crtc_state,
> - clip, min_scale, max_scale,
> + min_scale, max_scale,
> can_position,
> can_update_disabled);
> if (ret)
> @@ -239,16 +238,12 @@ int drm_primary_helper_update(struct drm_plane *plane, struct drm_crtc *crtc,
> .x2 = crtc_x + crtc_w,
> .y2 = crtc_y + crtc_h,
> };
> - const struct drm_rect clip = {
> - .x2 = crtc->mode.hdisplay,
> - .y2 = crtc->mode.vdisplay,
> - };
> struct drm_connector **connector_list;
> int num_connectors, ret;
> bool visible;
>
> ret = drm_plane_helper_check_update(plane, crtc, fb,
> - &src, &dest, &clip,
> + &src, &dest,
> DRM_MODE_ROTATE_0,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
[...]
> diff --git a/drivers/gpu/drm/imx/ipuv3-plane.c b/drivers/gpu/drm/imx/ipuv3-plane.c
> index 150628293c51..d7e3583e608e 100644
> --- a/drivers/gpu/drm/imx/ipuv3-plane.c
> +++ b/drivers/gpu/drm/imx/ipuv3-plane.c
> @@ -351,7 +351,6 @@ static int ipu_plane_atomic_check(struct drm_plane *plane,
> struct drm_framebuffer *old_fb = old_state->fb;
> unsigned long eba, ubo, vbo, old_ubo, old_vbo, alpha_eba;
> bool can_position = (plane->type == DRM_PLANE_TYPE_OVERLAY);
> - struct drm_rect clip = {};
> int hsub, vsub;
> int ret;
>
> @@ -367,11 +366,7 @@ static int ipu_plane_atomic_check(struct drm_plane *plane,
> if (WARN_ON(!crtc_state))
> return -EINVAL;
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + ret = drm_atomic_helper_check_plane_state(state, crtc_state,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> can_position, true);
> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_plane.c b/drivers/gpu/drm/mediatek/mtk_drm_plane.c
> index b5c6eec9a584..2f4b0ffee598 100644
> --- a/drivers/gpu/drm/mediatek/mtk_drm_plane.c
> +++ b/drivers/gpu/drm/mediatek/mtk_drm_plane.c
> @@ -91,7 +91,6 @@ static int mtk_plane_atomic_check(struct drm_plane *plane,
> {
> struct drm_framebuffer *fb = state->fb;
> struct drm_crtc_state *crtc_state;
> - struct drm_rect clip = { 0, };
>
> if (!fb)
> return 0;
> @@ -108,11 +107,7 @@ static int mtk_plane_atomic_check(struct drm_plane *plane,
> if (IS_ERR(crtc_state))
> return PTR_ERR(crtc_state);
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - return drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + return drm_atomic_helper_check_plane_state(state, crtc_state,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> true, true);
[...]
For the imx and mtk changes,
Acked-by: Philipp Zabel <p.zabel@pengutronix.de>
regards
Philipp
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 3/5] drm/armada: Construct a temporary crtc state for plane checks
2018-01-23 17:08 ` [PATCH 3/5] drm/armada: Construct a temporary crtc state for plane checks Ville Syrjala
@ 2018-01-23 18:42 ` Russell King - ARM Linux
2018-01-23 19:02 ` Ville Syrjälä
0 siblings, 1 reply; 34+ messages in thread
From: Russell King - ARM Linux @ 2018-01-23 18:42 UTC (permalink / raw)
To: Ville Syrjala; +Cc: Dave Airlie, dri-devel
On Tue, Jan 23, 2018 at 07:08:55PM +0200, Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> As armada isn't an atomic driver trying to pass a non-populated
> crtc->state to drm_atomic_helper_check_plane_state() will end in tears.
> Construct a temporary crtc state a la drm_plane_helper_check_update()
> and pass that instead. For now we just really need crtc_state->enable
> to be there.
Would it be possible to solve this by having the atomic state setup
for non-atomic drivers instead, so we're not unwinding some of the
work that's already been done to try and convert drivers /to/
atomic modeset?
Thanks.
--
RMK's Patch system: http://www.armlinux.org.uk/developer/patches/
FTTC broadband for 0.8mile line in suburbia: sync at 8.8Mbps down 630kbps up
According to speedtest.net: 8.21Mbps down 510kbps up
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 3/5] drm/armada: Construct a temporary crtc state for plane checks
2018-01-23 18:42 ` Russell King - ARM Linux
@ 2018-01-23 19:02 ` Ville Syrjälä
2018-02-02 14:10 ` Ville Syrjälä
0 siblings, 1 reply; 34+ messages in thread
From: Ville Syrjälä @ 2018-01-23 19:02 UTC (permalink / raw)
To: Russell King - ARM Linux; +Cc: Dave Airlie, dri-devel
On Tue, Jan 23, 2018 at 06:42:00PM +0000, Russell King - ARM Linux wrote:
> On Tue, Jan 23, 2018 at 07:08:55PM +0200, Ville Syrjala wrote:
> > From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> >
> > As armada isn't an atomic driver trying to pass a non-populated
> > crtc->state to drm_atomic_helper_check_plane_state() will end in tears.
> > Construct a temporary crtc state a la drm_plane_helper_check_update()
> > and pass that instead. For now we just really need crtc_state->enable
> > to be there.
>
> Would it be possible to solve this by having the atomic state setup
> for non-atomic drivers instead, so we're not unwinding some of the
> work that's already been done to try and convert drivers /to/
> atomic modeset?
Dunno. Feels like a wasted effort adding more code that'll just get
ripped out as soon as the atomic conversion happens. And I'd rather
not have to worry about potentially stale states hanging around, in
case you forgot to update something somewhere.
In any case, I don't think this is unwinding anything. Once you have
the atomic conversion done sufficiently you can just drop these
temporary states. We already have the temp state for the plane here
anyway, and pairing that with a crtc state seems rather logical.
--
Ville Syrjälä
Intel OTC
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 1/5] drm/rcar-du: Use drm_mode_get_hv_timing() to populate plane clip rectangle
2018-01-23 17:08 [PATCH 1/5] drm/rcar-du: Use drm_mode_get_hv_timing() to populate plane clip rectangle Ville Syrjala
` (3 preceding siblings ...)
2018-01-23 17:08 ` Ville Syrjala
@ 2018-01-24 0:07 ` Laurent Pinchart
2018-01-24 15:01 ` Ville Syrjälä
4 siblings, 1 reply; 34+ messages in thread
From: Laurent Pinchart @ 2018-01-24 0:07 UTC (permalink / raw)
To: Ville Syrjala; +Cc: dri-devel
Hi Ville,
Thank you for the patch.
On Tuesday, 23 January 2018 19:08:53 EET Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Use drm_mode_get_hv_timing() to fill out the plane clip rectangle.
>
> No functional changes as the code already uses crtc_state->mode
> to populate the clip, which is also what drm_mode_get_hv_timing()
> uses.
>
> Once everyone agrees on this we can move the clip handling into
> drm_atomic_helper_check_plane_state().
>
> Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
> drivers/gpu/drm/rcar-du/rcar_du_plane.c | 9 ++++-----
> 1 file changed, 4 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/gpu/drm/rcar-du/rcar_du_plane.c
> b/drivers/gpu/drm/rcar-du/rcar_du_plane.c index 4a3d16cf3ed6..5687a94d4cb1
> 100644
> --- a/drivers/gpu/drm/rcar-du/rcar_du_plane.c
> +++ b/drivers/gpu/drm/rcar-du/rcar_du_plane.c
> @@ -572,7 +572,7 @@ int __rcar_du_plane_atomic_check(struct drm_plane
> *plane, {
> struct drm_device *dev = plane->dev;
> struct drm_crtc_state *crtc_state;
> - struct drm_rect clip;
> + struct drm_rect clip = {};
Nitpicking, isn't the correct C99 zero initializer { 0 } ? I doesn't matter
too much as the variable is removed in patch 5/5 but we could as well fix it
if needed.
Apart from that,
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> int ret;
>
> if (!state->crtc) {
> @@ -589,10 +589,9 @@ int __rcar_du_plane_atomic_check(struct drm_plane
> *plane, if (IS_ERR(crtc_state))
> return PTR_ERR(crtc_state);
>
> - clip.x1 = 0;
> - clip.y1 = 0;
> - clip.x2 = crtc_state->mode.hdisplay;
> - clip.y2 = crtc_state->mode.vdisplay;
> + if (crtc_state->enable)
> + drm_mode_get_hv_timing(&crtc_state->mode,
> + &clip.x2, &clip.y2);
>
> ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> DRM_PLANE_HELPER_NO_SCALING,
--
Regards,
Laurent Pinchart
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 5/5] drm: Don't pass clip to drm_atomic_helper_check_plane_state()
2018-01-23 17:08 ` Ville Syrjala
` (3 preceding siblings ...)
(?)
@ 2018-01-24 0:12 ` Laurent Pinchart
-1 siblings, 0 replies; 34+ messages in thread
From: Laurent Pinchart @ 2018-01-24 0:12 UTC (permalink / raw)
To: Ville Syrjala
Cc: Neil Armstrong, Liviu Dudau, dri-devel, Thierry Reding,
Daniel Vetter, Thomas Hellstrom, VMware Graphics, Ben Skeggs,
nouveau, Mali DP Maintainers, linux-arm-msm, Russell King,
linux-tegra, linux-amlogic, freedreno, linux-renesas-soc,
Maxime Ripard, Shawn Guo
Hi Ville,
Thank you for the patch.
On Tuesday, 23 January 2018 19:08:57 EET Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Move the plane clip rectangle handling into
> drm_atomic_helper_check_plane_state(). Drivers no longer
> have to worry about such mundane details.
>
> v2: Convert armada, rcar, and sun4i as well
>
> Cc: Liviu Dudau <liviu.dudau@arm.com>
> Cc: Brian Starkey <brian.starkey@arm.com>
> Cc: Mali DP Maintainers <malidp@foss.arm.com>
> Cc: Daniel Vetter <daniel.vetter@intel.com>
> Cc: Gustavo Padovan <gustavo@padovan.org>
> Cc: Sean Paul <seanpaul@chromium.org>
> Cc: Philipp Zabel <p.zabel@pengutronix.de>
> Cc: CK Hu <ck.hu@mediatek.com>
> Cc: Neil Armstrong <narmstrong@baylibre.com>
> Cc: Rob Clark <robdclark@gmail.com>
> Cc: Ben Skeggs <bskeggs@redhat.com>
> Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> Cc: Sandy Huang <hjc@rock-chips.com>
> Cc: "Heiko Stübner" <heiko@sntech.de>
> Cc: Maxime Ripard <maxime.ripard@free-electrons.com>
> Cc: Thierry Reding <thierry.reding@gmail.com>
> Cc: VMware Graphics <linux-graphics-maintainer@vmware.com>
> Cc: Sinclair Yeh <syeh@vmware.com>
> Cc: Thomas Hellstrom <thellstrom@vmware.com>
> Cc: Shawn Guo <shawnguo@kernel.org>
> Cc: Archit Taneja <architt@codeaurora.org>
> Cc: linux-amlogic@lists.infradead.org
> Cc: linux-arm-msm@vger.kernel.org
> Cc: freedreno@lists.freedesktop.org
> Cc: nouveau@lists.freedesktop.org
> Cc: linux-renesas-soc@vger.kernel.org
> Cc: linux-tegra@vger.kernel.org
> Cc: Russell King <rmk+kernel@armlinux.org.uk>
> Suggested-by: Daniel Vetter <daniel@ffwll.ch>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> Reviewed-by: Thierry Reding <treding@nvidia.com>
> Reviewed-by: Archit Taneja <architt@codeaurora.org> #msm
> ---
> drivers/gpu/drm/arm/hdlcd_crtc.c | 7 +------
> drivers/gpu/drm/arm/malidp_planes.c | 7 +------
> drivers/gpu/drm/armada/armada_crtc.c | 8 ++------
> drivers/gpu/drm/armada/armada_overlay.c | 8 ++------
> drivers/gpu/drm/drm_atomic_helper.c | 12 +++++++-----
> drivers/gpu/drm/drm_plane_helper.c | 11 +++--------
> drivers/gpu/drm/drm_simple_kms_helper.c | 6 ------
> drivers/gpu/drm/i915/intel_display.c | 12 ------------
> drivers/gpu/drm/imx/ipuv3-plane.c | 7 +------
> drivers/gpu/drm/mediatek/mtk_drm_plane.c | 7 +------
> drivers/gpu/drm/meson/meson_plane.c | 7 +------
> drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c | 14 ++------------
> drivers/gpu/drm/nouveau/nv50_display.c | 12 ------------
> drivers/gpu/drm/rcar-du/rcar_du_plane.c | 7 +------
> drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 7 +------
> drivers/gpu/drm/sun4i/sun8i_ui_layer.c | 7 +------
> drivers/gpu/drm/sun4i/sun8i_vi_layer.c | 7 +------
> drivers/gpu/drm/tegra/plane.c | 7 +------
> drivers/gpu/drm/vmwgfx/vmwgfx_kms.c | 7 +------
> drivers/gpu/drm/zte/zx_plane.c | 13 +------------
> include/drm/drm_atomic_helper.h | 1 -
> include/drm/drm_plane_helper.h | 1 -
> 22 files changed, 28 insertions(+), 147 deletions(-)
[snip]
> diff --git a/drivers/gpu/drm/drm_atomic_helper.c
> b/drivers/gpu/drm/drm_atomic_helper.c index ab4032167094..9fb96f9cc36e
> 100644
> --- a/drivers/gpu/drm/drm_atomic_helper.c
> +++ b/drivers/gpu/drm/drm_atomic_helper.c
> @@ -699,7 +699,6 @@ EXPORT_SYMBOL(drm_atomic_helper_check_modeset);
> * drm_atomic_helper_check_plane_state() - Check plane state for validity
> * @plane_state: plane state to check
> * @crtc_state: crtc state to check
> - * @clip: integer clipping coordinates
> * @min_scale: minimum @src:@dest scaling factor in 16.16 fixed point
> * @max_scale: maximum @src:@dest scaling factor in 16.16 fixed point
> * @can_position: is it legal to position the plane such that it
> @@ -719,7 +718,6 @@ EXPORT_SYMBOL(drm_atomic_helper_check_modeset);
> */
> int drm_atomic_helper_check_plane_state(struct drm_plane_state
> *plane_state, const struct drm_crtc_state *crtc_state,
> - const struct drm_rect *clip,
> int min_scale,
> int max_scale,
> bool can_position,
> @@ -729,6 +727,7 @@ int drm_atomic_helper_check_plane_state(struct
> drm_plane_state *plane_state, struct drm_rect *src = &plane_state->src;
> struct drm_rect *dst = &plane_state->dst;
> unsigned int rotation = plane_state->rotation;
> + struct drm_rect clip = {};
Isn't the correct C99 zero initializer { 0, } ?
Apart from that,
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> int hscale, vscale;
>
> WARN_ON(plane_state->crtc && plane_state->crtc != crtc_state->crtc);
> @@ -764,7 +763,10 @@ int drm_atomic_helper_check_plane_state(struct
> drm_plane_state *plane_state, return -ERANGE;
> }
>
> - plane_state->visible = drm_rect_clip_scaled(src, dst, clip, hscale,
> vscale);
> + if (crtc_state->enable)
> + drm_mode_get_hv_timing(&crtc_state->mode, &clip.x2, &clip.y2);
> +
> + plane_state->visible = drm_rect_clip_scaled(src, dst, &clip, hscale,
> vscale);
>
> drm_rect_rotate_inv(src, fb->width << 16, fb->height << 16, rotation);
>
> @@ -778,10 +780,10 @@ int drm_atomic_helper_check_plane_state(struct
> drm_plane_state *plane_state, */
> return 0;
>
> - if (!can_position && !drm_rect_equals(dst, clip)) {
> + if (!can_position && !drm_rect_equals(dst, &clip)) {
> DRM_DEBUG_KMS("Plane must cover entire CRTC\n");
> drm_rect_debug_print("dst: ", dst, false);
> - drm_rect_debug_print("clip: ", clip, false);
> + drm_rect_debug_print("clip: ", &clip, false);
> return -EINVAL;
> }
>
[snip]
--
Regards,
Laurent Pinchart
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 1/5] drm/rcar-du: Use drm_mode_get_hv_timing() to populate plane clip rectangle
2018-01-24 0:07 ` [PATCH 1/5] drm/rcar-du: Use drm_mode_get_hv_timing() to populate plane clip rectangle Laurent Pinchart
@ 2018-01-24 15:01 ` Ville Syrjälä
0 siblings, 0 replies; 34+ messages in thread
From: Ville Syrjälä @ 2018-01-24 15:01 UTC (permalink / raw)
To: Laurent Pinchart; +Cc: dri-devel
On Wed, Jan 24, 2018 at 02:07:30AM +0200, Laurent Pinchart wrote:
> Hi Ville,
>
> Thank you for the patch.
>
> On Tuesday, 23 January 2018 19:08:53 EET Ville Syrjala wrote:
> > From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> >
> > Use drm_mode_get_hv_timing() to fill out the plane clip rectangle.
> >
> > No functional changes as the code already uses crtc_state->mode
> > to populate the clip, which is also what drm_mode_get_hv_timing()
> > uses.
> >
> > Once everyone agrees on this we can move the clip handling into
> > drm_atomic_helper_check_plane_state().
> >
> > Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > ---
> > drivers/gpu/drm/rcar-du/rcar_du_plane.c | 9 ++++-----
> > 1 file changed, 4 insertions(+), 5 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/rcar-du/rcar_du_plane.c
> > b/drivers/gpu/drm/rcar-du/rcar_du_plane.c index 4a3d16cf3ed6..5687a94d4cb1
> > 100644
> > --- a/drivers/gpu/drm/rcar-du/rcar_du_plane.c
> > +++ b/drivers/gpu/drm/rcar-du/rcar_du_plane.c
> > @@ -572,7 +572,7 @@ int __rcar_du_plane_atomic_check(struct drm_plane
> > *plane, {
> > struct drm_device *dev = plane->dev;
> > struct drm_crtc_state *crtc_state;
> > - struct drm_rect clip;
> > + struct drm_rect clip = {};
>
> Nitpicking, isn't the correct C99 zero initializer { 0 } ? I doesn't matter
> too much as the variable is removed in patch 5/5 but we could as well fix it
> if needed.
{ 0 } is annying because it can cause warnings if the first member is
not an integer or whatever. Also it could be confused with someone
actually wanting to zero initialize the first member explicitly (and
not knowing about named initializers). So I think {} conveys the
meaning much more clearly as well.
>
> Apart from that,
>
> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
>
> > int ret;
> >
> > if (!state->crtc) {
> > @@ -589,10 +589,9 @@ int __rcar_du_plane_atomic_check(struct drm_plane
> > *plane, if (IS_ERR(crtc_state))
> > return PTR_ERR(crtc_state);
> >
> > - clip.x1 = 0;
> > - clip.y1 = 0;
> > - clip.x2 = crtc_state->mode.hdisplay;
> > - clip.y2 = crtc_state->mode.vdisplay;
> > + if (crtc_state->enable)
> > + drm_mode_get_hv_timing(&crtc_state->mode,
> > + &clip.x2, &clip.y2);
> >
> > ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> > DRM_PLANE_HELPER_NO_SCALING,
>
> --
> Regards,
>
> Laurent Pinchart
--
Ville Syrjälä
Intel OTC
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 34+ messages in thread
* [PATCH 5/5] drm: Don't pass clip to drm_atomic_helper_check_plane_state()
2018-01-23 17:08 ` Ville Syrjala
(?)
@ 2018-01-24 19:48 ` Sinclair Yeh
-1 siblings, 0 replies; 34+ messages in thread
From: Sinclair Yeh @ 2018-01-24 19:48 UTC (permalink / raw)
To: linus-amlogic
vmwgfx part: Reviewed-by: Sinclair Yeh <syeh@vmware.com>
On Tue, Jan 23, 2018 at 07:08:57PM +0200, Ville Syrjala wrote:
> From: Ville Syrj?l? <ville.syrjala@linux.intel.com>
>
> Move the plane clip rectangle handling into
> drm_atomic_helper_check_plane_state(). Drivers no longer
> have to worry about such mundane details.
>
> v2: Convert armada, rcar, and sun4i as well
>
> Cc: Liviu Dudau <liviu.dudau@arm.com>
> Cc: Brian Starkey <brian.starkey@arm.com>
> Cc: Mali DP Maintainers <malidp@foss.arm.com>
> Cc: Daniel Vetter <daniel.vetter@intel.com>
> Cc: Gustavo Padovan <gustavo@padovan.org>
> Cc: Sean Paul <seanpaul@chromium.org>
> Cc: Philipp Zabel <p.zabel@pengutronix.de>
> Cc: CK Hu <ck.hu@mediatek.com>
> Cc: Neil Armstrong <narmstrong@baylibre.com>
> Cc: Rob Clark <robdclark@gmail.com>
> Cc: Ben Skeggs <bskeggs@redhat.com>
> Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> Cc: Sandy Huang <hjc@rock-chips.com>
> Cc: "Heiko St?bner" <heiko@sntech.de>
> Cc: Maxime Ripard <maxime.ripard@free-electrons.com>
> Cc: Thierry Reding <thierry.reding@gmail.com>
> Cc: VMware Graphics <linux-graphics-maintainer@vmware.com>
> Cc: Sinclair Yeh <syeh@vmware.com>
> Cc: Thomas Hellstrom <thellstrom@vmware.com>
> Cc: Shawn Guo <shawnguo@kernel.org>
> Cc: Archit Taneja <architt@codeaurora.org>
> Cc: linux-amlogic at lists.infradead.org
> Cc: linux-arm-msm at vger.kernel.org
> Cc: freedreno at lists.freedesktop.org
> Cc: nouveau at lists.freedesktop.org
> Cc: linux-renesas-soc at vger.kernel.org
> Cc: linux-tegra at vger.kernel.org
> Cc: Russell King <rmk+kernel@armlinux.org.uk>
> Suggested-by: Daniel Vetter <daniel@ffwll.ch>
> Signed-off-by: Ville Syrj?l? <ville.syrjala@linux.intel.com>
> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> Reviewed-by: Thierry Reding <treding@nvidia.com>
> Reviewed-by: Archit Taneja <architt@codeaurora.org> #msm
> ---
> drivers/gpu/drm/arm/hdlcd_crtc.c | 7 +------
> drivers/gpu/drm/arm/malidp_planes.c | 7 +------
> drivers/gpu/drm/armada/armada_crtc.c | 8 ++------
> drivers/gpu/drm/armada/armada_overlay.c | 8 ++------
> drivers/gpu/drm/drm_atomic_helper.c | 12 +++++++-----
> drivers/gpu/drm/drm_plane_helper.c | 11 +++--------
> drivers/gpu/drm/drm_simple_kms_helper.c | 6 ------
> drivers/gpu/drm/i915/intel_display.c | 12 ------------
> drivers/gpu/drm/imx/ipuv3-plane.c | 7 +------
> drivers/gpu/drm/mediatek/mtk_drm_plane.c | 7 +------
> drivers/gpu/drm/meson/meson_plane.c | 7 +------
> drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c | 14 ++------------
> drivers/gpu/drm/nouveau/nv50_display.c | 12 ------------
> drivers/gpu/drm/rcar-du/rcar_du_plane.c | 7 +------
> drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 7 +------
> drivers/gpu/drm/sun4i/sun8i_ui_layer.c | 7 +------
> drivers/gpu/drm/sun4i/sun8i_vi_layer.c | 7 +------
> drivers/gpu/drm/tegra/plane.c | 7 +------
> drivers/gpu/drm/vmwgfx/vmwgfx_kms.c | 7 +------
> drivers/gpu/drm/zte/zx_plane.c | 13 +------------
> include/drm/drm_atomic_helper.h | 1 -
> include/drm/drm_plane_helper.h | 1 -
> 22 files changed, 28 insertions(+), 147 deletions(-)
>
> diff --git a/drivers/gpu/drm/arm/hdlcd_crtc.c b/drivers/gpu/drm/arm/hdlcd_crtc.c
> index 877647ef35a9..cf5cbd63ecdf 100644
> --- a/drivers/gpu/drm/arm/hdlcd_crtc.c
> +++ b/drivers/gpu/drm/arm/hdlcd_crtc.c
> @@ -229,7 +229,6 @@ static const struct drm_crtc_helper_funcs hdlcd_crtc_helper_funcs = {
> static int hdlcd_plane_atomic_check(struct drm_plane *plane,
> struct drm_plane_state *state)
> {
> - struct drm_rect clip = { 0 };
> struct drm_crtc_state *crtc_state;
> u32 src_h = state->src_h >> 16;
>
> @@ -249,11 +248,7 @@ static int hdlcd_plane_atomic_check(struct drm_plane *plane,
> return -EINVAL;
> }
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - return drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + return drm_atomic_helper_check_plane_state(state, crtc_state,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> false, true);
> diff --git a/drivers/gpu/drm/arm/malidp_planes.c b/drivers/gpu/drm/arm/malidp_planes.c
> index 2885d69af456..ee32361c87ac 100644
> --- a/drivers/gpu/drm/arm/malidp_planes.c
> +++ b/drivers/gpu/drm/arm/malidp_planes.c
> @@ -141,18 +141,13 @@ static int malidp_se_check_scaling(struct malidp_plane *mp,
> struct drm_crtc_state *crtc_state =
> drm_atomic_get_existing_crtc_state(state->state, state->crtc);
> struct malidp_crtc_state *mc;
> - struct drm_rect clip = { 0 };
> u32 src_w, src_h;
> int ret;
>
> if (!crtc_state)
> return -EINVAL;
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + ret = drm_atomic_helper_check_plane_state(state, crtc_state,
> 0, INT_MAX, true, true);
> if (ret)
> return ret;
> diff --git a/drivers/gpu/drm/armada/armada_crtc.c b/drivers/gpu/drm/armada/armada_crtc.c
> index fdc34ad4ca62..03eeee11dd5b 100644
> --- a/drivers/gpu/drm/armada/armada_crtc.c
> +++ b/drivers/gpu/drm/armada/armada_crtc.c
> @@ -1203,15 +1203,11 @@ static int armada_drm_primary_update(struct drm_plane *plane,
> struct drm_crtc_state crtc_state = {
> .crtc = crtc,
> .enable = crtc->enabled,
> + .mode = crtc->mode,
> };
> - struct drm_rect clip = {};
> int ret;
>
> - if (crtc->enabled)
> - drm_mode_get_hv_timing(&crtc->mode,
> - &clip.x2, &clip.y2);
> -
> - ret = drm_atomic_helper_check_plane_state(&state, &crtc_state, &clip, 0,
> + ret = drm_atomic_helper_check_plane_state(&state, &crtc_state, 0,
> INT_MAX, true, false);
> if (ret)
> return ret;
> diff --git a/drivers/gpu/drm/armada/armada_overlay.c b/drivers/gpu/drm/armada/armada_overlay.c
> index 4f2a7a6e0fd3..c391955009d6 100644
> --- a/drivers/gpu/drm/armada/armada_overlay.c
> +++ b/drivers/gpu/drm/armada/armada_overlay.c
> @@ -208,19 +208,15 @@ armada_ovl_plane_update(struct drm_plane *plane, struct drm_crtc *crtc,
> struct drm_crtc_state crtc_state = {
> .crtc = crtc,
> .enable = crtc->enabled,
> + .mode = crtc->mode,
> };
> - struct drm_rect clip = {};
> int ret;
>
> trace_armada_ovl_plane_update(plane, crtc, fb,
> crtc_x, crtc_y, crtc_w, crtc_h,
> src_x, src_y, src_w, src_h);
>
> - if (crtc->enabled)
> - drm_mode_get_hv_timing(&crtc->mode,
> - &clip.x2, &clip.y2);
> -
> - ret = drm_atomic_helper_check_plane_state(&state, &crtc_state, &clip, 0,
> + ret = drm_atomic_helper_check_plane_state(&state, &crtc_state, 0,
> INT_MAX, true, false);
> if (ret)
> return ret;
> diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
> index ab4032167094..9fb96f9cc36e 100644
> --- a/drivers/gpu/drm/drm_atomic_helper.c
> +++ b/drivers/gpu/drm/drm_atomic_helper.c
> @@ -699,7 +699,6 @@ EXPORT_SYMBOL(drm_atomic_helper_check_modeset);
> * drm_atomic_helper_check_plane_state() - Check plane state for validity
> * @plane_state: plane state to check
> * @crtc_state: crtc state to check
> - * @clip: integer clipping coordinates
> * @min_scale: minimum @src:@dest scaling factor in 16.16 fixed point
> * @max_scale: maximum @src:@dest scaling factor in 16.16 fixed point
> * @can_position: is it legal to position the plane such that it
> @@ -719,7 +718,6 @@ EXPORT_SYMBOL(drm_atomic_helper_check_modeset);
> */
> int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
> const struct drm_crtc_state *crtc_state,
> - const struct drm_rect *clip,
> int min_scale,
> int max_scale,
> bool can_position,
> @@ -729,6 +727,7 @@ int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
> struct drm_rect *src = &plane_state->src;
> struct drm_rect *dst = &plane_state->dst;
> unsigned int rotation = plane_state->rotation;
> + struct drm_rect clip = {};
> int hscale, vscale;
>
> WARN_ON(plane_state->crtc && plane_state->crtc != crtc_state->crtc);
> @@ -764,7 +763,10 @@ int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
> return -ERANGE;
> }
>
> - plane_state->visible = drm_rect_clip_scaled(src, dst, clip, hscale, vscale);
> + if (crtc_state->enable)
> + drm_mode_get_hv_timing(&crtc_state->mode, &clip.x2, &clip.y2);
> +
> + plane_state->visible = drm_rect_clip_scaled(src, dst, &clip, hscale, vscale);
>
> drm_rect_rotate_inv(src, fb->width << 16, fb->height << 16, rotation);
>
> @@ -778,10 +780,10 @@ int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
> */
> return 0;
>
> - if (!can_position && !drm_rect_equals(dst, clip)) {
> + if (!can_position && !drm_rect_equals(dst, &clip)) {
> DRM_DEBUG_KMS("Plane must cover entire CRTC\n");
> drm_rect_debug_print("dst: ", dst, false);
> - drm_rect_debug_print("clip: ", clip, false);
> + drm_rect_debug_print("clip: ", &clip, false);
> return -EINVAL;
> }
>
> diff --git a/drivers/gpu/drm/drm_plane_helper.c b/drivers/gpu/drm/drm_plane_helper.c
> index f1be8cd4e387..f88f68161519 100644
> --- a/drivers/gpu/drm/drm_plane_helper.c
> +++ b/drivers/gpu/drm/drm_plane_helper.c
> @@ -106,7 +106,6 @@ static int get_connectors_for_crtc(struct drm_crtc *crtc,
> * @fb: framebuffer to flip onto plane
> * @src: source coordinates in 16.16 fixed point
> * @dst: integer destination coordinates
> - * @clip: integer clipping coordinates
> * @rotation: plane rotation
> * @min_scale: minimum @src:@dest scaling factor in 16.16 fixed point
> * @max_scale: maximum @src:@dest scaling factor in 16.16 fixed point
> @@ -131,7 +130,6 @@ int drm_plane_helper_check_update(struct drm_plane *plane,
> struct drm_framebuffer *fb,
> struct drm_rect *src,
> struct drm_rect *dst,
> - const struct drm_rect *clip,
> unsigned int rotation,
> int min_scale,
> int max_scale,
> @@ -157,11 +155,12 @@ int drm_plane_helper_check_update(struct drm_plane *plane,
> struct drm_crtc_state crtc_state = {
> .crtc = crtc,
> .enable = crtc->enabled,
> + .mode = crtc->mode,
> };
> int ret;
>
> ret = drm_atomic_helper_check_plane_state(&plane_state, &crtc_state,
> - clip, min_scale, max_scale,
> + min_scale, max_scale,
> can_position,
> can_update_disabled);
> if (ret)
> @@ -239,16 +238,12 @@ int drm_primary_helper_update(struct drm_plane *plane, struct drm_crtc *crtc,
> .x2 = crtc_x + crtc_w,
> .y2 = crtc_y + crtc_h,
> };
> - const struct drm_rect clip = {
> - .x2 = crtc->mode.hdisplay,
> - .y2 = crtc->mode.vdisplay,
> - };
> struct drm_connector **connector_list;
> int num_connectors, ret;
> bool visible;
>
> ret = drm_plane_helper_check_update(plane, crtc, fb,
> - &src, &dest, &clip,
> + &src, &dest,
> DRM_MODE_ROTATE_0,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> diff --git a/drivers/gpu/drm/drm_simple_kms_helper.c b/drivers/gpu/drm/drm_simple_kms_helper.c
> index 9d3f6b70812c..165bc756af96 100644
> --- a/drivers/gpu/drm/drm_simple_kms_helper.c
> +++ b/drivers/gpu/drm/drm_simple_kms_helper.c
> @@ -89,7 +89,6 @@ static const struct drm_crtc_funcs drm_simple_kms_crtc_funcs = {
> static int drm_simple_kms_plane_atomic_check(struct drm_plane *plane,
> struct drm_plane_state *plane_state)
> {
> - struct drm_rect clip = { 0 };
> struct drm_simple_display_pipe *pipe;
> struct drm_crtc_state *crtc_state;
> int ret;
> @@ -100,12 +99,7 @@ static int drm_simple_kms_plane_atomic_check(struct drm_plane *plane,
> if (!crtc_state->enable)
> return 0; /* nothing to check when disabling or disabled */
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> ret = drm_atomic_helper_check_plane_state(plane_state, crtc_state,
> - &clip,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> false, true);
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index d585ce4c8732..3933420c6911 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -9309,18 +9309,12 @@ static int intel_check_cursor(struct intel_crtc_state *crtc_state,
> struct intel_plane_state *plane_state)
> {
> const struct drm_framebuffer *fb = plane_state->base.fb;
> - struct drm_rect clip = {};
> int src_x, src_y;
> u32 offset;
> int ret;
>
> - if (crtc_state->base.enable)
> - drm_mode_get_hv_timing(&crtc_state->base.mode,
> - &clip.x2, &clip.y2);
> -
> ret = drm_atomic_helper_check_plane_state(&plane_state->base,
> &crtc_state->base,
> - &clip,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> true, true);
> @@ -12755,7 +12749,6 @@ intel_check_primary_plane(struct intel_plane *plane,
> int min_scale = DRM_PLANE_HELPER_NO_SCALING;
> int max_scale = DRM_PLANE_HELPER_NO_SCALING;
> bool can_position = false;
> - struct drm_rect clip = {};
> int ret;
>
> if (INTEL_GEN(dev_priv) >= 9) {
> @@ -12767,13 +12760,8 @@ intel_check_primary_plane(struct intel_plane *plane,
> can_position = true;
> }
>
> - if (crtc_state->base.enable)
> - drm_mode_get_hv_timing(&crtc_state->base.mode,
> - &clip.x2, &clip.y2);
> -
> ret = drm_atomic_helper_check_plane_state(&state->base,
> &crtc_state->base,
> - &clip,
> min_scale, max_scale,
> can_position, true);
> if (ret)
> diff --git a/drivers/gpu/drm/imx/ipuv3-plane.c b/drivers/gpu/drm/imx/ipuv3-plane.c
> index 150628293c51..d7e3583e608e 100644
> --- a/drivers/gpu/drm/imx/ipuv3-plane.c
> +++ b/drivers/gpu/drm/imx/ipuv3-plane.c
> @@ -351,7 +351,6 @@ static int ipu_plane_atomic_check(struct drm_plane *plane,
> struct drm_framebuffer *old_fb = old_state->fb;
> unsigned long eba, ubo, vbo, old_ubo, old_vbo, alpha_eba;
> bool can_position = (plane->type == DRM_PLANE_TYPE_OVERLAY);
> - struct drm_rect clip = {};
> int hsub, vsub;
> int ret;
>
> @@ -367,11 +366,7 @@ static int ipu_plane_atomic_check(struct drm_plane *plane,
> if (WARN_ON(!crtc_state))
> return -EINVAL;
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + ret = drm_atomic_helper_check_plane_state(state, crtc_state,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> can_position, true);
> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_plane.c b/drivers/gpu/drm/mediatek/mtk_drm_plane.c
> index b5c6eec9a584..2f4b0ffee598 100644
> --- a/drivers/gpu/drm/mediatek/mtk_drm_plane.c
> +++ b/drivers/gpu/drm/mediatek/mtk_drm_plane.c
> @@ -91,7 +91,6 @@ static int mtk_plane_atomic_check(struct drm_plane *plane,
> {
> struct drm_framebuffer *fb = state->fb;
> struct drm_crtc_state *crtc_state;
> - struct drm_rect clip = { 0, };
>
> if (!fb)
> return 0;
> @@ -108,11 +107,7 @@ static int mtk_plane_atomic_check(struct drm_plane *plane,
> if (IS_ERR(crtc_state))
> return PTR_ERR(crtc_state);
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - return drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + return drm_atomic_helper_check_plane_state(state, crtc_state,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> true, true);
> diff --git a/drivers/gpu/drm/meson/meson_plane.c b/drivers/gpu/drm/meson/meson_plane.c
> index 3801bee1f9e6..c78a3a59f58c 100644
> --- a/drivers/gpu/drm/meson/meson_plane.c
> +++ b/drivers/gpu/drm/meson/meson_plane.c
> @@ -49,7 +49,6 @@ static int meson_plane_atomic_check(struct drm_plane *plane,
> struct drm_plane_state *state)
> {
> struct drm_crtc_state *crtc_state;
> - struct drm_rect clip = { 0, };
>
> if (!state->crtc)
> return 0;
> @@ -58,11 +57,7 @@ static int meson_plane_atomic_check(struct drm_plane *plane,
> if (IS_ERR(crtc_state))
> return PTR_ERR(crtc_state);
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - return drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + return drm_atomic_helper_check_plane_state(state, crtc_state,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> true, true);
> diff --git a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c
> index 98d4d7331767..44fc9fe4737a 100644
> --- a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c
> +++ b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c
> @@ -286,7 +286,6 @@ static int mdp5_plane_atomic_check_with_state(struct drm_crtc_state *crtc_state,
> uint32_t max_width, max_height;
> bool out_of_bounds = false;
> uint32_t caps = 0;
> - struct drm_rect clip = {};
> int min_scale, max_scale;
> int ret;
>
> @@ -323,11 +322,7 @@ static int mdp5_plane_atomic_check_with_state(struct drm_crtc_state *crtc_state,
> min_scale = FRAC_16_16(1, 8);
> max_scale = FRAC_16_16(8, 1);
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + ret = drm_atomic_helper_check_plane_state(state, crtc_state,
> min_scale, max_scale,
> true, true);
> if (ret)
> @@ -471,7 +466,6 @@ static int mdp5_plane_atomic_async_check(struct drm_plane *plane,
> {
> struct mdp5_plane_state *mdp5_state = to_mdp5_plane_state(state);
> struct drm_crtc_state *crtc_state;
> - struct drm_rect clip = {};
> int min_scale, max_scale;
> int ret;
>
> @@ -502,11 +496,7 @@ static int mdp5_plane_atomic_async_check(struct drm_plane *plane,
> min_scale = FRAC_16_16(1, 8);
> max_scale = FRAC_16_16(8, 1);
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + ret = drm_atomic_helper_check_plane_state(state, crtc_state,
> min_scale, max_scale,
> true, true);
> if (ret)
> diff --git a/drivers/gpu/drm/nouveau/nv50_display.c b/drivers/gpu/drm/nouveau/nv50_display.c
> index 5a9a51c735f0..eea94c098237 100644
> --- a/drivers/gpu/drm/nouveau/nv50_display.c
> +++ b/drivers/gpu/drm/nouveau/nv50_display.c
> @@ -1135,15 +1135,9 @@ static int
> nv50_curs_acquire(struct nv50_wndw *wndw, struct nv50_wndw_atom *asyw,
> struct nv50_head_atom *asyh)
> {
> - struct drm_rect clip = {};
> int ret;
>
> - if (asyh->state.enable)
> - drm_mode_get_hv_timing(&asyh->state.mode,
> - &clip.x2, &clip.y2);
> -
> ret = drm_atomic_helper_check_plane_state(&asyw->state, &asyh->state,
> - &clip,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> true, true);
> @@ -1427,18 +1421,12 @@ nv50_base_acquire(struct nv50_wndw *wndw, struct nv50_wndw_atom *asyw,
> struct nv50_head_atom *asyh)
> {
> const struct drm_framebuffer *fb = asyw->state.fb;
> - struct drm_rect clip = {};
> int ret;
>
> if (!fb->format->depth)
> return -EINVAL;
>
> - if (asyh->state.enable)
> - drm_mode_get_hv_timing(&asyh->state.mode,
> - &clip.x2, &clip.y2);
> -
> ret = drm_atomic_helper_check_plane_state(&asyw->state, &asyh->state,
> - &clip,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> false, true);
> diff --git a/drivers/gpu/drm/rcar-du/rcar_du_plane.c b/drivers/gpu/drm/rcar-du/rcar_du_plane.c
> index 5687a94d4cb1..68556bd9dad2 100644
> --- a/drivers/gpu/drm/rcar-du/rcar_du_plane.c
> +++ b/drivers/gpu/drm/rcar-du/rcar_du_plane.c
> @@ -572,7 +572,6 @@ int __rcar_du_plane_atomic_check(struct drm_plane *plane,
> {
> struct drm_device *dev = plane->dev;
> struct drm_crtc_state *crtc_state;
> - struct drm_rect clip = {};
> int ret;
>
> if (!state->crtc) {
> @@ -589,11 +588,7 @@ int __rcar_du_plane_atomic_check(struct drm_plane *plane,
> if (IS_ERR(crtc_state))
> return PTR_ERR(crtc_state);
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + ret = drm_atomic_helper_check_plane_state(state, crtc_state,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> true, true);
> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
> index cd2c72389629..b95e9d45a435 100644
> --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
> @@ -641,7 +641,6 @@ static int vop_plane_atomic_check(struct drm_plane *plane,
> struct vop_win *vop_win = to_vop_win(plane);
> const struct vop_win_data *win = vop_win->data;
> int ret;
> - struct drm_rect clip = {};
> int min_scale = win->phy->scl ? FRAC_16_16(1, 8) :
> DRM_PLANE_HELPER_NO_SCALING;
> int max_scale = win->phy->scl ? FRAC_16_16(8, 1) :
> @@ -654,11 +653,7 @@ static int vop_plane_atomic_check(struct drm_plane *plane,
> if (WARN_ON(!crtc_state))
> return -EINVAL;
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + ret = drm_atomic_helper_check_plane_state(state, crtc_state,
> min_scale, max_scale,
> true, true);
> if (ret)
> diff --git a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c
> index 2f0ccd50b54d..9a540330cb79 100644
> --- a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c
> +++ b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c
> @@ -211,7 +211,6 @@ static int sun8i_ui_layer_atomic_check(struct drm_plane *plane,
> struct drm_crtc *crtc = state->crtc;
> struct drm_crtc_state *crtc_state;
> int min_scale, max_scale;
> - struct drm_rect clip = {};
>
> if (!crtc)
> return 0;
> @@ -220,10 +219,6 @@ static int sun8i_ui_layer_atomic_check(struct drm_plane *plane,
> if (WARN_ON(!crtc_state))
> return -EINVAL;
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> min_scale = DRM_PLANE_HELPER_NO_SCALING;
> max_scale = DRM_PLANE_HELPER_NO_SCALING;
>
> @@ -232,7 +227,7 @@ static int sun8i_ui_layer_atomic_check(struct drm_plane *plane,
> max_scale = SUN8I_UI_SCALER_SCALE_MAX;
> }
>
> - return drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + return drm_atomic_helper_check_plane_state(state, crtc_state,
> min_scale, max_scale,
> true, true);
> }
> diff --git a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c
> index eb3bf2d7291a..5877f8ef5895 100644
> --- a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c
> +++ b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c
> @@ -239,7 +239,6 @@ static int sun8i_vi_layer_atomic_check(struct drm_plane *plane,
> struct drm_crtc *crtc = state->crtc;
> struct drm_crtc_state *crtc_state;
> int min_scale, max_scale;
> - struct drm_rect clip = {};
>
> if (!crtc)
> return 0;
> @@ -248,10 +247,6 @@ static int sun8i_vi_layer_atomic_check(struct drm_plane *plane,
> if (WARN_ON(!crtc_state))
> return -EINVAL;
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> min_scale = DRM_PLANE_HELPER_NO_SCALING;
> max_scale = DRM_PLANE_HELPER_NO_SCALING;
>
> @@ -260,7 +255,7 @@ static int sun8i_vi_layer_atomic_check(struct drm_plane *plane,
> max_scale = SUN8I_VI_SCALER_SCALE_MAX;
> }
>
> - return drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + return drm_atomic_helper_check_plane_state(state, crtc_state,
> min_scale, max_scale,
> true, true);
> }
> diff --git a/drivers/gpu/drm/tegra/plane.c b/drivers/gpu/drm/tegra/plane.c
> index 7267a01e6f08..a056fbf83b53 100644
> --- a/drivers/gpu/drm/tegra/plane.c
> +++ b/drivers/gpu/drm/tegra/plane.c
> @@ -82,7 +82,6 @@ int tegra_plane_state_add(struct tegra_plane *plane,
> {
> struct drm_crtc_state *crtc_state;
> struct tegra_dc_state *tegra;
> - struct drm_rect clip = {};
> int err;
>
> /* Propagate errors from allocation or locking failures. */
> @@ -90,12 +89,8 @@ int tegra_plane_state_add(struct tegra_plane *plane,
> if (IS_ERR(crtc_state))
> return PTR_ERR(crtc_state);
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> /* Check plane state for visibility and calculate clipping bounds */
> - err = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + err = drm_atomic_helper_check_plane_state(state, crtc_state,
> 0, INT_MAX, true, true);
> if (err < 0)
> return err;
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
> index 1107d6d03506..34ecc27fc30a 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
> @@ -443,17 +443,12 @@ int vmw_du_primary_plane_atomic_check(struct drm_plane *plane,
> {
> struct drm_crtc_state *crtc_state = NULL;
> struct drm_framebuffer *new_fb = state->fb;
> - struct drm_rect clip = {};
> int ret;
>
> if (state->crtc)
> crtc_state = drm_atomic_get_new_crtc_state(state->state, state->crtc);
>
> - if (crtc_state && crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + ret = drm_atomic_helper_check_plane_state(state, crtc_state,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> false, true);
> diff --git a/drivers/gpu/drm/zte/zx_plane.c b/drivers/gpu/drm/zte/zx_plane.c
> index 8e1f34274e24..94545adac50d 100644
> --- a/drivers/gpu/drm/zte/zx_plane.c
> +++ b/drivers/gpu/drm/zte/zx_plane.c
> @@ -55,7 +55,6 @@ static int zx_vl_plane_atomic_check(struct drm_plane *plane,
> struct drm_framebuffer *fb = plane_state->fb;
> struct drm_crtc *crtc = plane_state->crtc;
> struct drm_crtc_state *crtc_state;
> - struct drm_rect clip = {};
> int min_scale = FRAC_16_16(1, 8);
> int max_scale = FRAC_16_16(8, 1);
>
> @@ -75,12 +74,8 @@ static int zx_vl_plane_atomic_check(struct drm_plane *plane,
> if (!plane_state->crtc)
> return -EINVAL;
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> return drm_atomic_helper_check_plane_state(plane_state, crtc_state,
> - &clip, min_scale, max_scale,
> + min_scale, max_scale,
> true, true);
> }
>
> @@ -291,7 +286,6 @@ static int zx_gl_plane_atomic_check(struct drm_plane *plane,
> struct drm_framebuffer *fb = plane_state->fb;
> struct drm_crtc *crtc = plane_state->crtc;
> struct drm_crtc_state *crtc_state;
> - struct drm_rect clip = {};
>
> if (!crtc || !fb)
> return 0;
> @@ -309,12 +303,7 @@ static int zx_gl_plane_atomic_check(struct drm_plane *plane,
> if (!plane_state->crtc)
> return -EINVAL;
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> return drm_atomic_helper_check_plane_state(plane_state, crtc_state,
> - &clip,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> false, true);
> diff --git a/include/drm/drm_atomic_helper.h b/include/drm/drm_atomic_helper.h
> index 4842ee9485ce..26aaba58d6ce 100644
> --- a/include/drm/drm_atomic_helper.h
> +++ b/include/drm/drm_atomic_helper.h
> @@ -40,7 +40,6 @@ int drm_atomic_helper_check_modeset(struct drm_device *dev,
> struct drm_atomic_state *state);
> int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
> const struct drm_crtc_state *crtc_state,
> - const struct drm_rect *clip,
> int min_scale,
> int max_scale,
> bool can_position,
> diff --git a/include/drm/drm_plane_helper.h b/include/drm/drm_plane_helper.h
> index 8aa49c0ecd4d..28d7ce620729 100644
> --- a/include/drm/drm_plane_helper.h
> +++ b/include/drm/drm_plane_helper.h
> @@ -43,7 +43,6 @@ int drm_plane_helper_check_update(struct drm_plane *plane,
> struct drm_framebuffer *fb,
> struct drm_rect *src,
> struct drm_rect *dest,
> - const struct drm_rect *clip,
> unsigned int rotation,
> int min_scale,
> int max_scale,
> --
> 2.13.6
>
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 5/5] drm: Don't pass clip to drm_atomic_helper_check_plane_state()
@ 2018-01-24 19:48 ` Sinclair Yeh
0 siblings, 0 replies; 34+ messages in thread
From: Sinclair Yeh @ 2018-01-24 19:48 UTC (permalink / raw)
To: Ville Syrjala
Cc: dri-devel, Liviu Dudau, Brian Starkey, Mali DP Maintainers,
Daniel Vetter, Gustavo Padovan, Sean Paul, Philipp Zabel, CK Hu,
Neil Armstrong, Rob Clark, Ben Skeggs, Laurent Pinchart,
Sandy Huang, Heiko Stübner, Maxime Ripard, Thierry Reding,
VMware Graphics, Thomas Hellstrom
vmwgfx part: Reviewed-by: Sinclair Yeh <syeh@vmware.com>
On Tue, Jan 23, 2018 at 07:08:57PM +0200, Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Move the plane clip rectangle handling into
> drm_atomic_helper_check_plane_state(). Drivers no longer
> have to worry about such mundane details.
>
> v2: Convert armada, rcar, and sun4i as well
>
> Cc: Liviu Dudau <liviu.dudau@arm.com>
> Cc: Brian Starkey <brian.starkey@arm.com>
> Cc: Mali DP Maintainers <malidp@foss.arm.com>
> Cc: Daniel Vetter <daniel.vetter@intel.com>
> Cc: Gustavo Padovan <gustavo@padovan.org>
> Cc: Sean Paul <seanpaul@chromium.org>
> Cc: Philipp Zabel <p.zabel@pengutronix.de>
> Cc: CK Hu <ck.hu@mediatek.com>
> Cc: Neil Armstrong <narmstrong@baylibre.com>
> Cc: Rob Clark <robdclark@gmail.com>
> Cc: Ben Skeggs <bskeggs@redhat.com>
> Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> Cc: Sandy Huang <hjc@rock-chips.com>
> Cc: "Heiko Stübner" <heiko@sntech.de>
> Cc: Maxime Ripard <maxime.ripard@free-electrons.com>
> Cc: Thierry Reding <thierry.reding@gmail.com>
> Cc: VMware Graphics <linux-graphics-maintainer@vmware.com>
> Cc: Sinclair Yeh <syeh@vmware.com>
> Cc: Thomas Hellstrom <thellstrom@vmware.com>
> Cc: Shawn Guo <shawnguo@kernel.org>
> Cc: Archit Taneja <architt@codeaurora.org>
> Cc: linux-amlogic@lists.infradead.org
> Cc: linux-arm-msm@vger.kernel.org
> Cc: freedreno@lists.freedesktop.org
> Cc: nouveau@lists.freedesktop.org
> Cc: linux-renesas-soc@vger.kernel.org
> Cc: linux-tegra@vger.kernel.org
> Cc: Russell King <rmk+kernel@armlinux.org.uk>
> Suggested-by: Daniel Vetter <daniel@ffwll.ch>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> Reviewed-by: Thierry Reding <treding@nvidia.com>
> Reviewed-by: Archit Taneja <architt@codeaurora.org> #msm
> ---
> drivers/gpu/drm/arm/hdlcd_crtc.c | 7 +------
> drivers/gpu/drm/arm/malidp_planes.c | 7 +------
> drivers/gpu/drm/armada/armada_crtc.c | 8 ++------
> drivers/gpu/drm/armada/armada_overlay.c | 8 ++------
> drivers/gpu/drm/drm_atomic_helper.c | 12 +++++++-----
> drivers/gpu/drm/drm_plane_helper.c | 11 +++--------
> drivers/gpu/drm/drm_simple_kms_helper.c | 6 ------
> drivers/gpu/drm/i915/intel_display.c | 12 ------------
> drivers/gpu/drm/imx/ipuv3-plane.c | 7 +------
> drivers/gpu/drm/mediatek/mtk_drm_plane.c | 7 +------
> drivers/gpu/drm/meson/meson_plane.c | 7 +------
> drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c | 14 ++------------
> drivers/gpu/drm/nouveau/nv50_display.c | 12 ------------
> drivers/gpu/drm/rcar-du/rcar_du_plane.c | 7 +------
> drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 7 +------
> drivers/gpu/drm/sun4i/sun8i_ui_layer.c | 7 +------
> drivers/gpu/drm/sun4i/sun8i_vi_layer.c | 7 +------
> drivers/gpu/drm/tegra/plane.c | 7 +------
> drivers/gpu/drm/vmwgfx/vmwgfx_kms.c | 7 +------
> drivers/gpu/drm/zte/zx_plane.c | 13 +------------
> include/drm/drm_atomic_helper.h | 1 -
> include/drm/drm_plane_helper.h | 1 -
> 22 files changed, 28 insertions(+), 147 deletions(-)
>
> diff --git a/drivers/gpu/drm/arm/hdlcd_crtc.c b/drivers/gpu/drm/arm/hdlcd_crtc.c
> index 877647ef35a9..cf5cbd63ecdf 100644
> --- a/drivers/gpu/drm/arm/hdlcd_crtc.c
> +++ b/drivers/gpu/drm/arm/hdlcd_crtc.c
> @@ -229,7 +229,6 @@ static const struct drm_crtc_helper_funcs hdlcd_crtc_helper_funcs = {
> static int hdlcd_plane_atomic_check(struct drm_plane *plane,
> struct drm_plane_state *state)
> {
> - struct drm_rect clip = { 0 };
> struct drm_crtc_state *crtc_state;
> u32 src_h = state->src_h >> 16;
>
> @@ -249,11 +248,7 @@ static int hdlcd_plane_atomic_check(struct drm_plane *plane,
> return -EINVAL;
> }
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - return drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + return drm_atomic_helper_check_plane_state(state, crtc_state,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> false, true);
> diff --git a/drivers/gpu/drm/arm/malidp_planes.c b/drivers/gpu/drm/arm/malidp_planes.c
> index 2885d69af456..ee32361c87ac 100644
> --- a/drivers/gpu/drm/arm/malidp_planes.c
> +++ b/drivers/gpu/drm/arm/malidp_planes.c
> @@ -141,18 +141,13 @@ static int malidp_se_check_scaling(struct malidp_plane *mp,
> struct drm_crtc_state *crtc_state =
> drm_atomic_get_existing_crtc_state(state->state, state->crtc);
> struct malidp_crtc_state *mc;
> - struct drm_rect clip = { 0 };
> u32 src_w, src_h;
> int ret;
>
> if (!crtc_state)
> return -EINVAL;
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + ret = drm_atomic_helper_check_plane_state(state, crtc_state,
> 0, INT_MAX, true, true);
> if (ret)
> return ret;
> diff --git a/drivers/gpu/drm/armada/armada_crtc.c b/drivers/gpu/drm/armada/armada_crtc.c
> index fdc34ad4ca62..03eeee11dd5b 100644
> --- a/drivers/gpu/drm/armada/armada_crtc.c
> +++ b/drivers/gpu/drm/armada/armada_crtc.c
> @@ -1203,15 +1203,11 @@ static int armada_drm_primary_update(struct drm_plane *plane,
> struct drm_crtc_state crtc_state = {
> .crtc = crtc,
> .enable = crtc->enabled,
> + .mode = crtc->mode,
> };
> - struct drm_rect clip = {};
> int ret;
>
> - if (crtc->enabled)
> - drm_mode_get_hv_timing(&crtc->mode,
> - &clip.x2, &clip.y2);
> -
> - ret = drm_atomic_helper_check_plane_state(&state, &crtc_state, &clip, 0,
> + ret = drm_atomic_helper_check_plane_state(&state, &crtc_state, 0,
> INT_MAX, true, false);
> if (ret)
> return ret;
> diff --git a/drivers/gpu/drm/armada/armada_overlay.c b/drivers/gpu/drm/armada/armada_overlay.c
> index 4f2a7a6e0fd3..c391955009d6 100644
> --- a/drivers/gpu/drm/armada/armada_overlay.c
> +++ b/drivers/gpu/drm/armada/armada_overlay.c
> @@ -208,19 +208,15 @@ armada_ovl_plane_update(struct drm_plane *plane, struct drm_crtc *crtc,
> struct drm_crtc_state crtc_state = {
> .crtc = crtc,
> .enable = crtc->enabled,
> + .mode = crtc->mode,
> };
> - struct drm_rect clip = {};
> int ret;
>
> trace_armada_ovl_plane_update(plane, crtc, fb,
> crtc_x, crtc_y, crtc_w, crtc_h,
> src_x, src_y, src_w, src_h);
>
> - if (crtc->enabled)
> - drm_mode_get_hv_timing(&crtc->mode,
> - &clip.x2, &clip.y2);
> -
> - ret = drm_atomic_helper_check_plane_state(&state, &crtc_state, &clip, 0,
> + ret = drm_atomic_helper_check_plane_state(&state, &crtc_state, 0,
> INT_MAX, true, false);
> if (ret)
> return ret;
> diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
> index ab4032167094..9fb96f9cc36e 100644
> --- a/drivers/gpu/drm/drm_atomic_helper.c
> +++ b/drivers/gpu/drm/drm_atomic_helper.c
> @@ -699,7 +699,6 @@ EXPORT_SYMBOL(drm_atomic_helper_check_modeset);
> * drm_atomic_helper_check_plane_state() - Check plane state for validity
> * @plane_state: plane state to check
> * @crtc_state: crtc state to check
> - * @clip: integer clipping coordinates
> * @min_scale: minimum @src:@dest scaling factor in 16.16 fixed point
> * @max_scale: maximum @src:@dest scaling factor in 16.16 fixed point
> * @can_position: is it legal to position the plane such that it
> @@ -719,7 +718,6 @@ EXPORT_SYMBOL(drm_atomic_helper_check_modeset);
> */
> int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
> const struct drm_crtc_state *crtc_state,
> - const struct drm_rect *clip,
> int min_scale,
> int max_scale,
> bool can_position,
> @@ -729,6 +727,7 @@ int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
> struct drm_rect *src = &plane_state->src;
> struct drm_rect *dst = &plane_state->dst;
> unsigned int rotation = plane_state->rotation;
> + struct drm_rect clip = {};
> int hscale, vscale;
>
> WARN_ON(plane_state->crtc && plane_state->crtc != crtc_state->crtc);
> @@ -764,7 +763,10 @@ int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
> return -ERANGE;
> }
>
> - plane_state->visible = drm_rect_clip_scaled(src, dst, clip, hscale, vscale);
> + if (crtc_state->enable)
> + drm_mode_get_hv_timing(&crtc_state->mode, &clip.x2, &clip.y2);
> +
> + plane_state->visible = drm_rect_clip_scaled(src, dst, &clip, hscale, vscale);
>
> drm_rect_rotate_inv(src, fb->width << 16, fb->height << 16, rotation);
>
> @@ -778,10 +780,10 @@ int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
> */
> return 0;
>
> - if (!can_position && !drm_rect_equals(dst, clip)) {
> + if (!can_position && !drm_rect_equals(dst, &clip)) {
> DRM_DEBUG_KMS("Plane must cover entire CRTC\n");
> drm_rect_debug_print("dst: ", dst, false);
> - drm_rect_debug_print("clip: ", clip, false);
> + drm_rect_debug_print("clip: ", &clip, false);
> return -EINVAL;
> }
>
> diff --git a/drivers/gpu/drm/drm_plane_helper.c b/drivers/gpu/drm/drm_plane_helper.c
> index f1be8cd4e387..f88f68161519 100644
> --- a/drivers/gpu/drm/drm_plane_helper.c
> +++ b/drivers/gpu/drm/drm_plane_helper.c
> @@ -106,7 +106,6 @@ static int get_connectors_for_crtc(struct drm_crtc *crtc,
> * @fb: framebuffer to flip onto plane
> * @src: source coordinates in 16.16 fixed point
> * @dst: integer destination coordinates
> - * @clip: integer clipping coordinates
> * @rotation: plane rotation
> * @min_scale: minimum @src:@dest scaling factor in 16.16 fixed point
> * @max_scale: maximum @src:@dest scaling factor in 16.16 fixed point
> @@ -131,7 +130,6 @@ int drm_plane_helper_check_update(struct drm_plane *plane,
> struct drm_framebuffer *fb,
> struct drm_rect *src,
> struct drm_rect *dst,
> - const struct drm_rect *clip,
> unsigned int rotation,
> int min_scale,
> int max_scale,
> @@ -157,11 +155,12 @@ int drm_plane_helper_check_update(struct drm_plane *plane,
> struct drm_crtc_state crtc_state = {
> .crtc = crtc,
> .enable = crtc->enabled,
> + .mode = crtc->mode,
> };
> int ret;
>
> ret = drm_atomic_helper_check_plane_state(&plane_state, &crtc_state,
> - clip, min_scale, max_scale,
> + min_scale, max_scale,
> can_position,
> can_update_disabled);
> if (ret)
> @@ -239,16 +238,12 @@ int drm_primary_helper_update(struct drm_plane *plane, struct drm_crtc *crtc,
> .x2 = crtc_x + crtc_w,
> .y2 = crtc_y + crtc_h,
> };
> - const struct drm_rect clip = {
> - .x2 = crtc->mode.hdisplay,
> - .y2 = crtc->mode.vdisplay,
> - };
> struct drm_connector **connector_list;
> int num_connectors, ret;
> bool visible;
>
> ret = drm_plane_helper_check_update(plane, crtc, fb,
> - &src, &dest, &clip,
> + &src, &dest,
> DRM_MODE_ROTATE_0,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> diff --git a/drivers/gpu/drm/drm_simple_kms_helper.c b/drivers/gpu/drm/drm_simple_kms_helper.c
> index 9d3f6b70812c..165bc756af96 100644
> --- a/drivers/gpu/drm/drm_simple_kms_helper.c
> +++ b/drivers/gpu/drm/drm_simple_kms_helper.c
> @@ -89,7 +89,6 @@ static const struct drm_crtc_funcs drm_simple_kms_crtc_funcs = {
> static int drm_simple_kms_plane_atomic_check(struct drm_plane *plane,
> struct drm_plane_state *plane_state)
> {
> - struct drm_rect clip = { 0 };
> struct drm_simple_display_pipe *pipe;
> struct drm_crtc_state *crtc_state;
> int ret;
> @@ -100,12 +99,7 @@ static int drm_simple_kms_plane_atomic_check(struct drm_plane *plane,
> if (!crtc_state->enable)
> return 0; /* nothing to check when disabling or disabled */
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> ret = drm_atomic_helper_check_plane_state(plane_state, crtc_state,
> - &clip,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> false, true);
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index d585ce4c8732..3933420c6911 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -9309,18 +9309,12 @@ static int intel_check_cursor(struct intel_crtc_state *crtc_state,
> struct intel_plane_state *plane_state)
> {
> const struct drm_framebuffer *fb = plane_state->base.fb;
> - struct drm_rect clip = {};
> int src_x, src_y;
> u32 offset;
> int ret;
>
> - if (crtc_state->base.enable)
> - drm_mode_get_hv_timing(&crtc_state->base.mode,
> - &clip.x2, &clip.y2);
> -
> ret = drm_atomic_helper_check_plane_state(&plane_state->base,
> &crtc_state->base,
> - &clip,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> true, true);
> @@ -12755,7 +12749,6 @@ intel_check_primary_plane(struct intel_plane *plane,
> int min_scale = DRM_PLANE_HELPER_NO_SCALING;
> int max_scale = DRM_PLANE_HELPER_NO_SCALING;
> bool can_position = false;
> - struct drm_rect clip = {};
> int ret;
>
> if (INTEL_GEN(dev_priv) >= 9) {
> @@ -12767,13 +12760,8 @@ intel_check_primary_plane(struct intel_plane *plane,
> can_position = true;
> }
>
> - if (crtc_state->base.enable)
> - drm_mode_get_hv_timing(&crtc_state->base.mode,
> - &clip.x2, &clip.y2);
> -
> ret = drm_atomic_helper_check_plane_state(&state->base,
> &crtc_state->base,
> - &clip,
> min_scale, max_scale,
> can_position, true);
> if (ret)
> diff --git a/drivers/gpu/drm/imx/ipuv3-plane.c b/drivers/gpu/drm/imx/ipuv3-plane.c
> index 150628293c51..d7e3583e608e 100644
> --- a/drivers/gpu/drm/imx/ipuv3-plane.c
> +++ b/drivers/gpu/drm/imx/ipuv3-plane.c
> @@ -351,7 +351,6 @@ static int ipu_plane_atomic_check(struct drm_plane *plane,
> struct drm_framebuffer *old_fb = old_state->fb;
> unsigned long eba, ubo, vbo, old_ubo, old_vbo, alpha_eba;
> bool can_position = (plane->type == DRM_PLANE_TYPE_OVERLAY);
> - struct drm_rect clip = {};
> int hsub, vsub;
> int ret;
>
> @@ -367,11 +366,7 @@ static int ipu_plane_atomic_check(struct drm_plane *plane,
> if (WARN_ON(!crtc_state))
> return -EINVAL;
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + ret = drm_atomic_helper_check_plane_state(state, crtc_state,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> can_position, true);
> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_plane.c b/drivers/gpu/drm/mediatek/mtk_drm_plane.c
> index b5c6eec9a584..2f4b0ffee598 100644
> --- a/drivers/gpu/drm/mediatek/mtk_drm_plane.c
> +++ b/drivers/gpu/drm/mediatek/mtk_drm_plane.c
> @@ -91,7 +91,6 @@ static int mtk_plane_atomic_check(struct drm_plane *plane,
> {
> struct drm_framebuffer *fb = state->fb;
> struct drm_crtc_state *crtc_state;
> - struct drm_rect clip = { 0, };
>
> if (!fb)
> return 0;
> @@ -108,11 +107,7 @@ static int mtk_plane_atomic_check(struct drm_plane *plane,
> if (IS_ERR(crtc_state))
> return PTR_ERR(crtc_state);
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - return drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + return drm_atomic_helper_check_plane_state(state, crtc_state,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> true, true);
> diff --git a/drivers/gpu/drm/meson/meson_plane.c b/drivers/gpu/drm/meson/meson_plane.c
> index 3801bee1f9e6..c78a3a59f58c 100644
> --- a/drivers/gpu/drm/meson/meson_plane.c
> +++ b/drivers/gpu/drm/meson/meson_plane.c
> @@ -49,7 +49,6 @@ static int meson_plane_atomic_check(struct drm_plane *plane,
> struct drm_plane_state *state)
> {
> struct drm_crtc_state *crtc_state;
> - struct drm_rect clip = { 0, };
>
> if (!state->crtc)
> return 0;
> @@ -58,11 +57,7 @@ static int meson_plane_atomic_check(struct drm_plane *plane,
> if (IS_ERR(crtc_state))
> return PTR_ERR(crtc_state);
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - return drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + return drm_atomic_helper_check_plane_state(state, crtc_state,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> true, true);
> diff --git a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c
> index 98d4d7331767..44fc9fe4737a 100644
> --- a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c
> +++ b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c
> @@ -286,7 +286,6 @@ static int mdp5_plane_atomic_check_with_state(struct drm_crtc_state *crtc_state,
> uint32_t max_width, max_height;
> bool out_of_bounds = false;
> uint32_t caps = 0;
> - struct drm_rect clip = {};
> int min_scale, max_scale;
> int ret;
>
> @@ -323,11 +322,7 @@ static int mdp5_plane_atomic_check_with_state(struct drm_crtc_state *crtc_state,
> min_scale = FRAC_16_16(1, 8);
> max_scale = FRAC_16_16(8, 1);
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + ret = drm_atomic_helper_check_plane_state(state, crtc_state,
> min_scale, max_scale,
> true, true);
> if (ret)
> @@ -471,7 +466,6 @@ static int mdp5_plane_atomic_async_check(struct drm_plane *plane,
> {
> struct mdp5_plane_state *mdp5_state = to_mdp5_plane_state(state);
> struct drm_crtc_state *crtc_state;
> - struct drm_rect clip = {};
> int min_scale, max_scale;
> int ret;
>
> @@ -502,11 +496,7 @@ static int mdp5_plane_atomic_async_check(struct drm_plane *plane,
> min_scale = FRAC_16_16(1, 8);
> max_scale = FRAC_16_16(8, 1);
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + ret = drm_atomic_helper_check_plane_state(state, crtc_state,
> min_scale, max_scale,
> true, true);
> if (ret)
> diff --git a/drivers/gpu/drm/nouveau/nv50_display.c b/drivers/gpu/drm/nouveau/nv50_display.c
> index 5a9a51c735f0..eea94c098237 100644
> --- a/drivers/gpu/drm/nouveau/nv50_display.c
> +++ b/drivers/gpu/drm/nouveau/nv50_display.c
> @@ -1135,15 +1135,9 @@ static int
> nv50_curs_acquire(struct nv50_wndw *wndw, struct nv50_wndw_atom *asyw,
> struct nv50_head_atom *asyh)
> {
> - struct drm_rect clip = {};
> int ret;
>
> - if (asyh->state.enable)
> - drm_mode_get_hv_timing(&asyh->state.mode,
> - &clip.x2, &clip.y2);
> -
> ret = drm_atomic_helper_check_plane_state(&asyw->state, &asyh->state,
> - &clip,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> true, true);
> @@ -1427,18 +1421,12 @@ nv50_base_acquire(struct nv50_wndw *wndw, struct nv50_wndw_atom *asyw,
> struct nv50_head_atom *asyh)
> {
> const struct drm_framebuffer *fb = asyw->state.fb;
> - struct drm_rect clip = {};
> int ret;
>
> if (!fb->format->depth)
> return -EINVAL;
>
> - if (asyh->state.enable)
> - drm_mode_get_hv_timing(&asyh->state.mode,
> - &clip.x2, &clip.y2);
> -
> ret = drm_atomic_helper_check_plane_state(&asyw->state, &asyh->state,
> - &clip,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> false, true);
> diff --git a/drivers/gpu/drm/rcar-du/rcar_du_plane.c b/drivers/gpu/drm/rcar-du/rcar_du_plane.c
> index 5687a94d4cb1..68556bd9dad2 100644
> --- a/drivers/gpu/drm/rcar-du/rcar_du_plane.c
> +++ b/drivers/gpu/drm/rcar-du/rcar_du_plane.c
> @@ -572,7 +572,6 @@ int __rcar_du_plane_atomic_check(struct drm_plane *plane,
> {
> struct drm_device *dev = plane->dev;
> struct drm_crtc_state *crtc_state;
> - struct drm_rect clip = {};
> int ret;
>
> if (!state->crtc) {
> @@ -589,11 +588,7 @@ int __rcar_du_plane_atomic_check(struct drm_plane *plane,
> if (IS_ERR(crtc_state))
> return PTR_ERR(crtc_state);
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + ret = drm_atomic_helper_check_plane_state(state, crtc_state,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> true, true);
> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
> index cd2c72389629..b95e9d45a435 100644
> --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
> @@ -641,7 +641,6 @@ static int vop_plane_atomic_check(struct drm_plane *plane,
> struct vop_win *vop_win = to_vop_win(plane);
> const struct vop_win_data *win = vop_win->data;
> int ret;
> - struct drm_rect clip = {};
> int min_scale = win->phy->scl ? FRAC_16_16(1, 8) :
> DRM_PLANE_HELPER_NO_SCALING;
> int max_scale = win->phy->scl ? FRAC_16_16(8, 1) :
> @@ -654,11 +653,7 @@ static int vop_plane_atomic_check(struct drm_plane *plane,
> if (WARN_ON(!crtc_state))
> return -EINVAL;
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + ret = drm_atomic_helper_check_plane_state(state, crtc_state,
> min_scale, max_scale,
> true, true);
> if (ret)
> diff --git a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c
> index 2f0ccd50b54d..9a540330cb79 100644
> --- a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c
> +++ b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c
> @@ -211,7 +211,6 @@ static int sun8i_ui_layer_atomic_check(struct drm_plane *plane,
> struct drm_crtc *crtc = state->crtc;
> struct drm_crtc_state *crtc_state;
> int min_scale, max_scale;
> - struct drm_rect clip = {};
>
> if (!crtc)
> return 0;
> @@ -220,10 +219,6 @@ static int sun8i_ui_layer_atomic_check(struct drm_plane *plane,
> if (WARN_ON(!crtc_state))
> return -EINVAL;
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> min_scale = DRM_PLANE_HELPER_NO_SCALING;
> max_scale = DRM_PLANE_HELPER_NO_SCALING;
>
> @@ -232,7 +227,7 @@ static int sun8i_ui_layer_atomic_check(struct drm_plane *plane,
> max_scale = SUN8I_UI_SCALER_SCALE_MAX;
> }
>
> - return drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + return drm_atomic_helper_check_plane_state(state, crtc_state,
> min_scale, max_scale,
> true, true);
> }
> diff --git a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c
> index eb3bf2d7291a..5877f8ef5895 100644
> --- a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c
> +++ b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c
> @@ -239,7 +239,6 @@ static int sun8i_vi_layer_atomic_check(struct drm_plane *plane,
> struct drm_crtc *crtc = state->crtc;
> struct drm_crtc_state *crtc_state;
> int min_scale, max_scale;
> - struct drm_rect clip = {};
>
> if (!crtc)
> return 0;
> @@ -248,10 +247,6 @@ static int sun8i_vi_layer_atomic_check(struct drm_plane *plane,
> if (WARN_ON(!crtc_state))
> return -EINVAL;
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> min_scale = DRM_PLANE_HELPER_NO_SCALING;
> max_scale = DRM_PLANE_HELPER_NO_SCALING;
>
> @@ -260,7 +255,7 @@ static int sun8i_vi_layer_atomic_check(struct drm_plane *plane,
> max_scale = SUN8I_VI_SCALER_SCALE_MAX;
> }
>
> - return drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + return drm_atomic_helper_check_plane_state(state, crtc_state,
> min_scale, max_scale,
> true, true);
> }
> diff --git a/drivers/gpu/drm/tegra/plane.c b/drivers/gpu/drm/tegra/plane.c
> index 7267a01e6f08..a056fbf83b53 100644
> --- a/drivers/gpu/drm/tegra/plane.c
> +++ b/drivers/gpu/drm/tegra/plane.c
> @@ -82,7 +82,6 @@ int tegra_plane_state_add(struct tegra_plane *plane,
> {
> struct drm_crtc_state *crtc_state;
> struct tegra_dc_state *tegra;
> - struct drm_rect clip = {};
> int err;
>
> /* Propagate errors from allocation or locking failures. */
> @@ -90,12 +89,8 @@ int tegra_plane_state_add(struct tegra_plane *plane,
> if (IS_ERR(crtc_state))
> return PTR_ERR(crtc_state);
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> /* Check plane state for visibility and calculate clipping bounds */
> - err = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + err = drm_atomic_helper_check_plane_state(state, crtc_state,
> 0, INT_MAX, true, true);
> if (err < 0)
> return err;
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
> index 1107d6d03506..34ecc27fc30a 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
> @@ -443,17 +443,12 @@ int vmw_du_primary_plane_atomic_check(struct drm_plane *plane,
> {
> struct drm_crtc_state *crtc_state = NULL;
> struct drm_framebuffer *new_fb = state->fb;
> - struct drm_rect clip = {};
> int ret;
>
> if (state->crtc)
> crtc_state = drm_atomic_get_new_crtc_state(state->state, state->crtc);
>
> - if (crtc_state && crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + ret = drm_atomic_helper_check_plane_state(state, crtc_state,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> false, true);
> diff --git a/drivers/gpu/drm/zte/zx_plane.c b/drivers/gpu/drm/zte/zx_plane.c
> index 8e1f34274e24..94545adac50d 100644
> --- a/drivers/gpu/drm/zte/zx_plane.c
> +++ b/drivers/gpu/drm/zte/zx_plane.c
> @@ -55,7 +55,6 @@ static int zx_vl_plane_atomic_check(struct drm_plane *plane,
> struct drm_framebuffer *fb = plane_state->fb;
> struct drm_crtc *crtc = plane_state->crtc;
> struct drm_crtc_state *crtc_state;
> - struct drm_rect clip = {};
> int min_scale = FRAC_16_16(1, 8);
> int max_scale = FRAC_16_16(8, 1);
>
> @@ -75,12 +74,8 @@ static int zx_vl_plane_atomic_check(struct drm_plane *plane,
> if (!plane_state->crtc)
> return -EINVAL;
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> return drm_atomic_helper_check_plane_state(plane_state, crtc_state,
> - &clip, min_scale, max_scale,
> + min_scale, max_scale,
> true, true);
> }
>
> @@ -291,7 +286,6 @@ static int zx_gl_plane_atomic_check(struct drm_plane *plane,
> struct drm_framebuffer *fb = plane_state->fb;
> struct drm_crtc *crtc = plane_state->crtc;
> struct drm_crtc_state *crtc_state;
> - struct drm_rect clip = {};
>
> if (!crtc || !fb)
> return 0;
> @@ -309,12 +303,7 @@ static int zx_gl_plane_atomic_check(struct drm_plane *plane,
> if (!plane_state->crtc)
> return -EINVAL;
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> return drm_atomic_helper_check_plane_state(plane_state, crtc_state,
> - &clip,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> false, true);
> diff --git a/include/drm/drm_atomic_helper.h b/include/drm/drm_atomic_helper.h
> index 4842ee9485ce..26aaba58d6ce 100644
> --- a/include/drm/drm_atomic_helper.h
> +++ b/include/drm/drm_atomic_helper.h
> @@ -40,7 +40,6 @@ int drm_atomic_helper_check_modeset(struct drm_device *dev,
> struct drm_atomic_state *state);
> int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
> const struct drm_crtc_state *crtc_state,
> - const struct drm_rect *clip,
> int min_scale,
> int max_scale,
> bool can_position,
> diff --git a/include/drm/drm_plane_helper.h b/include/drm/drm_plane_helper.h
> index 8aa49c0ecd4d..28d7ce620729 100644
> --- a/include/drm/drm_plane_helper.h
> +++ b/include/drm/drm_plane_helper.h
> @@ -43,7 +43,6 @@ int drm_plane_helper_check_update(struct drm_plane *plane,
> struct drm_framebuffer *fb,
> struct drm_rect *src,
> struct drm_rect *dest,
> - const struct drm_rect *clip,
> unsigned int rotation,
> int min_scale,
> int max_scale,
> --
> 2.13.6
>
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 5/5] drm: Don't pass clip to drm_atomic_helper_check_plane_state()
@ 2018-01-24 19:48 ` Sinclair Yeh
0 siblings, 0 replies; 34+ messages in thread
From: Sinclair Yeh @ 2018-01-24 19:48 UTC (permalink / raw)
To: Ville Syrjala
Cc: dri-devel, Liviu Dudau, Brian Starkey, Mali DP Maintainers,
Daniel Vetter, Gustavo Padovan, Sean Paul, Philipp Zabel, CK Hu,
Neil Armstrong, Rob Clark, Ben Skeggs, Laurent Pinchart,
Sandy Huang, Heiko Stübner, Maxime Ripard, Thierry Reding,
VMware Graphics, Thomas Hellstrom, Shawn Guo, Archit Taneja,
linux-amlogic, linux-arm-msm, freedreno, nouveau,
linux-renesas-soc, linux-tegra, Russell King
vmwgfx part: Reviewed-by: Sinclair Yeh <syeh@vmware.com>
On Tue, Jan 23, 2018 at 07:08:57PM +0200, Ville Syrjala wrote:
> From: Ville Syrj�l� <ville.syrjala@linux.intel.com>
>
> Move the plane clip rectangle handling into
> drm_atomic_helper_check_plane_state(). Drivers no longer
> have to worry about such mundane details.
>
> v2: Convert armada, rcar, and sun4i as well
>
> Cc: Liviu Dudau <liviu.dudau@arm.com>
> Cc: Brian Starkey <brian.starkey@arm.com>
> Cc: Mali DP Maintainers <malidp@foss.arm.com>
> Cc: Daniel Vetter <daniel.vetter@intel.com>
> Cc: Gustavo Padovan <gustavo@padovan.org>
> Cc: Sean Paul <seanpaul@chromium.org>
> Cc: Philipp Zabel <p.zabel@pengutronix.de>
> Cc: CK Hu <ck.hu@mediatek.com>
> Cc: Neil Armstrong <narmstrong@baylibre.com>
> Cc: Rob Clark <robdclark@gmail.com>
> Cc: Ben Skeggs <bskeggs@redhat.com>
> Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> Cc: Sandy Huang <hjc@rock-chips.com>
> Cc: "Heiko St�bner" <heiko@sntech.de>
> Cc: Maxime Ripard <maxime.ripard@free-electrons.com>
> Cc: Thierry Reding <thierry.reding@gmail.com>
> Cc: VMware Graphics <linux-graphics-maintainer@vmware.com>
> Cc: Sinclair Yeh <syeh@vmware.com>
> Cc: Thomas Hellstrom <thellstrom@vmware.com>
> Cc: Shawn Guo <shawnguo@kernel.org>
> Cc: Archit Taneja <architt@codeaurora.org>
> Cc: linux-amlogic@lists.infradead.org
> Cc: linux-arm-msm@vger.kernel.org
> Cc: freedreno@lists.freedesktop.org
> Cc: nouveau@lists.freedesktop.org
> Cc: linux-renesas-soc@vger.kernel.org
> Cc: linux-tegra@vger.kernel.org
> Cc: Russell King <rmk+kernel@armlinux.org.uk>
> Suggested-by: Daniel Vetter <daniel@ffwll.ch>
> Signed-off-by: Ville Syrj�l� <ville.syrjala@linux.intel.com>
> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> Reviewed-by: Thierry Reding <treding@nvidia.com>
> Reviewed-by: Archit Taneja <architt@codeaurora.org> #msm
> ---
> drivers/gpu/drm/arm/hdlcd_crtc.c | 7 +------
> drivers/gpu/drm/arm/malidp_planes.c | 7 +------
> drivers/gpu/drm/armada/armada_crtc.c | 8 ++------
> drivers/gpu/drm/armada/armada_overlay.c | 8 ++------
> drivers/gpu/drm/drm_atomic_helper.c | 12 +++++++-----
> drivers/gpu/drm/drm_plane_helper.c | 11 +++--------
> drivers/gpu/drm/drm_simple_kms_helper.c | 6 ------
> drivers/gpu/drm/i915/intel_display.c | 12 ------------
> drivers/gpu/drm/imx/ipuv3-plane.c | 7 +------
> drivers/gpu/drm/mediatek/mtk_drm_plane.c | 7 +------
> drivers/gpu/drm/meson/meson_plane.c | 7 +------
> drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c | 14 ++------------
> drivers/gpu/drm/nouveau/nv50_display.c | 12 ------------
> drivers/gpu/drm/rcar-du/rcar_du_plane.c | 7 +------
> drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 7 +------
> drivers/gpu/drm/sun4i/sun8i_ui_layer.c | 7 +------
> drivers/gpu/drm/sun4i/sun8i_vi_layer.c | 7 +------
> drivers/gpu/drm/tegra/plane.c | 7 +------
> drivers/gpu/drm/vmwgfx/vmwgfx_kms.c | 7 +------
> drivers/gpu/drm/zte/zx_plane.c | 13 +------------
> include/drm/drm_atomic_helper.h | 1 -
> include/drm/drm_plane_helper.h | 1 -
> 22 files changed, 28 insertions(+), 147 deletions(-)
>
> diff --git a/drivers/gpu/drm/arm/hdlcd_crtc.c b/drivers/gpu/drm/arm/hdlcd_crtc.c
> index 877647ef35a9..cf5cbd63ecdf 100644
> --- a/drivers/gpu/drm/arm/hdlcd_crtc.c
> +++ b/drivers/gpu/drm/arm/hdlcd_crtc.c
> @@ -229,7 +229,6 @@ static const struct drm_crtc_helper_funcs hdlcd_crtc_helper_funcs = {
> static int hdlcd_plane_atomic_check(struct drm_plane *plane,
> struct drm_plane_state *state)
> {
> - struct drm_rect clip = { 0 };
> struct drm_crtc_state *crtc_state;
> u32 src_h = state->src_h >> 16;
>
> @@ -249,11 +248,7 @@ static int hdlcd_plane_atomic_check(struct drm_plane *plane,
> return -EINVAL;
> }
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - return drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + return drm_atomic_helper_check_plane_state(state, crtc_state,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> false, true);
> diff --git a/drivers/gpu/drm/arm/malidp_planes.c b/drivers/gpu/drm/arm/malidp_planes.c
> index 2885d69af456..ee32361c87ac 100644
> --- a/drivers/gpu/drm/arm/malidp_planes.c
> +++ b/drivers/gpu/drm/arm/malidp_planes.c
> @@ -141,18 +141,13 @@ static int malidp_se_check_scaling(struct malidp_plane *mp,
> struct drm_crtc_state *crtc_state =
> drm_atomic_get_existing_crtc_state(state->state, state->crtc);
> struct malidp_crtc_state *mc;
> - struct drm_rect clip = { 0 };
> u32 src_w, src_h;
> int ret;
>
> if (!crtc_state)
> return -EINVAL;
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + ret = drm_atomic_helper_check_plane_state(state, crtc_state,
> 0, INT_MAX, true, true);
> if (ret)
> return ret;
> diff --git a/drivers/gpu/drm/armada/armada_crtc.c b/drivers/gpu/drm/armada/armada_crtc.c
> index fdc34ad4ca62..03eeee11dd5b 100644
> --- a/drivers/gpu/drm/armada/armada_crtc.c
> +++ b/drivers/gpu/drm/armada/armada_crtc.c
> @@ -1203,15 +1203,11 @@ static int armada_drm_primary_update(struct drm_plane *plane,
> struct drm_crtc_state crtc_state = {
> .crtc = crtc,
> .enable = crtc->enabled,
> + .mode = crtc->mode,
> };
> - struct drm_rect clip = {};
> int ret;
>
> - if (crtc->enabled)
> - drm_mode_get_hv_timing(&crtc->mode,
> - &clip.x2, &clip.y2);
> -
> - ret = drm_atomic_helper_check_plane_state(&state, &crtc_state, &clip, 0,
> + ret = drm_atomic_helper_check_plane_state(&state, &crtc_state, 0,
> INT_MAX, true, false);
> if (ret)
> return ret;
> diff --git a/drivers/gpu/drm/armada/armada_overlay.c b/drivers/gpu/drm/armada/armada_overlay.c
> index 4f2a7a6e0fd3..c391955009d6 100644
> --- a/drivers/gpu/drm/armada/armada_overlay.c
> +++ b/drivers/gpu/drm/armada/armada_overlay.c
> @@ -208,19 +208,15 @@ armada_ovl_plane_update(struct drm_plane *plane, struct drm_crtc *crtc,
> struct drm_crtc_state crtc_state = {
> .crtc = crtc,
> .enable = crtc->enabled,
> + .mode = crtc->mode,
> };
> - struct drm_rect clip = {};
> int ret;
>
> trace_armada_ovl_plane_update(plane, crtc, fb,
> crtc_x, crtc_y, crtc_w, crtc_h,
> src_x, src_y, src_w, src_h);
>
> - if (crtc->enabled)
> - drm_mode_get_hv_timing(&crtc->mode,
> - &clip.x2, &clip.y2);
> -
> - ret = drm_atomic_helper_check_plane_state(&state, &crtc_state, &clip, 0,
> + ret = drm_atomic_helper_check_plane_state(&state, &crtc_state, 0,
> INT_MAX, true, false);
> if (ret)
> return ret;
> diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
> index ab4032167094..9fb96f9cc36e 100644
> --- a/drivers/gpu/drm/drm_atomic_helper.c
> +++ b/drivers/gpu/drm/drm_atomic_helper.c
> @@ -699,7 +699,6 @@ EXPORT_SYMBOL(drm_atomic_helper_check_modeset);
> * drm_atomic_helper_check_plane_state() - Check plane state for validity
> * @plane_state: plane state to check
> * @crtc_state: crtc state to check
> - * @clip: integer clipping coordinates
> * @min_scale: minimum @src:@dest scaling factor in 16.16 fixed point
> * @max_scale: maximum @src:@dest scaling factor in 16.16 fixed point
> * @can_position: is it legal to position the plane such that it
> @@ -719,7 +718,6 @@ EXPORT_SYMBOL(drm_atomic_helper_check_modeset);
> */
> int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
> const struct drm_crtc_state *crtc_state,
> - const struct drm_rect *clip,
> int min_scale,
> int max_scale,
> bool can_position,
> @@ -729,6 +727,7 @@ int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
> struct drm_rect *src = &plane_state->src;
> struct drm_rect *dst = &plane_state->dst;
> unsigned int rotation = plane_state->rotation;
> + struct drm_rect clip = {};
> int hscale, vscale;
>
> WARN_ON(plane_state->crtc && plane_state->crtc != crtc_state->crtc);
> @@ -764,7 +763,10 @@ int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
> return -ERANGE;
> }
>
> - plane_state->visible = drm_rect_clip_scaled(src, dst, clip, hscale, vscale);
> + if (crtc_state->enable)
> + drm_mode_get_hv_timing(&crtc_state->mode, &clip.x2, &clip.y2);
> +
> + plane_state->visible = drm_rect_clip_scaled(src, dst, &clip, hscale, vscale);
>
> drm_rect_rotate_inv(src, fb->width << 16, fb->height << 16, rotation);
>
> @@ -778,10 +780,10 @@ int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
> */
> return 0;
>
> - if (!can_position && !drm_rect_equals(dst, clip)) {
> + if (!can_position && !drm_rect_equals(dst, &clip)) {
> DRM_DEBUG_KMS("Plane must cover entire CRTC\n");
> drm_rect_debug_print("dst: ", dst, false);
> - drm_rect_debug_print("clip: ", clip, false);
> + drm_rect_debug_print("clip: ", &clip, false);
> return -EINVAL;
> }
>
> diff --git a/drivers/gpu/drm/drm_plane_helper.c b/drivers/gpu/drm/drm_plane_helper.c
> index f1be8cd4e387..f88f68161519 100644
> --- a/drivers/gpu/drm/drm_plane_helper.c
> +++ b/drivers/gpu/drm/drm_plane_helper.c
> @@ -106,7 +106,6 @@ static int get_connectors_for_crtc(struct drm_crtc *crtc,
> * @fb: framebuffer to flip onto plane
> * @src: source coordinates in 16.16 fixed point
> * @dst: integer destination coordinates
> - * @clip: integer clipping coordinates
> * @rotation: plane rotation
> * @min_scale: minimum @src:@dest scaling factor in 16.16 fixed point
> * @max_scale: maximum @src:@dest scaling factor in 16.16 fixed point
> @@ -131,7 +130,6 @@ int drm_plane_helper_check_update(struct drm_plane *plane,
> struct drm_framebuffer *fb,
> struct drm_rect *src,
> struct drm_rect *dst,
> - const struct drm_rect *clip,
> unsigned int rotation,
> int min_scale,
> int max_scale,
> @@ -157,11 +155,12 @@ int drm_plane_helper_check_update(struct drm_plane *plane,
> struct drm_crtc_state crtc_state = {
> .crtc = crtc,
> .enable = crtc->enabled,
> + .mode = crtc->mode,
> };
> int ret;
>
> ret = drm_atomic_helper_check_plane_state(&plane_state, &crtc_state,
> - clip, min_scale, max_scale,
> + min_scale, max_scale,
> can_position,
> can_update_disabled);
> if (ret)
> @@ -239,16 +238,12 @@ int drm_primary_helper_update(struct drm_plane *plane, struct drm_crtc *crtc,
> .x2 = crtc_x + crtc_w,
> .y2 = crtc_y + crtc_h,
> };
> - const struct drm_rect clip = {
> - .x2 = crtc->mode.hdisplay,
> - .y2 = crtc->mode.vdisplay,
> - };
> struct drm_connector **connector_list;
> int num_connectors, ret;
> bool visible;
>
> ret = drm_plane_helper_check_update(plane, crtc, fb,
> - &src, &dest, &clip,
> + &src, &dest,
> DRM_MODE_ROTATE_0,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> diff --git a/drivers/gpu/drm/drm_simple_kms_helper.c b/drivers/gpu/drm/drm_simple_kms_helper.c
> index 9d3f6b70812c..165bc756af96 100644
> --- a/drivers/gpu/drm/drm_simple_kms_helper.c
> +++ b/drivers/gpu/drm/drm_simple_kms_helper.c
> @@ -89,7 +89,6 @@ static const struct drm_crtc_funcs drm_simple_kms_crtc_funcs = {
> static int drm_simple_kms_plane_atomic_check(struct drm_plane *plane,
> struct drm_plane_state *plane_state)
> {
> - struct drm_rect clip = { 0 };
> struct drm_simple_display_pipe *pipe;
> struct drm_crtc_state *crtc_state;
> int ret;
> @@ -100,12 +99,7 @@ static int drm_simple_kms_plane_atomic_check(struct drm_plane *plane,
> if (!crtc_state->enable)
> return 0; /* nothing to check when disabling or disabled */
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> ret = drm_atomic_helper_check_plane_state(plane_state, crtc_state,
> - &clip,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> false, true);
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index d585ce4c8732..3933420c6911 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -9309,18 +9309,12 @@ static int intel_check_cursor(struct intel_crtc_state *crtc_state,
> struct intel_plane_state *plane_state)
> {
> const struct drm_framebuffer *fb = plane_state->base.fb;
> - struct drm_rect clip = {};
> int src_x, src_y;
> u32 offset;
> int ret;
>
> - if (crtc_state->base.enable)
> - drm_mode_get_hv_timing(&crtc_state->base.mode,
> - &clip.x2, &clip.y2);
> -
> ret = drm_atomic_helper_check_plane_state(&plane_state->base,
> &crtc_state->base,
> - &clip,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> true, true);
> @@ -12755,7 +12749,6 @@ intel_check_primary_plane(struct intel_plane *plane,
> int min_scale = DRM_PLANE_HELPER_NO_SCALING;
> int max_scale = DRM_PLANE_HELPER_NO_SCALING;
> bool can_position = false;
> - struct drm_rect clip = {};
> int ret;
>
> if (INTEL_GEN(dev_priv) >= 9) {
> @@ -12767,13 +12760,8 @@ intel_check_primary_plane(struct intel_plane *plane,
> can_position = true;
> }
>
> - if (crtc_state->base.enable)
> - drm_mode_get_hv_timing(&crtc_state->base.mode,
> - &clip.x2, &clip.y2);
> -
> ret = drm_atomic_helper_check_plane_state(&state->base,
> &crtc_state->base,
> - &clip,
> min_scale, max_scale,
> can_position, true);
> if (ret)
> diff --git a/drivers/gpu/drm/imx/ipuv3-plane.c b/drivers/gpu/drm/imx/ipuv3-plane.c
> index 150628293c51..d7e3583e608e 100644
> --- a/drivers/gpu/drm/imx/ipuv3-plane.c
> +++ b/drivers/gpu/drm/imx/ipuv3-plane.c
> @@ -351,7 +351,6 @@ static int ipu_plane_atomic_check(struct drm_plane *plane,
> struct drm_framebuffer *old_fb = old_state->fb;
> unsigned long eba, ubo, vbo, old_ubo, old_vbo, alpha_eba;
> bool can_position = (plane->type == DRM_PLANE_TYPE_OVERLAY);
> - struct drm_rect clip = {};
> int hsub, vsub;
> int ret;
>
> @@ -367,11 +366,7 @@ static int ipu_plane_atomic_check(struct drm_plane *plane,
> if (WARN_ON(!crtc_state))
> return -EINVAL;
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + ret = drm_atomic_helper_check_plane_state(state, crtc_state,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> can_position, true);
> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_plane.c b/drivers/gpu/drm/mediatek/mtk_drm_plane.c
> index b5c6eec9a584..2f4b0ffee598 100644
> --- a/drivers/gpu/drm/mediatek/mtk_drm_plane.c
> +++ b/drivers/gpu/drm/mediatek/mtk_drm_plane.c
> @@ -91,7 +91,6 @@ static int mtk_plane_atomic_check(struct drm_plane *plane,
> {
> struct drm_framebuffer *fb = state->fb;
> struct drm_crtc_state *crtc_state;
> - struct drm_rect clip = { 0, };
>
> if (!fb)
> return 0;
> @@ -108,11 +107,7 @@ static int mtk_plane_atomic_check(struct drm_plane *plane,
> if (IS_ERR(crtc_state))
> return PTR_ERR(crtc_state);
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - return drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + return drm_atomic_helper_check_plane_state(state, crtc_state,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> true, true);
> diff --git a/drivers/gpu/drm/meson/meson_plane.c b/drivers/gpu/drm/meson/meson_plane.c
> index 3801bee1f9e6..c78a3a59f58c 100644
> --- a/drivers/gpu/drm/meson/meson_plane.c
> +++ b/drivers/gpu/drm/meson/meson_plane.c
> @@ -49,7 +49,6 @@ static int meson_plane_atomic_check(struct drm_plane *plane,
> struct drm_plane_state *state)
> {
> struct drm_crtc_state *crtc_state;
> - struct drm_rect clip = { 0, };
>
> if (!state->crtc)
> return 0;
> @@ -58,11 +57,7 @@ static int meson_plane_atomic_check(struct drm_plane *plane,
> if (IS_ERR(crtc_state))
> return PTR_ERR(crtc_state);
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - return drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + return drm_atomic_helper_check_plane_state(state, crtc_state,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> true, true);
> diff --git a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c
> index 98d4d7331767..44fc9fe4737a 100644
> --- a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c
> +++ b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c
> @@ -286,7 +286,6 @@ static int mdp5_plane_atomic_check_with_state(struct drm_crtc_state *crtc_state,
> uint32_t max_width, max_height;
> bool out_of_bounds = false;
> uint32_t caps = 0;
> - struct drm_rect clip = {};
> int min_scale, max_scale;
> int ret;
>
> @@ -323,11 +322,7 @@ static int mdp5_plane_atomic_check_with_state(struct drm_crtc_state *crtc_state,
> min_scale = FRAC_16_16(1, 8);
> max_scale = FRAC_16_16(8, 1);
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + ret = drm_atomic_helper_check_plane_state(state, crtc_state,
> min_scale, max_scale,
> true, true);
> if (ret)
> @@ -471,7 +466,6 @@ static int mdp5_plane_atomic_async_check(struct drm_plane *plane,
> {
> struct mdp5_plane_state *mdp5_state = to_mdp5_plane_state(state);
> struct drm_crtc_state *crtc_state;
> - struct drm_rect clip = {};
> int min_scale, max_scale;
> int ret;
>
> @@ -502,11 +496,7 @@ static int mdp5_plane_atomic_async_check(struct drm_plane *plane,
> min_scale = FRAC_16_16(1, 8);
> max_scale = FRAC_16_16(8, 1);
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + ret = drm_atomic_helper_check_plane_state(state, crtc_state,
> min_scale, max_scale,
> true, true);
> if (ret)
> diff --git a/drivers/gpu/drm/nouveau/nv50_display.c b/drivers/gpu/drm/nouveau/nv50_display.c
> index 5a9a51c735f0..eea94c098237 100644
> --- a/drivers/gpu/drm/nouveau/nv50_display.c
> +++ b/drivers/gpu/drm/nouveau/nv50_display.c
> @@ -1135,15 +1135,9 @@ static int
> nv50_curs_acquire(struct nv50_wndw *wndw, struct nv50_wndw_atom *asyw,
> struct nv50_head_atom *asyh)
> {
> - struct drm_rect clip = {};
> int ret;
>
> - if (asyh->state.enable)
> - drm_mode_get_hv_timing(&asyh->state.mode,
> - &clip.x2, &clip.y2);
> -
> ret = drm_atomic_helper_check_plane_state(&asyw->state, &asyh->state,
> - &clip,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> true, true);
> @@ -1427,18 +1421,12 @@ nv50_base_acquire(struct nv50_wndw *wndw, struct nv50_wndw_atom *asyw,
> struct nv50_head_atom *asyh)
> {
> const struct drm_framebuffer *fb = asyw->state.fb;
> - struct drm_rect clip = {};
> int ret;
>
> if (!fb->format->depth)
> return -EINVAL;
>
> - if (asyh->state.enable)
> - drm_mode_get_hv_timing(&asyh->state.mode,
> - &clip.x2, &clip.y2);
> -
> ret = drm_atomic_helper_check_plane_state(&asyw->state, &asyh->state,
> - &clip,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> false, true);
> diff --git a/drivers/gpu/drm/rcar-du/rcar_du_plane.c b/drivers/gpu/drm/rcar-du/rcar_du_plane.c
> index 5687a94d4cb1..68556bd9dad2 100644
> --- a/drivers/gpu/drm/rcar-du/rcar_du_plane.c
> +++ b/drivers/gpu/drm/rcar-du/rcar_du_plane.c
> @@ -572,7 +572,6 @@ int __rcar_du_plane_atomic_check(struct drm_plane *plane,
> {
> struct drm_device *dev = plane->dev;
> struct drm_crtc_state *crtc_state;
> - struct drm_rect clip = {};
> int ret;
>
> if (!state->crtc) {
> @@ -589,11 +588,7 @@ int __rcar_du_plane_atomic_check(struct drm_plane *plane,
> if (IS_ERR(crtc_state))
> return PTR_ERR(crtc_state);
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + ret = drm_atomic_helper_check_plane_state(state, crtc_state,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> true, true);
> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
> index cd2c72389629..b95e9d45a435 100644
> --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
> @@ -641,7 +641,6 @@ static int vop_plane_atomic_check(struct drm_plane *plane,
> struct vop_win *vop_win = to_vop_win(plane);
> const struct vop_win_data *win = vop_win->data;
> int ret;
> - struct drm_rect clip = {};
> int min_scale = win->phy->scl ? FRAC_16_16(1, 8) :
> DRM_PLANE_HELPER_NO_SCALING;
> int max_scale = win->phy->scl ? FRAC_16_16(8, 1) :
> @@ -654,11 +653,7 @@ static int vop_plane_atomic_check(struct drm_plane *plane,
> if (WARN_ON(!crtc_state))
> return -EINVAL;
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + ret = drm_atomic_helper_check_plane_state(state, crtc_state,
> min_scale, max_scale,
> true, true);
> if (ret)
> diff --git a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c
> index 2f0ccd50b54d..9a540330cb79 100644
> --- a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c
> +++ b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c
> @@ -211,7 +211,6 @@ static int sun8i_ui_layer_atomic_check(struct drm_plane *plane,
> struct drm_crtc *crtc = state->crtc;
> struct drm_crtc_state *crtc_state;
> int min_scale, max_scale;
> - struct drm_rect clip = {};
>
> if (!crtc)
> return 0;
> @@ -220,10 +219,6 @@ static int sun8i_ui_layer_atomic_check(struct drm_plane *plane,
> if (WARN_ON(!crtc_state))
> return -EINVAL;
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> min_scale = DRM_PLANE_HELPER_NO_SCALING;
> max_scale = DRM_PLANE_HELPER_NO_SCALING;
>
> @@ -232,7 +227,7 @@ static int sun8i_ui_layer_atomic_check(struct drm_plane *plane,
> max_scale = SUN8I_UI_SCALER_SCALE_MAX;
> }
>
> - return drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + return drm_atomic_helper_check_plane_state(state, crtc_state,
> min_scale, max_scale,
> true, true);
> }
> diff --git a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c
> index eb3bf2d7291a..5877f8ef5895 100644
> --- a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c
> +++ b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c
> @@ -239,7 +239,6 @@ static int sun8i_vi_layer_atomic_check(struct drm_plane *plane,
> struct drm_crtc *crtc = state->crtc;
> struct drm_crtc_state *crtc_state;
> int min_scale, max_scale;
> - struct drm_rect clip = {};
>
> if (!crtc)
> return 0;
> @@ -248,10 +247,6 @@ static int sun8i_vi_layer_atomic_check(struct drm_plane *plane,
> if (WARN_ON(!crtc_state))
> return -EINVAL;
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> min_scale = DRM_PLANE_HELPER_NO_SCALING;
> max_scale = DRM_PLANE_HELPER_NO_SCALING;
>
> @@ -260,7 +255,7 @@ static int sun8i_vi_layer_atomic_check(struct drm_plane *plane,
> max_scale = SUN8I_VI_SCALER_SCALE_MAX;
> }
>
> - return drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + return drm_atomic_helper_check_plane_state(state, crtc_state,
> min_scale, max_scale,
> true, true);
> }
> diff --git a/drivers/gpu/drm/tegra/plane.c b/drivers/gpu/drm/tegra/plane.c
> index 7267a01e6f08..a056fbf83b53 100644
> --- a/drivers/gpu/drm/tegra/plane.c
> +++ b/drivers/gpu/drm/tegra/plane.c
> @@ -82,7 +82,6 @@ int tegra_plane_state_add(struct tegra_plane *plane,
> {
> struct drm_crtc_state *crtc_state;
> struct tegra_dc_state *tegra;
> - struct drm_rect clip = {};
> int err;
>
> /* Propagate errors from allocation or locking failures. */
> @@ -90,12 +89,8 @@ int tegra_plane_state_add(struct tegra_plane *plane,
> if (IS_ERR(crtc_state))
> return PTR_ERR(crtc_state);
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> /* Check plane state for visibility and calculate clipping bounds */
> - err = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + err = drm_atomic_helper_check_plane_state(state, crtc_state,
> 0, INT_MAX, true, true);
> if (err < 0)
> return err;
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
> index 1107d6d03506..34ecc27fc30a 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
> @@ -443,17 +443,12 @@ int vmw_du_primary_plane_atomic_check(struct drm_plane *plane,
> {
> struct drm_crtc_state *crtc_state = NULL;
> struct drm_framebuffer *new_fb = state->fb;
> - struct drm_rect clip = {};
> int ret;
>
> if (state->crtc)
> crtc_state = drm_atomic_get_new_crtc_state(state->state, state->crtc);
>
> - if (crtc_state && crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - ret = drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + ret = drm_atomic_helper_check_plane_state(state, crtc_state,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> false, true);
> diff --git a/drivers/gpu/drm/zte/zx_plane.c b/drivers/gpu/drm/zte/zx_plane.c
> index 8e1f34274e24..94545adac50d 100644
> --- a/drivers/gpu/drm/zte/zx_plane.c
> +++ b/drivers/gpu/drm/zte/zx_plane.c
> @@ -55,7 +55,6 @@ static int zx_vl_plane_atomic_check(struct drm_plane *plane,
> struct drm_framebuffer *fb = plane_state->fb;
> struct drm_crtc *crtc = plane_state->crtc;
> struct drm_crtc_state *crtc_state;
> - struct drm_rect clip = {};
> int min_scale = FRAC_16_16(1, 8);
> int max_scale = FRAC_16_16(8, 1);
>
> @@ -75,12 +74,8 @@ static int zx_vl_plane_atomic_check(struct drm_plane *plane,
> if (!plane_state->crtc)
> return -EINVAL;
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> return drm_atomic_helper_check_plane_state(plane_state, crtc_state,
> - &clip, min_scale, max_scale,
> + min_scale, max_scale,
> true, true);
> }
>
> @@ -291,7 +286,6 @@ static int zx_gl_plane_atomic_check(struct drm_plane *plane,
> struct drm_framebuffer *fb = plane_state->fb;
> struct drm_crtc *crtc = plane_state->crtc;
> struct drm_crtc_state *crtc_state;
> - struct drm_rect clip = {};
>
> if (!crtc || !fb)
> return 0;
> @@ -309,12 +303,7 @@ static int zx_gl_plane_atomic_check(struct drm_plane *plane,
> if (!plane_state->crtc)
> return -EINVAL;
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> return drm_atomic_helper_check_plane_state(plane_state, crtc_state,
> - &clip,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> false, true);
> diff --git a/include/drm/drm_atomic_helper.h b/include/drm/drm_atomic_helper.h
> index 4842ee9485ce..26aaba58d6ce 100644
> --- a/include/drm/drm_atomic_helper.h
> +++ b/include/drm/drm_atomic_helper.h
> @@ -40,7 +40,6 @@ int drm_atomic_helper_check_modeset(struct drm_device *dev,
> struct drm_atomic_state *state);
> int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
> const struct drm_crtc_state *crtc_state,
> - const struct drm_rect *clip,
> int min_scale,
> int max_scale,
> bool can_position,
> diff --git a/include/drm/drm_plane_helper.h b/include/drm/drm_plane_helper.h
> index 8aa49c0ecd4d..28d7ce620729 100644
> --- a/include/drm/drm_plane_helper.h
> +++ b/include/drm/drm_plane_helper.h
> @@ -43,7 +43,6 @@ int drm_plane_helper_check_update(struct drm_plane *plane,
> struct drm_framebuffer *fb,
> struct drm_rect *src,
> struct drm_rect *dest,
> - const struct drm_rect *clip,
> unsigned int rotation,
> int min_scale,
> int max_scale,
> --
> 2.13.6
>
^ permalink raw reply [flat|nested] 34+ messages in thread
* [PATCH 5/5] drm: Don't pass clip to drm_atomic_helper_check_plane_state()
@ 2018-01-26 5:23 ` Neil Armstrong
0 siblings, 0 replies; 34+ messages in thread
From: Neil Armstrong @ 2018-01-26 5:23 UTC (permalink / raw)
To: linus-amlogic
On 23/01/2018 18:08, Ville Syrjala wrote:
> From: Ville Syrj?l? <ville.syrjala@linux.intel.com>
>
> Move the plane clip rectangle handling into
> drm_atomic_helper_check_plane_state(). Drivers no longer
> have to worry about such mundane details.
>
> v2: Convert armada, rcar, and sun4i as well
>
> Cc: Liviu Dudau <liviu.dudau@arm.com>
> Cc: Brian Starkey <brian.starkey@arm.com>
> Cc: Mali DP Maintainers <malidp@foss.arm.com>
> Cc: Daniel Vetter <daniel.vetter@intel.com>
> Cc: Gustavo Padovan <gustavo@padovan.org>
> Cc: Sean Paul <seanpaul@chromium.org>
> Cc: Philipp Zabel <p.zabel@pengutronix.de>
> Cc: CK Hu <ck.hu@mediatek.com>
> Cc: Neil Armstrong <narmstrong@baylibre.com>
> Cc: Rob Clark <robdclark@gmail.com>
> Cc: Ben Skeggs <bskeggs@redhat.com>
> Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> Cc: Sandy Huang <hjc@rock-chips.com>
> Cc: "Heiko St?bner" <heiko@sntech.de>
> Cc: Maxime Ripard <maxime.ripard@free-electrons.com>
> Cc: Thierry Reding <thierry.reding@gmail.com>
> Cc: VMware Graphics <linux-graphics-maintainer@vmware.com>
> Cc: Sinclair Yeh <syeh@vmware.com>
> Cc: Thomas Hellstrom <thellstrom@vmware.com>
> Cc: Shawn Guo <shawnguo@kernel.org>
> Cc: Archit Taneja <architt@codeaurora.org>
> Cc: linux-amlogic at lists.infradead.org
> Cc: linux-arm-msm at vger.kernel.org
> Cc: freedreno at lists.freedesktop.org
> Cc: nouveau at lists.freedesktop.org
> Cc: linux-renesas-soc at vger.kernel.org
> Cc: linux-tegra at vger.kernel.org
> Cc: Russell King <rmk+kernel@armlinux.org.uk>
> Suggested-by: Daniel Vetter <daniel@ffwll.ch>
> Signed-off-by: Ville Syrj?l? <ville.syrjala@linux.intel.com>
> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> Reviewed-by: Thierry Reding <treding@nvidia.com>
> Reviewed-by: Archit Taneja <architt@codeaurora.org> #msm
> ---
> drivers/gpu/drm/arm/hdlcd_crtc.c | 7 +------
> drivers/gpu/drm/arm/malidp_planes.c | 7 +------
> drivers/gpu/drm/armada/armada_crtc.c | 8 ++------
> drivers/gpu/drm/armada/armada_overlay.c | 8 ++------
> drivers/gpu/drm/drm_atomic_helper.c | 12 +++++++-----
> drivers/gpu/drm/drm_plane_helper.c | 11 +++--------
> drivers/gpu/drm/drm_simple_kms_helper.c | 6 ------
> drivers/gpu/drm/i915/intel_display.c | 12 ------------
> drivers/gpu/drm/imx/ipuv3-plane.c | 7 +------
> drivers/gpu/drm/mediatek/mtk_drm_plane.c | 7 +------
> drivers/gpu/drm/meson/meson_plane.c | 7 +------
> drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c | 14 ++------------
> drivers/gpu/drm/nouveau/nv50_display.c | 12 ------------
> drivers/gpu/drm/rcar-du/rcar_du_plane.c | 7 +------
> drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 7 +------
> drivers/gpu/drm/sun4i/sun8i_ui_layer.c | 7 +------
> drivers/gpu/drm/sun4i/sun8i_vi_layer.c | 7 +------
> drivers/gpu/drm/tegra/plane.c | 7 +------
> drivers/gpu/drm/vmwgfx/vmwgfx_kms.c | 7 +------
> drivers/gpu/drm/zte/zx_plane.c | 13 +------------
> include/drm/drm_atomic_helper.h | 1 -
> include/drm/drm_plane_helper.h | 1 -
> 22 files changed, 28 insertions(+), 147 deletions(-)
>
[...]
> diff --git a/drivers/gpu/drm/meson/meson_plane.c b/drivers/gpu/drm/meson/meson_plane.c
> index 3801bee1f9e6..c78a3a59f58c 100644
> --- a/drivers/gpu/drm/meson/meson_plane.c
> +++ b/drivers/gpu/drm/meson/meson_plane.c
> @@ -49,7 +49,6 @@ static int meson_plane_atomic_check(struct drm_plane *plane,
> struct drm_plane_state *state)
> {
> struct drm_crtc_state *crtc_state;
> - struct drm_rect clip = { 0, };
>
> if (!state->crtc)
> return 0;
> @@ -58,11 +57,7 @@ static int meson_plane_atomic_check(struct drm_plane *plane,
> if (IS_ERR(crtc_state))
> return PTR_ERR(crtc_state);
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - return drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + return drm_atomic_helper_check_plane_state(state, crtc_state,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> true, true);
[...]
> diff --git a/include/drm/drm_atomic_helper.h b/include/drm/drm_atomic_helper.h
> index 4842ee9485ce..26aaba58d6ce 100644
> --- a/include/drm/drm_atomic_helper.h
> +++ b/include/drm/drm_atomic_helper.h
> @@ -40,7 +40,6 @@ int drm_atomic_helper_check_modeset(struct drm_device *dev,
> struct drm_atomic_state *state);
> int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
> const struct drm_crtc_state *crtc_state,
> - const struct drm_rect *clip,
> int min_scale,
> int max_scale,
> bool can_position,
> diff --git a/include/drm/drm_plane_helper.h b/include/drm/drm_plane_helper.h
> index 8aa49c0ecd4d..28d7ce620729 100644
> --- a/include/drm/drm_plane_helper.h
> +++ b/include/drm/drm_plane_helper.h
> @@ -43,7 +43,6 @@ int drm_plane_helper_check_update(struct drm_plane *plane,
> struct drm_framebuffer *fb,
> struct drm_rect *src,
> struct drm_rect *dest,
> - const struct drm_rect *clip,
> unsigned int rotation,
> int min_scale,
> int max_scale,
>
For meson driver,
Acked-by: Neil Armstrong <narmstrong@baylibre.com>
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 5/5] drm: Don't pass clip to drm_atomic_helper_check_plane_state()
@ 2018-01-26 5:23 ` Neil Armstrong
0 siblings, 0 replies; 34+ messages in thread
From: Neil Armstrong @ 2018-01-26 5:23 UTC (permalink / raw)
To: Ville Syrjala, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW
Cc: Heiko Stübner, Gustavo Padovan, Liviu Dudau, Thierry Reding,
Laurent Pinchart, Daniel Vetter, Thomas Hellstrom, Sinclair Yeh,
VMware Graphics, Ben Skeggs,
nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW, CK Hu,
Mali DP Maintainers, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA,
Archit Taneja, Russell King, Sean Paul,
linux-tegra-u79uwXL29TY76Z2rM5mHXA,
linux-amlogic-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW, Sandy Huang,
linux-renesas-soc-u79uwXL29TY76Z2rM5mHXA, Rob Clark
On 23/01/2018 18:08, Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Move the plane clip rectangle handling into
> drm_atomic_helper_check_plane_state(). Drivers no longer
> have to worry about such mundane details.
>
> v2: Convert armada, rcar, and sun4i as well
>
> Cc: Liviu Dudau <liviu.dudau@arm.com>
> Cc: Brian Starkey <brian.starkey@arm.com>
> Cc: Mali DP Maintainers <malidp@foss.arm.com>
> Cc: Daniel Vetter <daniel.vetter@intel.com>
> Cc: Gustavo Padovan <gustavo@padovan.org>
> Cc: Sean Paul <seanpaul@chromium.org>
> Cc: Philipp Zabel <p.zabel@pengutronix.de>
> Cc: CK Hu <ck.hu@mediatek.com>
> Cc: Neil Armstrong <narmstrong@baylibre.com>
> Cc: Rob Clark <robdclark@gmail.com>
> Cc: Ben Skeggs <bskeggs@redhat.com>
> Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> Cc: Sandy Huang <hjc@rock-chips.com>
> Cc: "Heiko Stübner" <heiko@sntech.de>
> Cc: Maxime Ripard <maxime.ripard@free-electrons.com>
> Cc: Thierry Reding <thierry.reding@gmail.com>
> Cc: VMware Graphics <linux-graphics-maintainer@vmware.com>
> Cc: Sinclair Yeh <syeh@vmware.com>
> Cc: Thomas Hellstrom <thellstrom@vmware.com>
> Cc: Shawn Guo <shawnguo@kernel.org>
> Cc: Archit Taneja <architt@codeaurora.org>
> Cc: linux-amlogic@lists.infradead.org
> Cc: linux-arm-msm@vger.kernel.org
> Cc: freedreno@lists.freedesktop.org
> Cc: nouveau@lists.freedesktop.org
> Cc: linux-renesas-soc@vger.kernel.org
> Cc: linux-tegra@vger.kernel.org
> Cc: Russell King <rmk+kernel@armlinux.org.uk>
> Suggested-by: Daniel Vetter <daniel@ffwll.ch>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> Reviewed-by: Thierry Reding <treding@nvidia.com>
> Reviewed-by: Archit Taneja <architt@codeaurora.org> #msm
> ---
> drivers/gpu/drm/arm/hdlcd_crtc.c | 7 +------
> drivers/gpu/drm/arm/malidp_planes.c | 7 +------
> drivers/gpu/drm/armada/armada_crtc.c | 8 ++------
> drivers/gpu/drm/armada/armada_overlay.c | 8 ++------
> drivers/gpu/drm/drm_atomic_helper.c | 12 +++++++-----
> drivers/gpu/drm/drm_plane_helper.c | 11 +++--------
> drivers/gpu/drm/drm_simple_kms_helper.c | 6 ------
> drivers/gpu/drm/i915/intel_display.c | 12 ------------
> drivers/gpu/drm/imx/ipuv3-plane.c | 7 +------
> drivers/gpu/drm/mediatek/mtk_drm_plane.c | 7 +------
> drivers/gpu/drm/meson/meson_plane.c | 7 +------
> drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c | 14 ++------------
> drivers/gpu/drm/nouveau/nv50_display.c | 12 ------------
> drivers/gpu/drm/rcar-du/rcar_du_plane.c | 7 +------
> drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 7 +------
> drivers/gpu/drm/sun4i/sun8i_ui_layer.c | 7 +------
> drivers/gpu/drm/sun4i/sun8i_vi_layer.c | 7 +------
> drivers/gpu/drm/tegra/plane.c | 7 +------
> drivers/gpu/drm/vmwgfx/vmwgfx_kms.c | 7 +------
> drivers/gpu/drm/zte/zx_plane.c | 13 +------------
> include/drm/drm_atomic_helper.h | 1 -
> include/drm/drm_plane_helper.h | 1 -
> 22 files changed, 28 insertions(+), 147 deletions(-)
>
[...]
> diff --git a/drivers/gpu/drm/meson/meson_plane.c b/drivers/gpu/drm/meson/meson_plane.c
> index 3801bee1f9e6..c78a3a59f58c 100644
> --- a/drivers/gpu/drm/meson/meson_plane.c
> +++ b/drivers/gpu/drm/meson/meson_plane.c
> @@ -49,7 +49,6 @@ static int meson_plane_atomic_check(struct drm_plane *plane,
> struct drm_plane_state *state)
> {
> struct drm_crtc_state *crtc_state;
> - struct drm_rect clip = { 0, };
>
> if (!state->crtc)
> return 0;
> @@ -58,11 +57,7 @@ static int meson_plane_atomic_check(struct drm_plane *plane,
> if (IS_ERR(crtc_state))
> return PTR_ERR(crtc_state);
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - return drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + return drm_atomic_helper_check_plane_state(state, crtc_state,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> true, true);
[...]
> diff --git a/include/drm/drm_atomic_helper.h b/include/drm/drm_atomic_helper.h
> index 4842ee9485ce..26aaba58d6ce 100644
> --- a/include/drm/drm_atomic_helper.h
> +++ b/include/drm/drm_atomic_helper.h
> @@ -40,7 +40,6 @@ int drm_atomic_helper_check_modeset(struct drm_device *dev,
> struct drm_atomic_state *state);
> int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
> const struct drm_crtc_state *crtc_state,
> - const struct drm_rect *clip,
> int min_scale,
> int max_scale,
> bool can_position,
> diff --git a/include/drm/drm_plane_helper.h b/include/drm/drm_plane_helper.h
> index 8aa49c0ecd4d..28d7ce620729 100644
> --- a/include/drm/drm_plane_helper.h
> +++ b/include/drm/drm_plane_helper.h
> @@ -43,7 +43,6 @@ int drm_plane_helper_check_update(struct drm_plane *plane,
> struct drm_framebuffer *fb,
> struct drm_rect *src,
> struct drm_rect *dest,
> - const struct drm_rect *clip,
> unsigned int rotation,
> int min_scale,
> int max_scale,
>
For meson driver,
Acked-by: Neil Armstrong <narmstrong@baylibre.com>
_______________________________________________
Freedreno mailing list
Freedreno@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/freedreno
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 5/5] drm: Don't pass clip to drm_atomic_helper_check_plane_state()
@ 2018-01-26 5:23 ` Neil Armstrong
0 siblings, 0 replies; 34+ messages in thread
From: Neil Armstrong @ 2018-01-26 5:23 UTC (permalink / raw)
To: Ville Syrjala, dri-devel
Cc: Liviu Dudau, Brian Starkey, Mali DP Maintainers, Daniel Vetter,
Gustavo Padovan, Sean Paul, Philipp Zabel, CK Hu, Rob Clark,
Ben Skeggs, Laurent Pinchart, Sandy Huang, Heiko Stübner,
Maxime Ripard, Thierry Reding, VMware Graphics, Sinclair Yeh,
Thomas Hellstrom, Shawn Guo, Archit Taneja, linux-amlogic,
linux-arm-msm, freedreno, nouveau, linux-renesas-soc, linux-tegra,
Russell King
On 23/01/2018 18:08, Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Move the plane clip rectangle handling into
> drm_atomic_helper_check_plane_state(). Drivers no longer
> have to worry about such mundane details.
>
> v2: Convert armada, rcar, and sun4i as well
>
> Cc: Liviu Dudau <liviu.dudau@arm.com>
> Cc: Brian Starkey <brian.starkey@arm.com>
> Cc: Mali DP Maintainers <malidp@foss.arm.com>
> Cc: Daniel Vetter <daniel.vetter@intel.com>
> Cc: Gustavo Padovan <gustavo@padovan.org>
> Cc: Sean Paul <seanpaul@chromium.org>
> Cc: Philipp Zabel <p.zabel@pengutronix.de>
> Cc: CK Hu <ck.hu@mediatek.com>
> Cc: Neil Armstrong <narmstrong@baylibre.com>
> Cc: Rob Clark <robdclark@gmail.com>
> Cc: Ben Skeggs <bskeggs@redhat.com>
> Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> Cc: Sandy Huang <hjc@rock-chips.com>
> Cc: "Heiko Stübner" <heiko@sntech.de>
> Cc: Maxime Ripard <maxime.ripard@free-electrons.com>
> Cc: Thierry Reding <thierry.reding@gmail.com>
> Cc: VMware Graphics <linux-graphics-maintainer@vmware.com>
> Cc: Sinclair Yeh <syeh@vmware.com>
> Cc: Thomas Hellstrom <thellstrom@vmware.com>
> Cc: Shawn Guo <shawnguo@kernel.org>
> Cc: Archit Taneja <architt@codeaurora.org>
> Cc: linux-amlogic@lists.infradead.org
> Cc: linux-arm-msm@vger.kernel.org
> Cc: freedreno@lists.freedesktop.org
> Cc: nouveau@lists.freedesktop.org
> Cc: linux-renesas-soc@vger.kernel.org
> Cc: linux-tegra@vger.kernel.org
> Cc: Russell King <rmk+kernel@armlinux.org.uk>
> Suggested-by: Daniel Vetter <daniel@ffwll.ch>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> Reviewed-by: Thierry Reding <treding@nvidia.com>
> Reviewed-by: Archit Taneja <architt@codeaurora.org> #msm
> ---
> drivers/gpu/drm/arm/hdlcd_crtc.c | 7 +------
> drivers/gpu/drm/arm/malidp_planes.c | 7 +------
> drivers/gpu/drm/armada/armada_crtc.c | 8 ++------
> drivers/gpu/drm/armada/armada_overlay.c | 8 ++------
> drivers/gpu/drm/drm_atomic_helper.c | 12 +++++++-----
> drivers/gpu/drm/drm_plane_helper.c | 11 +++--------
> drivers/gpu/drm/drm_simple_kms_helper.c | 6 ------
> drivers/gpu/drm/i915/intel_display.c | 12 ------------
> drivers/gpu/drm/imx/ipuv3-plane.c | 7 +------
> drivers/gpu/drm/mediatek/mtk_drm_plane.c | 7 +------
> drivers/gpu/drm/meson/meson_plane.c | 7 +------
> drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c | 14 ++------------
> drivers/gpu/drm/nouveau/nv50_display.c | 12 ------------
> drivers/gpu/drm/rcar-du/rcar_du_plane.c | 7 +------
> drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 7 +------
> drivers/gpu/drm/sun4i/sun8i_ui_layer.c | 7 +------
> drivers/gpu/drm/sun4i/sun8i_vi_layer.c | 7 +------
> drivers/gpu/drm/tegra/plane.c | 7 +------
> drivers/gpu/drm/vmwgfx/vmwgfx_kms.c | 7 +------
> drivers/gpu/drm/zte/zx_plane.c | 13 +------------
> include/drm/drm_atomic_helper.h | 1 -
> include/drm/drm_plane_helper.h | 1 -
> 22 files changed, 28 insertions(+), 147 deletions(-)
>
[...]
> diff --git a/drivers/gpu/drm/meson/meson_plane.c b/drivers/gpu/drm/meson/meson_plane.c
> index 3801bee1f9e6..c78a3a59f58c 100644
> --- a/drivers/gpu/drm/meson/meson_plane.c
> +++ b/drivers/gpu/drm/meson/meson_plane.c
> @@ -49,7 +49,6 @@ static int meson_plane_atomic_check(struct drm_plane *plane,
> struct drm_plane_state *state)
> {
> struct drm_crtc_state *crtc_state;
> - struct drm_rect clip = { 0, };
>
> if (!state->crtc)
> return 0;
> @@ -58,11 +57,7 @@ static int meson_plane_atomic_check(struct drm_plane *plane,
> if (IS_ERR(crtc_state))
> return PTR_ERR(crtc_state);
>
> - if (crtc_state->enable)
> - drm_mode_get_hv_timing(&crtc_state->mode,
> - &clip.x2, &clip.y2);
> -
> - return drm_atomic_helper_check_plane_state(state, crtc_state, &clip,
> + return drm_atomic_helper_check_plane_state(state, crtc_state,
> DRM_PLANE_HELPER_NO_SCALING,
> DRM_PLANE_HELPER_NO_SCALING,
> true, true);
[...]
> diff --git a/include/drm/drm_atomic_helper.h b/include/drm/drm_atomic_helper.h
> index 4842ee9485ce..26aaba58d6ce 100644
> --- a/include/drm/drm_atomic_helper.h
> +++ b/include/drm/drm_atomic_helper.h
> @@ -40,7 +40,6 @@ int drm_atomic_helper_check_modeset(struct drm_device *dev,
> struct drm_atomic_state *state);
> int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
> const struct drm_crtc_state *crtc_state,
> - const struct drm_rect *clip,
> int min_scale,
> int max_scale,
> bool can_position,
> diff --git a/include/drm/drm_plane_helper.h b/include/drm/drm_plane_helper.h
> index 8aa49c0ecd4d..28d7ce620729 100644
> --- a/include/drm/drm_plane_helper.h
> +++ b/include/drm/drm_plane_helper.h
> @@ -43,7 +43,6 @@ int drm_plane_helper_check_update(struct drm_plane *plane,
> struct drm_framebuffer *fb,
> struct drm_rect *src,
> struct drm_rect *dest,
> - const struct drm_rect *clip,
> unsigned int rotation,
> int min_scale,
> int max_scale,
>
For meson driver,
Acked-by: Neil Armstrong <narmstrong@baylibre.com>
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 3/5] drm/armada: Construct a temporary crtc state for plane checks
2018-01-23 19:02 ` Ville Syrjälä
@ 2018-02-02 14:10 ` Ville Syrjälä
2018-02-02 15:10 ` Ville Syrjälä
0 siblings, 1 reply; 34+ messages in thread
From: Ville Syrjälä @ 2018-02-02 14:10 UTC (permalink / raw)
To: Russell King - ARM Linux; +Cc: Dave Airlie, dri-devel
On Tue, Jan 23, 2018 at 09:02:35PM +0200, Ville Syrjälä wrote:
> On Tue, Jan 23, 2018 at 06:42:00PM +0000, Russell King - ARM Linux wrote:
> > On Tue, Jan 23, 2018 at 07:08:55PM +0200, Ville Syrjala wrote:
> > > From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > >
> > > As armada isn't an atomic driver trying to pass a non-populated
> > > crtc->state to drm_atomic_helper_check_plane_state() will end in tears.
> > > Construct a temporary crtc state a la drm_plane_helper_check_update()
> > > and pass that instead. For now we just really need crtc_state->enable
> > > to be there.
> >
> > Would it be possible to solve this by having the atomic state setup
> > for non-atomic drivers instead, so we're not unwinding some of the
> > work that's already been done to try and convert drivers /to/
> > atomic modeset?
>
> Dunno. Feels like a wasted effort adding more code that'll just get
> ripped out as soon as the atomic conversion happens. And I'd rather
> not have to worry about potentially stale states hanging around, in
> case you forgot to update something somewhere.
>
> In any case, I don't think this is unwinding anything. Once you have
> the atomic conversion done sufficiently you can just drop these
> temporary states. We already have the temp state for the plane here
> anyway, and pairing that with a crtc state seems rather logical.
So yea or nay on these armada patches?
--
Ville Syrjälä
Intel OTC
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 2/5] drm/sun4i: Use drm_mode_get_hv_timing() to populate plane clip rectangle
2018-01-23 17:08 ` [PATCH 2/5] drm/sun4i: " Ville Syrjala
@ 2018-02-02 15:04 ` Ville Syrjälä
0 siblings, 0 replies; 34+ messages in thread
From: Ville Syrjälä @ 2018-02-02 15:04 UTC (permalink / raw)
To: dri-devel; +Cc: Maxime Ripard
On Tue, Jan 23, 2018 at 07:08:54PM +0200, Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Use drm_mode_get_hv_timing() to fill out the plane clip rectangle.
>
> Note that this replaces crtc_state->adjusted_mode usage with
> crtc_state->mode. The latter is the correct choice since that's the
> mode the user provided and it matches the plane crtc coordinates
> the user also provided.
>
> Once everyone agrees on this we can move the clip handling into
> drm_atomic_helper_check_plane_state().
>
> Cc: Maxime Ripard <maxime.ripard@free-electrons.com>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Pushed to drm-misc-next with Maximes's irc r-b:
16:13 < vsyrjala> mripard: got time to look at https://patchwork.freedesktop.org/patch/200244/ ?
...
16:25 < mripard> vsyrjala: it looks good to me, you can add my Reviewed-by
Also pushed 1/5. Thanks for the reviews.
> ---
> drivers/gpu/drm/sun4i/sun8i_ui_layer.c | 9 ++++-----
> drivers/gpu/drm/sun4i/sun8i_vi_layer.c | 9 ++++-----
> 2 files changed, 8 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c
> index 28d7c48d50fe..2f0ccd50b54d 100644
> --- a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c
> +++ b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c
> @@ -211,7 +211,7 @@ static int sun8i_ui_layer_atomic_check(struct drm_plane *plane,
> struct drm_crtc *crtc = state->crtc;
> struct drm_crtc_state *crtc_state;
> int min_scale, max_scale;
> - struct drm_rect clip;
> + struct drm_rect clip = {};
>
> if (!crtc)
> return 0;
> @@ -220,10 +220,9 @@ static int sun8i_ui_layer_atomic_check(struct drm_plane *plane,
> if (WARN_ON(!crtc_state))
> return -EINVAL;
>
> - clip.x1 = 0;
> - clip.y1 = 0;
> - clip.x2 = crtc_state->adjusted_mode.hdisplay;
> - clip.y2 = crtc_state->adjusted_mode.vdisplay;
> + if (crtc_state->enable)
> + drm_mode_get_hv_timing(&crtc_state->mode,
> + &clip.x2, &clip.y2);
>
> min_scale = DRM_PLANE_HELPER_NO_SCALING;
> max_scale = DRM_PLANE_HELPER_NO_SCALING;
> diff --git a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c
> index 40c3b303068a..eb3bf2d7291a 100644
> --- a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c
> +++ b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c
> @@ -239,7 +239,7 @@ static int sun8i_vi_layer_atomic_check(struct drm_plane *plane,
> struct drm_crtc *crtc = state->crtc;
> struct drm_crtc_state *crtc_state;
> int min_scale, max_scale;
> - struct drm_rect clip;
> + struct drm_rect clip = {};
>
> if (!crtc)
> return 0;
> @@ -248,10 +248,9 @@ static int sun8i_vi_layer_atomic_check(struct drm_plane *plane,
> if (WARN_ON(!crtc_state))
> return -EINVAL;
>
> - clip.x1 = 0;
> - clip.y1 = 0;
> - clip.x2 = crtc_state->adjusted_mode.hdisplay;
> - clip.y2 = crtc_state->adjusted_mode.vdisplay;
> + if (crtc_state->enable)
> + drm_mode_get_hv_timing(&crtc_state->mode,
> + &clip.x2, &clip.y2);
>
> min_scale = DRM_PLANE_HELPER_NO_SCALING;
> max_scale = DRM_PLANE_HELPER_NO_SCALING;
> --
> 2.13.6
--
Ville Syrjälä
Intel OTC
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 3/5] drm/armada: Construct a temporary crtc state for plane checks
2018-02-02 14:10 ` Ville Syrjälä
@ 2018-02-02 15:10 ` Ville Syrjälä
2018-02-23 15:55 ` Ville Syrjälä
0 siblings, 1 reply; 34+ messages in thread
From: Ville Syrjälä @ 2018-02-02 15:10 UTC (permalink / raw)
To: Russell King - ARM Linux; +Cc: Dave Airlie, dri-devel
On Fri, Feb 02, 2018 at 04:10:39PM +0200, Ville Syrjälä wrote:
> On Tue, Jan 23, 2018 at 09:02:35PM +0200, Ville Syrjälä wrote:
> > On Tue, Jan 23, 2018 at 06:42:00PM +0000, Russell King - ARM Linux wrote:
> > > On Tue, Jan 23, 2018 at 07:08:55PM +0200, Ville Syrjala wrote:
> > > > From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > > >
> > > > As armada isn't an atomic driver trying to pass a non-populated
> > > > crtc->state to drm_atomic_helper_check_plane_state() will end in tears.
> > > > Construct a temporary crtc state a la drm_plane_helper_check_update()
> > > > and pass that instead. For now we just really need crtc_state->enable
> > > > to be there.
> > >
> > > Would it be possible to solve this by having the atomic state setup
> > > for non-atomic drivers instead, so we're not unwinding some of the
> > > work that's already been done to try and convert drivers /to/
> > > atomic modeset?
> >
> > Dunno. Feels like a wasted effort adding more code that'll just get
> > ripped out as soon as the atomic conversion happens. And I'd rather
> > not have to worry about potentially stale states hanging around, in
> > case you forgot to update something somewhere.
> >
> > In any case, I don't think this is unwinding anything. Once you have
> > the atomic conversion done sufficiently you can just drop these
> > temporary states. We already have the temp state for the plane here
> > anyway, and pairing that with a crtc state seems rather logical.
>
> So yea or nay on these armada patches?
Also cc:ing Lucas since apparently armada is somehow related to
etnaviv...
I have my doubts about the current code working at all (due to
the conflict resolution between my refactoring and rmk's work).
--
Ville Syrjälä
Intel OTC
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 34+ messages in thread
* [PATCH 5/5] drm: Don't pass clip to drm_atomic_helper_check_plane_state()
2018-01-23 17:08 ` Ville Syrjala
(?)
@ 2018-02-05 6:50 ` Shawn Guo
-1 siblings, 0 replies; 34+ messages in thread
From: Shawn Guo @ 2018-02-05 6:50 UTC (permalink / raw)
To: linus-amlogic
On Tue, Jan 23, 2018 at 07:08:57PM +0200, Ville Syrjala wrote:
> From: Ville Syrj?l? <ville.syrjala@linux.intel.com>
>
> Move the plane clip rectangle handling into
> drm_atomic_helper_check_plane_state(). Drivers no longer
> have to worry about such mundane details.
>
> v2: Convert armada, rcar, and sun4i as well
>
> Cc: Liviu Dudau <liviu.dudau@arm.com>
> Cc: Brian Starkey <brian.starkey@arm.com>
> Cc: Mali DP Maintainers <malidp@foss.arm.com>
> Cc: Daniel Vetter <daniel.vetter@intel.com>
> Cc: Gustavo Padovan <gustavo@padovan.org>
> Cc: Sean Paul <seanpaul@chromium.org>
> Cc: Philipp Zabel <p.zabel@pengutronix.de>
> Cc: CK Hu <ck.hu@mediatek.com>
> Cc: Neil Armstrong <narmstrong@baylibre.com>
> Cc: Rob Clark <robdclark@gmail.com>
> Cc: Ben Skeggs <bskeggs@redhat.com>
> Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> Cc: Sandy Huang <hjc@rock-chips.com>
> Cc: "Heiko St?bner" <heiko@sntech.de>
> Cc: Maxime Ripard <maxime.ripard@free-electrons.com>
> Cc: Thierry Reding <thierry.reding@gmail.com>
> Cc: VMware Graphics <linux-graphics-maintainer@vmware.com>
> Cc: Sinclair Yeh <syeh@vmware.com>
> Cc: Thomas Hellstrom <thellstrom@vmware.com>
> Cc: Shawn Guo <shawnguo@kernel.org>
> Cc: Archit Taneja <architt@codeaurora.org>
> Cc: linux-amlogic at lists.infradead.org
> Cc: linux-arm-msm at vger.kernel.org
> Cc: freedreno at lists.freedesktop.org
> Cc: nouveau at lists.freedesktop.org
> Cc: linux-renesas-soc at vger.kernel.org
> Cc: linux-tegra at vger.kernel.org
> Cc: Russell King <rmk+kernel@armlinux.org.uk>
> Suggested-by: Daniel Vetter <daniel@ffwll.ch>
> Signed-off-by: Ville Syrj?l? <ville.syrjala@linux.intel.com>
> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> Reviewed-by: Thierry Reding <treding@nvidia.com>
> Reviewed-by: Archit Taneja <architt@codeaurora.org> #msm
> ---
...
> drivers/gpu/drm/zte/zx_plane.c | 13 +------------
Acked-by: Shawn Guo <shawnguo@kernel.org>
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 5/5] drm: Don't pass clip to drm_atomic_helper_check_plane_state()
@ 2018-02-05 6:50 ` Shawn Guo
0 siblings, 0 replies; 34+ messages in thread
From: Shawn Guo @ 2018-02-05 6:50 UTC (permalink / raw)
To: Ville Syrjala
Cc: Neil Armstrong, Liviu Dudau, dri-devel, Thierry Reding,
Laurent Pinchart, Daniel Vetter, Thomas Hellstrom,
VMware Graphics, Ben Skeggs, nouveau, Mali DP Maintainers,
linux-arm-msm, Russell King, linux-tegra, linux-amlogic,
linux-renesas-soc, Maxime Ripard, freedreno
On Tue, Jan 23, 2018 at 07:08:57PM +0200, Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Move the plane clip rectangle handling into
> drm_atomic_helper_check_plane_state(). Drivers no longer
> have to worry about such mundane details.
>
> v2: Convert armada, rcar, and sun4i as well
>
> Cc: Liviu Dudau <liviu.dudau@arm.com>
> Cc: Brian Starkey <brian.starkey@arm.com>
> Cc: Mali DP Maintainers <malidp@foss.arm.com>
> Cc: Daniel Vetter <daniel.vetter@intel.com>
> Cc: Gustavo Padovan <gustavo@padovan.org>
> Cc: Sean Paul <seanpaul@chromium.org>
> Cc: Philipp Zabel <p.zabel@pengutronix.de>
> Cc: CK Hu <ck.hu@mediatek.com>
> Cc: Neil Armstrong <narmstrong@baylibre.com>
> Cc: Rob Clark <robdclark@gmail.com>
> Cc: Ben Skeggs <bskeggs@redhat.com>
> Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> Cc: Sandy Huang <hjc@rock-chips.com>
> Cc: "Heiko Stübner" <heiko@sntech.de>
> Cc: Maxime Ripard <maxime.ripard@free-electrons.com>
> Cc: Thierry Reding <thierry.reding@gmail.com>
> Cc: VMware Graphics <linux-graphics-maintainer@vmware.com>
> Cc: Sinclair Yeh <syeh@vmware.com>
> Cc: Thomas Hellstrom <thellstrom@vmware.com>
> Cc: Shawn Guo <shawnguo@kernel.org>
> Cc: Archit Taneja <architt@codeaurora.org>
> Cc: linux-amlogic@lists.infradead.org
> Cc: linux-arm-msm@vger.kernel.org
> Cc: freedreno@lists.freedesktop.org
> Cc: nouveau@lists.freedesktop.org
> Cc: linux-renesas-soc@vger.kernel.org
> Cc: linux-tegra@vger.kernel.org
> Cc: Russell King <rmk+kernel@armlinux.org.uk>
> Suggested-by: Daniel Vetter <daniel@ffwll.ch>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> Reviewed-by: Thierry Reding <treding@nvidia.com>
> Reviewed-by: Archit Taneja <architt@codeaurora.org> #msm
> ---
...
> drivers/gpu/drm/zte/zx_plane.c | 13 +------------
Acked-by: Shawn Guo <shawnguo@kernel.org>
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 5/5] drm: Don't pass clip to drm_atomic_helper_check_plane_state()
@ 2018-02-05 6:50 ` Shawn Guo
0 siblings, 0 replies; 34+ messages in thread
From: Shawn Guo @ 2018-02-05 6:50 UTC (permalink / raw)
To: Ville Syrjala
Cc: dri-devel, Liviu Dudau, Brian Starkey, Mali DP Maintainers,
Daniel Vetter, Gustavo Padovan, Sean Paul, Philipp Zabel, CK Hu,
Neil Armstrong, Rob Clark, Ben Skeggs, Laurent Pinchart,
Sandy Huang, Heiko Stübner, Maxime Ripard, Thierry Reding,
VMware Graphics, Sinclair Yeh, Thomas Hellstrom, Archit Taneja,
linux-amlogic, linux-arm-msm, freedreno, nouveau,
linux-renesas-soc, linux-tegra, Russell King
On Tue, Jan 23, 2018 at 07:08:57PM +0200, Ville Syrjala wrote:
> From: Ville Syrj�l� <ville.syrjala@linux.intel.com>
>
> Move the plane clip rectangle handling into
> drm_atomic_helper_check_plane_state(). Drivers no longer
> have to worry about such mundane details.
>
> v2: Convert armada, rcar, and sun4i as well
>
> Cc: Liviu Dudau <liviu.dudau@arm.com>
> Cc: Brian Starkey <brian.starkey@arm.com>
> Cc: Mali DP Maintainers <malidp@foss.arm.com>
> Cc: Daniel Vetter <daniel.vetter@intel.com>
> Cc: Gustavo Padovan <gustavo@padovan.org>
> Cc: Sean Paul <seanpaul@chromium.org>
> Cc: Philipp Zabel <p.zabel@pengutronix.de>
> Cc: CK Hu <ck.hu@mediatek.com>
> Cc: Neil Armstrong <narmstrong@baylibre.com>
> Cc: Rob Clark <robdclark@gmail.com>
> Cc: Ben Skeggs <bskeggs@redhat.com>
> Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> Cc: Sandy Huang <hjc@rock-chips.com>
> Cc: "Heiko St�bner" <heiko@sntech.de>
> Cc: Maxime Ripard <maxime.ripard@free-electrons.com>
> Cc: Thierry Reding <thierry.reding@gmail.com>
> Cc: VMware Graphics <linux-graphics-maintainer@vmware.com>
> Cc: Sinclair Yeh <syeh@vmware.com>
> Cc: Thomas Hellstrom <thellstrom@vmware.com>
> Cc: Shawn Guo <shawnguo@kernel.org>
> Cc: Archit Taneja <architt@codeaurora.org>
> Cc: linux-amlogic@lists.infradead.org
> Cc: linux-arm-msm@vger.kernel.org
> Cc: freedreno@lists.freedesktop.org
> Cc: nouveau@lists.freedesktop.org
> Cc: linux-renesas-soc@vger.kernel.org
> Cc: linux-tegra@vger.kernel.org
> Cc: Russell King <rmk+kernel@armlinux.org.uk>
> Suggested-by: Daniel Vetter <daniel@ffwll.ch>
> Signed-off-by: Ville Syrj�l� <ville.syrjala@linux.intel.com>
> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> Reviewed-by: Thierry Reding <treding@nvidia.com>
> Reviewed-by: Archit Taneja <architt@codeaurora.org> #msm
> ---
...
> drivers/gpu/drm/zte/zx_plane.c | 13 +------------
Acked-by: Shawn Guo <shawnguo@kernel.org>
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 3/5] drm/armada: Construct a temporary crtc state for plane checks
2018-02-02 15:10 ` Ville Syrjälä
@ 2018-02-23 15:55 ` Ville Syrjälä
2018-02-23 19:14 ` Russell King - ARM Linux
0 siblings, 1 reply; 34+ messages in thread
From: Ville Syrjälä @ 2018-02-23 15:55 UTC (permalink / raw)
To: Russell King - ARM Linux; +Cc: Dave Airlie, dri-devel
On Fri, Feb 02, 2018 at 05:10:54PM +0200, Ville Syrjälä wrote:
> On Fri, Feb 02, 2018 at 04:10:39PM +0200, Ville Syrjälä wrote:
> > On Tue, Jan 23, 2018 at 09:02:35PM +0200, Ville Syrjälä wrote:
> > > On Tue, Jan 23, 2018 at 06:42:00PM +0000, Russell King - ARM Linux wrote:
> > > > On Tue, Jan 23, 2018 at 07:08:55PM +0200, Ville Syrjala wrote:
> > > > > From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > > > >
> > > > > As armada isn't an atomic driver trying to pass a non-populated
> > > > > crtc->state to drm_atomic_helper_check_plane_state() will end in tears.
> > > > > Construct a temporary crtc state a la drm_plane_helper_check_update()
> > > > > and pass that instead. For now we just really need crtc_state->enable
> > > > > to be there.
> > > >
> > > > Would it be possible to solve this by having the atomic state setup
> > > > for non-atomic drivers instead, so we're not unwinding some of the
> > > > work that's already been done to try and convert drivers /to/
> > > > atomic modeset?
> > >
> > > Dunno. Feels like a wasted effort adding more code that'll just get
> > > ripped out as soon as the atomic conversion happens. And I'd rather
> > > not have to worry about potentially stale states hanging around, in
> > > case you forgot to update something somewhere.
> > >
> > > In any case, I don't think this is unwinding anything. Once you have
> > > the atomic conversion done sufficiently you can just drop these
> > > temporary states. We already have the temp state for the plane here
> > > anyway, and pairing that with a crtc state seems rather logical.
> >
> > So yea or nay on these armada patches?
>
> Also cc:ing Lucas since apparently armada is somehow related to
> etnaviv...
>
> I have my doubts about the current code working at all (due to
> the conflict resolution between my refactoring and rmk's work).
Ping. I'd like to get the final piece merged at some point. armada
is holding that back.
--
Ville Syrjälä
Intel OTC
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 3/5] drm/armada: Construct a temporary crtc state for plane checks
2018-02-23 15:55 ` Ville Syrjälä
@ 2018-02-23 19:14 ` Russell King - ARM Linux
0 siblings, 0 replies; 34+ messages in thread
From: Russell King - ARM Linux @ 2018-02-23 19:14 UTC (permalink / raw)
To: Ville Syrjälä; +Cc: Dave Airlie, dri-devel
On Fri, Feb 23, 2018 at 05:55:47PM +0200, Ville Syrjälä wrote:
> On Fri, Feb 02, 2018 at 05:10:54PM +0200, Ville Syrjälä wrote:
> > On Fri, Feb 02, 2018 at 04:10:39PM +0200, Ville Syrjälä wrote:
> > > On Tue, Jan 23, 2018 at 09:02:35PM +0200, Ville Syrjälä wrote:
> > > > On Tue, Jan 23, 2018 at 06:42:00PM +0000, Russell King - ARM Linux wrote:
> > > > > On Tue, Jan 23, 2018 at 07:08:55PM +0200, Ville Syrjala wrote:
> > > > > > From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > > > > >
> > > > > > As armada isn't an atomic driver trying to pass a non-populated
> > > > > > crtc->state to drm_atomic_helper_check_plane_state() will end in tears.
> > > > > > Construct a temporary crtc state a la drm_plane_helper_check_update()
> > > > > > and pass that instead. For now we just really need crtc_state->enable
> > > > > > to be there.
> > > > >
> > > > > Would it be possible to solve this by having the atomic state setup
> > > > > for non-atomic drivers instead, so we're not unwinding some of the
> > > > > work that's already been done to try and convert drivers /to/
> > > > > atomic modeset?
> > > >
> > > > Dunno. Feels like a wasted effort adding more code that'll just get
> > > > ripped out as soon as the atomic conversion happens. And I'd rather
> > > > not have to worry about potentially stale states hanging around, in
> > > > case you forgot to update something somewhere.
> > > >
> > > > In any case, I don't think this is unwinding anything. Once you have
> > > > the atomic conversion done sufficiently you can just drop these
> > > > temporary states. We already have the temp state for the plane here
> > > > anyway, and pairing that with a crtc state seems rather logical.
> > >
> > > So yea or nay on these armada patches?
> >
> > Also cc:ing Lucas since apparently armada is somehow related to
> > etnaviv...
> >
> > I have my doubts about the current code working at all (due to
> > the conflict resolution between my refactoring and rmk's work).
>
> Ping. I'd like to get the final piece merged at some point. armada
> is holding that back.
I'll look at it when I can get my cubox tree in a buildable state for
v4.15 - which is a necessary step to moving forward to anything beyond
that point.
--
RMK's Patch system: http://www.armlinux.org.uk/developer/patches/
FTTC broadband for 0.8mile line in suburbia: sync at 8.8Mbps down 630kbps up
According to speedtest.net: 8.21Mbps down 510kbps up
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 4/5] drm/armada: Use drm_mode_get_hv_timing() to populate plane clip rectangle
2018-01-23 17:08 ` [PATCH 4/5] drm/armada: Use drm_mode_get_hv_timing() to populate plane clip rectangle Ville Syrjala
@ 2018-03-05 8:41 ` Daniel Vetter
2018-03-05 18:58 ` Ville Syrjälä
0 siblings, 1 reply; 34+ messages in thread
From: Daniel Vetter @ 2018-03-05 8:41 UTC (permalink / raw)
To: Ville Syrjala; +Cc: Dave Airlie, Russell King, dri-devel
On Tue, Jan 23, 2018 at 07:08:56PM +0200, Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Use drm_mode_get_hv_timing() to fill out the plane clip rectangle.
>
> Since armada isn't atomic we'll use crtc->enabled and crtc->mode instead
> of the stuff under crtc_state.
>
> Once everyone agrees on how the clip rectangle gets set up we can
> move the code into drm_atomic_helper_check_plane_state().
>
> Cc: Dave Airlie <airlied@redhat.com>
> Cc: Russell King <rmk+kernel@armlinux.org.uk>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
For patches 3&4: Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
In case they do unexpectly break armada we can always just copypaste the
previous version of the non-atomic helper into armada code to fix any
regressions cropping up, so I don't see any big risks here. And I'd like
to get this cleanup merged, just stumbled over it again.
I pinged Dave Airlie on irc, and he's fine with that approach too.
Acked-by: Dave Airlie <airlied@redhat.com>
for the same two patches.
-Daniel
> ---
> drivers/gpu/drm/armada/armada_crtc.c | 9 +++++----
> drivers/gpu/drm/armada/armada_overlay.c | 9 +++++----
> 2 files changed, 10 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/gpu/drm/armada/armada_crtc.c b/drivers/gpu/drm/armada/armada_crtc.c
> index 9621ed5d3f98..fdc34ad4ca62 100644
> --- a/drivers/gpu/drm/armada/armada_crtc.c
> +++ b/drivers/gpu/drm/armada/armada_crtc.c
> @@ -1204,12 +1204,13 @@ static int armada_drm_primary_update(struct drm_plane *plane,
> .crtc = crtc,
> .enable = crtc->enabled,
> };
> - const struct drm_rect clip = {
> - .x2 = crtc->mode.hdisplay,
> - .y2 = crtc->mode.vdisplay,
> - };
> + struct drm_rect clip = {};
> int ret;
>
> + if (crtc->enabled)
> + drm_mode_get_hv_timing(&crtc->mode,
> + &clip.x2, &clip.y2);
> +
> ret = drm_atomic_helper_check_plane_state(&state, &crtc_state, &clip, 0,
> INT_MAX, true, false);
> if (ret)
> diff --git a/drivers/gpu/drm/armada/armada_overlay.c b/drivers/gpu/drm/armada/armada_overlay.c
> index 825cb642b55e..4f2a7a6e0fd3 100644
> --- a/drivers/gpu/drm/armada/armada_overlay.c
> +++ b/drivers/gpu/drm/armada/armada_overlay.c
> @@ -209,16 +209,17 @@ armada_ovl_plane_update(struct drm_plane *plane, struct drm_crtc *crtc,
> .crtc = crtc,
> .enable = crtc->enabled,
> };
> - const struct drm_rect clip = {
> - .x2 = crtc->mode.hdisplay,
> - .y2 = crtc->mode.vdisplay,
> - };
> + struct drm_rect clip = {};
> int ret;
>
> trace_armada_ovl_plane_update(plane, crtc, fb,
> crtc_x, crtc_y, crtc_w, crtc_h,
> src_x, src_y, src_w, src_h);
>
> + if (crtc->enabled)
> + drm_mode_get_hv_timing(&crtc->mode,
> + &clip.x2, &clip.y2);
> +
> ret = drm_atomic_helper_check_plane_state(&state, &crtc_state, &clip, 0,
> INT_MAX, true, false);
> if (ret)
> --
> 2.13.6
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 34+ messages in thread
* Re: [PATCH 4/5] drm/armada: Use drm_mode_get_hv_timing() to populate plane clip rectangle
2018-03-05 8:41 ` Daniel Vetter
@ 2018-03-05 18:58 ` Ville Syrjälä
0 siblings, 0 replies; 34+ messages in thread
From: Ville Syrjälä @ 2018-03-05 18:58 UTC (permalink / raw)
To: Daniel Vetter; +Cc: Dave Airlie, Russell King, dri-devel
On Mon, Mar 05, 2018 at 09:41:43AM +0100, Daniel Vetter wrote:
> On Tue, Jan 23, 2018 at 07:08:56PM +0200, Ville Syrjala wrote:
> > From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> >
> > Use drm_mode_get_hv_timing() to fill out the plane clip rectangle.
> >
> > Since armada isn't atomic we'll use crtc->enabled and crtc->mode instead
> > of the stuff under crtc_state.
> >
> > Once everyone agrees on how the clip rectangle gets set up we can
> > move the code into drm_atomic_helper_check_plane_state().
> >
> > Cc: Dave Airlie <airlied@redhat.com>
> > Cc: Russell King <rmk+kernel@armlinux.org.uk>
> > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> For patches 3&4: Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
>
> In case they do unexpectly break armada we can always just copypaste the
> previous version of the non-atomic helper into armada code to fix any
> regressions cropping up, so I don't see any big risks here. And I'd like
> to get this cleanup merged, just stumbled over it again.
>
> I pinged Dave Airlie on irc, and he's fine with that approach too.
>
> Acked-by: Dave Airlie <airlied@redhat.com>
>
> for the same two patches.
Cool. Thank you both.
Remainder of the series pushed to drm-misc-next.
--
Ville Syrjälä
Intel OTC
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 34+ messages in thread
end of thread, other threads:[~2018-03-05 18:58 UTC | newest]
Thread overview: 34+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-01-23 17:08 [PATCH 1/5] drm/rcar-du: Use drm_mode_get_hv_timing() to populate plane clip rectangle Ville Syrjala
2018-01-23 17:08 ` [PATCH 2/5] drm/sun4i: " Ville Syrjala
2018-02-02 15:04 ` Ville Syrjälä
2018-01-23 17:08 ` [PATCH 3/5] drm/armada: Construct a temporary crtc state for plane checks Ville Syrjala
2018-01-23 18:42 ` Russell King - ARM Linux
2018-01-23 19:02 ` Ville Syrjälä
2018-02-02 14:10 ` Ville Syrjälä
2018-02-02 15:10 ` Ville Syrjälä
2018-02-23 15:55 ` Ville Syrjälä
2018-02-23 19:14 ` Russell King - ARM Linux
2018-01-23 17:08 ` [PATCH 4/5] drm/armada: Use drm_mode_get_hv_timing() to populate plane clip rectangle Ville Syrjala
2018-03-05 8:41 ` Daniel Vetter
2018-03-05 18:58 ` Ville Syrjälä
2018-01-23 17:08 ` [PATCH 5/5] drm: Don't pass clip to drm_atomic_helper_check_plane_state() Ville Syrjala
2018-01-23 17:08 ` Ville Syrjala
2018-01-23 17:08 ` Ville Syrjala
2018-01-23 17:46 ` Liviu Dudau
2018-01-23 17:46 ` Liviu Dudau
2018-01-23 17:46 ` Liviu Dudau
2018-01-23 18:06 ` Philipp Zabel
2018-01-23 18:06 ` Philipp Zabel
2018-01-23 18:06 ` Philipp Zabel
2018-01-24 0:12 ` Laurent Pinchart
2018-01-24 19:48 ` Sinclair Yeh
2018-01-24 19:48 ` Sinclair Yeh
2018-01-24 19:48 ` Sinclair Yeh
2018-01-26 5:23 ` Neil Armstrong
2018-01-26 5:23 ` Neil Armstrong
2018-01-26 5:23 ` Neil Armstrong
2018-02-05 6:50 ` Shawn Guo
2018-02-05 6:50 ` Shawn Guo
2018-02-05 6:50 ` Shawn Guo
2018-01-24 0:07 ` [PATCH 1/5] drm/rcar-du: Use drm_mode_get_hv_timing() to populate plane clip rectangle Laurent Pinchart
2018-01-24 15:01 ` Ville Syrjälä
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.