forked from Minki/linux
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
This commit is contained in:
commit
8fa76f7e61
7
Documentation/ABI/testing/sysfs-devices-node
Normal file
7
Documentation/ABI/testing/sysfs-devices-node
Normal file
@ -0,0 +1,7 @@
|
||||
What: /sys/devices/system/node/nodeX/compact
|
||||
Date: February 2010
|
||||
Contact: Mel Gorman <mel@csn.ul.ie>
|
||||
Description:
|
||||
When this file is written to, all memory within that node
|
||||
will be compacted. When it completes, memory will be freed
|
||||
into blocks which have as many contiguous pages as possible
|
15
Documentation/ABI/testing/sysfs-firmware-sfi
Normal file
15
Documentation/ABI/testing/sysfs-firmware-sfi
Normal file
@ -0,0 +1,15 @@
|
||||
What: /sys/firmware/sfi/tables/
|
||||
Date: May 2010
|
||||
Contact: Len Brown <lenb@kernel.org>
|
||||
Description:
|
||||
SFI defines a number of small static memory tables
|
||||
so the kernel can get platform information from firmware.
|
||||
|
||||
The tables are defined in the latest SFI specification:
|
||||
http://simplefirmware.org/documentation
|
||||
|
||||
While the tables are used by the kernel, user-space
|
||||
can observe them this way:
|
||||
|
||||
# cd /sys/firmware/sfi/tables
|
||||
# cat $TABLENAME > $TABLENAME.bin
|
@ -639,6 +639,36 @@ is planned to completely remove virt_to_bus() and bus_to_virt() as
|
||||
they are entirely deprecated. Some ports already do not provide these
|
||||
as it is impossible to correctly support them.
|
||||
|
||||
Handling Errors
|
||||
|
||||
DMA address space is limited on some architectures and an allocation
|
||||
failure can be determined by:
|
||||
|
||||
- checking if dma_alloc_coherent returns NULL or dma_map_sg returns 0
|
||||
|
||||
- checking the returned dma_addr_t of dma_map_single and dma_map_page
|
||||
by using dma_mapping_error():
|
||||
|
||||
dma_addr_t dma_handle;
|
||||
|
||||
dma_handle = dma_map_single(dev, addr, size, direction);
|
||||
if (dma_mapping_error(dev, dma_handle)) {
|
||||
/*
|
||||
* reduce current DMA mapping usage,
|
||||
* delay and try again later or
|
||||
* reset driver.
|
||||
*/
|
||||
}
|
||||
|
||||
Networking drivers must call dev_kfree_skb to free the socket buffer
|
||||
and return NETDEV_TX_OK if the DMA mapping fails on the transmit hook
|
||||
(ndo_start_xmit). This means that the socket buffer is just dropped in
|
||||
the failure case.
|
||||
|
||||
SCSI drivers must return SCSI_MLQUEUE_HOST_BUSY if the DMA mapping
|
||||
fails in the queuecommand hook. This means that the SCSI subsystem
|
||||
passes the command to the driver again later.
|
||||
|
||||
Optimizing Unmap State Space Consumption
|
||||
|
||||
On many platforms, dma_unmap_{single,page}() is simply a nop.
|
||||
@ -703,42 +733,25 @@ to "Closing".
|
||||
|
||||
1) Struct scatterlist requirements.
|
||||
|
||||
Struct scatterlist must contain, at a minimum, the following
|
||||
members:
|
||||
Don't invent the architecture specific struct scatterlist; just use
|
||||
<asm-generic/scatterlist.h>. You need to enable
|
||||
CONFIG_NEED_SG_DMA_LENGTH if the architecture supports IOMMUs
|
||||
(including software IOMMU).
|
||||
|
||||
struct page *page;
|
||||
unsigned int offset;
|
||||
unsigned int length;
|
||||
2) ARCH_KMALLOC_MINALIGN
|
||||
|
||||
The base address is specified by a "page+offset" pair.
|
||||
Architectures must ensure that kmalloc'ed buffer is
|
||||
DMA-safe. Drivers and subsystems depend on it. If an architecture
|
||||
isn't fully DMA-coherent (i.e. hardware doesn't ensure that data in
|
||||
the CPU cache is identical to data in main memory),
|
||||
ARCH_KMALLOC_MINALIGN must be set so that the memory allocator
|
||||
makes sure that kmalloc'ed buffer doesn't share a cache line with
|
||||
the others. See arch/arm/include/asm/cache.h as an example.
|
||||
|
||||
Previous versions of struct scatterlist contained a "void *address"
|
||||
field that was sometimes used instead of page+offset. As of Linux
|
||||
2.5., page+offset is always used, and the "address" field has been
|
||||
deleted.
|
||||
|
||||
2) More to come...
|
||||
|
||||
Handling Errors
|
||||
|
||||
DMA address space is limited on some architectures and an allocation
|
||||
failure can be determined by:
|
||||
|
||||
- checking if dma_alloc_coherent returns NULL or dma_map_sg returns 0
|
||||
|
||||
- checking the returned dma_addr_t of dma_map_single and dma_map_page
|
||||
by using dma_mapping_error():
|
||||
|
||||
dma_addr_t dma_handle;
|
||||
|
||||
dma_handle = dma_map_single(dev, addr, size, direction);
|
||||
if (dma_mapping_error(dev, dma_handle)) {
|
||||
/*
|
||||
* reduce current DMA mapping usage,
|
||||
* delay and try again later or
|
||||
* reset driver.
|
||||
*/
|
||||
}
|
||||
Note that ARCH_KMALLOC_MINALIGN is about DMA memory alignment
|
||||
constraints. You don't need to worry about the architecture data
|
||||
alignment constraints (e.g. the alignment constraints about 64-bit
|
||||
objects).
|
||||
|
||||
Closing
|
||||
|
||||
|
@ -130,6 +130,8 @@ Linux kernel master tree:
|
||||
ftp.??.kernel.org:/pub/linux/kernel/...
|
||||
?? == your country code, such as "us", "uk", "fr", etc.
|
||||
|
||||
http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git
|
||||
|
||||
Linux kernel mailing list:
|
||||
linux-kernel@vger.kernel.org
|
||||
[mail majordomo@vger.kernel.org to subscribe]
|
||||
@ -160,3 +162,6 @@ How to NOT write kernel driver by Arjan van de Ven:
|
||||
|
||||
Kernel Janitor:
|
||||
http://janitor.kernelnewbies.org/
|
||||
|
||||
GIT, Fast Version Control System:
|
||||
http://git-scm.com/
|
||||
|
59
Documentation/acpi/apei/einj.txt
Normal file
59
Documentation/acpi/apei/einj.txt
Normal file
@ -0,0 +1,59 @@
|
||||
APEI Error INJection
|
||||
~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
EINJ provides a hardware error injection mechanism
|
||||
It is very useful for debugging and testing of other APEI and RAS features.
|
||||
|
||||
To use EINJ, make sure the following are enabled in your kernel
|
||||
configuration:
|
||||
|
||||
CONFIG_DEBUG_FS
|
||||
CONFIG_ACPI_APEI
|
||||
CONFIG_ACPI_APEI_EINJ
|
||||
|
||||
The user interface of EINJ is debug file system, under the
|
||||
directory apei/einj. The following files are provided.
|
||||
|
||||
- available_error_type
|
||||
Reading this file returns the error injection capability of the
|
||||
platform, that is, which error types are supported. The error type
|
||||
definition is as follow, the left field is the error type value, the
|
||||
right field is error description.
|
||||
|
||||
0x00000001 Processor Correctable
|
||||
0x00000002 Processor Uncorrectable non-fatal
|
||||
0x00000004 Processor Uncorrectable fatal
|
||||
0x00000008 Memory Correctable
|
||||
0x00000010 Memory Uncorrectable non-fatal
|
||||
0x00000020 Memory Uncorrectable fatal
|
||||
0x00000040 PCI Express Correctable
|
||||
0x00000080 PCI Express Uncorrectable fatal
|
||||
0x00000100 PCI Express Uncorrectable non-fatal
|
||||
0x00000200 Platform Correctable
|
||||
0x00000400 Platform Uncorrectable non-fatal
|
||||
0x00000800 Platform Uncorrectable fatal
|
||||
|
||||
The format of file contents are as above, except there are only the
|
||||
available error type lines.
|
||||
|
||||
- error_type
|
||||
This file is used to set the error type value. The error type value
|
||||
is defined in "available_error_type" description.
|
||||
|
||||
- error_inject
|
||||
Write any integer to this file to trigger the error
|
||||
injection. Before this, please specify all necessary error
|
||||
parameters.
|
||||
|
||||
- param1
|
||||
This file is used to set the first error parameter value. Effect of
|
||||
parameter depends on error_type specified. For memory error, this is
|
||||
physical memory address.
|
||||
|
||||
- param2
|
||||
This file is used to set the second error parameter value. Effect of
|
||||
parameter depends on error_type specified. For memory error, this is
|
||||
physical memory address mask.
|
||||
|
||||
For more information about EINJ, please refer to ACPI specification
|
||||
version 4.0, section 17.5.
|
@ -12,6 +12,8 @@ Introduction
|
||||
of the s3c2410 GPIO system, please read the Samsung provided
|
||||
data-sheet/users manual to find out the complete list.
|
||||
|
||||
See Documentation/arm/Samsung/GPIO.txt for the core implemetation.
|
||||
|
||||
|
||||
GPIOLIB
|
||||
-------
|
||||
@ -24,8 +26,60 @@ GPIOLIB
|
||||
listed below will be removed (they may be marked as __deprecated
|
||||
in the near future).
|
||||
|
||||
- s3c2410_gpio_getpin
|
||||
- s3c2410_gpio_setpin
|
||||
The following functions now either have a s3c_ specific variant
|
||||
or are merged into gpiolib. See the definitions in
|
||||
arch/arm/plat-samsung/include/plat/gpio-cfg.h:
|
||||
|
||||
s3c2410_gpio_setpin() gpio_set_value() or gpio_direction_output()
|
||||
s3c2410_gpio_getpin() gpio_get_value() or gpio_direction_input()
|
||||
s3c2410_gpio_getirq() gpio_to_irq()
|
||||
s3c2410_gpio_cfgpin() s3c_gpio_cfgpin()
|
||||
s3c2410_gpio_getcfg() s3c_gpio_getcfg()
|
||||
s3c2410_gpio_pullup() s3c_gpio_setpull()
|
||||
|
||||
|
||||
GPIOLIB conversion
|
||||
------------------
|
||||
|
||||
If you need to convert your board or driver to use gpiolib from the exiting
|
||||
s3c2410 api, then here are some notes on the process.
|
||||
|
||||
1) If your board is exclusively using an GPIO, say to control peripheral
|
||||
power, then it will require to claim the gpio with gpio_request() before
|
||||
it can use it.
|
||||
|
||||
It is recommended to check the return value, with at least WARN_ON()
|
||||
during initialisation.
|
||||
|
||||
2) The s3c2410_gpio_cfgpin() can be directly replaced with s3c_gpio_cfgpin()
|
||||
as they have the same arguments, and can either take the pin specific
|
||||
values, or the more generic special-function-number arguments.
|
||||
|
||||
3) s3c2410_gpio_pullup() changs have the problem that whilst the
|
||||
s3c2410_gpio_pullup(x, 1) can be easily translated to the
|
||||
s3c_gpio_setpull(x, S3C_GPIO_PULL_NONE), the s3c2410_gpio_pullup(x, 0)
|
||||
are not so easy.
|
||||
|
||||
The s3c2410_gpio_pullup(x, 0) case enables the pull-up (or in the case
|
||||
of some of the devices, a pull-down) and as such the new API distinguishes
|
||||
between the UP and DOWN case. There is currently no 'just turn on' setting
|
||||
which may be required if this becomes a problem.
|
||||
|
||||
4) s3c2410_gpio_setpin() can be replaced by gpio_set_value(), the old call
|
||||
does not implicitly configure the relevant gpio to output. The gpio
|
||||
direction should be changed before using gpio_set_value().
|
||||
|
||||
5) s3c2410_gpio_getpin() is replaceable by gpio_get_value() if the pin
|
||||
has been set to input. It is currently unknown what the behaviour is
|
||||
when using gpio_get_value() on an output pin (s3c2410_gpio_getpin
|
||||
would return the value the pin is supposed to be outputting).
|
||||
|
||||
6) s3c2410_gpio_getirq() should be directly replacable with the
|
||||
gpio_to_irq() call.
|
||||
|
||||
The s3c2410_gpio and gpio_ calls have always operated on the same gpio
|
||||
numberspace, so there is no problem with converting the gpio numbering
|
||||
between the calls.
|
||||
|
||||
|
||||
Headers
|
||||
@ -54,6 +108,11 @@ PIN Numbers
|
||||
eg S3C2410_GPA(0) or S3C2410_GPF(1). These defines are used to tell
|
||||
the GPIO functions which pin is to be used.
|
||||
|
||||
With the conversion to gpiolib, there is no longer a direct conversion
|
||||
from gpio pin number to register base address as in earlier kernels. This
|
||||
is due to the number space required for newer SoCs where the later
|
||||
GPIOs are not contiguous.
|
||||
|
||||
|
||||
Configuring a pin
|
||||
-----------------
|
||||
@ -71,6 +130,8 @@ Configuring a pin
|
||||
which would turn GPA(0) into the lowest Address line A0, and set
|
||||
GPE(8) to be connected to the SDIO/MMC controller's SDDAT1 line.
|
||||
|
||||
The s3c_gpio_cfgpin() call is a functional replacement for this call.
|
||||
|
||||
|
||||
Reading the current configuration
|
||||
---------------------------------
|
||||
@ -82,6 +143,9 @@ Reading the current configuration
|
||||
The return value will be from the same set of values which can be
|
||||
passed to s3c2410_gpio_cfgpin().
|
||||
|
||||
The s3c_gpio_getcfg() call should be a functional replacement for
|
||||
this call.
|
||||
|
||||
|
||||
Configuring a pull-up resistor
|
||||
------------------------------
|
||||
@ -95,6 +159,10 @@ Configuring a pull-up resistor
|
||||
Where the to value is zero to set the pull-up off, and 1 to enable
|
||||
the specified pull-up. Any other values are currently undefined.
|
||||
|
||||
The s3c_gpio_setpull() offers similar functionality, but with the
|
||||
ability to encode whether the pull is up or down. Currently there
|
||||
is no 'just on' state, so up or down must be selected.
|
||||
|
||||
|
||||
Getting the state of a PIN
|
||||
--------------------------
|
||||
@ -106,6 +174,9 @@ Getting the state of a PIN
|
||||
This will return either zero or non-zero. Do not count on this
|
||||
function returning 1 if the pin is set.
|
||||
|
||||
This call is now implemented by the relevant gpiolib calls, convert
|
||||
your board or driver to use gpiolib.
|
||||
|
||||
|
||||
Setting the state of a PIN
|
||||
--------------------------
|
||||
@ -117,6 +188,9 @@ Setting the state of a PIN
|
||||
Which sets the given pin to the value. Use 0 to write 0, and 1 to
|
||||
set the output to 1.
|
||||
|
||||
This call is now implemented by the relevant gpiolib calls, convert
|
||||
your board or driver to use gpiolib.
|
||||
|
||||
|
||||
Getting the IRQ number associated with a PIN
|
||||
--------------------------------------------
|
||||
@ -128,6 +202,9 @@ Getting the IRQ number associated with a PIN
|
||||
|
||||
Note, not all pins have an IRQ.
|
||||
|
||||
This call is now implemented by the relevant gpiolib calls, convert
|
||||
your board or driver to use gpiolib.
|
||||
|
||||
|
||||
Authour
|
||||
-------
|
||||
|
@ -8,10 +8,16 @@ 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, S3C2440, S3C2442 and S3C2443 devices are supported.
|
||||
S3C2412, S3C2413, S3C2416 S3C2440, S3C2442, S3C2443 and S3C2450 devices
|
||||
are supported.
|
||||
|
||||
Support for the S3C2400 and S3C24A0 series are in progress.
|
||||
|
||||
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
|
||||
-------------
|
||||
@ -209,6 +215,13 @@ GPIO
|
||||
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
|
||||
----------------
|
||||
|
42
Documentation/arm/Samsung/GPIO.txt
Normal file
42
Documentation/arm/Samsung/GPIO.txt
Normal file
@ -0,0 +1,42 @@
|
||||
Samsung GPIO implementation
|
||||
===========================
|
||||
|
||||
Introduction
|
||||
------------
|
||||
|
||||
This outlines the Samsung GPIO implementation and the architecture
|
||||
specfic calls provided alongisde the drivers/gpio core.
|
||||
|
||||
|
||||
S3C24XX (Legacy)
|
||||
----------------
|
||||
|
||||
See Documentation/arm/Samsung-S3C24XX/GPIO.txt for more information
|
||||
about these devices. Their implementation is being brought into line
|
||||
with the core samsung implementation described in this document.
|
||||
|
||||
|
||||
GPIOLIB integration
|
||||
-------------------
|
||||
|
||||
The gpio implementation uses gpiolib as much as possible, only providing
|
||||
specific calls for the items that require Samsung specific handling, such
|
||||
as pin special-function or pull resistor control.
|
||||
|
||||
GPIO numbering is synchronised between the Samsung and gpiolib system.
|
||||
|
||||
|
||||
PIN configuration
|
||||
-----------------
|
||||
|
||||
Pin configuration is specific to the Samsung architecutre, with each SoC
|
||||
registering the necessary information for the core gpio configuration
|
||||
implementation to configure pins as necessary.
|
||||
|
||||
The s3c_gpio_cfgpin() and s3c_gpio_setpull() provide the means for a
|
||||
driver or machine to change gpio configuration.
|
||||
|
||||
See arch/arm/plat-samsung/include/plat/gpio-cfg.h for more information
|
||||
on these functions.
|
||||
|
||||
|
@ -13,9 +13,10 @@ Introduction
|
||||
|
||||
- S3C24XX: See Documentation/arm/Samsung-S3C24XX/Overview.txt for full list
|
||||
- S3C64XX: S3C6400 and S3C6410
|
||||
- S5PC6440
|
||||
|
||||
S5PC100 and S5PC110 support is currently being merged
|
||||
- S5P6440
|
||||
- S5P6442
|
||||
- S5PC100
|
||||
- S5PC110 / S5PV210
|
||||
|
||||
|
||||
S3C24XX Systems
|
||||
@ -35,7 +36,10 @@ Configuration
|
||||
unifying all the SoCs into one kernel.
|
||||
|
||||
s5p6440_defconfig - S5P6440 specific default configuration
|
||||
s5p6442_defconfig - S5P6442 specific default configuration
|
||||
s5pc100_defconfig - S5PC100 specific default configuration
|
||||
s5pc110_defconfig - S5PC110 specific default configuration
|
||||
s5pv210_defconfig - S5PV210 specific default configuration
|
||||
|
||||
|
||||
Layout
|
||||
@ -50,18 +54,27 @@ Layout
|
||||
specific information. It contains the base clock, GPIO and device definitions
|
||||
to get the system running.
|
||||
|
||||
plat-s3c is the s3c24xx/s3c64xx platform directory, although it is currently
|
||||
involved in other builds this will be phased out once the relevant code is
|
||||
moved elsewhere.
|
||||
|
||||
plat-s3c24xx is for s3c24xx specific builds, see the S3C24XX docs.
|
||||
|
||||
plat-s3c64xx is for the s3c64xx specific bits, see the S3C24XX docs.
|
||||
|
||||
plat-s5p is for s5p specific builds, more to be added.
|
||||
plat-s5p is for s5p specific builds, and contains common support for the
|
||||
S5P specific systems. Not all S5Ps use all the features in this directory
|
||||
due to differences in the hardware.
|
||||
|
||||
|
||||
Layout changes
|
||||
--------------
|
||||
|
||||
The old plat-s3c and plat-s5pc1xx directories have been removed, with
|
||||
support moved to either plat-samsung or plat-s5p as necessary. These moves
|
||||
where to simplify the include and dependency issues involved with having
|
||||
so many different platform directories.
|
||||
|
||||
It was decided to remove plat-s5pc1xx as some of the support was already
|
||||
in plat-s5p or plat-samsung, with the S5PC110 support added with S5PV210
|
||||
the only user was the S5PC100. The S5PC100 specific items where moved to
|
||||
arch/arm/mach-s5pc100.
|
||||
|
||||
|
||||
[ to finish ]
|
||||
|
||||
|
||||
Port Contributors
|
||||
|
@ -339,7 +339,7 @@ To mount a cgroup hierarchy with all available subsystems, type:
|
||||
The "xxx" is not interpreted by the cgroup code, but will appear in
|
||||
/proc/mounts so may be any useful identifying string that you like.
|
||||
|
||||
To mount a cgroup hierarchy with just the cpuset and numtasks
|
||||
To mount a cgroup hierarchy with just the cpuset and memory
|
||||
subsystems, type:
|
||||
# mount -t cgroup -o cpuset,memory hier1 /dev/cgroup
|
||||
|
||||
|
@ -1,18 +1,15 @@
|
||||
Memory Resource Controller
|
||||
|
||||
NOTE: The Memory Resource Controller has been generically been referred
|
||||
to as the memory controller in this document. Do not confuse memory controller
|
||||
used here with the memory controller that is used in hardware.
|
||||
to as the memory controller in this document. Do not confuse memory
|
||||
controller used here with the memory controller that is used in hardware.
|
||||
|
||||
Salient features
|
||||
|
||||
a. Enable control of Anonymous, Page Cache (mapped and unmapped) and
|
||||
Swap Cache memory pages.
|
||||
b. The infrastructure allows easy addition of other types of memory to control
|
||||
c. Provides *zero overhead* for non memory controller users
|
||||
d. Provides a double LRU: global memory pressure causes reclaim from the
|
||||
global LRU; a cgroup on hitting a limit, reclaims from the per
|
||||
cgroup LRU
|
||||
(For editors)
|
||||
In this document:
|
||||
When we mention a cgroup (cgroupfs's directory) with memory controller,
|
||||
we call it "memory cgroup". When you see git-log and source code, you'll
|
||||
see patch's title and function names tend to use "memcg".
|
||||
In this document, we avoid using it.
|
||||
|
||||
Benefits and Purpose of the memory controller
|
||||
|
||||
@ -33,6 +30,45 @@ d. A CD/DVD burner could control the amount of memory used by the
|
||||
e. There are several other use cases, find one or use the controller just
|
||||
for fun (to learn and hack on the VM subsystem).
|
||||
|
||||
Current Status: linux-2.6.34-mmotm(development version of 2010/April)
|
||||
|
||||
Features:
|
||||
- accounting anonymous pages, file caches, swap caches usage and limiting them.
|
||||
- private LRU and reclaim routine. (system's global LRU and private LRU
|
||||
work independently from each other)
|
||||
- optionally, memory+swap usage can be accounted and limited.
|
||||
- hierarchical accounting
|
||||
- soft limit
|
||||
- moving(recharging) account at moving a task is selectable.
|
||||
- usage threshold notifier
|
||||
- oom-killer disable knob and oom-notifier
|
||||
- Root cgroup has no limit controls.
|
||||
|
||||
Kernel memory and Hugepages are not under control yet. We just manage
|
||||
pages on LRU. To add more controls, we have to take care of performance.
|
||||
|
||||
Brief summary of control files.
|
||||
|
||||
tasks # attach a task(thread) and show list of threads
|
||||
cgroup.procs # show list of processes
|
||||
cgroup.event_control # an interface for event_fd()
|
||||
memory.usage_in_bytes # show current memory(RSS+Cache) usage.
|
||||
memory.memsw.usage_in_bytes # show current memory+Swap usage
|
||||
memory.limit_in_bytes # set/show limit of memory usage
|
||||
memory.memsw.limit_in_bytes # set/show limit of memory+Swap usage
|
||||
memory.failcnt # show the number of memory usage hits limits
|
||||
memory.memsw.failcnt # show the number of memory+Swap hits limits
|
||||
memory.max_usage_in_bytes # show max memory usage recorded
|
||||
memory.memsw.usage_in_bytes # show max memory+Swap usage recorded
|
||||
memory.soft_limit_in_bytes # set/show soft limit of memory usage
|
||||
memory.stat # show various statistics
|
||||
memory.use_hierarchy # set/show hierarchical account enabled
|
||||
memory.force_empty # trigger forced move charge to parent
|
||||
memory.swappiness # set/show swappiness parameter of vmscan
|
||||
(See sysctl's vm.swappiness)
|
||||
memory.move_charge_at_immigrate # set/show controls of moving charges
|
||||
memory.oom_control # set/show oom controls.
|
||||
|
||||
1. History
|
||||
|
||||
The memory controller has a long history. A request for comments for the memory
|
||||
@ -106,14 +142,14 @@ the necessary data structures and check if the cgroup that is being charged
|
||||
is over its limit. If it is then reclaim is invoked on the cgroup.
|
||||
More details can be found in the reclaim section of this document.
|
||||
If everything goes well, a page meta-data-structure called page_cgroup is
|
||||
allocated and associated with the page. This routine also adds the page to
|
||||
the per cgroup LRU.
|
||||
updated. page_cgroup has its own LRU on cgroup.
|
||||
(*) page_cgroup structure is allocated at boot/memory-hotplug time.
|
||||
|
||||
2.2.1 Accounting details
|
||||
|
||||
All mapped anon pages (RSS) and cache pages (Page Cache) are accounted.
|
||||
(some pages which never be reclaimable and will not be on global LRU
|
||||
are not accounted. we just accounts pages under usual vm management.)
|
||||
Some pages which are never reclaimable and will not be on the global LRU
|
||||
are not accounted. We just account pages under usual VM management.
|
||||
|
||||
RSS pages are accounted at page_fault unless they've already been accounted
|
||||
for earlier. A file page will be accounted for as Page Cache when it's
|
||||
@ -121,12 +157,19 @@ inserted into inode (radix-tree). While it's mapped into the page tables of
|
||||
processes, duplicate accounting is carefully avoided.
|
||||
|
||||
A RSS page is unaccounted when it's fully unmapped. A PageCache page is
|
||||
unaccounted when it's removed from radix-tree.
|
||||
unaccounted when it's removed from radix-tree. Even if RSS pages are fully
|
||||
unmapped (by kswapd), they may exist as SwapCache in the system until they
|
||||
are really freed. Such SwapCaches also also accounted.
|
||||
A swapped-in page is not accounted until it's mapped.
|
||||
|
||||
Note: The kernel does swapin-readahead and read multiple swaps at once.
|
||||
This means swapped-in pages may contain pages for other tasks than a task
|
||||
causing page fault. So, we avoid accounting at swap-in I/O.
|
||||
|
||||
At page migration, accounting information is kept.
|
||||
|
||||
Note: we just account pages-on-lru because our purpose is to control amount
|
||||
of used pages. not-on-lru pages are tend to be out-of-control from vm view.
|
||||
Note: we just account pages-on-LRU because our purpose is to control amount
|
||||
of used pages; not-on-LRU pages tend to be out-of-control from VM view.
|
||||
|
||||
2.3 Shared Page Accounting
|
||||
|
||||
@ -143,6 +186,7 @@ caller of swapoff rather than the users of shmem.
|
||||
|
||||
|
||||
2.4 Swap Extension (CONFIG_CGROUP_MEM_RES_CTLR_SWAP)
|
||||
|
||||
Swap Extension allows you to record charge for swap. A swapped-in page is
|
||||
charged back to original page allocator if possible.
|
||||
|
||||
@ -150,13 +194,20 @@ When swap is accounted, following files are added.
|
||||
- memory.memsw.usage_in_bytes.
|
||||
- memory.memsw.limit_in_bytes.
|
||||
|
||||
usage of mem+swap is limited by memsw.limit_in_bytes.
|
||||
memsw means memory+swap. Usage of memory+swap is limited by
|
||||
memsw.limit_in_bytes.
|
||||
|
||||
* why 'mem+swap' rather than swap.
|
||||
Example: Assume a system with 4G of swap. A task which allocates 6G of memory
|
||||
(by mistake) under 2G memory limitation will use all swap.
|
||||
In this case, setting memsw.limit_in_bytes=3G will prevent bad use of swap.
|
||||
By using memsw limit, you can avoid system OOM which can be caused by swap
|
||||
shortage.
|
||||
|
||||
* why 'memory+swap' rather than swap.
|
||||
The global LRU(kswapd) can swap out arbitrary pages. Swap-out means
|
||||
to move account from memory to swap...there is no change in usage of
|
||||
mem+swap. In other words, when we want to limit the usage of swap without
|
||||
affecting global LRU, mem+swap limit is better than just limiting swap from
|
||||
memory+swap. In other words, when we want to limit the usage of swap without
|
||||
affecting global LRU, memory+swap limit is better than just limiting swap from
|
||||
OS point of view.
|
||||
|
||||
* What happens when a cgroup hits memory.memsw.limit_in_bytes
|
||||
@ -168,12 +219,12 @@ it by cgroup.
|
||||
|
||||
2.5 Reclaim
|
||||
|
||||
Each cgroup maintains a per cgroup LRU that consists of an active
|
||||
and inactive list. When a cgroup goes over its limit, we first try
|
||||
Each cgroup maintains a per cgroup LRU which has the same structure as
|
||||
global VM. When a cgroup goes over its limit, we first try
|
||||
to reclaim memory from the cgroup so as to make space for the new
|
||||
pages that the cgroup has touched. If the reclaim is unsuccessful,
|
||||
an OOM routine is invoked to select and kill the bulkiest task in the
|
||||
cgroup.
|
||||
cgroup. (See 10. OOM Control below.)
|
||||
|
||||
The reclaim algorithm has not been modified for cgroups, except that
|
||||
pages that are selected for reclaiming come from the per cgroup LRU
|
||||
@ -184,13 +235,22 @@ limits on the root cgroup.
|
||||
|
||||
Note2: When panic_on_oom is set to "2", the whole system will panic.
|
||||
|
||||
2. Locking
|
||||
When oom event notifier is registered, event will be delivered.
|
||||
(See oom_control section)
|
||||
|
||||
The memory controller uses the following hierarchy
|
||||
2.6 Locking
|
||||
|
||||
1. zone->lru_lock is used for selecting pages to be isolated
|
||||
2. mem->per_zone->lru_lock protects the per cgroup LRU (per zone)
|
||||
3. lock_page_cgroup() is used to protect page->page_cgroup
|
||||
lock_page_cgroup()/unlock_page_cgroup() should not be called under
|
||||
mapping->tree_lock.
|
||||
|
||||
Other lock order is following:
|
||||
PG_locked.
|
||||
mm->page_table_lock
|
||||
zone->lru_lock
|
||||
lock_page_cgroup.
|
||||
In many cases, just lock_page_cgroup() is called.
|
||||
per-zone-per-cgroup LRU (cgroup's private LRU) is just guarded by
|
||||
zone->lru_lock, it has no lock of its own.
|
||||
|
||||
3. User Interface
|
||||
|
||||
@ -199,6 +259,7 @@ The memory controller uses the following hierarchy
|
||||
a. Enable CONFIG_CGROUPS
|
||||
b. Enable CONFIG_RESOURCE_COUNTERS
|
||||
c. Enable CONFIG_CGROUP_MEM_RES_CTLR
|
||||
d. Enable CONFIG_CGROUP_MEM_RES_CTLR_SWAP (to use swap extension)
|
||||
|
||||
1. Prepare the cgroups
|
||||
# mkdir -p /cgroups
|
||||
@ -206,31 +267,28 @@ c. Enable CONFIG_CGROUP_MEM_RES_CTLR
|
||||
|
||||
2. Make the new group and move bash into it
|
||||
# mkdir /cgroups/0
|
||||
# echo $$ > /cgroups/0/tasks
|
||||
# echo $$ > /cgroups/0/tasks
|
||||
|
||||
Since now we're in the 0 cgroup,
|
||||
We can alter the memory limit:
|
||||
Since now we're in the 0 cgroup, we can alter the memory limit:
|
||||
# echo 4M > /cgroups/0/memory.limit_in_bytes
|
||||
|
||||
NOTE: We can use a suffix (k, K, m, M, g or G) to indicate values in kilo,
|
||||
mega or gigabytes.
|
||||
mega or gigabytes. (Here, Kilo, Mega, Giga are Kibibytes, Mebibytes, Gibibytes.)
|
||||
|
||||
NOTE: We can write "-1" to reset the *.limit_in_bytes(unlimited).
|
||||
NOTE: We cannot set limits on the root cgroup any more.
|
||||
|
||||
# cat /cgroups/0/memory.limit_in_bytes
|
||||
4194304
|
||||
|
||||
NOTE: The interface has now changed to display the usage in bytes
|
||||
instead of pages
|
||||
|
||||
We can check the usage:
|
||||
# cat /cgroups/0/memory.usage_in_bytes
|
||||
1216512
|
||||
|
||||
A successful write to this file does not guarantee a successful set of
|
||||
this limit to the value written into the file. This can be due to a
|
||||
this limit to the value written into the file. This can be due to a
|
||||
number of factors, such as rounding up to page boundaries or the total
|
||||
availability of memory on the system. The user is required to re-read
|
||||
availability of memory on the system. The user is required to re-read
|
||||
this file after a write to guarantee the value committed by the kernel.
|
||||
|
||||
# echo 1 > memory.limit_in_bytes
|
||||
@ -245,15 +303,23 @@ caches, RSS and Active pages/Inactive pages are shown.
|
||||
|
||||
4. Testing
|
||||
|
||||
Balbir posted lmbench, AIM9, LTP and vmmstress results [10] and [11].
|
||||
Apart from that v6 has been tested with several applications and regular
|
||||
daily use. The controller has also been tested on the PPC64, x86_64 and
|
||||
UML platforms.
|
||||
For testing features and implementation, see memcg_test.txt.
|
||||
|
||||
Performance test is also important. To see pure memory controller's overhead,
|
||||
testing on tmpfs will give you good numbers of small overheads.
|
||||
Example: do kernel make on tmpfs.
|
||||
|
||||
Page-fault scalability is also important. At measuring parallel
|
||||
page fault test, multi-process test may be better than multi-thread
|
||||
test because it has noise of shared objects/status.
|
||||
|
||||
But the above two are testing extreme situations.
|
||||
Trying usual test under memory controller is always helpful.
|
||||
|
||||
4.1 Troubleshooting
|
||||
|
||||
Sometimes a user might find that the application under a cgroup is
|
||||
terminated. There are several causes for this:
|
||||
terminated by OOM killer. There are several causes for this:
|
||||
|
||||
1. The cgroup limit is too low (just too low to do anything useful)
|
||||
2. The user is using anonymous memory and swap is turned off or too low
|
||||
@ -261,6 +327,9 @@ terminated. There are several causes for this:
|
||||
A sync followed by echo 1 > /proc/sys/vm/drop_caches will help get rid of
|
||||
some of the pages cached in the cgroup (page cache pages).
|
||||
|
||||
To know what happens, disable OOM_Kill by 10. OOM Control(see below) and
|
||||
seeing what happens will be helpful.
|
||||
|
||||
4.2 Task migration
|
||||
|
||||
When a task migrates from one cgroup to another, its charge is not
|
||||
@ -268,16 +337,19 @@ carried forward by default. The pages allocated from the original cgroup still
|
||||
remain charged to it, the charge is dropped when the page is freed or
|
||||
reclaimed.
|
||||
|
||||
Note: You can move charges of a task along with task migration. See 8.
|
||||
You can move charges of a task along with task migration.
|
||||
See 8. "Move charges at task migration"
|
||||
|
||||
4.3 Removing a cgroup
|
||||
|
||||
A cgroup can be removed by rmdir, but as discussed in sections 4.1 and 4.2, a
|
||||
cgroup might have some charge associated with it, even though all
|
||||
tasks have migrated away from it.
|
||||
Such charges are freed(at default) or moved to its parent. When moved,
|
||||
both of RSS and CACHES are moved to parent.
|
||||
If both of them are busy, rmdir() returns -EBUSY. See 5.1 Also.
|
||||
tasks have migrated away from it. (because we charge against pages, not
|
||||
against tasks.)
|
||||
|
||||
Such charges are freed or moved to their parent. At moving, both of RSS
|
||||
and CACHES are moved to parent.
|
||||
rmdir() may return -EBUSY if freeing/moving fails. See 5.1 also.
|
||||
|
||||
Charges recorded in swap information is not updated at removal of cgroup.
|
||||
Recorded information is discarded and a cgroup which uses swap (swapcache)
|
||||
@ -293,10 +365,10 @@ will be charged as a new owner of it.
|
||||
|
||||
# echo 0 > memory.force_empty
|
||||
|
||||
Almost all pages tracked by this memcg will be unmapped and freed. Some of
|
||||
pages cannot be freed because it's locked or in-use. Such pages are moved
|
||||
to parent and this cgroup will be empty. But this may return -EBUSY in
|
||||
some too busy case.
|
||||
Almost all pages tracked by this memory cgroup will be unmapped and freed.
|
||||
Some pages cannot be freed because they are locked or in-use. Such pages are
|
||||
moved to parent and this cgroup will be empty. This may return -EBUSY if
|
||||
VM is too busy to free/move all pages immediately.
|
||||
|
||||
Typical use case of this interface is that calling this before rmdir().
|
||||
Because rmdir() moves all pages to parent, some out-of-use page caches can be
|
||||
@ -306,19 +378,41 @@ will be charged as a new owner of it.
|
||||
|
||||
memory.stat file includes following statistics
|
||||
|
||||
# per-memory cgroup local status
|
||||
cache - # of bytes of page cache memory.
|
||||
rss - # of bytes of anonymous and swap cache memory.
|
||||
mapped_file - # of bytes of mapped file (includes tmpfs/shmem)
|
||||
pgpgin - # of pages paged in (equivalent to # of charging events).
|
||||
pgpgout - # of pages paged out (equivalent to # of uncharging events).
|
||||
active_anon - # of bytes of anonymous and swap cache memory on active
|
||||
lru list.
|
||||
swap - # of bytes of swap usage
|
||||
inactive_anon - # of bytes of anonymous memory and swap cache memory on
|
||||
inactive lru list.
|
||||
active_file - # of bytes of file-backed memory on active lru list.
|
||||
inactive_file - # of bytes of file-backed memory on inactive lru list.
|
||||
LRU list.
|
||||
active_anon - # of bytes of anonymous and swap cache memory on active
|
||||
inactive LRU list.
|
||||
inactive_file - # of bytes of file-backed memory on inactive LRU list.
|
||||
active_file - # of bytes of file-backed memory on active LRU list.
|
||||
unevictable - # of bytes of memory that cannot be reclaimed (mlocked etc).
|
||||
|
||||
The following additional stats are dependent on CONFIG_DEBUG_VM.
|
||||
# status considering hierarchy (see memory.use_hierarchy settings)
|
||||
|
||||
hierarchical_memory_limit - # of bytes of memory limit with regard to hierarchy
|
||||
under which the memory cgroup is
|
||||
hierarchical_memsw_limit - # of bytes of memory+swap limit with regard to
|
||||
hierarchy under which memory cgroup is.
|
||||
|
||||
total_cache - sum of all children's "cache"
|
||||
total_rss - sum of all children's "rss"
|
||||
total_mapped_file - sum of all children's "cache"
|
||||
total_pgpgin - sum of all children's "pgpgin"
|
||||
total_pgpgout - sum of all children's "pgpgout"
|
||||
total_swap - sum of all children's "swap"
|
||||
total_inactive_anon - sum of all children's "inactive_anon"
|
||||
total_active_anon - sum of all children's "active_anon"
|
||||
total_inactive_file - sum of all children's "inactive_file"
|
||||
total_active_file - sum of all children's "active_file"
|
||||
total_unevictable - sum of all children's "unevictable"
|
||||
|
||||
# The following additional stats are dependent on CONFIG_DEBUG_VM.
|
||||
|
||||
inactive_ratio - VM internal parameter. (see mm/page_alloc.c)
|
||||
recent_rotated_anon - VM internal parameter. (see mm/vmscan.c)
|
||||
@ -327,24 +421,37 @@ recent_scanned_anon - VM internal parameter. (see mm/vmscan.c)
|
||||
recent_scanned_file - VM internal parameter. (see mm/vmscan.c)
|
||||
|
||||
Memo:
|
||||
recent_rotated means recent frequency of lru rotation.
|
||||
recent_scanned means recent # of scans to lru.
|
||||
recent_rotated means recent frequency of LRU rotation.
|
||||
recent_scanned means recent # of scans to LRU.
|
||||
showing for better debug please see the code for meanings.
|
||||
|
||||
Note:
|
||||
Only anonymous and swap cache memory is listed as part of 'rss' stat.
|
||||
This should not be confused with the true 'resident set size' or the
|
||||
amount of physical memory used by the cgroup. Per-cgroup rss
|
||||
accounting is not done yet.
|
||||
amount of physical memory used by the cgroup.
|
||||
'rss + file_mapped" will give you resident set size of cgroup.
|
||||
(Note: file and shmem may be shared among other cgroups. In that case,
|
||||
file_mapped is accounted only when the memory cgroup is owner of page
|
||||
cache.)
|
||||
|
||||
5.3 swappiness
|
||||
Similar to /proc/sys/vm/swappiness, but affecting a hierarchy of groups only.
|
||||
|
||||
Following cgroups' swappiness can't be changed.
|
||||
- root cgroup (uses /proc/sys/vm/swappiness).
|
||||
- a cgroup which uses hierarchy and it has child cgroup.
|
||||
- a cgroup which uses hierarchy and not the root of hierarchy.
|
||||
Similar to /proc/sys/vm/swappiness, but affecting a hierarchy of groups only.
|
||||
|
||||
Following cgroups' swappiness can't be changed.
|
||||
- root cgroup (uses /proc/sys/vm/swappiness).
|
||||
- a cgroup which uses hierarchy and it has other cgroup(s) below it.
|
||||
- a cgroup which uses hierarchy and not the root of hierarchy.
|
||||
|
||||
5.4 failcnt
|
||||
|
||||
A memory cgroup provides memory.failcnt and memory.memsw.failcnt files.
|
||||
This failcnt(== failure count) shows the number of times that a usage counter
|
||||
hit its limit. When a memory cgroup hits a limit, failcnt increases and
|
||||
memory under it will be reclaimed.
|
||||
|
||||
You can reset failcnt by writing 0 to failcnt file.
|
||||
# echo 0 > .../memory.failcnt
|
||||
|
||||
6. Hierarchy support
|
||||
|
||||
@ -363,13 +470,13 @@ hierarchy
|
||||
|
||||
In the diagram above, with hierarchical accounting enabled, all memory
|
||||
usage of e, is accounted to its ancestors up until the root (i.e, c and root),
|
||||
that has memory.use_hierarchy enabled. If one of the ancestors goes over its
|
||||
that has memory.use_hierarchy enabled. If one of the ancestors goes over its
|
||||
limit, the reclaim algorithm reclaims from the tasks in the ancestor and the
|
||||
children of the ancestor.
|
||||
|
||||
6.1 Enabling hierarchical accounting and reclaim
|
||||
|
||||
The memory controller by default disables the hierarchy feature. Support
|
||||
A memory cgroup by default disables the hierarchy feature. Support
|
||||
can be enabled by writing 1 to memory.use_hierarchy file of the root cgroup
|
||||
|
||||
# echo 1 > memory.use_hierarchy
|
||||
@ -379,10 +486,10 @@ The feature can be disabled by
|
||||
# echo 0 > memory.use_hierarchy
|
||||
|
||||
NOTE1: Enabling/disabling will fail if the cgroup already has other
|
||||
cgroups created below it.
|
||||
cgroups created below it.
|
||||
|
||||
NOTE2: When panic_on_oom is set to "2", the whole system will panic in
|
||||
case of an oom event in any cgroup.
|
||||
case of an OOM event in any cgroup.
|
||||
|
||||
7. Soft limits
|
||||
|
||||
@ -392,7 +499,7 @@ is to allow control groups to use as much of the memory as needed, provided
|
||||
a. There is no memory contention
|
||||
b. They do not exceed their hard limit
|
||||
|
||||
When the system detects memory contention or low memory control groups
|
||||
When the system detects memory contention or low memory, control groups
|
||||
are pushed back to their soft limits. If the soft limit of each control
|
||||
group is very high, they are pushed back as much as possible to make
|
||||
sure that one control group does not starve the others of memory.
|
||||
@ -406,7 +513,7 @@ it gets invoked from balance_pgdat (kswapd).
|
||||
7.1 Interface
|
||||
|
||||
Soft limits can be setup by using the following commands (in this example we
|
||||
assume a soft limit of 256 megabytes)
|
||||
assume a soft limit of 256 MiB)
|
||||
|
||||
# echo 256M > memory.soft_limit_in_bytes
|
||||
|
||||
@ -442,7 +549,7 @@ Note: Charges are moved only when you move mm->owner, IOW, a leader of a thread
|
||||
Note: If we cannot find enough space for the task in the destination cgroup, we
|
||||
try to make space by reclaiming memory. Task migration may fail if we
|
||||
cannot make enough space.
|
||||
Note: It can take several seconds if you move charges in giga bytes order.
|
||||
Note: It can take several seconds if you move charges much.
|
||||
|
||||
And if you want disable it again:
|
||||
|
||||
@ -451,21 +558,27 @@ And if you want disable it again:
|
||||
8.2 Type of charges which can be move
|
||||
|
||||
Each bits of move_charge_at_immigrate has its own meaning about what type of
|
||||
charges should be moved.
|
||||
charges should be moved. But in any cases, it must be noted that an account of
|
||||
a page or a swap can be moved only when it is charged to the task's current(old)
|
||||
memory cgroup.
|
||||
|
||||
bit | what type of charges would be moved ?
|
||||
-----+------------------------------------------------------------------------
|
||||
0 | A charge of an anonymous page(or swap of it) used by the target task.
|
||||
| Those pages and swaps must be used only by the target task. You must
|
||||
| enable Swap Extension(see 2.4) to enable move of swap charges.
|
||||
|
||||
Note: Those pages and swaps must be charged to the old cgroup.
|
||||
Note: More type of pages(e.g. file cache, shmem,) will be supported by other
|
||||
bits in future.
|
||||
-----+------------------------------------------------------------------------
|
||||
1 | A charge of file pages(normal file, tmpfs file(e.g. ipc shared memory)
|
||||
| and swaps of tmpfs file) mmapped by the target task. Unlike the case of
|
||||
| anonymous pages, file pages(and swaps) in the range mmapped by the task
|
||||
| will be moved even if the task hasn't done page fault, i.e. they might
|
||||
| not be the task's "RSS", but other task's "RSS" that maps the same file.
|
||||
| And mapcount of the page is ignored(the page can be moved even if
|
||||
| page_mapcount(page) > 1). You must enable Swap Extension(see 2.4) to
|
||||
| enable move of swap charges.
|
||||
|
||||
8.3 TODO
|
||||
|
||||
- Add support for other types of pages(e.g. file cache, shmem, etc.).
|
||||
- Implement madvise(2) to let users decide the vma to be moved or not to be
|
||||
moved.
|
||||
- All of moving charge operations are done under cgroup_mutex. It's not good
|
||||
@ -473,22 +586,61 @@ Note: More type of pages(e.g. file cache, shmem,) will be supported by other
|
||||
|
||||
9. Memory thresholds
|
||||
|
||||
Memory controler implements memory thresholds using cgroups notification
|
||||
Memory cgroup implements memory thresholds using cgroups notification
|
||||
API (see cgroups.txt). It allows to register multiple memory and memsw
|
||||
thresholds and gets notifications when it crosses.
|
||||
|
||||
To register a threshold application need:
|
||||
- create an eventfd using eventfd(2);
|
||||
- open memory.usage_in_bytes or memory.memsw.usage_in_bytes;
|
||||
- write string like "<event_fd> <memory.usage_in_bytes> <threshold>" to
|
||||
cgroup.event_control.
|
||||
- create an eventfd using eventfd(2);
|
||||
- open memory.usage_in_bytes or memory.memsw.usage_in_bytes;
|
||||
- write string like "<event_fd> <fd of memory.usage_in_bytes> <threshold>" to
|
||||
cgroup.event_control.
|
||||
|
||||
Application will be notified through eventfd when memory usage crosses
|
||||
threshold in any direction.
|
||||
|
||||
It's applicable for root and non-root cgroup.
|
||||
|
||||
10. TODO
|
||||
10. OOM Control
|
||||
|
||||
memory.oom_control file is for OOM notification and other controls.
|
||||
|
||||
Memory cgroup implements OOM notifier using cgroup notification
|
||||
API (See cgroups.txt). It allows to register multiple OOM notification
|
||||
delivery and gets notification when OOM happens.
|
||||
|
||||
To register a notifier, application need:
|
||||
- create an eventfd using eventfd(2)
|
||||
- open memory.oom_control file
|
||||
- write string like "<event_fd> <fd of memory.oom_control>" to
|
||||
cgroup.event_control
|
||||
|
||||
Application will be notified through eventfd when OOM happens.
|
||||
OOM notification doesn't work for root cgroup.
|
||||
|
||||
You can disable OOM-killer by writing "1" to memory.oom_control file, as:
|
||||
|
||||
#echo 1 > memory.oom_control
|
||||
|
||||
This operation is only allowed to the top cgroup of sub-hierarchy.
|
||||
If OOM-killer is disabled, tasks under cgroup will hang/sleep
|
||||
in memory cgroup's OOM-waitqueue when they request accountable memory.
|
||||
|
||||
For running them, you have to relax the memory cgroup's OOM status by
|
||||
* enlarge limit or reduce usage.
|
||||
To reduce usage,
|
||||
* kill some tasks.
|
||||
* move some tasks to other group with account migration.
|
||||
* remove some files (on tmpfs?)
|
||||
|
||||
Then, stopped tasks will work again.
|
||||
|
||||
At reading, current status of OOM is shown.
|
||||
oom_kill_disable 0 or 1 (if 1, oom-killer is disabled)
|
||||
under_oom 0 or 1 (if 1, the memory cgroup is under OOM, tasks may
|
||||
be stopped.)
|
||||
|
||||
11. TODO
|
||||
|
||||
1. Add support for accounting huge pages (as a separate controller)
|
||||
2. Make per-cgroup scanner reclaim not-shared pages first
|
||||
|
@ -443,6 +443,8 @@ Your cooperation is appreciated.
|
||||
231 = /dev/snapshot System memory snapshot device
|
||||
232 = /dev/kvm Kernel-based virtual machine (hardware virtualization extensions)
|
||||
233 = /dev/kmview View-OS A process with a view
|
||||
234 = /dev/btrfs-control Btrfs control device
|
||||
235 = /dev/autofs Autofs control device
|
||||
240-254 Reserved for local use
|
||||
255 Reserved for MISC_DYNAMIC_MINOR
|
||||
|
||||
|
@ -646,3 +646,13 @@ Who: Thomas Gleixner <tglx@linutronix.de>
|
||||
|
||||
----------------------------
|
||||
|
||||
What: old ieee1394 subsystem (CONFIG_IEEE1394)
|
||||
When: 2.6.37
|
||||
Files: drivers/ieee1394/ except init_ohci1394_dma.c
|
||||
Why: superseded by drivers/firewire/ (CONFIG_FIREWIRE) which offers more
|
||||
features, better performance, and better security, all with smaller
|
||||
and more modern code base
|
||||
Who: Stefan Richter <stefanr@s5r6.in-berlin.de>
|
||||
|
||||
----------------------------
|
||||
|
||||
|
@ -380,7 +380,7 @@ prototypes:
|
||||
int (*open) (struct inode *, struct file *);
|
||||
int (*flush) (struct file *);
|
||||
int (*release) (struct inode *, struct file *);
|
||||
int (*fsync) (struct file *, struct dentry *, int datasync);
|
||||
int (*fsync) (struct file *, int datasync);
|
||||
int (*aio_fsync) (struct kiocb *, int datasync);
|
||||
int (*fasync) (int, struct file *, int);
|
||||
int (*lock) (struct file *, int, struct file_lock *);
|
||||
@ -429,8 +429,9 @@ check_flags: no
|
||||
implementations. If your fs is not using generic_file_llseek, you
|
||||
need to acquire and release the appropriate locks in your ->llseek().
|
||||
For many filesystems, it is probably safe to acquire the inode
|
||||
mutex. Note some filesystems (i.e. remote ones) provide no
|
||||
protection for i_size so you will need to use the BKL.
|
||||
mutex or just to use i_size_read() instead.
|
||||
Note: this does not protect the file->f_pos against concurrent modifications
|
||||
since this is something the userspace has to take care about.
|
||||
|
||||
Note: ext2_release() was *the* source of contention on fs-intensive
|
||||
loads and dropping BKL on ->release() helps to get rid of that (we still
|
||||
|
@ -38,7 +38,8 @@ Hard link support: yes no
|
||||
Real inode numbers: yes no
|
||||
32-bit uids/gids: yes no
|
||||
File creation time: yes no
|
||||
Xattr and ACL support: no no
|
||||
Xattr support: yes no
|
||||
ACL support: no no
|
||||
|
||||
Squashfs compresses data, inodes and directories. In addition, inode and
|
||||
directory data are highly compacted, and packed on byte boundaries. Each
|
||||
@ -58,7 +59,7 @@ obtained from this site also.
|
||||
3. SQUASHFS FILESYSTEM DESIGN
|
||||
-----------------------------
|
||||
|
||||
A squashfs filesystem consists of seven parts, packed together on a byte
|
||||
A squashfs filesystem consists of a maximum of eight parts, packed together on a byte
|
||||
alignment:
|
||||
|
||||
---------------
|
||||
@ -80,6 +81,9 @@ alignment:
|
||||
|---------------|
|
||||
| uid/gid |
|
||||
| lookup table |
|
||||
|---------------|
|
||||
| xattr |
|
||||
| table |
|
||||
---------------
|
||||
|
||||
Compressed data blocks are written to the filesystem as files are read from
|
||||
@ -192,6 +196,26 @@ This table is stored compressed into metadata blocks. A second index table is
|
||||
used to locate these. This second index table for speed of access (and because
|
||||
it is small) is read at mount time and cached in memory.
|
||||
|
||||
3.7 Xattr table
|
||||
---------------
|
||||
|
||||
The xattr table contains extended attributes for each inode. The xattrs
|
||||
for each inode are stored in a list, each list entry containing a type,
|
||||
name and value field. The type field encodes the xattr prefix
|
||||
("user.", "trusted." etc) and it also encodes how the name/value fields
|
||||
should be interpreted. Currently the type indicates whether the value
|
||||
is stored inline (in which case the value field contains the xattr value),
|
||||
or if it is stored out of line (in which case the value field stores a
|
||||
reference to where the actual value is stored). This allows large values
|
||||
to be stored out of line improving scanning and lookup performance and it
|
||||
also allows values to be de-duplicated, the value being stored once, and
|
||||
all other occurences holding an out of line reference to that value.
|
||||
|
||||
The xattr lists are packed into compressed 8K metadata blocks.
|
||||
To reduce overhead in inodes, rather than storing the on-disk
|
||||
location of the xattr list inside each inode, a 32-bit xattr id
|
||||
is stored. This xattr id is mapped into the location of the xattr
|
||||
list using a second xattr id lookup table.
|
||||
|
||||
4. TODOS AND OUTSTANDING ISSUES
|
||||
-------------------------------
|
||||
@ -199,9 +223,7 @@ it is small) is read at mount time and cached in memory.
|
||||
4.1 Todo list
|
||||
-------------
|
||||
|
||||
Implement Xattr and ACL support. The Squashfs 4.0 filesystem layout has hooks
|
||||
for these but the code has not been written. Once the code has been written
|
||||
the existing layout should not require modification.
|
||||
Implement ACL support.
|
||||
|
||||
4.2 Squashfs internal cache
|
||||
---------------------------
|
||||
|
@ -94,11 +94,19 @@ NodeList format is a comma-separated list of decimal numbers and ranges,
|
||||
a range being two hyphen-separated decimal numbers, the smallest and
|
||||
largest node numbers in the range. For example, mpol=bind:0-3,5,7,9-15
|
||||
|
||||
A memory policy with a valid NodeList will be saved, as specified, for
|
||||
use at file creation time. When a task allocates a file in the file
|
||||
system, the mount option memory policy will be applied with a NodeList,
|
||||
if any, modified by the calling task's cpuset constraints
|
||||
[See Documentation/cgroups/cpusets.txt] and any optional flags, listed
|
||||
below. If the resulting NodeLists is the empty set, the effective memory
|
||||
policy for the file will revert to "default" policy.
|
||||
|
||||
NUMA memory allocation policies have optional flags that can be used in
|
||||
conjunction with their modes. These optional flags can be specified
|
||||
when tmpfs is mounted by appending them to the mode before the NodeList.
|
||||
See Documentation/vm/numa_memory_policy.txt for a list of all available
|
||||
memory allocation policy mode flags.
|
||||
memory allocation policy mode flags and their effect on memory policy.
|
||||
|
||||
=static is equivalent to MPOL_F_STATIC_NODES
|
||||
=relative is equivalent to MPOL_F_RELATIVE_NODES
|
||||
|
@ -401,11 +401,16 @@ otherwise noted.
|
||||
started might not be in the page cache at the end of the
|
||||
walk).
|
||||
|
||||
truncate: called by the VFS to change the size of a file. The
|
||||
truncate: Deprecated. This will not be called if ->setsize is defined.
|
||||
Called by the VFS to change the size of a file. The
|
||||
i_size field of the inode is set to the desired size by the
|
||||
VFS before this method is called. This method is called by
|
||||
the truncate(2) system call and related functionality.
|
||||
|
||||
Note: ->truncate and vmtruncate are deprecated. Do not add new
|
||||
instances/calls of these. Filesystems should be converted to do their
|
||||
truncate sequence via ->setattr().
|
||||
|
||||
permission: called by the VFS to check for access rights on a POSIX-like
|
||||
filesystem.
|
||||
|
||||
@ -729,7 +734,7 @@ struct file_operations {
|
||||
int (*open) (struct inode *, struct file *);
|
||||
int (*flush) (struct file *);
|
||||
int (*release) (struct inode *, struct file *);
|
||||
int (*fsync) (struct file *, struct dentry *, int datasync);
|
||||
int (*fsync) (struct file *, int datasync);
|
||||
int (*aio_fsync) (struct kiocb *, int datasync);
|
||||
int (*fasync) (int, struct file *, int);
|
||||
int (*lock) (struct file *, int, struct file_lock *);
|
||||
|
816
Documentation/filesystems/xfs-delayed-logging-design.txt
Normal file
816
Documentation/filesystems/xfs-delayed-logging-design.txt
Normal file
@ -0,0 +1,816 @@
|
||||
XFS Delayed Logging Design
|
||||
--------------------------
|
||||
|
||||
Introduction to Re-logging in XFS
|
||||
---------------------------------
|
||||
|
||||
XFS logging is a combination of logical and physical logging. Some objects,
|
||||
such as inodes and dquots, are logged in logical format where the details
|
||||
logged are made up of the changes to in-core structures rather than on-disk
|
||||
structures. Other objects - typically buffers - have their physical changes
|
||||
logged. The reason for these differences is to reduce the amount of log space
|
||||
required for objects that are frequently logged. Some parts of inodes are more
|
||||
frequently logged than others, and inodes are typically more frequently logged
|
||||
than any other object (except maybe the superblock buffer) so keeping the
|
||||
amount of metadata logged low is of prime importance.
|
||||
|
||||
The reason that this is such a concern is that XFS allows multiple separate
|
||||
modifications to a single object to be carried in the log at any given time.
|
||||
This allows the log to avoid needing to flush each change to disk before
|
||||
recording a new change to the object. XFS does this via a method called
|
||||
"re-logging". Conceptually, this is quite simple - all it requires is that any
|
||||
new change to the object is recorded with a *new copy* of all the existing
|
||||
changes in the new transaction that is written to the log.
|
||||
|
||||
That is, if we have a sequence of changes A through to F, and the object was
|
||||
written to disk after change D, we would see in the log the following series
|
||||
of transactions, their contents and the log sequence number (LSN) of the
|
||||
transaction:
|
||||
|
||||
Transaction Contents LSN
|
||||
A A X
|
||||
B A+B X+n
|
||||
C A+B+C X+n+m
|
||||
D A+B+C+D X+n+m+o
|
||||
<object written to disk>
|
||||
E E Y (> X+n+m+o)
|
||||
F E+F Yٍ+p
|
||||
|
||||
In other words, each time an object is relogged, the new transaction contains
|
||||
the aggregation of all the previous changes currently held only in the log.
|
||||
|
||||
This relogging technique also allows objects to be moved forward in the log so
|
||||
that an object being relogged does not prevent the tail of the log from ever
|
||||
moving forward. This can be seen in the table above by the changing
|
||||
(increasing) LSN of each subsquent transaction - the LSN is effectively a
|
||||
direct encoding of the location in the log of the transaction.
|
||||
|
||||
This relogging is also used to implement long-running, multiple-commit
|
||||
transactions. These transaction are known as rolling transactions, and require
|
||||
a special log reservation known as a permanent transaction reservation. A
|
||||
typical example of a rolling transaction is the removal of extents from an
|
||||
inode which can only be done at a rate of two extents per transaction because
|
||||
of reservation size limitations. Hence a rolling extent removal transaction
|
||||
keeps relogging the inode and btree buffers as they get modified in each
|
||||
removal operation. This keeps them moving forward in the log as the operation
|
||||
progresses, ensuring that current operation never gets blocked by itself if the
|
||||
log wraps around.
|
||||
|
||||
Hence it can be seen that the relogging operation is fundamental to the correct
|
||||
working of the XFS journalling subsystem. From the above description, most
|
||||
people should be able to see why the XFS metadata operations writes so much to
|
||||
the log - repeated operations to the same objects write the same changes to
|
||||
the log over and over again. Worse is the fact that objects tend to get
|
||||
dirtier as they get relogged, so each subsequent transaction is writing more
|
||||
metadata into the log.
|
||||
|
||||
Another feature of the XFS transaction subsystem is that most transactions are
|
||||
asynchronous. That is, they don't commit to disk until either a log buffer is
|
||||
filled (a log buffer can hold multiple transactions) or a synchronous operation
|
||||
forces the log buffers holding the transactions to disk. This means that XFS is
|
||||
doing aggregation of transactions in memory - batching them, if you like - to
|
||||
minimise the impact of the log IO on transaction throughput.
|
||||
|
||||
The limitation on asynchronous transaction throughput is the number and size of
|
||||
log buffers made available by the log manager. By default there are 8 log
|
||||
buffers available and the size of each is 32kB - the size can be increased up
|
||||
to 256kB by use of a mount option.
|
||||
|
||||
Effectively, this gives us the maximum bound of outstanding metadata changes
|
||||
that can be made to the filesystem at any point in time - if all the log
|
||||
buffers are full and under IO, then no more transactions can be committed until
|
||||
the current batch completes. It is now common for a single current CPU core to
|
||||
be to able to issue enough transactions to keep the log buffers full and under
|
||||
IO permanently. Hence the XFS journalling subsystem can be considered to be IO
|
||||
bound.
|
||||
|
||||
Delayed Logging: Concepts
|
||||
-------------------------
|
||||
|
||||
The key thing to note about the asynchronous logging combined with the
|
||||
relogging technique XFS uses is that we can be relogging changed objects
|
||||
multiple times before they are committed to disk in the log buffers. If we
|
||||
return to the previous relogging example, it is entirely possible that
|
||||
transactions A through D are committed to disk in the same log buffer.
|
||||
|
||||
That is, a single log buffer may contain multiple copies of the same object,
|
||||
but only one of those copies needs to be there - the last one "D", as it
|
||||
contains all the changes from the previous changes. In other words, we have one
|
||||
necessary copy in the log buffer, and three stale copies that are simply
|
||||
wasting space. When we are doing repeated operations on the same set of
|
||||
objects, these "stale objects" can be over 90% of the space used in the log
|
||||
buffers. It is clear that reducing the number of stale objects written to the
|
||||
log would greatly reduce the amount of metadata we write to the log, and this
|
||||
is the fundamental goal of delayed logging.
|
||||
|
||||
From a conceptual point of view, XFS is already doing relogging in memory (where
|
||||
memory == log buffer), only it is doing it extremely inefficiently. It is using
|
||||
logical to physical formatting to do the relogging because there is no
|
||||
infrastructure to keep track of logical changes in memory prior to physically
|
||||
formatting the changes in a transaction to the log buffer. Hence we cannot avoid
|
||||
accumulating stale objects in the log buffers.
|
||||
|
||||
Delayed logging is the name we've given to keeping and tracking transactional
|
||||
changes to objects in memory outside the log buffer infrastructure. Because of
|
||||
the relogging concept fundamental to the XFS journalling subsystem, this is
|
||||
actually relatively easy to do - all the changes to logged items are already
|
||||
tracked in the current infrastructure. The big problem is how to accumulate
|
||||
them and get them to the log in a consistent, recoverable manner.
|
||||
Describing the problems and how they have been solved is the focus of this
|
||||
document.
|
||||
|
||||
One of the key changes that delayed logging makes to the operation of the
|
||||
journalling subsystem is that it disassociates the amount of outstanding
|
||||
metadata changes from the size and number of log buffers available. In other
|
||||
words, instead of there only being a maximum of 2MB of transaction changes not
|
||||
written to the log at any point in time, there may be a much greater amount
|
||||
being accumulated in memory. Hence the potential for loss of metadata on a
|
||||
crash is much greater than for the existing logging mechanism.
|
||||
|
||||
It should be noted that this does not change the guarantee that log recovery
|
||||
will result in a consistent filesystem. What it does mean is that as far as the
|
||||
recovered filesystem is concerned, there may be many thousands of transactions
|
||||
that simply did not occur as a result of the crash. This makes it even more
|
||||
important that applications that care about their data use fsync() where they
|
||||
need to ensure application level data integrity is maintained.
|
||||
|
||||
It should be noted that delayed logging is not an innovative new concept that
|
||||
warrants rigorous proofs to determine whether it is correct or not. The method
|
||||
of accumulating changes in memory for some period before writing them to the
|
||||
log is used effectively in many filesystems including ext3 and ext4. Hence
|
||||
no time is spent in this document trying to convince the reader that the
|
||||
concept is sound. Instead it is simply considered a "solved problem" and as
|
||||
such implementing it in XFS is purely an exercise in software engineering.
|
||||
|
||||
The fundamental requirements for delayed logging in XFS are simple:
|
||||
|
||||
1. Reduce the amount of metadata written to the log by at least
|
||||
an order of magnitude.
|
||||
2. Supply sufficient statistics to validate Requirement #1.
|
||||
3. Supply sufficient new tracing infrastructure to be able to debug
|
||||
problems with the new code.
|
||||
4. No on-disk format change (metadata or log format).
|
||||
5. Enable and disable with a mount option.
|
||||
6. No performance regressions for synchronous transaction workloads.
|
||||
|
||||
Delayed Logging: Design
|
||||
-----------------------
|
||||
|
||||
Storing Changes
|
||||
|
||||
The problem with accumulating changes at a logical level (i.e. just using the
|
||||
existing log item dirty region tracking) is that when it comes to writing the
|
||||
changes to the log buffers, we need to ensure that the object we are formatting
|
||||
is not changing while we do this. This requires locking the object to prevent
|
||||
concurrent modification. Hence flushing the logical changes to the log would
|
||||
require us to lock every object, format them, and then unlock them again.
|
||||
|
||||
This introduces lots of scope for deadlocks with transactions that are already
|
||||
running. For example, a transaction has object A locked and modified, but needs
|
||||
the delayed logging tracking lock to commit the transaction. However, the
|
||||
flushing thread has the delayed logging tracking lock already held, and is
|
||||
trying to get the lock on object A to flush it to the log buffer. This appears
|
||||
to be an unsolvable deadlock condition, and it was solving this problem that
|
||||
was the barrier to implementing delayed logging for so long.
|
||||
|
||||
The solution is relatively simple - it just took a long time to recognise it.
|
||||
Put simply, the current logging code formats the changes to each item into an
|
||||
vector array that points to the changed regions in the item. The log write code
|
||||
simply copies the memory these vectors point to into the log buffer during
|
||||
transaction commit while the item is locked in the transaction. Instead of
|
||||
using the log buffer as the destination of the formatting code, we can use an
|
||||
allocated memory buffer big enough to fit the formatted vector.
|
||||
|
||||
If we then copy the vector into the memory buffer and rewrite the vector to
|
||||
point to the memory buffer rather than the object itself, we now have a copy of
|
||||
the changes in a format that is compatible with the log buffer writing code.
|
||||
that does not require us to lock the item to access. This formatting and
|
||||
rewriting can all be done while the object is locked during transaction commit,
|
||||
resulting in a vector that is transactionally consistent and can be accessed
|
||||
without needing to lock the owning item.
|
||||
|
||||
Hence we avoid the need to lock items when we need to flush outstanding
|
||||
asynchronous transactions to the log. The differences between the existing
|
||||
formatting method and the delayed logging formatting can be seen in the
|
||||
diagram below.
|
||||
|
||||
Current format log vector:
|
||||
|
||||
Object +---------------------------------------------+
|
||||
Vector 1 +----+
|
||||
Vector 2 +----+
|
||||
Vector 3 +----------+
|
||||
|
||||
After formatting:
|
||||
|
||||
Log Buffer +-V1-+-V2-+----V3----+
|
||||
|
||||
Delayed logging vector:
|
||||
|
||||
Object +---------------------------------------------+
|
||||
Vector 1 +----+
|
||||
Vector 2 +----+
|
||||
Vector 3 +----------+
|
||||
|
||||
After formatting:
|
||||
|
||||
Memory Buffer +-V1-+-V2-+----V3----+
|
||||
Vector 1 +----+
|
||||
Vector 2 +----+
|
||||
Vector 3 +----------+
|
||||
|
||||
The memory buffer and associated vector need to be passed as a single object,
|
||||
but still need to be associated with the parent object so if the object is
|
||||
relogged we can replace the current memory buffer with a new memory buffer that
|
||||
contains the latest changes.
|
||||
|
||||
The reason for keeping the vector around after we've formatted the memory
|
||||
buffer is to support splitting vectors across log buffer boundaries correctly.
|
||||
If we don't keep the vector around, we do not know where the region boundaries
|
||||
are in the item, so we'd need a new encapsulation method for regions in the log
|
||||
buffer writing (i.e. double encapsulation). This would be an on-disk format
|
||||
change and as such is not desirable. It also means we'd have to write the log
|
||||
region headers in the formatting stage, which is problematic as there is per
|
||||
region state that needs to be placed into the headers during the log write.
|
||||
|
||||
Hence we need to keep the vector, but by attaching the memory buffer to it and
|
||||
rewriting the vector addresses to point at the memory buffer we end up with a
|
||||
self-describing object that can be passed to the log buffer write code to be
|
||||
handled in exactly the same manner as the existing log vectors are handled.
|
||||
Hence we avoid needing a new on-disk format to handle items that have been
|
||||
relogged in memory.
|
||||
|
||||
|
||||
Tracking Changes
|
||||
|
||||
Now that we can record transactional changes in memory in a form that allows
|
||||
them to be used without limitations, we need to be able to track and accumulate
|
||||
them so that they can be written to the log at some later point in time. The
|
||||
log item is the natural place to store this vector and buffer, and also makes sense
|
||||
to be the object that is used to track committed objects as it will always
|
||||
exist once the object has been included in a transaction.
|
||||
|
||||
The log item is already used to track the log items that have been written to
|
||||
the log but not yet written to disk. Such log items are considered "active"
|
||||
and as such are stored in the Active Item List (AIL) which is a LSN-ordered
|
||||
double linked list. Items are inserted into this list during log buffer IO
|
||||
completion, after which they are unpinned and can be written to disk. An object
|
||||
that is in the AIL can be relogged, which causes the object to be pinned again
|
||||
and then moved forward in the AIL when the log buffer IO completes for that
|
||||
transaction.
|
||||
|
||||
Essentially, this shows that an item that is in the AIL can still be modified
|
||||
and relogged, so any tracking must be separate to the AIL infrastructure. As
|
||||
such, we cannot reuse the AIL list pointers for tracking committed items, nor
|
||||
can we store state in any field that is protected by the AIL lock. Hence the
|
||||
committed item tracking needs it's own locks, lists and state fields in the log
|
||||
item.
|
||||
|
||||
Similar to the AIL, tracking of committed items is done through a new list
|
||||
called the Committed Item List (CIL). The list tracks log items that have been
|
||||
committed and have formatted memory buffers attached to them. It tracks objects
|
||||
in transaction commit order, so when an object is relogged it is removed from
|
||||
it's place in the list and re-inserted at the tail. This is entirely arbitrary
|
||||
and done to make it easy for debugging - the last items in the list are the
|
||||
ones that are most recently modified. Ordering of the CIL is not necessary for
|
||||
transactional integrity (as discussed in the next section) so the ordering is
|
||||
done for convenience/sanity of the developers.
|
||||
|
||||
|
||||
Delayed Logging: Checkpoints
|
||||
|
||||
When we have a log synchronisation event, commonly known as a "log force",
|
||||
all the items in the CIL must be written into the log via the log buffers.
|
||||
We need to write these items in the order that they exist in the CIL, and they
|
||||
need to be written as an atomic transaction. The need for all the objects to be
|
||||
written as an atomic transaction comes from the requirements of relogging and
|
||||
log replay - all the changes in all the objects in a given transaction must
|
||||
either be completely replayed during log recovery, or not replayed at all. If
|
||||
a transaction is not replayed because it is not complete in the log, then
|
||||
no later transactions should be replayed, either.
|
||||
|
||||
To fulfill this requirement, we need to write the entire CIL in a single log
|
||||
transaction. Fortunately, the XFS log code has no fixed limit on the size of a
|
||||
transaction, nor does the log replay code. The only fundamental limit is that
|
||||
the transaction cannot be larger than just under half the size of the log. The
|
||||
reason for this limit is that to find the head and tail of the log, there must
|
||||
be at least one complete transaction in the log at any given time. If a
|
||||
transaction is larger than half the log, then there is the possibility that a
|
||||
crash during the write of a such a transaction could partially overwrite the
|
||||
only complete previous transaction in the log. This will result in a recovery
|
||||
failure and an inconsistent filesystem and hence we must enforce the maximum
|
||||
size of a checkpoint to be slightly less than a half the log.
|
||||
|
||||
Apart from this size requirement, a checkpoint transaction looks no different
|
||||
to any other transaction - it contains a transaction header, a series of
|
||||
formatted log items and a commit record at the tail. From a recovery
|
||||
perspective, the checkpoint transaction is also no different - just a lot
|
||||
bigger with a lot more items in it. The worst case effect of this is that we
|
||||
might need to tune the recovery transaction object hash size.
|
||||
|
||||
Because the checkpoint is just another transaction and all the changes to log
|
||||
items are stored as log vectors, we can use the existing log buffer writing
|
||||
code to write the changes into the log. To do this efficiently, we need to
|
||||
minimise the time we hold the CIL locked while writing the checkpoint
|
||||
transaction. The current log write code enables us to do this easily with the
|
||||
way it separates the writing of the transaction contents (the log vectors) from
|
||||
the transaction commit record, but tracking this requires us to have a
|
||||
per-checkpoint context that travels through the log write process through to
|
||||
checkpoint completion.
|
||||
|
||||
Hence a checkpoint has a context that tracks the state of the current
|
||||
checkpoint from initiation to checkpoint completion. A new context is initiated
|
||||
at the same time a checkpoint transaction is started. That is, when we remove
|
||||
all the current items from the CIL during a checkpoint operation, we move all
|
||||
those changes into the current checkpoint context. We then initialise a new
|
||||
context and attach that to the CIL for aggregation of new transactions.
|
||||
|
||||
This allows us to unlock the CIL immediately after transfer of all the
|
||||
committed items and effectively allow new transactions to be issued while we
|
||||
are formatting the checkpoint into the log. It also allows concurrent
|
||||
checkpoints to be written into the log buffers in the case of log force heavy
|
||||
workloads, just like the existing transaction commit code does. This, however,
|
||||
requires that we strictly order the commit records in the log so that
|
||||
checkpoint sequence order is maintained during log replay.
|
||||
|
||||
To ensure that we can be writing an item into a checkpoint transaction at
|
||||
the same time another transaction modifies the item and inserts the log item
|
||||
into the new CIL, then checkpoint transaction commit code cannot use log items
|
||||
to store the list of log vectors that need to be written into the transaction.
|
||||
Hence log vectors need to be able to be chained together to allow them to be
|
||||
detatched from the log items. That is, when the CIL is flushed the memory
|
||||
buffer and log vector attached to each log item needs to be attached to the
|
||||
checkpoint context so that the log item can be released. In diagrammatic form,
|
||||
the CIL would look like this before the flush:
|
||||
|
||||
CIL Head
|
||||
|
|
||||
V
|
||||
Log Item <-> log vector 1 -> memory buffer
|
||||
| -> vector array
|
||||
V
|
||||
Log Item <-> log vector 2 -> memory buffer
|
||||
| -> vector array
|
||||
V
|
||||
......
|
||||
|
|
||||
V
|
||||
Log Item <-> log vector N-1 -> memory buffer
|
||||
| -> vector array
|
||||
V
|
||||
Log Item <-> log vector N -> memory buffer
|
||||
-> vector array
|
||||
|
||||
And after the flush the CIL head is empty, and the checkpoint context log
|
||||
vector list would look like:
|
||||
|
||||
Checkpoint Context
|
||||
|
|
||||
V
|
||||
log vector 1 -> memory buffer
|
||||
| -> vector array
|
||||
| -> Log Item
|
||||
V
|
||||
log vector 2 -> memory buffer
|
||||
| -> vector array
|
||||
| -> Log Item
|
||||
V
|
||||
......
|
||||
|
|
||||
V
|
||||
log vector N-1 -> memory buffer
|
||||
| -> vector array
|
||||
| -> Log Item
|
||||
V
|
||||
log vector N -> memory buffer
|
||||
-> vector array
|
||||
-> Log Item
|
||||
|
||||
Once this transfer is done, the CIL can be unlocked and new transactions can
|
||||
start, while the checkpoint flush code works over the log vector chain to
|
||||
commit the checkpoint.
|
||||
|
||||
Once the checkpoint is written into the log buffers, the checkpoint context is
|
||||
attached to the log buffer that the commit record was written to along with a
|
||||
completion callback. Log IO completion will call that callback, which can then
|
||||
run transaction committed processing for the log items (i.e. insert into AIL
|
||||
and unpin) in the log vector chain and then free the log vector chain and
|
||||
checkpoint context.
|
||||
|
||||
Discussion Point: I am uncertain as to whether the log item is the most
|
||||
efficient way to track vectors, even though it seems like the natural way to do
|
||||
it. The fact that we walk the log items (in the CIL) just to chain the log
|
||||
vectors and break the link between the log item and the log vector means that
|
||||
we take a cache line hit for the log item list modification, then another for
|
||||
the log vector chaining. If we track by the log vectors, then we only need to
|
||||
break the link between the log item and the log vector, which means we should
|
||||
dirty only the log item cachelines. Normally I wouldn't be concerned about one
|
||||
vs two dirty cachelines except for the fact I've seen upwards of 80,000 log
|
||||
vectors in one checkpoint transaction. I'd guess this is a "measure and
|
||||
compare" situation that can be done after a working and reviewed implementation
|
||||
is in the dev tree....
|
||||
|
||||
Delayed Logging: Checkpoint Sequencing
|
||||
|
||||
One of the key aspects of the XFS transaction subsystem is that it tags
|
||||
committed transactions with the log sequence number of the transaction commit.
|
||||
This allows transactions to be issued asynchronously even though there may be
|
||||
future operations that cannot be completed until that transaction is fully
|
||||
committed to the log. In the rare case that a dependent operation occurs (e.g.
|
||||
re-using a freed metadata extent for a data extent), a special, optimised log
|
||||
force can be issued to force the dependent transaction to disk immediately.
|
||||
|
||||
To do this, transactions need to record the LSN of the commit record of the
|
||||
transaction. This LSN comes directly from the log buffer the transaction is
|
||||
written into. While this works just fine for the existing transaction
|
||||
mechanism, it does not work for delayed logging because transactions are not
|
||||
written directly into the log buffers. Hence some other method of sequencing
|
||||
transactions is required.
|
||||
|
||||
As discussed in the checkpoint section, delayed logging uses per-checkpoint
|
||||
contexts, and as such it is simple to assign a sequence number to each
|
||||
checkpoint. Because the switching of checkpoint contexts must be done
|
||||
atomically, it is simple to ensure that each new context has a monotonically
|
||||
increasing sequence number assigned to it without the need for an external
|
||||
atomic counter - we can just take the current context sequence number and add
|
||||
one to it for the new context.
|
||||
|
||||
Then, instead of assigning a log buffer LSN to the transaction commit LSN
|
||||
during the commit, we can assign the current checkpoint sequence. This allows
|
||||
operations that track transactions that have not yet completed know what
|
||||
checkpoint sequence needs to be committed before they can continue. As a
|
||||
result, the code that forces the log to a specific LSN now needs to ensure that
|
||||
the log forces to a specific checkpoint.
|
||||
|
||||
To ensure that we can do this, we need to track all the checkpoint contexts
|
||||
that are currently committing to the log. When we flush a checkpoint, the
|
||||
context gets added to a "committing" list which can be searched. When a
|
||||
checkpoint commit completes, it is removed from the committing list. Because
|
||||
the checkpoint context records the LSN of the commit record for the checkpoint,
|
||||
we can also wait on the log buffer that contains the commit record, thereby
|
||||
using the existing log force mechanisms to execute synchronous forces.
|
||||
|
||||
It should be noted that the synchronous forces may need to be extended with
|
||||
mitigation algorithms similar to the current log buffer code to allow
|
||||
aggregation of multiple synchronous transactions if there are already
|
||||
synchronous transactions being flushed. Investigation of the performance of the
|
||||
current design is needed before making any decisions here.
|
||||
|
||||
The main concern with log forces is to ensure that all the previous checkpoints
|
||||
are also committed to disk before the one we need to wait for. Therefore we
|
||||
need to check that all the prior contexts in the committing list are also
|
||||
complete before waiting on the one we need to complete. We do this
|
||||
synchronisation in the log force code so that we don't need to wait anywhere
|
||||
else for such serialisation - it only matters when we do a log force.
|
||||
|
||||
The only remaining complexity is that a log force now also has to handle the
|
||||
case where the forcing sequence number is the same as the current context. That
|
||||
is, we need to flush the CIL and potentially wait for it to complete. This is a
|
||||
simple addition to the existing log forcing code to check the sequence numbers
|
||||
and push if required. Indeed, placing the current sequence checkpoint flush in
|
||||
the log force code enables the current mechanism for issuing synchronous
|
||||
transactions to remain untouched (i.e. commit an asynchronous transaction, then
|
||||
force the log at the LSN of that transaction) and so the higher level code
|
||||
behaves the same regardless of whether delayed logging is being used or not.
|
||||
|
||||
Delayed Logging: Checkpoint Log Space Accounting
|
||||
|
||||
The big issue for a checkpoint transaction is the log space reservation for the
|
||||
transaction. We don't know how big a checkpoint transaction is going to be
|
||||
ahead of time, nor how many log buffers it will take to write out, nor the
|
||||
number of split log vector regions are going to be used. We can track the
|
||||
amount of log space required as we add items to the commit item list, but we
|
||||
still need to reserve the space in the log for the checkpoint.
|
||||
|
||||
A typical transaction reserves enough space in the log for the worst case space
|
||||
usage of the transaction. The reservation accounts for log record headers,
|
||||
transaction and region headers, headers for split regions, buffer tail padding,
|
||||
etc. as well as the actual space for all the changed metadata in the
|
||||
transaction. While some of this is fixed overhead, much of it is dependent on
|
||||
the size of the transaction and the number of regions being logged (the number
|
||||
of log vectors in the transaction).
|
||||
|
||||
An example of the differences would be logging directory changes versus logging
|
||||
inode changes. If you modify lots of inode cores (e.g. chmod -R g+w *), then
|
||||
there are lots of transactions that only contain an inode core and an inode log
|
||||
format structure. That is, two vectors totaling roughly 150 bytes. If we modify
|
||||
10,000 inodes, we have about 1.5MB of metadata to write in 20,000 vectors. Each
|
||||
vector is 12 bytes, so the total to be logged is approximately 1.75MB. In
|
||||
comparison, if we are logging full directory buffers, they are typically 4KB
|
||||
each, so we in 1.5MB of directory buffers we'd have roughly 400 buffers and a
|
||||
buffer format structure for each buffer - roughly 800 vectors or 1.51MB total
|
||||
space. From this, it should be obvious that a static log space reservation is
|
||||
not particularly flexible and is difficult to select the "optimal value" for
|
||||
all workloads.
|
||||
|
||||
Further, if we are going to use a static reservation, which bit of the entire
|
||||
reservation does it cover? We account for space used by the transaction
|
||||
reservation by tracking the space currently used by the object in the CIL and
|
||||
then calculating the increase or decrease in space used as the object is
|
||||
relogged. This allows for a checkpoint reservation to only have to account for
|
||||
log buffer metadata used such as log header records.
|
||||
|
||||
However, even using a static reservation for just the log metadata is
|
||||
problematic. Typically log record headers use at least 16KB of log space per
|
||||
1MB of log space consumed (512 bytes per 32k) and the reservation needs to be
|
||||
large enough to handle arbitrary sized checkpoint transactions. This
|
||||
reservation needs to be made before the checkpoint is started, and we need to
|
||||
be able to reserve the space without sleeping. For a 8MB checkpoint, we need a
|
||||
reservation of around 150KB, which is a non-trivial amount of space.
|
||||
|
||||
A static reservation needs to manipulate the log grant counters - we can take a
|
||||
permanent reservation on the space, but we still need to make sure we refresh
|
||||
the write reservation (the actual space available to the transaction) after
|
||||
every checkpoint transaction completion. Unfortunately, if this space is not
|
||||
available when required, then the regrant code will sleep waiting for it.
|
||||
|
||||
The problem with this is that it can lead to deadlocks as we may need to commit
|
||||
checkpoints to be able to free up log space (refer back to the description of
|
||||
rolling transactions for an example of this). Hence we *must* always have
|
||||
space available in the log if we are to use static reservations, and that is
|
||||
very difficult and complex to arrange. It is possible to do, but there is a
|
||||
simpler way.
|
||||
|
||||
The simpler way of doing this is tracking the entire log space used by the
|
||||
items in the CIL and using this to dynamically calculate the amount of log
|
||||
space required by the log metadata. If this log metadata space changes as a
|
||||
result of a transaction commit inserting a new memory buffer into the CIL, then
|
||||
the difference in space required is removed from the transaction that causes
|
||||
the change. Transactions at this level will *always* have enough space
|
||||
available in their reservation for this as they have already reserved the
|
||||
maximal amount of log metadata space they require, and such a delta reservation
|
||||
will always be less than or equal to the maximal amount in the reservation.
|
||||
|
||||
Hence we can grow the checkpoint transaction reservation dynamically as items
|
||||
are added to the CIL and avoid the need for reserving and regranting log space
|
||||
up front. This avoids deadlocks and removes a blocking point from the
|
||||
checkpoint flush code.
|
||||
|
||||
As mentioned early, transactions can't grow to more than half the size of the
|
||||
log. Hence as part of the reservation growing, we need to also check the size
|
||||
of the reservation against the maximum allowed transaction size. If we reach
|
||||
the maximum threshold, we need to push the CIL to the log. This is effectively
|
||||
a "background flush" and is done on demand. This is identical to
|
||||
a CIL push triggered by a log force, only that there is no waiting for the
|
||||
checkpoint commit to complete. This background push is checked and executed by
|
||||
transaction commit code.
|
||||
|
||||
If the transaction subsystem goes idle while we still have items in the CIL,
|
||||
they will be flushed by the periodic log force issued by the xfssyncd. This log
|
||||
force will push the CIL to disk, and if the transaction subsystem stays idle,
|
||||
allow the idle log to be covered (effectively marked clean) in exactly the same
|
||||
manner that is done for the existing logging method. A discussion point is
|
||||
whether this log force needs to be done more frequently than the current rate
|
||||
which is once every 30s.
|
||||
|
||||
|
||||
Delayed Logging: Log Item Pinning
|
||||
|
||||
Currently log items are pinned during transaction commit while the items are
|
||||
still locked. This happens just after the items are formatted, though it could
|
||||
be done any time before the items are unlocked. The result of this mechanism is
|
||||
that items get pinned once for every transaction that is committed to the log
|
||||
buffers. Hence items that are relogged in the log buffers will have a pin count
|
||||
for every outstanding transaction they were dirtied in. When each of these
|
||||
transactions is completed, they will unpin the item once. As a result, the item
|
||||
only becomes unpinned when all the transactions complete and there are no
|
||||
pending transactions. Thus the pinning and unpinning of a log item is symmetric
|
||||
as there is a 1:1 relationship with transaction commit and log item completion.
|
||||
|
||||
For delayed logging, however, we have an assymetric transaction commit to
|
||||
completion relationship. Every time an object is relogged in the CIL it goes
|
||||
through the commit process without a corresponding completion being registered.
|
||||
That is, we now have a many-to-one relationship between transaction commit and
|
||||
log item completion. The result of this is that pinning and unpinning of the
|
||||
log items becomes unbalanced if we retain the "pin on transaction commit, unpin
|
||||
on transaction completion" model.
|
||||
|
||||
To keep pin/unpin symmetry, the algorithm needs to change to a "pin on
|
||||
insertion into the CIL, unpin on checkpoint completion". In other words, the
|
||||
pinning and unpinning becomes symmetric around a checkpoint context. We have to
|
||||
pin the object the first time it is inserted into the CIL - if it is already in
|
||||
the CIL during a transaction commit, then we do not pin it again. Because there
|
||||
can be multiple outstanding checkpoint contexts, we can still see elevated pin
|
||||
counts, but as each checkpoint completes the pin count will retain the correct
|
||||
value according to it's context.
|
||||
|
||||
Just to make matters more slightly more complex, this checkpoint level context
|
||||
for the pin count means that the pinning of an item must take place under the
|
||||
CIL commit/flush lock. If we pin the object outside this lock, we cannot
|
||||
guarantee which context the pin count is associated with. This is because of
|
||||
the fact pinning the item is dependent on whether the item is present in the
|
||||
current CIL or not. If we don't pin the CIL first before we check and pin the
|
||||
object, we have a race with CIL being flushed between the check and the pin
|
||||
(or not pinning, as the case may be). Hence we must hold the CIL flush/commit
|
||||
lock to guarantee that we pin the items correctly.
|
||||
|
||||
Delayed Logging: Concurrent Scalability
|
||||
|
||||
A fundamental requirement for the CIL is that accesses through transaction
|
||||
commits must scale to many concurrent commits. The current transaction commit
|
||||
code does not break down even when there are transactions coming from 2048
|
||||
processors at once. The current transaction code does not go any faster than if
|
||||
there was only one CPU using it, but it does not slow down either.
|
||||
|
||||
As a result, the delayed logging transaction commit code needs to be designed
|
||||
for concurrency from the ground up. It is obvious that there are serialisation
|
||||
points in the design - the three important ones are:
|
||||
|
||||
1. Locking out new transaction commits while flushing the CIL
|
||||
2. Adding items to the CIL and updating item space accounting
|
||||
3. Checkpoint commit ordering
|
||||
|
||||
Looking at the transaction commit and CIL flushing interactions, it is clear
|
||||
that we have a many-to-one interaction here. That is, the only restriction on
|
||||
the number of concurrent transactions that can be trying to commit at once is
|
||||
the amount of space available in the log for their reservations. The practical
|
||||
limit here is in the order of several hundred concurrent transactions for a
|
||||
128MB log, which means that it is generally one per CPU in a machine.
|
||||
|
||||
The amount of time a transaction commit needs to hold out a flush is a
|
||||
relatively long period of time - the pinning of log items needs to be done
|
||||
while we are holding out a CIL flush, so at the moment that means it is held
|
||||
across the formatting of the objects into memory buffers (i.e. while memcpy()s
|
||||
are in progress). Ultimately a two pass algorithm where the formatting is done
|
||||
separately to the pinning of objects could be used to reduce the hold time of
|
||||
the transaction commit side.
|
||||
|
||||
Because of the number of potential transaction commit side holders, the lock
|
||||
really needs to be a sleeping lock - if the CIL flush takes the lock, we do not
|
||||
want every other CPU in the machine spinning on the CIL lock. Given that
|
||||
flushing the CIL could involve walking a list of tens of thousands of log
|
||||
items, it will get held for a significant time and so spin contention is a
|
||||
significant concern. Preventing lots of CPUs spinning doing nothing is the
|
||||
main reason for choosing a sleeping lock even though nothing in either the
|
||||
transaction commit or CIL flush side sleeps with the lock held.
|
||||
|
||||
It should also be noted that CIL flushing is also a relatively rare operation
|
||||
compared to transaction commit for asynchronous transaction workloads - only
|
||||
time will tell if using a read-write semaphore for exclusion will limit
|
||||
transaction commit concurrency due to cache line bouncing of the lock on the
|
||||
read side.
|
||||
|
||||
The second serialisation point is on the transaction commit side where items
|
||||
are inserted into the CIL. Because transactions can enter this code
|
||||
concurrently, the CIL needs to be protected separately from the above
|
||||
commit/flush exclusion. It also needs to be an exclusive lock but it is only
|
||||
held for a very short time and so a spin lock is appropriate here. It is
|
||||
possible that this lock will become a contention point, but given the short
|
||||
hold time once per transaction I think that contention is unlikely.
|
||||
|
||||
The final serialisation point is the checkpoint commit record ordering code
|
||||
that is run as part of the checkpoint commit and log force sequencing. The code
|
||||
path that triggers a CIL flush (i.e. whatever triggers the log force) will enter
|
||||
an ordering loop after writing all the log vectors into the log buffers but
|
||||
before writing the commit record. This loop walks the list of committing
|
||||
checkpoints and needs to block waiting for checkpoints to complete their commit
|
||||
record write. As a result it needs a lock and a wait variable. Log force
|
||||
sequencing also requires the same lock, list walk, and blocking mechanism to
|
||||
ensure completion of checkpoints.
|
||||
|
||||
These two sequencing operations can use the mechanism even though the
|
||||
events they are waiting for are different. The checkpoint commit record
|
||||
sequencing needs to wait until checkpoint contexts contain a commit LSN
|
||||
(obtained through completion of a commit record write) while log force
|
||||
sequencing needs to wait until previous checkpoint contexts are removed from
|
||||
the committing list (i.e. they've completed). A simple wait variable and
|
||||
broadcast wakeups (thundering herds) has been used to implement these two
|
||||
serialisation queues. They use the same lock as the CIL, too. If we see too
|
||||
much contention on the CIL lock, or too many context switches as a result of
|
||||
the broadcast wakeups these operations can be put under a new spinlock and
|
||||
given separate wait lists to reduce lock contention and the number of processes
|
||||
woken by the wrong event.
|
||||
|
||||
|
||||
Lifecycle Changes
|
||||
|
||||
The existing log item life cycle is as follows:
|
||||
|
||||
1. Transaction allocate
|
||||
2. Transaction reserve
|
||||
3. Lock item
|
||||
4. Join item to transaction
|
||||
If not already attached,
|
||||
Allocate log item
|
||||
Attach log item to owner item
|
||||
Attach log item to transaction
|
||||
5. Modify item
|
||||
Record modifications in log item
|
||||
6. Transaction commit
|
||||
Pin item in memory
|
||||
Format item into log buffer
|
||||
Write commit LSN into transaction
|
||||
Unlock item
|
||||
Attach transaction to log buffer
|
||||
|
||||
<log buffer IO dispatched>
|
||||
<log buffer IO completes>
|
||||
|
||||
7. Transaction completion
|
||||
Mark log item committed
|
||||
Insert log item into AIL
|
||||
Write commit LSN into log item
|
||||
Unpin log item
|
||||
8. AIL traversal
|
||||
Lock item
|
||||
Mark log item clean
|
||||
Flush item to disk
|
||||
|
||||
<item IO completion>
|
||||
|
||||
9. Log item removed from AIL
|
||||
Moves log tail
|
||||
Item unlocked
|
||||
|
||||
Essentially, steps 1-6 operate independently from step 7, which is also
|
||||
independent of steps 8-9. An item can be locked in steps 1-6 or steps 8-9
|
||||
at the same time step 7 is occurring, but only steps 1-6 or 8-9 can occur
|
||||
at the same time. If the log item is in the AIL or between steps 6 and 7
|
||||
and steps 1-6 are re-entered, then the item is relogged. Only when steps 8-9
|
||||
are entered and completed is the object considered clean.
|
||||
|
||||
With delayed logging, there are new steps inserted into the life cycle:
|
||||
|
||||
1. Transaction allocate
|
||||
2. Transaction reserve
|
||||
3. Lock item
|
||||
4. Join item to transaction
|
||||
If not already attached,
|
||||
Allocate log item
|
||||
Attach log item to owner item
|
||||
Attach log item to transaction
|
||||
5. Modify item
|
||||
Record modifications in log item
|
||||
6. Transaction commit
|
||||
Pin item in memory if not pinned in CIL
|
||||
Format item into log vector + buffer
|
||||
Attach log vector and buffer to log item
|
||||
Insert log item into CIL
|
||||
Write CIL context sequence into transaction
|
||||
Unlock item
|
||||
|
||||
<next log force>
|
||||
|
||||
7. CIL push
|
||||
lock CIL flush
|
||||
Chain log vectors and buffers together
|
||||
Remove items from CIL
|
||||
unlock CIL flush
|
||||
write log vectors into log
|
||||
sequence commit records
|
||||
attach checkpoint context to log buffer
|
||||
|
||||
<log buffer IO dispatched>
|
||||
<log buffer IO completes>
|
||||
|
||||
8. Checkpoint completion
|
||||
Mark log item committed
|
||||
Insert item into AIL
|
||||
Write commit LSN into log item
|
||||
Unpin log item
|
||||
9. AIL traversal
|
||||
Lock item
|
||||
Mark log item clean
|
||||
Flush item to disk
|
||||
<item IO completion>
|
||||
10. Log item removed from AIL
|
||||
Moves log tail
|
||||
Item unlocked
|
||||
|
||||
From this, it can be seen that the only life cycle differences between the two
|
||||
logging methods are in the middle of the life cycle - they still have the same
|
||||
beginning and end and execution constraints. The only differences are in the
|
||||
commiting of the log items to the log itself and the completion processing.
|
||||
Hence delayed logging should not introduce any constraints on log item
|
||||
behaviour, allocation or freeing that don't already exist.
|
||||
|
||||
As a result of this zero-impact "insertion" of delayed logging infrastructure
|
||||
and the design of the internal structures to avoid on disk format changes, we
|
||||
can basically switch between delayed logging and the existing mechanism with a
|
||||
mount option. Fundamentally, there is no reason why the log manager would not
|
||||
be able to swap methods automatically and transparently depending on load
|
||||
characteristics, but this should not be necessary if delayed logging works as
|
||||
designed.
|
||||
|
||||
Roadmap:
|
||||
|
||||
2.6.35 Inclusion in mainline as an experimental mount option
|
||||
=> approximately 2-3 months to merge window
|
||||
=> needs to be in xfs-dev tree in 4-6 weeks
|
||||
=> code is nearing readiness for review
|
||||
|
||||
2.6.37 Remove experimental tag from mount option
|
||||
=> should be roughly 6 months after initial merge
|
||||
=> enough time to:
|
||||
=> gain confidence and fix problems reported by early
|
||||
adopters (a.k.a. guinea pigs)
|
||||
=> address worst performance regressions and undesired
|
||||
behaviours
|
||||
=> start tuning/optimising code for parallelism
|
||||
=> start tuning/optimising algorithms consuming
|
||||
excessive CPU time
|
||||
|
||||
2.6.39 Switch default mount option to use delayed logging
|
||||
=> should be roughly 12 months after initial merge
|
||||
=> enough time to shake out remaining problems before next round of
|
||||
enterprise distro kernel rebases
|
@ -9,11 +9,15 @@ Supported chips:
|
||||
* SMSC SCH3112, SCH3114, SCH3116
|
||||
Prefix: 'sch311x'
|
||||
Addresses scanned: none, address read from Super-I/O config space
|
||||
Datasheet: http://www.nuhorizons.com/FeaturedProducts/Volume1/SMSC/311x.pdf
|
||||
Datasheet: Available on the Internet
|
||||
* SMSC SCH5027
|
||||
Prefix: 'sch5027'
|
||||
Addresses scanned: I2C 0x2c, 0x2d, 0x2e
|
||||
Datasheet: Provided by SMSC upon request and under NDA
|
||||
* SMSC SCH5127
|
||||
Prefix: 'sch5127'
|
||||
Addresses scanned: none, address read from Super-I/O config space
|
||||
Datasheet: Provided by SMSC upon request and under NDA
|
||||
|
||||
Authors:
|
||||
Juerg Haefliger <juergh@gmail.com>
|
||||
@ -36,8 +40,8 @@ Description
|
||||
-----------
|
||||
|
||||
This driver implements support for the hardware monitoring capabilities of the
|
||||
SMSC DME1737 and Asus A8000 (which are the same), SMSC SCH5027, and SMSC
|
||||
SCH311x Super-I/O chips. These chips feature monitoring of 3 temp sensors
|
||||
SMSC DME1737 and Asus A8000 (which are the same), SMSC SCH5027, SCH311x,
|
||||
and SCH5127 Super-I/O chips. These chips feature monitoring of 3 temp sensors
|
||||
temp[1-3] (2 remote diodes and 1 internal), 7 voltages in[0-6] (6 external and
|
||||
1 internal) and up to 6 fan speeds fan[1-6]. Additionally, the chips implement
|
||||
up to 5 PWM outputs pwm[1-3,5-6] for controlling fan speeds both manually and
|
||||
@ -48,14 +52,14 @@ Fan[3-6] and pwm[3,5-6] are optional features and their availability depends on
|
||||
the configuration of the chip. The driver will detect which features are
|
||||
present during initialization and create the sysfs attributes accordingly.
|
||||
|
||||
For the SCH311x, fan[1-3] and pwm[1-3] are always present and fan[4-6] and
|
||||
pwm[5-6] don't exist.
|
||||
For the SCH311x and SCH5127, fan[1-3] and pwm[1-3] are always present and
|
||||
fan[4-6] and pwm[5-6] don't exist.
|
||||
|
||||
The hardware monitoring features of the DME1737, A8000, and SCH5027 are only
|
||||
accessible via SMBus, while the SCH311x only provides access via the ISA bus.
|
||||
The driver will therefore register itself as an I2C client driver if it detects
|
||||
a DME1737, A8000, or SCH5027 and as a platform driver if it detects a SCH311x
|
||||
chip.
|
||||
accessible via SMBus, while the SCH311x and SCH5127 only provide access via
|
||||
the ISA bus. The driver will therefore register itself as an I2C client driver
|
||||
if it detects a DME1737, A8000, or SCH5027 and as a platform driver if it
|
||||
detects a SCH311x or SCH5127 chip.
|
||||
|
||||
|
||||
Voltage Monitoring
|
||||
@ -76,7 +80,7 @@ DME1737, A8000:
|
||||
in6: Vbat (+3.0V) 0V - 4.38V
|
||||
|
||||
SCH311x:
|
||||
in0: +2.5V 0V - 6.64V
|
||||
in0: +2.5V 0V - 3.32V
|
||||
in1: Vccp (processor core) 0V - 2V
|
||||
in2: VCC (internal +3.3V) 0V - 4.38V
|
||||
in3: +5V 0V - 6.64V
|
||||
@ -93,6 +97,15 @@ SCH5027:
|
||||
in5: VTR (+3.3V standby) 0V - 4.38V
|
||||
in6: Vbat (+3.0V) 0V - 4.38V
|
||||
|
||||
SCH5127:
|
||||
in0: +2.5 0V - 3.32V
|
||||
in1: Vccp (processor core) 0V - 3V
|
||||
in2: VCC (internal +3.3V) 0V - 4.38V
|
||||
in3: V2_IN 0V - 1.5V
|
||||
in4: V1_IN 0V - 1.5V
|
||||
in5: VTR (+3.3V standby) 0V - 4.38V
|
||||
in6: Vbat (+3.0V) 0V - 4.38V
|
||||
|
||||
Each voltage input has associated min and max limits which trigger an alarm
|
||||
when crossed.
|
||||
|
||||
@ -293,3 +306,21 @@ pwm[1-3]_auto_point1_pwm RW Auto PWM pwm point. Auto_point1 is the
|
||||
pwm[1-3]_auto_point2_pwm RO Auto PWM pwm point. Auto_point2 is the
|
||||
full-speed duty-cycle which is hard-
|
||||
wired to 255 (100% duty-cycle).
|
||||
|
||||
Chip Differences
|
||||
----------------
|
||||
|
||||
Feature dme1737 sch311x sch5027 sch5127
|
||||
-------------------------------------------------------
|
||||
temp[1-3]_offset yes yes
|
||||
vid yes
|
||||
zone3 yes yes yes
|
||||
zone[1-3]_hyst yes yes
|
||||
pwm min/off yes yes
|
||||
fan3 opt yes opt yes
|
||||
pwm3 opt yes opt yes
|
||||
fan4 opt opt
|
||||
fan5 opt opt
|
||||
pwm5 opt opt
|
||||
fan6 opt opt
|
||||
pwm6 opt opt
|
||||
|
@ -7,6 +7,11 @@ Supported chips:
|
||||
Addresses scanned: I2C 0x4c
|
||||
Datasheet: Publicly available at the National Semiconductor website
|
||||
http://www.national.com/pf/LM/LM63.html
|
||||
* National Semiconductor LM64
|
||||
Prefix: 'lm64'
|
||||
Addresses scanned: I2C 0x18 and 0x4e
|
||||
Datasheet: Publicly available at the National Semiconductor website
|
||||
http://www.national.com/pf/LM/LM64.html
|
||||
|
||||
Author: Jean Delvare <khali@linux-fr.org>
|
||||
|
||||
@ -55,3 +60,5 @@ The lm63 driver will not update its values more frequently than every
|
||||
second; reading them more often will do no harm, but will return 'old'
|
||||
values.
|
||||
|
||||
The LM64 is effectively an LM63 with GPIO lines. The driver does not
|
||||
support these GPIO lines at present.
|
||||
|
@ -72,9 +72,7 @@ in6_min_alarm 5v output undervoltage alarm
|
||||
in7_min_alarm 3v output undervoltage alarm
|
||||
in8_min_alarm Vee (-12v) output undervoltage alarm
|
||||
|
||||
in9_input GPIO #1 voltage data
|
||||
in10_input GPIO #2 voltage data
|
||||
in11_input GPIO #3 voltage data
|
||||
in9_input GPIO voltage data
|
||||
|
||||
power1_input 12v power usage (mW)
|
||||
power2_input 5v power usage (mW)
|
||||
|
@ -80,9 +80,9 @@ All entries (except name) are optional, and should only be created in a
|
||||
given driver if the chip has the feature.
|
||||
|
||||
|
||||
********
|
||||
* Name *
|
||||
********
|
||||
*********************
|
||||
* Global attributes *
|
||||
*********************
|
||||
|
||||
name The chip name.
|
||||
This should be a short, lowercase string, not containing
|
||||
@ -91,6 +91,13 @@ name The chip name.
|
||||
I2C devices get this attribute created automatically.
|
||||
RO
|
||||
|
||||
update_rate The rate at which the chip will update readings.
|
||||
Unit: millisecond
|
||||
RW
|
||||
Some devices have a variable update rate. This attribute
|
||||
can be used to change the update rate to the desired
|
||||
frequency.
|
||||
|
||||
|
||||
************
|
||||
* Voltages *
|
||||
|
26
Documentation/hwmon/tmp102
Normal file
26
Documentation/hwmon/tmp102
Normal file
@ -0,0 +1,26 @@
|
||||
Kernel driver tmp102
|
||||
====================
|
||||
|
||||
Supported chips:
|
||||
* Texas Instruments TMP102
|
||||
Prefix: 'tmp102'
|
||||
Addresses scanned: none
|
||||
Datasheet: http://focus.ti.com/docs/prod/folders/print/tmp102.html
|
||||
|
||||
Author:
|
||||
Steven King <sfking@fdwdc.com>
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
The Texas Instruments TMP102 implements one temperature sensor. Limits can be
|
||||
set through the Overtemperature Shutdown register and Hysteresis register. The
|
||||
sensor is accurate to 0.5 degree over the range of -25 to +85 C, and to 1.0
|
||||
degree from -40 to +125 C. Resolution of the sensor is 0.0625 degree. The
|
||||
operating temperature has a minimum of -55 C and a maximum of +150 C.
|
||||
|
||||
The TMP102 has a programmable update rate that can select between 8, 4, 1, and
|
||||
0.5 Hz. (Currently the driver only supports the default of 4 Hz).
|
||||
|
||||
The driver provides the common sysfs-interface for temperatures (see
|
||||
Documentation/hwmon/sysfs-interface under Temperatures).
|
@ -145,11 +145,10 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
|
||||
acpi= [HW,ACPI,X86]
|
||||
Advanced Configuration and Power Interface
|
||||
Format: { force | off | ht | strict | noirq | rsdt }
|
||||
Format: { force | off | strict | noirq | rsdt }
|
||||
force -- enable ACPI if default was off
|
||||
off -- disable ACPI if default was on
|
||||
noirq -- do not use ACPI for IRQ routing
|
||||
ht -- run only enough ACPI to enable Hyper Threading
|
||||
strict -- Be less tolerant of platforms that are not
|
||||
strictly ACPI specification compliant.
|
||||
rsdt -- prefer RSDT over (default) XSDT
|
||||
@ -290,9 +289,6 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
advansys= [HW,SCSI]
|
||||
See header of drivers/scsi/advansys.c.
|
||||
|
||||
advwdt= [HW,WDT] Advantech WDT
|
||||
Format: <iostart>,<iostop>
|
||||
|
||||
aedsp16= [HW,OSS] Audio Excel DSP 16
|
||||
Format: <io>,<irq>,<dma>,<mss_io>,<mpu_io>,<mpu_irq>
|
||||
See also header of sound/oss/aedsp16.c.
|
||||
@ -761,13 +757,14 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
Default value is 0.
|
||||
Value can be changed at runtime via /selinux/enforce.
|
||||
|
||||
erst_disable [ACPI]
|
||||
Disable Error Record Serialization Table (ERST)
|
||||
support.
|
||||
|
||||
ether= [HW,NET] Ethernet cards parameters
|
||||
This option is obsoleted by the "netdev=" option, which
|
||||
has equivalent usage. See its documentation for details.
|
||||
|
||||
eurwdt= [HW,WDT] Eurotech CPU-1220/1410 onboard watchdog.
|
||||
Format: <io>[,<irq>]
|
||||
|
||||
failslab=
|
||||
fail_page_alloc=
|
||||
fail_make_request=[KNL]
|
||||
@ -858,6 +855,11 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
hd= [EIDE] (E)IDE hard drive subsystem geometry
|
||||
Format: <cyl>,<head>,<sect>
|
||||
|
||||
hest_disable [ACPI]
|
||||
Disable Hardware Error Source Table (HEST) support;
|
||||
corresponding firmware-first mode error processing
|
||||
logic will be disabled.
|
||||
|
||||
highmem=nn[KMG] [KNL,BOOT] forces the highmem zone to have an exact
|
||||
size of <nn>. This works even on boxes that have no
|
||||
highmem otherwise. This also works to reduce highmem
|
||||
@ -1258,6 +1260,8 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
* nohrst, nosrst, norst: suppress hard, soft
|
||||
and both resets.
|
||||
|
||||
* dump_id: dump IDENTIFY data.
|
||||
|
||||
If there are multiple matching configurations changing
|
||||
the same attribute, the last one is used.
|
||||
|
||||
@ -2267,9 +2271,6 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
|
||||
sched_debug [KNL] Enables verbose scheduler debug messages.
|
||||
|
||||
sc1200wdt= [HW,WDT] SC1200 WDT (watchdog) driver
|
||||
Format: <io>[,<timeout>[,<isapnp>]]
|
||||
|
||||
scsi_debug_*= [SCSI]
|
||||
See drivers/scsi/scsi_debug.c.
|
||||
|
||||
@ -2858,8 +2859,10 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
wd7000= [HW,SCSI]
|
||||
See header of drivers/scsi/wd7000.c.
|
||||
|
||||
wdt= [WDT] Watchdog
|
||||
See Documentation/watchdog/wdt.txt.
|
||||
watchdog timers [HW,WDT] For information on watchdog timers,
|
||||
see Documentation/watchdog/watchdog-parameters.txt
|
||||
or other driver-specific files in the
|
||||
Documentation/watchdog/ directory.
|
||||
|
||||
x2apic_phys [X86-64,APIC] Use x2apic physical mode instead of
|
||||
default x2apic cluster mode on platforms
|
||||
|
95
Documentation/spi/ep93xx_spi
Normal file
95
Documentation/spi/ep93xx_spi
Normal file
@ -0,0 +1,95 @@
|
||||
Cirrus EP93xx SPI controller driver HOWTO
|
||||
=========================================
|
||||
|
||||
ep93xx_spi driver brings SPI master support for EP93xx SPI controller. Chip
|
||||
selects are implemented with GPIO lines.
|
||||
|
||||
NOTE: If possible, don't use SFRMOUT (SFRM1) signal as a chip select. It will
|
||||
not work correctly (it cannot be controlled by software). Use GPIO lines
|
||||
instead.
|
||||
|
||||
Sample configuration
|
||||
====================
|
||||
|
||||
Typically driver configuration is done in platform board files (the files under
|
||||
arch/arm/mach-ep93xx/*.c). In this example we configure MMC over SPI through
|
||||
this driver on TS-7260 board. You can adapt the code to suit your needs.
|
||||
|
||||
This example uses EGPIO9 as SD/MMC card chip select (this is wired in DIO1
|
||||
header on the board).
|
||||
|
||||
You need to select CONFIG_MMC_SPI to use mmc_spi driver.
|
||||
|
||||
arch/arm/mach-ep93xx/ts72xx.c:
|
||||
|
||||
...
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/spi/spi.h>
|
||||
|
||||
#include <mach/ep93xx_spi.h>
|
||||
|
||||
/* this is our GPIO line used for chip select */
|
||||
#define MMC_CHIP_SELECT_GPIO EP93XX_GPIO_LINE_EGPIO9
|
||||
|
||||
static int ts72xx_mmc_spi_setup(struct spi_device *spi)
|
||||
{
|
||||
int err;
|
||||
|
||||
err = gpio_request(MMC_CHIP_SELECT_GPIO, spi->modalias);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
gpio_direction_output(MMC_CHIP_SELECT_GPIO, 1);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void ts72xx_mmc_spi_cleanup(struct spi_device *spi)
|
||||
{
|
||||
gpio_set_value(MMC_CHIP_SELECT_GPIO, 1);
|
||||
gpio_direction_input(MMC_CHIP_SELECT_GPIO);
|
||||
gpio_free(MMC_CHIP_SELECT_GPIO);
|
||||
}
|
||||
|
||||
static void ts72xx_mmc_spi_cs_control(struct spi_device *spi, int value)
|
||||
{
|
||||
gpio_set_value(MMC_CHIP_SELECT_GPIO, value);
|
||||
}
|
||||
|
||||
static struct ep93xx_spi_chip_ops ts72xx_mmc_spi_ops = {
|
||||
.setup = ts72xx_mmc_spi_setup,
|
||||
.cleanup = ts72xx_mmc_spi_cleanup,
|
||||
.cs_control = ts72xx_mmc_spi_cs_control,
|
||||
};
|
||||
|
||||
static struct spi_board_info ts72xx_spi_devices[] __initdata = {
|
||||
{
|
||||
.modalias = "mmc_spi",
|
||||
.controller_data = &ts72xx_mmc_spi_ops,
|
||||
/*
|
||||
* We use 10 MHz even though the maximum is 7.4 MHz. The driver
|
||||
* will limit it automatically to max. frequency.
|
||||
*/
|
||||
.max_speed_hz = 10 * 1000 * 1000,
|
||||
.bus_num = 0,
|
||||
.chip_select = 0,
|
||||
.mode = SPI_MODE_0,
|
||||
},
|
||||
};
|
||||
|
||||
static struct ep93xx_spi_info ts72xx_spi_info = {
|
||||
.num_chipselect = ARRAY_SIZE(ts72xx_spi_devices),
|
||||
};
|
||||
|
||||
static void __init ts72xx_init_machine(void)
|
||||
{
|
||||
...
|
||||
ep93xx_register_spi(&ts72xx_spi_info, ts72xx_spi_devices,
|
||||
ARRAY_SIZE(ts72xx_spi_devices));
|
||||
}
|
||||
|
||||
Thanks to
|
||||
=========
|
||||
Martin Guy, H. Hartley Sweeten and others who helped me during development of
|
||||
the driver. Simplemachines.it donated me a Sim.One board which I used testing
|
||||
the driver on EP9307.
|
@ -58,10 +58,10 @@ static void do_msg(int fd, int len)
|
||||
len = sizeof buf;
|
||||
|
||||
buf[0] = 0xaa;
|
||||
xfer[0].tx_buf = (__u64) buf;
|
||||
xfer[0].tx_buf = (unsigned long)buf;
|
||||
xfer[0].len = 1;
|
||||
|
||||
xfer[1].rx_buf = (__u64) buf;
|
||||
xfer[1].rx_buf = (unsigned long) buf;
|
||||
xfer[1].len = len;
|
||||
|
||||
status = ioctl(fd, SPI_IOC_MESSAGE(2), xfer);
|
||||
|
@ -19,6 +19,7 @@ files can be found in mm/swap.c.
|
||||
Currently, these files are in /proc/sys/vm:
|
||||
|
||||
- block_dump
|
||||
- compact_memory
|
||||
- dirty_background_bytes
|
||||
- dirty_background_ratio
|
||||
- dirty_bytes
|
||||
@ -26,6 +27,7 @@ Currently, these files are in /proc/sys/vm:
|
||||
- dirty_ratio
|
||||
- dirty_writeback_centisecs
|
||||
- drop_caches
|
||||
- extfrag_threshold
|
||||
- hugepages_treat_as_movable
|
||||
- hugetlb_shm_group
|
||||
- laptop_mode
|
||||
@ -64,6 +66,15 @@ information on block I/O debugging is in Documentation/laptops/laptop-mode.txt.
|
||||
|
||||
==============================================================
|
||||
|
||||
compact_memory
|
||||
|
||||
Available only when CONFIG_COMPACTION is set. When 1 is written to the file,
|
||||
all zones are compacted such that free memory is available in contiguous
|
||||
blocks where possible. This can be important for example in the allocation of
|
||||
huge pages although processes will also directly compact memory as required.
|
||||
|
||||
==============================================================
|
||||
|
||||
dirty_background_bytes
|
||||
|
||||
Contains the amount of dirty memory at which the pdflush background writeback
|
||||
@ -139,6 +150,20 @@ user should run `sync' first.
|
||||
|
||||
==============================================================
|
||||
|
||||
extfrag_threshold
|
||||
|
||||
This parameter affects whether the kernel will compact memory or direct
|
||||
reclaim to satisfy a high-order allocation. /proc/extfrag_index shows what
|
||||
the fragmentation index for each order is in each zone in the system. Values
|
||||
tending towards 0 imply allocations would fail due to lack of memory,
|
||||
values towards 1000 imply failures are due to fragmentation and -1 implies
|
||||
that the allocation will succeed as long as watermarks are met.
|
||||
|
||||
The kernel will not compact memory in a zone if the
|
||||
fragmentation index is <= extfrag_threshold. The default value is 500.
|
||||
|
||||
==============================================================
|
||||
|
||||
hugepages_treat_as_movable
|
||||
|
||||
This parameter is only useful when kernelcore= is specified at boot time to
|
||||
|
@ -1,41 +1,149 @@
|
||||
Started Nov 1999 by Kanoj Sarcar <kanoj@sgi.com>
|
||||
|
||||
The intent of this file is to have an uptodate, running commentary
|
||||
from different people about NUMA specific code in the Linux vm.
|
||||
What is NUMA?
|
||||
|
||||
What is NUMA? It is an architecture where the memory access times
|
||||
for different regions of memory from a given processor varies
|
||||
according to the "distance" of the memory region from the processor.
|
||||
Each region of memory to which access times are the same from any
|
||||
cpu, is called a node. On such architectures, it is beneficial if
|
||||
the kernel tries to minimize inter node communications. Schemes
|
||||
for this range from kernel text and read-only data replication
|
||||
across nodes, and trying to house all the data structures that
|
||||
key components of the kernel need on memory on that node.
|
||||
This question can be answered from a couple of perspectives: the
|
||||
hardware view and the Linux software view.
|
||||
|
||||
Currently, all the numa support is to provide efficient handling
|
||||
of widely discontiguous physical memory, so architectures which
|
||||
are not NUMA but can have huge holes in the physical address space
|
||||
can use the same code. All this code is bracketed by CONFIG_DISCONTIGMEM.
|
||||
From the hardware perspective, a NUMA system is a computer platform that
|
||||
comprises multiple components or assemblies each of which may contain 0
|
||||
or more CPUs, local memory, and/or IO buses. For brevity and to
|
||||
disambiguate the hardware view of these physical components/assemblies
|
||||
from the software abstraction thereof, we'll call the components/assemblies
|
||||
'cells' in this document.
|
||||
|
||||
The initial port includes NUMAizing the bootmem allocator code by
|
||||
encapsulating all the pieces of information into a bootmem_data_t
|
||||
structure. Node specific calls have been added to the allocator.
|
||||
In theory, any platform which uses the bootmem allocator should
|
||||
be able to put the bootmem and mem_map data structures anywhere
|
||||
it deems best.
|
||||
Each of the 'cells' may be viewed as an SMP [symmetric multi-processor] subset
|
||||
of the system--although some components necessary for a stand-alone SMP system
|
||||
may not be populated on any given cell. The cells of the NUMA system are
|
||||
connected together with some sort of system interconnect--e.g., a crossbar or
|
||||
point-to-point link are common types of NUMA system interconnects. Both of
|
||||
these types of interconnects can be aggregated to create NUMA platforms with
|
||||
cells at multiple distances from other cells.
|
||||
|
||||
Each node's page allocation data structures have also been encapsulated
|
||||
into a pg_data_t. The bootmem_data_t is just one part of this. To
|
||||
make the code look uniform between NUMA and regular UMA platforms,
|
||||
UMA platforms have a statically allocated pg_data_t too (contig_page_data).
|
||||
For the sake of uniformity, the function num_online_nodes() is also defined
|
||||
for all platforms. As we run benchmarks, we might decide to NUMAize
|
||||
more variables like low_on_memory, nr_free_pages etc into the pg_data_t.
|
||||
For Linux, the NUMA platforms of interest are primarily what is known as Cache
|
||||
Coherent NUMA or ccNUMA systems. With ccNUMA systems, all memory is visible
|
||||
to and accessible from any CPU attached to any cell and cache coherency
|
||||
is handled in hardware by the processor caches and/or the system interconnect.
|
||||
|
||||
The NUMA aware page allocation code currently tries to allocate pages
|
||||
from different nodes in a round robin manner. This will be changed to
|
||||
do concentratic circle search, starting from current node, once the
|
||||
NUMA port achieves more maturity. The call alloc_pages_node has been
|
||||
added, so that drivers can make the call and not worry about whether
|
||||
it is running on a NUMA or UMA platform.
|
||||
Memory access time and effective memory bandwidth varies depending on how far
|
||||
away the cell containing the CPU or IO bus making the memory access is from the
|
||||
cell containing the target memory. For example, access to memory by CPUs
|
||||
attached to the same cell will experience faster access times and higher
|
||||
bandwidths than accesses to memory on other, remote cells. NUMA platforms
|
||||
can have cells at multiple remote distances from any given cell.
|
||||
|
||||
Platform vendors don't build NUMA systems just to make software developers'
|
||||
lives interesting. Rather, this architecture is a means to provide scalable
|
||||
memory bandwidth. However, to achieve scalable memory bandwidth, system and
|
||||
application software must arrange for a large majority of the memory references
|
||||
[cache misses] to be to "local" memory--memory on the same cell, if any--or
|
||||
to the closest cell with memory.
|
||||
|
||||
This leads to the Linux software view of a NUMA system:
|
||||
|
||||
Linux divides the system's hardware resources into multiple software
|
||||
abstractions called "nodes". Linux maps the nodes onto the physical cells
|
||||
of the hardware platform, abstracting away some of the details for some
|
||||
architectures. As with physical cells, software nodes may contain 0 or more
|
||||
CPUs, memory and/or IO buses. And, again, memory accesses to memory on
|
||||
"closer" nodes--nodes that map to closer cells--will generally experience
|
||||
faster access times and higher effective bandwidth than accesses to more
|
||||
remote cells.
|
||||
|
||||
For some architectures, such as x86, Linux will "hide" any node representing a
|
||||
physical cell that has no memory attached, and reassign any CPUs attached to
|
||||
that cell to a node representing a cell that does have memory. Thus, on
|
||||
these architectures, one cannot assume that all CPUs that Linux associates with
|
||||
a given node will see the same local memory access times and bandwidth.
|
||||
|
||||
In addition, for some architectures, again x86 is an example, Linux supports
|
||||
the emulation of additional nodes. For NUMA emulation, linux will carve up
|
||||
the existing nodes--or the system memory for non-NUMA platforms--into multiple
|
||||
nodes. Each emulated node will manage a fraction of the underlying cells'
|
||||
physical memory. NUMA emluation is useful for testing NUMA kernel and
|
||||
application features on non-NUMA platforms, and as a sort of memory resource
|
||||
management mechanism when used together with cpusets.
|
||||
[see Documentation/cgroups/cpusets.txt]
|
||||
|
||||
For each node with memory, Linux constructs an independent memory management
|
||||
subsystem, complete with its own free page lists, in-use page lists, usage
|
||||
statistics and locks to mediate access. In addition, Linux constructs for
|
||||
each memory zone [one or more of DMA, DMA32, NORMAL, HIGH_MEMORY, MOVABLE],
|
||||
an ordered "zonelist". A zonelist specifies the zones/nodes to visit when a
|
||||
selected zone/node cannot satisfy the allocation request. This situation,
|
||||
when a zone has no available memory to satisfy a request, is called
|
||||
"overflow" or "fallback".
|
||||
|
||||
Because some nodes contain multiple zones containing different types of
|
||||
memory, Linux must decide whether to order the zonelists such that allocations
|
||||
fall back to the same zone type on a different node, or to a different zone
|
||||
type on the same node. This is an important consideration because some zones,
|
||||
such as DMA or DMA32, represent relatively scarce resources. Linux chooses
|
||||
a default zonelist order based on the sizes of the various zone types relative
|
||||
to the total memory of the node and the total memory of the system. The
|
||||
default zonelist order may be overridden using the numa_zonelist_order kernel
|
||||
boot parameter or sysctl. [see Documentation/kernel-parameters.txt and
|
||||
Documentation/sysctl/vm.txt]
|
||||
|
||||
By default, Linux will attempt to satisfy memory allocation requests from the
|
||||
node to which the CPU that executes the request is assigned. Specifically,
|
||||
Linux will attempt to allocate from the first node in the appropriate zonelist
|
||||
for the node where the request originates. This is called "local allocation."
|
||||
If the "local" node cannot satisfy the request, the kernel will examine other
|
||||
nodes' zones in the selected zonelist looking for the first zone in the list
|
||||
that can satisfy the request.
|
||||
|
||||
Local allocation will tend to keep subsequent access to the allocated memory
|
||||
"local" to the underlying physical resources and off the system interconnect--
|
||||
as long as the task on whose behalf the kernel allocated some memory does not
|
||||
later migrate away from that memory. The Linux scheduler is aware of the
|
||||
NUMA topology of the platform--embodied in the "scheduling domains" data
|
||||
structures [see Documentation/scheduler/sched-domains.txt]--and the scheduler
|
||||
attempts to minimize task migration to distant scheduling domains. However,
|
||||
the scheduler does not take a task's NUMA footprint into account directly.
|
||||
Thus, under sufficient imbalance, tasks can migrate between nodes, remote
|
||||
from their initial node and kernel data structures.
|
||||
|
||||
System administrators and application designers can restrict a task's migration
|
||||
to improve NUMA locality using various CPU affinity command line interfaces,
|
||||
such as taskset(1) and numactl(1), and program interfaces such as
|
||||
sched_setaffinity(2). Further, one can modify the kernel's default local
|
||||
allocation behavior using Linux NUMA memory policy.
|
||||
[see Documentation/vm/numa_memory_policy.]
|
||||
|
||||
System administrators can restrict the CPUs and nodes' memories that a non-
|
||||
privileged user can specify in the scheduling or NUMA commands and functions
|
||||
using control groups and CPUsets. [see Documentation/cgroups/CPUsets.txt]
|
||||
|
||||
On architectures that do not hide memoryless nodes, Linux will include only
|
||||
zones [nodes] with memory in the zonelists. This means that for a memoryless
|
||||
node the "local memory node"--the node of the first zone in CPU's node's
|
||||
zonelist--will not be the node itself. Rather, it will be the node that the
|
||||
kernel selected as the nearest node with memory when it built the zonelists.
|
||||
So, default, local allocations will succeed with the kernel supplying the
|
||||
closest available memory. This is a consequence of the same mechanism that
|
||||
allows such allocations to fallback to other nearby nodes when a node that
|
||||
does contain memory overflows.
|
||||
|
||||
Some kernel allocations do not want or cannot tolerate this allocation fallback
|
||||
behavior. Rather they want to be sure they get memory from the specified node
|
||||
or get notified that the node has no free memory. This is usually the case when
|
||||
a subsystem allocates per CPU memory resources, for example.
|
||||
|
||||
A typical model for making such an allocation is to obtain the node id of the
|
||||
node to which the "current CPU" is attached using one of the kernel's
|
||||
numa_node_id() or CPU_to_node() functions and then request memory from only
|
||||
the node id returned. When such an allocation fails, the requesting subsystem
|
||||
may revert to its own fallback path. The slab kernel memory allocator is an
|
||||
example of this. Or, the subsystem may choose to disable or not to enable
|
||||
itself on allocation failure. The kernel profiling subsystem is an example of
|
||||
this.
|
||||
|
||||
If the architecture supports--does not hide--memoryless nodes, then CPUs
|
||||
attached to memoryless nodes would always incur the fallback path overhead
|
||||
or some subsystems would fail to initialize if they attempted to allocated
|
||||
memory exclusively from a node without memory. To support such
|
||||
architectures transparently, kernel subsystems can use the numa_mem_id()
|
||||
or cpu_to_mem() function to locate the "local memory node" for the calling or
|
||||
specified CPU. Again, this is the same node from which default, local page
|
||||
allocations will be attempted.
|
||||
|
@ -1,10 +1,15 @@
|
||||
00-INDEX
|
||||
- this file.
|
||||
hpwdt.txt
|
||||
- information on the HP iLO2 NMI watchdog
|
||||
pcwd-watchdog.txt
|
||||
- documentation for Berkshire Products PC Watchdog ISA cards.
|
||||
src/
|
||||
- directory holding watchdog related example programs.
|
||||
watchdog-api.txt
|
||||
- description of the Linux Watchdog driver API.
|
||||
watchdog-parameters.txt
|
||||
- information on driver parameters (for drivers other than
|
||||
the ones that have driver-specific files here)
|
||||
wdt.txt
|
||||
- description of the Watchdog Timer Interfaces for Linux.
|
||||
|
390
Documentation/watchdog/watchdog-parameters.txt
Normal file
390
Documentation/watchdog/watchdog-parameters.txt
Normal file
@ -0,0 +1,390 @@
|
||||
This file provides information on the module parameters of many of
|
||||
the Linux watchdog drivers. Watchdog driver parameter specs should
|
||||
be listed here unless the driver has its own driver-specific information
|
||||
file.
|
||||
|
||||
|
||||
See Documentation/kernel-parameters.txt for information on
|
||||
providing kernel parameters for builtin drivers versus loadable
|
||||
modules.
|
||||
|
||||
|
||||
-------------------------------------------------
|
||||
acquirewdt:
|
||||
wdt_stop: Acquire WDT 'stop' io port (default 0x43)
|
||||
wdt_start: Acquire WDT 'start' io port (default 0x443)
|
||||
nowayout: Watchdog cannot be stopped once started
|
||||
(default=kernel config parameter)
|
||||
-------------------------------------------------
|
||||
advantechwdt:
|
||||
wdt_stop: Advantech WDT 'stop' io port (default 0x443)
|
||||
wdt_start: Advantech WDT 'start' io port (default 0x443)
|
||||
timeout: Watchdog timeout in seconds. 1<= timeout <=63, default=60.
|
||||
nowayout: Watchdog cannot be stopped once started
|
||||
(default=kernel config parameter)
|
||||
-------------------------------------------------
|
||||
alim1535_wdt:
|
||||
timeout: Watchdog timeout in seconds. (0 < timeout < 18000, default=60
|
||||
nowayout: Watchdog cannot be stopped once started
|
||||
(default=kernel config parameter)
|
||||
-------------------------------------------------
|
||||
alim7101_wdt:
|
||||
timeout: Watchdog timeout in seconds. (1<=timeout<=3600, default=30
|
||||
use_gpio: Use the gpio watchdog (required by old cobalt boards).
|
||||
default=0/off/no
|
||||
nowayout: Watchdog cannot be stopped once started
|
||||
(default=kernel config parameter)
|
||||
-------------------------------------------------
|
||||
ar7_wdt:
|
||||
margin: Watchdog margin in seconds (default=60)
|
||||
nowayout: Disable watchdog shutdown on close
|
||||
(default=kernel config parameter)
|
||||
-------------------------------------------------
|
||||
at32ap700x_wdt:
|
||||
timeout: Timeout value. Limited to be 1 or 2 seconds. (default=2)
|
||||
nowayout: Watchdog cannot be stopped once started
|
||||
(default=kernel config parameter)
|
||||
-------------------------------------------------
|
||||
at91rm9200_wdt:
|
||||
wdt_time: Watchdog time in seconds. (default=5)
|
||||
nowayout: Watchdog cannot be stopped once started
|
||||
(default=kernel config parameter)
|
||||
-------------------------------------------------
|
||||
at91sam9_wdt:
|
||||
heartbeat: Watchdog heartbeats in seconds. (default = 15)
|
||||
nowayout: Watchdog cannot be stopped once started
|
||||
(default=kernel config parameter)
|
||||
-------------------------------------------------
|
||||
bcm47xx_wdt:
|
||||
wdt_time: Watchdog time in seconds. (default=30)
|
||||
nowayout: Watchdog cannot be stopped once started
|
||||
(default=kernel config parameter)
|
||||
-------------------------------------------------
|
||||
bfin_wdt:
|
||||
timeout: Watchdog timeout in seconds. (1<=timeout<=((2^32)/SCLK), default=20)
|
||||
nowayout: Watchdog cannot be stopped once started
|
||||
(default=kernel config parameter)
|
||||
-------------------------------------------------
|
||||
coh901327_wdt:
|
||||
margin: Watchdog margin in seconds (default 60s)
|
||||
-------------------------------------------------
|
||||
cpu5wdt:
|
||||
port: base address of watchdog card, default is 0x91
|
||||
verbose: be verbose, default is 0 (no)
|
||||
ticks: count down ticks, default is 10000
|
||||
-------------------------------------------------
|
||||
cpwd:
|
||||
wd0_timeout: Default watchdog0 timeout in 1/10secs
|
||||
wd1_timeout: Default watchdog1 timeout in 1/10secs
|
||||
wd2_timeout: Default watchdog2 timeout in 1/10secs
|
||||
-------------------------------------------------
|
||||
davinci_wdt:
|
||||
heartbeat: Watchdog heartbeat period in seconds from 1 to 600, default 60
|
||||
-------------------------------------------------
|
||||
ep93xx_wdt:
|
||||
nowayout: Watchdog cannot be stopped once started
|
||||
timeout: Watchdog timeout in seconds. (1<=timeout<=3600, default=TBD)
|
||||
-------------------------------------------------
|
||||
eurotechwdt:
|
||||
nowayout: Watchdog cannot be stopped once started
|
||||
(default=kernel config parameter)
|
||||
io: Eurotech WDT io port (default=0x3f0)
|
||||
irq: Eurotech WDT irq (default=10)
|
||||
ev: Eurotech WDT event type (default is `int')
|
||||
-------------------------------------------------
|
||||
gef_wdt:
|
||||
nowayout: Watchdog cannot be stopped once started
|
||||
(default=kernel config parameter)
|
||||
-------------------------------------------------
|
||||
geodewdt:
|
||||
timeout: Watchdog timeout in seconds. 1<= timeout <=131, default=60.
|
||||
nowayout: Watchdog cannot be stopped once started
|
||||
(default=kernel config parameter)
|
||||
-------------------------------------------------
|
||||
i6300esb:
|
||||
heartbeat: Watchdog heartbeat in seconds. (1<heartbeat<2046, default=30)
|
||||
nowayout: Watchdog cannot be stopped once started
|
||||
(default=kernel config parameter)
|
||||
-------------------------------------------------
|
||||
iTCO_wdt:
|
||||
heartbeat: Watchdog heartbeat in seconds.
|
||||
(2<heartbeat<39 (TCO v1) or 613 (TCO v2), default=30)
|
||||
nowayout: Watchdog cannot be stopped once started
|
||||
(default=kernel config parameter)
|
||||
-------------------------------------------------
|
||||
iTCO_vendor_support:
|
||||
vendorsupport: iTCO vendor specific support mode, default=0 (none),
|
||||
1=SuperMicro Pent3, 2=SuperMicro Pent4+, 911=Broken SMI BIOS
|
||||
-------------------------------------------------
|
||||
ib700wdt:
|
||||
timeout: Watchdog timeout in seconds. 0<= timeout <=30, default=30.
|
||||
nowayout: Watchdog cannot be stopped once started
|
||||
(default=kernel config parameter)
|
||||
-------------------------------------------------
|
||||
ibmasr:
|
||||
nowayout: Watchdog cannot be stopped once started
|
||||
(default=kernel config parameter)
|
||||
-------------------------------------------------
|
||||
indydog:
|
||||
nowayout: Watchdog cannot be stopped once started
|
||||
(default=kernel config parameter)
|
||||
-------------------------------------------------
|
||||
iop_wdt:
|
||||
nowayout: Watchdog cannot be stopped once started
|
||||
(default=kernel config parameter)
|
||||
-------------------------------------------------
|
||||
it8712f_wdt:
|
||||
margin: Watchdog margin in seconds (default 60)
|
||||
nowayout: Disable watchdog shutdown on close
|
||||
(default=kernel config parameter)
|
||||
-------------------------------------------------
|
||||
it87_wdt:
|
||||
nogameport: Forbid the activation of game port, default=0
|
||||
exclusive: Watchdog exclusive device open, default=1
|
||||
timeout: Watchdog timeout in seconds, default=60
|
||||
testmode: Watchdog test mode (1 = no reboot), default=0
|
||||
nowayout: Watchdog cannot be stopped once started
|
||||
(default=kernel config parameter)
|
||||
-------------------------------------------------
|
||||
ixp2000_wdt:
|
||||
heartbeat: Watchdog heartbeat in seconds (default 60s)
|
||||
nowayout: Watchdog cannot be stopped once started
|
||||
(default=kernel config parameter)
|
||||
-------------------------------------------------
|
||||
ixp4xx_wdt:
|
||||
heartbeat: Watchdog heartbeat in seconds (default 60s)
|
||||
nowayout: Watchdog cannot be stopped once started
|
||||
(default=kernel config parameter)
|
||||
-------------------------------------------------
|
||||
ks8695_wdt:
|
||||
wdt_time: Watchdog time in seconds. (default=5)
|
||||
nowayout: Watchdog cannot be stopped once started
|
||||
(default=kernel config parameter)
|
||||
-------------------------------------------------
|
||||
machzwd:
|
||||
nowayout: Watchdog cannot be stopped once started
|
||||
(default=kernel config parameter)
|
||||
action: after watchdog resets, generate:
|
||||
0 = RESET(*) 1 = SMI 2 = NMI 3 = SCI
|
||||
-------------------------------------------------
|
||||
max63xx_wdt:
|
||||
heartbeat: Watchdog heartbeat period in seconds from 1 to 60, default 60
|
||||
nowayout: Watchdog cannot be stopped once started
|
||||
(default=kernel config parameter)
|
||||
nodelay: Force selection of a timeout setting without initial delay
|
||||
(max6373/74 only, default=0)
|
||||
-------------------------------------------------
|
||||
mixcomwd:
|
||||
nowayout: Watchdog cannot be stopped once started
|
||||
(default=kernel config parameter)
|
||||
-------------------------------------------------
|
||||
mpc8xxx_wdt:
|
||||
timeout: Watchdog timeout in ticks. (0<timeout<65536, default=65535)
|
||||
reset: Watchdog Interrupt/Reset Mode. 0 = interrupt, 1 = reset
|
||||
nowayout: Watchdog cannot be stopped once started
|
||||
(default=kernel config parameter)
|
||||
-------------------------------------------------
|
||||
mpcore_wdt:
|
||||
mpcore_margin: MPcore timer margin in seconds.
|
||||
(0 < mpcore_margin < 65536, default=60)
|
||||
nowayout: Watchdog cannot be stopped once started
|
||||
(default=kernel config parameter)
|
||||
mpcore_noboot: MPcore watchdog action, set to 1 to ignore reboots,
|
||||
0 to reboot (default=0
|
||||
-------------------------------------------------
|
||||
mv64x60_wdt:
|
||||
nowayout: Watchdog cannot be stopped once started
|
||||
(default=kernel config parameter)
|
||||
-------------------------------------------------
|
||||
nuc900_wdt:
|
||||
heartbeat: Watchdog heartbeats in seconds.
|
||||
(default = 15)
|
||||
nowayout: Watchdog cannot be stopped once started
|
||||
(default=kernel config parameter)
|
||||
-------------------------------------------------
|
||||
omap_wdt:
|
||||
timer_margin: initial watchdog timeout (in seconds)
|
||||
-------------------------------------------------
|
||||
orion_wdt:
|
||||
heartbeat: Initial watchdog heartbeat in seconds
|
||||
nowayout: Watchdog cannot be stopped once started
|
||||
(default=kernel config parameter)
|
||||
-------------------------------------------------
|
||||
pc87413_wdt:
|
||||
io: pc87413 WDT I/O port (default: io).
|
||||
timeout: Watchdog timeout in minutes (default=timeout).
|
||||
nowayout: Watchdog cannot be stopped once started
|
||||
(default=kernel config parameter)
|
||||
-------------------------------------------------
|
||||
pika_wdt:
|
||||
heartbeat: Watchdog heartbeats in seconds. (default = 15)
|
||||
nowayout: Watchdog cannot be stopped once started
|
||||
(default=kernel config parameter)
|
||||
-------------------------------------------------
|
||||
pnx4008_wdt:
|
||||
heartbeat: Watchdog heartbeat period in seconds from 1 to 60, default 19
|
||||
nowayout: Set to 1 to keep watchdog running after device release
|
||||
-------------------------------------------------
|
||||
pnx833x_wdt:
|
||||
timeout: Watchdog timeout in Mhz. (68Mhz clock), default=2040000000 (30 seconds)
|
||||
nowayout: Watchdog cannot be stopped once started
|
||||
(default=kernel config parameter)
|
||||
start_enabled: Watchdog is started on module insertion (default=1)
|
||||
-------------------------------------------------
|
||||
rc32434_wdt:
|
||||
timeout: Watchdog timeout value, in seconds (default=20)
|
||||
nowayout: Watchdog cannot be stopped once started
|
||||
(default=kernel config parameter)
|
||||
-------------------------------------------------
|
||||
riowd:
|
||||
riowd_timeout: Watchdog timeout in minutes (default=1)
|
||||
-------------------------------------------------
|
||||
s3c2410_wdt:
|
||||
tmr_margin: Watchdog tmr_margin in seconds. (default=15)
|
||||
tmr_atboot: Watchdog is started at boot time if set to 1, default=0
|
||||
nowayout: Watchdog cannot be stopped once started
|
||||
(default=kernel config parameter)
|
||||
soft_noboot: Watchdog action, set to 1 to ignore reboots, 0 to reboot
|
||||
debug: Watchdog debug, set to >1 for debug, (default 0)
|
||||
-------------------------------------------------
|
||||
sa1100_wdt:
|
||||
margin: Watchdog margin in seconds (default 60s)
|
||||
-------------------------------------------------
|
||||
sb_wdog:
|
||||
timeout: Watchdog timeout in microseconds (max/default 8388607 or 8.3ish secs)
|
||||
-------------------------------------------------
|
||||
sbc60xxwdt:
|
||||
wdt_stop: SBC60xx WDT 'stop' io port (default 0x45)
|
||||
wdt_start: SBC60xx WDT 'start' io port (default 0x443)
|
||||
timeout: Watchdog timeout in seconds. (1<=timeout<=3600, default=30)
|
||||
nowayout: Watchdog cannot be stopped once started
|
||||
(default=kernel config parameter)
|
||||
-------------------------------------------------
|
||||
sbc7240_wdt:
|
||||
timeout: Watchdog timeout in seconds. (1<=timeout<=255, default=30)
|
||||
nowayout: Disable watchdog when closing device file
|
||||
-------------------------------------------------
|
||||
sbc8360:
|
||||
timeout: Index into timeout table (0-63) (default=27 (60s))
|
||||
nowayout: Watchdog cannot be stopped once started
|
||||
(default=kernel config parameter)
|
||||
-------------------------------------------------
|
||||
sbc_epx_c3:
|
||||
nowayout: Watchdog cannot be stopped once started
|
||||
(default=kernel config parameter)
|
||||
-------------------------------------------------
|
||||
sbc_fitpc2_wdt:
|
||||
margin: Watchdog margin in seconds (default 60s)
|
||||
nowayout: Watchdog cannot be stopped once started
|
||||
-------------------------------------------------
|
||||
sc1200wdt:
|
||||
isapnp: When set to 0 driver ISA PnP support will be disabled (default=1)
|
||||
io: io port
|
||||
timeout: range is 0-255 minutes, default is 1
|
||||
nowayout: Watchdog cannot be stopped once started
|
||||
(default=kernel config parameter)
|
||||
-------------------------------------------------
|
||||
sc520_wdt:
|
||||
timeout: Watchdog timeout in seconds. (1 <= timeout <= 3600, default=30)
|
||||
nowayout: Watchdog cannot be stopped once started
|
||||
(default=kernel config parameter)
|
||||
-------------------------------------------------
|
||||
sch311x_wdt:
|
||||
force_id: Override the detected device ID
|
||||
therm_trip: Should a ThermTrip trigger the reset generator
|
||||
timeout: Watchdog timeout in seconds. 1<= timeout <=15300, default=60
|
||||
nowayout: Watchdog cannot be stopped once started
|
||||
(default=kernel config parameter)
|
||||
-------------------------------------------------
|
||||
scx200_wdt:
|
||||
margin: Watchdog margin in seconds
|
||||
nowayout: Disable watchdog shutdown on close
|
||||
-------------------------------------------------
|
||||
shwdt:
|
||||
clock_division_ratio: Clock division ratio. Valid ranges are from 0x5 (1.31ms)
|
||||
to 0x7 (5.25ms). (default=7)
|
||||
heartbeat: Watchdog heartbeat in seconds. (1 <= heartbeat <= 3600, default=30
|
||||
nowayout: Watchdog cannot be stopped once started
|
||||
(default=kernel config parameter)
|
||||
-------------------------------------------------
|
||||
smsc37b787_wdt:
|
||||
timeout: range is 1-255 units, default is 60
|
||||
nowayout: Watchdog cannot be stopped once started
|
||||
(default=kernel config parameter)
|
||||
-------------------------------------------------
|
||||
softdog:
|
||||
soft_margin: Watchdog soft_margin in seconds.
|
||||
(0 < soft_margin < 65536, default=60)
|
||||
nowayout: Watchdog cannot be stopped once started
|
||||
(default=kernel config parameter)
|
||||
soft_noboot: Softdog action, set to 1 to ignore reboots, 0 to reboot
|
||||
(default=0)
|
||||
-------------------------------------------------
|
||||
stmp3xxx_wdt:
|
||||
heartbeat: Watchdog heartbeat period in seconds from 1 to 4194304, default 19
|
||||
-------------------------------------------------
|
||||
ts72xx_wdt:
|
||||
timeout: Watchdog timeout in seconds. (1 <= timeout <= 8, default=8)
|
||||
nowayout: Disable watchdog shutdown on close
|
||||
-------------------------------------------------
|
||||
twl4030_wdt:
|
||||
nowayout: Watchdog cannot be stopped once started
|
||||
(default=kernel config parameter)
|
||||
-------------------------------------------------
|
||||
txx9wdt:
|
||||
timeout: Watchdog timeout in seconds. (0<timeout<N, default=60)
|
||||
nowayout: Watchdog cannot be stopped once started
|
||||
(default=kernel config parameter)
|
||||
-------------------------------------------------
|
||||
w83627hf_wdt:
|
||||
wdt_io: w83627hf/thf WDT io port (default 0x2E)
|
||||
timeout: Watchdog timeout in seconds. 1 <= timeout <= 255, default=60.
|
||||
nowayout: Watchdog cannot be stopped once started
|
||||
(default=kernel config parameter)
|
||||
-------------------------------------------------
|
||||
w83697hf_wdt:
|
||||
wdt_io: w83697hf/hg WDT io port (default 0x2e, 0 = autodetect)
|
||||
timeout: Watchdog timeout in seconds. 1<= timeout <=255 (default=60)
|
||||
nowayout: Watchdog cannot be stopped once started
|
||||
(default=kernel config parameter)
|
||||
early_disable: Watchdog gets disabled at boot time (default=1)
|
||||
-------------------------------------------------
|
||||
w83697ug_wdt:
|
||||
wdt_io: w83697ug/uf WDT io port (default 0x2e)
|
||||
timeout: Watchdog timeout in seconds. 1<= timeout <=255 (default=60)
|
||||
nowayout: Watchdog cannot be stopped once started
|
||||
(default=kernel config parameter)
|
||||
-------------------------------------------------
|
||||
w83877f_wdt:
|
||||
timeout: Watchdog timeout in seconds. (1<=timeout<=3600, default=30)
|
||||
nowayout: Watchdog cannot be stopped once started
|
||||
(default=kernel config parameter)
|
||||
-------------------------------------------------
|
||||
w83977f_wdt:
|
||||
timeout: Watchdog timeout in seconds (15..7635), default=45)
|
||||
testmode: Watchdog testmode (1 = no reboot), default=0
|
||||
nowayout: Watchdog cannot be stopped once started
|
||||
(default=kernel config parameter)
|
||||
-------------------------------------------------
|
||||
wafer5823wdt:
|
||||
timeout: Watchdog timeout in seconds. 1 <= timeout <= 255, default=60.
|
||||
nowayout: Watchdog cannot be stopped once started
|
||||
(default=kernel config parameter)
|
||||
-------------------------------------------------
|
||||
wdt285:
|
||||
soft_margin: Watchdog timeout in seconds (default=60)
|
||||
-------------------------------------------------
|
||||
wdt977:
|
||||
timeout: Watchdog timeout in seconds (60..15300, default=60)
|
||||
testmode: Watchdog testmode (1 = no reboot), default=0
|
||||
nowayout: Watchdog cannot be stopped once started
|
||||
(default=kernel config parameter)
|
||||
-------------------------------------------------
|
||||
wm831x_wdt:
|
||||
nowayout: Watchdog cannot be stopped once started
|
||||
(default=kernel config parameter)
|
||||
-------------------------------------------------
|
||||
wm8350_wdt:
|
||||
nowayout: Watchdog cannot be stopped once started
|
||||
(default=kernel config parameter)
|
||||
-------------------------------------------------
|
@ -14,14 +14,22 @@ reboot will depend on the state of the machines and interrupts. The hardware
|
||||
boards physically pull the machine down off their own onboard timers and
|
||||
will reboot from almost anything.
|
||||
|
||||
A second temperature monitoring interface is available on the WDT501P cards
|
||||
A second temperature monitoring interface is available on the WDT501P cards.
|
||||
This provides /dev/temperature. This is the machine internal temperature in
|
||||
degrees Fahrenheit. Each read returns a single byte giving the temperature.
|
||||
|
||||
The third interface logs kernel messages on additional alert events.
|
||||
|
||||
The wdt card cannot be safely probed for. Instead you need to pass
|
||||
wdt=ioaddr,irq as a boot parameter - eg "wdt=0x240,11".
|
||||
The ICS ISA-bus wdt card cannot be safely probed for. Instead you need to
|
||||
pass IO address and IRQ boot parameters. E.g.:
|
||||
wdt.io=0x240 wdt.irq=11
|
||||
|
||||
Other "wdt" driver parameters are:
|
||||
heartbeat Watchdog heartbeat in seconds (default 60)
|
||||
nowayout Watchdog cannot be stopped once started (kernel
|
||||
build parameter)
|
||||
tachometer WDT501-P Fan Tachometer support (0=disable, default=0)
|
||||
type WDT501-P Card type (500 or 501, default=500)
|
||||
|
||||
Features
|
||||
--------
|
||||
@ -40,4 +48,3 @@ Minor numbers are however allocated for it.
|
||||
|
||||
|
||||
Example Watchdog Driver: see Documentation/watchdog/src/watchdog-simple.c
|
||||
|
||||
|
28
MAINTAINERS
28
MAINTAINERS
@ -969,6 +969,18 @@ M: Wan ZongShun <mcuos.com@gmail.com>
|
||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||
W: http://www.mcuos.com
|
||||
S: Maintained
|
||||
F: arch/arm/mach-w90x900/
|
||||
F: arch/arm/mach-nuc93x/
|
||||
F: drivers/input/keyboard/w90p910_keypad.c
|
||||
F: drivers/input/touchscreen/w90p910_ts.c
|
||||
F: drivers/watchdog/nuc900_wdt.c
|
||||
F: drivers/net/arm/w90p910_ether.c
|
||||
F: drivers/mtd/nand/w90p910_nand.c
|
||||
F: drivers/rtc/rtc-nuc900.c
|
||||
F: drivers/spi/spi_nuc900.c
|
||||
F: drivers/usb/host/ehci-w90x900.c
|
||||
F: drivers/video/nuc900fb.c
|
||||
F: drivers/sound/soc/nuc900/
|
||||
|
||||
ARM/U300 MACHINE SUPPORT
|
||||
M: Linus Walleij <linus.walleij@stericsson.com>
|
||||
@ -2875,6 +2887,13 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input.git
|
||||
S: Maintained
|
||||
F: drivers/input/
|
||||
|
||||
INTEL IDLE DRIVER
|
||||
M: Len Brown <lenb@kernel.org>
|
||||
L: linux-pm@lists.linux-foundation.org
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-idle-2.6.git
|
||||
S: Supported
|
||||
F: drivers/idle/intel_idle.c
|
||||
|
||||
INTEL FRAMEBUFFER DRIVER (excluding 810 and 815)
|
||||
M: Maik Broemme <mbroemme@plusserver.de>
|
||||
L: linux-fbdev@vger.kernel.org
|
||||
@ -4824,6 +4843,9 @@ W: http://www.ibm.com/developerworks/linux/linux390/
|
||||
S: Supported
|
||||
F: arch/s390/
|
||||
F: drivers/s390/
|
||||
F: fs/partitions/ibm.c
|
||||
F: Documentation/s390/
|
||||
F: Documentation/DocBook/s390*
|
||||
|
||||
S390 NETWORK DRIVERS
|
||||
M: Ursula Braun <ursula.braun@de.ibm.com>
|
||||
@ -4992,6 +5014,12 @@ L: linux-mmc@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/mmc/host/sdhci-s3c.c
|
||||
|
||||
SECURE DIGITAL HOST CONTROLLER INTERFACE (SDHCI) ST SPEAR DRIVER
|
||||
M: Viresh Kumar <viresh.kumar@st.com>
|
||||
L: linux-mmc@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/mmc/host/sdhci-spear.c
|
||||
|
||||
SECURITY SUBSYSTEM
|
||||
M: James Morris <jmorris@namei.org>
|
||||
L: linux-security-module@vger.kernel.org (suggested Cc:)
|
||||
|
4
Makefile
4
Makefile
@ -1,7 +1,7 @@
|
||||
VERSION = 2
|
||||
PATCHLEVEL = 6
|
||||
SUBLEVEL = 34
|
||||
EXTRAVERSION =
|
||||
SUBLEVEL = 35
|
||||
EXTRAVERSION = -rc1
|
||||
NAME = Sheep on Meth
|
||||
|
||||
# *DOCUMENTATION*
|
||||
|
@ -51,10 +51,6 @@ config GENERIC_TIME
|
||||
bool
|
||||
default y
|
||||
|
||||
config ARCH_USES_GETTIMEOFFSET
|
||||
bool
|
||||
default y
|
||||
|
||||
config GENERIC_CMOS_UPDATE
|
||||
def_bool y
|
||||
|
||||
@ -65,6 +61,9 @@ config ZONE_DMA
|
||||
config NEED_DMA_MAP_STATE
|
||||
def_bool y
|
||||
|
||||
config NEED_SG_DMA_LENGTH
|
||||
def_bool y
|
||||
|
||||
config GENERIC_ISA_DMA
|
||||
bool
|
||||
default y
|
||||
|
@ -438,22 +438,20 @@ static inline unsigned int __arch_hweight8(unsigned int w)
|
||||
|
||||
/*
|
||||
* Every architecture must define this function. It's the fastest
|
||||
* way of searching a 140-bit bitmap where the first 100 bits are
|
||||
* unlikely to be set. It's guaranteed that at least one of the 140
|
||||
* bits is set.
|
||||
* way of searching a 100-bit bitmap. It's guaranteed that at least
|
||||
* one of the 100 bits is cleared.
|
||||
*/
|
||||
static inline unsigned long
|
||||
sched_find_first_bit(unsigned long b[3])
|
||||
sched_find_first_bit(const unsigned long b[2])
|
||||
{
|
||||
unsigned long b0 = b[0], b1 = b[1], b2 = b[2];
|
||||
unsigned long ofs;
|
||||
unsigned long b0, b1, ofs, tmp;
|
||||
|
||||
ofs = (b1 ? 64 : 128);
|
||||
b1 = (b1 ? b1 : b2);
|
||||
ofs = (b0 ? 0 : ofs);
|
||||
b0 = (b0 ? b0 : b1);
|
||||
b0 = b[0];
|
||||
b1 = b[1];
|
||||
ofs = (b0 ? 0 : 64);
|
||||
tmp = (b0 ? b0 : b1);
|
||||
|
||||
return __ffs(b0) + ofs;
|
||||
return __ffs(tmp) + ofs;
|
||||
}
|
||||
|
||||
#include <asm-generic/bitops/ext2-non-atomic.h>
|
||||
|
@ -1,24 +1,7 @@
|
||||
#ifndef _ALPHA_SCATTERLIST_H
|
||||
#define _ALPHA_SCATTERLIST_H
|
||||
|
||||
#include <asm/page.h>
|
||||
#include <asm/types.h>
|
||||
|
||||
struct scatterlist {
|
||||
#ifdef CONFIG_DEBUG_SG
|
||||
unsigned long sg_magic;
|
||||
#endif
|
||||
unsigned long page_link;
|
||||
unsigned int offset;
|
||||
|
||||
unsigned int length;
|
||||
|
||||
dma_addr_t dma_address;
|
||||
__u32 dma_length;
|
||||
};
|
||||
|
||||
#define sg_dma_address(sg) ((sg)->dma_address)
|
||||
#define sg_dma_len(sg) ((sg)->dma_length)
|
||||
#include <asm-generic/scatterlist.h>
|
||||
|
||||
#define ISA_DMA_THRESHOLD (~0UL)
|
||||
|
||||
|
@ -51,6 +51,7 @@
|
||||
#include <linux/mc146818rtc.h>
|
||||
#include <linux/time.h>
|
||||
#include <linux/timex.h>
|
||||
#include <linux/clocksource.h>
|
||||
|
||||
#include "proto.h"
|
||||
#include "irq_impl.h"
|
||||
@ -332,6 +333,34 @@ rpcc_after_update_in_progress(void)
|
||||
return rpcc();
|
||||
}
|
||||
|
||||
#ifndef CONFIG_SMP
|
||||
/* Until and unless we figure out how to get cpu cycle counters
|
||||
in sync and keep them there, we can't use the rpcc. */
|
||||
static cycle_t read_rpcc(struct clocksource *cs)
|
||||
{
|
||||
cycle_t ret = (cycle_t)rpcc();
|
||||
return ret;
|
||||
}
|
||||
|
||||
static struct clocksource clocksource_rpcc = {
|
||||
.name = "rpcc",
|
||||
.rating = 300,
|
||||
.read = read_rpcc,
|
||||
.mask = CLOCKSOURCE_MASK(32),
|
||||
.flags = CLOCK_SOURCE_IS_CONTINUOUS
|
||||
};
|
||||
|
||||
static inline void register_rpcc_clocksource(long cycle_freq)
|
||||
{
|
||||
clocksource_calc_mult_shift(&clocksource_rpcc, cycle_freq, 4);
|
||||
clocksource_register(&clocksource_rpcc);
|
||||
}
|
||||
#else /* !CONFIG_SMP */
|
||||
static inline void register_rpcc_clocksource(long cycle_freq)
|
||||
{
|
||||
}
|
||||
#endif /* !CONFIG_SMP */
|
||||
|
||||
void __init
|
||||
time_init(void)
|
||||
{
|
||||
@ -385,6 +414,8 @@ time_init(void)
|
||||
__you_loose();
|
||||
}
|
||||
|
||||
register_rpcc_clocksource(cycle_freq);
|
||||
|
||||
state.last_time = cc1;
|
||||
state.scaled_ticks_per_cycle
|
||||
= ((unsigned long) HZ << FIX_SHIFT) / cycle_freq;
|
||||
@ -394,44 +425,6 @@ time_init(void)
|
||||
alpha_mv.init_rtc();
|
||||
}
|
||||
|
||||
/*
|
||||
* Use the cycle counter to estimate an displacement from the last time
|
||||
* tick. Unfortunately the Alpha designers made only the low 32-bits of
|
||||
* the cycle counter active, so we overflow on 8.2 seconds on a 500MHz
|
||||
* part. So we can't do the "find absolute time in terms of cycles" thing
|
||||
* that the other ports do.
|
||||
*/
|
||||
u32 arch_gettimeoffset(void)
|
||||
{
|
||||
#ifdef CONFIG_SMP
|
||||
/* Until and unless we figure out how to get cpu cycle counters
|
||||
in sync and keep them there, we can't use the rpcc tricks. */
|
||||
return 0;
|
||||
#else
|
||||
unsigned long delta_cycles, delta_usec, partial_tick;
|
||||
|
||||
delta_cycles = rpcc() - state.last_time;
|
||||
partial_tick = state.partial_tick;
|
||||
/*
|
||||
* usec = cycles * ticks_per_cycle * 2**48 * 1e6 / (2**48 * ticks)
|
||||
* = cycles * (s_t_p_c) * 1e6 / (2**48 * ticks)
|
||||
* = cycles * (s_t_p_c) * 15625 / (2**42 * ticks)
|
||||
*
|
||||
* which, given a 600MHz cycle and a 1024Hz tick, has a
|
||||
* dynamic range of about 1.7e17, which is less than the
|
||||
* 1.8e19 in an unsigned long, so we are safe from overflow.
|
||||
*
|
||||
* Round, but with .5 up always, since .5 to even is harder
|
||||
* with no clear gain.
|
||||
*/
|
||||
|
||||
delta_usec = (delta_cycles * state.scaled_ticks_per_cycle
|
||||
+ partial_tick) * 15625;
|
||||
delta_usec = ((delta_usec / ((1UL << (FIX_SHIFT-6-1)) * HZ)) + 1) / 2;
|
||||
return delta_usec * 1000;
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
* In order to set the CMOS clock precisely, set_rtc_mmss has to be
|
||||
* called 500 ms after the second nowtime has started, because when
|
||||
|
@ -142,7 +142,6 @@ do_page_fault(unsigned long address, unsigned long mmcsr,
|
||||
goto bad_area;
|
||||
}
|
||||
|
||||
survive:
|
||||
/* If for any reason at all we couldn't handle the fault,
|
||||
make sure we exit gracefully rather than endlessly redo
|
||||
the fault. */
|
||||
@ -188,16 +187,10 @@ do_page_fault(unsigned long address, unsigned long mmcsr,
|
||||
/* We ran out of memory, or some other thing happened to us that
|
||||
made us unable to handle the page fault gracefully. */
|
||||
out_of_memory:
|
||||
if (is_global_init(current)) {
|
||||
yield();
|
||||
down_read(&mm->mmap_sem);
|
||||
goto survive;
|
||||
}
|
||||
printk(KERN_ALERT "VM: killing process %s(%d)\n",
|
||||
current->comm, task_pid_nr(current));
|
||||
if (!user_mode(regs))
|
||||
goto no_context;
|
||||
do_group_exit(SIGKILL);
|
||||
pagefault_out_of_memory();
|
||||
return;
|
||||
|
||||
do_sigbus:
|
||||
/* Send a sigbus, regardless of whether we were in kernel
|
||||
|
@ -671,6 +671,7 @@ config ARCH_S5P6440
|
||||
select CPU_V6
|
||||
select GENERIC_GPIO
|
||||
select HAVE_CLK
|
||||
select ARCH_USES_GETTIMEOFFSET
|
||||
help
|
||||
Samsung S5P6440 CPU based systems
|
||||
|
||||
@ -679,17 +680,19 @@ config ARCH_S5P6442
|
||||
select CPU_V6
|
||||
select GENERIC_GPIO
|
||||
select HAVE_CLK
|
||||
select ARCH_USES_GETTIMEOFFSET
|
||||
help
|
||||
Samsung S5P6442 CPU based systems
|
||||
|
||||
config ARCH_S5PC1XX
|
||||
bool "Samsung S5PC1XX"
|
||||
config ARCH_S5PC100
|
||||
bool "Samsung S5PC100"
|
||||
select GENERIC_GPIO
|
||||
select HAVE_CLK
|
||||
select CPU_V7
|
||||
select ARM_L1_CACHE_SHIFT_6
|
||||
select ARCH_USES_GETTIMEOFFSET
|
||||
help
|
||||
Samsung S5PC1XX series based systems
|
||||
Samsung S5PC100 series based systems
|
||||
|
||||
config ARCH_S5PV210
|
||||
bool "Samsung S5PV210/S5PC110"
|
||||
@ -697,6 +700,7 @@ config ARCH_S5PV210
|
||||
select GENERIC_GPIO
|
||||
select HAVE_CLK
|
||||
select ARM_L1_CACHE_SHIFT_6
|
||||
select ARCH_USES_GETTIMEOFFSET
|
||||
help
|
||||
Samsung S5PV210/S5PC110 series based systems
|
||||
|
||||
@ -876,7 +880,7 @@ source "arch/arm/mach-sa1100/Kconfig"
|
||||
source "arch/arm/plat-samsung/Kconfig"
|
||||
source "arch/arm/plat-s3c24xx/Kconfig"
|
||||
source "arch/arm/plat-s5p/Kconfig"
|
||||
source "arch/arm/plat-s5pc1xx/Kconfig"
|
||||
|
||||
source "arch/arm/plat-spear/Kconfig"
|
||||
|
||||
if ARCH_S3C2410
|
||||
@ -896,9 +900,7 @@ source "arch/arm/mach-s5p6440/Kconfig"
|
||||
|
||||
source "arch/arm/mach-s5p6442/Kconfig"
|
||||
|
||||
if ARCH_S5PC1XX
|
||||
source "arch/arm/mach-s5pc100/Kconfig"
|
||||
endif
|
||||
|
||||
source "arch/arm/mach-s5pv210/Kconfig"
|
||||
|
||||
@ -1419,6 +1421,17 @@ config CMDLINE
|
||||
time by entering them here. As a minimum, you should specify the
|
||||
memory size and the root device (e.g., mem=64M root=/dev/nfs).
|
||||
|
||||
config CMDLINE_FORCE
|
||||
bool "Always use the default kernel command string"
|
||||
depends on CMDLINE != ""
|
||||
help
|
||||
Always use the default kernel command string, even if the boot
|
||||
loader passes other arguments to the kernel.
|
||||
This is useful if you cannot or don't want to change the
|
||||
command-line options your boot loader passes to the kernel.
|
||||
|
||||
If unsure, say N.
|
||||
|
||||
config XIP_KERNEL
|
||||
bool "Kernel Execute-In-Place from ROM"
|
||||
depends on !ZBOOT_ROM
|
||||
|
@ -168,7 +168,7 @@ machine-$(CONFIG_ARCH_S3C24A0) := s3c24a0
|
||||
machine-$(CONFIG_ARCH_S3C64XX) := s3c64xx
|
||||
machine-$(CONFIG_ARCH_S5P6440) := s5p6440
|
||||
machine-$(CONFIG_ARCH_S5P6442) := s5p6442
|
||||
machine-$(CONFIG_ARCH_S5PC1XX) := s5pc100
|
||||
machine-$(CONFIG_ARCH_S5PC100) := s5pc100
|
||||
machine-$(CONFIG_ARCH_S5PV210) := s5pv210
|
||||
machine-$(CONFIG_ARCH_SA1100) := sa1100
|
||||
machine-$(CONFIG_ARCH_SHARK) := shark
|
||||
@ -198,7 +198,6 @@ plat-$(CONFIG_PLAT_NOMADIK) := nomadik
|
||||
plat-$(CONFIG_PLAT_ORION) := orion
|
||||
plat-$(CONFIG_PLAT_PXA) := pxa
|
||||
plat-$(CONFIG_PLAT_S3C24XX) := s3c24xx samsung
|
||||
plat-$(CONFIG_PLAT_S5PC1XX) := s5pc1xx samsung
|
||||
plat-$(CONFIG_PLAT_S5P) := s5p samsung
|
||||
plat-$(CONFIG_PLAT_SPEAR) := spear
|
||||
plat-$(CONFIG_PLAT_VERSATILE) := versatile
|
||||
|
@ -19,7 +19,7 @@ SECTIONS
|
||||
initrd_size = initrd_end - initrd_start;
|
||||
_etext = .;
|
||||
}
|
||||
|
||||
|
||||
.stab 0 : { *(.stab) }
|
||||
.stabstr 0 : { *(.stabstr) }
|
||||
.stab.excl 0 : { *(.stab.excl) }
|
||||
|
@ -809,7 +809,22 @@ CONFIG_SSB_POSSIBLE=y
|
||||
CONFIG_DUMMY_CONSOLE=y
|
||||
# CONFIG_SOUND is not set
|
||||
# CONFIG_HID_SUPPORT is not set
|
||||
# CONFIG_USB_SUPPORT is not set
|
||||
CONFIG_USB_SUPPORT=y
|
||||
CONFIG_USB_ARCH_HAS_HCD=y
|
||||
# CONFIG_USB_ARCH_HAS_OHCI is not set
|
||||
CONFIG_USB_ARCH_HAS_EHCI=y
|
||||
CONFIG_USB=y
|
||||
|
||||
#
|
||||
# USB Host Controller Drivers
|
||||
#
|
||||
# CONFIG_USB_C67X00_HCD is not set
|
||||
CONFIG_USB_EHCI_HCD=y
|
||||
CONFIG_USB_EHCI_ROOT_HUB_TT=y
|
||||
# CONFIG_USB_EHCI_TT_NEWSCHED is not set
|
||||
CONFIG_USB_EHCI_MXC=y
|
||||
|
||||
|
||||
CONFIG_MMC=y
|
||||
# CONFIG_MMC_DEBUG is not set
|
||||
# CONFIG_MMC_UNSAFE_RESUME is not set
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,11 +1,15 @@
|
||||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.33-rc4
|
||||
# Tue Jan 19 13:12:40 2010
|
||||
# Linux kernel version: 2.6.34
|
||||
# Fri May 28 19:05:39 2010
|
||||
#
|
||||
CONFIG_ARM=y
|
||||
CONFIG_HAVE_PWM=y
|
||||
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
|
||||
CONFIG_GENERIC_GPIO=y
|
||||
CONFIG_GENERIC_TIME=y
|
||||
CONFIG_ARCH_USES_GETTIMEOFFSET=y
|
||||
CONFIG_HAVE_PROC_CPU=y
|
||||
CONFIG_NO_IOPORT=y
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_STACKTRACE_SUPPORT=y
|
||||
@ -18,6 +22,7 @@ CONFIG_RWSEM_GENERIC_SPINLOCK=y
|
||||
CONFIG_ARCH_HAS_CPUFREQ=y
|
||||
CONFIG_GENERIC_HWEIGHT=y
|
||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||
CONFIG_NEED_DMA_MAP_STATE=y
|
||||
CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
|
||||
CONFIG_VECTORS_BASE=0xffff0000
|
||||
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
|
||||
@ -32,6 +37,7 @@ CONFIG_INIT_ENV_ARG_LIMIT=32
|
||||
CONFIG_LOCALVERSION=""
|
||||
CONFIG_LOCALVERSION_AUTO=y
|
||||
CONFIG_HAVE_KERNEL_GZIP=y
|
||||
CONFIG_HAVE_KERNEL_LZMA=y
|
||||
CONFIG_HAVE_KERNEL_LZO=y
|
||||
CONFIG_KERNEL_GZIP=y
|
||||
# CONFIG_KERNEL_BZIP2 is not set
|
||||
@ -53,7 +59,6 @@ CONFIG_RCU_FANOUT=32
|
||||
# CONFIG_TREE_RCU_TRACE is not set
|
||||
# CONFIG_IKCONFIG is not set
|
||||
CONFIG_LOG_BUF_SHIFT=17
|
||||
# CONFIG_GROUP_SCHED is not set
|
||||
# CONFIG_CGROUPS is not set
|
||||
CONFIG_SYSFS_DEPRECATED=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
@ -89,10 +94,14 @@ CONFIG_TIMERFD=y
|
||||
CONFIG_EVENTFD=y
|
||||
CONFIG_SHMEM=y
|
||||
CONFIG_AIO=y
|
||||
CONFIG_HAVE_PERF_EVENTS=y
|
||||
CONFIG_PERF_USE_VMALLOC=y
|
||||
|
||||
#
|
||||
# Kernel Performance Events And Counters
|
||||
#
|
||||
# CONFIG_PERF_EVENTS is not set
|
||||
# CONFIG_PERF_COUNTERS is not set
|
||||
CONFIG_VM_EVENT_COUNTERS=y
|
||||
CONFIG_SLUB_DEBUG=y
|
||||
CONFIG_COMPAT_BRK=y
|
||||
@ -164,7 +173,7 @@ CONFIG_DEFAULT_IOSCHED="cfq"
|
||||
# CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set
|
||||
# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
|
||||
# CONFIG_MUTEX_SPIN_ON_OWNER is not set
|
||||
# CONFIG_FREEZER is not set
|
||||
CONFIG_FREEZER=y
|
||||
|
||||
#
|
||||
# System Type
|
||||
@ -174,8 +183,11 @@ CONFIG_MMU=y
|
||||
# CONFIG_ARCH_INTEGRATOR is not set
|
||||
# CONFIG_ARCH_REALVIEW is not set
|
||||
# CONFIG_ARCH_VERSATILE is not set
|
||||
# CONFIG_ARCH_VEXPRESS is not set
|
||||
# CONFIG_ARCH_AT91 is not set
|
||||
# CONFIG_ARCH_BCMRING is not set
|
||||
# CONFIG_ARCH_CLPS711X is not set
|
||||
# CONFIG_ARCH_CNS3XXX is not set
|
||||
# CONFIG_ARCH_GEMINI is not set
|
||||
# CONFIG_ARCH_EBSA110 is not set
|
||||
# CONFIG_ARCH_EP93XX is not set
|
||||
@ -184,7 +196,6 @@ CONFIG_MMU=y
|
||||
# CONFIG_ARCH_STMP3XXX is not set
|
||||
# CONFIG_ARCH_NETX is not set
|
||||
# CONFIG_ARCH_H720X is not set
|
||||
# CONFIG_ARCH_NOMADIK is not set
|
||||
# CONFIG_ARCH_IOP13XX is not set
|
||||
# CONFIG_ARCH_IOP32X is not set
|
||||
# CONFIG_ARCH_IOP33X is not set
|
||||
@ -201,70 +212,89 @@ CONFIG_MMU=y
|
||||
# CONFIG_ARCH_KS8695 is not set
|
||||
# CONFIG_ARCH_NS9XXX is not set
|
||||
# CONFIG_ARCH_W90X900 is not set
|
||||
# CONFIG_ARCH_NUC93X is not set
|
||||
# CONFIG_ARCH_PNX4008 is not set
|
||||
# CONFIG_ARCH_PXA is not set
|
||||
# CONFIG_ARCH_MSM is not set
|
||||
# CONFIG_ARCH_SHMOBILE is not set
|
||||
# CONFIG_ARCH_RPC is not set
|
||||
# CONFIG_ARCH_SA1100 is not set
|
||||
# CONFIG_ARCH_S3C2410 is not set
|
||||
CONFIG_ARCH_S3C64XX=y
|
||||
# CONFIG_ARCH_S5P6440 is not set
|
||||
# CONFIG_ARCH_S5PC1XX is not set
|
||||
# CONFIG_ARCH_S5P6442 is not set
|
||||
# CONFIG_ARCH_S5PC100 is not set
|
||||
# CONFIG_ARCH_S5PV210 is not set
|
||||
# CONFIG_ARCH_SHARK is not set
|
||||
# CONFIG_ARCH_LH7A40X is not set
|
||||
# CONFIG_ARCH_U300 is not set
|
||||
# CONFIG_ARCH_U8500 is not set
|
||||
# CONFIG_ARCH_NOMADIK is not set
|
||||
# CONFIG_ARCH_DAVINCI is not set
|
||||
# CONFIG_ARCH_OMAP is not set
|
||||
# CONFIG_ARCH_BCMRING is not set
|
||||
# CONFIG_ARCH_U8500 is not set
|
||||
# CONFIG_PLAT_SPEAR is not set
|
||||
CONFIG_PLAT_SAMSUNG=y
|
||||
CONFIG_SAMSUNG_CLKSRC=y
|
||||
CONFIG_SAMSUNG_IRQ_VIC_TIMER=y
|
||||
CONFIG_SAMSUNG_IRQ_UART=y
|
||||
CONFIG_S3C_GPIO_CFG_S3C24XX=y
|
||||
CONFIG_S3C_GPIO_CFG_S3C64XX=y
|
||||
CONFIG_S3C_GPIO_PULL_UPDOWN=y
|
||||
CONFIG_SAMSUNG_GPIO_EXTRA=0
|
||||
# CONFIG_S3C_ADC is not set
|
||||
CONFIG_S3C_DEV_HSMMC=y
|
||||
CONFIG_S3C_DEV_HSMMC1=y
|
||||
CONFIG_S3C_DEV_I2C1=y
|
||||
CONFIG_S3C_DEV_FB=y
|
||||
CONFIG_S3C_DEV_USB_HOST=y
|
||||
CONFIG_S3C_DEV_USB_HSOTG=y
|
||||
CONFIG_S3C_DEV_NAND=y
|
||||
CONFIG_PLAT_S3C64XX=y
|
||||
CONFIG_CPU_S3C6400_INIT=y
|
||||
CONFIG_CPU_S3C6400_CLOCK=y
|
||||
# CONFIG_S3C64XX_DMA is not set
|
||||
CONFIG_S3C64XX_SETUP_I2C0=y
|
||||
CONFIG_S3C64XX_SETUP_I2C1=y
|
||||
CONFIG_S3C64XX_SETUP_FB_24BPP=y
|
||||
CONFIG_S3C64XX_SETUP_SDHCI_GPIO=y
|
||||
CONFIG_PLAT_S3C=y
|
||||
|
||||
#
|
||||
# Boot options
|
||||
#
|
||||
CONFIG_S3C_BOOT_ERROR_RESET=y
|
||||
CONFIG_S3C_BOOT_UART_FORCE_FIFO=y
|
||||
CONFIG_S3C_LOWLEVEL_UART_PORT=0
|
||||
CONFIG_SAMSUNG_CLKSRC=y
|
||||
CONFIG_SAMSUNG_IRQ_VIC_TIMER=y
|
||||
CONFIG_SAMSUNG_IRQ_UART=y
|
||||
CONFIG_SAMSUNG_GPIOLIB_4BIT=y
|
||||
CONFIG_S3C_GPIO_CFG_S3C24XX=y
|
||||
CONFIG_S3C_GPIO_CFG_S3C64XX=y
|
||||
CONFIG_S3C_GPIO_PULL_UPDOWN=y
|
||||
CONFIG_SAMSUNG_GPIO_EXTRA=0
|
||||
CONFIG_S3C_GPIO_SPACE=0
|
||||
CONFIG_S3C_GPIO_TRACK=y
|
||||
# CONFIG_S3C_ADC is not set
|
||||
CONFIG_S3C_DEV_HSMMC=y
|
||||
CONFIG_S3C_DEV_HSMMC1=y
|
||||
CONFIG_S3C_DEV_HSMMC2=y
|
||||
CONFIG_S3C_DEV_HWMON=y
|
||||
CONFIG_S3C_DEV_I2C1=y
|
||||
CONFIG_S3C_DEV_FB=y
|
||||
CONFIG_S3C_DEV_USB_HOST=y
|
||||
CONFIG_S3C_DEV_USB_HSOTG=y
|
||||
CONFIG_S3C_DEV_WDT=y
|
||||
CONFIG_S3C_DEV_NAND=y
|
||||
CONFIG_S3C_DEV_RTC=y
|
||||
CONFIG_SAMSUNG_DEV_ADC=y
|
||||
CONFIG_SAMSUNG_DEV_TS=y
|
||||
CONFIG_S3C_DMA=y
|
||||
|
||||
#
|
||||
# Power management
|
||||
#
|
||||
CONFIG_S3C_LOWLEVEL_UART_PORT=0
|
||||
CONFIG_S3C_GPIO_SPACE=0
|
||||
CONFIG_S3C_GPIO_TRACK=y
|
||||
# CONFIG_MACH_SMDK6400 is not set
|
||||
# CONFIG_SAMSUNG_PM_DEBUG is not set
|
||||
# CONFIG_S3C_PM_DEBUG_LED_SMDK is not set
|
||||
# CONFIG_SAMSUNG_PM_CHECK is not set
|
||||
CONFIG_SAMSUNG_WAKEMASK=y
|
||||
CONFIG_PLAT_S3C64XX=y
|
||||
CONFIG_CPU_S3C6400=y
|
||||
CONFIG_CPU_S3C6410=y
|
||||
CONFIG_S3C6410_SETUP_SDHCI=y
|
||||
# CONFIG_MACH_ANW6410 is not set
|
||||
CONFIG_S3C64XX_DMA=y
|
||||
CONFIG_S3C64XX_SETUP_SDHCI=y
|
||||
CONFIG_S3C64XX_SETUP_I2C0=y
|
||||
CONFIG_S3C64XX_SETUP_I2C1=y
|
||||
CONFIG_S3C64XX_SETUP_FB_24BPP=y
|
||||
CONFIG_S3C64XX_SETUP_SDHCI_GPIO=y
|
||||
CONFIG_MACH_SMDK6400=y
|
||||
CONFIG_MACH_ANW6410=y
|
||||
CONFIG_MACH_SMDK6410=y
|
||||
CONFIG_SMDK6410_SD_CH0=y
|
||||
# CONFIG_SMDK6410_SD_CH1 is not set
|
||||
# CONFIG_SMDK6410_WM1190_EV1 is not set
|
||||
# CONFIG_MACH_NCP is not set
|
||||
# CONFIG_MACH_HMT is not set
|
||||
# CONFIG_SMDK6410_WM1192_EV1 is not set
|
||||
CONFIG_MACH_NCP=y
|
||||
CONFIG_MACH_HMT=y
|
||||
CONFIG_MACH_SMARTQ=y
|
||||
CONFIG_MACH_SMARTQ5=y
|
||||
CONFIG_MACH_SMARTQ7=y
|
||||
|
||||
#
|
||||
# Processor Type
|
||||
@ -290,6 +320,8 @@ CONFIG_ARM_THUMB=y
|
||||
# CONFIG_CPU_DCACHE_DISABLE is not set
|
||||
# CONFIG_CPU_BPREDICT_DISABLE is not set
|
||||
CONFIG_ARM_L1_CACHE_SHIFT=5
|
||||
CONFIG_ARM_DMA_MEM_BUFFERABLE=y
|
||||
CONFIG_CPU_HAS_PMU=y
|
||||
# CONFIG_ARM_ERRATA_411920 is not set
|
||||
CONFIG_ARM_VIC=y
|
||||
CONFIG_ARM_VIC_NR=2
|
||||
@ -339,6 +371,7 @@ CONFIG_ALIGNMENT_TRAP=y
|
||||
CONFIG_ZBOOT_ROM_TEXT=0
|
||||
CONFIG_ZBOOT_ROM_BSS=0
|
||||
CONFIG_CMDLINE="console=ttySAC0,115200 root=/dev/ram init=/linuxrc initrd=0x51000000,6M ramdisk_size=6144"
|
||||
# CONFIG_CMDLINE_FORCE is not set
|
||||
# CONFIG_XIP_KERNEL is not set
|
||||
# CONFIG_KEXEC is not set
|
||||
|
||||
@ -371,7 +404,14 @@ CONFIG_HAVE_AOUT=y
|
||||
#
|
||||
# Power management options
|
||||
#
|
||||
# CONFIG_PM is not set
|
||||
CONFIG_PM=y
|
||||
# CONFIG_PM_DEBUG is not set
|
||||
CONFIG_PM_SLEEP=y
|
||||
CONFIG_SUSPEND=y
|
||||
CONFIG_SUSPEND_FREEZER=y
|
||||
# CONFIG_APM_EMULATION is not set
|
||||
# CONFIG_PM_RUNTIME is not set
|
||||
CONFIG_PM_OPS=y
|
||||
CONFIG_ARCH_SUSPEND_POSSIBLE=y
|
||||
# CONFIG_NET is not set
|
||||
|
||||
@ -392,7 +432,96 @@ CONFIG_EXTRA_FIRMWARE=""
|
||||
# CONFIG_DEBUG_DRIVER is not set
|
||||
# CONFIG_DEBUG_DEVRES is not set
|
||||
# CONFIG_SYS_HYPERVISOR is not set
|
||||
# CONFIG_MTD is not set
|
||||
CONFIG_MTD=y
|
||||
# CONFIG_MTD_DEBUG is not set
|
||||
# CONFIG_MTD_TESTS is not set
|
||||
# CONFIG_MTD_CONCAT is not set
|
||||
# CONFIG_MTD_PARTITIONS is not set
|
||||
|
||||
#
|
||||
# User Modules And Translation Layers
|
||||
#
|
||||
# CONFIG_MTD_CHAR is not set
|
||||
# CONFIG_MTD_BLKDEVS is not set
|
||||
# CONFIG_MTD_BLOCK is not set
|
||||
# CONFIG_MTD_BLOCK_RO is not set
|
||||
# CONFIG_FTL is not set
|
||||
# CONFIG_NFTL is not set
|
||||
# CONFIG_INFTL is not set
|
||||
# CONFIG_RFD_FTL is not set
|
||||
# CONFIG_SSFDC is not set
|
||||
# CONFIG_SM_FTL is not set
|
||||
# CONFIG_MTD_OOPS is not set
|
||||
|
||||
#
|
||||
# RAM/ROM/Flash chip drivers
|
||||
#
|
||||
# CONFIG_MTD_CFI is not set
|
||||
# CONFIG_MTD_JEDECPROBE is not set
|
||||
CONFIG_MTD_MAP_BANK_WIDTH_1=y
|
||||
CONFIG_MTD_MAP_BANK_WIDTH_2=y
|
||||
CONFIG_MTD_MAP_BANK_WIDTH_4=y
|
||||
# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
|
||||
# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
|
||||
# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
|
||||
CONFIG_MTD_CFI_I1=y
|
||||
CONFIG_MTD_CFI_I2=y
|
||||
# CONFIG_MTD_CFI_I4 is not set
|
||||
# CONFIG_MTD_CFI_I8 is not set
|
||||
# CONFIG_MTD_RAM is not set
|
||||
# CONFIG_MTD_ROM is not set
|
||||
# CONFIG_MTD_ABSENT is not set
|
||||
|
||||
#
|
||||
# Mapping drivers for chip access
|
||||
#
|
||||
# CONFIG_MTD_COMPLEX_MAPPINGS is not set
|
||||
# CONFIG_MTD_PLATRAM is not set
|
||||
|
||||
#
|
||||
# Self-contained MTD device drivers
|
||||
#
|
||||
# CONFIG_MTD_DATAFLASH is not set
|
||||
# CONFIG_MTD_M25P80 is not set
|
||||
# CONFIG_MTD_SST25L is not set
|
||||
# CONFIG_MTD_SLRAM is not set
|
||||
# CONFIG_MTD_PHRAM is not set
|
||||
# CONFIG_MTD_MTDRAM is not set
|
||||
# CONFIG_MTD_BLOCK2MTD is not set
|
||||
|
||||
#
|
||||
# Disk-On-Chip Device Drivers
|
||||
#
|
||||
# CONFIG_MTD_DOC2000 is not set
|
||||
# CONFIG_MTD_DOC2001 is not set
|
||||
# CONFIG_MTD_DOC2001PLUS is not set
|
||||
CONFIG_MTD_NAND=y
|
||||
CONFIG_MTD_NAND_ECC=y
|
||||
# CONFIG_MTD_NAND_ECC_SMC is not set
|
||||
# CONFIG_MTD_NAND_VERIFY_WRITE is not set
|
||||
# CONFIG_MTD_SM_COMMON is not set
|
||||
# CONFIG_MTD_NAND_MUSEUM_IDS is not set
|
||||
CONFIG_MTD_NAND_DENALI_SCRATCH_REG_ADDR=0xFF108018
|
||||
# CONFIG_MTD_NAND_GPIO is not set
|
||||
CONFIG_MTD_NAND_IDS=y
|
||||
CONFIG_MTD_NAND_S3C2410=y
|
||||
# CONFIG_MTD_NAND_S3C2410_DEBUG is not set
|
||||
# CONFIG_MTD_NAND_S3C2410_HWECC is not set
|
||||
# CONFIG_MTD_NAND_S3C2410_CLKSTOP is not set
|
||||
# CONFIG_MTD_NAND_DISKONCHIP is not set
|
||||
# CONFIG_MTD_NAND_PLATFORM is not set
|
||||
# CONFIG_MTD_ALAUDA is not set
|
||||
# CONFIG_MTD_ONENAND is not set
|
||||
|
||||
#
|
||||
# LPDDR flash memory drivers
|
||||
#
|
||||
# CONFIG_MTD_LPDDR is not set
|
||||
|
||||
#
|
||||
# UBI - Unsorted block images
|
||||
#
|
||||
# CONFIG_MTD_UBI is not set
|
||||
# CONFIG_PARPORT is not set
|
||||
CONFIG_BLK_DEV=y
|
||||
# CONFIG_BLK_DEV_COW_COMMON is not set
|
||||
@ -402,6 +531,7 @@ CONFIG_BLK_DEV_LOOP=y
|
||||
#
|
||||
# DRBD disabled because PROC_FS, INET or CONNECTOR not selected
|
||||
#
|
||||
# CONFIG_BLK_DEV_UB is not set
|
||||
CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_BLK_DEV_RAM_COUNT=16
|
||||
CONFIG_BLK_DEV_RAM_SIZE=4096
|
||||
@ -413,13 +543,16 @@ CONFIG_MISC_DEVICES=y
|
||||
# CONFIG_ICS932S401 is not set
|
||||
# CONFIG_ENCLOSURE_SERVICES is not set
|
||||
# CONFIG_ISL29003 is not set
|
||||
# CONFIG_SENSORS_TSL2550 is not set
|
||||
# CONFIG_DS1682 is not set
|
||||
# CONFIG_TI_DAC7512 is not set
|
||||
# CONFIG_C2PORT is not set
|
||||
|
||||
#
|
||||
# EEPROM support
|
||||
#
|
||||
CONFIG_EEPROM_AT24=y
|
||||
# CONFIG_EEPROM_AT25 is not set
|
||||
# CONFIG_EEPROM_LEGACY is not set
|
||||
# CONFIG_EEPROM_MAX6875 is not set
|
||||
# CONFIG_EEPROM_93CX6 is not set
|
||||
@ -430,6 +563,7 @@ CONFIG_HAVE_IDE=y
|
||||
#
|
||||
# SCSI device support
|
||||
#
|
||||
CONFIG_SCSI_MOD=y
|
||||
# CONFIG_RAID_ATTRS is not set
|
||||
# CONFIG_SCSI is not set
|
||||
# CONFIG_SCSI_DMA is not set
|
||||
@ -466,6 +600,7 @@ CONFIG_KEYBOARD_ATKBD=y
|
||||
# CONFIG_QT2160 is not set
|
||||
# CONFIG_KEYBOARD_LKKBD is not set
|
||||
# CONFIG_KEYBOARD_GPIO is not set
|
||||
# CONFIG_KEYBOARD_TCA6416 is not set
|
||||
# CONFIG_KEYBOARD_MATRIX is not set
|
||||
# CONFIG_KEYBOARD_MAX7359 is not set
|
||||
# CONFIG_KEYBOARD_NEWTON is not set
|
||||
@ -527,12 +662,17 @@ CONFIG_SERIAL_8250_RUNTIME_UARTS=4
|
||||
# Non-8250 serial port support
|
||||
#
|
||||
CONFIG_SERIAL_SAMSUNG=y
|
||||
CONFIG_SERIAL_SAMSUNG_UARTS_4=y
|
||||
CONFIG_SERIAL_SAMSUNG_UARTS=4
|
||||
# CONFIG_SERIAL_SAMSUNG_DEBUG is not set
|
||||
CONFIG_SERIAL_SAMSUNG_CONSOLE=y
|
||||
CONFIG_SERIAL_S3C6400=y
|
||||
# CONFIG_SERIAL_MAX3100 is not set
|
||||
CONFIG_SERIAL_CORE=y
|
||||
CONFIG_SERIAL_CORE_CONSOLE=y
|
||||
# CONFIG_SERIAL_TIMBERDALE is not set
|
||||
# CONFIG_SERIAL_ALTERA_JTAGUART is not set
|
||||
# CONFIG_SERIAL_ALTERA_UART is not set
|
||||
CONFIG_UNIX98_PTYS=y
|
||||
# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
|
||||
CONFIG_LEGACY_PTYS=y
|
||||
@ -561,28 +701,41 @@ CONFIG_I2C_HELPER_AUTO=y
|
||||
# CONFIG_I2C_OCORES is not set
|
||||
CONFIG_I2C_S3C2410=y
|
||||
# CONFIG_I2C_SIMTEC is not set
|
||||
# CONFIG_I2C_XILINX is not set
|
||||
|
||||
#
|
||||
# External I2C/SMBus adapter drivers
|
||||
#
|
||||
# CONFIG_I2C_PARPORT_LIGHT is not set
|
||||
# CONFIG_I2C_TAOS_EVM is not set
|
||||
# CONFIG_I2C_TINY_USB is not set
|
||||
|
||||
#
|
||||
# Other I2C/SMBus bus drivers
|
||||
#
|
||||
# CONFIG_I2C_PCA_PLATFORM is not set
|
||||
# CONFIG_I2C_STUB is not set
|
||||
|
||||
#
|
||||
# Miscellaneous I2C Chip support
|
||||
#
|
||||
# CONFIG_SENSORS_TSL2550 is not set
|
||||
# CONFIG_I2C_DEBUG_CORE is not set
|
||||
# CONFIG_I2C_DEBUG_ALGO is not set
|
||||
# CONFIG_I2C_DEBUG_BUS is not set
|
||||
# CONFIG_I2C_DEBUG_CHIP is not set
|
||||
# CONFIG_SPI is not set
|
||||
CONFIG_SPI=y
|
||||
# CONFIG_SPI_DEBUG is not set
|
||||
CONFIG_SPI_MASTER=y
|
||||
|
||||
#
|
||||
# SPI Master Controller Drivers
|
||||
#
|
||||
CONFIG_SPI_BITBANG=m
|
||||
CONFIG_SPI_GPIO=m
|
||||
CONFIG_SPI_S3C64XX=m
|
||||
# CONFIG_SPI_XILINX is not set
|
||||
# CONFIG_SPI_DESIGNWARE is not set
|
||||
|
||||
#
|
||||
# SPI Protocol Masters
|
||||
#
|
||||
# CONFIG_SPI_SPIDEV is not set
|
||||
# CONFIG_SPI_TLE62X0 is not set
|
||||
|
||||
#
|
||||
# PPS support
|
||||
@ -596,10 +749,12 @@ CONFIG_GPIOLIB=y
|
||||
#
|
||||
# Memory mapped GPIO expanders:
|
||||
#
|
||||
# CONFIG_GPIO_IT8761E is not set
|
||||
|
||||
#
|
||||
# I2C GPIO expanders:
|
||||
#
|
||||
# CONFIG_GPIO_MAX7300 is not set
|
||||
# CONFIG_GPIO_MAX732X is not set
|
||||
# CONFIG_GPIO_PCA953X is not set
|
||||
# CONFIG_GPIO_PCF857X is not set
|
||||
@ -612,6 +767,9 @@ CONFIG_GPIOLIB=y
|
||||
#
|
||||
# SPI GPIO expanders:
|
||||
#
|
||||
# CONFIG_GPIO_MAX7301 is not set
|
||||
# CONFIG_GPIO_MCP23S08 is not set
|
||||
# CONFIG_GPIO_MC33880 is not set
|
||||
|
||||
#
|
||||
# AC97 GPIO expanders:
|
||||
@ -627,16 +785,18 @@ CONFIG_HWMON=y
|
||||
#
|
||||
# CONFIG_SENSORS_AD7414 is not set
|
||||
# CONFIG_SENSORS_AD7418 is not set
|
||||
# CONFIG_SENSORS_ADCXX is not set
|
||||
# CONFIG_SENSORS_ADM1021 is not set
|
||||
# CONFIG_SENSORS_ADM1025 is not set
|
||||
# CONFIG_SENSORS_ADM1026 is not set
|
||||
# CONFIG_SENSORS_ADM1029 is not set
|
||||
# CONFIG_SENSORS_ADM1031 is not set
|
||||
# CONFIG_SENSORS_ADM9240 is not set
|
||||
# CONFIG_SENSORS_ADT7411 is not set
|
||||
# CONFIG_SENSORS_ADT7462 is not set
|
||||
# CONFIG_SENSORS_ADT7470 is not set
|
||||
# CONFIG_SENSORS_ADT7473 is not set
|
||||
# CONFIG_SENSORS_ADT7475 is not set
|
||||
# CONFIG_SENSORS_ASC7621 is not set
|
||||
# CONFIG_SENSORS_ATXP1 is not set
|
||||
# CONFIG_SENSORS_DS1621 is not set
|
||||
# CONFIG_SENSORS_F71805F is not set
|
||||
@ -647,6 +807,7 @@ CONFIG_HWMON=y
|
||||
# CONFIG_SENSORS_GL520SM is not set
|
||||
# CONFIG_SENSORS_IT87 is not set
|
||||
# CONFIG_SENSORS_LM63 is not set
|
||||
# CONFIG_SENSORS_LM70 is not set
|
||||
# CONFIG_SENSORS_LM73 is not set
|
||||
# CONFIG_SENSORS_LM75 is not set
|
||||
# CONFIG_SENSORS_LM77 is not set
|
||||
@ -661,6 +822,7 @@ CONFIG_HWMON=y
|
||||
# CONFIG_SENSORS_LTC4215 is not set
|
||||
# CONFIG_SENSORS_LTC4245 is not set
|
||||
# CONFIG_SENSORS_LM95241 is not set
|
||||
# CONFIG_SENSORS_MAX1111 is not set
|
||||
# CONFIG_SENSORS_MAX1619 is not set
|
||||
# CONFIG_SENSORS_MAX6650 is not set
|
||||
# CONFIG_SENSORS_PC87360 is not set
|
||||
@ -672,6 +834,7 @@ CONFIG_HWMON=y
|
||||
# CONFIG_SENSORS_SMSC47M192 is not set
|
||||
# CONFIG_SENSORS_SMSC47B397 is not set
|
||||
# CONFIG_SENSORS_ADS7828 is not set
|
||||
# CONFIG_SENSORS_ADS7871 is not set
|
||||
# CONFIG_SENSORS_AMC6821 is not set
|
||||
# CONFIG_SENSORS_THMC50 is not set
|
||||
# CONFIG_SENSORS_TMP401 is not set
|
||||
@ -685,9 +848,11 @@ CONFIG_HWMON=y
|
||||
# CONFIG_SENSORS_W83L786NG is not set
|
||||
# CONFIG_SENSORS_W83627HF is not set
|
||||
# CONFIG_SENSORS_W83627EHF is not set
|
||||
# CONFIG_SENSORS_LIS3_SPI is not set
|
||||
# CONFIG_SENSORS_LIS3_I2C is not set
|
||||
# CONFIG_THERMAL is not set
|
||||
# CONFIG_WATCHDOG is not set
|
||||
CONFIG_HAVE_S3C2410_WATCHDOG=y
|
||||
CONFIG_SSB_POSSIBLE=y
|
||||
|
||||
#
|
||||
@ -699,10 +864,13 @@ CONFIG_SSB_POSSIBLE=y
|
||||
# Multifunction device drivers
|
||||
#
|
||||
# CONFIG_MFD_CORE is not set
|
||||
# CONFIG_MFD_88PM860X is not set
|
||||
# CONFIG_MFD_SM501 is not set
|
||||
# CONFIG_MFD_ASIC3 is not set
|
||||
# CONFIG_HTC_EGPIO is not set
|
||||
# CONFIG_HTC_PASIC3 is not set
|
||||
# CONFIG_HTC_I2CPLD is not set
|
||||
# CONFIG_UCB1400_CORE is not set
|
||||
# CONFIG_TPS65010 is not set
|
||||
# CONFIG_TWL4030_CORE is not set
|
||||
# CONFIG_MFD_TMIO is not set
|
||||
@ -711,12 +879,16 @@ CONFIG_SSB_POSSIBLE=y
|
||||
# CONFIG_MFD_TC6393XB is not set
|
||||
# CONFIG_PMIC_DA903X is not set
|
||||
# CONFIG_PMIC_ADP5520 is not set
|
||||
# CONFIG_MFD_MAX8925 is not set
|
||||
# CONFIG_MFD_WM8400 is not set
|
||||
# CONFIG_MFD_WM831X is not set
|
||||
# CONFIG_MFD_WM8350_I2C is not set
|
||||
# CONFIG_MFD_WM8994 is not set
|
||||
# CONFIG_MFD_PCF50633 is not set
|
||||
# CONFIG_MFD_MC13783 is not set
|
||||
# CONFIG_AB3100_CORE is not set
|
||||
# CONFIG_MFD_88PM8607 is not set
|
||||
# CONFIG_EZX_PCAP is not set
|
||||
# CONFIG_AB4500_CORE is not set
|
||||
# CONFIG_REGULATOR is not set
|
||||
# CONFIG_MEDIA_SUPPORT is not set
|
||||
|
||||
@ -725,8 +897,47 @@ CONFIG_SSB_POSSIBLE=y
|
||||
#
|
||||
# CONFIG_VGASTATE is not set
|
||||
# CONFIG_VIDEO_OUTPUT_CONTROL is not set
|
||||
# CONFIG_FB is not set
|
||||
# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
|
||||
CONFIG_FB=y
|
||||
# CONFIG_FIRMWARE_EDID is not set
|
||||
# CONFIG_FB_DDC is not set
|
||||
# CONFIG_FB_BOOT_VESA_SUPPORT is not set
|
||||
CONFIG_FB_CFB_FILLRECT=y
|
||||
CONFIG_FB_CFB_COPYAREA=y
|
||||
CONFIG_FB_CFB_IMAGEBLIT=y
|
||||
# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
|
||||
# CONFIG_FB_SYS_FILLRECT is not set
|
||||
# CONFIG_FB_SYS_COPYAREA is not set
|
||||
# CONFIG_FB_SYS_IMAGEBLIT is not set
|
||||
# CONFIG_FB_FOREIGN_ENDIAN is not set
|
||||
# CONFIG_FB_SYS_FOPS is not set
|
||||
# CONFIG_FB_SVGALIB is not set
|
||||
# CONFIG_FB_MACMODES is not set
|
||||
# CONFIG_FB_BACKLIGHT is not set
|
||||
# CONFIG_FB_MODE_HELPERS is not set
|
||||
# CONFIG_FB_TILEBLITTING is not set
|
||||
|
||||
#
|
||||
# Frame buffer hardware drivers
|
||||
#
|
||||
# CONFIG_FB_S1D13XXX is not set
|
||||
CONFIG_FB_S3C=y
|
||||
# CONFIG_FB_S3C_DEBUG_REGWRITE is not set
|
||||
# CONFIG_FB_VIRTUAL is not set
|
||||
# CONFIG_FB_METRONOME is not set
|
||||
# CONFIG_FB_MB862XX is not set
|
||||
# CONFIG_FB_BROADSHEET is not set
|
||||
CONFIG_BACKLIGHT_LCD_SUPPORT=y
|
||||
CONFIG_LCD_CLASS_DEVICE=y
|
||||
# CONFIG_LCD_L4F00242T03 is not set
|
||||
# CONFIG_LCD_LMS283GF05 is not set
|
||||
CONFIG_LCD_LTV350QV=y
|
||||
# CONFIG_LCD_ILI9320 is not set
|
||||
# CONFIG_LCD_TDO24M is not set
|
||||
# CONFIG_LCD_VGG2432A4 is not set
|
||||
# CONFIG_LCD_PLATFORM is not set
|
||||
CONFIG_BACKLIGHT_CLASS_DEVICE=y
|
||||
CONFIG_BACKLIGHT_GENERIC=y
|
||||
CONFIG_BACKLIGHT_PWM=y
|
||||
|
||||
#
|
||||
# Display device support
|
||||
@ -738,33 +949,246 @@ CONFIG_SSB_POSSIBLE=y
|
||||
#
|
||||
# CONFIG_VGA_CONSOLE is not set
|
||||
CONFIG_DUMMY_CONSOLE=y
|
||||
# CONFIG_SOUND is not set
|
||||
# CONFIG_FRAMEBUFFER_CONSOLE is not set
|
||||
# CONFIG_LOGO is not set
|
||||
CONFIG_SOUND=y
|
||||
CONFIG_SOUND_OSS_CORE=y
|
||||
CONFIG_SOUND_OSS_CORE_PRECLAIM=y
|
||||
CONFIG_SND=m
|
||||
CONFIG_SND_TIMER=m
|
||||
CONFIG_SND_PCM=m
|
||||
CONFIG_SND_JACK=y
|
||||
# CONFIG_SND_SEQUENCER is not set
|
||||
CONFIG_SND_OSSEMUL=y
|
||||
CONFIG_SND_MIXER_OSS=m
|
||||
CONFIG_SND_PCM_OSS=m
|
||||
CONFIG_SND_PCM_OSS_PLUGINS=y
|
||||
# CONFIG_SND_DYNAMIC_MINORS is not set
|
||||
CONFIG_SND_SUPPORT_OLD_API=y
|
||||
CONFIG_SND_VERBOSE_PROCFS=y
|
||||
# CONFIG_SND_VERBOSE_PRINTK is not set
|
||||
# CONFIG_SND_DEBUG is not set
|
||||
# CONFIG_SND_RAWMIDI_SEQ is not set
|
||||
# CONFIG_SND_OPL3_LIB_SEQ is not set
|
||||
# CONFIG_SND_OPL4_LIB_SEQ is not set
|
||||
# CONFIG_SND_SBAWE_SEQ is not set
|
||||
# CONFIG_SND_EMU10K1_SEQ is not set
|
||||
CONFIG_SND_DRIVERS=y
|
||||
# CONFIG_SND_DUMMY is not set
|
||||
# CONFIG_SND_MTPAV is not set
|
||||
# CONFIG_SND_SERIAL_U16550 is not set
|
||||
# CONFIG_SND_MPU401 is not set
|
||||
CONFIG_SND_ARM=y
|
||||
CONFIG_SND_SPI=y
|
||||
CONFIG_SND_USB=y
|
||||
# CONFIG_SND_USB_AUDIO is not set
|
||||
# CONFIG_SND_USB_UA101 is not set
|
||||
# CONFIG_SND_USB_CAIAQ is not set
|
||||
CONFIG_SND_SOC=m
|
||||
CONFIG_SND_SOC_AC97_BUS=y
|
||||
CONFIG_SND_S3C24XX_SOC=m
|
||||
CONFIG_SND_S3C_SOC_AC97=m
|
||||
# CONFIG_SND_S3C64XX_SOC_WM8580 is not set
|
||||
CONFIG_SND_SOC_SMDK_WM9713=m
|
||||
CONFIG_SND_SOC_I2C_AND_SPI=m
|
||||
# CONFIG_SND_SOC_ALL_CODECS is not set
|
||||
CONFIG_SND_SOC_WM9713=m
|
||||
# CONFIG_SOUND_PRIME is not set
|
||||
CONFIG_AC97_BUS=m
|
||||
CONFIG_HID_SUPPORT=y
|
||||
CONFIG_HID=y
|
||||
# CONFIG_HIDRAW is not set
|
||||
|
||||
#
|
||||
# USB Input Devices
|
||||
#
|
||||
CONFIG_USB_HID=y
|
||||
# CONFIG_HID_PID is not set
|
||||
# CONFIG_USB_HIDDEV is not set
|
||||
|
||||
#
|
||||
# Special HID drivers
|
||||
#
|
||||
# CONFIG_HID_3M_PCT is not set
|
||||
CONFIG_HID_A4TECH=y
|
||||
CONFIG_HID_APPLE=y
|
||||
CONFIG_HID_BELKIN=y
|
||||
# CONFIG_HID_CANDO is not set
|
||||
CONFIG_HID_CHERRY=y
|
||||
CONFIG_HID_CHICONY=y
|
||||
# CONFIG_HID_PRODIKEYS is not set
|
||||
CONFIG_HID_CYPRESS=y
|
||||
# CONFIG_HID_DRAGONRISE is not set
|
||||
# CONFIG_HID_EGALAX is not set
|
||||
CONFIG_HID_EZKEY=y
|
||||
CONFIG_HID_KYE=y
|
||||
# CONFIG_HID_GYRATION is not set
|
||||
# CONFIG_HID_TWINHAN is not set
|
||||
CONFIG_HID_KENSINGTON=y
|
||||
CONFIG_HID_LOGITECH=y
|
||||
# CONFIG_LOGITECH_FF is not set
|
||||
# CONFIG_LOGIRUMBLEPAD2_FF is not set
|
||||
# CONFIG_LOGIG940_FF is not set
|
||||
CONFIG_HID_MICROSOFT=y
|
||||
# CONFIG_HID_MOSART is not set
|
||||
CONFIG_HID_MONTEREY=y
|
||||
# CONFIG_HID_NTRIG is not set
|
||||
# CONFIG_HID_ORTEK is not set
|
||||
# CONFIG_HID_PANTHERLORD is not set
|
||||
# CONFIG_HID_PETALYNX is not set
|
||||
# CONFIG_HID_PICOLCD is not set
|
||||
# CONFIG_HID_QUANTA is not set
|
||||
# CONFIG_HID_ROCCAT_KONE is not set
|
||||
# CONFIG_HID_SAMSUNG is not set
|
||||
# CONFIG_HID_SONY is not set
|
||||
# CONFIG_HID_STANTUM is not set
|
||||
# CONFIG_HID_SUNPLUS is not set
|
||||
# CONFIG_HID_GREENASIA is not set
|
||||
# CONFIG_HID_SMARTJOYPLUS is not set
|
||||
# CONFIG_HID_TOPSEED is not set
|
||||
# CONFIG_HID_THRUSTMASTER is not set
|
||||
# CONFIG_HID_ZEROPLUS is not set
|
||||
# CONFIG_HID_ZYDACRON is not set
|
||||
CONFIG_USB_SUPPORT=y
|
||||
CONFIG_USB_ARCH_HAS_HCD=y
|
||||
CONFIG_USB_ARCH_HAS_OHCI=y
|
||||
# CONFIG_USB_ARCH_HAS_EHCI is not set
|
||||
# CONFIG_USB is not set
|
||||
CONFIG_USB=y
|
||||
# CONFIG_USB_DEBUG is not set
|
||||
CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
|
||||
|
||||
#
|
||||
# Enable Host or Gadget support to see Inventra options
|
||||
# Miscellaneous USB options
|
||||
#
|
||||
CONFIG_USB_DEVICEFS=y
|
||||
CONFIG_USB_DEVICE_CLASS=y
|
||||
# CONFIG_USB_DYNAMIC_MINORS is not set
|
||||
# CONFIG_USB_MON is not set
|
||||
# CONFIG_USB_WUSB is not set
|
||||
# CONFIG_USB_WUSB_CBAF is not set
|
||||
|
||||
#
|
||||
# USB Host Controller Drivers
|
||||
#
|
||||
# CONFIG_USB_C67X00_HCD is not set
|
||||
# CONFIG_USB_OXU210HP_HCD is not set
|
||||
# CONFIG_USB_ISP116X_HCD is not set
|
||||
# CONFIG_USB_ISP1760_HCD is not set
|
||||
# CONFIG_USB_ISP1362_HCD is not set
|
||||
CONFIG_USB_OHCI_HCD=y
|
||||
# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
|
||||
# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
|
||||
CONFIG_USB_OHCI_LITTLE_ENDIAN=y
|
||||
# CONFIG_USB_SL811_HCD is not set
|
||||
# CONFIG_USB_R8A66597_HCD is not set
|
||||
# CONFIG_USB_HWA_HCD is not set
|
||||
# CONFIG_USB_MUSB_HDRC is not set
|
||||
|
||||
#
|
||||
# USB Device Class drivers
|
||||
#
|
||||
CONFIG_USB_ACM=m
|
||||
CONFIG_USB_PRINTER=m
|
||||
# CONFIG_USB_WDM is not set
|
||||
# CONFIG_USB_TMC is not set
|
||||
|
||||
#
|
||||
# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
|
||||
#
|
||||
|
||||
#
|
||||
# also be needed; see USB_STORAGE Help for more info
|
||||
#
|
||||
# CONFIG_USB_LIBUSUAL is not set
|
||||
|
||||
#
|
||||
# USB Imaging devices
|
||||
#
|
||||
# CONFIG_USB_MDC800 is not set
|
||||
|
||||
#
|
||||
# USB port drivers
|
||||
#
|
||||
CONFIG_USB_SERIAL=m
|
||||
# CONFIG_USB_EZUSB is not set
|
||||
CONFIG_USB_SERIAL_GENERIC=y
|
||||
# CONFIG_USB_SERIAL_AIRCABLE is not set
|
||||
# CONFIG_USB_SERIAL_ARK3116 is not set
|
||||
# CONFIG_USB_SERIAL_BELKIN is not set
|
||||
# CONFIG_USB_SERIAL_CH341 is not set
|
||||
# CONFIG_USB_SERIAL_WHITEHEAT is not set
|
||||
# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
|
||||
# CONFIG_USB_SERIAL_CP210X is not set
|
||||
# CONFIG_USB_SERIAL_CYPRESS_M8 is not set
|
||||
CONFIG_USB_SERIAL_EMPEG=m
|
||||
CONFIG_USB_SERIAL_FTDI_SIO=m
|
||||
# CONFIG_USB_SERIAL_FUNSOFT is not set
|
||||
# CONFIG_USB_SERIAL_VISOR is not set
|
||||
# CONFIG_USB_SERIAL_IPAQ is not set
|
||||
# CONFIG_USB_SERIAL_IR is not set
|
||||
# CONFIG_USB_SERIAL_EDGEPORT is not set
|
||||
# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
|
||||
# CONFIG_USB_SERIAL_GARMIN is not set
|
||||
# CONFIG_USB_SERIAL_IPW is not set
|
||||
# CONFIG_USB_SERIAL_IUU is not set
|
||||
# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
|
||||
# CONFIG_USB_SERIAL_KEYSPAN is not set
|
||||
# CONFIG_USB_SERIAL_KLSI is not set
|
||||
# CONFIG_USB_SERIAL_KOBIL_SCT is not set
|
||||
# CONFIG_USB_SERIAL_MCT_U232 is not set
|
||||
# CONFIG_USB_SERIAL_MOS7720 is not set
|
||||
# CONFIG_USB_SERIAL_MOS7840 is not set
|
||||
# CONFIG_USB_SERIAL_MOTOROLA is not set
|
||||
# CONFIG_USB_SERIAL_NAVMAN is not set
|
||||
CONFIG_USB_SERIAL_PL2303=m
|
||||
# CONFIG_USB_SERIAL_OTI6858 is not set
|
||||
# CONFIG_USB_SERIAL_QCAUX is not set
|
||||
# CONFIG_USB_SERIAL_QUALCOMM is not set
|
||||
# CONFIG_USB_SERIAL_SPCP8X5 is not set
|
||||
# CONFIG_USB_SERIAL_HP4X is not set
|
||||
# CONFIG_USB_SERIAL_SAFE is not set
|
||||
# CONFIG_USB_SERIAL_SIEMENS_MPI is not set
|
||||
# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
|
||||
# CONFIG_USB_SERIAL_SYMBOL is not set
|
||||
# CONFIG_USB_SERIAL_TI is not set
|
||||
# CONFIG_USB_SERIAL_CYBERJACK is not set
|
||||
# CONFIG_USB_SERIAL_XIRCOM is not set
|
||||
# CONFIG_USB_SERIAL_OPTION is not set
|
||||
# CONFIG_USB_SERIAL_OMNINET is not set
|
||||
# CONFIG_USB_SERIAL_OPTICON is not set
|
||||
# CONFIG_USB_SERIAL_VIVOPAY_SERIAL is not set
|
||||
# CONFIG_USB_SERIAL_ZIO is not set
|
||||
# CONFIG_USB_SERIAL_DEBUG is not set
|
||||
|
||||
#
|
||||
# USB Miscellaneous drivers
|
||||
#
|
||||
# CONFIG_USB_EMI62 is not set
|
||||
# CONFIG_USB_EMI26 is not set
|
||||
# CONFIG_USB_ADUTUX is not set
|
||||
# CONFIG_USB_SEVSEG is not set
|
||||
# CONFIG_USB_RIO500 is not set
|
||||
# CONFIG_USB_LEGOTOWER is not set
|
||||
# CONFIG_USB_LCD is not set
|
||||
# CONFIG_USB_LED is not set
|
||||
# CONFIG_USB_CYPRESS_CY7C63 is not set
|
||||
# CONFIG_USB_CYTHERM is not set
|
||||
# CONFIG_USB_IDMOUSE is not set
|
||||
# CONFIG_USB_FTDI_ELAN is not set
|
||||
# CONFIG_USB_APPLEDISPLAY is not set
|
||||
# CONFIG_USB_LD is not set
|
||||
# CONFIG_USB_TRANCEVIBRATOR is not set
|
||||
# CONFIG_USB_IOWARRIOR is not set
|
||||
# CONFIG_USB_TEST is not set
|
||||
# CONFIG_USB_ISIGHTFW is not set
|
||||
# CONFIG_USB_GADGET is not set
|
||||
|
||||
#
|
||||
# OTG and related infrastructure
|
||||
#
|
||||
# CONFIG_USB_GPIO_VBUS is not set
|
||||
# CONFIG_USB_ULPI is not set
|
||||
# CONFIG_NOP_USB_XCEIV is not set
|
||||
CONFIG_MMC=y
|
||||
CONFIG_MMC_DEBUG=y
|
||||
CONFIG_MMC_UNSAFE_RESUME=y
|
||||
@ -784,20 +1208,80 @@ CONFIG_MMC_SDHCI=y
|
||||
# CONFIG_MMC_SDHCI_PLTFM is not set
|
||||
CONFIG_MMC_SDHCI_S3C=y
|
||||
# CONFIG_MMC_SDHCI_S3C_DMA is not set
|
||||
# CONFIG_MMC_AT91 is not set
|
||||
# CONFIG_MMC_ATMELMCI is not set
|
||||
# CONFIG_MMC_SPI is not set
|
||||
# CONFIG_MEMSTICK is not set
|
||||
# CONFIG_NEW_LEDS is not set
|
||||
# CONFIG_ACCESSIBILITY is not set
|
||||
CONFIG_RTC_LIB=y
|
||||
# CONFIG_RTC_CLASS is not set
|
||||
CONFIG_RTC_CLASS=y
|
||||
CONFIG_RTC_HCTOSYS=y
|
||||
CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
|
||||
# CONFIG_RTC_DEBUG is not set
|
||||
|
||||
#
|
||||
# RTC interfaces
|
||||
#
|
||||
CONFIG_RTC_INTF_SYSFS=y
|
||||
CONFIG_RTC_INTF_PROC=y
|
||||
CONFIG_RTC_INTF_DEV=y
|
||||
# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
|
||||
# CONFIG_RTC_DRV_TEST is not set
|
||||
|
||||
#
|
||||
# I2C RTC drivers
|
||||
#
|
||||
# CONFIG_RTC_DRV_DS1307 is not set
|
||||
# CONFIG_RTC_DRV_DS1374 is not set
|
||||
# CONFIG_RTC_DRV_DS1672 is not set
|
||||
# CONFIG_RTC_DRV_MAX6900 is not set
|
||||
# CONFIG_RTC_DRV_RS5C372 is not set
|
||||
# CONFIG_RTC_DRV_ISL1208 is not set
|
||||
# CONFIG_RTC_DRV_X1205 is not set
|
||||
# CONFIG_RTC_DRV_PCF8563 is not set
|
||||
# CONFIG_RTC_DRV_PCF8583 is not set
|
||||
# CONFIG_RTC_DRV_M41T80 is not set
|
||||
# CONFIG_RTC_DRV_BQ32K is not set
|
||||
# CONFIG_RTC_DRV_S35390A is not set
|
||||
# CONFIG_RTC_DRV_FM3130 is not set
|
||||
# CONFIG_RTC_DRV_RX8581 is not set
|
||||
# CONFIG_RTC_DRV_RX8025 is not set
|
||||
|
||||
#
|
||||
# SPI RTC drivers
|
||||
#
|
||||
# CONFIG_RTC_DRV_M41T94 is not set
|
||||
# CONFIG_RTC_DRV_DS1305 is not set
|
||||
# CONFIG_RTC_DRV_DS1390 is not set
|
||||
# CONFIG_RTC_DRV_MAX6902 is not set
|
||||
# CONFIG_RTC_DRV_R9701 is not set
|
||||
# CONFIG_RTC_DRV_RS5C348 is not set
|
||||
# CONFIG_RTC_DRV_DS3234 is not set
|
||||
# CONFIG_RTC_DRV_PCF2123 is not set
|
||||
|
||||
#
|
||||
# Platform RTC drivers
|
||||
#
|
||||
# CONFIG_RTC_DRV_CMOS is not set
|
||||
# CONFIG_RTC_DRV_DS1286 is not set
|
||||
# CONFIG_RTC_DRV_DS1511 is not set
|
||||
# CONFIG_RTC_DRV_DS1553 is not set
|
||||
# CONFIG_RTC_DRV_DS1742 is not set
|
||||
# CONFIG_RTC_DRV_STK17TA8 is not set
|
||||
# CONFIG_RTC_DRV_M48T86 is not set
|
||||
# CONFIG_RTC_DRV_M48T35 is not set
|
||||
# CONFIG_RTC_DRV_M48T59 is not set
|
||||
# CONFIG_RTC_DRV_MSM6242 is not set
|
||||
# CONFIG_RTC_DRV_BQ4802 is not set
|
||||
# CONFIG_RTC_DRV_RP5C01 is not set
|
||||
# CONFIG_RTC_DRV_V3020 is not set
|
||||
|
||||
#
|
||||
# on-CPU RTC drivers
|
||||
#
|
||||
CONFIG_RTC_DRV_S3C=y
|
||||
# CONFIG_DMADEVICES is not set
|
||||
# CONFIG_AUXDISPLAY is not set
|
||||
# CONFIG_UIO is not set
|
||||
|
||||
#
|
||||
# TI VLYNQ
|
||||
#
|
||||
# CONFIG_STAGING is not set
|
||||
|
||||
#
|
||||
@ -869,6 +1353,8 @@ CONFIG_MISC_FILESYSTEMS=y
|
||||
# CONFIG_BEFS_FS is not set
|
||||
# CONFIG_BFS_FS is not set
|
||||
# CONFIG_EFS_FS is not set
|
||||
# CONFIG_JFFS2_FS is not set
|
||||
# CONFIG_LOGFS is not set
|
||||
CONFIG_CRAMFS=y
|
||||
# CONFIG_SQUASHFS is not set
|
||||
# CONFIG_VXFS_FS is not set
|
||||
@ -889,7 +1375,46 @@ CONFIG_ROMFS_ON_BLOCK=y
|
||||
#
|
||||
# CONFIG_PARTITION_ADVANCED is not set
|
||||
CONFIG_MSDOS_PARTITION=y
|
||||
# CONFIG_NLS is not set
|
||||
CONFIG_NLS=y
|
||||
CONFIG_NLS_DEFAULT="iso8859-1"
|
||||
# CONFIG_NLS_CODEPAGE_437 is not set
|
||||
# CONFIG_NLS_CODEPAGE_737 is not set
|
||||
# CONFIG_NLS_CODEPAGE_775 is not set
|
||||
# CONFIG_NLS_CODEPAGE_850 is not set
|
||||
# CONFIG_NLS_CODEPAGE_852 is not set
|
||||
# CONFIG_NLS_CODEPAGE_855 is not set
|
||||
# CONFIG_NLS_CODEPAGE_857 is not set
|
||||
# CONFIG_NLS_CODEPAGE_860 is not set
|
||||
# CONFIG_NLS_CODEPAGE_861 is not set
|
||||
# CONFIG_NLS_CODEPAGE_862 is not set
|
||||
# CONFIG_NLS_CODEPAGE_863 is not set
|
||||
# CONFIG_NLS_CODEPAGE_864 is not set
|
||||
# CONFIG_NLS_CODEPAGE_865 is not set
|
||||
# CONFIG_NLS_CODEPAGE_866 is not set
|
||||
# CONFIG_NLS_CODEPAGE_869 is not set
|
||||
# CONFIG_NLS_CODEPAGE_936 is not set
|
||||
# CONFIG_NLS_CODEPAGE_950 is not set
|
||||
# CONFIG_NLS_CODEPAGE_932 is not set
|
||||
# CONFIG_NLS_CODEPAGE_949 is not set
|
||||
# CONFIG_NLS_CODEPAGE_874 is not set
|
||||
# CONFIG_NLS_ISO8859_8 is not set
|
||||
# CONFIG_NLS_CODEPAGE_1250 is not set
|
||||
# CONFIG_NLS_CODEPAGE_1251 is not set
|
||||
# CONFIG_NLS_ASCII is not set
|
||||
# CONFIG_NLS_ISO8859_1 is not set
|
||||
# CONFIG_NLS_ISO8859_2 is not set
|
||||
# CONFIG_NLS_ISO8859_3 is not set
|
||||
# CONFIG_NLS_ISO8859_4 is not set
|
||||
# CONFIG_NLS_ISO8859_5 is not set
|
||||
# CONFIG_NLS_ISO8859_6 is not set
|
||||
# CONFIG_NLS_ISO8859_7 is not set
|
||||
# CONFIG_NLS_ISO8859_9 is not set
|
||||
# CONFIG_NLS_ISO8859_13 is not set
|
||||
# CONFIG_NLS_ISO8859_14 is not set
|
||||
# CONFIG_NLS_ISO8859_15 is not set
|
||||
# CONFIG_NLS_KOI8_R is not set
|
||||
# CONFIG_NLS_KOI8_U is not set
|
||||
# CONFIG_NLS_UTF8 is not set
|
||||
|
||||
#
|
||||
# Kernel hacking
|
||||
@ -952,6 +1477,7 @@ CONFIG_HAVE_FUNCTION_TRACER=y
|
||||
CONFIG_TRACING_SUPPORT=y
|
||||
CONFIG_FTRACE=y
|
||||
# CONFIG_FUNCTION_TRACER is not set
|
||||
# CONFIG_IRQSOFF_TRACER is not set
|
||||
# CONFIG_SCHED_TRACER is not set
|
||||
# CONFIG_ENABLE_DEFAULT_TRACERS is not set
|
||||
# CONFIG_BOOT_TRACER is not set
|
||||
@ -962,6 +1488,7 @@ CONFIG_BRANCH_PROFILE_NONE=y
|
||||
# CONFIG_KMEMTRACE is not set
|
||||
# CONFIG_WORKQUEUE_TRACER is not set
|
||||
# CONFIG_BLK_DEV_IO_TRACE is not set
|
||||
# CONFIG_ATOMIC64_SELFTEST is not set
|
||||
# CONFIG_SAMPLES is not set
|
||||
CONFIG_HAVE_ARCH_KGDB=y
|
||||
# CONFIG_KGDB is not set
|
||||
|
@ -1,11 +1,14 @@
|
||||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.33-rc2
|
||||
# Sat Jan 9 16:33:55 2010
|
||||
# Linux kernel version: 2.6.34
|
||||
# Wed May 26 19:04:32 2010
|
||||
#
|
||||
CONFIG_ARM=y
|
||||
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
|
||||
CONFIG_GENERIC_GPIO=y
|
||||
CONFIG_GENERIC_TIME=y
|
||||
CONFIG_ARCH_USES_GETTIMEOFFSET=y
|
||||
CONFIG_HAVE_PROC_CPU=y
|
||||
CONFIG_NO_IOPORT=y
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_STACKTRACE_SUPPORT=y
|
||||
@ -17,6 +20,7 @@ CONFIG_GENERIC_IRQ_PROBE=y
|
||||
CONFIG_RWSEM_GENERIC_SPINLOCK=y
|
||||
CONFIG_GENERIC_HWEIGHT=y
|
||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||
CONFIG_NEED_DMA_MAP_STATE=y
|
||||
CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
|
||||
CONFIG_VECTORS_BASE=0xffff0000
|
||||
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
|
||||
@ -30,6 +34,13 @@ CONFIG_BROKEN_ON_SMP=y
|
||||
CONFIG_INIT_ENV_ARG_LIMIT=32
|
||||
CONFIG_LOCALVERSION=""
|
||||
CONFIG_LOCALVERSION_AUTO=y
|
||||
CONFIG_HAVE_KERNEL_GZIP=y
|
||||
CONFIG_HAVE_KERNEL_LZMA=y
|
||||
CONFIG_HAVE_KERNEL_LZO=y
|
||||
CONFIG_KERNEL_GZIP=y
|
||||
# CONFIG_KERNEL_BZIP2 is not set
|
||||
# CONFIG_KERNEL_LZMA is not set
|
||||
# CONFIG_KERNEL_LZO is not set
|
||||
CONFIG_SWAP=y
|
||||
# CONFIG_SYSVIPC is not set
|
||||
# CONFIG_BSD_PROCESS_ACCT is not set
|
||||
@ -46,7 +57,6 @@ CONFIG_RCU_FANOUT=32
|
||||
# CONFIG_TREE_RCU_TRACE is not set
|
||||
# CONFIG_IKCONFIG is not set
|
||||
CONFIG_LOG_BUF_SHIFT=17
|
||||
# CONFIG_GROUP_SCHED is not set
|
||||
# CONFIG_CGROUPS is not set
|
||||
CONFIG_SYSFS_DEPRECATED=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
@ -60,6 +70,7 @@ CONFIG_INITRAMFS_SOURCE=""
|
||||
CONFIG_RD_GZIP=y
|
||||
CONFIG_RD_BZIP2=y
|
||||
CONFIG_RD_LZMA=y
|
||||
CONFIG_RD_LZO=y
|
||||
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
||||
CONFIG_SYSCTL=y
|
||||
CONFIG_ANON_INODES=y
|
||||
@ -81,10 +92,14 @@ CONFIG_TIMERFD=y
|
||||
CONFIG_EVENTFD=y
|
||||
CONFIG_SHMEM=y
|
||||
CONFIG_AIO=y
|
||||
CONFIG_HAVE_PERF_EVENTS=y
|
||||
CONFIG_PERF_USE_VMALLOC=y
|
||||
|
||||
#
|
||||
# Kernel Performance Events And Counters
|
||||
#
|
||||
# CONFIG_PERF_EVENTS is not set
|
||||
# CONFIG_PERF_COUNTERS is not set
|
||||
CONFIG_VM_EVENT_COUNTERS=y
|
||||
CONFIG_SLUB_DEBUG=y
|
||||
CONFIG_COMPAT_BRK=y
|
||||
@ -166,8 +181,11 @@ CONFIG_MMU=y
|
||||
# CONFIG_ARCH_INTEGRATOR is not set
|
||||
# CONFIG_ARCH_REALVIEW is not set
|
||||
# CONFIG_ARCH_VERSATILE is not set
|
||||
# CONFIG_ARCH_VEXPRESS is not set
|
||||
# CONFIG_ARCH_AT91 is not set
|
||||
# CONFIG_ARCH_BCMRING is not set
|
||||
# CONFIG_ARCH_CLPS711X is not set
|
||||
# CONFIG_ARCH_CNS3XXX is not set
|
||||
# CONFIG_ARCH_GEMINI is not set
|
||||
# CONFIG_ARCH_EBSA110 is not set
|
||||
# CONFIG_ARCH_EP93XX is not set
|
||||
@ -176,7 +194,6 @@ CONFIG_MMU=y
|
||||
# CONFIG_ARCH_STMP3XXX is not set
|
||||
# CONFIG_ARCH_NETX is not set
|
||||
# CONFIG_ARCH_H720X is not set
|
||||
# CONFIG_ARCH_NOMADIK is not set
|
||||
# CONFIG_ARCH_IOP13XX is not set
|
||||
# CONFIG_ARCH_IOP32X is not set
|
||||
# CONFIG_ARCH_IOP33X is not set
|
||||
@ -193,44 +210,56 @@ CONFIG_MMU=y
|
||||
# CONFIG_ARCH_KS8695 is not set
|
||||
# CONFIG_ARCH_NS9XXX is not set
|
||||
# CONFIG_ARCH_W90X900 is not set
|
||||
# CONFIG_ARCH_NUC93X is not set
|
||||
# CONFIG_ARCH_PNX4008 is not set
|
||||
# CONFIG_ARCH_PXA is not set
|
||||
# CONFIG_ARCH_MSM is not set
|
||||
# CONFIG_ARCH_SHMOBILE is not set
|
||||
# CONFIG_ARCH_RPC is not set
|
||||
# CONFIG_ARCH_SA1100 is not set
|
||||
# CONFIG_ARCH_S3C2410 is not set
|
||||
# CONFIG_ARCH_S3C64XX is not set
|
||||
CONFIG_ARCH_S5P6440=y
|
||||
# CONFIG_ARCH_S5PC1XX is not set
|
||||
# CONFIG_ARCH_S5P6442 is not set
|
||||
# CONFIG_ARCH_S5PC100 is not set
|
||||
# CONFIG_ARCH_S5PV210 is not set
|
||||
# CONFIG_ARCH_SHARK is not set
|
||||
# CONFIG_ARCH_LH7A40X is not set
|
||||
# CONFIG_ARCH_U300 is not set
|
||||
# CONFIG_ARCH_U8500 is not set
|
||||
# CONFIG_ARCH_NOMADIK is not set
|
||||
# CONFIG_ARCH_DAVINCI is not set
|
||||
# CONFIG_ARCH_OMAP is not set
|
||||
# CONFIG_ARCH_BCMRING is not set
|
||||
# CONFIG_ARCH_U8500 is not set
|
||||
# CONFIG_PLAT_SPEAR is not set
|
||||
CONFIG_PLAT_SAMSUNG=y
|
||||
CONFIG_SAMSUNG_CLKSRC=y
|
||||
CONFIG_SAMSUNG_IRQ_VIC_TIMER=y
|
||||
CONFIG_SAMSUNG_IRQ_UART=y
|
||||
CONFIG_SAMSUNG_GPIO_EXTRA=0
|
||||
CONFIG_PLAT_S3C=y
|
||||
|
||||
#
|
||||
# Boot options
|
||||
#
|
||||
CONFIG_S3C_BOOT_ERROR_RESET=y
|
||||
CONFIG_S3C_BOOT_UART_FORCE_FIFO=y
|
||||
CONFIG_S3C_LOWLEVEL_UART_PORT=1
|
||||
CONFIG_SAMSUNG_CLKSRC=y
|
||||
CONFIG_SAMSUNG_IRQ_VIC_TIMER=y
|
||||
CONFIG_SAMSUNG_IRQ_UART=y
|
||||
CONFIG_SAMSUNG_GPIOLIB_4BIT=y
|
||||
CONFIG_S3C_GPIO_CFG_S3C24XX=y
|
||||
CONFIG_S3C_GPIO_CFG_S3C64XX=y
|
||||
CONFIG_S3C_GPIO_PULL_UPDOWN=y
|
||||
CONFIG_S5P_GPIO_DRVSTR=y
|
||||
CONFIG_SAMSUNG_GPIO_EXTRA=0
|
||||
CONFIG_S3C_GPIO_SPACE=0
|
||||
CONFIG_S3C_GPIO_TRACK=y
|
||||
# CONFIG_S3C_ADC is not set
|
||||
CONFIG_S3C_DEV_WDT=y
|
||||
CONFIG_SAMSUNG_DEV_ADC=y
|
||||
CONFIG_SAMSUNG_DEV_TS=y
|
||||
CONFIG_S3C_PL330_DMA=y
|
||||
|
||||
#
|
||||
# Power management
|
||||
#
|
||||
CONFIG_S3C_LOWLEVEL_UART_PORT=1
|
||||
CONFIG_S3C_GPIO_SPACE=0
|
||||
CONFIG_S3C_GPIO_TRACK=y
|
||||
CONFIG_PLAT_S5P=y
|
||||
CONFIG_CPU_S5P6440_INIT=y
|
||||
CONFIG_CPU_S5P6440_CLOCK=y
|
||||
CONFIG_CPU_S5P6440=y
|
||||
CONFIG_MACH_SMDK6440=y
|
||||
|
||||
@ -258,9 +287,12 @@ CONFIG_ARM_THUMB=y
|
||||
# CONFIG_CPU_DCACHE_DISABLE is not set
|
||||
# CONFIG_CPU_BPREDICT_DISABLE is not set
|
||||
CONFIG_ARM_L1_CACHE_SHIFT=5
|
||||
CONFIG_ARM_DMA_MEM_BUFFERABLE=y
|
||||
CONFIG_CPU_HAS_PMU=y
|
||||
# CONFIG_ARM_ERRATA_411920 is not set
|
||||
CONFIG_ARM_VIC=y
|
||||
CONFIG_ARM_VIC_NR=2
|
||||
CONFIG_PL330=y
|
||||
|
||||
#
|
||||
# Bus support
|
||||
@ -307,6 +339,7 @@ CONFIG_ALIGNMENT_TRAP=y
|
||||
CONFIG_ZBOOT_ROM_TEXT=0
|
||||
CONFIG_ZBOOT_ROM_BSS=0
|
||||
CONFIG_CMDLINE="root=/dev/ram0 rw ramdisk=8192 initrd=0x20800000,8M console=ttySAC1,115200 init=/linuxrc"
|
||||
# CONFIG_CMDLINE_FORCE is not set
|
||||
# CONFIG_XIP_KERNEL is not set
|
||||
# CONFIG_KEXEC is not set
|
||||
|
||||
@ -382,6 +415,7 @@ CONFIG_HAVE_IDE=y
|
||||
#
|
||||
# SCSI device support
|
||||
#
|
||||
CONFIG_SCSI_MOD=y
|
||||
# CONFIG_RAID_ATTRS is not set
|
||||
CONFIG_SCSI=y
|
||||
CONFIG_SCSI_DMA=y
|
||||
@ -470,7 +504,9 @@ CONFIG_MOUSE_PS2_TRACKPOINT=y
|
||||
CONFIG_INPUT_TOUCHSCREEN=y
|
||||
# CONFIG_TOUCHSCREEN_AD7879 is not set
|
||||
# CONFIG_TOUCHSCREEN_DYNAPRO is not set
|
||||
# CONFIG_TOUCHSCREEN_HAMPSHIRE is not set
|
||||
# CONFIG_TOUCHSCREEN_FUJITSU is not set
|
||||
# CONFIG_TOUCHSCREEN_S3C2410 is not set
|
||||
# CONFIG_TOUCHSCREEN_GUNZE is not set
|
||||
# CONFIG_TOUCHSCREEN_ELO is not set
|
||||
# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
|
||||
@ -518,12 +554,16 @@ CONFIG_SERIAL_8250_RUNTIME_UARTS=3
|
||||
# Non-8250 serial port support
|
||||
#
|
||||
CONFIG_SERIAL_SAMSUNG=y
|
||||
CONFIG_SERIAL_SAMSUNG_UARTS_4=y
|
||||
CONFIG_SERIAL_SAMSUNG_UARTS=4
|
||||
# CONFIG_SERIAL_SAMSUNG_DEBUG is not set
|
||||
CONFIG_SERIAL_SAMSUNG_CONSOLE=y
|
||||
CONFIG_SERIAL_S5P6440=y
|
||||
CONFIG_SERIAL_S3C6400=y
|
||||
CONFIG_SERIAL_CORE=y
|
||||
CONFIG_SERIAL_CORE_CONSOLE=y
|
||||
# CONFIG_SERIAL_TIMBERDALE is not set
|
||||
# CONFIG_SERIAL_ALTERA_JTAGUART is not set
|
||||
# CONFIG_SERIAL_ALTERA_UART is not set
|
||||
CONFIG_UNIX98_PTYS=y
|
||||
# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
|
||||
CONFIG_LEGACY_PTYS=y
|
||||
@ -549,6 +589,7 @@ CONFIG_GPIOLIB=y
|
||||
#
|
||||
# Memory mapped GPIO expanders:
|
||||
#
|
||||
# CONFIG_GPIO_IT8761E is not set
|
||||
|
||||
#
|
||||
# I2C GPIO expanders:
|
||||
@ -570,6 +611,7 @@ CONFIG_GPIOLIB=y
|
||||
# CONFIG_HWMON is not set
|
||||
# CONFIG_THERMAL is not set
|
||||
# CONFIG_WATCHDOG is not set
|
||||
CONFIG_HAVE_S3C2410_WATCHDOG=y
|
||||
CONFIG_SSB_POSSIBLE=y
|
||||
|
||||
#
|
||||
@ -626,10 +668,6 @@ CONFIG_RTC_LIB=y
|
||||
# CONFIG_DMADEVICES is not set
|
||||
# CONFIG_AUXDISPLAY is not set
|
||||
# CONFIG_UIO is not set
|
||||
|
||||
#
|
||||
# TI VLYNQ
|
||||
#
|
||||
# CONFIG_STAGING is not set
|
||||
|
||||
#
|
||||
@ -704,6 +742,7 @@ CONFIG_MISC_FILESYSTEMS=y
|
||||
# CONFIG_BEFS_FS is not set
|
||||
# CONFIG_BFS_FS is not set
|
||||
# CONFIG_EFS_FS is not set
|
||||
# CONFIG_LOGFS is not set
|
||||
CONFIG_CRAMFS=y
|
||||
# CONFIG_SQUASHFS is not set
|
||||
# CONFIG_VXFS_FS is not set
|
||||
@ -826,6 +865,7 @@ CONFIG_HAVE_FUNCTION_TRACER=y
|
||||
CONFIG_TRACING_SUPPORT=y
|
||||
CONFIG_FTRACE=y
|
||||
# CONFIG_FUNCTION_TRACER is not set
|
||||
# CONFIG_IRQSOFF_TRACER is not set
|
||||
# CONFIG_SCHED_TRACER is not set
|
||||
# CONFIG_ENABLE_DEFAULT_TRACERS is not set
|
||||
# CONFIG_BOOT_TRACER is not set
|
||||
@ -836,6 +876,7 @@ CONFIG_BRANCH_PROFILE_NONE=y
|
||||
# CONFIG_KMEMTRACE is not set
|
||||
# CONFIG_WORKQUEUE_TRACER is not set
|
||||
# CONFIG_BLK_DEV_IO_TRACE is not set
|
||||
# CONFIG_ATOMIC64_SELFTEST is not set
|
||||
# CONFIG_SAMPLES is not set
|
||||
CONFIG_HAVE_ARCH_KGDB=y
|
||||
# CONFIG_KGDB is not set
|
||||
@ -962,8 +1003,10 @@ CONFIG_CRC32=y
|
||||
# CONFIG_CRC7 is not set
|
||||
# CONFIG_LIBCRC32C is not set
|
||||
CONFIG_ZLIB_INFLATE=y
|
||||
CONFIG_LZO_DECOMPRESS=y
|
||||
CONFIG_DECOMPRESS_GZIP=y
|
||||
CONFIG_DECOMPRESS_BZIP2=y
|
||||
CONFIG_DECOMPRESS_LZMA=y
|
||||
CONFIG_DECOMPRESS_LZO=y
|
||||
CONFIG_HAS_IOMEM=y
|
||||
CONFIG_HAS_DMA=y
|
||||
|
@ -1,11 +1,14 @@
|
||||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.33-rc4
|
||||
# Mon Jan 25 08:50:28 2010
|
||||
# Linux kernel version: 2.6.34
|
||||
# Wed May 26 19:04:34 2010
|
||||
#
|
||||
CONFIG_ARM=y
|
||||
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
|
||||
CONFIG_GENERIC_GPIO=y
|
||||
CONFIG_GENERIC_TIME=y
|
||||
CONFIG_ARCH_USES_GETTIMEOFFSET=y
|
||||
CONFIG_HAVE_PROC_CPU=y
|
||||
CONFIG_NO_IOPORT=y
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_STACKTRACE_SUPPORT=y
|
||||
@ -17,6 +20,7 @@ CONFIG_GENERIC_IRQ_PROBE=y
|
||||
CONFIG_RWSEM_GENERIC_SPINLOCK=y
|
||||
CONFIG_GENERIC_HWEIGHT=y
|
||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||
CONFIG_NEED_DMA_MAP_STATE=y
|
||||
CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
|
||||
CONFIG_VECTORS_BASE=0xffff0000
|
||||
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
|
||||
@ -31,6 +35,7 @@ CONFIG_INIT_ENV_ARG_LIMIT=32
|
||||
CONFIG_LOCALVERSION=""
|
||||
CONFIG_LOCALVERSION_AUTO=y
|
||||
CONFIG_HAVE_KERNEL_GZIP=y
|
||||
CONFIG_HAVE_KERNEL_LZMA=y
|
||||
CONFIG_HAVE_KERNEL_LZO=y
|
||||
CONFIG_KERNEL_GZIP=y
|
||||
# CONFIG_KERNEL_BZIP2 is not set
|
||||
@ -52,7 +57,6 @@ CONFIG_RCU_FANOUT=32
|
||||
# CONFIG_TREE_RCU_TRACE is not set
|
||||
# CONFIG_IKCONFIG is not set
|
||||
CONFIG_LOG_BUF_SHIFT=17
|
||||
# CONFIG_GROUP_SCHED is not set
|
||||
# CONFIG_CGROUPS is not set
|
||||
CONFIG_SYSFS_DEPRECATED=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
@ -88,10 +92,14 @@ CONFIG_TIMERFD=y
|
||||
CONFIG_EVENTFD=y
|
||||
CONFIG_SHMEM=y
|
||||
CONFIG_AIO=y
|
||||
CONFIG_HAVE_PERF_EVENTS=y
|
||||
CONFIG_PERF_USE_VMALLOC=y
|
||||
|
||||
#
|
||||
# Kernel Performance Events And Counters
|
||||
#
|
||||
# CONFIG_PERF_EVENTS is not set
|
||||
# CONFIG_PERF_COUNTERS is not set
|
||||
CONFIG_VM_EVENT_COUNTERS=y
|
||||
CONFIG_SLUB_DEBUG=y
|
||||
CONFIG_COMPAT_BRK=y
|
||||
@ -173,8 +181,11 @@ CONFIG_MMU=y
|
||||
# CONFIG_ARCH_INTEGRATOR is not set
|
||||
# CONFIG_ARCH_REALVIEW is not set
|
||||
# CONFIG_ARCH_VERSATILE is not set
|
||||
# CONFIG_ARCH_VEXPRESS is not set
|
||||
# CONFIG_ARCH_AT91 is not set
|
||||
# CONFIG_ARCH_BCMRING is not set
|
||||
# CONFIG_ARCH_CLPS711X is not set
|
||||
# CONFIG_ARCH_CNS3XXX is not set
|
||||
# CONFIG_ARCH_GEMINI is not set
|
||||
# CONFIG_ARCH_EBSA110 is not set
|
||||
# CONFIG_ARCH_EP93XX is not set
|
||||
@ -183,7 +194,6 @@ CONFIG_MMU=y
|
||||
# CONFIG_ARCH_STMP3XXX is not set
|
||||
# CONFIG_ARCH_NETX is not set
|
||||
# CONFIG_ARCH_H720X is not set
|
||||
# CONFIG_ARCH_NOMADIK is not set
|
||||
# CONFIG_ARCH_IOP13XX is not set
|
||||
# CONFIG_ARCH_IOP32X is not set
|
||||
# CONFIG_ARCH_IOP33X is not set
|
||||
@ -200,38 +210,28 @@ CONFIG_MMU=y
|
||||
# CONFIG_ARCH_KS8695 is not set
|
||||
# CONFIG_ARCH_NS9XXX is not set
|
||||
# CONFIG_ARCH_W90X900 is not set
|
||||
# CONFIG_ARCH_NUC93X is not set
|
||||
# CONFIG_ARCH_PNX4008 is not set
|
||||
# CONFIG_ARCH_PXA is not set
|
||||
# CONFIG_ARCH_MSM is not set
|
||||
# CONFIG_ARCH_SHMOBILE is not set
|
||||
# CONFIG_ARCH_RPC is not set
|
||||
# CONFIG_ARCH_SA1100 is not set
|
||||
# CONFIG_ARCH_S3C2410 is not set
|
||||
# CONFIG_ARCH_S3C64XX is not set
|
||||
# CONFIG_ARCH_S5P6440 is not set
|
||||
CONFIG_ARCH_S5P6442=y
|
||||
# CONFIG_ARCH_S5PC1XX is not set
|
||||
# CONFIG_ARCH_S5PC100 is not set
|
||||
# CONFIG_ARCH_S5PV210 is not set
|
||||
# CONFIG_ARCH_SHARK is not set
|
||||
# CONFIG_ARCH_LH7A40X is not set
|
||||
# CONFIG_ARCH_U300 is not set
|
||||
# CONFIG_ARCH_U8500 is not set
|
||||
# CONFIG_ARCH_NOMADIK is not set
|
||||
# CONFIG_ARCH_DAVINCI is not set
|
||||
# CONFIG_ARCH_OMAP is not set
|
||||
# CONFIG_ARCH_BCMRING is not set
|
||||
# CONFIG_ARCH_U8500 is not set
|
||||
# CONFIG_PLAT_SPEAR is not set
|
||||
CONFIG_PLAT_SAMSUNG=y
|
||||
CONFIG_SAMSUNG_CLKSRC=y
|
||||
CONFIG_SAMSUNG_IRQ_VIC_TIMER=y
|
||||
CONFIG_SAMSUNG_IRQ_UART=y
|
||||
CONFIG_SAMSUNG_GPIOLIB_4BIT=y
|
||||
CONFIG_S3C_GPIO_CFG_S3C24XX=y
|
||||
CONFIG_S3C_GPIO_CFG_S3C64XX=y
|
||||
CONFIG_S3C_GPIO_PULL_UPDOWN=y
|
||||
CONFIG_SAMSUNG_GPIO_EXTRA=0
|
||||
# CONFIG_S3C_ADC is not set
|
||||
|
||||
#
|
||||
# Power management
|
||||
#
|
||||
CONFIG_PLAT_S3C=y
|
||||
|
||||
#
|
||||
# Boot options
|
||||
@ -239,8 +239,23 @@ CONFIG_PLAT_S3C=y
|
||||
# CONFIG_S3C_BOOT_ERROR_RESET is not set
|
||||
CONFIG_S3C_BOOT_UART_FORCE_FIFO=y
|
||||
CONFIG_S3C_LOWLEVEL_UART_PORT=1
|
||||
CONFIG_SAMSUNG_CLKSRC=y
|
||||
CONFIG_SAMSUNG_IRQ_VIC_TIMER=y
|
||||
CONFIG_SAMSUNG_IRQ_UART=y
|
||||
CONFIG_SAMSUNG_GPIOLIB_4BIT=y
|
||||
CONFIG_S3C_GPIO_CFG_S3C24XX=y
|
||||
CONFIG_S3C_GPIO_CFG_S3C64XX=y
|
||||
CONFIG_S3C_GPIO_PULL_UPDOWN=y
|
||||
CONFIG_S5P_GPIO_DRVSTR=y
|
||||
CONFIG_SAMSUNG_GPIO_EXTRA=0
|
||||
CONFIG_S3C_GPIO_SPACE=0
|
||||
CONFIG_S3C_GPIO_TRACK=y
|
||||
# CONFIG_S3C_ADC is not set
|
||||
CONFIG_S3C_PL330_DMA=y
|
||||
|
||||
#
|
||||
# Power management
|
||||
#
|
||||
CONFIG_PLAT_S5P=y
|
||||
CONFIG_CPU_S5P6442=y
|
||||
CONFIG_MACH_SMDK6442=y
|
||||
@ -269,9 +284,12 @@ CONFIG_ARM_THUMB=y
|
||||
# CONFIG_CPU_DCACHE_DISABLE is not set
|
||||
# CONFIG_CPU_BPREDICT_DISABLE is not set
|
||||
CONFIG_ARM_L1_CACHE_SHIFT=5
|
||||
CONFIG_ARM_DMA_MEM_BUFFERABLE=y
|
||||
CONFIG_CPU_HAS_PMU=y
|
||||
# CONFIG_ARM_ERRATA_411920 is not set
|
||||
CONFIG_ARM_VIC=y
|
||||
CONFIG_ARM_VIC_NR=2
|
||||
CONFIG_PL330=y
|
||||
|
||||
#
|
||||
# Bus support
|
||||
@ -318,6 +336,7 @@ CONFIG_ALIGNMENT_TRAP=y
|
||||
CONFIG_ZBOOT_ROM_TEXT=0
|
||||
CONFIG_ZBOOT_ROM_BSS=0
|
||||
CONFIG_CMDLINE="root=/dev/ram0 rw ramdisk=8192 initrd=0x20800000,8M console=ttySAC1,115200 init=/linuxrc"
|
||||
# CONFIG_CMDLINE_FORCE is not set
|
||||
# CONFIG_XIP_KERNEL is not set
|
||||
# CONFIG_KEXEC is not set
|
||||
|
||||
@ -394,6 +413,7 @@ CONFIG_HAVE_IDE=y
|
||||
#
|
||||
# SCSI device support
|
||||
#
|
||||
CONFIG_SCSI_MOD=y
|
||||
# CONFIG_RAID_ATTRS is not set
|
||||
CONFIG_SCSI=y
|
||||
CONFIG_SCSI_DMA=y
|
||||
@ -462,6 +482,7 @@ CONFIG_INPUT_EVDEV=y
|
||||
CONFIG_INPUT_TOUCHSCREEN=y
|
||||
# CONFIG_TOUCHSCREEN_AD7879 is not set
|
||||
# CONFIG_TOUCHSCREEN_DYNAPRO is not set
|
||||
# CONFIG_TOUCHSCREEN_HAMPSHIRE is not set
|
||||
# CONFIG_TOUCHSCREEN_FUJITSU is not set
|
||||
# CONFIG_TOUCHSCREEN_GUNZE is not set
|
||||
# CONFIG_TOUCHSCREEN_ELO is not set
|
||||
@ -515,6 +536,9 @@ CONFIG_SERIAL_SAMSUNG_CONSOLE=y
|
||||
CONFIG_SERIAL_S5PV210=y
|
||||
CONFIG_SERIAL_CORE=y
|
||||
CONFIG_SERIAL_CORE_CONSOLE=y
|
||||
# CONFIG_SERIAL_TIMBERDALE is not set
|
||||
# CONFIG_SERIAL_ALTERA_JTAGUART is not set
|
||||
# CONFIG_SERIAL_ALTERA_UART is not set
|
||||
CONFIG_UNIX98_PTYS=y
|
||||
# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
|
||||
CONFIG_LEGACY_PTYS=y
|
||||
@ -540,6 +564,7 @@ CONFIG_GPIOLIB=y
|
||||
#
|
||||
# Memory mapped GPIO expanders:
|
||||
#
|
||||
# CONFIG_GPIO_IT8761E is not set
|
||||
|
||||
#
|
||||
# I2C GPIO expanders:
|
||||
@ -613,10 +638,6 @@ CONFIG_RTC_LIB=y
|
||||
# CONFIG_DMADEVICES is not set
|
||||
# CONFIG_AUXDISPLAY is not set
|
||||
# CONFIG_UIO is not set
|
||||
|
||||
#
|
||||
# TI VLYNQ
|
||||
#
|
||||
# CONFIG_STAGING is not set
|
||||
|
||||
#
|
||||
@ -685,6 +706,7 @@ CONFIG_MISC_FILESYSTEMS=y
|
||||
# CONFIG_BEFS_FS is not set
|
||||
# CONFIG_BFS_FS is not set
|
||||
# CONFIG_EFS_FS is not set
|
||||
# CONFIG_LOGFS is not set
|
||||
CONFIG_CRAMFS=y
|
||||
# CONFIG_SQUASHFS is not set
|
||||
# CONFIG_VXFS_FS is not set
|
||||
@ -824,6 +846,7 @@ CONFIG_HAVE_FUNCTION_TRACER=y
|
||||
CONFIG_TRACING_SUPPORT=y
|
||||
CONFIG_FTRACE=y
|
||||
# CONFIG_FUNCTION_TRACER is not set
|
||||
# CONFIG_IRQSOFF_TRACER is not set
|
||||
# CONFIG_SCHED_TRACER is not set
|
||||
# CONFIG_ENABLE_DEFAULT_TRACERS is not set
|
||||
# CONFIG_BOOT_TRACER is not set
|
||||
@ -834,6 +857,7 @@ CONFIG_BRANCH_PROFILE_NONE=y
|
||||
# CONFIG_KMEMTRACE is not set
|
||||
# CONFIG_WORKQUEUE_TRACER is not set
|
||||
# CONFIG_BLK_DEV_IO_TRACE is not set
|
||||
# CONFIG_ATOMIC64_SELFTEST is not set
|
||||
# CONFIG_SAMPLES is not set
|
||||
CONFIG_HAVE_ARCH_KGDB=y
|
||||
# CONFIG_KGDB is not set
|
||||
|
@ -1,12 +1,14 @@
|
||||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.30
|
||||
# Wed Jul 1 15:53:07 2009
|
||||
# Linux kernel version: 2.6.34
|
||||
# Wed May 26 19:04:35 2010
|
||||
#
|
||||
CONFIG_ARM=y
|
||||
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
|
||||
CONFIG_GENERIC_GPIO=y
|
||||
CONFIG_MMU=y
|
||||
CONFIG_GENERIC_TIME=y
|
||||
CONFIG_ARCH_USES_GETTIMEOFFSET=y
|
||||
CONFIG_HAVE_PROC_CPU=y
|
||||
CONFIG_NO_IOPORT=y
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_STACKTRACE_SUPPORT=y
|
||||
@ -18,7 +20,9 @@ CONFIG_GENERIC_IRQ_PROBE=y
|
||||
CONFIG_RWSEM_GENERIC_SPINLOCK=y
|
||||
CONFIG_GENERIC_HWEIGHT=y
|
||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||
CONFIG_NEED_DMA_MAP_STATE=y
|
||||
CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
|
||||
CONFIG_ARM_L1_CACHE_SHIFT_6=y
|
||||
CONFIG_VECTORS_BASE=0xffff0000
|
||||
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
|
||||
CONFIG_CONSTRUCTORS=y
|
||||
@ -31,6 +35,13 @@ CONFIG_BROKEN_ON_SMP=y
|
||||
CONFIG_INIT_ENV_ARG_LIMIT=32
|
||||
CONFIG_LOCALVERSION=""
|
||||
CONFIG_LOCALVERSION_AUTO=y
|
||||
CONFIG_HAVE_KERNEL_GZIP=y
|
||||
CONFIG_HAVE_KERNEL_LZMA=y
|
||||
CONFIG_HAVE_KERNEL_LZO=y
|
||||
CONFIG_KERNEL_GZIP=y
|
||||
# CONFIG_KERNEL_BZIP2 is not set
|
||||
# CONFIG_KERNEL_LZMA is not set
|
||||
# CONFIG_KERNEL_LZO is not set
|
||||
CONFIG_SWAP=y
|
||||
# CONFIG_SYSVIPC is not set
|
||||
# CONFIG_BSD_PROCESS_ACCT is not set
|
||||
@ -38,14 +49,15 @@ CONFIG_SWAP=y
|
||||
#
|
||||
# RCU Subsystem
|
||||
#
|
||||
CONFIG_CLASSIC_RCU=y
|
||||
# CONFIG_TREE_RCU is not set
|
||||
# CONFIG_PREEMPT_RCU is not set
|
||||
CONFIG_TREE_RCU=y
|
||||
# CONFIG_TREE_PREEMPT_RCU is not set
|
||||
# CONFIG_TINY_RCU is not set
|
||||
# CONFIG_RCU_TRACE is not set
|
||||
CONFIG_RCU_FANOUT=32
|
||||
# CONFIG_RCU_FANOUT_EXACT is not set
|
||||
# CONFIG_TREE_RCU_TRACE is not set
|
||||
# CONFIG_PREEMPT_RCU_TRACE is not set
|
||||
# CONFIG_IKCONFIG is not set
|
||||
CONFIG_LOG_BUF_SHIFT=17
|
||||
# CONFIG_GROUP_SCHED is not set
|
||||
# CONFIG_CGROUPS is not set
|
||||
CONFIG_SYSFS_DEPRECATED=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
@ -59,6 +71,7 @@ CONFIG_INITRAMFS_SOURCE=""
|
||||
CONFIG_RD_GZIP=y
|
||||
CONFIG_RD_BZIP2=y
|
||||
CONFIG_RD_LZMA=y
|
||||
CONFIG_RD_LZO=y
|
||||
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
||||
CONFIG_SYSCTL=y
|
||||
CONFIG_ANON_INODES=y
|
||||
@ -80,19 +93,21 @@ CONFIG_TIMERFD=y
|
||||
CONFIG_EVENTFD=y
|
||||
CONFIG_SHMEM=y
|
||||
CONFIG_AIO=y
|
||||
CONFIG_HAVE_PERF_EVENTS=y
|
||||
CONFIG_PERF_USE_VMALLOC=y
|
||||
|
||||
#
|
||||
# Performance Counters
|
||||
# Kernel Performance Events And Counters
|
||||
#
|
||||
# CONFIG_PERF_EVENTS is not set
|
||||
# CONFIG_PERF_COUNTERS is not set
|
||||
CONFIG_VM_EVENT_COUNTERS=y
|
||||
CONFIG_SLUB_DEBUG=y
|
||||
# CONFIG_STRIP_ASM_SYMS is not set
|
||||
CONFIG_COMPAT_BRK=y
|
||||
# CONFIG_SLAB is not set
|
||||
CONFIG_SLUB=y
|
||||
# CONFIG_SLOB is not set
|
||||
# CONFIG_PROFILING is not set
|
||||
# CONFIG_MARKERS is not set
|
||||
CONFIG_HAVE_OPROFILE=y
|
||||
# CONFIG_KPROBES is not set
|
||||
CONFIG_HAVE_KPROBES=y
|
||||
@ -122,25 +137,56 @@ CONFIG_LBDAF=y
|
||||
# IO Schedulers
|
||||
#
|
||||
CONFIG_IOSCHED_NOOP=y
|
||||
CONFIG_IOSCHED_AS=y
|
||||
CONFIG_IOSCHED_DEADLINE=y
|
||||
CONFIG_IOSCHED_CFQ=y
|
||||
# CONFIG_DEFAULT_AS is not set
|
||||
# CONFIG_DEFAULT_DEADLINE is not set
|
||||
CONFIG_DEFAULT_CFQ=y
|
||||
# CONFIG_DEFAULT_NOOP is not set
|
||||
CONFIG_DEFAULT_IOSCHED="cfq"
|
||||
# CONFIG_INLINE_SPIN_TRYLOCK is not set
|
||||
# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
|
||||
# CONFIG_INLINE_SPIN_LOCK is not set
|
||||
# CONFIG_INLINE_SPIN_LOCK_BH is not set
|
||||
# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
|
||||
# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
|
||||
# CONFIG_INLINE_SPIN_UNLOCK is not set
|
||||
# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
|
||||
# CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set
|
||||
# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
|
||||
# CONFIG_INLINE_READ_TRYLOCK is not set
|
||||
# CONFIG_INLINE_READ_LOCK is not set
|
||||
# CONFIG_INLINE_READ_LOCK_BH is not set
|
||||
# CONFIG_INLINE_READ_LOCK_IRQ is not set
|
||||
# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
|
||||
# CONFIG_INLINE_READ_UNLOCK is not set
|
||||
# CONFIG_INLINE_READ_UNLOCK_BH is not set
|
||||
# CONFIG_INLINE_READ_UNLOCK_IRQ is not set
|
||||
# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
|
||||
# CONFIG_INLINE_WRITE_TRYLOCK is not set
|
||||
# CONFIG_INLINE_WRITE_LOCK is not set
|
||||
# CONFIG_INLINE_WRITE_LOCK_BH is not set
|
||||
# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
|
||||
# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
|
||||
# CONFIG_INLINE_WRITE_UNLOCK is not set
|
||||
# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
|
||||
# CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set
|
||||
# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
|
||||
# CONFIG_MUTEX_SPIN_ON_OWNER is not set
|
||||
# CONFIG_FREEZER is not set
|
||||
|
||||
#
|
||||
# System Type
|
||||
#
|
||||
CONFIG_MMU=y
|
||||
# CONFIG_ARCH_AAEC2000 is not set
|
||||
# CONFIG_ARCH_INTEGRATOR is not set
|
||||
# CONFIG_ARCH_REALVIEW is not set
|
||||
# CONFIG_ARCH_VERSATILE is not set
|
||||
# CONFIG_ARCH_VEXPRESS is not set
|
||||
# CONFIG_ARCH_AT91 is not set
|
||||
# CONFIG_ARCH_BCMRING is not set
|
||||
# CONFIG_ARCH_CLPS711X is not set
|
||||
# CONFIG_ARCH_CNS3XXX is not set
|
||||
# CONFIG_ARCH_GEMINI is not set
|
||||
# CONFIG_ARCH_EBSA110 is not set
|
||||
# CONFIG_ARCH_EP93XX is not set
|
||||
@ -156,6 +202,7 @@ CONFIG_DEFAULT_IOSCHED="cfq"
|
||||
# CONFIG_ARCH_IXP2000 is not set
|
||||
# CONFIG_ARCH_IXP4XX is not set
|
||||
# CONFIG_ARCH_L7200 is not set
|
||||
# CONFIG_ARCH_DOVE is not set
|
||||
# CONFIG_ARCH_KIRKWOOD is not set
|
||||
# CONFIG_ARCH_LOKI is not set
|
||||
# CONFIG_ARCH_MV78XX0 is not set
|
||||
@ -164,39 +211,64 @@ CONFIG_DEFAULT_IOSCHED="cfq"
|
||||
# CONFIG_ARCH_KS8695 is not set
|
||||
# CONFIG_ARCH_NS9XXX is not set
|
||||
# CONFIG_ARCH_W90X900 is not set
|
||||
# CONFIG_ARCH_NUC93X is not set
|
||||
# CONFIG_ARCH_PNX4008 is not set
|
||||
# CONFIG_ARCH_PXA is not set
|
||||
# CONFIG_ARCH_MSM is not set
|
||||
# CONFIG_ARCH_SHMOBILE is not set
|
||||
# CONFIG_ARCH_RPC is not set
|
||||
# CONFIG_ARCH_SA1100 is not set
|
||||
# CONFIG_ARCH_S3C2410 is not set
|
||||
# CONFIG_ARCH_S3C64XX is not set
|
||||
CONFIG_ARCH_S5PC1XX=y
|
||||
# CONFIG_ARCH_S5P6440 is not set
|
||||
# CONFIG_ARCH_S5P6442 is not set
|
||||
CONFIG_ARCH_S5PC100=y
|
||||
# CONFIG_ARCH_S5PV210 is not set
|
||||
# CONFIG_ARCH_SHARK is not set
|
||||
# CONFIG_ARCH_LH7A40X is not set
|
||||
# CONFIG_ARCH_U300 is not set
|
||||
# CONFIG_ARCH_U8500 is not set
|
||||
# CONFIG_ARCH_NOMADIK is not set
|
||||
# CONFIG_ARCH_DAVINCI is not set
|
||||
# CONFIG_ARCH_OMAP is not set
|
||||
CONFIG_PLAT_S3C=y
|
||||
# CONFIG_PLAT_SPEAR is not set
|
||||
CONFIG_PLAT_SAMSUNG=y
|
||||
|
||||
#
|
||||
# Boot options
|
||||
#
|
||||
# CONFIG_S3C_BOOT_ERROR_RESET is not set
|
||||
CONFIG_S3C_BOOT_UART_FORCE_FIFO=y
|
||||
CONFIG_S3C_LOWLEVEL_UART_PORT=0
|
||||
CONFIG_SAMSUNG_CLKSRC=y
|
||||
CONFIG_SAMSUNG_IRQ_VIC_TIMER=y
|
||||
CONFIG_SAMSUNG_IRQ_UART=y
|
||||
CONFIG_SAMSUNG_GPIOLIB_4BIT=y
|
||||
CONFIG_S3C_GPIO_CFG_S3C24XX=y
|
||||
CONFIG_S3C_GPIO_CFG_S3C64XX=y
|
||||
CONFIG_S3C_GPIO_PULL_UPDOWN=y
|
||||
CONFIG_S5P_GPIO_DRVSTR=y
|
||||
CONFIG_SAMSUNG_GPIO_EXTRA=0
|
||||
CONFIG_S3C_GPIO_SPACE=0
|
||||
CONFIG_S3C_GPIO_TRACK=y
|
||||
# CONFIG_S3C_ADC is not set
|
||||
CONFIG_S3C_DEV_HSMMC=y
|
||||
CONFIG_S3C_DEV_HSMMC1=y
|
||||
CONFIG_S3C_DEV_HSMMC2=y
|
||||
CONFIG_S3C_DEV_I2C1=y
|
||||
CONFIG_S3C_DEV_FB=y
|
||||
CONFIG_S3C_PL330_DMA=y
|
||||
|
||||
#
|
||||
# Power management
|
||||
#
|
||||
CONFIG_S3C_LOWLEVEL_UART_PORT=0
|
||||
CONFIG_S3C_GPIO_SPACE=0
|
||||
CONFIG_S3C_GPIO_TRACK=y
|
||||
CONFIG_S3C_GPIO_PULL_UPDOWN=y
|
||||
CONFIG_PLAT_S5PC1XX=y
|
||||
CONFIG_CPU_S5PC100_INIT=y
|
||||
CONFIG_CPU_S5PC100_CLOCK=y
|
||||
CONFIG_S5PC100_SETUP_I2C0=y
|
||||
CONFIG_PLAT_S5P=y
|
||||
CONFIG_S5P_EXT_INT=y
|
||||
CONFIG_CPU_S5PC100=y
|
||||
CONFIG_S5PC100_SETUP_FB_24BPP=y
|
||||
CONFIG_S5PC100_SETUP_I2C1=y
|
||||
CONFIG_S5PC100_SETUP_SDHCI=y
|
||||
CONFIG_S5PC100_SETUP_SDHCI_GPIO=y
|
||||
CONFIG_MACH_SMDKC100=y
|
||||
|
||||
#
|
||||
@ -206,7 +278,7 @@ CONFIG_CPU_32v6K=y
|
||||
CONFIG_CPU_V7=y
|
||||
CONFIG_CPU_32v7=y
|
||||
CONFIG_CPU_ABRT_EV7=y
|
||||
CONFIG_CPU_PABRT_IFAR=y
|
||||
CONFIG_CPU_PABRT_V7=y
|
||||
CONFIG_CPU_CACHE_V7=y
|
||||
CONFIG_CPU_CACHE_VIPT=y
|
||||
CONFIG_CPU_COPY_V6=y
|
||||
@ -224,11 +296,15 @@ CONFIG_ARM_THUMB=y
|
||||
# CONFIG_CPU_DCACHE_DISABLE is not set
|
||||
# CONFIG_CPU_BPREDICT_DISABLE is not set
|
||||
CONFIG_HAS_TLS_REG=y
|
||||
CONFIG_ARM_L1_CACHE_SHIFT=6
|
||||
CONFIG_ARM_DMA_MEM_BUFFERABLE=y
|
||||
CONFIG_CPU_HAS_PMU=y
|
||||
# CONFIG_ARM_ERRATA_430973 is not set
|
||||
# CONFIG_ARM_ERRATA_458693 is not set
|
||||
# CONFIG_ARM_ERRATA_460075 is not set
|
||||
CONFIG_ARM_VIC=y
|
||||
CONFIG_ARM_VIC_NR=2
|
||||
CONFIG_PL330=y
|
||||
|
||||
#
|
||||
# Bus support
|
||||
@ -244,8 +320,11 @@ CONFIG_VMSPLIT_3G=y
|
||||
# CONFIG_VMSPLIT_2G is not set
|
||||
# CONFIG_VMSPLIT_1G is not set
|
||||
CONFIG_PAGE_OFFSET=0xC0000000
|
||||
CONFIG_PREEMPT_NONE=y
|
||||
# CONFIG_PREEMPT_VOLUNTARY is not set
|
||||
# CONFIG_PREEMPT is not set
|
||||
CONFIG_HZ=100
|
||||
# CONFIG_THUMB2_KERNEL is not set
|
||||
CONFIG_AEABI=y
|
||||
CONFIG_OABI_COMPAT=y
|
||||
# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
|
||||
@ -258,12 +337,11 @@ CONFIG_FLATMEM_MANUAL=y
|
||||
CONFIG_FLATMEM=y
|
||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||
CONFIG_PAGEFLAGS_EXTENDED=y
|
||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||
CONFIG_SPLIT_PTLOCK_CPUS=999999
|
||||
# CONFIG_PHYS_ADDR_T_64BIT is not set
|
||||
CONFIG_ZONE_DMA_FLAG=0
|
||||
CONFIG_VIRT_TO_BUS=y
|
||||
CONFIG_HAVE_MLOCK=y
|
||||
CONFIG_HAVE_MLOCKED_PAGE_BIT=y
|
||||
# CONFIG_KSM is not set
|
||||
CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
|
||||
CONFIG_ALIGNMENT_TRAP=y
|
||||
# CONFIG_UACCESS_WITH_MEMCPY is not set
|
||||
@ -274,6 +352,7 @@ CONFIG_ALIGNMENT_TRAP=y
|
||||
CONFIG_ZBOOT_ROM_TEXT=0
|
||||
CONFIG_ZBOOT_ROM_BSS=0
|
||||
CONFIG_CMDLINE="root=/dev/mtdblock2 rootfstype=cramfs init=/linuxrc console=ttySAC2,115200 mem=128M"
|
||||
# CONFIG_CMDLINE_FORCE is not set
|
||||
# CONFIG_XIP_KERNEL is not set
|
||||
# CONFIG_KEXEC is not set
|
||||
|
||||
@ -317,6 +396,7 @@ CONFIG_ARCH_SUSPEND_POSSIBLE=y
|
||||
# Generic Driver Options
|
||||
#
|
||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||
# CONFIG_DEVTMPFS is not set
|
||||
CONFIG_STANDALONE=y
|
||||
CONFIG_PREVENT_FIRMWARE_BUILD=y
|
||||
CONFIG_FW_LOADER=y
|
||||
@ -331,6 +411,10 @@ CONFIG_BLK_DEV=y
|
||||
# CONFIG_BLK_DEV_COW_COMMON is not set
|
||||
CONFIG_BLK_DEV_LOOP=y
|
||||
# CONFIG_BLK_DEV_CRYPTOLOOP is not set
|
||||
|
||||
#
|
||||
# DRBD disabled because PROC_FS, INET or CONNECTOR not selected
|
||||
#
|
||||
CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_BLK_DEV_RAM_COUNT=16
|
||||
CONFIG_BLK_DEV_RAM_SIZE=8192
|
||||
@ -338,9 +422,12 @@ CONFIG_BLK_DEV_RAM_SIZE=8192
|
||||
# CONFIG_CDROM_PKTCDVD is not set
|
||||
# CONFIG_MG_DISK is not set
|
||||
CONFIG_MISC_DEVICES=y
|
||||
# CONFIG_AD525X_DPOT is not set
|
||||
# CONFIG_ICS932S401 is not set
|
||||
# CONFIG_ENCLOSURE_SERVICES is not set
|
||||
# CONFIG_ISL29003 is not set
|
||||
# CONFIG_SENSORS_TSL2550 is not set
|
||||
# CONFIG_DS1682 is not set
|
||||
# CONFIG_C2PORT is not set
|
||||
|
||||
#
|
||||
@ -350,18 +437,21 @@ CONFIG_EEPROM_AT24=y
|
||||
# CONFIG_EEPROM_LEGACY is not set
|
||||
# CONFIG_EEPROM_MAX6875 is not set
|
||||
# CONFIG_EEPROM_93CX6 is not set
|
||||
# CONFIG_IWMC3200TOP is not set
|
||||
CONFIG_HAVE_IDE=y
|
||||
# CONFIG_IDE is not set
|
||||
|
||||
#
|
||||
# SCSI device support
|
||||
#
|
||||
CONFIG_SCSI_MOD=y
|
||||
# CONFIG_RAID_ATTRS is not set
|
||||
# CONFIG_SCSI is not set
|
||||
# CONFIG_SCSI_DMA is not set
|
||||
# CONFIG_SCSI_NETLINK is not set
|
||||
# CONFIG_ATA is not set
|
||||
# CONFIG_MD is not set
|
||||
# CONFIG_PHONE is not set
|
||||
|
||||
#
|
||||
# Input device support
|
||||
@ -369,6 +459,7 @@ CONFIG_HAVE_IDE=y
|
||||
CONFIG_INPUT=y
|
||||
# CONFIG_INPUT_FF_MEMLESS is not set
|
||||
# CONFIG_INPUT_POLLDEV is not set
|
||||
# CONFIG_INPUT_SPARSEKMAP is not set
|
||||
|
||||
#
|
||||
# Userland interfaces
|
||||
@ -385,13 +476,19 @@ CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
|
||||
# Input Device Drivers
|
||||
#
|
||||
CONFIG_INPUT_KEYBOARD=y
|
||||
# CONFIG_KEYBOARD_ADP5588 is not set
|
||||
CONFIG_KEYBOARD_ATKBD=y
|
||||
# CONFIG_KEYBOARD_SUNKBD is not set
|
||||
# CONFIG_QT2160 is not set
|
||||
# CONFIG_KEYBOARD_LKKBD is not set
|
||||
# CONFIG_KEYBOARD_XTKBD is not set
|
||||
# CONFIG_KEYBOARD_NEWTON is not set
|
||||
# CONFIG_KEYBOARD_STOWAWAY is not set
|
||||
# CONFIG_KEYBOARD_GPIO is not set
|
||||
# CONFIG_KEYBOARD_TCA6416 is not set
|
||||
# CONFIG_KEYBOARD_MATRIX is not set
|
||||
# CONFIG_KEYBOARD_MAX7359 is not set
|
||||
# CONFIG_KEYBOARD_NEWTON is not set
|
||||
# CONFIG_KEYBOARD_OPENCORES is not set
|
||||
# CONFIG_KEYBOARD_STOWAWAY is not set
|
||||
# CONFIG_KEYBOARD_SUNKBD is not set
|
||||
# CONFIG_KEYBOARD_XTKBD is not set
|
||||
CONFIG_INPUT_MOUSE=y
|
||||
CONFIG_MOUSE_PS2=y
|
||||
CONFIG_MOUSE_PS2_ALPS=y
|
||||
@ -399,6 +496,7 @@ CONFIG_MOUSE_PS2_LOGIPS2PP=y
|
||||
CONFIG_MOUSE_PS2_SYNAPTICS=y
|
||||
CONFIG_MOUSE_PS2_TRACKPOINT=y
|
||||
# CONFIG_MOUSE_PS2_ELANTECH is not set
|
||||
# CONFIG_MOUSE_PS2_SENTELIC is not set
|
||||
# CONFIG_MOUSE_PS2_TOUCHKIT is not set
|
||||
# CONFIG_MOUSE_SERIAL is not set
|
||||
# CONFIG_MOUSE_APPLETOUCH is not set
|
||||
@ -418,6 +516,7 @@ CONFIG_SERIO=y
|
||||
CONFIG_SERIO_SERPORT=y
|
||||
CONFIG_SERIO_LIBPS2=y
|
||||
# CONFIG_SERIO_RAW is not set
|
||||
# CONFIG_SERIO_ALTERA_PS2 is not set
|
||||
# CONFIG_GAMEPORT is not set
|
||||
|
||||
#
|
||||
@ -444,11 +543,16 @@ CONFIG_SERIAL_8250_RUNTIME_UARTS=4
|
||||
# Non-8250 serial port support
|
||||
#
|
||||
CONFIG_SERIAL_SAMSUNG=y
|
||||
CONFIG_SERIAL_SAMSUNG_UARTS=3
|
||||
CONFIG_SERIAL_SAMSUNG_UARTS_4=y
|
||||
CONFIG_SERIAL_SAMSUNG_UARTS=4
|
||||
# CONFIG_SERIAL_SAMSUNG_DEBUG is not set
|
||||
CONFIG_SERIAL_SAMSUNG_CONSOLE=y
|
||||
CONFIG_SERIAL_S3C6400=y
|
||||
CONFIG_SERIAL_CORE=y
|
||||
CONFIG_SERIAL_CORE_CONSOLE=y
|
||||
# CONFIG_SERIAL_TIMBERDALE is not set
|
||||
# CONFIG_SERIAL_ALTERA_JTAGUART is not set
|
||||
# CONFIG_SERIAL_ALTERA_UART is not set
|
||||
CONFIG_UNIX98_PTYS=y
|
||||
# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
|
||||
CONFIG_LEGACY_PTYS=y
|
||||
@ -461,6 +565,7 @@ CONFIG_HW_RANDOM=y
|
||||
# CONFIG_TCG_TPM is not set
|
||||
CONFIG_I2C=y
|
||||
CONFIG_I2C_BOARDINFO=y
|
||||
CONFIG_I2C_COMPAT=y
|
||||
CONFIG_I2C_CHARDEV=y
|
||||
CONFIG_I2C_HELPER_AUTO=y
|
||||
|
||||
@ -471,9 +576,11 @@ CONFIG_I2C_HELPER_AUTO=y
|
||||
#
|
||||
# I2C system bus drivers (mostly embedded / system-on-chip)
|
||||
#
|
||||
# CONFIG_I2C_DESIGNWARE is not set
|
||||
# CONFIG_I2C_GPIO is not set
|
||||
# CONFIG_I2C_OCORES is not set
|
||||
# CONFIG_I2C_SIMTEC is not set
|
||||
# CONFIG_I2C_XILINX is not set
|
||||
|
||||
#
|
||||
# External I2C/SMBus adapter drivers
|
||||
@ -486,20 +593,15 @@ CONFIG_I2C_HELPER_AUTO=y
|
||||
#
|
||||
# CONFIG_I2C_PCA_PLATFORM is not set
|
||||
# CONFIG_I2C_STUB is not set
|
||||
|
||||
#
|
||||
# Miscellaneous I2C Chip support
|
||||
#
|
||||
# CONFIG_DS1682 is not set
|
||||
# CONFIG_SENSORS_PCF8574 is not set
|
||||
# CONFIG_PCF8575 is not set
|
||||
# CONFIG_SENSORS_PCA9539 is not set
|
||||
# CONFIG_SENSORS_TSL2550 is not set
|
||||
# CONFIG_I2C_DEBUG_CORE is not set
|
||||
# CONFIG_I2C_DEBUG_ALGO is not set
|
||||
# CONFIG_I2C_DEBUG_BUS is not set
|
||||
# CONFIG_I2C_DEBUG_CHIP is not set
|
||||
# CONFIG_SPI is not set
|
||||
|
||||
#
|
||||
# PPS support
|
||||
#
|
||||
# CONFIG_PPS is not set
|
||||
CONFIG_ARCH_REQUIRE_GPIOLIB=y
|
||||
CONFIG_GPIOLIB=y
|
||||
# CONFIG_DEBUG_GPIO is not set
|
||||
@ -508,13 +610,16 @@ CONFIG_GPIOLIB=y
|
||||
#
|
||||
# Memory mapped GPIO expanders:
|
||||
#
|
||||
# CONFIG_GPIO_IT8761E is not set
|
||||
|
||||
#
|
||||
# I2C GPIO expanders:
|
||||
#
|
||||
# CONFIG_GPIO_MAX7300 is not set
|
||||
# CONFIG_GPIO_MAX732X is not set
|
||||
# CONFIG_GPIO_PCA953X is not set
|
||||
# CONFIG_GPIO_PCF857X is not set
|
||||
# CONFIG_GPIO_ADP5588 is not set
|
||||
|
||||
#
|
||||
# PCI GPIO expanders:
|
||||
@ -523,10 +628,19 @@ CONFIG_GPIOLIB=y
|
||||
#
|
||||
# SPI GPIO expanders:
|
||||
#
|
||||
|
||||
#
|
||||
# AC97 GPIO expanders:
|
||||
#
|
||||
# CONFIG_W1 is not set
|
||||
# CONFIG_POWER_SUPPLY is not set
|
||||
CONFIG_HWMON=y
|
||||
# CONFIG_HWMON_VID is not set
|
||||
# CONFIG_HWMON_DEBUG_CHIP is not set
|
||||
|
||||
#
|
||||
# Native drivers
|
||||
#
|
||||
# CONFIG_SENSORS_AD7414 is not set
|
||||
# CONFIG_SENSORS_AD7418 is not set
|
||||
# CONFIG_SENSORS_ADM1021 is not set
|
||||
@ -535,10 +649,11 @@ CONFIG_HWMON=y
|
||||
# CONFIG_SENSORS_ADM1029 is not set
|
||||
# CONFIG_SENSORS_ADM1031 is not set
|
||||
# CONFIG_SENSORS_ADM9240 is not set
|
||||
# CONFIG_SENSORS_ADT7411 is not set
|
||||
# CONFIG_SENSORS_ADT7462 is not set
|
||||
# CONFIG_SENSORS_ADT7470 is not set
|
||||
# CONFIG_SENSORS_ADT7473 is not set
|
||||
# CONFIG_SENSORS_ADT7475 is not set
|
||||
# CONFIG_SENSORS_ASC7621 is not set
|
||||
# CONFIG_SENSORS_ATXP1 is not set
|
||||
# CONFIG_SENSORS_DS1621 is not set
|
||||
# CONFIG_SENSORS_F71805F is not set
|
||||
@ -549,6 +664,7 @@ CONFIG_HWMON=y
|
||||
# CONFIG_SENSORS_GL520SM is not set
|
||||
# CONFIG_SENSORS_IT87 is not set
|
||||
# CONFIG_SENSORS_LM63 is not set
|
||||
# CONFIG_SENSORS_LM73 is not set
|
||||
# CONFIG_SENSORS_LM75 is not set
|
||||
# CONFIG_SENSORS_LM77 is not set
|
||||
# CONFIG_SENSORS_LM78 is not set
|
||||
@ -573,8 +689,10 @@ CONFIG_HWMON=y
|
||||
# CONFIG_SENSORS_SMSC47M192 is not set
|
||||
# CONFIG_SENSORS_SMSC47B397 is not set
|
||||
# CONFIG_SENSORS_ADS7828 is not set
|
||||
# CONFIG_SENSORS_AMC6821 is not set
|
||||
# CONFIG_SENSORS_THMC50 is not set
|
||||
# CONFIG_SENSORS_TMP401 is not set
|
||||
# CONFIG_SENSORS_TMP421 is not set
|
||||
# CONFIG_SENSORS_VT1211 is not set
|
||||
# CONFIG_SENSORS_W83781D is not set
|
||||
# CONFIG_SENSORS_W83791D is not set
|
||||
@ -584,9 +702,8 @@ CONFIG_HWMON=y
|
||||
# CONFIG_SENSORS_W83L786NG is not set
|
||||
# CONFIG_SENSORS_W83627HF is not set
|
||||
# CONFIG_SENSORS_W83627EHF is not set
|
||||
# CONFIG_HWMON_DEBUG_CHIP is not set
|
||||
# CONFIG_SENSORS_LIS3_I2C is not set
|
||||
# CONFIG_THERMAL is not set
|
||||
# CONFIG_THERMAL_HWMON is not set
|
||||
# CONFIG_WATCHDOG is not set
|
||||
CONFIG_SSB_POSSIBLE=y
|
||||
|
||||
@ -599,10 +716,12 @@ CONFIG_SSB_POSSIBLE=y
|
||||
# Multifunction device drivers
|
||||
#
|
||||
# CONFIG_MFD_CORE is not set
|
||||
# CONFIG_MFD_88PM860X is not set
|
||||
# CONFIG_MFD_SM501 is not set
|
||||
# CONFIG_MFD_ASIC3 is not set
|
||||
# CONFIG_HTC_EGPIO is not set
|
||||
# CONFIG_HTC_PASIC3 is not set
|
||||
# CONFIG_HTC_I2CPLD is not set
|
||||
# CONFIG_TPS65010 is not set
|
||||
# CONFIG_TWL4030_CORE is not set
|
||||
# CONFIG_MFD_TMIO is not set
|
||||
@ -610,10 +729,15 @@ CONFIG_SSB_POSSIBLE=y
|
||||
# CONFIG_MFD_TC6387XB is not set
|
||||
# CONFIG_MFD_TC6393XB is not set
|
||||
# CONFIG_PMIC_DA903X is not set
|
||||
# CONFIG_PMIC_ADP5520 is not set
|
||||
# CONFIG_MFD_MAX8925 is not set
|
||||
# CONFIG_MFD_WM8400 is not set
|
||||
# CONFIG_MFD_WM831X is not set
|
||||
# CONFIG_MFD_WM8350_I2C is not set
|
||||
# CONFIG_MFD_WM8994 is not set
|
||||
# CONFIG_MFD_PCF50633 is not set
|
||||
# CONFIG_AB3100_CORE is not set
|
||||
# CONFIG_REGULATOR is not set
|
||||
# CONFIG_MEDIA_SUPPORT is not set
|
||||
|
||||
#
|
||||
@ -637,7 +761,6 @@ CONFIG_DUMMY_CONSOLE=y
|
||||
# CONFIG_SOUND is not set
|
||||
CONFIG_HID_SUPPORT=y
|
||||
CONFIG_HID=y
|
||||
CONFIG_HID_DEBUG=y
|
||||
# CONFIG_HIDRAW is not set
|
||||
# CONFIG_HID_PID is not set
|
||||
|
||||
@ -680,13 +803,12 @@ CONFIG_SDIO_UART=y
|
||||
CONFIG_MMC_SDHCI=y
|
||||
# CONFIG_MMC_SDHCI_PLTFM is not set
|
||||
# CONFIG_MEMSTICK is not set
|
||||
# CONFIG_ACCESSIBILITY is not set
|
||||
# CONFIG_NEW_LEDS is not set
|
||||
# CONFIG_ACCESSIBILITY is not set
|
||||
CONFIG_RTC_LIB=y
|
||||
# CONFIG_RTC_CLASS is not set
|
||||
# CONFIG_DMADEVICES is not set
|
||||
# CONFIG_AUXDISPLAY is not set
|
||||
# CONFIG_REGULATOR is not set
|
||||
# CONFIG_UIO is not set
|
||||
# CONFIG_STAGING is not set
|
||||
|
||||
@ -710,6 +832,7 @@ CONFIG_FS_POSIX_ACL=y
|
||||
# CONFIG_XFS_FS is not set
|
||||
# CONFIG_GFS2_FS is not set
|
||||
# CONFIG_BTRFS_FS is not set
|
||||
# CONFIG_NILFS2_FS is not set
|
||||
CONFIG_FILE_LOCKING=y
|
||||
CONFIG_FSNOTIFY=y
|
||||
CONFIG_DNOTIFY=y
|
||||
@ -758,6 +881,7 @@ CONFIG_MISC_FILESYSTEMS=y
|
||||
# CONFIG_BEFS_FS is not set
|
||||
# CONFIG_BFS_FS is not set
|
||||
# CONFIG_EFS_FS is not set
|
||||
# CONFIG_LOGFS is not set
|
||||
CONFIG_CRAMFS=y
|
||||
# CONFIG_SQUASHFS is not set
|
||||
# CONFIG_VXFS_FS is not set
|
||||
@ -772,7 +896,6 @@ CONFIG_ROMFS_BACKED_BY_BLOCK=y
|
||||
CONFIG_ROMFS_ON_BLOCK=y
|
||||
# CONFIG_SYSV_FS is not set
|
||||
# CONFIG_UFS_FS is not set
|
||||
# CONFIG_NILFS2_FS is not set
|
||||
|
||||
#
|
||||
# Partition Types
|
||||
@ -789,6 +912,7 @@ CONFIG_ENABLE_WARN_DEPRECATED=y
|
||||
CONFIG_ENABLE_MUST_CHECK=y
|
||||
CONFIG_FRAME_WARN=1024
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
# CONFIG_STRIP_ASM_SYMS is not set
|
||||
# CONFIG_UNUSED_SYMBOLS is not set
|
||||
# CONFIG_DEBUG_FS is not set
|
||||
# CONFIG_HEADERS_CHECK is not set
|
||||
@ -826,11 +950,13 @@ CONFIG_DEBUG_MEMORY_INIT=y
|
||||
# CONFIG_DEBUG_LIST is not set
|
||||
# CONFIG_DEBUG_SG is not set
|
||||
# CONFIG_DEBUG_NOTIFIERS is not set
|
||||
# CONFIG_DEBUG_CREDENTIALS is not set
|
||||
# CONFIG_BOOT_PRINTK_DELAY is not set
|
||||
# CONFIG_RCU_TORTURE_TEST is not set
|
||||
# CONFIG_RCU_CPU_STALL_DETECTOR is not set
|
||||
# CONFIG_BACKTRACE_SELF_TEST is not set
|
||||
# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
|
||||
# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
|
||||
# CONFIG_FAULT_INJECTION is not set
|
||||
# CONFIG_LATENCYTOP is not set
|
||||
CONFIG_SYSCTL_SYSCALL_CHECK=y
|
||||
@ -839,6 +965,7 @@ CONFIG_HAVE_FUNCTION_TRACER=y
|
||||
CONFIG_TRACING_SUPPORT=y
|
||||
CONFIG_FTRACE=y
|
||||
# CONFIG_FUNCTION_TRACER is not set
|
||||
# CONFIG_IRQSOFF_TRACER is not set
|
||||
# CONFIG_SCHED_TRACER is not set
|
||||
# CONFIG_ENABLE_DEFAULT_TRACERS is not set
|
||||
# CONFIG_BOOT_TRACER is not set
|
||||
@ -849,6 +976,7 @@ CONFIG_BRANCH_PROFILE_NONE=y
|
||||
# CONFIG_KMEMTRACE is not set
|
||||
# CONFIG_WORKQUEUE_TRACER is not set
|
||||
# CONFIG_BLK_DEV_IO_TRACE is not set
|
||||
# CONFIG_ATOMIC64_SELFTEST is not set
|
||||
# CONFIG_SAMPLES is not set
|
||||
CONFIG_HAVE_ARCH_KGDB=y
|
||||
# CONFIG_KGDB is not set
|
||||
@ -857,8 +985,9 @@ CONFIG_DEBUG_USER=y
|
||||
CONFIG_DEBUG_ERRORS=y
|
||||
# CONFIG_DEBUG_STACK_USAGE is not set
|
||||
CONFIG_DEBUG_LL=y
|
||||
# CONFIG_EARLY_PRINTK is not set
|
||||
# CONFIG_DEBUG_ICEDCC is not set
|
||||
CONFIG_DEBUG_S3C_PORT=y
|
||||
# CONFIG_OC_ETM is not set
|
||||
CONFIG_DEBUG_S3C_UART=0
|
||||
|
||||
#
|
||||
@ -867,7 +996,11 @@ CONFIG_DEBUG_S3C_UART=0
|
||||
# CONFIG_KEYS is not set
|
||||
# CONFIG_SECURITY is not set
|
||||
# CONFIG_SECURITYFS is not set
|
||||
# CONFIG_SECURITY_FILE_CAPABILITIES is not set
|
||||
# CONFIG_DEFAULT_SECURITY_SELINUX is not set
|
||||
# CONFIG_DEFAULT_SECURITY_SMACK is not set
|
||||
# CONFIG_DEFAULT_SECURITY_TOMOYO is not set
|
||||
CONFIG_DEFAULT_SECURITY_DAC=y
|
||||
CONFIG_DEFAULT_SECURITY=""
|
||||
# CONFIG_CRYPTO is not set
|
||||
# CONFIG_BINARY_PRINTF is not set
|
||||
|
||||
@ -884,8 +1017,10 @@ CONFIG_CRC32=y
|
||||
# CONFIG_CRC7 is not set
|
||||
# CONFIG_LIBCRC32C is not set
|
||||
CONFIG_ZLIB_INFLATE=y
|
||||
CONFIG_LZO_DECOMPRESS=y
|
||||
CONFIG_DECOMPRESS_GZIP=y
|
||||
CONFIG_DECOMPRESS_BZIP2=y
|
||||
CONFIG_DECOMPRESS_LZMA=y
|
||||
CONFIG_DECOMPRESS_LZO=y
|
||||
CONFIG_HAS_IOMEM=y
|
||||
CONFIG_HAS_DMA=y
|
||||
|
@ -1,11 +1,14 @@
|
||||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.33-rc4
|
||||
# Wed Feb 24 15:36:54 2010
|
||||
# Linux kernel version: 2.6.34
|
||||
# Wed May 26 19:04:37 2010
|
||||
#
|
||||
CONFIG_ARM=y
|
||||
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
|
||||
CONFIG_GENERIC_GPIO=y
|
||||
CONFIG_GENERIC_TIME=y
|
||||
CONFIG_ARCH_USES_GETTIMEOFFSET=y
|
||||
CONFIG_HAVE_PROC_CPU=y
|
||||
CONFIG_NO_IOPORT=y
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_STACKTRACE_SUPPORT=y
|
||||
@ -17,6 +20,7 @@ CONFIG_GENERIC_IRQ_PROBE=y
|
||||
CONFIG_RWSEM_GENERIC_SPINLOCK=y
|
||||
CONFIG_GENERIC_HWEIGHT=y
|
||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||
CONFIG_NEED_DMA_MAP_STATE=y
|
||||
CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
|
||||
CONFIG_ARM_L1_CACHE_SHIFT_6=y
|
||||
CONFIG_VECTORS_BASE=0xffff0000
|
||||
@ -33,6 +37,7 @@ CONFIG_INIT_ENV_ARG_LIMIT=32
|
||||
CONFIG_LOCALVERSION=""
|
||||
CONFIG_LOCALVERSION_AUTO=y
|
||||
CONFIG_HAVE_KERNEL_GZIP=y
|
||||
CONFIG_HAVE_KERNEL_LZMA=y
|
||||
CONFIG_HAVE_KERNEL_LZO=y
|
||||
CONFIG_KERNEL_GZIP=y
|
||||
# CONFIG_KERNEL_BZIP2 is not set
|
||||
@ -54,7 +59,6 @@ CONFIG_RCU_FANOUT=32
|
||||
# CONFIG_TREE_RCU_TRACE is not set
|
||||
# CONFIG_IKCONFIG is not set
|
||||
CONFIG_LOG_BUF_SHIFT=17
|
||||
# CONFIG_GROUP_SCHED is not set
|
||||
# CONFIG_CGROUPS is not set
|
||||
CONFIG_SYSFS_DEPRECATED=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
@ -90,10 +94,14 @@ CONFIG_TIMERFD=y
|
||||
CONFIG_EVENTFD=y
|
||||
CONFIG_SHMEM=y
|
||||
CONFIG_AIO=y
|
||||
CONFIG_HAVE_PERF_EVENTS=y
|
||||
CONFIG_PERF_USE_VMALLOC=y
|
||||
|
||||
#
|
||||
# Kernel Performance Events And Counters
|
||||
#
|
||||
# CONFIG_PERF_EVENTS is not set
|
||||
# CONFIG_PERF_COUNTERS is not set
|
||||
CONFIG_VM_EVENT_COUNTERS=y
|
||||
CONFIG_SLUB_DEBUG=y
|
||||
CONFIG_COMPAT_BRK=y
|
||||
@ -175,8 +183,11 @@ CONFIG_MMU=y
|
||||
# CONFIG_ARCH_INTEGRATOR is not set
|
||||
# CONFIG_ARCH_REALVIEW is not set
|
||||
# CONFIG_ARCH_VERSATILE is not set
|
||||
# CONFIG_ARCH_VEXPRESS is not set
|
||||
# CONFIG_ARCH_AT91 is not set
|
||||
# CONFIG_ARCH_BCMRING is not set
|
||||
# CONFIG_ARCH_CLPS711X is not set
|
||||
# CONFIG_ARCH_CNS3XXX is not set
|
||||
# CONFIG_ARCH_GEMINI is not set
|
||||
# CONFIG_ARCH_EBSA110 is not set
|
||||
# CONFIG_ARCH_EP93XX is not set
|
||||
@ -185,7 +196,6 @@ CONFIG_MMU=y
|
||||
# CONFIG_ARCH_STMP3XXX is not set
|
||||
# CONFIG_ARCH_NETX is not set
|
||||
# CONFIG_ARCH_H720X is not set
|
||||
# CONFIG_ARCH_NOMADIK is not set
|
||||
# CONFIG_ARCH_IOP13XX is not set
|
||||
# CONFIG_ARCH_IOP32X is not set
|
||||
# CONFIG_ARCH_IOP33X is not set
|
||||
@ -202,24 +212,27 @@ CONFIG_MMU=y
|
||||
# CONFIG_ARCH_KS8695 is not set
|
||||
# CONFIG_ARCH_NS9XXX is not set
|
||||
# CONFIG_ARCH_W90X900 is not set
|
||||
# CONFIG_ARCH_NUC93X is not set
|
||||
# CONFIG_ARCH_PNX4008 is not set
|
||||
# CONFIG_ARCH_PXA is not set
|
||||
# CONFIG_ARCH_MSM is not set
|
||||
# CONFIG_ARCH_SHMOBILE is not set
|
||||
# CONFIG_ARCH_RPC is not set
|
||||
# CONFIG_ARCH_SA1100 is not set
|
||||
# CONFIG_ARCH_S3C2410 is not set
|
||||
# CONFIG_ARCH_S3C64XX is not set
|
||||
# CONFIG_ARCH_S5P6440 is not set
|
||||
# CONFIG_ARCH_S5P6442 is not set
|
||||
# CONFIG_ARCH_S5PC1XX is not set
|
||||
# CONFIG_ARCH_S5PC100 is not set
|
||||
CONFIG_ARCH_S5PV210=y
|
||||
# CONFIG_ARCH_SHARK is not set
|
||||
# CONFIG_ARCH_LH7A40X is not set
|
||||
# CONFIG_ARCH_U300 is not set
|
||||
# CONFIG_ARCH_U8500 is not set
|
||||
# CONFIG_ARCH_NOMADIK is not set
|
||||
# CONFIG_ARCH_DAVINCI is not set
|
||||
# CONFIG_ARCH_OMAP is not set
|
||||
# CONFIG_ARCH_BCMRING is not set
|
||||
# CONFIG_ARCH_U8500 is not set
|
||||
# CONFIG_PLAT_SPEAR is not set
|
||||
CONFIG_PLAT_SAMSUNG=y
|
||||
|
||||
#
|
||||
@ -235,16 +248,22 @@ CONFIG_SAMSUNG_GPIOLIB_4BIT=y
|
||||
CONFIG_S3C_GPIO_CFG_S3C24XX=y
|
||||
CONFIG_S3C_GPIO_CFG_S3C64XX=y
|
||||
CONFIG_S3C_GPIO_PULL_UPDOWN=y
|
||||
CONFIG_S5P_GPIO_DRVSTR=y
|
||||
CONFIG_SAMSUNG_GPIO_EXTRA=0
|
||||
CONFIG_S3C_GPIO_SPACE=0
|
||||
CONFIG_S3C_GPIO_TRACK=y
|
||||
# CONFIG_S3C_ADC is not set
|
||||
CONFIG_S3C_DEV_WDT=y
|
||||
CONFIG_S3C_PL330_DMA=y
|
||||
|
||||
#
|
||||
# Power management
|
||||
#
|
||||
CONFIG_PLAT_S5P=y
|
||||
CONFIG_S5P_EXT_INT=y
|
||||
CONFIG_CPU_S5PV210=y
|
||||
# CONFIG_MACH_AQUILA is not set
|
||||
# CONFIG_MACH_GONI is not set
|
||||
# CONFIG_MACH_SMDKV210 is not set
|
||||
CONFIG_MACH_SMDKC110=y
|
||||
|
||||
@ -274,11 +293,14 @@ CONFIG_ARM_THUMB=y
|
||||
# CONFIG_CPU_BPREDICT_DISABLE is not set
|
||||
CONFIG_HAS_TLS_REG=y
|
||||
CONFIG_ARM_L1_CACHE_SHIFT=6
|
||||
CONFIG_ARM_DMA_MEM_BUFFERABLE=y
|
||||
CONFIG_CPU_HAS_PMU=y
|
||||
# CONFIG_ARM_ERRATA_430973 is not set
|
||||
# CONFIG_ARM_ERRATA_458693 is not set
|
||||
# CONFIG_ARM_ERRATA_460075 is not set
|
||||
CONFIG_ARM_VIC=y
|
||||
CONFIG_ARM_VIC_NR=2
|
||||
CONFIG_PL330=y
|
||||
|
||||
#
|
||||
# Bus support
|
||||
@ -327,6 +349,7 @@ CONFIG_ALIGNMENT_TRAP=y
|
||||
CONFIG_ZBOOT_ROM_TEXT=0
|
||||
CONFIG_ZBOOT_ROM_BSS=0
|
||||
CONFIG_CMDLINE="root=/dev/ram0 rw ramdisk=8192 initrd=0x20800000,8M console=ttySAC1,115200 init=/linuxrc"
|
||||
# CONFIG_CMDLINE_FORCE is not set
|
||||
# CONFIG_XIP_KERNEL is not set
|
||||
# CONFIG_KEXEC is not set
|
||||
|
||||
@ -404,6 +427,7 @@ CONFIG_HAVE_IDE=y
|
||||
#
|
||||
# SCSI device support
|
||||
#
|
||||
CONFIG_SCSI_MOD=y
|
||||
# CONFIG_RAID_ATTRS is not set
|
||||
CONFIG_SCSI=y
|
||||
CONFIG_SCSI_DMA=y
|
||||
@ -472,6 +496,7 @@ CONFIG_INPUT_EVDEV=y
|
||||
CONFIG_INPUT_TOUCHSCREEN=y
|
||||
# CONFIG_TOUCHSCREEN_AD7879 is not set
|
||||
# CONFIG_TOUCHSCREEN_DYNAPRO is not set
|
||||
# CONFIG_TOUCHSCREEN_HAMPSHIRE is not set
|
||||
# CONFIG_TOUCHSCREEN_FUJITSU is not set
|
||||
# CONFIG_TOUCHSCREEN_GUNZE is not set
|
||||
# CONFIG_TOUCHSCREEN_ELO is not set
|
||||
@ -526,6 +551,9 @@ CONFIG_SERIAL_SAMSUNG_CONSOLE=y
|
||||
CONFIG_SERIAL_S5PV210=y
|
||||
CONFIG_SERIAL_CORE=y
|
||||
CONFIG_SERIAL_CORE_CONSOLE=y
|
||||
# CONFIG_SERIAL_TIMBERDALE is not set
|
||||
# CONFIG_SERIAL_ALTERA_JTAGUART is not set
|
||||
# CONFIG_SERIAL_ALTERA_UART is not set
|
||||
CONFIG_UNIX98_PTYS=y
|
||||
# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
|
||||
CONFIG_LEGACY_PTYS=y
|
||||
@ -551,6 +579,7 @@ CONFIG_GPIOLIB=y
|
||||
#
|
||||
# Memory mapped GPIO expanders:
|
||||
#
|
||||
# CONFIG_GPIO_IT8761E is not set
|
||||
|
||||
#
|
||||
# I2C GPIO expanders:
|
||||
@ -572,6 +601,7 @@ CONFIG_GPIOLIB=y
|
||||
# CONFIG_HWMON is not set
|
||||
# CONFIG_THERMAL is not set
|
||||
# CONFIG_WATCHDOG is not set
|
||||
CONFIG_HAVE_S3C2410_WATCHDOG=y
|
||||
CONFIG_SSB_POSSIBLE=y
|
||||
|
||||
#
|
||||
@ -624,10 +654,6 @@ CONFIG_RTC_LIB=y
|
||||
# CONFIG_DMADEVICES is not set
|
||||
# CONFIG_AUXDISPLAY is not set
|
||||
# CONFIG_UIO is not set
|
||||
|
||||
#
|
||||
# TI VLYNQ
|
||||
#
|
||||
# CONFIG_STAGING is not set
|
||||
|
||||
#
|
||||
@ -696,6 +722,7 @@ CONFIG_MISC_FILESYSTEMS=y
|
||||
# CONFIG_BEFS_FS is not set
|
||||
# CONFIG_BFS_FS is not set
|
||||
# CONFIG_EFS_FS is not set
|
||||
# CONFIG_LOGFS is not set
|
||||
CONFIG_CRAMFS=y
|
||||
# CONFIG_SQUASHFS is not set
|
||||
# CONFIG_VXFS_FS is not set
|
||||
@ -835,6 +862,8 @@ CONFIG_HAVE_FUNCTION_TRACER=y
|
||||
CONFIG_TRACING_SUPPORT=y
|
||||
CONFIG_FTRACE=y
|
||||
# CONFIG_FUNCTION_TRACER is not set
|
||||
# CONFIG_IRQSOFF_TRACER is not set
|
||||
# CONFIG_PREEMPT_TRACER is not set
|
||||
# CONFIG_SCHED_TRACER is not set
|
||||
# CONFIG_ENABLE_DEFAULT_TRACERS is not set
|
||||
# CONFIG_BOOT_TRACER is not set
|
||||
@ -845,6 +874,7 @@ CONFIG_BRANCH_PROFILE_NONE=y
|
||||
# CONFIG_KMEMTRACE is not set
|
||||
# CONFIG_WORKQUEUE_TRACER is not set
|
||||
# CONFIG_BLK_DEV_IO_TRACE is not set
|
||||
# CONFIG_ATOMIC64_SELFTEST is not set
|
||||
# CONFIG_SAMPLES is not set
|
||||
CONFIG_HAVE_ARCH_KGDB=y
|
||||
# CONFIG_KGDB is not set
|
||||
|
@ -1,11 +1,14 @@
|
||||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.33-rc4
|
||||
# Wed Feb 24 15:36:16 2010
|
||||
# Linux kernel version: 2.6.34
|
||||
# Wed May 26 19:04:39 2010
|
||||
#
|
||||
CONFIG_ARM=y
|
||||
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
|
||||
CONFIG_GENERIC_GPIO=y
|
||||
CONFIG_GENERIC_TIME=y
|
||||
CONFIG_ARCH_USES_GETTIMEOFFSET=y
|
||||
CONFIG_HAVE_PROC_CPU=y
|
||||
CONFIG_NO_IOPORT=y
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_STACKTRACE_SUPPORT=y
|
||||
@ -17,6 +20,7 @@ CONFIG_GENERIC_IRQ_PROBE=y
|
||||
CONFIG_RWSEM_GENERIC_SPINLOCK=y
|
||||
CONFIG_GENERIC_HWEIGHT=y
|
||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||
CONFIG_NEED_DMA_MAP_STATE=y
|
||||
CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
|
||||
CONFIG_ARM_L1_CACHE_SHIFT_6=y
|
||||
CONFIG_VECTORS_BASE=0xffff0000
|
||||
@ -33,6 +37,7 @@ CONFIG_INIT_ENV_ARG_LIMIT=32
|
||||
CONFIG_LOCALVERSION=""
|
||||
CONFIG_LOCALVERSION_AUTO=y
|
||||
CONFIG_HAVE_KERNEL_GZIP=y
|
||||
CONFIG_HAVE_KERNEL_LZMA=y
|
||||
CONFIG_HAVE_KERNEL_LZO=y
|
||||
CONFIG_KERNEL_GZIP=y
|
||||
# CONFIG_KERNEL_BZIP2 is not set
|
||||
@ -54,7 +59,6 @@ CONFIG_RCU_FANOUT=32
|
||||
# CONFIG_TREE_RCU_TRACE is not set
|
||||
# CONFIG_IKCONFIG is not set
|
||||
CONFIG_LOG_BUF_SHIFT=17
|
||||
# CONFIG_GROUP_SCHED is not set
|
||||
# CONFIG_CGROUPS is not set
|
||||
CONFIG_SYSFS_DEPRECATED=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
@ -90,10 +94,14 @@ CONFIG_TIMERFD=y
|
||||
CONFIG_EVENTFD=y
|
||||
CONFIG_SHMEM=y
|
||||
CONFIG_AIO=y
|
||||
CONFIG_HAVE_PERF_EVENTS=y
|
||||
CONFIG_PERF_USE_VMALLOC=y
|
||||
|
||||
#
|
||||
# Kernel Performance Events And Counters
|
||||
#
|
||||
# CONFIG_PERF_EVENTS is not set
|
||||
# CONFIG_PERF_COUNTERS is not set
|
||||
CONFIG_VM_EVENT_COUNTERS=y
|
||||
CONFIG_SLUB_DEBUG=y
|
||||
CONFIG_COMPAT_BRK=y
|
||||
@ -175,8 +183,11 @@ CONFIG_MMU=y
|
||||
# CONFIG_ARCH_INTEGRATOR is not set
|
||||
# CONFIG_ARCH_REALVIEW is not set
|
||||
# CONFIG_ARCH_VERSATILE is not set
|
||||
# CONFIG_ARCH_VEXPRESS is not set
|
||||
# CONFIG_ARCH_AT91 is not set
|
||||
# CONFIG_ARCH_BCMRING is not set
|
||||
# CONFIG_ARCH_CLPS711X is not set
|
||||
# CONFIG_ARCH_CNS3XXX is not set
|
||||
# CONFIG_ARCH_GEMINI is not set
|
||||
# CONFIG_ARCH_EBSA110 is not set
|
||||
# CONFIG_ARCH_EP93XX is not set
|
||||
@ -185,7 +196,6 @@ CONFIG_MMU=y
|
||||
# CONFIG_ARCH_STMP3XXX is not set
|
||||
# CONFIG_ARCH_NETX is not set
|
||||
# CONFIG_ARCH_H720X is not set
|
||||
# CONFIG_ARCH_NOMADIK is not set
|
||||
# CONFIG_ARCH_IOP13XX is not set
|
||||
# CONFIG_ARCH_IOP32X is not set
|
||||
# CONFIG_ARCH_IOP33X is not set
|
||||
@ -202,24 +212,27 @@ CONFIG_MMU=y
|
||||
# CONFIG_ARCH_KS8695 is not set
|
||||
# CONFIG_ARCH_NS9XXX is not set
|
||||
# CONFIG_ARCH_W90X900 is not set
|
||||
# CONFIG_ARCH_NUC93X is not set
|
||||
# CONFIG_ARCH_PNX4008 is not set
|
||||
# CONFIG_ARCH_PXA is not set
|
||||
# CONFIG_ARCH_MSM is not set
|
||||
# CONFIG_ARCH_SHMOBILE is not set
|
||||
# CONFIG_ARCH_RPC is not set
|
||||
# CONFIG_ARCH_SA1100 is not set
|
||||
# CONFIG_ARCH_S3C2410 is not set
|
||||
# CONFIG_ARCH_S3C64XX is not set
|
||||
# CONFIG_ARCH_S5P6440 is not set
|
||||
# CONFIG_ARCH_S5P6442 is not set
|
||||
# CONFIG_ARCH_S5PC1XX is not set
|
||||
# CONFIG_ARCH_S5PC100 is not set
|
||||
CONFIG_ARCH_S5PV210=y
|
||||
# CONFIG_ARCH_SHARK is not set
|
||||
# CONFIG_ARCH_LH7A40X is not set
|
||||
# CONFIG_ARCH_U300 is not set
|
||||
# CONFIG_ARCH_U8500 is not set
|
||||
# CONFIG_ARCH_NOMADIK is not set
|
||||
# CONFIG_ARCH_DAVINCI is not set
|
||||
# CONFIG_ARCH_OMAP is not set
|
||||
# CONFIG_ARCH_BCMRING is not set
|
||||
# CONFIG_ARCH_U8500 is not set
|
||||
# CONFIG_PLAT_SPEAR is not set
|
||||
CONFIG_PLAT_SAMSUNG=y
|
||||
|
||||
#
|
||||
@ -235,16 +248,24 @@ CONFIG_SAMSUNG_GPIOLIB_4BIT=y
|
||||
CONFIG_S3C_GPIO_CFG_S3C24XX=y
|
||||
CONFIG_S3C_GPIO_CFG_S3C64XX=y
|
||||
CONFIG_S3C_GPIO_PULL_UPDOWN=y
|
||||
CONFIG_S5P_GPIO_DRVSTR=y
|
||||
CONFIG_SAMSUNG_GPIO_EXTRA=0
|
||||
CONFIG_S3C_GPIO_SPACE=0
|
||||
CONFIG_S3C_GPIO_TRACK=y
|
||||
# CONFIG_S3C_ADC is not set
|
||||
CONFIG_S3C_DEV_WDT=y
|
||||
CONFIG_SAMSUNG_DEV_ADC=y
|
||||
CONFIG_SAMSUNG_DEV_TS=y
|
||||
CONFIG_S3C_PL330_DMA=y
|
||||
|
||||
#
|
||||
# Power management
|
||||
#
|
||||
CONFIG_PLAT_S5P=y
|
||||
CONFIG_S5P_EXT_INT=y
|
||||
CONFIG_CPU_S5PV210=y
|
||||
# CONFIG_MACH_AQUILA is not set
|
||||
# CONFIG_MACH_GONI is not set
|
||||
CONFIG_MACH_SMDKV210=y
|
||||
# CONFIG_MACH_SMDKC110 is not set
|
||||
|
||||
@ -274,11 +295,14 @@ CONFIG_ARM_THUMB=y
|
||||
# CONFIG_CPU_BPREDICT_DISABLE is not set
|
||||
CONFIG_HAS_TLS_REG=y
|
||||
CONFIG_ARM_L1_CACHE_SHIFT=6
|
||||
CONFIG_ARM_DMA_MEM_BUFFERABLE=y
|
||||
CONFIG_CPU_HAS_PMU=y
|
||||
# CONFIG_ARM_ERRATA_430973 is not set
|
||||
# CONFIG_ARM_ERRATA_458693 is not set
|
||||
# CONFIG_ARM_ERRATA_460075 is not set
|
||||
CONFIG_ARM_VIC=y
|
||||
CONFIG_ARM_VIC_NR=2
|
||||
CONFIG_PL330=y
|
||||
|
||||
#
|
||||
# Bus support
|
||||
@ -327,6 +351,7 @@ CONFIG_ALIGNMENT_TRAP=y
|
||||
CONFIG_ZBOOT_ROM_TEXT=0
|
||||
CONFIG_ZBOOT_ROM_BSS=0
|
||||
CONFIG_CMDLINE="root=/dev/ram0 rw ramdisk=8192 initrd=0x20800000,8M console=ttySAC1,115200 init=/linuxrc"
|
||||
# CONFIG_CMDLINE_FORCE is not set
|
||||
# CONFIG_XIP_KERNEL is not set
|
||||
# CONFIG_KEXEC is not set
|
||||
|
||||
@ -404,6 +429,7 @@ CONFIG_HAVE_IDE=y
|
||||
#
|
||||
# SCSI device support
|
||||
#
|
||||
CONFIG_SCSI_MOD=y
|
||||
# CONFIG_RAID_ATTRS is not set
|
||||
CONFIG_SCSI=y
|
||||
CONFIG_SCSI_DMA=y
|
||||
@ -472,7 +498,9 @@ CONFIG_INPUT_EVDEV=y
|
||||
CONFIG_INPUT_TOUCHSCREEN=y
|
||||
# CONFIG_TOUCHSCREEN_AD7879 is not set
|
||||
# CONFIG_TOUCHSCREEN_DYNAPRO is not set
|
||||
# CONFIG_TOUCHSCREEN_HAMPSHIRE is not set
|
||||
# CONFIG_TOUCHSCREEN_FUJITSU is not set
|
||||
# CONFIG_TOUCHSCREEN_S3C2410 is not set
|
||||
# CONFIG_TOUCHSCREEN_GUNZE is not set
|
||||
# CONFIG_TOUCHSCREEN_ELO is not set
|
||||
# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
|
||||
@ -526,6 +554,9 @@ CONFIG_SERIAL_SAMSUNG_CONSOLE=y
|
||||
CONFIG_SERIAL_S5PV210=y
|
||||
CONFIG_SERIAL_CORE=y
|
||||
CONFIG_SERIAL_CORE_CONSOLE=y
|
||||
# CONFIG_SERIAL_TIMBERDALE is not set
|
||||
# CONFIG_SERIAL_ALTERA_JTAGUART is not set
|
||||
# CONFIG_SERIAL_ALTERA_UART is not set
|
||||
CONFIG_UNIX98_PTYS=y
|
||||
# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
|
||||
CONFIG_LEGACY_PTYS=y
|
||||
@ -551,6 +582,7 @@ CONFIG_GPIOLIB=y
|
||||
#
|
||||
# Memory mapped GPIO expanders:
|
||||
#
|
||||
# CONFIG_GPIO_IT8761E is not set
|
||||
|
||||
#
|
||||
# I2C GPIO expanders:
|
||||
@ -572,6 +604,7 @@ CONFIG_GPIOLIB=y
|
||||
# CONFIG_HWMON is not set
|
||||
# CONFIG_THERMAL is not set
|
||||
# CONFIG_WATCHDOG is not set
|
||||
CONFIG_HAVE_S3C2410_WATCHDOG=y
|
||||
CONFIG_SSB_POSSIBLE=y
|
||||
|
||||
#
|
||||
@ -624,10 +657,6 @@ CONFIG_RTC_LIB=y
|
||||
# CONFIG_DMADEVICES is not set
|
||||
# CONFIG_AUXDISPLAY is not set
|
||||
# CONFIG_UIO is not set
|
||||
|
||||
#
|
||||
# TI VLYNQ
|
||||
#
|
||||
# CONFIG_STAGING is not set
|
||||
|
||||
#
|
||||
@ -696,6 +725,7 @@ CONFIG_MISC_FILESYSTEMS=y
|
||||
# CONFIG_BEFS_FS is not set
|
||||
# CONFIG_BFS_FS is not set
|
||||
# CONFIG_EFS_FS is not set
|
||||
# CONFIG_LOGFS is not set
|
||||
CONFIG_CRAMFS=y
|
||||
# CONFIG_SQUASHFS is not set
|
||||
# CONFIG_VXFS_FS is not set
|
||||
@ -835,6 +865,8 @@ CONFIG_HAVE_FUNCTION_TRACER=y
|
||||
CONFIG_TRACING_SUPPORT=y
|
||||
CONFIG_FTRACE=y
|
||||
# CONFIG_FUNCTION_TRACER is not set
|
||||
# CONFIG_IRQSOFF_TRACER is not set
|
||||
# CONFIG_PREEMPT_TRACER is not set
|
||||
# CONFIG_SCHED_TRACER is not set
|
||||
# CONFIG_ENABLE_DEFAULT_TRACERS is not set
|
||||
# CONFIG_BOOT_TRACER is not set
|
||||
@ -845,6 +877,7 @@ CONFIG_BRANCH_PROFILE_NONE=y
|
||||
# CONFIG_KMEMTRACE is not set
|
||||
# CONFIG_WORKQUEUE_TRACER is not set
|
||||
# CONFIG_BLK_DEV_IO_TRACE is not set
|
||||
# CONFIG_ATOMIC64_SELFTEST is not set
|
||||
# CONFIG_SAMPLES is not set
|
||||
CONFIG_HAVE_ARCH_KGDB=y
|
||||
# CONFIG_KGDB is not set
|
||||
|
@ -12,7 +12,9 @@ typedef struct {
|
||||
|
||||
#include <linux/irq_cpustat.h> /* Standard mappings for irq_cpustat_t above */
|
||||
|
||||
#if NR_IRQS > 256
|
||||
#if NR_IRQS > 512
|
||||
#define HARDIRQ_BITS 10
|
||||
#elif NR_IRQS > 256
|
||||
#define HARDIRQ_BITS 9
|
||||
#else
|
||||
#define HARDIRQ_BITS 8
|
||||
|
@ -3,9 +3,6 @@
|
||||
|
||||
#include <asm/memory.h>
|
||||
#include <asm/types.h>
|
||||
|
||||
#include <asm-generic/scatterlist.h>
|
||||
|
||||
#undef ARCH_HAS_SG_CHAIN
|
||||
|
||||
#endif /* _ASMARM_SCATTERLIST_H */
|
||||
|
@ -593,6 +593,7 @@ static int __init parse_tag_revision(const struct tag *tag)
|
||||
|
||||
__tagtable(ATAG_REVISION, parse_tag_revision);
|
||||
|
||||
#ifndef CONFIG_CMDLINE_FORCE
|
||||
static int __init parse_tag_cmdline(const struct tag *tag)
|
||||
{
|
||||
strlcpy(default_command_line, tag->u.cmdline.cmdline, COMMAND_LINE_SIZE);
|
||||
@ -600,6 +601,7 @@ static int __init parse_tag_cmdline(const struct tag *tag)
|
||||
}
|
||||
|
||||
__tagtable(ATAG_CMDLINE, parse_tag_cmdline);
|
||||
#endif /* CONFIG_CMDLINE_FORCE */
|
||||
|
||||
/*
|
||||
* Scan the tag table for this tag, and call its parse function.
|
||||
|
@ -26,6 +26,7 @@
|
||||
* http://infocenter.arm.com/help/topic/com.arm.doc.subset.swdev.abi/index.html
|
||||
*/
|
||||
|
||||
#ifndef __CHECKER__
|
||||
#if !defined (__ARM_EABI__)
|
||||
#warning Your compiler does not have EABI support.
|
||||
#warning ARM unwind is known to compile only with EABI compilers.
|
||||
@ -34,6 +35,7 @@
|
||||
#warning Your compiler is too buggy; it is known to not compile ARM unwind support.
|
||||
#warning Change compiler or disable ARM_UNWIND option.
|
||||
#endif
|
||||
#endif /* __CHECKER__ */
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
|
@ -25,7 +25,6 @@
|
||||
#include <linux/leds.h>
|
||||
#include <linux/clk.h>
|
||||
|
||||
#include <mach/hardware.h>
|
||||
#include <video/atmel_lcdc.h>
|
||||
|
||||
#include <asm/setup.h>
|
||||
|
@ -1,7 +1,6 @@
|
||||
# The standard locations for stuff on CLPS711x type processors
|
||||
zreladdr-y := 0xc0028000
|
||||
zreladdr-y := 0xc0028000
|
||||
params_phys-y := 0xc0000100
|
||||
# Should probably have some agreement on these...
|
||||
initrd_phys-$(CONFIG_ARCH_P720T) := 0xc0400000
|
||||
initrd_phys-$(CONFIG_ARCH_CDB89712) := 0x00700000
|
||||
|
||||
|
@ -17,6 +17,7 @@
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/i2c/at24.h>
|
||||
#include <linux/i2c/pca953x.h>
|
||||
#include <linux/mfd/tps6507x.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/mtd/mtd.h>
|
||||
@ -24,6 +25,8 @@
|
||||
#include <linux/mtd/partitions.h>
|
||||
#include <linux/mtd/physmap.h>
|
||||
#include <linux/regulator/machine.h>
|
||||
#include <linux/mfd/tps6507x.h>
|
||||
#include <linux/input/tps6507x-ts.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
@ -533,10 +536,24 @@ struct regulator_init_data tps65070_regulator_data[] = {
|
||||
},
|
||||
};
|
||||
|
||||
static struct touchscreen_init_data tps6507x_touchscreen_data = {
|
||||
.poll_period = 30, /* ms between touch samples */
|
||||
.min_pressure = 0x30, /* minimum pressure to trigger touch */
|
||||
.vref = 0, /* turn off vref when not using A/D */
|
||||
.vendor = 0, /* /sys/class/input/input?/id/vendor */
|
||||
.product = 65070, /* /sys/class/input/input?/id/product */
|
||||
.version = 0x100, /* /sys/class/input/input?/id/version */
|
||||
};
|
||||
|
||||
static struct tps6507x_board tps_board = {
|
||||
.tps6507x_pmic_init_data = &tps65070_regulator_data[0],
|
||||
.tps6507x_ts_init_data = &tps6507x_touchscreen_data,
|
||||
};
|
||||
|
||||
static struct i2c_board_info __initdata da850evm_tps65070_info[] = {
|
||||
{
|
||||
I2C_BOARD_INFO("tps6507x", 0x48),
|
||||
.platform_data = &tps65070_regulator_data[0],
|
||||
.platform_data = &tps_board,
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -22,6 +22,9 @@ struct davinci_mmc_config {
|
||||
|
||||
/* Version of the MMC/SD controller */
|
||||
u8 version;
|
||||
|
||||
/* Number of sg segments */
|
||||
u8 nr_sg;
|
||||
};
|
||||
void davinci_setup_mmc(int module, struct davinci_mmc_config *config);
|
||||
|
||||
|
27
arch/arm/mach-ep93xx/include/mach/ep93xx_spi.h
Normal file
27
arch/arm/mach-ep93xx/include/mach/ep93xx_spi.h
Normal file
@ -0,0 +1,27 @@
|
||||
#ifndef __ASM_MACH_EP93XX_SPI_H
|
||||
#define __ASM_MACH_EP93XX_SPI_H
|
||||
|
||||
struct spi_device;
|
||||
|
||||
/**
|
||||
* struct ep93xx_spi_info - EP93xx specific SPI descriptor
|
||||
* @num_chipselect: number of chip selects on this board, must be
|
||||
* at least one
|
||||
*/
|
||||
struct ep93xx_spi_info {
|
||||
int num_chipselect;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct ep93xx_spi_chip_ops - operation callbacks for SPI slave device
|
||||
* @setup: setup the chip select mechanism
|
||||
* @cleanup: cleanup the chip select mechanism
|
||||
* @cs_control: control the device chip select
|
||||
*/
|
||||
struct ep93xx_spi_chip_ops {
|
||||
int (*setup)(struct spi_device *spi);
|
||||
void (*cleanup)(struct spi_device *spi);
|
||||
void (*cs_control)(struct spi_device *spi, int value);
|
||||
};
|
||||
|
||||
#endif /* __ASM_MACH_EP93XX_SPI_H */
|
@ -20,9 +20,9 @@ static int __init ebsa285_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
|
||||
if (dev->vendor == PCI_VENDOR_ID_CONTAQ &&
|
||||
dev->device == PCI_DEVICE_ID_CONTAQ_82C693)
|
||||
switch (PCI_FUNC(dev->devfn)) {
|
||||
case 1: return 14;
|
||||
case 2: return 15;
|
||||
case 3: return 12;
|
||||
case 1: return 14;
|
||||
case 2: return 15;
|
||||
case 3: return 12;
|
||||
}
|
||||
|
||||
return irqmap_ebsa285[(slot + pin) & 3];
|
||||
|
@ -14,13 +14,13 @@
|
||||
*/
|
||||
|
||||
extern unsigned long h720x_gettimeoffset(void);
|
||||
extern void __init h720x_init_irq (void);
|
||||
extern void __init h720x_init_irq(void);
|
||||
extern void __init h720x_map_io(void);
|
||||
|
||||
#ifdef CONFIG_ARCH_H7202
|
||||
extern struct sys_timer h7202_timer;
|
||||
extern void __init init_hw_h7202(void);
|
||||
extern void __init h7202_init_irq (void);
|
||||
extern void __init h7202_init_irq(void);
|
||||
extern void __init h7202_init_time(void);
|
||||
#endif
|
||||
|
||||
|
@ -20,7 +20,6 @@
|
||||
#include <linux/input.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/bootmem.h>
|
||||
#include <linux/power_supply.h>
|
||||
|
||||
#include <mach/hardware.h>
|
||||
|
@ -20,7 +20,6 @@
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/bootmem.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/smsc911x.h>
|
||||
|
||||
|
@ -19,7 +19,6 @@
|
||||
#include <linux/irq.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/bootmem.h>
|
||||
#include <linux/delay.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
|
@ -109,12 +109,7 @@ DEFINE_IMX_GPT_DEVICE(4, MX27_GPT5_BASE_ADDR, MX27_INT_GPT5);
|
||||
DEFINE_IMX_GPT_DEVICE(5, MX27_GPT6_BASE_ADDR, MX27_INT_GPT6);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Watchdog:
|
||||
* - i.MX1
|
||||
* - i.MX21
|
||||
* - i.MX27
|
||||
*/
|
||||
/* Watchdog: i.MX1 has seperate driver, i.MX21 and i.MX27 are equal */
|
||||
static struct resource mxc_wdt_resources[] = {
|
||||
{
|
||||
.start = MX2x_WDOG_BASE_ADDR,
|
||||
@ -124,7 +119,7 @@ static struct resource mxc_wdt_resources[] = {
|
||||
};
|
||||
|
||||
struct platform_device mxc_wdt = {
|
||||
.name = "mxc_wdt",
|
||||
.name = "imx2-wdt",
|
||||
.id = 0,
|
||||
.num_resources = ARRAY_SIZE(mxc_wdt_resources),
|
||||
.resource = mxc_wdt_resources,
|
||||
@ -483,8 +478,8 @@ int __init mxc_register_gpios(void)
|
||||
#ifdef CONFIG_MACH_MX21
|
||||
static struct resource mx21_usbhc_resources[] = {
|
||||
{
|
||||
.start = MX21_BASE_ADDR,
|
||||
.end = MX21_BASE_ADDR + 0x1FFF,
|
||||
.start = MX21_USBOTG_BASE_ADDR,
|
||||
.end = MX21_USBOTG_BASE_ADDR + SZ_8K - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
{
|
||||
|
@ -145,6 +145,7 @@ static struct mxc_nand_platform_data pca100_nand_board_info = {
|
||||
static struct platform_device *platform_devices[] __initdata = {
|
||||
&mxc_w1_master_device,
|
||||
&mxc_fec_device,
|
||||
&mxc_wdt,
|
||||
};
|
||||
|
||||
static struct imxi2c_platform_data pca100_i2c_1_data = {
|
||||
|
@ -182,6 +182,7 @@ static struct platform_device *platform_devices[] __initdata = {
|
||||
&mxc_w1_master_device,
|
||||
&mxc_fec_device,
|
||||
&pcm038_sram_mtd_device,
|
||||
&mxc_wdt,
|
||||
};
|
||||
|
||||
/* On pcm038 there's a sram attached to CS1, we enable the chipselect here and
|
||||
|
@ -500,3 +500,18 @@ struct platform_device mx25_fb_device = {
|
||||
.coherent_dma_mask = 0xFFFFFFFF,
|
||||
},
|
||||
};
|
||||
|
||||
static struct resource mxc_wdt_resources[] = {
|
||||
{
|
||||
.start = MX25_WDOG_BASE_ADDR,
|
||||
.end = MX25_WDOG_BASE_ADDR + SZ_16K - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
};
|
||||
|
||||
struct platform_device mxc_wdt = {
|
||||
.name = "imx2-wdt",
|
||||
.id = 0,
|
||||
.num_resources = ARRAY_SIZE(mxc_wdt_resources),
|
||||
.resource = mxc_wdt_resources,
|
||||
};
|
||||
|
@ -21,3 +21,4 @@ extern struct platform_device mx25_fec_device;
|
||||
extern struct platform_device mxc_nand_device;
|
||||
extern struct platform_device mx25_rtc_device;
|
||||
extern struct platform_device mx25_fb_device;
|
||||
extern struct platform_device mxc_wdt;
|
||||
|
@ -82,6 +82,7 @@ config MACH_MX31MOBOARD
|
||||
config MACH_MX31LILLY
|
||||
bool "Support MX31 LILLY-1131 platforms (INCO startec)"
|
||||
select ARCH_MX31
|
||||
select MXC_ULPI if USB_ULPI
|
||||
help
|
||||
Include support for mx31 based LILLY1131 modules. This includes
|
||||
specific configurations for the board and its peripherals.
|
||||
|
@ -582,12 +582,50 @@ static struct resource imx_wdt_resources[] = {
|
||||
};
|
||||
|
||||
struct platform_device imx_wdt_device0 = {
|
||||
.name = "imx-wdt",
|
||||
.name = "imx2-wdt",
|
||||
.id = 0,
|
||||
.num_resources = ARRAY_SIZE(imx_wdt_resources),
|
||||
.resource = imx_wdt_resources,
|
||||
};
|
||||
|
||||
static struct resource imx_rtc_resources[] = {
|
||||
{
|
||||
.start = MX31_RTC_BASE_ADDR,
|
||||
.end = MX31_RTC_BASE_ADDR + 0x3fff,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
{
|
||||
.start = MX31_INT_RTC,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
struct platform_device imx_rtc_device0 = {
|
||||
.name = "mxc_rtc",
|
||||
.id = -1,
|
||||
.num_resources = ARRAY_SIZE(imx_rtc_resources),
|
||||
.resource = imx_rtc_resources,
|
||||
};
|
||||
|
||||
static struct resource imx_kpp_resources[] = {
|
||||
{
|
||||
.start = MX3x_KPP_BASE_ADDR,
|
||||
.end = MX3x_KPP_BASE_ADDR + 0xf,
|
||||
.flags = IORESOURCE_MEM
|
||||
}, {
|
||||
.start = MX3x_INT_KPP,
|
||||
.end = MX3x_INT_KPP,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
struct platform_device imx_kpp_device = {
|
||||
.name = "imx-keypad",
|
||||
.id = -1,
|
||||
.num_resources = ARRAY_SIZE(imx_kpp_resources),
|
||||
.resource = imx_kpp_resources,
|
||||
};
|
||||
|
||||
static int __init mx3_devices_init(void)
|
||||
{
|
||||
if (cpu_is_mx31()) {
|
||||
|
@ -27,3 +27,5 @@ extern struct platform_device imx_ssi_device0;
|
||||
extern struct platform_device imx_ssi_device1;
|
||||
extern struct platform_device imx_ssi_device1;
|
||||
extern struct platform_device imx_wdt_device0;
|
||||
extern struct platform_device imx_rtc_device0;
|
||||
extern struct platform_device imx_kpp_device;
|
||||
|
@ -16,6 +16,7 @@
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include <linux/delay.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/clk.h>
|
||||
@ -26,6 +27,8 @@
|
||||
#include <linux/mfd/mc13783.h>
|
||||
#include <linux/spi/spi.h>
|
||||
#include <linux/regulator/machine.h>
|
||||
#include <linux/fsl_devices.h>
|
||||
#include <linux/input/matrix_keypad.h>
|
||||
|
||||
#include <mach/hardware.h>
|
||||
#include <asm/mach-types.h>
|
||||
@ -65,6 +68,50 @@ static int mx31_3ds_pins[] = {
|
||||
MX31_PIN_CSPI2_SS2__SS2, /*CS for MC13783 */
|
||||
/* MC13783 IRQ */
|
||||
IOMUX_MODE(MX31_PIN_GPIO1_3, IOMUX_CONFIG_GPIO),
|
||||
/* USB OTG reset */
|
||||
IOMUX_MODE(MX31_PIN_USB_PWR, IOMUX_CONFIG_GPIO),
|
||||
/* USB OTG */
|
||||
MX31_PIN_USBOTG_DATA0__USBOTG_DATA0,
|
||||
MX31_PIN_USBOTG_DATA1__USBOTG_DATA1,
|
||||
MX31_PIN_USBOTG_DATA2__USBOTG_DATA2,
|
||||
MX31_PIN_USBOTG_DATA3__USBOTG_DATA3,
|
||||
MX31_PIN_USBOTG_DATA4__USBOTG_DATA4,
|
||||
MX31_PIN_USBOTG_DATA5__USBOTG_DATA5,
|
||||
MX31_PIN_USBOTG_DATA6__USBOTG_DATA6,
|
||||
MX31_PIN_USBOTG_DATA7__USBOTG_DATA7,
|
||||
MX31_PIN_USBOTG_CLK__USBOTG_CLK,
|
||||
MX31_PIN_USBOTG_DIR__USBOTG_DIR,
|
||||
MX31_PIN_USBOTG_NXT__USBOTG_NXT,
|
||||
MX31_PIN_USBOTG_STP__USBOTG_STP,
|
||||
/*Keyboard*/
|
||||
MX31_PIN_KEY_ROW0_KEY_ROW0,
|
||||
MX31_PIN_KEY_ROW1_KEY_ROW1,
|
||||
MX31_PIN_KEY_ROW2_KEY_ROW2,
|
||||
MX31_PIN_KEY_COL0_KEY_COL0,
|
||||
MX31_PIN_KEY_COL1_KEY_COL1,
|
||||
MX31_PIN_KEY_COL2_KEY_COL2,
|
||||
MX31_PIN_KEY_COL3_KEY_COL3,
|
||||
};
|
||||
|
||||
/*
|
||||
* Matrix keyboard
|
||||
*/
|
||||
|
||||
static const uint32_t mx31_3ds_keymap[] = {
|
||||
KEY(0, 0, KEY_UP),
|
||||
KEY(0, 1, KEY_DOWN),
|
||||
KEY(1, 0, KEY_RIGHT),
|
||||
KEY(1, 1, KEY_LEFT),
|
||||
KEY(1, 2, KEY_ENTER),
|
||||
KEY(2, 0, KEY_F6),
|
||||
KEY(2, 1, KEY_F8),
|
||||
KEY(2, 2, KEY_F9),
|
||||
KEY(2, 3, KEY_F10),
|
||||
};
|
||||
|
||||
static struct matrix_keymap_data mx31_3ds_keymap_data = {
|
||||
.keymap = mx31_3ds_keymap,
|
||||
.keymap_size = ARRAY_SIZE(mx31_3ds_keymap),
|
||||
};
|
||||
|
||||
/* Regulators */
|
||||
@ -126,6 +173,41 @@ static struct mxc_nand_platform_data imx31_3ds_nand_flash_pdata = {
|
||||
#endif
|
||||
};
|
||||
|
||||
/*
|
||||
* USB OTG
|
||||
*/
|
||||
|
||||
#define USB_PAD_CFG (PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST | PAD_CTL_HYS_CMOS | \
|
||||
PAD_CTL_ODE_CMOS | PAD_CTL_100K_PU)
|
||||
|
||||
#define USBOTG_RST_B IOMUX_TO_GPIO(MX31_PIN_USB_PWR)
|
||||
|
||||
static void mx31_3ds_usbotg_init(void)
|
||||
{
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA0, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA1, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA2, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA3, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA4, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA5, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA6, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA7, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_CLK, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DIR, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_NXT, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_STP, USB_PAD_CFG);
|
||||
|
||||
gpio_request(USBOTG_RST_B, "otgusb-reset");
|
||||
gpio_direction_output(USBOTG_RST_B, 0);
|
||||
mdelay(1);
|
||||
gpio_set_value(USBOTG_RST_B, 1);
|
||||
}
|
||||
|
||||
static struct fsl_usb2_platform_data usbotg_pdata = {
|
||||
.operating_mode = FSL_USB2_DR_DEVICE,
|
||||
.phy_mode = FSL_USB2_PHY_ULPI,
|
||||
};
|
||||
|
||||
static struct imxuart_platform_data uart_pdata = {
|
||||
.flags = IMXUART_HAVE_RTSCTS,
|
||||
};
|
||||
@ -315,6 +397,11 @@ static void __init mxc_board_init(void)
|
||||
spi_register_board_info(mx31_3ds_spi_devs,
|
||||
ARRAY_SIZE(mx31_3ds_spi_devs));
|
||||
|
||||
mxc_register_device(&imx_kpp_device, &mx31_3ds_keymap_data);
|
||||
|
||||
mx31_3ds_usbotg_init();
|
||||
mxc_register_device(&mxc_otg_udc_device, &usbotg_pdata);
|
||||
|
||||
if (!mx31_3ds_init_expio())
|
||||
platform_device_register(&smsc911x_device);
|
||||
}
|
||||
|
@ -27,12 +27,15 @@
|
||||
#include <linux/types.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/smsc911x.h>
|
||||
#include <linux/mtd/physmap.h>
|
||||
#include <linux/spi/spi.h>
|
||||
#include <linux/mfd/mc13783.h>
|
||||
#include <linux/usb/otg.h>
|
||||
#include <linux/usb/ulpi.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
@ -44,6 +47,8 @@
|
||||
#include <mach/iomux-mx3.h>
|
||||
#include <mach/board-mx31lilly.h>
|
||||
#include <mach/spi.h>
|
||||
#include <mach/mxc_ehci.h>
|
||||
#include <mach/ulpi.h>
|
||||
|
||||
#include "devices.h"
|
||||
|
||||
@ -108,6 +113,137 @@ static struct platform_device physmap_flash_device = {
|
||||
.num_resources = 1,
|
||||
};
|
||||
|
||||
/* USB */
|
||||
|
||||
#define USB_PAD_CFG (PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST | PAD_CTL_HYS_CMOS | \
|
||||
PAD_CTL_ODE_CMOS | PAD_CTL_100K_PU)
|
||||
|
||||
static int usbotg_init(struct platform_device *pdev)
|
||||
{
|
||||
unsigned int pins[] = {
|
||||
MX31_PIN_USBOTG_DATA0__USBOTG_DATA0,
|
||||
MX31_PIN_USBOTG_DATA1__USBOTG_DATA1,
|
||||
MX31_PIN_USBOTG_DATA2__USBOTG_DATA2,
|
||||
MX31_PIN_USBOTG_DATA3__USBOTG_DATA3,
|
||||
MX31_PIN_USBOTG_DATA4__USBOTG_DATA4,
|
||||
MX31_PIN_USBOTG_DATA5__USBOTG_DATA5,
|
||||
MX31_PIN_USBOTG_DATA6__USBOTG_DATA6,
|
||||
MX31_PIN_USBOTG_DATA7__USBOTG_DATA7,
|
||||
MX31_PIN_USBOTG_CLK__USBOTG_CLK,
|
||||
MX31_PIN_USBOTG_DIR__USBOTG_DIR,
|
||||
MX31_PIN_USBOTG_NXT__USBOTG_NXT,
|
||||
MX31_PIN_USBOTG_STP__USBOTG_STP,
|
||||
};
|
||||
|
||||
mxc_iomux_setup_multiple_pins(pins, ARRAY_SIZE(pins), "USB OTG");
|
||||
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA0, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA1, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA2, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA3, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA4, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA5, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA6, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA7, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_CLK, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DIR, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_NXT, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_STP, USB_PAD_CFG);
|
||||
|
||||
mxc_iomux_set_gpr(MUX_PGP_USB_4WIRE, true);
|
||||
mxc_iomux_set_gpr(MUX_PGP_USB_COMMON, true);
|
||||
|
||||
/* chip select */
|
||||
mxc_iomux_alloc_pin(IOMUX_MODE(MX31_PIN_DTR_DCE2, IOMUX_CONFIG_GPIO),
|
||||
"USBOTG_CS");
|
||||
gpio_request(IOMUX_TO_GPIO(MX31_PIN_DTR_DCE2), "USBH1 CS");
|
||||
gpio_direction_output(IOMUX_TO_GPIO(MX31_PIN_DTR_DCE2), 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int usbh1_init(struct platform_device *pdev)
|
||||
{
|
||||
int pins[] = {
|
||||
MX31_PIN_CSPI1_MOSI__USBH1_RXDM,
|
||||
MX31_PIN_CSPI1_MISO__USBH1_RXDP,
|
||||
MX31_PIN_CSPI1_SS0__USBH1_TXDM,
|
||||
MX31_PIN_CSPI1_SS1__USBH1_TXDP,
|
||||
MX31_PIN_CSPI1_SS2__USBH1_RCV,
|
||||
MX31_PIN_CSPI1_SCLK__USBH1_OEB,
|
||||
MX31_PIN_CSPI1_SPI_RDY__USBH1_FS,
|
||||
};
|
||||
|
||||
mxc_iomux_setup_multiple_pins(pins, ARRAY_SIZE(pins), "USB H1");
|
||||
|
||||
mxc_iomux_set_pad(MX31_PIN_CSPI1_MOSI, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_CSPI1_MISO, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_CSPI1_SS0, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_CSPI1_SS1, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_CSPI1_SS2, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_CSPI1_SCLK, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_CSPI1_SPI_RDY, USB_PAD_CFG);
|
||||
|
||||
mxc_iomux_set_gpr(MUX_PGP_USB_SUSPEND, true);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int usbh2_init(struct platform_device *pdev)
|
||||
{
|
||||
int pins[] = {
|
||||
MX31_PIN_USBH2_DATA0__USBH2_DATA0,
|
||||
MX31_PIN_USBH2_DATA1__USBH2_DATA1,
|
||||
MX31_PIN_USBH2_CLK__USBH2_CLK,
|
||||
MX31_PIN_USBH2_DIR__USBH2_DIR,
|
||||
MX31_PIN_USBH2_NXT__USBH2_NXT,
|
||||
MX31_PIN_USBH2_STP__USBH2_STP,
|
||||
};
|
||||
|
||||
mxc_iomux_setup_multiple_pins(pins, ARRAY_SIZE(pins), "USB H2");
|
||||
|
||||
mxc_iomux_set_pad(MX31_PIN_USBH2_CLK, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBH2_DIR, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBH2_NXT, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBH2_STP, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBH2_DATA0, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBH2_DATA1, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_SRXD6, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_STXD6, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_SFS3, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_SCK3, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_SRXD3, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_STXD3, USB_PAD_CFG);
|
||||
|
||||
mxc_iomux_set_gpr(MUX_PGP_UH2, true);
|
||||
|
||||
/* chip select */
|
||||
mxc_iomux_alloc_pin(IOMUX_MODE(MX31_PIN_DTR_DCE1, IOMUX_CONFIG_GPIO),
|
||||
"USBH2_CS");
|
||||
gpio_request(IOMUX_TO_GPIO(MX31_PIN_DTR_DCE1), "USBH2 CS");
|
||||
gpio_direction_output(IOMUX_TO_GPIO(MX31_PIN_DTR_DCE1), 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct mxc_usbh_platform_data usbotg_pdata = {
|
||||
.init = usbotg_init,
|
||||
.portsc = MXC_EHCI_MODE_ULPI | MXC_EHCI_UTMI_8BIT,
|
||||
.flags = MXC_EHCI_POWER_PINS_ENABLED,
|
||||
};
|
||||
|
||||
static struct mxc_usbh_platform_data usbh1_pdata = {
|
||||
.init = usbh1_init,
|
||||
.portsc = MXC_EHCI_MODE_UTMI | MXC_EHCI_SERIAL,
|
||||
.flags = MXC_EHCI_POWER_PINS_ENABLED | MXC_EHCI_INTERFACE_SINGLE_UNI,
|
||||
};
|
||||
|
||||
static struct mxc_usbh_platform_data usbh2_pdata = {
|
||||
.init = usbh2_init,
|
||||
.portsc = MXC_EHCI_MODE_ULPI | MXC_EHCI_UTMI_8BIT,
|
||||
.flags = MXC_EHCI_POWER_PINS_ENABLED,
|
||||
};
|
||||
|
||||
static struct platform_device *devices[] __initdata = {
|
||||
&smsc91x_device,
|
||||
&physmap_flash_device,
|
||||
@ -183,6 +319,15 @@ static void __init mx31lilly_board_init(void)
|
||||
spi_register_board_info(&mc13783_dev, 1);
|
||||
|
||||
platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||
|
||||
/* USB */
|
||||
usbotg_pdata.otg = otg_ulpi_create(&mxc_ulpi_access_ops,
|
||||
USB_OTG_DRV_VBUS | USB_OTG_DRV_VBUS_EXT);
|
||||
usbh2_pdata.otg = otg_ulpi_create(&mxc_ulpi_access_ops,
|
||||
USB_OTG_DRV_VBUS | USB_OTG_DRV_VBUS_EXT);
|
||||
|
||||
mxc_register_device(&mxc_usbh1, &usbh1_pdata);
|
||||
mxc_register_device(&mxc_usbh2, &usbh2_pdata);
|
||||
}
|
||||
|
||||
static void __init mx31lilly_timer_init(void)
|
||||
|
@ -18,7 +18,6 @@
|
||||
|
||||
#include <linux/delay.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/fsl_devices.h>
|
||||
#include <linux/gfp.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/init.h>
|
||||
@ -221,11 +220,54 @@ static struct mc13783_regulator_init_data moboard_regulators[] = {
|
||||
},
|
||||
};
|
||||
|
||||
static struct mc13783_led_platform_data moboard_led[] = {
|
||||
{
|
||||
.id = MC13783_LED_R1,
|
||||
.name = "coreboard-led-4:red",
|
||||
.max_current = 2,
|
||||
},
|
||||
{
|
||||
.id = MC13783_LED_G1,
|
||||
.name = "coreboard-led-4:green",
|
||||
.max_current = 2,
|
||||
},
|
||||
{
|
||||
.id = MC13783_LED_B1,
|
||||
.name = "coreboard-led-4:blue",
|
||||
.max_current = 2,
|
||||
},
|
||||
{
|
||||
.id = MC13783_LED_R2,
|
||||
.name = "coreboard-led-5:red",
|
||||
.max_current = 3,
|
||||
},
|
||||
{
|
||||
.id = MC13783_LED_G2,
|
||||
.name = "coreboard-led-5:green",
|
||||
.max_current = 3,
|
||||
},
|
||||
{
|
||||
.id = MC13783_LED_B2,
|
||||
.name = "coreboard-led-5:blue",
|
||||
.max_current = 3,
|
||||
},
|
||||
};
|
||||
|
||||
static struct mc13783_leds_platform_data moboard_leds = {
|
||||
.num_leds = ARRAY_SIZE(moboard_led),
|
||||
.led = moboard_led,
|
||||
.flags = MC13783_LED_SLEWLIMTC,
|
||||
.abmode = MC13783_LED_AB_DISABLED,
|
||||
.tc1_period = MC13783_LED_PERIOD_10MS,
|
||||
.tc2_period = MC13783_LED_PERIOD_10MS,
|
||||
};
|
||||
|
||||
static struct mc13783_platform_data moboard_pmic = {
|
||||
.regulators = moboard_regulators,
|
||||
.num_regulators = ARRAY_SIZE(moboard_regulators),
|
||||
.leds = &moboard_leds,
|
||||
.flags = MC13783_USE_REGULATOR | MC13783_USE_RTC |
|
||||
MC13783_USE_ADC,
|
||||
MC13783_USE_ADC | MC13783_USE_LED,
|
||||
};
|
||||
|
||||
static struct spi_board_info moboard_spi_board_info[] __initdata = {
|
||||
@ -306,84 +348,56 @@ static struct imxmmc_platform_data sdhc1_pdata = {
|
||||
* this pin is dedicated for all mx31moboard systems, so we do it here
|
||||
*/
|
||||
#define USB_RESET_B IOMUX_TO_GPIO(MX31_PIN_GPIO1_0)
|
||||
#define USB_PAD_CFG (PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST | PAD_CTL_HYS_CMOS | \
|
||||
PAD_CTL_ODE_CMOS)
|
||||
|
||||
#define OTG_EN_B IOMUX_TO_GPIO(MX31_PIN_USB_OC)
|
||||
#define USBH2_EN_B IOMUX_TO_GPIO(MX31_PIN_SCK6)
|
||||
|
||||
static void usb_xcvr_reset(void)
|
||||
{
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA0, USB_PAD_CFG | PAD_CTL_100K_PD);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA1, USB_PAD_CFG | PAD_CTL_100K_PD);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA2, USB_PAD_CFG | PAD_CTL_100K_PD);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA3, USB_PAD_CFG | PAD_CTL_100K_PD);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA4, USB_PAD_CFG | PAD_CTL_100K_PD);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA5, USB_PAD_CFG | PAD_CTL_100K_PD);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA6, USB_PAD_CFG | PAD_CTL_100K_PD);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA7, USB_PAD_CFG | PAD_CTL_100K_PD);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_CLK, USB_PAD_CFG | PAD_CTL_100K_PU);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DIR, USB_PAD_CFG | PAD_CTL_100K_PU);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_NXT, USB_PAD_CFG | PAD_CTL_100K_PU);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_STP, USB_PAD_CFG | PAD_CTL_100K_PU);
|
||||
|
||||
mxc_iomux_set_gpr(MUX_PGP_UH2, true);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBH2_CLK, USB_PAD_CFG | PAD_CTL_100K_PU);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBH2_DIR, USB_PAD_CFG | PAD_CTL_100K_PU);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBH2_NXT, USB_PAD_CFG | PAD_CTL_100K_PU);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBH2_STP, USB_PAD_CFG | PAD_CTL_100K_PU);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBH2_DATA0, USB_PAD_CFG | PAD_CTL_100K_PD);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBH2_DATA1, USB_PAD_CFG | PAD_CTL_100K_PD);
|
||||
mxc_iomux_set_pad(MX31_PIN_SRXD6, USB_PAD_CFG | PAD_CTL_100K_PD);
|
||||
mxc_iomux_set_pad(MX31_PIN_STXD6, USB_PAD_CFG | PAD_CTL_100K_PD);
|
||||
mxc_iomux_set_pad(MX31_PIN_SFS3, USB_PAD_CFG | PAD_CTL_100K_PD);
|
||||
mxc_iomux_set_pad(MX31_PIN_SCK3, USB_PAD_CFG | PAD_CTL_100K_PD);
|
||||
mxc_iomux_set_pad(MX31_PIN_SRXD3, USB_PAD_CFG | PAD_CTL_100K_PD);
|
||||
mxc_iomux_set_pad(MX31_PIN_STXD3, USB_PAD_CFG | PAD_CTL_100K_PD);
|
||||
|
||||
gpio_request(OTG_EN_B, "usb-udc-en");
|
||||
gpio_direction_output(OTG_EN_B, 0);
|
||||
gpio_request(USBH2_EN_B, "usbh2-en");
|
||||
gpio_direction_output(USBH2_EN_B, 0);
|
||||
|
||||
gpio_request(USB_RESET_B, "usb-reset");
|
||||
gpio_direction_output(USB_RESET_B, 0);
|
||||
mdelay(1);
|
||||
gpio_set_value(USB_RESET_B, 1);
|
||||
mdelay(1);
|
||||
}
|
||||
|
||||
#define USB_PAD_CFG (PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST | PAD_CTL_HYS_CMOS | \
|
||||
PAD_CTL_ODE_CMOS | PAD_CTL_100K_PU)
|
||||
|
||||
#define OTG_EN_B IOMUX_TO_GPIO(MX31_PIN_USB_OC)
|
||||
|
||||
static void moboard_usbotg_init(void)
|
||||
{
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA0, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA1, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA2, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA3, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA4, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA5, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA6, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA7, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_CLK, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_DIR, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_NXT, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBOTG_STP, USB_PAD_CFG);
|
||||
|
||||
gpio_request(OTG_EN_B, "usb-udc-en");
|
||||
gpio_direction_output(OTG_EN_B, 0);
|
||||
}
|
||||
|
||||
static struct fsl_usb2_platform_data usb_pdata = {
|
||||
.operating_mode = FSL_USB2_DR_DEVICE,
|
||||
.phy_mode = FSL_USB2_PHY_ULPI,
|
||||
};
|
||||
|
||||
#if defined(CONFIG_USB_ULPI)
|
||||
|
||||
#define USBH2_EN_B IOMUX_TO_GPIO(MX31_PIN_SCK6)
|
||||
|
||||
static int moboard_usbh2_hw_init(struct platform_device *pdev)
|
||||
{
|
||||
int ret;
|
||||
|
||||
mxc_iomux_set_gpr(MUX_PGP_UH2, true);
|
||||
|
||||
mxc_iomux_set_pad(MX31_PIN_USBH2_CLK, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBH2_DIR, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBH2_NXT, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBH2_STP, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBH2_DATA0, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_USBH2_DATA1, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_SRXD6, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_STXD6, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_SFS3, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_SCK3, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_SRXD3, USB_PAD_CFG);
|
||||
mxc_iomux_set_pad(MX31_PIN_STXD3, USB_PAD_CFG);
|
||||
|
||||
ret = gpio_request(USBH2_EN_B, "usbh2-en");
|
||||
if (ret)
|
||||
return ret;
|
||||
gpio_direction_output(USBH2_EN_B, 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int moboard_usbh2_hw_exit(struct platform_device *pdev)
|
||||
{
|
||||
gpio_free(USBH2_EN_B);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct mxc_usbh_platform_data usbh2_pdata = {
|
||||
.init = moboard_usbh2_hw_init,
|
||||
.exit = moboard_usbh2_hw_exit,
|
||||
.portsc = MXC_EHCI_MODE_ULPI | MXC_EHCI_UTMI_8BIT,
|
||||
.flags = MXC_EHCI_POWER_PINS_ENABLED,
|
||||
};
|
||||
@ -508,8 +522,6 @@ static void __init mxc_board_init(void)
|
||||
|
||||
usb_xcvr_reset();
|
||||
|
||||
moboard_usbotg_init();
|
||||
mxc_register_device(&mxc_otg_udc_device, &usb_pdata);
|
||||
moboard_usbh2_init();
|
||||
|
||||
switch (mx31moboard_baseboard) {
|
||||
@ -522,7 +534,8 @@ static void __init mxc_board_init(void)
|
||||
mx31moboard_marxbot_init();
|
||||
break;
|
||||
case MX31SMARTBOT:
|
||||
mx31moboard_smartbot_init();
|
||||
case MX31EYEBOT:
|
||||
mx31moboard_smartbot_init(mx31moboard_baseboard);
|
||||
break;
|
||||
default:
|
||||
printk(KERN_ERR "Illegal mx31moboard_baseboard type %d\n",
|
||||
|
@ -449,6 +449,7 @@ static int __init pcm037_camera_alloc_dma(const size_t buf_size)
|
||||
static struct platform_device *devices[] __initdata = {
|
||||
&pcm037_flash,
|
||||
&pcm037_sram_device,
|
||||
&imx_wdt_device0,
|
||||
&pcm037_mt9t031,
|
||||
&pcm037_mt9v022,
|
||||
};
|
||||
|
@ -150,6 +150,7 @@ static struct i2c_board_info pcm043_i2c_devices[] = {
|
||||
static struct platform_device *devices[] __initdata = {
|
||||
&pcm043_flash,
|
||||
&mxc_fec_device,
|
||||
&imx_wdt_device0,
|
||||
};
|
||||
|
||||
static struct pad_desc pcm043_pads[] = {
|
||||
|
@ -206,5 +206,6 @@ void __init mx31lite_db_init(void)
|
||||
mxc_register_device(&mxc_spi_device0, &spi0_pdata);
|
||||
platform_device_register(&litekit_led_device);
|
||||
mxc_register_device(&imx_wdt_device0, NULL);
|
||||
mxc_register_device(&imx_rtc_device0, NULL);
|
||||
}
|
||||
|
||||
|
@ -22,6 +22,7 @@
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/fsl_devices.h>
|
||||
|
||||
#include <linux/usb/otg.h>
|
||||
|
||||
@ -213,6 +214,12 @@ static int __init devboard_usbh1_init(void)
|
||||
return mxc_register_device(&mxc_usbh1, &usbh1_pdata);
|
||||
}
|
||||
|
||||
|
||||
static struct fsl_usb2_platform_data usb_pdata = {
|
||||
.operating_mode = FSL_USB2_DR_DEVICE,
|
||||
.phy_mode = FSL_USB2_PHY_ULPI,
|
||||
};
|
||||
|
||||
/*
|
||||
* system init for baseboard usage. Will be called by mx31moboard init.
|
||||
*/
|
||||
@ -229,5 +236,7 @@ void __init mx31moboard_devboard_init(void)
|
||||
|
||||
devboard_init_sel_gpios();
|
||||
|
||||
mxc_register_device(&mxc_otg_udc_device, &usb_pdata);
|
||||
|
||||
devboard_usbh1_init();
|
||||
}
|
||||
|
@ -25,6 +25,7 @@
|
||||
#include <linux/slab.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/fsl_devices.h>
|
||||
|
||||
#include <linux/usb/otg.h>
|
||||
|
||||
@ -329,6 +330,11 @@ static int __init marxbot_usbh1_init(void)
|
||||
return mxc_register_device(&mxc_usbh1, &usbh1_pdata);
|
||||
}
|
||||
|
||||
static struct fsl_usb2_platform_data usb_pdata = {
|
||||
.operating_mode = FSL_USB2_DR_DEVICE,
|
||||
.phy_mode = FSL_USB2_PHY_ULPI,
|
||||
};
|
||||
|
||||
/*
|
||||
* system init for baseboard usage. Will be called by mx31moboard init.
|
||||
*/
|
||||
@ -356,5 +362,7 @@ void __init mx31moboard_marxbot_init(void)
|
||||
gpio_direction_input(IOMUX_TO_GPIO(MX31_PIN_LCS0));
|
||||
gpio_export(IOMUX_TO_GPIO(MX31_PIN_LCS0), false);
|
||||
|
||||
mxc_register_device(&mxc_otg_udc_device, &usb_pdata);
|
||||
|
||||
marxbot_usbh1_init();
|
||||
}
|
||||
|
@ -23,11 +23,18 @@
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/fsl_devices.h>
|
||||
|
||||
#include <linux/usb/otg.h>
|
||||
#include <linux/usb/ulpi.h>
|
||||
|
||||
#include <mach/common.h>
|
||||
#include <mach/hardware.h>
|
||||
#include <mach/imx-uart.h>
|
||||
#include <mach/iomux-mx3.h>
|
||||
#include <mach/board-mx31moboard.h>
|
||||
#include <mach/mxc_ehci.h>
|
||||
#include <mach/ulpi.h>
|
||||
|
||||
#include <media/soc_camera.h>
|
||||
|
||||
@ -116,10 +123,33 @@ static int __init smartbot_cam_init(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct fsl_usb2_platform_data usb_pdata = {
|
||||
.operating_mode = FSL_USB2_DR_DEVICE,
|
||||
.phy_mode = FSL_USB2_PHY_ULPI,
|
||||
};
|
||||
|
||||
#if defined(CONFIG_USB_ULPI)
|
||||
|
||||
static struct mxc_usbh_platform_data otg_host_pdata = {
|
||||
.portsc = MXC_EHCI_MODE_ULPI | MXC_EHCI_UTMI_8BIT,
|
||||
.flags = MXC_EHCI_POWER_PINS_ENABLED,
|
||||
};
|
||||
|
||||
static int __init smartbot_otg_host_init(void)
|
||||
{
|
||||
otg_host_pdata.otg = otg_ulpi_create(&mxc_ulpi_access_ops,
|
||||
USB_OTG_DRV_VBUS | USB_OTG_DRV_VBUS_EXT);
|
||||
|
||||
return mxc_register_device(&mxc_otg_host, &otg_host_pdata);
|
||||
}
|
||||
#else
|
||||
static inline int smartbot_otg_host_init(void) { return 0; }
|
||||
#endif
|
||||
|
||||
#define POWER_EN IOMUX_TO_GPIO(MX31_PIN_DTR_DCE1)
|
||||
#define DSPIC_RST_B IOMUX_TO_GPIO(MX31_PIN_DSR_DCE1)
|
||||
#define TRSLAT_RST_B IOMUX_TO_GPIO(MX31_PIN_RI_DCE1)
|
||||
#define SEL3 IOMUX_TO_GPIO(MX31_PIN_DCD_DCE1)
|
||||
#define TRSLAT_SRC_CHOICE IOMUX_TO_GPIO(MX31_PIN_DCD_DCE1)
|
||||
|
||||
static void smartbot_resets_init(void)
|
||||
{
|
||||
@ -138,15 +168,15 @@ static void smartbot_resets_init(void)
|
||||
gpio_export(TRSLAT_RST_B, false);
|
||||
}
|
||||
|
||||
if (!gpio_request(SEL3, "sel3")) {
|
||||
gpio_direction_input(SEL3);
|
||||
gpio_export(SEL3, true);
|
||||
if (!gpio_request(TRSLAT_SRC_CHOICE, "translator-src-choice")) {
|
||||
gpio_direction_output(TRSLAT_SRC_CHOICE, 0);
|
||||
gpio_export(TRSLAT_SRC_CHOICE, false);
|
||||
}
|
||||
}
|
||||
/*
|
||||
* system init for baseboard usage. Will be called by mx31moboard init.
|
||||
*/
|
||||
void __init mx31moboard_smartbot_init(void)
|
||||
void __init mx31moboard_smartbot_init(int board)
|
||||
{
|
||||
printk(KERN_INFO "Initializing mx31smartbot peripherals\n");
|
||||
|
||||
@ -155,6 +185,19 @@ void __init mx31moboard_smartbot_init(void)
|
||||
|
||||
mxc_register_device(&mxc_uart_device1, &uart_pdata);
|
||||
|
||||
|
||||
switch (board) {
|
||||
case MX31SMARTBOT:
|
||||
mxc_register_device(&mxc_otg_udc_device, &usb_pdata);
|
||||
break;
|
||||
case MX31EYEBOT:
|
||||
smartbot_otg_host_init();
|
||||
break;
|
||||
default:
|
||||
printk(KERN_WARNING "Unknown board %d, USB OTG not initialized",
|
||||
board);
|
||||
}
|
||||
|
||||
smartbot_resets_init();
|
||||
|
||||
smartbot_cam_init();
|
||||
|
@ -12,11 +12,16 @@
|
||||
|
||||
#include <linux/init.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/fsl_devices.h>
|
||||
|
||||
#include <mach/common.h>
|
||||
#include <mach/hardware.h>
|
||||
#include <mach/imx-uart.h>
|
||||
#include <mach/iomux-mx51.h>
|
||||
#include <mach/mxc_ehci.h>
|
||||
|
||||
#include <asm/irq.h>
|
||||
#include <asm/setup.h>
|
||||
@ -26,6 +31,18 @@
|
||||
|
||||
#include "devices.h"
|
||||
|
||||
#define BABBAGE_USB_HUB_RESET (0*32 + 7) /* GPIO_1_7 */
|
||||
#define BABBAGE_USBH1_STP (0*32 + 27) /* GPIO_1_27 */
|
||||
#define BABBAGE_PHY_RESET (1*32 +5) /* GPIO_2_5 */
|
||||
|
||||
/* USB_CTRL_1 */
|
||||
#define MX51_USB_CTRL_1_OFFSET 0x10
|
||||
#define MX51_USB_CTRL_UH1_EXT_CLK_EN (1 << 25)
|
||||
|
||||
#define MX51_USB_PLLDIV_12_MHZ 0x00
|
||||
#define MX51_USB_PLL_DIV_19_2_MHZ 0x01
|
||||
#define MX51_USB_PLL_DIV_24_MHZ 0x02
|
||||
|
||||
static struct platform_device *devices[] __initdata = {
|
||||
&mxc_fec_device,
|
||||
};
|
||||
@ -46,6 +63,22 @@ static struct pad_desc mx51babbage_pads[] = {
|
||||
MX51_PAD_EIM_D26__UART3_TXD,
|
||||
MX51_PAD_EIM_D27__UART3_RTS,
|
||||
MX51_PAD_EIM_D24__UART3_CTS,
|
||||
|
||||
/* USB HOST1 */
|
||||
MX51_PAD_USBH1_CLK__USBH1_CLK,
|
||||
MX51_PAD_USBH1_DIR__USBH1_DIR,
|
||||
MX51_PAD_USBH1_NXT__USBH1_NXT,
|
||||
MX51_PAD_USBH1_DATA0__USBH1_DATA0,
|
||||
MX51_PAD_USBH1_DATA1__USBH1_DATA1,
|
||||
MX51_PAD_USBH1_DATA2__USBH1_DATA2,
|
||||
MX51_PAD_USBH1_DATA3__USBH1_DATA3,
|
||||
MX51_PAD_USBH1_DATA4__USBH1_DATA4,
|
||||
MX51_PAD_USBH1_DATA5__USBH1_DATA5,
|
||||
MX51_PAD_USBH1_DATA6__USBH1_DATA6,
|
||||
MX51_PAD_USBH1_DATA7__USBH1_DATA7,
|
||||
|
||||
/* USB HUB reset line*/
|
||||
MX51_PAD_GPIO_1_7__GPIO1_7,
|
||||
};
|
||||
|
||||
/* Serial ports */
|
||||
@ -66,15 +99,149 @@ static inline void mxc_init_imx_uart(void)
|
||||
}
|
||||
#endif /* SERIAL_IMX */
|
||||
|
||||
static int gpio_usbh1_active(void)
|
||||
{
|
||||
struct pad_desc usbh1stp_gpio = MX51_PAD_USBH1_STP__GPIO_1_27;
|
||||
struct pad_desc phyreset_gpio = MX51_PAD_EIM_D21__GPIO_2_5;
|
||||
int ret;
|
||||
|
||||
/* Set USBH1_STP to GPIO and toggle it */
|
||||
mxc_iomux_v3_setup_pad(&usbh1stp_gpio);
|
||||
ret = gpio_request(BABBAGE_USBH1_STP, "usbh1_stp");
|
||||
|
||||
if (ret) {
|
||||
pr_debug("failed to get MX51_PAD_USBH1_STP__GPIO_1_27: %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
gpio_direction_output(BABBAGE_USBH1_STP, 0);
|
||||
gpio_set_value(BABBAGE_USBH1_STP, 1);
|
||||
msleep(100);
|
||||
gpio_free(BABBAGE_USBH1_STP);
|
||||
|
||||
/* De-assert USB PHY RESETB */
|
||||
mxc_iomux_v3_setup_pad(&phyreset_gpio);
|
||||
ret = gpio_request(BABBAGE_PHY_RESET, "phy_reset");
|
||||
|
||||
if (ret) {
|
||||
pr_debug("failed to get MX51_PAD_EIM_D21__GPIO_2_5: %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
gpio_direction_output(BABBAGE_PHY_RESET, 1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void babbage_usbhub_reset(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
/* Bring USB hub out of reset */
|
||||
ret = gpio_request(BABBAGE_USB_HUB_RESET, "GPIO1_7");
|
||||
if (ret) {
|
||||
printk(KERN_ERR"failed to get GPIO_USB_HUB_RESET: %d\n", ret);
|
||||
return;
|
||||
}
|
||||
gpio_direction_output(BABBAGE_USB_HUB_RESET, 0);
|
||||
|
||||
/* USB HUB RESET - De-assert USB HUB RESET_N */
|
||||
msleep(1);
|
||||
gpio_set_value(BABBAGE_USB_HUB_RESET, 0);
|
||||
msleep(1);
|
||||
gpio_set_value(BABBAGE_USB_HUB_RESET, 1);
|
||||
}
|
||||
|
||||
/* This function is board specific as the bit mask for the plldiv will also
|
||||
be different for other Freescale SoCs, thus a common bitmask is not
|
||||
possible and cannot get place in /plat-mxc/ehci.c.*/
|
||||
static int initialize_otg_port(struct platform_device *pdev)
|
||||
{
|
||||
u32 v;
|
||||
void __iomem *usb_base;
|
||||
u32 usbother_base;
|
||||
|
||||
usb_base = ioremap(MX51_OTG_BASE_ADDR, SZ_4K);
|
||||
usbother_base = usb_base + MX5_USBOTHER_REGS_OFFSET;
|
||||
|
||||
/* Set the PHY clock to 19.2MHz */
|
||||
v = __raw_readl(usbother_base + MXC_USB_PHY_CTR_FUNC2_OFFSET);
|
||||
v &= ~MX5_USB_UTMI_PHYCTRL1_PLLDIV_MASK;
|
||||
v |= MX51_USB_PLL_DIV_19_2_MHZ;
|
||||
__raw_writel(v, usbother_base + MXC_USB_PHY_CTR_FUNC2_OFFSET);
|
||||
iounmap(usb_base);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int initialize_usbh1_port(struct platform_device *pdev)
|
||||
{
|
||||
u32 v;
|
||||
void __iomem *usb_base;
|
||||
u32 usbother_base;
|
||||
|
||||
usb_base = ioremap(MX51_OTG_BASE_ADDR, SZ_4K);
|
||||
usbother_base = usb_base + MX5_USBOTHER_REGS_OFFSET;
|
||||
|
||||
/* The clock for the USBH1 ULPI port will come externally from the PHY. */
|
||||
v = __raw_readl(usbother_base + MX51_USB_CTRL_1_OFFSET);
|
||||
__raw_writel(v | MX51_USB_CTRL_UH1_EXT_CLK_EN, usbother_base + MX51_USB_CTRL_1_OFFSET);
|
||||
iounmap(usb_base);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct mxc_usbh_platform_data dr_utmi_config = {
|
||||
.init = initialize_otg_port,
|
||||
.portsc = MXC_EHCI_UTMI_16BIT,
|
||||
.flags = MXC_EHCI_INTERNAL_PHY,
|
||||
};
|
||||
|
||||
static struct fsl_usb2_platform_data usb_pdata = {
|
||||
.operating_mode = FSL_USB2_DR_DEVICE,
|
||||
.phy_mode = FSL_USB2_PHY_UTMI_WIDE,
|
||||
};
|
||||
|
||||
static struct mxc_usbh_platform_data usbh1_config = {
|
||||
.init = initialize_usbh1_port,
|
||||
.portsc = MXC_EHCI_MODE_ULPI,
|
||||
.flags = (MXC_EHCI_POWER_PINS_ENABLED | MXC_EHCI_ITC_NO_THRESHOLD),
|
||||
};
|
||||
|
||||
static int otg_mode_host;
|
||||
|
||||
static int __init babbage_otg_mode(char *options)
|
||||
{
|
||||
if (!strcmp(options, "host"))
|
||||
otg_mode_host = 1;
|
||||
else if (!strcmp(options, "device"))
|
||||
otg_mode_host = 0;
|
||||
else
|
||||
pr_info("otg_mode neither \"host\" nor \"device\". "
|
||||
"Defaulting to device\n");
|
||||
return 0;
|
||||
}
|
||||
__setup("otg_mode=", babbage_otg_mode);
|
||||
|
||||
/*
|
||||
* Board specific initialization.
|
||||
*/
|
||||
static void __init mxc_board_init(void)
|
||||
{
|
||||
struct pad_desc usbh1stp = MX51_PAD_USBH1_STP__USBH1_STP;
|
||||
|
||||
mxc_iomux_v3_setup_multiple_pads(mx51babbage_pads,
|
||||
ARRAY_SIZE(mx51babbage_pads));
|
||||
mxc_init_imx_uart();
|
||||
platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||
|
||||
if (otg_mode_host)
|
||||
mxc_register_device(&mxc_usbdr_host_device, &dr_utmi_config);
|
||||
else {
|
||||
initialize_otg_port(NULL);
|
||||
mxc_register_device(&mxc_usbdr_udc_device, &usb_pdata);
|
||||
}
|
||||
|
||||
gpio_usbh1_active();
|
||||
mxc_register_device(&mxc_usbh1_device, &usbh1_config);
|
||||
/* setback USBH1_STP to be function */
|
||||
mxc_iomux_v3_setup_pad(&usbh1stp);
|
||||
babbage_usbhub_reset();
|
||||
}
|
||||
|
||||
static void __init mx51_babbage_timer_init(void)
|
||||
|
@ -37,6 +37,7 @@ static struct clk lp_apm_clk;
|
||||
static struct clk periph_apm_clk;
|
||||
static struct clk ahb_clk;
|
||||
static struct clk ipg_clk;
|
||||
static struct clk usboh3_clk;
|
||||
|
||||
#define MAX_DPLL_WAIT_TRIES 1000 /* 1000 * udelay(1) = 1ms */
|
||||
|
||||
@ -570,6 +571,35 @@ static int _clk_uart_set_parent(struct clk *clk, struct clk *parent)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static unsigned long clk_usboh3_get_rate(struct clk *clk)
|
||||
{
|
||||
u32 reg, prediv, podf;
|
||||
unsigned long parent_rate;
|
||||
|
||||
parent_rate = clk_get_rate(clk->parent);
|
||||
|
||||
reg = __raw_readl(MXC_CCM_CSCDR1);
|
||||
prediv = ((reg & MXC_CCM_CSCDR1_USBOH3_CLK_PRED_MASK) >>
|
||||
MXC_CCM_CSCDR1_USBOH3_CLK_PRED_OFFSET) + 1;
|
||||
podf = ((reg & MXC_CCM_CSCDR1_USBOH3_CLK_PODF_MASK) >>
|
||||
MXC_CCM_CSCDR1_USBOH3_CLK_PODF_OFFSET) + 1;
|
||||
|
||||
return parent_rate / (prediv * podf);
|
||||
}
|
||||
|
||||
static int _clk_usboh3_set_parent(struct clk *clk, struct clk *parent)
|
||||
{
|
||||
u32 reg, mux;
|
||||
|
||||
mux = _get_mux(parent, &pll1_sw_clk, &pll2_sw_clk, &pll3_sw_clk,
|
||||
&lp_apm_clk);
|
||||
reg = __raw_readl(MXC_CCM_CSCMR1) & ~MXC_CCM_CSCMR1_USBOH3_CLK_SEL_MASK;
|
||||
reg |= mux << MXC_CCM_CSCMR1_USBOH3_CLK_SEL_OFFSET;
|
||||
__raw_writel(reg, MXC_CCM_CSCMR1);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static unsigned long get_high_reference_clock_rate(struct clk *clk)
|
||||
{
|
||||
return external_high_reference;
|
||||
@ -691,6 +721,12 @@ static struct clk uart_root_clk = {
|
||||
.set_parent = _clk_uart_set_parent,
|
||||
};
|
||||
|
||||
static struct clk usboh3_clk = {
|
||||
.parent = &pll2_sw_clk,
|
||||
.get_rate = clk_usboh3_get_rate,
|
||||
.set_parent = _clk_usboh3_set_parent,
|
||||
};
|
||||
|
||||
static struct clk ahb_max_clk = {
|
||||
.parent = &ahb_clk,
|
||||
.enable_reg = MXC_CCM_CCGR0,
|
||||
@ -779,6 +815,12 @@ static struct clk_lookup lookups[] = {
|
||||
_REGISTER_CLOCK("imx-uart.2", NULL, uart3_clk)
|
||||
_REGISTER_CLOCK(NULL, "gpt", gpt_clk)
|
||||
_REGISTER_CLOCK("fec.0", NULL, fec_clk)
|
||||
_REGISTER_CLOCK("mxc-ehci.0", "usb", usboh3_clk)
|
||||
_REGISTER_CLOCK("mxc-ehci.0", "usb_ahb", ahb_clk)
|
||||
_REGISTER_CLOCK("mxc-ehci.1", "usb", usboh3_clk)
|
||||
_REGISTER_CLOCK("mxc-ehci.1", "usb_ahb", ahb_clk)
|
||||
_REGISTER_CLOCK("fsl-usb2-udc", "usb", usboh3_clk)
|
||||
_REGISTER_CLOCK("fsl-usb2-udc", "usb_ahb", ahb_clk)
|
||||
};
|
||||
|
||||
static void clk_tree_init(void)
|
||||
@ -819,6 +861,9 @@ int __init mx51_clocks_init(unsigned long ckil, unsigned long osc,
|
||||
clk_enable(&cpu_clk);
|
||||
clk_enable(&main_bus_clk);
|
||||
|
||||
/* set the usboh3_clk parent to pll2_sw_clk */
|
||||
clk_set_parent(&usboh3_clk, &pll2_sw_clk);
|
||||
|
||||
/* System timer */
|
||||
mxc_timer_init(&gpt_clk, MX51_IO_ADDRESS(MX51_GPT1_BASE_ADDR),
|
||||
MX51_MXC_INT_GPT);
|
||||
|
@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Copyright 2009 Amit Kucheria <amit.kucheria@canonical.com>
|
||||
* Copyright (C) 2010 Freescale Semiconductor, Inc.
|
||||
*
|
||||
* The code contained herein is licensed under the GNU General Public
|
||||
* License. You may obtain a copy of the GNU General Public License
|
||||
@ -10,8 +11,11 @@
|
||||
*/
|
||||
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <mach/hardware.h>
|
||||
#include <mach/imx-uart.h>
|
||||
#include <mach/irqs.h>
|
||||
|
||||
static struct resource uart0[] = {
|
||||
{
|
||||
@ -89,8 +93,109 @@ struct platform_device mxc_fec_device = {
|
||||
.resource = mxc_fec_resources,
|
||||
};
|
||||
|
||||
/* Dummy definition to allow compiling in AVIC and TZIC simultaneously */
|
||||
static u64 usb_dma_mask = DMA_BIT_MASK(32);
|
||||
|
||||
static struct resource usbotg_resources[] = {
|
||||
{
|
||||
.start = MX51_OTG_BASE_ADDR,
|
||||
.end = MX51_OTG_BASE_ADDR + 0x1ff,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
{
|
||||
.start = MX51_MXC_INT_USB_OTG,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
/* OTG gadget device */
|
||||
struct platform_device mxc_usbdr_udc_device = {
|
||||
.name = "fsl-usb2-udc",
|
||||
.id = -1,
|
||||
.num_resources = ARRAY_SIZE(usbotg_resources),
|
||||
.resource = usbotg_resources,
|
||||
.dev = {
|
||||
.dma_mask = &usb_dma_mask,
|
||||
.coherent_dma_mask = DMA_BIT_MASK(32),
|
||||
},
|
||||
};
|
||||
|
||||
struct platform_device mxc_usbdr_host_device = {
|
||||
.name = "mxc-ehci",
|
||||
.id = 0,
|
||||
.num_resources = ARRAY_SIZE(usbotg_resources),
|
||||
.resource = usbotg_resources,
|
||||
.dev = {
|
||||
.dma_mask = &usb_dma_mask,
|
||||
.coherent_dma_mask = DMA_BIT_MASK(32),
|
||||
},
|
||||
};
|
||||
|
||||
static struct resource usbh1_resources[] = {
|
||||
{
|
||||
.start = MX51_OTG_BASE_ADDR + 0x200,
|
||||
.end = MX51_OTG_BASE_ADDR + 0x200 + 0x1ff,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
{
|
||||
.start = MX51_MXC_INT_USB_H1,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
struct platform_device mxc_usbh1_device = {
|
||||
.name = "mxc-ehci",
|
||||
.id = 1,
|
||||
.num_resources = ARRAY_SIZE(usbh1_resources),
|
||||
.resource = usbh1_resources,
|
||||
.dev = {
|
||||
.dma_mask = &usb_dma_mask,
|
||||
.coherent_dma_mask = DMA_BIT_MASK(32),
|
||||
},
|
||||
};
|
||||
|
||||
static struct resource mxc_wdt_resources[] = {
|
||||
{
|
||||
.start = MX51_WDOG_BASE_ADDR,
|
||||
.end = MX51_WDOG_BASE_ADDR + SZ_16K - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
};
|
||||
|
||||
struct platform_device mxc_wdt = {
|
||||
.name = "imx2-wdt",
|
||||
.id = 0,
|
||||
.num_resources = ARRAY_SIZE(mxc_wdt_resources),
|
||||
.resource = mxc_wdt_resources,
|
||||
};
|
||||
|
||||
static struct mxc_gpio_port mxc_gpio_ports[] = {
|
||||
{
|
||||
.chip.label = "gpio-0",
|
||||
.base = MX51_IO_ADDRESS(MX51_GPIO1_BASE_ADDR),
|
||||
.irq = MX51_MXC_INT_GPIO1_LOW,
|
||||
.virtual_irq_start = MXC_GPIO_IRQ_START
|
||||
},
|
||||
{
|
||||
.chip.label = "gpio-1",
|
||||
.base = MX51_IO_ADDRESS(MX51_GPIO2_BASE_ADDR),
|
||||
.irq = MX51_MXC_INT_GPIO2_LOW,
|
||||
.virtual_irq_start = MXC_GPIO_IRQ_START + 32 * 1
|
||||
},
|
||||
{
|
||||
.chip.label = "gpio-2",
|
||||
.base = MX51_IO_ADDRESS(MX51_GPIO3_BASE_ADDR),
|
||||
.irq = MX51_MXC_INT_GPIO3_LOW,
|
||||
.virtual_irq_start = MXC_GPIO_IRQ_START + 32 * 2
|
||||
},
|
||||
{
|
||||
.chip.label = "gpio-3",
|
||||
.base = MX51_IO_ADDRESS(MX51_GPIO4_BASE_ADDR),
|
||||
.irq = MX51_MXC_INT_GPIO4_LOW,
|
||||
.virtual_irq_start = MXC_GPIO_IRQ_START + 32 * 3
|
||||
},
|
||||
};
|
||||
|
||||
int __init mxc_register_gpios(void)
|
||||
{
|
||||
return 0;
|
||||
return mxc_gpio_init(mxc_gpio_ports, ARRAY_SIZE(mxc_gpio_ports));
|
||||
}
|
||||
|
@ -2,3 +2,7 @@ extern struct platform_device mxc_uart_device0;
|
||||
extern struct platform_device mxc_uart_device1;
|
||||
extern struct platform_device mxc_uart_device2;
|
||||
extern struct platform_device mxc_fec_device;
|
||||
extern struct platform_device mxc_usbdr_host_device;
|
||||
extern struct platform_device mxc_usbh1_device;
|
||||
extern struct platform_device mxc_usbdr_udc_device;
|
||||
extern struct platform_device mxc_wdt;
|
||||
|
@ -56,6 +56,7 @@ static struct clk_lookup lookups[] = {
|
||||
CLK(&clk_default, "gpio.1"),
|
||||
CLK(&clk_default, "gpio.2"),
|
||||
CLK(&clk_default, "gpio.3"),
|
||||
CLK(&clk_default, "rng"),
|
||||
};
|
||||
|
||||
static int __init clk_init(void)
|
||||
|
@ -137,9 +137,7 @@ static void ads7846_dev_init(void)
|
||||
}
|
||||
|
||||
gpio_direction_input(ts_gpio);
|
||||
|
||||
omap_set_gpio_debounce(ts_gpio, 1);
|
||||
omap_set_gpio_debounce_time(ts_gpio, 0xa);
|
||||
gpio_set_debounce(ts_gpio, 310);
|
||||
}
|
||||
|
||||
static int ads7846_get_pendown_state(void)
|
||||
|
@ -209,8 +209,7 @@ static void ads7846_dev_init(void)
|
||||
}
|
||||
|
||||
gpio_direction_input(ts_gpio);
|
||||
omap_set_gpio_debounce(ts_gpio, 1);
|
||||
omap_set_gpio_debounce_time(ts_gpio, 0xa);
|
||||
gpio_set_debounce(ts_gpio, 310);
|
||||
}
|
||||
|
||||
static int ads7846_get_pendown_state(void)
|
||||
|
@ -579,9 +579,7 @@ static void ads7846_dev_init(void)
|
||||
printk(KERN_ERR "can't get ads7846 pen down GPIO\n");
|
||||
|
||||
gpio_direction_input(OMAP3_EVM_TS_GPIO);
|
||||
|
||||
omap_set_gpio_debounce(OMAP3_EVM_TS_GPIO, 1);
|
||||
omap_set_gpio_debounce_time(OMAP3_EVM_TS_GPIO, 0xa);
|
||||
gpio_set_debounce(OMAP3_EVM_TS_GPIO, 310);
|
||||
}
|
||||
|
||||
static int ads7846_get_pendown_state(void)
|
||||
|
@ -130,8 +130,8 @@ static struct platform_device pandora_keys_gpio = {
|
||||
static void __init pandora_keys_gpio_init(void)
|
||||
{
|
||||
/* set debounce time for GPIO banks 4 and 6 */
|
||||
omap_set_gpio_debounce_time(32 * 3, GPIO_DEBOUNCE_TIME);
|
||||
omap_set_gpio_debounce_time(32 * 5, GPIO_DEBOUNCE_TIME);
|
||||
gpio_set_debounce(32 * 3, GPIO_DEBOUNCE_TIME);
|
||||
gpio_set_debounce(32 * 5, GPIO_DEBOUNCE_TIME);
|
||||
}
|
||||
|
||||
static int board_keymap[] = {
|
||||
|
@ -328,8 +328,7 @@ static void __init omap3_ads7846_init(void)
|
||||
}
|
||||
|
||||
gpio_direction_input(OMAP3_TS_GPIO);
|
||||
omap_set_gpio_debounce(OMAP3_TS_GPIO, 1);
|
||||
omap_set_gpio_debounce_time(OMAP3_TS_GPIO, 0xa);
|
||||
gpio_set_debounce(OMAP3_TS_GPIO, 310);
|
||||
}
|
||||
|
||||
static struct ads7846_platform_data ads7846_config = {
|
||||
|
@ -240,22 +240,23 @@ error_fail:
|
||||
|
||||
#define ORION_BLINK_HALF_PERIOD 100 /* ms */
|
||||
|
||||
static int dns323_gpio_blink_set(unsigned gpio,
|
||||
static int dns323_gpio_blink_set(unsigned gpio, int state,
|
||||
unsigned long *delay_on, unsigned long *delay_off)
|
||||
{
|
||||
static int value = 0;
|
||||
|
||||
if (!*delay_on && !*delay_off)
|
||||
if (delay_on && delay_off && !*delay_on && !*delay_off)
|
||||
*delay_on = *delay_off = ORION_BLINK_HALF_PERIOD;
|
||||
|
||||
if (ORION_BLINK_HALF_PERIOD == *delay_on
|
||||
&& ORION_BLINK_HALF_PERIOD == *delay_off) {
|
||||
value = !value;
|
||||
orion_gpio_set_blink(gpio, value);
|
||||
return 0;
|
||||
switch(state) {
|
||||
case GPIO_LED_NO_BLINK_LOW:
|
||||
case GPIO_LED_NO_BLINK_HIGH:
|
||||
orion_gpio_set_blink(gpio, 0);
|
||||
gpio_set_value(gpio, state);
|
||||
break;
|
||||
case GPIO_LED_BLINK:
|
||||
orion_gpio_set_blink(gpio, 1);
|
||||
}
|
||||
|
||||
return -EINVAL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct gpio_led dns323_leds[] = {
|
||||
@ -263,6 +264,7 @@ static struct gpio_led dns323_leds[] = {
|
||||
.name = "power:blue",
|
||||
.gpio = DNS323_GPIO_LED_POWER2,
|
||||
.default_trigger = "timer",
|
||||
.active_low = 1,
|
||||
}, {
|
||||
.name = "right:amber",
|
||||
.gpio = DNS323_GPIO_LED_RIGHT_AMBER,
|
||||
|
@ -114,6 +114,7 @@
|
||||
#define S3C_PA_USBHOST S3C2410_PA_USBHOST
|
||||
#define S3C_PA_HSMMC0 S3C2443_PA_HSMMC
|
||||
#define S3C_PA_HSMMC1 S3C2416_PA_HSMMC0
|
||||
#define S3C_PA_WDT S3C2410_PA_WATCHDOG
|
||||
#define S3C_PA_NAND S3C24XX_PA_NAND
|
||||
|
||||
#endif /* __ASM_ARCH_MAP_H */
|
||||
|
@ -49,7 +49,6 @@
|
||||
#include <linux/io.h>
|
||||
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/backlight.h>
|
||||
#include <linux/regulator/machine.h>
|
||||
|
||||
#include <linux/mfd/pcf50633/core.h>
|
||||
@ -57,6 +56,7 @@
|
||||
#include <linux/mfd/pcf50633/adc.h>
|
||||
#include <linux/mfd/pcf50633/gpio.h>
|
||||
#include <linux/mfd/pcf50633/pmic.h>
|
||||
#include <linux/mfd/pcf50633/backlight.h>
|
||||
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/map.h>
|
||||
@ -254,6 +254,12 @@ static char *gta02_batteries[] = {
|
||||
"battery",
|
||||
};
|
||||
|
||||
static struct pcf50633_bl_platform_data gta02_backlight_data = {
|
||||
.default_brightness = 0x3f,
|
||||
.default_brightness_limit = 0,
|
||||
.ramp_time = 5,
|
||||
};
|
||||
|
||||
struct pcf50633_platform_data gta02_pcf_pdata = {
|
||||
.resumers = {
|
||||
[0] = PCF50633_INT1_USBINS |
|
||||
@ -271,6 +277,8 @@ struct pcf50633_platform_data gta02_pcf_pdata = {
|
||||
|
||||
.charger_reference_current_ma = 1000,
|
||||
|
||||
.backlight_data = >a02_backlight_data,
|
||||
|
||||
.reg_init_data = {
|
||||
[PCF50633_REGULATOR_AUTO] = {
|
||||
.constraints = {
|
||||
@ -478,71 +486,6 @@ static struct s3c2410_udc_mach_info gta02_udc_cfg = {
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
static void gta02_bl_set_intensity(int intensity)
|
||||
{
|
||||
struct pcf50633 *pcf = gta02_pcf;
|
||||
int old_intensity = pcf50633_reg_read(pcf, PCF50633_REG_LEDOUT);
|
||||
|
||||
/* We map 8-bit intensity to 6-bit intensity in hardware. */
|
||||
intensity >>= 2;
|
||||
|
||||
/*
|
||||
* This can happen during, eg, print of panic on blanked console,
|
||||
* but we can't service i2c without interrupts active, so abort.
|
||||
*/
|
||||
if (in_atomic()) {
|
||||
printk(KERN_ERR "gta02_bl_set_intensity called while atomic\n");
|
||||
return;
|
||||
}
|
||||
|
||||
old_intensity = pcf50633_reg_read(pcf, PCF50633_REG_LEDOUT);
|
||||
if (intensity == old_intensity)
|
||||
return;
|
||||
|
||||
/* We can't do this anywhere else. */
|
||||
pcf50633_reg_write(pcf, PCF50633_REG_LEDDIM, 5);
|
||||
|
||||
if (!(pcf50633_reg_read(pcf, PCF50633_REG_LEDENA) & 3))
|
||||
old_intensity = 0;
|
||||
|
||||
/*
|
||||
* The PCF50633 cannot handle LEDOUT = 0 (datasheet p60)
|
||||
* if seen, you have to re-enable the LED unit.
|
||||
*/
|
||||
if (!intensity || !old_intensity)
|
||||
pcf50633_reg_write(pcf, PCF50633_REG_LEDENA, 0);
|
||||
|
||||
/* Illegal to set LEDOUT to 0. */
|
||||
if (!intensity)
|
||||
pcf50633_reg_set_bit_mask(pcf, PCF50633_REG_LEDOUT, 0x3f, 2);
|
||||
else
|
||||
pcf50633_reg_set_bit_mask(pcf, PCF50633_REG_LEDOUT, 0x3f,
|
||||
intensity);
|
||||
|
||||
if (intensity)
|
||||
pcf50633_reg_write(pcf, PCF50633_REG_LEDENA, 2);
|
||||
|
||||
}
|
||||
|
||||
static struct generic_bl_info gta02_bl_info = {
|
||||
.name = "gta02-bl",
|
||||
.max_intensity = 0xff,
|
||||
.default_intensity = 0xff,
|
||||
.set_bl_intensity = gta02_bl_set_intensity,
|
||||
};
|
||||
|
||||
static struct platform_device gta02_bl_dev = {
|
||||
.name = "generic-bl",
|
||||
.id = 1,
|
||||
.dev = {
|
||||
.platform_data = >a02_bl_info,
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
|
||||
/* USB */
|
||||
static struct s3c2410_hcd_info gta02_usb_info __initdata = {
|
||||
.port[0] = {
|
||||
@ -579,7 +522,6 @@ static struct platform_device *gta02_devices[] __initdata = {
|
||||
/* These guys DO need to be children of PMU. */
|
||||
|
||||
static struct platform_device *gta02_devices_pmu_children[] = {
|
||||
>a02_bl_dev,
|
||||
};
|
||||
|
||||
|
||||
|
@ -7,6 +7,7 @@
|
||||
config PLAT_S3C64XX
|
||||
bool
|
||||
depends on ARCH_S3C64XX
|
||||
select SAMSUNG_WAKEMASK
|
||||
default y
|
||||
help
|
||||
Base platform code for any Samsung S3C64XX device
|
||||
@ -35,6 +36,11 @@ config S3C64XX_SETUP_SDHCI
|
||||
Internal configuration for default SDHCI setup for S3C6400 and
|
||||
S3C6410 SoCs.
|
||||
|
||||
config S3C64XX_DEV_ONENAND1
|
||||
bool
|
||||
help
|
||||
Compile in platform device definition for OneNAND1 controller
|
||||
|
||||
# platform specific device setup
|
||||
|
||||
config S3C64XX_SETUP_I2C0
|
||||
@ -90,8 +96,11 @@ config MACH_SMDK6410
|
||||
select S3C_DEV_HSMMC1
|
||||
select S3C_DEV_I2C1
|
||||
select S3C_DEV_FB
|
||||
select SAMSUNG_DEV_TS
|
||||
select S3C_DEV_USB_HOST
|
||||
select S3C_DEV_USB_HSOTG
|
||||
select S3C_DEV_WDT
|
||||
select HAVE_S3C2410_WATCHDOG
|
||||
select S3C64XX_SETUP_SDHCI
|
||||
select S3C64XX_SETUP_I2C1
|
||||
select S3C64XX_SETUP_FB_24BPP
|
||||
@ -179,3 +188,34 @@ config MACH_HMT
|
||||
select HAVE_PWM
|
||||
help
|
||||
Machine support for the Airgoo HMT
|
||||
|
||||
config MACH_SMARTQ
|
||||
bool
|
||||
select CPU_S3C6410
|
||||
select S3C_DEV_HSMMC
|
||||
select S3C_DEV_HSMMC1
|
||||
select S3C_DEV_HSMMC2
|
||||
select S3C_DEV_FB
|
||||
select S3C_DEV_HWMON
|
||||
select S3C_DEV_RTC
|
||||
select S3C_DEV_USB_HSOTG
|
||||
select S3C_DEV_USB_HOST
|
||||
select S3C64XX_SETUP_SDHCI
|
||||
select S3C64XX_SETUP_FB_24BPP
|
||||
select SAMSUNG_DEV_ADC
|
||||
select SAMSUNG_DEV_TS
|
||||
select HAVE_PWM
|
||||
help
|
||||
Shared machine support for SmartQ 5/7
|
||||
|
||||
config MACH_SMARTQ5
|
||||
bool "SmartQ 5"
|
||||
select MACH_SMARTQ
|
||||
help
|
||||
Machine support for the SmartQ 5
|
||||
|
||||
config MACH_SMARTQ7
|
||||
bool "SmartQ 7"
|
||||
select MACH_SMARTQ
|
||||
help
|
||||
Machine support for the SmartQ 7
|
||||
|
@ -52,6 +52,9 @@ obj-$(CONFIG_MACH_SMDK6400) += mach-smdk6400.o
|
||||
obj-$(CONFIG_MACH_SMDK6410) += mach-smdk6410.o
|
||||
obj-$(CONFIG_MACH_NCP) += mach-ncp.o
|
||||
obj-$(CONFIG_MACH_HMT) += mach-hmt.o
|
||||
obj-$(CONFIG_MACH_SMARTQ) += mach-smartq.o
|
||||
obj-$(CONFIG_MACH_SMARTQ5) += mach-smartq5.o
|
||||
obj-$(CONFIG_MACH_SMARTQ7) += mach-smartq7.o
|
||||
|
||||
# device support
|
||||
|
||||
@ -59,3 +62,4 @@ obj-y += dev-uart.o
|
||||
obj-y += dev-audio.o
|
||||
obj-$(CONFIG_S3C64XX_DEV_SPI) += dev-spi.o
|
||||
obj-$(CONFIG_S3C64XX_DEV_TS) += dev-ts.o
|
||||
obj-$(CONFIG_S3C64XX_DEV_ONENAND1) += dev-onenand1.o
|
||||
|
@ -258,6 +258,12 @@ static struct clk init_clocks[] = {
|
||||
.parent = &clk_h,
|
||||
.enable = s3c64xx_hclk_ctrl,
|
||||
.ctrlbit = S3C_CLKCON_HCLK_HSMMC2,
|
||||
}, {
|
||||
.name = "otg",
|
||||
.id = -1,
|
||||
.parent = &clk_h,
|
||||
.enable = s3c64xx_hclk_ctrl,
|
||||
.ctrlbit = S3C_CLKCON_HCLK_USB,
|
||||
}, {
|
||||
.name = "timers",
|
||||
.id = -1,
|
||||
|
55
arch/arm/mach-s3c64xx/dev-onenand1.c
Normal file
55
arch/arm/mach-s3c64xx/dev-onenand1.c
Normal file
@ -0,0 +1,55 @@
|
||||
/*
|
||||
* linux/arch/arm/mach-s3c64xx/dev-onenand1.c
|
||||
*
|
||||
* Copyright (c) 2008-2010 Samsung Electronics
|
||||
* Kyungmin Park <kyungmin.park@samsung.com>
|
||||
*
|
||||
* S3C64XX series device definition for OneNAND devices
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/mtd/mtd.h>
|
||||
#include <linux/mtd/onenand.h>
|
||||
|
||||
#include <mach/irqs.h>
|
||||
#include <mach/map.h>
|
||||
|
||||
static struct resource s3c64xx_onenand1_resources[] = {
|
||||
[0] = {
|
||||
.start = S3C64XX_PA_ONENAND1,
|
||||
.end = S3C64XX_PA_ONENAND1 + 0x400 - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
[1] = {
|
||||
.start = S3C64XX_PA_ONENAND1_BUF,
|
||||
.end = S3C64XX_PA_ONENAND1_BUF + S3C64XX_SZ_ONENAND1_BUF - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
[2] = {
|
||||
.start = IRQ_ONENAND1,
|
||||
.end = IRQ_ONENAND1,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
struct platform_device s3c64xx_device_onenand1 = {
|
||||
.name = "samsung-onenand",
|
||||
.id = 1,
|
||||
.num_resources = ARRAY_SIZE(s3c64xx_onenand1_resources),
|
||||
.resource = s3c64xx_onenand1_resources,
|
||||
};
|
||||
|
||||
void s3c64xx_onenand1_set_platdata(struct onenand_platform_data *pdata)
|
||||
{
|
||||
struct onenand_platform_data *pd;
|
||||
|
||||
pd = kmemdup(pdata, sizeof(struct onenand_platform_data), GFP_KERNEL);
|
||||
if (!pd)
|
||||
printk(KERN_ERR "%s: no memory for platform data\n", __func__);
|
||||
s3c64xx_device_onenand1.dev.platform_data = pd;
|
||||
}
|
@ -212,5 +212,9 @@
|
||||
|
||||
#define NR_IRQS (IRQ_BOARD_END + 1)
|
||||
|
||||
/* Compatibility */
|
||||
|
||||
#define IRQ_ONENAND IRQ_ONENAND0
|
||||
|
||||
#endif /* __ASM_MACH_S3C64XX_IRQS_H */
|
||||
|
||||
|
@ -52,6 +52,16 @@
|
||||
|
||||
#define S3C64XX_PA_SROM (0x70000000)
|
||||
|
||||
#define S3C64XX_PA_ONENAND0 (0x70100000)
|
||||
#define S3C64XX_PA_ONENAND0_BUF (0x20000000)
|
||||
#define S3C64XX_SZ_ONENAND0_BUF (SZ_64M)
|
||||
|
||||
/* NAND and OneNAND1 controllers occupy the same register region
|
||||
(depending on SoC POP version) */
|
||||
#define S3C64XX_PA_ONENAND1 (0x70200000)
|
||||
#define S3C64XX_PA_ONENAND1_BUF (0x28000000)
|
||||
#define S3C64XX_SZ_ONENAND1_BUF (SZ_64M)
|
||||
|
||||
#define S3C64XX_PA_NAND (0x70200000)
|
||||
#define S3C64XX_PA_FB (0x77100000)
|
||||
#define S3C64XX_PA_USB_HSOTG (0x7C000000)
|
||||
@ -99,11 +109,15 @@
|
||||
#define S3C_PA_IIC S3C64XX_PA_IIC0
|
||||
#define S3C_PA_IIC1 S3C64XX_PA_IIC1
|
||||
#define S3C_PA_NAND S3C64XX_PA_NAND
|
||||
#define S3C_PA_ONENAND S3C64XX_PA_ONENAND0
|
||||
#define S3C_PA_ONENAND_BUF S3C64XX_PA_ONENAND0_BUF
|
||||
#define S3C_SZ_ONENAND_BUF S3C64XX_SZ_ONENAND0_BUF
|
||||
#define S3C_PA_FB S3C64XX_PA_FB
|
||||
#define S3C_PA_USBHOST S3C64XX_PA_USBHOST
|
||||
#define S3C_PA_USB_HSOTG S3C64XX_PA_USB_HSOTG
|
||||
#define S3C_VA_USB_HSPHY S3C64XX_VA_USB_HSPHY
|
||||
#define S3C_PA_RTC S3C64XX_PA_RTC
|
||||
#define S3C_PA_WDT S3C64XX_PA_WATCHDOG
|
||||
|
||||
#define SAMSUNG_PA_ADC S3C64XX_PA_ADC
|
||||
|
||||
|
363
arch/arm/mach-s3c64xx/mach-smartq.c
Normal file
363
arch/arm/mach-s3c64xx/mach-smartq.c
Normal file
@ -0,0 +1,363 @@
|
||||
/*
|
||||
* linux/arch/arm/mach-s3c64xx/mach-smartq.c
|
||||
*
|
||||
* Copyright (C) 2010 Maurus Cuelenaere
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <linux/delay.h>
|
||||
#include <linux/fb.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/pwm_backlight.h>
|
||||
#include <linux/serial_core.h>
|
||||
#include <linux/usb/gpio_vbus.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/map.h>
|
||||
|
||||
#include <mach/map.h>
|
||||
#include <mach/regs-gpio.h>
|
||||
#include <mach/regs-modem.h>
|
||||
|
||||
#include <plat/clock.h>
|
||||
#include <plat/cpu.h>
|
||||
#include <plat/devs.h>
|
||||
#include <plat/iic.h>
|
||||
#include <plat/gpio-cfg.h>
|
||||
#include <plat/hwmon.h>
|
||||
#include <plat/regs-serial.h>
|
||||
#include <plat/udc-hs.h>
|
||||
#include <plat/usb-control.h>
|
||||
#include <plat/sdhci.h>
|
||||
#include <plat/ts.h>
|
||||
|
||||
#include <video/platform_lcd.h>
|
||||
|
||||
#define UCON S3C2410_UCON_DEFAULT
|
||||
#define ULCON (S3C2410_LCON_CS8 | S3C2410_LCON_PNONE)
|
||||
#define UFCON (S3C2410_UFCON_RXTRIG8 | S3C2410_UFCON_FIFOMODE)
|
||||
|
||||
static struct s3c2410_uartcfg smartq_uartcfgs[] __initdata = {
|
||||
[0] = {
|
||||
.hwport = 0,
|
||||
.flags = 0,
|
||||
.ucon = UCON,
|
||||
.ulcon = ULCON,
|
||||
.ufcon = UFCON,
|
||||
},
|
||||
[1] = {
|
||||
.hwport = 1,
|
||||
.flags = 0,
|
||||
.ucon = UCON,
|
||||
.ulcon = ULCON,
|
||||
.ufcon = UFCON,
|
||||
},
|
||||
[2] = {
|
||||
.hwport = 2,
|
||||
.flags = 0,
|
||||
.ucon = UCON,
|
||||
.ulcon = ULCON,
|
||||
.ufcon = UFCON,
|
||||
},
|
||||
};
|
||||
|
||||
static void smartq_usb_host_powercontrol(int port, int to)
|
||||
{
|
||||
pr_debug("%s(%d, %d)\n", __func__, port, to);
|
||||
|
||||
if (port == 0) {
|
||||
gpio_set_value(S3C64XX_GPL(0), to);
|
||||
gpio_set_value(S3C64XX_GPL(1), to);
|
||||
}
|
||||
}
|
||||
|
||||
static irqreturn_t smartq_usb_host_ocirq(int irq, void *pw)
|
||||
{
|
||||
struct s3c2410_hcd_info *info = pw;
|
||||
|
||||
if (gpio_get_value(S3C64XX_GPL(10)) == 0) {
|
||||
pr_debug("%s: over-current irq (oc detected)\n", __func__);
|
||||
s3c2410_usb_report_oc(info, 3);
|
||||
} else {
|
||||
pr_debug("%s: over-current irq (oc cleared)\n", __func__);
|
||||
s3c2410_usb_report_oc(info, 0);
|
||||
}
|
||||
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
static void smartq_usb_host_enableoc(struct s3c2410_hcd_info *info, int on)
|
||||
{
|
||||
int ret;
|
||||
|
||||
/* This isn't present on a SmartQ 5 board */
|
||||
if (machine_is_smartq5())
|
||||
return;
|
||||
|
||||
if (on) {
|
||||
ret = request_irq(gpio_to_irq(S3C64XX_GPL(10)),
|
||||
smartq_usb_host_ocirq, IRQF_DISABLED |
|
||||
IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
|
||||
"USB host overcurrent", info);
|
||||
if (ret != 0)
|
||||
pr_err("failed to request usb oc irq: %d\n", ret);
|
||||
} else {
|
||||
free_irq(gpio_to_irq(S3C64XX_GPL(10)), info);
|
||||
}
|
||||
}
|
||||
|
||||
static struct s3c2410_hcd_info smartq_usb_host_info = {
|
||||
.port[0] = {
|
||||
.flags = S3C_HCDFLG_USED
|
||||
},
|
||||
.port[1] = {
|
||||
.flags = 0
|
||||
},
|
||||
|
||||
.power_control = smartq_usb_host_powercontrol,
|
||||
.enable_oc = smartq_usb_host_enableoc,
|
||||
};
|
||||
|
||||
static struct gpio_vbus_mach_info smartq_usb_otg_vbus_pdata = {
|
||||
.gpio_vbus = S3C64XX_GPL(9),
|
||||
.gpio_pullup = -1,
|
||||
.gpio_vbus_inverted = true,
|
||||
};
|
||||
|
||||
static struct platform_device smartq_usb_otg_vbus_dev = {
|
||||
.name = "gpio-vbus",
|
||||
.dev.platform_data = &smartq_usb_otg_vbus_pdata,
|
||||
};
|
||||
|
||||
static int __init smartq_bl_init(struct device *dev)
|
||||
{
|
||||
s3c_gpio_cfgpin(S3C64XX_GPF(15), S3C_GPIO_SFN(2));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct platform_pwm_backlight_data smartq_backlight_data = {
|
||||
.pwm_id = 1,
|
||||
.max_brightness = 1000,
|
||||
.dft_brightness = 600,
|
||||
.pwm_period_ns = 1000000000 / (1000 * 20),
|
||||
.init = smartq_bl_init,
|
||||
};
|
||||
|
||||
static struct platform_device smartq_backlight_device = {
|
||||
.name = "pwm-backlight",
|
||||
.dev = {
|
||||
.parent = &s3c_device_timer[1].dev,
|
||||
.platform_data = &smartq_backlight_data,
|
||||
},
|
||||
};
|
||||
|
||||
static struct s3c2410_ts_mach_info smartq_touchscreen_pdata __initdata = {
|
||||
.delay = 65535,
|
||||
.presc = 99,
|
||||
.oversampling_shift = 4,
|
||||
};
|
||||
|
||||
static struct s3c_sdhci_platdata smartq_internal_hsmmc_pdata = {
|
||||
.max_width = 4,
|
||||
/*.broken_card_detection = true,*/
|
||||
};
|
||||
|
||||
static struct s3c_hwmon_pdata smartq_hwmon_pdata __initdata = {
|
||||
/* Battery voltage (?-4.2V) */
|
||||
.in[0] = &(struct s3c_hwmon_chcfg) {
|
||||
.name = "smartq:battery-voltage",
|
||||
.mult = 3300,
|
||||
.div = 2048,
|
||||
},
|
||||
/* Reference voltage (1.2V) */
|
||||
.in[1] = &(struct s3c_hwmon_chcfg) {
|
||||
.name = "smartq:reference-voltage",
|
||||
.mult = 3300,
|
||||
.div = 4096,
|
||||
},
|
||||
};
|
||||
|
||||
static void smartq_lcd_power_set(struct plat_lcd_data *pd, unsigned int power)
|
||||
{
|
||||
gpio_direction_output(S3C64XX_GPM(3), power);
|
||||
}
|
||||
|
||||
static struct plat_lcd_data smartq_lcd_power_data = {
|
||||
.set_power = smartq_lcd_power_set,
|
||||
};
|
||||
|
||||
static struct platform_device smartq_lcd_power_device = {
|
||||
.name = "platform-lcd",
|
||||
.dev.parent = &s3c_device_fb.dev,
|
||||
.dev.platform_data = &smartq_lcd_power_data,
|
||||
};
|
||||
|
||||
|
||||
static struct platform_device *smartq_devices[] __initdata = {
|
||||
&s3c_device_hsmmc1, /* Init iNAND first, ... */
|
||||
&s3c_device_hsmmc0, /* ... then the external SD card */
|
||||
&s3c_device_hsmmc2,
|
||||
&s3c_device_adc,
|
||||
&s3c_device_fb,
|
||||
&s3c_device_hwmon,
|
||||
&s3c_device_i2c0,
|
||||
&s3c_device_ohci,
|
||||
&s3c_device_rtc,
|
||||
&s3c_device_timer[1],
|
||||
&s3c_device_ts,
|
||||
&s3c_device_usb_hsotg,
|
||||
&smartq_backlight_device,
|
||||
&smartq_lcd_power_device,
|
||||
&smartq_usb_otg_vbus_dev,
|
||||
};
|
||||
|
||||
static void __init smartq_lcd_mode_set(void)
|
||||
{
|
||||
u32 tmp;
|
||||
|
||||
/* set the LCD type */
|
||||
tmp = __raw_readl(S3C64XX_SPCON);
|
||||
tmp &= ~S3C64XX_SPCON_LCD_SEL_MASK;
|
||||
tmp |= S3C64XX_SPCON_LCD_SEL_RGB;
|
||||
__raw_writel(tmp, S3C64XX_SPCON);
|
||||
|
||||
/* remove the LCD bypass */
|
||||
tmp = __raw_readl(S3C64XX_MODEM_MIFPCON);
|
||||
tmp &= ~MIFPCON_LCD_BYPASS;
|
||||
__raw_writel(tmp, S3C64XX_MODEM_MIFPCON);
|
||||
}
|
||||
|
||||
static void smartq_power_off(void)
|
||||
{
|
||||
gpio_direction_output(S3C64XX_GPK(15), 1);
|
||||
}
|
||||
|
||||
static int __init smartq_power_off_init(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = gpio_request(S3C64XX_GPK(15), "Power control");
|
||||
if (ret < 0) {
|
||||
pr_err("%s: failed to get GPK15\n", __func__);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* leave power on */
|
||||
gpio_direction_output(S3C64XX_GPK(15), 0);
|
||||
|
||||
|
||||
pm_power_off = smartq_power_off;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int __init smartq_usb_host_init(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = gpio_request(S3C64XX_GPL(0), "USB power control");
|
||||
if (ret < 0) {
|
||||
pr_err("%s: failed to get GPL0\n", __func__);
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = gpio_request(S3C64XX_GPL(1), "USB host power control");
|
||||
if (ret < 0) {
|
||||
pr_err("%s: failed to get GPL1\n", __func__);
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (!machine_is_smartq5()) {
|
||||
/* This isn't present on a SmartQ 5 board */
|
||||
ret = gpio_request(S3C64XX_GPL(10), "USB host overcurrent");
|
||||
if (ret < 0) {
|
||||
pr_err("%s: failed to get GPL10\n", __func__);
|
||||
goto err2;
|
||||
}
|
||||
}
|
||||
|
||||
/* turn power off */
|
||||
gpio_direction_output(S3C64XX_GPL(0), 0);
|
||||
gpio_direction_output(S3C64XX_GPL(1), 0);
|
||||
if (!machine_is_smartq5())
|
||||
gpio_direction_input(S3C64XX_GPL(10));
|
||||
|
||||
s3c_device_ohci.dev.platform_data = &smartq_usb_host_info;
|
||||
|
||||
return 0;
|
||||
|
||||
err2:
|
||||
gpio_free(S3C64XX_GPL(1));
|
||||
err:
|
||||
gpio_free(S3C64XX_GPL(0));
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int __init smartq_usb_otg_init(void)
|
||||
{
|
||||
clk_xusbxti.rate = 12000000;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int __init smartq_wifi_init(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = gpio_request(S3C64XX_GPK(1), "wifi control");
|
||||
if (ret < 0) {
|
||||
pr_err("%s: failed to get GPK1\n", __func__);
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = gpio_request(S3C64XX_GPK(2), "wifi reset");
|
||||
if (ret < 0) {
|
||||
pr_err("%s: failed to get GPK2\n", __func__);
|
||||
gpio_free(S3C64XX_GPK(1));
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* turn power on */
|
||||
gpio_direction_output(S3C64XX_GPK(1), 1);
|
||||
|
||||
/* reset device */
|
||||
gpio_direction_output(S3C64XX_GPK(2), 0);
|
||||
mdelay(100);
|
||||
gpio_set_value(S3C64XX_GPK(2), 1);
|
||||
gpio_direction_input(S3C64XX_GPK(2));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct map_desc smartq_iodesc[] __initdata = {};
|
||||
void __init smartq_map_io(void)
|
||||
{
|
||||
s3c64xx_init_io(smartq_iodesc, ARRAY_SIZE(smartq_iodesc));
|
||||
s3c24xx_init_clocks(12000000);
|
||||
s3c24xx_init_uarts(smartq_uartcfgs, ARRAY_SIZE(smartq_uartcfgs));
|
||||
|
||||
smartq_lcd_mode_set();
|
||||
}
|
||||
|
||||
void __init smartq_machine_init(void)
|
||||
{
|
||||
s3c_i2c0_set_platdata(NULL);
|
||||
s3c_hwmon_set_platdata(&smartq_hwmon_pdata);
|
||||
s3c_sdhci1_set_platdata(&smartq_internal_hsmmc_pdata);
|
||||
s3c_sdhci2_set_platdata(&smartq_internal_hsmmc_pdata);
|
||||
s3c24xx_ts_set_platdata(&smartq_touchscreen_pdata);
|
||||
|
||||
WARN_ON(smartq_power_off_init());
|
||||
WARN_ON(smartq_usb_host_init());
|
||||
WARN_ON(smartq_usb_otg_init());
|
||||
WARN_ON(smartq_wifi_init());
|
||||
|
||||
platform_add_devices(smartq_devices, ARRAY_SIZE(smartq_devices));
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user