mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-23 15:32:33 +00:00
71 lines
2.7 KiB
Diff
71 lines
2.7 KiB
Diff
|
From b65167e0bcce67f2e7b7e813dba536f1cca3ef9f Mon Sep 17 00:00:00 2001
|
||
|
From: Maxime Ripard <maxime@cerno.tech>
|
||
|
Date: Thu, 6 Feb 2020 14:50:06 +0100
|
||
|
Subject: [PATCH] drm/vc4: plane: Create overlays for any CRTC
|
||
|
|
||
|
Now that we have everything in place, we can now register all the overlay
|
||
|
planes that can be assigned to all the CRTCs.
|
||
|
|
||
|
This has two side effects:
|
||
|
|
||
|
- The number of overlay planes is reduced from 24 to 8. This is temporary
|
||
|
and will be increased again in the next patch.
|
||
|
|
||
|
- The ID of the various planes is changed again, and we will now have all
|
||
|
the primary planes, then all the overlay planes and finally the cursor
|
||
|
planes. This shouldn't cause any issue since the ordering between
|
||
|
primary, overlay and cursor planes is preserved.
|
||
|
|
||
|
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||
|
---
|
||
|
drivers/gpu/drm/vc4/vc4_plane.c | 35 +++++++++++++++++----------------
|
||
|
1 file changed, 18 insertions(+), 17 deletions(-)
|
||
|
|
||
|
--- a/drivers/gpu/drm/vc4/vc4_plane.c
|
||
|
+++ b/drivers/gpu/drm/vc4/vc4_plane.c
|
||
|
@@ -1444,26 +1444,27 @@ int vc4_plane_create_additional_planes(s
|
||
|
struct drm_crtc *crtc;
|
||
|
unsigned int i;
|
||
|
|
||
|
- drm_for_each_crtc(crtc, drm) {
|
||
|
- /* Set up some arbitrary number of planes. We're not limited
|
||
|
- * by a set number of physical registers, just the space in
|
||
|
- * the HVS (16k) and how small an plane can be (28 bytes).
|
||
|
- * However, each plane we set up takes up some memory, and
|
||
|
- * increases the cost of looping over planes, which atomic
|
||
|
- * modesetting does quite a bit. As a result, we pick a
|
||
|
- * modest number of planes to expose, that should hopefully
|
||
|
- * still cover any sane usecase.
|
||
|
- */
|
||
|
- for (i = 0; i < 8; i++) {
|
||
|
- struct drm_plane *plane =
|
||
|
- vc4_plane_init(drm, DRM_PLANE_TYPE_OVERLAY);
|
||
|
+ /* Set up some arbitrary number of planes. We're not limited
|
||
|
+ * by a set number of physical registers, just the space in
|
||
|
+ * the HVS (16k) and how small an plane can be (28 bytes).
|
||
|
+ * However, each plane we set up takes up some memory, and
|
||
|
+ * increases the cost of looping over planes, which atomic
|
||
|
+ * modesetting does quite a bit. As a result, we pick a
|
||
|
+ * modest number of planes to expose, that should hopefully
|
||
|
+ * still cover any sane usecase.
|
||
|
+ */
|
||
|
+ for (i = 0; i < 8; i++) {
|
||
|
+ struct drm_plane *plane =
|
||
|
+ vc4_plane_init(drm, DRM_PLANE_TYPE_OVERLAY);
|
||
|
|
||
|
- if (IS_ERR(plane))
|
||
|
- continue;
|
||
|
+ if (IS_ERR(plane))
|
||
|
+ continue;
|
||
|
|
||
|
- plane->possible_crtcs = drm_crtc_mask(crtc);
|
||
|
- }
|
||
|
+ plane->possible_crtcs =
|
||
|
+ GENMASK(drm->mode_config.num_crtc - 1, 0);
|
||
|
+ }
|
||
|
|
||
|
+ drm_for_each_crtc(crtc, drm) {
|
||
|
/* Set up the legacy cursor after overlay initialization,
|
||
|
* since we overlay planes on the CRTC in the order they were
|
||
|
* initialized.
|