[U-Boot] [PATCH 6/6] 4xx: Add support for DP405 hardware variants

matthias.fuchs at esd.eu matthias.fuchs at esd.eu
Wed Apr 29 09:51:01 CEST 2009


From: Matthias Fuchs <matthias.fuchs at esd-electronics.com>

Signed-off-by: Matthias Fuchs <matthias.fuchs at esd.eu>
---
 board/esd/dp405/dp405.c |   32 ++++++++++++++++++++++++++------
 1 files changed, 26 insertions(+), 6 deletions(-)

diff --git a/board/esd/dp405/dp405.c b/board/esd/dp405/dp405.c
index 352b877..8f4b78d 100644
--- a/board/esd/dp405/dp405.c
+++ b/board/esd/dp405/dp405.c
@@ -89,20 +89,40 @@ int checkboard (void)
 	int i = getenv_r ("serial#", str, sizeof(str));
 	unsigned char trans[16] = {0x0,0x8,0x4,0xc,0x2,0xa,0x6,0xe,
 				   0x1,0x9,0x5,0xd,0x3,0xb,0x7,0xf};
-	unsigned char id1, id2;
+	unsigned char id1, id2, rev;
 
 	puts ("Board: ");
 
-	if (i == -1) {
+	if (i == -1)
 		puts ("### No HW ID - assuming DP405");
-	} else {
+	else
 		puts(str);
-	}
 
 	id1 = trans[(~(in_be32((void *)GPIO0_IR) >> 5)) & 0x0000000f];
 	id2 = trans[(~(in_be32((void *)GPIO0_IR) >> 9)) & 0x0000000f];
-	printf(" (ID=0x%1X%1X, PLD=0x%02X)\n",
-	       id2, id1, in_8((void *)0xf0001000));
+
+        rev = in_8((void *)0xf0001000);
+        if (rev & 0x10) /* old DP405 compatibility */
+                rev = in_8((void *)0xf0000800);
+
+        switch (rev & 0xc0) {
+        case 0x00:
+                puts(" (HW=DP405");
+                break;
+        case 0x80:
+                puts(" (HW=DP405/CO");
+                break;
+        case 0xc0:
+                puts(" (HW=DN405");
+                break;
+        }
+        printf(", ID=0x%1X%1X, PLD=0x%02X", id2, id1, rev & 0x0f);
+
+        if ((rev & 0xc0) == 0xc0) {
+                printf(", C5V=%s",
+                       in_be32((void *)GPIO0_IR) & 0x40000000 ? "off" : "on");
+        }
+        puts(")\n");
 
 	return 0;
 }
-- 
1.5.3



More information about the U-Boot mailing list