Subject: Re: Using DMA

From: Timur Tabi <[email-masked]>
Date: Tue, 11 Nov 2008 08:51:07 -0600

[email-masked] wrote:
> linuxppc-embedded-bounces+brucle=[email-masked] wrote on 11/09/2008 
> 04:09:51 PM:
> 
>>> The Elo device driver is an async DMA back-end driver.  That is, you
>>> don't communicate with that driver directly, you communicate with the
>>> async library (which is new - so you won't find it in LDD3).
>>>
>> Okay, has anyone actually _used_ the Elo driver?  I can't get the probe 
>> function to run.  I get into of_fsl_dma_init(), but of_fsl_dma_probe() 
>> never executes.  I have CONFIG_DMADEVICES and CONFIG_FSL_DMA set in my 
> 
> It would help if I was sure _when_the probe function was supposed to be 
> called. 

Normally, your driver's OF probe function will be called when the driver calls
of_register_platform_driver().

> I traced of_fsl_dma_init() all the way down into 
> bus_for_each_dev(), but the call to the passed in function 
> (__driver_attach() in this case) never gets called. 

I believe this because the kernel never scanned the DMA entries in the device
tree.  This is why I said you need of_platform_bus_probe() with the compatible
field of the parent of the DMA controller node.  Send me your device tree.

> Also, my NAND driver init function is 
> wrapped in module_init() whereas the Elo driver init function is wrapped 
> in subsys_initcall(). 

When compiled as a module, subsys_initcall() becomes module_init().  When
compiled in-kernel, subsys_initcall() guarantees the DMA driver is initialized
before other (normal) drivers are.

-- 
Timur Tabi
Linux kernel developer at Freescale