
On 08/18/2014 02:00 AM, Thierry Reding wrote:
From: Thierry Reding treding@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?