ppc4xx: Add initial AMCC Haleakala PPC405EXr eval board support
authorStefan Roese <sr@denx.de>
Tue, 23 Oct 2007 08:10:08 +0000 (10:10 +0200)
committerStefan Roese <sr@denx.de>
Wed, 31 Oct 2007 20:20:51 +0000 (21:20 +0100)
The Haleakala is nearly identical with the Kilauea eval board. The only
difference is that the 405EXr only supports one EMAC and one PCIe
interface. This patch adds support for the Haleakala board by using
the identical image for Kilauea and Haleakala. The distinction is done
by comparing the PVR.

Signed-off-by: Stefan Roese <sr@denx.de>
MAINTAINERS
MAKEALL
Makefile
board/amcc/kilauea/kilauea.c
cpu/ppc4xx/4xx_enet.c
include/configs/kilauea.h

index 5ae588f6644c0f511ca2a9ca83e7fb7a074261e7..bf0ebb175833eeb217dee041868a73b3248ff8fa 100644 (file)
@@ -303,6 +303,7 @@ Stefan Roese <sr@denx.de>
        bamboo                  PPC440EP
        bunbinga                PPC405EP
        ebony                   PPC440GP
+       haleakala               PPC405EXr
        katmai                  PPC440SPe
        kilauea                 PPC405EX
        lwmon5                  PPC440EPx
diff --git a/MAKEALL b/MAKEALL
index 874d3a6710dd4299f1df9e1baf834d469bab09a6..67b39c319b536c7ce7ec2a7cbc311baf3c44273f 100755 (executable)
--- a/MAKEALL
+++ b/MAKEALL
@@ -180,6 +180,7 @@ LIST_4xx="          \
        ERIC            \
        EXBITGEN        \
        G2000           \
+       haleakala       \
        hcu4            \
        hcu5            \
        HH405           \
index 039cec08f762d67a84d292ae6298c294030dc15e..814bba8af72a33a69dc5b6c69d6f9b70b05b67aa 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1168,8 +1168,10 @@ KAREF_config: unconfig
 katmai_config: unconfig
        @$(MKCONFIG) $(@:_config=) ppc ppc4xx katmai amcc
 
-kilauea_config:        unconfig
-       @$(MKCONFIG) $(@:_config=) ppc ppc4xx kilauea amcc
+# Kilauea & Haleakala images are identical (recognized via PVR)
+kilauea_config \
+haleakala_config: unconfig
+       @$(MKCONFIG) -n $@ -a kilauea ppc ppc4xx kilauea amcc
 
 luan_config:   unconfig
        @$(MKCONFIG) $(@:_config=) ppc ppc4xx luan amcc
index b59bd6fc0e237f50d3db20eb373b381043732e2a..77c0eb43641a46641ff388e5e8407134ea54df41 100644 (file)
@@ -26,7 +26,7 @@
 #include <ppc405.h>
 #include <libfdt.h>
 #include <asm/processor.h>
-#include <asm-ppc/io.h>
+#include <asm/io.h>
 
 #if defined(CONFIG_PCI)
 #include <pci.h>
@@ -225,11 +225,41 @@ int misc_init_r(void)
        return 0;
 }
 
+int board_emac_count(void)
+{
+       u32 pvr = get_pvr();
+
+       /*
+        * 405EXr only has one EMAC interface, 405EX has two
+        */
+       if ((pvr == PVR_405EXR1_RA) || (pvr == PVR_405EXR2_RA))
+               return 1;
+       else
+               return 2;
+}
+
+static int board_pcie_count(void)
+{
+       u32 pvr = get_pvr();
+
+       /*
+        * 405EXr only has one EMAC interface, 405EX has two
+        */
+       if ((pvr == PVR_405EXR1_RA) || (pvr == PVR_405EXR2_RA))
+               return 1;
+       else
+               return 2;
+}
+
 int checkboard (void)
 {
        char *s = getenv("serial#");
+       u32 pvr = get_pvr();
 
-       printf("Board: Kilauea - AMCC PPC405EX Evaluation Board");
+       if ((pvr == PVR_405EXR1_RA) || (pvr == PVR_405EXR2_RA))
+               printf("Board: Haleakala - AMCC PPC405EXr Evaluation Board");
+       else
+               printf("Board: Kilauea - AMCC PPC405EX Evaluation Board");
 
        if (s != NULL) {
                puts(", serial# ");
@@ -310,7 +340,7 @@ void pcie_setup_hoses(int busno)
        char *env;
        unsigned int delay;
 
-       for (i = 0; i < 2; i++) {
+       for (i = 0; i < board_pcie_count(); i++) {
 
                if (is_end_point(i)) {
                        printf("PCIE%d: will be configured as endpoint\n", i);
index 6b4834481e352eb71cfe9297135c0e2992577920..67b3a24d2ff0b82b5f10fb9e732c5edf4332ab03 100644 (file)
@@ -158,7 +158,14 @@ struct eth_device *emac0_dev = NULL;
 /*
  * 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)
@@ -168,6 +175,7 @@ struct eth_device *emac0_dev = NULL;
 #else
 #define LAST_EMAC_NUM  1
 #endif
+#endif /* CONFIG_BOARD_EMAC_COUNT */
 
 /* normal boards start with EMAC0 */
 #if !defined(CONFIG_EMAC_NR_START)
@@ -197,6 +205,8 @@ extern int emac4xx_miiphy_read (char *devname, unsigned char addr,
 extern int emac4xx_miiphy_write (char *devname, unsigned char addr,
                unsigned char reg, unsigned short value);
 
+int board_emac_count(void);
+
 /*-----------------------------------------------------------------------------+
 | ppc_4xx_eth_halt
 | Disable MAL channel, and EMACn
index 90bdd6959b7820d72aa326e282d756036ce2c36f..9a9f7ba1bc2147121a9e7b30f54fad52a222d095 100644 (file)
@@ -38,6 +38,7 @@
 
 #define CONFIG_BOARD_EARLY_INIT_F 1            /* Call board_early_init_f */
 #define CONFIG_MISC_INIT_R     1               /* Call misc_init_r     */
+#define CONFIG_BOARD_EMAC_COUNT
 
 /*-----------------------------------------------------------------------
  * Base addresses -- Note these are effective addresses where the