Back to home page

OSCL-LXR

 
 

    


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