Message ID | 1464272070-23893-2-git-send-email-chris@chris-wilson.co.uk (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Thu, May 26, 2016 at 03:14:30PM +0100, Chris Wilson wrote: > There are two paths to force enable a connector, via debugfs and via > sysfs. sysfs has the advantage of being a stable interface and of > updating the connector after application (allowing us to not force a > reprobe from userspace). > > Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> > Cc: Ville Syrjälä <ville.syrjala@linux.intel.com> > --- > lib/igt_kms.c | 27 +++++++++------------------ > 1 file changed, 9 insertions(+), 18 deletions(-) > > diff --git a/lib/igt_kms.c b/lib/igt_kms.c > index 4da645a..5678248 100644 > --- a/lib/igt_kms.c > +++ b/lib/igt_kms.c > @@ -48,6 +48,7 @@ > #include "igt_aux.h" > #include "intel_chipset.h" > #include "igt_debugfs.h" > +#include "igt_sysfs.h" > > /* list of connectors that need resetting on exit */ > #define MAX_CONNECTORS 32 > @@ -596,9 +597,9 @@ bool kmstest_force_connector(int drm_fd, drmModeConnector *connector, > { > char *path, **tmp; > const char *value; > - int debugfs_fd, ret, len; > drmModeConnector *temp; > uint32_t devid; > + int len; > > devid = intel_get_drm_devid(drm_fd); > > @@ -615,7 +616,7 @@ bool kmstest_force_connector(int drm_fd, drmModeConnector *connector, > value = "on"; > break; > case FORCE_CONNECTOR_DIGITAL: > - value = "digital"; > + value = "on-digital"; > break; > case FORCE_CONNECTOR_OFF: > value = "off"; > @@ -623,20 +624,14 @@ bool kmstest_force_connector(int drm_fd, drmModeConnector *connector, > > default: > case FORCE_CONNECTOR_UNSPECIFIED: > - value = "unspecified"; > + value = "detect"; > break; > } > > - igt_assert_neq(asprintf(&path, "%s-%d/force", kmstest_connector_type_str(connector->connector_type), connector->connector_type_id), > + igt_assert_neq(asprintf(&path, "%s-%d/status", kmstest_connector_type_str(connector->connector_type), connector->connector_type_id), That'll need a cardN- prefix. Rather annoying. > -1); > - debugfs_fd = igt_debugfs_open(path, O_WRONLY | O_TRUNC); > - > - if (debugfs_fd == -1) { > + if (!igt_sysfs_set(path, value)) > return false; > - } > - > - ret = write(debugfs_fd, value, strlen(value)); > - close(debugfs_fd); > > for (len = 0, tmp = forced_connectors; *tmp; tmp++) { > /* check the connector is not already present */ > @@ -669,8 +664,7 @@ bool kmstest_force_connector(int drm_fd, drmModeConnector *connector, > temp = drmModeGetConnector(drm_fd, connector->connector_id); > drmModeFreeConnector(temp); > > - igt_assert(ret != -1); > - return (ret == -1) ? false : true; > + return true; > } > > /** > @@ -2548,9 +2542,6 @@ void igt_reset_connectors(void) > /* reset the connectors stored in forced_connectors, avoiding any > * functions that are not safe to call in signal handlers */ > > - for (tmp = forced_connectors; *tmp; tmp++) { > - int fd = igt_debugfs_open(*tmp, O_WRONLY | O_TRUNC); > - igt_assert(write(fd, "unspecified", 11) == 11); > - close(fd); > - } > + for (tmp = forced_connectors; *tmp; tmp++) > + igt_sysfs_set(*tmp, "detect"); > } > -- > 2.8.1
On Thu, May 26, 2016 at 05:39:32PM +0300, Ville Syrjälä wrote: > On Thu, May 26, 2016 at 03:14:30PM +0100, Chris Wilson wrote: > > There are two paths to force enable a connector, via debugfs and via > > sysfs. sysfs has the advantage of being a stable interface and of > > updating the connector after application (allowing us to not force a > > reprobe from userspace). > > > > Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> > > Cc: Ville Syrjälä <ville.syrjala@linux.intel.com> > > --- > > lib/igt_kms.c | 27 +++++++++------------------ > > 1 file changed, 9 insertions(+), 18 deletions(-) > > > > diff --git a/lib/igt_kms.c b/lib/igt_kms.c > > index 4da645a..5678248 100644 > > --- a/lib/igt_kms.c > > +++ b/lib/igt_kms.c > > @@ -48,6 +48,7 @@ > > #include "igt_aux.h" > > #include "intel_chipset.h" > > #include "igt_debugfs.h" > > +#include "igt_sysfs.h" > > > > /* list of connectors that need resetting on exit */ > > #define MAX_CONNECTORS 32 > > @@ -596,9 +597,9 @@ bool kmstest_force_connector(int drm_fd, drmModeConnector *connector, > > { > > char *path, **tmp; > > const char *value; > > - int debugfs_fd, ret, len; > > drmModeConnector *temp; > > uint32_t devid; > > + int len; > > > > devid = intel_get_drm_devid(drm_fd); > > > > @@ -615,7 +616,7 @@ bool kmstest_force_connector(int drm_fd, drmModeConnector *connector, > > value = "on"; > > break; > > case FORCE_CONNECTOR_DIGITAL: > > - value = "digital"; > > + value = "on-digital"; > > break; > > case FORCE_CONNECTOR_OFF: > > value = "off"; > > @@ -623,20 +624,14 @@ bool kmstest_force_connector(int drm_fd, drmModeConnector *connector, > > > > default: > > case FORCE_CONNECTOR_UNSPECIFIED: > > - value = "unspecified"; > > + value = "detect"; > > break; > > } > > > > - igt_assert_neq(asprintf(&path, "%s-%d/force", kmstest_connector_type_str(connector->connector_type), connector->connector_type_id), > > + igt_assert_neq(asprintf(&path, "%s-%d/status", kmstest_connector_type_str(connector->connector_type), connector->connector_type_id), > > That'll need a cardN- prefix. Rather annoying. Oh dear. That is annoying. Be right back. -Chris
diff --git a/lib/igt_kms.c b/lib/igt_kms.c index 4da645a..5678248 100644 --- a/lib/igt_kms.c +++ b/lib/igt_kms.c @@ -48,6 +48,7 @@ #include "igt_aux.h" #include "intel_chipset.h" #include "igt_debugfs.h" +#include "igt_sysfs.h" /* list of connectors that need resetting on exit */ #define MAX_CONNECTORS 32 @@ -596,9 +597,9 @@ bool kmstest_force_connector(int drm_fd, drmModeConnector *connector, { char *path, **tmp; const char *value; - int debugfs_fd, ret, len; drmModeConnector *temp; uint32_t devid; + int len; devid = intel_get_drm_devid(drm_fd); @@ -615,7 +616,7 @@ bool kmstest_force_connector(int drm_fd, drmModeConnector *connector, value = "on"; break; case FORCE_CONNECTOR_DIGITAL: - value = "digital"; + value = "on-digital"; break; case FORCE_CONNECTOR_OFF: value = "off"; @@ -623,20 +624,14 @@ bool kmstest_force_connector(int drm_fd, drmModeConnector *connector, default: case FORCE_CONNECTOR_UNSPECIFIED: - value = "unspecified"; + value = "detect"; break; } - igt_assert_neq(asprintf(&path, "%s-%d/force", kmstest_connector_type_str(connector->connector_type), connector->connector_type_id), + igt_assert_neq(asprintf(&path, "%s-%d/status", kmstest_connector_type_str(connector->connector_type), connector->connector_type_id), -1); - debugfs_fd = igt_debugfs_open(path, O_WRONLY | O_TRUNC); - - if (debugfs_fd == -1) { + if (!igt_sysfs_set(path, value)) return false; - } - - ret = write(debugfs_fd, value, strlen(value)); - close(debugfs_fd); for (len = 0, tmp = forced_connectors; *tmp; tmp++) { /* check the connector is not already present */ @@ -669,8 +664,7 @@ bool kmstest_force_connector(int drm_fd, drmModeConnector *connector, temp = drmModeGetConnector(drm_fd, connector->connector_id); drmModeFreeConnector(temp); - igt_assert(ret != -1); - return (ret == -1) ? false : true; + return true; } /** @@ -2548,9 +2542,6 @@ void igt_reset_connectors(void) /* reset the connectors stored in forced_connectors, avoiding any * functions that are not safe to call in signal handlers */ - for (tmp = forced_connectors; *tmp; tmp++) { - int fd = igt_debugfs_open(*tmp, O_WRONLY | O_TRUNC); - igt_assert(write(fd, "unspecified", 11) == 11); - close(fd); - } + for (tmp = forced_connectors; *tmp; tmp++) + igt_sysfs_set(*tmp, "detect"); }
There are two paths to force enable a connector, via debugfs and via sysfs. sysfs has the advantage of being a stable interface and of updating the connector after application (allowing us to not force a reprobe from userspace). Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com> --- lib/igt_kms.c | 27 +++++++++------------------ 1 file changed, 9 insertions(+), 18 deletions(-)