ppc4xx: Add 405EX(r) revision C PVR definitions and detection code
Signed-off-by: Stefan Roese <sr@denx.de>
diff --git a/board/amcc/kilauea/kilauea.c b/board/amcc/kilauea/kilauea.c
index 37ef06e..d806a41 100644
--- a/board/amcc/kilauea/kilauea.c
+++ b/board/amcc/kilauea/kilauea.c
@@ -230,14 +230,22 @@
return 0;
}
-int board_emac_count(void)
+static int is_405exr(void)
{
u32 pvr = get_pvr();
+ if (pvr & 0x00000004)
+ return 0; /* bit 2 set -> 405EX */
+
+ return 1; /* bit 2 cleared -> 405EXr */
+}
+
+int board_emac_count(void)
+{
/*
* 405EXr only has one EMAC interface, 405EX has two
*/
- if ((pvr == PVR_405EXR1_RA) || (pvr == PVR_405EXR2_RA))
+ if (is_405exr())
return 1;
else
return 2;
@@ -245,12 +253,10 @@
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))
+ if (is_405exr())
return 1;
else
return 2;
@@ -259,9 +265,8 @@
int checkboard (void)
{
char *s = getenv("serial#");
- u32 pvr = get_pvr();
- if ((pvr == PVR_405EXR1_RA) || (pvr == PVR_405EXR2_RA))
+ if (is_405exr())
printf("Board: Haleakala - AMCC PPC405EXr Evaluation Board");
else
printf("Board: Kilauea - AMCC PPC405EX Evaluation Board");
diff --git a/cpu/ppc4xx/cpu.c b/cpu/ppc4xx/cpu.c
index 54cc256..39f439d 100644
--- a/cpu/ppc4xx/cpu.c
+++ b/cpu/ppc4xx/cpu.c
@@ -346,6 +346,26 @@
strcpy(addstr, "No Security support");
break;
+ case PVR_405EX1_RC:
+ puts("EX Rev. C");
+ strcpy(addstr, "Security support");
+ break;
+
+ case PVR_405EX2_RC:
+ puts("EX Rev. C");
+ strcpy(addstr, "No Security support");
+ break;
+
+ case PVR_405EXR1_RC:
+ puts("EXr Rev. C");
+ strcpy(addstr, "Security support");
+ break;
+
+ case PVR_405EXR2_RC:
+ puts("EXr Rev. C");
+ strcpy(addstr, "No Security support");
+ break;
+
#if defined(CONFIG_440)
case PVR_440GP_RB:
puts("GP Rev. B");
diff --git a/include/asm-ppc/processor.h b/include/asm-ppc/processor.h
index 4c049a5..8bdfb9d 100644
--- a/include/asm-ppc/processor.h
+++ b/include/asm-ppc/processor.h
@@ -772,10 +772,14 @@
#define PVR_405EP_RA 0x51210950
#define PVR_405GPR_RB 0x50910951
#define PVR_405EZ_RA 0x41511460
-#define PVR_405EXR1_RA 0x12911473 /* 405EXr rev A with Security */
-#define PVR_405EXR2_RA 0x12911471 /* 405EXr rev A without Security */
-#define PVR_405EX1_RA 0x12911477 /* 405EX rev A with Security */
-#define PVR_405EX2_RA 0x12911475 /* 405EX rev A without Security */
+#define PVR_405EXR1_RA 0x12911473 /* 405EXr rev A/B with Security */
+#define PVR_405EXR2_RA 0x12911471 /* 405EXr rev A/B without Security */
+#define PVR_405EX1_RA 0x12911477 /* 405EX rev A/B with Security */
+#define PVR_405EX2_RA 0x12911475 /* 405EX rev A/B without Security */
+#define PVR_405EXR1_RC 0x1291147B /* 405EXr rev C with Security */
+#define PVR_405EXR2_RC 0x12911479 /* 405EXr rev C without Security */
+#define PVR_405EX1_RC 0x1291147F /* 405EX rev C with Security */
+#define PVR_405EX2_RC 0x1291147D /* 405EX rev C without Security */
#define PVR_440GP_RB 0x40120440
#define PVR_440GP_RC 0x40120481
#define PVR_440EP_RA 0x42221850