123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319 |
- 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
|