id.c revision b0a1a6ce0597662c06f970643da60b8ebb5cdd1c
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 24ce491cf85466c3377228c5a852ea627ec5136956Tony Lindgren#include <plat/common.h> 25ce491cf85466c3377228c5a852ea627ec5136956Tony Lindgren#include <plat/control.h> 26ce491cf85466c3377228c5a852ea627ec5136956Tony Lindgren#include <plat/cpu.h> 2772d0f1c3cdc7c456e1e357359ec6f566d0a5f264Syed Mohammed Khasim 282e130fc3d4fd5b38ee5d3c0a5c7f9fb85bce698eKan-Ru Chen#include <mach/id.h> 292e130fc3d4fd5b38ee5d3c0a5c7f9fb85bce698eKan-Ru Chen 30097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsleystatic struct omap_chip_id omap_chip; 3184a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunenstatic unsigned int omap_revision; 3284a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunen 338384ce071365244332ea05c81112bfffcf48be87Sanjeev Premiu32 omap3_features; 3484a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunen 3584a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunenunsigned int omap_rev(void) 3684a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunen{ 3784a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunen return omap_revision; 3884a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunen} 3984a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri LeukkunenEXPORT_SYMBOL(omap_rev); 40097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley 41097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley/** 42097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley * omap_chip_is - test whether currently running OMAP matches a chip type 43097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley * @oc: omap_chip_t to test against 44097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley * 45097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley * Test whether the currently-running OMAP chip matches the supplied 46097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley * chip type 'oc'. Returns 1 upon a match; 0 upon failure. 47097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley */ 48097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsleyint omap_chip_is(struct omap_chip_id oci) 49097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley{ 50097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley return (oci.oc & omap_chip.oc) ? 1 : 0; 51097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley} 52097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul WalmsleyEXPORT_SYMBOL(omap_chip_is); 53097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley 548e25ad964aac0bf6b30dd013303750089f819679Kevin Hilmanint omap_type(void) 558e25ad964aac0bf6b30dd013303750089f819679Kevin Hilman{ 568e25ad964aac0bf6b30dd013303750089f819679Kevin Hilman u32 val = 0; 578e25ad964aac0bf6b30dd013303750089f819679Kevin Hilman 58edeae658b282f2d076efb3b3f39ccd8eb0c384faFelipe Balbi if (cpu_is_omap24xx()) { 598e25ad964aac0bf6b30dd013303750089f819679Kevin Hilman val = omap_ctrl_readl(OMAP24XX_CONTROL_STATUS); 60edeae658b282f2d076efb3b3f39ccd8eb0c384faFelipe Balbi } else if (cpu_is_omap34xx()) { 618e25ad964aac0bf6b30dd013303750089f819679Kevin Hilman val = omap_ctrl_readl(OMAP343X_CONTROL_STATUS); 62737daa036081ad3030268f658d8dff785b3e73cdSantosh Shilimkar } else if (cpu_is_omap44xx()) { 63737daa036081ad3030268f658d8dff785b3e73cdSantosh Shilimkar val = omap_ctrl_readl(OMAP44XX_CONTROL_STATUS); 64edeae658b282f2d076efb3b3f39ccd8eb0c384faFelipe Balbi } else { 658e25ad964aac0bf6b30dd013303750089f819679Kevin Hilman pr_err("Cannot detect omap type!\n"); 668e25ad964aac0bf6b30dd013303750089f819679Kevin Hilman goto out; 678e25ad964aac0bf6b30dd013303750089f819679Kevin Hilman } 688e25ad964aac0bf6b30dd013303750089f819679Kevin Hilman 698e25ad964aac0bf6b30dd013303750089f819679Kevin Hilman val &= OMAP2_DEVICETYPE_MASK; 708e25ad964aac0bf6b30dd013303750089f819679Kevin Hilman val >>= 8; 718e25ad964aac0bf6b30dd013303750089f819679Kevin Hilman 728e25ad964aac0bf6b30dd013303750089f819679Kevin Hilmanout: 738e25ad964aac0bf6b30dd013303750089f819679Kevin Hilman return val; 748e25ad964aac0bf6b30dd013303750089f819679Kevin Hilman} 758e25ad964aac0bf6b30dd013303750089f819679Kevin HilmanEXPORT_SYMBOL(omap_type); 768e25ad964aac0bf6b30dd013303750089f819679Kevin Hilman 778e25ad964aac0bf6b30dd013303750089f819679Kevin Hilman 78a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren/*----------------------------------------------------------------------------*/ 79097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley 80a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren#define OMAP_TAP_IDCODE 0x0204 81a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren#define OMAP_TAP_DIE_ID_0 0x0218 82a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren#define OMAP_TAP_DIE_ID_1 0x021C 83a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren#define OMAP_TAP_DIE_ID_2 0x0220 84a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren#define OMAP_TAP_DIE_ID_3 0x0224 85097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley 86a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren#define read_tap_reg(reg) __raw_readl(tap_base + (reg)) 87097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley 88a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgrenstruct omap_id { 89a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren u16 hawkeye; /* Silicon type (Hawkeye id) */ 90a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren u8 dev; /* Device type from production_id reg */ 9184a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunen u32 type; /* Combined type id copied to omap_revision */ 92a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren}; 93097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley 94a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren/* Register values to detect the OMAP version */ 95a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgrenstatic struct omap_id omap_ids[] __initdata = { 96a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren { .hawkeye = 0xb5d9, .dev = 0x0, .type = 0x24200024 }, 97a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren { .hawkeye = 0xb5d9, .dev = 0x1, .type = 0x24201024 }, 98a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren { .hawkeye = 0xb5d9, .dev = 0x2, .type = 0x24202024 }, 99a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren { .hawkeye = 0xb5d9, .dev = 0x4, .type = 0x24220024 }, 100a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren { .hawkeye = 0xb5d9, .dev = 0x8, .type = 0x24230024 }, 101a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren { .hawkeye = 0xb68a, .dev = 0x0, .type = 0x24300024 }, 102a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren}; 103097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley 104a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgrenstatic void __iomem *tap_base; 105a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgrenstatic u16 tap_prod_id; 1061dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren 1072e130fc3d4fd5b38ee5d3c0a5c7f9fb85bce698eKan-Ru Chenvoid omap_get_die_id(struct omap_die_id *odi) 1082e130fc3d4fd5b38ee5d3c0a5c7f9fb85bce698eKan-Ru Chen{ 1092e130fc3d4fd5b38ee5d3c0a5c7f9fb85bce698eKan-Ru Chen odi->id_0 = read_tap_reg(OMAP_TAP_DIE_ID_0); 1102e130fc3d4fd5b38ee5d3c0a5c7f9fb85bce698eKan-Ru Chen odi->id_1 = read_tap_reg(OMAP_TAP_DIE_ID_1); 1112e130fc3d4fd5b38ee5d3c0a5c7f9fb85bce698eKan-Ru Chen odi->id_2 = read_tap_reg(OMAP_TAP_DIE_ID_2); 1122e130fc3d4fd5b38ee5d3c0a5c7f9fb85bce698eKan-Ru Chen odi->id_3 = read_tap_reg(OMAP_TAP_DIE_ID_3); 1132e130fc3d4fd5b38ee5d3c0a5c7f9fb85bce698eKan-Ru Chen} 1142e130fc3d4fd5b38ee5d3c0a5c7f9fb85bce698eKan-Ru Chen 1155ebc0d526af51d84b3d6fbf27b69f8d44f277064Nishanth Menonstatic void __init omap24xx_check_revision(void) 1161dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren{ 1171dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren int i, j; 118a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren u32 idcode, prod_id; 1191dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren u16 hawkeye; 120a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren u8 dev_type, rev; 121c46732bbf3477f319083161bfa2fba1fadae7a3eKan-Ru Chen struct omap_die_id odi; 1221dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren 1231dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren idcode = read_tap_reg(OMAP_TAP_IDCODE); 1240e564848693b06b037ec05e68c9e4b266250789eTony Lindgren prod_id = read_tap_reg(tap_prod_id); 1251dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren hawkeye = (idcode >> 12) & 0xffff; 1261dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren rev = (idcode >> 28) & 0x0f; 1271dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren dev_type = (prod_id >> 16) & 0x0f; 128c46732bbf3477f319083161bfa2fba1fadae7a3eKan-Ru Chen omap_get_die_id(&odi); 1291dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren 130097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley pr_debug("OMAP_TAP_IDCODE 0x%08x REV %i HAWKEYE 0x%04x MANF %03x\n", 131097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley idcode, rev, hawkeye, (idcode >> 1) & 0x7ff); 132c46732bbf3477f319083161bfa2fba1fadae7a3eKan-Ru Chen pr_debug("OMAP_TAP_DIE_ID_0: 0x%08x\n", odi.id_0); 133097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley pr_debug("OMAP_TAP_DIE_ID_1: 0x%08x DEV_REV: %i\n", 134c46732bbf3477f319083161bfa2fba1fadae7a3eKan-Ru Chen odi.id_1, (odi.id_1 >> 28) & 0xf); 135c46732bbf3477f319083161bfa2fba1fadae7a3eKan-Ru Chen pr_debug("OMAP_TAP_DIE_ID_2: 0x%08x\n", odi.id_2); 136c46732bbf3477f319083161bfa2fba1fadae7a3eKan-Ru Chen pr_debug("OMAP_TAP_DIE_ID_3: 0x%08x\n", odi.id_3); 137097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley pr_debug("OMAP_TAP_PROD_ID_0: 0x%08x DEV_TYPE: %i\n", 138097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley prod_id, dev_type); 139097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley 1401dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren /* Check hawkeye ids */ 1411dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren for (i = 0; i < ARRAY_SIZE(omap_ids); i++) { 1421dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren if (hawkeye == omap_ids[i].hawkeye) 1431dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren break; 1441dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren } 1451dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren 1461dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren if (i == ARRAY_SIZE(omap_ids)) { 1471dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren printk(KERN_ERR "Unknown OMAP CPU id\n"); 1481dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren return; 1491dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren } 1501dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren 1511dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren for (j = i; j < ARRAY_SIZE(omap_ids); j++) { 1521dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren if (dev_type == omap_ids[j].dev) 1531dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren break; 1541dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren } 1551dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren 1561dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren if (j == ARRAY_SIZE(omap_ids)) { 1571dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren printk(KERN_ERR "Unknown OMAP device type. " 1581dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren "Handling it as OMAP%04x\n", 1591dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren omap_ids[i].type >> 16); 1601dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren j = i; 1611dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren } 1621dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren 16384a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunen pr_info("OMAP%04x", omap_rev() >> 16); 16484a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunen if ((omap_rev() >> 8) & 0x0f) 16584a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunen pr_info("ES%x", (omap_rev() >> 12) & 0xf); 166097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley pr_info("\n"); 167a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren} 168a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren 1698384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi#define OMAP3_CHECK_FEATURE(status,feat) \ 1708384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi if (((status & OMAP3_ ##feat## _MASK) \ 1718384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi >> OMAP3_ ##feat## _SHIFT) != FEAT_ ##feat## _NONE) { \ 1728384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi omap3_features |= OMAP3_HAS_ ##feat; \ 1738384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi } 1748384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi 1755ebc0d526af51d84b3d6fbf27b69f8d44f277064Nishanth Menonstatic void __init omap3_check_features(void) 1768384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi{ 1778384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi u32 status; 1788384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi 1798384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi omap3_features = 0; 1808384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi 1818384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi status = omap_ctrl_readl(OMAP3_CONTROL_OMAP_STATUS); 1828384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi 1838384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi OMAP3_CHECK_FEATURE(status, L2CACHE); 1848384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi OMAP3_CHECK_FEATURE(status, IVA); 1858384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi OMAP3_CHECK_FEATURE(status, SGX); 1868384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi OMAP3_CHECK_FEATURE(status, NEON); 1878384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi OMAP3_CHECK_FEATURE(status, ISP); 1887356f0b26b3176610b4de439e8c7bfe10c797347Vishwanath BS if (cpu_is_omap3630()) 1897356f0b26b3176610b4de439e8c7bfe10c797347Vishwanath BS omap3_features |= OMAP3_HAS_192MHZ_CLK; 190ad0c63f1d623ea9d3e0c0521d5ce9cd522c4e1f0stanley.miao if (!cpu_is_omap3505() && !cpu_is_omap3517()) 191ad0c63f1d623ea9d3e0c0521d5ce9cd522c4e1f0stanley.miao omap3_features |= OMAP3_HAS_IO_WAKEUP; 1928384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi 1938384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi /* 1948384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi * TODO: Get additional info (where applicable) 1958384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi * e.g. Size of L2 cache. 1968384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi */ 1978384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi} 1988384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi 1995ebc0d526af51d84b3d6fbf27b69f8d44f277064Nishanth Menonstatic void __init omap3_check_revision(void) 200a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren{ 201a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren u32 cpuid, idcode; 202a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren u16 hawkeye; 203a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren u8 rev; 204a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren 205e9acb9b64d7fb16c7f69efa85c5707cffd0c7275Tony Lindgren omap_chip.oc = CHIP_IS_OMAP3430; 206e9acb9b64d7fb16c7f69efa85c5707cffd0c7275Tony Lindgren 207a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren /* 208a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * We cannot access revision registers on ES1.0. 209a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * If the processor type is Cortex-A8 and the revision is 0x0 210a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * it means its Cortex r0p0 which is 3430 ES1.0. 211a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren */ 212a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren cpuid = read_cpuid(CPUID_ID); 213a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren if ((((cpuid >> 4) & 0xfff) == 0xc08) && ((cpuid & 0xf) == 0x0)) { 21484a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunen omap_revision = OMAP3430_REV_ES1_0; 215e9acb9b64d7fb16c7f69efa85c5707cffd0c7275Tony Lindgren omap_chip.oc |= CHIP_IS_OMAP3430ES1; 216048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi return; 217a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren } 218a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren 219a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren /* 220a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * Detection for 34xx ES2.0 and above can be done with just 221a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * hawkeye and rev. See TRM 1.5.2 Device Identification. 222a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * Note that rev does not map directly to our defined processor 223a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * revision numbers as ES1.0 uses value 0. 224a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren */ 225a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren idcode = read_tap_reg(OMAP_TAP_IDCODE); 226a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren hawkeye = (idcode >> 12) & 0xffff; 227a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren rev = (idcode >> 28) & 0xff; 228097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley 2292456a10fb3a9b8c9e970b05e6c1370201675da0aNishanth Menon switch (hawkeye) { 2302456a10fb3a9b8c9e970b05e6c1370201675da0aNishanth Menon case 0xb7ae: 2312456a10fb3a9b8c9e970b05e6c1370201675da0aNishanth Menon /* Handle 34xx/35xx devices */ 232a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren switch (rev) { 233048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi case 0: /* Take care of early samples */ 234048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi case 1: 23584a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunen omap_revision = OMAP3430_REV_ES2_0; 236e9acb9b64d7fb16c7f69efa85c5707cffd0c7275Tony Lindgren omap_chip.oc |= CHIP_IS_OMAP3430ES2; 237a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren break; 238a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren case 2: 23984a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunen omap_revision = OMAP3430_REV_ES2_1; 240e9acb9b64d7fb16c7f69efa85c5707cffd0c7275Tony Lindgren omap_chip.oc |= CHIP_IS_OMAP3430ES2; 241a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren break; 242a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren case 3: 24384a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunen omap_revision = OMAP3430_REV_ES3_0; 244e9acb9b64d7fb16c7f69efa85c5707cffd0c7275Tony Lindgren omap_chip.oc |= CHIP_IS_OMAP3430ES3_0; 245a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren break; 246187e688d237a6df11a2d32e8ac480b6d1fbd40b9Tony Lindgren case 4: 247e9acb9b64d7fb16c7f69efa85c5707cffd0c7275Tony Lindgren omap_revision = OMAP3430_REV_ES3_1; 248e9acb9b64d7fb16c7f69efa85c5707cffd0c7275Tony Lindgren omap_chip.oc |= CHIP_IS_OMAP3430ES3_1; 249e9acb9b64d7fb16c7f69efa85c5707cffd0c7275Tony Lindgren break; 250e9acb9b64d7fb16c7f69efa85c5707cffd0c7275Tony Lindgren case 7: 251edeae658b282f2d076efb3b3f39ccd8eb0c384faFelipe Balbi /* FALLTHROUGH */ 252a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren default: 253a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren /* Use the latest known revision as default */ 254e9acb9b64d7fb16c7f69efa85c5707cffd0c7275Tony Lindgren omap_revision = OMAP3430_REV_ES3_1_2; 255e9acb9b64d7fb16c7f69efa85c5707cffd0c7275Tony Lindgren 256e9acb9b64d7fb16c7f69efa85c5707cffd0c7275Tony Lindgren /* REVISIT: Add CHIP_IS_OMAP3430ES3_1_2? */ 257e9acb9b64d7fb16c7f69efa85c5707cffd0c7275Tony Lindgren omap_chip.oc |= CHIP_IS_OMAP3430ES3_1; 258a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren } 2592456a10fb3a9b8c9e970b05e6c1370201675da0aNishanth Menon break; 2604cac60180649b83e094d4ea5c440229814488431Sanjeev Premi case 0xb868: 2614cac60180649b83e094d4ea5c440229814488431Sanjeev Premi /* Handle OMAP35xx/AM35xx devices 2624cac60180649b83e094d4ea5c440229814488431Sanjeev Premi * 2634cac60180649b83e094d4ea5c440229814488431Sanjeev Premi * Set the device to be OMAP3505 here. Actual device 2644cac60180649b83e094d4ea5c440229814488431Sanjeev Premi * is identified later based on the features. 265e9acb9b64d7fb16c7f69efa85c5707cffd0c7275Tony Lindgren * 266e9acb9b64d7fb16c7f69efa85c5707cffd0c7275Tony Lindgren * REVISIT: AM3505/AM3517 should have their own CHIP_IS 2674cac60180649b83e094d4ea5c440229814488431Sanjeev Premi */ 2684cac60180649b83e094d4ea5c440229814488431Sanjeev Premi omap_revision = OMAP3505_REV(rev); 269e9acb9b64d7fb16c7f69efa85c5707cffd0c7275Tony Lindgren omap_chip.oc |= CHIP_IS_OMAP3430ES3_1; 2704cac60180649b83e094d4ea5c440229814488431Sanjeev Premi break; 271edeae658b282f2d076efb3b3f39ccd8eb0c384faFelipe Balbi case 0xb891: 272b0a1a6ce0597662c06f970643da60b8ebb5cdd1cAnand Gadiyar /* Handle 36xx devices */ 273b0a1a6ce0597662c06f970643da60b8ebb5cdd1cAnand Gadiyar omap_chip.oc |= CHIP_IS_OMAP3630ES1; 274b0a1a6ce0597662c06f970643da60b8ebb5cdd1cAnand Gadiyar 275b0a1a6ce0597662c06f970643da60b8ebb5cdd1cAnand Gadiyar switch(rev) { 276b0a1a6ce0597662c06f970643da60b8ebb5cdd1cAnand Gadiyar case 0: /* Take care of early samples */ 277b0a1a6ce0597662c06f970643da60b8ebb5cdd1cAnand Gadiyar omap_revision = OMAP3630_REV_ES1_0; 278b0a1a6ce0597662c06f970643da60b8ebb5cdd1cAnand Gadiyar break; 279b0a1a6ce0597662c06f970643da60b8ebb5cdd1cAnand Gadiyar case 1: 280b0a1a6ce0597662c06f970643da60b8ebb5cdd1cAnand Gadiyar omap_revision = OMAP3630_REV_ES1_1; 281b0a1a6ce0597662c06f970643da60b8ebb5cdd1cAnand Gadiyar omap_chip.oc |= CHIP_IS_OMAP3630ES1_1; 282b0a1a6ce0597662c06f970643da60b8ebb5cdd1cAnand Gadiyar break; 283b0a1a6ce0597662c06f970643da60b8ebb5cdd1cAnand Gadiyar case 2: 284b0a1a6ce0597662c06f970643da60b8ebb5cdd1cAnand Gadiyar default: 285b0a1a6ce0597662c06f970643da60b8ebb5cdd1cAnand Gadiyar omap_revision = OMAP3630_REV_ES1_2; 286b0a1a6ce0597662c06f970643da60b8ebb5cdd1cAnand Gadiyar omap_chip.oc |= CHIP_IS_OMAP3630ES1_2; 287b0a1a6ce0597662c06f970643da60b8ebb5cdd1cAnand Gadiyar break; 288b0a1a6ce0597662c06f970643da60b8ebb5cdd1cAnand Gadiyar } 2892456a10fb3a9b8c9e970b05e6c1370201675da0aNishanth Menon default: 2902456a10fb3a9b8c9e970b05e6c1370201675da0aNishanth Menon /* Unknown default to latest silicon rev as default*/ 291b0a1a6ce0597662c06f970643da60b8ebb5cdd1cAnand Gadiyar omap_revision = OMAP3630_REV_ES1_2; 292b0a1a6ce0597662c06f970643da60b8ebb5cdd1cAnand Gadiyar omap_chip.oc |= CHIP_IS_OMAP3630ES1_2; 293a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren } 2941dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren} 2951dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren 2965ebc0d526af51d84b3d6fbf27b69f8d44f277064Nishanth Menonstatic void __init omap4_check_revision(void) 297b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar{ 298b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar u32 idcode; 299b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar u16 hawkeye; 300b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar u8 rev; 301b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar char *rev_name = "ES1.0"; 302b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar 303b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar /* 304b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar * The IC rev detection is done with hawkeye and rev. 305b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar * Note that rev does not map directly to defined processor 306b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar * revision numbers as ES1.0 uses value 0. 307b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar */ 308b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar idcode = read_tap_reg(OMAP_TAP_IDCODE); 309b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar hawkeye = (idcode >> 12) & 0xffff; 310b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar rev = (idcode >> 28) & 0xff; 311b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar 312b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar if ((hawkeye == 0xb852) && (rev == 0x0)) { 313b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar omap_revision = OMAP4430_REV_ES1_0; 314c6a6e6e203ee9a34fa53f773272f21d48b4e3454Abhijit Pagare omap_chip.oc |= CHIP_IS_OMAP4430ES1; 315b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar pr_info("OMAP%04x %s\n", omap_rev() >> 16, rev_name); 316b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar return; 317b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar } 318b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar 319b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar pr_err("Unknown OMAP4 CPU id\n"); 320b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar} 321b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar 3228384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi#define OMAP3_SHOW_FEATURE(feat) \ 323cedf900d657e09f060b52f0598fc56aae9fbfba3Kevin Hilman if (omap3_has_ ##feat()) \ 324cedf900d657e09f060b52f0598fc56aae9fbfba3Kevin Hilman printk(#feat" "); 3258384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi 3265ebc0d526af51d84b3d6fbf27b69f8d44f277064Nishanth Menonstatic void __init omap3_cpuinfo(void) 3278384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi{ 328048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi u8 rev = GET_OMAP_REVISION(); 329048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi char cpu_name[16], cpu_rev[16]; 330048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi 331048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi /* OMAP3430 and OMAP3530 are assumed to be same. 332048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi * 333048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi * OMAP3525, OMAP3515 and OMAP3503 can be detected only based 334048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi * on available features. Upon detection, update the CPU id 335048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi * and CPU class bits. 336048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi */ 337edeae658b282f2d076efb3b3f39ccd8eb0c384faFelipe Balbi if (cpu_is_omap3630()) { 3384cac60180649b83e094d4ea5c440229814488431Sanjeev Premi strcpy(cpu_name, "OMAP3630"); 339edeae658b282f2d076efb3b3f39ccd8eb0c384faFelipe Balbi } else if (cpu_is_omap3505()) { 3404cac60180649b83e094d4ea5c440229814488431Sanjeev Premi /* 3414cac60180649b83e094d4ea5c440229814488431Sanjeev Premi * AM35xx devices 3424cac60180649b83e094d4ea5c440229814488431Sanjeev Premi */ 3434cac60180649b83e094d4ea5c440229814488431Sanjeev Premi if (omap3_has_sgx()) { 3444cac60180649b83e094d4ea5c440229814488431Sanjeev Premi omap_revision = OMAP3517_REV(rev); 3454cac60180649b83e094d4ea5c440229814488431Sanjeev Premi strcpy(cpu_name, "AM3517"); 346edeae658b282f2d076efb3b3f39ccd8eb0c384faFelipe Balbi } else { 3474cac60180649b83e094d4ea5c440229814488431Sanjeev Premi /* Already set in omap3_check_revision() */ 3484cac60180649b83e094d4ea5c440229814488431Sanjeev Premi strcpy(cpu_name, "AM3505"); 3494cac60180649b83e094d4ea5c440229814488431Sanjeev Premi } 350edeae658b282f2d076efb3b3f39ccd8eb0c384faFelipe Balbi } else if (omap3_has_iva() && omap3_has_sgx()) { 351edeae658b282f2d076efb3b3f39ccd8eb0c384faFelipe Balbi /* OMAP3430, OMAP3525, OMAP3515, OMAP3503 devices */ 3524cac60180649b83e094d4ea5c440229814488431Sanjeev Premi strcpy(cpu_name, "OMAP3430/3530"); 3530712fb39d7ac045171f26b24b896d58adec04133Sergey Lapin } else if (omap3_has_iva()) { 354048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi omap_revision = OMAP3525_REV(rev); 3554cac60180649b83e094d4ea5c440229814488431Sanjeev Premi strcpy(cpu_name, "OMAP3525"); 3560712fb39d7ac045171f26b24b896d58adec04133Sergey Lapin } else if (omap3_has_sgx()) { 357048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi omap_revision = OMAP3515_REV(rev); 3584cac60180649b83e094d4ea5c440229814488431Sanjeev Premi strcpy(cpu_name, "OMAP3515"); 359edeae658b282f2d076efb3b3f39ccd8eb0c384faFelipe Balbi } else { 360048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi omap_revision = OMAP3503_REV(rev); 3614cac60180649b83e094d4ea5c440229814488431Sanjeev Premi strcpy(cpu_name, "OMAP3503"); 362048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi } 363048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi 364048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi switch (rev) { 365048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi case OMAP_REVBITS_00: 366048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi strcpy(cpu_rev, "1.0"); 367048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi break; 368b0a1a6ce0597662c06f970643da60b8ebb5cdd1cAnand Gadiyar case OMAP_REVBITS_01: 369b0a1a6ce0597662c06f970643da60b8ebb5cdd1cAnand Gadiyar strcpy(cpu_rev, "1.1"); 370b0a1a6ce0597662c06f970643da60b8ebb5cdd1cAnand Gadiyar break; 371b0a1a6ce0597662c06f970643da60b8ebb5cdd1cAnand Gadiyar case OMAP_REVBITS_02: 372b0a1a6ce0597662c06f970643da60b8ebb5cdd1cAnand Gadiyar strcpy(cpu_rev, "1.2"); 373b0a1a6ce0597662c06f970643da60b8ebb5cdd1cAnand Gadiyar break; 374048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi case OMAP_REVBITS_10: 375048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi strcpy(cpu_rev, "2.0"); 376048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi break; 377048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi case OMAP_REVBITS_20: 378048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi strcpy(cpu_rev, "2.1"); 379048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi break; 380048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi case OMAP_REVBITS_30: 381048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi strcpy(cpu_rev, "3.0"); 382048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi break; 383048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi case OMAP_REVBITS_40: 384edeae658b282f2d076efb3b3f39ccd8eb0c384faFelipe Balbi /* FALLTHROUGH */ 385048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi default: 386048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi /* Use the latest known revision as default */ 387048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi strcpy(cpu_rev, "3.1"); 388048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi } 389048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi 390edeae658b282f2d076efb3b3f39ccd8eb0c384faFelipe Balbi /* Print verbose information */ 391cedf900d657e09f060b52f0598fc56aae9fbfba3Kevin Hilman pr_info("%s ES%s (", cpu_name, cpu_rev); 392048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi 3938384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi OMAP3_SHOW_FEATURE(l2cache); 3948384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi OMAP3_SHOW_FEATURE(iva); 3958384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi OMAP3_SHOW_FEATURE(sgx); 3968384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi OMAP3_SHOW_FEATURE(neon); 3978384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi OMAP3_SHOW_FEATURE(isp); 3987356f0b26b3176610b4de439e8c7bfe10c797347Vishwanath BS OMAP3_SHOW_FEATURE(192mhz_clk); 399cedf900d657e09f060b52f0598fc56aae9fbfba3Kevin Hilman 400cedf900d657e09f060b52f0598fc56aae9fbfba3Kevin Hilman printk(")\n"); 4018384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi} 4028384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi 403a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren/* 404a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * Try to detect the exact revision of the omap we're running on 405a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren */ 4065ba02dcab945dc0bcde7df0c5958329f34bd04aeTony Lindgrenvoid __init omap2_check_revision(void) 4075ba02dcab945dc0bcde7df0c5958329f34bd04aeTony Lindgren{ 408a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren /* 409a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * At this point we have an idea about the processor revision set 410a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * earlier with omap2_set_globals_tap(). 411a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren */ 412edeae658b282f2d076efb3b3f39ccd8eb0c384faFelipe Balbi if (cpu_is_omap24xx()) { 413a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren omap24xx_check_revision(); 414edeae658b282f2d076efb3b3f39ccd8eb0c384faFelipe Balbi } else if (cpu_is_omap34xx()) { 4158384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi omap3_check_revision(); 41605574bb27a8a46d354582e72691ff6cb40712da9Nishanth Menon omap3_check_features(); 4178384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi omap3_cpuinfo(); 418e9acb9b64d7fb16c7f69efa85c5707cffd0c7275Tony Lindgren return; 419edeae658b282f2d076efb3b3f39ccd8eb0c384faFelipe Balbi } else if (cpu_is_omap44xx()) { 420b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar omap4_check_revision(); 42144169075e6eaa87bab6a296209d8d0610879b394Santosh Shilimkar return; 422edeae658b282f2d076efb3b3f39ccd8eb0c384faFelipe Balbi } else { 423a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren pr_err("OMAP revision unknown, please fix!\n"); 424edeae658b282f2d076efb3b3f39ccd8eb0c384faFelipe Balbi } 425a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren 426a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren /* 427a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * OK, now we know the exact revision. Initialize omap_chip bits 428a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * for powerdowmain and clockdomain code. 429a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren */ 430a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren if (cpu_is_omap243x()) { 431a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren /* Currently only supports 2430ES2.1 and 2430-all */ 432a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren omap_chip.oc |= CHIP_IS_OMAP2430; 433e9acb9b64d7fb16c7f69efa85c5707cffd0c7275Tony Lindgren return; 434a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren } else if (cpu_is_omap242x()) { 435a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren /* Currently only supports 2420ES2.1.1 and 2420-all */ 436a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren omap_chip.oc |= CHIP_IS_OMAP2420; 437e9acb9b64d7fb16c7f69efa85c5707cffd0c7275Tony Lindgren return; 438a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren } 439e9acb9b64d7fb16c7f69efa85c5707cffd0c7275Tony Lindgren 440e9acb9b64d7fb16c7f69efa85c5707cffd0c7275Tony Lindgren pr_err("Uninitialized omap_chip, please fix!\n"); 4415ba02dcab945dc0bcde7df0c5958329f34bd04aeTony Lindgren} 4425ba02dcab945dc0bcde7df0c5958329f34bd04aeTony Lindgren 443a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren/* 444a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * Set up things for map_io and processor detection later on. Gets called 445a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * pretty much first thing from board init. For multi-omap, this gets 446a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * cpu_is_omapxxxx() working accurately enough for map_io. Then we'll try to 447a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * detect the exact revision later on in omap2_detect_revision() once map_io 448a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * is done. 449a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren */ 4500e564848693b06b037ec05e68c9e4b266250789eTony Lindgrenvoid __init omap2_set_globals_tap(struct omap_globals *omap2_globals) 4510e564848693b06b037ec05e68c9e4b266250789eTony Lindgren{ 45284a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunen omap_revision = omap2_globals->class; 4530e564848693b06b037ec05e68c9e4b266250789eTony Lindgren tap_base = omap2_globals->tap; 4540e564848693b06b037ec05e68c9e4b266250789eTony Lindgren 455a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren if (cpu_is_omap34xx()) 4560e564848693b06b037ec05e68c9e4b266250789eTony Lindgren tap_prod_id = 0x0210; 4570e564848693b06b037ec05e68c9e4b266250789eTony Lindgren else 4580e564848693b06b037ec05e68c9e4b266250789eTony Lindgren tap_prod_id = 0x0208; 4590e564848693b06b037ec05e68c9e4b266250789eTony Lindgren} 460