omap4: add OMAP4430 revision check

Signed-off-by: Aneesh V <aneesh@ti.com>
Signed-off-by: Sandeep Paulraj <s-paulraj@ti.com>
This commit is contained in:
Aneesh V
2011-07-21 09:10:04 -04:00
committed by U-Boot
parent 469ec1e353
commit ad577c8a48
4 changed files with 96 additions and 7 deletions

View File

@@ -28,6 +28,7 @@
* MA 02111-1307 USA
*/
#include <common.h>
#include <asm/armv7.h>
#include <asm/arch/cpu.h>
#include <asm/arch/sys_proto.h>
#include <asm/sizes.h>
@@ -35,6 +36,8 @@
DECLARE_GLOBAL_DATA_PTR;
u32 *const omap4_revision = (u32 *)OMAP4_SRAM_SCRATCH_OMAP4_REV;
void do_set_mux(u32 base, struct pad_conf_entry const *array, int size)
{
int i;
@@ -72,6 +75,66 @@ static void set_mux_conf_regs(void)
}
}
static u32 cortex_a9_rev(void)
{
unsigned int rev;
/* Read Main ID Register (MIDR) */
asm ("mrc p15, 0, %0, c0, c0, 0" : "=r" (rev));
return rev;
}
static void init_omap4_revision(void)
{
/*
* For some of the ES2/ES1 boards ID_CODE is not reliable:
* Also, ES1 and ES2 have different ARM revisions
* So use ARM revision for identification
*/
unsigned int arm_rev = cortex_a9_rev();
switch (arm_rev) {
case MIDR_CORTEX_A9_R0P1:
*omap4_revision = OMAP4430_ES1_0;
break;
case MIDR_CORTEX_A9_R1P2:
switch (readl(CONTROL_ID_CODE)) {
case OMAP4_CONTROL_ID_CODE_ES2_0:
*omap4_revision = OMAP4430_ES2_0;
break;
case OMAP4_CONTROL_ID_CODE_ES2_1:
*omap4_revision = OMAP4430_ES2_1;
break;
case OMAP4_CONTROL_ID_CODE_ES2_2:
*omap4_revision = OMAP4430_ES2_2;
break;
default:
*omap4_revision = OMAP4430_ES2_0;
break;
}
break;
case MIDR_CORTEX_A9_R1P3:
*omap4_revision = OMAP4430_ES2_3;
break;
default:
*omap4_revision = OMAP4430_SILICON_ID_INVALID;
break;
}
}
void omap_rev_string(char *omap4_rev_string)
{
u32 omap4_rev = omap_revision();
u32 omap4_variant = (omap4_rev & 0xFFFF0000) >> 16;
u32 major_rev = (omap4_rev & 0x00000F00) >> 8;
u32 minor_rev = (omap4_rev & 0x000000F0) >> 4;
sprintf(omap4_rev_string, "OMAP%x ES%x.%x", omap4_variant, major_rev,
minor_rev);
}
/*
* Routine: s_init
* Description: Does early system init of watchdog, muxing, andclocks
@@ -88,6 +151,7 @@ static void set_mux_conf_regs(void)
*/
void s_init(void)
{
init_omap4_revision();
watchdog_init();
set_mux_conf_regs();
}