]> www.infradead.org Git - users/hch/misc.git/commitdiff
drm/client: Handle tiled displays better
authorMaarten Lankhorst <dev@lankhorst.se>
Thu, 16 Jan 2025 14:28:25 +0000 (15:28 +0100)
committerMaarten Lankhorst <dev@lankhorst.se>
Tue, 21 Jan 2025 10:41:05 +0000 (11:41 +0100)
When testing on my tiled display, initially the tiled display is
detected correctly:
[90376.523692] xe 0000:67:00.0: [drm:drm_client_firmware_config.isra.0 [drm]] fallback: Not all outputs enabled
[90376.523713] xe 0000:67:00.0: [drm:drm_client_firmware_config.isra.0 [drm]] Enabled: 0, detected: 2
...
[90376.523967] xe 0000:67:00.0: [drm:drm_client_modeset_probe [drm]] [CRTC:82:pipe A] desired mode 1920x2160 set (1920,0)
[90376.524020] xe 0000:67:00.0: [drm:drm_client_modeset_probe [drm]] [CRTC:134:pipe B] desired mode 1920x2160 set (0,0)

But then, when modes have been set:
[90379.729525] xe 0000:67:00.0: [drm:drm_client_firmware_config.isra.0 [drm]] [CONNECTOR:287:DP-4] on [CRTC:82:pipe A]: 1920x2160
[90379.729640] xe 0000:67:00.0: [drm:drm_client_firmware_config.isra.0 [drm]] [CONNECTOR:289:DP-5] on [CRTC:134:pipe B]: 1920x2160
...
[90379.730036] xe 0000:67:00.0: [drm:drm_client_modeset_probe [drm]] [CRTC:82:pipe A] desired mode 1920x2160 set (0,0)
[90379.730124] xe 0000:67:00.0: [drm:drm_client_modeset_probe [drm]] [CRTC:134:pipe B] desired mode 1920x2160 set (0,0)

Call drm_client_get_tile_offsets() in drm_client_firmware_config() as
well, to ensure that the offset is set correctly.

This has to be done as a separate pass, as the tile order may not be
equal to the drm connector order.

Acked-by: Thomas Zimmermann <tzimmermann@suse.de>
Link: https://patchwork.freedesktop.org/patch/msgid/20250116142825.3933-2-dev@lankhorst.se
Signed-off-by: Maarten Lankhorst <dev@lankhorst.se>
Cc: <stable@vger.kernel.org>
drivers/gpu/drm/drm_client_modeset.c

index 251f9431371793f36d58b4cac55dc9cb8674e07d..aca442c25209a95e15c102d7cf4410a2b013042d 100644 (file)
@@ -743,6 +743,15 @@ retry:
        if ((conn_configured & mask) != mask && conn_configured != conn_seq)
                goto retry;
 
+       for (i = 0; i < count; i++) {
+               struct drm_connector *connector = connectors[i];
+
+               if (connector->has_tile)
+                       drm_client_get_tile_offsets(dev, connectors, connector_count,
+                                                   modes, offsets, i,
+                                                   connector->tile_h_loc, connector->tile_v_loc);
+       }
+
        /*
         * If the BIOS didn't enable everything it could, fall back to have the
         * same user experiencing of lighting up as much as possible like the