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