id.c revision ad0c63f1d623ea9d3e0c0521d5ce9cd522c4e1f0
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 28097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsleystatic struct omap_chip_id omap_chip; 2984a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunenstatic unsigned int omap_revision; 3084a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunen 318384ce071365244332ea05c81112bfffcf48be87Sanjeev Premiu32 omap3_features; 3284a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunen 3384a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunenunsigned int omap_rev(void) 3484a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunen{ 3584a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunen return omap_revision; 3684a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunen} 3784a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri LeukkunenEXPORT_SYMBOL(omap_rev); 38097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley 39097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley/** 40097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley * omap_chip_is - test whether currently running OMAP matches a chip type 41097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley * @oc: omap_chip_t to test against 42097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley * 43097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley * Test whether the currently-running OMAP chip matches the supplied 44097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley * chip type 'oc'. Returns 1 upon a match; 0 upon failure. 45097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley */ 46097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsleyint omap_chip_is(struct omap_chip_id oci) 47097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley{ 48097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley return (oci.oc & omap_chip.oc) ? 1 : 0; 49097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley} 50097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul WalmsleyEXPORT_SYMBOL(omap_chip_is); 51097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley 528e25ad964aac0bf6b30dd013303750089f819679Kevin Hilmanint omap_type(void) 538e25ad964aac0bf6b30dd013303750089f819679Kevin Hilman{ 548e25ad964aac0bf6b30dd013303750089f819679Kevin Hilman u32 val = 0; 558e25ad964aac0bf6b30dd013303750089f819679Kevin Hilman 56edeae658b282f2d076efb3b3f39ccd8eb0c384faFelipe Balbi if (cpu_is_omap24xx()) { 578e25ad964aac0bf6b30dd013303750089f819679Kevin Hilman val = omap_ctrl_readl(OMAP24XX_CONTROL_STATUS); 58edeae658b282f2d076efb3b3f39ccd8eb0c384faFelipe Balbi } else if (cpu_is_omap34xx()) { 598e25ad964aac0bf6b30dd013303750089f819679Kevin Hilman val = omap_ctrl_readl(OMAP343X_CONTROL_STATUS); 60737daa036081ad3030268f658d8dff785b3e73cdSantosh Shilimkar } else if (cpu_is_omap44xx()) { 61737daa036081ad3030268f658d8dff785b3e73cdSantosh Shilimkar val = omap_ctrl_readl(OMAP44XX_CONTROL_STATUS); 62edeae658b282f2d076efb3b3f39ccd8eb0c384faFelipe Balbi } else { 638e25ad964aac0bf6b30dd013303750089f819679Kevin Hilman pr_err("Cannot detect omap type!\n"); 648e25ad964aac0bf6b30dd013303750089f819679Kevin Hilman goto out; 658e25ad964aac0bf6b30dd013303750089f819679Kevin Hilman } 668e25ad964aac0bf6b30dd013303750089f819679Kevin Hilman 678e25ad964aac0bf6b30dd013303750089f819679Kevin Hilman val &= OMAP2_DEVICETYPE_MASK; 688e25ad964aac0bf6b30dd013303750089f819679Kevin Hilman val >>= 8; 698e25ad964aac0bf6b30dd013303750089f819679Kevin Hilman 708e25ad964aac0bf6b30dd013303750089f819679Kevin Hilmanout: 718e25ad964aac0bf6b30dd013303750089f819679Kevin Hilman return val; 728e25ad964aac0bf6b30dd013303750089f819679Kevin Hilman} 738e25ad964aac0bf6b30dd013303750089f819679Kevin HilmanEXPORT_SYMBOL(omap_type); 748e25ad964aac0bf6b30dd013303750089f819679Kevin Hilman 758e25ad964aac0bf6b30dd013303750089f819679Kevin Hilman 76a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren/*----------------------------------------------------------------------------*/ 77097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley 78a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren#define OMAP_TAP_IDCODE 0x0204 79a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren#define OMAP_TAP_DIE_ID_0 0x0218 80a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren#define OMAP_TAP_DIE_ID_1 0x021C 81a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren#define OMAP_TAP_DIE_ID_2 0x0220 82a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren#define OMAP_TAP_DIE_ID_3 0x0224 83097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley 84a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren#define read_tap_reg(reg) __raw_readl(tap_base + (reg)) 85097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley 86a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgrenstruct omap_id { 87a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren u16 hawkeye; /* Silicon type (Hawkeye id) */ 88a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren u8 dev; /* Device type from production_id reg */ 8984a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunen u32 type; /* Combined type id copied to omap_revision */ 90a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren}; 91097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley 92a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren/* Register values to detect the OMAP version */ 93a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgrenstatic struct omap_id omap_ids[] __initdata = { 94a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren { .hawkeye = 0xb5d9, .dev = 0x0, .type = 0x24200024 }, 95a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren { .hawkeye = 0xb5d9, .dev = 0x1, .type = 0x24201024 }, 96a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren { .hawkeye = 0xb5d9, .dev = 0x2, .type = 0x24202024 }, 97a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren { .hawkeye = 0xb5d9, .dev = 0x4, .type = 0x24220024 }, 98a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren { .hawkeye = 0xb5d9, .dev = 0x8, .type = 0x24230024 }, 99a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren { .hawkeye = 0xb68a, .dev = 0x0, .type = 0x24300024 }, 100a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren}; 101097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley 102a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgrenstatic void __iomem *tap_base; 103a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgrenstatic u16 tap_prod_id; 1041dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren 1055ebc0d526af51d84b3d6fbf27b69f8d44f277064Nishanth Menonstatic void __init omap24xx_check_revision(void) 1061dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren{ 1071dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren int i, j; 108a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren u32 idcode, prod_id; 1091dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren u16 hawkeye; 110a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren u8 dev_type, rev; 1111dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren 1121dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren idcode = read_tap_reg(OMAP_TAP_IDCODE); 1130e564848693b06b037ec05e68c9e4b266250789eTony Lindgren prod_id = read_tap_reg(tap_prod_id); 1141dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren hawkeye = (idcode >> 12) & 0xffff; 1151dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren rev = (idcode >> 28) & 0x0f; 1161dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren dev_type = (prod_id >> 16) & 0x0f; 1171dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren 118097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley pr_debug("OMAP_TAP_IDCODE 0x%08x REV %i HAWKEYE 0x%04x MANF %03x\n", 119097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley idcode, rev, hawkeye, (idcode >> 1) & 0x7ff); 120097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley pr_debug("OMAP_TAP_DIE_ID_0: 0x%08x\n", 121097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley read_tap_reg(OMAP_TAP_DIE_ID_0)); 122097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley pr_debug("OMAP_TAP_DIE_ID_1: 0x%08x DEV_REV: %i\n", 123097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley read_tap_reg(OMAP_TAP_DIE_ID_1), 124097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley (read_tap_reg(OMAP_TAP_DIE_ID_1) >> 28) & 0xf); 125097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley pr_debug("OMAP_TAP_DIE_ID_2: 0x%08x\n", 126097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley read_tap_reg(OMAP_TAP_DIE_ID_2)); 127097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley pr_debug("OMAP_TAP_DIE_ID_3: 0x%08x\n", 128097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley read_tap_reg(OMAP_TAP_DIE_ID_3)); 129097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley pr_debug("OMAP_TAP_PROD_ID_0: 0x%08x DEV_TYPE: %i\n", 130097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley prod_id, dev_type); 131097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley 1321dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren /* Check hawkeye ids */ 1331dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren for (i = 0; i < ARRAY_SIZE(omap_ids); i++) { 1341dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren if (hawkeye == omap_ids[i].hawkeye) 1351dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren break; 1361dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren } 1371dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren 1381dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren if (i == ARRAY_SIZE(omap_ids)) { 1391dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren printk(KERN_ERR "Unknown OMAP CPU id\n"); 1401dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren return; 1411dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren } 1421dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren 1431dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren for (j = i; j < ARRAY_SIZE(omap_ids); j++) { 1441dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren if (dev_type == omap_ids[j].dev) 1451dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren break; 1461dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren } 1471dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren 1481dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren if (j == ARRAY_SIZE(omap_ids)) { 1491dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren printk(KERN_ERR "Unknown OMAP device type. " 1501dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren "Handling it as OMAP%04x\n", 1511dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren omap_ids[i].type >> 16); 1521dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren j = i; 1531dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren } 1541dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren 15584a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunen pr_info("OMAP%04x", omap_rev() >> 16); 15684a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunen if ((omap_rev() >> 8) & 0x0f) 15784a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunen pr_info("ES%x", (omap_rev() >> 12) & 0xf); 158097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley pr_info("\n"); 159a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren} 160a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren 1618384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi#define OMAP3_CHECK_FEATURE(status,feat) \ 1628384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi if (((status & OMAP3_ ##feat## _MASK) \ 1638384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi >> OMAP3_ ##feat## _SHIFT) != FEAT_ ##feat## _NONE) { \ 1648384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi omap3_features |= OMAP3_HAS_ ##feat; \ 1658384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi } 1668384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi 1675ebc0d526af51d84b3d6fbf27b69f8d44f277064Nishanth Menonstatic void __init omap3_check_features(void) 1688384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi{ 1698384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi u32 status; 1708384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi 1718384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi omap3_features = 0; 1728384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi 1738384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi status = omap_ctrl_readl(OMAP3_CONTROL_OMAP_STATUS); 1748384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi 1758384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi OMAP3_CHECK_FEATURE(status, L2CACHE); 1768384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi OMAP3_CHECK_FEATURE(status, IVA); 1778384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi OMAP3_CHECK_FEATURE(status, SGX); 1788384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi OMAP3_CHECK_FEATURE(status, NEON); 1798384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi OMAP3_CHECK_FEATURE(status, ISP); 1807356f0b26b3176610b4de439e8c7bfe10c797347Vishwanath BS if (cpu_is_omap3630()) 1817356f0b26b3176610b4de439e8c7bfe10c797347Vishwanath BS omap3_features |= OMAP3_HAS_192MHZ_CLK; 182ad0c63f1d623ea9d3e0c0521d5ce9cd522c4e1f0stanley.miao if (!cpu_is_omap3505() && !cpu_is_omap3517()) 183ad0c63f1d623ea9d3e0c0521d5ce9cd522c4e1f0stanley.miao omap3_features |= OMAP3_HAS_IO_WAKEUP; 1848384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi 1858384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi /* 1868384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi * TODO: Get additional info (where applicable) 1878384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi * e.g. Size of L2 cache. 1888384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi */ 1898384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi} 1908384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi 1915ebc0d526af51d84b3d6fbf27b69f8d44f277064Nishanth Menonstatic void __init omap3_check_revision(void) 192a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren{ 193a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren u32 cpuid, idcode; 194a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren u16 hawkeye; 195a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren u8 rev; 196a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren 197e9acb9b64d7fb16c7f69efa85c5707cffd0c7275Tony Lindgren omap_chip.oc = CHIP_IS_OMAP3430; 198e9acb9b64d7fb16c7f69efa85c5707cffd0c7275Tony Lindgren 199a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren /* 200a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * We cannot access revision registers on ES1.0. 201a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * If the processor type is Cortex-A8 and the revision is 0x0 202a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * it means its Cortex r0p0 which is 3430 ES1.0. 203a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren */ 204a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren cpuid = read_cpuid(CPUID_ID); 205a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren if ((((cpuid >> 4) & 0xfff) == 0xc08) && ((cpuid & 0xf) == 0x0)) { 20684a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunen omap_revision = OMAP3430_REV_ES1_0; 207e9acb9b64d7fb16c7f69efa85c5707cffd0c7275Tony Lindgren omap_chip.oc |= CHIP_IS_OMAP3430ES1; 208048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi return; 209a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren } 210a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren 211a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren /* 212a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * Detection for 34xx ES2.0 and above can be done with just 213a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * hawkeye and rev. See TRM 1.5.2 Device Identification. 214a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * Note that rev does not map directly to our defined processor 215a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * revision numbers as ES1.0 uses value 0. 216a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren */ 217a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren idcode = read_tap_reg(OMAP_TAP_IDCODE); 218a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren hawkeye = (idcode >> 12) & 0xffff; 219a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren rev = (idcode >> 28) & 0xff; 220097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley 2212456a10fb3a9b8c9e970b05e6c1370201675da0aNishanth Menon switch (hawkeye) { 2222456a10fb3a9b8c9e970b05e6c1370201675da0aNishanth Menon case 0xb7ae: 2232456a10fb3a9b8c9e970b05e6c1370201675da0aNishanth Menon /* Handle 34xx/35xx devices */ 224a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren switch (rev) { 225048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi case 0: /* Take care of early samples */ 226048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi case 1: 22784a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunen omap_revision = OMAP3430_REV_ES2_0; 228e9acb9b64d7fb16c7f69efa85c5707cffd0c7275Tony Lindgren omap_chip.oc |= CHIP_IS_OMAP3430ES2; 229a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren break; 230a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren case 2: 23184a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunen omap_revision = OMAP3430_REV_ES2_1; 232e9acb9b64d7fb16c7f69efa85c5707cffd0c7275Tony Lindgren omap_chip.oc |= CHIP_IS_OMAP3430ES2; 233a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren break; 234a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren case 3: 23584a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunen omap_revision = OMAP3430_REV_ES3_0; 236e9acb9b64d7fb16c7f69efa85c5707cffd0c7275Tony Lindgren omap_chip.oc |= CHIP_IS_OMAP3430ES3_0; 237a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren break; 238187e688d237a6df11a2d32e8ac480b6d1fbd40b9Tony Lindgren case 4: 239e9acb9b64d7fb16c7f69efa85c5707cffd0c7275Tony Lindgren omap_revision = OMAP3430_REV_ES3_1; 240e9acb9b64d7fb16c7f69efa85c5707cffd0c7275Tony Lindgren omap_chip.oc |= CHIP_IS_OMAP3430ES3_1; 241e9acb9b64d7fb16c7f69efa85c5707cffd0c7275Tony Lindgren break; 242e9acb9b64d7fb16c7f69efa85c5707cffd0c7275Tony Lindgren case 7: 243edeae658b282f2d076efb3b3f39ccd8eb0c384faFelipe Balbi /* FALLTHROUGH */ 244a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren default: 245a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren /* Use the latest known revision as default */ 246e9acb9b64d7fb16c7f69efa85c5707cffd0c7275Tony Lindgren omap_revision = OMAP3430_REV_ES3_1_2; 247e9acb9b64d7fb16c7f69efa85c5707cffd0c7275Tony Lindgren 248e9acb9b64d7fb16c7f69efa85c5707cffd0c7275Tony Lindgren /* REVISIT: Add CHIP_IS_OMAP3430ES3_1_2? */ 249e9acb9b64d7fb16c7f69efa85c5707cffd0c7275Tony Lindgren omap_chip.oc |= CHIP_IS_OMAP3430ES3_1; 250a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren } 2512456a10fb3a9b8c9e970b05e6c1370201675da0aNishanth Menon break; 2524cac60180649b83e094d4ea5c440229814488431Sanjeev Premi case 0xb868: 2534cac60180649b83e094d4ea5c440229814488431Sanjeev Premi /* Handle OMAP35xx/AM35xx devices 2544cac60180649b83e094d4ea5c440229814488431Sanjeev Premi * 2554cac60180649b83e094d4ea5c440229814488431Sanjeev Premi * Set the device to be OMAP3505 here. Actual device 2564cac60180649b83e094d4ea5c440229814488431Sanjeev Premi * is identified later based on the features. 257e9acb9b64d7fb16c7f69efa85c5707cffd0c7275Tony Lindgren * 258e9acb9b64d7fb16c7f69efa85c5707cffd0c7275Tony Lindgren * REVISIT: AM3505/AM3517 should have their own CHIP_IS 2594cac60180649b83e094d4ea5c440229814488431Sanjeev Premi */ 2604cac60180649b83e094d4ea5c440229814488431Sanjeev Premi omap_revision = OMAP3505_REV(rev); 261e9acb9b64d7fb16c7f69efa85c5707cffd0c7275Tony Lindgren omap_chip.oc |= CHIP_IS_OMAP3430ES3_1; 2624cac60180649b83e094d4ea5c440229814488431Sanjeev Premi break; 263edeae658b282f2d076efb3b3f39ccd8eb0c384faFelipe Balbi case 0xb891: 264edeae658b282f2d076efb3b3f39ccd8eb0c384faFelipe Balbi /* FALLTHROUGH */ 2652456a10fb3a9b8c9e970b05e6c1370201675da0aNishanth Menon default: 2662456a10fb3a9b8c9e970b05e6c1370201675da0aNishanth Menon /* Unknown default to latest silicon rev as default*/ 2672456a10fb3a9b8c9e970b05e6c1370201675da0aNishanth Menon omap_revision = OMAP3630_REV_ES1_0; 268e9acb9b64d7fb16c7f69efa85c5707cffd0c7275Tony Lindgren omap_chip.oc |= CHIP_IS_OMAP3630ES1; 269a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren } 2701dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren} 2711dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren 2725ebc0d526af51d84b3d6fbf27b69f8d44f277064Nishanth Menonstatic void __init omap4_check_revision(void) 273b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar{ 274b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar u32 idcode; 275b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar u16 hawkeye; 276b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar u8 rev; 277b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar char *rev_name = "ES1.0"; 278b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar 279b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar /* 280b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar * The IC rev detection is done with hawkeye and rev. 281b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar * Note that rev does not map directly to defined processor 282b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar * revision numbers as ES1.0 uses value 0. 283b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar */ 284b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar idcode = read_tap_reg(OMAP_TAP_IDCODE); 285b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar hawkeye = (idcode >> 12) & 0xffff; 286b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar rev = (idcode >> 28) & 0xff; 287b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar 288b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar if ((hawkeye == 0xb852) && (rev == 0x0)) { 289b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar omap_revision = OMAP4430_REV_ES1_0; 290c6a6e6e203ee9a34fa53f773272f21d48b4e3454Abhijit Pagare omap_chip.oc |= CHIP_IS_OMAP4430ES1; 291b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar pr_info("OMAP%04x %s\n", omap_rev() >> 16, rev_name); 292b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar return; 293b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar } 294b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar 295b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar pr_err("Unknown OMAP4 CPU id\n"); 296b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar} 297b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar 2988384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi#define OMAP3_SHOW_FEATURE(feat) \ 299cedf900d657e09f060b52f0598fc56aae9fbfba3Kevin Hilman if (omap3_has_ ##feat()) \ 300cedf900d657e09f060b52f0598fc56aae9fbfba3Kevin Hilman printk(#feat" "); 3018384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi 3025ebc0d526af51d84b3d6fbf27b69f8d44f277064Nishanth Menonstatic void __init omap3_cpuinfo(void) 3038384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi{ 304048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi u8 rev = GET_OMAP_REVISION(); 305048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi char cpu_name[16], cpu_rev[16]; 306048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi 307048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi /* OMAP3430 and OMAP3530 are assumed to be same. 308048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi * 309048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi * OMAP3525, OMAP3515 and OMAP3503 can be detected only based 310048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi * on available features. Upon detection, update the CPU id 311048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi * and CPU class bits. 312048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi */ 313edeae658b282f2d076efb3b3f39ccd8eb0c384faFelipe Balbi if (cpu_is_omap3630()) { 3144cac60180649b83e094d4ea5c440229814488431Sanjeev Premi strcpy(cpu_name, "OMAP3630"); 315edeae658b282f2d076efb3b3f39ccd8eb0c384faFelipe Balbi } else if (cpu_is_omap3505()) { 3164cac60180649b83e094d4ea5c440229814488431Sanjeev Premi /* 3174cac60180649b83e094d4ea5c440229814488431Sanjeev Premi * AM35xx devices 3184cac60180649b83e094d4ea5c440229814488431Sanjeev Premi */ 3194cac60180649b83e094d4ea5c440229814488431Sanjeev Premi if (omap3_has_sgx()) { 3204cac60180649b83e094d4ea5c440229814488431Sanjeev Premi omap_revision = OMAP3517_REV(rev); 3214cac60180649b83e094d4ea5c440229814488431Sanjeev Premi strcpy(cpu_name, "AM3517"); 322edeae658b282f2d076efb3b3f39ccd8eb0c384faFelipe Balbi } else { 3234cac60180649b83e094d4ea5c440229814488431Sanjeev Premi /* Already set in omap3_check_revision() */ 3244cac60180649b83e094d4ea5c440229814488431Sanjeev Premi strcpy(cpu_name, "AM3505"); 3254cac60180649b83e094d4ea5c440229814488431Sanjeev Premi } 326edeae658b282f2d076efb3b3f39ccd8eb0c384faFelipe Balbi } else if (omap3_has_iva() && omap3_has_sgx()) { 327edeae658b282f2d076efb3b3f39ccd8eb0c384faFelipe Balbi /* OMAP3430, OMAP3525, OMAP3515, OMAP3503 devices */ 3284cac60180649b83e094d4ea5c440229814488431Sanjeev Premi strcpy(cpu_name, "OMAP3430/3530"); 3290712fb39d7ac045171f26b24b896d58adec04133Sergey Lapin } else if (omap3_has_iva()) { 330048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi omap_revision = OMAP3525_REV(rev); 3314cac60180649b83e094d4ea5c440229814488431Sanjeev Premi strcpy(cpu_name, "OMAP3525"); 3320712fb39d7ac045171f26b24b896d58adec04133Sergey Lapin } else if (omap3_has_sgx()) { 333048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi omap_revision = OMAP3515_REV(rev); 3344cac60180649b83e094d4ea5c440229814488431Sanjeev Premi strcpy(cpu_name, "OMAP3515"); 335edeae658b282f2d076efb3b3f39ccd8eb0c384faFelipe Balbi } else { 336048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi omap_revision = OMAP3503_REV(rev); 3374cac60180649b83e094d4ea5c440229814488431Sanjeev Premi strcpy(cpu_name, "OMAP3503"); 338048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi } 339048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi 340048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi switch (rev) { 341048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi case OMAP_REVBITS_00: 342048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi strcpy(cpu_rev, "1.0"); 343048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi break; 344048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi case OMAP_REVBITS_10: 345048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi strcpy(cpu_rev, "2.0"); 346048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi break; 347048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi case OMAP_REVBITS_20: 348048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi strcpy(cpu_rev, "2.1"); 349048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi break; 350048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi case OMAP_REVBITS_30: 351048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi strcpy(cpu_rev, "3.0"); 352048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi break; 353048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi case OMAP_REVBITS_40: 354edeae658b282f2d076efb3b3f39ccd8eb0c384faFelipe Balbi /* FALLTHROUGH */ 355048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi default: 356048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi /* Use the latest known revision as default */ 357048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi strcpy(cpu_rev, "3.1"); 358048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi } 359048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi 360edeae658b282f2d076efb3b3f39ccd8eb0c384faFelipe Balbi /* Print verbose information */ 361cedf900d657e09f060b52f0598fc56aae9fbfba3Kevin Hilman pr_info("%s ES%s (", cpu_name, cpu_rev); 362048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi 3638384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi OMAP3_SHOW_FEATURE(l2cache); 3648384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi OMAP3_SHOW_FEATURE(iva); 3658384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi OMAP3_SHOW_FEATURE(sgx); 3668384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi OMAP3_SHOW_FEATURE(neon); 3678384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi OMAP3_SHOW_FEATURE(isp); 3687356f0b26b3176610b4de439e8c7bfe10c797347Vishwanath BS OMAP3_SHOW_FEATURE(192mhz_clk); 369cedf900d657e09f060b52f0598fc56aae9fbfba3Kevin Hilman 370cedf900d657e09f060b52f0598fc56aae9fbfba3Kevin Hilman printk(")\n"); 3718384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi} 3728384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi 373a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren/* 374a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * Try to detect the exact revision of the omap we're running on 375a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren */ 3765ba02dcab945dc0bcde7df0c5958329f34bd04aeTony Lindgrenvoid __init omap2_check_revision(void) 3775ba02dcab945dc0bcde7df0c5958329f34bd04aeTony Lindgren{ 378a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren /* 379a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * At this point we have an idea about the processor revision set 380a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * earlier with omap2_set_globals_tap(). 381a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren */ 382edeae658b282f2d076efb3b3f39ccd8eb0c384faFelipe Balbi if (cpu_is_omap24xx()) { 383a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren omap24xx_check_revision(); 384edeae658b282f2d076efb3b3f39ccd8eb0c384faFelipe Balbi } else if (cpu_is_omap34xx()) { 3858384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi omap3_check_revision(); 38605574bb27a8a46d354582e72691ff6cb40712da9Nishanth Menon omap3_check_features(); 3878384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi omap3_cpuinfo(); 388e9acb9b64d7fb16c7f69efa85c5707cffd0c7275Tony Lindgren return; 389edeae658b282f2d076efb3b3f39ccd8eb0c384faFelipe Balbi } else if (cpu_is_omap44xx()) { 390b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar omap4_check_revision(); 39144169075e6eaa87bab6a296209d8d0610879b394Santosh Shilimkar return; 392edeae658b282f2d076efb3b3f39ccd8eb0c384faFelipe Balbi } else { 393a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren pr_err("OMAP revision unknown, please fix!\n"); 394edeae658b282f2d076efb3b3f39ccd8eb0c384faFelipe Balbi } 395a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren 396a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren /* 397a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * OK, now we know the exact revision. Initialize omap_chip bits 398a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * for powerdowmain and clockdomain code. 399a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren */ 400a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren if (cpu_is_omap243x()) { 401a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren /* Currently only supports 2430ES2.1 and 2430-all */ 402a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren omap_chip.oc |= CHIP_IS_OMAP2430; 403e9acb9b64d7fb16c7f69efa85c5707cffd0c7275Tony Lindgren return; 404a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren } else if (cpu_is_omap242x()) { 405a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren /* Currently only supports 2420ES2.1.1 and 2420-all */ 406a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren omap_chip.oc |= CHIP_IS_OMAP2420; 407e9acb9b64d7fb16c7f69efa85c5707cffd0c7275Tony Lindgren return; 408a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren } 409e9acb9b64d7fb16c7f69efa85c5707cffd0c7275Tony Lindgren 410e9acb9b64d7fb16c7f69efa85c5707cffd0c7275Tony Lindgren pr_err("Uninitialized omap_chip, please fix!\n"); 4115ba02dcab945dc0bcde7df0c5958329f34bd04aeTony Lindgren} 4125ba02dcab945dc0bcde7df0c5958329f34bd04aeTony Lindgren 413a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren/* 414a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * Set up things for map_io and processor detection later on. Gets called 415a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * pretty much first thing from board init. For multi-omap, this gets 416a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * cpu_is_omapxxxx() working accurately enough for map_io. Then we'll try to 417a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * detect the exact revision later on in omap2_detect_revision() once map_io 418a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * is done. 419a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren */ 4200e564848693b06b037ec05e68c9e4b266250789eTony Lindgrenvoid __init omap2_set_globals_tap(struct omap_globals *omap2_globals) 4210e564848693b06b037ec05e68c9e4b266250789eTony Lindgren{ 42284a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunen omap_revision = omap2_globals->class; 4230e564848693b06b037ec05e68c9e4b266250789eTony Lindgren tap_base = omap2_globals->tap; 4240e564848693b06b037ec05e68c9e4b266250789eTony Lindgren 425a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren if (cpu_is_omap34xx()) 4260e564848693b06b037ec05e68c9e4b266250789eTony Lindgren tap_prod_id = 0x0210; 4270e564848693b06b037ec05e68c9e4b266250789eTony Lindgren else 4280e564848693b06b037ec05e68c9e4b266250789eTony Lindgren tap_prod_id = 0x0208; 4290e564848693b06b037ec05e68c9e4b266250789eTony Lindgren} 430