diff options
Diffstat (limited to 'arch/arm/mach-omap2/id.c')
| -rw-r--r-- | arch/arm/mach-omap2/id.c | 42 | 
1 files changed, 41 insertions, 1 deletions
diff --git a/arch/arm/mach-omap2/id.c b/arch/arm/mach-omap2/id.c index 37eb95aaf2f..40373db649a 100644 --- a/arch/arm/mach-omap2/id.c +++ b/arch/arm/mach-omap2/id.c @@ -50,6 +50,11 @@ int omap_type(void)  		val = omap_ctrl_readl(OMAP343X_CONTROL_STATUS);  	} else if (cpu_is_omap44xx()) {  		val = omap_ctrl_readl(OMAP4_CTRL_MODULE_CORE_STATUS); +	} else if (soc_is_omap54xx()) { +		val = omap_ctrl_readl(OMAP5XXX_CONTROL_STATUS); +		val &= OMAP5_DEVICETYPE_MASK; +		val >>= 6; +		goto out;  	} else {  		pr_err("Cannot detect omap type!\n");  		goto out; @@ -100,7 +105,7 @@ static u16 tap_prod_id;  void omap_get_die_id(struct omap_die_id *odi)  { -	if (cpu_is_omap44xx()) { +	if (cpu_is_omap44xx() || soc_is_omap54xx()) {  		odi->id_0 = read_tap_reg(OMAP_TAP_DIE_ID_44XX_0);  		odi->id_1 = read_tap_reg(OMAP_TAP_DIE_ID_44XX_1);  		odi->id_2 = read_tap_reg(OMAP_TAP_DIE_ID_44XX_2); @@ -513,6 +518,41 @@ void __init omap4xxx_check_revision(void)  		((omap_rev() >> 12) & 0xf), ((omap_rev() >> 8) & 0xf));  } +void __init omap5xxx_check_revision(void) +{ +	u32 idcode; +	u16 hawkeye; +	u8 rev; + +	idcode = read_tap_reg(OMAP_TAP_IDCODE); +	hawkeye = (idcode >> 12) & 0xffff; +	rev = (idcode >> 28) & 0xff; +	switch (hawkeye) { +	case 0xb942: +		switch (rev) { +		case 0: +		default: +			omap_revision = OMAP5430_REV_ES1_0; +		} +		break; + +	case 0xb998: +		switch (rev) { +		case 0: +		default: +			omap_revision = OMAP5432_REV_ES1_0; +		} +		break; + +	default: +		/* Unknown default to latest silicon rev as default*/ +		omap_revision = OMAP5430_REV_ES1_0; +	} + +	pr_info("OMAP%04x ES%d.0\n", +			omap_rev() >> 16, ((omap_rev() >> 12) & 0xf)); +} +  /*   * Set up things for map_io and processor detection later on. Gets called   * pretty much first thing from board init. For multi-omap, this gets  |