On Tue, Mar 28, 2023 at 6:45 PM Won Chung <wonchung@xxxxxxxxxx> 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@xxxxxxxxxx> Exposing connector id in device sysfs looks good to me. Reviewed-by: Manasi Navare <navaremanasi@xxxxxxxxxxxx> 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 >