[PATCH] drm/sysfs: Expose DRM connector id in each connector sysfs

Manasi Navare navaremanasi at google.com
Mon Apr 17 22:52:06 UTC 2023


On Tue, Mar 28, 2023 at 6:45 PM Won Chung <wonchung at google.com> wrote:
>
> Expose DRM connector id in device sysfs so that we can map the connector
> id to the connector syspath. Currently, even if we can derive the
> connector id from modeset, we do not have a way to find the
> corresponding connector's syspath.
>
> This is helpful when determining the root connector of MST tree. When a
> tree of multiple MST hub is connected to the system, modeset describes
> the tree in the PATH blob. For example, consider the following scenario.
>
> +-------------+
> | Source      |    +-------------+
> | (Device)    |    | BranchX     |
> |             |    | (MST)       |
> |       [conn6]--->|       [port1]--->DisplayA
> +-------------+    |             |
>                    |             |    +-------------+
>                    |             |    | BranchY     |
>                    |             |    | (MST)       |
>                    |       [port2]--->|       [port1]----->DisplayB
>                    +-------------+    |             |
>                                       |       [port2]----->DisplayC
>                                       +-------------+
>
> DPMST connector of DisplayA would have "mst:6-1" PATH.
> DPMST connector of DisplayB would have "mst:6-2-1" PATH.
> DPMST connector of DisplayC would have "mst:6-2-2" PATH.
>
> Given that connector id of 6 is the root of the MST connector tree, we
> can utilize this patch to parse through DRM connectors sysfs and find
> which connector syspath corresponds to the root connector (id == 6).
>
> ChromeOS intend to use this information for metrics collection. For
> example, we want to tell which port is deriving which displays even with
> a MST hub. Chromium patch for parsing DRM connector id from the kernel
> is at http://crrev.com/c/4317207.
>
> Signed-off-by: Won Chung <wonchung at google.com>

Exposing connector id in device sysfs looks good to me.

Reviewed-by: Manasi Navare <navaremanasi at chromium.org>

Manasi

> ---
>  drivers/gpu/drm/drm_sysfs.c | 11 +++++++++++
>  1 file changed, 11 insertions(+)
>
> diff --git a/drivers/gpu/drm/drm_sysfs.c b/drivers/gpu/drm/drm_sysfs.c
> index 183130355997..11f98c5d6103 100644
> --- a/drivers/gpu/drm/drm_sysfs.c
> +++ b/drivers/gpu/drm/drm_sysfs.c
> @@ -282,16 +282,27 @@ static ssize_t modes_show(struct device *device,
>         return written;
>  }
>
> +static ssize_t connector_id_show(struct device *device,
> +                                struct device_attribute *attr,
> +                                char *buf)
> +{
> +       struct drm_connector *connector = to_drm_connector(device);
> +
> +       return sysfs_emit(buf, "%d\n", connector->base.id);
> +}
> +
>  static DEVICE_ATTR_RW(status);
>  static DEVICE_ATTR_RO(enabled);
>  static DEVICE_ATTR_RO(dpms);
>  static DEVICE_ATTR_RO(modes);
> +static DEVICE_ATTR_RO(connector_id);
>
>  static struct attribute *connector_dev_attrs[] = {
>         &dev_attr_status.attr,
>         &dev_attr_enabled.attr,
>         &dev_attr_dpms.attr,
>         &dev_attr_modes.attr,
> +       &dev_attr_connector_id.attr,
>         NULL
>  };
>
> --
> 2.40.0.348.gf938b09366-goog
>


More information about the dri-devel mailing list