mx27 fec ethernet: remove memcpy
Instead of copying the received packet in memory, pass a pointer to the packet to U-Boot Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
parent
e25cc045ac
commit
7b8baf6399
|
@ -195,7 +195,7 @@ static int fec_rbd_init(fec_priv *fec, int count, int size)
|
||||||
*
|
*
|
||||||
* Transmit buffers are created externally. We only have to init the BDs here.\n
|
* Transmit buffers are created externally. We only have to init the BDs here.\n
|
||||||
* Note: There is a race condition in the hardware. When only one BD is in
|
* Note: There is a race condition in the hardware. When only one BD is in
|
||||||
* use it must be marked with the WRAP bit to use it for every transmitt.
|
* use it must be marked with the WRAP bit to use it for every transmit.
|
||||||
* This bit in combination with the READY bit results into double transmit
|
* This bit in combination with the READY bit results into double transmit
|
||||||
* of each data buffer. It seems the state machine checks READY earlier then
|
* of each data buffer. It seems the state machine checks READY earlier then
|
||||||
* resetting it after the first transfer.
|
* resetting it after the first transfer.
|
||||||
|
@ -446,8 +446,9 @@ static int fec_send(struct eth_device *dev, void *eth_data, int data_length)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((uint32_t)eth_data & (DB_DATA_ALIGNMENT-1))
|
if ((uint32_t)eth_data & (DB_DATA_ALIGNMENT-1)) {
|
||||||
printf("%s: Warning: Transmitt data not aligned!\n", __FUNCTION__);
|
printf("%s: Warning: Transmit data not aligned: %p!\n", __FUNCTION__, eth_data);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Setup the transmitt buffer
|
* Setup the transmitt buffer
|
||||||
|
@ -501,7 +502,6 @@ static int fec_recv(struct eth_device *dev)
|
||||||
int frame_length, len = 0;
|
int frame_length, len = 0;
|
||||||
NBUF *frame;
|
NBUF *frame;
|
||||||
uint16_t bd_status;
|
uint16_t bd_status;
|
||||||
uchar buff[FEC_MAX_PKT_SIZE];
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check if any critical events have happened
|
* Check if any critical events have happened
|
||||||
|
@ -542,11 +542,8 @@ static int fec_recv(struct eth_device *dev)
|
||||||
*/
|
*/
|
||||||
frame = (NBUF *)readl(&rbd->data_pointer);
|
frame = (NBUF *)readl(&rbd->data_pointer);
|
||||||
frame_length = readw(&rbd->data_length) - 4;
|
frame_length = readw(&rbd->data_length) - 4;
|
||||||
/*
|
|
||||||
* Fill the buffer and pass it to upper layers
|
NetReceive(frame->data, frame_length);
|
||||||
*/
|
|
||||||
memcpy(buff, frame->data, frame_length);
|
|
||||||
NetReceive(buff, frame_length);
|
|
||||||
len = frame_length;
|
len = frame_length;
|
||||||
} else {
|
} else {
|
||||||
if (bd_status & FEC_RBD_ERR) {
|
if (bd_status & FEC_RBD_ERR) {
|
||||||
|
|
Loading…
Reference in New Issue