diff options
| -rw-r--r-- | 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 352b877e3..8f4b78d40 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;  } |