On 04/05/2012 10:23 AM, Thierry Reding wrote:
> * Stephen Warren wrote:
>> On 04/05/2012 02:42 AM, Thierry Reding wrote:
>>> Hi,
>>>
>>> I have a device tree where I have a GART device and a DRM device which uses
>>> the GART. The GART is implemented by an IOMMU driver (tegra-gart) and
>>> requires the user device to be a child of the GART device (it explicitly
>>> checks for this when the user device is attached).
>>
>> Isn't this wrong?
>>
>> I would expect the device parent/child relationship to reflect the
>> CPU-initiated register access bus topology.
>>
>> A device's interaction with an IOMMU is an aspect of a device's
>> initiating accesses itself, not CPU-initiated register accesses.
> 
> Actually I have no idea why this was made a requirement. Maybe Hiroshi can
> comment on this. The driver really only needs this to basically obtain a
> pointer to itself. The MSM I/O MMU implementation does something similar,
> though, and goes on to register actual child devices (they are instantiated
> in arch/arm/mach-msm/devices-iommu.c). Each of those devices is then assigned
> a specific memory area it seems.
> 
>>> I've tried two alternatives to achieve this: create the GART device in the
>>> user driver's .probe() function and explicitly set the DRM device's parent
>>> to the resulting platform device like so:
>>>
>>>     gart = platform_device_alloc(...);
>>>     ...
>>>     pdev->dev.parent = &gart->dev;
>>
>> I guess that won't work when there's more than one device affected by
>> the IOMMU?
> 
> I don't think having more than one device using the IOMMU will work properly
> anyway in the context of the Tegra GART driver because there is not means to
> allocate specific regions of the GART aperture to individual devices. So
> really the one and only client actually needs to manage the allocations from
> the GART aperture.
> 
> I'm also not sure if it makes much sense to use the GART from anything other
> than the DRM driver.

I was thinking about this mostly from a Tegra30 perspective, where there
are multiple devices affected by the SMMU, which is more capable that
the Tegra20 GART, and can presumably support these multiple clients
pretty independently. For Tegra20, I wouldn't be surprised if the DRM
driver was the only client.
_______________________________________________
devicetree-discuss mailing list
devicetree-discuss@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/devicetree-discuss

Reply via email to