Skip to content

Commit

Permalink
drm: Increase plane_mask to 64bit.
Browse files Browse the repository at this point in the history
The limit of 32 planes per DRM device is dictated by the use
of planes_mask returning a u32.

Change to a u64 such that 64 planes can be supported by a device.

Signed-off-by: Dave Stevenson <[email protected]>
  • Loading branch information
6by9 committed Nov 8, 2023
1 parent 686fe77 commit 828e411
Show file tree
Hide file tree
Showing 7 changed files with 9 additions and 9 deletions.
2 changes: 1 addition & 1 deletion drivers/gpu/drm/drm_atomic.c
Original file line number Diff line number Diff line change
Expand Up @@ -451,7 +451,7 @@ static void drm_atomic_crtc_print_state(struct drm_printer *p,
drm_printf(p, "\tactive_changed=%d\n", state->active_changed);
drm_printf(p, "\tconnectors_changed=%d\n", state->connectors_changed);
drm_printf(p, "\tcolor_mgmt_changed=%d\n", state->color_mgmt_changed);
drm_printf(p, "\tplane_mask=%x\n", state->plane_mask);
drm_printf(p, "\tplane_mask=%llx\n", state->plane_mask);
drm_printf(p, "\tconnector_mask=%x\n", state->connector_mask);
drm_printf(p, "\tencoder_mask=%x\n", state->encoder_mask);
drm_printf(p, "\tmode: " DRM_MODE_FMT "\n", DRM_MODE_ARG(&state->mode));
Expand Down
2 changes: 1 addition & 1 deletion drivers/gpu/drm/drm_framebuffer.c
Original file line number Diff line number Diff line change
Expand Up @@ -959,7 +959,7 @@ static int atomic_remove_fb(struct drm_framebuffer *fb)
struct drm_connector *conn __maybe_unused;
struct drm_connector_state *conn_state;
int i, ret;
unsigned plane_mask;
u64 plane_mask;
bool disable_crtcs = false;

retry_disable:
Expand Down
2 changes: 1 addition & 1 deletion drivers/gpu/drm/drm_mode_config.c
Original file line number Diff line number Diff line change
Expand Up @@ -634,7 +634,7 @@ void drm_mode_config_validate(struct drm_device *dev)
struct drm_encoder *encoder;
struct drm_crtc *crtc;
struct drm_plane *plane;
u32 primary_with_crtc = 0, cursor_with_crtc = 0;
u64 primary_with_crtc = 0, cursor_with_crtc = 0;
unsigned int num_primary = 0;

if (!drm_core_check_feature(dev, DRIVER_MODESET))
Expand Down
2 changes: 1 addition & 1 deletion drivers/gpu/drm/drm_plane.c
Original file line number Diff line number Diff line change
Expand Up @@ -244,7 +244,7 @@ static int __drm_universal_plane_init(struct drm_device *dev,
int ret;

/* plane index is used with 32bit bitmasks */
if (WARN_ON(config->num_total_plane >= 32))
if (WARN_ON(config->num_total_plane >= 64))
return -EINVAL;

/*
Expand Down
2 changes: 1 addition & 1 deletion drivers/gpu/drm/imx/ipuv3-crtc.c
Original file line number Diff line number Diff line change
Expand Up @@ -230,7 +230,7 @@ static int ipu_crtc_atomic_check(struct drm_crtc *crtc,
{
struct drm_crtc_state *crtc_state = drm_atomic_get_new_crtc_state(state,
crtc);
u32 primary_plane_mask = drm_plane_mask(crtc->primary);
u64 primary_plane_mask = drm_plane_mask(crtc->primary);

if (crtc_state->active && (primary_plane_mask & crtc_state->plane_mask) == 0)
return -EINVAL;
Expand Down
2 changes: 1 addition & 1 deletion include/drm/drm_crtc.h
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,7 @@ struct drm_crtc_state {
* @plane_mask: Bitmask of drm_plane_mask(plane) of planes attached to
* this CRTC.
*/
u32 plane_mask;
u64 plane_mask;

/**
* @connector_mask: Bitmask of drm_connector_mask(connector) of
Expand Down
6 changes: 3 additions & 3 deletions include/drm/drm_plane.h
Original file line number Diff line number Diff line change
Expand Up @@ -697,7 +697,7 @@ struct drm_plane {
* @index: Position inside the mode_config.list, can be used as an array
* index. It is invariant over the lifetime of the plane.
*/
unsigned index;
uint64_t index;

/** @helper_private: mid-layer private data */
const struct drm_plane_helper_funcs *helper_private;
Expand Down Expand Up @@ -905,9 +905,9 @@ static inline unsigned int drm_plane_index(const struct drm_plane *plane)
* drm_plane_mask - find the mask of a registered plane
* @plane: plane to find mask for
*/
static inline u32 drm_plane_mask(const struct drm_plane *plane)
static inline u64 drm_plane_mask(const struct drm_plane *plane)
{
return 1 << drm_plane_index(plane);
return 1ULL << drm_plane_index(plane);
}

struct drm_plane * drm_plane_from_index(struct drm_device *dev, int idx);
Expand Down

0 comments on commit 828e411

Please sign in to comment.