319 lines
		
	
	
		
			8.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			319 lines
		
	
	
		
			8.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			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, whilst 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.txt
 | 
						|
 | 
						|
 | 
						|
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.txt for the S3C24XX specific
 | 
						|
  support and Documentation/arm/Samsung/GPIO.txt 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
 |