1========================== 2S3C24XX ARM Linux Overview 3========================== 4 5 6 7Introduction 8------------ 9 10 The Samsung S3C24XX range of ARM9 System-on-Chip CPUs are supported 11 by the 's3c2410' architecture of ARM Linux. Currently the S3C2410, 12 S3C2412, S3C2413, S3C2416, S3C2440, S3C2442, S3C2443 and S3C2450 devices 13 are supported. 14 15 Support for the S3C2400 and S3C24A0 series was never completed and the 16 corresponding code has been removed after a while. If someone wishes to 17 revive this effort, partial support can be retrieved from earlier Linux 18 versions. 19 20 The S3C2416 and S3C2450 devices are very similar and S3C2450 support is 21 included under the arch/arm/mach-s3c directory. Note, while core 22 support for these SoCs is in, work on some of the extra peripherals 23 and extra interrupts is still ongoing. 24 25 26Configuration 27------------- 28 29 A generic S3C2410 configuration is provided, and can be used as the 30 default by `make s3c2410_defconfig`. This configuration has support 31 for all the machines, and the commonly used features on them. 32 33 Certain machines may have their own default configurations as well, 34 please check the machine specific documentation. 35 36 37Layout 38------ 39 40 The core support files, register, kernel and paltform data are located in the 41 platform code contained in arch/arm/mach-s3c with headers in 42 arch/arm/mach-s3c/include 43 44arch/arm/mach-s3c: 45 46 Files in here are either common to all the s3c24xx family, 47 or are common to only some of them with names to indicate this 48 status. The files that are not common to all are generally named 49 with the initial cpu they support in the series to ensure a short 50 name without any possibility of confusion with newer devices. 51 52 As an example, initially s3c244x would cover s3c2440 and s3c2442, but 53 with the s3c2443 which does not share many of the same drivers in 54 this directory, the name becomes invalid. We stick to s3c2440-<x> 55 to indicate a driver that is s3c2440 and s3c2442 compatible. 56 57 This does mean that to find the status of any given SoC, a number 58 of directories may need to be searched. 59 60 61Machines 62-------- 63 64 The currently supported machines are as follows: 65 66 Simtec Electronics EB2410ITX (BAST) 67 68 A general purpose development board, see EB2410ITX.txt for further 69 details 70 71 Simtec Electronics IM2440D20 (Osiris) 72 73 CPU Module from Simtec Electronics, with a S3C2440A CPU, nand flash 74 and a PCMCIA controller. 75 76 Samsung SMDK2410 77 78 Samsung's own development board, geared for PDA work. 79 80 Samsung/Aiji SMDK2412 81 82 The S3C2412 version of the SMDK2440. 83 84 Samsung/Aiji SMDK2413 85 86 The S3C2412 version of the SMDK2440. 87 88 Samsung/Meritech SMDK2440 89 90 The S3C2440 compatible version of the SMDK2440, which has the 91 option of an S3C2440 or S3C2442 CPU module. 92 93 Thorcom VR1000 94 95 Custom embedded board 96 97 HP IPAQ 1940 98 99 Handheld (IPAQ), available in several varieties 100 101 HP iPAQ rx3715 102 103 S3C2440 based IPAQ, with a number of variations depending on 104 features shipped. 105 106 Acer N30 107 108 A S3C2410 based PDA from Acer. There is a Wiki page at 109 http://handhelds.org/moin/moin.cgi/AcerN30Documentation . 110 111 AML M5900 112 113 American Microsystems' M5900 114 115 Nex Vision Nexcoder 116 Nex Vision Otom 117 118 Two machines by Nex Vision 119 120 121Adding New Machines 122------------------- 123 124 The architecture has been designed to support as many machines as can 125 be configured for it in one kernel build, and any future additions 126 should keep this in mind before altering items outside of their own 127 machine files. 128 129 Machine definitions should be kept in arch/arm/mach-s3c, 130 and there are a number of examples that can be looked at. 131 132 Read the kernel patch submission policies as well as the 133 Documentation/arm directory before submitting patches. The 134 ARM kernel series is managed by Russell King, and has a patch system 135 located at http://www.arm.linux.org.uk/developer/patches/ 136 as well as mailing lists that can be found from the same site. 137 138 As a courtesy, please notify <ben-linux@fluff.org> of any new 139 machines or other modifications. 140 141 Any large scale modifications, or new drivers should be discussed 142 on the ARM kernel mailing list (linux-arm-kernel) before being 143 attempted. See http://www.arm.linux.org.uk/mailinglists/ for the 144 mailing list information. 145 146 147I2C 148--- 149 150 The hardware I2C core in the CPU is supported in single master 151 mode, and can be configured via platform data. 152 153 154RTC 155--- 156 157 Support for the onboard RTC unit, including alarm function. 158 159 This has recently been upgraded to use the new RTC core, 160 and the module has been renamed to rtc-s3c to fit in with 161 the new rtc naming scheme. 162 163 164Watchdog 165-------- 166 167 The onchip watchdog is available via the standard watchdog 168 interface. 169 170 171NAND 172---- 173 174 The current kernels now have support for the s3c2410 NAND 175 controller. If there are any problems the latest linux-mtd 176 code can be found from http://www.linux-mtd.infradead.org/ 177 178 For more information see Documentation/arm/samsung-s3c24xx/nand.rst 179 180 181SD/MMC 182------ 183 184 The SD/MMC hardware pre S3C2443 is supported in the current 185 kernel, the driver is drivers/mmc/host/s3cmci.c and supports 186 1 and 4 bit SD or MMC cards. 187 188 The SDIO behaviour of this driver has not been fully tested. There is no 189 current support for hardware SDIO interrupts. 190 191 192Serial 193------ 194 195 The s3c2410 serial driver provides support for the internal 196 serial ports. These devices appear as /dev/ttySAC0 through 3. 197 198 To create device nodes for these, use the following commands 199 200 mknod ttySAC0 c 204 64 201 mknod ttySAC1 c 204 65 202 mknod ttySAC2 c 204 66 203 204 205GPIO 206---- 207 208 The core contains support for manipulating the GPIO, see the 209 documentation in GPIO.txt in the same directory as this file. 210 211 Newer kernels carry GPIOLIB, and support is being moved towards 212 this with some of the older support in line to be removed. 213 214 As of v2.6.34, the move towards using gpiolib support is almost 215 complete, and very little of the old calls are left. 216 217 See Documentation/arm/samsung-s3c24xx/gpio.rst for the S3C24XX specific 218 support and Documentation/arm/samsung/gpio.rst for the core Samsung 219 implementation. 220 221 222Clock Management 223---------------- 224 225 The core provides the interface defined in the header file 226 include/asm-arm/hardware/clock.h, to allow control over the 227 various clock units 228 229 230Suspend to RAM 231-------------- 232 233 For boards that provide support for suspend to RAM, the 234 system can be placed into low power suspend. 235 236 See Suspend.txt for more information. 237 238 239SPI 240--- 241 242 SPI drivers are available for both the in-built hardware 243 (although there is no DMA support yet) and a generic 244 GPIO based solution. 245 246 247LEDs 248---- 249 250 There is support for GPIO based LEDs via a platform driver 251 in the LED subsystem. 252 253 254Platform Data 255------------- 256 257 Whenever a device has platform specific data that is specified 258 on a per-machine basis, care should be taken to ensure the 259 following: 260 261 1) that default data is not left in the device to confuse the 262 driver if a machine does not set it at startup 263 264 2) the data should (if possible) be marked as __initdata, 265 to ensure that the data is thrown away if the machine is 266 not the one currently in use. 267 268 The best way of doing this is to make a function that 269 kmalloc()s an area of memory, and copies the __initdata 270 and then sets the relevant device's platform data. Making 271 the function `__init` takes care of ensuring it is discarded 272 with the rest of the initialisation code:: 273 274 static __init void s3c24xx_xxx_set_platdata(struct xxx_data *pd) 275 { 276 struct s3c2410_xxx_mach_info *npd; 277 278 npd = kmalloc(sizeof(struct s3c2410_xxx_mach_info), GFP_KERNEL); 279 if (npd) { 280 memcpy(npd, pd, sizeof(struct s3c2410_xxx_mach_info)); 281 s3c_device_xxx.dev.platform_data = npd; 282 } else { 283 printk(KERN_ERR "no memory for xxx platform data\n"); 284 } 285 } 286 287 Note, since the code is marked as __init, it should not be 288 exported outside arch/arm/mach-s3c/, or exported to 289 modules via EXPORT_SYMBOL() and related functions. 290 291 292Port Contributors 293----------------- 294 295 Ben Dooks (BJD) 296 Vincent Sanders 297 Herbert Potzl 298 Arnaud Patard (RTP) 299 Roc Wu 300 Klaus Fetscher 301 Dimitry Andric 302 Shannon Holland 303 Guillaume Gourat (NexVision) 304 Christer Weinigel (wingel) (Acer N30) 305 Lucas Correia Villa Real (S3C2400 port) 306 307 308Document Author 309--------------- 310 311Ben Dooks, Copyright 2004-2006 Simtec Electronics 312