Thread (50 messages) 50 messages, 5 authors, 2011-04-29
STALE5559d

[PATCH v2 02/23] at91: Make Ethernet device common

From: Russell King - ARM Linux <hidden>
Date: 2011-04-28 18:31:32

On Thu, Apr 28, 2011 at 12:57:45PM -0500, H Hartley Sweeten wrote:
On Thursday, April 28, 2011 2:15 AM, Russell King wrote:
quoted
On Thu, Apr 21, 2011 at 06:19:37PM -0500, H Hartley Sweeten wrote:
quoted
+static struct platform_device at91_eth_device = {
+	.name		= "macb",
+	.id		= -1,
+	.dev		= {
+		.dma_mask		= &at91_eth_device.dev.coherent_dma_mask,
+		.coherent_dma_mask	= DMA_BIT_MASK(32),

That will get rid of the static u64 variable used for every dma
capable device.
I've never really liked that, because coherent_dma_mask is never changed,
but the value pointed to be dma_mask can be by drivers.  See dma_set_mask().

So, calling dma_set_mask() on any device which does the above will also
(unexpectedly?) change the coherent mask too.

It's a minor point as we don't have many platform drivers using
dma_set_mask().
So, if I understand this correctly...

1) dev.coherent_dma_mask is a constant that defines the default dma mask of
the device.
dev.coherent_dma_mask is used for dma_alloc_coherent() allocations.
2) dev.dma_mask is a pointer to the dma mask that is being used by the device.
dev.dma_mask is a pointer to the DMA mask being used by the dma_map_* API.
3) The static variable pointed to by dev.dma_mask holds the dma mask being
used by the device.  The value can be modified by the driver.

Why couldn't a new field be added to struct device to replace the static
variable?  The code that sets up the device could do something like:

	dev.used_dma_mask = dev.coherent_dma_mask;
	dev.dma_mask = &dev.used_dma_mask;
There was talk a while ago about getting rid of the pointer-ness of
dma_mask, but I think there's a bit of historic baggage in there to do
with the pre-device model PCI bus support code which gets in the way.
Not too sure about that though.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help