summaryrefslogtreecommitdiff
path: root/arch/arm/plat-mxc/include/mach/hardware.h
blob: 57a7a468c8f86af9afa4f5fe47bff2152d184cc6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
/*
 *  Copyright 2004-2009 Freescale Semiconductor, Inc. All Rights Reserved.
 */

/*
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 */

#ifndef __ASM_ARCH_MXC_HARDWARE_H__
#define __ASM_ARCH_MXC_HARDWARE_H__

#include <asm/sizes.h>

/*
 * ---------------------------------------------------------------------------
 * Processor specific defines
 * ---------------------------------------------------------------------------
 */
#define CHIP_REV_1_0		0x10
#define CHIP_REV_1_1		0x11
#define CHIP_REV_1_2		0x12
#define CHIP_REV_1_3		0x13
#define CHIP_REV_2_0		0x20
#define CHIP_REV_2_1		0x21
#define CHIP_REV_2_2		0x22
#define CHIP_REV_2_3		0x23
#define CHIP_REV_3_0		0x30
#define CHIP_REV_3_1		0x31
#define CHIP_REV_3_2		0x32

#define BOARD_REV_2		0x100

#ifndef __ASSEMBLY__
extern unsigned int system_rev;
#endif
#define mxc_set_system_rev(part, rev) {			\
	system_rev = (part << 12) | rev;		\
}

#define mxc_cpu()		(system_rev >> 12)
#define mxc_is_cpu(part)	((mxc_cpu() == part) ? 1 : 0)
#define mxc_cpu_rev()		(system_rev & 0xFF)
#define mxc_cpu_rev_major()	((system_rev >> 4) & 0xF)
#define mxc_cpu_rev_minor()	(system_rev & 0xF)
#define mxc_cpu_is_rev(rev)	\
	((mxc_cpu_rev() == rev) ? 1 : ((mxc_cpu_rev() < rev) ? -1 : 2))
#define MXC_REV(type)				\
static inline int type## _rev (int rev)		\
{						\
	return (type() ? mxc_cpu_is_rev(rev) : 0);	\
}

#ifdef CONFIG_ARCH_MX3
# include <mach/mx31.h>
#define cpu_is_mx31()		(mxc_is_cpu(0x31))	/*system_rev got from Redboot */
#define cpu_is_mx32()		(mxc_is_cpu(0x32))	/*system_rev got from Redboot */
#else
#define cpu_is_mx31()		(0)
#define cpu_is_mx32()		(0)
#endif

#ifdef CONFIG_ARCH_MX35
#include <mach/mx35.h>
#define cpu_is_mx35()   (1)
#define board_is_mx35(rev)   ((system_rev & rev) ? 1 : 0)
#else
#define cpu_is_mx35()   (0)
#define board_is_mx35(rev) (0)
#endif

#ifdef CONFIG_ARCH_MX37
#include <mach/mx37.h>
#define cpu_is_mx37()   (1)
#define board_is_mx37(rev)   ((system_rev & rev) ? 1 : 0)
#else
#define cpu_is_mx37()   (0)
#define board_is_mx37(rev)   (0)
#endif

#ifdef CONFIG_ARCH_MX51
#include <mach/mx51.h>
#define cpu_is_mx51()   (1)
#define board_is_mx51(rev)   ((system_rev & rev) ? 1 : 0)
/* BB25:Bit8 is set to 1, BB20: Bit8 is set to 0 */
#define board_is_babbage_2_5()   ((system_rev & 0x1FF) >> 8)
#else
#define cpu_is_mx51()   (0)
#define board_is_mx51(rev)   (0)
#define board_is_babbage_2_5()   (0)
#endif

#ifdef CONFIG_ARCH_MX21
#include <mach/mx21.h>
#define cpu_is_mx21()		(1)
#else
#define cpu_is_mx21()		(0)
#endif

#ifdef CONFIG_ARCH_MX25
#include <mach/mx25.h>
#define cpu_is_mx25()		(1)
#else
#define cpu_is_mx25()		(0)
#endif

#ifdef CONFIG_ARCH_MX27
#include <mach/mx27.h>
#define cpu_is_mx27()		(1)
#else
#define cpu_is_mx27()		(0)
#endif

#define cpu_is_mx2()		\
    (cpu_is_mx21() || cpu_is_mx25() || cpu_is_mx27())
#define cpu_is_mx3()		\
    (cpu_is_mx31() || cpu_is_mx35() || cpu_is_mx37())


#ifndef __ASSEMBLY__
/*
 * Create inline functions to test for cpu revision
 * Function name is cpu_is_<cpu name>_rev(rev)
 *
 * Returns:
 *	 0 - not the cpu queried
 *	 1 - cpu and revision match
 *	 2 - cpu matches, but cpu revision is greater than queried rev
 *	-1 - cpu matches, but cpu revision is less than queried rev
 */
MXC_REV(cpu_is_mx21);
MXC_REV(cpu_is_mx25);
MXC_REV(cpu_is_mx27);
MXC_REV(cpu_is_mx31);
MXC_REV(cpu_is_mx32);
MXC_REV(cpu_is_mx35);
MXC_REV(cpu_is_mx37);
MXC_REV(cpu_is_mx51);
#endif
#include <mach/mxc.h>

#define MXC_MAX_GPIO_LINES      (GPIO_NUM_PIN * GPIO_PORT_NUM)

#define MXC_EXP_IO_BASE		(MXC_MAX_INT_LINES + MXC_MAX_GPIO_LINES)
#define MXC_MAX_EXP_IO_LINES	16

#ifdef CONFIG_MXC_PSEUDO_IRQS
#define MXC_PSEUDO_IO_BASE	(MXC_EXP_IO_BASE + MXC_MAX_EXP_IO_LINES)
#define MXC_MAX_PSEUDO_IO_LINES 16
#else
#define MXC_MAX_PSEUDO_IO_LINES 0
#endif

#ifndef MXC_INT_FORCE
#define MXC_INT_FORCE	-1
#endif
#define MXC_MAX_INTS            (MXC_MAX_INT_LINES + \
				MXC_MAX_GPIO_LINES + \
				MXC_MAX_EXP_IO_LINES + \
				MXC_MAX_PSEUDO_IO_LINES)
#endif /* __ASM_ARCH_MXC_HARDWARE_H__ */