role of crtcs in modesetting interfaces and possible abstraction away from userspace

Alex Deucher alexdeucher at gmail.com
Wed Sep 10 10:04:44 PDT 2014


On Mon, Sep 8, 2014 at 8:43 PM, Dave Airlie <airlied at gmail.com> wrote:
> Hi,
>
> So I've been attempting to hide the 30" Dell MST monitors in the
> kernel, and ran into a number of problems,
> but the major one is how to steal a crtc and get away with it.
>
> The standard scenario I have is
>
> CRTC 0: eDP monitor connected
>
> hotplug 30" monitor, userspace decides to configure things as
>
> CRTC 1: DP-4 - 30" monitor
> CRTC 2: eDP-1
>
> But since we lack atomic it does this in two steps, so when I get the
> first modeset to set the 30" monitor up
> I go and use CRTC-2 as the secondary crtc, as CRTC-0 is in use still,
> then I have to fail the second modeset,
> and things end up with me crying.
>
> So this led me to wonder why we expose CRTCs at all, and KMS does it
> because randr did it, but I've no idea
> why randr did it (Keith??).
>
> From my POV I don't think the modesetting interface needs to take
> crtcs, just connectors and modes,
> so I'm wondering going forward for atomic should we even accept crtcs
> in the interface, just a list of rectangles,
> connectors per rectangle, etc.
>
> Now I'm at the point of trying to work out if I can make DP MST
> monitors a possibility before we get atomic,
>
> Myself and Ben discussed this here and he suggested we should make the
> userspace crtc ids pretty much
> meaningless and not have them tied to actual hw crtcs, so we can
> reroute things underneath userspace
> without changing it.
>
> Any input is welcome!

What about exposing monitors as a modesetting object?  They could have
a required_crtc_num attribute or something like that.  I guess it's a
little late since we already did dynamic connectors for MST and I
guess it would be complicated to integrate cleanly with the way we do
things today.

E.g., you could have:

crtc -> encoder -> connector -> monitor

or

crtc -                                         -> monitor
        \                                      /
crtc -  --> encoder -> connector -> monitor
        /                                     \
crtc -                                        -> monitor

or

crtc -
        \
crtc -  --> encoder -> connector -> monitor


etc.

Alex


More information about the dri-devel mailing list