Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | S3C24XX ARM Linux Overview |
2 | ========================== | |
3 | ||
4 | ||
5 | ||
6 | Introduction | |
7 | ------------ | |
8 | ||
9 | The Samsung S3C24XX range of ARM9 System-on-Chip CPUs are supported | |
f964c303 | 10 | by the 's3c2410' architecture of ARM Linux. Currently the S3C2410, |
b9f141ac BD |
11 | S3C2412, S3C2413, S3C2416 S3C2440, S3C2442, S3C2443 and S3C2450 devices |
12 | are supported. | |
1da177e4 | 13 | |
bc4c7265 | 14 | Support for the S3C2400 and S3C24A0 series are in progress. |
a08ceff2 | 15 | |
b9f141ac BD |
16 | The S3C2416 and S3C2450 devices are very similar and S3C2450 support is |
17 | included under the arch/arm/mach-s3c2416 directory. Note, whilst core | |
18 | support for these SoCs is in, work on some of the extra peripherals | |
19 | and extra interrupts is still ongoing. | |
20 | ||
cbc212e8 | 21 | |
1da177e4 LT |
22 | Configuration |
23 | ------------- | |
24 | ||
25 | A generic S3C2410 configuration is provided, and can be used as the | |
26 | default by `make s3c2410_defconfig`. This configuration has support | |
27 | for all the machines, and the commonly used features on them. | |
28 | ||
29 | Certain machines may have their own default configurations as well, | |
30 | please check the machine specific documentation. | |
31 | ||
32 | ||
961314d3 BD |
33 | Layout |
34 | ------ | |
35 | ||
36 | The core support files are located in the platform code contained in | |
37 | arch/arm/plat-s3c24xx with headers in include/asm-arm/plat-s3c24xx. | |
38 | This directory should be kept to items shared between the platform | |
39 | code (arch/arm/plat-s3c24xx) and the arch/arm/mach-s3c24* code. | |
40 | ||
41 | Each cpu has a directory with the support files for it, and the | |
42 | machines that carry the device. For example S3C2410 is contained | |
43 | in arch/arm/mach-s3c2410 and S3C2440 in arch/arm/mach-s3c2440 | |
44 | ||
45 | Register, kernel and platform data definitions are held in the | |
a09e64fb | 46 | arch/arm/mach-s3c2410 directory./include/mach |
961314d3 | 47 | |
cbc212e8 BD |
48 | arch/arm/plat-s3c24xx: |
49 | ||
50 | Files in here are either common to all the s3c24xx family, | |
51 | or are common to only some of them with names to indicate this | |
52 | status. The files that are not common to all are generally named | |
53 | with the initial cpu they support in the series to ensure a short | |
54 | name without any possibility of confusion with newer devices. | |
55 | ||
56 | As an example, initially s3c244x would cover s3c2440 and s3c2442, but | |
57 | with the s3c2443 which does not share many of the same drivers in | |
58 | this directory, the name becomes invalid. We stick to s3c2440-<x> | |
59 | to indicate a driver that is s3c2440 and s3c2442 compatible. | |
60 | ||
61 | This does mean that to find the status of any given SoC, a number | |
62 | of directories may need to be searched. | |
63 | ||
961314d3 | 64 | |
1da177e4 LT |
65 | Machines |
66 | -------- | |
67 | ||
68 | The currently supported machines are as follows: | |
69 | ||
70 | Simtec Electronics EB2410ITX (BAST) | |
71 | ||
72 | A general purpose development board, see EB2410ITX.txt for further | |
73 | details | |
74 | ||
a08ceff2 BD |
75 | Simtec Electronics IM2440D20 (Osiris) |
76 | ||
77 | CPU Module from Simtec Electronics, with a S3C2440A CPU, nand flash | |
78 | and a PCMCIA controller. | |
79 | ||
1da177e4 LT |
80 | Samsung SMDK2410 |
81 | ||
82 | Samsung's own development board, geared for PDA work. | |
83 | ||
f964c303 BD |
84 | Samsung/Aiji SMDK2412 |
85 | ||
86 | The S3C2412 version of the SMDK2440. | |
87 | ||
88 | Samsung/Aiji SMDK2413 | |
89 | ||
90 | The S3C2412 version of the SMDK2440. | |
91 | ||
1da177e4 LT |
92 | Samsung/Meritech SMDK2440 |
93 | ||
f964c303 BD |
94 | The S3C2440 compatible version of the SMDK2440, which has the |
95 | option of an S3C2440 or S3C2442 CPU module. | |
1da177e4 LT |
96 | |
97 | Thorcom VR1000 | |
98 | ||
99 | Custom embedded board | |
100 | ||
101 | HP IPAQ 1940 | |
102 | ||
103 | Handheld (IPAQ), available in several varieties | |
104 | ||
105 | HP iPAQ rx3715 | |
106 | ||
107 | S3C2440 based IPAQ, with a number of variations depending on | |
108 | features shipped. | |
109 | ||
110 | Acer N30 | |
111 | ||
112 | A S3C2410 based PDA from Acer. There is a Wiki page at | |
113 | http://handhelds.org/moin/moin.cgi/AcerN30Documentation . | |
114 | ||
eb3b4783 BD |
115 | AML M5900 |
116 | ||
117 | American Microsystems' M5900 | |
118 | ||
119 | Nex Vision Nexcoder | |
120 | Nex Vision Otom | |
121 | ||
122 | Two machines by Nex Vision | |
123 | ||
1da177e4 LT |
124 | |
125 | Adding New Machines | |
126 | ------------------- | |
127 | ||
3f6dee9b | 128 | The architecture has been designed to support as many machines as can |
1da177e4 LT |
129 | be configured for it in one kernel build, and any future additions |
130 | should keep this in mind before altering items outside of their own | |
131 | machine files. | |
132 | ||
133 | Machine definitions should be kept in linux/arch/arm/mach-s3c2410, | |
134 | and there are a number of examples that can be looked at. | |
135 | ||
136 | Read the kernel patch submission policies as well as the | |
137 | Documentation/arm directory before submitting patches. The | |
138 | ARM kernel series is managed by Russell King, and has a patch system | |
139 | located at http://www.arm.linux.org.uk/developer/patches/ | |
140 | as well as mailing lists that can be found from the same site. | |
141 | ||
142 | As a courtesy, please notify <ben-linux@fluff.org> of any new | |
143 | machines or other modifications. | |
144 | ||
145 | Any large scale modifications, or new drivers should be discussed | |
146 | on the ARM kernel mailing list (linux-arm-kernel) before being | |
6ff8f59f BD |
147 | attempted. See http://www.arm.linux.org.uk/mailinglists/ for the |
148 | mailing list information. | |
1da177e4 LT |
149 | |
150 | ||
a08ceff2 BD |
151 | I2C |
152 | --- | |
153 | ||
154 | The hardware I2C core in the CPU is supported in single master | |
155 | mode, and can be configured via platform data. | |
156 | ||
157 | ||
158 | RTC | |
159 | --- | |
160 | ||
161 | Support for the onboard RTC unit, including alarm function. | |
162 | ||
eb3b4783 BD |
163 | This has recently been upgraded to use the new RTC core, |
164 | and the module has been renamed to rtc-s3c to fit in with | |
165 | the new rtc naming scheme. | |
166 | ||
a08ceff2 BD |
167 | |
168 | Watchdog | |
169 | -------- | |
170 | ||
171 | The onchip watchdog is available via the standard watchdog | |
172 | interface. | |
173 | ||
174 | ||
1da177e4 LT |
175 | NAND |
176 | ---- | |
177 | ||
178 | The current kernels now have support for the s3c2410 NAND | |
179 | controller. If there are any problems the latest linux-mtd | |
eb3b4783 | 180 | code can be found from http://www.linux-mtd.infradead.org/ |
1da177e4 | 181 | |
71d54f38 BD |
182 | For more information see Documentation/arm/Samsung-S3C24XX/NAND.txt |
183 | ||
1da177e4 | 184 | |
a0f774b5 BD |
185 | SD/MMC |
186 | ------ | |
187 | ||
188 | The SD/MMC hardware pre S3C2443 is supported in the current | |
189 | kernel, the driver is drivers/mmc/host/s3cmci.c and supports | |
190 | 1 and 4 bit SD or MMC cards. | |
191 | ||
192 | The SDIO behaviour of this driver has not been fully tested. There is no | |
193 | current support for hardware SDIO interrupts. | |
194 | ||
195 | ||
1da177e4 LT |
196 | Serial |
197 | ------ | |
198 | ||
199 | The s3c2410 serial driver provides support for the internal | |
200 | serial ports. These devices appear as /dev/ttySAC0 through 3. | |
201 | ||
202 | To create device nodes for these, use the following commands | |
203 | ||
204 | mknod ttySAC0 c 204 64 | |
205 | mknod ttySAC1 c 204 65 | |
206 | mknod ttySAC2 c 204 66 | |
207 | ||
208 | ||
209 | GPIO | |
210 | ---- | |
211 | ||
212 | The core contains support for manipulating the GPIO, see the | |
213 | documentation in GPIO.txt in the same directory as this file. | |
214 | ||
f47c32f3 BD |
215 | Newer kernels carry GPIOLIB, and support is being moved towards |
216 | this with some of the older support in line to be removed. | |
217 | ||
b9f141ac BD |
218 | As of v2.6.34, the move towards using gpiolib support is almost |
219 | complete, and very little of the old calls are left. | |
220 | ||
d192baea BD |
221 | See Documentation/arm/Samsung-S3C24XX/GPIO.txt for the S3C24XX specific |
222 | support and Documentation/arm/Samsung/GPIO.txt for the core Samsung | |
223 | implementation. | |
224 | ||
1da177e4 LT |
225 | |
226 | Clock Management | |
227 | ---------------- | |
228 | ||
229 | The core provides the interface defined in the header file | |
230 | include/asm-arm/hardware/clock.h, to allow control over the | |
231 | various clock units | |
232 | ||
233 | ||
a08ceff2 BD |
234 | Suspend to RAM |
235 | -------------- | |
236 | ||
237 | For boards that provide support for suspend to RAM, the | |
238 | system can be placed into low power suspend. | |
239 | ||
240 | See Suspend.txt for more information. | |
241 | ||
242 | ||
eb3b4783 BD |
243 | SPI |
244 | --- | |
245 | ||
246 | SPI drivers are available for both the in-built hardware | |
247 | (although there is no DMA support yet) and a generic | |
248 | GPIO based solution. | |
249 | ||
250 | ||
251 | LEDs | |
252 | ---- | |
253 | ||
254 | There is support for GPIO based LEDs via a platform driver | |
255 | in the LED subsystem. | |
256 | ||
257 | ||
6ff8f59f BD |
258 | Platform Data |
259 | ------------- | |
260 | ||
261 | Whenever a device has platform specific data that is specified | |
262 | on a per-machine basis, care should be taken to ensure the | |
263 | following: | |
264 | ||
265 | 1) that default data is not left in the device to confuse the | |
266 | driver if a machine does not set it at startup | |
267 | ||
268 | 2) the data should (if possible) be marked as __initdata, | |
269 | to ensure that the data is thrown away if the machine is | |
270 | not the one currently in use. | |
271 | ||
272 | The best way of doing this is to make a function that | |
273 | kmalloc()s an area of memory, and copies the __initdata | |
274 | and then sets the relevant device's platform data. Making | |
275 | the function `__init` takes care of ensuring it is discarded | |
276 | with the rest of the initialisation code | |
277 | ||
278 | static __init void s3c24xx_xxx_set_platdata(struct xxx_data *pd) | |
279 | { | |
280 | struct s3c2410_xxx_mach_info *npd; | |
281 | ||
282 | npd = kmalloc(sizeof(struct s3c2410_xxx_mach_info), GFP_KERNEL); | |
283 | if (npd) { | |
284 | memcpy(npd, pd, sizeof(struct s3c2410_xxx_mach_info)); | |
285 | s3c_device_xxx.dev.platform_data = npd; | |
286 | } else { | |
287 | printk(KERN_ERR "no memory for xxx platform data\n"); | |
288 | } | |
289 | } | |
290 | ||
291 | Note, since the code is marked as __init, it should not be | |
292 | exported outside arch/arm/mach-s3c2410/, or exported to | |
293 | modules via EXPORT_SYMBOL() and related functions. | |
294 | ||
a08ceff2 | 295 | |
1da177e4 LT |
296 | Port Contributors |
297 | ----------------- | |
298 | ||
299 | Ben Dooks (BJD) | |
300 | Vincent Sanders | |
301 | Herbert Potzl | |
302 | Arnaud Patard (RTP) | |
303 | Roc Wu | |
304 | Klaus Fetscher | |
305 | Dimitry Andric | |
306 | Shannon Holland | |
307 | Guillaume Gourat (NexVision) | |
308 | Christer Weinigel (wingel) (Acer N30) | |
309 | Lucas Correia Villa Real (S3C2400 port) | |
310 | ||
311 | ||
1da177e4 LT |
312 | Document Author |
313 | --------------- | |
314 | ||
e02f8664 | 315 | Ben Dooks, Copyright 2004-2006 Simtec Electronics |