ppc4xx/POST: Change ethernet test loop count to a default of 10
[oweals/u-boot.git] / post / cpu / ppc4xx / ether.c
index 7f44f38dab9ace124dbb17c535e542cf16b47f4e..c508670a7c2b241b031330049d6557bb8146bc57 100644 (file)
  * 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;
                }
        }