[PATCH weston v11 12/13] compositor-drm: Track unused connectors and CRTCs
Pekka Paalanen
ppaalanen at gmail.com
Fri Jul 21 14:54:11 UTC 2017
On Tue, 18 Jul 2017 14:14:34 +0100
Daniel Stone <daniels at collabora.com> wrote:
> Rather than a more piecemeal approach at backend creation, explicitly
> track connectors and CRTCs we do not intend to use, so we can ensure
> they are disabled where appropriate.
>
> Signed-off-by: Daniel Stone <daniels at collabora.com>
> ---
> libweston/compositor-drm.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 53 insertions(+)
>
> diff --git a/libweston/compositor-drm.c b/libweston/compositor-drm.c
> index ca4146a5..101f9d69 100644
> --- a/libweston/compositor-drm.c
> +++ b/libweston/compositor-drm.c
> @@ -185,6 +185,9 @@ struct drm_backend {
>
> void *repaint_data;
>
> + struct wl_array unused_connectors;
> + struct wl_array unused_crtcs;
> +
> int cursors_are_broken;
>
> bool universal_planes;
> @@ -3966,6 +3969,47 @@ drm_output_disable(struct weston_output *base)
> }
>
> /**
> + * Update the list of unused connectors and CRTCs
> + *
> + * This keeps the unused_connectors and unused_crtcs arrays up to date.
> + *
> + * @param b Weston backend structure
> + * @param resources DRM resources for this device
> + */
> +static void
> +drm_backend_update_unused_outputs(struct drm_backend *b, drmModeRes *resources)
> +{
> + int i;
> +
> + wl_array_release(&b->unused_connectors);
> + wl_array_init(&b->unused_connectors);
> +
> + for (i = 0; i < resources->count_connectors; i++) {
> + uint32_t *connector_id;
> +
> + if (drm_output_find_by_connector(b, resources->connectors[i]))
> + continue;
> +
> + connector_id = wl_array_add(&b->unused_connectors,
> + sizeof(*connector_id));
> + *connector_id = resources->connectors[i];
> + }
> +
> + wl_array_release(&b->unused_crtcs);
> + wl_array_init(&b->unused_crtcs);
> +
> + for (i = 0; i < resources->count_crtcs; i++) {
> + uint32_t *crtc_id;
> +
> + if (drm_output_find_by_crtc(b, resources->crtcs[i]))
> + continue;
> +
> + crtc_id = wl_array_add(&b->unused_crtcs, sizeof(*crtc_id));
> + *crtc_id = resources->crtcs[i];
> + }
> +}
Hi,
a slight issue with drm_output_find_by_{connector,crtc}() is that they
include all, both enabled and disabled. Looking at patch 13, I think
you'd want to find only those that are actually enabled.
To be more precise, there are three kinds of connectors (or crtcs by
assignment):
- unconnected; do not have a weston_output
- connected, not enabled or disabled; has a pending weston_output
- connected, enabled; has a weston_output, not pending
ISTR the DRM-backend allocates a CRTC & connector when the connector is
connected, even if it is not enabled. Which is to be fixed one day.
When that is fixed, then drm_output_find_by_{crtc,connector}() will do
the right thing automatically.
So, in that respect, I can give:
Reviewed-by: Pekka Paalanen <pekka.paalanen at collabora.co.uk>
since this code is correct in itself, it just suffers from other bits
being not as good as they should.
Thanks,
pq
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 833 bytes
Desc: OpenPGP digital signature
URL: <https://lists.freedesktop.org/archives/wayland-devel/attachments/20170721/89efaac8/attachment.sig>
More information about the wayland-devel
mailing list