id.c revision 44169075e6eaa87bab6a296209d8d0610879b394
11dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren/* 21dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren * linux/arch/arm/mach-omap2/id.c 31dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren * 41dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren * OMAP2 CPU identification code 51dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren * 61dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren * Copyright (C) 2005 Nokia Corporation 71dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren * Written by Tony Lindgren <tony@atomide.com> 81dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren * 944169075e6eaa87bab6a296209d8d0610879b394Santosh Shilimkar * Copyright (C) 2009 Texas Instruments 1044169075e6eaa87bab6a296209d8d0610879b394Santosh Shilimkar * Added OMAP4 support - Santosh Shilimkar <santosh.shilimkar@ti.com> 1144169075e6eaa87bab6a296209d8d0610879b394Santosh Shilimkar * 121dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren * This program is free software; you can redistribute it and/or modify 131dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren * it under the terms of the GNU General Public License version 2 as 141dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren * published by the Free Software Foundation. 151dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren */ 161dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren 171dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren#include <linux/module.h> 181dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren#include <linux/kernel.h> 191dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren#include <linux/init.h> 20fced80c735941fa518ac67c0b61bbe153fb8c050Russell King#include <linux/io.h> 211dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren 220ba8b9b273c45dd23f60ff700e265a0069b33758Russell King#include <asm/cputype.h> 231dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren 240e564848693b06b037ec05e68c9e4b266250789eTony Lindgren#include <mach/common.h> 25a09e64fbc0094e3073dbb09c3b4bfe4ab669244bRussell King#include <mach/control.h> 26a09e64fbc0094e3073dbb09c3b4bfe4ab669244bRussell King#include <mach/cpu.h> 2772d0f1c3cdc7c456e1e357359ec6f566d0a5f264Syed Mohammed Khasim 28097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsleystatic struct omap_chip_id omap_chip; 2984a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunenstatic unsigned int omap_revision; 3084a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunen 3184a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunen 3284a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunenunsigned int omap_rev(void) 3384a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunen{ 3484a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunen return omap_revision; 3584a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunen} 3684a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri LeukkunenEXPORT_SYMBOL(omap_rev); 37097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley 38097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley/** 39097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley * omap_chip_is - test whether currently running OMAP matches a chip type 40097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley * @oc: omap_chip_t to test against 41097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley * 42097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley * Test whether the currently-running OMAP chip matches the supplied 43097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley * chip type 'oc'. Returns 1 upon a match; 0 upon failure. 44097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley */ 45097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsleyint omap_chip_is(struct omap_chip_id oci) 46097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley{ 47097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley return (oci.oc & omap_chip.oc) ? 1 : 0; 48097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley} 49097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul WalmsleyEXPORT_SYMBOL(omap_chip_is); 50097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley 51a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren/*----------------------------------------------------------------------------*/ 52097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley 53a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren#define OMAP_TAP_IDCODE 0x0204 54a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren#define OMAP_TAP_DIE_ID_0 0x0218 55a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren#define OMAP_TAP_DIE_ID_1 0x021C 56a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren#define OMAP_TAP_DIE_ID_2 0x0220 57a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren#define OMAP_TAP_DIE_ID_3 0x0224 58097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley 59a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren#define read_tap_reg(reg) __raw_readl(tap_base + (reg)) 60097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley 61a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgrenstruct omap_id { 62a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren u16 hawkeye; /* Silicon type (Hawkeye id) */ 63a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren u8 dev; /* Device type from production_id reg */ 6484a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunen u32 type; /* Combined type id copied to omap_revision */ 65a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren}; 66097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley 67a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren/* Register values to detect the OMAP version */ 68a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgrenstatic struct omap_id omap_ids[] __initdata = { 69a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren { .hawkeye = 0xb5d9, .dev = 0x0, .type = 0x24200024 }, 70a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren { .hawkeye = 0xb5d9, .dev = 0x1, .type = 0x24201024 }, 71a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren { .hawkeye = 0xb5d9, .dev = 0x2, .type = 0x24202024 }, 72a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren { .hawkeye = 0xb5d9, .dev = 0x4, .type = 0x24220024 }, 73a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren { .hawkeye = 0xb5d9, .dev = 0x8, .type = 0x24230024 }, 74a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren { .hawkeye = 0xb68a, .dev = 0x0, .type = 0x24300024 }, 75a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren}; 76097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley 77a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgrenstatic void __iomem *tap_base; 78a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgrenstatic u16 tap_prod_id; 791dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren 805ba02dcab945dc0bcde7df0c5958329f34bd04aeTony Lindgrenvoid __init omap24xx_check_revision(void) 811dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren{ 821dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren int i, j; 83a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren u32 idcode, prod_id; 841dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren u16 hawkeye; 85a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren u8 dev_type, rev; 861dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren 871dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren idcode = read_tap_reg(OMAP_TAP_IDCODE); 880e564848693b06b037ec05e68c9e4b266250789eTony Lindgren prod_id = read_tap_reg(tap_prod_id); 891dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren hawkeye = (idcode >> 12) & 0xffff; 901dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren rev = (idcode >> 28) & 0x0f; 911dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren dev_type = (prod_id >> 16) & 0x0f; 921dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren 93097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley pr_debug("OMAP_TAP_IDCODE 0x%08x REV %i HAWKEYE 0x%04x MANF %03x\n", 94097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley idcode, rev, hawkeye, (idcode >> 1) & 0x7ff); 95097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley pr_debug("OMAP_TAP_DIE_ID_0: 0x%08x\n", 96097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley read_tap_reg(OMAP_TAP_DIE_ID_0)); 97097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley pr_debug("OMAP_TAP_DIE_ID_1: 0x%08x DEV_REV: %i\n", 98097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley read_tap_reg(OMAP_TAP_DIE_ID_1), 99097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley (read_tap_reg(OMAP_TAP_DIE_ID_1) >> 28) & 0xf); 100097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley pr_debug("OMAP_TAP_DIE_ID_2: 0x%08x\n", 101097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley read_tap_reg(OMAP_TAP_DIE_ID_2)); 102097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley pr_debug("OMAP_TAP_DIE_ID_3: 0x%08x\n", 103097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley read_tap_reg(OMAP_TAP_DIE_ID_3)); 104097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley pr_debug("OMAP_TAP_PROD_ID_0: 0x%08x DEV_TYPE: %i\n", 105097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley prod_id, dev_type); 106097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley 1071dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren /* Check hawkeye ids */ 1081dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren for (i = 0; i < ARRAY_SIZE(omap_ids); i++) { 1091dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren if (hawkeye == omap_ids[i].hawkeye) 1101dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren break; 1111dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren } 1121dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren 1131dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren if (i == ARRAY_SIZE(omap_ids)) { 1141dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren printk(KERN_ERR "Unknown OMAP CPU id\n"); 1151dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren return; 1161dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren } 1171dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren 1181dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren for (j = i; j < ARRAY_SIZE(omap_ids); j++) { 1191dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren if (dev_type == omap_ids[j].dev) 1201dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren break; 1211dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren } 1221dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren 1231dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren if (j == ARRAY_SIZE(omap_ids)) { 1241dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren printk(KERN_ERR "Unknown OMAP device type. " 1251dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren "Handling it as OMAP%04x\n", 1261dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren omap_ids[i].type >> 16); 1271dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren j = i; 1281dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren } 1291dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren 13084a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunen pr_info("OMAP%04x", omap_rev() >> 16); 13184a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunen if ((omap_rev() >> 8) & 0x0f) 13284a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunen pr_info("ES%x", (omap_rev() >> 12) & 0xf); 133097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley pr_info("\n"); 134a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren} 135a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren 136a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgrenvoid __init omap34xx_check_revision(void) 137a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren{ 138a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren u32 cpuid, idcode; 139a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren u16 hawkeye; 140a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren u8 rev; 141a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren char *rev_name = "ES1.0"; 142a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren 143a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren /* 144a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * We cannot access revision registers on ES1.0. 145a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * If the processor type is Cortex-A8 and the revision is 0x0 146a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * it means its Cortex r0p0 which is 3430 ES1.0. 147a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren */ 148a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren cpuid = read_cpuid(CPUID_ID); 149a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren if ((((cpuid >> 4) & 0xfff) == 0xc08) && ((cpuid & 0xf) == 0x0)) { 15084a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunen omap_revision = OMAP3430_REV_ES1_0; 151a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren goto out; 152a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren } 153a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren 154a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren /* 155a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * Detection for 34xx ES2.0 and above can be done with just 156a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * hawkeye and rev. See TRM 1.5.2 Device Identification. 157a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * Note that rev does not map directly to our defined processor 158a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * revision numbers as ES1.0 uses value 0. 159a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren */ 160a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren idcode = read_tap_reg(OMAP_TAP_IDCODE); 161a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren hawkeye = (idcode >> 12) & 0xffff; 162a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren rev = (idcode >> 28) & 0xff; 163097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley 164a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren if (hawkeye == 0xb7ae) { 165a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren switch (rev) { 166a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren case 0: 16784a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunen omap_revision = OMAP3430_REV_ES2_0; 168a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren rev_name = "ES2.0"; 169a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren break; 170a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren case 2: 17184a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunen omap_revision = OMAP3430_REV_ES2_1; 172a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren rev_name = "ES2.1"; 173a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren break; 174a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren case 3: 17584a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunen omap_revision = OMAP3430_REV_ES3_0; 176a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren rev_name = "ES3.0"; 177a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren break; 178187e688d237a6df11a2d32e8ac480b6d1fbd40b9Tony Lindgren case 4: 179187e688d237a6df11a2d32e8ac480b6d1fbd40b9Tony Lindgren omap_revision = OMAP3430_REV_ES3_1; 180187e688d237a6df11a2d32e8ac480b6d1fbd40b9Tony Lindgren rev_name = "ES3.1"; 181187e688d237a6df11a2d32e8ac480b6d1fbd40b9Tony Lindgren break; 182a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren default: 183a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren /* Use the latest known revision as default */ 184187e688d237a6df11a2d32e8ac480b6d1fbd40b9Tony Lindgren omap_revision = OMAP3430_REV_ES3_1; 185a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren rev_name = "Unknown revision\n"; 186a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren } 187a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren } 188a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren 189a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgrenout: 19084a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunen pr_info("OMAP%04x %s\n", omap_rev() >> 16, rev_name); 1911dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren} 1921dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren 193a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren/* 194a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * Try to detect the exact revision of the omap we're running on 195a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren */ 1965ba02dcab945dc0bcde7df0c5958329f34bd04aeTony Lindgrenvoid __init omap2_check_revision(void) 1975ba02dcab945dc0bcde7df0c5958329f34bd04aeTony Lindgren{ 198a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren /* 199a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * At this point we have an idea about the processor revision set 200a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * earlier with omap2_set_globals_tap(). 201a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren */ 202a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren if (cpu_is_omap24xx()) 203a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren omap24xx_check_revision(); 204a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren else if (cpu_is_omap34xx()) 205a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren omap34xx_check_revision(); 20644169075e6eaa87bab6a296209d8d0610879b394Santosh Shilimkar else if (cpu_is_omap44xx()) { 20744169075e6eaa87bab6a296209d8d0610879b394Santosh Shilimkar printk(KERN_INFO "FIXME: CPU revision = OMAP4430\n"); 20844169075e6eaa87bab6a296209d8d0610879b394Santosh Shilimkar return; 20944169075e6eaa87bab6a296209d8d0610879b394Santosh Shilimkar } else 210a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren pr_err("OMAP revision unknown, please fix!\n"); 211a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren 212a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren /* 213a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * OK, now we know the exact revision. Initialize omap_chip bits 214a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * for powerdowmain and clockdomain code. 215a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren */ 216a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren if (cpu_is_omap243x()) { 217a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren /* Currently only supports 2430ES2.1 and 2430-all */ 218a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren omap_chip.oc |= CHIP_IS_OMAP2430; 219a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren } else if (cpu_is_omap242x()) { 220a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren /* Currently only supports 2420ES2.1.1 and 2420-all */ 221a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren omap_chip.oc |= CHIP_IS_OMAP2420; 222a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren } else if (cpu_is_omap343x()) { 223a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren omap_chip.oc = CHIP_IS_OMAP3430; 22484a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunen if (omap_rev() == OMAP3430_REV_ES1_0) 225a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren omap_chip.oc |= CHIP_IS_OMAP3430ES1; 226d41ad52040dee5043ce6b1d49a1c8864706d2bfdPaul Walmsley else if (omap_rev() >= OMAP3430_REV_ES2_0 && 227d41ad52040dee5043ce6b1d49a1c8864706d2bfdPaul Walmsley omap_rev() <= OMAP3430_REV_ES2_1) 228a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren omap_chip.oc |= CHIP_IS_OMAP3430ES2; 229d41ad52040dee5043ce6b1d49a1c8864706d2bfdPaul Walmsley else if (omap_rev() == OMAP3430_REV_ES3_0) 230d41ad52040dee5043ce6b1d49a1c8864706d2bfdPaul Walmsley omap_chip.oc |= CHIP_IS_OMAP3430ES3_0; 231d41ad52040dee5043ce6b1d49a1c8864706d2bfdPaul Walmsley else if (omap_rev() == OMAP3430_REV_ES3_1) 232d41ad52040dee5043ce6b1d49a1c8864706d2bfdPaul Walmsley omap_chip.oc |= CHIP_IS_OMAP3430ES3_1; 233a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren } else { 234a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren pr_err("Uninitialized omap_chip, please fix!\n"); 235a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren } 2365ba02dcab945dc0bcde7df0c5958329f34bd04aeTony Lindgren} 2375ba02dcab945dc0bcde7df0c5958329f34bd04aeTony Lindgren 238a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren/* 239a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * Set up things for map_io and processor detection later on. Gets called 240a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * pretty much first thing from board init. For multi-omap, this gets 241a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * cpu_is_omapxxxx() working accurately enough for map_io. Then we'll try to 242a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * detect the exact revision later on in omap2_detect_revision() once map_io 243a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * is done. 244a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren */ 2450e564848693b06b037ec05e68c9e4b266250789eTony Lindgrenvoid __init omap2_set_globals_tap(struct omap_globals *omap2_globals) 2460e564848693b06b037ec05e68c9e4b266250789eTony Lindgren{ 24784a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunen omap_revision = omap2_globals->class; 2480e564848693b06b037ec05e68c9e4b266250789eTony Lindgren tap_base = omap2_globals->tap; 2490e564848693b06b037ec05e68c9e4b266250789eTony Lindgren 250a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren if (cpu_is_omap34xx()) 2510e564848693b06b037ec05e68c9e4b266250789eTony Lindgren tap_prod_id = 0x0210; 2520e564848693b06b037ec05e68c9e4b266250789eTony Lindgren else 2530e564848693b06b037ec05e68c9e4b266250789eTony Lindgren tap_prod_id = 0x0208; 2540e564848693b06b037ec05e68c9e4b266250789eTony Lindgren} 255