==========================
S3C24XX ARM Linux Overview
==========================



Introduction
------------

  The Samsung S3C24XX range of ARM9 System-on-Chip CPUs are supported
  by the 's3c2410' architecture of ARM Linux. Currently the S3C2410,
  S3C2412, S3C2413, S3C2416, S3C2440, S3C2442, S3C2443 and S3C2450 devices
  are supported.

  Support for the S3C2400 and S3C24A0 series was never completed and the
  corresponding code has been removed after a while.  If someone wishes to
  revive this effort, partial support can be retrieved from earlier Linux
  versions.

  The S3C2416 and S3C2450 devices are very similar and S3C2450 support is
  included under the arch/arm/mach-s3c2416 directory. Note, while core
  support for these SoCs is in, work on some of the extra peripherals
  and extra interrupts is still ongoing.


Configuration
-------------

  A generic S3C2410 configuration is provided, and can be used as the
  default by `make s3c2410_defconfig`. This configuration has support
  for all the machines, and the commonly used features on them.

  Certain machines may have their own default configurations as well,
  please check the machine specific documentation.


Layout
------

  The core support files are located in the platform code contained in
  arch/arm/plat-s3c24xx with headers in include/asm-arm/plat-s3c24xx.
  This directory should be kept to items shared between the platform
  code (arch/arm/plat-s3c24xx) and the arch/arm/mach-s3c24* code.

  Each cpu has a directory with the support files for it, and the
  machines that carry the device. For example S3C2410 is contained
  in arch/arm/mach-s3c2410 and S3C2440 in arch/arm/mach-s3c2440

  Register, kernel and platform data definitions are held in the
  arch/arm/mach-s3c2410 directory./include/mach

arch/arm/plat-s3c24xx:

  Files in here are either common to all the s3c24xx family,
  or are common to only some of them with names to indicate this
  status. The files that are not common to all are generally named
  with the initial cpu they support in the series to ensure a short
  name without any possibility of confusion with newer devices.

  As an example, initially s3c244x would cover s3c2440 and s3c2442, but
  with the s3c2443 which does not share many of the same drivers in
  this directory, the name becomes invalid. We stick to s3c2440-<x>
  to indicate a driver that is s3c2440 and s3c2442 compatible.

  This does mean that to find the status of any given SoC, a number
  of directories may need to be searched.


Machines
--------

  The currently supported machines are as follows:

  Simtec Electronics EB2410ITX (BAST)

    A general purpose development board, see EB2410ITX.txt for further
    details

  Simtec Electronics IM2440D20 (Osiris)

    CPU Module from Simtec Electronics, with a S3C2440A CPU, nand flash
    and a PCMCIA controller.

  Samsung SMDK2410

    Samsung's own development board, geared for PDA work.

  Samsung/Aiji SMDK2412

    The S3C2412 version of the SMDK2440.

  Samsung/Aiji SMDK2413

    The S3C2412 version of the SMDK2440.

  Samsung/Meritech SMDK2440

    The S3C2440 compatible version of the SMDK2440, which has the
    option of an S3C2440 or S3C2442 CPU module.

  Thorcom VR1000

    Custom embedded board

  HP IPAQ 1940

    Handheld (IPAQ), available in several varieties

  HP iPAQ rx3715

    S3C2440 based IPAQ, with a number of variations depending on
    features shipped.

  Acer N30

    A S3C2410 based PDA from Acer.  There is a Wiki page at
    http://handhelds.org/moin/moin.cgi/AcerN30Documentation .

  AML M5900

    American Microsystems' M5900

  Nex Vision Nexcoder
  Nex Vision Otom

    Two machines by Nex Vision


Adding New Machines
-------------------

  The architecture has been designed to support as many machines as can
  be configured for it in one kernel build, and any future additions
  should keep this in mind before altering items outside of their own
  machine files.

  Machine definitions should be kept in linux/arch/arm/mach-s3c2410,
  and there are a number of examples that can be looked at.

  Read the kernel patch submission policies as well as the
  Documentation/arm directory before submitting patches. The
  ARM kernel series is managed by Russell King, and has a patch system
  located at http://www.arm.linux.org.uk/developer/patches/
  as well as mailing lists that can be found from the same site.

  As a courtesy, please notify <ben-linux@fluff.org> of any new
  machines or other modifications.

  Any large scale modifications, or new drivers should be discussed
  on the ARM kernel mailing list (linux-arm-kernel) before being
  attempted. See http://www.arm.linux.org.uk/mailinglists/ for the
  mailing list information.


I2C
---

  The hardware I2C core in the CPU is supported in single master
  mode, and can be configured via platform data.


RTC
---

  Support for the onboard RTC unit, including alarm function.

  This has recently been upgraded to use the new RTC core,
  and the module has been renamed to rtc-s3c to fit in with
  the new rtc naming scheme.


Watchdog
--------

  The onchip watchdog is available via the standard watchdog
  interface.


NAND
----

  The current kernels now have support for the s3c2410 NAND
  controller. If there are any problems the latest linux-mtd
  code can be found from http://www.linux-mtd.infradead.org/

  For more information see Documentation/arm/samsung-s3c24xx/nand.rst


SD/MMC
------

  The SD/MMC hardware pre S3C2443 is supported in the current
  kernel, the driver is drivers/mmc/host/s3cmci.c and supports
  1 and 4 bit SD or MMC cards.

  The SDIO behaviour of this driver has not been fully tested. There is no
  current support for hardware SDIO interrupts.


Serial
------

  The s3c2410 serial driver provides support for the internal
  serial ports. These devices appear as /dev/ttySAC0 through 3.

  To create device nodes for these, use the following commands

    mknod ttySAC0 c 204 64
    mknod ttySAC1 c 204 65
    mknod ttySAC2 c 204 66


GPIO
----

  The core contains support for manipulating the GPIO, see the
  documentation in GPIO.txt in the same directory as this file.

  Newer kernels carry GPIOLIB, and support is being moved towards
  this with some of the older support in line to be removed.

  As of v2.6.34, the move towards using gpiolib support is almost
  complete, and very little of the old calls are left.

  See Documentation/arm/samsung-s3c24xx/gpio.rst for the S3C24XX specific
  support and Documentation/arm/samsung/gpio.rst for the core Samsung
  implementation.


Clock Management
----------------

  The core provides the interface defined in the header file
  include/asm-arm/hardware/clock.h, to allow control over the
  various clock units


Suspend to RAM
--------------

  For boards that provide support for suspend to RAM, the
  system can be placed into low power suspend.

  See Suspend.txt for more information.


SPI
---

  SPI drivers are available for both the in-built hardware
  (although there is no DMA support yet) and a generic
  GPIO based solution.


LEDs
----

  There is support for GPIO based LEDs via a platform driver
  in the LED subsystem.


Platform Data
-------------

  Whenever a device has platform specific data that is specified
  on a per-machine basis, care should be taken to ensure the
  following:

    1) that default data is not left in the device to confuse the
       driver if a machine does not set it at startup

    2) the data should (if possible) be marked as __initdata,
       to ensure that the data is thrown away if the machine is
       not the one currently in use.

       The best way of doing this is to make a function that
       kmalloc()s an area of memory, and copies the __initdata
       and then sets the relevant device's platform data. Making
       the function `__init` takes care of ensuring it is discarded
       with the rest of the initialisation code::

         static __init void s3c24xx_xxx_set_platdata(struct xxx_data *pd)
         {
             struct s3c2410_xxx_mach_info *npd;

	   npd = kmalloc(sizeof(struct s3c2410_xxx_mach_info), GFP_KERNEL);
	   if (npd) {
	      memcpy(npd, pd, sizeof(struct s3c2410_xxx_mach_info));
	      s3c_device_xxx.dev.platform_data = npd;
	   } else {
                printk(KERN_ERR "no memory for xxx platform data\n");
	   }
	}

	Note, since the code is marked as __init, it should not be
	exported outside arch/arm/mach-s3c2410/, or exported to
	modules via EXPORT_SYMBOL() and related functions.


Port Contributors
-----------------

  Ben Dooks (BJD)
  Vincent Sanders
  Herbert Potzl
  Arnaud Patard (RTP)
  Roc Wu
  Klaus Fetscher
  Dimitry Andric
  Shannon Holland
  Guillaume Gourat (NexVision)
  Christer Weinigel (wingel) (Acer N30)
  Lucas Correia Villa Real (S3C2400 port)


Document Author
---------------

Ben Dooks, Copyright 2004-2006 Simtec Electronics
