ppc4xx: Fix POST ethernet test for Haleakala
authorStefan Roese <sr@denx.de>
Thu, 25 Oct 2007 10:24:59 +0000 (12:24 +0200)
committerStefan Roese <sr@denx.de>
Wed, 31 Oct 2007 20:20:51 +0000 (21:20 +0100)
The POST ethernet test needed to be changed to dynamically determine
the count of ethernet devices. This code is cloned from the 4xx
ethernet driver.

Signed-off-by: Stefan Roese <sr@denx.de>
post/cpu/ppc4xx/ether.c

index ab23ca5a3dbc6f420d41ad9204bfce6dd428959c..45f292b92fec17679381a9f3ba900a6b1c1a99b9 100644 (file)
 
 DECLARE_GLOBAL_DATA_PTR;
 
+/*
+ * Get count of EMAC devices (doesn't have to be the max. possible number
+ * supported by the cpu)
+ *
+ * CONFIG_BOARD_EMAC_COUNT added so now a "dynamic" way to configure the
+ * EMAC count is possible. As it is needed for the Kilauea/Haleakala
+ * 405EX/405EXr eval board, using the same binary.
+ */
+#if defined(CONFIG_BOARD_EMAC_COUNT)
+#define LAST_EMAC_NUM  board_emac_count()
+#else /* CONFIG_BOARD_EMAC_COUNT */
+#if defined(CONFIG_HAS_ETH3)
+#define LAST_EMAC_NUM  4
+#elif defined(CONFIG_HAS_ETH2)
+#define LAST_EMAC_NUM  3
+#elif defined(CONFIG_HAS_ETH1)
+#define LAST_EMAC_NUM  2
+#else
+#define LAST_EMAC_NUM  1
+#endif
+#endif /* CONFIG_BOARD_EMAC_COUNT */
+
 #if defined(CONFIG_440SPE) || defined(CONFIG_440EPX) || defined(CONFIG_440GRX)
 #define SDR0_MFR_ETH_CLK_SEL_V(n)      ((0x01<<27) / (n+1))
 #endif
@@ -65,6 +87,8 @@ static volatile mal_desc_t rx __cacheline_aligned;
 static char *tx_buf;
 static char *rx_buf;
 
+int board_emac_count(void);
+
 static void ether_post_init (int devnum, int hw_addr)
 {
        int i;
@@ -372,6 +396,7 @@ Done:
 int ether_post_test (int flags)
 {
        int res = 0;
+       int i;
 
        /* Allocate tx & rx packet buffers */
        tx_buf = malloc (PKTSIZE_ALIGN + CFG_CACHELINE_SIZE);
@@ -383,13 +408,10 @@ int ether_post_test (int flags)
                goto out_free;
        }
 
-       /* EMAC0 */
-       if (test_ctlr (0, 0))
-               res = -1;
-
-       /* EMAC1 */
-       if (test_ctlr (1, 0x100))
-               res = -1;
+       for (i = 0; i < LAST_EMAC_NUM; i++) {
+               if (test_ctlr (i, i*0x100))
+                       res = -1;
+       }
 
 out_free:
        free (tx_buf);