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 * 9e49c4d27ab5ffd0d8707685af9ca2866a95660e8Nishant Kamat * Copyright (C) 2009-11 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 244e65331c6bb4a777bd61a4dac0daa9fc47777b63Tony Lindgren#include "common.h" 25ce491cf85466c3377228c5a852ea627ec5136956Tony Lindgren#include <plat/cpu.h> 2672d0f1c3cdc7c456e1e357359ec6f566d0a5f264Syed Mohammed Khasim 272e130fc3d4fd5b38ee5d3c0a5c7f9fb85bce698eKan-Ru Chen#include <mach/id.h> 282e130fc3d4fd5b38ee5d3c0a5c7f9fb85bce698eKan-Ru Chen 294814ced5116e3b73dc4f63eec84999739fc8ed11Paul Walmsley#include "control.h" 304814ced5116e3b73dc4f63eec84999739fc8ed11Paul Walmsley 3184a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunenstatic unsigned int omap_revision; 3250a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremathstatic const char *cpu_rev; 33cc0170b2d929b8a31fec3da66a132822a99f550bAneesh Vu32 omap_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 418e25ad964aac0bf6b30dd013303750089f819679Kevin Hilmanint omap_type(void) 428e25ad964aac0bf6b30dd013303750089f819679Kevin Hilman{ 438e25ad964aac0bf6b30dd013303750089f819679Kevin Hilman u32 val = 0; 448e25ad964aac0bf6b30dd013303750089f819679Kevin Hilman 45edeae658b282f2d076efb3b3f39ccd8eb0c384faFelipe Balbi if (cpu_is_omap24xx()) { 468e25ad964aac0bf6b30dd013303750089f819679Kevin Hilman val = omap_ctrl_readl(OMAP24XX_CONTROL_STATUS); 47fb3cfb1ff9745e0c3aab92cc141c1b353839b0abAfzal Mohammed } else if (cpu_is_am33xx()) { 48fb3cfb1ff9745e0c3aab92cc141c1b353839b0abAfzal Mohammed val = omap_ctrl_readl(AM33XX_CONTROL_STATUS); 49edeae658b282f2d076efb3b3f39ccd8eb0c384faFelipe Balbi } else if (cpu_is_omap34xx()) { 508e25ad964aac0bf6b30dd013303750089f819679Kevin Hilman val = omap_ctrl_readl(OMAP343X_CONTROL_STATUS); 51737daa036081ad3030268f658d8dff785b3e73cdSantosh Shilimkar } else if (cpu_is_omap44xx()) { 52dcf5ef3f42fbc0c62043b4c466d679fca32f1b9fSantosh Shilimkar val = omap_ctrl_readl(OMAP4_CTRL_MODULE_CORE_STATUS); 53edeae658b282f2d076efb3b3f39ccd8eb0c384faFelipe Balbi } else { 548e25ad964aac0bf6b30dd013303750089f819679Kevin Hilman pr_err("Cannot detect omap type!\n"); 558e25ad964aac0bf6b30dd013303750089f819679Kevin Hilman goto out; 568e25ad964aac0bf6b30dd013303750089f819679Kevin Hilman } 578e25ad964aac0bf6b30dd013303750089f819679Kevin Hilman 588e25ad964aac0bf6b30dd013303750089f819679Kevin Hilman val &= OMAP2_DEVICETYPE_MASK; 598e25ad964aac0bf6b30dd013303750089f819679Kevin Hilman val >>= 8; 608e25ad964aac0bf6b30dd013303750089f819679Kevin Hilman 618e25ad964aac0bf6b30dd013303750089f819679Kevin Hilmanout: 628e25ad964aac0bf6b30dd013303750089f819679Kevin Hilman return val; 638e25ad964aac0bf6b30dd013303750089f819679Kevin Hilman} 648e25ad964aac0bf6b30dd013303750089f819679Kevin HilmanEXPORT_SYMBOL(omap_type); 658e25ad964aac0bf6b30dd013303750089f819679Kevin Hilman 668e25ad964aac0bf6b30dd013303750089f819679Kevin Hilman 67a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren/*----------------------------------------------------------------------------*/ 68097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley 69a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren#define OMAP_TAP_IDCODE 0x0204 70a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren#define OMAP_TAP_DIE_ID_0 0x0218 71a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren#define OMAP_TAP_DIE_ID_1 0x021C 72a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren#define OMAP_TAP_DIE_ID_2 0x0220 73a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren#define OMAP_TAP_DIE_ID_3 0x0224 74097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley 75b235e007831dbf57710e59cd4a120e2f374eecb9Andy Green#define OMAP_TAP_DIE_ID_44XX_0 0x0200 76b235e007831dbf57710e59cd4a120e2f374eecb9Andy Green#define OMAP_TAP_DIE_ID_44XX_1 0x0208 77b235e007831dbf57710e59cd4a120e2f374eecb9Andy Green#define OMAP_TAP_DIE_ID_44XX_2 0x020c 78b235e007831dbf57710e59cd4a120e2f374eecb9Andy Green#define OMAP_TAP_DIE_ID_44XX_3 0x0210 79b235e007831dbf57710e59cd4a120e2f374eecb9Andy Green 80a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren#define read_tap_reg(reg) __raw_readl(tap_base + (reg)) 81097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley 82a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgrenstruct omap_id { 83a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren u16 hawkeye; /* Silicon type (Hawkeye id) */ 84a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren u8 dev; /* Device type from production_id reg */ 8584a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunen u32 type; /* Combined type id copied to omap_revision */ 86a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren}; 87097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley 88a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren/* Register values to detect the OMAP version */ 89a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgrenstatic struct omap_id omap_ids[] __initdata = { 90a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren { .hawkeye = 0xb5d9, .dev = 0x0, .type = 0x24200024 }, 91a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren { .hawkeye = 0xb5d9, .dev = 0x1, .type = 0x24201024 }, 92a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren { .hawkeye = 0xb5d9, .dev = 0x2, .type = 0x24202024 }, 93a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren { .hawkeye = 0xb5d9, .dev = 0x4, .type = 0x24220024 }, 94a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren { .hawkeye = 0xb5d9, .dev = 0x8, .type = 0x24230024 }, 95a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren { .hawkeye = 0xb68a, .dev = 0x0, .type = 0x24300024 }, 96a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren}; 97097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley 98a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgrenstatic void __iomem *tap_base; 99a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgrenstatic u16 tap_prod_id; 1001dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren 1012e130fc3d4fd5b38ee5d3c0a5c7f9fb85bce698eKan-Ru Chenvoid omap_get_die_id(struct omap_die_id *odi) 1022e130fc3d4fd5b38ee5d3c0a5c7f9fb85bce698eKan-Ru Chen{ 103b235e007831dbf57710e59cd4a120e2f374eecb9Andy Green if (cpu_is_omap44xx()) { 104b235e007831dbf57710e59cd4a120e2f374eecb9Andy Green odi->id_0 = read_tap_reg(OMAP_TAP_DIE_ID_44XX_0); 105b235e007831dbf57710e59cd4a120e2f374eecb9Andy Green odi->id_1 = read_tap_reg(OMAP_TAP_DIE_ID_44XX_1); 106b235e007831dbf57710e59cd4a120e2f374eecb9Andy Green odi->id_2 = read_tap_reg(OMAP_TAP_DIE_ID_44XX_2); 107b235e007831dbf57710e59cd4a120e2f374eecb9Andy Green odi->id_3 = read_tap_reg(OMAP_TAP_DIE_ID_44XX_3); 108b235e007831dbf57710e59cd4a120e2f374eecb9Andy Green 109b235e007831dbf57710e59cd4a120e2f374eecb9Andy Green return; 110b235e007831dbf57710e59cd4a120e2f374eecb9Andy Green } 1112e130fc3d4fd5b38ee5d3c0a5c7f9fb85bce698eKan-Ru Chen odi->id_0 = read_tap_reg(OMAP_TAP_DIE_ID_0); 1122e130fc3d4fd5b38ee5d3c0a5c7f9fb85bce698eKan-Ru Chen odi->id_1 = read_tap_reg(OMAP_TAP_DIE_ID_1); 1132e130fc3d4fd5b38ee5d3c0a5c7f9fb85bce698eKan-Ru Chen odi->id_2 = read_tap_reg(OMAP_TAP_DIE_ID_2); 1142e130fc3d4fd5b38ee5d3c0a5c7f9fb85bce698eKan-Ru Chen odi->id_3 = read_tap_reg(OMAP_TAP_DIE_ID_3); 1152e130fc3d4fd5b38ee5d3c0a5c7f9fb85bce698eKan-Ru Chen} 1162e130fc3d4fd5b38ee5d3c0a5c7f9fb85bce698eKan-Ru Chen 1174de34f3572882fd0a0e655cda494577c22663215Vaibhav Hiremathvoid __init omap2xxx_check_revision(void) 1181dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren{ 1191dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren int i, j; 120a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren u32 idcode, prod_id; 1211dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren u16 hawkeye; 122a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren u8 dev_type, rev; 123c46732bbf3477f319083161bfa2fba1fadae7a3eKan-Ru Chen struct omap_die_id odi; 1241dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren 1251dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren idcode = read_tap_reg(OMAP_TAP_IDCODE); 1260e564848693b06b037ec05e68c9e4b266250789eTony Lindgren prod_id = read_tap_reg(tap_prod_id); 1271dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren hawkeye = (idcode >> 12) & 0xffff; 1281dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren rev = (idcode >> 28) & 0x0f; 1291dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren dev_type = (prod_id >> 16) & 0x0f; 130c46732bbf3477f319083161bfa2fba1fadae7a3eKan-Ru Chen omap_get_die_id(&odi); 1311dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren 132097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley pr_debug("OMAP_TAP_IDCODE 0x%08x REV %i HAWKEYE 0x%04x MANF %03x\n", 133097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley idcode, rev, hawkeye, (idcode >> 1) & 0x7ff); 134c46732bbf3477f319083161bfa2fba1fadae7a3eKan-Ru Chen pr_debug("OMAP_TAP_DIE_ID_0: 0x%08x\n", odi.id_0); 135097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley pr_debug("OMAP_TAP_DIE_ID_1: 0x%08x DEV_REV: %i\n", 136c46732bbf3477f319083161bfa2fba1fadae7a3eKan-Ru Chen odi.id_1, (odi.id_1 >> 28) & 0xf); 137c46732bbf3477f319083161bfa2fba1fadae7a3eKan-Ru Chen pr_debug("OMAP_TAP_DIE_ID_2: 0x%08x\n", odi.id_2); 138c46732bbf3477f319083161bfa2fba1fadae7a3eKan-Ru Chen pr_debug("OMAP_TAP_DIE_ID_3: 0x%08x\n", odi.id_3); 139097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley pr_debug("OMAP_TAP_PROD_ID_0: 0x%08x DEV_TYPE: %i\n", 140097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley prod_id, dev_type); 141097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley 1421dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren /* Check hawkeye ids */ 1431dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren for (i = 0; i < ARRAY_SIZE(omap_ids); i++) { 1441dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren if (hawkeye == omap_ids[i].hawkeye) 1451dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren break; 1461dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren } 1471dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren 1481dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren if (i == ARRAY_SIZE(omap_ids)) { 1491dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren printk(KERN_ERR "Unknown OMAP CPU id\n"); 1501dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren return; 1511dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren } 1521dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren 1531dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren for (j = i; j < ARRAY_SIZE(omap_ids); j++) { 1541dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren if (dev_type == omap_ids[j].dev) 1551dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren break; 1561dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren } 1571dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren 1581dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren if (j == ARRAY_SIZE(omap_ids)) { 1591dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren printk(KERN_ERR "Unknown OMAP device type. " 1601dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren "Handling it as OMAP%04x\n", 1611dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren omap_ids[i].type >> 16); 1621dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren j = i; 1631dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren } 1641dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren 16584a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunen pr_info("OMAP%04x", omap_rev() >> 16); 16684a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunen if ((omap_rev() >> 8) & 0x0f) 16784a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunen pr_info("ES%x", (omap_rev() >> 12) & 0xf); 168097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley pr_info("\n"); 169a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren} 170a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren 17150a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath#define OMAP3_SHOW_FEATURE(feat) \ 17250a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath if (omap3_has_ ##feat()) \ 17350a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath printk(#feat" "); 17450a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath 17550a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremathstatic void __init omap3_cpuinfo(void) 17650a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath{ 17750a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath const char *cpu_name; 17850a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath 17950a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath /* 18050a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath * OMAP3430 and OMAP3530 are assumed to be same. 18150a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath * 18250a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath * OMAP3525, OMAP3515 and OMAP3503 can be detected only based 18350a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath * on available features. Upon detection, update the CPU id 18450a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath * and CPU class bits. 18550a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath */ 18650a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath if (cpu_is_omap3630()) { 18750a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath cpu_name = "OMAP3630"; 18850a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath } else if (cpu_is_omap3517()) { 18950a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath /* AM35xx devices */ 19050a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath cpu_name = (omap3_has_sgx()) ? "AM3517" : "AM3505"; 19150a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath } else if (cpu_is_ti816x()) { 19250a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath cpu_name = "TI816X"; 19350a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath } else if (cpu_is_am335x()) { 19450a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath cpu_name = "AM335X"; 19550a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath } else if (cpu_is_ti814x()) { 19650a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath cpu_name = "TI814X"; 19750a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath } else if (omap3_has_iva() && omap3_has_sgx()) { 19850a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath /* OMAP3430, OMAP3525, OMAP3515, OMAP3503 devices */ 19950a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath cpu_name = "OMAP3430/3530"; 20050a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath } else if (omap3_has_iva()) { 20150a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath cpu_name = "OMAP3525"; 20250a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath } else if (omap3_has_sgx()) { 20350a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath cpu_name = "OMAP3515"; 20450a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath } else { 20550a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath cpu_name = "OMAP3503"; 20650a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath } 20750a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath 20850a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath /* Print verbose information */ 20950a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath pr_info("%s ES%s (", cpu_name, cpu_rev); 21050a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath 21150a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath OMAP3_SHOW_FEATURE(l2cache); 21250a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath OMAP3_SHOW_FEATURE(iva); 21350a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath OMAP3_SHOW_FEATURE(sgx); 21450a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath OMAP3_SHOW_FEATURE(neon); 21550a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath OMAP3_SHOW_FEATURE(isp); 21650a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath OMAP3_SHOW_FEATURE(192mhz_clk); 21750a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath 21850a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath printk(")\n"); 21950a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath} 22050a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath 2218384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi#define OMAP3_CHECK_FEATURE(status,feat) \ 2228384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi if (((status & OMAP3_ ##feat## _MASK) \ 2238384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi >> OMAP3_ ##feat## _SHIFT) != FEAT_ ##feat## _NONE) { \ 224cc0170b2d929b8a31fec3da66a132822a99f550bAneesh V omap_features |= OMAP3_HAS_ ##feat; \ 2258384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi } 2268384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi 2274de34f3572882fd0a0e655cda494577c22663215Vaibhav Hiremathvoid __init omap3xxx_check_features(void) 2288384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi{ 2298384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi u32 status; 2308384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi 231cc0170b2d929b8a31fec3da66a132822a99f550bAneesh V omap_features = 0; 2328384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi 2338384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi status = omap_ctrl_readl(OMAP3_CONTROL_OMAP_STATUS); 2348384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi 2358384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi OMAP3_CHECK_FEATURE(status, L2CACHE); 2368384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi OMAP3_CHECK_FEATURE(status, IVA); 2378384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi OMAP3_CHECK_FEATURE(status, SGX); 2388384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi OMAP3_CHECK_FEATURE(status, NEON); 2398384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi OMAP3_CHECK_FEATURE(status, ISP); 2407356f0b26b3176610b4de439e8c7bfe10c797347Vishwanath BS if (cpu_is_omap3630()) 241cc0170b2d929b8a31fec3da66a132822a99f550bAneesh V omap_features |= OMAP3_HAS_192MHZ_CLK; 242b02b917211d50ad5dc13e49c933ef916b10e0d00Paul Walmsley if (cpu_is_omap3430() || cpu_is_omap3630()) 243cc0170b2d929b8a31fec3da66a132822a99f550bAneesh V omap_features |= OMAP3_HAS_IO_WAKEUP; 244b02b917211d50ad5dc13e49c933ef916b10e0d00Paul Walmsley if (cpu_is_omap3630() || omap_rev() == OMAP3430_REV_ES3_1 || 245b02b917211d50ad5dc13e49c933ef916b10e0d00Paul Walmsley omap_rev() == OMAP3430_REV_ES3_1_2) 246b02b917211d50ad5dc13e49c933ef916b10e0d00Paul Walmsley omap_features |= OMAP3_HAS_IO_CHAIN_CTRL; 2478384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi 248cc0170b2d929b8a31fec3da66a132822a99f550bAneesh V omap_features |= OMAP3_HAS_SDRC; 24901001712c96f82e6317b1e09729d8fc4bcc66957Hemant Pedanekar 2508384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi /* 2518384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi * TODO: Get additional info (where applicable) 2528384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi * e.g. Size of L2 cache. 2538384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi */ 2544de34f3572882fd0a0e655cda494577c22663215Vaibhav Hiremath 2554de34f3572882fd0a0e655cda494577c22663215Vaibhav Hiremath omap3_cpuinfo(); 2568384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi} 2578384ce071365244332ea05c81112bfffcf48be87Sanjeev Premi 2584de34f3572882fd0a0e655cda494577c22663215Vaibhav Hiremathvoid __init omap4xxx_check_features(void) 259cc0170b2d929b8a31fec3da66a132822a99f550bAneesh V{ 260cc0170b2d929b8a31fec3da66a132822a99f550bAneesh V u32 si_type; 261cc0170b2d929b8a31fec3da66a132822a99f550bAneesh V 262cc0170b2d929b8a31fec3da66a132822a99f550bAneesh V if (cpu_is_omap443x()) 263cc0170b2d929b8a31fec3da66a132822a99f550bAneesh V omap_features |= OMAP4_HAS_MPU_1GHZ; 264cc0170b2d929b8a31fec3da66a132822a99f550bAneesh V 265cc0170b2d929b8a31fec3da66a132822a99f550bAneesh V 266cc0170b2d929b8a31fec3da66a132822a99f550bAneesh V if (cpu_is_omap446x()) { 267cc0170b2d929b8a31fec3da66a132822a99f550bAneesh V si_type = 268cc0170b2d929b8a31fec3da66a132822a99f550bAneesh V read_tap_reg(OMAP4_CTRL_MODULE_CORE_STD_FUSE_PROD_ID_1); 269cc0170b2d929b8a31fec3da66a132822a99f550bAneesh V switch ((si_type & (3 << 16)) >> 16) { 270cc0170b2d929b8a31fec3da66a132822a99f550bAneesh V case 2: 271cc0170b2d929b8a31fec3da66a132822a99f550bAneesh V /* High performance device */ 272cc0170b2d929b8a31fec3da66a132822a99f550bAneesh V omap_features |= OMAP4_HAS_MPU_1_5GHZ; 273cc0170b2d929b8a31fec3da66a132822a99f550bAneesh V break; 274cc0170b2d929b8a31fec3da66a132822a99f550bAneesh V case 1: 275cc0170b2d929b8a31fec3da66a132822a99f550bAneesh V default: 276cc0170b2d929b8a31fec3da66a132822a99f550bAneesh V /* Standard device */ 277cc0170b2d929b8a31fec3da66a132822a99f550bAneesh V omap_features |= OMAP4_HAS_MPU_1_2GHZ; 278cc0170b2d929b8a31fec3da66a132822a99f550bAneesh V break; 279cc0170b2d929b8a31fec3da66a132822a99f550bAneesh V } 280cc0170b2d929b8a31fec3da66a132822a99f550bAneesh V } 281cc0170b2d929b8a31fec3da66a132822a99f550bAneesh V} 282cc0170b2d929b8a31fec3da66a132822a99f550bAneesh V 2834de34f3572882fd0a0e655cda494577c22663215Vaibhav Hiremathvoid __init ti81xx_check_features(void) 28401001712c96f82e6317b1e09729d8fc4bcc66957Hemant Pedanekar{ 285cc0170b2d929b8a31fec3da66a132822a99f550bAneesh V omap_features = OMAP3_HAS_NEON; 2864de34f3572882fd0a0e655cda494577c22663215Vaibhav Hiremath omap3_cpuinfo(); 28701001712c96f82e6317b1e09729d8fc4bcc66957Hemant Pedanekar} 28801001712c96f82e6317b1e09729d8fc4bcc66957Hemant Pedanekar 2894de34f3572882fd0a0e655cda494577c22663215Vaibhav Hiremathvoid __init omap3xxx_check_revision(void) 290a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren{ 291a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren u32 cpuid, idcode; 292a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren u16 hawkeye; 293a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren u8 rev; 294a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren 295a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren /* 296a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * We cannot access revision registers on ES1.0. 297a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * If the processor type is Cortex-A8 and the revision is 0x0 298a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * it means its Cortex r0p0 which is 3430 ES1.0. 299a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren */ 300a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren cpuid = read_cpuid(CPUID_ID); 301a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren if ((((cpuid >> 4) & 0xfff) == 0xc08) && ((cpuid & 0xf) == 0x0)) { 30284a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunen omap_revision = OMAP3430_REV_ES1_0; 30350a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath cpu_rev = "1.0"; 304048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi return; 305a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren } 306a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren 307a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren /* 308a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * Detection for 34xx ES2.0 and above can be done with just 309a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * hawkeye and rev. See TRM 1.5.2 Device Identification. 310a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * Note that rev does not map directly to our defined processor 311a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * revision numbers as ES1.0 uses value 0. 312a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren */ 313a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren idcode = read_tap_reg(OMAP_TAP_IDCODE); 314a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren hawkeye = (idcode >> 12) & 0xffff; 315a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren rev = (idcode >> 28) & 0xff; 316097c584cd48844d9ef8402bdc6ab49e7e2135f31Paul Walmsley 3172456a10fb3a9b8c9e970b05e6c1370201675da0aNishanth Menon switch (hawkeye) { 3182456a10fb3a9b8c9e970b05e6c1370201675da0aNishanth Menon case 0xb7ae: 3192456a10fb3a9b8c9e970b05e6c1370201675da0aNishanth Menon /* Handle 34xx/35xx devices */ 320a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren switch (rev) { 321048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi case 0: /* Take care of early samples */ 322048f4bd7607eb714d4831f90dea6fd27eac9e494Sanjeev Premi case 1: 32384a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunen omap_revision = OMAP3430_REV_ES2_0; 32450a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath cpu_rev = "2.0"; 325a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren break; 326a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren case 2: 32784a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunen omap_revision = OMAP3430_REV_ES2_1; 32850a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath cpu_rev = "2.1"; 329a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren break; 330a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren case 3: 33184a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunen omap_revision = OMAP3430_REV_ES3_0; 33250a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath cpu_rev = "3.0"; 333a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren break; 334187e688d237a6df11a2d32e8ac480b6d1fbd40b9Tony Lindgren case 4: 335e9acb9b64d7fb16c7f69efa85c5707cffd0c7275Tony Lindgren omap_revision = OMAP3430_REV_ES3_1; 33650a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath cpu_rev = "3.1"; 337e9acb9b64d7fb16c7f69efa85c5707cffd0c7275Tony Lindgren break; 338e9acb9b64d7fb16c7f69efa85c5707cffd0c7275Tony Lindgren case 7: 339edeae658b282f2d076efb3b3f39ccd8eb0c384faFelipe Balbi /* FALLTHROUGH */ 340a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren default: 341a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren /* Use the latest known revision as default */ 342e9acb9b64d7fb16c7f69efa85c5707cffd0c7275Tony Lindgren omap_revision = OMAP3430_REV_ES3_1_2; 34350a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath cpu_rev = "3.1.2"; 344a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren } 3452456a10fb3a9b8c9e970b05e6c1370201675da0aNishanth Menon break; 3464cac60180649b83e094d4ea5c440229814488431Sanjeev Premi case 0xb868: 3471f1b0353aa3ba5dfc35641452484ea4158ee3c9cPaul Walmsley /* 3481f1b0353aa3ba5dfc35641452484ea4158ee3c9cPaul Walmsley * Handle OMAP/AM 3505/3517 devices 3494cac60180649b83e094d4ea5c440229814488431Sanjeev Premi * 3501f1b0353aa3ba5dfc35641452484ea4158ee3c9cPaul Walmsley * Set the device to be OMAP3517 here. Actual device 3514cac60180649b83e094d4ea5c440229814488431Sanjeev Premi * is identified later based on the features. 3524cac60180649b83e094d4ea5c440229814488431Sanjeev Premi */ 3539ed2ba7aa78ee35dda2cfc9a49b5cd4b2ae88500Paul Walmsley switch (rev) { 3549ed2ba7aa78ee35dda2cfc9a49b5cd4b2ae88500Paul Walmsley case 0: 3559ed2ba7aa78ee35dda2cfc9a49b5cd4b2ae88500Paul Walmsley omap_revision = OMAP3517_REV_ES1_0; 35650a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath cpu_rev = "1.0"; 3579ed2ba7aa78ee35dda2cfc9a49b5cd4b2ae88500Paul Walmsley break; 3589ed2ba7aa78ee35dda2cfc9a49b5cd4b2ae88500Paul Walmsley case 1: 3599ed2ba7aa78ee35dda2cfc9a49b5cd4b2ae88500Paul Walmsley /* FALLTHROUGH */ 3609ed2ba7aa78ee35dda2cfc9a49b5cd4b2ae88500Paul Walmsley default: 3619ed2ba7aa78ee35dda2cfc9a49b5cd4b2ae88500Paul Walmsley omap_revision = OMAP3517_REV_ES1_1; 36250a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath cpu_rev = "1.1"; 3639ed2ba7aa78ee35dda2cfc9a49b5cd4b2ae88500Paul Walmsley } 3644cac60180649b83e094d4ea5c440229814488431Sanjeev Premi break; 365edeae658b282f2d076efb3b3f39ccd8eb0c384faFelipe Balbi case 0xb891: 366b0a1a6ce0597662c06f970643da60b8ebb5cdd1cAnand Gadiyar /* Handle 36xx devices */ 367b0a1a6ce0597662c06f970643da60b8ebb5cdd1cAnand Gadiyar 368b0a1a6ce0597662c06f970643da60b8ebb5cdd1cAnand Gadiyar switch(rev) { 369b0a1a6ce0597662c06f970643da60b8ebb5cdd1cAnand Gadiyar case 0: /* Take care of early samples */ 370b0a1a6ce0597662c06f970643da60b8ebb5cdd1cAnand Gadiyar omap_revision = OMAP3630_REV_ES1_0; 37150a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath cpu_rev = "1.0"; 372b0a1a6ce0597662c06f970643da60b8ebb5cdd1cAnand Gadiyar break; 373b0a1a6ce0597662c06f970643da60b8ebb5cdd1cAnand Gadiyar case 1: 374b0a1a6ce0597662c06f970643da60b8ebb5cdd1cAnand Gadiyar omap_revision = OMAP3630_REV_ES1_1; 37550a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath cpu_rev = "1.1"; 376b0a1a6ce0597662c06f970643da60b8ebb5cdd1cAnand Gadiyar break; 377b0a1a6ce0597662c06f970643da60b8ebb5cdd1cAnand Gadiyar case 2: 37851ec811a292eba77c1df00d9d6416526b1ce7972Paul Walmsley /* FALLTHROUGH */ 379b0a1a6ce0597662c06f970643da60b8ebb5cdd1cAnand Gadiyar default: 38051ec811a292eba77c1df00d9d6416526b1ce7972Paul Walmsley omap_revision = OMAP3630_REV_ES1_2; 38150a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath cpu_rev = "1.2"; 382b0a1a6ce0597662c06f970643da60b8ebb5cdd1cAnand Gadiyar } 38377c0870ca515667b77750b397008d68a17fad9d8Nishanth Menon break; 38401001712c96f82e6317b1e09729d8fc4bcc66957Hemant Pedanekar case 0xb81e: 38501001712c96f82e6317b1e09729d8fc4bcc66957Hemant Pedanekar switch (rev) { 38601001712c96f82e6317b1e09729d8fc4bcc66957Hemant Pedanekar case 0: 38701001712c96f82e6317b1e09729d8fc4bcc66957Hemant Pedanekar omap_revision = TI8168_REV_ES1_0; 38850a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath cpu_rev = "1.0"; 38901001712c96f82e6317b1e09729d8fc4bcc66957Hemant Pedanekar break; 39001001712c96f82e6317b1e09729d8fc4bcc66957Hemant Pedanekar case 1: 39151ec811a292eba77c1df00d9d6416526b1ce7972Paul Walmsley /* FALLTHROUGH */ 39201001712c96f82e6317b1e09729d8fc4bcc66957Hemant Pedanekar default: 39351ec811a292eba77c1df00d9d6416526b1ce7972Paul Walmsley omap_revision = TI8168_REV_ES1_1; 39450a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath cpu_rev = "1.1"; 3953b32b7d62e9800579e591553875e5ff60be15546Paul Walmsley break; 39601001712c96f82e6317b1e09729d8fc4bcc66957Hemant Pedanekar } 39701001712c96f82e6317b1e09729d8fc4bcc66957Hemant Pedanekar break; 3981e6cb146c39cdef1ffc340c13637fce2ba5575beAfzal Mohammed case 0xb944: 3991e6cb146c39cdef1ffc340c13637fce2ba5575beAfzal Mohammed omap_revision = AM335X_REV_ES1_0; 40050a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath cpu_rev = "1.0"; 401c2d1355476b555b54c26d20962211fcf06b8c55fVaibhav Hiremath break; 4024390f5b2cb1f568c1d4b3e5bbf57158f6809627aHemant Pedanekar case 0xb8f2: 4034390f5b2cb1f568c1d4b3e5bbf57158f6809627aHemant Pedanekar switch (rev) { 4044390f5b2cb1f568c1d4b3e5bbf57158f6809627aHemant Pedanekar case 0: 4054390f5b2cb1f568c1d4b3e5bbf57158f6809627aHemant Pedanekar /* FALLTHROUGH */ 4064390f5b2cb1f568c1d4b3e5bbf57158f6809627aHemant Pedanekar case 1: 4074390f5b2cb1f568c1d4b3e5bbf57158f6809627aHemant Pedanekar omap_revision = TI8148_REV_ES1_0; 40850a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath cpu_rev = "1.0"; 4094390f5b2cb1f568c1d4b3e5bbf57158f6809627aHemant Pedanekar break; 4104390f5b2cb1f568c1d4b3e5bbf57158f6809627aHemant Pedanekar case 2: 4114390f5b2cb1f568c1d4b3e5bbf57158f6809627aHemant Pedanekar omap_revision = TI8148_REV_ES2_0; 41250a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath cpu_rev = "2.0"; 4134390f5b2cb1f568c1d4b3e5bbf57158f6809627aHemant Pedanekar break; 4144390f5b2cb1f568c1d4b3e5bbf57158f6809627aHemant Pedanekar case 3: 4154390f5b2cb1f568c1d4b3e5bbf57158f6809627aHemant Pedanekar /* FALLTHROUGH */ 4164390f5b2cb1f568c1d4b3e5bbf57158f6809627aHemant Pedanekar default: 4174390f5b2cb1f568c1d4b3e5bbf57158f6809627aHemant Pedanekar omap_revision = TI8148_REV_ES2_1; 41850a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath cpu_rev = "2.1"; 4194390f5b2cb1f568c1d4b3e5bbf57158f6809627aHemant Pedanekar break; 4204390f5b2cb1f568c1d4b3e5bbf57158f6809627aHemant Pedanekar } 4211e6cb146c39cdef1ffc340c13637fce2ba5575beAfzal Mohammed break; 4222456a10fb3a9b8c9e970b05e6c1370201675da0aNishanth Menon default: 42351ec811a292eba77c1df00d9d6416526b1ce7972Paul Walmsley /* Unknown default to latest silicon rev as default */ 4243b32b7d62e9800579e591553875e5ff60be15546Paul Walmsley omap_revision = OMAP3630_REV_ES1_2; 42550a01e6440020877c2f71bc5ac4d818d9b8f31c1Vaibhav Hiremath cpu_rev = "1.2"; 42651ec811a292eba77c1df00d9d6416526b1ce7972Paul Walmsley pr_warn("Warning: unknown chip type; assuming OMAP3630ES1.2\n"); 427a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren } 4281dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren} 4291dbae815a724303b46ab4663b5fc23c13e9d9690Tony Lindgren 4304de34f3572882fd0a0e655cda494577c22663215Vaibhav Hiremathvoid __init omap4xxx_check_revision(void) 431b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar{ 432b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar u32 idcode; 433b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar u16 hawkeye; 434b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar u8 rev; 435b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar 436b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar /* 437b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar * The IC rev detection is done with hawkeye and rev. 438b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar * Note that rev does not map directly to defined processor 439b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar * revision numbers as ES1.0 uses value 0. 440b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar */ 441b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar idcode = read_tap_reg(OMAP_TAP_IDCODE); 442b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar hawkeye = (idcode >> 12) & 0xffff; 443e49c4d27ab5ffd0d8707685af9ca2866a95660e8Nishant Kamat rev = (idcode >> 28) & 0xf; 444b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar 445ed6be0bafc7781634a197ddd85b575ffcd7736b6Santosh Shilimkar /* 446fa54dccddc8f4a53c223d53c56c54c61ea7d2623Aneesh V * Few initial 4430 ES2.0 samples IDCODE is same as ES1.0 447ed6be0bafc7781634a197ddd85b575ffcd7736b6Santosh Shilimkar * Use ARM register to detect the correct ES version 448ed6be0bafc7781634a197ddd85b575ffcd7736b6Santosh Shilimkar */ 449ec023e46f7e86acb04fef5bdd1e9465f5fc39894Leonid Iziumtsev if (!rev && (hawkeye != 0xb94e) && (hawkeye != 0xb975)) { 450ed6be0bafc7781634a197ddd85b575ffcd7736b6Santosh Shilimkar idcode = read_cpuid(CPUID_ID); 451ed6be0bafc7781634a197ddd85b575ffcd7736b6Santosh Shilimkar rev = (idcode & 0xf) - 1; 452ed6be0bafc7781634a197ddd85b575ffcd7736b6Santosh Shilimkar } 453ed6be0bafc7781634a197ddd85b575ffcd7736b6Santosh Shilimkar 454ed6be0bafc7781634a197ddd85b575ffcd7736b6Santosh Shilimkar switch (hawkeye) { 455ed6be0bafc7781634a197ddd85b575ffcd7736b6Santosh Shilimkar case 0xb852: 456ed6be0bafc7781634a197ddd85b575ffcd7736b6Santosh Shilimkar switch (rev) { 457ed6be0bafc7781634a197ddd85b575ffcd7736b6Santosh Shilimkar case 0: 458ed6be0bafc7781634a197ddd85b575ffcd7736b6Santosh Shilimkar omap_revision = OMAP4430_REV_ES1_0; 459ed6be0bafc7781634a197ddd85b575ffcd7736b6Santosh Shilimkar break; 460ed6be0bafc7781634a197ddd85b575ffcd7736b6Santosh Shilimkar case 1: 461e49c4d27ab5ffd0d8707685af9ca2866a95660e8Nishant Kamat default: 462ed6be0bafc7781634a197ddd85b575ffcd7736b6Santosh Shilimkar omap_revision = OMAP4430_REV_ES2_0; 463e49c4d27ab5ffd0d8707685af9ca2866a95660e8Nishant Kamat } 464e49c4d27ab5ffd0d8707685af9ca2866a95660e8Nishant Kamat break; 465e49c4d27ab5ffd0d8707685af9ca2866a95660e8Nishant Kamat case 0xb95c: 466e49c4d27ab5ffd0d8707685af9ca2866a95660e8Nishant Kamat switch (rev) { 467e49c4d27ab5ffd0d8707685af9ca2866a95660e8Nishant Kamat case 3: 468e49c4d27ab5ffd0d8707685af9ca2866a95660e8Nishant Kamat omap_revision = OMAP4430_REV_ES2_1; 469ed6be0bafc7781634a197ddd85b575ffcd7736b6Santosh Shilimkar break; 470e49c4d27ab5ffd0d8707685af9ca2866a95660e8Nishant Kamat case 4: 471e49c4d27ab5ffd0d8707685af9ca2866a95660e8Nishant Kamat omap_revision = OMAP4430_REV_ES2_2; 47255035c1524b5b48ac7d267167c4895f7831897adDavid Anders break; 47355035c1524b5b48ac7d267167c4895f7831897adDavid Anders case 6: 47455035c1524b5b48ac7d267167c4895f7831897adDavid Anders default: 47555035c1524b5b48ac7d267167c4895f7831897adDavid Anders omap_revision = OMAP4430_REV_ES2_3; 476e49c4d27ab5ffd0d8707685af9ca2866a95660e8Nishant Kamat } 477e49c4d27ab5ffd0d8707685af9ca2866a95660e8Nishant Kamat break; 478fa54dccddc8f4a53c223d53c56c54c61ea7d2623Aneesh V case 0xb94e: 479fa54dccddc8f4a53c223d53c56c54c61ea7d2623Aneesh V switch (rev) { 480fa54dccddc8f4a53c223d53c56c54c61ea7d2623Aneesh V case 0: 481fa54dccddc8f4a53c223d53c56c54c61ea7d2623Aneesh V default: 482fa54dccddc8f4a53c223d53c56c54c61ea7d2623Aneesh V omap_revision = OMAP4460_REV_ES1_0; 483fa54dccddc8f4a53c223d53c56c54c61ea7d2623Aneesh V break; 484fa54dccddc8f4a53c223d53c56c54c61ea7d2623Aneesh V } 485fa54dccddc8f4a53c223d53c56c54c61ea7d2623Aneesh V break; 486ec023e46f7e86acb04fef5bdd1e9465f5fc39894Leonid Iziumtsev case 0xb975: 487ec023e46f7e86acb04fef5bdd1e9465f5fc39894Leonid Iziumtsev switch (rev) { 488ec023e46f7e86acb04fef5bdd1e9465f5fc39894Leonid Iziumtsev case 0: 489ec023e46f7e86acb04fef5bdd1e9465f5fc39894Leonid Iziumtsev default: 490ec023e46f7e86acb04fef5bdd1e9465f5fc39894Leonid Iziumtsev omap_revision = OMAP4470_REV_ES1_0; 491ec023e46f7e86acb04fef5bdd1e9465f5fc39894Leonid Iziumtsev break; 492ec023e46f7e86acb04fef5bdd1e9465f5fc39894Leonid Iziumtsev } 493ec023e46f7e86acb04fef5bdd1e9465f5fc39894Leonid Iziumtsev break; 494ed6be0bafc7781634a197ddd85b575ffcd7736b6Santosh Shilimkar default: 495e49c4d27ab5ffd0d8707685af9ca2866a95660e8Nishant Kamat /* Unknown default to latest silicon rev as default */ 49655035c1524b5b48ac7d267167c4895f7831897adDavid Anders omap_revision = OMAP4430_REV_ES2_3; 497b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar } 498b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar 499e49c4d27ab5ffd0d8707685af9ca2866a95660e8Nishant Kamat pr_info("OMAP%04x ES%d.%d\n", omap_rev() >> 16, 500e49c4d27ab5ffd0d8707685af9ca2866a95660e8Nishant Kamat ((omap_rev() >> 12) & 0xf), ((omap_rev() >> 8) & 0xf)); 501b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar} 502b570e0ec25b371c2e01a1a558e852e2618526817Santosh Shilimkar 503a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren/* 504a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * Set up things for map_io and processor detection later on. Gets called 505a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * pretty much first thing from board init. For multi-omap, this gets 506a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * cpu_is_omapxxxx() working accurately enough for map_io. Then we'll try to 507a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * detect the exact revision later on in omap2_detect_revision() once map_io 508a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren * is done. 509a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren */ 5100e564848693b06b037ec05e68c9e4b266250789eTony Lindgrenvoid __init omap2_set_globals_tap(struct omap_globals *omap2_globals) 5110e564848693b06b037ec05e68c9e4b266250789eTony Lindgren{ 51284a34344ea1f2f313d84a9fb4cb685b65a6ec26dLauri Leukkunen omap_revision = omap2_globals->class; 5130e564848693b06b037ec05e68c9e4b266250789eTony Lindgren tap_base = omap2_globals->tap; 5140e564848693b06b037ec05e68c9e4b266250789eTony Lindgren 515a88231430384f49bebf8a6ec607a9eb4f2254e34Tony Lindgren if (cpu_is_omap34xx()) 5160e564848693b06b037ec05e68c9e4b266250789eTony Lindgren tap_prod_id = 0x0210; 5170e564848693b06b037ec05e68c9e4b266250789eTony Lindgren else 5180e564848693b06b037ec05e68c9e4b266250789eTony Lindgren tap_prod_id = 0x0208; 5190e564848693b06b037ec05e68c9e4b266250789eTony Lindgren} 520