[U-Boot] [PATCH v4 1/3] net: designware: fix descriptor layout and warnings on 64-bit archs

Beniamino Galvani b.galvani at gmail.com
Sun Apr 17 13:14:22 CEST 2016


On Sun, Apr 17, 2016 at 11:56:58AM +0200, Marek Vasut wrote:
> > -		desc_p->dmamac_addr = &txbuffs[idx * CONFIG_ETH_BUFSIZE];
> > -		desc_p->dmamac_next = &desc_table_p[idx + 1];
> > +		desc_p->dmamac_addr = (ulong)&txbuffs[idx * CONFIG_ETH_BUFSIZE];
> > +		desc_p->dmamac_next = (ulong)&desc_table_p[idx + 1];
> 
> Why don't you use u32 instead of ulong ? The u32 is well defined.
> DTTO all over the place.

&txbuffs[idx * CONFIG_ETH_BUFSIZE] is a pointer (and hence has the
size of a ulong) and casting it to u32 would give a warning on 64 bit
archs ("cast from pointer to integer of different size").

> btw just curious, but what will happen if the descriptors get allocated
> in area above 4GiB ? Will the code silently corrupt memory by discarding
> the top bits in the descriptor pointer?

No, if the driver private structure (which contains buffers and
descriptors) is above 4GiB, designware_initialize() will complain and
return an error.

Beniamino


More information about the U-Boot mailing list