Merge branch 'x86/urgent' into x86/xen
Conflicts: arch/frv/include/asm/pgtable.h arch/x86/include/asm/required-features.h arch/x86/xen/mmu.c Merge reason: x86/xen was on a .29 base still, move it to a fresher branch and pick up Xen fixes as well, plus resolve conflicts Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
commit
f066a15533
2228 changed files with 64309 additions and 58928 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -49,6 +49,7 @@ include/linux/compile.h
|
|||
include/linux/version.h
|
||||
include/linux/utsrelease.h
|
||||
include/linux/bounds.h
|
||||
include/generated
|
||||
|
||||
# stgit generated dirs
|
||||
patches-*
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
What: /debug/pktcdvd/pktcdvd[0-7]
|
||||
What: /sys/kernel/debug/pktcdvd/pktcdvd[0-7]
|
||||
Date: Oct. 2006
|
||||
KernelVersion: 2.6.20
|
||||
Contact: Thomas Maier <balagi@justmail.de>
|
||||
|
@ -10,10 +10,10 @@ debugfs interface
|
|||
The pktcdvd module (packet writing driver) creates
|
||||
these files in debugfs:
|
||||
|
||||
/debug/pktcdvd/pktcdvd[0-7]/
|
||||
/sys/kernel/debug/pktcdvd/pktcdvd[0-7]/
|
||||
info (0444) Lots of driver statistics and infos.
|
||||
|
||||
Example:
|
||||
-------
|
||||
|
||||
cat /debug/pktcdvd/pktcdvd0/info
|
||||
cat /sys/kernel/debug/pktcdvd/pktcdvd0/info
|
||||
|
|
|
@ -69,9 +69,13 @@ Description:
|
|||
gpe1F: 0 invalid
|
||||
gpe_all: 1192
|
||||
sci: 1194
|
||||
sci_not: 0
|
||||
|
||||
sci - The total number of times the ACPI SCI
|
||||
has claimed an interrupt.
|
||||
sci - The number of times the ACPI SCI
|
||||
has been called and claimed an interrupt.
|
||||
|
||||
sci_not - The number of times the ACPI SCI
|
||||
has been called and NOT claimed an interrupt.
|
||||
|
||||
gpe_all - count of SCI caused by GPEs.
|
||||
|
||||
|
|
|
@ -31,7 +31,7 @@ PS_METHOD = $(prefer-db2x)
|
|||
|
||||
###
|
||||
# The targets that may be used.
|
||||
PHONY += xmldocs sgmldocs psdocs pdfdocs htmldocs mandocs installmandocs
|
||||
PHONY += xmldocs sgmldocs psdocs pdfdocs htmldocs mandocs installmandocs cleandocs
|
||||
|
||||
BOOKS := $(addprefix $(obj)/,$(DOCBOOKS))
|
||||
xmldocs: $(BOOKS)
|
||||
|
@ -143,7 +143,8 @@ quiet_cmd_db2pdf = PDF $@
|
|||
$(call cmd,db2pdf)
|
||||
|
||||
|
||||
main_idx = Documentation/DocBook/index.html
|
||||
index = index.html
|
||||
main_idx = Documentation/DocBook/$(index)
|
||||
build_main_index = rm -rf $(main_idx) && \
|
||||
echo '<h1>Linux Kernel HTML Documentation</h1>' >> $(main_idx) && \
|
||||
echo '<h2>Kernel Version: $(KERNELVERSION)</h2>' >> $(main_idx) && \
|
||||
|
@ -213,11 +214,12 @@ silent_gen_xml = :
|
|||
dochelp:
|
||||
@echo ' Linux kernel internal documentation in different formats:'
|
||||
@echo ' htmldocs - HTML'
|
||||
@echo ' installmandocs - install man pages generated by mandocs'
|
||||
@echo ' mandocs - man pages'
|
||||
@echo ' pdfdocs - PDF'
|
||||
@echo ' psdocs - Postscript'
|
||||
@echo ' xmldocs - XML DocBook'
|
||||
@echo ' mandocs - man pages'
|
||||
@echo ' installmandocs - install man pages generated by mandocs'
|
||||
@echo ' cleandocs - clean all generated DocBook files'
|
||||
|
||||
###
|
||||
# Temporary files left by various tools
|
||||
|
@ -231,10 +233,14 @@ clean-files := $(DOCBOOKS) \
|
|||
$(patsubst %.xml, %.pdf, $(DOCBOOKS)) \
|
||||
$(patsubst %.xml, %.html, $(DOCBOOKS)) \
|
||||
$(patsubst %.xml, %.9, $(DOCBOOKS)) \
|
||||
$(C-procfs-example)
|
||||
$(C-procfs-example) $(index)
|
||||
|
||||
clean-dirs := $(patsubst %.xml,%,$(DOCBOOKS)) man
|
||||
|
||||
cleandocs:
|
||||
$(Q)rm -f $(call objectify, $(clean-files))
|
||||
$(Q)rm -rf $(call objectify, $(clean-dirs))
|
||||
|
||||
# Declare the contents of the .PHONY variable as phony. We keep that
|
||||
# information in a variable se we can use it in if_changed and friends.
|
||||
|
||||
|
|
|
@ -190,16 +190,20 @@ X!Ekernel/module.c
|
|||
!Edrivers/pci/pci.c
|
||||
!Edrivers/pci/pci-driver.c
|
||||
!Edrivers/pci/remove.c
|
||||
!Edrivers/pci/pci-acpi.c
|
||||
!Edrivers/pci/search.c
|
||||
!Edrivers/pci/msi.c
|
||||
!Edrivers/pci/bus.c
|
||||
!Edrivers/pci/access.c
|
||||
!Edrivers/pci/irq.c
|
||||
!Edrivers/pci/htirq.c
|
||||
<!-- FIXME: Removed for now since no structured comments in source
|
||||
X!Edrivers/pci/hotplug.c
|
||||
-->
|
||||
!Edrivers/pci/probe.c
|
||||
!Edrivers/pci/slot.c
|
||||
!Edrivers/pci/rom.c
|
||||
!Edrivers/pci/iov.c
|
||||
!Idrivers/pci/pci-sysfs.c
|
||||
</sect1>
|
||||
<sect1><title>PCI Hotplug Support Library</title>
|
||||
!Edrivers/pci/hotplug/pci_hotplug_core.c
|
||||
|
|
|
@ -1040,23 +1040,21 @@ Front merges are handled by the binary trees in AS and deadline schedulers.
|
|||
iii. Plugging the queue to batch requests in anticipation of opportunities for
|
||||
merge/sort optimizations
|
||||
|
||||
This is just the same as in 2.4 so far, though per-device unplugging
|
||||
support is anticipated for 2.5. Also with a priority-based i/o scheduler,
|
||||
such decisions could be based on request priorities.
|
||||
|
||||
Plugging is an approach that the current i/o scheduling algorithm resorts to so
|
||||
that it collects up enough requests in the queue to be able to take
|
||||
advantage of the sorting/merging logic in the elevator. If the
|
||||
queue is empty when a request comes in, then it plugs the request queue
|
||||
(sort of like plugging the bottom of a vessel to get fluid to build up)
|
||||
(sort of like plugging the bath tub of a vessel to get fluid to build up)
|
||||
till it fills up with a few more requests, before starting to service
|
||||
the requests. This provides an opportunity to merge/sort the requests before
|
||||
passing them down to the device. There are various conditions when the queue is
|
||||
unplugged (to open up the flow again), either through a scheduled task or
|
||||
could be on demand. For example wait_on_buffer sets the unplugging going
|
||||
(by running tq_disk) so the read gets satisfied soon. So in the read case,
|
||||
the queue gets explicitly unplugged as part of waiting for completion,
|
||||
in fact all queues get unplugged as a side-effect.
|
||||
through sync_buffer() running blk_run_address_space(mapping). Or the caller
|
||||
can do it explicity through blk_unplug(bdev). So in the read case,
|
||||
the queue gets explicitly unplugged as part of waiting for completion on that
|
||||
buffer. For page driven IO, the address space ->sync_page() takes care of
|
||||
doing the blk_run_address_space().
|
||||
|
||||
Aside:
|
||||
This is kind of controversial territory, as it's not clear if plugging is
|
||||
|
@ -1067,11 +1065,6 @@ Aside:
|
|||
multi-page bios being queued in one shot, we may not need to wait to merge
|
||||
a big request from the broken up pieces coming by.
|
||||
|
||||
Per-queue granularity unplugging (still a Todo) may help reduce some of the
|
||||
concerns with just a single tq_disk flush approach. Something like
|
||||
blk_kick_queue() to unplug a specific queue (right away ?)
|
||||
or optionally, all queues, is in the plan.
|
||||
|
||||
4.4 I/O contexts
|
||||
I/O contexts provide a dynamically allocated per process data area. They may
|
||||
be used in I/O schedulers, and in the block layer (could be used for IO statis,
|
||||
|
|
|
@ -30,3 +30,21 @@ The above steps create a new group g1 and move the current shell
|
|||
process (bash) into it. CPU time consumed by this bash and its children
|
||||
can be obtained from g1/cpuacct.usage and the same is accumulated in
|
||||
/cgroups/cpuacct.usage also.
|
||||
|
||||
cpuacct.stat file lists a few statistics which further divide the
|
||||
CPU time obtained by the cgroup into user and system times. Currently
|
||||
the following statistics are supported:
|
||||
|
||||
user: Time spent by tasks of the cgroup in user mode.
|
||||
system: Time spent by tasks of the cgroup in kernel mode.
|
||||
|
||||
user and system are in USER_HZ unit.
|
||||
|
||||
cpuacct controller uses percpu_counter interface to collect user and
|
||||
system times. This has two side effects:
|
||||
|
||||
- It is theoretically possible to see wrong values for user and system times.
|
||||
This is because percpu_counter_read() on 32bit systems isn't safe
|
||||
against concurrent writes.
|
||||
- It is possible to see slightly outdated values for user and system times
|
||||
due to the batch processing nature of percpu_counter.
|
||||
|
|
|
@ -6,15 +6,14 @@ used here with the memory controller that is used in hardware.
|
|||
|
||||
Salient features
|
||||
|
||||
a. Enable control of both RSS (mapped) and Page Cache (unmapped) pages
|
||||
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
|
||||
|
||||
NOTE: Swap Cache (unmapped) is not accounted now.
|
||||
|
||||
Benefits and Purpose of the memory controller
|
||||
|
||||
The memory controller isolates the memory behaviour of a group of tasks
|
||||
|
@ -290,34 +289,44 @@ will be charged as a new owner of it.
|
|||
moved to the parent. If you want to avoid that, force_empty will be useful.
|
||||
|
||||
5.2 stat file
|
||||
memory.stat file includes following statistics (now)
|
||||
cache - # of pages from page-cache and shmem.
|
||||
rss - # of pages from anonymous memory.
|
||||
pgpgin - # of event of charging
|
||||
pgpgout - # of event of uncharging
|
||||
active_anon - # of pages on active lru of anon, shmem.
|
||||
inactive_anon - # of pages on active lru of anon, shmem
|
||||
active_file - # of pages on active lru of file-cache
|
||||
inactive_file - # of pages on inactive lru of file cache
|
||||
unevictable - # of pages cannot be reclaimed.(mlocked etc)
|
||||
|
||||
Below is depend on CONFIG_DEBUG_VM.
|
||||
inactive_ratio - VM internal parameter. (see mm/page_alloc.c)
|
||||
recent_rotated_anon - VM internal parameter. (see mm/vmscan.c)
|
||||
recent_rotated_file - VM internal parameter. (see mm/vmscan.c)
|
||||
recent_scanned_anon - VM internal parameter. (see mm/vmscan.c)
|
||||
recent_scanned_file - VM internal parameter. (see mm/vmscan.c)
|
||||
memory.stat file includes following statistics
|
||||
|
||||
Memo:
|
||||
cache - # of bytes of page cache memory.
|
||||
rss - # of bytes of anonymous and swap cache memory.
|
||||
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.
|
||||
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.
|
||||
unevictable - # of bytes of memory that cannot be reclaimed (mlocked etc).
|
||||
|
||||
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)
|
||||
recent_rotated_file - VM internal parameter. (see mm/vmscan.c)
|
||||
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.
|
||||
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.
|
||||
|
||||
5.3 swappiness
|
||||
Similar to /proc/sys/vm/swappiness, but affecting a hierarchy of groups only.
|
||||
|
||||
Following cgroup's swapiness can't be changed.
|
||||
Following cgroups' swapiness 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.
|
||||
|
|
|
@ -47,13 +47,18 @@ to work with it.
|
|||
|
||||
2. Basic accounting routines
|
||||
|
||||
a. void res_counter_init(struct res_counter *rc)
|
||||
a. void res_counter_init(struct res_counter *rc,
|
||||
struct res_counter *rc_parent)
|
||||
|
||||
Initializes the resource counter. As usual, should be the first
|
||||
routine called for a new counter.
|
||||
|
||||
b. int res_counter_charge[_locked]
|
||||
(struct res_counter *rc, unsigned long val)
|
||||
The struct res_counter *parent can be used to define a hierarchical
|
||||
child -> parent relationship directly in the res_counter structure,
|
||||
NULL can be used to define no relationship.
|
||||
|
||||
c. int res_counter_charge(struct res_counter *rc, unsigned long val,
|
||||
struct res_counter **limit_fail_at)
|
||||
|
||||
When a resource is about to be allocated it has to be accounted
|
||||
with the appropriate resource counter (controller should determine
|
||||
|
@ -67,15 +72,25 @@ to work with it.
|
|||
* if the charging is performed first, then it should be uncharged
|
||||
on error path (if the one is called).
|
||||
|
||||
c. void res_counter_uncharge[_locked]
|
||||
If the charging fails and a hierarchical dependency exists, the
|
||||
limit_fail_at parameter is set to the particular res_counter element
|
||||
where the charging failed.
|
||||
|
||||
d. int res_counter_charge_locked
|
||||
(struct res_counter *rc, unsigned long val)
|
||||
|
||||
The same as res_counter_charge(), but it must not acquire/release the
|
||||
res_counter->lock internally (it must be called with res_counter->lock
|
||||
held).
|
||||
|
||||
e. void res_counter_uncharge[_locked]
|
||||
(struct res_counter *rc, unsigned long val)
|
||||
|
||||
When a resource is released (freed) it should be de-accounted
|
||||
from the resource counter it was accounted to. This is called
|
||||
"uncharging".
|
||||
|
||||
The _locked routines imply that the res_counter->lock is taken.
|
||||
|
||||
The _locked routines imply that the res_counter->lock is taken.
|
||||
|
||||
2.1 Other accounting routines
|
||||
|
||||
|
|
|
@ -169,3 +169,62 @@ three different ways to find such a match:
|
|||
be probed later if another device registers. (Which is OK, since
|
||||
this interface is only for use with non-hotpluggable devices.)
|
||||
|
||||
|
||||
Early Platform Devices and Drivers
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
The early platform interfaces provide platform data to platform device
|
||||
drivers early on during the system boot. The code is built on top of the
|
||||
early_param() command line parsing and can be executed very early on.
|
||||
|
||||
Example: "earlyprintk" class early serial console in 6 steps
|
||||
|
||||
1. Registering early platform device data
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
The architecture code registers platform device data using the function
|
||||
early_platform_add_devices(). In the case of early serial console this
|
||||
should be hardware configuration for the serial port. Devices registered
|
||||
at this point will later on be matched against early platform drivers.
|
||||
|
||||
2. Parsing kernel command line
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
The architecture code calls parse_early_param() to parse the kernel
|
||||
command line. This will execute all matching early_param() callbacks.
|
||||
User specified early platform devices will be registered at this point.
|
||||
For the early serial console case the user can specify port on the
|
||||
kernel command line as "earlyprintk=serial.0" where "earlyprintk" is
|
||||
the class string, "serial" is the name of the platfrom driver and
|
||||
0 is the platform device id. If the id is -1 then the dot and the
|
||||
id can be omitted.
|
||||
|
||||
3. Installing early platform drivers belonging to a certain class
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
The architecture code may optionally force registration of all early
|
||||
platform drivers belonging to a certain class using the function
|
||||
early_platform_driver_register_all(). User specified devices from
|
||||
step 2 have priority over these. This step is omitted by the serial
|
||||
driver example since the early serial driver code should be disabled
|
||||
unless the user has specified port on the kernel command line.
|
||||
|
||||
4. Early platform driver registration
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Compiled-in platform drivers making use of early_platform_init() are
|
||||
automatically registered during step 2 or 3. The serial driver example
|
||||
should use early_platform_init("earlyprintk", &platform_driver).
|
||||
|
||||
5. Probing of early platform drivers belonging to a certain class
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
The architecture code calls early_platform_driver_probe() to match
|
||||
registered early platform devices associated with a certain class with
|
||||
registered early platform drivers. Matched devices will get probed().
|
||||
This step can be executed at any point during the early boot. As soon
|
||||
as possible may be good for the serial port case.
|
||||
|
||||
6. Inside the early platform driver probe()
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
The driver code needs to take special care during early boot, especially
|
||||
when it comes to memory allocation and interrupt registration. The code
|
||||
in the probe() function can use is_early_platform_device() to check if
|
||||
it is called at early platform device or at the regular platform device
|
||||
time. The early serial driver performs register_console() at this point.
|
||||
|
||||
For further information, see <linux/platform_device.h>.
|
||||
|
|
|
@ -428,3 +428,12 @@ Why: In 2.6.27, the semantics of /sys/bus/pci/slots was redefined to
|
|||
After a reasonable transition period, we will remove the legacy
|
||||
fakephp interface.
|
||||
Who: Alex Chiang <achiang@hp.com>
|
||||
|
||||
---------------------------
|
||||
|
||||
What: i2c-voodoo3 driver
|
||||
When: October 2009
|
||||
Why: Superseded by tdfxfb. I2C/DDC support used to live in a separate
|
||||
driver but this caused driver conflicts.
|
||||
Who: Jean Delvare <khali@linux-fr.org>
|
||||
Krzysztof Helt <krzysztof.h1@wp.pl>
|
||||
|
|
|
@ -512,16 +512,24 @@ locking rules:
|
|||
BKL mmap_sem PageLocked(page)
|
||||
open: no yes
|
||||
close: no yes
|
||||
fault: no yes
|
||||
page_mkwrite: no yes no
|
||||
fault: no yes can return with page locked
|
||||
page_mkwrite: no yes can return with page locked
|
||||
access: no yes
|
||||
|
||||
->page_mkwrite() is called when a previously read-only page is
|
||||
about to become writeable. The file system is responsible for
|
||||
protecting against truncate races. Once appropriate action has been
|
||||
taking to lock out truncate, the page range should be verified to be
|
||||
within i_size. The page mapping should also be checked that it is not
|
||||
NULL.
|
||||
->fault() is called when a previously not present pte is about
|
||||
to be faulted in. The filesystem must find and return the page associated
|
||||
with the passed in "pgoff" in the vm_fault structure. If it is possible that
|
||||
the page may be truncated and/or invalidated, then the filesystem must lock
|
||||
the page, then ensure it is not already truncated (the page lock will block
|
||||
subsequent truncate), and then return with VM_FAULT_LOCKED, and the page
|
||||
locked. The VM will unlock the page.
|
||||
|
||||
->page_mkwrite() is called when a previously read-only pte is
|
||||
about to become writeable. The filesystem again must ensure that there are
|
||||
no truncate/invalidate races, and then return with the page locked. If
|
||||
the page has been truncated, the filesystem should not look up a new page
|
||||
like the ->fault() handler, but simply return with VM_FAULT_NOPAGE, which
|
||||
will cause the VM to retry the fault.
|
||||
|
||||
->access() is called when get_user_pages() fails in
|
||||
acces_process_vm(), typically used to debug a process through
|
||||
|
|
|
@ -407,7 +407,7 @@ A NOTE ON SECURITY
|
|||
==================
|
||||
|
||||
CacheFiles makes use of the split security in the task_struct. It allocates
|
||||
its own task_security structure, and redirects current->act_as to point to it
|
||||
its own task_security structure, and redirects current->cred to point to it
|
||||
when it acts on behalf of another process, in that process's context.
|
||||
|
||||
The reason it does this is that it calls vfs_mkdir() and suchlike rather than
|
||||
|
@ -429,9 +429,9 @@ This means it may lose signals or ptrace events for example, and affects what
|
|||
the process looks like in /proc.
|
||||
|
||||
So CacheFiles makes use of a logical split in the security between the
|
||||
objective security (task->sec) and the subjective security (task->act_as). The
|
||||
objective security holds the intrinsic security properties of a process and is
|
||||
never overridden. This is what appears in /proc, and is what is used when a
|
||||
objective security (task->real_cred) and the subjective security (task->cred).
|
||||
The objective security holds the intrinsic security properties of a process and
|
||||
is never overridden. This is what appears in /proc, and is what is used when a
|
||||
process is the target of an operation by some other process (SIGKILL for
|
||||
example).
|
||||
|
||||
|
|
|
@ -56,9 +56,10 @@ workloads and can fully utilize the bandwidth to the servers when doing bulk
|
|||
data transfers.
|
||||
|
||||
POHMELFS clients operate with a working set of servers and are capable of balancing read-only
|
||||
operations (like lookups or directory listings) between them.
|
||||
operations (like lookups or directory listings) between them according to IO priorities.
|
||||
Administrators can add or remove servers from the set at run-time via special commands (described
|
||||
in Documentation/pohmelfs/info.txt file). Writes are replicated to all servers.
|
||||
in Documentation/pohmelfs/info.txt file). Writes are replicated to all servers, which are connected
|
||||
with write permission turned on. IO priority and permissions can be changed in run-time.
|
||||
|
||||
POHMELFS is capable of full data channel encryption and/or strong crypto hashing.
|
||||
One can select any kernel supported cipher, encryption mode, hash type and operation mode
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
POHMELFS usage information.
|
||||
|
||||
Mount options:
|
||||
Mount options.
|
||||
All but index, number of crypto threads and maximum IO size can changed via remount.
|
||||
|
||||
idx=%u
|
||||
Each mountpoint is associated with a special index via this option.
|
||||
Administrator can add or remove servers from the given index, so all mounts,
|
||||
|
@ -52,16 +54,27 @@ mcache_timeout=%u
|
|||
|
||||
Usage examples.
|
||||
|
||||
Add (or remove if it already exists) server server1.net:1025 into the working set with index $idx
|
||||
Add server server1.net:1025 into the working set with index $idx
|
||||
with appropriate hash algorithm and key file and cipher algorithm, mode and key file:
|
||||
$cfg -a server1.net -p 1025 -i $idx -K $hash_key -k $cipher_key
|
||||
$cfg A add -a server1.net -p 1025 -i $idx -K $hash_key -k $cipher_key
|
||||
|
||||
Mount filesystem with given index $idx to /mnt mountpoint.
|
||||
Client will connect to all servers specified in the working set via previous command:
|
||||
mount -t pohmel -o idx=$idx q /mnt
|
||||
|
||||
One can add or remove servers from working set after mounting too.
|
||||
Change permissions to read-only (-I 1 option, '-I 2' - write-only, 3 - rw):
|
||||
$cfg A modify -a server1.net -p 1025 -i $idx -I 1
|
||||
|
||||
Change IO priority to 123 (node with the highest priority gets read requests).
|
||||
$cfg A modify -a server1.net -p 1025 -i $idx -P 123
|
||||
|
||||
One can check currect status of all connections in the mountstats file:
|
||||
# cat /proc/$PID/mountstats
|
||||
...
|
||||
device none mounted on /mnt with fstype pohmel
|
||||
idx addr(:port) socket_type protocol active priority permissions
|
||||
0 server1.net:1026 1 6 1 250 1
|
||||
0 server2.net:1025 1 6 1 123 3
|
||||
|
||||
Server installation.
|
||||
|
||||
|
|
|
@ -277,8 +277,7 @@ or bottom half).
|
|||
unfreeze_fs: called when VFS is unlocking a filesystem and making it writable
|
||||
again.
|
||||
|
||||
statfs: called when the VFS needs to get filesystem statistics. This
|
||||
is called with the kernel lock held
|
||||
statfs: called when the VFS needs to get filesystem statistics.
|
||||
|
||||
remount_fs: called when the filesystem is remounted. This is called
|
||||
with the kernel lock held
|
||||
|
|
|
@ -24,6 +24,49 @@ Partitions and P_Keys
|
|||
The P_Key for any interface is given by the "pkey" file, and the
|
||||
main interface for a subinterface is in "parent."
|
||||
|
||||
Datagram vs Connected modes
|
||||
|
||||
The IPoIB driver supports two modes of operation: datagram and
|
||||
connected. The mode is set and read through an interface's
|
||||
/sys/class/net/<intf name>/mode file.
|
||||
|
||||
In datagram mode, the IB UD (Unreliable Datagram) transport is used
|
||||
and so the interface MTU has is equal to the IB L2 MTU minus the
|
||||
IPoIB encapsulation header (4 bytes). For example, in a typical IB
|
||||
fabric with a 2K MTU, the IPoIB MTU will be 2048 - 4 = 2044 bytes.
|
||||
|
||||
In connected mode, the IB RC (Reliable Connected) transport is used.
|
||||
Connected mode is to takes advantage of the connected nature of the
|
||||
IB transport and allows an MTU up to the maximal IP packet size of
|
||||
64K, which reduces the number of IP packets needed for handling
|
||||
large UDP datagrams, TCP segments, etc and increases the performance
|
||||
for large messages.
|
||||
|
||||
In connected mode, the interface's UD QP is still used for multicast
|
||||
and communication with peers that don't support connected mode. In
|
||||
this case, RX emulation of ICMP PMTU packets is used to cause the
|
||||
networking stack to use the smaller UD MTU for these neighbours.
|
||||
|
||||
Stateless offloads
|
||||
|
||||
If the IB HW supports IPoIB stateless offloads, IPoIB advertises
|
||||
TCP/IP checksum and/or Large Send (LSO) offloading capability to the
|
||||
network stack.
|
||||
|
||||
Large Receive (LRO) offloading is also implemented and may be turned
|
||||
on/off using ethtool calls. Currently LRO is supported only for
|
||||
checksum offload capable devices.
|
||||
|
||||
Stateless offloads are supported only in datagram mode.
|
||||
|
||||
Interrupt moderation
|
||||
|
||||
If the underlying IB device supports CQ event moderation, one can
|
||||
use ethtool to set interrupt mitigation parameters and thus reduce
|
||||
the overhead incurred by handling interrupts. The main code path of
|
||||
IPoIB doesn't use events for TX completion signaling so only RX
|
||||
moderation is supported.
|
||||
|
||||
Debugging Information
|
||||
|
||||
By compiling the IPoIB driver with CONFIG_INFINIBAND_IPOIB_DEBUG set
|
||||
|
@ -55,3 +98,5 @@ References
|
|||
http://ietf.org/rfc/rfc4391.txt
|
||||
IP over InfiniBand (IPoIB) Architecture (RFC 4392)
|
||||
http://ietf.org/rfc/rfc4392.txt
|
||||
IP over InfiniBand: Connected Mode (RFC 4755)
|
||||
http://ietf.org/rfc/rfc4755.txt
|
||||
|
|
65
Documentation/input/bcm5974.txt
Normal file
65
Documentation/input/bcm5974.txt
Normal file
|
@ -0,0 +1,65 @@
|
|||
BCM5974 Driver (bcm5974)
|
||||
------------------------
|
||||
Copyright (C) 2008-2009 Henrik Rydberg <rydberg@euromail.se>
|
||||
|
||||
The USB initialization and package decoding was made by Scott Shawcroft as
|
||||
part of the touchd user-space driver project:
|
||||
Copyright (C) 2008 Scott Shawcroft (scott.shawcroft@gmail.com)
|
||||
|
||||
The BCM5974 driver is based on the appletouch driver:
|
||||
Copyright (C) 2001-2004 Greg Kroah-Hartman (greg@kroah.com)
|
||||
Copyright (C) 2005 Johannes Berg (johannes@sipsolutions.net)
|
||||
Copyright (C) 2005 Stelian Pop (stelian@popies.net)
|
||||
Copyright (C) 2005 Frank Arnold (frank@scirocco-5v-turbo.de)
|
||||
Copyright (C) 2005 Peter Osterlund (petero2@telia.com)
|
||||
Copyright (C) 2005 Michael Hanselmann (linux-kernel@hansmi.ch)
|
||||
Copyright (C) 2006 Nicolas Boichat (nicolas@boichat.ch)
|
||||
|
||||
This driver adds support for the multi-touch trackpad on the new Apple
|
||||
Macbook Air and Macbook Pro laptops. It replaces the appletouch driver on
|
||||
those computers, and integrates well with the synaptics driver of the Xorg
|
||||
system.
|
||||
|
||||
Known to work on Macbook Air, Macbook Pro Penryn and the new unibody
|
||||
Macbook 5 and Macbook Pro 5.
|
||||
|
||||
Usage
|
||||
-----
|
||||
|
||||
The driver loads automatically for the supported usb device ids, and
|
||||
becomes available both as an event device (/dev/input/event*) and as a
|
||||
mouse via the mousedev driver (/dev/input/mice).
|
||||
|
||||
USB Race
|
||||
--------
|
||||
|
||||
The Apple multi-touch trackpads report both mouse and keyboard events via
|
||||
different interfaces of the same usb device. This creates a race condition
|
||||
with the HID driver, which, if not told otherwise, will find the standard
|
||||
HID mouse and keyboard, and claim the whole device. To remedy, the usb
|
||||
product id must be listed in the mouse_ignore list of the hid driver.
|
||||
|
||||
Debug output
|
||||
------------
|
||||
|
||||
To ease the development for new hardware version, verbose packet output can
|
||||
be switched on with the debug kernel module parameter. The range [1-9]
|
||||
yields different levels of verbosity. Example (as root):
|
||||
|
||||
echo -n 9 > /sys/module/bcm5974/parameters/debug
|
||||
|
||||
tail -f /var/log/debug
|
||||
|
||||
echo -n 0 > /sys/module/bcm5974/parameters/debug
|
||||
|
||||
Trivia
|
||||
------
|
||||
|
||||
The driver was developed at the ubuntu forums in June 2008 [1], and now has
|
||||
a more permanent home at bitmath.org [2].
|
||||
|
||||
Links
|
||||
-----
|
||||
|
||||
[1] http://ubuntuforums.org/showthread.php?t=840040
|
||||
[2] http://http://bitmath.org/code/
|
140
Documentation/input/multi-touch-protocol.txt
Normal file
140
Documentation/input/multi-touch-protocol.txt
Normal file
|
@ -0,0 +1,140 @@
|
|||
Multi-touch (MT) Protocol
|
||||
-------------------------
|
||||
Copyright (C) 2009 Henrik Rydberg <rydberg@euromail.se>
|
||||
|
||||
|
||||
Introduction
|
||||
------------
|
||||
|
||||
In order to utilize the full power of the new multi-touch devices, a way to
|
||||
report detailed finger data to user space is needed. This document
|
||||
describes the multi-touch (MT) protocol which allows kernel drivers to
|
||||
report details for an arbitrary number of fingers.
|
||||
|
||||
|
||||
Usage
|
||||
-----
|
||||
|
||||
Anonymous finger details are sent sequentially as separate packets of ABS
|
||||
events. Only the ABS_MT events are recognized as part of a finger
|
||||
packet. The end of a packet is marked by calling the input_mt_sync()
|
||||
function, which generates a SYN_MT_REPORT event. The end of multi-touch
|
||||
transfer is marked by calling the usual input_sync() function.
|
||||
|
||||
A set of ABS_MT events with the desired properties is defined. The events
|
||||
are divided into categories, to allow for partial implementation. The
|
||||
minimum set consists of ABS_MT_TOUCH_MAJOR, ABS_MT_POSITION_X and
|
||||
ABS_MT_POSITION_Y, which allows for multiple fingers to be tracked. If the
|
||||
device supports it, the ABS_MT_WIDTH_MAJOR may be used to provide the size
|
||||
of the approaching finger. Anisotropy and direction may be specified with
|
||||
ABS_MT_TOUCH_MINOR, ABS_MT_WIDTH_MINOR and ABS_MT_ORIENTATION. Devices with
|
||||
more granular information may specify general shapes as blobs, i.e., as a
|
||||
sequence of rectangular shapes grouped together by an
|
||||
ABS_MT_BLOB_ID. Finally, the ABS_MT_TOOL_TYPE may be used to specify
|
||||
whether the touching tool is a finger or a pen or something else.
|
||||
|
||||
|
||||
Event Semantics
|
||||
---------------
|
||||
|
||||
The word "contact" is used to describe a tool which is in direct contact
|
||||
with the surface. A finger, a pen or a rubber all classify as contacts.
|
||||
|
||||
ABS_MT_TOUCH_MAJOR
|
||||
|
||||
The length of the major axis of the contact. The length should be given in
|
||||
surface units. If the surface has an X times Y resolution, the largest
|
||||
possible value of ABS_MT_TOUCH_MAJOR is sqrt(X^2 + Y^2), the diagonal.
|
||||
|
||||
ABS_MT_TOUCH_MINOR
|
||||
|
||||
The length, in surface units, of the minor axis of the contact. If the
|
||||
contact is circular, this event can be omitted.
|
||||
|
||||
ABS_MT_WIDTH_MAJOR
|
||||
|
||||
The length, in surface units, of the major axis of the approaching
|
||||
tool. This should be understood as the size of the tool itself. The
|
||||
orientation of the contact and the approaching tool are assumed to be the
|
||||
same.
|
||||
|
||||
ABS_MT_WIDTH_MINOR
|
||||
|
||||
The length, in surface units, of the minor axis of the approaching
|
||||
tool. Omit if circular.
|
||||
|
||||
The above four values can be used to derive additional information about
|
||||
the contact. The ratio ABS_MT_TOUCH_MAJOR / ABS_MT_WIDTH_MAJOR approximates
|
||||
the notion of pressure. The fingers of the hand and the palm all have
|
||||
different characteristic widths [1].
|
||||
|
||||
ABS_MT_ORIENTATION
|
||||
|
||||
The orientation of the ellipse. The value should describe half a revolution
|
||||
clockwise around the touch center. The scale of the value is arbitrary, but
|
||||
zero should be returned for an ellipse aligned along the Y axis of the
|
||||
surface. As an example, an index finger placed straight onto the axis could
|
||||
return zero orientation, something negative when twisted to the left, and
|
||||
something positive when twisted to the right. This value can be omitted if
|
||||
the touching object is circular, or if the information is not available in
|
||||
the kernel driver.
|
||||
|
||||
ABS_MT_POSITION_X
|
||||
|
||||
The surface X coordinate of the center of the touching ellipse.
|
||||
|
||||
ABS_MT_POSITION_Y
|
||||
|
||||
The surface Y coordinate of the center of the touching ellipse.
|
||||
|
||||
ABS_MT_TOOL_TYPE
|
||||
|
||||
The type of approaching tool. A lot of kernel drivers cannot distinguish
|
||||
between different tool types, such as a finger or a pen. In such cases, the
|
||||
event should be omitted. The protocol currently supports MT_TOOL_FINGER and
|
||||
MT_TOOL_PEN [2].
|
||||
|
||||
ABS_MT_BLOB_ID
|
||||
|
||||
The BLOB_ID groups several packets together into one arbitrarily shaped
|
||||
contact. This is a low-level anonymous grouping, and should not be confused
|
||||
with the high-level contactID, explained below. Most kernel drivers will
|
||||
not have this capability, and can safely omit the event.
|
||||
|
||||
|
||||
Finger Tracking
|
||||
---------------
|
||||
|
||||
The kernel driver should generate an arbitrary enumeration of the set of
|
||||
anonymous contacts currently on the surface. The order in which the packets
|
||||
appear in the event stream is not important.
|
||||
|
||||
The process of finger tracking, i.e., to assign a unique contactID to each
|
||||
initiated contact on the surface, is left to user space; preferably the
|
||||
multi-touch X driver [3]. In that driver, the contactID stays the same and
|
||||
unique until the contact vanishes (when the finger leaves the surface). The
|
||||
problem of assigning a set of anonymous fingers to a set of identified
|
||||
fingers is a euclidian bipartite matching problem at each event update, and
|
||||
relies on a sufficiently rapid update rate.
|
||||
|
||||
Notes
|
||||
-----
|
||||
|
||||
In order to stay compatible with existing applications, the data
|
||||
reported in a finger packet must not be recognized as single-touch
|
||||
events. In addition, all finger data must bypass input filtering,
|
||||
since subsequent events of the same type refer to different fingers.
|
||||
|
||||
The first kernel driver to utilize the MT protocol is the bcm5974 driver,
|
||||
where examples can be found.
|
||||
|
||||
[1] With the extension ABS_MT_APPROACH_X and ABS_MT_APPROACH_Y, the
|
||||
difference between the contact position and the approaching tool position
|
||||
could be used to derive tilt.
|
||||
[2] The list can of course be extended.
|
||||
[3] The multi-touch X driver is currently in the prototyping stage. At the
|
||||
time of writing (April 2009), the MT protocol is not yet merged, and the
|
||||
prototype implements finger matching, basic mouse support and two-finger
|
||||
scrolling. The project aims at improving the quality of current multi-touch
|
||||
functionality available in the synaptics X driver, and in addition
|
||||
implement more advanced gestures.
|
101
Documentation/input/rotary-encoder.txt
Normal file
101
Documentation/input/rotary-encoder.txt
Normal file
|
@ -0,0 +1,101 @@
|
|||
rotary-encoder - a generic driver for GPIO connected devices
|
||||
Daniel Mack <daniel@caiaq.de>, Feb 2009
|
||||
|
||||
0. Function
|
||||
-----------
|
||||
|
||||
Rotary encoders are devices which are connected to the CPU or other
|
||||
peripherals with two wires. The outputs are phase-shifted by 90 degrees
|
||||
and by triggering on falling and rising edges, the turn direction can
|
||||
be determined.
|
||||
|
||||
The phase diagram of these two outputs look like this:
|
||||
|
||||
_____ _____ _____
|
||||
| | | | | |
|
||||
Channel A ____| |_____| |_____| |____
|
||||
|
||||
: : : : : : : : : : : :
|
||||
__ _____ _____ _____
|
||||
| | | | | | |
|
||||
Channel B |_____| |_____| |_____| |__
|
||||
|
||||
: : : : : : : : : : : :
|
||||
Event a b c d a b c d a b c d
|
||||
|
||||
|<-------->|
|
||||
one step
|
||||
|
||||
|
||||
For more information, please see
|
||||
http://en.wikipedia.org/wiki/Rotary_encoder
|
||||
|
||||
|
||||
1. Events / state machine
|
||||
-------------------------
|
||||
|
||||
a) Rising edge on channel A, channel B in low state
|
||||
This state is used to recognize a clockwise turn
|
||||
|
||||
b) Rising edge on channel B, channel A in high state
|
||||
When entering this state, the encoder is put into 'armed' state,
|
||||
meaning that there it has seen half the way of a one-step transition.
|
||||
|
||||
c) Falling edge on channel A, channel B in high state
|
||||
This state is used to recognize a counter-clockwise turn
|
||||
|
||||
d) Falling edge on channel B, channel A in low state
|
||||
Parking position. If the encoder enters this state, a full transition
|
||||
should have happend, unless it flipped back on half the way. The
|
||||
'armed' state tells us about that.
|
||||
|
||||
2. Platform requirements
|
||||
------------------------
|
||||
|
||||
As there is no hardware dependent call in this driver, the platform it is
|
||||
used with must support gpiolib. Another requirement is that IRQs must be
|
||||
able to fire on both edges.
|
||||
|
||||
|
||||
3. Board integration
|
||||
--------------------
|
||||
|
||||
To use this driver in your system, register a platform_device with the
|
||||
name 'rotary-encoder' and associate the IRQs and some specific platform
|
||||
data with it.
|
||||
|
||||
struct rotary_encoder_platform_data is declared in
|
||||
include/linux/rotary-encoder.h and needs to be filled with the number of
|
||||
steps the encoder has and can carry information about externally inverted
|
||||
signals (because of used invertig buffer or other reasons).
|
||||
|
||||
Because GPIO to IRQ mapping is platform specific, this information must
|
||||
be given in seperately to the driver. See the example below.
|
||||
|
||||
---------<snip>---------
|
||||
|
||||
/* board support file example */
|
||||
|
||||
#include <linux/input.h>
|
||||
#include <linux/rotary_encoder.h>
|
||||
|
||||
#define GPIO_ROTARY_A 1
|
||||
#define GPIO_ROTARY_B 2
|
||||
|
||||
static struct rotary_encoder_platform_data my_rotary_encoder_info = {
|
||||
.steps = 24,
|
||||
.axis = ABS_X,
|
||||
.gpio_a = GPIO_ROTARY_A,
|
||||
.gpio_b = GPIO_ROTARY_B,
|
||||
.inverted_a = 0,
|
||||
.inverted_b = 0,
|
||||
};
|
||||
|
||||
static struct platform_device rotary_encoder_device = {
|
||||
.name = "rotary-encoder",
|
||||
.id = 0,
|
||||
.dev = {
|
||||
.platform_data = &my_rotary_encoder_info,
|
||||
}
|
||||
};
|
||||
|
|
@ -2,8 +2,14 @@
|
|||
- this file (info on ISDN implementation for Linux)
|
||||
CREDITS
|
||||
- list of the kind folks that brought you this stuff.
|
||||
HiSax.cert
|
||||
- information about the ITU approval certification of the HiSax driver.
|
||||
INTERFACE
|
||||
- description of Linklevel and Hardwarelevel ISDN interface.
|
||||
- description of isdn4linux Link Level and Hardware Level interfaces.
|
||||
INTERFACE.fax
|
||||
- description of the fax subinterface of isdn4linux.
|
||||
INTERFACE.CAPI
|
||||
- description of kernel CAPI Link Level to Hardware Level interface.
|
||||
README
|
||||
- general info on what you need and what to do for Linux ISDN.
|
||||
README.FAQ
|
||||
|
@ -12,6 +18,8 @@ README.audio
|
|||
- info for running audio over ISDN.
|
||||
README.fax
|
||||
- info for using Fax over ISDN.
|
||||
README.gigaset
|
||||
- info on the drivers for Siemens Gigaset ISDN adapters.
|
||||
README.icn
|
||||
- info on the ICN-ISDN-card and its driver.
|
||||
README.HiSax
|
||||
|
@ -37,7 +45,8 @@ README.diversion
|
|||
README.sc
|
||||
- info on driver for Spellcaster cards.
|
||||
README.x25
|
||||
_ info for running X.25 over ISDN.
|
||||
- info for running X.25 over ISDN.
|
||||
README.hysdn
|
||||
- info on driver for Hypercope active HYSDN cards
|
||||
|
||||
- info on driver for Hypercope active HYSDN cards
|
||||
README.mISDN
|
||||
- info on the Modular ISDN subsystem (mISDN).
|
||||
|
|
213
Documentation/isdn/INTERFACE.CAPI
Normal file
213
Documentation/isdn/INTERFACE.CAPI
Normal file
|
@ -0,0 +1,213 @@
|
|||
Kernel CAPI Interface to Hardware Drivers
|
||||
-----------------------------------------
|
||||
|
||||
1. Overview
|
||||
|
||||
From the CAPI 2.0 specification:
|
||||
COMMON-ISDN-API (CAPI) is an application programming interface standard used
|
||||
to access ISDN equipment connected to basic rate interfaces (BRI) and primary
|
||||
rate interfaces (PRI).
|
||||
|
||||
Kernel CAPI operates as a dispatching layer between CAPI applications and CAPI
|
||||
hardware drivers. Hardware drivers register ISDN devices (controllers, in CAPI
|
||||
lingo) with Kernel CAPI to indicate their readiness to provide their service
|
||||
to CAPI applications. CAPI applications also register with Kernel CAPI,
|
||||
requesting association with a CAPI device. Kernel CAPI then dispatches the
|
||||
application registration to an available device, forwarding it to the
|
||||
corresponding hardware driver. Kernel CAPI then forwards CAPI messages in both
|
||||
directions between the application and the hardware driver.
|
||||
|
||||
Format and semantics of CAPI messages are specified in the CAPI 2.0 standard.
|
||||
This standard is freely available from http://www.capi.org.
|
||||
|
||||
|
||||
2. Driver and Device Registration
|
||||
|
||||
CAPI drivers optionally register themselves with Kernel CAPI by calling the
|
||||
Kernel CAPI function register_capi_driver() with a pointer to a struct
|
||||
capi_driver. This structure must be filled with the name and revision of the
|
||||
driver, and optionally a pointer to a callback function, add_card(). The
|
||||
registration can be revoked by calling the function unregister_capi_driver()
|
||||
with a pointer to the same struct capi_driver.
|
||||
|
||||
CAPI drivers must register each of the ISDN devices they control with Kernel
|
||||
CAPI by calling the Kernel CAPI function attach_capi_ctr() with a pointer to a
|
||||
struct capi_ctr before they can be used. This structure must be filled with
|
||||
the names of the driver and controller, and a number of callback function
|
||||
pointers which are subsequently used by Kernel CAPI for communicating with the
|
||||
driver. The registration can be revoked by calling the function
|
||||
detach_capi_ctr() with a pointer to the same struct capi_ctr.
|
||||
|
||||
Before the device can be actually used, the driver must fill in the device
|
||||
information fields 'manu', 'version', 'profile' and 'serial' in the capi_ctr
|
||||
structure of the device, and signal its readiness by calling capi_ctr_ready().
|
||||
From then on, Kernel CAPI may call the registered callback functions for the
|
||||
device.
|
||||
|
||||
If the device becomes unusable for any reason (shutdown, disconnect ...), the
|
||||
driver has to call capi_ctr_reseted(). This will prevent further calls to the
|
||||
callback functions by Kernel CAPI.
|
||||
|
||||
|
||||
3. Application Registration and Communication
|
||||
|
||||
Kernel CAPI forwards registration requests from applications (calls to CAPI
|
||||
operation CAPI_REGISTER) to an appropriate hardware driver by calling its
|
||||
register_appl() callback function. A unique Application ID (ApplID, u16) is
|
||||
allocated by Kernel CAPI and passed to register_appl() along with the
|
||||
parameter structure provided by the application. This is analogous to the
|
||||
open() operation on regular files or character devices.
|
||||
|
||||
After a successful return from register_appl(), CAPI messages from the
|
||||
application may be passed to the driver for the device via calls to the
|
||||
send_message() callback function. The CAPI message to send is stored in the
|
||||
data portion of an skb. Conversely, the driver may call Kernel CAPI's
|
||||
capi_ctr_handle_message() function to pass a received CAPI message to Kernel
|
||||
CAPI for forwarding to an application, specifying its ApplID.
|
||||
|
||||
Deregistration requests (CAPI operation CAPI_RELEASE) from applications are
|
||||
forwarded as calls to the release_appl() callback function, passing the same
|
||||
ApplID as with register_appl(). After return from release_appl(), no CAPI
|
||||
messages for that application may be passed to or from the device anymore.
|
||||
|
||||
|
||||
4. Data Structures
|
||||
|
||||
4.1 struct capi_driver
|
||||
|
||||
This structure describes a Kernel CAPI driver itself. It is used in the
|
||||
register_capi_driver() and unregister_capi_driver() functions, and contains
|
||||
the following non-private fields, all to be set by the driver before calling
|
||||
register_capi_driver():
|
||||
|
||||
char name[32]
|
||||
the name of the driver, as a zero-terminated ASCII string
|
||||
char revision[32]
|
||||
the revision number of the driver, as a zero-terminated ASCII string
|
||||
int (*add_card)(struct capi_driver *driver, capicardparams *data)
|
||||
a callback function pointer (may be NULL)
|
||||
|
||||
|
||||
4.2 struct capi_ctr
|
||||
|
||||
This structure describes an ISDN device (controller) handled by a Kernel CAPI
|
||||
driver. After registration via the attach_capi_ctr() function it is passed to
|
||||
all controller specific lower layer interface and callback functions to
|
||||
identify the controller to operate on.
|
||||
|
||||
It contains the following non-private fields:
|
||||
|
||||
- to be set by the driver before calling attach_capi_ctr():
|
||||
|
||||
struct module *owner
|
||||
pointer to the driver module owning the device
|
||||
|
||||
void *driverdata
|
||||
an opaque pointer to driver specific data, not touched by Kernel CAPI
|
||||
|
||||
char name[32]
|
||||
the name of the controller, as a zero-terminated ASCII string
|
||||
|
||||
char *driver_name
|
||||
the name of the driver, as a zero-terminated ASCII string
|
||||
|
||||
int (*load_firmware)(struct capi_ctr *ctrlr, capiloaddata *ldata)
|
||||
(optional) pointer to a callback function for sending firmware and
|
||||
configuration data to the device
|
||||
|
||||
void (*reset_ctr)(struct capi_ctr *ctrlr)
|
||||
pointer to a callback function for performing a reset on the device,
|
||||
releasing all registered applications
|
||||
|
||||
void (*register_appl)(struct capi_ctr *ctrlr, u16 applid,
|
||||
capi_register_params *rparam)
|
||||
void (*release_appl)(struct capi_ctr *ctrlr, u16 applid)
|
||||
pointers to callback functions for registration and deregistration of
|
||||
applications with the device
|
||||
|
||||
u16 (*send_message)(struct capi_ctr *ctrlr, struct sk_buff *skb)
|
||||
pointer to a callback function for sending a CAPI message to the
|
||||
device
|
||||
|
||||
char *(*procinfo)(struct capi_ctr *ctrlr)
|
||||
pointer to a callback function returning the entry for the device in
|
||||
the CAPI controller info table, /proc/capi/controller
|
||||
|
||||
read_proc_t *ctr_read_proc
|
||||
pointer to the read_proc callback function for the device's proc file
|
||||
system entry, /proc/capi/controllers/<n>; will be called with a
|
||||
pointer to the device's capi_ctr structure as the last (data) argument
|
||||
|
||||
- to be filled in before calling capi_ctr_ready():
|
||||
|
||||
u8 manu[CAPI_MANUFACTURER_LEN]
|
||||
value to return for CAPI_GET_MANUFACTURER
|
||||
|
||||
capi_version version
|
||||
value to return for CAPI_GET_VERSION
|
||||
|
||||
capi_profile profile
|
||||
value to return for CAPI_GET_PROFILE
|
||||
|
||||
u8 serial[CAPI_SERIAL_LEN]
|
||||
value to return for CAPI_GET_SERIAL
|
||||
|
||||
|
||||
5. Lower Layer Interface Functions
|
||||
|
||||
(declared in <linux/isdn/capilli.h>)
|
||||
|
||||
void register_capi_driver(struct capi_driver *drvr)
|
||||
void unregister_capi_driver(struct capi_driver *drvr)
|
||||
register/unregister a driver with Kernel CAPI
|
||||
|
||||
int attach_capi_ctr(struct capi_ctr *ctrlr)
|
||||
int detach_capi_ctr(struct capi_ctr *ctrlr)
|
||||
register/unregister a device (controller) with Kernel CAPI
|
||||
|
||||
void capi_ctr_ready(struct capi_ctr *ctrlr)
|
||||
void capi_ctr_reseted(struct capi_ctr *ctrlr)
|
||||
signal controller ready/not ready
|
||||
|
||||
void capi_ctr_suspend_output(struct capi_ctr *ctrlr)
|
||||
void capi_ctr_resume_output(struct capi_ctr *ctrlr)
|
||||
signal suspend/resume
|
||||
|
||||
void capi_ctr_handle_message(struct capi_ctr * ctrlr, u16 applid,
|
||||
struct sk_buff *skb)
|
||||
pass a received CAPI message to Kernel CAPI
|
||||
for forwarding to the specified application
|
||||
|
||||
|
||||
6. Helper Functions and Macros
|
||||
|
||||
Library functions (from <linux/isdn/capilli.h>):
|
||||
|
||||
void capilib_new_ncci(struct list_head *head, u16 applid,
|
||||
u32 ncci, u32 winsize)
|
||||
void capilib_free_ncci(struct list_head *head, u16 applid, u32 ncci)
|
||||
void capilib_release_appl(struct list_head *head, u16 applid)
|
||||
void capilib_release(struct list_head *head)
|
||||
void capilib_data_b3_conf(struct list_head *head, u16 applid,
|
||||
u32 ncci, u16 msgid)
|
||||
u16 capilib_data_b3_req(struct list_head *head, u16 applid,
|
||||
u32 ncci, u16 msgid)
|
||||
|
||||
|
||||
Macros to extract/set element values from/in a CAPI message header
|
||||
(from <linux/isdn/capiutil.h>):
|
||||
|
||||
Get Macro Set Macro Element (Type)
|
||||
|
||||
CAPIMSG_LEN(m) CAPIMSG_SETLEN(m, len) Total Length (u16)
|
||||
CAPIMSG_APPID(m) CAPIMSG_SETAPPID(m, applid) ApplID (u16)
|
||||
CAPIMSG_COMMAND(m) CAPIMSG_SETCOMMAND(m,cmd) Command (u8)
|
||||
CAPIMSG_SUBCOMMAND(m) CAPIMSG_SETSUBCOMMAND(m, cmd) Subcommand (u8)
|
||||
CAPIMSG_CMD(m) - Command*256
|
||||
+ Subcommand (u16)
|
||||
CAPIMSG_MSGID(m) CAPIMSG_SETMSGID(m, msgid) Message Number (u16)
|
||||
|
||||
CAPIMSG_CONTROL(m) CAPIMSG_SETCONTROL(m, contr) Controller/PLCI/NCCI
|
||||
(u32)
|
||||
CAPIMSG_DATALEN(m) CAPIMSG_SETDATALEN(m, len) Data Length (u16)
|
||||
|
|
@ -40,10 +40,16 @@ This document describes the Linux kernel Makefiles.
|
|||
--- 6.7 Custom kbuild commands
|
||||
--- 6.8 Preprocessing linker scripts
|
||||
|
||||
=== 7 Kbuild Variables
|
||||
=== 8 Makefile language
|
||||
=== 9 Credits
|
||||
=== 10 TODO
|
||||
=== 7 Kbuild syntax for exported headers
|
||||
--- 7.1 header-y
|
||||
--- 7.2 objhdr-y
|
||||
--- 7.3 destination-y
|
||||
--- 7.4 unifdef-y (deprecated)
|
||||
|
||||
=== 8 Kbuild Variables
|
||||
=== 9 Makefile language
|
||||
=== 10 Credits
|
||||
=== 11 TODO
|
||||
|
||||
=== 1 Overview
|
||||
|
||||
|
@ -310,6 +316,16 @@ more details, with real examples.
|
|||
#arch/m68k/fpsp040/Makefile
|
||||
ldflags-y := -x
|
||||
|
||||
subdir-ccflags-y, subdir-asflags-y
|
||||
The two flags listed above are similar to ccflags-y and as-falgs-y.
|
||||
The difference is that the subdir- variants has effect for the kbuild
|
||||
file where tey are present and all subdirectories.
|
||||
Options specified using subdir-* are added to the commandline before
|
||||
the options specified using the non-subdir variants.
|
||||
|
||||
Example:
|
||||
subdir-ccflags-y := -Werror
|
||||
|
||||
CFLAGS_$@, AFLAGS_$@
|
||||
|
||||
CFLAGS_$@ and AFLAGS_$@ only apply to commands in current
|
||||
|
@ -1143,8 +1159,69 @@ When kbuild executes, the following steps are followed (roughly):
|
|||
The kbuild infrastructure for *lds file are used in several
|
||||
architecture-specific files.
|
||||
|
||||
=== 7 Kbuild syntax for exported headers
|
||||
|
||||
=== 7 Kbuild Variables
|
||||
The kernel include a set of headers that is exported to userspace.
|
||||
Many headers can be exported as-is but other headers requires a
|
||||
minimal pre-processing before they are ready for user-space.
|
||||
The pre-processing does:
|
||||
- drop kernel specific annotations
|
||||
- drop include of compiler.h
|
||||
- drop all sections that is kernel internat (guarded by ifdef __KERNEL__)
|
||||
|
||||
Each relevant directory contain a file name "Kbuild" which specify the
|
||||
headers to be exported.
|
||||
See subsequent chapter for the syntax of the Kbuild file.
|
||||
|
||||
--- 7.1 header-y
|
||||
|
||||
header-y specify header files to be exported.
|
||||
|
||||
Example:
|
||||
#include/linux/Kbuild
|
||||
header-y += usb/
|
||||
header-y += aio_abi.h
|
||||
|
||||
The convention is to list one file per line and
|
||||
preferably in alphabetic order.
|
||||
|
||||
header-y also specify which subdirectories to visit.
|
||||
A subdirectory is identified by a trailing '/' which
|
||||
can be seen in the example above for the usb subdirectory.
|
||||
|
||||
Subdirectories are visited before their parent directories.
|
||||
|
||||
--- 7.2 objhdr-y
|
||||
|
||||
objhdr-y specifies generated files to be exported.
|
||||
Generated files are special as they need to be looked
|
||||
up in another directory when doing 'make O=...' builds.
|
||||
|
||||
Example:
|
||||
#include/linux/Kbuild
|
||||
objhdr-y += version.h
|
||||
|
||||
--- 7.3 destination-y
|
||||
|
||||
When an architecture have a set of exported headers that needs to be
|
||||
exported to a different directory destination-y is used.
|
||||
destination-y specify the destination directory for all exported
|
||||
headers in the file where it is present.
|
||||
|
||||
Example:
|
||||
#arch/xtensa/platforms/s6105/include/platform/Kbuild
|
||||
destination-y := include/linux
|
||||
|
||||
In the example above all exported headers in the Kbuild file
|
||||
will be located in the directory "include/linux" when exported.
|
||||
|
||||
|
||||
--- 7.4 unifdef-y (deprecated)
|
||||
|
||||
unifdef-y is deprecated. A direct replacement is header-y.
|
||||
|
||||
|
||||
=== 8 Kbuild Variables
|
||||
|
||||
The top Makefile exports the following variables:
|
||||
|
||||
|
@ -1206,7 +1283,7 @@ The top Makefile exports the following variables:
|
|||
INSTALL_MOD_STRIP will used as the option(s) to the strip command.
|
||||
|
||||
|
||||
=== 8 Makefile language
|
||||
=== 9 Makefile language
|
||||
|
||||
The kernel Makefiles are designed to be run with GNU Make. The Makefiles
|
||||
use only the documented features of GNU Make, but they do use many
|
||||
|
@ -1225,14 +1302,14 @@ time the left-hand side is used.
|
|||
There are some cases where "=" is appropriate. Usually, though, ":="
|
||||
is the right choice.
|
||||
|
||||
=== 9 Credits
|
||||
=== 10 Credits
|
||||
|
||||
Original version made by Michael Elizabeth Chastain, <mailto:mec@shout.net>
|
||||
Updates by Kai Germaschewski <kai@tp1.ruhr-uni-bochum.de>
|
||||
Updates by Sam Ravnborg <sam@ravnborg.org>
|
||||
Language QA by Jan Engelhardt <jengelh@gmx.de>
|
||||
|
||||
=== 10 TODO
|
||||
=== 11 TODO
|
||||
|
||||
- Describe how kbuild supports shipped files with _shipped.
|
||||
- Generating offset header files.
|
||||
|
|
|
@ -269,7 +269,10 @@ Use the argument mechanism to document members or constants.
|
|||
|
||||
Inside a struct description, you can use the "private:" and "public:"
|
||||
comment tags. Structure fields that are inside a "private:" area
|
||||
are not listed in the generated output documentation.
|
||||
are not listed in the generated output documentation. The "private:"
|
||||
and "public:" tags must begin immediately following a "/*" comment
|
||||
marker. They may optionally include comments between the ":" and the
|
||||
ending "*/" marker.
|
||||
|
||||
Example:
|
||||
|
||||
|
@ -283,7 +286,7 @@ Example:
|
|||
struct my_struct {
|
||||
int a;
|
||||
int b;
|
||||
/* private: */
|
||||
/* private: internal use only */
|
||||
int c;
|
||||
};
|
||||
|
||||
|
|
|
@ -134,7 +134,7 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||
./include/asm/setup.h as COMMAND_LINE_SIZE.
|
||||
|
||||
|
||||
acpi= [HW,ACPI,X86-64,i386]
|
||||
acpi= [HW,ACPI,X86]
|
||||
Advanced Configuration and Power Interface
|
||||
Format: { force | off | ht | strict | noirq | rsdt }
|
||||
force -- enable ACPI if default was off
|
||||
|
@ -218,7 +218,7 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||
acpi_osi="!string2" # remove built-in string2
|
||||
acpi_osi= # disable all strings
|
||||
|
||||
acpi_pm_good [X86-32,X86-64]
|
||||
acpi_pm_good [X86]
|
||||
Override the pmtimer bug detection: force the kernel
|
||||
to assume that this machine's pmtimer latches its value
|
||||
and always returns good values.
|
||||
|
@ -231,6 +231,35 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||
power state again in power transition.
|
||||
1 : disable the power state check
|
||||
|
||||
acpi_sci= [HW,ACPI] ACPI System Control Interrupt trigger mode
|
||||
Format: { level | edge | high | low }
|
||||
|
||||
acpi_serialize [HW,ACPI] force serialization of AML methods
|
||||
|
||||
acpi_skip_timer_override [HW,ACPI]
|
||||
Recognize and ignore IRQ0/pin2 Interrupt Override.
|
||||
For broken nForce2 BIOS resulting in XT-PIC timer.
|
||||
|
||||
acpi_sleep= [HW,ACPI] Sleep options
|
||||
Format: { s3_bios, s3_mode, s3_beep, s4_nohwsig,
|
||||
old_ordering, s4_nonvs }
|
||||
See Documentation/power/video.txt for information on
|
||||
s3_bios and s3_mode.
|
||||
s3_beep is for debugging; it makes the PC's speaker beep
|
||||
as soon as the kernel's real-mode entry point is called.
|
||||
s4_nohwsig prevents ACPI hardware signature from being
|
||||
used during resume from hibernation.
|
||||
old_ordering causes the ACPI 1.0 ordering of the _PTS
|
||||
control method, with respect to putting devices into
|
||||
low power states, to be enforced (the ACPI 2.0 ordering
|
||||
of _PTS is used by default).
|
||||
s4_nonvs prevents the kernel from saving/restoring the
|
||||
ACPI NVS memory during hibernation.
|
||||
|
||||
acpi_use_timer_override [HW,ACPI]
|
||||
Use timer override. For some broken Nvidia NF5 boards
|
||||
that require a timer override, but don't have HPET
|
||||
|
||||
acpi_enforce_resources= [ACPI]
|
||||
{ strict | lax | no }
|
||||
Check for resource conflicts between native drivers
|
||||
|
@ -250,6 +279,9 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||
ad1848= [HW,OSS]
|
||||
Format: <io>,<irq>,<dma>,<dma2>,<type>
|
||||
|
||||
add_efi_memmap [EFI; X86] Include EFI memory map in
|
||||
kernel's map of available physical RAM.
|
||||
|
||||
advansys= [HW,SCSI]
|
||||
See header of drivers/scsi/advansys.c.
|
||||
|
||||
|
@ -459,7 +491,7 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||
Also note the kernel might malfunction if you disable
|
||||
some critical bits.
|
||||
|
||||
code_bytes [IA32/X86_64] How many bytes of object code to print
|
||||
code_bytes [X86] How many bytes of object code to print
|
||||
in an oops report.
|
||||
Range: 0 - 8192
|
||||
Default: 64
|
||||
|
@ -592,7 +624,7 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||
MTRR settings. This parameter disables that behavior,
|
||||
possibly causing your machine to run very slowly.
|
||||
|
||||
disable_timer_pin_1 [i386,x86-64]
|
||||
disable_timer_pin_1 [X86]
|
||||
Disable PIN 1 of APIC timer
|
||||
Can be useful to work around chipset bugs.
|
||||
|
||||
|
@ -624,7 +656,7 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||
UART at the specified I/O port or MMIO address.
|
||||
The options are the same as for ttyS, above.
|
||||
|
||||
earlyprintk= [X86-32,X86-64,SH,BLACKFIN]
|
||||
earlyprintk= [X86,SH,BLACKFIN]
|
||||
earlyprintk=vga
|
||||
earlyprintk=serial[,ttySn[,baudrate]]
|
||||
earlyprintk=dbgp
|
||||
|
@ -659,7 +691,7 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||
See Documentation/block/as-iosched.txt and
|
||||
Documentation/block/deadline-iosched.txt for details.
|
||||
|
||||
elfcorehdr= [IA64,PPC,SH,X86-32,X86_64]
|
||||
elfcorehdr= [IA64,PPC,SH,X86]
|
||||
Specifies physical address of start of kernel core
|
||||
image elf header. Generally kexec loader will
|
||||
pass this option to capture kernel.
|
||||
|
@ -938,7 +970,7 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||
See comment before marvel_specify_io7 in
|
||||
arch/alpha/kernel/core_marvel.c.
|
||||
|
||||
io_delay= [X86-32,X86-64] I/O delay method
|
||||
io_delay= [X86] I/O delay method
|
||||
0x80
|
||||
Standard port 0x80 based delay
|
||||
0xed
|
||||
|
@ -1000,7 +1032,7 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||
|
||||
keepinitrd [HW,ARM]
|
||||
|
||||
kernelcore=nn[KMG] [KNL,X86-32,IA-64,PPC,X86-64] This parameter
|
||||
kernelcore=nn[KMG] [KNL,X86,IA-64,PPC] This parameter
|
||||
specifies the amount of memory usable by the kernel
|
||||
for non-movable allocations. The requested amount is
|
||||
spread evenly throughout all nodes in the system. The
|
||||
|
@ -1034,7 +1066,7 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||
Configure the RouterBoard 532 series on-chip
|
||||
Ethernet adapter MAC address.
|
||||
|
||||
kstack=N [X86-32,X86-64] Print N words from the kernel stack
|
||||
kstack=N [X86] Print N words from the kernel stack
|
||||
in oops dumps.
|
||||
|
||||
l2cr= [PPC]
|
||||
|
@ -1044,7 +1076,7 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||
lapic [X86-32,APIC] Enable the local APIC even if BIOS
|
||||
disabled it.
|
||||
|
||||
lapic_timer_c2_ok [X86-32,x86-64,APIC] trust the local apic timer
|
||||
lapic_timer_c2_ok [X86,APIC] trust the local apic timer
|
||||
in C2 power state.
|
||||
|
||||
libata.dma= [LIBATA] DMA control
|
||||
|
@ -1229,7 +1261,7 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||
[KNL,SH] Allow user to override the default size for
|
||||
per-device physically contiguous DMA buffers.
|
||||
|
||||
memmap=exactmap [KNL,X86-32,X86_64] Enable setting of an exact
|
||||
memmap=exactmap [KNL,X86] Enable setting of an exact
|
||||
E820 memory map, as specified by the user.
|
||||
Such memmap=exactmap lines can be constructed based on
|
||||
BIOS output or other requirements. See the memmap=nn@ss
|
||||
|
@ -1320,7 +1352,7 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||
mousedev.yres= [MOUSE] Vertical screen resolution, used for devices
|
||||
reporting absolute coordinates, such as tablets
|
||||
|
||||
movablecore=nn[KMG] [KNL,X86-32,IA-64,PPC,X86-64] This parameter
|
||||
movablecore=nn[KMG] [KNL,X86,IA-64,PPC] This parameter
|
||||
is similar to kernelcore except it specifies the
|
||||
amount of memory used for migratable allocations.
|
||||
If both kernelcore and movablecore is specified,
|
||||
|
@ -1422,7 +1454,7 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||
when a NMI is triggered.
|
||||
Format: [state][,regs][,debounce][,die]
|
||||
|
||||
nmi_watchdog= [KNL,BUGS=X86-32,X86-64] Debugging features for SMP kernels
|
||||
nmi_watchdog= [KNL,BUGS=X86] Debugging features for SMP kernels
|
||||
Format: [panic,][num]
|
||||
Valid num: 0,1,2
|
||||
0 - turn nmi_watchdog off
|
||||
|
@ -1475,11 +1507,11 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||
|
||||
nodsp [SH] Disable hardware DSP at boot time.
|
||||
|
||||
noefi [X86-32,X86-64] Disable EFI runtime services support.
|
||||
noefi [X86] Disable EFI runtime services support.
|
||||
|
||||
noexec [IA-64]
|
||||
|
||||
noexec [X86-32,X86-64]
|
||||
noexec [X86]
|
||||
On X86-32 available only on PAE configured kernels.
|
||||
noexec=on: enable non-executable mappings (default)
|
||||
noexec=off: disable non-executable mappings
|
||||
|
@ -1525,7 +1557,7 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||
noirqdebug [X86-32] Disables the code which attempts to detect and
|
||||
disable unhandled interrupt sources.
|
||||
|
||||
no_timer_check [X86-32,X86_64,APIC] Disables the code which tests for
|
||||
no_timer_check [X86,APIC] Disables the code which tests for
|
||||
broken timer IRQ sources.
|
||||
|
||||
noisapnp [ISAPNP] Disables ISA PnP code.
|
||||
|
@ -1588,6 +1620,8 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||
|
||||
nowb [ARM]
|
||||
|
||||
nox2apic [X86-64,APIC] Do not enable x2APIC mode.
|
||||
|
||||
nptcg= [IA64] Override max number of concurrent global TLB
|
||||
purges which is reported from either PAL_VM_SUMMARY or
|
||||
SAL PALO.
|
||||
|
@ -1689,7 +1723,7 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||
disable the use of PCIE advanced error reporting.
|
||||
nodomains [PCI] Disable support for multiple PCI
|
||||
root domains (aka PCI segments, in ACPI-speak).
|
||||
nommconf [X86-32,X86_64] Disable use of MMCONFIG for PCI
|
||||
nommconf [X86] Disable use of MMCONFIG for PCI
|
||||
Configuration
|
||||
nomsi [MSI] If the PCI_MSI kernel config parameter is
|
||||
enabled, this kernel boot option can be used to
|
||||
|
@ -1838,6 +1872,12 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||
autoconfiguration.
|
||||
Ranges are in pairs (memory base and size).
|
||||
|
||||
ports= [IP_VS_FTP] IPVS ftp helper module
|
||||
Default is 21.
|
||||
Up to 8 (IP_VS_APP_MAX_PORTS) ports
|
||||
may be specified.
|
||||
Format: <port>,<port>....
|
||||
|
||||
print-fatal-signals=
|
||||
[KNL] debug: print fatal signals
|
||||
print-fatal-signals=1: print segfault info to
|
||||
|
@ -2380,7 +2420,7 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||
reported either.
|
||||
|
||||
unknown_nmi_panic
|
||||
[X86-32,X86-64]
|
||||
[X86]
|
||||
Set unknown_nmi_panic=1 early on boot.
|
||||
|
||||
usbcore.autosuspend=
|
||||
|
@ -2447,12 +2487,12 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||
medium is write-protected).
|
||||
Example: quirks=0419:aaf5:rl,0421:0433:rc
|
||||
|
||||
vdso= [X86-32,SH,x86-64]
|
||||
vdso= [X86,SH]
|
||||
vdso=2: enable compat VDSO (default with COMPAT_VDSO)
|
||||
vdso=1: enable VDSO (default)
|
||||
vdso=0: disable VDSO mapping
|
||||
|
||||
vdso32= [X86-32,X86-64]
|
||||
vdso32= [X86]
|
||||
vdso32=2: enable compat VDSO (default with COMPAT_VDSO)
|
||||
vdso32=1: enable 32-bit VDSO (default)
|
||||
vdso32=0: disable 32-bit VDSO mapping
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
ThinkPad ACPI Extras Driver
|
||||
|
||||
Version 0.22
|
||||
November 23rd, 2008
|
||||
Version 0.23
|
||||
April 10th, 2009
|
||||
|
||||
Borislav Deianov <borislav@users.sf.net>
|
||||
Henrique de Moraes Holschuh <hmh@hmh.eng.br>
|
||||
|
|
1
Documentation/lguest/.gitignore
vendored
Normal file
1
Documentation/lguest/.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
lguest
|
|
@ -3,11 +3,11 @@
|
|||
/, /` - or, A Young Coder's Illustrated Hypervisor
|
||||
\\"--\\ http://lguest.ozlabs.org
|
||||
|
||||
Lguest is designed to be a minimal hypervisor for the Linux kernel, for
|
||||
Linux developers and users to experiment with virtualization with the
|
||||
minimum of complexity. Nonetheless, it should have sufficient
|
||||
features to make it useful for specific tasks, and, of course, you are
|
||||
encouraged to fork and enhance it (see drivers/lguest/README).
|
||||
Lguest is designed to be a minimal 32-bit x86 hypervisor for the Linux kernel,
|
||||
for Linux developers and users to experiment with virtualization with the
|
||||
minimum of complexity. Nonetheless, it should have sufficient features to
|
||||
make it useful for specific tasks, and, of course, you are encouraged to fork
|
||||
and enhance it (see drivers/lguest/README).
|
||||
|
||||
Features:
|
||||
|
||||
|
@ -37,6 +37,7 @@ Running Lguest:
|
|||
"Paravirtualized guest support" = Y
|
||||
"Lguest guest support" = Y
|
||||
"High Memory Support" = off/4GB
|
||||
"PAE (Physical Address Extension) Support" = N
|
||||
"Alignment value to which kernel should be aligned" = 0x100000
|
||||
(CONFIG_PARAVIRT=y, CONFIG_LGUEST_GUEST=y, CONFIG_HIGHMEM64G=n and
|
||||
CONFIG_PHYSICAL_ALIGN=0x100000)
|
||||
|
|
|
@ -54,9 +54,9 @@ locking error messages, inside curlies. A contrived example:
|
|||
The bit position indicates STATE, STATE-read, for each of the states listed
|
||||
above, and the character displayed in each indicates:
|
||||
|
||||
'.' acquired while irqs disabled
|
||||
'+' acquired in irq context
|
||||
'-' acquired with irqs enabled
|
||||
'.' acquired while irqs disabled and not in irq context
|
||||
'-' acquired in irq context
|
||||
'+' acquired with irqs enabled
|
||||
'?' acquired in irq context with irqs enabled.
|
||||
|
||||
Unused mutexes cannot be part of the cause of an error.
|
||||
|
|
BIN
Documentation/logo.gif
Normal file
BIN
Documentation/logo.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 16 KiB |
File diff suppressed because one or more lines are too long
Before Width: | Height: | Size: 303 KiB |
|
@ -1,4 +1,13 @@
|
|||
Tux is taking a three month sabbatical to work as a barber, so Tuz is
|
||||
standing in. He's taken pains to ensure you'll hardly notice.
|
||||
This is the full-colour version of the currently unofficial Linux logo
|
||||
("currently unofficial" just means that there has been no paperwork and
|
||||
that I have not really announced it yet). It was created by Larry Ewing,
|
||||
and is freely usable as long as you acknowledge Larry as the original
|
||||
artist.
|
||||
|
||||
Note that there are black-and-white versions of this available that
|
||||
scale down to smaller sizes and are better for letterheads or whatever
|
||||
you want to use it for: for the full range of logos take a look at
|
||||
Larry's web-page:
|
||||
|
||||
http://www.isc.tamu.edu/~lewing/linux/
|
||||
|
||||
Image by Andrew McGown and Josh Bush. Image is licensed CC BY-SA.
|
||||
|
|
|
@ -1242,7 +1242,7 @@ monitoring is enabled, and vice-versa.
|
|||
To add ARP targets:
|
||||
# echo +192.168.0.100 > /sys/class/net/bond0/bonding/arp_ip_target
|
||||
# echo +192.168.0.101 > /sys/class/net/bond0/bonding/arp_ip_target
|
||||
NOTE: up to 10 target addresses may be specified.
|
||||
NOTE: up to 16 target addresses may be specified.
|
||||
|
||||
To remove an ARP target:
|
||||
# echo -192.168.0.100 > /sys/class/net/bond0/bonding/arp_ip_target
|
||||
|
|
|
@ -43,12 +43,11 @@ Table of Contents
|
|||
2) Representing devices without a current OF specification
|
||||
a) PHY nodes
|
||||
b) Interrupt controllers
|
||||
c) CFI or JEDEC memory-mapped NOR flash
|
||||
d) 4xx/Axon EMAC ethernet nodes
|
||||
e) Xilinx IP cores
|
||||
f) USB EHCI controllers
|
||||
g) MDIO on GPIOs
|
||||
h) SPI busses
|
||||
c) 4xx/Axon EMAC ethernet nodes
|
||||
d) Xilinx IP cores
|
||||
e) USB EHCI controllers
|
||||
f) MDIO on GPIOs
|
||||
g) SPI busses
|
||||
|
||||
VII - Marvell Discovery mv64[345]6x System Controller chips
|
||||
1) The /system-controller node
|
||||
|
@ -999,7 +998,7 @@ compatibility.
|
|||
translation of SOC addresses for memory mapped SOC registers.
|
||||
- bus-frequency: Contains the bus frequency for the SOC node.
|
||||
Typically, the value of this field is filled in by the boot
|
||||
loader.
|
||||
loader.
|
||||
|
||||
|
||||
Recommended properties:
|
||||
|
@ -1287,71 +1286,7 @@ platforms are moved over to use the flattened-device-tree model.
|
|||
device_type = "open-pic";
|
||||
};
|
||||
|
||||
c) CFI or JEDEC memory-mapped NOR flash
|
||||
|
||||
Flash chips (Memory Technology Devices) are often used for solid state
|
||||
file systems on embedded devices.
|
||||
|
||||
- compatible : should contain the specific model of flash chip(s)
|
||||
used, if known, followed by either "cfi-flash" or "jedec-flash"
|
||||
- reg : Address range of the flash chip
|
||||
- bank-width : Width (in bytes) of the flash bank. Equal to the
|
||||
device width times the number of interleaved chips.
|
||||
- device-width : (optional) Width of a single flash chip. If
|
||||
omitted, assumed to be equal to 'bank-width'.
|
||||
- #address-cells, #size-cells : Must be present if the flash has
|
||||
sub-nodes representing partitions (see below). In this case
|
||||
both #address-cells and #size-cells must be equal to 1.
|
||||
|
||||
For JEDEC compatible devices, the following additional properties
|
||||
are defined:
|
||||
|
||||
- vendor-id : Contains the flash chip's vendor id (1 byte).
|
||||
- device-id : Contains the flash chip's device id (1 byte).
|
||||
|
||||
In addition to the information on the flash bank itself, the
|
||||
device tree may optionally contain additional information
|
||||
describing partitions of the flash address space. This can be
|
||||
used on platforms which have strong conventions about which
|
||||
portions of the flash are used for what purposes, but which don't
|
||||
use an on-flash partition table such as RedBoot.
|
||||
|
||||
Each partition is represented as a sub-node of the flash device.
|
||||
Each node's name represents the name of the corresponding
|
||||
partition of the flash device.
|
||||
|
||||
Flash partitions
|
||||
- reg : The partition's offset and size within the flash bank.
|
||||
- label : (optional) The label / name for this flash partition.
|
||||
If omitted, the label is taken from the node name (excluding
|
||||
the unit address).
|
||||
- read-only : (optional) This parameter, if present, is a hint to
|
||||
Linux that this flash partition should only be mounted
|
||||
read-only. This is usually used for flash partitions
|
||||
containing early-boot firmware images or data which should not
|
||||
be clobbered.
|
||||
|
||||
Example:
|
||||
|
||||
flash@ff000000 {
|
||||
compatible = "amd,am29lv128ml", "cfi-flash";
|
||||
reg = <ff000000 01000000>;
|
||||
bank-width = <4>;
|
||||
device-width = <1>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
fs@0 {
|
||||
label = "fs";
|
||||
reg = <0 f80000>;
|
||||
};
|
||||
firmware@f80000 {
|
||||
label ="firmware";
|
||||
reg = <f80000 80000>;
|
||||
read-only;
|
||||
};
|
||||
};
|
||||
|
||||
d) 4xx/Axon EMAC ethernet nodes
|
||||
c) 4xx/Axon EMAC ethernet nodes
|
||||
|
||||
The EMAC ethernet controller in IBM and AMCC 4xx chips, and also
|
||||
the Axon bridge. To operate this needs to interact with a ths
|
||||
|
@ -1499,7 +1434,7 @@ platforms are moved over to use the flattened-device-tree model.
|
|||
available.
|
||||
For Axon: 0x0000012a
|
||||
|
||||
e) Xilinx IP cores
|
||||
d) Xilinx IP cores
|
||||
|
||||
The Xilinx EDK toolchain ships with a set of IP cores (devices) for use
|
||||
in Xilinx Spartan and Virtex FPGAs. The devices cover the whole range
|
||||
|
@ -1761,7 +1696,7 @@ platforms are moved over to use the flattened-device-tree model.
|
|||
listed above, nodes for these devices should include a phy-handle
|
||||
property, and may include other common network device properties
|
||||
like local-mac-address.
|
||||
|
||||
|
||||
iv) Xilinx Uartlite
|
||||
|
||||
Xilinx uartlite devices are simple fixed speed serial ports.
|
||||
|
@ -1793,7 +1728,7 @@ platforms are moved over to use the flattened-device-tree model.
|
|||
- reg-offset : A value of 3 is required
|
||||
- reg-shift : A value of 2 is required
|
||||
|
||||
f) USB EHCI controllers
|
||||
e) USB EHCI controllers
|
||||
|
||||
Required properties:
|
||||
- compatible : should be "usb-ehci".
|
||||
|
@ -1819,7 +1754,7 @@ platforms are moved over to use the flattened-device-tree model.
|
|||
big-endian;
|
||||
};
|
||||
|
||||
g) MDIO on GPIOs
|
||||
f) MDIO on GPIOs
|
||||
|
||||
Currently defined compatibles:
|
||||
- virtual,gpio-mdio
|
||||
|
@ -1839,7 +1774,7 @@ platforms are moved over to use the flattened-device-tree model.
|
|||
&qe_pio_c 6>;
|
||||
};
|
||||
|
||||
h) SPI (Serial Peripheral Interface) busses
|
||||
g) SPI (Serial Peripheral Interface) busses
|
||||
|
||||
SPI busses can be described with a node for the SPI master device
|
||||
and a set of child nodes for each SPI slave on the bus. For this
|
||||
|
|
|
@ -7,8 +7,10 @@ Required properties :
|
|||
|
||||
Recommended properties :
|
||||
|
||||
- compatible : Should be "fsl-i2c" for parts compatible with
|
||||
Freescale I2C specifications.
|
||||
- compatible : compatibility list with 2 entries, the first should
|
||||
be "fsl,CHIP-i2c" where CHIP is the name of a compatible processor,
|
||||
e.g. mpc8313, mpc8543, mpc8544, mpc5200 or mpc5200b. The second one
|
||||
should be "fsl-i2c".
|
||||
- interrupts : <a b> where a is the interrupt number and b is a
|
||||
field that represents an encoding of the sense and level
|
||||
information for the interrupt. This should be encoded based on
|
||||
|
@ -16,17 +18,31 @@ Recommended properties :
|
|||
controller you have.
|
||||
- interrupt-parent : the phandle for the interrupt controller that
|
||||
services interrupts for this device.
|
||||
- dfsrr : boolean; if defined, indicates that this I2C device has
|
||||
a digital filter sampling rate register
|
||||
- fsl5200-clocking : boolean; if defined, indicated that this device
|
||||
uses the FSL 5200 clocking mechanism.
|
||||
- fsl,preserve-clocking : boolean; if defined, the clock settings
|
||||
from the bootloader are preserved (not touched).
|
||||
- clock-frequency : desired I2C bus clock frequency in Hz.
|
||||
|
||||
Example :
|
||||
i2c@3000 {
|
||||
interrupt-parent = <40000>;
|
||||
interrupts = <1b 3>;
|
||||
reg = <3000 18>;
|
||||
device_type = "i2c";
|
||||
compatible = "fsl-i2c";
|
||||
dfsrr;
|
||||
Examples :
|
||||
|
||||
i2c@3d00 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
compatible = "fsl,mpc5200b-i2c","fsl,mpc5200-i2c","fsl-i2c";
|
||||
cell-index = <0>;
|
||||
reg = <0x3d00 0x40>;
|
||||
interrupts = <2 15 0>;
|
||||
interrupt-parent = <&mpc5200_pic>;
|
||||
fsl,preserve-clocking;
|
||||
};
|
||||
|
||||
i2c@3100 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
cell-index = <1>;
|
||||
compatible = "fsl,mpc8544-i2c", "fsl-i2c";
|
||||
reg = <0x3100 0x100>;
|
||||
interrupts = <43 2>;
|
||||
interrupt-parent = <&mpic>;
|
||||
clock-frequency = <400000>;
|
||||
};
|
||||
|
||||
|
|
80
Documentation/powerpc/dts-bindings/mtd-physmap.txt
Normal file
80
Documentation/powerpc/dts-bindings/mtd-physmap.txt
Normal file
|
@ -0,0 +1,80 @@
|
|||
CFI or JEDEC memory-mapped NOR flash
|
||||
|
||||
Flash chips (Memory Technology Devices) are often used for solid state
|
||||
file systems on embedded devices.
|
||||
|
||||
- compatible : should contain the specific model of flash chip(s)
|
||||
used, if known, followed by either "cfi-flash" or "jedec-flash"
|
||||
- reg : Address range(s) of the flash chip(s)
|
||||
It's possible to (optionally) define multiple "reg" tuples so that
|
||||
non-identical NOR chips can be described in one flash node.
|
||||
- bank-width : Width (in bytes) of the flash bank. Equal to the
|
||||
device width times the number of interleaved chips.
|
||||
- device-width : (optional) Width of a single flash chip. If
|
||||
omitted, assumed to be equal to 'bank-width'.
|
||||
- #address-cells, #size-cells : Must be present if the flash has
|
||||
sub-nodes representing partitions (see below). In this case
|
||||
both #address-cells and #size-cells must be equal to 1.
|
||||
|
||||
For JEDEC compatible devices, the following additional properties
|
||||
are defined:
|
||||
|
||||
- vendor-id : Contains the flash chip's vendor id (1 byte).
|
||||
- device-id : Contains the flash chip's device id (1 byte).
|
||||
|
||||
In addition to the information on the flash bank itself, the
|
||||
device tree may optionally contain additional information
|
||||
describing partitions of the flash address space. This can be
|
||||
used on platforms which have strong conventions about which
|
||||
portions of the flash are used for what purposes, but which don't
|
||||
use an on-flash partition table such as RedBoot.
|
||||
|
||||
Each partition is represented as a sub-node of the flash device.
|
||||
Each node's name represents the name of the corresponding
|
||||
partition of the flash device.
|
||||
|
||||
Flash partitions
|
||||
- reg : The partition's offset and size within the flash bank.
|
||||
- label : (optional) The label / name for this flash partition.
|
||||
If omitted, the label is taken from the node name (excluding
|
||||
the unit address).
|
||||
- read-only : (optional) This parameter, if present, is a hint to
|
||||
Linux that this flash partition should only be mounted
|
||||
read-only. This is usually used for flash partitions
|
||||
containing early-boot firmware images or data which should not
|
||||
be clobbered.
|
||||
|
||||
Example:
|
||||
|
||||
flash@ff000000 {
|
||||
compatible = "amd,am29lv128ml", "cfi-flash";
|
||||
reg = <ff000000 01000000>;
|
||||
bank-width = <4>;
|
||||
device-width = <1>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
fs@0 {
|
||||
label = "fs";
|
||||
reg = <0 f80000>;
|
||||
};
|
||||
firmware@f80000 {
|
||||
label ="firmware";
|
||||
reg = <f80000 80000>;
|
||||
read-only;
|
||||
};
|
||||
};
|
||||
|
||||
Here an example with multiple "reg" tuples:
|
||||
|
||||
flash@f0000000,0 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "intel,PC48F4400P0VB", "cfi-flash";
|
||||
reg = <0 0x00000000 0x02000000
|
||||
0 0x02000000 0x02000000>;
|
||||
bank-width = <2>;
|
||||
partition@0 {
|
||||
label = "test-part1";
|
||||
reg = <0 0x04000000>;
|
||||
};
|
||||
};
|
|
@ -169,7 +169,7 @@ PCI SSID look-up.
|
|||
What `model` option values are available depends on the codec chip.
|
||||
Check your codec chip from the codec proc file (see "Codec Proc-File"
|
||||
section below). It will show the vendor/product name of your codec
|
||||
chip. Then, see Documentation/sound/alsa/HD-Audio-Modelstxt file,
|
||||
chip. Then, see Documentation/sound/alsa/HD-Audio-Models.txt file,
|
||||
the section of HD-audio driver. You can find a list of codecs
|
||||
and `model` options belonging to each codec. For example, for Realtek
|
||||
ALC262 codec chip, pass `model=ultra` for devices that are compatible
|
||||
|
@ -177,7 +177,7 @@ with Samsung Q1 Ultra.
|
|||
|
||||
Thus, the first thing you can do for any brand-new, unsupported and
|
||||
non-working HD-audio hardware is to check HD-audio codec and several
|
||||
different `model` option values. If you have a luck, some of them
|
||||
different `model` option values. If you have any luck, some of them
|
||||
might suit with your device well.
|
||||
|
||||
Some codecs such as ALC880 have a special model option `model=test`.
|
||||
|
|
|
@ -42,6 +42,14 @@ sure that bitwise types don't get mixed up (little-endian vs big-endian
|
|||
vs cpu-endian vs whatever), and there the constant "0" really _is_
|
||||
special.
|
||||
|
||||
__bitwise__ - to be used for relatively compact stuff (gfp_t, etc.) that
|
||||
is mostly warning-free and is supposed to stay that way. Warnings will
|
||||
be generated without __CHECK_ENDIAN__.
|
||||
|
||||
__bitwise - noisy stuff; in particular, __le*/__be* are that. We really
|
||||
don't want to drown in noise unless we'd explicitly asked for it.
|
||||
|
||||
|
||||
Getting sparse
|
||||
~~~~~~~~~~~~~~
|
||||
|
||||
|
|
|
@ -511,10 +511,16 @@ SPI MASTER METHODS
|
|||
This sets up the device clock rate, SPI mode, and word sizes.
|
||||
Drivers may change the defaults provided by board_info, and then
|
||||
call spi_setup(spi) to invoke this routine. It may sleep.
|
||||
|
||||
Unless each SPI slave has its own configuration registers, don't
|
||||
change them right away ... otherwise drivers could corrupt I/O
|
||||
that's in progress for other SPI devices.
|
||||
|
||||
** BUG ALERT: for some reason the first version of
|
||||
** many spi_master drivers seems to get this wrong.
|
||||
** When you code setup(), ASSUME that the controller
|
||||
** is actively processing transfers for another device.
|
||||
|
||||
master->transfer(struct spi_device *spi, struct spi_message *message)
|
||||
This must not sleep. Its responsibility is arrange that the
|
||||
transfer happens and its complete() callback is issued. The two
|
||||
|
|
|
@ -95,7 +95,7 @@ of struct cmsghdr structures with appended data.
|
|||
|
||||
There is only one file in this directory.
|
||||
unix_dgram_qlen limits the max number of datagrams queued in Unix domain
|
||||
socket's buffer. It will not take effect unless PF_UNIX flag is spicified.
|
||||
socket's buffer. It will not take effect unless PF_UNIX flag is specified.
|
||||
|
||||
|
||||
3. /proc/sys/net/ipv4 - IPV4 settings
|
||||
|
|
|
@ -90,6 +90,10 @@ will itself start writeback.
|
|||
If dirty_bytes is written, dirty_ratio becomes a function of its value
|
||||
(dirty_bytes / the amount of dirtyable system memory).
|
||||
|
||||
Note: the minimum value allowed for dirty_bytes is two pages (in bytes); any
|
||||
value lower than this limit will be ignored and the old configuration will be
|
||||
retained.
|
||||
|
||||
==============================================================
|
||||
|
||||
dirty_expire_centisecs
|
||||
|
|
55
Documentation/tomoyo.txt
Normal file
55
Documentation/tomoyo.txt
Normal file
|
@ -0,0 +1,55 @@
|
|||
--- What is TOMOYO? ---
|
||||
|
||||
TOMOYO is a name-based MAC extension (LSM module) for the Linux kernel.
|
||||
|
||||
LiveCD-based tutorials are available at
|
||||
http://tomoyo.sourceforge.jp/en/1.6.x/1st-step/ubuntu8.04-live/
|
||||
http://tomoyo.sourceforge.jp/en/1.6.x/1st-step/centos5-live/ .
|
||||
Though these tutorials use non-LSM version of TOMOYO, they are useful for you
|
||||
to know what TOMOYO is.
|
||||
|
||||
--- How to enable TOMOYO? ---
|
||||
|
||||
Build the kernel with CONFIG_SECURITY_TOMOYO=y and pass "security=tomoyo" on
|
||||
kernel's command line.
|
||||
|
||||
Please see http://tomoyo.sourceforge.jp/en/2.2.x/ for details.
|
||||
|
||||
--- Where is documentation? ---
|
||||
|
||||
User <-> Kernel interface documentation is available at
|
||||
http://tomoyo.sourceforge.jp/en/2.2.x/policy-reference.html .
|
||||
|
||||
Materials we prepared for seminars and symposiums are available at
|
||||
http://sourceforge.jp/projects/tomoyo/docs/?category_id=532&language_id=1 .
|
||||
Below lists are chosen from three aspects.
|
||||
|
||||
What is TOMOYO?
|
||||
TOMOYO Linux Overview
|
||||
http://sourceforge.jp/projects/tomoyo/docs/lca2009-takeda.pdf
|
||||
TOMOYO Linux: pragmatic and manageable security for Linux
|
||||
http://sourceforge.jp/projects/tomoyo/docs/freedomhectaipei-tomoyo.pdf
|
||||
TOMOYO Linux: A Practical Method to Understand and Protect Your Own Linux Box
|
||||
http://sourceforge.jp/projects/tomoyo/docs/PacSec2007-en-no-demo.pdf
|
||||
|
||||
What can TOMOYO do?
|
||||
Deep inside TOMOYO Linux
|
||||
http://sourceforge.jp/projects/tomoyo/docs/lca2009-kumaneko.pdf
|
||||
The role of "pathname based access control" in security.
|
||||
http://sourceforge.jp/projects/tomoyo/docs/lfj2008-bof.pdf
|
||||
|
||||
History of TOMOYO?
|
||||
Realities of Mainlining
|
||||
http://sourceforge.jp/projects/tomoyo/docs/lfj2008.pdf
|
||||
|
||||
--- What is future plan? ---
|
||||
|
||||
We believe that inode based security and name based security are complementary
|
||||
and both should be used together. But unfortunately, so far, we cannot enable
|
||||
multiple LSM modules at the same time. We feel sorry that you have to give up
|
||||
SELinux/SMACK/AppArmor etc. when you want to use TOMOYO.
|
||||
|
||||
We hope that LSM becomes stackable in future. Meanwhile, you can use non-LSM
|
||||
version of TOMOYO, available at http://tomoyo.sourceforge.jp/en/1.6.x/ .
|
||||
LSM version of TOMOYO is a subset of non-LSM version of TOMOYO. We are planning
|
||||
to port non-LSM version's functionalities to LSM versions.
|
|
@ -1,5 +1,7 @@
|
|||
00-INDEX
|
||||
- this file.
|
||||
active_mm.txt
|
||||
- An explanation from Linus about tsk->active_mm vs tsk->mm.
|
||||
balance
|
||||
- various information on memory balancing.
|
||||
hugetlbpage.txt
|
||||
|
|
83
Documentation/vm/active_mm.txt
Normal file
83
Documentation/vm/active_mm.txt
Normal file
|
@ -0,0 +1,83 @@
|
|||
List: linux-kernel
|
||||
Subject: Re: active_mm
|
||||
From: Linus Torvalds <torvalds () transmeta ! com>
|
||||
Date: 1999-07-30 21:36:24
|
||||
|
||||
Cc'd to linux-kernel, because I don't write explanations all that often,
|
||||
and when I do I feel better about more people reading them.
|
||||
|
||||
On Fri, 30 Jul 1999, David Mosberger wrote:
|
||||
>
|
||||
> Is there a brief description someplace on how "mm" vs. "active_mm" in
|
||||
> the task_struct are supposed to be used? (My apologies if this was
|
||||
> discussed on the mailing lists---I just returned from vacation and
|
||||
> wasn't able to follow linux-kernel for a while).
|
||||
|
||||
Basically, the new setup is:
|
||||
|
||||
- we have "real address spaces" and "anonymous address spaces". The
|
||||
difference is that an anonymous address space doesn't care about the
|
||||
user-level page tables at all, so when we do a context switch into an
|
||||
anonymous address space we just leave the previous address space
|
||||
active.
|
||||
|
||||
The obvious use for a "anonymous address space" is any thread that
|
||||
doesn't need any user mappings - all kernel threads basically fall into
|
||||
this category, but even "real" threads can temporarily say that for
|
||||
some amount of time they are not going to be interested in user space,
|
||||
and that the scheduler might as well try to avoid wasting time on
|
||||
switching the VM state around. Currently only the old-style bdflush
|
||||
sync does that.
|
||||
|
||||
- "tsk->mm" points to the "real address space". For an anonymous process,
|
||||
tsk->mm will be NULL, for the logical reason that an anonymous process
|
||||
really doesn't _have_ a real address space at all.
|
||||
|
||||
- however, we obviously need to keep track of which address space we
|
||||
"stole" for such an anonymous user. For that, we have "tsk->active_mm",
|
||||
which shows what the currently active address space is.
|
||||
|
||||
The rule is that for a process with a real address space (ie tsk->mm is
|
||||
non-NULL) the active_mm obviously always has to be the same as the real
|
||||
one.
|
||||
|
||||
For a anonymous process, tsk->mm == NULL, and tsk->active_mm is the
|
||||
"borrowed" mm while the anonymous process is running. When the
|
||||
anonymous process gets scheduled away, the borrowed address space is
|
||||
returned and cleared.
|
||||
|
||||
To support all that, the "struct mm_struct" now has two counters: a
|
||||
"mm_users" counter that is how many "real address space users" there are,
|
||||
and a "mm_count" counter that is the number of "lazy" users (ie anonymous
|
||||
users) plus one if there are any real users.
|
||||
|
||||
Usually there is at least one real user, but it could be that the real
|
||||
user exited on another CPU while a lazy user was still active, so you do
|
||||
actually get cases where you have a address space that is _only_ used by
|
||||
lazy users. That is often a short-lived state, because once that thread
|
||||
gets scheduled away in favour of a real thread, the "zombie" mm gets
|
||||
released because "mm_users" becomes zero.
|
||||
|
||||
Also, a new rule is that _nobody_ ever has "init_mm" as a real MM any
|
||||
more. "init_mm" should be considered just a "lazy context when no other
|
||||
context is available", and in fact it is mainly used just at bootup when
|
||||
no real VM has yet been created. So code that used to check
|
||||
|
||||
if (current->mm == &init_mm)
|
||||
|
||||
should generally just do
|
||||
|
||||
if (!current->mm)
|
||||
|
||||
instead (which makes more sense anyway - the test is basically one of "do
|
||||
we have a user context", and is generally done by the page fault handler
|
||||
and things like that).
|
||||
|
||||
Anyway, I put a pre-patch-2.3.13-1 on ftp.kernel.org just a moment ago,
|
||||
because it slightly changes the interfaces to accomodate the alpha (who
|
||||
would have thought it, but the alpha actually ends up having one of the
|
||||
ugliest context switch codes - unlike the other architectures where the MM
|
||||
and register state is separate, the alpha PALcode joins the two, and you
|
||||
need to switch both together).
|
||||
|
||||
(From http://marc.info/?l=linux-kernel&m=93337278602211&w=2)
|
File diff suppressed because it is too large
Load diff
1756
MAINTAINERS
1756
MAINTAINERS
File diff suppressed because it is too large
Load diff
29
Makefile
29
Makefile
|
@ -1,8 +1,8 @@
|
|||
VERSION = 2
|
||||
PATCHLEVEL = 6
|
||||
SUBLEVEL = 29
|
||||
EXTRAVERSION =
|
||||
NAME = Temporary Tasmanian Devil
|
||||
SUBLEVEL = 30
|
||||
EXTRAVERSION = -rc4
|
||||
NAME = Vindictive Armadillo
|
||||
|
||||
# *DOCUMENTATION*
|
||||
# To see a list of typical targets execute "make help"
|
||||
|
@ -169,7 +169,7 @@ SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \
|
|||
-e s/arm.*/arm/ -e s/sa110/arm/ \
|
||||
-e s/s390x/s390/ -e s/parisc64/parisc/ \
|
||||
-e s/ppc.*/powerpc/ -e s/mips.*/mips/ \
|
||||
-e s/sh.*/sh/ )
|
||||
-e s/sh[234].*/sh/ )
|
||||
|
||||
# Cross compiling and selecting different set of gcc/bin-utils
|
||||
# ---------------------------------------------------------------------------
|
||||
|
@ -210,6 +210,11 @@ ifeq ($(ARCH),sparc64)
|
|||
SRCARCH := sparc
|
||||
endif
|
||||
|
||||
# Additional ARCH settings for sh
|
||||
ifeq ($(ARCH),sh64)
|
||||
SRCARCH := sh
|
||||
endif
|
||||
|
||||
# Where to locate arch specific headers
|
||||
hdr-arch := $(SRCARCH)
|
||||
|
||||
|
@ -567,7 +572,7 @@ KBUILD_CFLAGS += $(call cc-option,-Wdeclaration-after-statement,)
|
|||
# disable pointer signed / unsigned warnings in gcc 4.0
|
||||
KBUILD_CFLAGS += $(call cc-option,-Wno-pointer-sign,)
|
||||
|
||||
# disable invalid "can't wrap" optimzations for signed / pointers
|
||||
# disable invalid "can't wrap" optimizations for signed / pointers
|
||||
KBUILD_CFLAGS += $(call cc-option,-fwrapv)
|
||||
|
||||
# revert to pre-gcc-4.4 behaviour of .eh_frame
|
||||
|
@ -597,6 +602,10 @@ LDFLAGS_BUILD_ID = $(patsubst -Wl$(comma)%,%,\
|
|||
LDFLAGS_MODULE += $(LDFLAGS_BUILD_ID)
|
||||
LDFLAGS_vmlinux += $(LDFLAGS_BUILD_ID)
|
||||
|
||||
ifeq ($(CONFIG_STRIP_ASM_SYMS),y)
|
||||
LDFLAGS_vmlinux += -X
|
||||
endif
|
||||
|
||||
# Default kernel image to build when no specific target is given.
|
||||
# KBUILD_IMAGE may be overruled on the command line or
|
||||
# set in the environment
|
||||
|
@ -1191,7 +1200,7 @@ CLEAN_FILES += vmlinux System.map \
|
|||
.tmp_kallsyms* .tmp_version .tmp_vmlinux* .tmp_System.map
|
||||
|
||||
# Directories & files removed with 'make mrproper'
|
||||
MRPROPER_DIRS += include/config include2 usr/include
|
||||
MRPROPER_DIRS += include/config include2 usr/include include/generated
|
||||
MRPROPER_FILES += .config .config.old include/asm .version .old_version \
|
||||
include/linux/autoconf.h include/linux/version.h \
|
||||
include/linux/utsrelease.h \
|
||||
|
@ -1284,7 +1293,7 @@ help:
|
|||
@echo ' dir/ - Build all files in dir and below'
|
||||
@echo ' dir/file.[ois] - Build specified target only'
|
||||
@echo ' dir/file.ko - Build module including final link'
|
||||
@echo ' prepare - Set up for building external modules'
|
||||
@echo ' modules_prepare - Set up for building external modules'
|
||||
@echo ' tags/TAGS - Generate tags file for editors'
|
||||
@echo ' cscope - Generate cscope index'
|
||||
@echo ' kernelrelease - Output the release version string'
|
||||
|
@ -1412,7 +1421,9 @@ $(clean-dirs):
|
|||
$(Q)$(MAKE) $(clean)=$(patsubst _clean_%,%,$@)
|
||||
|
||||
clean: rm-dirs := $(MODVERDIR)
|
||||
clean: rm-files := $(KBUILD_EXTMOD)/Module.symvers
|
||||
clean: rm-files := $(KBUILD_EXTMOD)/Module.symvers \
|
||||
$(KBUILD_EXTMOD)/Module.markers \
|
||||
$(KBUILD_EXTMOD)/modules.order
|
||||
clean: $(clean-dirs)
|
||||
$(call cmd,rmdirs)
|
||||
$(call cmd,rmfiles)
|
||||
|
@ -1587,5 +1598,5 @@ PHONY += FORCE
|
|||
FORCE:
|
||||
|
||||
# Declare the contents of the .PHONY variable as phony. We keep that
|
||||
# information in a variable se we can use it in if_changed and friends.
|
||||
# information in a variable so we can use it in if_changed and friends.
|
||||
.PHONY: $(PHONY)
|
||||
|
|
|
@ -109,3 +109,6 @@ config HAVE_CLK
|
|||
|
||||
config HAVE_DMA_API_DEBUG
|
||||
bool
|
||||
|
||||
config HAVE_DEFAULT_NO_SPIN_MUTEXES
|
||||
bool
|
||||
|
|
|
@ -16,11 +16,13 @@ __asm__ __volatile__("wmb": : :"memory")
|
|||
__asm__ __volatile__("mb": : :"memory")
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
#define __ASM_SMP_MB "\tmb\n"
|
||||
#define smp_mb() mb()
|
||||
#define smp_rmb() rmb()
|
||||
#define smp_wmb() wmb()
|
||||
#define smp_read_barrier_depends() read_barrier_depends()
|
||||
#else
|
||||
#define __ASM_SMP_MB
|
||||
#define smp_mb() barrier()
|
||||
#define smp_rmb() barrier()
|
||||
#define smp_wmb() barrier()
|
||||
|
|
|
@ -1,6 +1,116 @@
|
|||
#ifndef _ASM_FUTEX_H
|
||||
#define _ASM_FUTEX_H
|
||||
#ifndef _ASM_ALPHA_FUTEX_H
|
||||
#define _ASM_ALPHA_FUTEX_H
|
||||
|
||||
#include <asm-generic/futex.h>
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#endif
|
||||
#include <linux/futex.h>
|
||||
#include <linux/uaccess.h>
|
||||
#include <asm/errno.h>
|
||||
#include <asm/barrier.h>
|
||||
|
||||
#define __futex_atomic_op(insn, ret, oldval, uaddr, oparg) \
|
||||
__asm__ __volatile__( \
|
||||
__ASM_SMP_MB \
|
||||
"1: ldl_l %0,0(%2)\n" \
|
||||
insn \
|
||||
"2: stl_c %1,0(%2)\n" \
|
||||
" beq %1,4f\n" \
|
||||
" mov $31,%1\n" \
|
||||
"3: .subsection 2\n" \
|
||||
"4: br 1b\n" \
|
||||
" .previous\n" \
|
||||
" .section __ex_table,\"a\"\n" \
|
||||
" .long 1b-.\n" \
|
||||
" lda $31,3b-1b(%1)\n" \
|
||||
" .long 2b-.\n" \
|
||||
" lda $31,3b-2b(%1)\n" \
|
||||
" .previous\n" \
|
||||
: "=&r" (oldval), "=&r"(ret) \
|
||||
: "r" (uaddr), "r"(oparg) \
|
||||
: "memory")
|
||||
|
||||
static inline int futex_atomic_op_inuser (int encoded_op, int __user *uaddr)
|
||||
{
|
||||
int op = (encoded_op >> 28) & 7;
|
||||
int cmp = (encoded_op >> 24) & 15;
|
||||
int oparg = (encoded_op << 8) >> 20;
|
||||
int cmparg = (encoded_op << 20) >> 20;
|
||||
int oldval = 0, ret;
|
||||
if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28))
|
||||
oparg = 1 << oparg;
|
||||
|
||||
if (!access_ok(VERIFY_WRITE, uaddr, sizeof(int)))
|
||||
return -EFAULT;
|
||||
|
||||
pagefault_disable();
|
||||
|
||||
switch (op) {
|
||||
case FUTEX_OP_SET:
|
||||
__futex_atomic_op("mov %3,%1\n", ret, oldval, uaddr, oparg);
|
||||
break;
|
||||
case FUTEX_OP_ADD:
|
||||
__futex_atomic_op("addl %0,%3,%1\n", ret, oldval, uaddr, oparg);
|
||||
break;
|
||||
case FUTEX_OP_OR:
|
||||
__futex_atomic_op("or %0,%3,%1\n", ret, oldval, uaddr, oparg);
|
||||
break;
|
||||
case FUTEX_OP_ANDN:
|
||||
__futex_atomic_op("andnot %0,%3,%1\n", ret, oldval, uaddr, oparg);
|
||||
break;
|
||||
case FUTEX_OP_XOR:
|
||||
__futex_atomic_op("xor %0,%3,%1\n", ret, oldval, uaddr, oparg);
|
||||
break;
|
||||
default:
|
||||
ret = -ENOSYS;
|
||||
}
|
||||
|
||||
pagefault_enable();
|
||||
|
||||
if (!ret) {
|
||||
switch (cmp) {
|
||||
case FUTEX_OP_CMP_EQ: ret = (oldval == cmparg); break;
|
||||
case FUTEX_OP_CMP_NE: ret = (oldval != cmparg); break;
|
||||
case FUTEX_OP_CMP_LT: ret = (oldval < cmparg); break;
|
||||
case FUTEX_OP_CMP_GE: ret = (oldval >= cmparg); break;
|
||||
case FUTEX_OP_CMP_LE: ret = (oldval <= cmparg); break;
|
||||
case FUTEX_OP_CMP_GT: ret = (oldval > cmparg); break;
|
||||
default: ret = -ENOSYS;
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
static inline int
|
||||
futex_atomic_cmpxchg_inatomic(int __user *uaddr, int oldval, int newval)
|
||||
{
|
||||
int prev, cmp;
|
||||
|
||||
if (!access_ok(VERIFY_WRITE, uaddr, sizeof(int)))
|
||||
return -EFAULT;
|
||||
|
||||
__asm__ __volatile__ (
|
||||
__ASM_SMP_MB
|
||||
"1: ldl_l %0,0(%2)\n"
|
||||
" cmpeq %0,%3,%1\n"
|
||||
" beq %1,3f\n"
|
||||
" mov %4,%1\n"
|
||||
"2: stl_c %1,0(%2)\n"
|
||||
" beq %1,4f\n"
|
||||
"3: .subsection 2\n"
|
||||
"4: br 1b\n"
|
||||
" .previous\n"
|
||||
" .section __ex_table,\"a\"\n"
|
||||
" .long 1b-.\n"
|
||||
" lda $31,3b-1b(%0)\n"
|
||||
" .long 2b-.\n"
|
||||
" lda $31,3b-2b(%0)\n"
|
||||
" .previous\n"
|
||||
: "=&r"(prev), "=&r"(cmp)
|
||||
: "r"(uaddr), "r"((long)oldval), "r"(newval)
|
||||
: "memory");
|
||||
|
||||
return prev;
|
||||
}
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* _ASM_ALPHA_FUTEX_H */
|
||||
|
|
|
@ -73,6 +73,6 @@ extern unsigned long __per_cpu_offset[NR_CPUS];
|
|||
|
||||
#endif /* SMP */
|
||||
|
||||
#define DECLARE_PER_CPU(type, name) extern __typeof__(type) per_cpu_var(name)
|
||||
#include <asm-generic/percpu.h>
|
||||
|
||||
#endif /* __ALPHA_PERCPU_H */
|
||||
|
|
|
@ -507,5 +507,7 @@ struct exception_table_entry
|
|||
(pc) + (_fixup)->fixup.bits.nextinsn; \
|
||||
})
|
||||
|
||||
#define ARCH_HAS_SORT_EXTABLE
|
||||
#define ARCH_HAS_SEARCH_EXTABLE
|
||||
|
||||
#endif /* __ALPHA_UACCESS_H */
|
||||
|
|
|
@ -8,7 +8,7 @@ EXTRA_CFLAGS := -Werror -Wno-sign-compare
|
|||
|
||||
obj-y := entry.o traps.o process.o init_task.o osf_sys.o irq.o \
|
||||
irq_alpha.o signal.o setup.o ptrace.o time.o \
|
||||
alpha_ksyms.o systbls.o err_common.o io.o binfmt_loader.o
|
||||
alpha_ksyms.o systbls.o err_common.o io.o
|
||||
|
||||
obj-$(CONFIG_VGA_HOSE) += console.o
|
||||
obj-$(CONFIG_SMP) += smp.o
|
||||
|
@ -43,6 +43,10 @@ else
|
|||
# Misc support
|
||||
obj-$(CONFIG_ALPHA_SRM) += srmcons.o
|
||||
|
||||
ifdef CONFIG_BINFMT_AOUT
|
||||
obj-y += binfmt_loader.o
|
||||
endif
|
||||
|
||||
# Core logic support
|
||||
obj-$(CONFIG_ALPHA_APECS) += core_apecs.o
|
||||
obj-$(CONFIG_ALPHA_CIA) += core_cia.o
|
||||
|
|
|
@ -46,6 +46,6 @@ static struct linux_binfmt loader_format = {
|
|||
|
||||
static int __init init_loader_binfmt(void)
|
||||
{
|
||||
return register_binfmt(&loader_format);
|
||||
return insert_binfmt(&loader_format);
|
||||
}
|
||||
arch_initcall(init_loader_binfmt);
|
||||
|
|
|
@ -229,7 +229,7 @@ ev6_process_logout_frame(struct el_common *mchk_header, int print)
|
|||
}
|
||||
|
||||
void
|
||||
ev6_machine_check(u64 vector, u64 la_ptr)
|
||||
ev6_machine_check(unsigned long vector, unsigned long la_ptr)
|
||||
{
|
||||
struct el_common *mchk_header = (struct el_common *)la_ptr;
|
||||
|
||||
|
|
|
@ -117,7 +117,7 @@ ev7_collect_logout_frame_subpackets(struct el_subpacket *el_ptr,
|
|||
}
|
||||
|
||||
void
|
||||
ev7_machine_check(u64 vector, u64 la_ptr)
|
||||
ev7_machine_check(unsigned long vector, unsigned long la_ptr)
|
||||
{
|
||||
struct el_subpacket *el_ptr = (struct el_subpacket *)la_ptr;
|
||||
char *saved_err_prefix = err_print_prefix;
|
||||
|
@ -246,7 +246,7 @@ ev7_process_pal_subpacket(struct el_subpacket *header)
|
|||
|
||||
switch(header->type) {
|
||||
case EL_TYPE__PAL__LOGOUT_FRAME:
|
||||
printk("%s*** MCHK occurred on LPID %ld (RBOX %llx)\n",
|
||||
printk("%s*** MCHK occurred on LPID %lld (RBOX %llx)\n",
|
||||
err_print_prefix,
|
||||
packet->by_type.logout.whami,
|
||||
packet->by_type.logout.rbox_whami);
|
||||
|
|
|
@ -60,26 +60,26 @@ extern struct ev7_lf_subpackets *
|
|||
ev7_collect_logout_frame_subpackets(struct el_subpacket *,
|
||||
struct ev7_lf_subpackets *);
|
||||
extern void ev7_register_error_handlers(void);
|
||||
extern void ev7_machine_check(u64, u64);
|
||||
extern void ev7_machine_check(unsigned long, unsigned long);
|
||||
|
||||
/*
|
||||
* err_ev6.c
|
||||
*/
|
||||
extern void ev6_register_error_handlers(void);
|
||||
extern int ev6_process_logout_frame(struct el_common *, int);
|
||||
extern void ev6_machine_check(u64, u64);
|
||||
extern void ev6_machine_check(unsigned long, unsigned long);
|
||||
|
||||
/*
|
||||
* err_marvel.c
|
||||
*/
|
||||
extern void marvel_machine_check(u64, u64);
|
||||
extern void marvel_machine_check(unsigned long, unsigned long);
|
||||
extern void marvel_register_error_handlers(void);
|
||||
|
||||
/*
|
||||
* err_titan.c
|
||||
*/
|
||||
extern int titan_process_logout_frame(struct el_common *, int);
|
||||
extern void titan_machine_check(u64, u64);
|
||||
extern void titan_machine_check(unsigned long, unsigned long);
|
||||
extern void titan_register_error_handlers(void);
|
||||
extern int privateer_process_logout_frame(struct el_common *, int);
|
||||
extern void privateer_machine_check(u64, u64);
|
||||
extern void privateer_machine_check(unsigned long, unsigned long);
|
||||
|
|
|
@ -1042,7 +1042,7 @@ marvel_process_logout_frame(struct ev7_lf_subpackets *lf_subpackets, int print)
|
|||
}
|
||||
|
||||
void
|
||||
marvel_machine_check(u64 vector, u64 la_ptr)
|
||||
marvel_machine_check(unsigned long vector, unsigned long la_ptr)
|
||||
{
|
||||
struct el_subpacket *el_ptr = (struct el_subpacket *)la_ptr;
|
||||
int (*process_frame)(struct ev7_lf_subpackets *, int) = NULL;
|
||||
|
|
|
@ -380,7 +380,7 @@ titan_process_logout_frame(struct el_common *mchk_header, int print)
|
|||
}
|
||||
|
||||
void
|
||||
titan_machine_check(u64 vector, u64 la_ptr)
|
||||
titan_machine_check(unsigned long vector, unsigned long la_ptr)
|
||||
{
|
||||
struct el_common *mchk_header = (struct el_common *)la_ptr;
|
||||
struct el_TITAN_sysdata_mcheck *tmchk =
|
||||
|
@ -702,7 +702,7 @@ privateer_process_logout_frame(struct el_common *mchk_header, int print)
|
|||
}
|
||||
|
||||
void
|
||||
privateer_machine_check(u64 vector, u64 la_ptr)
|
||||
privateer_machine_check(unsigned long vector, unsigned long la_ptr)
|
||||
{
|
||||
struct el_common *mchk_header = (struct el_common *)la_ptr;
|
||||
struct el_TITAN_sysdata_mcheck *tmchk =
|
||||
|
|
|
@ -7,10 +7,11 @@
|
|||
* the kernel global pointer and jump to the kernel entry-point.
|
||||
*/
|
||||
|
||||
#include <linux/init.h>
|
||||
#include <asm/system.h>
|
||||
#include <asm/asm-offsets.h>
|
||||
|
||||
.section .text.head, "ax"
|
||||
__HEAD
|
||||
.globl swapper_pg_dir
|
||||
.globl _stext
|
||||
swapper_pg_dir=SWAPPER_PGD
|
||||
|
|
|
@ -36,7 +36,6 @@ extern void cia_pci_tbi(struct pci_controller *, dma_addr_t, dma_addr_t);
|
|||
extern struct pci_ops irongate_pci_ops;
|
||||
extern int irongate_pci_clr_err(void);
|
||||
extern void irongate_init_arch(void);
|
||||
extern void irongate_machine_check(u64, u64);
|
||||
#define irongate_pci_tbi ((void *)0)
|
||||
|
||||
/* core_lca.c */
|
||||
|
@ -49,7 +48,7 @@ extern void lca_pci_tbi(struct pci_controller *, dma_addr_t, dma_addr_t);
|
|||
extern struct pci_ops marvel_pci_ops;
|
||||
extern void marvel_init_arch(void);
|
||||
extern void marvel_kill_arch(int);
|
||||
extern void marvel_machine_check(u64, u64);
|
||||
extern void marvel_machine_check(unsigned long, unsigned long);
|
||||
extern void marvel_pci_tbi(struct pci_controller *, dma_addr_t, dma_addr_t);
|
||||
extern int marvel_pa_to_nid(unsigned long);
|
||||
extern int marvel_cpuid_to_nid(int);
|
||||
|
@ -86,7 +85,7 @@ extern void t2_pci_tbi(struct pci_controller *, dma_addr_t, dma_addr_t);
|
|||
extern struct pci_ops titan_pci_ops;
|
||||
extern void titan_init_arch(void);
|
||||
extern void titan_kill_arch(int);
|
||||
extern void titan_machine_check(u64, u64);
|
||||
extern void titan_machine_check(unsigned long, unsigned long);
|
||||
extern void titan_pci_tbi(struct pci_controller *, dma_addr_t, dma_addr_t);
|
||||
extern struct _alpha_agp_info *titan_agp_info(void);
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@ SECTIONS
|
|||
|
||||
_text = .; /* Text and read-only data */
|
||||
.text : {
|
||||
*(.text.head)
|
||||
HEAD_TEXT
|
||||
TEXT_TEXT
|
||||
SCHED_TEXT
|
||||
LOCK_TEXT
|
||||
|
|
|
@ -3,11 +3,49 @@
|
|||
*/
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/sort.h>
|
||||
#include <asm/uaccess.h>
|
||||
|
||||
static inline unsigned long ex_to_addr(const struct exception_table_entry *x)
|
||||
{
|
||||
return (unsigned long)&x->insn + x->insn;
|
||||
}
|
||||
|
||||
static void swap_ex(void *a, void *b, int size)
|
||||
{
|
||||
struct exception_table_entry *ex_a = a, *ex_b = b;
|
||||
unsigned long addr_a = ex_to_addr(ex_a), addr_b = ex_to_addr(ex_b);
|
||||
unsigned int t = ex_a->fixup.unit;
|
||||
|
||||
ex_a->fixup.unit = ex_b->fixup.unit;
|
||||
ex_b->fixup.unit = t;
|
||||
ex_a->insn = (int)(addr_b - (unsigned long)&ex_a->insn);
|
||||
ex_b->insn = (int)(addr_a - (unsigned long)&ex_b->insn);
|
||||
}
|
||||
|
||||
/*
|
||||
* The exception table needs to be sorted so that the binary
|
||||
* search that we use to find entries in it works properly.
|
||||
* This is used both for the kernel exception table and for
|
||||
* the exception tables of modules that get loaded.
|
||||
*/
|
||||
static int cmp_ex(const void *a, const void *b)
|
||||
{
|
||||
const struct exception_table_entry *x = a, *y = b;
|
||||
|
||||
/* avoid overflow */
|
||||
if (ex_to_addr(x) > ex_to_addr(y))
|
||||
return 1;
|
||||
if (ex_to_addr(x) < ex_to_addr(y))
|
||||
return -1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void sort_extable(struct exception_table_entry *start,
|
||||
struct exception_table_entry *finish)
|
||||
{
|
||||
sort(start, finish - start, sizeof(struct exception_table_entry),
|
||||
cmp_ex, swap_ex);
|
||||
}
|
||||
|
||||
const struct exception_table_entry *
|
||||
|
@ -20,7 +58,7 @@ search_extable(const struct exception_table_entry *first,
|
|||
unsigned long mid_value;
|
||||
|
||||
mid = (last - first) / 2 + first;
|
||||
mid_value = (unsigned long)&mid->insn + mid->insn;
|
||||
mid_value = ex_to_addr(mid);
|
||||
if (mid_value == value)
|
||||
return mid;
|
||||
else if (mid_value < value)
|
||||
|
|
|
@ -486,8 +486,6 @@ config ARCH_PXA
|
|||
select HAVE_CLK
|
||||
select COMMON_CLKDEV
|
||||
select ARCH_REQUIRE_GPIOLIB
|
||||
select HAVE_CLK
|
||||
select COMMON_CLKDEV
|
||||
select GENERIC_TIME
|
||||
select GENERIC_CLOCKEVENTS
|
||||
select TICK_ONESHOT
|
||||
|
@ -585,6 +583,8 @@ config ARCH_DAVINCI
|
|||
select ARCH_REQUIRE_GPIOLIB
|
||||
select HAVE_CLK
|
||||
select ZONE_DMA
|
||||
select HAVE_IDE
|
||||
select COMMON_CLKDEV
|
||||
help
|
||||
Support for TI's DaVinci platform.
|
||||
|
||||
|
@ -740,6 +740,56 @@ if !MMU
|
|||
source "arch/arm/Kconfig-nommu"
|
||||
endif
|
||||
|
||||
config ARM_ERRATA_411920
|
||||
bool "ARM errata: Invalidation of the Instruction Cache operation can fail"
|
||||
depends on CPU_V6 && !SMP
|
||||
help
|
||||
Invalidation of the Instruction Cache operation can
|
||||
fail. This erratum is present in 1136 (before r1p4), 1156 and 1176.
|
||||
It does not affect the MPCore. This option enables the ARM Ltd.
|
||||
recommended workaround.
|
||||
|
||||
config ARM_ERRATA_430973
|
||||
bool "ARM errata: Stale prediction on replaced interworking branch"
|
||||
depends on CPU_V7
|
||||
help
|
||||
This option enables the workaround for the 430973 Cortex-A8
|
||||
(r1p0..r1p2) erratum. If a code sequence containing an ARM/Thumb
|
||||
interworking branch is replaced with another code sequence at the
|
||||
same virtual address, whether due to self-modifying code or virtual
|
||||
to physical address re-mapping, Cortex-A8 does not recover from the
|
||||
stale interworking branch prediction. This results in Cortex-A8
|
||||
executing the new code sequence in the incorrect ARM or Thumb state.
|
||||
The workaround enables the BTB/BTAC operations by setting ACTLR.IBE
|
||||
and also flushes the branch target cache at every context switch.
|
||||
Note that setting specific bits in the ACTLR register may not be
|
||||
available in non-secure mode.
|
||||
|
||||
config ARM_ERRATA_458693
|
||||
bool "ARM errata: Processor deadlock when a false hazard is created"
|
||||
depends on CPU_V7
|
||||
help
|
||||
This option enables the workaround for the 458693 Cortex-A8 (r2p0)
|
||||
erratum. For very specific sequences of memory operations, it is
|
||||
possible for a hazard condition intended for a cache line to instead
|
||||
be incorrectly associated with a different cache line. This false
|
||||
hazard might then cause a processor deadlock. The workaround enables
|
||||
the L1 caching of the NEON accesses and disables the PLD instruction
|
||||
in the ACTLR register. Note that setting specific bits in the ACTLR
|
||||
register may not be available in non-secure mode.
|
||||
|
||||
config ARM_ERRATA_460075
|
||||
bool "ARM errata: Data written to the L2 cache can be overwritten with stale data"
|
||||
depends on CPU_V7
|
||||
help
|
||||
This option enables the workaround for the 460075 Cortex-A8 (r2p0)
|
||||
erratum. Any asynchronous access to the L2 cache may encounter a
|
||||
situation in which recent store transactions to the L2 cache are lost
|
||||
and overwritten with stale memory contents from external memory. The
|
||||
workaround disables the write-allocate mode for the L2 cache via the
|
||||
ACTLR register. Note that setting specific bits in the ACTLR register
|
||||
may not be available in non-secure mode.
|
||||
|
||||
endmenu
|
||||
|
||||
source "arch/arm/common/Kconfig"
|
||||
|
@ -1171,12 +1221,6 @@ config CPU_FREQ_IMX
|
|||
|
||||
If in doubt, say N.
|
||||
|
||||
config CPU_FREQ_PXA
|
||||
bool
|
||||
depends on CPU_FREQ && ARCH_PXA && PXA25x
|
||||
default y
|
||||
select CPU_FREQ_DEFAULT_GOV_USERSPACE
|
||||
|
||||
endif
|
||||
|
||||
source "drivers/cpuidle/Kconfig"
|
||||
|
|
|
@ -85,12 +85,11 @@ void __init vic_init(void __iomem *base, unsigned int irq_start,
|
|||
writel(32, base + VIC_PL190_DEF_VECT_ADDR);
|
||||
|
||||
for (i = 0; i < 32; i++) {
|
||||
unsigned int irq = irq_start + i;
|
||||
|
||||
set_irq_chip(irq, &vic_chip);
|
||||
set_irq_chip_data(irq, base);
|
||||
|
||||
if (vic_sources & (1 << i)) {
|
||||
unsigned int irq = irq_start + i;
|
||||
|
||||
set_irq_chip(irq, &vic_chip);
|
||||
set_irq_chip_data(irq, base);
|
||||
set_irq_handler(irq, handle_level_irq);
|
||||
set_irq_flags(irq, IRQF_VALID | IRQF_PROBE);
|
||||
}
|
||||
|
|
1784
arch/arm/configs/davinci_all_defconfig
Normal file
1784
arch/arm/configs/davinci_all_defconfig
Normal file
File diff suppressed because it is too large
Load diff
|
@ -1183,7 +1183,11 @@ CONFIG_RTC_INTF_DEV=y
|
|||
CONFIG_RTC_DRV_SA1100=y
|
||||
# CONFIG_RTC_DRV_PXA is not set
|
||||
# CONFIG_DMADEVICES is not set
|
||||
# CONFIG_REGULATOR is not set
|
||||
CONFIG_REGULATOR=y
|
||||
# CONFIG_REGULATOR_DEBUG is not set
|
||||
# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
|
||||
# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
|
||||
CONFIG_REGULATOR_BQ24022=y
|
||||
# CONFIG_UIO is not set
|
||||
# CONFIG_STAGING is not set
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.26-rc6
|
||||
# Wed Jun 25 11:52:42 2008
|
||||
# Linux kernel version: 2.6.30-rc1
|
||||
# Wed Apr 8 11:11:33 2009
|
||||
#
|
||||
CONFIG_ARM=y
|
||||
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
|
||||
|
@ -12,6 +12,7 @@ CONFIG_MMU=y
|
|||
# CONFIG_NO_IOPORT is not set
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_STACKTRACE_SUPPORT=y
|
||||
CONFIG_HAVE_LATENCYTOP_SUPPORT=y
|
||||
CONFIG_LOCKDEP_SUPPORT=y
|
||||
CONFIG_TRACE_IRQFLAGS_SUPPORT=y
|
||||
CONFIG_HARDIRQS_SW_RESEND=y
|
||||
|
@ -21,9 +22,8 @@ CONFIG_RWSEM_GENERIC_SPINLOCK=y
|
|||
# CONFIG_ARCH_HAS_ILOG2_U64 is not set
|
||||
CONFIG_GENERIC_HWEIGHT=y
|
||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||
CONFIG_ARCH_SUPPORTS_AOUT=y
|
||||
CONFIG_ZONE_DMA=y
|
||||
CONFIG_ARCH_MTD_XIP=y
|
||||
CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
|
||||
CONFIG_VECTORS_BASE=0xffff0000
|
||||
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
|
||||
|
||||
|
@ -43,15 +43,24 @@ CONFIG_SYSVIPC_SYSCTL=y
|
|||
# CONFIG_BSD_PROCESS_ACCT is not set
|
||||
# CONFIG_TASKSTATS is not set
|
||||
# CONFIG_AUDIT is not set
|
||||
|
||||
#
|
||||
# RCU Subsystem
|
||||
#
|
||||
CONFIG_CLASSIC_RCU=y
|
||||
# CONFIG_TREE_RCU is not set
|
||||
# CONFIG_PREEMPT_RCU is not set
|
||||
# CONFIG_TREE_RCU_TRACE is not set
|
||||
# CONFIG_PREEMPT_RCU_TRACE is not set
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
# CONFIG_CGROUPS is not set
|
||||
CONFIG_GROUP_SCHED=y
|
||||
CONFIG_FAIR_GROUP_SCHED=y
|
||||
# CONFIG_RT_GROUP_SCHED is not set
|
||||
CONFIG_USER_SCHED=y
|
||||
# CONFIG_CGROUP_SCHED is not set
|
||||
# CONFIG_CGROUPS is not set
|
||||
CONFIG_SYSFS_DEPRECATED=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
# CONFIG_RELAY is not set
|
||||
|
@ -59,26 +68,26 @@ CONFIG_SYSFS_DEPRECATED_V2=y
|
|||
# CONFIG_BLK_DEV_INITRD is not set
|
||||
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
||||
CONFIG_SYSCTL=y
|
||||
CONFIG_ANON_INODES=y
|
||||
CONFIG_EMBEDDED=y
|
||||
CONFIG_UID16=y
|
||||
CONFIG_SYSCTL_SYSCALL=y
|
||||
CONFIG_SYSCTL_SYSCALL_CHECK=y
|
||||
CONFIG_KALLSYMS=y
|
||||
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
||||
CONFIG_HOTPLUG=y
|
||||
CONFIG_PRINTK=y
|
||||
CONFIG_BUG=y
|
||||
CONFIG_ELF_CORE=y
|
||||
CONFIG_COMPAT_BRK=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_ANON_INODES=y
|
||||
CONFIG_EPOLL=y
|
||||
CONFIG_SIGNALFD=y
|
||||
CONFIG_TIMERFD=y
|
||||
CONFIG_EVENTFD=y
|
||||
CONFIG_SHMEM=y
|
||||
CONFIG_AIO=y
|
||||
CONFIG_VM_EVENT_COUNTERS=y
|
||||
CONFIG_COMPAT_BRK=y
|
||||
CONFIG_SLAB=y
|
||||
# CONFIG_SLUB is not set
|
||||
# CONFIG_SLOB is not set
|
||||
|
@ -88,11 +97,10 @@ CONFIG_HAVE_OPROFILE=y
|
|||
# CONFIG_KPROBES is not set
|
||||
CONFIG_HAVE_KPROBES=y
|
||||
CONFIG_HAVE_KRETPROBES=y
|
||||
# CONFIG_HAVE_DMA_ATTRS is not set
|
||||
CONFIG_PROC_PAGE_MONITOR=y
|
||||
# CONFIG_SLOW_WORK is not set
|
||||
CONFIG_HAVE_GENERIC_DMA_COHERENT=y
|
||||
CONFIG_SLABINFO=y
|
||||
CONFIG_RT_MUTEXES=y
|
||||
# CONFIG_TINY_SHMEM is not set
|
||||
CONFIG_BASE_SMALL=0
|
||||
CONFIG_MODULES=y
|
||||
# CONFIG_MODULE_FORCE_LOAD is not set
|
||||
|
@ -100,12 +108,10 @@ CONFIG_MODULE_UNLOAD=y
|
|||
CONFIG_MODULE_FORCE_UNLOAD=y
|
||||
CONFIG_MODVERSIONS=y
|
||||
# CONFIG_MODULE_SRCVERSION_ALL is not set
|
||||
CONFIG_KMOD=y
|
||||
CONFIG_BLOCK=y
|
||||
# CONFIG_LBD is not set
|
||||
# CONFIG_BLK_DEV_IO_TRACE is not set
|
||||
# CONFIG_LSF is not set
|
||||
# CONFIG_BLK_DEV_BSG is not set
|
||||
# CONFIG_BLK_DEV_INTEGRITY is not set
|
||||
|
||||
#
|
||||
# IO Schedulers
|
||||
|
@ -119,7 +125,7 @@ CONFIG_IOSCHED_CFQ=y
|
|||
CONFIG_DEFAULT_CFQ=y
|
||||
# CONFIG_DEFAULT_NOOP is not set
|
||||
CONFIG_DEFAULT_IOSCHED="cfq"
|
||||
CONFIG_CLASSIC_RCU=y
|
||||
CONFIG_FREEZER=y
|
||||
|
||||
#
|
||||
# System Type
|
||||
|
@ -129,11 +135,10 @@ CONFIG_CLASSIC_RCU=y
|
|||
# CONFIG_ARCH_REALVIEW is not set
|
||||
# CONFIG_ARCH_VERSATILE is not set
|
||||
# CONFIG_ARCH_AT91 is not set
|
||||
# CONFIG_ARCH_CLPS7500 is not set
|
||||
# CONFIG_ARCH_CLPS711X is not set
|
||||
# CONFIG_ARCH_CO285 is not set
|
||||
# CONFIG_ARCH_EBSA110 is not set
|
||||
# CONFIG_ARCH_EP93XX is not set
|
||||
# CONFIG_ARCH_GEMINI is not set
|
||||
# CONFIG_ARCH_FOOTBRIDGE is not set
|
||||
# CONFIG_ARCH_NETX is not set
|
||||
# CONFIG_ARCH_H720X is not set
|
||||
|
@ -145,54 +150,55 @@ CONFIG_CLASSIC_RCU=y
|
|||
# CONFIG_ARCH_IXP2000 is not set
|
||||
# CONFIG_ARCH_IXP4XX is not set
|
||||
# CONFIG_ARCH_L7200 is not set
|
||||
# CONFIG_ARCH_KIRKWOOD is not set
|
||||
# CONFIG_ARCH_KS8695 is not set
|
||||
# CONFIG_ARCH_NS9XXX is not set
|
||||
# CONFIG_ARCH_LOKI is not set
|
||||
# CONFIG_ARCH_MV78XX0 is not set
|
||||
CONFIG_ARCH_MXC=y
|
||||
# CONFIG_ARCH_ORION5X is not set
|
||||
# CONFIG_ARCH_PNX4008 is not set
|
||||
# CONFIG_ARCH_PXA is not set
|
||||
# CONFIG_ARCH_MMP 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_SHARK is not set
|
||||
# CONFIG_ARCH_LH7A40X is not set
|
||||
# CONFIG_ARCH_DAVINCI is not set
|
||||
# CONFIG_ARCH_OMAP is not set
|
||||
# CONFIG_ARCH_MSM7X00A is not set
|
||||
|
||||
#
|
||||
# Boot options
|
||||
#
|
||||
|
||||
#
|
||||
# Power management
|
||||
#
|
||||
# CONFIG_ARCH_MSM is not set
|
||||
# CONFIG_ARCH_W90X900 is not set
|
||||
CONFIG_ARCH_MX1ADS=y
|
||||
|
||||
#
|
||||
# Freescale MXC Implementations
|
||||
#
|
||||
CONFIG_ARCH_MX3=y
|
||||
CONFIG_ARCH_MX1=y
|
||||
# CONFIG_ARCH_MX2 is not set
|
||||
# CONFIG_ARCH_MX3 is not set
|
||||
|
||||
#
|
||||
# MX3 Options
|
||||
# MX1 platforms:
|
||||
#
|
||||
# CONFIG_MACH_MX31ADS is not set
|
||||
CONFIG_MACH_PCM037=y
|
||||
CONFIG_MACH_MXLADS=y
|
||||
CONFIG_MACH_SCB9328=y
|
||||
CONFIG_MXC_IRQ_PRIOR=y
|
||||
# CONFIG_MXC_PWM is not set
|
||||
|
||||
#
|
||||
# Processor Type
|
||||
#
|
||||
CONFIG_CPU_32=y
|
||||
CONFIG_CPU_V6=y
|
||||
# CONFIG_CPU_32v6K is not set
|
||||
CONFIG_CPU_32v6=y
|
||||
CONFIG_CPU_ABRT_EV6=y
|
||||
CONFIG_CPU_ARM920T=y
|
||||
CONFIG_CPU_32v4T=y
|
||||
CONFIG_CPU_ABRT_EV4T=y
|
||||
CONFIG_CPU_PABRT_NOIFAR=y
|
||||
CONFIG_CPU_CACHE_V6=y
|
||||
CONFIG_CPU_CACHE_VIPT=y
|
||||
CONFIG_CPU_COPY_V6=y
|
||||
CONFIG_CPU_TLB_V6=y
|
||||
CONFIG_CPU_HAS_ASID=y
|
||||
CONFIG_CPU_CACHE_V4WT=y
|
||||
CONFIG_CPU_CACHE_VIVT=y
|
||||
CONFIG_CPU_COPY_V4WB=y
|
||||
CONFIG_CPU_TLB_V4WBI=y
|
||||
CONFIG_CPU_CP15=y
|
||||
CONFIG_CPU_CP15_MMU=y
|
||||
|
||||
|
@ -202,7 +208,7 @@ CONFIG_CPU_CP15_MMU=y
|
|||
CONFIG_ARM_THUMB=y
|
||||
# CONFIG_CPU_ICACHE_DISABLE is not set
|
||||
# CONFIG_CPU_DCACHE_DISABLE is not set
|
||||
# CONFIG_CPU_BPREDICT_DISABLE is not set
|
||||
# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
|
||||
# CONFIG_OUTER_CACHE is not set
|
||||
|
||||
#
|
||||
|
@ -219,25 +225,32 @@ CONFIG_TICK_ONESHOT=y
|
|||
CONFIG_NO_HZ=y
|
||||
CONFIG_HIGH_RES_TIMERS=y
|
||||
CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
|
||||
CONFIG_VMSPLIT_3G=y
|
||||
# CONFIG_VMSPLIT_2G is not set
|
||||
# CONFIG_VMSPLIT_1G is not set
|
||||
CONFIG_PAGE_OFFSET=0xC0000000
|
||||
CONFIG_PREEMPT=y
|
||||
CONFIG_HZ=100
|
||||
CONFIG_AEABI=y
|
||||
# CONFIG_OABI_COMPAT is not set
|
||||
# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
|
||||
CONFIG_OABI_COMPAT=y
|
||||
CONFIG_ARCH_FLATMEM_HAS_HOLES=y
|
||||
# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
|
||||
# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
|
||||
# CONFIG_HIGHMEM is not set
|
||||
CONFIG_SELECT_MEMORY_MODEL=y
|
||||
CONFIG_FLATMEM_MANUAL=y
|
||||
# CONFIG_DISCONTIGMEM_MANUAL is not set
|
||||
# CONFIG_SPARSEMEM_MANUAL is not set
|
||||
CONFIG_FLATMEM=y
|
||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||
# CONFIG_SPARSEMEM_STATIC is not set
|
||||
# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
|
||||
CONFIG_PAGEFLAGS_EXTENDED=y
|
||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||
# CONFIG_RESOURCES_64BIT is not set
|
||||
CONFIG_ZONE_DMA_FLAG=1
|
||||
CONFIG_BOUNCE=y
|
||||
CONFIG_SPLIT_PTLOCK_CPUS=4096
|
||||
# CONFIG_PHYS_ADDR_T_64BIT is not set
|
||||
CONFIG_ZONE_DMA_FLAG=0
|
||||
CONFIG_VIRT_TO_BUS=y
|
||||
CONFIG_UNEVICTABLE_LRU=y
|
||||
CONFIG_HAVE_MLOCK=y
|
||||
CONFIG_HAVE_MLOCKED_PAGE_BIT=y
|
||||
CONFIG_ALIGNMENT_TRAP=y
|
||||
|
||||
#
|
||||
|
@ -249,6 +262,11 @@ CONFIG_CMDLINE="noinitrd console=ttymxc0,115200 root=/dev/mtdblock2 rw ip=off"
|
|||
# CONFIG_XIP_KERNEL is not set
|
||||
# CONFIG_KEXEC is not set
|
||||
|
||||
#
|
||||
# CPU Power Management
|
||||
#
|
||||
# CONFIG_CPU_IDLE is not set
|
||||
|
||||
#
|
||||
# Floating point emulation
|
||||
#
|
||||
|
@ -256,24 +274,30 @@ CONFIG_CMDLINE="noinitrd console=ttymxc0,115200 root=/dev/mtdblock2 rw ip=off"
|
|||
#
|
||||
# At least one emulation must be selected
|
||||
#
|
||||
CONFIG_VFP=y
|
||||
# CONFIG_FPE_NWFPE is not set
|
||||
# CONFIG_FPE_FASTFPE is not set
|
||||
|
||||
#
|
||||
# Userspace binary formats
|
||||
#
|
||||
CONFIG_BINFMT_ELF=y
|
||||
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
|
||||
CONFIG_HAVE_AOUT=y
|
||||
# CONFIG_BINFMT_AOUT is not set
|
||||
# CONFIG_BINFMT_MISC is not set
|
||||
|
||||
#
|
||||
# Power management options
|
||||
#
|
||||
# CONFIG_PM is not set
|
||||
CONFIG_PM=y
|
||||
CONFIG_PM_DEBUG=y
|
||||
# CONFIG_PM_VERBOSE is not set
|
||||
CONFIG_CAN_PM_TRACE=y
|
||||
CONFIG_PM_SLEEP=y
|
||||
CONFIG_SUSPEND=y
|
||||
CONFIG_SUSPEND_FREEZER=y
|
||||
# CONFIG_APM_EMULATION is not set
|
||||
CONFIG_ARCH_SUSPEND_POSSIBLE=y
|
||||
|
||||
#
|
||||
# Networking
|
||||
#
|
||||
CONFIG_NET=y
|
||||
|
||||
#
|
||||
|
@ -317,6 +341,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
|
|||
# CONFIG_TIPC is not set
|
||||
# CONFIG_ATM is not set
|
||||
# CONFIG_BRIDGE is not set
|
||||
# CONFIG_NET_DSA is not set
|
||||
# CONFIG_VLAN_8021Q is not set
|
||||
# CONFIG_DECNET is not set
|
||||
# CONFIG_LLC2 is not set
|
||||
|
@ -326,7 +351,9 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
|
|||
# CONFIG_LAPB is not set
|
||||
# CONFIG_ECONET is not set
|
||||
# CONFIG_WAN_ROUTER is not set
|
||||
# CONFIG_PHONET is not set
|
||||
# CONFIG_NET_SCHED is not set
|
||||
# CONFIG_DCB is not set
|
||||
|
||||
#
|
||||
# Network testing
|
||||
|
@ -337,14 +364,8 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
|
|||
# CONFIG_IRDA is not set
|
||||
# CONFIG_BT is not set
|
||||
# CONFIG_AF_RXRPC is not set
|
||||
|
||||
#
|
||||
# Wireless
|
||||
#
|
||||
# CONFIG_CFG80211 is not set
|
||||
# CONFIG_WIRELESS_EXT is not set
|
||||
# CONFIG_MAC80211 is not set
|
||||
# CONFIG_IEEE80211 is not set
|
||||
# CONFIG_WIRELESS is not set
|
||||
# CONFIG_WIMAX is not set
|
||||
# CONFIG_RFKILL is not set
|
||||
# CONFIG_NET_9P is not set
|
||||
|
||||
|
@ -359,12 +380,15 @@ CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
|||
CONFIG_STANDALONE=y
|
||||
CONFIG_PREVENT_FIRMWARE_BUILD=y
|
||||
CONFIG_FW_LOADER=m
|
||||
CONFIG_FIRMWARE_IN_KERNEL=y
|
||||
CONFIG_EXTRA_FIRMWARE=""
|
||||
# CONFIG_SYS_HYPERVISOR is not set
|
||||
# CONFIG_CONNECTOR is not set
|
||||
CONFIG_MTD=y
|
||||
# CONFIG_MTD_DEBUG is not set
|
||||
# CONFIG_MTD_CONCAT is not set
|
||||
CONFIG_MTD_PARTITIONS=y
|
||||
# CONFIG_MTD_TESTS is not set
|
||||
# CONFIG_MTD_REDBOOT_PARTS is not set
|
||||
CONFIG_MTD_CMDLINE_PARTS=y
|
||||
# CONFIG_MTD_AFS_PARTS is not set
|
||||
|
@ -390,9 +414,6 @@ CONFIG_MTD_CFI=y
|
|||
# CONFIG_MTD_JEDECPROBE is not set
|
||||
CONFIG_MTD_GEN_PROBE=y
|
||||
# CONFIG_MTD_CFI_ADV_OPTIONS is not set
|
||||
# CONFIG_MTD_CFI_NOSWAP is not set
|
||||
# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
|
||||
# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
|
||||
CONFIG_MTD_MAP_BANK_WIDTH_1=y
|
||||
CONFIG_MTD_MAP_BANK_WIDTH_2=y
|
||||
CONFIG_MTD_MAP_BANK_WIDTH_4=y
|
||||
|
@ -406,6 +427,7 @@ CONFIG_MTD_CFI_I2=y
|
|||
# CONFIG_MTD_CFI_INTELEXT is not set
|
||||
# CONFIG_MTD_CFI_AMDSTD is not set
|
||||
# CONFIG_MTD_CFI_STAA is not set
|
||||
CONFIG_MTD_CFI_UTIL=y
|
||||
# CONFIG_MTD_RAM is not set
|
||||
# CONFIG_MTD_ROM is not set
|
||||
# CONFIG_MTD_ABSENT is not set
|
||||
|
@ -415,9 +437,7 @@ CONFIG_MTD_CFI_I2=y
|
|||
#
|
||||
# CONFIG_MTD_COMPLEX_MAPPINGS is not set
|
||||
CONFIG_MTD_PHYSMAP=y
|
||||
CONFIG_MTD_PHYSMAP_START=0x0
|
||||
CONFIG_MTD_PHYSMAP_LEN=0
|
||||
CONFIG_MTD_PHYSMAP_BANKWIDTH=2
|
||||
# CONFIG_MTD_PHYSMAP_COMPAT is not set
|
||||
# CONFIG_MTD_ARM_INTEGRATOR is not set
|
||||
# CONFIG_MTD_PLATRAM is not set
|
||||
|
||||
|
@ -438,6 +458,11 @@ CONFIG_MTD_PHYSMAP_BANKWIDTH=2
|
|||
# CONFIG_MTD_NAND is not set
|
||||
# CONFIG_MTD_ONENAND is not set
|
||||
|
||||
#
|
||||
# LPDDR flash memory drivers
|
||||
#
|
||||
# CONFIG_MTD_LPDDR is not set
|
||||
|
||||
#
|
||||
# UBI - Unsorted block images
|
||||
#
|
||||
|
@ -458,7 +483,7 @@ CONFIG_HAVE_IDE=y
|
|||
# CONFIG_ATA is not set
|
||||
# CONFIG_MD is not set
|
||||
CONFIG_NETDEVICES=y
|
||||
# CONFIG_NETDEVICES_MULTIQUEUE is not set
|
||||
CONFIG_COMPAT_NET_DEV_OPS=y
|
||||
# CONFIG_DUMMY is not set
|
||||
# CONFIG_BONDING is not set
|
||||
# CONFIG_MACVLAN is not set
|
||||
|
@ -488,14 +513,21 @@ CONFIG_SMSC_PHY=y
|
|||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_MII=y
|
||||
# CONFIG_AX88796 is not set
|
||||
CONFIG_SMC91X=y
|
||||
# CONFIG_DM9000 is not set
|
||||
# CONFIG_SMC91X is not set
|
||||
CONFIG_DM9000=y
|
||||
CONFIG_DM9000_DEBUGLEVEL=4
|
||||
# CONFIG_DM9000_FORCE_SIMPLE_PHY_POLL is not set
|
||||
# CONFIG_ETHOC is not set
|
||||
# CONFIG_SMC911X is not set
|
||||
CONFIG_SMSC911X=y
|
||||
# CONFIG_SMSC911X is not set
|
||||
# CONFIG_DNET is not set
|
||||
# CONFIG_IBM_NEW_EMAC_ZMII is not set
|
||||
# CONFIG_IBM_NEW_EMAC_RGMII is not set
|
||||
# CONFIG_IBM_NEW_EMAC_TAH is not set
|
||||
# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
|
||||
# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
|
||||
# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
|
||||
# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
|
||||
# CONFIG_B44 is not set
|
||||
# CONFIG_NETDEV_1000 is not set
|
||||
# CONFIG_NETDEV_10000 is not set
|
||||
|
@ -505,7 +537,10 @@ CONFIG_SMSC911X=y
|
|||
#
|
||||
# CONFIG_WLAN_PRE80211 is not set
|
||||
# CONFIG_WLAN_80211 is not set
|
||||
# CONFIG_IWLWIFI_LEDS is not set
|
||||
|
||||
#
|
||||
# Enable WiMAX (Networking options) to see the WiMAX drivers
|
||||
#
|
||||
# CONFIG_WAN is not set
|
||||
# CONFIG_PPP is not set
|
||||
# CONFIG_SLIP is not set
|
||||
|
@ -545,46 +580,124 @@ CONFIG_SERIAL_IMX_CONSOLE=y
|
|||
CONFIG_SERIAL_CORE=y
|
||||
CONFIG_SERIAL_CORE_CONSOLE=y
|
||||
CONFIG_UNIX98_PTYS=y
|
||||
# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
|
||||
# CONFIG_LEGACY_PTYS is not set
|
||||
# CONFIG_IPMI_HANDLER is not set
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
# CONFIG_NVRAM is not set
|
||||
# CONFIG_R3964 is not set
|
||||
# CONFIG_RAW_DRIVER is not set
|
||||
# CONFIG_TCG_TPM is not set
|
||||
# CONFIG_I2C is not set
|
||||
# CONFIG_SPI is not set
|
||||
CONFIG_HAVE_GPIO_LIB=y
|
||||
CONFIG_I2C=y
|
||||
CONFIG_I2C_BOARDINFO=y
|
||||
CONFIG_I2C_CHARDEV=y
|
||||
CONFIG_I2C_HELPER_AUTO=y
|
||||
|
||||
#
|
||||
# GPIO Support
|
||||
# I2C Hardware Bus support
|
||||
#
|
||||
|
||||
#
|
||||
# I2C system bus drivers (mostly embedded / system-on-chip)
|
||||
#
|
||||
# CONFIG_I2C_GPIO is not set
|
||||
CONFIG_I2C_IMX=y
|
||||
# CONFIG_I2C_OCORES is not set
|
||||
# CONFIG_I2C_SIMTEC is not set
|
||||
|
||||
#
|
||||
# External I2C/SMBus adapter drivers
|
||||
#
|
||||
# CONFIG_I2C_PARPORT_LIGHT is not set
|
||||
# CONFIG_I2C_TAOS_EVM 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_DS1682 is not set
|
||||
# CONFIG_SENSORS_PCF8574 is not set
|
||||
# CONFIG_PCF8575 is not set
|
||||
# CONFIG_SENSORS_PCA9539 is not set
|
||||
# CONFIG_SENSORS_MAX6875 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
|
||||
CONFIG_ARCH_REQUIRE_GPIOLIB=y
|
||||
CONFIG_GPIOLIB=y
|
||||
# CONFIG_GPIO_SYSFS is not set
|
||||
|
||||
#
|
||||
# Memory mapped GPIO expanders:
|
||||
#
|
||||
|
||||
#
|
||||
# I2C GPIO expanders:
|
||||
#
|
||||
# CONFIG_GPIO_MAX732X is not set
|
||||
# CONFIG_GPIO_PCA953X is not set
|
||||
# CONFIG_GPIO_PCF857X is not set
|
||||
|
||||
#
|
||||
# PCI GPIO expanders:
|
||||
#
|
||||
|
||||
#
|
||||
# SPI GPIO expanders:
|
||||
#
|
||||
# CONFIG_W1 is not set
|
||||
CONFIG_W1=y
|
||||
|
||||
#
|
||||
# 1-wire Bus Masters
|
||||
#
|
||||
# CONFIG_W1_MASTER_DS2482 is not set
|
||||
CONFIG_W1_MASTER_MXC=y
|
||||
# CONFIG_W1_MASTER_GPIO is not set
|
||||
|
||||
#
|
||||
# 1-wire Slaves
|
||||
#
|
||||
CONFIG_W1_SLAVE_THERM=y
|
||||
# CONFIG_W1_SLAVE_SMEM is not set
|
||||
# CONFIG_W1_SLAVE_DS2431 is not set
|
||||
# CONFIG_W1_SLAVE_DS2433 is not set
|
||||
# CONFIG_W1_SLAVE_DS2760 is not set
|
||||
# CONFIG_W1_SLAVE_BQ27000 is not set
|
||||
# CONFIG_POWER_SUPPLY is not set
|
||||
# CONFIG_HWMON is not set
|
||||
# CONFIG_THERMAL is not set
|
||||
# CONFIG_THERMAL_HWMON is not set
|
||||
# CONFIG_WATCHDOG is not set
|
||||
CONFIG_SSB_POSSIBLE=y
|
||||
|
||||
#
|
||||
# Sonics Silicon Backplane
|
||||
#
|
||||
CONFIG_SSB_POSSIBLE=y
|
||||
# CONFIG_SSB is not set
|
||||
|
||||
#
|
||||
# Multifunction device drivers
|
||||
#
|
||||
# CONFIG_MFD_CORE 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_TPS65010 is not set
|
||||
# CONFIG_TWL4030_CORE is not set
|
||||
# CONFIG_MFD_TMIO is not set
|
||||
# CONFIG_MFD_TC6393XB is not set
|
||||
# CONFIG_PMIC_DA903X is not set
|
||||
# CONFIG_MFD_WM8400 is not set
|
||||
# CONFIG_MFD_WM8350_I2C is not set
|
||||
# CONFIG_MFD_PCF50633 is not set
|
||||
|
||||
#
|
||||
# Multimedia devices
|
||||
|
@ -607,36 +720,131 @@ CONFIG_SSB_POSSIBLE=y
|
|||
#
|
||||
# CONFIG_VGASTATE is not set
|
||||
# CONFIG_VIDEO_OUTPUT_CONTROL is not set
|
||||
# CONFIG_FB 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 is not set
|
||||
# CONFIG_FB_CFB_COPYAREA is not set
|
||||
# CONFIG_FB_CFB_IMAGEBLIT is not set
|
||||
# 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_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 is not set
|
||||
|
||||
#
|
||||
# Display device support
|
||||
#
|
||||
# CONFIG_DISPLAY_SUPPORT is not set
|
||||
# CONFIG_LOGO is not set
|
||||
# CONFIG_SOUND 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 is not set
|
||||
# CONFIG_USB is not set
|
||||
# CONFIG_USB_OTG_WHITELIST is not set
|
||||
# CONFIG_USB_OTG_BLACKLIST_HUB is not set
|
||||
# CONFIG_USB_GADGET_MUSB_HDRC is not set
|
||||
|
||||
#
|
||||
# Sound
|
||||
# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
|
||||
#
|
||||
# CONFIG_SOUND is not set
|
||||
# CONFIG_USB_SUPPORT is not set
|
||||
# CONFIG_MMC is not set
|
||||
CONFIG_USB_GADGET=y
|
||||
# CONFIG_USB_GADGET_DEBUG_FILES is not set
|
||||
CONFIG_USB_GADGET_VBUS_DRAW=2
|
||||
CONFIG_USB_GADGET_SELECTED=y
|
||||
# CONFIG_USB_GADGET_AT91 is not set
|
||||
# CONFIG_USB_GADGET_ATMEL_USBA is not set
|
||||
# CONFIG_USB_GADGET_FSL_USB2 is not set
|
||||
# CONFIG_USB_GADGET_LH7A40X is not set
|
||||
# CONFIG_USB_GADGET_OMAP is not set
|
||||
# CONFIG_USB_GADGET_PXA25X is not set
|
||||
# CONFIG_USB_GADGET_PXA27X is not set
|
||||
# CONFIG_USB_GADGET_S3C2410 is not set
|
||||
CONFIG_USB_GADGET_IMX=y
|
||||
CONFIG_USB_IMX=y
|
||||
# CONFIG_USB_GADGET_M66592 is not set
|
||||
# CONFIG_USB_GADGET_AMD5536UDC is not set
|
||||
# CONFIG_USB_GADGET_FSL_QE is not set
|
||||
# CONFIG_USB_GADGET_CI13XXX is not set
|
||||
# CONFIG_USB_GADGET_NET2280 is not set
|
||||
# CONFIG_USB_GADGET_GOKU is not set
|
||||
# CONFIG_USB_GADGET_DUMMY_HCD is not set
|
||||
# CONFIG_USB_GADGET_DUALSPEED is not set
|
||||
# CONFIG_USB_ZERO is not set
|
||||
CONFIG_USB_ETH=y
|
||||
CONFIG_USB_ETH_RNDIS=y
|
||||
# CONFIG_USB_GADGETFS is not set
|
||||
# CONFIG_USB_FILE_STORAGE is not set
|
||||
# CONFIG_USB_G_SERIAL is not set
|
||||
# CONFIG_USB_MIDI_GADGET is not set
|
||||
# CONFIG_USB_G_PRINTER is not set
|
||||
# CONFIG_USB_CDC_COMPOSITE is not set
|
||||
|
||||
#
|
||||
# OTG and related infrastructure
|
||||
#
|
||||
# CONFIG_USB_GPIO_VBUS is not set
|
||||
# CONFIG_NOP_USB_XCEIV is not set
|
||||
CONFIG_MMC=y
|
||||
# CONFIG_MMC_DEBUG is not set
|
||||
# CONFIG_MMC_UNSAFE_RESUME is not set
|
||||
|
||||
#
|
||||
# MMC/SD/SDIO Card Drivers
|
||||
#
|
||||
CONFIG_MMC_BLOCK=y
|
||||
CONFIG_MMC_BLOCK_BOUNCE=y
|
||||
# CONFIG_SDIO_UART is not set
|
||||
# CONFIG_MMC_TEST is not set
|
||||
|
||||
#
|
||||
# MMC/SD/SDIO Host Controller Drivers
|
||||
#
|
||||
# CONFIG_MMC_SDHCI is not set
|
||||
CONFIG_MMC_MXC=y
|
||||
# CONFIG_MEMSTICK is not set
|
||||
# CONFIG_ACCESSIBILITY is not set
|
||||
# CONFIG_NEW_LEDS 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
|
||||
|
||||
#
|
||||
# File systems
|
||||
#
|
||||
# CONFIG_EXT2_FS is not set
|
||||
# CONFIG_EXT3_FS is not set
|
||||
# CONFIG_EXT4DEV_FS is not set
|
||||
# CONFIG_EXT4_FS is not set
|
||||
# CONFIG_REISERFS_FS is not set
|
||||
# CONFIG_JFS_FS is not set
|
||||
# CONFIG_FS_POSIX_ACL is not set
|
||||
CONFIG_FILE_LOCKING=y
|
||||
# CONFIG_XFS_FS is not set
|
||||
# CONFIG_OCFS2_FS is not set
|
||||
# CONFIG_BTRFS_FS is not set
|
||||
# CONFIG_DNOTIFY is not set
|
||||
CONFIG_INOTIFY=y
|
||||
CONFIG_INOTIFY_USER=y
|
||||
|
@ -645,6 +853,11 @@ CONFIG_INOTIFY_USER=y
|
|||
# CONFIG_AUTOFS4_FS is not set
|
||||
# CONFIG_FUSE_FS is not set
|
||||
|
||||
#
|
||||
# Caches
|
||||
#
|
||||
# CONFIG_FSCACHE is not set
|
||||
|
||||
#
|
||||
# CD-ROM/DVD Filesystems
|
||||
#
|
||||
|
@ -663,15 +876,13 @@ CONFIG_INOTIFY_USER=y
|
|||
#
|
||||
CONFIG_PROC_FS=y
|
||||
CONFIG_PROC_SYSCTL=y
|
||||
CONFIG_PROC_PAGE_MONITOR=y
|
||||
CONFIG_SYSFS=y
|
||||
CONFIG_TMPFS=y
|
||||
# CONFIG_TMPFS_POSIX_ACL is not set
|
||||
# CONFIG_HUGETLB_PAGE is not set
|
||||
# CONFIG_CONFIGFS_FS is not set
|
||||
|
||||
#
|
||||
# Miscellaneous filesystems
|
||||
#
|
||||
CONFIG_MISC_FILESYSTEMS=y
|
||||
# CONFIG_ADFS_FS is not set
|
||||
# CONFIG_AFFS_FS is not set
|
||||
# CONFIG_HFS_FS is not set
|
||||
|
@ -691,24 +902,29 @@ CONFIG_JFFS2_ZLIB=y
|
|||
CONFIG_JFFS2_RTIME=y
|
||||
# CONFIG_JFFS2_RUBIN is not set
|
||||
# CONFIG_CRAMFS is not set
|
||||
# CONFIG_SQUASHFS is not set
|
||||
# CONFIG_VXFS_FS is not set
|
||||
# CONFIG_MINIX_FS is not set
|
||||
# CONFIG_OMFS_FS is not set
|
||||
# CONFIG_HPFS_FS is not set
|
||||
# CONFIG_QNX4FS_FS is not set
|
||||
# CONFIG_ROMFS_FS is not set
|
||||
# CONFIG_SYSV_FS is not set
|
||||
# CONFIG_UFS_FS is not set
|
||||
# CONFIG_NILFS2_FS is not set
|
||||
CONFIG_NETWORK_FILESYSTEMS=y
|
||||
CONFIG_NFS_FS=y
|
||||
# CONFIG_NFS_V3 is not set
|
||||
# CONFIG_NFS_V4 is not set
|
||||
# CONFIG_NFSD is not set
|
||||
CONFIG_NFS_V3=y
|
||||
# CONFIG_NFS_V3_ACL is not set
|
||||
CONFIG_NFS_V4=y
|
||||
CONFIG_ROOT_NFS=y
|
||||
# CONFIG_NFSD is not set
|
||||
CONFIG_LOCKD=y
|
||||
CONFIG_LOCKD_V4=y
|
||||
CONFIG_NFS_COMMON=y
|
||||
CONFIG_SUNRPC=y
|
||||
# CONFIG_SUNRPC_BIND34 is not set
|
||||
# CONFIG_RPCSEC_GSS_KRB5 is not set
|
||||
CONFIG_SUNRPC_GSS=y
|
||||
CONFIG_RPCSEC_GSS_KRB5=y
|
||||
# CONFIG_RPCSEC_GSS_SPKM3 is not set
|
||||
# CONFIG_SMB_FS is not set
|
||||
# CONFIG_CIFS is not set
|
||||
|
@ -737,8 +953,31 @@ CONFIG_FRAME_WARN=1024
|
|||
# CONFIG_HEADERS_CHECK is not set
|
||||
# CONFIG_DEBUG_KERNEL is not set
|
||||
# CONFIG_DEBUG_BUGVERBOSE is not set
|
||||
CONFIG_FRAME_POINTER=y
|
||||
# CONFIG_DEBUG_MEMORY_INIT is not set
|
||||
# CONFIG_RCU_CPU_STALL_DETECTOR is not set
|
||||
# CONFIG_LATENCYTOP is not set
|
||||
CONFIG_SYSCTL_SYSCALL_CHECK=y
|
||||
CONFIG_HAVE_FUNCTION_TRACER=y
|
||||
CONFIG_TRACING_SUPPORT=y
|
||||
|
||||
#
|
||||
# Tracers
|
||||
#
|
||||
# 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_CONTEXT_SWITCH_TRACER is not set
|
||||
# CONFIG_EVENT_TRACER is not set
|
||||
# CONFIG_BOOT_TRACER is not set
|
||||
# CONFIG_TRACE_BRANCH_PROFILING is not set
|
||||
# CONFIG_STACK_TRACER is not set
|
||||
# CONFIG_KMEMTRACE is not set
|
||||
# CONFIG_WORKQUEUE_TRACER is not set
|
||||
# CONFIG_BLK_DEV_IO_TRACE is not set
|
||||
# CONFIG_SAMPLES is not set
|
||||
CONFIG_HAVE_ARCH_KGDB=y
|
||||
CONFIG_ARM_UNWIND=y
|
||||
# CONFIG_DEBUG_USER is not set
|
||||
|
||||
#
|
||||
|
@ -746,24 +985,121 @@ CONFIG_FRAME_POINTER=y
|
|||
#
|
||||
# CONFIG_KEYS is not set
|
||||
# CONFIG_SECURITY is not set
|
||||
# CONFIG_SECURITYFS is not set
|
||||
# CONFIG_SECURITY_FILE_CAPABILITIES is not set
|
||||
# CONFIG_CRYPTO is not set
|
||||
CONFIG_CRYPTO=y
|
||||
|
||||
#
|
||||
# Crypto core or helper
|
||||
#
|
||||
# CONFIG_CRYPTO_FIPS is not set
|
||||
CONFIG_CRYPTO_ALGAPI=y
|
||||
CONFIG_CRYPTO_ALGAPI2=y
|
||||
CONFIG_CRYPTO_AEAD2=y
|
||||
CONFIG_CRYPTO_BLKCIPHER=y
|
||||
CONFIG_CRYPTO_BLKCIPHER2=y
|
||||
CONFIG_CRYPTO_HASH=y
|
||||
CONFIG_CRYPTO_HASH2=y
|
||||
CONFIG_CRYPTO_RNG2=y
|
||||
CONFIG_CRYPTO_PCOMP=y
|
||||
CONFIG_CRYPTO_MANAGER=y
|
||||
CONFIG_CRYPTO_MANAGER2=y
|
||||
# CONFIG_CRYPTO_GF128MUL is not set
|
||||
# CONFIG_CRYPTO_NULL is not set
|
||||
CONFIG_CRYPTO_WORKQUEUE=y
|
||||
# CONFIG_CRYPTO_CRYPTD is not set
|
||||
# CONFIG_CRYPTO_AUTHENC is not set
|
||||
# CONFIG_CRYPTO_TEST is not set
|
||||
|
||||
#
|
||||
# Authenticated Encryption with Associated Data
|
||||
#
|
||||
# CONFIG_CRYPTO_CCM is not set
|
||||
# CONFIG_CRYPTO_GCM is not set
|
||||
# CONFIG_CRYPTO_SEQIV is not set
|
||||
|
||||
#
|
||||
# Block modes
|
||||
#
|
||||
CONFIG_CRYPTO_CBC=y
|
||||
# CONFIG_CRYPTO_CTR is not set
|
||||
# CONFIG_CRYPTO_CTS is not set
|
||||
# CONFIG_CRYPTO_ECB is not set
|
||||
# CONFIG_CRYPTO_LRW is not set
|
||||
# CONFIG_CRYPTO_PCBC is not set
|
||||
# CONFIG_CRYPTO_XTS is not set
|
||||
|
||||
#
|
||||
# Hash modes
|
||||
#
|
||||
# CONFIG_CRYPTO_HMAC is not set
|
||||
# CONFIG_CRYPTO_XCBC is not set
|
||||
|
||||
#
|
||||
# Digest
|
||||
#
|
||||
# CONFIG_CRYPTO_CRC32C is not set
|
||||
# CONFIG_CRYPTO_MD4 is not set
|
||||
CONFIG_CRYPTO_MD5=y
|
||||
# CONFIG_CRYPTO_MICHAEL_MIC is not set
|
||||
# CONFIG_CRYPTO_RMD128 is not set
|
||||
# CONFIG_CRYPTO_RMD160 is not set
|
||||
# CONFIG_CRYPTO_RMD256 is not set
|
||||
# CONFIG_CRYPTO_RMD320 is not set
|
||||
# CONFIG_CRYPTO_SHA1 is not set
|
||||
# CONFIG_CRYPTO_SHA256 is not set
|
||||
# CONFIG_CRYPTO_SHA512 is not set
|
||||
# CONFIG_CRYPTO_TGR192 is not set
|
||||
# CONFIG_CRYPTO_WP512 is not set
|
||||
|
||||
#
|
||||
# Ciphers
|
||||
#
|
||||
# CONFIG_CRYPTO_AES is not set
|
||||
# CONFIG_CRYPTO_ANUBIS is not set
|
||||
# CONFIG_CRYPTO_ARC4 is not set
|
||||
# CONFIG_CRYPTO_BLOWFISH is not set
|
||||
# CONFIG_CRYPTO_CAMELLIA is not set
|
||||
# CONFIG_CRYPTO_CAST5 is not set
|
||||
# CONFIG_CRYPTO_CAST6 is not set
|
||||
CONFIG_CRYPTO_DES=y
|
||||
# CONFIG_CRYPTO_FCRYPT is not set
|
||||
# CONFIG_CRYPTO_KHAZAD is not set
|
||||
# CONFIG_CRYPTO_SALSA20 is not set
|
||||
# CONFIG_CRYPTO_SEED is not set
|
||||
# CONFIG_CRYPTO_SERPENT is not set
|
||||
# CONFIG_CRYPTO_TEA is not set
|
||||
# CONFIG_CRYPTO_TWOFISH is not set
|
||||
|
||||
#
|
||||
# Compression
|
||||
#
|
||||
# CONFIG_CRYPTO_DEFLATE is not set
|
||||
# CONFIG_CRYPTO_ZLIB is not set
|
||||
# CONFIG_CRYPTO_LZO is not set
|
||||
|
||||
#
|
||||
# Random Number Generation
|
||||
#
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
CONFIG_CRYPTO_HW=y
|
||||
# CONFIG_BINARY_PRINTF is not set
|
||||
|
||||
#
|
||||
# Library routines
|
||||
#
|
||||
CONFIG_BITREVERSE=y
|
||||
# CONFIG_GENERIC_FIND_FIRST_BIT is not set
|
||||
# CONFIG_GENERIC_FIND_NEXT_BIT is not set
|
||||
CONFIG_GENERIC_FIND_LAST_BIT=y
|
||||
# CONFIG_CRC_CCITT is not set
|
||||
# CONFIG_CRC16 is not set
|
||||
# CONFIG_CRC_T10DIF is not set
|
||||
# CONFIG_CRC_ITU_T is not set
|
||||
CONFIG_CRC32=y
|
||||
# CONFIG_CRC7 is not set
|
||||
# CONFIG_LIBCRC32C is not set
|
||||
CONFIG_ZLIB_INFLATE=y
|
||||
CONFIG_ZLIB_DEFLATE=y
|
||||
CONFIG_PLIST=y
|
||||
CONFIG_HAS_IOMEM=y
|
||||
CONFIG_HAS_IOPORT=y
|
||||
CONFIG_HAS_DMA=y
|
||||
CONFIG_NLATTR=y
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.26-rc6
|
||||
# Fri Jun 20 16:38:36 2008
|
||||
# Linux kernel version: 2.6.30-rc1
|
||||
# Wed Apr 8 10:18:06 2009
|
||||
#
|
||||
CONFIG_ARM=y
|
||||
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
|
||||
|
@ -12,6 +12,7 @@ CONFIG_MMU=y
|
|||
# CONFIG_NO_IOPORT is not set
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_STACKTRACE_SUPPORT=y
|
||||
CONFIG_HAVE_LATENCYTOP_SUPPORT=y
|
||||
CONFIG_LOCKDEP_SUPPORT=y
|
||||
CONFIG_TRACE_IRQFLAGS_SUPPORT=y
|
||||
CONFIG_HARDIRQS_SW_RESEND=y
|
||||
|
@ -21,9 +22,8 @@ CONFIG_RWSEM_GENERIC_SPINLOCK=y
|
|||
# CONFIG_ARCH_HAS_ILOG2_U64 is not set
|
||||
CONFIG_GENERIC_HWEIGHT=y
|
||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||
CONFIG_ARCH_SUPPORTS_AOUT=y
|
||||
CONFIG_ZONE_DMA=y
|
||||
CONFIG_ARCH_MTD_XIP=y
|
||||
CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
|
||||
CONFIG_VECTORS_BASE=0xffff0000
|
||||
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
|
||||
|
||||
|
@ -40,47 +40,58 @@ CONFIG_LOCALVERSION_AUTO=y
|
|||
CONFIG_SYSVIPC=y
|
||||
CONFIG_SYSVIPC_SYSCTL=y
|
||||
CONFIG_POSIX_MQUEUE=y
|
||||
CONFIG_POSIX_MQUEUE_SYSCTL=y
|
||||
# CONFIG_BSD_PROCESS_ACCT is not set
|
||||
# CONFIG_TASKSTATS is not set
|
||||
# CONFIG_AUDIT is not set
|
||||
|
||||
#
|
||||
# RCU Subsystem
|
||||
#
|
||||
CONFIG_CLASSIC_RCU=y
|
||||
# CONFIG_TREE_RCU is not set
|
||||
# CONFIG_PREEMPT_RCU 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=14
|
||||
# CONFIG_CGROUPS is not set
|
||||
CONFIG_GROUP_SCHED=y
|
||||
CONFIG_FAIR_GROUP_SCHED=y
|
||||
CONFIG_RT_GROUP_SCHED=y
|
||||
CONFIG_USER_SCHED=y
|
||||
# CONFIG_CGROUP_SCHED is not set
|
||||
# CONFIG_CGROUPS is not set
|
||||
# CONFIG_SYSFS_DEPRECATED_V2 is not set
|
||||
# CONFIG_RELAY is not set
|
||||
# CONFIG_NAMESPACES is not set
|
||||
# CONFIG_BLK_DEV_INITRD is not set
|
||||
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
|
||||
CONFIG_SYSCTL=y
|
||||
CONFIG_ANON_INODES=y
|
||||
CONFIG_EMBEDDED=y
|
||||
CONFIG_UID16=y
|
||||
CONFIG_SYSCTL_SYSCALL=y
|
||||
CONFIG_SYSCTL_SYSCALL_CHECK=y
|
||||
CONFIG_KALLSYMS=y
|
||||
CONFIG_KALLSYMS_EXTRA_PASS=y
|
||||
CONFIG_HOTPLUG=y
|
||||
CONFIG_PRINTK=y
|
||||
CONFIG_BUG=y
|
||||
CONFIG_ELF_CORE=y
|
||||
# CONFIG_COMPAT_BRK is not set
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_ANON_INODES=y
|
||||
CONFIG_EPOLL=y
|
||||
CONFIG_SIGNALFD=y
|
||||
CONFIG_TIMERFD=y
|
||||
CONFIG_EVENTFD=y
|
||||
CONFIG_SHMEM=y
|
||||
CONFIG_AIO=y
|
||||
CONFIG_VM_EVENT_COUNTERS=y
|
||||
# CONFIG_COMPAT_BRK is not set
|
||||
CONFIG_SLAB=y
|
||||
# CONFIG_SLUB is not set
|
||||
# CONFIG_SLOB is not set
|
||||
CONFIG_PROFILING=y
|
||||
CONFIG_TRACEPOINTS=y
|
||||
CONFIG_MARKERS=y
|
||||
CONFIG_OPROFILE=y
|
||||
CONFIG_HAVE_OPROFILE=y
|
||||
|
@ -88,11 +99,10 @@ CONFIG_KPROBES=y
|
|||
CONFIG_KRETPROBES=y
|
||||
CONFIG_HAVE_KPROBES=y
|
||||
CONFIG_HAVE_KRETPROBES=y
|
||||
# CONFIG_HAVE_DMA_ATTRS is not set
|
||||
# CONFIG_PROC_PAGE_MONITOR is not set
|
||||
# CONFIG_SLOW_WORK is not set
|
||||
CONFIG_HAVE_GENERIC_DMA_COHERENT=y
|
||||
CONFIG_SLABINFO=y
|
||||
CONFIG_RT_MUTEXES=y
|
||||
# CONFIG_TINY_SHMEM is not set
|
||||
CONFIG_BASE_SMALL=0
|
||||
CONFIG_MODULES=y
|
||||
# CONFIG_MODULE_FORCE_LOAD is not set
|
||||
|
@ -100,12 +110,10 @@ CONFIG_MODULE_UNLOAD=y
|
|||
# CONFIG_MODULE_FORCE_UNLOAD is not set
|
||||
# CONFIG_MODVERSIONS is not set
|
||||
# CONFIG_MODULE_SRCVERSION_ALL is not set
|
||||
# CONFIG_KMOD is not set
|
||||
CONFIG_BLOCK=y
|
||||
# CONFIG_LBD is not set
|
||||
# CONFIG_BLK_DEV_IO_TRACE is not set
|
||||
# CONFIG_LSF is not set
|
||||
# CONFIG_BLK_DEV_BSG is not set
|
||||
# CONFIG_BLK_DEV_INTEGRITY is not set
|
||||
|
||||
#
|
||||
# IO Schedulers
|
||||
|
@ -119,7 +127,7 @@ CONFIG_IOSCHED_NOOP=y
|
|||
# CONFIG_DEFAULT_CFQ is not set
|
||||
CONFIG_DEFAULT_NOOP=y
|
||||
CONFIG_DEFAULT_IOSCHED="noop"
|
||||
CONFIG_CLASSIC_RCU=y
|
||||
CONFIG_FREEZER=y
|
||||
|
||||
#
|
||||
# System Type
|
||||
|
@ -129,11 +137,10 @@ CONFIG_CLASSIC_RCU=y
|
|||
# CONFIG_ARCH_REALVIEW is not set
|
||||
# CONFIG_ARCH_VERSATILE is not set
|
||||
# CONFIG_ARCH_AT91 is not set
|
||||
# CONFIG_ARCH_CLPS7500 is not set
|
||||
# CONFIG_ARCH_CLPS711X is not set
|
||||
# CONFIG_ARCH_CO285 is not set
|
||||
# CONFIG_ARCH_EBSA110 is not set
|
||||
# CONFIG_ARCH_EP93XX is not set
|
||||
# CONFIG_ARCH_GEMINI is not set
|
||||
# CONFIG_ARCH_FOOTBRIDGE is not set
|
||||
# CONFIG_ARCH_NETX is not set
|
||||
# CONFIG_ARCH_H720X is not set
|
||||
|
@ -145,46 +152,44 @@ CONFIG_CLASSIC_RCU=y
|
|||
# CONFIG_ARCH_IXP2000 is not set
|
||||
# CONFIG_ARCH_IXP4XX is not set
|
||||
# CONFIG_ARCH_L7200 is not set
|
||||
# CONFIG_ARCH_KIRKWOOD is not set
|
||||
# CONFIG_ARCH_KS8695 is not set
|
||||
# CONFIG_ARCH_NS9XXX is not set
|
||||
# CONFIG_ARCH_LOKI is not set
|
||||
# CONFIG_ARCH_MV78XX0 is not set
|
||||
CONFIG_ARCH_MXC=y
|
||||
# CONFIG_ARCH_ORION5X is not set
|
||||
# CONFIG_ARCH_PNX4008 is not set
|
||||
# CONFIG_ARCH_PXA is not set
|
||||
# CONFIG_ARCH_MMP 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_SHARK is not set
|
||||
# CONFIG_ARCH_LH7A40X is not set
|
||||
# CONFIG_ARCH_DAVINCI is not set
|
||||
# CONFIG_ARCH_OMAP is not set
|
||||
# CONFIG_ARCH_MSM7X00A is not set
|
||||
|
||||
#
|
||||
# Boot options
|
||||
#
|
||||
|
||||
#
|
||||
# Power management
|
||||
#
|
||||
# CONFIG_ARCH_MSM is not set
|
||||
# CONFIG_ARCH_W90X900 is not set
|
||||
|
||||
#
|
||||
# Freescale MXC Implementations
|
||||
#
|
||||
# CONFIG_ARCH_MX1 is not set
|
||||
CONFIG_ARCH_MX2=y
|
||||
# CONFIG_ARCH_MX3 is not set
|
||||
|
||||
#
|
||||
# MX2 family CPU support
|
||||
#
|
||||
# CONFIG_MACH_MX21 is not set
|
||||
CONFIG_MACH_MX27=y
|
||||
|
||||
#
|
||||
# MX2 Platforms
|
||||
# MX2 platforms:
|
||||
#
|
||||
# CONFIG_MACH_MX27ADS is not set
|
||||
CONFIG_MACH_MX27ADS=y
|
||||
CONFIG_MACH_PCM038=y
|
||||
CONFIG_MACH_PCM970_BASEBOARD=y
|
||||
CONFIG_MXC_IRQ_PRIOR=y
|
||||
CONFIG_MXC_PWM=y
|
||||
|
||||
#
|
||||
# Processor Type
|
||||
|
@ -209,6 +214,7 @@ CONFIG_ARM_THUMB=y
|
|||
# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
|
||||
# CONFIG_CPU_CACHE_ROUND_ROBIN is not set
|
||||
# CONFIG_OUTER_CACHE is not set
|
||||
CONFIG_COMMON_CLKDEV=y
|
||||
|
||||
#
|
||||
# Bus support
|
||||
|
@ -224,25 +230,32 @@ CONFIG_TICK_ONESHOT=y
|
|||
CONFIG_NO_HZ=y
|
||||
CONFIG_HIGH_RES_TIMERS=y
|
||||
CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
|
||||
CONFIG_VMSPLIT_3G=y
|
||||
# CONFIG_VMSPLIT_2G is not set
|
||||
# CONFIG_VMSPLIT_1G is not set
|
||||
CONFIG_PAGE_OFFSET=0xC0000000
|
||||
CONFIG_PREEMPT=y
|
||||
CONFIG_HZ=100
|
||||
CONFIG_AEABI=y
|
||||
# CONFIG_OABI_COMPAT is not set
|
||||
# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
|
||||
CONFIG_OABI_COMPAT=y
|
||||
CONFIG_ARCH_FLATMEM_HAS_HOLES=y
|
||||
# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
|
||||
# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
|
||||
# CONFIG_HIGHMEM is not set
|
||||
CONFIG_SELECT_MEMORY_MODEL=y
|
||||
CONFIG_FLATMEM_MANUAL=y
|
||||
# CONFIG_DISCONTIGMEM_MANUAL is not set
|
||||
# CONFIG_SPARSEMEM_MANUAL is not set
|
||||
CONFIG_FLATMEM=y
|
||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||
# CONFIG_SPARSEMEM_STATIC is not set
|
||||
# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
|
||||
CONFIG_PAGEFLAGS_EXTENDED=y
|
||||
CONFIG_SPLIT_PTLOCK_CPUS=4096
|
||||
# CONFIG_RESOURCES_64BIT is not set
|
||||
CONFIG_ZONE_DMA_FLAG=1
|
||||
CONFIG_BOUNCE=y
|
||||
# CONFIG_PHYS_ADDR_T_64BIT is not set
|
||||
CONFIG_ZONE_DMA_FLAG=0
|
||||
CONFIG_VIRT_TO_BUS=y
|
||||
CONFIG_UNEVICTABLE_LRU=y
|
||||
CONFIG_HAVE_MLOCK=y
|
||||
CONFIG_HAVE_MLOCKED_PAGE_BIT=y
|
||||
CONFIG_ALIGNMENT_TRAP=y
|
||||
|
||||
#
|
||||
|
@ -254,6 +267,11 @@ CONFIG_CMDLINE=""
|
|||
# CONFIG_XIP_KERNEL is not set
|
||||
# CONFIG_KEXEC is not set
|
||||
|
||||
#
|
||||
# CPU Power Management
|
||||
#
|
||||
# CONFIG_CPU_IDLE is not set
|
||||
|
||||
#
|
||||
# Floating point emulation
|
||||
#
|
||||
|
@ -261,24 +279,33 @@ CONFIG_CMDLINE=""
|
|||
#
|
||||
# At least one emulation must be selected
|
||||
#
|
||||
CONFIG_FPE_NWFPE=y
|
||||
CONFIG_FPE_NWFPE_XP=y
|
||||
# CONFIG_FPE_FASTFPE is not set
|
||||
# CONFIG_VFP is not set
|
||||
|
||||
#
|
||||
# Userspace binary formats
|
||||
#
|
||||
CONFIG_BINFMT_ELF=y
|
||||
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
|
||||
CONFIG_HAVE_AOUT=y
|
||||
# CONFIG_BINFMT_AOUT is not set
|
||||
# CONFIG_BINFMT_MISC is not set
|
||||
|
||||
#
|
||||
# Power management options
|
||||
#
|
||||
# CONFIG_PM is not set
|
||||
CONFIG_PM=y
|
||||
CONFIG_PM_DEBUG=y
|
||||
# CONFIG_PM_VERBOSE is not set
|
||||
CONFIG_CAN_PM_TRACE=y
|
||||
CONFIG_PM_SLEEP=y
|
||||
CONFIG_SUSPEND=y
|
||||
# CONFIG_PM_TEST_SUSPEND is not set
|
||||
CONFIG_SUSPEND_FREEZER=y
|
||||
# CONFIG_APM_EMULATION is not set
|
||||
CONFIG_ARCH_SUSPEND_POSSIBLE=y
|
||||
|
||||
#
|
||||
# Networking
|
||||
#
|
||||
CONFIG_NET=y
|
||||
|
||||
#
|
||||
|
@ -293,7 +320,7 @@ CONFIG_IP_MULTICAST=y
|
|||
# CONFIG_IP_ADVANCED_ROUTER is not set
|
||||
CONFIG_IP_FIB_HASH=y
|
||||
CONFIG_IP_PNP=y
|
||||
# CONFIG_IP_PNP_DHCP is not set
|
||||
CONFIG_IP_PNP_DHCP=y
|
||||
# CONFIG_IP_PNP_BOOTP is not set
|
||||
# CONFIG_IP_PNP_RARP is not set
|
||||
# CONFIG_NET_IPIP is not set
|
||||
|
@ -323,6 +350,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
|
|||
# CONFIG_TIPC is not set
|
||||
# CONFIG_ATM is not set
|
||||
# CONFIG_BRIDGE is not set
|
||||
# CONFIG_NET_DSA is not set
|
||||
# CONFIG_VLAN_8021Q is not set
|
||||
# CONFIG_DECNET is not set
|
||||
# CONFIG_LLC2 is not set
|
||||
|
@ -332,26 +360,23 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
|
|||
# CONFIG_LAPB is not set
|
||||
# CONFIG_ECONET is not set
|
||||
# CONFIG_WAN_ROUTER is not set
|
||||
# CONFIG_PHONET is not set
|
||||
# CONFIG_NET_SCHED is not set
|
||||
# CONFIG_DCB is not set
|
||||
|
||||
#
|
||||
# Network testing
|
||||
#
|
||||
# CONFIG_NET_PKTGEN is not set
|
||||
# CONFIG_NET_TCPPROBE is not set
|
||||
# CONFIG_NET_DROP_MONITOR is not set
|
||||
# CONFIG_HAMRADIO is not set
|
||||
# CONFIG_CAN is not set
|
||||
# CONFIG_IRDA is not set
|
||||
# CONFIG_BT is not set
|
||||
# CONFIG_AF_RXRPC is not set
|
||||
|
||||
#
|
||||
# Wireless
|
||||
#
|
||||
# CONFIG_CFG80211 is not set
|
||||
# CONFIG_WIRELESS_EXT is not set
|
||||
# CONFIG_MAC80211 is not set
|
||||
# CONFIG_IEEE80211 is not set
|
||||
# CONFIG_WIRELESS is not set
|
||||
# CONFIG_WIMAX is not set
|
||||
# CONFIG_RFKILL is not set
|
||||
# CONFIG_NET_9P is not set
|
||||
|
||||
|
@ -366,12 +391,15 @@ CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
|||
CONFIG_STANDALONE=y
|
||||
CONFIG_PREVENT_FIRMWARE_BUILD=y
|
||||
CONFIG_FW_LOADER=y
|
||||
CONFIG_FIRMWARE_IN_KERNEL=y
|
||||
CONFIG_EXTRA_FIRMWARE=""
|
||||
# CONFIG_SYS_HYPERVISOR is not set
|
||||
# CONFIG_CONNECTOR is not set
|
||||
CONFIG_MTD=y
|
||||
# CONFIG_MTD_DEBUG is not set
|
||||
# CONFIG_MTD_CONCAT is not set
|
||||
CONFIG_MTD_PARTITIONS=y
|
||||
# CONFIG_MTD_TESTS is not set
|
||||
# CONFIG_MTD_REDBOOT_PARTS is not set
|
||||
CONFIG_MTD_CMDLINE_PARTS=y
|
||||
# CONFIG_MTD_AFS_PARTS is not set
|
||||
|
@ -426,9 +454,7 @@ CONFIG_MTD_CFI_UTIL=y
|
|||
#
|
||||
# CONFIG_MTD_COMPLEX_MAPPINGS is not set
|
||||
CONFIG_MTD_PHYSMAP=y
|
||||
CONFIG_MTD_PHYSMAP_START=0x00000000
|
||||
CONFIG_MTD_PHYSMAP_LEN=0x0
|
||||
CONFIG_MTD_PHYSMAP_BANKWIDTH=2
|
||||
# CONFIG_MTD_PHYSMAP_COMPAT is not set
|
||||
# CONFIG_MTD_ARM_INTEGRATOR is not set
|
||||
# CONFIG_MTD_PLATRAM is not set
|
||||
|
||||
|
@ -451,6 +477,11 @@ CONFIG_MTD_PHYSMAP_BANKWIDTH=2
|
|||
# CONFIG_MTD_NAND is not set
|
||||
# CONFIG_MTD_ONENAND is not set
|
||||
|
||||
#
|
||||
# LPDDR flash memory drivers
|
||||
#
|
||||
# CONFIG_MTD_LPDDR is not set
|
||||
|
||||
#
|
||||
# UBI - Unsorted block images
|
||||
#
|
||||
|
@ -477,7 +508,7 @@ CONFIG_HAVE_IDE=y
|
|||
# CONFIG_ATA is not set
|
||||
# CONFIG_MD is not set
|
||||
CONFIG_NETDEVICES=y
|
||||
# CONFIG_NETDEVICES_MULTIQUEUE is not set
|
||||
CONFIG_COMPAT_NET_DEV_OPS=y
|
||||
# CONFIG_DUMMY is not set
|
||||
# CONFIG_BONDING is not set
|
||||
# CONFIG_MACVLAN is not set
|
||||
|
@ -491,12 +522,20 @@ CONFIG_NET_ETHERNET=y
|
|||
# CONFIG_SMC91X is not set
|
||||
# CONFIG_DM9000 is not set
|
||||
# CONFIG_ENC28J60 is not set
|
||||
# CONFIG_ETHOC is not set
|
||||
# CONFIG_SMC911X is not set
|
||||
# CONFIG_SMSC911X is not set
|
||||
# CONFIG_DNET is not set
|
||||
# CONFIG_IBM_NEW_EMAC_ZMII is not set
|
||||
# CONFIG_IBM_NEW_EMAC_RGMII is not set
|
||||
# CONFIG_IBM_NEW_EMAC_TAH is not set
|
||||
# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
|
||||
# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
|
||||
# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
|
||||
# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
|
||||
# CONFIG_B44 is not set
|
||||
CONFIG_FEC_OLD=y
|
||||
CONFIG_FEC=y
|
||||
# CONFIG_FEC2 is not set
|
||||
# CONFIG_NETDEV_1000 is not set
|
||||
# CONFIG_NETDEV_10000 is not set
|
||||
|
||||
|
@ -505,7 +544,10 @@ CONFIG_FEC_OLD=y
|
|||
#
|
||||
# CONFIG_WLAN_PRE80211 is not set
|
||||
# CONFIG_WLAN_80211 is not set
|
||||
# CONFIG_IWLWIFI_LEDS is not set
|
||||
|
||||
#
|
||||
# Enable WiMAX (Networking options) to see the WiMAX drivers
|
||||
#
|
||||
# CONFIG_WAN is not set
|
||||
# CONFIG_PPP is not set
|
||||
# CONFIG_SLIP is not set
|
||||
|
@ -541,12 +583,15 @@ CONFIG_INPUT_TOUCHSCREEN=y
|
|||
# CONFIG_TOUCHSCREEN_FUJITSU is not set
|
||||
# CONFIG_TOUCHSCREEN_GUNZE is not set
|
||||
# CONFIG_TOUCHSCREEN_ELO is not set
|
||||
# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
|
||||
# CONFIG_TOUCHSCREEN_MTOUCH is not set
|
||||
# CONFIG_TOUCHSCREEN_INEXIO is not set
|
||||
# CONFIG_TOUCHSCREEN_MK712 is not set
|
||||
# CONFIG_TOUCHSCREEN_PENMOUNT is not set
|
||||
# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
|
||||
# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
|
||||
# CONFIG_TOUCHSCREEN_UCB1400 is not set
|
||||
# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
|
||||
# CONFIG_TOUCHSCREEN_TSC2007 is not set
|
||||
# CONFIG_INPUT_MISC is not set
|
||||
|
||||
#
|
||||
|
@ -559,6 +604,7 @@ CONFIG_INPUT_TOUCHSCREEN=y
|
|||
# Character devices
|
||||
#
|
||||
CONFIG_VT=y
|
||||
CONFIG_CONSOLE_TRANSLATIONS=y
|
||||
CONFIG_VT_CONSOLE=y
|
||||
CONFIG_HW_CONSOLE=y
|
||||
# CONFIG_VT_HW_CONSOLE_BINDING is not set
|
||||
|
@ -573,42 +619,55 @@ CONFIG_DEVKMEM=y
|
|||
#
|
||||
# Non-8250 serial port support
|
||||
#
|
||||
# CONFIG_SERIAL_MAX3100 is not set
|
||||
CONFIG_SERIAL_IMX=y
|
||||
CONFIG_SERIAL_IMX_CONSOLE=y
|
||||
CONFIG_SERIAL_CORE=y
|
||||
CONFIG_SERIAL_CORE_CONSOLE=y
|
||||
CONFIG_UNIX98_PTYS=y
|
||||
# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
|
||||
# CONFIG_LEGACY_PTYS is not set
|
||||
# CONFIG_IPMI_HANDLER is not set
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
# CONFIG_NVRAM is not set
|
||||
# CONFIG_R3964 is not set
|
||||
# CONFIG_RAW_DRIVER is not set
|
||||
# CONFIG_TCG_TPM is not set
|
||||
CONFIG_I2C=y
|
||||
CONFIG_I2C_BOARDINFO=y
|
||||
# CONFIG_I2C_CHARDEV is not set
|
||||
CONFIG_I2C_CHARDEV=y
|
||||
CONFIG_I2C_HELPER_AUTO=y
|
||||
|
||||
#
|
||||
# I2C Hardware Bus support
|
||||
#
|
||||
|
||||
#
|
||||
# I2C system bus drivers (mostly embedded / system-on-chip)
|
||||
#
|
||||
# CONFIG_I2C_GPIO is not set
|
||||
CONFIG_I2C_IMX=y
|
||||
# CONFIG_I2C_OCORES is not set
|
||||
# CONFIG_I2C_PARPORT_LIGHT is not set
|
||||
# CONFIG_I2C_SIMTEC is not set
|
||||
|
||||
#
|
||||
# External I2C/SMBus adapter drivers
|
||||
#
|
||||
# CONFIG_I2C_PARPORT_LIGHT is not set
|
||||
# CONFIG_I2C_TAOS_EVM is not set
|
||||
# CONFIG_I2C_STUB 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_DS1682 is not set
|
||||
# CONFIG_EEPROM_LEGACY is not set
|
||||
# CONFIG_SENSORS_PCF8574 is not set
|
||||
# CONFIG_PCF8575 is not set
|
||||
# CONFIG_SENSORS_PCF8591 is not set
|
||||
# CONFIG_TPS65010 is not set
|
||||
# CONFIG_SENSORS_PCA9539 is not set
|
||||
# CONFIG_SENSORS_MAX6875 is not set
|
||||
# CONFIG_SENSORS_TSL2550 is not set
|
||||
# CONFIG_I2C_DEBUG_CORE is not set
|
||||
|
@ -622,47 +681,83 @@ CONFIG_SPI_MASTER=y
|
|||
# SPI Master Controller Drivers
|
||||
#
|
||||
CONFIG_SPI_BITBANG=y
|
||||
# CONFIG_SPI_GPIO is not set
|
||||
|
||||
#
|
||||
# SPI Protocol Masters
|
||||
#
|
||||
# CONFIG_EEPROM_AT25 is not set
|
||||
# CONFIG_SPI_SPIDEV is not set
|
||||
# CONFIG_SPI_TLE62X0 is not set
|
||||
CONFIG_HAVE_GPIO_LIB=y
|
||||
CONFIG_ARCH_REQUIRE_GPIOLIB=y
|
||||
CONFIG_GPIOLIB=y
|
||||
# CONFIG_GPIO_SYSFS is not set
|
||||
|
||||
#
|
||||
# GPIO Support
|
||||
# Memory mapped GPIO expanders:
|
||||
#
|
||||
|
||||
#
|
||||
# I2C GPIO expanders:
|
||||
#
|
||||
# CONFIG_GPIO_MAX732X is not set
|
||||
# CONFIG_GPIO_PCA953X is not set
|
||||
# CONFIG_GPIO_PCF857X is not set
|
||||
|
||||
#
|
||||
# PCI GPIO expanders:
|
||||
#
|
||||
|
||||
#
|
||||
# SPI GPIO expanders:
|
||||
#
|
||||
# CONFIG_GPIO_MAX7301 is not set
|
||||
# CONFIG_GPIO_MCP23S08 is not set
|
||||
# CONFIG_W1 is not set
|
||||
CONFIG_W1=y
|
||||
|
||||
#
|
||||
# 1-wire Bus Masters
|
||||
#
|
||||
# CONFIG_W1_MASTER_DS2482 is not set
|
||||
CONFIG_W1_MASTER_MXC=y
|
||||
# CONFIG_W1_MASTER_GPIO is not set
|
||||
|
||||
#
|
||||
# 1-wire Slaves
|
||||
#
|
||||
CONFIG_W1_SLAVE_THERM=y
|
||||
# CONFIG_W1_SLAVE_SMEM is not set
|
||||
# CONFIG_W1_SLAVE_DS2431 is not set
|
||||
# CONFIG_W1_SLAVE_DS2433 is not set
|
||||
# CONFIG_W1_SLAVE_DS2760 is not set
|
||||
# CONFIG_W1_SLAVE_BQ27000 is not set
|
||||
# CONFIG_POWER_SUPPLY is not set
|
||||
# CONFIG_HWMON is not set
|
||||
# CONFIG_THERMAL is not set
|
||||
# CONFIG_THERMAL_HWMON is not set
|
||||
# CONFIG_WATCHDOG is not set
|
||||
CONFIG_SSB_POSSIBLE=y
|
||||
|
||||
#
|
||||
# Sonics Silicon Backplane
|
||||
#
|
||||
CONFIG_SSB_POSSIBLE=y
|
||||
# CONFIG_SSB is not set
|
||||
|
||||
#
|
||||
# Multifunction device drivers
|
||||
#
|
||||
# CONFIG_MFD_CORE 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_TPS65010 is not set
|
||||
# CONFIG_TWL4030_CORE is not set
|
||||
# CONFIG_MFD_TMIO is not set
|
||||
# CONFIG_MFD_TC6393XB is not set
|
||||
# CONFIG_PMIC_DA903X is not set
|
||||
# CONFIG_MFD_WM8400 is not set
|
||||
# CONFIG_MFD_WM8350_I2C is not set
|
||||
# CONFIG_MFD_PCF50633 is not set
|
||||
|
||||
#
|
||||
# Multimedia devices
|
||||
|
@ -683,7 +778,7 @@ CONFIG_VIDEO_MEDIA=y
|
|||
#
|
||||
# CONFIG_MEDIA_ATTACH is not set
|
||||
CONFIG_MEDIA_TUNER=y
|
||||
# CONFIG_MEDIA_TUNER_CUSTOMIZE is not set
|
||||
# CONFIG_MEDIA_TUNER_CUSTOMISE is not set
|
||||
CONFIG_MEDIA_TUNER_SIMPLE=y
|
||||
CONFIG_MEDIA_TUNER_TDA8290=y
|
||||
CONFIG_MEDIA_TUNER_TDA9887=y
|
||||
|
@ -692,16 +787,17 @@ CONFIG_MEDIA_TUNER_TEA5767=y
|
|||
CONFIG_MEDIA_TUNER_MT20XX=y
|
||||
CONFIG_MEDIA_TUNER_XC2028=y
|
||||
CONFIG_MEDIA_TUNER_XC5000=y
|
||||
CONFIG_MEDIA_TUNER_MC44S803=y
|
||||
CONFIG_VIDEO_V4L2=y
|
||||
CONFIG_VIDEO_V4L1=y
|
||||
CONFIG_VIDEO_CAPTURE_DRIVERS=y
|
||||
# CONFIG_VIDEO_ADV_DEBUG is not set
|
||||
# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
|
||||
CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
|
||||
# CONFIG_VIDEO_VIVI is not set
|
||||
# CONFIG_VIDEO_CPIA is not set
|
||||
# CONFIG_VIDEO_SAA5246A is not set
|
||||
# CONFIG_VIDEO_SAA5249 is not set
|
||||
# CONFIG_TUNER_3036 is not set
|
||||
# CONFIG_SOC_CAMERA is not set
|
||||
# CONFIG_RADIO_ADAPTERS is not set
|
||||
# CONFIG_DAB is not set
|
||||
|
@ -714,9 +810,10 @@ CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
|
|||
CONFIG_FB=y
|
||||
# CONFIG_FIRMWARE_EDID is not set
|
||||
# CONFIG_FB_DDC is not set
|
||||
# CONFIG_FB_CFB_FILLRECT is not set
|
||||
# CONFIG_FB_CFB_COPYAREA is not set
|
||||
# CONFIG_FB_CFB_IMAGEBLIT 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
|
||||
|
@ -732,8 +829,12 @@ CONFIG_FB=y
|
|||
#
|
||||
# Frame buffer hardware drivers
|
||||
#
|
||||
CONFIG_FB_IMX=y
|
||||
# CONFIG_FB_S1D13XXX 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 is not set
|
||||
|
||||
#
|
||||
|
@ -761,14 +862,29 @@ CONFIG_FONT_8x8=y
|
|||
# CONFIG_FONT_SUN12x22 is not set
|
||||
# CONFIG_FONT_10x18 is not set
|
||||
# CONFIG_LOGO is not set
|
||||
|
||||
#
|
||||
# Sound
|
||||
#
|
||||
# CONFIG_SOUND is not set
|
||||
# CONFIG_HID_SUPPORT is not set
|
||||
# CONFIG_USB_SUPPORT is not set
|
||||
# CONFIG_MMC is not set
|
||||
CONFIG_MMC=y
|
||||
# CONFIG_MMC_DEBUG is not set
|
||||
# CONFIG_MMC_UNSAFE_RESUME is not set
|
||||
|
||||
#
|
||||
# MMC/SD/SDIO Card Drivers
|
||||
#
|
||||
CONFIG_MMC_BLOCK=y
|
||||
CONFIG_MMC_BLOCK_BOUNCE=y
|
||||
# CONFIG_SDIO_UART is not set
|
||||
# CONFIG_MMC_TEST is not set
|
||||
|
||||
#
|
||||
# MMC/SD/SDIO Host Controller Drivers
|
||||
#
|
||||
# CONFIG_MMC_SDHCI is not set
|
||||
CONFIG_MMC_MXC=y
|
||||
# CONFIG_MMC_SPI is not set
|
||||
# CONFIG_MEMSTICK is not set
|
||||
# CONFIG_ACCESSIBILITY is not set
|
||||
# CONFIG_NEW_LEDS is not set
|
||||
CONFIG_RTC_LIB=y
|
||||
CONFIG_RTC_CLASS=y
|
||||
|
@ -800,42 +916,56 @@ CONFIG_RTC_DRV_PCF8563=y
|
|||
# CONFIG_RTC_DRV_M41T80 is not set
|
||||
# CONFIG_RTC_DRV_S35390A is not set
|
||||
# CONFIG_RTC_DRV_FM3130 is not set
|
||||
# CONFIG_RTC_DRV_RX8581 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
|
||||
|
||||
#
|
||||
# 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_BQ4802 is not set
|
||||
# CONFIG_RTC_DRV_V3020 is not set
|
||||
|
||||
#
|
||||
# on-CPU RTC drivers
|
||||
#
|
||||
# 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
|
||||
|
||||
#
|
||||
# File systems
|
||||
#
|
||||
# CONFIG_EXT2_FS is not set
|
||||
# CONFIG_EXT3_FS is not set
|
||||
# CONFIG_EXT4DEV_FS is not set
|
||||
# CONFIG_EXT4_FS is not set
|
||||
# CONFIG_REISERFS_FS is not set
|
||||
# CONFIG_JFS_FS is not set
|
||||
# CONFIG_FS_POSIX_ACL is not set
|
||||
CONFIG_FILE_LOCKING=y
|
||||
# CONFIG_XFS_FS is not set
|
||||
# CONFIG_OCFS2_FS is not set
|
||||
# CONFIG_BTRFS_FS is not set
|
||||
# CONFIG_DNOTIFY is not set
|
||||
# CONFIG_INOTIFY is not set
|
||||
# CONFIG_QUOTA is not set
|
||||
|
@ -843,6 +973,11 @@ CONFIG_RTC_DRV_PCF8563=y
|
|||
# CONFIG_AUTOFS4_FS is not set
|
||||
# CONFIG_FUSE_FS is not set
|
||||
|
||||
#
|
||||
# Caches
|
||||
#
|
||||
# CONFIG_FSCACHE is not set
|
||||
|
||||
#
|
||||
# CD-ROM/DVD Filesystems
|
||||
#
|
||||
|
@ -861,15 +996,13 @@ CONFIG_RTC_DRV_PCF8563=y
|
|||
#
|
||||
CONFIG_PROC_FS=y
|
||||
CONFIG_PROC_SYSCTL=y
|
||||
# CONFIG_PROC_PAGE_MONITOR is not set
|
||||
CONFIG_SYSFS=y
|
||||
CONFIG_TMPFS=y
|
||||
# CONFIG_TMPFS_POSIX_ACL is not set
|
||||
# CONFIG_HUGETLB_PAGE is not set
|
||||
# CONFIG_CONFIGFS_FS is not set
|
||||
|
||||
#
|
||||
# Miscellaneous filesystems
|
||||
#
|
||||
CONFIG_MISC_FILESYSTEMS=y
|
||||
# CONFIG_ADFS_FS is not set
|
||||
# CONFIG_AFFS_FS is not set
|
||||
# CONFIG_HFS_FS is not set
|
||||
|
@ -889,25 +1022,27 @@ CONFIG_JFFS2_ZLIB=y
|
|||
CONFIG_JFFS2_RTIME=y
|
||||
# CONFIG_JFFS2_RUBIN is not set
|
||||
# CONFIG_CRAMFS is not set
|
||||
# CONFIG_SQUASHFS is not set
|
||||
# CONFIG_VXFS_FS is not set
|
||||
# CONFIG_MINIX_FS is not set
|
||||
# CONFIG_OMFS_FS is not set
|
||||
# CONFIG_HPFS_FS is not set
|
||||
# CONFIG_QNX4FS_FS is not set
|
||||
# CONFIG_ROMFS_FS is not set
|
||||
# CONFIG_SYSV_FS is not set
|
||||
# CONFIG_UFS_FS is not set
|
||||
# CONFIG_NILFS2_FS is not set
|
||||
CONFIG_NETWORK_FILESYSTEMS=y
|
||||
CONFIG_NFS_FS=y
|
||||
CONFIG_NFS_V3=y
|
||||
# CONFIG_NFS_V3_ACL is not set
|
||||
# CONFIG_NFS_V4 is not set
|
||||
# CONFIG_NFSD is not set
|
||||
CONFIG_ROOT_NFS=y
|
||||
# CONFIG_NFSD is not set
|
||||
CONFIG_LOCKD=y
|
||||
CONFIG_LOCKD_V4=y
|
||||
CONFIG_NFS_COMMON=y
|
||||
CONFIG_SUNRPC=y
|
||||
# CONFIG_SUNRPC_BIND34 is not set
|
||||
# CONFIG_RPCSEC_GSS_KRB5 is not set
|
||||
# CONFIG_RPCSEC_GSS_SPKM3 is not set
|
||||
# CONFIG_SMB_FS is not set
|
||||
|
@ -972,12 +1107,41 @@ CONFIG_ENABLE_MUST_CHECK=y
|
|||
CONFIG_FRAME_WARN=1024
|
||||
# CONFIG_MAGIC_SYSRQ is not set
|
||||
# CONFIG_UNUSED_SYMBOLS is not set
|
||||
# CONFIG_DEBUG_FS is not set
|
||||
CONFIG_DEBUG_FS=y
|
||||
# CONFIG_HEADERS_CHECK is not set
|
||||
# CONFIG_DEBUG_KERNEL is not set
|
||||
CONFIG_STACKTRACE=y
|
||||
# CONFIG_DEBUG_BUGVERBOSE is not set
|
||||
CONFIG_FRAME_POINTER=y
|
||||
# CONFIG_DEBUG_MEMORY_INIT is not set
|
||||
# CONFIG_RCU_CPU_STALL_DETECTOR is not set
|
||||
# CONFIG_LATENCYTOP is not set
|
||||
CONFIG_SYSCTL_SYSCALL_CHECK=y
|
||||
CONFIG_NOP_TRACER=y
|
||||
CONFIG_HAVE_FUNCTION_TRACER=y
|
||||
CONFIG_RING_BUFFER=y
|
||||
CONFIG_TRACING=y
|
||||
CONFIG_TRACING_SUPPORT=y
|
||||
|
||||
#
|
||||
# Tracers
|
||||
#
|
||||
# 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_CONTEXT_SWITCH_TRACER is not set
|
||||
# CONFIG_EVENT_TRACER is not set
|
||||
# CONFIG_BOOT_TRACER is not set
|
||||
# CONFIG_TRACE_BRANCH_PROFILING is not set
|
||||
# CONFIG_STACK_TRACER is not set
|
||||
# CONFIG_KMEMTRACE is not set
|
||||
# CONFIG_WORKQUEUE_TRACER is not set
|
||||
# CONFIG_BLK_DEV_IO_TRACE is not set
|
||||
# CONFIG_FTRACE_STARTUP_TEST is not set
|
||||
# CONFIG_DYNAMIC_DEBUG is not set
|
||||
# CONFIG_SAMPLES is not set
|
||||
CONFIG_HAVE_ARCH_KGDB=y
|
||||
CONFIG_ARM_UNWIND=y
|
||||
# CONFIG_DEBUG_USER is not set
|
||||
|
||||
#
|
||||
|
@ -985,24 +1149,26 @@ CONFIG_FRAME_POINTER=y
|
|||
#
|
||||
# CONFIG_KEYS is not set
|
||||
# CONFIG_SECURITY is not set
|
||||
# CONFIG_SECURITYFS is not set
|
||||
# CONFIG_SECURITY_FILE_CAPABILITIES is not set
|
||||
# CONFIG_CRYPTO is not set
|
||||
CONFIG_BINARY_PRINTF=y
|
||||
|
||||
#
|
||||
# Library routines
|
||||
#
|
||||
CONFIG_BITREVERSE=y
|
||||
# CONFIG_GENERIC_FIND_FIRST_BIT is not set
|
||||
# CONFIG_GENERIC_FIND_NEXT_BIT is not set
|
||||
CONFIG_GENERIC_FIND_LAST_BIT=y
|
||||
# CONFIG_CRC_CCITT is not set
|
||||
# CONFIG_CRC16 is not set
|
||||
# CONFIG_CRC_T10DIF is not set
|
||||
# CONFIG_CRC_ITU_T is not set
|
||||
CONFIG_CRC32=y
|
||||
# CONFIG_CRC7 is not set
|
||||
# CONFIG_LIBCRC32C is not set
|
||||
CONFIG_ZLIB_INFLATE=y
|
||||
CONFIG_ZLIB_DEFLATE=y
|
||||
CONFIG_PLIST=y
|
||||
CONFIG_HAS_IOMEM=y
|
||||
CONFIG_HAS_IOPORT=y
|
||||
CONFIG_HAS_DMA=y
|
||||
CONFIG_NLATTR=y
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -298,7 +298,6 @@ CONFIG_CPU_FREQ_GOV_POWERSAVE=m
|
|||
CONFIG_CPU_FREQ_GOV_USERSPACE=m
|
||||
CONFIG_CPU_FREQ_GOV_ONDEMAND=m
|
||||
CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
|
||||
CONFIG_CPU_FREQ_PXA=y
|
||||
|
||||
#
|
||||
# Floating point emulation
|
||||
|
|
|
@ -32,6 +32,7 @@
|
|||
#define SZ_4K 0x00001000
|
||||
#define SZ_8K 0x00002000
|
||||
#define SZ_16K 0x00004000
|
||||
#define SZ_32K 0x00008000
|
||||
#define SZ_64K 0x00010000
|
||||
#define SZ_128K 0x00020000
|
||||
#define SZ_256K 0x00040000
|
||||
|
|
|
@ -36,6 +36,8 @@
|
|||
struct mmu_gather {
|
||||
struct mm_struct *mm;
|
||||
unsigned int fullmm;
|
||||
unsigned long range_start;
|
||||
unsigned long range_end;
|
||||
};
|
||||
|
||||
DECLARE_PER_CPU(struct mmu_gather, mmu_gathers);
|
||||
|
@ -63,7 +65,19 @@ tlb_finish_mmu(struct mmu_gather *tlb, unsigned long start, unsigned long end)
|
|||
put_cpu_var(mmu_gathers);
|
||||
}
|
||||
|
||||
#define tlb_remove_tlb_entry(tlb,ptep,address) do { } while (0)
|
||||
/*
|
||||
* Memorize the range for the TLB flush.
|
||||
*/
|
||||
static inline void
|
||||
tlb_remove_tlb_entry(struct mmu_gather *tlb, pte_t *ptep, unsigned long addr)
|
||||
{
|
||||
if (!tlb->fullmm) {
|
||||
if (addr < tlb->range_start)
|
||||
tlb->range_start = addr;
|
||||
if (addr + PAGE_SIZE > tlb->range_end)
|
||||
tlb->range_end = addr + PAGE_SIZE;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* In the case of tlb vma handling, we can optimise these away in the
|
||||
|
@ -73,15 +87,18 @@ tlb_finish_mmu(struct mmu_gather *tlb, unsigned long start, unsigned long end)
|
|||
static inline void
|
||||
tlb_start_vma(struct mmu_gather *tlb, struct vm_area_struct *vma)
|
||||
{
|
||||
if (!tlb->fullmm)
|
||||
if (!tlb->fullmm) {
|
||||
flush_cache_range(vma, vma->vm_start, vma->vm_end);
|
||||
tlb->range_start = TASK_SIZE;
|
||||
tlb->range_end = 0;
|
||||
}
|
||||
}
|
||||
|
||||
static inline void
|
||||
tlb_end_vma(struct mmu_gather *tlb, struct vm_area_struct *vma)
|
||||
{
|
||||
if (!tlb->fullmm)
|
||||
flush_tlb_range(vma, vma->vm_start, vma->vm_end);
|
||||
if (!tlb->fullmm && tlb->range_end > 0)
|
||||
flush_tlb_range(vma, tlb->range_start, tlb->range_end);
|
||||
}
|
||||
|
||||
#define tlb_remove_page(tlb,page) free_page_and_swap_cache(page)
|
||||
|
|
|
@ -387,6 +387,8 @@
|
|||
#define __NR_dup3 (__NR_SYSCALL_BASE+358)
|
||||
#define __NR_pipe2 (__NR_SYSCALL_BASE+359)
|
||||
#define __NR_inotify_init1 (__NR_SYSCALL_BASE+360)
|
||||
#define __NR_preadv (__NR_SYSCALL_BASE+361)
|
||||
#define __NR_pwritev (__NR_SYSCALL_BASE+362)
|
||||
|
||||
/*
|
||||
* The following SWIs are ARM private.
|
||||
|
|
|
@ -370,6 +370,8 @@
|
|||
CALL(sys_dup3)
|
||||
CALL(sys_pipe2)
|
||||
/* 360 */ CALL(sys_inotify_init1)
|
||||
CALL(sys_preadv)
|
||||
CALL(sys_pwritev)
|
||||
#ifndef syscalls_counted
|
||||
.equ syscalls_padding, ((NR_syscalls + 3) & ~3) - NR_syscalls
|
||||
#define syscalls_counted
|
||||
|
|
|
@ -83,6 +83,7 @@
|
|||
#include <linux/net.h>
|
||||
#include <linux/ipc.h>
|
||||
#include <linux/uaccess.h>
|
||||
#include <linux/slab.h>
|
||||
|
||||
struct oldabi_stat64 {
|
||||
unsigned long long st_dev;
|
||||
|
@ -176,21 +177,12 @@ asmlinkage long sys_oabi_fstatat64(int dfd,
|
|||
int flag)
|
||||
{
|
||||
struct kstat stat;
|
||||
int error = -EINVAL;
|
||||
int error;
|
||||
|
||||
if ((flag & ~AT_SYMLINK_NOFOLLOW) != 0)
|
||||
goto out;
|
||||
|
||||
if (flag & AT_SYMLINK_NOFOLLOW)
|
||||
error = vfs_lstat_fd(dfd, filename, &stat);
|
||||
else
|
||||
error = vfs_stat_fd(dfd, filename, &stat);
|
||||
|
||||
if (!error)
|
||||
error = cp_oldabi_stat64(&stat, statbuf);
|
||||
|
||||
out:
|
||||
return error;
|
||||
error = vfs_fstatat(dfd, filename, &stat, flag);
|
||||
if (error)
|
||||
return error;
|
||||
return cp_oldabi_stat64(&stat, statbuf);
|
||||
}
|
||||
|
||||
struct oabi_flock64 {
|
||||
|
|
|
@ -85,7 +85,7 @@ static struct irqaction at91rm9200_timer_irq = {
|
|||
.handler = at91rm9200_timer_interrupt
|
||||
};
|
||||
|
||||
static cycle_t read_clk32k(void)
|
||||
static cycle_t read_clk32k(struct clocksource *cs)
|
||||
{
|
||||
return read_CRTR();
|
||||
}
|
||||
|
|
|
@ -31,7 +31,7 @@ static u32 pit_cnt; /* access only w/system irq blocked */
|
|||
* Clocksource: just a monotonic counter of MCK/16 cycles.
|
||||
* We don't care whether or not PIT irqs are enabled.
|
||||
*/
|
||||
static cycle_t read_pit_clk(void)
|
||||
static cycle_t read_pit_clk(struct clocksource *cs)
|
||||
{
|
||||
unsigned long flags;
|
||||
u32 elapsed;
|
||||
|
|
|
@ -87,7 +87,7 @@ extern void __init at91_add_device_eth(struct at91_eth_data *data);
|
|||
/* USB Host */
|
||||
struct at91_usbh_data {
|
||||
u8 ports; /* number of ports on root hub */
|
||||
u8 vbus_pin[]; /* port power-control pin */
|
||||
u8 vbus_pin[2]; /* port power-control pin */
|
||||
};
|
||||
extern void __init at91_add_device_usbh(struct at91_usbh_data *data);
|
||||
|
||||
|
|
|
@ -4,19 +4,56 @@ menu "TI DaVinci Implementations"
|
|||
|
||||
comment "DaVinci Core Type"
|
||||
|
||||
config ARCH_DAVINCI644x
|
||||
default y
|
||||
config ARCH_DAVINCI_DM644x
|
||||
bool "DaVinci 644x based system"
|
||||
|
||||
comment "DaVinci Board Type"
|
||||
|
||||
config MACH_DAVINCI_EVM
|
||||
bool "TI DaVinci EVM"
|
||||
bool "TI DM644x EVM"
|
||||
default y
|
||||
depends on ARCH_DAVINCI644x
|
||||
depends on ARCH_DAVINCI_DM644x
|
||||
help
|
||||
Configure this option to specify the whether the board used
|
||||
for development is a DaVinci EVM
|
||||
for development is a DM644x EVM
|
||||
|
||||
|
||||
config DAVINCI_MUX
|
||||
bool "DAVINCI multiplexing support"
|
||||
depends on ARCH_DAVINCI
|
||||
default y
|
||||
help
|
||||
Pin multiplexing support for DAVINCI boards. If your bootloader
|
||||
sets the multiplexing correctly, say N. Otherwise, or if unsure,
|
||||
say Y.
|
||||
|
||||
config DAVINCI_MUX_DEBUG
|
||||
bool "Multiplexing debug output"
|
||||
depends on DAVINCI_MUX
|
||||
help
|
||||
Makes the multiplexing functions print out a lot of debug info.
|
||||
This is useful if you want to find out the correct values of the
|
||||
multiplexing registers.
|
||||
|
||||
config DAVINCI_MUX_WARNINGS
|
||||
bool "Warn about pins the bootloader didn't set up"
|
||||
depends on DAVINCI_MUX
|
||||
help
|
||||
Choose Y here to warn whenever driver initialization logic needs
|
||||
to change the pin multiplexing setup. When there are no warnings
|
||||
printed, it's safe to deselect DAVINCI_MUX for your product.
|
||||
|
||||
config DAVINCI_RESET_CLOCKS
|
||||
bool "Reset unused clocks during boot"
|
||||
depends on ARCH_DAVINCI
|
||||
help
|
||||
Say Y if you want to reset unused clocks during boot.
|
||||
This option saves power, but assumes all drivers are
|
||||
using the clock framework. Broken drivers that do not
|
||||
yet use clock framework may not work with this option.
|
||||
If you are booting from another operating system, you
|
||||
probably do not want this option enabled until your
|
||||
device drivers work properly.
|
||||
|
||||
endmenu
|
||||
|
||||
|
|
|
@ -5,7 +5,12 @@
|
|||
|
||||
# Common objects
|
||||
obj-y := time.o irq.o clock.o serial.o io.o id.o psc.o \
|
||||
gpio.o mux.o devices.o usb.o
|
||||
gpio.o devices.o dma.o usb.o
|
||||
|
||||
obj-$(CONFIG_DAVINCI_MUX) += mux.o
|
||||
|
||||
# Chip specific
|
||||
obj-$(CONFIG_ARCH_DAVINCI_DM644x) += dm644x.o
|
||||
|
||||
# Board specific
|
||||
obj-$(CONFIG_MACH_DAVINCI_EVM) += board-evm.o
|
||||
obj-$(CONFIG_MACH_DAVINCI_EVM) += board-dm644x-evm.o
|
||||
|
|
|
@ -15,15 +15,20 @@
|
|||
#include <linux/platform_device.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/leds.h>
|
||||
#include <linux/memory.h>
|
||||
#include <linux/etherdevice.h>
|
||||
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/i2c/pcf857x.h>
|
||||
#include <linux/i2c/at24.h>
|
||||
|
||||
#include <linux/mtd/mtd.h>
|
||||
#include <linux/mtd/nand.h>
|
||||
#include <linux/mtd/partitions.h>
|
||||
#include <linux/mtd/physmap.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/phy.h>
|
||||
#include <linux/clk.h>
|
||||
|
||||
#include <asm/setup.h>
|
||||
#include <asm/mach-types.h>
|
||||
|
@ -32,25 +37,34 @@
|
|||
#include <asm/mach/map.h>
|
||||
#include <asm/mach/flash.h>
|
||||
|
||||
#include <mach/hardware.h>
|
||||
#include <mach/dm644x.h>
|
||||
#include <mach/common.h>
|
||||
#include <mach/i2c.h>
|
||||
#include <mach/serial.h>
|
||||
#include <mach/mux.h>
|
||||
#include <mach/psc.h>
|
||||
#include <mach/nand.h>
|
||||
|
||||
/* other misc. init functions */
|
||||
void __init davinci_psc_init(void);
|
||||
void __init davinci_irq_init(void);
|
||||
void __init davinci_map_common_io(void);
|
||||
void __init davinci_init_common_hw(void);
|
||||
#define DM644X_EVM_PHY_MASK (0x2)
|
||||
#define DM644X_EVM_MDIO_FREQUENCY (2200000) /* PHY bus frequency */
|
||||
|
||||
#if defined(CONFIG_MTD_PHYSMAP) || \
|
||||
defined(CONFIG_MTD_PHYSMAP_MODULE)
|
||||
#define DAVINCI_CFC_ATA_BASE 0x01C66000
|
||||
|
||||
#define DAVINCI_ASYNC_EMIF_CONTROL_BASE 0x01e00000
|
||||
#define DAVINCI_ASYNC_EMIF_DATA_CE0_BASE 0x02000000
|
||||
#define DAVINCI_ASYNC_EMIF_DATA_CE1_BASE 0x04000000
|
||||
#define DAVINCI_ASYNC_EMIF_DATA_CE2_BASE 0x06000000
|
||||
#define DAVINCI_ASYNC_EMIF_DATA_CE3_BASE 0x08000000
|
||||
|
||||
#define LXT971_PHY_ID (0x001378e2)
|
||||
#define LXT971_PHY_MASK (0xfffffff0)
|
||||
|
||||
static struct mtd_partition davinci_evm_norflash_partitions[] = {
|
||||
/* bootloader (U-Boot, etc) in first 4 sectors */
|
||||
/* bootloader (UBL, U-Boot, etc) in first 5 sectors */
|
||||
{
|
||||
.name = "bootloader",
|
||||
.offset = 0,
|
||||
.size = 4 * SZ_64K,
|
||||
.size = 5 * SZ_64K,
|
||||
.mask_flags = MTD_WRITEABLE, /* force read-only */
|
||||
},
|
||||
/* bootloader params in the next 1 sectors */
|
||||
|
@ -100,10 +114,89 @@ static struct platform_device davinci_evm_norflash_device = {
|
|||
.resource = &davinci_evm_norflash_resource,
|
||||
};
|
||||
|
||||
#endif
|
||||
/* DM644x EVM includes a 64 MByte small-page NAND flash (16K blocks).
|
||||
* It may used instead of the (default) NOR chip to boot, using TI's
|
||||
* tools to install the secondary boot loader (UBL) and U-Boot.
|
||||
*/
|
||||
struct mtd_partition davinci_evm_nandflash_partition[] = {
|
||||
/* Bootloader layout depends on whose u-boot is installed, but we
|
||||
* can hide all the details.
|
||||
* - block 0 for u-boot environment ... in mainline u-boot
|
||||
* - block 1 for UBL (plus up to four backup copies in blocks 2..5)
|
||||
* - blocks 6...? for u-boot
|
||||
* - blocks 16..23 for u-boot environment ... in TI's u-boot
|
||||
*/
|
||||
{
|
||||
.name = "bootloader",
|
||||
.offset = 0,
|
||||
.size = SZ_256K + SZ_128K,
|
||||
.mask_flags = MTD_WRITEABLE, /* force read-only */
|
||||
},
|
||||
/* Kernel */
|
||||
{
|
||||
.name = "kernel",
|
||||
.offset = MTDPART_OFS_APPEND,
|
||||
.size = SZ_4M,
|
||||
.mask_flags = 0,
|
||||
},
|
||||
/* File system (older GIT kernels started this on the 5MB mark) */
|
||||
{
|
||||
.name = "filesystem",
|
||||
.offset = MTDPART_OFS_APPEND,
|
||||
.size = MTDPART_SIZ_FULL,
|
||||
.mask_flags = 0,
|
||||
}
|
||||
/* A few blocks at end hold a flash BBT ... created by TI's CCS
|
||||
* using flashwriter_nand.out, but ignored by TI's versions of
|
||||
* Linux and u-boot. We boot faster by using them.
|
||||
*/
|
||||
};
|
||||
|
||||
#if defined(CONFIG_BLK_DEV_PALMCHIP_BK3710) || \
|
||||
defined(CONFIG_BLK_DEV_PALMCHIP_BK3710_MODULE)
|
||||
static struct davinci_nand_pdata davinci_evm_nandflash_data = {
|
||||
.parts = davinci_evm_nandflash_partition,
|
||||
.nr_parts = ARRAY_SIZE(davinci_evm_nandflash_partition),
|
||||
.ecc_mode = NAND_ECC_HW,
|
||||
.options = NAND_USE_FLASH_BBT,
|
||||
};
|
||||
|
||||
static struct resource davinci_evm_nandflash_resource[] = {
|
||||
{
|
||||
.start = DAVINCI_ASYNC_EMIF_DATA_CE0_BASE,
|
||||
.end = DAVINCI_ASYNC_EMIF_DATA_CE0_BASE + SZ_16M - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
}, {
|
||||
.start = DAVINCI_ASYNC_EMIF_CONTROL_BASE,
|
||||
.end = DAVINCI_ASYNC_EMIF_CONTROL_BASE + SZ_4K - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device davinci_evm_nandflash_device = {
|
||||
.name = "davinci_nand",
|
||||
.id = 0,
|
||||
.dev = {
|
||||
.platform_data = &davinci_evm_nandflash_data,
|
||||
},
|
||||
.num_resources = ARRAY_SIZE(davinci_evm_nandflash_resource),
|
||||
.resource = davinci_evm_nandflash_resource,
|
||||
};
|
||||
|
||||
static u64 davinci_fb_dma_mask = DMA_BIT_MASK(32);
|
||||
|
||||
static struct platform_device davinci_fb_device = {
|
||||
.name = "davincifb",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.dma_mask = &davinci_fb_dma_mask,
|
||||
.coherent_dma_mask = DMA_BIT_MASK(32),
|
||||
},
|
||||
.num_resources = 0,
|
||||
};
|
||||
|
||||
static struct platform_device rtc_dev = {
|
||||
.name = "rtc_davinci_evm",
|
||||
.id = -1,
|
||||
};
|
||||
|
||||
static struct resource ide_resources[] = {
|
||||
{
|
||||
|
@ -118,7 +211,7 @@ static struct resource ide_resources[] = {
|
|||
},
|
||||
};
|
||||
|
||||
static u64 ide_dma_mask = DMA_BIT_MASK(32);
|
||||
static u64 ide_dma_mask = DMA_32BIT_MASK;
|
||||
|
||||
static struct platform_device ide_dev = {
|
||||
.name = "palm_bk3710",
|
||||
|
@ -127,12 +220,10 @@ static struct platform_device ide_dev = {
|
|||
.num_resources = ARRAY_SIZE(ide_resources),
|
||||
.dev = {
|
||||
.dma_mask = &ide_dma_mask,
|
||||
.coherent_dma_mask = DMA_BIT_MASK(32),
|
||||
.coherent_dma_mask = DMA_32BIT_MASK,
|
||||
},
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
|
@ -311,7 +402,9 @@ evm_u35_setup(struct i2c_client *client, int gpio, unsigned ngpio, void *c)
|
|||
gpio_request(gpio + 7, "nCF_SEL");
|
||||
gpio_direction_output(gpio + 7, 1);
|
||||
|
||||
/* irlml6401 sustains over 3A, switches 5V in under 8 msec */
|
||||
/* irlml6401 switches over 1A, in under 8 msec;
|
||||
* now it can be managed by nDRV_VBUS ...
|
||||
*/
|
||||
setup_usb(500, 8);
|
||||
|
||||
return 0;
|
||||
|
@ -343,13 +436,119 @@ static struct pcf857x_platform_data pcf_data_u35 = {
|
|||
* - 0x0039, 1 byte NTSC vs PAL (bit 0x80 == PAL)
|
||||
* - ... newer boards may have more
|
||||
*/
|
||||
static struct memory_accessor *at24_mem_acc;
|
||||
|
||||
static void at24_setup(struct memory_accessor *mem_acc, void *context)
|
||||
{
|
||||
DECLARE_MAC_BUF(mac_str);
|
||||
char mac_addr[6];
|
||||
|
||||
at24_mem_acc = mem_acc;
|
||||
|
||||
/* Read MAC addr from EEPROM */
|
||||
if (at24_mem_acc->read(at24_mem_acc, mac_addr, 0x7f00, 6) == 6) {
|
||||
printk(KERN_INFO "Read MAC addr from EEPROM: %s\n",
|
||||
print_mac(mac_str, mac_addr));
|
||||
}
|
||||
}
|
||||
|
||||
static struct at24_platform_data eeprom_info = {
|
||||
.byte_len = (256*1024) / 8,
|
||||
.page_size = 64,
|
||||
.flags = AT24_FLAG_ADDR16,
|
||||
.setup = at24_setup,
|
||||
};
|
||||
|
||||
int dm6446evm_eeprom_read(void *buf, off_t off, size_t count)
|
||||
{
|
||||
if (at24_mem_acc)
|
||||
return at24_mem_acc->read(at24_mem_acc, buf, off, count);
|
||||
return -ENODEV;
|
||||
}
|
||||
EXPORT_SYMBOL(dm6446evm_eeprom_read);
|
||||
|
||||
int dm6446evm_eeprom_write(void *buf, off_t off, size_t count)
|
||||
{
|
||||
if (at24_mem_acc)
|
||||
return at24_mem_acc->write(at24_mem_acc, buf, off, count);
|
||||
return -ENODEV;
|
||||
}
|
||||
EXPORT_SYMBOL(dm6446evm_eeprom_write);
|
||||
|
||||
/*
|
||||
* MSP430 supports RTC, card detection, input from IR remote, and
|
||||
* a bit more. It triggers interrupts on GPIO(7) from pressing
|
||||
* buttons on the IR remote, and for card detect switches.
|
||||
*/
|
||||
static struct i2c_client *dm6446evm_msp;
|
||||
|
||||
static int dm6446evm_msp_probe(struct i2c_client *client,
|
||||
const struct i2c_device_id *id)
|
||||
{
|
||||
dm6446evm_msp = client;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int dm6446evm_msp_remove(struct i2c_client *client)
|
||||
{
|
||||
dm6446evm_msp = NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct i2c_device_id dm6446evm_msp_ids[] = {
|
||||
{ "dm6446evm_msp", 0, },
|
||||
{ /* end of list */ },
|
||||
};
|
||||
|
||||
static struct i2c_driver dm6446evm_msp_driver = {
|
||||
.driver.name = "dm6446evm_msp",
|
||||
.id_table = dm6446evm_msp_ids,
|
||||
.probe = dm6446evm_msp_probe,
|
||||
.remove = dm6446evm_msp_remove,
|
||||
};
|
||||
|
||||
static int dm6444evm_msp430_get_pins(void)
|
||||
{
|
||||
static const char txbuf[2] = { 2, 4, };
|
||||
char buf[4];
|
||||
struct i2c_msg msg[2] = {
|
||||
{
|
||||
.addr = dm6446evm_msp->addr,
|
||||
.flags = 0,
|
||||
.len = 2,
|
||||
.buf = (void __force *)txbuf,
|
||||
},
|
||||
{
|
||||
.addr = dm6446evm_msp->addr,
|
||||
.flags = I2C_M_RD,
|
||||
.len = 4,
|
||||
.buf = buf,
|
||||
},
|
||||
};
|
||||
int status;
|
||||
|
||||
if (!dm6446evm_msp)
|
||||
return -ENXIO;
|
||||
|
||||
/* Command 4 == get input state, returns port 2 and port3 data
|
||||
* S Addr W [A] len=2 [A] cmd=4 [A]
|
||||
* RS Addr R [A] [len=4] A [cmd=4] A [port2] A [port3] N P
|
||||
*/
|
||||
status = i2c_transfer(dm6446evm_msp->adapter, msg, 2);
|
||||
if (status < 0)
|
||||
return status;
|
||||
|
||||
dev_dbg(&dm6446evm_msp->dev,
|
||||
"PINS: %02x %02x %02x %02x\n",
|
||||
buf[0], buf[1], buf[2], buf[3]);
|
||||
|
||||
return (buf[3] << 8) | buf[2];
|
||||
}
|
||||
|
||||
static struct i2c_board_info __initdata i2c_info[] = {
|
||||
{
|
||||
I2C_BOARD_INFO("dm6446evm_msp", 0x23),
|
||||
},
|
||||
{
|
||||
I2C_BOARD_INFO("pcf8574", 0x38),
|
||||
.platform_data = &pcf_data_u2,
|
||||
|
@ -368,7 +567,6 @@ static struct i2c_board_info __initdata i2c_info[] = {
|
|||
},
|
||||
/* ALSO:
|
||||
* - tvl320aic33 audio codec (0x1b)
|
||||
* - msp430 microcontroller (0x23)
|
||||
* - tvp5146 video decoder (0x5d)
|
||||
*/
|
||||
};
|
||||
|
@ -384,51 +582,109 @@ static struct davinci_i2c_platform_data i2c_pdata = {
|
|||
static void __init evm_init_i2c(void)
|
||||
{
|
||||
davinci_init_i2c(&i2c_pdata);
|
||||
i2c_add_driver(&dm6446evm_msp_driver);
|
||||
i2c_register_board_info(1, i2c_info, ARRAY_SIZE(i2c_info));
|
||||
}
|
||||
|
||||
static struct platform_device *davinci_evm_devices[] __initdata = {
|
||||
#if defined(CONFIG_MTD_PHYSMAP) || \
|
||||
defined(CONFIG_MTD_PHYSMAP_MODULE)
|
||||
&davinci_evm_norflash_device,
|
||||
#endif
|
||||
#if defined(CONFIG_BLK_DEV_PALMCHIP_BK3710) || \
|
||||
defined(CONFIG_BLK_DEV_PALMCHIP_BK3710_MODULE)
|
||||
&ide_dev,
|
||||
#endif
|
||||
&davinci_fb_device,
|
||||
&rtc_dev,
|
||||
};
|
||||
|
||||
static struct davinci_uart_config uart_config __initdata = {
|
||||
.enabled_uarts = (1 << 0),
|
||||
};
|
||||
|
||||
static void __init
|
||||
davinci_evm_map_io(void)
|
||||
{
|
||||
davinci_map_common_io();
|
||||
dm644x_init();
|
||||
}
|
||||
|
||||
static __init void davinci_evm_init(void)
|
||||
static int davinci_phy_fixup(struct phy_device *phydev)
|
||||
{
|
||||
davinci_psc_init();
|
||||
unsigned int control;
|
||||
/* CRITICAL: Fix for increasing PHY signal drive strength for
|
||||
* TX lockup issue. On DaVinci EVM, the Intel LXT971 PHY
|
||||
* signal strength was low causing TX to fail randomly. The
|
||||
* fix is to Set bit 11 (Increased MII drive strength) of PHY
|
||||
* register 26 (Digital Config register) on this phy. */
|
||||
control = phy_read(phydev, 26);
|
||||
phy_write(phydev, 26, (control | 0x800));
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if defined(CONFIG_BLK_DEV_PALMCHIP_BK3710) || \
|
||||
defined(CONFIG_BLK_DEV_PALMCHIP_BK3710_MODULE)
|
||||
#define HAS_ATA 1
|
||||
#else
|
||||
#define HAS_ATA 0
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_MTD_PHYSMAP) || \
|
||||
defined(CONFIG_MTD_PHYSMAP_MODULE)
|
||||
printk(KERN_WARNING "WARNING: both IDE and NOR flash are enabled, "
|
||||
"but share pins.\n\t Disable IDE for NOR support.\n");
|
||||
#define HAS_NOR 1
|
||||
#else
|
||||
#define HAS_NOR 0
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_MTD_NAND_DAVINCI) || \
|
||||
defined(CONFIG_MTD_NAND_DAVINCI_MODULE)
|
||||
#define HAS_NAND 1
|
||||
#else
|
||||
#define HAS_NAND 0
|
||||
#endif
|
||||
|
||||
static __init void davinci_evm_init(void)
|
||||
{
|
||||
struct clk *aemif_clk;
|
||||
|
||||
aemif_clk = clk_get(NULL, "aemif");
|
||||
clk_enable(aemif_clk);
|
||||
|
||||
if (HAS_ATA) {
|
||||
if (HAS_NAND || HAS_NOR)
|
||||
pr_warning("WARNING: both IDE and Flash are "
|
||||
"enabled, but they share AEMIF pins.\n"
|
||||
"\tDisable IDE for NAND/NOR support.\n");
|
||||
davinci_cfg_reg(DM644X_HPIEN_DISABLE);
|
||||
davinci_cfg_reg(DM644X_ATAEN);
|
||||
davinci_cfg_reg(DM644X_HDIREN);
|
||||
platform_device_register(&ide_dev);
|
||||
} else if (HAS_NAND || HAS_NOR) {
|
||||
davinci_cfg_reg(DM644X_HPIEN_DISABLE);
|
||||
davinci_cfg_reg(DM644X_ATAEN_DISABLE);
|
||||
|
||||
/* only one device will be jumpered and detected */
|
||||
if (HAS_NAND) {
|
||||
platform_device_register(&davinci_evm_nandflash_device);
|
||||
evm_leds[7].default_trigger = "nand-disk";
|
||||
if (HAS_NOR)
|
||||
pr_warning("WARNING: both NAND and NOR flash "
|
||||
"are enabled; disable one of them.\n");
|
||||
} else if (HAS_NOR)
|
||||
platform_device_register(&davinci_evm_norflash_device);
|
||||
}
|
||||
|
||||
platform_add_devices(davinci_evm_devices,
|
||||
ARRAY_SIZE(davinci_evm_devices));
|
||||
evm_init_i2c();
|
||||
|
||||
davinci_serial_init(&uart_config);
|
||||
|
||||
/* Register the fixup for PHY on DaVinci */
|
||||
phy_register_fixup_for_uid(LXT971_PHY_ID, LXT971_PHY_MASK,
|
||||
davinci_phy_fixup);
|
||||
|
||||
}
|
||||
|
||||
static __init void davinci_evm_irq_init(void)
|
||||
{
|
||||
davinci_init_common_hw();
|
||||
davinci_irq_init();
|
||||
}
|
||||
|
||||
MACHINE_START(DAVINCI_EVM, "DaVinci EVM")
|
||||
MACHINE_START(DAVINCI_EVM, "DaVinci DM644x EVM")
|
||||
/* Maintainer: MontaVista Software <source@mvista.com> */
|
||||
.phys_io = IO_PHYS,
|
||||
.io_pg_offst = (__IO_ADDRESS(IO_PHYS) >> 18) & 0xfffc,
|
|
@ -1,7 +1,8 @@
|
|||
/*
|
||||
* TI DaVinci clock config file
|
||||
* Clock and PLL control for DaVinci devices
|
||||
*
|
||||
* Copyright (C) 2006 Texas Instruments.
|
||||
* Copyright (C) 2006-2007 Texas Instruments.
|
||||
* Copyright (C) 2008-2009 Deep Root Systems, LLC
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -13,6 +14,7 @@
|
|||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/platform_device.h>
|
||||
|
@ -21,98 +23,50 @@
|
|||
#include <mach/hardware.h>
|
||||
|
||||
#include <mach/psc.h>
|
||||
#include <mach/cputype.h>
|
||||
#include "clock.h"
|
||||
|
||||
/* PLL/Reset register offsets */
|
||||
#define PLLM 0x110
|
||||
|
||||
static LIST_HEAD(clocks);
|
||||
static DEFINE_MUTEX(clocks_mutex);
|
||||
static DEFINE_SPINLOCK(clockfw_lock);
|
||||
|
||||
static unsigned int commonrate;
|
||||
static unsigned int armrate;
|
||||
static unsigned int fixedrate = 27000000; /* 27 MHZ */
|
||||
|
||||
extern void davinci_psc_config(unsigned int domain, unsigned int id, char enable);
|
||||
|
||||
/*
|
||||
* Returns a clock. Note that we first try to use device id on the bus
|
||||
* and clock name. If this fails, we try to use clock name only.
|
||||
*/
|
||||
struct clk *clk_get(struct device *dev, const char *id)
|
||||
static unsigned psc_domain(struct clk *clk)
|
||||
{
|
||||
struct clk *p, *clk = ERR_PTR(-ENOENT);
|
||||
int idno;
|
||||
|
||||
if (dev == NULL || dev->bus != &platform_bus_type)
|
||||
idno = -1;
|
||||
else
|
||||
idno = to_platform_device(dev)->id;
|
||||
|
||||
mutex_lock(&clocks_mutex);
|
||||
|
||||
list_for_each_entry(p, &clocks, node) {
|
||||
if (p->id == idno &&
|
||||
strcmp(id, p->name) == 0 && try_module_get(p->owner)) {
|
||||
clk = p;
|
||||
goto found;
|
||||
}
|
||||
}
|
||||
|
||||
list_for_each_entry(p, &clocks, node) {
|
||||
if (strcmp(id, p->name) == 0 && try_module_get(p->owner)) {
|
||||
clk = p;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
found:
|
||||
mutex_unlock(&clocks_mutex);
|
||||
|
||||
return clk;
|
||||
return (clk->flags & PSC_DSP)
|
||||
? DAVINCI_GPSC_DSPDOMAIN
|
||||
: DAVINCI_GPSC_ARMDOMAIN;
|
||||
}
|
||||
EXPORT_SYMBOL(clk_get);
|
||||
|
||||
void clk_put(struct clk *clk)
|
||||
static void __clk_enable(struct clk *clk)
|
||||
{
|
||||
if (clk && !IS_ERR(clk))
|
||||
module_put(clk->owner);
|
||||
}
|
||||
EXPORT_SYMBOL(clk_put);
|
||||
|
||||
static int __clk_enable(struct clk *clk)
|
||||
{
|
||||
if (clk->flags & ALWAYS_ENABLED)
|
||||
return 0;
|
||||
|
||||
davinci_psc_config(DAVINCI_GPSC_ARMDOMAIN, clk->lpsc, 1);
|
||||
return 0;
|
||||
if (clk->parent)
|
||||
__clk_enable(clk->parent);
|
||||
if (clk->usecount++ == 0 && (clk->flags & CLK_PSC))
|
||||
davinci_psc_config(psc_domain(clk), clk->lpsc, 1);
|
||||
}
|
||||
|
||||
static void __clk_disable(struct clk *clk)
|
||||
{
|
||||
if (clk->usecount)
|
||||
if (WARN_ON(clk->usecount == 0))
|
||||
return;
|
||||
|
||||
davinci_psc_config(DAVINCI_GPSC_ARMDOMAIN, clk->lpsc, 0);
|
||||
if (--clk->usecount == 0 && !(clk->flags & CLK_PLL))
|
||||
davinci_psc_config(psc_domain(clk), clk->lpsc, 0);
|
||||
if (clk->parent)
|
||||
__clk_disable(clk->parent);
|
||||
}
|
||||
|
||||
int clk_enable(struct clk *clk)
|
||||
{
|
||||
unsigned long flags;
|
||||
int ret = 0;
|
||||
|
||||
if (clk == NULL || IS_ERR(clk))
|
||||
return -EINVAL;
|
||||
|
||||
if (clk->usecount++ == 0) {
|
||||
spin_lock_irqsave(&clockfw_lock, flags);
|
||||
ret = __clk_enable(clk);
|
||||
spin_unlock_irqrestore(&clockfw_lock, flags);
|
||||
}
|
||||
spin_lock_irqsave(&clockfw_lock, flags);
|
||||
__clk_enable(clk);
|
||||
spin_unlock_irqrestore(&clockfw_lock, flags);
|
||||
|
||||
return ret;
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(clk_enable);
|
||||
|
||||
|
@ -123,11 +77,9 @@ void clk_disable(struct clk *clk)
|
|||
if (clk == NULL || IS_ERR(clk))
|
||||
return;
|
||||
|
||||
if (clk->usecount > 0 && !(--clk->usecount)) {
|
||||
spin_lock_irqsave(&clockfw_lock, flags);
|
||||
__clk_disable(clk);
|
||||
spin_unlock_irqrestore(&clockfw_lock, flags);
|
||||
}
|
||||
spin_lock_irqsave(&clockfw_lock, flags);
|
||||
__clk_disable(clk);
|
||||
spin_unlock_irqrestore(&clockfw_lock, flags);
|
||||
}
|
||||
EXPORT_SYMBOL(clk_disable);
|
||||
|
||||
|
@ -136,7 +88,7 @@ unsigned long clk_get_rate(struct clk *clk)
|
|||
if (clk == NULL || IS_ERR(clk))
|
||||
return -EINVAL;
|
||||
|
||||
return *(clk->rate);
|
||||
return clk->rate;
|
||||
}
|
||||
EXPORT_SYMBOL(clk_get_rate);
|
||||
|
||||
|
@ -145,7 +97,7 @@ long clk_round_rate(struct clk *clk, unsigned long rate)
|
|||
if (clk == NULL || IS_ERR(clk))
|
||||
return -EINVAL;
|
||||
|
||||
return *(clk->rate);
|
||||
return clk->rate;
|
||||
}
|
||||
EXPORT_SYMBOL(clk_round_rate);
|
||||
|
||||
|
@ -164,10 +116,23 @@ int clk_register(struct clk *clk)
|
|||
if (clk == NULL || IS_ERR(clk))
|
||||
return -EINVAL;
|
||||
|
||||
if (WARN(clk->parent && !clk->parent->rate,
|
||||
"CLK: %s parent %s has no rate!\n",
|
||||
clk->name, clk->parent->name))
|
||||
return -EINVAL;
|
||||
|
||||
mutex_lock(&clocks_mutex);
|
||||
list_add(&clk->node, &clocks);
|
||||
list_add_tail(&clk->node, &clocks);
|
||||
mutex_unlock(&clocks_mutex);
|
||||
|
||||
/* If rate is already set, use it */
|
||||
if (clk->rate)
|
||||
return 0;
|
||||
|
||||
/* Otherwise, default to parent rate */
|
||||
if (clk->parent)
|
||||
clk->rate = clk->parent->rate;
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(clk_register);
|
||||
|
@ -183,84 +148,150 @@ void clk_unregister(struct clk *clk)
|
|||
}
|
||||
EXPORT_SYMBOL(clk_unregister);
|
||||
|
||||
static struct clk davinci_clks[] = {
|
||||
{
|
||||
.name = "ARMCLK",
|
||||
.rate = &armrate,
|
||||
.lpsc = -1,
|
||||
.flags = ALWAYS_ENABLED,
|
||||
},
|
||||
{
|
||||
.name = "UART",
|
||||
.rate = &fixedrate,
|
||||
.lpsc = DAVINCI_LPSC_UART0,
|
||||
},
|
||||
{
|
||||
.name = "EMACCLK",
|
||||
.rate = &commonrate,
|
||||
.lpsc = DAVINCI_LPSC_EMAC_WRAPPER,
|
||||
},
|
||||
{
|
||||
.name = "I2CCLK",
|
||||
.rate = &fixedrate,
|
||||
.lpsc = DAVINCI_LPSC_I2C,
|
||||
},
|
||||
{
|
||||
.name = "IDECLK",
|
||||
.rate = &commonrate,
|
||||
.lpsc = DAVINCI_LPSC_ATA,
|
||||
},
|
||||
{
|
||||
.name = "McBSPCLK",
|
||||
.rate = &commonrate,
|
||||
.lpsc = DAVINCI_LPSC_McBSP,
|
||||
},
|
||||
{
|
||||
.name = "MMCSDCLK",
|
||||
.rate = &commonrate,
|
||||
.lpsc = DAVINCI_LPSC_MMC_SD,
|
||||
},
|
||||
{
|
||||
.name = "SPICLK",
|
||||
.rate = &commonrate,
|
||||
.lpsc = DAVINCI_LPSC_SPI,
|
||||
},
|
||||
{
|
||||
.name = "gpio",
|
||||
.rate = &commonrate,
|
||||
.lpsc = DAVINCI_LPSC_GPIO,
|
||||
},
|
||||
{
|
||||
.name = "usb",
|
||||
.rate = &commonrate,
|
||||
.lpsc = DAVINCI_LPSC_USB,
|
||||
},
|
||||
{
|
||||
.name = "AEMIFCLK",
|
||||
.rate = &commonrate,
|
||||
.lpsc = DAVINCI_LPSC_AEMIF,
|
||||
.usecount = 1,
|
||||
}
|
||||
};
|
||||
|
||||
int __init davinci_clk_init(void)
|
||||
#ifdef CONFIG_DAVINCI_RESET_CLOCKS
|
||||
/*
|
||||
* Disable any unused clocks left on by the bootloader
|
||||
*/
|
||||
static int __init clk_disable_unused(void)
|
||||
{
|
||||
struct clk *clkp;
|
||||
int count = 0;
|
||||
u32 pll_mult;
|
||||
struct clk *ck;
|
||||
|
||||
pll_mult = davinci_readl(DAVINCI_PLL_CNTRL0_BASE + PLLM);
|
||||
commonrate = ((pll_mult + 1) * 27000000) / 6;
|
||||
armrate = ((pll_mult + 1) * 27000000) / 2;
|
||||
spin_lock_irq(&clockfw_lock);
|
||||
list_for_each_entry(ck, &clocks, node) {
|
||||
if (ck->usecount > 0)
|
||||
continue;
|
||||
if (!(ck->flags & CLK_PSC))
|
||||
continue;
|
||||
|
||||
for (clkp = davinci_clks; count < ARRAY_SIZE(davinci_clks);
|
||||
count++, clkp++) {
|
||||
clk_register(clkp);
|
||||
/* ignore if in Disabled or SwRstDisable states */
|
||||
if (!davinci_psc_is_clk_active(ck->lpsc))
|
||||
continue;
|
||||
|
||||
/* Turn on clocks that have been enabled in the
|
||||
* table above */
|
||||
if (clkp->usecount)
|
||||
clk_enable(clkp);
|
||||
pr_info("Clocks: disable unused %s\n", ck->name);
|
||||
davinci_psc_config(psc_domain(ck), ck->lpsc, 0);
|
||||
}
|
||||
spin_unlock_irq(&clockfw_lock);
|
||||
|
||||
return 0;
|
||||
}
|
||||
late_initcall(clk_disable_unused);
|
||||
#endif
|
||||
|
||||
static void clk_sysclk_recalc(struct clk *clk)
|
||||
{
|
||||
u32 v, plldiv;
|
||||
struct pll_data *pll;
|
||||
|
||||
/* If this is the PLL base clock, no more calculations needed */
|
||||
if (clk->pll_data)
|
||||
return;
|
||||
|
||||
if (WARN_ON(!clk->parent))
|
||||
return;
|
||||
|
||||
clk->rate = clk->parent->rate;
|
||||
|
||||
/* Otherwise, the parent must be a PLL */
|
||||
if (WARN_ON(!clk->parent->pll_data))
|
||||
return;
|
||||
|
||||
pll = clk->parent->pll_data;
|
||||
|
||||
/* If pre-PLL, source clock is before the multiplier and divider(s) */
|
||||
if (clk->flags & PRE_PLL)
|
||||
clk->rate = pll->input_rate;
|
||||
|
||||
if (!clk->div_reg)
|
||||
return;
|
||||
|
||||
v = __raw_readl(pll->base + clk->div_reg);
|
||||
if (v & PLLDIV_EN) {
|
||||
plldiv = (v & PLLDIV_RATIO_MASK) + 1;
|
||||
if (plldiv)
|
||||
clk->rate /= plldiv;
|
||||
}
|
||||
}
|
||||
|
||||
static void __init clk_pll_init(struct clk *clk)
|
||||
{
|
||||
u32 ctrl, mult = 1, prediv = 1, postdiv = 1;
|
||||
u8 bypass;
|
||||
struct pll_data *pll = clk->pll_data;
|
||||
|
||||
pll->base = IO_ADDRESS(pll->phys_base);
|
||||
ctrl = __raw_readl(pll->base + PLLCTL);
|
||||
clk->rate = pll->input_rate = clk->parent->rate;
|
||||
|
||||
if (ctrl & PLLCTL_PLLEN) {
|
||||
bypass = 0;
|
||||
mult = __raw_readl(pll->base + PLLM);
|
||||
mult = (mult & PLLM_PLLM_MASK) + 1;
|
||||
} else
|
||||
bypass = 1;
|
||||
|
||||
if (pll->flags & PLL_HAS_PREDIV) {
|
||||
prediv = __raw_readl(pll->base + PREDIV);
|
||||
if (prediv & PLLDIV_EN)
|
||||
prediv = (prediv & PLLDIV_RATIO_MASK) + 1;
|
||||
else
|
||||
prediv = 1;
|
||||
}
|
||||
|
||||
/* pre-divider is fixed, but (some?) chips won't report that */
|
||||
if (cpu_is_davinci_dm355() && pll->num == 1)
|
||||
prediv = 8;
|
||||
|
||||
if (pll->flags & PLL_HAS_POSTDIV) {
|
||||
postdiv = __raw_readl(pll->base + POSTDIV);
|
||||
if (postdiv & PLLDIV_EN)
|
||||
postdiv = (postdiv & PLLDIV_RATIO_MASK) + 1;
|
||||
else
|
||||
postdiv = 1;
|
||||
}
|
||||
|
||||
if (!bypass) {
|
||||
clk->rate /= prediv;
|
||||
clk->rate *= mult;
|
||||
clk->rate /= postdiv;
|
||||
}
|
||||
|
||||
pr_debug("PLL%d: input = %lu MHz [ ",
|
||||
pll->num, clk->parent->rate / 1000000);
|
||||
if (bypass)
|
||||
pr_debug("bypass ");
|
||||
if (prediv > 1)
|
||||
pr_debug("/ %d ", prediv);
|
||||
if (mult > 1)
|
||||
pr_debug("* %d ", mult);
|
||||
if (postdiv > 1)
|
||||
pr_debug("/ %d ", postdiv);
|
||||
pr_debug("] --> %lu MHz output.\n", clk->rate / 1000000);
|
||||
}
|
||||
|
||||
int __init davinci_clk_init(struct davinci_clk *clocks)
|
||||
{
|
||||
struct davinci_clk *c;
|
||||
struct clk *clk;
|
||||
|
||||
for (c = clocks; c->lk.clk; c++) {
|
||||
clk = c->lk.clk;
|
||||
|
||||
if (clk->pll_data)
|
||||
clk_pll_init(clk);
|
||||
|
||||
/* Calculate rates for PLL-derived clocks */
|
||||
else if (clk->flags & CLK_PLL)
|
||||
clk_sysclk_recalc(clk);
|
||||
|
||||
if (clk->lpsc)
|
||||
clk->flags |= CLK_PSC;
|
||||
|
||||
clkdev_add(&c->lk);
|
||||
clk_register(clk);
|
||||
|
||||
/* Turn on clocks that Linux doesn't otherwise manage */
|
||||
if (clk->flags & ALWAYS_ENABLED)
|
||||
clk_enable(clk);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -285,12 +316,52 @@ static void davinci_ck_stop(struct seq_file *m, void *v)
|
|||
{
|
||||
}
|
||||
|
||||
#define CLKNAME_MAX 10 /* longest clock name */
|
||||
#define NEST_DELTA 2
|
||||
#define NEST_MAX 4
|
||||
|
||||
static void
|
||||
dump_clock(struct seq_file *s, unsigned nest, struct clk *parent)
|
||||
{
|
||||
char *state;
|
||||
char buf[CLKNAME_MAX + NEST_DELTA * NEST_MAX];
|
||||
struct clk *clk;
|
||||
unsigned i;
|
||||
|
||||
if (parent->flags & CLK_PLL)
|
||||
state = "pll";
|
||||
else if (parent->flags & CLK_PSC)
|
||||
state = "psc";
|
||||
else
|
||||
state = "";
|
||||
|
||||
/* <nest spaces> name <pad to end> */
|
||||
memset(buf, ' ', sizeof(buf) - 1);
|
||||
buf[sizeof(buf) - 1] = 0;
|
||||
i = strlen(parent->name);
|
||||
memcpy(buf + nest, parent->name,
|
||||
min(i, (unsigned)(sizeof(buf) - 1 - nest)));
|
||||
|
||||
seq_printf(s, "%s users=%2d %-3s %9ld Hz\n",
|
||||
buf, parent->usecount, state, clk_get_rate(parent));
|
||||
/* REVISIT show device associations too */
|
||||
|
||||
/* cost is now small, but not linear... */
|
||||
list_for_each_entry(clk, &clocks, node) {
|
||||
if (clk->parent == parent)
|
||||
dump_clock(s, nest + NEST_DELTA, clk);
|
||||
}
|
||||
}
|
||||
|
||||
static int davinci_ck_show(struct seq_file *m, void *v)
|
||||
{
|
||||
struct clk *cp;
|
||||
|
||||
list_for_each_entry(cp, &clocks, node)
|
||||
seq_printf(m,"%s %d %d\n", cp->name, *(cp->rate), cp->usecount);
|
||||
/* Show clock tree; we know the main oscillator is first.
|
||||
* We trust nonzero usecounts equate to PSC enables...
|
||||
*/
|
||||
mutex_lock(&clocks_mutex);
|
||||
if (!list_empty(&clocks))
|
||||
dump_clock(m, 0, list_first_entry(&clocks, struct clk, node));
|
||||
mutex_unlock(&clocks_mutex);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -321,4 +392,4 @@ static int __init davinci_ck_proc_init(void)
|
|||
|
||||
}
|
||||
__initcall(davinci_ck_proc_init);
|
||||
#endif /* CONFIG_DEBUG_PROC_FS */
|
||||
#endif /* CONFIG_DEBUG_PROC_FS */
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
/*
|
||||
* TI DaVinci clock definitions
|
||||
*
|
||||
* Copyright (C) 2006 Texas Instruments.
|
||||
* Copyright (C) 2006-2007 Texas Instruments.
|
||||
* Copyright (C) 2008-2009 Deep Root Systems, LLC
|
||||
*
|
||||
* 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
|
||||
|
@ -11,23 +12,85 @@
|
|||
#ifndef __ARCH_ARM_DAVINCI_CLOCK_H
|
||||
#define __ARCH_ARM_DAVINCI_CLOCK_H
|
||||
|
||||
#include <linux/list.h>
|
||||
#include <asm/clkdev.h>
|
||||
|
||||
#define DAVINCI_PLL1_BASE 0x01c40800
|
||||
#define DAVINCI_PLL2_BASE 0x01c40c00
|
||||
#define MAX_PLL 2
|
||||
|
||||
/* PLL/Reset register offsets */
|
||||
#define PLLCTL 0x100
|
||||
#define PLLCTL_PLLEN BIT(0)
|
||||
#define PLLCTL_CLKMODE BIT(8)
|
||||
|
||||
#define PLLM 0x110
|
||||
#define PLLM_PLLM_MASK 0xff
|
||||
|
||||
#define PREDIV 0x114
|
||||
#define PLLDIV1 0x118
|
||||
#define PLLDIV2 0x11c
|
||||
#define PLLDIV3 0x120
|
||||
#define POSTDIV 0x128
|
||||
#define BPDIV 0x12c
|
||||
#define PLLCMD 0x138
|
||||
#define PLLSTAT 0x13c
|
||||
#define PLLALNCTL 0x140
|
||||
#define PLLDCHANGE 0x144
|
||||
#define PLLCKEN 0x148
|
||||
#define PLLCKSTAT 0x14c
|
||||
#define PLLSYSTAT 0x150
|
||||
#define PLLDIV4 0x160
|
||||
#define PLLDIV5 0x164
|
||||
#define PLLDIV6 0x168
|
||||
#define PLLDIV7 0x16c
|
||||
#define PLLDIV8 0x170
|
||||
#define PLLDIV9 0x174
|
||||
#define PLLDIV_EN BIT(15)
|
||||
#define PLLDIV_RATIO_MASK 0x1f
|
||||
|
||||
struct pll_data {
|
||||
u32 phys_base;
|
||||
void __iomem *base;
|
||||
u32 num;
|
||||
u32 flags;
|
||||
u32 input_rate;
|
||||
};
|
||||
#define PLL_HAS_PREDIV 0x01
|
||||
#define PLL_HAS_POSTDIV 0x02
|
||||
|
||||
struct clk {
|
||||
struct list_head node;
|
||||
struct module *owner;
|
||||
const char *name;
|
||||
unsigned int *rate;
|
||||
int id;
|
||||
__s8 usecount;
|
||||
__u8 flags;
|
||||
__u8 lpsc;
|
||||
unsigned long rate;
|
||||
u8 usecount;
|
||||
u8 flags;
|
||||
u8 lpsc;
|
||||
struct clk *parent;
|
||||
struct pll_data *pll_data;
|
||||
u32 div_reg;
|
||||
};
|
||||
|
||||
/* Clock flags */
|
||||
#define RATE_CKCTL 1
|
||||
#define RATE_FIXED 2
|
||||
#define RATE_PROPAGATES 4
|
||||
#define VIRTUAL_CLOCK 8
|
||||
#define ALWAYS_ENABLED 16
|
||||
#define ENABLE_REG_32BIT 32
|
||||
#define ALWAYS_ENABLED BIT(1)
|
||||
#define CLK_PSC BIT(2)
|
||||
#define PSC_DSP BIT(3) /* PSC uses DSP domain, not ARM */
|
||||
#define CLK_PLL BIT(4) /* PLL-derived clock */
|
||||
#define PRE_PLL BIT(5) /* source is before PLL mult/div */
|
||||
|
||||
struct davinci_clk {
|
||||
struct clk_lookup lk;
|
||||
};
|
||||
|
||||
#define CLK(dev, con, ck) \
|
||||
{ \
|
||||
.lk = { \
|
||||
.dev_id = dev, \
|
||||
.con_id = con, \
|
||||
.clk = ck, \
|
||||
}, \
|
||||
}
|
||||
|
||||
int davinci_clk_init(struct davinci_clk *clocks);
|
||||
#endif
|
||||
|
|
|
@ -21,6 +21,10 @@
|
|||
#include <mach/hardware.h>
|
||||
#include <mach/i2c.h>
|
||||
#include <mach/irqs.h>
|
||||
#include <mach/cputype.h>
|
||||
#include <mach/mux.h>
|
||||
|
||||
#define DAVINCI_I2C_BASE 0x01C21000
|
||||
|
||||
static struct resource i2c_resources[] = {
|
||||
{
|
||||
|
@ -43,6 +47,9 @@ static struct platform_device davinci_i2c_device = {
|
|||
|
||||
void __init davinci_init_i2c(struct davinci_i2c_platform_data *pdata)
|
||||
{
|
||||
if (cpu_is_davinci_dm644x())
|
||||
davinci_cfg_reg(DM644X_I2C);
|
||||
|
||||
davinci_i2c_device.dev.platform_data = pdata;
|
||||
(void) platform_device_register(&davinci_i2c_device);
|
||||
}
|
||||
|
|
461
arch/arm/mach-davinci/dm644x.c
Normal file
461
arch/arm/mach-davinci/dm644x.c
Normal file
|
@ -0,0 +1,461 @@
|
|||
/*
|
||||
* TI DaVinci DM644x chip specific setup
|
||||
*
|
||||
* Author: Kevin Hilman, Deep Root Systems, LLC
|
||||
*
|
||||
* 2007 (c) Deep Root Systems, LLC. This file is licensed under
|
||||
* the terms of the GNU General Public License version 2. This program
|
||||
* is licensed "as is" without any warranty of any kind, whether express
|
||||
* or implied.
|
||||
*/
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/platform_device.h>
|
||||
|
||||
#include <mach/dm644x.h>
|
||||
#include <mach/clock.h>
|
||||
#include <mach/cputype.h>
|
||||
#include <mach/edma.h>
|
||||
#include <mach/irqs.h>
|
||||
#include <mach/psc.h>
|
||||
#include <mach/mux.h>
|
||||
|
||||
#include "clock.h"
|
||||
#include "mux.h"
|
||||
|
||||
/*
|
||||
* Device specific clocks
|
||||
*/
|
||||
#define DM644X_REF_FREQ 27000000
|
||||
|
||||
static struct pll_data pll1_data = {
|
||||
.num = 1,
|
||||
.phys_base = DAVINCI_PLL1_BASE,
|
||||
};
|
||||
|
||||
static struct pll_data pll2_data = {
|
||||
.num = 2,
|
||||
.phys_base = DAVINCI_PLL2_BASE,
|
||||
};
|
||||
|
||||
static struct clk ref_clk = {
|
||||
.name = "ref_clk",
|
||||
.rate = DM644X_REF_FREQ,
|
||||
};
|
||||
|
||||
static struct clk pll1_clk = {
|
||||
.name = "pll1",
|
||||
.parent = &ref_clk,
|
||||
.pll_data = &pll1_data,
|
||||
.flags = CLK_PLL,
|
||||
};
|
||||
|
||||
static struct clk pll1_sysclk1 = {
|
||||
.name = "pll1_sysclk1",
|
||||
.parent = &pll1_clk,
|
||||
.flags = CLK_PLL,
|
||||
.div_reg = PLLDIV1,
|
||||
};
|
||||
|
||||
static struct clk pll1_sysclk2 = {
|
||||
.name = "pll1_sysclk2",
|
||||
.parent = &pll1_clk,
|
||||
.flags = CLK_PLL,
|
||||
.div_reg = PLLDIV2,
|
||||
};
|
||||
|
||||
static struct clk pll1_sysclk3 = {
|
||||
.name = "pll1_sysclk3",
|
||||
.parent = &pll1_clk,
|
||||
.flags = CLK_PLL,
|
||||
.div_reg = PLLDIV3,
|
||||
};
|
||||
|
||||
static struct clk pll1_sysclk5 = {
|
||||
.name = "pll1_sysclk5",
|
||||
.parent = &pll1_clk,
|
||||
.flags = CLK_PLL,
|
||||
.div_reg = PLLDIV5,
|
||||
};
|
||||
|
||||
static struct clk pll1_aux_clk = {
|
||||
.name = "pll1_aux_clk",
|
||||
.parent = &pll1_clk,
|
||||
.flags = CLK_PLL | PRE_PLL,
|
||||
};
|
||||
|
||||
static struct clk pll1_sysclkbp = {
|
||||
.name = "pll1_sysclkbp",
|
||||
.parent = &pll1_clk,
|
||||
.flags = CLK_PLL | PRE_PLL,
|
||||
.div_reg = BPDIV
|
||||
};
|
||||
|
||||
static struct clk pll2_clk = {
|
||||
.name = "pll2",
|
||||
.parent = &ref_clk,
|
||||
.pll_data = &pll2_data,
|
||||
.flags = CLK_PLL,
|
||||
};
|
||||
|
||||
static struct clk pll2_sysclk1 = {
|
||||
.name = "pll2_sysclk1",
|
||||
.parent = &pll2_clk,
|
||||
.flags = CLK_PLL,
|
||||
.div_reg = PLLDIV1,
|
||||
};
|
||||
|
||||
static struct clk pll2_sysclk2 = {
|
||||
.name = "pll2_sysclk2",
|
||||
.parent = &pll2_clk,
|
||||
.flags = CLK_PLL,
|
||||
.div_reg = PLLDIV2,
|
||||
};
|
||||
|
||||
static struct clk pll2_sysclkbp = {
|
||||
.name = "pll2_sysclkbp",
|
||||
.parent = &pll2_clk,
|
||||
.flags = CLK_PLL | PRE_PLL,
|
||||
.div_reg = BPDIV
|
||||
};
|
||||
|
||||
static struct clk dsp_clk = {
|
||||
.name = "dsp",
|
||||
.parent = &pll1_sysclk1,
|
||||
.lpsc = DAVINCI_LPSC_GEM,
|
||||
.flags = PSC_DSP,
|
||||
.usecount = 1, /* REVISIT how to disable? */
|
||||
};
|
||||
|
||||
static struct clk arm_clk = {
|
||||
.name = "arm",
|
||||
.parent = &pll1_sysclk2,
|
||||
.lpsc = DAVINCI_LPSC_ARM,
|
||||
.flags = ALWAYS_ENABLED,
|
||||
};
|
||||
|
||||
static struct clk vicp_clk = {
|
||||
.name = "vicp",
|
||||
.parent = &pll1_sysclk2,
|
||||
.lpsc = DAVINCI_LPSC_IMCOP,
|
||||
.flags = PSC_DSP,
|
||||
.usecount = 1, /* REVISIT how to disable? */
|
||||
};
|
||||
|
||||
static struct clk vpss_master_clk = {
|
||||
.name = "vpss_master",
|
||||
.parent = &pll1_sysclk3,
|
||||
.lpsc = DAVINCI_LPSC_VPSSMSTR,
|
||||
.flags = CLK_PSC,
|
||||
};
|
||||
|
||||
static struct clk vpss_slave_clk = {
|
||||
.name = "vpss_slave",
|
||||
.parent = &pll1_sysclk3,
|
||||
.lpsc = DAVINCI_LPSC_VPSSSLV,
|
||||
};
|
||||
|
||||
static struct clk uart0_clk = {
|
||||
.name = "uart0",
|
||||
.parent = &pll1_aux_clk,
|
||||
.lpsc = DAVINCI_LPSC_UART0,
|
||||
};
|
||||
|
||||
static struct clk uart1_clk = {
|
||||
.name = "uart1",
|
||||
.parent = &pll1_aux_clk,
|
||||
.lpsc = DAVINCI_LPSC_UART1,
|
||||
};
|
||||
|
||||
static struct clk uart2_clk = {
|
||||
.name = "uart2",
|
||||
.parent = &pll1_aux_clk,
|
||||
.lpsc = DAVINCI_LPSC_UART2,
|
||||
};
|
||||
|
||||
static struct clk emac_clk = {
|
||||
.name = "emac",
|
||||
.parent = &pll1_sysclk5,
|
||||
.lpsc = DAVINCI_LPSC_EMAC_WRAPPER,
|
||||
};
|
||||
|
||||
static struct clk i2c_clk = {
|
||||
.name = "i2c",
|
||||
.parent = &pll1_aux_clk,
|
||||
.lpsc = DAVINCI_LPSC_I2C,
|
||||
};
|
||||
|
||||
static struct clk ide_clk = {
|
||||
.name = "ide",
|
||||
.parent = &pll1_sysclk5,
|
||||
.lpsc = DAVINCI_LPSC_ATA,
|
||||
};
|
||||
|
||||
static struct clk asp_clk = {
|
||||
.name = "asp0",
|
||||
.parent = &pll1_sysclk5,
|
||||
.lpsc = DAVINCI_LPSC_McBSP,
|
||||
};
|
||||
|
||||
static struct clk mmcsd_clk = {
|
||||
.name = "mmcsd",
|
||||
.parent = &pll1_sysclk5,
|
||||
.lpsc = DAVINCI_LPSC_MMC_SD,
|
||||
};
|
||||
|
||||
static struct clk spi_clk = {
|
||||
.name = "spi",
|
||||
.parent = &pll1_sysclk5,
|
||||
.lpsc = DAVINCI_LPSC_SPI,
|
||||
};
|
||||
|
||||
static struct clk gpio_clk = {
|
||||
.name = "gpio",
|
||||
.parent = &pll1_sysclk5,
|
||||
.lpsc = DAVINCI_LPSC_GPIO,
|
||||
};
|
||||
|
||||
static struct clk usb_clk = {
|
||||
.name = "usb",
|
||||
.parent = &pll1_sysclk5,
|
||||
.lpsc = DAVINCI_LPSC_USB,
|
||||
};
|
||||
|
||||
static struct clk vlynq_clk = {
|
||||
.name = "vlynq",
|
||||
.parent = &pll1_sysclk5,
|
||||
.lpsc = DAVINCI_LPSC_VLYNQ,
|
||||
};
|
||||
|
||||
static struct clk aemif_clk = {
|
||||
.name = "aemif",
|
||||
.parent = &pll1_sysclk5,
|
||||
.lpsc = DAVINCI_LPSC_AEMIF,
|
||||
};
|
||||
|
||||
static struct clk pwm0_clk = {
|
||||
.name = "pwm0",
|
||||
.parent = &pll1_aux_clk,
|
||||
.lpsc = DAVINCI_LPSC_PWM0,
|
||||
};
|
||||
|
||||
static struct clk pwm1_clk = {
|
||||
.name = "pwm1",
|
||||
.parent = &pll1_aux_clk,
|
||||
.lpsc = DAVINCI_LPSC_PWM1,
|
||||
};
|
||||
|
||||
static struct clk pwm2_clk = {
|
||||
.name = "pwm2",
|
||||
.parent = &pll1_aux_clk,
|
||||
.lpsc = DAVINCI_LPSC_PWM2,
|
||||
};
|
||||
|
||||
static struct clk timer0_clk = {
|
||||
.name = "timer0",
|
||||
.parent = &pll1_aux_clk,
|
||||
.lpsc = DAVINCI_LPSC_TIMER0,
|
||||
};
|
||||
|
||||
static struct clk timer1_clk = {
|
||||
.name = "timer1",
|
||||
.parent = &pll1_aux_clk,
|
||||
.lpsc = DAVINCI_LPSC_TIMER1,
|
||||
};
|
||||
|
||||
static struct clk timer2_clk = {
|
||||
.name = "timer2",
|
||||
.parent = &pll1_aux_clk,
|
||||
.lpsc = DAVINCI_LPSC_TIMER2,
|
||||
.usecount = 1, /* REVISIT: why cant' this be disabled? */
|
||||
};
|
||||
|
||||
struct davinci_clk dm644x_clks[] = {
|
||||
CLK(NULL, "ref", &ref_clk),
|
||||
CLK(NULL, "pll1", &pll1_clk),
|
||||
CLK(NULL, "pll1_sysclk1", &pll1_sysclk1),
|
||||
CLK(NULL, "pll1_sysclk2", &pll1_sysclk2),
|
||||
CLK(NULL, "pll1_sysclk3", &pll1_sysclk3),
|
||||
CLK(NULL, "pll1_sysclk5", &pll1_sysclk5),
|
||||
CLK(NULL, "pll1_aux", &pll1_aux_clk),
|
||||
CLK(NULL, "pll1_sysclkbp", &pll1_sysclkbp),
|
||||
CLK(NULL, "pll2", &pll2_clk),
|
||||
CLK(NULL, "pll2_sysclk1", &pll2_sysclk1),
|
||||
CLK(NULL, "pll2_sysclk2", &pll2_sysclk2),
|
||||
CLK(NULL, "pll2_sysclkbp", &pll2_sysclkbp),
|
||||
CLK(NULL, "dsp", &dsp_clk),
|
||||
CLK(NULL, "arm", &arm_clk),
|
||||
CLK(NULL, "vicp", &vicp_clk),
|
||||
CLK(NULL, "vpss_master", &vpss_master_clk),
|
||||
CLK(NULL, "vpss_slave", &vpss_slave_clk),
|
||||
CLK(NULL, "arm", &arm_clk),
|
||||
CLK(NULL, "uart0", &uart0_clk),
|
||||
CLK(NULL, "uart1", &uart1_clk),
|
||||
CLK(NULL, "uart2", &uart2_clk),
|
||||
CLK("davinci_emac.1", NULL, &emac_clk),
|
||||
CLK("i2c_davinci.1", NULL, &i2c_clk),
|
||||
CLK("palm_bk3710", NULL, &ide_clk),
|
||||
CLK("soc-audio.0", NULL, &asp_clk),
|
||||
CLK("davinci_mmc.0", NULL, &mmcsd_clk),
|
||||
CLK(NULL, "spi", &spi_clk),
|
||||
CLK(NULL, "gpio", &gpio_clk),
|
||||
CLK(NULL, "usb", &usb_clk),
|
||||
CLK(NULL, "vlynq", &vlynq_clk),
|
||||
CLK(NULL, "aemif", &aemif_clk),
|
||||
CLK(NULL, "pwm0", &pwm0_clk),
|
||||
CLK(NULL, "pwm1", &pwm1_clk),
|
||||
CLK(NULL, "pwm2", &pwm2_clk),
|
||||
CLK(NULL, "timer0", &timer0_clk),
|
||||
CLK(NULL, "timer1", &timer1_clk),
|
||||
CLK("watchdog", NULL, &timer2_clk),
|
||||
CLK(NULL, NULL, NULL),
|
||||
};
|
||||
|
||||
#if defined(CONFIG_TI_DAVINCI_EMAC) || defined(CONFIG_TI_DAVINCI_EMAC_MODULE)
|
||||
|
||||
static struct resource dm644x_emac_resources[] = {
|
||||
{
|
||||
.start = DM644X_EMAC_BASE,
|
||||
.end = DM644X_EMAC_BASE + 0x47ff,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
{
|
||||
.start = IRQ_EMACINT,
|
||||
.end = IRQ_EMACINT,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device dm644x_emac_device = {
|
||||
.name = "davinci_emac",
|
||||
.id = 1,
|
||||
.num_resources = ARRAY_SIZE(dm644x_emac_resources),
|
||||
.resource = dm644x_emac_resources,
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Device specific mux setup
|
||||
*
|
||||
* soc description mux mode mode mux dbg
|
||||
* reg offset mask mode
|
||||
*/
|
||||
static const struct mux_config dm644x_pins[] = {
|
||||
MUX_CFG(DM644X, HDIREN, 0, 16, 1, 1, true)
|
||||
MUX_CFG(DM644X, ATAEN, 0, 17, 1, 1, true)
|
||||
MUX_CFG(DM644X, ATAEN_DISABLE, 0, 17, 1, 0, true)
|
||||
|
||||
MUX_CFG(DM644X, HPIEN_DISABLE, 0, 29, 1, 0, true)
|
||||
|
||||
MUX_CFG(DM644X, AEAW, 0, 0, 31, 31, true)
|
||||
|
||||
MUX_CFG(DM644X, MSTK, 1, 9, 1, 0, false)
|
||||
|
||||
MUX_CFG(DM644X, I2C, 1, 7, 1, 1, false)
|
||||
|
||||
MUX_CFG(DM644X, MCBSP, 1, 10, 1, 1, false)
|
||||
|
||||
MUX_CFG(DM644X, UART1, 1, 1, 1, 1, true)
|
||||
MUX_CFG(DM644X, UART2, 1, 2, 1, 1, true)
|
||||
|
||||
MUX_CFG(DM644X, PWM0, 1, 4, 1, 1, false)
|
||||
|
||||
MUX_CFG(DM644X, PWM1, 1, 5, 1, 1, false)
|
||||
|
||||
MUX_CFG(DM644X, PWM2, 1, 6, 1, 1, false)
|
||||
|
||||
MUX_CFG(DM644X, VLYNQEN, 0, 15, 1, 1, false)
|
||||
MUX_CFG(DM644X, VLSCREN, 0, 14, 1, 1, false)
|
||||
MUX_CFG(DM644X, VLYNQWD, 0, 12, 3, 3, false)
|
||||
|
||||
MUX_CFG(DM644X, EMACEN, 0, 31, 1, 1, true)
|
||||
|
||||
MUX_CFG(DM644X, GPIO3V, 0, 31, 1, 0, true)
|
||||
|
||||
MUX_CFG(DM644X, GPIO0, 0, 24, 1, 0, true)
|
||||
MUX_CFG(DM644X, GPIO3, 0, 25, 1, 0, false)
|
||||
MUX_CFG(DM644X, GPIO43_44, 1, 7, 1, 0, false)
|
||||
MUX_CFG(DM644X, GPIO46_47, 0, 22, 1, 0, true)
|
||||
|
||||
MUX_CFG(DM644X, RGB666, 0, 22, 1, 1, true)
|
||||
|
||||
MUX_CFG(DM644X, LOEEN, 0, 24, 1, 1, true)
|
||||
MUX_CFG(DM644X, LFLDEN, 0, 25, 1, 1, false)
|
||||
};
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
|
||||
static const s8 dma_chan_dm644x_no_event[] = {
|
||||
0, 1, 12, 13, 14,
|
||||
15, 25, 30, 31, 45,
|
||||
46, 47, 55, 56, 57,
|
||||
58, 59, 60, 61, 62,
|
||||
63,
|
||||
-1
|
||||
};
|
||||
|
||||
static struct edma_soc_info dm644x_edma_info = {
|
||||
.n_channel = 64,
|
||||
.n_region = 4,
|
||||
.n_slot = 128,
|
||||
.n_tc = 2,
|
||||
.noevent = dma_chan_dm644x_no_event,
|
||||
};
|
||||
|
||||
static struct resource edma_resources[] = {
|
||||
{
|
||||
.name = "edma_cc",
|
||||
.start = 0x01c00000,
|
||||
.end = 0x01c00000 + SZ_64K - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
{
|
||||
.name = "edma_tc0",
|
||||
.start = 0x01c10000,
|
||||
.end = 0x01c10000 + SZ_1K - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
{
|
||||
.name = "edma_tc1",
|
||||
.start = 0x01c10400,
|
||||
.end = 0x01c10400 + SZ_1K - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
{
|
||||
.start = IRQ_CCINT0,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
{
|
||||
.start = IRQ_CCERRINT,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
/* not using TC*_ERR */
|
||||
};
|
||||
|
||||
static struct platform_device dm644x_edma_device = {
|
||||
.name = "edma",
|
||||
.id = -1,
|
||||
.dev.platform_data = &dm644x_edma_info,
|
||||
.num_resources = ARRAY_SIZE(edma_resources),
|
||||
.resource = edma_resources,
|
||||
};
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
void __init dm644x_init(void)
|
||||
{
|
||||
davinci_clk_init(dm644x_clks);
|
||||
davinci_mux_register(dm644x_pins, ARRAY_SIZE(dm644x_pins));
|
||||
}
|
||||
|
||||
static int __init dm644x_init_devices(void)
|
||||
{
|
||||
if (!cpu_is_davinci_dm644x())
|
||||
return 0;
|
||||
|
||||
platform_device_register(&dm644x_edma_device);
|
||||
return 0;
|
||||
}
|
||||
postcore_initcall(dm644x_init_devices);
|
1135
arch/arm/mach-davinci/dma.c
Normal file
1135
arch/arm/mach-davinci/dma.c
Normal file
File diff suppressed because it is too large
Load diff
|
@ -20,6 +20,7 @@
|
|||
#include <linux/irq.h>
|
||||
#include <linux/bitops.h>
|
||||
|
||||
#include <mach/cputype.h>
|
||||
#include <mach/irqs.h>
|
||||
#include <mach/hardware.h>
|
||||
#include <mach/gpio.h>
|
||||
|
@ -36,9 +37,10 @@ struct davinci_gpio {
|
|||
|
||||
static struct davinci_gpio chips[DIV_ROUND_UP(DAVINCI_N_GPIO, 32)];
|
||||
|
||||
static unsigned __initdata ngpio;
|
||||
|
||||
/* create a non-inlined version */
|
||||
static struct gpio_controller *__iomem __init gpio2controller(unsigned gpio)
|
||||
static struct gpio_controller __iomem * __init gpio2controller(unsigned gpio)
|
||||
{
|
||||
return __gpio_to_controller(gpio);
|
||||
}
|
||||
|
@ -114,9 +116,30 @@ static int __init davinci_gpio_setup(void)
|
|||
{
|
||||
int i, base;
|
||||
|
||||
for (i = 0, base = 0;
|
||||
i < ARRAY_SIZE(chips);
|
||||
i++, base += 32) {
|
||||
/* The gpio banks conceptually expose a segmented bitmap,
|
||||
* and "ngpio" is one more than the largest zero-based
|
||||
* bit index that's valid.
|
||||
*/
|
||||
if (cpu_is_davinci_dm355()) { /* or dm335() */
|
||||
ngpio = 104;
|
||||
} else if (cpu_is_davinci_dm644x()) { /* or dm337() */
|
||||
ngpio = 71;
|
||||
} else if (cpu_is_davinci_dm646x()) {
|
||||
/* NOTE: each bank has several "reserved" bits,
|
||||
* unusable as GPIOs. Only 33 of the GPIO numbers
|
||||
* are usable, and we're not rejecting the others.
|
||||
*/
|
||||
ngpio = 43;
|
||||
} else {
|
||||
/* if cpu_is_davinci_dm643x() ngpio = 111 */
|
||||
pr_err("GPIO setup: how many GPIOs?\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (WARN_ON(DAVINCI_N_GPIO < ngpio))
|
||||
ngpio = DAVINCI_N_GPIO;
|
||||
|
||||
for (i = 0, base = 0; base < ngpio; i++, base += 32) {
|
||||
chips[i].chip.label = "DaVinci";
|
||||
|
||||
chips[i].chip.direction_input = davinci_direction_in;
|
||||
|
@ -125,7 +148,7 @@ static int __init davinci_gpio_setup(void)
|
|||
chips[i].chip.set = davinci_gpio_set;
|
||||
|
||||
chips[i].chip.base = base;
|
||||
chips[i].chip.ngpio = DAVINCI_N_GPIO - base;
|
||||
chips[i].chip.ngpio = ngpio - base;
|
||||
if (chips[i].chip.ngpio > 32)
|
||||
chips[i].chip.ngpio = 32;
|
||||
|
||||
|
@ -143,11 +166,11 @@ pure_initcall(davinci_gpio_setup);
|
|||
* We expect irqs will normally be set up as input pins, but they can also be
|
||||
* used as output pins ... which is convenient for testing.
|
||||
*
|
||||
* NOTE: GPIO0..GPIO7 also have direct INTC hookups, which work in addition
|
||||
* to their GPIOBNK0 irq (but with a bit less overhead). But we don't have
|
||||
* a good way to hook those up ...
|
||||
* NOTE: The first few GPIOs also have direct INTC hookups in addition
|
||||
* to their GPIOBNK0 irq, with a bit less overhead but less flexibility
|
||||
* on triggering (e.g. no edge options). We don't try to use those.
|
||||
*
|
||||
* All those INTC hookups (GPIO0..GPIO7 plus five IRQ banks) can also
|
||||
* All those INTC hookups (direct, plus several IRQ banks) can also
|
||||
* serve as EDMA event triggers.
|
||||
*/
|
||||
|
||||
|
@ -235,29 +258,42 @@ gpio_irq_handler(unsigned irq, struct irq_desc *desc)
|
|||
}
|
||||
|
||||
/*
|
||||
* NOTE: for suspend/resume, probably best to make a sysdev (and class)
|
||||
* with its suspend/resume calls hooking into the results of the set_wake()
|
||||
* NOTE: for suspend/resume, probably best to make a platform_device with
|
||||
* suspend_late/resume_resume calls hooking into results of the set_wake()
|
||||
* calls ... so if no gpios are wakeup events the clock can be disabled,
|
||||
* with outputs left at previously set levels, and so that VDD3P3V.IOPWDN0
|
||||
* can be set appropriately for GPIOV33 pins.
|
||||
* (dm6446) can be set appropriately for GPIOV33 pins.
|
||||
*/
|
||||
|
||||
static int __init davinci_gpio_irq_setup(void)
|
||||
{
|
||||
unsigned gpio, irq, bank;
|
||||
unsigned bank_irq;
|
||||
struct clk *clk;
|
||||
u32 binten = 0;
|
||||
|
||||
if (cpu_is_davinci_dm355()) { /* or dm335() */
|
||||
bank_irq = IRQ_DM355_GPIOBNK0;
|
||||
} else if (cpu_is_davinci_dm644x()) {
|
||||
bank_irq = IRQ_GPIOBNK0;
|
||||
} else if (cpu_is_davinci_dm646x()) {
|
||||
bank_irq = IRQ_DM646X_GPIOBNK0;
|
||||
} else {
|
||||
printk(KERN_ERR "Don't know first GPIO bank IRQ.\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
clk = clk_get(NULL, "gpio");
|
||||
if (IS_ERR(clk)) {
|
||||
printk(KERN_ERR "Error %ld getting gpio clock?\n",
|
||||
PTR_ERR(clk));
|
||||
return 0;
|
||||
return PTR_ERR(clk);
|
||||
}
|
||||
|
||||
clk_enable(clk);
|
||||
|
||||
for (gpio = 0, irq = gpio_to_irq(0), bank = IRQ_GPIOBNK0;
|
||||
gpio < DAVINCI_N_GPIO; bank++) {
|
||||
for (gpio = 0, irq = gpio_to_irq(0), bank = 0;
|
||||
gpio < ngpio;
|
||||
bank++, bank_irq++) {
|
||||
struct gpio_controller *__iomem g = gpio2controller(gpio);
|
||||
unsigned i;
|
||||
|
||||
|
@ -265,28 +301,28 @@ static int __init davinci_gpio_irq_setup(void)
|
|||
__raw_writel(~0, &g->clr_rising);
|
||||
|
||||
/* set up all irqs in this bank */
|
||||
set_irq_chained_handler(bank, gpio_irq_handler);
|
||||
set_irq_chip_data(bank, g);
|
||||
set_irq_data(bank, (void *)irq);
|
||||
set_irq_chained_handler(bank_irq, gpio_irq_handler);
|
||||
set_irq_chip_data(bank_irq, g);
|
||||
set_irq_data(bank_irq, (void *)irq);
|
||||
|
||||
for (i = 0; i < 16 && gpio < DAVINCI_N_GPIO;
|
||||
i++, irq++, gpio++) {
|
||||
for (i = 0; i < 16 && gpio < ngpio; i++, irq++, gpio++) {
|
||||
set_irq_chip(irq, &gpio_irqchip);
|
||||
set_irq_chip_data(irq, g);
|
||||
set_irq_handler(irq, handle_simple_irq);
|
||||
set_irq_flags(irq, IRQF_VALID);
|
||||
}
|
||||
|
||||
binten |= BIT(bank);
|
||||
}
|
||||
|
||||
/* BINTEN -- per-bank interrupt enable. genirq would also let these
|
||||
* bits be set/cleared dynamically.
|
||||
*/
|
||||
__raw_writel(0x1f, (void *__iomem)
|
||||
__raw_writel(binten, (void *__iomem)
|
||||
IO_ADDRESS(DAVINCI_GPIO_BASE + 0x08));
|
||||
|
||||
printk(KERN_INFO "DaVinci: %d gpio irqs\n", irq - gpio_to_irq(0));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
arch_initcall(davinci_gpio_irq_setup);
|
||||
|
|
|
@ -15,7 +15,9 @@
|
|||
#include <linux/init.h>
|
||||
#include <linux/io.h>
|
||||
|
||||
#define JTAG_ID_BASE 0x01c40028
|
||||
#define JTAG_ID_BASE IO_ADDRESS(0x01c40028)
|
||||
|
||||
static unsigned int davinci_revision;
|
||||
|
||||
struct davinci_id {
|
||||
u8 variant; /* JTAG ID bits 31:28 */
|
||||
|
@ -33,6 +35,20 @@ static struct davinci_id davinci_ids[] __initdata = {
|
|||
.manufacturer = 0x017,
|
||||
.type = 0x64460000,
|
||||
},
|
||||
{
|
||||
/* DM646X */
|
||||
.part_no = 0xb770,
|
||||
.variant = 0x0,
|
||||
.manufacturer = 0x017,
|
||||
.type = 0x64670000,
|
||||
},
|
||||
{
|
||||
/* DM355 */
|
||||
.part_no = 0xb73b,
|
||||
.variant = 0x0,
|
||||
.manufacturer = 0x00f,
|
||||
.type = 0x03550000,
|
||||
},
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -42,7 +58,7 @@ static u16 __init davinci_get_part_no(void)
|
|||
{
|
||||
u32 dev_id, part_no;
|
||||
|
||||
dev_id = davinci_readl(JTAG_ID_BASE);
|
||||
dev_id = __raw_readl(JTAG_ID_BASE);
|
||||
|
||||
part_no = ((dev_id >> 12) & 0xffff);
|
||||
|
||||
|
@ -56,13 +72,19 @@ static u8 __init davinci_get_variant(void)
|
|||
{
|
||||
u32 variant;
|
||||
|
||||
variant = davinci_readl(JTAG_ID_BASE);
|
||||
variant = __raw_readl(JTAG_ID_BASE);
|
||||
|
||||
variant = (variant >> 28) & 0xf;
|
||||
|
||||
return variant;
|
||||
}
|
||||
|
||||
unsigned int davinci_rev(void)
|
||||
{
|
||||
return davinci_revision >> 16;
|
||||
}
|
||||
EXPORT_SYMBOL(davinci_rev);
|
||||
|
||||
void __init davinci_check_revision(void)
|
||||
{
|
||||
int i;
|
||||
|
@ -75,7 +97,7 @@ void __init davinci_check_revision(void)
|
|||
/* First check only the major version in a safe way */
|
||||
for (i = 0; i < ARRAY_SIZE(davinci_ids); i++) {
|
||||
if (part_no == (davinci_ids[i].part_no)) {
|
||||
system_rev = davinci_ids[i].type;
|
||||
davinci_revision = davinci_ids[i].type;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -84,10 +106,11 @@ void __init davinci_check_revision(void)
|
|||
for (i = 0; i < ARRAY_SIZE(davinci_ids); i++) {
|
||||
if (part_no == davinci_ids[i].part_no &&
|
||||
variant == davinci_ids[i].variant) {
|
||||
system_rev = davinci_ids[i].type;
|
||||
davinci_revision = davinci_ids[i].type;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
printk("DaVinci DM%04x variant 0x%x\n", system_rev >> 16, variant);
|
||||
printk(KERN_INFO "DaVinci DM%04x variant 0x%x\n",
|
||||
davinci_rev(), variant);
|
||||
}
|
||||
|
|
20
arch/arm/mach-davinci/include/mach/board-dm6446evm.h
Normal file
20
arch/arm/mach-davinci/include/mach/board-dm6446evm.h
Normal file
|
@ -0,0 +1,20 @@
|
|||
/*
|
||||
* DaVinci DM6446 EVM board specific headers
|
||||
*
|
||||
* Author: Kevin Hilman, Deep Root Systems, LLC
|
||||
*
|
||||
* 2007 (c) Deep Root Systems, LLC. This file is licensed under
|
||||
* the terms of the GNU General Public License version 2. This program
|
||||
* is licensed "as is" without any warranty of any kind, whether express
|
||||
* or ifndef.
|
||||
*/
|
||||
|
||||
#ifndef _MACH_DAVINCI_DM6446EVM_H
|
||||
#define _MACH_DAVINCI_DM6446EVM_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
int dm6446evm_eeprom_read(char *buf, off_t off, size_t count);
|
||||
int dm6446evm_eeprom_write(char *buf, off_t off, size_t count);
|
||||
|
||||
#endif
|
13
arch/arm/mach-davinci/include/mach/clkdev.h
Normal file
13
arch/arm/mach-davinci/include/mach/clkdev.h
Normal file
|
@ -0,0 +1,13 @@
|
|||
#ifndef __MACH_CLKDEV_H
|
||||
#define __MACH_CLKDEV_H
|
||||
|
||||
static inline int __clk_get(struct clk *clk)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
static inline void __clk_put(struct clk *clk)
|
||||
{
|
||||
}
|
||||
|
||||
#endif
|
|
@ -17,6 +17,5 @@ struct clk;
|
|||
|
||||
extern int clk_register(struct clk *clk);
|
||||
extern void clk_unregister(struct clk *clk);
|
||||
extern int davinci_clk_init(void);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -16,6 +16,12 @@ struct sys_timer;
|
|||
|
||||
extern struct sys_timer davinci_timer;
|
||||
|
||||
extern void davinci_irq_init(void);
|
||||
extern void davinci_map_common_io(void);
|
||||
|
||||
/* parameters describe VBUS sourcing for host mode */
|
||||
extern void setup_usb(unsigned mA, unsigned potpgt_msec);
|
||||
|
||||
/* parameters describe VBUS sourcing for host mode */
|
||||
extern void setup_usb(unsigned mA, unsigned potpgt_msec);
|
||||
|
||||
|
|
49
arch/arm/mach-davinci/include/mach/cputype.h
Normal file
49
arch/arm/mach-davinci/include/mach/cputype.h
Normal file
|
@ -0,0 +1,49 @@
|
|||
/*
|
||||
* DaVinci CPU type detection
|
||||
*
|
||||
* Author: Kevin Hilman, Deep Root Systems, LLC
|
||||
*
|
||||
* Defines the cpu_is_*() macros for runtime detection of DaVinci
|
||||
* device type. In addtion, if support for a given device is not
|
||||
* compiled in to the kernel, the macros return 0 so that
|
||||
* resulting code can be optimized out.
|
||||
*
|
||||
* 2009 (c) Deep Root Systems, LLC. This file is licensed under
|
||||
* the terms of the GNU General Public License version 2. This program
|
||||
* is licensed "as is" without any warranty of any kind, whether express
|
||||
* or implied.
|
||||
*/
|
||||
#ifndef _ASM_ARCH_CPU_H
|
||||
#define _ASM_ARCH_CPU_H
|
||||
|
||||
extern unsigned int davinci_rev(void);
|
||||
|
||||
#define IS_DAVINCI_CPU(type, id) \
|
||||
static inline int is_davinci_dm ##type(void) \
|
||||
{ \
|
||||
return (davinci_rev() == (id)) ? 1 : 0; \
|
||||
}
|
||||
|
||||
IS_DAVINCI_CPU(644x, 0x6446)
|
||||
IS_DAVINCI_CPU(646x, 0x6467)
|
||||
IS_DAVINCI_CPU(355, 0x355)
|
||||
|
||||
#ifdef CONFIG_ARCH_DAVINCI_DM644x
|
||||
#define cpu_is_davinci_dm644x() is_davinci_dm644x()
|
||||
#else
|
||||
#define cpu_is_davinci_dm644x() 0
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ARCH_DAVINCI_DM646x
|
||||
#define cpu_is_davinci_dm646x() is_davinci_dm646x()
|
||||
#else
|
||||
#define cpu_is_davinci_dm646x() 0
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ARCH_DAVINCI_DM355
|
||||
#define cpu_is_davinci_dm355() is_davinci_dm355()
|
||||
#else
|
||||
#define cpu_is_davinci_dm355() 0
|
||||
#endif
|
||||
|
||||
#endif
|
37
arch/arm/mach-davinci/include/mach/dm644x.h
Normal file
37
arch/arm/mach-davinci/include/mach/dm644x.h
Normal file
|
@ -0,0 +1,37 @@
|
|||
/*
|
||||
* This file contains the processor specific definitions
|
||||
* of the TI DM644x.
|
||||
*
|
||||
* Copyright (C) 2008 Texas Instruments.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
*/
|
||||
#ifndef __ASM_ARCH_DM644X_H
|
||||
#define __ASM_ARCH_DM644X_H
|
||||
|
||||
#include <linux/platform_device.h>
|
||||
#include <mach/hardware.h>
|
||||
|
||||
#define DM644X_EMAC_BASE (0x01C80000)
|
||||
#define DM644X_EMAC_CNTRL_OFFSET (0x0000)
|
||||
#define DM644X_EMAC_CNTRL_MOD_OFFSET (0x1000)
|
||||
#define DM644X_EMAC_CNTRL_RAM_OFFSET (0x2000)
|
||||
#define DM644X_EMAC_MDIO_OFFSET (0x4000)
|
||||
#define DM644X_EMAC_CNTRL_RAM_SIZE (0x2000)
|
||||
|
||||
void __init dm644x_init(void);
|
||||
|
||||
#endif /* __ASM_ARCH_DM644X_H */
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue