|
@@ -35,6 +35,12 @@ extern omap3_sysinfo sysinfo;
|
|
|
static gpmc_csx_t *gpmc_cs_base = (gpmc_csx_t *)GPMC_CONFIG_CS0_BASE;
|
|
|
static sdrc_t *sdrc_base = (sdrc_t *)OMAP34XX_SDRC_BASE;
|
|
|
static ctrl_t *ctrl_base = (ctrl_t *)OMAP34XX_CTRL_BASE;
|
|
|
+static char *rev_s[CPU_3XX_MAX_REV] = {
|
|
|
+ "1.0",
|
|
|
+ "2.0",
|
|
|
+ "2.1",
|
|
|
+ "3.0",
|
|
|
+ "3.1"};
|
|
|
|
|
|
/*****************************************************************
|
|
|
* dieid_num_r(void) - read and set die ID
|
|
@@ -76,18 +82,27 @@ u32 get_cpu_type(void)
|
|
|
u32 get_cpu_rev(void)
|
|
|
{
|
|
|
u32 cpuid = 0;
|
|
|
+ ctrl_id_t *id_base;
|
|
|
|
|
|
/*
|
|
|
* On ES1.0 the IDCODE register is not exposed on L4
|
|
|
- * so using CPU ID to differentiate
|
|
|
- * between ES2.0 and ES1.0.
|
|
|
+ * so using CPU ID to differentiate between ES1.0 and > ES1.0.
|
|
|
*/
|
|
|
__asm__ __volatile__("mrc p15, 0, %0, c0, c0, 0":"=r"(cpuid));
|
|
|
if ((cpuid & 0xf) == 0x0)
|
|
|
- return CPU_3430_ES1;
|
|
|
- else
|
|
|
- return CPU_3430_ES2;
|
|
|
+ return CPU_3XX_ES10;
|
|
|
+ else {
|
|
|
+ /* Decode the IDs on > ES1.0 */
|
|
|
+ id_base = (ctrl_id_t *) OMAP34XX_ID_L4_IO_BASE;
|
|
|
|
|
|
+ cpuid = (readl(&id_base->idcode) >> CPU_3XX_ID_SHIFT) & 0xf;
|
|
|
+
|
|
|
+ /* Some early ES2.0 seem to report ID 0, fix this */
|
|
|
+ if(cpuid == 0)
|
|
|
+ cpuid = CPU_3XX_ES20;
|
|
|
+
|
|
|
+ return cpuid;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/****************************************************
|
|
@@ -277,8 +292,8 @@ int print_cpuinfo (void)
|
|
|
sec_s = "?";
|
|
|
}
|
|
|
|
|
|
- printf("OMAP%s-%s rev %d, CPU-OPP2 L3-165MHz\n", cpu_s,
|
|
|
- sec_s, get_cpu_rev());
|
|
|
+ printf("OMAP%s-%s ES%s, CPU-OPP2 L3-165MHz\n",
|
|
|
+ cpu_s, sec_s, rev_s[get_cpu_rev()]);
|
|
|
|
|
|
return 0;
|
|
|
}
|