forked from Minki/linux
9ab4650f71
Instead of reading the silicon version from ROM, we should read the SREV register from the IIM. Freescale has dropped all support for MX51 REV1.0, only MX51 REV 2.0 and 3.0 are valid. Signed-off-by: Dinh Nguyen <Dinh.Nguyen@freescale.com> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
77 lines
1.9 KiB
C
77 lines
1.9 KiB
C
/*
|
|
* Copyright 2007 Freescale Semiconductor, Inc. All Rights Reserved.
|
|
* Copyright 2008 Juergen Beisert, kernel@pengutronix.de
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version.
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
|
* MA 02110-1301, USA.
|
|
*/
|
|
|
|
/*
|
|
* i.MX27 specific CPU detection code
|
|
*/
|
|
|
|
#include <linux/io.h>
|
|
#include <linux/module.h>
|
|
|
|
#include <mach/hardware.h>
|
|
|
|
static int cpu_silicon_rev = -1;
|
|
static int cpu_partnumber;
|
|
|
|
#define SYS_CHIP_ID 0x00 /* The offset of CHIP ID register */
|
|
|
|
static void query_silicon_parameter(void)
|
|
{
|
|
u32 val;
|
|
/*
|
|
* now we have access to the IO registers. As we need
|
|
* the silicon revision very early we read it here to
|
|
* avoid any further hooks
|
|
*/
|
|
val = __raw_readl(MX27_IO_ADDRESS(MX27_SYSCTRL_BASE_ADDR
|
|
+ SYS_CHIP_ID));
|
|
|
|
switch (val >> 28) {
|
|
case 0:
|
|
cpu_silicon_rev = IMX_CHIP_REVISION_1_0;
|
|
break;
|
|
case 1:
|
|
cpu_silicon_rev = IMX_CHIP_REVISION_2_0;
|
|
break;
|
|
case 2:
|
|
cpu_silicon_rev = IMX_CHIP_REVISION_2_1;
|
|
break;
|
|
default:
|
|
cpu_silicon_rev = IMX_CHIP_REVISION_UNKNOWN;
|
|
}
|
|
cpu_partnumber = (int)((val >> 12) & 0xFFFF);
|
|
}
|
|
|
|
/*
|
|
* Returns:
|
|
* the silicon revision of the cpu
|
|
* -EINVAL - not a mx27
|
|
*/
|
|
int mx27_revision(void)
|
|
{
|
|
if (cpu_silicon_rev == -1)
|
|
query_silicon_parameter();
|
|
|
|
if (cpu_partnumber != 0x8821)
|
|
return -EINVAL;
|
|
|
|
return cpu_silicon_rev;
|
|
}
|
|
EXPORT_SYMBOL(mx27_revision);
|