0001 ==========================
0002 S3C24XX ARM Linux Overview
0003 ==========================
0004
0005
0006
0007 Introduction
0008 ------------
0009
0010 The Samsung S3C24XX range of ARM9 System-on-Chip CPUs are supported
0011 by the 's3c2410' architecture of ARM Linux. Currently the S3C2410,
0012 S3C2412, S3C2413, S3C2416, S3C2440, S3C2442, S3C2443 and S3C2450 devices
0013 are supported.
0014
0015 Support for the S3C2400 and S3C24A0 series was never completed and the
0016 corresponding code has been removed after a while. If someone wishes to
0017 revive this effort, partial support can be retrieved from earlier Linux
0018 versions.
0019
0020 The S3C2416 and S3C2450 devices are very similar and S3C2450 support is
0021 included under the arch/arm/mach-s3c directory. Note, while core
0022 support for these SoCs is in, work on some of the extra peripherals
0023 and extra interrupts is still ongoing.
0024
0025
0026 Configuration
0027 -------------
0028
0029 A generic S3C2410 configuration is provided, and can be used as the
0030 default by `make s3c2410_defconfig`. This configuration has support
0031 for all the machines, and the commonly used features on them.
0032
0033 Certain machines may have their own default configurations as well,
0034 please check the machine specific documentation.
0035
0036
0037 Layout
0038 ------
0039
0040 The core support files, register, kernel and paltform data are located in the
0041 platform code contained in arch/arm/mach-s3c with headers in
0042 arch/arm/mach-s3c/include
0043
0044 arch/arm/mach-s3c:
0045
0046 Files in here are either common to all the s3c24xx family,
0047 or are common to only some of them with names to indicate this
0048 status. The files that are not common to all are generally named
0049 with the initial cpu they support in the series to ensure a short
0050 name without any possibility of confusion with newer devices.
0051
0052 As an example, initially s3c244x would cover s3c2440 and s3c2442, but
0053 with the s3c2443 which does not share many of the same drivers in
0054 this directory, the name becomes invalid. We stick to s3c2440-<x>
0055 to indicate a driver that is s3c2440 and s3c2442 compatible.
0056
0057 This does mean that to find the status of any given SoC, a number
0058 of directories may need to be searched.
0059
0060
0061 Machines
0062 --------
0063
0064 The currently supported machines are as follows:
0065
0066 Simtec Electronics EB2410ITX (BAST)
0067
0068 A general purpose development board, see EB2410ITX.txt for further
0069 details
0070
0071 Simtec Electronics IM2440D20 (Osiris)
0072
0073 CPU Module from Simtec Electronics, with a S3C2440A CPU, nand flash
0074 and a PCMCIA controller.
0075
0076 Samsung SMDK2410
0077
0078 Samsung's own development board, geared for PDA work.
0079
0080 Samsung/Aiji SMDK2412
0081
0082 The S3C2412 version of the SMDK2440.
0083
0084 Samsung/Aiji SMDK2413
0085
0086 The S3C2412 version of the SMDK2440.
0087
0088 Samsung/Meritech SMDK2440
0089
0090 The S3C2440 compatible version of the SMDK2440, which has the
0091 option of an S3C2440 or S3C2442 CPU module.
0092
0093 Thorcom VR1000
0094
0095 Custom embedded board
0096
0097 HP IPAQ 1940
0098
0099 Handheld (IPAQ), available in several varieties
0100
0101 HP iPAQ rx3715
0102
0103 S3C2440 based IPAQ, with a number of variations depending on
0104 features shipped.
0105
0106 Acer N30
0107
0108 A S3C2410 based PDA from Acer. There is a Wiki page at
0109 http://handhelds.org/moin/moin.cgi/AcerN30Documentation .
0110
0111 AML M5900
0112
0113 American Microsystems' M5900
0114
0115 Nex Vision Nexcoder
0116 Nex Vision Otom
0117
0118 Two machines by Nex Vision
0119
0120
0121 Adding New Machines
0122 -------------------
0123
0124 The architecture has been designed to support as many machines as can
0125 be configured for it in one kernel build, and any future additions
0126 should keep this in mind before altering items outside of their own
0127 machine files.
0128
0129 Machine definitions should be kept in arch/arm/mach-s3c,
0130 and there are a number of examples that can be looked at.
0131
0132 Read the kernel patch submission policies as well as the
0133 Documentation/arm directory before submitting patches. The
0134 ARM kernel series is managed by Russell King, and has a patch system
0135 located at http://www.arm.linux.org.uk/developer/patches/
0136 as well as mailing lists that can be found from the same site.
0137
0138 As a courtesy, please notify <ben-linux@fluff.org> of any new
0139 machines or other modifications.
0140
0141 Any large scale modifications, or new drivers should be discussed
0142 on the ARM kernel mailing list (linux-arm-kernel) before being
0143 attempted. See http://www.arm.linux.org.uk/mailinglists/ for the
0144 mailing list information.
0145
0146
0147 I2C
0148 ---
0149
0150 The hardware I2C core in the CPU is supported in single master
0151 mode, and can be configured via platform data.
0152
0153
0154 RTC
0155 ---
0156
0157 Support for the onboard RTC unit, including alarm function.
0158
0159 This has recently been upgraded to use the new RTC core,
0160 and the module has been renamed to rtc-s3c to fit in with
0161 the new rtc naming scheme.
0162
0163
0164 Watchdog
0165 --------
0166
0167 The onchip watchdog is available via the standard watchdog
0168 interface.
0169
0170
0171 NAND
0172 ----
0173
0174 The current kernels now have support for the s3c2410 NAND
0175 controller. If there are any problems the latest linux-mtd
0176 code can be found from http://www.linux-mtd.infradead.org/
0177
0178 For more information see Documentation/arm/samsung-s3c24xx/nand.rst
0179
0180
0181 SD/MMC
0182 ------
0183
0184 The SD/MMC hardware pre S3C2443 is supported in the current
0185 kernel, the driver is drivers/mmc/host/s3cmci.c and supports
0186 1 and 4 bit SD or MMC cards.
0187
0188 The SDIO behaviour of this driver has not been fully tested. There is no
0189 current support for hardware SDIO interrupts.
0190
0191
0192 Serial
0193 ------
0194
0195 The s3c2410 serial driver provides support for the internal
0196 serial ports. These devices appear as /dev/ttySAC0 through 3.
0197
0198 To create device nodes for these, use the following commands
0199
0200 mknod ttySAC0 c 204 64
0201 mknod ttySAC1 c 204 65
0202 mknod ttySAC2 c 204 66
0203
0204
0205 GPIO
0206 ----
0207
0208 The core contains support for manipulating the GPIO, see the
0209 documentation in GPIO.txt in the same directory as this file.
0210
0211 Newer kernels carry GPIOLIB, and support is being moved towards
0212 this with some of the older support in line to be removed.
0213
0214 As of v2.6.34, the move towards using gpiolib support is almost
0215 complete, and very little of the old calls are left.
0216
0217 See Documentation/arm/samsung-s3c24xx/gpio.rst for the S3C24XX specific
0218 support and Documentation/arm/samsung/gpio.rst for the core Samsung
0219 implementation.
0220
0221
0222 Clock Management
0223 ----------------
0224
0225 The core provides the interface defined in the header file
0226 include/asm-arm/hardware/clock.h, to allow control over the
0227 various clock units
0228
0229
0230 Suspend to RAM
0231 --------------
0232
0233 For boards that provide support for suspend to RAM, the
0234 system can be placed into low power suspend.
0235
0236 See Suspend.txt for more information.
0237
0238
0239 SPI
0240 ---
0241
0242 SPI drivers are available for both the in-built hardware
0243 (although there is no DMA support yet) and a generic
0244 GPIO based solution.
0245
0246
0247 LEDs
0248 ----
0249
0250 There is support for GPIO based LEDs via a platform driver
0251 in the LED subsystem.
0252
0253
0254 Platform Data
0255 -------------
0256
0257 Whenever a device has platform specific data that is specified
0258 on a per-machine basis, care should be taken to ensure the
0259 following:
0260
0261 1) that default data is not left in the device to confuse the
0262 driver if a machine does not set it at startup
0263
0264 2) the data should (if possible) be marked as __initdata,
0265 to ensure that the data is thrown away if the machine is
0266 not the one currently in use.
0267
0268 The best way of doing this is to make a function that
0269 kmalloc()s an area of memory, and copies the __initdata
0270 and then sets the relevant device's platform data. Making
0271 the function `__init` takes care of ensuring it is discarded
0272 with the rest of the initialisation code::
0273
0274 static __init void s3c24xx_xxx_set_platdata(struct xxx_data *pd)
0275 {
0276 struct s3c2410_xxx_mach_info *npd;
0277
0278 npd = kmalloc(sizeof(struct s3c2410_xxx_mach_info), GFP_KERNEL);
0279 if (npd) {
0280 memcpy(npd, pd, sizeof(struct s3c2410_xxx_mach_info));
0281 s3c_device_xxx.dev.platform_data = npd;
0282 } else {
0283 printk(KERN_ERR "no memory for xxx platform data\n");
0284 }
0285 }
0286
0287 Note, since the code is marked as __init, it should not be
0288 exported outside arch/arm/mach-s3c/, or exported to
0289 modules via EXPORT_SYMBOL() and related functions.
0290
0291
0292 Port Contributors
0293 -----------------
0294
0295 Ben Dooks (BJD)
0296 Vincent Sanders
0297 Herbert Potzl
0298 Arnaud Patard (RTP)
0299 Roc Wu
0300 Klaus Fetscher
0301 Dimitry Andric
0302 Shannon Holland
0303 Guillaume Gourat (NexVision)
0304 Christer Weinigel (wingel) (Acer N30)
0305 Lucas Correia Villa Real (S3C2400 port)
0306
0307
0308 Document Author
0309 ---------------
0310
0311 Ben Dooks, Copyright 2004-2006 Simtec Electronics