diff options
Diffstat (limited to 'post')
| -rw-r--r-- | post/cpu/ppc4xx/ether.c | 35 | 
1 files changed, 20 insertions, 15 deletions
| diff --git a/post/cpu/ppc4xx/ether.c b/post/cpu/ppc4xx/ether.c index 7f44f38da..c508670a7 100644 --- a/post/cpu/ppc4xx/ether.c +++ b/post/cpu/ppc4xx/ether.c @@ -34,7 +34,10 @@   * are transmitted. The configurable test parameters are:   *   MIN_PACKET_LENGTH - minimum size of packet to transmit   *   MAX_PACKET_LENGTH - maximum size of packet to transmit - *   TEST_NUM - number of tests + *   CONFIG_SYS_POST_ETH_LOOPS - Number of test loops. Each loop + *     is tested with a different frame length. Starting with + *     MAX_PACKET_LENGTH and going down to MIN_PACKET_LENGTH. + *     Defaults to 10 and can be overriden in the board config header.   */  #include <post.h> @@ -77,8 +80,12 @@ DECLARE_GLOBAL_DATA_PTR;  #endif  #define MIN_PACKET_LENGTH	64 -#define MAX_PACKET_LENGTH	256 -#define TEST_NUM		1 +#define MAX_PACKET_LENGTH	1514 +#ifndef CONFIG_SYS_POST_ETH_LOOPS +#define CONFIG_SYS_POST_ETH_LOOPS	10 +#endif +#define PACKET_INCR	((MAX_PACKET_LENGTH - MIN_PACKET_LENGTH) / \ +			 CONFIG_SYS_POST_ETH_LOOPS)  static volatile mal_desc_t tx __cacheline_aligned;  static volatile mal_desc_t rx __cacheline_aligned; @@ -361,29 +368,27 @@ static int packet_check (char *packet, int length)  	return 0;  } +	char packet_send[MAX_PACKET_LENGTH]; +	char packet_recv[MAX_PACKET_LENGTH];  static int test_ctlr (int devnum, int hw_addr)  {  	int res = -1; -	char packet_send[MAX_PACKET_LENGTH]; -	char packet_recv[MAX_PACKET_LENGTH];  	int length; -	int i;  	int l;  	ether_post_init (devnum, hw_addr); -	for (i = 0; i < TEST_NUM; i++) { -		for (l = MIN_PACKET_LENGTH; l <= MAX_PACKET_LENGTH; l++) { -			packet_fill (packet_send, l); +	for (l = MAX_PACKET_LENGTH; l >= MIN_PACKET_LENGTH; +	     l -= PACKET_INCR) { +		packet_fill (packet_send, l); -			ether_post_send (devnum, hw_addr, packet_send, l); +		ether_post_send (devnum, hw_addr, packet_send, l); -			length = ether_post_recv (devnum, hw_addr, packet_recv, -						  sizeof (packet_recv)); +		length = ether_post_recv (devnum, hw_addr, packet_recv, +					  sizeof (packet_recv)); -			if (length != l || packet_check (packet_recv, length) < 0) { -				goto Done; -			} +		if (length != l || packet_check (packet_recv, length) < 0) { +			goto Done;  		}  	} |