summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Roese <sr@denx.de>2007-10-23 10:10:08 +0200
committerStefan Roese <sr@denx.de>2007-10-31 21:20:51 +0100
commit353f2688b4e0fc7b969bc70a02be4b40bf0dd124 (patch)
tree152a5f26e53692d18110bd6b50b1745150d04ea6
parent9f798766aa85e62eb8fa8c721e148df609b78137 (diff)
downloadu-boot-353f2688b4e0fc7b969bc70a02be4b40bf0dd124.tar.gz
u-boot-353f2688b4e0fc7b969bc70a02be4b40bf0dd124.tar.xz
u-boot-353f2688b4e0fc7b969bc70a02be4b40bf0dd124.zip
ppc4xx: Add initial AMCC Haleakala PPC405EXr eval board support
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>
-rw-r--r--MAINTAINERS1
-rwxr-xr-xMAKEALL1
-rw-r--r--Makefile6
-rw-r--r--board/amcc/kilauea/kilauea.c36
-rw-r--r--cpu/ppc4xx/4xx_enet.c10
-rw-r--r--include/configs/kilauea.h1
6 files changed, 50 insertions, 5 deletions
diff --git a/MAINTAINERS b/MAINTAINERS
index 5ae588f664..bf0ebb1758 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -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 874d3a6710..67b39c319b 100755
--- a/MAKEALL
+++ b/MAKEALL
@@ -180,6 +180,7 @@ LIST_4xx=" \
ERIC \
EXBITGEN \
G2000 \
+ haleakala \
hcu4 \
hcu5 \
HH405 \
diff --git a/Makefile b/Makefile
index 039cec08f7..814bba8af7 100644
--- 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
diff --git a/board/amcc/kilauea/kilauea.c b/board/amcc/kilauea/kilauea.c
index b59bd6fc0e..77c0eb4364 100644
--- a/board/amcc/kilauea/kilauea.c
+++ b/board/amcc/kilauea/kilauea.c
@@ -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);
diff --git a/cpu/ppc4xx/4xx_enet.c b/cpu/ppc4xx/4xx_enet.c
index 6b4834481e..67b3a24d2f 100644
--- a/cpu/ppc4xx/4xx_enet.c
+++ b/cpu/ppc4xx/4xx_enet.c
@@ -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
diff --git a/include/configs/kilauea.h b/include/configs/kilauea.h
index 90bdd6959b..9a9f7ba1bc 100644
--- a/include/configs/kilauea.h
+++ b/include/configs/kilauea.h
@@ -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