Chris, Would you be able to make the necessary changes in the suerspace driver so I can do some testing tomorrow?
Manasi On Tue, Oct 25, 2016 at 06:16:34PM -0700, Manasi Navare wrote: > A new optional connector property is added for keeping > track of whether the link is good (link training passed) or > link is bad (link training failed). If the link status property > is Bad, then userspace should fire off a new modeset at the current > mode even if there have not been any changes in the mode list > or connector status. > > Cc: dri-devel at lists.freedesktop.org > Cc: Jani Nikula <jani.nikula at linux.intel.com> > Cc: Daniel Vetter <daniel.vetter at intel.com> > Cc: Ville Syrjala <ville.syrjala at linux.intel.com> > Cc: Chris Wilson <chris at chris-wilson.co.uk> > Signed-off-by: Manasi Navare <manasi.d.navare at intel.com> > --- > drivers/gpu/drm/drm_connector.c | 32 ++++++++++++++++++++++++++++++++ > include/drm/drm_connector.h | 1 + > include/drm/drm_crtc.h | 6 ++++++ > include/uapi/drm/drm_mode.h | 4 ++++ > 4 files changed, 43 insertions(+) > > diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c > index 2db7fb5..b4ce19f 100644 > --- a/drivers/gpu/drm/drm_connector.c > +++ b/drivers/gpu/drm/drm_connector.c > @@ -588,6 +588,11 @@ int drm_display_info_set_bus_formats(struct > drm_display_info *info, > DRM_ENUM_NAME_FN(drm_get_tv_subconnector_name, > drm_tv_subconnector_enum_list) > > +static const struct drm_prop_enum_list drm_link_status_enum_list[] = { > + { DRM_MODE_LINK_STATUS_GOOD, "Good" }, > + { DRM_MODE_LINK_STATUS_BAD, "Bad" }, > +}; > + > int drm_connector_create_standard_properties(struct drm_device *dev) > { > struct drm_property *prop; > @@ -845,6 +850,33 @@ int drm_mode_create_suggested_offset_properties(struct > drm_device *dev) > EXPORT_SYMBOL(drm_mode_create_suggested_offset_properties); > > /** > + * drm_mode_create_link_status_property - Create link status property > + * @dev: DRM device > + * > + * Called by a driver the first time it's needed, must be attached to desired > + * connectors. > + * This property is used to indicate whether link sttaus is Good or Bad as > + * a result fo link training > + */ > +int drm_mode_create_link_status_property(struct drm_device *dev) > +{ > + struct drm_property *link_status; > + > + if (dev->mode_config.link_status_property) > + return 0; > + > + link_status = > + drm_property_create_enum(dev, 0, "link-status", > + drm_link_status_enum_list, > + ARRAY_SIZE(drm_link_status_enum_list)); > + > + dev->mode_config.scaling_mode_property = link_status; > + > + return 0; > +} > +EXPORT_SYMBOL(drm_mode_create_link_status_property); > + > +/** > * drm_mode_connector_set_path_property - set tile property on connector > * @connector: connector to set property on. > * @path: path to use for property; must not be NULL. > diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h > index fc9d475..7234c0c 100644 > --- a/include/drm/drm_connector.h > +++ b/include/drm/drm_connector.h > @@ -759,6 +759,7 @@ int drm_mode_create_tv_properties(struct drm_device *dev, > int drm_mode_create_scaling_mode_property(struct drm_device *dev); > int drm_mode_create_aspect_ratio_property(struct drm_device *dev); > int drm_mode_create_suggested_offset_properties(struct drm_device *dev); > +int drm_mode_create_link_status_property(struct drm_device *dev); > > int drm_mode_connector_set_path_property(struct drm_connector *connector, > const char *path); > diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h > index fa1aa21..3e9c833 100644 > --- a/include/drm/drm_crtc.h > +++ b/include/drm/drm_crtc.h > @@ -1343,6 +1343,12 @@ struct drm_mode_config { > */ > struct drm_property *suggested_y_property; > > + /** > + * @link_status_property: Optional connector property for link status > + * of the connector as a result of link training. > + */ > + struct drm_property *link_status_property; > + > /* dumb ioctl parameters */ > uint32_t preferred_depth, prefer_shadow; > > diff --git a/include/uapi/drm/drm_mode.h b/include/uapi/drm/drm_mode.h > index 084b50a..f1b0afd 100644 > --- a/include/uapi/drm/drm_mode.h > +++ b/include/uapi/drm/drm_mode.h > @@ -121,6 +121,10 @@ > #define DRM_MODE_DIRTY_ON 1 > #define DRM_MODE_DIRTY_ANNOTATE 2 > > +/* Link Status options */ > +#define DRM_MODE_LINK_STATUS_GOOD 0 > +#define DRM_MODE_LINK_STATUS_BAD 1 > + > struct drm_mode_modeinfo { > __u32 clock; > __u16 hdisplay; > -- > 1.9.1 >