[U-Boot] [PATCH 7/9] net: rtl8169: Properly align buffers

Stephen Warren swarren at wwwdotorg.org
Wed Aug 20 21:29:57 CEST 2014


On 08/18/2014 02:00 AM, Thierry Reding wrote:
> From: Thierry Reding <treding at nvidia.com>
>
> RX and TX descriptor rings should be aligned to 256 byte boundaries. Use
> the DEFINE_ALIGN_BUFFER() macro to define the buffers so that they don't
> have to be manually aligned later on. Also make sure that the buffers do
> align to cache-line boundaries in case the cache-line is higher than the
> 256 byte alignment requirements of the NIC.
>
> Also add a warning if the cache-line size is larger than the descriptor
> size, because the driver may discard changes to descriptors made by the
> hardware when requeuing RX buffers.

> @@ -909,6 +899,18 @@ static int rtl_init(struct eth_device *dev, bd_t *bis)

> +	/*
> +	 * Warn if the cache-line size is larger than the descriptor size. In
> +	 * such cases the driver will likely fail because the CPU needs to
> +	 * flush the cache when requeuing RX buffers, therefore descriptors
> +	 * written by the hardware may be discarded.
> +	 */
> +	if (ARCH_DMA_MINALIGN > sizeof(struct RxDesc))
> +		printf("WARNING: cache-line size is larger than descriptor size\n");

I'd be tempted to make that a compile-time #error (or perhaps just a 
#warning) Perhaps #error would break compilation of existing boards though?


More information about the U-Boot mailing list