Skip to content

Commit

Permalink
drm/vc4: Assign 32 overlay planes to writeback only
Browse files Browse the repository at this point in the history
Instead of having 48 generic overlay planes, assign 32 to the
writeback connector so that there is no ambiguity in wlroots
when trying to find a plane for composition using the writeback
connector vs display.

Signed-off-by: Dave Stevenson <[email protected]>
  • Loading branch information
6by9 committed Sep 11, 2024
1 parent fa6c4a8 commit 5225183
Showing 1 changed file with 32 additions and 2 deletions.
34 changes: 32 additions & 2 deletions drivers/gpu/drm/vc4/vc4_plane.c
Original file line number Diff line number Diff line change
Expand Up @@ -2450,13 +2450,28 @@ struct drm_plane *vc4_plane_init(struct drm_device *dev,
return plane;
}

#define VC4_NUM_OVERLAY_PLANES 48
#define VC4_NUM_OVERLAY_PLANES 16
#define VC4_NUM_TXP_OVERLAY_PLANES 32

int vc4_plane_create_additional_planes(struct drm_device *drm)
{
struct drm_plane *cursor_plane;
struct drm_crtc *crtc;
unsigned int i;
struct drm_crtc *txp_crtc;
uint32_t non_txp_crtc_mask;

drm_for_each_crtc(crtc, drm) {
struct vc4_crtc *vc4_crtc = to_vc4_crtc(crtc);

if (vc4_crtc->feeds_txp) {
txp_crtc = crtc;
break;
}
}

non_txp_crtc_mask = GENMASK(drm->mode_config.num_crtc - 1, 0) -
drm_crtc_mask(txp_crtc);

/* Set up some arbitrary number of planes. We're not limited
* by a set number of physical registers, just the space in
Expand All @@ -2470,7 +2485,22 @@ int vc4_plane_create_additional_planes(struct drm_device *drm)
for (i = 0; i < VC4_NUM_OVERLAY_PLANES; i++) {
struct drm_plane *plane =
vc4_plane_init(drm, DRM_PLANE_TYPE_OVERLAY,
GENMASK(drm->mode_config.num_crtc - 1, 0));
non_txp_crtc_mask);

if (IS_ERR(plane))
continue;

/* Create zpos property. Max of all the overlays + 1 primary +
* 1 cursor plane on a crtc.
*/
drm_plane_create_zpos_property(plane, i + 1, 1,
VC4_NUM_OVERLAY_PLANES + 1);
}

for (i = 0; i < VC4_NUM_TXP_OVERLAY_PLANES; i++) {
struct drm_plane *plane =
vc4_plane_init(drm, DRM_PLANE_TYPE_OVERLAY,
drm_crtc_mask(txp_crtc));

if (IS_ERR(plane))
continue;
Expand Down

0 comments on commit 5225183

Please sign in to comment.