Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
m68k
platform
coldfire
m5441x.c
Go to the documentation of this file.
1
/*
2
* m5441x.c -- support for Coldfire m5441x processors
3
*
4
* (C) Copyright Steven King <
[email protected]
>
5
*/
6
7
#include <linux/kernel.h>
8
#include <
linux/param.h
>
9
#include <
linux/init.h
>
10
#include <
linux/io.h
>
11
#include <
linux/clk.h
>
12
#include <asm/machdep.h>
13
#include <
asm/coldfire.h
>
14
#include <
asm/mcfsim.h
>
15
#include <
asm/mcfuart.h
>
16
#include <
asm/mcfdma.h
>
17
#include <
asm/mcfclk.h
>
18
19
DEFINE_CLK
(0,
"flexbus"
, 2, MCF_CLK);
20
DEFINE_CLK
(0,
"mcfcan.0"
, 8, MCF_CLK);
21
DEFINE_CLK
(0,
"mcfcan.1"
, 9, MCF_CLK);
22
DEFINE_CLK
(0,
"mcfi2c.1"
, 14, MCF_CLK);
23
DEFINE_CLK
(0,
"mcfdspi.1"
, 15, MCF_CLK);
24
DEFINE_CLK
(0,
"edma"
, 17, MCF_CLK);
25
DEFINE_CLK
(0,
"intc.0"
, 18, MCF_CLK);
26
DEFINE_CLK
(0,
"intc.1"
, 19, MCF_CLK);
27
DEFINE_CLK
(0,
"intc.2"
, 20, MCF_CLK);
28
DEFINE_CLK
(0,
"mcfi2c.0"
, 22, MCF_CLK);
29
DEFINE_CLK
(0,
"mcfdspi.0"
, 23, MCF_CLK);
30
DEFINE_CLK
(0,
"mcfuart.0"
, 24,
MCF_BUSCLK
);
31
DEFINE_CLK
(0,
"mcfuart.1"
, 25,
MCF_BUSCLK
);
32
DEFINE_CLK
(0,
"mcfuart.2"
, 26,
MCF_BUSCLK
);
33
DEFINE_CLK
(0,
"mcfuart.3"
, 27,
MCF_BUSCLK
);
34
DEFINE_CLK
(0,
"mcftmr.0"
, 28, MCF_CLK);
35
DEFINE_CLK
(0,
"mcftmr.1"
, 29, MCF_CLK);
36
DEFINE_CLK
(0,
"mcftmr.2"
, 30, MCF_CLK);
37
DEFINE_CLK
(0,
"mcftmr.3"
, 31, MCF_CLK);
38
DEFINE_CLK
(0,
"mcfpit.0"
, 32, MCF_CLK);
39
DEFINE_CLK
(0,
"mcfpit.1"
, 33, MCF_CLK);
40
DEFINE_CLK
(0,
"mcfpit.2"
, 34, MCF_CLK);
41
DEFINE_CLK
(0,
"mcfpit.3"
, 35, MCF_CLK);
42
DEFINE_CLK
(0,
"mcfeport.0"
, 37, MCF_CLK);
43
DEFINE_CLK
(0,
"mcfadc.0"
, 38, MCF_CLK);
44
DEFINE_CLK
(0,
"mcfdac.0"
, 39, MCF_CLK);
45
DEFINE_CLK
(0,
"mcfrtc.0"
, 42, MCF_CLK);
46
DEFINE_CLK
(0,
"mcfsim.0"
, 43, MCF_CLK);
47
DEFINE_CLK
(0,
"mcfusb-otg.0"
, 44, MCF_CLK);
48
DEFINE_CLK
(0,
"mcfusb-host.0"
, 45, MCF_CLK);
49
DEFINE_CLK
(0,
"mcfddr-sram.0"
, 46, MCF_CLK);
50
DEFINE_CLK
(0,
"mcfssi.0"
, 47, MCF_CLK);
51
DEFINE_CLK
(0,
"pll.0"
, 48, MCF_CLK);
52
DEFINE_CLK
(0,
"mcfrng.0"
, 49, MCF_CLK);
53
DEFINE_CLK
(0,
"mcfssi.1"
, 50, MCF_CLK);
54
DEFINE_CLK
(0,
"mcfsdhc.0"
, 51, MCF_CLK);
55
DEFINE_CLK
(0,
"enet-fec.0"
, 53, MCF_CLK);
56
DEFINE_CLK
(0,
"enet-fec.1"
, 54, MCF_CLK);
57
DEFINE_CLK
(0,
"switch.0"
, 55, MCF_CLK);
58
DEFINE_CLK
(0,
"switch.1"
, 56, MCF_CLK);
59
DEFINE_CLK
(0,
"nand.0"
, 63, MCF_CLK);
60
61
DEFINE_CLK
(1,
"mcfow.0"
, 2, MCF_CLK);
62
DEFINE_CLK
(1,
"mcfi2c.2"
, 4, MCF_CLK);
63
DEFINE_CLK
(1,
"mcfi2c.3"
, 5, MCF_CLK);
64
DEFINE_CLK
(1,
"mcfi2c.4"
, 6, MCF_CLK);
65
DEFINE_CLK
(1,
"mcfi2c.5"
, 7, MCF_CLK);
66
DEFINE_CLK
(1,
"mcfuart.4"
, 24,
MCF_BUSCLK
);
67
DEFINE_CLK
(1,
"mcfuart.5"
, 25,
MCF_BUSCLK
);
68
DEFINE_CLK
(1,
"mcfuart.6"
, 26,
MCF_BUSCLK
);
69
DEFINE_CLK
(1,
"mcfuart.7"
, 27,
MCF_BUSCLK
);
70
DEFINE_CLK
(1,
"mcfuart.8"
, 28,
MCF_BUSCLK
);
71
DEFINE_CLK
(1,
"mcfuart.9"
, 29,
MCF_BUSCLK
);
72
DEFINE_CLK
(1,
"mcfpwm.0"
, 34,
MCF_BUSCLK
);
73
DEFINE_CLK
(1,
"sys.0"
, 36,
MCF_BUSCLK
);
74
DEFINE_CLK
(1,
"gpio.0"
, 37,
MCF_BUSCLK
);
75
76
struct
clk
*
mcf_clks
[] = {
77
&__clk_0_2,
78
&__clk_0_8,
79
&__clk_0_9,
80
&__clk_0_14,
81
&__clk_0_15,
82
&__clk_0_17,
83
&__clk_0_18,
84
&__clk_0_19,
85
&__clk_0_20,
86
&__clk_0_22,
87
&__clk_0_23,
88
&__clk_0_24,
89
&__clk_0_25,
90
&__clk_0_26,
91
&__clk_0_27,
92
&__clk_0_28,
93
&__clk_0_29,
94
&__clk_0_30,
95
&__clk_0_31,
96
&__clk_0_32,
97
&__clk_0_33,
98
&__clk_0_34,
99
&__clk_0_35,
100
&__clk_0_37,
101
&__clk_0_38,
102
&__clk_0_39,
103
&__clk_0_42,
104
&__clk_0_43,
105
&__clk_0_44,
106
&__clk_0_45,
107
&__clk_0_46,
108
&__clk_0_47,
109
&__clk_0_48,
110
&__clk_0_49,
111
&__clk_0_50,
112
&__clk_0_51,
113
&__clk_0_53,
114
&__clk_0_54,
115
&__clk_0_55,
116
&__clk_0_56,
117
&__clk_0_63,
118
119
&__clk_1_2,
120
&__clk_1_4,
121
&__clk_1_5,
122
&__clk_1_6,
123
&__clk_1_7,
124
&__clk_1_24,
125
&__clk_1_25,
126
&__clk_1_26,
127
&__clk_1_27,
128
&__clk_1_28,
129
&__clk_1_29,
130
&__clk_1_34,
131
&__clk_1_36,
132
&__clk_1_37,
133
NULL
,
134
};
135
136
137
static
struct
clk
*
const
enable_clks[]
__initconst
= {
138
/* make sure these clocks are enabled */
139
&__clk_0_18,
/* intc0 */
140
&__clk_0_19,
/* intc0 */
141
&__clk_0_20,
/* intc0 */
142
&__clk_0_24,
/* uart0 */
143
&__clk_0_25,
/* uart1 */
144
&__clk_0_26,
/* uart2 */
145
&__clk_0_27,
/* uart3 */
146
147
&__clk_0_33,
/* pit.1 */
148
&__clk_0_37,
/* eport */
149
&__clk_0_48,
/* pll */
150
151
&__clk_1_36,
/* CCM/reset module/Power management */
152
&__clk_1_37,
/* gpio */
153
};
154
static
struct
clk
*
const
disable_clks[]
__initconst
= {
155
&__clk_0_8,
/* can.0 */
156
&__clk_0_9,
/* can.1 */
157
&__clk_0_14,
/* i2c.1 */
158
&__clk_0_15,
/* dspi.1 */
159
&__clk_0_17,
/* eDMA */
160
&__clk_0_22,
/* i2c.0 */
161
&__clk_0_23,
/* dspi.0 */
162
&__clk_0_28,
/* tmr.1 */
163
&__clk_0_29,
/* tmr.2 */
164
&__clk_0_30,
/* tmr.2 */
165
&__clk_0_31,
/* tmr.3 */
166
&__clk_0_32,
/* pit.0 */
167
&__clk_0_34,
/* pit.2 */
168
&__clk_0_35,
/* pit.3 */
169
&__clk_0_38,
/* adc */
170
&__clk_0_39,
/* dac */
171
&__clk_0_44,
/* usb otg */
172
&__clk_0_45,
/* usb host */
173
&__clk_0_47,
/* ssi.0 */
174
&__clk_0_49,
/* rng */
175
&__clk_0_50,
/* ssi.1 */
176
&__clk_0_51,
/* eSDHC */
177
&__clk_0_53,
/* enet-fec */
178
&__clk_0_54,
/* enet-fec */
179
&__clk_0_55,
/* switch.0 */
180
&__clk_0_56,
/* switch.1 */
181
182
&__clk_1_2,
/* 1-wire */
183
&__clk_1_4,
/* i2c.2 */
184
&__clk_1_5,
/* i2c.3 */
185
&__clk_1_6,
/* i2c.4 */
186
&__clk_1_7,
/* i2c.5 */
187
&__clk_1_24,
/* uart 4 */
188
&__clk_1_25,
/* uart 5 */
189
&__clk_1_26,
/* uart 6 */
190
&__clk_1_27,
/* uart 7 */
191
&__clk_1_28,
/* uart 8 */
192
&__clk_1_29,
/* uart 9 */
193
};
194
195
static
void
__init
m5441x_clk_init(
void
)
196
{
197
unsigned
i
;
198
199
for
(i = 0; i <
ARRAY_SIZE
(enable_clks); ++
i
)
200
__clk_init_enabled(enable_clks[i]);
201
/* make sure these clocks are disabled */
202
for
(i = 0; i <
ARRAY_SIZE
(disable_clks); ++
i
)
203
__clk_init_disabled(disable_clks[i]);
204
}
205
206
static
void
__init
m5441x_uarts_init(
void
)
207
{
208
__raw_writeb
(0x0f,
MCFGPIO_PAR_UART0
);
209
__raw_writeb
(0x00,
MCFGPIO_PAR_UART1
);
210
__raw_writeb
(0x00,
MCFGPIO_PAR_UART2
);
211
}
212
213
static
void
__init
m5441x_fec_init(
void
)
214
{
215
__raw_writeb
(0x03,
MCFGPIO_PAR_FEC
);
216
}
217
218
void
__init
config_BSP
(
char
*commandp,
int
size
)
219
{
220
m5441x_clk_init();
221
mach_sched_init
=
hw_timer_init
;
222
m5441x_uarts_init();
223
m5441x_fec_init();
224
}
225
226
227
#if IS_ENABLED(CONFIG_RTC_DRV_M5441x)
228
static
struct
resource
m5441x_rtc_resources[] = {
229
{
230
.
start
=
MCFRTC_BASE
,
231
.end =
MCFRTC_BASE
+
MCFRTC_SIZE
- 1,
232
.flags =
IORESOURCE_MEM
,
233
},
234
{
235
.start =
MCF_IRQ_RTC
,
236
.end =
MCF_IRQ_RTC
,
237
.flags =
IORESOURCE_IRQ
,
238
},
239
};
240
241
static
struct
platform_device
m5441x_rtc = {
242
.
name
=
"mcfrtc"
,
243
.id = 0,
244
.resource = m5441x_rtc_resources,
245
.num_resources =
ARRAY_SIZE
(m5441x_rtc_resources),
246
};
247
#endif
248
249
static
struct
platform_device
*m5441x_devices[]
__initdata
= {
250
#if IS_ENABLED(CONFIG_RTC_DRV_M5441x)
251
&m5441x_rtc,
252
#endif
253
};
254
255
static
int
__init
init_BSP(
void
)
256
{
257
platform_add_devices
(m5441x_devices,
ARRAY_SIZE
(m5441x_devices));
258
return
0;
259
}
260
261
arch_initcall
(init_BSP);
Generated on Thu Jan 10 2013 13:08:28 for Linux Kernel by
1.8.2