From patchwork Tue Mar 15 11:59:56 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Asad Akbar X-Patchwork-Id: 86970 X-Patchwork-Delegate: s-paulraj@ti.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from theia.denx.de (theia.denx.de [85.214.87.163]) by ozlabs.org (Postfix) with ESMTP id 9BDAEB6FA4 for ; Tue, 15 Mar 2011 23:05:47 +1100 (EST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 2BCB3280B3; Tue, 15 Mar 2011 13:05:46 +0100 (CET) X-Virus-Scanned: Debian amavisd-new at theia.denx.de Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id jaGY470qOt+T; Tue, 15 Mar 2011 13:05:45 +0100 (CET) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id D3339280AC; Tue, 15 Mar 2011 13:05:43 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id B1133280AC for ; Tue, 15 Mar 2011 13:05:41 +0100 (CET) X-Virus-Scanned: Debian amavisd-new at theia.denx.de Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id W2UH3MMAoNeF for ; Tue, 15 Mar 2011 13:05:40 +0100 (CET) X-policyd-weight: NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 NOT_IN_BL_NJABL=-1.5 (only DNSBL check requested) Received: from mail-vw0-f44.google.com (mail-vw0-f44.google.com [209.85.212.44]) by theia.denx.de (Postfix) with ESMTPS id 152A6280A8 for ; Tue, 15 Mar 2011 13:05:37 +0100 (CET) Received: by vws12 with SMTP id 12so428837vws.3 for ; Tue, 15 Mar 2011 05:05:36 -0700 (PDT) Received: by 10.220.202.133 with SMTP id fe5mr3529940vcb.277.1300190426375; Tue, 15 Mar 2011 05:00:26 -0700 (PDT) MIME-Version: 1.0 Received: by 10.220.191.201 with HTTP; Tue, 15 Mar 2011 04:59:56 -0700 (PDT) From: Asad Akbar Date: Tue, 15 Mar 2011 16:59:56 +0500 Message-ID: To: u-boot@lists.denx.de X-Content-Filtered-By: Mailman/MimeDel 2.1.9 Cc: steve@sakoman.com Subject: [U-Boot] [PATCH] Updated code to print OMAP4 cpu info. X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.9 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Mime-version: 1.0 Sender: u-boot-bounces@lists.denx.de Errors-To: u-boot-bounces@lists.denx.de --- arch/arm/cpu/armv7/omap4/sys_ info.c | 150 +++++++++++++++++++++++++++++++++-- 1 files changed, 144 insertions(+), 6 deletions(-) } /* @@ -38,7 +67,7 @@ u32 get_device_type(void) */ u32 get_board_rev(void) { - return 0x20; + return 0x20; } /* @@ -46,8 +75,117 @@ u32 get_board_rev(void) */ int print_cpuinfo(void) { + u32 val32; + u32 id[4] = { 0 }; + + /* Reader ID_CODE register. */ + val32 = __raw_readl (DEVICE_IDENTIFICATION_BASE + ID_CODE); + + /* Make sure that it is as per documentation. */ + if (val32 & 0x1) + { + /** + * Get silicon type. + */ + if (val32 == 0x0B85202F) + { + printf("Silicon Type: OMAP4430 ES1.0\n"); + } + else if (val32 == 0x1B85202F) + { + printf("Silicon Type: OMAP4430 ES2.0\n"); + } + else if (val32 == 0x3B95C02F) + { + printf("Silicon Type: OMAP4430 ES2.1\n"); + } + else + { + printf("Silicon Type: Unknown\n"); + } + + /** + * Get version. + */ + u8 version = (val32 >> 28) & 0xFF; + + switch(version) + { + case 0: + printf("Version: OMAP4430 ES1.0\n"); + break; + + case 1: + printf("Version: OMAP4430 ES2.0\n"); + break; + + case 3: + printf("Version: OMAP4430 ES2.1\n"); + break; + + default: + printf("Version: Unknown\n"); + break; + } + + /** + * Get Hawkeye + */ + u16 hawkeye = (val32 >> 12) & 0xFFFFF; + + if (hawkeye == 0xB852) + { + printf("Hawkeye: OMAP4430 ES1.0 and ES2.0\n"); + } + else if (hawkeye == 0xB95C) + { + printf("Hawkeye: OMAP4430 ES2.1\n"); + } + + /** + * Get TI IDM. + */ + printf("Manufacturer Identity (TI): 0x%X\n", (val32 >> 1)); + } + else + { + printf("%s\n", "omap_silicon_revision: TI_IDM bit is not found."); + } + + /* Get device type. */ + u8 device_type = get_device_type(); + + switch (device_type) + { + case DEVICE_TYPE_TST: + printf("Device Type: %s\n", "TST"); + break; + case DEVICE_TYPE_EMU: + printf("Device Type: %s\n", "EMU"); + break; + case DEVICE_TYPE_HS: + printf("Device Type: %s\n", "HS"); + break; + case DEVICE_TYPE_GP: + printf("Device Type: %s\n", "GP"); + break; + default: + printf("Device Type: %s\n", "???"); + } + + /* Get Die-id */ + id[0] = __raw_readl(DEVICE_IDENTIFICATION_BASE + DIE_ID_0); + id[1] = __raw_readl(DEVICE_IDENTIFICATION_BASE + DIE_ID_1); + id[2] = __raw_readl(DEVICE_IDENTIFICATION_BASE + DIE_ID_2); + id[3] = __raw_readl(DEVICE_IDENTIFICATION_BASE + DIE_ID_3); + + printf("Die-ID: %08X-%08X-%08X-%08X\n", id[3], id[2], id[1], id[0]); + + /* Get prod-id */ + id[0] = __raw_readl(DEVICE_IDENTIFICATION_BASE + PROD_ID_0); + id[1] = __raw_readl(DEVICE_IDENTIFICATION_BASE + PROD_ID_1); - puts("CPU : OMAP4430\n"); + printf("Prod-id: %08X-%08X\n", id[1], id[0]); - return 0; + return 0; } Signed-off-by: line missing. --- 1.7.4.1 diff --git a/arch/arm/cpu/armv7/omap4/sys_info.c b/arch/arm/cpu/armv7/omap4/sys_info.c index b9e5765..14145fb 100644 --- a/arch/arm/cpu/armv7/omap4/sys_info.c +++ b/arch/arm/cpu/armv7/omap4/sys_info.c @@ -3,8 +3,9 @@ * Texas Instruments, * * Author : - * Aneesh V - * Steve Sakoman + * Aneesh V + * Steve Sakoman + * Asad Akbar * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -25,12 +26,40 @@ #include #include +/** + * Registers addresses. + */ +#define DEVICE_IDENTIFICATION_BASE 0x4A002000 +#define DIE_ID_0 0x200 +#define ID_CODE 0x204 +#define DIE_ID_1 0x208 +#define DIE_ID_2 0x20C +#define DIE_ID_3 0x210 +#define PROD_ID_0 0x214 +#define PROD_ID_1 0x218 + +/** + * Device types + */ +#define DEVICE_TYPE_GP 0xF0 +#define DEVICE_TYPE_HS 0xF1 /* TODO: It has to be updated. */ +#define DEVICE_TYPE_EMU 0xF2 /* TODO: It has to be updated. */ +#define DEVICE_TYPE_TST 0xF3 /* TODO: It has to be updated. */ + /* * get_device_type(): tell if GP/HS/EMU/TST */ u32 get_device_type(void) { - return 0; + u32 val32; + + /* Reader PROD_ID_0 register. */ + val32 = __raw_readl (DEVICE_IDENTIFICATION_BASE + PROD_ID_0); + + /* Get only device type bits. */ + val32 &= 0xFF; + + return (val32);