]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
drm/tegra: Assign plane type before registration
authorThierry Reding <treding@nvidia.com>
Mon, 21 Apr 2025 16:13:05 +0000 (11:13 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 6 Jul 2025 09:00:14 +0000 (11:00 +0200)
commit 9ff4fdf4f44b69237c0afc1d3a8dac916ce66f3e upstream.

Changes to a plane's type after it has been registered aren't propagated
to userspace automatically. This could possibly be achieved by updating
the property, but since we can already determine which type this should
be before the registration, passing in the right type from the start is
a much better solution.

Suggested-by: Aaron Kling <webgeek1234@gmail.com>
Signed-off-by: Thierry Reding <treding@nvidia.com>
Cc: stable@vger.kernel.org
Fixes: 473079549f27 ("drm/tegra: dc: Add Tegra186 support")
Signed-off-by: Aaron Kling <webgeek1234@gmail.com>
Signed-off-by: Thierry Reding <treding@nvidia.com>
Link: https://lore.kernel.org/r/20250421-tegra-drm-primary-v2-1-7f740c4c2121@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/gpu/drm/tegra/dc.c
drivers/gpu/drm/tegra/hub.c
drivers/gpu/drm/tegra/hub.h

index 13b182ab905fb0b46287465a67eb6bd9d1093d1c..b016c3c95a844bfe19c3f64730ea1510dc53419c 100644 (file)
@@ -1320,10 +1320,16 @@ static struct drm_plane *tegra_dc_add_shared_planes(struct drm_device *drm,
                if (wgrp->dc == dc->pipe) {
                        for (j = 0; j < wgrp->num_windows; j++) {
                                unsigned int index = wgrp->windows[j];
+                               enum drm_plane_type type;
+
+                               if (primary)
+                                       type = DRM_PLANE_TYPE_OVERLAY;
+                               else
+                                       type = DRM_PLANE_TYPE_PRIMARY;
 
                                plane = tegra_shared_plane_create(drm, dc,
                                                                  wgrp->index,
-                                                                 index);
+                                                                 index, type);
                                if (IS_ERR(plane))
                                        return plane;
 
@@ -1331,10 +1337,8 @@ static struct drm_plane *tegra_dc_add_shared_planes(struct drm_device *drm,
                                 * Choose the first shared plane owned by this
                                 * head as the primary plane.
                                 */
-                               if (!primary) {
-                                       plane->type = DRM_PLANE_TYPE_PRIMARY;
+                               if (!primary)
                                        primary = plane;
-                               }
                        }
                }
        }
index 1af5f8318d914679ee1b32a87d004af82cbd1c6a..0f88cbb3331706b46ee5fc98cb6aba4466cb5686 100644 (file)
@@ -756,9 +756,9 @@ static const struct drm_plane_helper_funcs tegra_shared_plane_helper_funcs = {
 struct drm_plane *tegra_shared_plane_create(struct drm_device *drm,
                                            struct tegra_dc *dc,
                                            unsigned int wgrp,
-                                           unsigned int index)
+                                           unsigned int index,
+                                           enum drm_plane_type type)
 {
-       enum drm_plane_type type = DRM_PLANE_TYPE_OVERLAY;
        struct tegra_drm *tegra = drm->dev_private;
        struct tegra_display_hub *hub = tegra->hub;
        struct tegra_shared_plane *plane;
index 23c4b2115ed1e36e8d2d6ed614a6ead97eb4c441..a66f18c4facc9df96ea8b9f54239b52f06536d12 100644 (file)
@@ -80,7 +80,8 @@ void tegra_display_hub_cleanup(struct tegra_display_hub *hub);
 struct drm_plane *tegra_shared_plane_create(struct drm_device *drm,
                                            struct tegra_dc *dc,
                                            unsigned int wgrp,
-                                           unsigned int index);
+                                           unsigned int index,
+                                           enum drm_plane_type type);
 
 int tegra_display_hub_atomic_check(struct drm_device *drm,
                                   struct drm_atomic_state *state);