mirror of
https://github.com/Stichting-MINIX-Research-Foundation/u-boot.git
synced 2025-09-10 12:39:22 -04:00
FEC: Properly align address over the buffers for cache ops
Align the address that's to be invalidated/flushed properly. Signed-off-by: Marek Vasut <marex@denx.de> Cc: Benoit Thebaudeau <benoit.thebaudeau@advans> Cc: Eric Nelson <eric.nelson@boundarydevices.com> Cc: Fabio Estevam <festevam@gmail.com> Cc: Joe Hershberger <joe.hershberger@ni.com>
This commit is contained in:
parent
e2a66e6097
commit
efe24d2e17
@ -695,7 +695,7 @@ static void fec_halt(struct eth_device *dev)
|
|||||||
static int fec_send(struct eth_device *dev, void *packet, int length)
|
static int fec_send(struct eth_device *dev, void *packet, int length)
|
||||||
{
|
{
|
||||||
unsigned int status;
|
unsigned int status;
|
||||||
uint32_t size;
|
uint32_t size, end;
|
||||||
uint32_t addr;
|
uint32_t addr;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -722,8 +722,9 @@ static int fec_send(struct eth_device *dev, void *packet, int length)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
addr = (uint32_t)packet;
|
addr = (uint32_t)packet;
|
||||||
size = roundup(length, ARCH_DMA_MINALIGN);
|
end = roundup(addr + length, ARCH_DMA_MINALIGN);
|
||||||
flush_dcache_range(addr, addr + size);
|
addr &= ~(ARCH_DMA_MINALIGN - 1);
|
||||||
|
flush_dcache_range(addr, end);
|
||||||
|
|
||||||
writew(length, &fec->tbd_base[fec->tbd_index].data_length);
|
writew(length, &fec->tbd_base[fec->tbd_index].data_length);
|
||||||
writel(addr, &fec->tbd_base[fec->tbd_index].data_pointer);
|
writel(addr, &fec->tbd_base[fec->tbd_index].data_pointer);
|
||||||
@ -790,7 +791,7 @@ static int fec_recv(struct eth_device *dev)
|
|||||||
int frame_length, len = 0;
|
int frame_length, len = 0;
|
||||||
struct nbuf *frame;
|
struct nbuf *frame;
|
||||||
uint16_t bd_status;
|
uint16_t bd_status;
|
||||||
uint32_t addr, size;
|
uint32_t addr, size, end;
|
||||||
int i;
|
int i;
|
||||||
uchar buff[FEC_MAX_PKT_SIZE] __aligned(ARCH_DMA_MINALIGN);
|
uchar buff[FEC_MAX_PKT_SIZE] __aligned(ARCH_DMA_MINALIGN);
|
||||||
|
|
||||||
@ -854,8 +855,9 @@ static int fec_recv(struct eth_device *dev)
|
|||||||
* Invalidate data cache over the buffer
|
* Invalidate data cache over the buffer
|
||||||
*/
|
*/
|
||||||
addr = (uint32_t)frame;
|
addr = (uint32_t)frame;
|
||||||
size = roundup(frame_length, ARCH_DMA_MINALIGN);
|
end = roundup(addr + frame_length, ARCH_DMA_MINALIGN);
|
||||||
invalidate_dcache_range(addr, addr + size);
|
addr &= ~(ARCH_DMA_MINALIGN - 1);
|
||||||
|
invalidate_dcache_range(addr, end);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Fill the buffer and pass it to upper layers
|
* Fill the buffer and pass it to upper layers
|
||||||
|
Loading…
x
Reference in New Issue
Block a user