* [PATCH libdrm 1/2] xf86drm: fallback to MODALIAS for OF less platform devices
@ 2019-01-23 10:45 Emil Velikov
2019-01-23 10:45 ` [PATCH libdrm 2/2] xf85drm: de-duplicate drmParse{Platform.Host1x}{Bus, Device}Info Emil Velikov
2019-01-23 11:04 ` [PATCH libdrm 1/2] xf86drm: fallback to MODALIAS for OF less platform devices Eric Engestrom
0 siblings, 2 replies; 8+ messages in thread
From: Emil Velikov @ 2019-01-23 10:45 UTC (permalink / raw)
To: dri-devel; +Cc: emil.l.velikov
From: Emil Velikov <emil.velikov@collabora.com>
Some devices can lack OF data or it may not be available in the uevent
file. Fallback to the MODALIAS data in those cases.
We strip any leading "MODALIAS=.*:" thus the resulting information is
compatible with existing code in Mesa.
Signed-off-by: Emil Velikov <emil.velikov@collabora.com>
---
xf86drm.c | 55 ++++++++++++++++++++++++++++++++++++++++++-------------
1 file changed, 42 insertions(+), 13 deletions(-)
diff --git a/xf86drm.c b/xf86drm.c
index 10df682b..374734eb 100644
--- a/xf86drm.c
+++ b/xf86drm.c
@@ -3511,15 +3511,28 @@ free_device:
static int drmParsePlatformBusInfo(int maj, int min, drmPlatformBusInfoPtr info)
{
#ifdef __linux__
- char path[PATH_MAX + 1], *name;
+ char path[PATH_MAX + 1], *name, *foo;
snprintf(path, sizeof(path), "/sys/dev/char/%d:%d/device", maj, min);
name = sysfs_uevent_get(path, "OF_FULLNAME");
- if (!name)
- return -ENOENT;
+ foo = name;
+ if (!name) {
+ /* If the device lacks OF data, pick the MODALIAS info */
+ name = sysfs_uevent_get(path, "MODALIAS");
+ if (!name)
+ return -ENOENT;
+
+ /* .. and strip the MODALIAS=[platform,usb...]: part. */
+ foo = strrchr(name, ':');
+ if (!foo) {
+ free(name);
+ return -ENOENT;
+ }
+ foo++;
+ }
- strncpy(info->fullname, name, DRM_PLATFORM_DEVICE_NAME_LEN);
+ strncpy(info->fullname, foo, DRM_PLATFORM_DEVICE_NAME_LEN);
info->fullname[DRM_PLATFORM_DEVICE_NAME_LEN - 1] = '\0';
free(name);
@@ -3534,18 +3547,20 @@ static int drmParsePlatformDeviceInfo(int maj, int min,
drmPlatformDeviceInfoPtr info)
{
#ifdef __linux__
- char path[PATH_MAX + 1], *value;
+ char path[PATH_MAX + 1], *value, *foo;
unsigned int count, i;
int err;
snprintf(path, sizeof(path), "/sys/dev/char/%d:%d/device", maj, min);
value = sysfs_uevent_get(path, "OF_COMPATIBLE_N");
- if (!value)
- return -ENOENT;
-
- sscanf(value, "%u", &count);
- free(value);
+ if (value) {
+ sscanf(value, "%u", &count);
+ free(value);
+ } else {
+ /* Assume one entry if the device lack OF data */
+ count = 1;
+ }
info->compatible = calloc(count + 1, sizeof(*info->compatible));
if (!info->compatible)
@@ -3553,12 +3568,26 @@ static int drmParsePlatformDeviceInfo(int maj, int min,
for (i = 0; i < count; i++) {
value = sysfs_uevent_get(path, "OF_COMPATIBLE_%u", i);
+ foo = value;
if (!value) {
- err = -ENOENT;
- goto free;
+ /* If the device lacks OF data, pick the MODALIAS info */
+ value = sysfs_uevent_get(path, "MODALIAS");
+ if (!value) {
+ err = -ENOENT;
+ goto free;
+ }
+
+ /* .. and strip the MODALIAS=[platform,usb...]: part. */
+ foo = strrchr(value, ':');
+ if (!foo) {
+ free(value);
+ return -ENOENT;
+ }
+ foo = strdup(foo + 1);
+ free(value);
}
- info->compatible[i] = value;
+ info->compatible[i] = foo;
}
return 0;
--
2.20.1
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH libdrm 2/2] xf85drm: de-duplicate drmParse{Platform.Host1x}{Bus, Device}Info
2019-01-23 10:45 [PATCH libdrm 1/2] xf86drm: fallback to MODALIAS for OF less platform devices Emil Velikov
@ 2019-01-23 10:45 ` Emil Velikov
2019-01-25 13:11 ` Eric Engestrom
2019-01-23 11:04 ` [PATCH libdrm 1/2] xf86drm: fallback to MODALIAS for OF less platform devices Eric Engestrom
1 sibling, 1 reply; 8+ messages in thread
From: Emil Velikov @ 2019-01-23 10:45 UTC (permalink / raw)
To: dri-devel; +Cc: emil.l.velikov
From: Emil Velikov <emil.velikov@collabora.com>
The functions are virtually identical, fold them up.
Signed-off-by: Emil Velikov <emil.velikov@collabora.com>
---
xf86drm.c | 98 +++++++++----------------------------------------------
1 file changed, 15 insertions(+), 83 deletions(-)
diff --git a/xf86drm.c b/xf86drm.c
index 374734eb..18c9693a 100644
--- a/xf86drm.c
+++ b/xf86drm.c
@@ -3508,7 +3508,7 @@ free_device:
return ret;
}
-static int drmParsePlatformBusInfo(int maj, int min, drmPlatformBusInfoPtr info)
+static int drmParseOFBusInfo(int maj, int min, char *fullname)
{
#ifdef __linux__
char path[PATH_MAX + 1], *name, *foo;
@@ -3532,19 +3532,18 @@ static int drmParsePlatformBusInfo(int maj, int min, drmPlatformBusInfoPtr info)
foo++;
}
- strncpy(info->fullname, foo, DRM_PLATFORM_DEVICE_NAME_LEN);
- info->fullname[DRM_PLATFORM_DEVICE_NAME_LEN - 1] = '\0';
+ strncpy(fullname, foo, DRM_PLATFORM_DEVICE_NAME_LEN);
+ fullname[DRM_PLATFORM_DEVICE_NAME_LEN - 1] = '\0';
free(name);
return 0;
#else
-#warning "Missing implementation of drmParsePlatformBusInfo"
+#warning "Missing implementation of drmParseOFBusInfo"
return -EINVAL;
#endif
}
-static int drmParsePlatformDeviceInfo(int maj, int min,
- drmPlatformDeviceInfoPtr info)
+static int drmParseOFDeviceInfo(int maj, int min, char ***compatible)
{
#ifdef __linux__
char path[PATH_MAX + 1], *value, *foo;
@@ -3562,8 +3561,8 @@ static int drmParsePlatformDeviceInfo(int maj, int min,
count = 1;
}
- info->compatible = calloc(count + 1, sizeof(*info->compatible));
- if (!info->compatible)
+ *compatible = calloc(count + 1, sizeof(char *));
+ if (!*compatible)
return -ENOMEM;
for (i = 0; i < count; i++) {
@@ -3587,19 +3586,19 @@ static int drmParsePlatformDeviceInfo(int maj, int min,
free(value);
}
- info->compatible[i] = foo;
+ *compatible[i] = foo;
}
return 0;
free:
while (i--)
- free(info->compatible[i]);
+ free(*compatible[i]);
- free(info->compatible);
+ free(*compatible);
return err;
#else
-#warning "Missing implementation of drmParsePlatformDeviceInfo"
+#warning "Missing implementation of drmParseOFDeviceInfo"
return -EINVAL;
#endif
}
@@ -3622,7 +3621,7 @@ static int drmProcessPlatformDevice(drmDevicePtr *device,
dev->businfo.platform = (drmPlatformBusInfoPtr)ptr;
- ret = drmParsePlatformBusInfo(maj, min, dev->businfo.platform);
+ ret = drmParseOFBusInfo(maj, min, dev->businfo.platform->fullname);
if (ret < 0)
goto free_device;
@@ -3630,7 +3629,7 @@ static int drmProcessPlatformDevice(drmDevicePtr *device,
ptr += sizeof(drmPlatformBusInfo);
dev->deviceinfo.platform = (drmPlatformDeviceInfoPtr)ptr;
- ret = drmParsePlatformDeviceInfo(maj, min, dev->deviceinfo.platform);
+ ret = drmParseOFDeviceInfo(maj, min, &dev->deviceinfo.platform->compatible);
if (ret < 0)
goto free_device;
}
@@ -3644,73 +3643,6 @@ free_device:
return ret;
}
-static int drmParseHost1xBusInfo(int maj, int min, drmHost1xBusInfoPtr info)
-{
-#ifdef __linux__
- char path[PATH_MAX + 1], *name;
-
- snprintf(path, sizeof(path), "/sys/dev/char/%d:%d/device", maj, min);
-
- name = sysfs_uevent_get(path, "OF_FULLNAME");
- if (!name)
- return -ENOENT;
-
- strncpy(info->fullname, name, DRM_HOST1X_DEVICE_NAME_LEN);
- info->fullname[DRM_HOST1X_DEVICE_NAME_LEN - 1] = '\0';
- free(name);
-
- return 0;
-#else
-#warning "Missing implementation of drmParseHost1xBusInfo"
- return -EINVAL;
-#endif
-}
-
-static int drmParseHost1xDeviceInfo(int maj, int min,
- drmHost1xDeviceInfoPtr info)
-{
-#ifdef __linux__
- char path[PATH_MAX + 1], *value;
- unsigned int count, i;
- int err;
-
- snprintf(path, sizeof(path), "/sys/dev/char/%d:%d/device", maj, min);
-
- value = sysfs_uevent_get(path, "OF_COMPATIBLE_N");
- if (!value)
- return -ENOENT;
-
- sscanf(value, "%u", &count);
- free(value);
-
- info->compatible = calloc(count + 1, sizeof(*info->compatible));
- if (!info->compatible)
- return -ENOMEM;
-
- for (i = 0; i < count; i++) {
- value = sysfs_uevent_get(path, "OF_COMPATIBLE_%u", i);
- if (!value) {
- err = -ENOENT;
- goto free;
- }
-
- info->compatible[i] = value;
- }
-
- return 0;
-
-free:
- while (i--)
- free(info->compatible[i]);
-
- free(info->compatible);
- return err;
-#else
-#warning "Missing implementation of drmParseHost1xDeviceInfo"
- return -EINVAL;
-#endif
-}
-
static int drmProcessHost1xDevice(drmDevicePtr *device,
const char *node, int node_type,
int maj, int min, bool fetch_deviceinfo,
@@ -3729,7 +3661,7 @@ static int drmProcessHost1xDevice(drmDevicePtr *device,
dev->businfo.host1x = (drmHost1xBusInfoPtr)ptr;
- ret = drmParseHost1xBusInfo(maj, min, dev->businfo.host1x);
+ ret = drmParseOFBusInfo(maj, min, dev->businfo.host1x->fullname);
if (ret < 0)
goto free_device;
@@ -3737,7 +3669,7 @@ static int drmProcessHost1xDevice(drmDevicePtr *device,
ptr += sizeof(drmHost1xBusInfo);
dev->deviceinfo.host1x = (drmHost1xDeviceInfoPtr)ptr;
- ret = drmParseHost1xDeviceInfo(maj, min, dev->deviceinfo.host1x);
+ ret = drmParseOFDeviceInfo(maj, min, &dev->deviceinfo.host1x->compatible);
if (ret < 0)
goto free_device;
}
--
2.20.1
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH libdrm 1/2] xf86drm: fallback to MODALIAS for OF less platform devices
2019-01-23 10:45 [PATCH libdrm 1/2] xf86drm: fallback to MODALIAS for OF less platform devices Emil Velikov
2019-01-23 10:45 ` [PATCH libdrm 2/2] xf85drm: de-duplicate drmParse{Platform.Host1x}{Bus, Device}Info Emil Velikov
@ 2019-01-23 11:04 ` Eric Engestrom
2019-01-23 11:26 ` Emil Velikov
1 sibling, 1 reply; 8+ messages in thread
From: Eric Engestrom @ 2019-01-23 11:04 UTC (permalink / raw)
To: Emil Velikov; +Cc: dri-devel
On Wednesday, 2019-01-23 10:45:17 +0000, Emil Velikov wrote:
> From: Emil Velikov <emil.velikov@collabora.com>
>
> Some devices can lack OF data or it may not be available in the uevent
> file. Fallback to the MODALIAS data in those cases.
>
> We strip any leading "MODALIAS=.*:" thus the resulting information is
> compatible with existing code in Mesa.
>
> Signed-off-by: Emil Velikov <emil.velikov@collabora.com>
> ---
> xf86drm.c | 55 ++++++++++++++++++++++++++++++++++++++++++-------------
> 1 file changed, 42 insertions(+), 13 deletions(-)
>
> diff --git a/xf86drm.c b/xf86drm.c
> index 10df682b..374734eb 100644
> --- a/xf86drm.c
> +++ b/xf86drm.c
> @@ -3511,15 +3511,28 @@ free_device:
> static int drmParsePlatformBusInfo(int maj, int min, drmPlatformBusInfoPtr info)
> {
> #ifdef __linux__
> - char path[PATH_MAX + 1], *name;
> + char path[PATH_MAX + 1], *name, *foo;
I assume you didn't mean to send this patch yet? :P
>
> snprintf(path, sizeof(path), "/sys/dev/char/%d:%d/device", maj, min);
>
> name = sysfs_uevent_get(path, "OF_FULLNAME");
> - if (!name)
> - return -ENOENT;
> + foo = name;
> + if (!name) {
> + /* If the device lacks OF data, pick the MODALIAS info */
> + name = sysfs_uevent_get(path, "MODALIAS");
> + if (!name)
> + return -ENOENT;
> +
> + /* .. and strip the MODALIAS=[platform,usb...]: part. */
> + foo = strrchr(name, ':');
> + if (!foo) {
> + free(name);
> + return -ENOENT;
> + }
> + foo++;
> + }
>
> - strncpy(info->fullname, name, DRM_PLATFORM_DEVICE_NAME_LEN);
> + strncpy(info->fullname, foo, DRM_PLATFORM_DEVICE_NAME_LEN);
> info->fullname[DRM_PLATFORM_DEVICE_NAME_LEN - 1] = '\0';
> free(name);
>
> @@ -3534,18 +3547,20 @@ static int drmParsePlatformDeviceInfo(int maj, int min,
> drmPlatformDeviceInfoPtr info)
> {
> #ifdef __linux__
> - char path[PATH_MAX + 1], *value;
> + char path[PATH_MAX + 1], *value, *foo;
> unsigned int count, i;
> int err;
>
> snprintf(path, sizeof(path), "/sys/dev/char/%d:%d/device", maj, min);
>
> value = sysfs_uevent_get(path, "OF_COMPATIBLE_N");
> - if (!value)
> - return -ENOENT;
> -
> - sscanf(value, "%u", &count);
> - free(value);
> + if (value) {
> + sscanf(value, "%u", &count);
> + free(value);
> + } else {
> + /* Assume one entry if the device lack OF data */
> + count = 1;
> + }
>
> info->compatible = calloc(count + 1, sizeof(*info->compatible));
> if (!info->compatible)
> @@ -3553,12 +3568,26 @@ static int drmParsePlatformDeviceInfo(int maj, int min,
>
> for (i = 0; i < count; i++) {
> value = sysfs_uevent_get(path, "OF_COMPATIBLE_%u", i);
> + foo = value;
> if (!value) {
> - err = -ENOENT;
> - goto free;
> + /* If the device lacks OF data, pick the MODALIAS info */
> + value = sysfs_uevent_get(path, "MODALIAS");
> + if (!value) {
> + err = -ENOENT;
> + goto free;
> + }
> +
> + /* .. and strip the MODALIAS=[platform,usb...]: part. */
> + foo = strrchr(value, ':');
> + if (!foo) {
> + free(value);
> + return -ENOENT;
> + }
> + foo = strdup(foo + 1);
> + free(value);
> }
>
> - info->compatible[i] = value;
> + info->compatible[i] = foo;
> }
>
> return 0;
> --
> 2.20.1
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH libdrm 1/2] xf86drm: fallback to MODALIAS for OF less platform devices
2019-01-23 11:04 ` [PATCH libdrm 1/2] xf86drm: fallback to MODALIAS for OF less platform devices Eric Engestrom
@ 2019-01-23 11:26 ` Emil Velikov
2019-01-24 14:42 ` Emil Velikov
0 siblings, 1 reply; 8+ messages in thread
From: Emil Velikov @ 2019-01-23 11:26 UTC (permalink / raw)
To: Eric Engestrom; +Cc: ML dri-devel
On Wed, 23 Jan 2019 at 11:04, Eric Engestrom <eric.engestrom@intel.com> wrote:
>
> On Wednesday, 2019-01-23 10:45:17 +0000, Emil Velikov wrote:
> > From: Emil Velikov <emil.velikov@collabora.com>
> >
> > Some devices can lack OF data or it may not be available in the uevent
> > file. Fallback to the MODALIAS data in those cases.
> >
> > We strip any leading "MODALIAS=.*:" thus the resulting information is
> > compatible with existing code in Mesa.
> >
> > Signed-off-by: Emil Velikov <emil.velikov@collabora.com>
> > ---
> > xf86drm.c | 55 ++++++++++++++++++++++++++++++++++++++++++-------------
> > 1 file changed, 42 insertions(+), 13 deletions(-)
> >
> > diff --git a/xf86drm.c b/xf86drm.c
> > index 10df682b..374734eb 100644
> > --- a/xf86drm.c
> > +++ b/xf86drm.c
> > @@ -3511,15 +3511,28 @@ free_device:
> > static int drmParsePlatformBusInfo(int maj, int min, drmPlatformBusInfoPtr info)
> > {
> > #ifdef __linux__
> > - char path[PATH_MAX + 1], *name;
> > + char path[PATH_MAX + 1], *name, *foo;
>
> I assume you didn't mean to send this patch yet? :P
>
Thanks Eric, I intentionally sent it out. Mind was blank thinking for
a reasonable variable name :-\
Suggestions are more than welcome.
For reference with this patch drmdevice and other drmDevice API users list:
- VGEM, needs "drm/vgem: Fix vgem_init to get drm device available."
- in v5.0 only :'-(
- etnaviv, after "drm/etnaviv: remove the need for a gpu-subsystem DT
node" landed in v4.17/18
HTH
Emil
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH libdrm 1/2] xf86drm: fallback to MODALIAS for OF less platform devices
2019-01-23 11:26 ` Emil Velikov
@ 2019-01-24 14:42 ` Emil Velikov
2019-02-01 14:15 ` Lucas Stach
0 siblings, 1 reply; 8+ messages in thread
From: Emil Velikov @ 2019-01-24 14:42 UTC (permalink / raw)
To: Eric Engestrom, Christian Gmeiner; +Cc: ML dri-devel
On Wed, 23 Jan 2019 at 11:26, Emil Velikov <emil.l.velikov@gmail.com> wrote:
>
> On Wed, 23 Jan 2019 at 11:04, Eric Engestrom <eric.engestrom@intel.com> wrote:
> >
> > On Wednesday, 2019-01-23 10:45:17 +0000, Emil Velikov wrote:
> > > From: Emil Velikov <emil.velikov@collabora.com>
> > >
> > > Some devices can lack OF data or it may not be available in the uevent
> > > file. Fallback to the MODALIAS data in those cases.
> > >
> > > We strip any leading "MODALIAS=.*:" thus the resulting information is
> > > compatible with existing code in Mesa.
> > >
> > > Signed-off-by: Emil Velikov <emil.velikov@collabora.com>
> > > ---
> > > xf86drm.c | 55 ++++++++++++++++++++++++++++++++++++++++++-------------
> > > 1 file changed, 42 insertions(+), 13 deletions(-)
> > >
> > > diff --git a/xf86drm.c b/xf86drm.c
> > > index 10df682b..374734eb 100644
> > > --- a/xf86drm.c
> > > +++ b/xf86drm.c
> > > @@ -3511,15 +3511,28 @@ free_device:
> > > static int drmParsePlatformBusInfo(int maj, int min, drmPlatformBusInfoPtr info)
> > > {
> > > #ifdef __linux__
> > > - char path[PATH_MAX + 1], *name;
> > > + char path[PATH_MAX + 1], *name, *foo;
> >
> > I assume you didn't mean to send this patch yet? :P
> >
> Thanks Eric, I intentionally sent it out. Mind was blank thinking for
> a reasonable variable name :-\
> Suggestions are more than welcome.
>
> For reference with this patch drmdevice and other drmDevice API users list:
> - VGEM, needs "drm/vgem: Fix vgem_init to get drm device available."
> - in v5.0 only :'-(
> - etnaviv, after "drm/etnaviv: remove the need for a gpu-subsystem DT
> node" landed in v4.17/18
>
Christian can you please test that this patches brings etnaviv back to the list?
Above is a reasonable assumption, yet assumption never the less.
I've only tested VGEM.
Thanks
Emil
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH libdrm 2/2] xf85drm: de-duplicate drmParse{Platform.Host1x}{Bus, Device}Info
2019-01-23 10:45 ` [PATCH libdrm 2/2] xf85drm: de-duplicate drmParse{Platform.Host1x}{Bus, Device}Info Emil Velikov
@ 2019-01-25 13:11 ` Eric Engestrom
0 siblings, 0 replies; 8+ messages in thread
From: Eric Engestrom @ 2019-01-25 13:11 UTC (permalink / raw)
To: Emil Velikov; +Cc: dri-devel
On Wednesday, 2019-01-23 10:45:18 +0000, Emil Velikov wrote:
> From: Emil Velikov <emil.velikov@collabora.com>
>
> The functions are virtually identical, fold them up.
>
> Signed-off-by: Emil Velikov <emil.velikov@collabora.com>
Assuming patch 1 is OK, and `foo` gets renamed to something better:
Reviewed-by: Eric Engestrom <eric.engestrom@intel.com>
I don't know enough to review patch 1 though.
> ---
> xf86drm.c | 98 +++++++++----------------------------------------------
> 1 file changed, 15 insertions(+), 83 deletions(-)
>
> diff --git a/xf86drm.c b/xf86drm.c
> index 374734eb..18c9693a 100644
> --- a/xf86drm.c
> +++ b/xf86drm.c
> @@ -3508,7 +3508,7 @@ free_device:
> return ret;
> }
>
> -static int drmParsePlatformBusInfo(int maj, int min, drmPlatformBusInfoPtr info)
> +static int drmParseOFBusInfo(int maj, int min, char *fullname)
> {
> #ifdef __linux__
> char path[PATH_MAX + 1], *name, *foo;
> @@ -3532,19 +3532,18 @@ static int drmParsePlatformBusInfo(int maj, int min, drmPlatformBusInfoPtr info)
> foo++;
> }
>
> - strncpy(info->fullname, foo, DRM_PLATFORM_DEVICE_NAME_LEN);
> - info->fullname[DRM_PLATFORM_DEVICE_NAME_LEN - 1] = '\0';
> + strncpy(fullname, foo, DRM_PLATFORM_DEVICE_NAME_LEN);
> + fullname[DRM_PLATFORM_DEVICE_NAME_LEN - 1] = '\0';
> free(name);
>
> return 0;
> #else
> -#warning "Missing implementation of drmParsePlatformBusInfo"
> +#warning "Missing implementation of drmParseOFBusInfo"
> return -EINVAL;
> #endif
> }
>
> -static int drmParsePlatformDeviceInfo(int maj, int min,
> - drmPlatformDeviceInfoPtr info)
> +static int drmParseOFDeviceInfo(int maj, int min, char ***compatible)
> {
> #ifdef __linux__
> char path[PATH_MAX + 1], *value, *foo;
> @@ -3562,8 +3561,8 @@ static int drmParsePlatformDeviceInfo(int maj, int min,
> count = 1;
> }
>
> - info->compatible = calloc(count + 1, sizeof(*info->compatible));
> - if (!info->compatible)
> + *compatible = calloc(count + 1, sizeof(char *));
> + if (!*compatible)
> return -ENOMEM;
>
> for (i = 0; i < count; i++) {
> @@ -3587,19 +3586,19 @@ static int drmParsePlatformDeviceInfo(int maj, int min,
> free(value);
> }
>
> - info->compatible[i] = foo;
> + *compatible[i] = foo;
> }
>
> return 0;
>
> free:
> while (i--)
> - free(info->compatible[i]);
> + free(*compatible[i]);
>
> - free(info->compatible);
> + free(*compatible);
> return err;
> #else
> -#warning "Missing implementation of drmParsePlatformDeviceInfo"
> +#warning "Missing implementation of drmParseOFDeviceInfo"
> return -EINVAL;
> #endif
> }
> @@ -3622,7 +3621,7 @@ static int drmProcessPlatformDevice(drmDevicePtr *device,
>
> dev->businfo.platform = (drmPlatformBusInfoPtr)ptr;
>
> - ret = drmParsePlatformBusInfo(maj, min, dev->businfo.platform);
> + ret = drmParseOFBusInfo(maj, min, dev->businfo.platform->fullname);
> if (ret < 0)
> goto free_device;
>
> @@ -3630,7 +3629,7 @@ static int drmProcessPlatformDevice(drmDevicePtr *device,
> ptr += sizeof(drmPlatformBusInfo);
> dev->deviceinfo.platform = (drmPlatformDeviceInfoPtr)ptr;
>
> - ret = drmParsePlatformDeviceInfo(maj, min, dev->deviceinfo.platform);
> + ret = drmParseOFDeviceInfo(maj, min, &dev->deviceinfo.platform->compatible);
> if (ret < 0)
> goto free_device;
> }
> @@ -3644,73 +3643,6 @@ free_device:
> return ret;
> }
>
> -static int drmParseHost1xBusInfo(int maj, int min, drmHost1xBusInfoPtr info)
> -{
> -#ifdef __linux__
> - char path[PATH_MAX + 1], *name;
> -
> - snprintf(path, sizeof(path), "/sys/dev/char/%d:%d/device", maj, min);
> -
> - name = sysfs_uevent_get(path, "OF_FULLNAME");
> - if (!name)
> - return -ENOENT;
> -
> - strncpy(info->fullname, name, DRM_HOST1X_DEVICE_NAME_LEN);
> - info->fullname[DRM_HOST1X_DEVICE_NAME_LEN - 1] = '\0';
> - free(name);
> -
> - return 0;
> -#else
> -#warning "Missing implementation of drmParseHost1xBusInfo"
> - return -EINVAL;
> -#endif
> -}
> -
> -static int drmParseHost1xDeviceInfo(int maj, int min,
> - drmHost1xDeviceInfoPtr info)
> -{
> -#ifdef __linux__
> - char path[PATH_MAX + 1], *value;
> - unsigned int count, i;
> - int err;
> -
> - snprintf(path, sizeof(path), "/sys/dev/char/%d:%d/device", maj, min);
> -
> - value = sysfs_uevent_get(path, "OF_COMPATIBLE_N");
> - if (!value)
> - return -ENOENT;
> -
> - sscanf(value, "%u", &count);
> - free(value);
> -
> - info->compatible = calloc(count + 1, sizeof(*info->compatible));
> - if (!info->compatible)
> - return -ENOMEM;
> -
> - for (i = 0; i < count; i++) {
> - value = sysfs_uevent_get(path, "OF_COMPATIBLE_%u", i);
> - if (!value) {
> - err = -ENOENT;
> - goto free;
> - }
> -
> - info->compatible[i] = value;
> - }
> -
> - return 0;
> -
> -free:
> - while (i--)
> - free(info->compatible[i]);
> -
> - free(info->compatible);
> - return err;
> -#else
> -#warning "Missing implementation of drmParseHost1xDeviceInfo"
> - return -EINVAL;
> -#endif
> -}
> -
> static int drmProcessHost1xDevice(drmDevicePtr *device,
> const char *node, int node_type,
> int maj, int min, bool fetch_deviceinfo,
> @@ -3729,7 +3661,7 @@ static int drmProcessHost1xDevice(drmDevicePtr *device,
>
> dev->businfo.host1x = (drmHost1xBusInfoPtr)ptr;
>
> - ret = drmParseHost1xBusInfo(maj, min, dev->businfo.host1x);
> + ret = drmParseOFBusInfo(maj, min, dev->businfo.host1x->fullname);
> if (ret < 0)
> goto free_device;
>
> @@ -3737,7 +3669,7 @@ static int drmProcessHost1xDevice(drmDevicePtr *device,
> ptr += sizeof(drmHost1xBusInfo);
> dev->deviceinfo.host1x = (drmHost1xDeviceInfoPtr)ptr;
>
> - ret = drmParseHost1xDeviceInfo(maj, min, dev->deviceinfo.host1x);
> + ret = drmParseOFDeviceInfo(maj, min, &dev->deviceinfo.host1x->compatible);
> if (ret < 0)
> goto free_device;
> }
> --
> 2.20.1
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH libdrm 1/2] xf86drm: fallback to MODALIAS for OF less platform devices
2019-01-24 14:42 ` Emil Velikov
@ 2019-02-01 14:15 ` Lucas Stach
2019-02-04 15:39 ` Emil Velikov
0 siblings, 1 reply; 8+ messages in thread
From: Lucas Stach @ 2019-02-01 14:15 UTC (permalink / raw)
To: Emil Velikov, Eric Engestrom, Christian Gmeiner; +Cc: ML dri-devel
Hi Emil,
Am Donnerstag, den 24.01.2019, 14:42 +0000 schrieb Emil Velikov:
> > On Wed, 23 Jan 2019 at 11:26, Emil Velikov <emil.l.velikov@gmail.com> wrote:
> >
> > On Wed, 23 Jan 2019 at 11:04, Eric Engestrom <eric.engestrom@intel.com> wrote:
> > >
> > > On Wednesday, 2019-01-23 10:45:17 +0000, Emil Velikov wrote:
> > > > > > > > From: Emil Velikov <emil.velikov@collabora.com>
> > > >
> > > > Some devices can lack OF data or it may not be available in the uevent
> > > > file. Fallback to the MODALIAS data in those cases.
> > > >
> > > > We strip any leading "MODALIAS=.*:" thus the resulting information is
> > > > compatible with existing code in Mesa.
> > > >
> > > > > > > > Signed-off-by: Emil Velikov <emil.velikov@collabora.com>
> > > > ---
> > > > xf86drm.c | 55 ++++++++++++++++++++++++++++++++++++++++++-------------
> > > > 1 file changed, 42 insertions(+), 13 deletions(-)
> > > >
> > > > diff --git a/xf86drm.c b/xf86drm.c
> > > > index 10df682b..374734eb 100644
> > > > --- a/xf86drm.c
> > > > +++ b/xf86drm.c
> > > > @@ -3511,15 +3511,28 @@ free_device:
> > > > static int drmParsePlatformBusInfo(int maj, int min, drmPlatformBusInfoPtr info)
> > > > {
> > > > #ifdef __linux__
> > > > - char path[PATH_MAX + 1], *name;
> > > > + char path[PATH_MAX + 1], *name, *foo;
> > >
> > > I assume you didn't mean to send this patch yet? :P
> > >
> >
> > Thanks Eric, I intentionally sent it out. Mind was blank thinking for
> > a reasonable variable name :-\
> > Suggestions are more than welcome.
> >
> > For reference with this patch drmdevice and other drmDevice API users list:
> > - VGEM, needs "drm/vgem: Fix vgem_init to get drm device available."
> > - in v5.0 only :'-(
> > - etnaviv, after "drm/etnaviv: remove the need for a gpu-subsystem DT
> > node" landed in v4.17/18
> >
>
> Christian can you please test that this patches brings etnaviv back to the list?
> Above is a reasonable assumption, yet assumption never the less.
I can confirm that with this patch applied
loader_open_render_node("etnaviv") works as intended.
Regards,
Lucas
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH libdrm 1/2] xf86drm: fallback to MODALIAS for OF less platform devices
2019-02-01 14:15 ` Lucas Stach
@ 2019-02-04 15:39 ` Emil Velikov
0 siblings, 0 replies; 8+ messages in thread
From: Emil Velikov @ 2019-02-04 15:39 UTC (permalink / raw)
To: Lucas Stach; +Cc: Eric Engestrom, ML dri-devel
On Fri, 1 Feb 2019 at 14:15, Lucas Stach <l.stach@pengutronix.de> wrote:
>
> Hi Emil,
>
> > > For reference with this patch drmdevice and other drmDevice API users list:
> > > - VGEM, needs "drm/vgem: Fix vgem_init to get drm device available."
> > > - in v5.0 only :'-(
> > > - etnaviv, after "drm/etnaviv: remove the need for a gpu-subsystem DT
> > > node" landed in v4.17/18
> > >
> >
> > Christian can you please test that this patches brings etnaviv back to the list?
> > Above is a reasonable assumption, yet assumption never the less.
>
> I can confirm that with this patch applied
> loader_open_render_node("etnaviv") works as intended.
>
Amazing, thank you Lucas.
Pushed to master.
-Emil
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2019-02-04 15:43 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-01-23 10:45 [PATCH libdrm 1/2] xf86drm: fallback to MODALIAS for OF less platform devices Emil Velikov
2019-01-23 10:45 ` [PATCH libdrm 2/2] xf85drm: de-duplicate drmParse{Platform.Host1x}{Bus, Device}Info Emil Velikov
2019-01-25 13:11 ` Eric Engestrom
2019-01-23 11:04 ` [PATCH libdrm 1/2] xf86drm: fallback to MODALIAS for OF less platform devices Eric Engestrom
2019-01-23 11:26 ` Emil Velikov
2019-01-24 14:42 ` Emil Velikov
2019-02-01 14:15 ` Lucas Stach
2019-02-04 15:39 ` Emil Velikov
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.