Subject: Re: Using DMA

From: Timur Tabi <[email-masked]>
Date: Tue, 11 Nov 2008 15:54:49 -0600

[email-masked] wrote:

> Yea, that works!  I hit the probe function.  Thanks very much Timur.  I 
> would never have found that.

I'm glad to help.

> Experimentally, I've found that I don't need the "simple-bus" 
> compatibility in the of_device_id array in the Elo DMA driver.  Any idea 
> why?

Not off-hand.

> Thanks again for all the help.  If you've got some time, could you explain 
> why adding the "simple-bus" compatibility to the SOC node of the device 
> tree was needed.  I _still_ (after fighting with them for over a year) 
> don't get device trees.

The 'compatible' field is usually the field used to find a node.  Also, I
believe the OF code only probes nodes one level deep from a node it already
knows about.  So if you don't have a compatible=simple-bus where it belongs,
then the kernel won't automatically probe all nodes under it.

However, certain standard nodes, like I2C and serial ports, are probed
independently of where they are located.  This happens in fsl_soc.c.  I could
have updated fsl_soc.c to automatically probe the DMA nodes as well, but
fsl_soc.c is reserved for devices that have architecture-independent drivers, so
something needs to extract the data from the device tree and put it into
arch-independent platform data structures for the drivers.  Since the DMA driver
is powerpc-only, it doesn't qualify for this service.  The driver has to extract
all the information it needs directly from the device tree.

-- 
Timur Tabi
Linux kernel developer at Freescale