1239281Sgonzo/*-
2239281Sgonzo * Copyright (c) 2011
3239281Sgonzo *	Ben Gray <ben.r.gray@gmail.com>.
4239281Sgonzo * All rights reserved.
5239281Sgonzo *
6239281Sgonzo * Redistribution and use in source and binary forms, with or without
7239281Sgonzo * modification, are permitted provided that the following conditions
8239281Sgonzo * are met:
9239281Sgonzo * 1. Redistributions of source code must retain the above copyright
10239281Sgonzo *    notice, this list of conditions and the following disclaimer.
11239281Sgonzo * 2. Redistributions in binary form must reproduce the above copyright
12239281Sgonzo *    notice, this list of conditions and the following disclaimer in the
13239281Sgonzo *    documentation and/or other materials provided with the distribution.
14239281Sgonzo *
15239281Sgonzo * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16239281Sgonzo * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17239281Sgonzo * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18239281Sgonzo * ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
19239281Sgonzo * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20239281Sgonzo * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21239281Sgonzo * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22239281Sgonzo * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23239281Sgonzo * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24239281Sgonzo * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25239281Sgonzo * SUCH DAMAGE.
26239281Sgonzo *
27239281Sgonzo * $FreeBSD$
28239281Sgonzo */
29239281Sgonzo
30239281Sgonzo#ifndef _TI_CPUID_H_
31239281Sgonzo#define	_TI_CPUID_H_
32239281Sgonzo
33245137Sgonzo#define	OMAP_MAKEREV(d, a, b, c) \
34239281Sgonzo	(uint32_t)(((d) << 16) | (((a) & 0xf) << 8) | (((b) & 0xf) << 4) | ((c) & 0xf))
35239281Sgonzo
36245137Sgonzo#define	OMAP_REV_DEVICE(x)	(((x) >> 16) & 0xffff)
37245137Sgonzo#define	OMAP_REV_MAJOR(x)	(((x) >> 8) & 0xf)
38245137Sgonzo#define	OMAP_REV_MINOR(x)	(((x) >> 4) & 0xf)
39245137Sgonzo#define	OMAP_REV_MINOR_MINOR(x)	(((x) >> 0) & 0xf)
40239281Sgonzo
41239281Sgonzo#define	OMAP3350_DEV		0x3530
42245137Sgonzo#define	OMAP3350_REV_ES1_0	OMAP_MAKEREV(OMAP3350_DEV, 1, 0, 0)
43245137Sgonzo#define	OMAP3530_REV_ES2_0	OMAP_MAKEREV(OMAP3350_DEV, 2, 0, 0)
44245137Sgonzo#define	OMAP3530_REV_ES2_1	OMAP_MAKEREV(OMAP3350_DEV, 2, 1, 0)
45245137Sgonzo#define	OMAP3530_REV_ES3_0	OMAP_MAKEREV(OMAP3350_DEV, 3, 0, 0)
46245137Sgonzo#define	OMAP3530_REV_ES3_1	OMAP_MAKEREV(OMAP3350_DEV, 3, 1, 0)
47245137Sgonzo#define	OMAP3530_REV_ES3_1_2	OMAP_MAKEREV(OMAP3350_DEV, 3, 1, 2)
48239281Sgonzo
49239281Sgonzo#define	OMAP4430_DEV		0x4430
50245137Sgonzo#define	OMAP4430_REV_ES1_0	OMAP_MAKEREV(OMAP4430_DEV, 1, 0, 0)
51245137Sgonzo#define	OMAP4430_REV_ES2_0	OMAP_MAKEREV(OMAP4430_DEV, 2, 0, 0)
52245137Sgonzo#define	OMAP4430_REV_ES2_1	OMAP_MAKEREV(OMAP4430_DEV, 2, 1, 0)
53245137Sgonzo#define	OMAP4430_REV_ES2_2	OMAP_MAKEREV(OMAP4430_DEV, 2, 2, 0)
54245137Sgonzo#define	OMAP4430_REV_ES2_3	OMAP_MAKEREV(OMAP4430_DEV, 2, 3, 0)
55245137Sgonzo#define	OMAP4430_REV_UNKNOWN	OMAP_MAKEREV(OMAP4430_DEV, 9, 9, 9)
56239281Sgonzo
57245137Sgonzo#define	OMAP4460_DEV		0x4460
58245137Sgonzo#define	OMAP4460_REV_ES1_0	OMAP_MAKEREV(OMAP4460_DEV, 1, 0, 0)
59245137Sgonzo#define	OMAP4460_REV_ES1_1	OMAP_MAKEREV(OMAP4460_DEV, 1, 1, 0)
60245137Sgonzo#define	OMAP4460_REV_UNKNOWN	OMAP_MAKEREV(OMAP4460_DEV, 9, 9, 9)
61239281Sgonzo
62245137Sgonzo#define	OMAP4470_DEV		0x4470
63245137Sgonzo#define	OMAP4470_REV_ES1_0	OMAP_MAKEREV(OMAP4470_DEV, 1, 0, 0)
64245137Sgonzo#define	OMAP4470_REV_UNKNOWN	OMAP_MAKEREV(OMAP4470_DEV, 9, 9, 9)
65239281Sgonzo
66245137Sgonzo#define	OMAP_UNKNOWN_DEV	OMAP_MAKEREV(0x9999, 9, 9, 9)
67245137Sgonzo
68245137Sgonzo#define	AM335X_DEVREV(x)	((x) >> 28)
69245137Sgonzo
70273041Sandrew#define	CHIP_OMAP_4	0
71273041Sandrew#define	CHIP_AM335X	1
72245137Sgonzo
73239281Sgonzostatic __inline int ti_chip(void)
74239281Sgonzo{
75239281Sgonzo#if defined(SOC_OMAP4)
76239281Sgonzo	return CHIP_OMAP_4;
77239281Sgonzo#elif defined(SOC_TI_AM335X)
78239281Sgonzo	return CHIP_AM335X;
79239281Sgonzo#else
80239281Sgonzo#  error Chip type not defined, ensure SOC_xxxx is defined
81239281Sgonzo#endif
82239281Sgonzo}
83239281Sgonzo
84239281Sgonzouint32_t ti_revision(void);
85239281Sgonzo
86239281Sgonzo#endif  /* _TI_CPUID_H_ */
87