1 ==========================
2 S3C24XX ARM Linux Overview
3 ==========================
10 The Samsung S3C24XX range of ARM9 System-on-Chip CPUs are supported
11 by the 's3c2410' architecture of ARM Linux. Currently the S3C2410,
12 S3C2412, S3C2413, S3C2416, S3C2440, S3C2442, S3C2443 and S3C2450 devices
15 Support for the S3C2400 and S3C24A0 series was never completed and the
16 corresponding code has been removed after a while. If someone wishes to
17 revive this effort, partial support can be retrieved from earlier Linux
20 The S3C2416 and S3C2450 devices are very similar and S3C2450 support is
21 included under the arch/arm/mach-s3c directory. Note, while core
22 support for these SoCs is in, work on some of the extra peripherals
23 and extra interrupts is still ongoing.
29 A generic S3C2410 configuration is provided, and can be used as the
30 default by `make s3c2410_defconfig`. This configuration has support
31 for all the machines, and the commonly used features on them.
33 Certain machines may have their own default configurations as well,
34 please check the machine specific documentation.
40 The core support files, register, kernel and paltform data are located in the
41 platform code contained in arch/arm/mach-s3c with headers in
42 arch/arm/mach-s3c/include
46 Files in here are either common to all the s3c24xx family,
47 or are common to only some of them with names to indicate this
48 status. The files that are not common to all are generally named
49 with the initial cpu they support in the series to ensure a short
50 name without any possibility of confusion with newer devices.
52 As an example, initially s3c244x would cover s3c2440 and s3c2442, but
53 with the s3c2443 which does not share many of the same drivers in
54 this directory, the name becomes invalid. We stick to s3c2440-<x>
55 to indicate a driver that is s3c2440 and s3c2442 compatible.
57 This does mean that to find the status of any given SoC, a number
58 of directories may need to be searched.
64 The currently supported machines are as follows:
66 Simtec Electronics EB2410ITX (BAST)
68 A general purpose development board, see EB2410ITX.txt for further
71 Simtec Electronics IM2440D20 (Osiris)
73 CPU Module from Simtec Electronics, with a S3C2440A CPU, nand flash
74 and a PCMCIA controller.
78 Samsung's own development board, geared for PDA work.
82 The S3C2412 version of the SMDK2440.
86 The S3C2412 version of the SMDK2440.
88 Samsung/Meritech SMDK2440
90 The S3C2440 compatible version of the SMDK2440, which has the
91 option of an S3C2440 or S3C2442 CPU module.
99 Handheld (IPAQ), available in several varieties
103 S3C2440 based IPAQ, with a number of variations depending on
108 A S3C2410 based PDA from Acer. There is a Wiki page at
109 http://handhelds.org/moin/moin.cgi/AcerN30Documentation .
113 American Microsystems' M5900
118 Two machines by Nex Vision
124 The architecture has been designed to support as many machines as can
125 be configured for it in one kernel build, and any future additions
126 should keep this in mind before altering items outside of their own
129 Machine definitions should be kept in arch/arm/mach-s3c,
130 and there are a number of examples that can be looked at.
132 Read the kernel patch submission policies as well as the
133 Documentation/arm directory before submitting patches. The
134 ARM kernel series is managed by Russell King, and has a patch system
135 located at http://www.arm.linux.org.uk/developer/patches/
136 as well as mailing lists that can be found from the same site.
138 As a courtesy, please notify <ben-linux@fluff.org> of any new
139 machines or other modifications.
141 Any large scale modifications, or new drivers should be discussed
142 on the ARM kernel mailing list (linux-arm-kernel) before being
143 attempted. See http://www.arm.linux.org.uk/mailinglists/ for the
144 mailing list information.
150 The hardware I2C core in the CPU is supported in single master
151 mode, and can be configured via platform data.
157 Support for the onboard RTC unit, including alarm function.
159 This has recently been upgraded to use the new RTC core,
160 and the module has been renamed to rtc-s3c to fit in with
161 the new rtc naming scheme.
167 The onchip watchdog is available via the standard watchdog
174 The current kernels now have support for the s3c2410 NAND
175 controller. If there are any problems the latest linux-mtd
176 code can be found from http://www.linux-mtd.infradead.org/
178 For more information see Documentation/arm/samsung-s3c24xx/nand.rst
184 The SD/MMC hardware pre S3C2443 is supported in the current
185 kernel, the driver is drivers/mmc/host/s3cmci.c and supports
186 1 and 4 bit SD or MMC cards.
188 The SDIO behaviour of this driver has not been fully tested. There is no
189 current support for hardware SDIO interrupts.
195 The s3c2410 serial driver provides support for the internal
196 serial ports. These devices appear as /dev/ttySAC0 through 3.
198 To create device nodes for these, use the following commands
200 mknod ttySAC0 c 204 64
201 mknod ttySAC1 c 204 65
202 mknod ttySAC2 c 204 66
208 The core contains support for manipulating the GPIO, see the
209 documentation in GPIO.txt in the same directory as this file.
211 Newer kernels carry GPIOLIB, and support is being moved towards
212 this with some of the older support in line to be removed.
214 As of v2.6.34, the move towards using gpiolib support is almost
215 complete, and very little of the old calls are left.
217 See Documentation/arm/samsung-s3c24xx/gpio.rst for the S3C24XX specific
218 support and Documentation/arm/samsung/gpio.rst for the core Samsung
225 The core provides the interface defined in the header file
226 include/asm-arm/hardware/clock.h, to allow control over the
233 For boards that provide support for suspend to RAM, the
234 system can be placed into low power suspend.
236 See Suspend.txt for more information.
242 SPI drivers are available for both the in-built hardware
243 (although there is no DMA support yet) and a generic
250 There is support for GPIO based LEDs via a platform driver
251 in the LED subsystem.
257 Whenever a device has platform specific data that is specified
258 on a per-machine basis, care should be taken to ensure the
261 1) that default data is not left in the device to confuse the
262 driver if a machine does not set it at startup
264 2) the data should (if possible) be marked as __initdata,
265 to ensure that the data is thrown away if the machine is
266 not the one currently in use.
268 The best way of doing this is to make a function that
269 kmalloc()s an area of memory, and copies the __initdata
270 and then sets the relevant device's platform data. Making
271 the function `__init` takes care of ensuring it is discarded
272 with the rest of the initialisation code::
274 static __init void s3c24xx_xxx_set_platdata(struct xxx_data *pd)
276 struct s3c2410_xxx_mach_info *npd;
278 npd = kmalloc(sizeof(struct s3c2410_xxx_mach_info), GFP_KERNEL);
280 memcpy(npd, pd, sizeof(struct s3c2410_xxx_mach_info));
281 s3c_device_xxx.dev.platform_data = npd;
283 printk(KERN_ERR "no memory for xxx platform data\n");
287 Note, since the code is marked as __init, it should not be
288 exported outside arch/arm/mach-s3c/, or exported to
289 modules via EXPORT_SYMBOL() and related functions.
303 Guillaume Gourat (NexVision)
304 Christer Weinigel (wingel) (Acer N30)
305 Lucas Correia Villa Real (S3C2400 port)
311 Ben Dooks, Copyright 2004-2006 Simtec Electronics