From 8181e682d6f4ef209845ec24f0a1eb37764d6731 Mon Sep 17 00:00:00 2001 From: Dave Stevenson Date: Fri, 21 Oct 2022 14:26:12 +0100 Subject: [PATCH] drm: Increase plane_mask to 64bit. 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 --- drivers/gpu/drm/drm_atomic.c | 2 +- drivers/gpu/drm/drm_framebuffer.c | 2 +- drivers/gpu/drm/drm_mode_config.c | 2 +- drivers/gpu/drm/drm_plane.c | 2 +- drivers/gpu/drm/imx/ipuv3/ipuv3-crtc.c | 2 +- include/drm/drm_crtc.h | 2 +- include/drm/drm_plane.h | 4 ++-- 7 files changed, 8 insertions(+), 8 deletions(-) --- a/drivers/gpu/drm/drm_atomic.c +++ b/drivers/gpu/drm/drm_atomic.c @@ -451,7 +451,7 @@ static void drm_atomic_crtc_print_state( 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)); --- a/drivers/gpu/drm/drm_framebuffer.c +++ b/drivers/gpu/drm/drm_framebuffer.c @@ -959,7 +959,7 @@ static int atomic_remove_fb(struct drm_f 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: --- a/drivers/gpu/drm/drm_mode_config.c +++ b/drivers/gpu/drm/drm_mode_config.c @@ -636,7 +636,7 @@ void drm_mode_config_validate(struct drm 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)) --- a/drivers/gpu/drm/drm_plane.c +++ b/drivers/gpu/drm/drm_plane.c @@ -249,7 +249,7 @@ static int __drm_universal_plane_init(st 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; /* --- a/drivers/gpu/drm/imx/ipuv3/ipuv3-crtc.c +++ b/drivers/gpu/drm/imx/ipuv3/ipuv3-crtc.c @@ -230,7 +230,7 @@ static int ipu_crtc_atomic_check(struct { 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; --- a/include/drm/drm_crtc.h +++ b/include/drm/drm_crtc.h @@ -192,7 +192,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 --- a/include/drm/drm_plane.h +++ b/include/drm/drm_plane.h @@ -915,9 +915,9 @@ static inline unsigned int drm_plane_ind * 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);