mbox series

[0/7] drm/probe-helpers: Work around multi-outputs-per-CRTC problem

Message ID 20240715093936.793552-1-tzimmermann@suse.de (mailing list archive)
Headers show
Series drm/probe-helpers: Work around multi-outputs-per-CRTC problem | expand

Message

Thomas Zimmermann July 15, 2024, 9:38 a.m. UTC
Old or simple hardware only supports a single CRTC with multiple
conenctoed outputs. This breaks most userspace compositors, which
only support a single output per CRTC. This currently happens with
ast and mgag200 drivers. The drivers contain a work around that
dynamically disables all but one connected output.

Patches 1 and 2 push the workaround into probe helpers and make it
configurable in the kernel config. For each connector, the driver
needs to specify a bitmask of connectors with higher priority. If
one of them is connected, the connector at hand is always reported
as disconnected. Connectors without priority bitmask as not affected.

Patches 3 to 5 update and simplify the ast drivers. The new workaround
now allows to have multiple physical conenctors in ast. So patch 5
finally allows VGA and DisplayPort on the same device.

Patches 6 and 7 update mgag200.

Any future driver that exposes the same problem as ast and mgag200
can simply hook into the workaround. Hopefully userspace can be fixed
at some point.

Thomas Zimmermann (7):
  drm/probe-helper: Call connector detect functions in single helper
  drm/probe-helper: Optionally report single connected output per CRTC
  drm/ast: Set connector priorities
  drm/ast: Remove struct ast_bmc_connector
  drm/ast: Support ASTDP and VGA at the same time
  drm/mgag200: Set connector priorities
  drm/mgag200: Remove struct mgag200_bmc_connector

 drivers/gpu/drm/Kconfig                   |  15 +++
 drivers/gpu/drm/ast/ast_drv.h             |  17 +--
 drivers/gpu/drm/ast/ast_main.c            |   2 +-
 drivers/gpu/drm/ast/ast_mode.c            |  49 ++------
 drivers/gpu/drm/drm_probe_helper.c        | 137 +++++++++++++++++++---
 drivers/gpu/drm/mgag200/mgag200_bmc.c     |  44 +------
 drivers/gpu/drm/mgag200/mgag200_drv.h     |   9 +-
 drivers/gpu/drm/mgag200/mgag200_g200eh.c  |   4 +-
 drivers/gpu/drm/mgag200/mgag200_g200eh3.c |   4 +-
 drivers/gpu/drm/mgag200/mgag200_g200er.c  |   4 +-
 drivers/gpu/drm/mgag200/mgag200_g200ev.c  |   4 +-
 drivers/gpu/drm/mgag200/mgag200_g200ew3.c |   4 +-
 drivers/gpu/drm/mgag200/mgag200_g200se.c  |   4 +-
 drivers/gpu/drm/mgag200/mgag200_g200wb.c  |   4 +-
 include/drm/drm_connector.h               |   2 +
 include/drm/drm_probe_helper.h            |   2 +
 16 files changed, 177 insertions(+), 128 deletions(-)

Comments

Thomas Zimmermann July 17, 2024, 12:54 p.m. UTC | #1
As discussed on irc, we rather improve the in-kernel DRM client's 
support for cloned outputs (for fbcon) and then remove the hacks from 
the ast and mgag200 drivers. Userspace compositors need to support 
cloned outputs to a minimum.

https://dri.freedesktop.org/~cbrill/dri-log/index.php?channel=dri-devel&date=2024-07-17

Best regards
Thomas

Am 15.07.24 um 11:38 schrieb Thomas Zimmermann:
> Old or simple hardware only supports a single CRTC with multiple
> conenctoed outputs. This breaks most userspace compositors, which
> only support a single output per CRTC. This currently happens with
> ast and mgag200 drivers. The drivers contain a work around that
> dynamically disables all but one connected output.
>
> Patches 1 and 2 push the workaround into probe helpers and make it
> configurable in the kernel config. For each connector, the driver
> needs to specify a bitmask of connectors with higher priority. If
> one of them is connected, the connector at hand is always reported
> as disconnected. Connectors without priority bitmask as not affected.
>
> Patches 3 to 5 update and simplify the ast drivers. The new workaround
> now allows to have multiple physical conenctors in ast. So patch 5
> finally allows VGA and DisplayPort on the same device.
>
> Patches 6 and 7 update mgag200.
>
> Any future driver that exposes the same problem as ast and mgag200
> can simply hook into the workaround. Hopefully userspace can be fixed
> at some point.
>
> Thomas Zimmermann (7):
>    drm/probe-helper: Call connector detect functions in single helper
>    drm/probe-helper: Optionally report single connected output per CRTC
>    drm/ast: Set connector priorities
>    drm/ast: Remove struct ast_bmc_connector
>    drm/ast: Support ASTDP and VGA at the same time
>    drm/mgag200: Set connector priorities
>    drm/mgag200: Remove struct mgag200_bmc_connector
>
>   drivers/gpu/drm/Kconfig                   |  15 +++
>   drivers/gpu/drm/ast/ast_drv.h             |  17 +--
>   drivers/gpu/drm/ast/ast_main.c            |   2 +-
>   drivers/gpu/drm/ast/ast_mode.c            |  49 ++------
>   drivers/gpu/drm/drm_probe_helper.c        | 137 +++++++++++++++++++---
>   drivers/gpu/drm/mgag200/mgag200_bmc.c     |  44 +------
>   drivers/gpu/drm/mgag200/mgag200_drv.h     |   9 +-
>   drivers/gpu/drm/mgag200/mgag200_g200eh.c  |   4 +-
>   drivers/gpu/drm/mgag200/mgag200_g200eh3.c |   4 +-
>   drivers/gpu/drm/mgag200/mgag200_g200er.c  |   4 +-
>   drivers/gpu/drm/mgag200/mgag200_g200ev.c  |   4 +-
>   drivers/gpu/drm/mgag200/mgag200_g200ew3.c |   4 +-
>   drivers/gpu/drm/mgag200/mgag200_g200se.c  |   4 +-
>   drivers/gpu/drm/mgag200/mgag200_g200wb.c  |   4 +-
>   include/drm/drm_connector.h               |   2 +
>   include/drm/drm_probe_helper.h            |   2 +
>   16 files changed, 177 insertions(+), 128 deletions(-)
>