OMAP3: Move get_cpu_id() function to not duplicate code
[x-loader:ack3000s-x-loader.git] / cpu / omap3 / sys_info.c
1 /*
2  * See file CREDITS for list of people who contributed to this
3  * project.
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU General Public License as
7  * published by the Free Software Foundation; either version 2 of
8  * the License, or (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR /PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
18  * MA 02111-1307 USA
19  */
20
21 #include <common.h>
22 #include <asm/io.h>
23 #include <asm/arch/bits.h>
24 #include <asm/arch/sys_proto.h>
25 #include <asm/arch/sys_info.h>
26
27 /*
28  *  get_device_type(): tell if GP/HS/EMU/TST
29  */
30 u32 get_device_type(void)
31 {
32         int mode;
33         mode = __raw_readl(CONTROL_STATUS) & (DEVICE_MASK);
34         return mode >>= 8;
35 }
36
37 /*
38  *  get_cpu_type(): extract cpu info
39  */
40 u32 get_cpu_type(void)
41 {
42         return __raw_readl(CONTROL_OMAP_STATUS);
43 }
44
45 /*
46  * get_cpu_id(): extract cpu id
47  * returns 0 for ES1.0, cpuid otherwise
48  */
49 u32 get_cpu_id(void)
50 {
51         u32 cpuid = 0;
52
53         /*
54          * On ES1.0 the IDCODE register is not exposed on L4
55          * so using CPU ID to differentiate between ES1.0 and > ES1.0.
56          */
57         __asm__ __volatile__("mrc p15, 0, %0, c0, c0, 0":"=r"(cpuid));
58         if ((cpuid & 0xf) == 0x0) {
59                 return 0;
60         } else {
61                 /* Decode the IDs on > ES1.0 */
62                 cpuid = __raw_readl(CONTROL_IDCODE);
63         }
64
65         return cpuid;
66 }