From: Rob Clark robdclark@gmail.com
Include the minor device id in the bus-id to give userspace a way to open the correct "cardN" when there are multiple device instances. --- It may seem a bit strange to have multiple platform device instances, but we have a use-case for this. And this relatively simple patch does the trick.
drivers/gpu/drm/drm_ioctl.c | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/drm_ioctl.c b/drivers/gpu/drm/drm_ioctl.c index 47db4df..075024b 100644 --- a/drivers/gpu/drm/drm_ioctl.c +++ b/drivers/gpu/drm/drm_ioctl.c @@ -165,14 +165,15 @@ static int drm_set_busid(struct drm_device *dev, struct drm_file *file_priv) drm_unset_busid(dev, master);
if (drm_core_check_feature(dev, DRIVER_USE_PLATFORM_DEVICE)) { - master->unique_len = 10 + strlen(dev->platformdev->name); + master->unique_len = 13 + strlen(dev->platformdev->name); + master->unique_size = master->unique_len; master->unique = kmalloc(master->unique_len + 1, GFP_KERNEL);
if (master->unique == NULL) return -ENOMEM;
len = snprintf(master->unique, master->unique_len, - "platform:%s", dev->platformdev->name); + "platform:%s:%02d", dev->platformdev->name, dev->primary->index);
if (len > master->unique_len) { DRM_ERROR("Unique buffer overflowed\n");
Ahh, yes I am.. I apologize, still too much display and gfx accel and other stuff I depend on isn't in kernel.org tree yet, so I'm just using ubuntu 2.6.38 tree, ti-omap4 branch, (since this is the most current kernel that also has everything else I need). But I guess it is a bit out of date already. Maybe there is a way I could pull all the patches just from drivers/gpu/drm directory to stay a bit more current?
But anyways, if everyone is ok with the idea to change the bus-id this way, then I could resubmit a patch with the same change in drm_platform_set_busid()
BR, -R
On Wed, Mar 30, 2011 at 7:57 AM, Ilija Hadzic ihadzic@research.bell-labs.com wrote:
On Wed, Mar 30, 2011 at 2:44 AM, Rob Clark rob@ti.com wrote:
I'm finding it hard to like this since I feel it might limit certain thing in the future, by baking this into the ABI.
We have plans for multiple device nodes per device, but they don't involve abusing the bus id like this.
Surely you'd just have another platform device with another unique name for this, I'd be more willing to accept some sort of unique id stored in the platformdev or drm that isn't the device node.
Dave.
On Mon, Apr 4, 2011 at 7:30 PM, Dave Airlie airlied@gmail.com wrote:
What about:
len = snprintf(master->unique, master->unique_len, "platform:%s:%02d", dev->platformdev->name, dev->platformdev->id);
(ie. using the id field from struct platform_device)..
Perhaps this is more analogous to using pci bus # / slot / func?
BR, -R
On Tue, Apr 5, 2011 at 1:08 PM, Rob Clark robdclark@gmail.com wrote:
Yup that seems a lot saner and more acceptable.
Dave.
Include the device id in the bus-id to give userspace a way to open the correct "cardN" when there are multiple device instances.
Signed-off-by: Rob Clark rob@ti.com --- drivers/gpu/drm/drm_platform.c | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/drm_platform.c b/drivers/gpu/drm/drm_platform.c index 7223f06..2a8b626 100644 --- a/drivers/gpu/drm/drm_platform.c +++ b/drivers/gpu/drm/drm_platform.c @@ -123,14 +123,15 @@ static int drm_platform_set_busid(struct drm_device *dev, struct drm_master *mas { int len, ret;
- master->unique_len = 10 + strlen(dev->platformdev->name); + master->unique_len = 13 + strlen(dev->platformdev->name); + master->unique_size = master->unique_len; master->unique = kmalloc(master->unique_len + 1, GFP_KERNEL);
if (master->unique == NULL) return -ENOMEM;
len = snprintf(master->unique, master->unique_len, - "platform:%s", dev->platformdev->name); + "platform:%s:%02d", dev->platformdev->name, dev->platformdev->id);
if (len > master->unique_len) { DRM_ERROR("Unique buffer overflowed\n");
dri-devel@lists.freedesktop.org