mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 11:46:19 +00:00
Merge branch 'master' into next
Conflicts: fs/exec.c Removed IMA changes (the IMA checks are now performed via may_open()). Signed-off-by: James Morris <jmorris@namei.org>
This commit is contained in:
commit
2c9e703c61
537 changed files with 8700 additions and 5829 deletions
479
Documentation/ABI/testing/sysfs-kernel-slab
Normal file
479
Documentation/ABI/testing/sysfs-kernel-slab
Normal file
|
@ -0,0 +1,479 @@
|
||||||
|
What: /sys/kernel/slab
|
||||||
|
Date: May 2007
|
||||||
|
KernelVersion: 2.6.22
|
||||||
|
Contact: Pekka Enberg <penberg@cs.helsinki.fi>,
|
||||||
|
Christoph Lameter <cl@linux-foundation.org>
|
||||||
|
Description:
|
||||||
|
The /sys/kernel/slab directory contains a snapshot of the
|
||||||
|
internal state of the SLUB allocator for each cache. Certain
|
||||||
|
files may be modified to change the behavior of the cache (and
|
||||||
|
any cache it aliases, if any).
|
||||||
|
Users: kernel memory tuning tools
|
||||||
|
|
||||||
|
What: /sys/kernel/slab/cache/aliases
|
||||||
|
Date: May 2007
|
||||||
|
KernelVersion: 2.6.22
|
||||||
|
Contact: Pekka Enberg <penberg@cs.helsinki.fi>,
|
||||||
|
Christoph Lameter <cl@linux-foundation.org>
|
||||||
|
Description:
|
||||||
|
The aliases file is read-only and specifies how many caches
|
||||||
|
have merged into this cache.
|
||||||
|
|
||||||
|
What: /sys/kernel/slab/cache/align
|
||||||
|
Date: May 2007
|
||||||
|
KernelVersion: 2.6.22
|
||||||
|
Contact: Pekka Enberg <penberg@cs.helsinki.fi>,
|
||||||
|
Christoph Lameter <cl@linux-foundation.org>
|
||||||
|
Description:
|
||||||
|
The align file is read-only and specifies the cache's object
|
||||||
|
alignment in bytes.
|
||||||
|
|
||||||
|
What: /sys/kernel/slab/cache/alloc_calls
|
||||||
|
Date: May 2007
|
||||||
|
KernelVersion: 2.6.22
|
||||||
|
Contact: Pekka Enberg <penberg@cs.helsinki.fi>,
|
||||||
|
Christoph Lameter <cl@linux-foundation.org>
|
||||||
|
Description:
|
||||||
|
The alloc_calls file is read-only and lists the kernel code
|
||||||
|
locations from which allocations for this cache were performed.
|
||||||
|
The alloc_calls file only contains information if debugging is
|
||||||
|
enabled for that cache (see Documentation/vm/slub.txt).
|
||||||
|
|
||||||
|
What: /sys/kernel/slab/cache/alloc_fastpath
|
||||||
|
Date: February 2008
|
||||||
|
KernelVersion: 2.6.25
|
||||||
|
Contact: Pekka Enberg <penberg@cs.helsinki.fi>,
|
||||||
|
Christoph Lameter <cl@linux-foundation.org>
|
||||||
|
Description:
|
||||||
|
The alloc_fastpath file is read-only and specifies how many
|
||||||
|
objects have been allocated using the fast path.
|
||||||
|
Available when CONFIG_SLUB_STATS is enabled.
|
||||||
|
|
||||||
|
What: /sys/kernel/slab/cache/alloc_from_partial
|
||||||
|
Date: February 2008
|
||||||
|
KernelVersion: 2.6.25
|
||||||
|
Contact: Pekka Enberg <penberg@cs.helsinki.fi>,
|
||||||
|
Christoph Lameter <cl@linux-foundation.org>
|
||||||
|
Description:
|
||||||
|
The alloc_from_partial file is read-only and specifies how
|
||||||
|
many times a cpu slab has been full and it has been refilled
|
||||||
|
by using a slab from the list of partially used slabs.
|
||||||
|
Available when CONFIG_SLUB_STATS is enabled.
|
||||||
|
|
||||||
|
What: /sys/kernel/slab/cache/alloc_refill
|
||||||
|
Date: February 2008
|
||||||
|
KernelVersion: 2.6.25
|
||||||
|
Contact: Pekka Enberg <penberg@cs.helsinki.fi>,
|
||||||
|
Christoph Lameter <cl@linux-foundation.org>
|
||||||
|
Description:
|
||||||
|
The alloc_refill file is read-only and specifies how many
|
||||||
|
times the per-cpu freelist was empty but there were objects
|
||||||
|
available as the result of remote cpu frees.
|
||||||
|
Available when CONFIG_SLUB_STATS is enabled.
|
||||||
|
|
||||||
|
What: /sys/kernel/slab/cache/alloc_slab
|
||||||
|
Date: February 2008
|
||||||
|
KernelVersion: 2.6.25
|
||||||
|
Contact: Pekka Enberg <penberg@cs.helsinki.fi>,
|
||||||
|
Christoph Lameter <cl@linux-foundation.org>
|
||||||
|
Description:
|
||||||
|
The alloc_slab file is read-only and specifies how many times
|
||||||
|
a new slab had to be allocated from the page allocator.
|
||||||
|
Available when CONFIG_SLUB_STATS is enabled.
|
||||||
|
|
||||||
|
What: /sys/kernel/slab/cache/alloc_slowpath
|
||||||
|
Date: February 2008
|
||||||
|
KernelVersion: 2.6.25
|
||||||
|
Contact: Pekka Enberg <penberg@cs.helsinki.fi>,
|
||||||
|
Christoph Lameter <cl@linux-foundation.org>
|
||||||
|
Description:
|
||||||
|
The alloc_slowpath file is read-only and specifies how many
|
||||||
|
objects have been allocated using the slow path because of a
|
||||||
|
refill or allocation from a partial or new slab.
|
||||||
|
Available when CONFIG_SLUB_STATS is enabled.
|
||||||
|
|
||||||
|
What: /sys/kernel/slab/cache/cache_dma
|
||||||
|
Date: May 2007
|
||||||
|
KernelVersion: 2.6.22
|
||||||
|
Contact: Pekka Enberg <penberg@cs.helsinki.fi>,
|
||||||
|
Christoph Lameter <cl@linux-foundation.org>
|
||||||
|
Description:
|
||||||
|
The cache_dma file is read-only and specifies whether objects
|
||||||
|
are from ZONE_DMA.
|
||||||
|
Available when CONFIG_ZONE_DMA is enabled.
|
||||||
|
|
||||||
|
What: /sys/kernel/slab/cache/cpu_slabs
|
||||||
|
Date: May 2007
|
||||||
|
KernelVersion: 2.6.22
|
||||||
|
Contact: Pekka Enberg <penberg@cs.helsinki.fi>,
|
||||||
|
Christoph Lameter <cl@linux-foundation.org>
|
||||||
|
Description:
|
||||||
|
The cpu_slabs file is read-only and displays how many cpu slabs
|
||||||
|
are active and their NUMA locality.
|
||||||
|
|
||||||
|
What: /sys/kernel/slab/cache/cpuslab_flush
|
||||||
|
Date: April 2009
|
||||||
|
KernelVersion: 2.6.31
|
||||||
|
Contact: Pekka Enberg <penberg@cs.helsinki.fi>,
|
||||||
|
Christoph Lameter <cl@linux-foundation.org>
|
||||||
|
Description:
|
||||||
|
The file cpuslab_flush is read-only and specifies how many
|
||||||
|
times a cache's cpu slabs have been flushed as the result of
|
||||||
|
destroying or shrinking a cache, a cpu going offline, or as
|
||||||
|
the result of forcing an allocation from a certain node.
|
||||||
|
Available when CONFIG_SLUB_STATS is enabled.
|
||||||
|
|
||||||
|
What: /sys/kernel/slab/cache/ctor
|
||||||
|
Date: May 2007
|
||||||
|
KernelVersion: 2.6.22
|
||||||
|
Contact: Pekka Enberg <penberg@cs.helsinki.fi>,
|
||||||
|
Christoph Lameter <cl@linux-foundation.org>
|
||||||
|
Description:
|
||||||
|
The ctor file is read-only and specifies the cache's object
|
||||||
|
constructor function, which is invoked for each object when a
|
||||||
|
new slab is allocated.
|
||||||
|
|
||||||
|
What: /sys/kernel/slab/cache/deactivate_empty
|
||||||
|
Date: February 2008
|
||||||
|
KernelVersion: 2.6.25
|
||||||
|
Contact: Pekka Enberg <penberg@cs.helsinki.fi>,
|
||||||
|
Christoph Lameter <cl@linux-foundation.org>
|
||||||
|
Description:
|
||||||
|
The file deactivate_empty is read-only and specifies how many
|
||||||
|
times an empty cpu slab was deactivated.
|
||||||
|
Available when CONFIG_SLUB_STATS is enabled.
|
||||||
|
|
||||||
|
What: /sys/kernel/slab/cache/deactivate_full
|
||||||
|
Date: February 2008
|
||||||
|
KernelVersion: 2.6.25
|
||||||
|
Contact: Pekka Enberg <penberg@cs.helsinki.fi>,
|
||||||
|
Christoph Lameter <cl@linux-foundation.org>
|
||||||
|
Description:
|
||||||
|
The file deactivate_full is read-only and specifies how many
|
||||||
|
times a full cpu slab was deactivated.
|
||||||
|
Available when CONFIG_SLUB_STATS is enabled.
|
||||||
|
|
||||||
|
What: /sys/kernel/slab/cache/deactivate_remote_frees
|
||||||
|
Date: February 2008
|
||||||
|
KernelVersion: 2.6.25
|
||||||
|
Contact: Pekka Enberg <penberg@cs.helsinki.fi>,
|
||||||
|
Christoph Lameter <cl@linux-foundation.org>
|
||||||
|
Description:
|
||||||
|
The file deactivate_remote_frees is read-only and specifies how
|
||||||
|
many times a cpu slab has been deactivated and contained free
|
||||||
|
objects that were freed remotely.
|
||||||
|
Available when CONFIG_SLUB_STATS is enabled.
|
||||||
|
|
||||||
|
What: /sys/kernel/slab/cache/deactivate_to_head
|
||||||
|
Date: February 2008
|
||||||
|
KernelVersion: 2.6.25
|
||||||
|
Contact: Pekka Enberg <penberg@cs.helsinki.fi>,
|
||||||
|
Christoph Lameter <cl@linux-foundation.org>
|
||||||
|
Description:
|
||||||
|
The file deactivate_to_head is read-only and specifies how
|
||||||
|
many times a partial cpu slab was deactivated and added to the
|
||||||
|
head of its node's partial list.
|
||||||
|
Available when CONFIG_SLUB_STATS is enabled.
|
||||||
|
|
||||||
|
What: /sys/kernel/slab/cache/deactivate_to_tail
|
||||||
|
Date: February 2008
|
||||||
|
KernelVersion: 2.6.25
|
||||||
|
Contact: Pekka Enberg <penberg@cs.helsinki.fi>,
|
||||||
|
Christoph Lameter <cl@linux-foundation.org>
|
||||||
|
Description:
|
||||||
|
The file deactivate_to_tail is read-only and specifies how
|
||||||
|
many times a partial cpu slab was deactivated and added to the
|
||||||
|
tail of its node's partial list.
|
||||||
|
Available when CONFIG_SLUB_STATS is enabled.
|
||||||
|
|
||||||
|
What: /sys/kernel/slab/cache/destroy_by_rcu
|
||||||
|
Date: May 2007
|
||||||
|
KernelVersion: 2.6.22
|
||||||
|
Contact: Pekka Enberg <penberg@cs.helsinki.fi>,
|
||||||
|
Christoph Lameter <cl@linux-foundation.org>
|
||||||
|
Description:
|
||||||
|
The destroy_by_rcu file is read-only and specifies whether
|
||||||
|
slabs (not objects) are freed by rcu.
|
||||||
|
|
||||||
|
What: /sys/kernel/slab/cache/free_add_partial
|
||||||
|
Date: February 2008
|
||||||
|
KernelVersion: 2.6.25
|
||||||
|
Contact: Pekka Enberg <penberg@cs.helsinki.fi>,
|
||||||
|
Christoph Lameter <cl@linux-foundation.org>
|
||||||
|
Description:
|
||||||
|
The file free_add_partial is read-only and specifies how many
|
||||||
|
times an object has been freed in a full slab so that it had to
|
||||||
|
added to its node's partial list.
|
||||||
|
Available when CONFIG_SLUB_STATS is enabled.
|
||||||
|
|
||||||
|
What: /sys/kernel/slab/cache/free_calls
|
||||||
|
Date: May 2007
|
||||||
|
KernelVersion: 2.6.22
|
||||||
|
Contact: Pekka Enberg <penberg@cs.helsinki.fi>,
|
||||||
|
Christoph Lameter <cl@linux-foundation.org>
|
||||||
|
Description:
|
||||||
|
The free_calls file is read-only and lists the locations of
|
||||||
|
object frees if slab debugging is enabled (see
|
||||||
|
Documentation/vm/slub.txt).
|
||||||
|
|
||||||
|
What: /sys/kernel/slab/cache/free_fastpath
|
||||||
|
Date: February 2008
|
||||||
|
KernelVersion: 2.6.25
|
||||||
|
Contact: Pekka Enberg <penberg@cs.helsinki.fi>,
|
||||||
|
Christoph Lameter <cl@linux-foundation.org>
|
||||||
|
Description:
|
||||||
|
The free_fastpath file is read-only and specifies how many
|
||||||
|
objects have been freed using the fast path because it was an
|
||||||
|
object from the cpu slab.
|
||||||
|
Available when CONFIG_SLUB_STATS is enabled.
|
||||||
|
|
||||||
|
What: /sys/kernel/slab/cache/free_frozen
|
||||||
|
Date: February 2008
|
||||||
|
KernelVersion: 2.6.25
|
||||||
|
Contact: Pekka Enberg <penberg@cs.helsinki.fi>,
|
||||||
|
Christoph Lameter <cl@linux-foundation.org>
|
||||||
|
Description:
|
||||||
|
The free_frozen file is read-only and specifies how many
|
||||||
|
objects have been freed to a frozen slab (i.e. a remote cpu
|
||||||
|
slab).
|
||||||
|
Available when CONFIG_SLUB_STATS is enabled.
|
||||||
|
|
||||||
|
What: /sys/kernel/slab/cache/free_remove_partial
|
||||||
|
Date: February 2008
|
||||||
|
KernelVersion: 2.6.25
|
||||||
|
Contact: Pekka Enberg <penberg@cs.helsinki.fi>,
|
||||||
|
Christoph Lameter <cl@linux-foundation.org>
|
||||||
|
Description:
|
||||||
|
The file free_remove_partial is read-only and specifies how
|
||||||
|
many times an object has been freed to a now-empty slab so
|
||||||
|
that it had to be removed from its node's partial list.
|
||||||
|
Available when CONFIG_SLUB_STATS is enabled.
|
||||||
|
|
||||||
|
What: /sys/kernel/slab/cache/free_slab
|
||||||
|
Date: February 2008
|
||||||
|
KernelVersion: 2.6.25
|
||||||
|
Contact: Pekka Enberg <penberg@cs.helsinki.fi>,
|
||||||
|
Christoph Lameter <cl@linux-foundation.org>
|
||||||
|
Description:
|
||||||
|
The free_slab file is read-only and specifies how many times an
|
||||||
|
empty slab has been freed back to the page allocator.
|
||||||
|
Available when CONFIG_SLUB_STATS is enabled.
|
||||||
|
|
||||||
|
What: /sys/kernel/slab/cache/free_slowpath
|
||||||
|
Date: February 2008
|
||||||
|
KernelVersion: 2.6.25
|
||||||
|
Contact: Pekka Enberg <penberg@cs.helsinki.fi>,
|
||||||
|
Christoph Lameter <cl@linux-foundation.org>
|
||||||
|
Description:
|
||||||
|
The free_slowpath file is read-only and specifies how many
|
||||||
|
objects have been freed using the slow path (i.e. to a full or
|
||||||
|
partial slab).
|
||||||
|
Available when CONFIG_SLUB_STATS is enabled.
|
||||||
|
|
||||||
|
What: /sys/kernel/slab/cache/hwcache_align
|
||||||
|
Date: May 2007
|
||||||
|
KernelVersion: 2.6.22
|
||||||
|
Contact: Pekka Enberg <penberg@cs.helsinki.fi>,
|
||||||
|
Christoph Lameter <cl@linux-foundation.org>
|
||||||
|
Description:
|
||||||
|
The hwcache_align file is read-only and specifies whether
|
||||||
|
objects are aligned on cachelines.
|
||||||
|
|
||||||
|
What: /sys/kernel/slab/cache/min_partial
|
||||||
|
Date: February 2009
|
||||||
|
KernelVersion: 2.6.30
|
||||||
|
Contact: Pekka Enberg <penberg@cs.helsinki.fi>,
|
||||||
|
David Rientjes <rientjes@google.com>
|
||||||
|
Description:
|
||||||
|
The min_partial file specifies how many empty slabs shall
|
||||||
|
remain on a node's partial list to avoid the overhead of
|
||||||
|
allocating new slabs. Such slabs may be reclaimed by utilizing
|
||||||
|
the shrink file.
|
||||||
|
|
||||||
|
What: /sys/kernel/slab/cache/object_size
|
||||||
|
Date: May 2007
|
||||||
|
KernelVersion: 2.6.22
|
||||||
|
Contact: Pekka Enberg <penberg@cs.helsinki.fi>,
|
||||||
|
Christoph Lameter <cl@linux-foundation.org>
|
||||||
|
Description:
|
||||||
|
The object_size file is read-only and specifies the cache's
|
||||||
|
object size.
|
||||||
|
|
||||||
|
What: /sys/kernel/slab/cache/objects
|
||||||
|
Date: May 2007
|
||||||
|
KernelVersion: 2.6.22
|
||||||
|
Contact: Pekka Enberg <penberg@cs.helsinki.fi>,
|
||||||
|
Christoph Lameter <cl@linux-foundation.org>
|
||||||
|
Description:
|
||||||
|
The objects file is read-only and displays how many objects are
|
||||||
|
active and from which nodes they are from.
|
||||||
|
|
||||||
|
What: /sys/kernel/slab/cache/objects_partial
|
||||||
|
Date: April 2008
|
||||||
|
KernelVersion: 2.6.26
|
||||||
|
Contact: Pekka Enberg <penberg@cs.helsinki.fi>,
|
||||||
|
Christoph Lameter <cl@linux-foundation.org>
|
||||||
|
Description:
|
||||||
|
The objects_partial file is read-only and displays how many
|
||||||
|
objects are on partial slabs and from which nodes they are
|
||||||
|
from.
|
||||||
|
|
||||||
|
What: /sys/kernel/slab/cache/objs_per_slab
|
||||||
|
Date: May 2007
|
||||||
|
KernelVersion: 2.6.22
|
||||||
|
Contact: Pekka Enberg <penberg@cs.helsinki.fi>,
|
||||||
|
Christoph Lameter <cl@linux-foundation.org>
|
||||||
|
Description:
|
||||||
|
The file objs_per_slab is read-only and specifies how many
|
||||||
|
objects may be allocated from a single slab of the order
|
||||||
|
specified in /sys/kernel/slab/cache/order.
|
||||||
|
|
||||||
|
What: /sys/kernel/slab/cache/order
|
||||||
|
Date: May 2007
|
||||||
|
KernelVersion: 2.6.22
|
||||||
|
Contact: Pekka Enberg <penberg@cs.helsinki.fi>,
|
||||||
|
Christoph Lameter <cl@linux-foundation.org>
|
||||||
|
Description:
|
||||||
|
The order file specifies the page order at which new slabs are
|
||||||
|
allocated. It is writable and can be changed to increase the
|
||||||
|
number of objects per slab. If a slab cannot be allocated
|
||||||
|
because of fragmentation, SLUB will retry with the minimum order
|
||||||
|
possible depending on its characteristics.
|
||||||
|
|
||||||
|
What: /sys/kernel/slab/cache/order_fallback
|
||||||
|
Date: April 2008
|
||||||
|
KernelVersion: 2.6.26
|
||||||
|
Contact: Pekka Enberg <penberg@cs.helsinki.fi>,
|
||||||
|
Christoph Lameter <cl@linux-foundation.org>
|
||||||
|
Description:
|
||||||
|
The file order_fallback is read-only and specifies how many
|
||||||
|
times an allocation of a new slab has not been possible at the
|
||||||
|
cache's order and instead fallen back to its minimum possible
|
||||||
|
order.
|
||||||
|
Available when CONFIG_SLUB_STATS is enabled.
|
||||||
|
|
||||||
|
What: /sys/kernel/slab/cache/partial
|
||||||
|
Date: May 2007
|
||||||
|
KernelVersion: 2.6.22
|
||||||
|
Contact: Pekka Enberg <penberg@cs.helsinki.fi>,
|
||||||
|
Christoph Lameter <cl@linux-foundation.org>
|
||||||
|
Description:
|
||||||
|
The partial file is read-only and displays how long many
|
||||||
|
partial slabs there are and how long each node's list is.
|
||||||
|
|
||||||
|
What: /sys/kernel/slab/cache/poison
|
||||||
|
Date: May 2007
|
||||||
|
KernelVersion: 2.6.22
|
||||||
|
Contact: Pekka Enberg <penberg@cs.helsinki.fi>,
|
||||||
|
Christoph Lameter <cl@linux-foundation.org>
|
||||||
|
Description:
|
||||||
|
The poison file specifies whether objects should be poisoned
|
||||||
|
when a new slab is allocated.
|
||||||
|
|
||||||
|
What: /sys/kernel/slab/cache/reclaim_account
|
||||||
|
Date: May 2007
|
||||||
|
KernelVersion: 2.6.22
|
||||||
|
Contact: Pekka Enberg <penberg@cs.helsinki.fi>,
|
||||||
|
Christoph Lameter <cl@linux-foundation.org>
|
||||||
|
Description:
|
||||||
|
The reclaim_account file specifies whether the cache's objects
|
||||||
|
are reclaimable (and grouped by their mobility).
|
||||||
|
|
||||||
|
What: /sys/kernel/slab/cache/red_zone
|
||||||
|
Date: May 2007
|
||||||
|
KernelVersion: 2.6.22
|
||||||
|
Contact: Pekka Enberg <penberg@cs.helsinki.fi>,
|
||||||
|
Christoph Lameter <cl@linux-foundation.org>
|
||||||
|
Description:
|
||||||
|
The red_zone file specifies whether the cache's objects are red
|
||||||
|
zoned.
|
||||||
|
|
||||||
|
What: /sys/kernel/slab/cache/remote_node_defrag_ratio
|
||||||
|
Date: January 2008
|
||||||
|
KernelVersion: 2.6.25
|
||||||
|
Contact: Pekka Enberg <penberg@cs.helsinki.fi>,
|
||||||
|
Christoph Lameter <cl@linux-foundation.org>
|
||||||
|
Description:
|
||||||
|
The file remote_node_defrag_ratio specifies the percentage of
|
||||||
|
times SLUB will attempt to refill the cpu slab with a partial
|
||||||
|
slab from a remote node as opposed to allocating a new slab on
|
||||||
|
the local node. This reduces the amount of wasted memory over
|
||||||
|
the entire system but can be expensive.
|
||||||
|
Available when CONFIG_NUMA is enabled.
|
||||||
|
|
||||||
|
What: /sys/kernel/slab/cache/sanity_checks
|
||||||
|
Date: May 2007
|
||||||
|
KernelVersion: 2.6.22
|
||||||
|
Contact: Pekka Enberg <penberg@cs.helsinki.fi>,
|
||||||
|
Christoph Lameter <cl@linux-foundation.org>
|
||||||
|
Description:
|
||||||
|
The sanity_checks file specifies whether expensive checks
|
||||||
|
should be performed on free and, at minimum, enables double free
|
||||||
|
checks. Caches that enable sanity_checks cannot be merged with
|
||||||
|
caches that do not.
|
||||||
|
|
||||||
|
What: /sys/kernel/slab/cache/shrink
|
||||||
|
Date: May 2007
|
||||||
|
KernelVersion: 2.6.22
|
||||||
|
Contact: Pekka Enberg <penberg@cs.helsinki.fi>,
|
||||||
|
Christoph Lameter <cl@linux-foundation.org>
|
||||||
|
Description:
|
||||||
|
The shrink file is written when memory should be reclaimed from
|
||||||
|
a cache. Empty partial slabs are freed and the partial list is
|
||||||
|
sorted so the slabs with the fewest available objects are used
|
||||||
|
first.
|
||||||
|
|
||||||
|
What: /sys/kernel/slab/cache/slab_size
|
||||||
|
Date: May 2007
|
||||||
|
KernelVersion: 2.6.22
|
||||||
|
Contact: Pekka Enberg <penberg@cs.helsinki.fi>,
|
||||||
|
Christoph Lameter <cl@linux-foundation.org>
|
||||||
|
Description:
|
||||||
|
The slab_size file is read-only and specifies the object size
|
||||||
|
with metadata (debugging information and alignment) in bytes.
|
||||||
|
|
||||||
|
What: /sys/kernel/slab/cache/slabs
|
||||||
|
Date: May 2007
|
||||||
|
KernelVersion: 2.6.22
|
||||||
|
Contact: Pekka Enberg <penberg@cs.helsinki.fi>,
|
||||||
|
Christoph Lameter <cl@linux-foundation.org>
|
||||||
|
Description:
|
||||||
|
The slabs file is read-only and displays how long many slabs
|
||||||
|
there are (both cpu and partial) and from which nodes they are
|
||||||
|
from.
|
||||||
|
|
||||||
|
What: /sys/kernel/slab/cache/store_user
|
||||||
|
Date: May 2007
|
||||||
|
KernelVersion: 2.6.22
|
||||||
|
Contact: Pekka Enberg <penberg@cs.helsinki.fi>,
|
||||||
|
Christoph Lameter <cl@linux-foundation.org>
|
||||||
|
Description:
|
||||||
|
The store_user file specifies whether the location of
|
||||||
|
allocation or free should be tracked for a cache.
|
||||||
|
|
||||||
|
What: /sys/kernel/slab/cache/total_objects
|
||||||
|
Date: April 2008
|
||||||
|
KernelVersion: 2.6.26
|
||||||
|
Contact: Pekka Enberg <penberg@cs.helsinki.fi>,
|
||||||
|
Christoph Lameter <cl@linux-foundation.org>
|
||||||
|
Description:
|
||||||
|
The total_objects file is read-only and displays how many total
|
||||||
|
objects a cache has and from which nodes they are from.
|
||||||
|
|
||||||
|
What: /sys/kernel/slab/cache/trace
|
||||||
|
Date: May 2007
|
||||||
|
KernelVersion: 2.6.22
|
||||||
|
Contact: Pekka Enberg <penberg@cs.helsinki.fi>,
|
||||||
|
Christoph Lameter <cl@linux-foundation.org>
|
||||||
|
Description:
|
||||||
|
The trace file specifies whether object allocations and frees
|
||||||
|
should be traced.
|
||||||
|
|
||||||
|
What: /sys/kernel/slab/cache/validate
|
||||||
|
Date: May 2007
|
||||||
|
KernelVersion: 2.6.22
|
||||||
|
Contact: Pekka Enberg <penberg@cs.helsinki.fi>,
|
||||||
|
Christoph Lameter <cl@linux-foundation.org>
|
||||||
|
Description:
|
||||||
|
Writing to the validate file causes SLUB to traverse all of its
|
||||||
|
cache's objects and check the validity of metadata.
|
|
@ -281,7 +281,7 @@
|
||||||
seriously wrong while debugging, it will most often be the case
|
seriously wrong while debugging, it will most often be the case
|
||||||
that you want to enable gdb to be verbose about its target
|
that you want to enable gdb to be verbose about its target
|
||||||
communications. You do this prior to issuing the <constant>target
|
communications. You do this prior to issuing the <constant>target
|
||||||
remote</constant> command by typing in: <constant>set remote debug 1</constant>
|
remote</constant> command by typing in: <constant>set debug remote 1</constant>
|
||||||
</para>
|
</para>
|
||||||
</chapter>
|
</chapter>
|
||||||
<chapter id="KGDBTestSuite">
|
<chapter id="KGDBTestSuite">
|
||||||
|
|
|
@ -1266,13 +1266,22 @@ sctp_rmem - vector of 3 INTEGERs: min, default, max
|
||||||
sctp_wmem - vector of 3 INTEGERs: min, default, max
|
sctp_wmem - vector of 3 INTEGERs: min, default, max
|
||||||
See tcp_wmem for a description.
|
See tcp_wmem for a description.
|
||||||
|
|
||||||
UNDOCUMENTED:
|
|
||||||
|
|
||||||
/proc/sys/net/core/*
|
/proc/sys/net/core/*
|
||||||
dev_weight FIXME
|
dev_weight - INTEGER
|
||||||
|
The maximum number of packets that kernel can handle on a NAPI
|
||||||
|
interrupt, it's a Per-CPU variable.
|
||||||
|
|
||||||
|
Default: 64
|
||||||
|
|
||||||
/proc/sys/net/unix/*
|
/proc/sys/net/unix/*
|
||||||
max_dgram_qlen FIXME
|
max_dgram_qlen - INTEGER
|
||||||
|
The maximum length of dgram socket receive queue
|
||||||
|
|
||||||
|
Default: 10
|
||||||
|
|
||||||
|
|
||||||
|
UNDOCUMENTED:
|
||||||
|
|
||||||
/proc/sys/net/irda/*
|
/proc/sys/net/irda/*
|
||||||
fast_poll_increase FIXME
|
fast_poll_increase FIXME
|
||||||
|
|
|
@ -39,8 +39,6 @@ Currently, these files are in /proc/sys/vm:
|
||||||
- nr_hugepages
|
- nr_hugepages
|
||||||
- nr_overcommit_hugepages
|
- nr_overcommit_hugepages
|
||||||
- nr_pdflush_threads
|
- nr_pdflush_threads
|
||||||
- nr_pdflush_threads_min
|
|
||||||
- nr_pdflush_threads_max
|
|
||||||
- nr_trim_pages (only if CONFIG_MMU=n)
|
- nr_trim_pages (only if CONFIG_MMU=n)
|
||||||
- numa_zonelist_order
|
- numa_zonelist_order
|
||||||
- oom_dump_tasks
|
- oom_dump_tasks
|
||||||
|
@ -469,32 +467,6 @@ The default value is 0.
|
||||||
|
|
||||||
==============================================================
|
==============================================================
|
||||||
|
|
||||||
nr_pdflush_threads_min
|
|
||||||
|
|
||||||
This value controls the minimum number of pdflush threads.
|
|
||||||
|
|
||||||
At boot time, the kernel will create and maintain 'nr_pdflush_threads_min'
|
|
||||||
threads for the kernel's lifetime.
|
|
||||||
|
|
||||||
The default value is 2. The minimum value you can specify is 1, and
|
|
||||||
the maximum value is the current setting of 'nr_pdflush_threads_max'.
|
|
||||||
|
|
||||||
See 'nr_pdflush_threads_max' below for more information.
|
|
||||||
|
|
||||||
==============================================================
|
|
||||||
|
|
||||||
nr_pdflush_threads_max
|
|
||||||
|
|
||||||
This value controls the maximum number of pdflush threads that can be
|
|
||||||
created. The pdflush algorithm will create a new pdflush thread (up to
|
|
||||||
this maximum) if no pdflush threads have been available for >= 1 second.
|
|
||||||
|
|
||||||
The default value is 8. The minimum value you can specify is the
|
|
||||||
current value of 'nr_pdflush_threads_min' and the
|
|
||||||
maximum is 1000.
|
|
||||||
|
|
||||||
==============================================================
|
|
||||||
|
|
||||||
overcommit_memory:
|
overcommit_memory:
|
||||||
|
|
||||||
This value contains a flag that enables memory overcommitment.
|
This value contains a flag that enables memory overcommitment.
|
||||||
|
|
|
@ -113,7 +113,7 @@ versions of the sysfs interface.
|
||||||
"devices" directory at /sys/subsystem/<name>/devices.
|
"devices" directory at /sys/subsystem/<name>/devices.
|
||||||
|
|
||||||
If /sys/subsystem exists, /sys/bus, /sys/class and /sys/block can be
|
If /sys/subsystem exists, /sys/bus, /sys/class and /sys/block can be
|
||||||
ignored. If it does not exist, you have always to scan all three
|
ignored. If it does not exist, you always have to scan all three
|
||||||
places, as the kernel is free to move a subsystem from one place to
|
places, as the kernel is free to move a subsystem from one place to
|
||||||
the other, as long as the devices are still reachable by the same
|
the other, as long as the devices are still reachable by the same
|
||||||
subsystem name.
|
subsystem name.
|
||||||
|
|
2
Makefile
2
Makefile
|
@ -1,7 +1,7 @@
|
||||||
VERSION = 2
|
VERSION = 2
|
||||||
PATCHLEVEL = 6
|
PATCHLEVEL = 6
|
||||||
SUBLEVEL = 30
|
SUBLEVEL = 30
|
||||||
EXTRAVERSION = -rc4
|
EXTRAVERSION = -rc6
|
||||||
NAME = Vindictive Armadillo
|
NAME = Vindictive Armadillo
|
||||||
|
|
||||||
# *DOCUMENTATION*
|
# *DOCUMENTATION*
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
#ifndef __ALPHA_PERCPU_H
|
#ifndef __ALPHA_PERCPU_H
|
||||||
#define __ALPHA_PERCPU_H
|
#define __ALPHA_PERCPU_H
|
||||||
|
|
||||||
#include <linux/compiler.h>
|
#include <linux/compiler.h>
|
||||||
#include <linux/threads.h>
|
#include <linux/threads.h>
|
||||||
|
#include <linux/percpu-defs.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Determine the real variable name from the name visible in the
|
* Determine the real variable name from the name visible in the
|
||||||
|
@ -73,6 +75,28 @@ extern unsigned long __per_cpu_offset[NR_CPUS];
|
||||||
|
|
||||||
#endif /* SMP */
|
#endif /* SMP */
|
||||||
|
|
||||||
#include <asm-generic/percpu.h>
|
#ifdef CONFIG_SMP
|
||||||
|
#define PER_CPU_BASE_SECTION ".data.percpu"
|
||||||
|
#else
|
||||||
|
#define PER_CPU_BASE_SECTION ".data"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_SMP
|
||||||
|
|
||||||
|
#ifdef MODULE
|
||||||
|
#define PER_CPU_SHARED_ALIGNED_SECTION ""
|
||||||
|
#else
|
||||||
|
#define PER_CPU_SHARED_ALIGNED_SECTION ".shared_aligned"
|
||||||
|
#endif
|
||||||
|
#define PER_CPU_FIRST_SECTION ".first"
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#define PER_CPU_SHARED_ALIGNED_SECTION ""
|
||||||
|
#define PER_CPU_FIRST_SECTION ""
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define PER_CPU_ATTRIBUTES
|
||||||
|
|
||||||
#endif /* __ALPHA_PERCPU_H */
|
#endif /* __ALPHA_PERCPU_H */
|
||||||
|
|
|
@ -273,6 +273,7 @@ config ARCH_EP93XX
|
||||||
select HAVE_CLK
|
select HAVE_CLK
|
||||||
select COMMON_CLKDEV
|
select COMMON_CLKDEV
|
||||||
select ARCH_REQUIRE_GPIOLIB
|
select ARCH_REQUIRE_GPIOLIB
|
||||||
|
select ARCH_HAS_HOLES_MEMORYMODEL
|
||||||
help
|
help
|
||||||
This enables support for the Cirrus EP93xx series of CPUs.
|
This enables support for the Cirrus EP93xx series of CPUs.
|
||||||
|
|
||||||
|
@ -976,10 +977,9 @@ config OABI_COMPAT
|
||||||
UNPREDICTABLE (in fact it can be predicted that it won't work
|
UNPREDICTABLE (in fact it can be predicted that it won't work
|
||||||
at all). If in doubt say Y.
|
at all). If in doubt say Y.
|
||||||
|
|
||||||
config ARCH_FLATMEM_HAS_HOLES
|
config ARCH_HAS_HOLES_MEMORYMODEL
|
||||||
bool
|
bool
|
||||||
default y
|
default n
|
||||||
depends on FLATMEM
|
|
||||||
|
|
||||||
# Discontigmem is deprecated
|
# Discontigmem is deprecated
|
||||||
config ARCH_DISCONTIGMEM_ENABLE
|
config ARCH_DISCONTIGMEM_ENABLE
|
||||||
|
|
|
@ -253,9 +253,9 @@ void __cpuinit gic_cpu_init(unsigned int gic_nr, void __iomem *base)
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
void gic_raise_softirq(cpumask_t cpumask, unsigned int irq)
|
void gic_raise_softirq(const struct cpumask *mask, unsigned int irq)
|
||||||
{
|
{
|
||||||
unsigned long map = *cpus_addr(cpumask);
|
unsigned long map = *cpus_addr(*mask);
|
||||||
|
|
||||||
/* this always happens on GIC0 */
|
/* this always happens on GIC0 */
|
||||||
writel(map << 16 | irq, gic_data[0].dist_base + GIC_DIST_SOFTINT);
|
writel(map << 16 | irq, gic_data[0].dist_base + GIC_DIST_SOFTINT);
|
||||||
|
|
|
@ -36,7 +36,7 @@
|
||||||
void gic_dist_init(unsigned int gic_nr, void __iomem *base, unsigned int irq_start);
|
void gic_dist_init(unsigned int gic_nr, void __iomem *base, unsigned int irq_start);
|
||||||
void gic_cpu_init(unsigned int gic_nr, void __iomem *base);
|
void gic_cpu_init(unsigned int gic_nr, void __iomem *base);
|
||||||
void gic_cascade_irq(unsigned int gic_nr, unsigned int irq);
|
void gic_cascade_irq(unsigned int gic_nr, unsigned int irq);
|
||||||
void gic_raise_softirq(cpumask_t cpumask, unsigned int irq);
|
void gic_raise_softirq(const struct cpumask *mask, unsigned int irq);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -53,17 +53,12 @@ extern void smp_store_cpu_info(unsigned int cpuid);
|
||||||
/*
|
/*
|
||||||
* Raise an IPI cross call on CPUs in callmap.
|
* Raise an IPI cross call on CPUs in callmap.
|
||||||
*/
|
*/
|
||||||
extern void smp_cross_call(cpumask_t callmap);
|
extern void smp_cross_call(const struct cpumask *mask);
|
||||||
|
|
||||||
/*
|
|
||||||
* Broadcast a timer interrupt to the other CPUs.
|
|
||||||
*/
|
|
||||||
extern void smp_send_timer(void);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Broadcast a clock event to other CPUs.
|
* Broadcast a clock event to other CPUs.
|
||||||
*/
|
*/
|
||||||
extern void smp_timer_broadcast(cpumask_t mask);
|
extern void smp_timer_broadcast(const struct cpumask *mask);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Boot a secondary CPU, and assign it the specified idle task.
|
* Boot a secondary CPU, and assign it the specified idle task.
|
||||||
|
@ -102,7 +97,8 @@ extern int platform_cpu_kill(unsigned int cpu);
|
||||||
extern void platform_cpu_enable(unsigned int cpu);
|
extern void platform_cpu_enable(unsigned int cpu);
|
||||||
|
|
||||||
extern void arch_send_call_function_single_ipi(int cpu);
|
extern void arch_send_call_function_single_ipi(int cpu);
|
||||||
extern void arch_send_call_function_ipi(cpumask_t mask);
|
extern void arch_send_call_function_ipi_mask(const struct cpumask *mask);
|
||||||
|
#define arch_send_call_function_ipi_mask arch_send_call_function_ipi_mask
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Local timer interrupt handling function (can be IPI'ed).
|
* Local timer interrupt handling function (can be IPI'ed).
|
||||||
|
|
|
@ -326,14 +326,14 @@ void __init smp_prepare_boot_cpu(void)
|
||||||
per_cpu(cpu_data, cpu).idle = current;
|
per_cpu(cpu_data, cpu).idle = current;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void send_ipi_message(cpumask_t callmap, enum ipi_msg_type msg)
|
static void send_ipi_message(const struct cpumask *mask, enum ipi_msg_type msg)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
unsigned int cpu;
|
unsigned int cpu;
|
||||||
|
|
||||||
local_irq_save(flags);
|
local_irq_save(flags);
|
||||||
|
|
||||||
for_each_cpu_mask(cpu, callmap) {
|
for_each_cpu(cpu, mask) {
|
||||||
struct ipi_data *ipi = &per_cpu(ipi_data, cpu);
|
struct ipi_data *ipi = &per_cpu(ipi_data, cpu);
|
||||||
|
|
||||||
spin_lock(&ipi->lock);
|
spin_lock(&ipi->lock);
|
||||||
|
@ -344,19 +344,19 @@ static void send_ipi_message(cpumask_t callmap, enum ipi_msg_type msg)
|
||||||
/*
|
/*
|
||||||
* Call the platform specific cross-CPU call function.
|
* Call the platform specific cross-CPU call function.
|
||||||
*/
|
*/
|
||||||
smp_cross_call(callmap);
|
smp_cross_call(mask);
|
||||||
|
|
||||||
local_irq_restore(flags);
|
local_irq_restore(flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
void arch_send_call_function_ipi(cpumask_t mask)
|
void arch_send_call_function_ipi_mask(const struct cpumask *mask)
|
||||||
{
|
{
|
||||||
send_ipi_message(mask, IPI_CALL_FUNC);
|
send_ipi_message(mask, IPI_CALL_FUNC);
|
||||||
}
|
}
|
||||||
|
|
||||||
void arch_send_call_function_single_ipi(int cpu)
|
void arch_send_call_function_single_ipi(int cpu)
|
||||||
{
|
{
|
||||||
send_ipi_message(cpumask_of_cpu(cpu), IPI_CALL_FUNC_SINGLE);
|
send_ipi_message(cpumask_of(cpu), IPI_CALL_FUNC_SINGLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void show_ipi_list(struct seq_file *p)
|
void show_ipi_list(struct seq_file *p)
|
||||||
|
@ -498,17 +498,10 @@ asmlinkage void __exception do_IPI(struct pt_regs *regs)
|
||||||
|
|
||||||
void smp_send_reschedule(int cpu)
|
void smp_send_reschedule(int cpu)
|
||||||
{
|
{
|
||||||
send_ipi_message(cpumask_of_cpu(cpu), IPI_RESCHEDULE);
|
send_ipi_message(cpumask_of(cpu), IPI_RESCHEDULE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void smp_send_timer(void)
|
void smp_timer_broadcast(const struct cpumask *mask)
|
||||||
{
|
|
||||||
cpumask_t mask = cpu_online_map;
|
|
||||||
cpu_clear(smp_processor_id(), mask);
|
|
||||||
send_ipi_message(mask, IPI_TIMER);
|
|
||||||
}
|
|
||||||
|
|
||||||
void smp_timer_broadcast(cpumask_t mask)
|
|
||||||
{
|
{
|
||||||
send_ipi_message(mask, IPI_TIMER);
|
send_ipi_message(mask, IPI_TIMER);
|
||||||
}
|
}
|
||||||
|
@ -517,7 +510,7 @@ void smp_send_stop(void)
|
||||||
{
|
{
|
||||||
cpumask_t mask = cpu_online_map;
|
cpumask_t mask = cpu_online_map;
|
||||||
cpu_clear(smp_processor_id(), mask);
|
cpu_clear(smp_processor_id(), mask);
|
||||||
send_ipi_message(mask, IPI_CPU_STOP);
|
send_ipi_message(&mask, IPI_CPU_STOP);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -528,20 +521,17 @@ int setup_profiling_timer(unsigned int multiplier)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static void
|
||||||
on_each_cpu_mask(void (*func)(void *), void *info, int wait, cpumask_t mask)
|
on_each_cpu_mask(void (*func)(void *), void *info, int wait,
|
||||||
|
const struct cpumask *mask)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
|
||||||
|
|
||||||
preempt_disable();
|
preempt_disable();
|
||||||
|
|
||||||
ret = smp_call_function_mask(mask, func, info, wait);
|
smp_call_function_many(mask, func, info, wait);
|
||||||
if (cpu_isset(smp_processor_id(), mask))
|
if (cpumask_test_cpu(smp_processor_id(), mask))
|
||||||
func(info);
|
func(info);
|
||||||
|
|
||||||
preempt_enable();
|
preempt_enable();
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**********************************************************************/
|
/**********************************************************************/
|
||||||
|
@ -602,20 +592,17 @@ void flush_tlb_all(void)
|
||||||
|
|
||||||
void flush_tlb_mm(struct mm_struct *mm)
|
void flush_tlb_mm(struct mm_struct *mm)
|
||||||
{
|
{
|
||||||
cpumask_t mask = mm->cpu_vm_mask;
|
on_each_cpu_mask(ipi_flush_tlb_mm, mm, 1, &mm->cpu_vm_mask);
|
||||||
|
|
||||||
on_each_cpu_mask(ipi_flush_tlb_mm, mm, 1, mask);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void flush_tlb_page(struct vm_area_struct *vma, unsigned long uaddr)
|
void flush_tlb_page(struct vm_area_struct *vma, unsigned long uaddr)
|
||||||
{
|
{
|
||||||
cpumask_t mask = vma->vm_mm->cpu_vm_mask;
|
|
||||||
struct tlb_args ta;
|
struct tlb_args ta;
|
||||||
|
|
||||||
ta.ta_vma = vma;
|
ta.ta_vma = vma;
|
||||||
ta.ta_start = uaddr;
|
ta.ta_start = uaddr;
|
||||||
|
|
||||||
on_each_cpu_mask(ipi_flush_tlb_page, &ta, 1, mask);
|
on_each_cpu_mask(ipi_flush_tlb_page, &ta, 1, &vma->vm_mm->cpu_vm_mask);
|
||||||
}
|
}
|
||||||
|
|
||||||
void flush_tlb_kernel_page(unsigned long kaddr)
|
void flush_tlb_kernel_page(unsigned long kaddr)
|
||||||
|
@ -630,14 +617,13 @@ void flush_tlb_kernel_page(unsigned long kaddr)
|
||||||
void flush_tlb_range(struct vm_area_struct *vma,
|
void flush_tlb_range(struct vm_area_struct *vma,
|
||||||
unsigned long start, unsigned long end)
|
unsigned long start, unsigned long end)
|
||||||
{
|
{
|
||||||
cpumask_t mask = vma->vm_mm->cpu_vm_mask;
|
|
||||||
struct tlb_args ta;
|
struct tlb_args ta;
|
||||||
|
|
||||||
ta.ta_vma = vma;
|
ta.ta_vma = vma;
|
||||||
ta.ta_start = start;
|
ta.ta_start = start;
|
||||||
ta.ta_end = end;
|
ta.ta_end = end;
|
||||||
|
|
||||||
on_each_cpu_mask(ipi_flush_tlb_range, &ta, 1, mask);
|
on_each_cpu_mask(ipi_flush_tlb_range, &ta, 1, &vma->vm_mm->cpu_vm_mask);
|
||||||
}
|
}
|
||||||
|
|
||||||
void flush_tlb_kernel_range(unsigned long start, unsigned long end)
|
void flush_tlb_kernel_range(unsigned long start, unsigned long end)
|
||||||
|
|
25
arch/arm/mach-davinci/include/mach/asp.h
Normal file
25
arch/arm/mach-davinci/include/mach/asp.h
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
/*
|
||||||
|
* <mach/asp.h> - DaVinci Audio Serial Port support
|
||||||
|
*/
|
||||||
|
#ifndef __ASM_ARCH_DAVINCI_ASP_H
|
||||||
|
#define __ASM_ARCH_DAVINCI_ASP_H
|
||||||
|
|
||||||
|
#include <mach/irqs.h>
|
||||||
|
|
||||||
|
/* Bases of register banks */
|
||||||
|
#define DAVINCI_ASP0_BASE 0x01E02000
|
||||||
|
#define DAVINCI_ASP1_BASE 0x01E04000
|
||||||
|
|
||||||
|
/* EDMA channels */
|
||||||
|
#define DAVINCI_DMA_ASP0_TX 2
|
||||||
|
#define DAVINCI_DMA_ASP0_RX 3
|
||||||
|
#define DAVINCI_DMA_ASP1_TX 8
|
||||||
|
#define DAVINCI_DMA_ASP1_RX 9
|
||||||
|
|
||||||
|
/* Interrupts */
|
||||||
|
#define DAVINCI_ASP0_RX_INT IRQ_MBRINT
|
||||||
|
#define DAVINCI_ASP0_TX_INT IRQ_MBXINT
|
||||||
|
#define DAVINCI_ASP1_RX_INT IRQ_MBRINT
|
||||||
|
#define DAVINCI_ASP1_TX_INT IRQ_MBXINT
|
||||||
|
|
||||||
|
#endif /* __ASM_ARCH_DAVINCI_ASP_H */
|
|
@ -21,15 +21,50 @@
|
||||||
#include <asm/div64.h>
|
#include <asm/div64.h>
|
||||||
#include <mach/hardware.h>
|
#include <mach/hardware.h>
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The EP93xx has two external crystal oscillators. To generate the
|
||||||
|
* required high-frequency clocks, the processor uses two phase-locked-
|
||||||
|
* loops (PLLs) to multiply the incoming external clock signal to much
|
||||||
|
* higher frequencies that are then divided down by programmable dividers
|
||||||
|
* to produce the needed clocks. The PLLs operate independently of one
|
||||||
|
* another.
|
||||||
|
*/
|
||||||
|
#define EP93XX_EXT_CLK_RATE 14745600
|
||||||
|
#define EP93XX_EXT_RTC_RATE 32768
|
||||||
|
|
||||||
|
|
||||||
struct clk {
|
struct clk {
|
||||||
unsigned long rate;
|
unsigned long rate;
|
||||||
int users;
|
int users;
|
||||||
|
int sw_locked;
|
||||||
u32 enable_reg;
|
u32 enable_reg;
|
||||||
u32 enable_mask;
|
u32 enable_mask;
|
||||||
|
|
||||||
|
unsigned long (*get_rate)(struct clk *clk);
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct clk clk_uart = {
|
|
||||||
.rate = 14745600,
|
static unsigned long get_uart_rate(struct clk *clk);
|
||||||
|
|
||||||
|
|
||||||
|
static struct clk clk_uart1 = {
|
||||||
|
.sw_locked = 1,
|
||||||
|
.enable_reg = EP93XX_SYSCON_DEVICE_CONFIG,
|
||||||
|
.enable_mask = EP93XX_SYSCON_DEVICE_CONFIG_U1EN,
|
||||||
|
.get_rate = get_uart_rate,
|
||||||
|
};
|
||||||
|
static struct clk clk_uart2 = {
|
||||||
|
.sw_locked = 1,
|
||||||
|
.enable_reg = EP93XX_SYSCON_DEVICE_CONFIG,
|
||||||
|
.enable_mask = EP93XX_SYSCON_DEVICE_CONFIG_U2EN,
|
||||||
|
.get_rate = get_uart_rate,
|
||||||
|
};
|
||||||
|
static struct clk clk_uart3 = {
|
||||||
|
.sw_locked = 1,
|
||||||
|
.enable_reg = EP93XX_SYSCON_DEVICE_CONFIG,
|
||||||
|
.enable_mask = EP93XX_SYSCON_DEVICE_CONFIG_U3EN,
|
||||||
|
.get_rate = get_uart_rate,
|
||||||
};
|
};
|
||||||
static struct clk clk_pll1;
|
static struct clk clk_pll1;
|
||||||
static struct clk clk_f;
|
static struct clk clk_f;
|
||||||
|
@ -95,9 +130,9 @@ static struct clk clk_m2m1 = {
|
||||||
{ .dev_id = dev, .con_id = con, .clk = ck }
|
{ .dev_id = dev, .con_id = con, .clk = ck }
|
||||||
|
|
||||||
static struct clk_lookup clocks[] = {
|
static struct clk_lookup clocks[] = {
|
||||||
INIT_CK("apb:uart1", NULL, &clk_uart),
|
INIT_CK("apb:uart1", NULL, &clk_uart1),
|
||||||
INIT_CK("apb:uart2", NULL, &clk_uart),
|
INIT_CK("apb:uart2", NULL, &clk_uart2),
|
||||||
INIT_CK("apb:uart3", NULL, &clk_uart),
|
INIT_CK("apb:uart3", NULL, &clk_uart3),
|
||||||
INIT_CK(NULL, "pll1", &clk_pll1),
|
INIT_CK(NULL, "pll1", &clk_pll1),
|
||||||
INIT_CK(NULL, "fclk", &clk_f),
|
INIT_CK(NULL, "fclk", &clk_f),
|
||||||
INIT_CK(NULL, "hclk", &clk_h),
|
INIT_CK(NULL, "hclk", &clk_h),
|
||||||
|
@ -125,6 +160,8 @@ int clk_enable(struct clk *clk)
|
||||||
u32 value;
|
u32 value;
|
||||||
|
|
||||||
value = __raw_readl(clk->enable_reg);
|
value = __raw_readl(clk->enable_reg);
|
||||||
|
if (clk->sw_locked)
|
||||||
|
__raw_writel(0xaa, EP93XX_SYSCON_SWLOCK);
|
||||||
__raw_writel(value | clk->enable_mask, clk->enable_reg);
|
__raw_writel(value | clk->enable_mask, clk->enable_reg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -138,13 +175,29 @@ void clk_disable(struct clk *clk)
|
||||||
u32 value;
|
u32 value;
|
||||||
|
|
||||||
value = __raw_readl(clk->enable_reg);
|
value = __raw_readl(clk->enable_reg);
|
||||||
|
if (clk->sw_locked)
|
||||||
|
__raw_writel(0xaa, EP93XX_SYSCON_SWLOCK);
|
||||||
__raw_writel(value & ~clk->enable_mask, clk->enable_reg);
|
__raw_writel(value & ~clk->enable_mask, clk->enable_reg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(clk_disable);
|
EXPORT_SYMBOL(clk_disable);
|
||||||
|
|
||||||
|
static unsigned long get_uart_rate(struct clk *clk)
|
||||||
|
{
|
||||||
|
u32 value;
|
||||||
|
|
||||||
|
value = __raw_readl(EP93XX_SYSCON_CLOCK_CONTROL);
|
||||||
|
if (value & EP93XX_SYSCON_CLOCK_UARTBAUD)
|
||||||
|
return EP93XX_EXT_CLK_RATE;
|
||||||
|
else
|
||||||
|
return EP93XX_EXT_CLK_RATE / 2;
|
||||||
|
}
|
||||||
|
|
||||||
unsigned long clk_get_rate(struct clk *clk)
|
unsigned long clk_get_rate(struct clk *clk)
|
||||||
{
|
{
|
||||||
|
if (clk->get_rate)
|
||||||
|
return clk->get_rate(clk);
|
||||||
|
|
||||||
return clk->rate;
|
return clk->rate;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(clk_get_rate);
|
EXPORT_SYMBOL(clk_get_rate);
|
||||||
|
@ -162,7 +215,7 @@ static unsigned long calc_pll_rate(u32 config_word)
|
||||||
unsigned long long rate;
|
unsigned long long rate;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
rate = 14745600;
|
rate = EP93XX_EXT_CLK_RATE;
|
||||||
rate *= ((config_word >> 11) & 0x1f) + 1; /* X1FBD */
|
rate *= ((config_word >> 11) & 0x1f) + 1; /* X1FBD */
|
||||||
rate *= ((config_word >> 5) & 0x3f) + 1; /* X2FBD */
|
rate *= ((config_word >> 5) & 0x3f) + 1; /* X2FBD */
|
||||||
do_div(rate, (config_word & 0x1f) + 1); /* X2IPD */
|
do_div(rate, (config_word & 0x1f) + 1); /* X2IPD */
|
||||||
|
@ -195,7 +248,7 @@ static int __init ep93xx_clock_init(void)
|
||||||
|
|
||||||
value = __raw_readl(EP93XX_SYSCON_CLOCK_SET1);
|
value = __raw_readl(EP93XX_SYSCON_CLOCK_SET1);
|
||||||
if (!(value & 0x00800000)) { /* PLL1 bypassed? */
|
if (!(value & 0x00800000)) { /* PLL1 bypassed? */
|
||||||
clk_pll1.rate = 14745600;
|
clk_pll1.rate = EP93XX_EXT_CLK_RATE;
|
||||||
} else {
|
} else {
|
||||||
clk_pll1.rate = calc_pll_rate(value);
|
clk_pll1.rate = calc_pll_rate(value);
|
||||||
}
|
}
|
||||||
|
@ -206,7 +259,7 @@ static int __init ep93xx_clock_init(void)
|
||||||
|
|
||||||
value = __raw_readl(EP93XX_SYSCON_CLOCK_SET2);
|
value = __raw_readl(EP93XX_SYSCON_CLOCK_SET2);
|
||||||
if (!(value & 0x00080000)) { /* PLL2 bypassed? */
|
if (!(value & 0x00080000)) { /* PLL2 bypassed? */
|
||||||
clk_pll2.rate = 14745600;
|
clk_pll2.rate = EP93XX_EXT_CLK_RATE;
|
||||||
} else if (value & 0x00040000) { /* PLL2 enabled? */
|
} else if (value & 0x00040000) { /* PLL2 enabled? */
|
||||||
clk_pll2.rate = calc_pll_rate(value);
|
clk_pll2.rate = calc_pll_rate(value);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -159,7 +159,10 @@
|
||||||
#define EP93XX_SYSCON_CLOCK_SET1 EP93XX_SYSCON_REG(0x20)
|
#define EP93XX_SYSCON_CLOCK_SET1 EP93XX_SYSCON_REG(0x20)
|
||||||
#define EP93XX_SYSCON_CLOCK_SET2 EP93XX_SYSCON_REG(0x24)
|
#define EP93XX_SYSCON_CLOCK_SET2 EP93XX_SYSCON_REG(0x24)
|
||||||
#define EP93XX_SYSCON_DEVICE_CONFIG EP93XX_SYSCON_REG(0x80)
|
#define EP93XX_SYSCON_DEVICE_CONFIG EP93XX_SYSCON_REG(0x80)
|
||||||
#define EP93XX_SYSCON_DEVICE_CONFIG_CRUNCH_ENABLE 0x00800000
|
#define EP93XX_SYSCON_DEVICE_CONFIG_U3EN (1<<24)
|
||||||
|
#define EP93XX_SYSCON_DEVICE_CONFIG_CRUNCH_ENABLE (1<<23)
|
||||||
|
#define EP93XX_SYSCON_DEVICE_CONFIG_U2EN (1<<20)
|
||||||
|
#define EP93XX_SYSCON_DEVICE_CONFIG_U1EN (1<<18)
|
||||||
#define EP93XX_SYSCON_SWLOCK EP93XX_SYSCON_REG(0xc0)
|
#define EP93XX_SYSCON_SWLOCK EP93XX_SYSCON_REG(0xc0)
|
||||||
|
|
||||||
#define EP93XX_WATCHDOG_BASE (EP93XX_APB_VIRT_BASE + 0x00140000)
|
#define EP93XX_WATCHDOG_BASE (EP93XX_APB_VIRT_BASE + 0x00140000)
|
||||||
|
|
|
@ -121,7 +121,7 @@ static struct clk uartclk = {
|
||||||
.rate = 14745600,
|
.rate = 14745600,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct clk_lookup lookups[] __initdata = {
|
static struct clk_lookup lookups[] = {
|
||||||
{ /* UART0 */
|
{ /* UART0 */
|
||||||
.dev_id = "mb:16",
|
.dev_id = "mb:16",
|
||||||
.clk = &uartclk,
|
.clk = &uartclk,
|
||||||
|
|
|
@ -714,7 +714,7 @@ static int __init npe_init_module(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!found)
|
if (!found)
|
||||||
return -ENOSYS;
|
return -ENODEV;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
|
|
||||||
/* IO_START and IO_BASE are defined in hardware.h */
|
/* IO_START and IO_BASE are defined in hardware.h */
|
||||||
|
|
||||||
#define SYS_CLOCK_START (IO_START + SYS_CLCOK_OFF) /* Physical address */
|
#define SYS_CLOCK_START (IO_START + SYS_CLOCK_OFF) /* Physical address */
|
||||||
#define SYS_CLOCK_BASE (IO_BASE + SYS_CLOCK_OFF) /* Virtual address */
|
#define SYS_CLOCK_BASE (IO_BASE + SYS_CLOCK_OFF) /* Virtual address */
|
||||||
|
|
||||||
/* Define the interface to the SYS_CLOCK */
|
/* Define the interface to the SYS_CLOCK */
|
||||||
|
|
|
@ -103,10 +103,10 @@ static struct omap_clk omap24xx_clks[] = {
|
||||||
CLK(NULL, "mdm_ick", &mdm_ick, CK_243X),
|
CLK(NULL, "mdm_ick", &mdm_ick, CK_243X),
|
||||||
CLK(NULL, "mdm_osc_ck", &mdm_osc_ck, CK_243X),
|
CLK(NULL, "mdm_osc_ck", &mdm_osc_ck, CK_243X),
|
||||||
/* DSS domain clocks */
|
/* DSS domain clocks */
|
||||||
CLK(NULL, "dss_ick", &dss_ick, CK_243X | CK_242X),
|
CLK("omapfb", "ick", &dss_ick, CK_243X | CK_242X),
|
||||||
CLK(NULL, "dss1_fck", &dss1_fck, CK_243X | CK_242X),
|
CLK("omapfb", "dss1_fck", &dss1_fck, CK_243X | CK_242X),
|
||||||
CLK(NULL, "dss2_fck", &dss2_fck, CK_243X | CK_242X),
|
CLK("omapfb", "dss2_fck", &dss2_fck, CK_243X | CK_242X),
|
||||||
CLK(NULL, "dss_54m_fck", &dss_54m_fck, CK_243X | CK_242X),
|
CLK("omapfb", "tv_fck", &dss_54m_fck, CK_243X | CK_242X),
|
||||||
/* L3 domain clocks */
|
/* L3 domain clocks */
|
||||||
CLK(NULL, "core_l3_ck", &core_l3_ck, CK_243X | CK_242X),
|
CLK(NULL, "core_l3_ck", &core_l3_ck, CK_243X | CK_242X),
|
||||||
CLK(NULL, "ssi_fck", &ssi_ssr_sst_fck, CK_243X | CK_242X),
|
CLK(NULL, "ssi_fck", &ssi_ssr_sst_fck, CK_243X | CK_242X),
|
||||||
|
@ -206,7 +206,7 @@ static struct omap_clk omap24xx_clks[] = {
|
||||||
CLK(NULL, "aes_ick", &aes_ick, CK_243X | CK_242X),
|
CLK(NULL, "aes_ick", &aes_ick, CK_243X | CK_242X),
|
||||||
CLK(NULL, "pka_ick", &pka_ick, CK_243X | CK_242X),
|
CLK(NULL, "pka_ick", &pka_ick, CK_243X | CK_242X),
|
||||||
CLK(NULL, "usb_fck", &usb_fck, CK_243X | CK_242X),
|
CLK(NULL, "usb_fck", &usb_fck, CK_243X | CK_242X),
|
||||||
CLK(NULL, "usbhs_ick", &usbhs_ick, CK_243X),
|
CLK("musb_hdrc", "ick", &usbhs_ick, CK_243X),
|
||||||
CLK("mmci-omap-hs.0", "ick", &mmchs1_ick, CK_243X),
|
CLK("mmci-omap-hs.0", "ick", &mmchs1_ick, CK_243X),
|
||||||
CLK("mmci-omap-hs.0", "fck", &mmchs1_fck, CK_243X),
|
CLK("mmci-omap-hs.0", "fck", &mmchs1_fck, CK_243X),
|
||||||
CLK("mmci-omap-hs.1", "ick", &mmchs2_ick, CK_243X),
|
CLK("mmci-omap-hs.1", "ick", &mmchs2_ick, CK_243X),
|
||||||
|
|
|
@ -157,7 +157,7 @@ static struct omap_clk omap34xx_clks[] = {
|
||||||
CLK(NULL, "ssi_ssr_fck", &ssi_ssr_fck, CK_343X),
|
CLK(NULL, "ssi_ssr_fck", &ssi_ssr_fck, CK_343X),
|
||||||
CLK(NULL, "ssi_sst_fck", &ssi_sst_fck, CK_343X),
|
CLK(NULL, "ssi_sst_fck", &ssi_sst_fck, CK_343X),
|
||||||
CLK(NULL, "core_l3_ick", &core_l3_ick, CK_343X),
|
CLK(NULL, "core_l3_ick", &core_l3_ick, CK_343X),
|
||||||
CLK(NULL, "hsotgusb_ick", &hsotgusb_ick, CK_343X),
|
CLK("musb_hdrc", "ick", &hsotgusb_ick, CK_343X),
|
||||||
CLK(NULL, "sdrc_ick", &sdrc_ick, CK_343X),
|
CLK(NULL, "sdrc_ick", &sdrc_ick, CK_343X),
|
||||||
CLK(NULL, "gpmc_fck", &gpmc_fck, CK_343X),
|
CLK(NULL, "gpmc_fck", &gpmc_fck, CK_343X),
|
||||||
CLK(NULL, "security_l3_ick", &security_l3_ick, CK_343X),
|
CLK(NULL, "security_l3_ick", &security_l3_ick, CK_343X),
|
||||||
|
@ -197,11 +197,11 @@ static struct omap_clk omap34xx_clks[] = {
|
||||||
CLK("omap_rng", "ick", &rng_ick, CK_343X),
|
CLK("omap_rng", "ick", &rng_ick, CK_343X),
|
||||||
CLK(NULL, "sha11_ick", &sha11_ick, CK_343X),
|
CLK(NULL, "sha11_ick", &sha11_ick, CK_343X),
|
||||||
CLK(NULL, "des1_ick", &des1_ick, CK_343X),
|
CLK(NULL, "des1_ick", &des1_ick, CK_343X),
|
||||||
CLK(NULL, "dss1_alwon_fck", &dss1_alwon_fck, CK_343X),
|
CLK("omapfb", "dss1_fck", &dss1_alwon_fck, CK_343X),
|
||||||
CLK(NULL, "dss_tv_fck", &dss_tv_fck, CK_343X),
|
CLK("omapfb", "tv_fck", &dss_tv_fck, CK_343X),
|
||||||
CLK(NULL, "dss_96m_fck", &dss_96m_fck, CK_343X),
|
CLK("omapfb", "video_fck", &dss_96m_fck, CK_343X),
|
||||||
CLK(NULL, "dss2_alwon_fck", &dss2_alwon_fck, CK_343X),
|
CLK("omapfb", "dss2_fck", &dss2_alwon_fck, CK_343X),
|
||||||
CLK(NULL, "dss_ick", &dss_ick, CK_343X),
|
CLK("omapfb", "ick", &dss_ick, CK_343X),
|
||||||
CLK(NULL, "cam_mclk", &cam_mclk, CK_343X),
|
CLK(NULL, "cam_mclk", &cam_mclk, CK_343X),
|
||||||
CLK(NULL, "cam_ick", &cam_ick, CK_343X),
|
CLK(NULL, "cam_ick", &cam_ick, CK_343X),
|
||||||
CLK(NULL, "csi2_96m_fck", &csi2_96m_fck, CK_343X),
|
CLK(NULL, "csi2_96m_fck", &csi2_96m_fck, CK_343X),
|
||||||
|
|
|
@ -2182,7 +2182,7 @@ static struct clk wkup_32k_fck = {
|
||||||
|
|
||||||
static struct clk gpio1_dbck = {
|
static struct clk gpio1_dbck = {
|
||||||
.name = "gpio1_dbck",
|
.name = "gpio1_dbck",
|
||||||
.ops = &clkops_omap2_dflt_wait,
|
.ops = &clkops_omap2_dflt,
|
||||||
.parent = &wkup_32k_fck,
|
.parent = &wkup_32k_fck,
|
||||||
.enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_FCLKEN),
|
.enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_FCLKEN),
|
||||||
.enable_bit = OMAP3430_EN_GPIO1_SHIFT,
|
.enable_bit = OMAP3430_EN_GPIO1_SHIFT,
|
||||||
|
@ -2427,7 +2427,7 @@ static struct clk per_32k_alwon_fck = {
|
||||||
|
|
||||||
static struct clk gpio6_dbck = {
|
static struct clk gpio6_dbck = {
|
||||||
.name = "gpio6_dbck",
|
.name = "gpio6_dbck",
|
||||||
.ops = &clkops_omap2_dflt_wait,
|
.ops = &clkops_omap2_dflt,
|
||||||
.parent = &per_32k_alwon_fck,
|
.parent = &per_32k_alwon_fck,
|
||||||
.enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
|
.enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
|
||||||
.enable_bit = OMAP3430_EN_GPIO6_SHIFT,
|
.enable_bit = OMAP3430_EN_GPIO6_SHIFT,
|
||||||
|
@ -2437,7 +2437,7 @@ static struct clk gpio6_dbck = {
|
||||||
|
|
||||||
static struct clk gpio5_dbck = {
|
static struct clk gpio5_dbck = {
|
||||||
.name = "gpio5_dbck",
|
.name = "gpio5_dbck",
|
||||||
.ops = &clkops_omap2_dflt_wait,
|
.ops = &clkops_omap2_dflt,
|
||||||
.parent = &per_32k_alwon_fck,
|
.parent = &per_32k_alwon_fck,
|
||||||
.enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
|
.enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
|
||||||
.enable_bit = OMAP3430_EN_GPIO5_SHIFT,
|
.enable_bit = OMAP3430_EN_GPIO5_SHIFT,
|
||||||
|
@ -2447,7 +2447,7 @@ static struct clk gpio5_dbck = {
|
||||||
|
|
||||||
static struct clk gpio4_dbck = {
|
static struct clk gpio4_dbck = {
|
||||||
.name = "gpio4_dbck",
|
.name = "gpio4_dbck",
|
||||||
.ops = &clkops_omap2_dflt_wait,
|
.ops = &clkops_omap2_dflt,
|
||||||
.parent = &per_32k_alwon_fck,
|
.parent = &per_32k_alwon_fck,
|
||||||
.enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
|
.enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
|
||||||
.enable_bit = OMAP3430_EN_GPIO4_SHIFT,
|
.enable_bit = OMAP3430_EN_GPIO4_SHIFT,
|
||||||
|
@ -2457,7 +2457,7 @@ static struct clk gpio4_dbck = {
|
||||||
|
|
||||||
static struct clk gpio3_dbck = {
|
static struct clk gpio3_dbck = {
|
||||||
.name = "gpio3_dbck",
|
.name = "gpio3_dbck",
|
||||||
.ops = &clkops_omap2_dflt_wait,
|
.ops = &clkops_omap2_dflt,
|
||||||
.parent = &per_32k_alwon_fck,
|
.parent = &per_32k_alwon_fck,
|
||||||
.enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
|
.enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
|
||||||
.enable_bit = OMAP3430_EN_GPIO3_SHIFT,
|
.enable_bit = OMAP3430_EN_GPIO3_SHIFT,
|
||||||
|
@ -2467,7 +2467,7 @@ static struct clk gpio3_dbck = {
|
||||||
|
|
||||||
static struct clk gpio2_dbck = {
|
static struct clk gpio2_dbck = {
|
||||||
.name = "gpio2_dbck",
|
.name = "gpio2_dbck",
|
||||||
.ops = &clkops_omap2_dflt_wait,
|
.ops = &clkops_omap2_dflt,
|
||||||
.parent = &per_32k_alwon_fck,
|
.parent = &per_32k_alwon_fck,
|
||||||
.enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
|
.enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
|
||||||
.enable_bit = OMAP3430_EN_GPIO2_SHIFT,
|
.enable_bit = OMAP3430_EN_GPIO2_SHIFT,
|
||||||
|
|
|
@ -354,10 +354,12 @@ static void omap_init_mcspi(void)
|
||||||
platform_device_register(&omap2_mcspi1);
|
platform_device_register(&omap2_mcspi1);
|
||||||
platform_device_register(&omap2_mcspi2);
|
platform_device_register(&omap2_mcspi2);
|
||||||
#if defined(CONFIG_ARCH_OMAP2430) || defined(CONFIG_ARCH_OMAP3)
|
#if defined(CONFIG_ARCH_OMAP2430) || defined(CONFIG_ARCH_OMAP3)
|
||||||
platform_device_register(&omap2_mcspi3);
|
if (cpu_is_omap2430() || cpu_is_omap343x())
|
||||||
|
platform_device_register(&omap2_mcspi3);
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_ARCH_OMAP3
|
#ifdef CONFIG_ARCH_OMAP3
|
||||||
platform_device_register(&omap2_mcspi4);
|
if (cpu_is_omap343x())
|
||||||
|
platform_device_register(&omap2_mcspi4);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -409,7 +409,7 @@
|
||||||
/* PM_PREPWSTST_CAM specific bits */
|
/* PM_PREPWSTST_CAM specific bits */
|
||||||
|
|
||||||
/* PM_PWSTCTRL_USBHOST specific bits */
|
/* PM_PWSTCTRL_USBHOST specific bits */
|
||||||
#define OMAP3430ES2_SAVEANDRESTORE_SHIFT (1 << 4)
|
#define OMAP3430ES2_SAVEANDRESTORE_SHIFT 4
|
||||||
|
|
||||||
/* RM_RSTST_PER specific bits */
|
/* RM_RSTST_PER specific bits */
|
||||||
|
|
||||||
|
|
|
@ -187,7 +187,7 @@ int tusb6010_platform_retime(unsigned is_refclk)
|
||||||
unsigned sysclk_ps;
|
unsigned sysclk_ps;
|
||||||
int status;
|
int status;
|
||||||
|
|
||||||
if (!refclk_psec || sysclk_ps == 0)
|
if (!refclk_psec || fclk_ps == 0)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
sysclk_ps = is_refclk ? refclk_psec : TUSB6010_OSCCLK_60;
|
sysclk_ps = is_refclk ? refclk_psec : TUSB6010_OSCCLK_60;
|
||||||
|
|
|
@ -46,6 +46,7 @@
|
||||||
#include <mach/audio.h>
|
#include <mach/audio.h>
|
||||||
#include <mach/pxafb.h>
|
#include <mach/pxafb.h>
|
||||||
#include <mach/i2c.h>
|
#include <mach/i2c.h>
|
||||||
|
#include <mach/regs-uart.h>
|
||||||
#include <mach/viper.h>
|
#include <mach/viper.h>
|
||||||
|
|
||||||
#include <asm/setup.h>
|
#include <asm/setup.h>
|
||||||
|
|
|
@ -750,14 +750,6 @@ void __init realview_timer_init(unsigned int timer_irq)
|
||||||
{
|
{
|
||||||
u32 val;
|
u32 val;
|
||||||
|
|
||||||
#ifdef CONFIG_GENERIC_CLOCKEVENTS_BROADCAST
|
|
||||||
/*
|
|
||||||
* The dummy clock device has to be registered before the main device
|
|
||||||
* so that the latter will broadcast the clock events
|
|
||||||
*/
|
|
||||||
local_timer_setup();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* set clock frequency:
|
* set clock frequency:
|
||||||
* REALVIEW_REFCLK is 32KHz
|
* REALVIEW_REFCLK is 32KHz
|
||||||
|
|
|
@ -15,16 +15,9 @@
|
||||||
/*
|
/*
|
||||||
* We use IRQ1 as the IPI
|
* We use IRQ1 as the IPI
|
||||||
*/
|
*/
|
||||||
static inline void smp_cross_call(cpumask_t callmap)
|
static inline void smp_cross_call(const struct cpumask *mask)
|
||||||
{
|
|
||||||
gic_raise_softirq(callmap, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Do nothing on MPcore.
|
|
||||||
*/
|
|
||||||
static inline void smp_cross_call_done(cpumask_t callmap)
|
|
||||||
{
|
{
|
||||||
|
gic_raise_softirq(mask, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -189,8 +189,10 @@ void __cpuinit local_timer_setup(void)
|
||||||
struct clock_event_device *clk = &per_cpu(local_clockevent, cpu);
|
struct clock_event_device *clk = &per_cpu(local_clockevent, cpu);
|
||||||
|
|
||||||
clk->name = "dummy_timer";
|
clk->name = "dummy_timer";
|
||||||
clk->features = CLOCK_EVT_FEAT_DUMMY;
|
clk->features = CLOCK_EVT_FEAT_ONESHOT |
|
||||||
clk->rating = 200;
|
CLOCK_EVT_FEAT_PERIODIC |
|
||||||
|
CLOCK_EVT_FEAT_DUMMY;
|
||||||
|
clk->rating = 400;
|
||||||
clk->mult = 1;
|
clk->mult = 1;
|
||||||
clk->set_mode = dummy_timer_set_mode;
|
clk->set_mode = dummy_timer_set_mode;
|
||||||
clk->broadcast = smp_timer_broadcast;
|
clk->broadcast = smp_timer_broadcast;
|
||||||
|
|
|
@ -77,13 +77,6 @@ void __cpuinit platform_secondary_init(unsigned int cpu)
|
||||||
{
|
{
|
||||||
trace_hardirqs_off();
|
trace_hardirqs_off();
|
||||||
|
|
||||||
/*
|
|
||||||
* the primary core may have used a "cross call" soft interrupt
|
|
||||||
* to get this processor out of WFI in the BootMonitor - make
|
|
||||||
* sure that we are no longer being sent this soft interrupt
|
|
||||||
*/
|
|
||||||
smp_cross_call_done(cpumask_of_cpu(cpu));
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* if any interrupts are already enabled for the primary
|
* if any interrupts are already enabled for the primary
|
||||||
* core (e.g. timer irq), then they will not have been enabled
|
* core (e.g. timer irq), then they will not have been enabled
|
||||||
|
@ -136,7 +129,7 @@ int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
|
||||||
* Use smp_cross_call() for this, since there's little
|
* Use smp_cross_call() for this, since there's little
|
||||||
* point duplicating the code here
|
* point duplicating the code here
|
||||||
*/
|
*/
|
||||||
smp_cross_call(cpumask_of_cpu(cpu));
|
smp_cross_call(cpumask_of(cpu));
|
||||||
|
|
||||||
timeout = jiffies + (1 * HZ);
|
timeout = jiffies + (1 * HZ);
|
||||||
while (time_before(jiffies, timeout)) {
|
while (time_before(jiffies, timeout)) {
|
||||||
|
@ -224,11 +217,9 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
|
||||||
if (max_cpus > ncores)
|
if (max_cpus > ncores)
|
||||||
max_cpus = ncores;
|
max_cpus = ncores;
|
||||||
|
|
||||||
#ifdef CONFIG_LOCAL_TIMERS
|
#if defined(CONFIG_LOCAL_TIMERS) || defined(CONFIG_GENERIC_CLOCKEVENTS_BROADCAST)
|
||||||
/*
|
/*
|
||||||
* Enable the local timer for primary CPU. If the device is
|
* Enable the local timer or broadcast device for the boot CPU.
|
||||||
* dummy (!CONFIG_LOCAL_TIMERS), it was already registers in
|
|
||||||
* realview_timer_init
|
|
||||||
*/
|
*/
|
||||||
local_timer_setup();
|
local_timer_setup();
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -588,8 +588,6 @@ static void __init bast_map_io(void)
|
||||||
|
|
||||||
s3c_device_nand.dev.platform_data = &bast_nand_info;
|
s3c_device_nand.dev.platform_data = &bast_nand_info;
|
||||||
|
|
||||||
s3c_i2c0_set_platdata(&bast_i2c_info);
|
|
||||||
|
|
||||||
s3c24xx_init_io(bast_iodesc, ARRAY_SIZE(bast_iodesc));
|
s3c24xx_init_io(bast_iodesc, ARRAY_SIZE(bast_iodesc));
|
||||||
s3c24xx_init_clocks(0);
|
s3c24xx_init_clocks(0);
|
||||||
s3c24xx_init_uarts(bast_uartcfgs, ARRAY_SIZE(bast_uartcfgs));
|
s3c24xx_init_uarts(bast_uartcfgs, ARRAY_SIZE(bast_uartcfgs));
|
||||||
|
@ -602,6 +600,7 @@ static void __init bast_init(void)
|
||||||
sysdev_class_register(&bast_pm_sysclass);
|
sysdev_class_register(&bast_pm_sysclass);
|
||||||
sysdev_register(&bast_pm_sysdev);
|
sysdev_register(&bast_pm_sysdev);
|
||||||
|
|
||||||
|
s3c_i2c0_set_platdata(&bast_i2c_info);
|
||||||
s3c24xx_fb_set_platdata(&bast_fb_info);
|
s3c24xx_fb_set_platdata(&bast_fb_info);
|
||||||
platform_add_devices(bast_devices, ARRAY_SIZE(bast_devices));
|
platform_add_devices(bast_devices, ARRAY_SIZE(bast_devices));
|
||||||
|
|
||||||
|
|
|
@ -413,7 +413,7 @@ static struct clk ref24_clk = {
|
||||||
.rate = 24000000,
|
.rate = 24000000,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct clk_lookup lookups[] __initdata = {
|
static struct clk_lookup lookups[] = {
|
||||||
{ /* UART0 */
|
{ /* UART0 */
|
||||||
.dev_id = "dev:f1",
|
.dev_id = "dev:f1",
|
||||||
.clk = &ref24_clk,
|
.clk = &ref24_clk,
|
||||||
|
|
|
@ -114,4 +114,8 @@ extern unsigned int SingleCPDO(struct roundingData *roundData,
|
||||||
extern unsigned int DoubleCPDO(struct roundingData *roundData,
|
extern unsigned int DoubleCPDO(struct roundingData *roundData,
|
||||||
const unsigned int opcode, FPREG * rFd);
|
const unsigned int opcode, FPREG * rFd);
|
||||||
|
|
||||||
|
/* extneded_cpdo.c */
|
||||||
|
extern unsigned int ExtendedCPDO(struct roundingData *roundData,
|
||||||
|
const unsigned int opcode, FPREG * rFd);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -27,10 +27,6 @@
|
||||||
#include "fpmodule.inl"
|
#include "fpmodule.inl"
|
||||||
#include "softfloat.h"
|
#include "softfloat.h"
|
||||||
|
|
||||||
#ifdef CONFIG_FPE_NWFPE_XP
|
|
||||||
extern flag floatx80_is_nan(floatx80);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
unsigned int PerformFLT(const unsigned int opcode);
|
unsigned int PerformFLT(const unsigned int opcode);
|
||||||
unsigned int PerformFIX(const unsigned int opcode);
|
unsigned int PerformFIX(const unsigned int opcode);
|
||||||
|
|
||||||
|
|
|
@ -226,6 +226,8 @@ char floatx80_le_quiet( floatx80, floatx80 );
|
||||||
char floatx80_lt_quiet( floatx80, floatx80 );
|
char floatx80_lt_quiet( floatx80, floatx80 );
|
||||||
char floatx80_is_signaling_nan( floatx80 );
|
char floatx80_is_signaling_nan( floatx80 );
|
||||||
|
|
||||||
|
extern flag floatx80_is_nan(floatx80);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static inline flag extractFloat32Sign(float32 a)
|
static inline flag extractFloat32Sign(float32 a)
|
||||||
|
|
|
@ -206,9 +206,10 @@ void __init omapfb_reserve_sdram(void)
|
||||||
config_invalid = 1;
|
config_invalid = 1;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (rg.paddr)
|
if (rg.paddr) {
|
||||||
reserve_bootmem(rg.paddr, rg.size, BOOTMEM_DEFAULT);
|
reserve_bootmem(rg.paddr, rg.size, BOOTMEM_DEFAULT);
|
||||||
reserved += rg.size;
|
reserved += rg.size;
|
||||||
|
}
|
||||||
omapfb_config.mem_desc.region[i] = rg;
|
omapfb_config.mem_desc.region[i] = rg;
|
||||||
configured_regions++;
|
configured_regions++;
|
||||||
}
|
}
|
||||||
|
|
|
@ -307,7 +307,7 @@ static inline int gpio_valid(int gpio)
|
||||||
return 0;
|
return 0;
|
||||||
if (cpu_is_omap24xx() && gpio < 128)
|
if (cpu_is_omap24xx() && gpio < 128)
|
||||||
return 0;
|
return 0;
|
||||||
if (cpu_is_omap34xx() && gpio < 160)
|
if (cpu_is_omap34xx() && gpio < 192)
|
||||||
return 0;
|
return 0;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -306,8 +306,6 @@ struct clk s3c24xx_uclk = {
|
||||||
|
|
||||||
int s3c24xx_register_clock(struct clk *clk)
|
int s3c24xx_register_clock(struct clk *clk)
|
||||||
{
|
{
|
||||||
clk->owner = THIS_MODULE;
|
|
||||||
|
|
||||||
if (clk->enable == NULL)
|
if (clk->enable == NULL)
|
||||||
clk->enable = clk_null_enable;
|
clk->enable = clk_null_enable;
|
||||||
|
|
||||||
|
|
|
@ -1235,7 +1235,7 @@ int s3c2410_dma_getposition(unsigned int channel, dma_addr_t *src, dma_addr_t *d
|
||||||
|
|
||||||
EXPORT_SYMBOL(s3c2410_dma_getposition);
|
EXPORT_SYMBOL(s3c2410_dma_getposition);
|
||||||
|
|
||||||
static struct s3c2410_dma_chan *to_dma_chan(struct sys_device *dev)
|
static inline struct s3c2410_dma_chan *to_dma_chan(struct sys_device *dev)
|
||||||
{
|
{
|
||||||
return container_of(dev, struct s3c2410_dma_chan, dev);
|
return container_of(dev, struct s3c2410_dma_chan, dev);
|
||||||
}
|
}
|
||||||
|
|
|
@ -57,7 +57,7 @@
|
||||||
#if 1
|
#if 1
|
||||||
#define gpio_dbg(x...) do { } while(0)
|
#define gpio_dbg(x...) do { } while(0)
|
||||||
#else
|
#else
|
||||||
#define gpio_dbg(x...) printk(KERN_DEBUG ## x)
|
#define gpio_dbg(x...) printk(KERN_DEBUG x)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* The s3c64xx_gpiolib_4bit routines are to control the gpio banks where
|
/* The s3c64xx_gpiolib_4bit routines are to control the gpio banks where
|
||||||
|
|
|
@ -61,14 +61,14 @@
|
||||||
#define S3C64XX_GPH7_ADDR_CF1 (0x06 << 28)
|
#define S3C64XX_GPH7_ADDR_CF1 (0x06 << 28)
|
||||||
#define S3C64XX_GPH7_EINT_G6_7 (0x07 << 28)
|
#define S3C64XX_GPH7_EINT_G6_7 (0x07 << 28)
|
||||||
|
|
||||||
#define S3C64XX_GPH8_MMC1_DATA6 (0x02 << 32)
|
#define S3C64XX_GPH8_MMC1_DATA6 (0x02 << 0)
|
||||||
#define S3C64XX_GPH8_MMC2_DATA2 (0x03 << 32)
|
#define S3C64XX_GPH8_MMC2_DATA2 (0x03 << 0)
|
||||||
#define S3C64XX_GPH8_I2S_V40_LRCLK (0x05 << 32)
|
#define S3C64XX_GPH8_I2S_V40_LRCLK (0x05 << 0)
|
||||||
#define S3C64XX_GPH8_ADDR_CF2 (0x06 << 32)
|
#define S3C64XX_GPH8_ADDR_CF2 (0x06 << 0)
|
||||||
#define S3C64XX_GPH8_EINT_G6_8 (0x07 << 32)
|
#define S3C64XX_GPH8_EINT_G6_8 (0x07 << 0)
|
||||||
|
|
||||||
#define S3C64XX_GPH9_MMC1_DATA7 (0x02 << 36)
|
|
||||||
#define S3C64XX_GPH9_MMC2_DATA3 (0x03 << 36)
|
|
||||||
#define S3C64XX_GPH9_I2S_V40_DI (0x05 << 36)
|
|
||||||
#define S3C64XX_GPH9_EINT_G6_9 (0x07 << 36)
|
|
||||||
|
|
||||||
|
#define S3C64XX_GPH9_OUTPUT (0x01 << 4)
|
||||||
|
#define S3C64XX_GPH9_MMC1_DATA7 (0x02 << 4)
|
||||||
|
#define S3C64XX_GPH9_MMC2_DATA3 (0x03 << 4)
|
||||||
|
#define S3C64XX_GPH9_I2S_V40_DI (0x05 << 4)
|
||||||
|
#define S3C64XX_GPH9_EINT_G6_9 (0x07 << 4)
|
||||||
|
|
|
@ -70,7 +70,7 @@ SRC_ARCH = $(srctree)/arch/cris
|
||||||
# cris object files path
|
# cris object files path
|
||||||
OBJ_ARCH = $(objtree)/arch/cris
|
OBJ_ARCH = $(objtree)/arch/cris
|
||||||
|
|
||||||
boot := arch/cris/$(SARCH)/boot
|
boot := arch/cris/boot
|
||||||
MACHINE := arch/cris/$(SARCH)
|
MACHINE := arch/cris/$(SARCH)
|
||||||
|
|
||||||
all: zImage
|
all: zImage
|
||||||
|
@ -81,15 +81,15 @@ zImage Image: vmlinux
|
||||||
archprepare:
|
archprepare:
|
||||||
|
|
||||||
archclean:
|
archclean:
|
||||||
$(Q)if [ -e arch/cris/$(SARCH)/boot ]; then \
|
$(Q)if [ -e arch/cris/boot ]; then \
|
||||||
$(MAKE) $(clean)=arch/cris/$(SARCH)/boot; \
|
$(MAKE) $(clean)=arch/cris/boot; \
|
||||||
fi
|
fi
|
||||||
|
|
||||||
CLEAN_FILES += \
|
CLEAN_FILES += \
|
||||||
$(MACHINE)/boot/zImage \
|
$(boot)/zImage \
|
||||||
$(MACHINE)/boot/compressed/decompress.bin \
|
$(boot)/compressed/decompress.bin \
|
||||||
$(MACHINE)/boot/compressed/piggy.gz \
|
$(boot)/compressed/piggy.gz \
|
||||||
$(MACHINE)/boot/rescue/rescue.bin
|
$(boot)/rescue/rescue.bin
|
||||||
|
|
||||||
|
|
||||||
# MRPROPER_FILES +=
|
# MRPROPER_FILES +=
|
||||||
|
|
|
@ -1,25 +0,0 @@
|
||||||
Creation of the self-extracting compressed kernel image (vmlinuz)
|
|
||||||
-----------------------------------------------------------------
|
|
||||||
$Id: README,v 1.1 2001/12/17 13:59:27 bjornw Exp $
|
|
||||||
|
|
||||||
This can be slightly confusing because it's a process with many steps.
|
|
||||||
|
|
||||||
The kernel object built by the arch/etrax100/Makefile, vmlinux, is split
|
|
||||||
by that makefile into text and data binary files, vmlinux.text and
|
|
||||||
vmlinux.data.
|
|
||||||
|
|
||||||
Those files together with a ROM filesystem can be catted together and
|
|
||||||
burned into a flash or executed directly at the DRAM origin.
|
|
||||||
|
|
||||||
They can also be catted together and compressed with gzip, which is what
|
|
||||||
happens in this makefile. Together they make up piggy.img.
|
|
||||||
|
|
||||||
The decompressor is built into the file decompress.o. It is turned into
|
|
||||||
the binary file decompress.bin, which is catted together with piggy.img
|
|
||||||
into the file vmlinuz. It can be executed in an arbitrary place in flash.
|
|
||||||
|
|
||||||
Be careful - it assumes some things about free locations in DRAM. It
|
|
||||||
assumes the DRAM starts at 0x40000000 and that it is at least 8 MB,
|
|
||||||
so it puts its code at 0x40700000, and initial stack at 0x40800000.
|
|
||||||
|
|
||||||
-Bjorn
|
|
|
@ -1,246 +0,0 @@
|
||||||
/*
|
|
||||||
* misc.c
|
|
||||||
*
|
|
||||||
* This is a collection of several routines from gzip-1.0.3
|
|
||||||
* adapted for Linux.
|
|
||||||
*
|
|
||||||
* malloc by Hannu Savolainen 1993 and Matthias Urlichs 1994
|
|
||||||
* puts by Nick Holloway 1993, better puts by Martin Mares 1995
|
|
||||||
* adaptation for Linux/CRIS Axis Communications AB, 1999
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* where the piggybacked kernel image expects itself to live.
|
|
||||||
* it is the same address we use when we network load an uncompressed
|
|
||||||
* image into DRAM, and it is the address the kernel is linked to live
|
|
||||||
* at by vmlinux.lds.S
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define KERNEL_LOAD_ADR 0x40004000
|
|
||||||
|
|
||||||
|
|
||||||
#include <linux/types.h>
|
|
||||||
#include <arch/svinto.h>
|
|
||||||
|
|
||||||
/*
|
|
||||||
* gzip declarations
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define OF(args) args
|
|
||||||
#define STATIC static
|
|
||||||
|
|
||||||
void *memset(void *s, int c, size_t n);
|
|
||||||
void *memcpy(void *__dest, __const void *__src, size_t __n);
|
|
||||||
|
|
||||||
#define memzero(s, n) memset((s), 0, (n))
|
|
||||||
|
|
||||||
typedef unsigned char uch;
|
|
||||||
typedef unsigned short ush;
|
|
||||||
typedef unsigned long ulg;
|
|
||||||
|
|
||||||
#define WSIZE 0x8000 /* Window size must be at least 32k, */
|
|
||||||
/* and a power of two */
|
|
||||||
|
|
||||||
static uch *inbuf; /* input buffer */
|
|
||||||
static uch window[WSIZE]; /* Sliding window buffer */
|
|
||||||
|
|
||||||
unsigned inptr = 0; /* index of next byte to be processed in inbuf
|
|
||||||
* After decompression it will contain the
|
|
||||||
* compressed size, and head.S will read it.
|
|
||||||
*/
|
|
||||||
|
|
||||||
static unsigned outcnt = 0; /* bytes in output buffer */
|
|
||||||
|
|
||||||
/* gzip flag byte */
|
|
||||||
#define ASCII_FLAG 0x01 /* bit 0 set: file probably ascii text */
|
|
||||||
#define CONTINUATION 0x02 /* bit 1 set: continuation of multi-part gzip file */
|
|
||||||
#define EXTRA_FIELD 0x04 /* bit 2 set: extra field present */
|
|
||||||
#define ORIG_NAME 0x08 /* bit 3 set: original file name present */
|
|
||||||
#define COMMENT 0x10 /* bit 4 set: file comment present */
|
|
||||||
#define ENCRYPTED 0x20 /* bit 5 set: file is encrypted */
|
|
||||||
#define RESERVED 0xC0 /* bit 6,7: reserved */
|
|
||||||
|
|
||||||
#define get_byte() (inbuf[inptr++])
|
|
||||||
|
|
||||||
/* Diagnostic functions */
|
|
||||||
#ifdef DEBUG
|
|
||||||
# define Assert(cond, msg) do { \
|
|
||||||
if (!(cond)) \
|
|
||||||
error(msg); \
|
|
||||||
} while (0)
|
|
||||||
# define Trace(x) fprintf x
|
|
||||||
# define Tracev(x) do { \
|
|
||||||
if (verbose) \
|
|
||||||
fprintf x; \
|
|
||||||
} while (0)
|
|
||||||
# define Tracevv(x) do { \
|
|
||||||
if (verbose > 1) \
|
|
||||||
fprintf x; \
|
|
||||||
} while (0)
|
|
||||||
# define Tracec(c, x) do { \
|
|
||||||
if (verbose && (c)) \
|
|
||||||
fprintf x; \
|
|
||||||
} while (0)
|
|
||||||
# define Tracecv(c, x) do { \
|
|
||||||
if (verbose > 1 && (c)) \
|
|
||||||
fprintf x; \
|
|
||||||
} while (0)
|
|
||||||
#else
|
|
||||||
# define Assert(cond, msg)
|
|
||||||
# define Trace(x)
|
|
||||||
# define Tracev(x)
|
|
||||||
# define Tracevv(x)
|
|
||||||
# define Tracec(c, x)
|
|
||||||
# define Tracecv(c, x)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static void flush_window(void);
|
|
||||||
static void error(char *m);
|
|
||||||
|
|
||||||
extern char *input_data; /* lives in head.S */
|
|
||||||
|
|
||||||
static long bytes_out = 0;
|
|
||||||
static uch *output_data;
|
|
||||||
static unsigned long output_ptr = 0;
|
|
||||||
static void puts(const char *);
|
|
||||||
|
|
||||||
/* the "heap" is put directly after the BSS ends, at end */
|
|
||||||
|
|
||||||
extern int _end;
|
|
||||||
static long free_mem_ptr = (long)&_end;
|
|
||||||
static long free_mem_end_ptr;
|
|
||||||
|
|
||||||
#include "../../../../../lib/inflate.c"
|
|
||||||
|
|
||||||
/* decompressor info and error messages to serial console */
|
|
||||||
|
|
||||||
static void
|
|
||||||
puts(const char *s)
|
|
||||||
{
|
|
||||||
#ifndef CONFIG_ETRAX_DEBUG_PORT_NULL
|
|
||||||
while (*s) {
|
|
||||||
#ifdef CONFIG_ETRAX_DEBUG_PORT0
|
|
||||||
while (!(*R_SERIAL0_STATUS & (1 << 5))) ;
|
|
||||||
*R_SERIAL0_TR_DATA = *s++;
|
|
||||||
#endif
|
|
||||||
#ifdef CONFIG_ETRAX_DEBUG_PORT1
|
|
||||||
while (!(*R_SERIAL1_STATUS & (1 << 5))) ;
|
|
||||||
*R_SERIAL1_TR_DATA = *s++;
|
|
||||||
#endif
|
|
||||||
#ifdef CONFIG_ETRAX_DEBUG_PORT2
|
|
||||||
while (!(*R_SERIAL2_STATUS & (1 << 5))) ;
|
|
||||||
*R_SERIAL2_TR_DATA = *s++;
|
|
||||||
#endif
|
|
||||||
#ifdef CONFIG_ETRAX_DEBUG_PORT3
|
|
||||||
while (!(*R_SERIAL3_STATUS & (1 << 5))) ;
|
|
||||||
*R_SERIAL3_TR_DATA = *s++;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
void *memset(void *s, int c, size_t n)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
char *ss = (char *)s;
|
|
||||||
|
|
||||||
for (i = 0; i < n; i++)
|
|
||||||
ss[i] = c;
|
|
||||||
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
|
|
||||||
void *memcpy(void *__dest, __const void *__src, size_t __n)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
char *d = (char *)__dest, *s = (char *)__src;
|
|
||||||
|
|
||||||
for (i = 0; i < __n; i++)
|
|
||||||
d[i] = s[i];
|
|
||||||
|
|
||||||
return __dest;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ===========================================================================
|
|
||||||
* Write the output window window[0..outcnt-1] and update crc and bytes_out.
|
|
||||||
* (Used for the decompressed data only.)
|
|
||||||
*/
|
|
||||||
|
|
||||||
static void flush_window(void)
|
|
||||||
{
|
|
||||||
ulg c = crc; /* temporary variable */
|
|
||||||
unsigned n;
|
|
||||||
uch *in, *out, ch;
|
|
||||||
|
|
||||||
in = window;
|
|
||||||
out = &output_data[output_ptr];
|
|
||||||
for (n = 0; n < outcnt; n++) {
|
|
||||||
ch = *out = *in;
|
|
||||||
out++;
|
|
||||||
in++;
|
|
||||||
c = crc_32_tab[((int)c ^ ch) & 0xff] ^ (c >> 8);
|
|
||||||
}
|
|
||||||
crc = c;
|
|
||||||
bytes_out += (ulg)outcnt;
|
|
||||||
output_ptr += (ulg)outcnt;
|
|
||||||
outcnt = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void error(char *x)
|
|
||||||
{
|
|
||||||
puts("\n\n");
|
|
||||||
puts(x);
|
|
||||||
puts("\n\n -- System halted\n");
|
|
||||||
|
|
||||||
while (1); /* Halt */
|
|
||||||
}
|
|
||||||
|
|
||||||
void setup_normal_output_buffer(void)
|
|
||||||
{
|
|
||||||
output_data = (char *)KERNEL_LOAD_ADR;
|
|
||||||
}
|
|
||||||
|
|
||||||
void decompress_kernel(void)
|
|
||||||
{
|
|
||||||
char revision;
|
|
||||||
|
|
||||||
/* input_data is set in head.S */
|
|
||||||
inbuf = input_data;
|
|
||||||
|
|
||||||
#ifdef CONFIG_ETRAX_DEBUG_PORT0
|
|
||||||
*R_SERIAL0_XOFF = 0;
|
|
||||||
*R_SERIAL0_BAUD = 0x99;
|
|
||||||
*R_SERIAL0_TR_CTRL = 0x40;
|
|
||||||
#endif
|
|
||||||
#ifdef CONFIG_ETRAX_DEBUG_PORT1
|
|
||||||
*R_SERIAL1_XOFF = 0;
|
|
||||||
*R_SERIAL1_BAUD = 0x99;
|
|
||||||
*R_SERIAL1_TR_CTRL = 0x40;
|
|
||||||
#endif
|
|
||||||
#ifdef CONFIG_ETRAX_DEBUG_PORT2
|
|
||||||
*R_GEN_CONFIG = 0x08;
|
|
||||||
*R_SERIAL2_XOFF = 0;
|
|
||||||
*R_SERIAL2_BAUD = 0x99;
|
|
||||||
*R_SERIAL2_TR_CTRL = 0x40;
|
|
||||||
#endif
|
|
||||||
#ifdef CONFIG_ETRAX_DEBUG_PORT3
|
|
||||||
*R_GEN_CONFIG = 0x100;
|
|
||||||
*R_SERIAL3_XOFF = 0;
|
|
||||||
*R_SERIAL3_BAUD = 0x99;
|
|
||||||
*R_SERIAL3_TR_CTRL = 0x40;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
setup_normal_output_buffer();
|
|
||||||
|
|
||||||
makecrc();
|
|
||||||
|
|
||||||
__asm__ volatile ("move $vr,%0" : "=rm" (revision));
|
|
||||||
if (revision < 10) {
|
|
||||||
puts("You need an ETRAX 100LX to run linux 2.6\n");
|
|
||||||
while (1);
|
|
||||||
}
|
|
||||||
|
|
||||||
puts("Uncompressing Linux...\n");
|
|
||||||
gunzip();
|
|
||||||
puts("Done. Now booting the kernel.\n");
|
|
||||||
}
|
|
|
@ -536,10 +536,10 @@ multiple_interrupt:
|
||||||
movem $r13, [$sp]
|
movem $r13, [$sp]
|
||||||
push $r10 ; push orig_r10
|
push $r10 ; push orig_r10
|
||||||
clear.d [$sp=$sp-4] ; frametype == 0, normal frame
|
clear.d [$sp=$sp-4] ; frametype == 0, normal frame
|
||||||
|
|
||||||
move.d $sp, $r10
|
move.d $sp, $r10
|
||||||
jsr do_multiple_IRQ
|
jsr do_multiple_IRQ
|
||||||
|
|
||||||
jump ret_from_intr
|
jump ret_from_intr
|
||||||
|
|
||||||
do_sigtrap:
|
do_sigtrap:
|
||||||
|
@ -585,7 +585,7 @@ _ugdb_handle_breakpoint:
|
||||||
pop $r0 ; Restore r0.
|
pop $r0 ; Restore r0.
|
||||||
ba do_sigtrap ; SIGTRAP the offending process.
|
ba do_sigtrap ; SIGTRAP the offending process.
|
||||||
pop $dccr ; Restore dccr in delay slot.
|
pop $dccr ; Restore dccr in delay slot.
|
||||||
|
|
||||||
.global kernel_execve
|
.global kernel_execve
|
||||||
kernel_execve:
|
kernel_execve:
|
||||||
move.d __NR_execve, $r9
|
move.d __NR_execve, $r9
|
||||||
|
@ -929,6 +929,14 @@ sys_call_table:
|
||||||
.long sys_fallocate
|
.long sys_fallocate
|
||||||
.long sys_timerfd_settime /* 325 */
|
.long sys_timerfd_settime /* 325 */
|
||||||
.long sys_timerfd_gettime
|
.long sys_timerfd_gettime
|
||||||
|
.long sys_signalfd4
|
||||||
|
.long sys_eventfd2
|
||||||
|
.long sys_epoll_create1
|
||||||
|
.long sys_dup3 /* 330 */
|
||||||
|
.long sys_pipe2
|
||||||
|
.long sys_inotify_init1
|
||||||
|
.long sys_preadv
|
||||||
|
.long sys_pwritev
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* NOTE!! This doesn't have to be exact - we just have
|
* NOTE!! This doesn't have to be exact - we just have
|
||||||
|
|
|
@ -1,20 +0,0 @@
|
||||||
#
|
|
||||||
# arch/cris/arch-v32/boot/Makefile
|
|
||||||
#
|
|
||||||
|
|
||||||
OBJCOPYFLAGS = -O binary -R .note -R .comment
|
|
||||||
|
|
||||||
subdir- := compressed rescue
|
|
||||||
targets := Image
|
|
||||||
|
|
||||||
$(obj)/Image: vmlinux FORCE
|
|
||||||
$(call if_changed,objcopy)
|
|
||||||
@echo ' Kernel: $@ is ready'
|
|
||||||
|
|
||||||
$(obj)/compressed/vmlinux: $(obj)/Image FORCE
|
|
||||||
$(Q)$(MAKE) $(build)=$(obj)/compressed $@
|
|
||||||
$(Q)$(MAKE) $(build)=$(obj)/rescue $(obj)/rescue/rescue.bin
|
|
||||||
|
|
||||||
$(obj)/zImage: $(obj)/compressed/vmlinux
|
|
||||||
@cp $< $@
|
|
||||||
@echo ' Kernel: $@ is ready'
|
|
|
@ -1,26 +0,0 @@
|
||||||
#
|
|
||||||
# arch/cris/arch-v32/boot/compressed/Makefile
|
|
||||||
#
|
|
||||||
|
|
||||||
asflags-y += -I$(srctree)/include/asm/mach/ -I$(srctree)/include/asm/arch
|
|
||||||
ccflags-y += -O2 -I$(srctree)/include/asm/mach/ -I$(srctree)/include/asm/arch
|
|
||||||
ldflags-y += -T$(srctree)/$(src)/decompress.lds
|
|
||||||
OBJECTS = $(obj)/head.o $(obj)/misc.o
|
|
||||||
OBJCOPYFLAGS = -O binary --remove-section=.bss
|
|
||||||
|
|
||||||
quiet_cmd_image = BUILD $@
|
|
||||||
cmd_image = cat $(obj)/decompress.bin $(obj)/piggy.gz > $@
|
|
||||||
|
|
||||||
targets := vmlinux piggy.gz decompress.o decompress.bin
|
|
||||||
|
|
||||||
$(obj)/decompress.o: $(OBJECTS) FORCE
|
|
||||||
$(call if_changed,ld)
|
|
||||||
|
|
||||||
$(obj)/decompress.bin: $(obj)/decompress.o FORCE
|
|
||||||
$(call if_changed,objcopy)
|
|
||||||
|
|
||||||
$(obj)/vmlinux: $(obj)/piggy.gz $(obj)/decompress.bin FORCE
|
|
||||||
$(call if_changed,image)
|
|
||||||
|
|
||||||
$(obj)/piggy.gz: $(obj)/../Image FORCE
|
|
||||||
$(call if_changed,gzip)
|
|
|
@ -1,26 +0,0 @@
|
||||||
#
|
|
||||||
# Makefile for rescue (bootstrap) code
|
|
||||||
#
|
|
||||||
|
|
||||||
CC = gcc-cris -mlinux -march=v32 $(LINUXINCLUDE)
|
|
||||||
ccflags-y += -O2 -I $(srctree)/include/asm/arch/mach/ \
|
|
||||||
-I $(srctree)/include/asm/arch
|
|
||||||
asflags-y += -I $(srctree)/include/asm/arch/mach/ -I $(srctree)/include/asm/arch
|
|
||||||
LD = gcc-cris -mlinux -march=v32 -nostdlib
|
|
||||||
ldflags-y += -T $(srctree)/$(src)/rescue.lds
|
|
||||||
LDPOSTFLAGS = -lgcc
|
|
||||||
OBJCOPYFLAGS = -O binary --remove-section=.bss
|
|
||||||
obj-$(CONFIG_ETRAX_AXISFLASHMAP) = head.o
|
|
||||||
OBJECT := $(obj)/head.o
|
|
||||||
|
|
||||||
targets := rescue.o rescue.bin
|
|
||||||
|
|
||||||
quiet_cmd_ldlibgcc = LD $@
|
|
||||||
cmd_ldlibgcc = $(LD) $(LDFLAGS) $(filter-out FORCE,$^) $(LDPOSTFLAGS) -o $@
|
|
||||||
|
|
||||||
$(obj)/rescue.o: $(OBJECTS) FORCE
|
|
||||||
$(call if_changed,ldlibgcc)
|
|
||||||
|
|
||||||
$(obj)/rescue.bin: $(obj)/rescue.o FORCE
|
|
||||||
$(call if_changed,objcopy)
|
|
||||||
cp -p $(obj)/rescue.bin $(objtree)
|
|
|
@ -681,7 +681,7 @@ static int virtual_gpio_ioctl(struct file *file, unsigned int cmd,
|
||||||
shadow |= ~readl(dir_oe[priv->minor]) |
|
shadow |= ~readl(dir_oe[priv->minor]) |
|
||||||
(arg & changeable_bits[priv->minor]);
|
(arg & changeable_bits[priv->minor]);
|
||||||
i2c_write(VIRT_I2C_ADDR, (void *)&shadow, sizeof(shadow));
|
i2c_write(VIRT_I2C_ADDR, (void *)&shadow, sizeof(shadow));
|
||||||
spin_lock_irqrestore(&gpio_lock, flags);
|
spin_unlock_irqrestore(&gpio_lock, flags);
|
||||||
break;
|
break;
|
||||||
case IO_CLRBITS:
|
case IO_CLRBITS:
|
||||||
spin_lock_irqsave(&gpio_lock, flags);
|
spin_lock_irqsave(&gpio_lock, flags);
|
||||||
|
@ -690,7 +690,7 @@ static int virtual_gpio_ioctl(struct file *file, unsigned int cmd,
|
||||||
shadow |= ~readl(dir_oe[priv->minor]) &
|
shadow |= ~readl(dir_oe[priv->minor]) &
|
||||||
~(arg & changeable_bits[priv->minor]);
|
~(arg & changeable_bits[priv->minor]);
|
||||||
i2c_write(VIRT_I2C_ADDR, (void *)&shadow, sizeof(shadow));
|
i2c_write(VIRT_I2C_ADDR, (void *)&shadow, sizeof(shadow));
|
||||||
spin_lock_irqrestore(&gpio_lock, flags);
|
spin_unlock_irqrestore(&gpio_lock, flags);
|
||||||
break;
|
break;
|
||||||
case IO_HIGHALARM:
|
case IO_HIGHALARM:
|
||||||
/* Set alarm when bits with 1 in arg go high. */
|
/* Set alarm when bits with 1 in arg go high. */
|
||||||
|
|
|
@ -9,8 +9,6 @@ obj-y := entry.o traps.o irq.o debugport.o \
|
||||||
process.o ptrace.o setup.o signal.o traps.o time.o \
|
process.o ptrace.o setup.o signal.o traps.o time.o \
|
||||||
cache.o cacheflush.o
|
cache.o cacheflush.o
|
||||||
|
|
||||||
obj-$(CONFIG_ETRAXFS_SIM) += vcs_hook.o
|
|
||||||
|
|
||||||
obj-$(CONFIG_SMP) += smp.o
|
obj-$(CONFIG_SMP) += smp.o
|
||||||
obj-$(CONFIG_ETRAX_KGDB) += kgdb.o kgdb_asm.o
|
obj-$(CONFIG_ETRAX_KGDB) += kgdb.o kgdb_asm.o
|
||||||
obj-$(CONFIG_ETRAX_FAST_TIMER) += fasttimer.o
|
obj-$(CONFIG_ETRAX_FAST_TIMER) += fasttimer.o
|
||||||
|
|
|
@ -852,6 +852,14 @@ sys_call_table:
|
||||||
.long sys_fallocate
|
.long sys_fallocate
|
||||||
.long sys_timerfd_settime /* 325 */
|
.long sys_timerfd_settime /* 325 */
|
||||||
.long sys_timerfd_gettime
|
.long sys_timerfd_gettime
|
||||||
|
.long sys_signalfd4
|
||||||
|
.long sys_eventfd2
|
||||||
|
.long sys_epoll_create1
|
||||||
|
.long sys_dup3 /* 330 */
|
||||||
|
.long sys_pipe2
|
||||||
|
.long sys_inotify_init1
|
||||||
|
.long sys_preadv
|
||||||
|
.long sys_pwritev
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* NOTE!! This doesn't have to be exact - we just have
|
* NOTE!! This doesn't have to be exact - we just have
|
||||||
|
|
|
@ -1,8 +1,12 @@
|
||||||
#
|
#
|
||||||
# arch/cris/arch-v10/boot/Makefile
|
# arch/cris/boot/Makefile
|
||||||
#
|
#
|
||||||
|
|
||||||
OBJCOPYFLAGS = -O binary --remove-section=.bss
|
objcopyflags-$(CONFIG_ETRAX_ARCH_V10) += -R .note -R .comment
|
||||||
|
objcopyflags-$(CONFIG_ETRAX_ARCH_V32) += --remove-section=.bss
|
||||||
|
|
||||||
|
OBJCOPYFLAGS = -O binary $(objcopyflags-y)
|
||||||
|
|
||||||
|
|
||||||
subdir- := compressed rescue
|
subdir- := compressed rescue
|
||||||
targets := Image
|
targets := Image
|
|
@ -1,11 +1,23 @@
|
||||||
#
|
#
|
||||||
# arch/cris/arch-v10/boot/compressed/Makefile
|
# arch/cris/boot/compressed/Makefile
|
||||||
#
|
#
|
||||||
|
|
||||||
asflags-y += $(LINUXINCLUDE)
|
asflags-y += $(LINUXINCLUDE)
|
||||||
ccflags-y += -O2 $(LINUXINCLUDE)
|
ccflags-y += -O2 $(LINUXINCLUDE)
|
||||||
ldflags-y += -T $(srctree)/$(src)/decompress.lds
|
|
||||||
OBJECTS = $(obj)/head.o $(obj)/misc.o
|
# asflags-$(CONFIG_ETRAX_ARCH_V32) += -I$(srctree)/include/asm/mach \
|
||||||
|
# -I$(srctree)/include/asm/arch
|
||||||
|
# ccflags-$(CONFIG_ETRAX_ARCH_V32) += -O2 -I$(srctree)/include/asm/mach
|
||||||
|
# -I$(srctree)/include/asm/arch
|
||||||
|
|
||||||
|
arch-$(CONFIG_ETRAX_ARCH_V10) = v10
|
||||||
|
arch-$(CONFIG_ETRAX_ARCH_V32) = v32
|
||||||
|
|
||||||
|
ldflags-y += -T $(srctree)/$(src)/decompress_$(arch-y).lds
|
||||||
|
|
||||||
|
OBJECTS-$(CONFIG_ETRAX_ARCH_V32) = $(obj)/head_v32.o
|
||||||
|
OBJECTS-$(CONFIG_ETRAX_ARCH_V10) = $(obj)/head_v10.o
|
||||||
|
OBJECTS= $(OBJECTS-y) $(obj)/misc.o
|
||||||
OBJCOPYFLAGS = -O binary --remove-section=.bss
|
OBJCOPYFLAGS = -O binary --remove-section=.bss
|
||||||
|
|
||||||
quiet_cmd_image = BUILD $@
|
quiet_cmd_image = BUILD $@
|
||||||
|
@ -24,4 +36,3 @@ $(obj)/vmlinux: $(obj)/piggy.gz $(obj)/decompress.bin FORCE
|
||||||
|
|
||||||
$(obj)/piggy.gz: $(obj)/../Image FORCE
|
$(obj)/piggy.gz: $(obj)/../Image FORCE
|
||||||
$(call if_changed,gzip)
|
$(call if_changed,gzip)
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
beq dram_init_finished
|
beq dram_init_finished
|
||||||
nop
|
nop
|
||||||
|
|
||||||
#include "../../lib/dram_init.S"
|
#include "../../arch-v10/lib/dram_init.S"
|
||||||
|
|
||||||
dram_init_finished:
|
dram_init_finished:
|
||||||
|
|
||||||
|
@ -123,4 +123,4 @@ _cmd_line_magic:
|
||||||
.dword 0
|
.dword 0
|
||||||
_cmd_line_addr:
|
_cmd_line_addr:
|
||||||
.dword 0
|
.dword 0
|
||||||
#include "../../lib/hw_settings.S"
|
#include "../../arch-v10/lib/hw_settings.S"
|
|
@ -17,7 +17,7 @@
|
||||||
.globl input_data
|
.globl input_data
|
||||||
|
|
||||||
.text
|
.text
|
||||||
_start:
|
start:
|
||||||
di
|
di
|
||||||
|
|
||||||
;; Start clocks for used blocks.
|
;; Start clocks for used blocks.
|
||||||
|
@ -29,9 +29,9 @@ _start:
|
||||||
nop
|
nop
|
||||||
|
|
||||||
#if defined CONFIG_ETRAXFS
|
#if defined CONFIG_ETRAXFS
|
||||||
#include "../../mach-fs/dram_init.S"
|
#include "../../arch-v32/mach-fs/dram_init.S"
|
||||||
#elif defined CONFIG_CRIS_MACH_ARTPEC3
|
#elif defined CONFIG_CRIS_MACH_ARTPEC3
|
||||||
#include "../../mach-a3/dram_init.S"
|
#include "../../arch-v32/mach-a3/dram_init.S"
|
||||||
#else
|
#else
|
||||||
#error Only ETRAXFS and ARTPEC-3 supported!
|
#error Only ETRAXFS and ARTPEC-3 supported!
|
||||||
#endif
|
#endif
|
||||||
|
@ -137,9 +137,9 @@ _boot_source:
|
||||||
.dword 0
|
.dword 0
|
||||||
|
|
||||||
#if defined CONFIG_ETRAXFS
|
#if defined CONFIG_ETRAXFS
|
||||||
#include "../../mach-fs/hw_settings.S"
|
#include "../../arch-v32/mach-fs/hw_settings.S"
|
||||||
#elif defined CONFIG_CRIS_MACH_ARTPEC3
|
#elif defined CONFIG_CRIS_MACH_ARTPEC3
|
||||||
#include "../../mach-a3/hw_settings.S"
|
#include "../../arch-v32/mach-a3/hw_settings.S"
|
||||||
#else
|
#else
|
||||||
#error Only ETRAXFS and ARTPEC-3 supported!
|
#error Only ETRAXFS and ARTPEC-3 supported!
|
||||||
#endif
|
#endif
|
|
@ -18,8 +18,9 @@
|
||||||
|
|
||||||
#define KERNEL_LOAD_ADR 0x40004000
|
#define KERNEL_LOAD_ADR 0x40004000
|
||||||
|
|
||||||
|
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
|
|
||||||
|
#ifdef CONFIG_ETRAX_ARCH_V32
|
||||||
#include <hwregs/reg_rdwr.h>
|
#include <hwregs/reg_rdwr.h>
|
||||||
#include <hwregs/reg_map.h>
|
#include <hwregs/reg_map.h>
|
||||||
#include <hwregs/ser_defs.h>
|
#include <hwregs/ser_defs.h>
|
||||||
|
@ -27,6 +28,9 @@
|
||||||
#ifdef CONFIG_CRIS_MACH_ARTPEC3
|
#ifdef CONFIG_CRIS_MACH_ARTPEC3
|
||||||
#include <hwregs/clkgen_defs.h>
|
#include <hwregs/clkgen_defs.h>
|
||||||
#endif
|
#endif
|
||||||
|
#else
|
||||||
|
#include <arch/svinto.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* gzip declarations
|
* gzip declarations
|
||||||
|
@ -35,12 +39,10 @@
|
||||||
#define OF(args) args
|
#define OF(args) args
|
||||||
#define STATIC static
|
#define STATIC static
|
||||||
|
|
||||||
void* memset(void* s, int c, size_t n);
|
void *memset(void *s, int c, size_t n);
|
||||||
void* memcpy(void* __dest, __const void* __src,
|
void *memcpy(void *__dest, __const void *__src, size_t __n);
|
||||||
size_t __n);
|
|
||||||
|
|
||||||
#define memzero(s, n) memset ((s), 0, (n))
|
|
||||||
|
|
||||||
|
#define memzero(s, n) memset((s), 0, (n))
|
||||||
|
|
||||||
typedef unsigned char uch;
|
typedef unsigned char uch;
|
||||||
typedef unsigned short ush;
|
typedef unsigned short ush;
|
||||||
|
@ -68,27 +70,43 @@ static unsigned outcnt = 0; /* bytes in output buffer */
|
||||||
#define ENCRYPTED 0x20 /* bit 5 set: file is encrypted */
|
#define ENCRYPTED 0x20 /* bit 5 set: file is encrypted */
|
||||||
#define RESERVED 0xC0 /* bit 6,7: reserved */
|
#define RESERVED 0xC0 /* bit 6,7: reserved */
|
||||||
|
|
||||||
#define get_byte() inbuf[inptr++]
|
#define get_byte() (inbuf[inptr++])
|
||||||
|
|
||||||
/* Diagnostic functions */
|
/* Diagnostic functions */
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
# define Assert(cond,msg) {if(!(cond)) error(msg);}
|
# define Assert(cond, msg) do { \
|
||||||
|
if (!(cond)) \
|
||||||
|
error(msg); \
|
||||||
|
} while (0)
|
||||||
# define Trace(x) fprintf x
|
# define Trace(x) fprintf x
|
||||||
# define Tracev(x) {if (verbose) fprintf x ;}
|
# define Tracev(x) do { \
|
||||||
# define Tracevv(x) {if (verbose>1) fprintf x ;}
|
if (verbose) \
|
||||||
# define Tracec(c,x) {if (verbose && (c)) fprintf x ;}
|
fprintf x; \
|
||||||
# define Tracecv(c,x) {if (verbose>1 && (c)) fprintf x ;}
|
} while (0)
|
||||||
|
# define Tracevv(x) do { \
|
||||||
|
if (verbose > 1) \
|
||||||
|
fprintf x; \
|
||||||
|
} while (0)
|
||||||
|
# define Tracec(c, x) do { \
|
||||||
|
if (verbose && (c)) \
|
||||||
|
fprintf x; \
|
||||||
|
} while (0)
|
||||||
|
# define Tracecv(c, x) do { \
|
||||||
|
if (verbose > 1 && (c)) \
|
||||||
|
fprintf x; \
|
||||||
|
} while (0)
|
||||||
#else
|
#else
|
||||||
# define Assert(cond,msg)
|
# define Assert(cond, msg)
|
||||||
# define Trace(x)
|
# define Trace(x)
|
||||||
# define Tracev(x)
|
# define Tracev(x)
|
||||||
# define Tracevv(x)
|
# define Tracevv(x)
|
||||||
# define Tracec(c,x)
|
# define Tracec(c, x)
|
||||||
# define Tracecv(c,x)
|
# define Tracecv(c, x)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void flush_window(void);
|
static void flush_window(void);
|
||||||
static void error(char *m);
|
static void error(char *m);
|
||||||
|
static void puts(const char *);
|
||||||
|
|
||||||
extern char *input_data; /* lives in head.S */
|
extern char *input_data; /* lives in head.S */
|
||||||
|
|
||||||
|
@ -96,10 +114,6 @@ static long bytes_out;
|
||||||
static uch *output_data;
|
static uch *output_data;
|
||||||
static unsigned long output_ptr;
|
static unsigned long output_ptr;
|
||||||
|
|
||||||
static void error(char *m);
|
|
||||||
|
|
||||||
static void puts(const char *);
|
|
||||||
|
|
||||||
/* the "heap" is put directly after the BSS ends, at end */
|
/* the "heap" is put directly after the BSS ends, at end */
|
||||||
|
|
||||||
extern int _end;
|
extern int _end;
|
||||||
|
@ -110,8 +124,8 @@ static long free_mem_end_ptr;
|
||||||
|
|
||||||
/* decompressor info and error messages to serial console */
|
/* decompressor info and error messages to serial console */
|
||||||
|
|
||||||
static inline void
|
#ifdef CONFIG_ETRAX_ARCH_V32
|
||||||
serout(const char *s, reg_scope_instances regi_ser)
|
static inline void serout(const char *s, reg_scope_instances regi_ser)
|
||||||
{
|
{
|
||||||
reg_ser_rs_stat_din rs;
|
reg_ser_rs_stat_din rs;
|
||||||
reg_ser_rw_dout dout = {.data = *s};
|
reg_ser_rw_dout dout = {.data = *s};
|
||||||
|
@ -123,23 +137,47 @@ serout(const char *s, reg_scope_instances regi_ser)
|
||||||
|
|
||||||
REG_WR(ser, regi_ser, rw_dout, dout);
|
REG_WR(ser, regi_ser, rw_dout, dout);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static void
|
static void puts(const char *s)
|
||||||
puts(const char *s)
|
|
||||||
{
|
{
|
||||||
#ifndef CONFIG_ETRAX_DEBUG_PORT_NULL
|
#ifndef CONFIG_ETRAX_DEBUG_PORT_NULL
|
||||||
while (*s) {
|
while (*s) {
|
||||||
#ifdef CONFIG_ETRAX_DEBUG_PORT0
|
#ifdef CONFIG_ETRAX_DEBUG_PORT0
|
||||||
|
#ifdef CONFIG_ETRAX_ARCH_V32
|
||||||
serout(s, regi_ser0);
|
serout(s, regi_ser0);
|
||||||
|
#else
|
||||||
|
while (!(*R_SERIAL0_STATUS & (1 << 5)))
|
||||||
|
;
|
||||||
|
*R_SERIAL0_TR_DATA = *s++;
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_ETRAX_DEBUG_PORT1
|
#ifdef CONFIG_ETRAX_DEBUG_PORT1
|
||||||
|
#ifdef CONFIG_ETRAX_ARCH_V32
|
||||||
serout(s, regi_ser1);
|
serout(s, regi_ser1);
|
||||||
|
#else
|
||||||
|
while (!(*R_SERIAL1_STATUS & (1 << 5)))
|
||||||
|
;
|
||||||
|
*R_SERIAL1_TR_DATA = *s++;
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_ETRAX_DEBUG_PORT2
|
#ifdef CONFIG_ETRAX_DEBUG_PORT2
|
||||||
|
#ifdef CONFIG_ETRAX_ARCH_V32
|
||||||
serout(s, regi_ser2);
|
serout(s, regi_ser2);
|
||||||
|
#else
|
||||||
|
while (!(*R_SERIAL2_STATUS & (1 << 5)))
|
||||||
|
;
|
||||||
|
*R_SERIAL2_TR_DATA = *s++;
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_ETRAX_DEBUG_PORT3
|
#ifdef CONFIG_ETRAX_DEBUG_PORT3
|
||||||
|
#ifdef CONFIG_ETRAX_ARCH_V32
|
||||||
serout(s, regi_ser3);
|
serout(s, regi_ser3);
|
||||||
|
#else
|
||||||
|
while (!(*R_SERIAL3_STATUS & (1 << 5)))
|
||||||
|
;
|
||||||
|
*R_SERIAL3_TR_DATA = *s++;
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
*s++;
|
*s++;
|
||||||
}
|
}
|
||||||
|
@ -147,8 +185,7 @@ puts(const char *s)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void*
|
void *memset(void *s, int c, size_t n)
|
||||||
memset(void* s, int c, size_t n)
|
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
char *ss = (char*)s;
|
char *ss = (char*)s;
|
||||||
|
@ -158,14 +195,13 @@ memset(void* s, int c, size_t n)
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
void*
|
void *memcpy(void *__dest, __const void *__src, size_t __n)
|
||||||
memcpy(void* __dest, __const void* __src,
|
|
||||||
size_t __n)
|
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
char *d = (char *)__dest, *s = (char *)__src;
|
char *d = (char *)__dest, *s = (char *)__src;
|
||||||
|
|
||||||
for (i=0;i<__n;i++) d[i] = s[i];
|
for (i = 0; i < __n; i++)
|
||||||
|
d[i] = s[i];
|
||||||
|
|
||||||
return __dest;
|
return __dest;
|
||||||
}
|
}
|
||||||
|
@ -175,43 +211,42 @@ memcpy(void* __dest, __const void* __src,
|
||||||
* (Used for the decompressed data only.)
|
* (Used for the decompressed data only.)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void
|
static void flush_window(void)
|
||||||
flush_window()
|
|
||||||
{
|
{
|
||||||
ulg c = crc; /* temporary variable */
|
ulg c = crc; /* temporary variable */
|
||||||
unsigned n;
|
unsigned n;
|
||||||
uch *in, *out, ch;
|
uch *in, *out, ch;
|
||||||
|
|
||||||
in = window;
|
in = window;
|
||||||
out = &output_data[output_ptr];
|
out = &output_data[output_ptr];
|
||||||
for (n = 0; n < outcnt; n++) {
|
for (n = 0; n < outcnt; n++) {
|
||||||
ch = *out++ = *in++;
|
ch = *out = *in;
|
||||||
c = crc_32_tab[((int)c ^ ch) & 0xff] ^ (c >> 8);
|
out++;
|
||||||
}
|
in++;
|
||||||
crc = c;
|
c = crc_32_tab[((int)c ^ ch) & 0xff] ^ (c >> 8);
|
||||||
bytes_out += (ulg)outcnt;
|
}
|
||||||
output_ptr += (ulg)outcnt;
|
crc = c;
|
||||||
outcnt = 0;
|
bytes_out += (ulg)outcnt;
|
||||||
|
output_ptr += (ulg)outcnt;
|
||||||
|
outcnt = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void error(char *x)
|
||||||
error(char *x)
|
|
||||||
{
|
{
|
||||||
puts("\r\n\n");
|
puts("\n\n");
|
||||||
puts(x);
|
puts(x);
|
||||||
puts("\r\n\n -- System halted\n");
|
puts("\n\n -- System halted\n");
|
||||||
|
|
||||||
while(1); /* Halt */
|
while(1); /* Halt */
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void setup_normal_output_buffer(void)
|
||||||
setup_normal_output_buffer(void)
|
|
||||||
{
|
{
|
||||||
output_data = (char *)KERNEL_LOAD_ADR;
|
output_data = (char *)KERNEL_LOAD_ADR;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void
|
#ifdef CONFIG_ETRAX_ARCH_V32
|
||||||
serial_setup(reg_scope_instances regi_ser)
|
static inline void serial_setup(reg_scope_instances regi_ser)
|
||||||
{
|
{
|
||||||
reg_ser_rw_xoff xoff;
|
reg_ser_rw_xoff xoff;
|
||||||
reg_ser_rw_tr_ctrl tr_ctrl;
|
reg_ser_rw_tr_ctrl tr_ctrl;
|
||||||
|
@ -252,12 +287,16 @@ serial_setup(reg_scope_instances regi_ser)
|
||||||
REG_WR(ser, regi_ser, rw_rec_ctrl, rec_ctrl);
|
REG_WR(ser, regi_ser, rw_rec_ctrl, rec_ctrl);
|
||||||
REG_WR(ser, regi_ser, rw_rec_baud_div, rec_baud);
|
REG_WR(ser, regi_ser, rw_rec_baud_div, rec_baud);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void
|
void decompress_kernel(void)
|
||||||
decompress_kernel(void)
|
|
||||||
{
|
{
|
||||||
char revision;
|
char revision;
|
||||||
|
char compile_rev;
|
||||||
|
|
||||||
|
#ifdef CONFIG_ETRAX_ARCH_V32
|
||||||
|
/* Need at least a CRISv32 to run. */
|
||||||
|
compile_rev = 32;
|
||||||
#if defined(CONFIG_ETRAX_DEBUG_PORT1) || \
|
#if defined(CONFIG_ETRAX_DEBUG_PORT1) || \
|
||||||
defined(CONFIG_ETRAX_DEBUG_PORT2) || \
|
defined(CONFIG_ETRAX_DEBUG_PORT2) || \
|
||||||
defined(CONFIG_ETRAX_DEBUG_PORT3)
|
defined(CONFIG_ETRAX_DEBUG_PORT3)
|
||||||
|
@ -277,6 +316,7 @@ decompress_kernel(void)
|
||||||
hwprot = REG_RD(pinmux, regi_pinmux, rw_hwprot);
|
hwprot = REG_RD(pinmux, regi_pinmux, rw_hwprot);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#ifdef CONFIG_ETRAX_DEBUG_PORT0
|
#ifdef CONFIG_ETRAX_DEBUG_PORT0
|
||||||
serial_setup(regi_ser0);
|
serial_setup(regi_ser0);
|
||||||
#endif
|
#endif
|
||||||
|
@ -300,19 +340,52 @@ decompress_kernel(void)
|
||||||
|
|
||||||
/* input_data is set in head.S */
|
/* input_data is set in head.S */
|
||||||
inbuf = input_data;
|
inbuf = input_data;
|
||||||
|
#else /* CRISv10 */
|
||||||
|
/* Need at least a crisv10 to run. */
|
||||||
|
compile_rev = 10;
|
||||||
|
|
||||||
|
/* input_data is set in head.S */
|
||||||
|
inbuf = input_data;
|
||||||
|
|
||||||
|
#ifdef CONFIG_ETRAX_DEBUG_PORT0
|
||||||
|
*R_SERIAL0_XOFF = 0;
|
||||||
|
*R_SERIAL0_BAUD = 0x99;
|
||||||
|
*R_SERIAL0_TR_CTRL = 0x40;
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_ETRAX_DEBUG_PORT1
|
||||||
|
*R_SERIAL1_XOFF = 0;
|
||||||
|
*R_SERIAL1_BAUD = 0x99;
|
||||||
|
*R_SERIAL1_TR_CTRL = 0x40;
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_ETRAX_DEBUG_PORT2
|
||||||
|
*R_GEN_CONFIG = 0x08;
|
||||||
|
*R_SERIAL2_XOFF = 0;
|
||||||
|
*R_SERIAL2_BAUD = 0x99;
|
||||||
|
*R_SERIAL2_TR_CTRL = 0x40;
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_ETRAX_DEBUG_PORT3
|
||||||
|
*R_GEN_CONFIG = 0x100;
|
||||||
|
*R_SERIAL3_XOFF = 0;
|
||||||
|
*R_SERIAL3_BAUD = 0x99;
|
||||||
|
*R_SERIAL3_TR_CTRL = 0x40;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
setup_normal_output_buffer();
|
setup_normal_output_buffer();
|
||||||
|
|
||||||
makecrc();
|
makecrc();
|
||||||
|
|
||||||
__asm__ volatile ("move $vr,%0" : "=rm" (revision));
|
__asm__ volatile ("move $vr,%0" : "=rm" (revision));
|
||||||
if (revision < 32)
|
if (revision < compile_rev) {
|
||||||
{
|
#ifdef CONFIG_ETRAX_ARCH_V32
|
||||||
puts("You need an ETRAX FS to run Linux 2.6/crisv32.\r\n");
|
puts("You need an ETRAX FS to run Linux 2.6/crisv32\n");
|
||||||
|
#else
|
||||||
|
puts("You need an ETRAX 100LX to run linux 2.6\n");
|
||||||
|
#endif
|
||||||
while(1);
|
while(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
puts("Uncompressing Linux...\r\n");
|
puts("Uncompressing Linux...\n");
|
||||||
gunzip();
|
gunzip();
|
||||||
puts("Done. Now booting the kernel.\r\n");
|
puts("Done. Now booting the kernel\n");
|
||||||
}
|
}
|
|
@ -2,16 +2,26 @@
|
||||||
# Makefile for rescue (bootstrap) code
|
# Makefile for rescue (bootstrap) code
|
||||||
#
|
#
|
||||||
|
|
||||||
ccflags-y += -O2 $(LINUXINCLUDE)
|
# CC = gcc-cris -mlinux -march=v32 $(LINUXINCLUDE)
|
||||||
|
# ccflags-$(CONFIG_ETRAX_ARCH_V32) += -I$(srctree)/include/asm/arch/mach/ \
|
||||||
|
# -I$(srctree)/include/asm/arch
|
||||||
|
# asflags-y += -I $(srctree)/include/asm/arch/mach/ -I $(srctree)/include/asm/arch
|
||||||
|
# LD = gcc-cris -mlinux -march=v32 -nostdlib
|
||||||
|
|
||||||
asflags-y += $(LINUXINCLUDE)
|
asflags-y += $(LINUXINCLUDE)
|
||||||
ldflags-y += -T $(srctree)/$(src)/rescue.lds
|
ccflags-y += -O2 $(LINUXINCLUDE)
|
||||||
|
arch-$(CONFIG_ETRAX_ARCH_V10) = v10
|
||||||
|
arch-$(CONFIG_ETRAX_ARCH_V32) = v32
|
||||||
|
|
||||||
|
ldflags-y += -T $(srctree)/$(src)/rescue_$(arch-y).lds
|
||||||
OBJCOPYFLAGS = -O binary --remove-section=.bss
|
OBJCOPYFLAGS = -O binary --remove-section=.bss
|
||||||
obj-$(CONFIG_ETRAX_AXISFLASHMAP) = head.o
|
obj-$(CONFIG_ETRAX_ARCH_V32) = $(obj)/head_v32.o
|
||||||
OBJECT := $(obj)/head.o
|
obj-$(CONFIG_ETRAX_ARCH_V10) = $(obj)/head_v10.o
|
||||||
|
OBJECTS := $(obj-y)
|
||||||
|
|
||||||
targets := rescue.o rescue.bin
|
targets := rescue.o rescue.bin
|
||||||
|
|
||||||
$(obj)/rescue.o: $(OBJECT) FORCE
|
$(obj)/rescue.o: $(OBJECTS) FORCE
|
||||||
$(call if_changed,ld)
|
$(call if_changed,ld)
|
||||||
|
|
||||||
$(obj)/rescue.bin: $(obj)/rescue.o FORCE
|
$(obj)/rescue.bin: $(obj)/rescue.o FORCE
|
||||||
|
@ -26,6 +36,7 @@ $(obj)/testrescue.bin: $(obj)/testrescue.o
|
||||||
dd if=testrescue_tmp.bin of=$(obj)/testrescue.bin bs=1 count=784
|
dd if=testrescue_tmp.bin of=$(obj)/testrescue.bin bs=1 count=784
|
||||||
rm tr.bin tmp2423 testrescue_tmp.bin
|
rm tr.bin tmp2423 testrescue_tmp.bin
|
||||||
|
|
||||||
|
|
||||||
$(obj)/kimagerescue.bin: $(obj)/kimagerescue.o
|
$(obj)/kimagerescue.bin: $(obj)/kimagerescue.o
|
||||||
$(OBJCOPY) $(OBJCOPYFLAGS) $(obj)/kimagerescue.o ktr.bin
|
$(OBJCOPY) $(OBJCOPYFLAGS) $(obj)/kimagerescue.o ktr.bin
|
||||||
# Pad it to 784 bytes, that's what the rescue loader expects
|
# Pad it to 784 bytes, that's what the rescue loader expects
|
||||||
|
@ -33,3 +44,4 @@ $(obj)/kimagerescue.bin: $(obj)/kimagerescue.o
|
||||||
cat ktr.bin tmp2423 >kimagerescue_tmp.bin
|
cat ktr.bin tmp2423 >kimagerescue_tmp.bin
|
||||||
dd if=kimagerescue_tmp.bin of=$(obj)/kimagerescue.bin bs=1 count=784
|
dd if=kimagerescue_tmp.bin of=$(obj)/kimagerescue.bin bs=1 count=784
|
||||||
rm ktr.bin tmp2423 kimagerescue_tmp.bin
|
rm ktr.bin tmp2423 kimagerescue_tmp.bin
|
||||||
|
|
|
@ -155,7 +155,7 @@ no_newjump:
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
;; We need to setup the bus registers before we start using the DRAM
|
;; We need to setup the bus registers before we start using the DRAM
|
||||||
#include "../../lib/dram_init.S"
|
#include "../../../arch-v10/lib/dram_init.S"
|
||||||
|
|
||||||
;; we now should go through the checksum-table and check the listed
|
;; we now should go through the checksum-table and check the listed
|
||||||
;; partitions for errors.
|
;; partitions for errors.
|
|
@ -281,7 +281,7 @@
|
||||||
#define __NR_mbind 274
|
#define __NR_mbind 274
|
||||||
#define __NR_get_mempolicy 275
|
#define __NR_get_mempolicy 275
|
||||||
#define __NR_set_mempolicy 276
|
#define __NR_set_mempolicy 276
|
||||||
#define __NR_mq_open 277
|
#define __NR_mq_open 277
|
||||||
#define __NR_mq_unlink (__NR_mq_open+1)
|
#define __NR_mq_unlink (__NR_mq_open+1)
|
||||||
#define __NR_mq_timedsend (__NR_mq_open+2)
|
#define __NR_mq_timedsend (__NR_mq_open+2)
|
||||||
#define __NR_mq_timedreceive (__NR_mq_open+3)
|
#define __NR_mq_timedreceive (__NR_mq_open+3)
|
||||||
|
@ -331,10 +331,18 @@
|
||||||
#define __NR_fallocate 324
|
#define __NR_fallocate 324
|
||||||
#define __NR_timerfd_settime 325
|
#define __NR_timerfd_settime 325
|
||||||
#define __NR_timerfd_gettime 326
|
#define __NR_timerfd_gettime 326
|
||||||
|
#define __NR_signalfd4 327
|
||||||
|
#define __NR_eventfd2 328
|
||||||
|
#define __NR_epoll_create1 329
|
||||||
|
#define __NR_dup3 330
|
||||||
|
#define __NR_pipe2 331
|
||||||
|
#define __NR_inotify_init1 332
|
||||||
|
#define __NR_preadv 333
|
||||||
|
#define __NR_pwritev 334
|
||||||
|
|
||||||
#ifdef __KERNEL__
|
#ifdef __KERNEL__
|
||||||
|
|
||||||
#define NR_syscalls 327
|
#define NR_syscalls 335
|
||||||
|
|
||||||
#include <arch/unistd.h>
|
#include <arch/unistd.h>
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#
|
#
|
||||||
# Automatically generated make config: don't edit
|
# Automatically generated make config: don't edit
|
||||||
# Linux kernel version: 2.6.29
|
# Linux kernel version: 2.6.30-rc5
|
||||||
# Tue Mar 24 10:23:20 2009
|
# Mon May 11 09:01:02 2009
|
||||||
#
|
#
|
||||||
CONFIG_MICROBLAZE=y
|
CONFIG_MICROBLAZE=y
|
||||||
# CONFIG_SWAP is not set
|
# CONFIG_SWAP is not set
|
||||||
|
@ -32,6 +32,7 @@ CONFIG_LOCALVERSION_AUTO=y
|
||||||
CONFIG_SYSVIPC=y
|
CONFIG_SYSVIPC=y
|
||||||
CONFIG_SYSVIPC_SYSCTL=y
|
CONFIG_SYSVIPC_SYSCTL=y
|
||||||
CONFIG_POSIX_MQUEUE=y
|
CONFIG_POSIX_MQUEUE=y
|
||||||
|
CONFIG_POSIX_MQUEUE_SYSCTL=y
|
||||||
CONFIG_BSD_PROCESS_ACCT=y
|
CONFIG_BSD_PROCESS_ACCT=y
|
||||||
CONFIG_BSD_PROCESS_ACCT_V3=y
|
CONFIG_BSD_PROCESS_ACCT_V3=y
|
||||||
# CONFIG_TASKSTATS is not set
|
# CONFIG_TASKSTATS is not set
|
||||||
|
@ -63,6 +64,7 @@ CONFIG_SYSCTL_SYSCALL=y
|
||||||
CONFIG_KALLSYMS=y
|
CONFIG_KALLSYMS=y
|
||||||
CONFIG_KALLSYMS_ALL=y
|
CONFIG_KALLSYMS_ALL=y
|
||||||
CONFIG_KALLSYMS_EXTRA_PASS=y
|
CONFIG_KALLSYMS_EXTRA_PASS=y
|
||||||
|
# CONFIG_STRIP_ASM_SYMS is not set
|
||||||
# CONFIG_HOTPLUG is not set
|
# CONFIG_HOTPLUG is not set
|
||||||
CONFIG_PRINTK=y
|
CONFIG_PRINTK=y
|
||||||
CONFIG_BUG=y
|
CONFIG_BUG=y
|
||||||
|
@ -80,6 +82,8 @@ CONFIG_SLAB=y
|
||||||
# CONFIG_SLUB is not set
|
# CONFIG_SLUB is not set
|
||||||
# CONFIG_SLOB is not set
|
# CONFIG_SLOB is not set
|
||||||
# CONFIG_PROFILING is not set
|
# CONFIG_PROFILING is not set
|
||||||
|
# CONFIG_MARKERS is not set
|
||||||
|
# CONFIG_SLOW_WORK is not set
|
||||||
# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
|
# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
|
||||||
CONFIG_SLABINFO=y
|
CONFIG_SLABINFO=y
|
||||||
CONFIG_RT_MUTEXES=y
|
CONFIG_RT_MUTEXES=y
|
||||||
|
@ -92,7 +96,6 @@ CONFIG_MODULE_UNLOAD=y
|
||||||
# CONFIG_MODULE_SRCVERSION_ALL is not set
|
# CONFIG_MODULE_SRCVERSION_ALL is not set
|
||||||
CONFIG_BLOCK=y
|
CONFIG_BLOCK=y
|
||||||
# CONFIG_LBD is not set
|
# CONFIG_LBD is not set
|
||||||
# CONFIG_BLK_DEV_IO_TRACE is not set
|
|
||||||
# CONFIG_BLK_DEV_BSG is not set
|
# CONFIG_BLK_DEV_BSG is not set
|
||||||
# CONFIG_BLK_DEV_INTEGRITY is not set
|
# CONFIG_BLK_DEV_INTEGRITY is not set
|
||||||
|
|
||||||
|
@ -166,6 +169,8 @@ CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||||
# CONFIG_PHYS_ADDR_T_64BIT is not set
|
# CONFIG_PHYS_ADDR_T_64BIT is not set
|
||||||
CONFIG_ZONE_DMA_FLAG=0
|
CONFIG_ZONE_DMA_FLAG=0
|
||||||
CONFIG_VIRT_TO_BUS=y
|
CONFIG_VIRT_TO_BUS=y
|
||||||
|
CONFIG_UNEVICTABLE_LRU=y
|
||||||
|
CONFIG_NOMMU_INITIAL_TRIM_EXCESS=1
|
||||||
|
|
||||||
#
|
#
|
||||||
# Exectuable file formats
|
# Exectuable file formats
|
||||||
|
@ -180,7 +185,6 @@ CONFIG_NET=y
|
||||||
#
|
#
|
||||||
# Networking options
|
# Networking options
|
||||||
#
|
#
|
||||||
CONFIG_COMPAT_NET_DEV_OPS=y
|
|
||||||
CONFIG_PACKET=y
|
CONFIG_PACKET=y
|
||||||
# CONFIG_PACKET_MMAP is not set
|
# CONFIG_PACKET_MMAP is not set
|
||||||
CONFIG_UNIX=y
|
CONFIG_UNIX=y
|
||||||
|
@ -232,6 +236,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
|
||||||
# CONFIG_LAPB is not set
|
# CONFIG_LAPB is not set
|
||||||
# CONFIG_ECONET is not set
|
# CONFIG_ECONET is not set
|
||||||
# CONFIG_WAN_ROUTER is not set
|
# CONFIG_WAN_ROUTER is not set
|
||||||
|
# CONFIG_PHONET is not set
|
||||||
# CONFIG_NET_SCHED is not set
|
# CONFIG_NET_SCHED is not set
|
||||||
# CONFIG_DCB is not set
|
# CONFIG_DCB is not set
|
||||||
|
|
||||||
|
@ -244,7 +249,6 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
|
||||||
# CONFIG_IRDA is not set
|
# CONFIG_IRDA is not set
|
||||||
# CONFIG_BT is not set
|
# CONFIG_BT is not set
|
||||||
# CONFIG_AF_RXRPC is not set
|
# CONFIG_AF_RXRPC is not set
|
||||||
# CONFIG_PHONET is not set
|
|
||||||
CONFIG_WIRELESS=y
|
CONFIG_WIRELESS=y
|
||||||
# CONFIG_CFG80211 is not set
|
# CONFIG_CFG80211 is not set
|
||||||
CONFIG_WIRELESS_OLD_REGULATORY=y
|
CONFIG_WIRELESS_OLD_REGULATORY=y
|
||||||
|
@ -379,6 +383,7 @@ CONFIG_MISC_DEVICES=y
|
||||||
# CONFIG_ATA is not set
|
# CONFIG_ATA is not set
|
||||||
# CONFIG_MD is not set
|
# CONFIG_MD is not set
|
||||||
CONFIG_NETDEVICES=y
|
CONFIG_NETDEVICES=y
|
||||||
|
CONFIG_COMPAT_NET_DEV_OPS=y
|
||||||
# CONFIG_DUMMY is not set
|
# CONFIG_DUMMY is not set
|
||||||
# CONFIG_BONDING is not set
|
# CONFIG_BONDING is not set
|
||||||
# CONFIG_MACVLAN is not set
|
# CONFIG_MACVLAN is not set
|
||||||
|
@ -388,6 +393,7 @@ CONFIG_NETDEVICES=y
|
||||||
# CONFIG_PHYLIB is not set
|
# CONFIG_PHYLIB is not set
|
||||||
CONFIG_NET_ETHERNET=y
|
CONFIG_NET_ETHERNET=y
|
||||||
# CONFIG_MII is not set
|
# CONFIG_MII is not set
|
||||||
|
# CONFIG_ETHOC is not set
|
||||||
# CONFIG_DNET is not set
|
# CONFIG_DNET is not set
|
||||||
# CONFIG_IBM_NEW_EMAC_ZMII is not set
|
# CONFIG_IBM_NEW_EMAC_ZMII is not set
|
||||||
# CONFIG_IBM_NEW_EMAC_RGMII is not set
|
# CONFIG_IBM_NEW_EMAC_RGMII is not set
|
||||||
|
@ -405,7 +411,6 @@ CONFIG_NETDEV_10000=y
|
||||||
#
|
#
|
||||||
# CONFIG_WLAN_PRE80211 is not set
|
# CONFIG_WLAN_PRE80211 is not set
|
||||||
# CONFIG_WLAN_80211 is not set
|
# CONFIG_WLAN_80211 is not set
|
||||||
# CONFIG_IWLWIFI_LEDS is not set
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Enable WiMAX (Networking options) to see the WiMAX drivers
|
# Enable WiMAX (Networking options) to see the WiMAX drivers
|
||||||
|
@ -455,6 +460,7 @@ CONFIG_LEGACY_PTYS=y
|
||||||
CONFIG_LEGACY_PTY_COUNT=256
|
CONFIG_LEGACY_PTY_COUNT=256
|
||||||
# CONFIG_IPMI_HANDLER is not set
|
# CONFIG_IPMI_HANDLER is not set
|
||||||
CONFIG_HW_RANDOM=y
|
CONFIG_HW_RANDOM=y
|
||||||
|
# CONFIG_HW_RANDOM_TIMERIOMEM is not set
|
||||||
# CONFIG_RTC is not set
|
# CONFIG_RTC is not set
|
||||||
# CONFIG_GEN_RTC is not set
|
# CONFIG_GEN_RTC is not set
|
||||||
# CONFIG_R3964 is not set
|
# CONFIG_R3964 is not set
|
||||||
|
@ -525,7 +531,7 @@ CONFIG_USB_SUPPORT=y
|
||||||
#
|
#
|
||||||
|
|
||||||
#
|
#
|
||||||
# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may also be needed;
|
# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
|
||||||
#
|
#
|
||||||
# CONFIG_USB_GADGET is not set
|
# CONFIG_USB_GADGET is not set
|
||||||
|
|
||||||
|
@ -538,6 +544,7 @@ CONFIG_USB_SUPPORT=y
|
||||||
# CONFIG_ACCESSIBILITY is not set
|
# CONFIG_ACCESSIBILITY is not set
|
||||||
# CONFIG_RTC_CLASS is not set
|
# CONFIG_RTC_CLASS is not set
|
||||||
# CONFIG_DMADEVICES is not set
|
# CONFIG_DMADEVICES is not set
|
||||||
|
# CONFIG_AUXDISPLAY is not set
|
||||||
# CONFIG_UIO is not set
|
# CONFIG_UIO is not set
|
||||||
# CONFIG_STAGING is not set
|
# CONFIG_STAGING is not set
|
||||||
|
|
||||||
|
@ -562,6 +569,11 @@ CONFIG_FILE_LOCKING=y
|
||||||
# CONFIG_AUTOFS4_FS is not set
|
# CONFIG_AUTOFS4_FS is not set
|
||||||
# CONFIG_FUSE_FS is not set
|
# CONFIG_FUSE_FS is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Caches
|
||||||
|
#
|
||||||
|
# CONFIG_FSCACHE is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# CD-ROM/DVD Filesystems
|
# CD-ROM/DVD Filesystems
|
||||||
#
|
#
|
||||||
|
@ -601,8 +613,13 @@ CONFIG_CRAMFS=y
|
||||||
# CONFIG_HPFS_FS is not set
|
# CONFIG_HPFS_FS is not set
|
||||||
# CONFIG_QNX4FS_FS is not set
|
# CONFIG_QNX4FS_FS is not set
|
||||||
CONFIG_ROMFS_FS=y
|
CONFIG_ROMFS_FS=y
|
||||||
|
CONFIG_ROMFS_BACKED_BY_BLOCK=y
|
||||||
|
# CONFIG_ROMFS_BACKED_BY_MTD is not set
|
||||||
|
# CONFIG_ROMFS_BACKED_BY_BOTH is not set
|
||||||
|
CONFIG_ROMFS_ON_BLOCK=y
|
||||||
# CONFIG_SYSV_FS is not set
|
# CONFIG_SYSV_FS is not set
|
||||||
# CONFIG_UFS_FS is not set
|
# CONFIG_UFS_FS is not set
|
||||||
|
# CONFIG_NILFS2_FS is not set
|
||||||
CONFIG_NETWORK_FILESYSTEMS=y
|
CONFIG_NETWORK_FILESYSTEMS=y
|
||||||
CONFIG_NFS_FS=y
|
CONFIG_NFS_FS=y
|
||||||
CONFIG_NFS_V3=y
|
CONFIG_NFS_V3=y
|
||||||
|
@ -614,7 +631,6 @@ CONFIG_LOCKD_V4=y
|
||||||
CONFIG_NFS_ACL_SUPPORT=y
|
CONFIG_NFS_ACL_SUPPORT=y
|
||||||
CONFIG_NFS_COMMON=y
|
CONFIG_NFS_COMMON=y
|
||||||
CONFIG_SUNRPC=y
|
CONFIG_SUNRPC=y
|
||||||
# CONFIG_SUNRPC_REGISTER_V4 is not set
|
|
||||||
# CONFIG_RPCSEC_GSS_KRB5 is not set
|
# CONFIG_RPCSEC_GSS_KRB5 is not set
|
||||||
# CONFIG_RPCSEC_GSS_SPKM3 is not set
|
# CONFIG_RPCSEC_GSS_SPKM3 is not set
|
||||||
# CONFIG_SMB_FS is not set
|
# CONFIG_SMB_FS is not set
|
||||||
|
@ -647,6 +663,9 @@ CONFIG_DEBUG_SHIRQ=y
|
||||||
CONFIG_DETECT_SOFTLOCKUP=y
|
CONFIG_DETECT_SOFTLOCKUP=y
|
||||||
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=y
|
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=y
|
||||||
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=1
|
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=1
|
||||||
|
CONFIG_DETECT_HUNG_TASK=y
|
||||||
|
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
|
||||||
|
CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0
|
||||||
CONFIG_SCHED_DEBUG=y
|
CONFIG_SCHED_DEBUG=y
|
||||||
CONFIG_SCHEDSTATS=y
|
CONFIG_SCHEDSTATS=y
|
||||||
CONFIG_TIMER_STATS=y
|
CONFIG_TIMER_STATS=y
|
||||||
|
@ -678,15 +697,8 @@ CONFIG_DEBUG_SG=y
|
||||||
# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
|
# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
|
||||||
# CONFIG_FAULT_INJECTION is not set
|
# CONFIG_FAULT_INJECTION is not set
|
||||||
CONFIG_SYSCTL_SYSCALL_CHECK=y
|
CONFIG_SYSCTL_SYSCALL_CHECK=y
|
||||||
|
# CONFIG_PAGE_POISONING is not set
|
||||||
#
|
# CONFIG_DYNAMIC_DEBUG is not set
|
||||||
# Tracers
|
|
||||||
#
|
|
||||||
# CONFIG_SCHED_TRACER is not set
|
|
||||||
# CONFIG_CONTEXT_SWITCH_TRACER is not set
|
|
||||||
# CONFIG_BOOT_TRACER is not set
|
|
||||||
# CONFIG_TRACE_BRANCH_PROFILING is not set
|
|
||||||
# CONFIG_DYNAMIC_PRINTK_DEBUG is not set
|
|
||||||
# CONFIG_SAMPLES is not set
|
# CONFIG_SAMPLES is not set
|
||||||
CONFIG_EARLY_PRINTK=y
|
CONFIG_EARLY_PRINTK=y
|
||||||
CONFIG_HEART_BEAT=y
|
CONFIG_HEART_BEAT=y
|
||||||
|
@ -777,6 +789,7 @@ CONFIG_CRYPTO=y
|
||||||
# Compression
|
# Compression
|
||||||
#
|
#
|
||||||
# CONFIG_CRYPTO_DEFLATE is not set
|
# CONFIG_CRYPTO_DEFLATE is not set
|
||||||
|
# CONFIG_CRYPTO_ZLIB is not set
|
||||||
# CONFIG_CRYPTO_LZO is not set
|
# CONFIG_CRYPTO_LZO is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -784,6 +797,7 @@ CONFIG_CRYPTO=y
|
||||||
#
|
#
|
||||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||||
CONFIG_CRYPTO_HW=y
|
CONFIG_CRYPTO_HW=y
|
||||||
|
# CONFIG_BINARY_PRINTF is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# Library routines
|
# Library routines
|
||||||
|
@ -797,8 +811,8 @@ CONFIG_GENERIC_FIND_LAST_BIT=y
|
||||||
# CONFIG_CRC7 is not set
|
# CONFIG_CRC7 is not set
|
||||||
# CONFIG_LIBCRC32C is not set
|
# CONFIG_LIBCRC32C is not set
|
||||||
CONFIG_ZLIB_INFLATE=y
|
CONFIG_ZLIB_INFLATE=y
|
||||||
CONFIG_PLIST=y
|
|
||||||
CONFIG_HAS_IOMEM=y
|
CONFIG_HAS_IOMEM=y
|
||||||
CONFIG_HAS_IOPORT=y
|
CONFIG_HAS_IOPORT=y
|
||||||
CONFIG_HAS_DMA=y
|
CONFIG_HAS_DMA=y
|
||||||
CONFIG_HAVE_LMB=y
|
CONFIG_HAVE_LMB=y
|
||||||
|
CONFIG_NLATTR=y
|
||||||
|
|
|
@ -14,8 +14,8 @@
|
||||||
#include <asm/cpuinfo.h>
|
#include <asm/cpuinfo.h>
|
||||||
#include <asm/pvr.h>
|
#include <asm/pvr.h>
|
||||||
|
|
||||||
const static char family_string[] = CONFIG_XILINX_MICROBLAZE0_FAMILY;
|
static const char family_string[] = CONFIG_XILINX_MICROBLAZE0_FAMILY;
|
||||||
const static char cpu_ver_string[] = CONFIG_XILINX_MICROBLAZE0_HW_VER;
|
static const char cpu_ver_string[] = CONFIG_XILINX_MICROBLAZE0_HW_VER;
|
||||||
|
|
||||||
#define err_printk(x) \
|
#define err_printk(x) \
|
||||||
early_printk("ERROR: Microblaze " x "- different for kernel and DTS\n");
|
early_printk("ERROR: Microblaze " x "- different for kernel and DTS\n");
|
||||||
|
|
|
@ -137,8 +137,8 @@ void __init init_IRQ(void)
|
||||||
|
|
||||||
intr_type =
|
intr_type =
|
||||||
*(int *) of_get_property(intc, "xlnx,kind-of-intr", NULL);
|
*(int *) of_get_property(intc, "xlnx,kind-of-intr", NULL);
|
||||||
if (intr_type >= (1 << nr_irq))
|
if (intr_type >= (1 << (nr_irq + 1)))
|
||||||
printk(KERN_INFO " ERROR: Mishmash in king-of-intr param\n");
|
printk(KERN_INFO " ERROR: Mismatch in kind-of-intr param\n");
|
||||||
|
|
||||||
#ifdef CONFIG_SELFMOD_INTC
|
#ifdef CONFIG_SELFMOD_INTC
|
||||||
selfmod_function((int *) arr_func, intc_baseaddr);
|
selfmod_function((int *) arr_func, intc_baseaddr);
|
||||||
|
|
|
@ -131,7 +131,7 @@ sys_ipc(uint call, int first, int second, int third, void *ptr, long fifth)
|
||||||
ret = sys_shmctl(first, second, (struct shmid_ds *) ptr);
|
ret = sys_shmctl(first, second, (struct shmid_ds *) ptr);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return -EINVAL;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
asmlinkage int sys_vfork(struct pt_regs *regs)
|
asmlinkage int sys_vfork(struct pt_regs *regs)
|
||||||
|
|
|
@ -1411,13 +1411,12 @@ config PAGE_SIZE_4KB
|
||||||
|
|
||||||
config PAGE_SIZE_8KB
|
config PAGE_SIZE_8KB
|
||||||
bool "8kB"
|
bool "8kB"
|
||||||
depends on EXPERIMENTAL && CPU_R8000
|
depends on (EXPERIMENTAL && CPU_R8000) || CPU_CAVIUM_OCTEON
|
||||||
help
|
help
|
||||||
Using 8kB page size will result in higher performance kernel at
|
Using 8kB page size will result in higher performance kernel at
|
||||||
the price of higher memory consumption. This option is available
|
the price of higher memory consumption. This option is available
|
||||||
only on the R8000 processor. Not that at the time of this writing
|
only on R8000 and cnMIPS processors. Note that you will need a
|
||||||
this option is still high experimental; there are also issues with
|
suitable Linux distribution to support this.
|
||||||
compatibility of user applications.
|
|
||||||
|
|
||||||
config PAGE_SIZE_16KB
|
config PAGE_SIZE_16KB
|
||||||
bool "16kB"
|
bool "16kB"
|
||||||
|
@ -1428,6 +1427,15 @@ config PAGE_SIZE_16KB
|
||||||
all non-R3000 family processors. Note that you will need a suitable
|
all non-R3000 family processors. Note that you will need a suitable
|
||||||
Linux distribution to support this.
|
Linux distribution to support this.
|
||||||
|
|
||||||
|
config PAGE_SIZE_32KB
|
||||||
|
bool "32kB"
|
||||||
|
depends on CPU_CAVIUM_OCTEON
|
||||||
|
help
|
||||||
|
Using 32kB page size will result in higher performance kernel at
|
||||||
|
the price of higher memory consumption. This option is available
|
||||||
|
only on cnMIPS cores. Note that you will need a suitable Linux
|
||||||
|
distribution to support this.
|
||||||
|
|
||||||
config PAGE_SIZE_64KB
|
config PAGE_SIZE_64KB
|
||||||
bool "64kB"
|
bool "64kB"
|
||||||
depends on EXPERIMENTAL && !CPU_R3000 && !CPU_TX39XX
|
depends on EXPERIMENTAL && !CPU_R3000 && !CPU_TX39XX
|
||||||
|
@ -1958,10 +1966,6 @@ config SECCOMP
|
||||||
|
|
||||||
endmenu
|
endmenu
|
||||||
|
|
||||||
config RWSEM_GENERIC_SPINLOCK
|
|
||||||
bool
|
|
||||||
default y
|
|
||||||
|
|
||||||
config LOCKDEP_SUPPORT
|
config LOCKDEP_SUPPORT
|
||||||
bool
|
bool
|
||||||
default y
|
default y
|
||||||
|
|
|
@ -14,8 +14,6 @@
|
||||||
|
|
||||||
KBUILD_DEFCONFIG := ip22_defconfig
|
KBUILD_DEFCONFIG := ip22_defconfig
|
||||||
|
|
||||||
cflags-y := -ffunction-sections
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Select the object file format to substitute into the linker script.
|
# Select the object file format to substitute into the linker script.
|
||||||
#
|
#
|
||||||
|
@ -50,6 +48,9 @@ ifneq ($(SUBARCH),$(ARCH))
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
cflags-y := -ffunction-sections
|
||||||
|
cflags-y += $(call cc-option, -mno-check-zero-division)
|
||||||
|
|
||||||
ifdef CONFIG_32BIT
|
ifdef CONFIG_32BIT
|
||||||
ld-emul = $(32bit-emul)
|
ld-emul = $(32bit-emul)
|
||||||
vmlinux-32 = vmlinux
|
vmlinux-32 = vmlinux
|
||||||
|
@ -472,12 +473,12 @@ endif
|
||||||
# Simplified: what IP22 does at 128MB+ in ksegN, IP28 does at 512MB+ in xkphys
|
# Simplified: what IP22 does at 128MB+ in ksegN, IP28 does at 512MB+ in xkphys
|
||||||
#
|
#
|
||||||
ifdef CONFIG_SGI_IP28
|
ifdef CONFIG_SGI_IP28
|
||||||
ifeq ($(call cc-option-yn,-mr10k-cache-barrier=1), n)
|
ifeq ($(call cc-option-yn,-mr10k-cache-barrier=store), n)
|
||||||
$(error gcc doesn't support needed option -mr10k-cache-barrier=1)
|
$(error gcc doesn't support needed option -mr10k-cache-barrier=store)
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
core-$(CONFIG_SGI_IP28) += arch/mips/sgi-ip22/
|
core-$(CONFIG_SGI_IP28) += arch/mips/sgi-ip22/
|
||||||
cflags-$(CONFIG_SGI_IP28) += -mr10k-cache-barrier=1 -I$(srctree)/arch/mips/include/asm/mach-ip28
|
cflags-$(CONFIG_SGI_IP28) += -mr10k-cache-barrier=store -I$(srctree)/arch/mips/include/asm/mach-ip28
|
||||||
load-$(CONFIG_SGI_IP28) += 0xa800000020004000
|
load-$(CONFIG_SGI_IP28) += 0xa800000020004000
|
||||||
|
|
||||||
#
|
#
|
||||||
|
|
|
@ -44,7 +44,7 @@
|
||||||
|
|
||||||
extern int allow_au1k_wait; /* default off for CP0 Counter */
|
extern int allow_au1k_wait; /* default off for CP0 Counter */
|
||||||
|
|
||||||
static cycle_t au1x_counter1_read(void)
|
static cycle_t au1x_counter1_read(struct clocksource *cs)
|
||||||
{
|
{
|
||||||
return au_readl(SYS_RTCREAD);
|
return au_readl(SYS_RTCREAD);
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,7 +38,7 @@ void octeon_init_cvmcount(void)
|
||||||
local_irq_restore(flags);
|
local_irq_restore(flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
static cycle_t octeon_cvmcount_read(void)
|
static cycle_t octeon_cvmcount_read(struct clocksource *cs)
|
||||||
{
|
{
|
||||||
return read_c0_cvmcount();
|
return read_c0_cvmcount();
|
||||||
}
|
}
|
||||||
|
|
|
@ -567,7 +567,7 @@ static inline unsigned long __fls(unsigned long word)
|
||||||
int num;
|
int num;
|
||||||
|
|
||||||
if (BITS_PER_LONG == 32 &&
|
if (BITS_PER_LONG == 32 &&
|
||||||
__builtin_constant_p(cpu_has_mips_r) && cpu_has_mips_r) {
|
__builtin_constant_p(cpu_has_clo_clz) && cpu_has_clo_clz) {
|
||||||
__asm__(
|
__asm__(
|
||||||
" .set push \n"
|
" .set push \n"
|
||||||
" .set mips32 \n"
|
" .set mips32 \n"
|
||||||
|
@ -644,7 +644,7 @@ static inline int fls(int x)
|
||||||
{
|
{
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
if (__builtin_constant_p(cpu_has_mips_r) && cpu_has_mips_r) {
|
if (__builtin_constant_p(cpu_has_clo_clz) && cpu_has_clo_clz) {
|
||||||
__asm__("clz %0, %1" : "=r" (x) : "r" (x));
|
__asm__("clz %0, %1" : "=r" (x) : "r" (x));
|
||||||
|
|
||||||
return 32 - x;
|
return 32 - x;
|
||||||
|
|
|
@ -40,7 +40,7 @@ static inline
|
||||||
__wsum csum_partial_copy_from_user(const void __user *src, void *dst, int len,
|
__wsum csum_partial_copy_from_user(const void __user *src, void *dst, int len,
|
||||||
__wsum sum, int *err_ptr)
|
__wsum sum, int *err_ptr)
|
||||||
{
|
{
|
||||||
might_sleep();
|
might_fault();
|
||||||
return __csum_partial_copy_user((__force void *)src, dst,
|
return __csum_partial_copy_user((__force void *)src, dst,
|
||||||
len, sum, err_ptr);
|
len, sum, err_ptr);
|
||||||
}
|
}
|
||||||
|
@ -53,7 +53,7 @@ static inline
|
||||||
__wsum csum_and_copy_to_user(const void *src, void __user *dst, int len,
|
__wsum csum_and_copy_to_user(const void *src, void __user *dst, int len,
|
||||||
__wsum sum, int *err_ptr)
|
__wsum sum, int *err_ptr)
|
||||||
{
|
{
|
||||||
might_sleep();
|
might_fault();
|
||||||
if (access_ok(VERIFY_WRITE, dst, len))
|
if (access_ok(VERIFY_WRITE, dst, len))
|
||||||
return __csum_partial_copy_user(src, (__force void *)dst,
|
return __csum_partial_copy_user(src, (__force void *)dst,
|
||||||
len, sum, err_ptr);
|
len, sum, err_ptr);
|
||||||
|
|
|
@ -3,7 +3,6 @@
|
||||||
/*
|
/*
|
||||||
* Architecture specific compatibility types
|
* Architecture specific compatibility types
|
||||||
*/
|
*/
|
||||||
#include <linux/seccomp.h>
|
|
||||||
#include <linux/thread_info.h>
|
#include <linux/thread_info.h>
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
#include <asm/page.h>
|
#include <asm/page.h>
|
||||||
|
|
|
@ -147,6 +147,15 @@
|
||||||
#define cpu_has_mips_r (cpu_has_mips32r1 | cpu_has_mips32r2 | \
|
#define cpu_has_mips_r (cpu_has_mips32r1 | cpu_has_mips32r2 | \
|
||||||
cpu_has_mips64r1 | cpu_has_mips64r2)
|
cpu_has_mips64r1 | cpu_has_mips64r2)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* MIPS32, MIPS64, VR5500, IDT32332, IDT32334 and maybe a few other
|
||||||
|
* pre-MIPS32/MIPS53 processors have CLO, CLZ. For 64-bit kernels
|
||||||
|
* cpu_has_clo_clz also indicates the availability of DCLO and DCLZ.
|
||||||
|
*/
|
||||||
|
# ifndef cpu_has_clo_clz
|
||||||
|
# define cpu_has_clo_clz cpu_has_mips_r
|
||||||
|
# endif
|
||||||
|
|
||||||
#ifndef cpu_has_dsp
|
#ifndef cpu_has_dsp
|
||||||
#define cpu_has_dsp (cpu_data[0].ases & MIPS_ASE_DSP)
|
#define cpu_has_dsp (cpu_data[0].ases & MIPS_ASE_DSP)
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -6,105 +6,63 @@
|
||||||
* License. See the file "COPYING" in the main directory of this archive
|
* License. See the file "COPYING" in the main directory of this archive
|
||||||
* for more details.
|
* for more details.
|
||||||
*/
|
*/
|
||||||
#ifndef _ASM_DIV64_H
|
#ifndef __ASM_DIV64_H
|
||||||
#define _ASM_DIV64_H
|
#define __ASM_DIV64_H
|
||||||
|
|
||||||
|
#include <asm-generic/div64.h>
|
||||||
|
|
||||||
|
#if BITS_PER_LONG == 64
|
||||||
|
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
|
|
||||||
#if (_MIPS_SZLONG == 32)
|
|
||||||
|
|
||||||
#include <asm/compiler.h>
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* No traps on overflows for any of these...
|
* No traps on overflows for any of these...
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define do_div64_32(res, high, low, base) ({ \
|
#define __div64_32(n, base) \
|
||||||
unsigned long __quot32, __mod32; \
|
({ \
|
||||||
unsigned long __cf, __tmp, __tmp2, __i; \
|
unsigned long __cf, __tmp, __tmp2, __i; \
|
||||||
\
|
unsigned long __quot32, __mod32; \
|
||||||
__asm__(".set push\n\t" \
|
unsigned long __high, __low; \
|
||||||
".set noat\n\t" \
|
unsigned long long __n; \
|
||||||
".set noreorder\n\t" \
|
\
|
||||||
"move %2, $0\n\t" \
|
__high = *__n >> 32; \
|
||||||
"move %3, $0\n\t" \
|
__low = __n; \
|
||||||
"b 1f\n\t" \
|
__asm__( \
|
||||||
" li %4, 0x21\n" \
|
" .set push \n" \
|
||||||
"0:\n\t" \
|
" .set noat \n" \
|
||||||
"sll $1, %0, 0x1\n\t" \
|
" .set noreorder \n" \
|
||||||
"srl %3, %0, 0x1f\n\t" \
|
" move %2, $0 \n" \
|
||||||
"or %0, $1, %5\n\t" \
|
" move %3, $0 \n" \
|
||||||
"sll %1, %1, 0x1\n\t" \
|
" b 1f \n" \
|
||||||
"sll %2, %2, 0x1\n" \
|
" li %4, 0x21 \n" \
|
||||||
"1:\n\t" \
|
"0: \n" \
|
||||||
"bnez %3, 2f\n\t" \
|
" sll $1, %0, 0x1 \n" \
|
||||||
" sltu %5, %0, %z6\n\t" \
|
" srl %3, %0, 0x1f \n" \
|
||||||
"bnez %5, 3f\n" \
|
" or %0, $1, %5 \n" \
|
||||||
"2:\n\t" \
|
" sll %1, %1, 0x1 \n" \
|
||||||
" addiu %4, %4, -1\n\t" \
|
" sll %2, %2, 0x1 \n" \
|
||||||
"subu %0, %0, %z6\n\t" \
|
"1: \n" \
|
||||||
"addiu %2, %2, 1\n" \
|
" bnez %3, 2f \n" \
|
||||||
"3:\n\t" \
|
" sltu %5, %0, %z6 \n" \
|
||||||
"bnez %4, 0b\n\t" \
|
" bnez %5, 3f \n" \
|
||||||
" srl %5, %1, 0x1f\n\t" \
|
"2: \n" \
|
||||||
".set pop" \
|
" addiu %4, %4, -1 \n" \
|
||||||
: "=&r" (__mod32), "=&r" (__tmp), \
|
" subu %0, %0, %z6 \n" \
|
||||||
"=&r" (__quot32), "=&r" (__cf), \
|
" addiu %2, %2, 1 \n" \
|
||||||
"=&r" (__i), "=&r" (__tmp2) \
|
"3: \n" \
|
||||||
: "Jr" (base), "0" (high), "1" (low)); \
|
" bnez %4, 0b\n\t" \
|
||||||
\
|
" srl %5, %1, 0x1f\n\t" \
|
||||||
(res) = __quot32; \
|
" .set pop" \
|
||||||
__mod32; })
|
: "=&r" (__mod32), "=&r" (__tmp), \
|
||||||
|
"=&r" (__quot32), "=&r" (__cf), \
|
||||||
|
"=&r" (__i), "=&r" (__tmp2) \
|
||||||
|
: "Jr" (base), "0" (__high), "1" (__low)); \
|
||||||
|
\
|
||||||
|
(__n) = __quot32; \
|
||||||
|
__mod32; \
|
||||||
|
})
|
||||||
|
|
||||||
#define do_div(n, base) ({ \
|
#endif /* BITS_PER_LONG == 64 */
|
||||||
unsigned long long __quot; \
|
|
||||||
unsigned long __mod; \
|
|
||||||
unsigned long long __div; \
|
|
||||||
unsigned long __upper, __low, __high, __base; \
|
|
||||||
\
|
|
||||||
__div = (n); \
|
|
||||||
__base = (base); \
|
|
||||||
\
|
|
||||||
__high = __div >> 32; \
|
|
||||||
__low = __div; \
|
|
||||||
__upper = __high; \
|
|
||||||
\
|
|
||||||
if (__high) \
|
|
||||||
__asm__("divu $0, %z2, %z3" \
|
|
||||||
: "=h" (__upper), "=l" (__high) \
|
|
||||||
: "Jr" (__high), "Jr" (__base) \
|
|
||||||
: GCC_REG_ACCUM); \
|
|
||||||
\
|
|
||||||
__mod = do_div64_32(__low, __upper, __low, __base); \
|
|
||||||
\
|
|
||||||
__quot = __high; \
|
|
||||||
__quot = __quot << 32 | __low; \
|
|
||||||
(n) = __quot; \
|
|
||||||
__mod; })
|
|
||||||
|
|
||||||
#endif /* (_MIPS_SZLONG == 32) */
|
#endif /* __ASM_DIV64_H */
|
||||||
|
|
||||||
#if (_MIPS_SZLONG == 64)
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Hey, we're already 64-bit, no
|
|
||||||
* need to play games..
|
|
||||||
*/
|
|
||||||
#define do_div(n, base) ({ \
|
|
||||||
unsigned long __quot; \
|
|
||||||
unsigned int __mod; \
|
|
||||||
unsigned long __div; \
|
|
||||||
unsigned int __base; \
|
|
||||||
\
|
|
||||||
__div = (n); \
|
|
||||||
__base = (base); \
|
|
||||||
\
|
|
||||||
__mod = __div % __base; \
|
|
||||||
__quot = __div / __base; \
|
|
||||||
\
|
|
||||||
(n) = __quot; \
|
|
||||||
__mod; })
|
|
||||||
|
|
||||||
#endif /* (_MIPS_SZLONG == 64) */
|
|
||||||
|
|
||||||
#endif /* _ASM_DIV64_H */
|
|
||||||
|
|
|
@ -24,8 +24,13 @@ extern int dma_map_sg(struct device *dev, struct scatterlist *sg, int nents,
|
||||||
enum dma_data_direction direction);
|
enum dma_data_direction direction);
|
||||||
extern dma_addr_t dma_map_page(struct device *dev, struct page *page,
|
extern dma_addr_t dma_map_page(struct device *dev, struct page *page,
|
||||||
unsigned long offset, size_t size, enum dma_data_direction direction);
|
unsigned long offset, size_t size, enum dma_data_direction direction);
|
||||||
extern void dma_unmap_page(struct device *dev, dma_addr_t dma_address,
|
|
||||||
size_t size, enum dma_data_direction direction);
|
static inline void dma_unmap_page(struct device *dev, dma_addr_t dma_address,
|
||||||
|
size_t size, enum dma_data_direction direction)
|
||||||
|
{
|
||||||
|
dma_unmap_single(dev, dma_address, size, direction);
|
||||||
|
}
|
||||||
|
|
||||||
extern void dma_unmap_sg(struct device *dev, struct scatterlist *sg,
|
extern void dma_unmap_sg(struct device *dev, struct scatterlist *sg,
|
||||||
int nhwentries, enum dma_data_direction direction);
|
int nhwentries, enum dma_data_direction direction);
|
||||||
extern void dma_sync_single_for_cpu(struct device *dev, dma_addr_t dma_handle,
|
extern void dma_sync_single_for_cpu(struct device *dev, dma_addr_t dma_handle,
|
||||||
|
|
|
@ -108,6 +108,9 @@ static inline unsigned long virt_to_fix(const unsigned long vaddr)
|
||||||
return __virt_to_fix(vaddr);
|
return __virt_to_fix(vaddr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define kmap_get_fixmap_pte(vaddr) \
|
||||||
|
pte_offset_kernel(pmd_offset(pud_offset(pgd_offset_k(vaddr), (vaddr)), (vaddr)), (vaddr))
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Called from pgtable_init()
|
* Called from pgtable_init()
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -138,8 +138,9 @@ do { \
|
||||||
__instruction_hazard(); \
|
__instruction_hazard(); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#elif defined(CONFIG_CPU_R10000) || defined(CONFIG_CPU_CAVIUM_OCTEON) || \
|
#elif defined(CONFIG_MACH_ALCHEMY) || defined(CONFIG_CPU_CAVIUM_OCTEON) || \
|
||||||
defined(CONFIG_CPU_R5500) || defined(CONFIG_MACH_ALCHEMY)
|
defined(CONFIG_CPU_LOONGSON2) || defined(CONFIG_CPU_R10000) || \
|
||||||
|
defined(CONFIG_CPU_R5500)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* R10000 rocks - all hazards handled in hardware, so this becomes a nobrainer.
|
* R10000 rocks - all hazards handled in hardware, so this becomes a nobrainer.
|
||||||
|
|
|
@ -30,8 +30,6 @@
|
||||||
/* declarations for highmem.c */
|
/* declarations for highmem.c */
|
||||||
extern unsigned long highstart_pfn, highend_pfn;
|
extern unsigned long highstart_pfn, highend_pfn;
|
||||||
|
|
||||||
extern pte_t *kmap_pte;
|
|
||||||
extern pgprot_t kmap_prot;
|
|
||||||
extern pte_t *pkmap_page_table;
|
extern pte_t *pkmap_page_table;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -62,6 +60,10 @@ extern struct page *__kmap_atomic_to_page(void *ptr);
|
||||||
|
|
||||||
#define flush_cache_kmaps() flush_cache_all()
|
#define flush_cache_kmaps() flush_cache_all()
|
||||||
|
|
||||||
|
extern void kmap_init(void);
|
||||||
|
|
||||||
|
#define kmap_prot PAGE_KERNEL
|
||||||
|
|
||||||
#endif /* __KERNEL__ */
|
#endif /* __KERNEL__ */
|
||||||
|
|
||||||
#endif /* _ASM_HIGHMEM_H */
|
#endif /* _ASM_HIGHMEM_H */
|
||||||
|
|
|
@ -715,7 +715,7 @@ enum soc_au1500_ints {
|
||||||
#ifdef CONFIG_SOC_AU1100
|
#ifdef CONFIG_SOC_AU1100
|
||||||
enum soc_au1100_ints {
|
enum soc_au1100_ints {
|
||||||
AU1100_FIRST_INT = MIPS_CPU_IRQ_BASE + 8,
|
AU1100_FIRST_INT = MIPS_CPU_IRQ_BASE + 8,
|
||||||
AU1100_UART0_INT,
|
AU1100_UART0_INT = AU1100_FIRST_INT,
|
||||||
AU1100_UART1_INT,
|
AU1100_UART1_INT,
|
||||||
AU1100_SD_INT,
|
AU1100_SD_INT,
|
||||||
AU1100_UART3_INT,
|
AU1100_UART3_INT,
|
||||||
|
@ -902,8 +902,8 @@ enum soc_au1200_ints {
|
||||||
AU1000_RTC_MATCH0_INT,
|
AU1000_RTC_MATCH0_INT,
|
||||||
AU1000_RTC_MATCH1_INT,
|
AU1000_RTC_MATCH1_INT,
|
||||||
AU1000_RTC_MATCH2_INT,
|
AU1000_RTC_MATCH2_INT,
|
||||||
|
AU1200_GPIO_203,
|
||||||
AU1200_NAND_INT = AU1200_FIRST_INT + 23,
|
AU1200_NAND_INT,
|
||||||
AU1200_GPIO_204,
|
AU1200_GPIO_204,
|
||||||
AU1200_GPIO_205,
|
AU1200_GPIO_205,
|
||||||
AU1200_GPIO_206,
|
AU1200_GPIO_206,
|
||||||
|
|
|
@ -46,20 +46,6 @@
|
||||||
#define CONFIG_BLK_DEV_IDE_AU1XXX_BURSTABLE_ON 0
|
#define CONFIG_BLK_DEV_IDE_AU1XXX_BURSTABLE_ON 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_PM
|
|
||||||
/*
|
|
||||||
* This will enable the device to be powered up when write() or read()
|
|
||||||
* is called. If this is not defined, the driver will return -EBUSY.
|
|
||||||
*/
|
|
||||||
#define WAKE_ON_ACCESS 1
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
spinlock_t lock; /* Used to block on state transitions */
|
|
||||||
au1xxx_power_dev_t *dev; /* Power Managers device structure */
|
|
||||||
unsigned stopped; /* Used to signal device is stopped */
|
|
||||||
} pm_state;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
u32 tx_dev_id, rx_dev_id, target_dev_id;
|
u32 tx_dev_id, rx_dev_id, target_dev_id;
|
||||||
u32 tx_chan, rx_chan;
|
u32 tx_chan, rx_chan;
|
||||||
|
@ -72,9 +58,6 @@ typedef struct {
|
||||||
#endif
|
#endif
|
||||||
int irq;
|
int irq;
|
||||||
u32 regbase;
|
u32 regbase;
|
||||||
#ifdef CONFIG_PM
|
|
||||||
pm_state pm;
|
|
||||||
#endif
|
|
||||||
} _auide_hwif;
|
} _auide_hwif;
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
59
arch/mips/include/asm/mach-lemote/cpu-feature-overrides.h
Normal file
59
arch/mips/include/asm/mach-lemote/cpu-feature-overrides.h
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
/*
|
||||||
|
* This file is subject to the terms and conditions of the GNU General Public
|
||||||
|
* License. See the file "COPYING" in the main directory of this archive
|
||||||
|
* for more details.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Wu Zhangjin <wuzj@lemote.com>
|
||||||
|
* Copyright (C) 2009 Philippe Vachon <philippe@cowpig.ca>
|
||||||
|
* Copyright (C) 2009 Zhang Le <r0bertz@gentoo.org>
|
||||||
|
*
|
||||||
|
* reference: /proc/cpuinfo,
|
||||||
|
* arch/mips/kernel/cpu-probe.c(cpu_probe_legacy),
|
||||||
|
* arch/mips/kernel/proc.c(show_cpuinfo),
|
||||||
|
* loongson2f user manual.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __ASM_MACH_LEMOTE_CPU_FEATURE_OVERRIDES_H
|
||||||
|
#define __ASM_MACH_LEMOTE_CPU_FEATURE_OVERRIDES_H
|
||||||
|
|
||||||
|
#define cpu_dcache_line_size() 32
|
||||||
|
#define cpu_icache_line_size() 32
|
||||||
|
#define cpu_scache_line_size() 32
|
||||||
|
|
||||||
|
|
||||||
|
#define cpu_has_32fpr 1
|
||||||
|
#define cpu_has_3k_cache 0
|
||||||
|
#define cpu_has_4k_cache 1
|
||||||
|
#define cpu_has_4kex 1
|
||||||
|
#define cpu_has_64bits 1
|
||||||
|
#define cpu_has_cache_cdex_p 0
|
||||||
|
#define cpu_has_cache_cdex_s 0
|
||||||
|
#define cpu_has_counter 1
|
||||||
|
#define cpu_has_dc_aliases 1
|
||||||
|
#define cpu_has_divec 0
|
||||||
|
#define cpu_has_dsp 0
|
||||||
|
#define cpu_has_ejtag 0
|
||||||
|
#define cpu_has_fpu 1
|
||||||
|
#define cpu_has_ic_fills_f_dc 0
|
||||||
|
#define cpu_has_inclusive_pcaches 1
|
||||||
|
#define cpu_has_llsc 1
|
||||||
|
#define cpu_has_mcheck 0
|
||||||
|
#define cpu_has_mdmx 0
|
||||||
|
#define cpu_has_mips16 0
|
||||||
|
#define cpu_has_mips32r1 0
|
||||||
|
#define cpu_has_mips32r2 0
|
||||||
|
#define cpu_has_mips3d 0
|
||||||
|
#define cpu_has_mips64r1 0
|
||||||
|
#define cpu_has_mips64r2 0
|
||||||
|
#define cpu_has_mipsmt 0
|
||||||
|
#define cpu_has_prefetch 0
|
||||||
|
#define cpu_has_smartmips 0
|
||||||
|
#define cpu_has_tlb 1
|
||||||
|
#define cpu_has_tx39_cache 0
|
||||||
|
#define cpu_has_userlocal 0
|
||||||
|
#define cpu_has_vce 0
|
||||||
|
#define cpu_has_vtag_icache 0
|
||||||
|
#define cpu_has_watch 1
|
||||||
|
#define cpu_icache_snoops_remote_store 1
|
||||||
|
|
||||||
|
#endif /* __ASM_MACH_LEMOTE_CPU_FEATURE_OVERRIDES_H */
|
|
@ -184,12 +184,19 @@
|
||||||
#else
|
#else
|
||||||
|
|
||||||
#define PM_4K 0x00000000
|
#define PM_4K 0x00000000
|
||||||
|
#define PM_8K 0x00002000
|
||||||
#define PM_16K 0x00006000
|
#define PM_16K 0x00006000
|
||||||
|
#define PM_32K 0x0000e000
|
||||||
#define PM_64K 0x0001e000
|
#define PM_64K 0x0001e000
|
||||||
|
#define PM_128K 0x0003e000
|
||||||
#define PM_256K 0x0007e000
|
#define PM_256K 0x0007e000
|
||||||
|
#define PM_512K 0x000fe000
|
||||||
#define PM_1M 0x001fe000
|
#define PM_1M 0x001fe000
|
||||||
|
#define PM_2M 0x003fe000
|
||||||
#define PM_4M 0x007fe000
|
#define PM_4M 0x007fe000
|
||||||
|
#define PM_8M 0x00ffe000
|
||||||
#define PM_16M 0x01ffe000
|
#define PM_16M 0x01ffe000
|
||||||
|
#define PM_32M 0x03ffe000
|
||||||
#define PM_64M 0x07ffe000
|
#define PM_64M 0x07ffe000
|
||||||
#define PM_256M 0x1fffe000
|
#define PM_256M 0x1fffe000
|
||||||
#define PM_1G 0x7fffe000
|
#define PM_1G 0x7fffe000
|
||||||
|
@ -201,8 +208,12 @@
|
||||||
*/
|
*/
|
||||||
#ifdef CONFIG_PAGE_SIZE_4KB
|
#ifdef CONFIG_PAGE_SIZE_4KB
|
||||||
#define PM_DEFAULT_MASK PM_4K
|
#define PM_DEFAULT_MASK PM_4K
|
||||||
|
#elif defined(CONFIG_PAGE_SIZE_8KB)
|
||||||
|
#define PM_DEFAULT_MASK PM_8K
|
||||||
#elif defined(CONFIG_PAGE_SIZE_16KB)
|
#elif defined(CONFIG_PAGE_SIZE_16KB)
|
||||||
#define PM_DEFAULT_MASK PM_16K
|
#define PM_DEFAULT_MASK PM_16K
|
||||||
|
#elif defined(CONFIG_PAGE_SIZE_32KB)
|
||||||
|
#define PM_DEFAULT_MASK PM_32K
|
||||||
#elif defined(CONFIG_PAGE_SIZE_64KB)
|
#elif defined(CONFIG_PAGE_SIZE_64KB)
|
||||||
#define PM_DEFAULT_MASK PM_64K
|
#define PM_DEFAULT_MASK PM_64K
|
||||||
#else
|
#else
|
||||||
|
@ -717,8 +728,8 @@ do { \
|
||||||
".set\tmips64\n\t" \
|
".set\tmips64\n\t" \
|
||||||
"dmfc0\t%M0, " #source "\n\t" \
|
"dmfc0\t%M0, " #source "\n\t" \
|
||||||
"dsll\t%L0, %M0, 32\n\t" \
|
"dsll\t%L0, %M0, 32\n\t" \
|
||||||
"dsrl\t%M0, %M0, 32\n\t" \
|
"dsra\t%M0, %M0, 32\n\t" \
|
||||||
"dsrl\t%L0, %L0, 32\n\t" \
|
"dsra\t%L0, %L0, 32\n\t" \
|
||||||
".set\tmips0" \
|
".set\tmips0" \
|
||||||
: "=r" (__val)); \
|
: "=r" (__val)); \
|
||||||
else \
|
else \
|
||||||
|
@ -726,8 +737,8 @@ do { \
|
||||||
".set\tmips64\n\t" \
|
".set\tmips64\n\t" \
|
||||||
"dmfc0\t%M0, " #source ", " #sel "\n\t" \
|
"dmfc0\t%M0, " #source ", " #sel "\n\t" \
|
||||||
"dsll\t%L0, %M0, 32\n\t" \
|
"dsll\t%L0, %M0, 32\n\t" \
|
||||||
"dsrl\t%M0, %M0, 32\n\t" \
|
"dsra\t%M0, %M0, 32\n\t" \
|
||||||
"dsrl\t%L0, %L0, 32\n\t" \
|
"dsra\t%L0, %L0, 32\n\t" \
|
||||||
".set\tmips0" \
|
".set\tmips0" \
|
||||||
: "=r" (__val)); \
|
: "=r" (__val)); \
|
||||||
local_irq_restore(__flags); \
|
local_irq_restore(__flags); \
|
||||||
|
@ -1484,14 +1495,15 @@ static inline unsigned int \
|
||||||
set_c0_##name(unsigned int set) \
|
set_c0_##name(unsigned int set) \
|
||||||
{ \
|
{ \
|
||||||
unsigned int res; \
|
unsigned int res; \
|
||||||
|
unsigned int new; \
|
||||||
unsigned int omt; \
|
unsigned int omt; \
|
||||||
unsigned long flags; \
|
unsigned long flags; \
|
||||||
\
|
\
|
||||||
local_irq_save(flags); \
|
local_irq_save(flags); \
|
||||||
omt = __dmt(); \
|
omt = __dmt(); \
|
||||||
res = read_c0_##name(); \
|
res = read_c0_##name(); \
|
||||||
res |= set; \
|
new = res | set; \
|
||||||
write_c0_##name(res); \
|
write_c0_##name(new); \
|
||||||
__emt(omt); \
|
__emt(omt); \
|
||||||
local_irq_restore(flags); \
|
local_irq_restore(flags); \
|
||||||
\
|
\
|
||||||
|
@ -1502,14 +1514,15 @@ static inline unsigned int \
|
||||||
clear_c0_##name(unsigned int clear) \
|
clear_c0_##name(unsigned int clear) \
|
||||||
{ \
|
{ \
|
||||||
unsigned int res; \
|
unsigned int res; \
|
||||||
|
unsigned int new; \
|
||||||
unsigned int omt; \
|
unsigned int omt; \
|
||||||
unsigned long flags; \
|
unsigned long flags; \
|
||||||
\
|
\
|
||||||
local_irq_save(flags); \
|
local_irq_save(flags); \
|
||||||
omt = __dmt(); \
|
omt = __dmt(); \
|
||||||
res = read_c0_##name(); \
|
res = read_c0_##name(); \
|
||||||
res &= ~clear; \
|
new = res & ~clear; \
|
||||||
write_c0_##name(res); \
|
write_c0_##name(new); \
|
||||||
__emt(omt); \
|
__emt(omt); \
|
||||||
local_irq_restore(flags); \
|
local_irq_restore(flags); \
|
||||||
\
|
\
|
||||||
|
@ -1517,9 +1530,10 @@ clear_c0_##name(unsigned int clear) \
|
||||||
} \
|
} \
|
||||||
\
|
\
|
||||||
static inline unsigned int \
|
static inline unsigned int \
|
||||||
change_c0_##name(unsigned int change, unsigned int new) \
|
change_c0_##name(unsigned int change, unsigned int newbits) \
|
||||||
{ \
|
{ \
|
||||||
unsigned int res; \
|
unsigned int res; \
|
||||||
|
unsigned int new; \
|
||||||
unsigned int omt; \
|
unsigned int omt; \
|
||||||
unsigned long flags; \
|
unsigned long flags; \
|
||||||
\
|
\
|
||||||
|
@ -1527,9 +1541,9 @@ change_c0_##name(unsigned int change, unsigned int new) \
|
||||||
\
|
\
|
||||||
omt = __dmt(); \
|
omt = __dmt(); \
|
||||||
res = read_c0_##name(); \
|
res = read_c0_##name(); \
|
||||||
res &= ~change; \
|
new = res & ~change; \
|
||||||
res |= (new & change); \
|
new |= (newbits & change); \
|
||||||
write_c0_##name(res); \
|
write_c0_##name(new); \
|
||||||
__emt(omt); \
|
__emt(omt); \
|
||||||
local_irq_restore(flags); \
|
local_irq_restore(flags); \
|
||||||
\
|
\
|
||||||
|
|
|
@ -23,6 +23,9 @@
|
||||||
#ifdef CONFIG_PAGE_SIZE_16KB
|
#ifdef CONFIG_PAGE_SIZE_16KB
|
||||||
#define PAGE_SHIFT 14
|
#define PAGE_SHIFT 14
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef CONFIG_PAGE_SIZE_32KB
|
||||||
|
#define PAGE_SHIFT 15
|
||||||
|
#endif
|
||||||
#ifdef CONFIG_PAGE_SIZE_64KB
|
#ifdef CONFIG_PAGE_SIZE_64KB
|
||||||
#define PAGE_SHIFT 16
|
#define PAGE_SHIFT 16
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -83,6 +83,12 @@
|
||||||
#define PMD_ORDER 0
|
#define PMD_ORDER 0
|
||||||
#define PTE_ORDER 0
|
#define PTE_ORDER 0
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef CONFIG_PAGE_SIZE_32KB
|
||||||
|
#define PGD_ORDER 0
|
||||||
|
#define PUD_ORDER aieeee_attempt_to_allocate_pud
|
||||||
|
#define PMD_ORDER 0
|
||||||
|
#define PTE_ORDER 0
|
||||||
|
#endif
|
||||||
#ifdef CONFIG_PAGE_SIZE_64KB
|
#ifdef CONFIG_PAGE_SIZE_64KB
|
||||||
#define PGD_ORDER 0
|
#define PGD_ORDER 0
|
||||||
#define PUD_ORDER aieeee_attempt_to_allocate_pud
|
#define PUD_ORDER aieeee_attempt_to_allocate_pud
|
||||||
|
|
|
@ -359,11 +359,11 @@
|
||||||
TO_NODE_UNCAC((nasid), LAUNCH_OFFSET(nasid, slice))
|
TO_NODE_UNCAC((nasid), LAUNCH_OFFSET(nasid, slice))
|
||||||
#define LAUNCH_SIZE(nasid) KLD_LAUNCH(nasid)->size
|
#define LAUNCH_SIZE(nasid) KLD_LAUNCH(nasid)->size
|
||||||
|
|
||||||
#define NMI_OFFSET(nasid, slice) \
|
#define SN_NMI_OFFSET(nasid, slice) \
|
||||||
(KLD_NMI(nasid)->offset + \
|
(KLD_NMI(nasid)->offset + \
|
||||||
KLD_NMI(nasid)->stride * (slice))
|
KLD_NMI(nasid)->stride * (slice))
|
||||||
#define NMI_ADDR(nasid, slice) \
|
#define NMI_ADDR(nasid, slice) \
|
||||||
TO_NODE_UNCAC((nasid), NMI_OFFSET(nasid, slice))
|
TO_NODE_UNCAC((nasid), SN_NMI_OFFSET(nasid, slice))
|
||||||
#define NMI_SIZE(nasid) KLD_NMI(nasid)->size
|
#define NMI_SIZE(nasid) KLD_NMI(nasid)->size
|
||||||
|
|
||||||
#define KLCONFIG_OFFSET(nasid) KLD_KLCONFIG(nasid)->offset
|
#define KLCONFIG_OFFSET(nasid) KLD_KLCONFIG(nasid)->offset
|
||||||
|
|
|
@ -3,13 +3,13 @@
|
||||||
* License. See the file "COPYING" in the main directory of this archive
|
* License. See the file "COPYING" in the main directory of this archive
|
||||||
* for more details.
|
* for more details.
|
||||||
*
|
*
|
||||||
|
* Derived from IRIX <sys/SN/nmi.h>, Revision 1.5.
|
||||||
|
*
|
||||||
* Copyright (C) 1992 - 1997 Silicon Graphics, Inc.
|
* Copyright (C) 1992 - 1997 Silicon Graphics, Inc.
|
||||||
*/
|
*/
|
||||||
#ifndef __ASM_SN_NMI_H
|
#ifndef __ASM_SN_NMI_H
|
||||||
#define __ASM_SN_NMI_H
|
#define __ASM_SN_NMI_H
|
||||||
|
|
||||||
#ident "$Revision: 1.5 $"
|
|
||||||
|
|
||||||
#include <asm/sn/addrs.h>
|
#include <asm/sn/addrs.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -75,6 +75,9 @@ register struct thread_info *__current_thread_info __asm__("$28");
|
||||||
#ifdef CONFIG_PAGE_SIZE_16KB
|
#ifdef CONFIG_PAGE_SIZE_16KB
|
||||||
#define THREAD_SIZE_ORDER (0)
|
#define THREAD_SIZE_ORDER (0)
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef CONFIG_PAGE_SIZE_32KB
|
||||||
|
#define THREAD_SIZE_ORDER (0)
|
||||||
|
#endif
|
||||||
#ifdef CONFIG_PAGE_SIZE_64KB
|
#ifdef CONFIG_PAGE_SIZE_64KB
|
||||||
#define THREAD_SIZE_ORDER (0)
|
#define THREAD_SIZE_ORDER (0)
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -57,7 +57,11 @@ extern int r4k_clockevent_init(void);
|
||||||
|
|
||||||
static inline int mips_clockevent_init(void)
|
static inline int mips_clockevent_init(void)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_CEVT_R4K
|
#ifdef CONFIG_MIPS_MT_SMTC
|
||||||
|
extern int smtc_clockevent_init(void);
|
||||||
|
|
||||||
|
return smtc_clockevent_init();
|
||||||
|
#elif defined(CONFIG_CEVT_R4K)
|
||||||
return r4k_clockevent_init();
|
return r4k_clockevent_init();
|
||||||
#else
|
#else
|
||||||
return -ENXIO;
|
return -ENXIO;
|
||||||
|
|
|
@ -105,10 +105,20 @@
|
||||||
#define __access_mask get_fs().seg
|
#define __access_mask get_fs().seg
|
||||||
|
|
||||||
#define __access_ok(addr, size, mask) \
|
#define __access_ok(addr, size, mask) \
|
||||||
(((signed long)((mask) & ((addr) | ((addr) + (size)) | __ua_size(size)))) == 0)
|
({ \
|
||||||
|
unsigned long __addr = (unsigned long) (addr); \
|
||||||
|
unsigned long __size = size; \
|
||||||
|
unsigned long __mask = mask; \
|
||||||
|
unsigned long __ok; \
|
||||||
|
\
|
||||||
|
__chk_user_ptr(addr); \
|
||||||
|
__ok = (signed long)(__mask & (__addr | (__addr + __size) | \
|
||||||
|
__ua_size(__size))); \
|
||||||
|
__ok == 0; \
|
||||||
|
})
|
||||||
|
|
||||||
#define access_ok(type, addr, size) \
|
#define access_ok(type, addr, size) \
|
||||||
likely(__access_ok((unsigned long)(addr), (size), __access_mask))
|
likely(__access_ok((addr), (size), __access_mask))
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* put_user: - Write a simple value into user space.
|
* put_user: - Write a simple value into user space.
|
||||||
|
@ -225,6 +235,7 @@ do { \
|
||||||
({ \
|
({ \
|
||||||
int __gu_err; \
|
int __gu_err; \
|
||||||
\
|
\
|
||||||
|
__chk_user_ptr(ptr); \
|
||||||
__get_user_common((x), size, ptr); \
|
__get_user_common((x), size, ptr); \
|
||||||
__gu_err; \
|
__gu_err; \
|
||||||
})
|
})
|
||||||
|
@ -234,6 +245,7 @@ do { \
|
||||||
int __gu_err = -EFAULT; \
|
int __gu_err = -EFAULT; \
|
||||||
const __typeof__(*(ptr)) __user * __gu_ptr = (ptr); \
|
const __typeof__(*(ptr)) __user * __gu_ptr = (ptr); \
|
||||||
\
|
\
|
||||||
|
might_fault(); \
|
||||||
if (likely(access_ok(VERIFY_READ, __gu_ptr, size))) \
|
if (likely(access_ok(VERIFY_READ, __gu_ptr, size))) \
|
||||||
__get_user_common((x), size, __gu_ptr); \
|
__get_user_common((x), size, __gu_ptr); \
|
||||||
\
|
\
|
||||||
|
@ -305,6 +317,7 @@ do { \
|
||||||
__typeof__(*(ptr)) __pu_val; \
|
__typeof__(*(ptr)) __pu_val; \
|
||||||
int __pu_err = 0; \
|
int __pu_err = 0; \
|
||||||
\
|
\
|
||||||
|
__chk_user_ptr(ptr); \
|
||||||
__pu_val = (x); \
|
__pu_val = (x); \
|
||||||
switch (size) { \
|
switch (size) { \
|
||||||
case 1: __put_user_asm("sb", ptr); break; \
|
case 1: __put_user_asm("sb", ptr); break; \
|
||||||
|
@ -322,6 +335,7 @@ do { \
|
||||||
__typeof__(*(ptr)) __pu_val = (x); \
|
__typeof__(*(ptr)) __pu_val = (x); \
|
||||||
int __pu_err = -EFAULT; \
|
int __pu_err = -EFAULT; \
|
||||||
\
|
\
|
||||||
|
might_fault(); \
|
||||||
if (likely(access_ok(VERIFY_WRITE, __pu_addr, size))) { \
|
if (likely(access_ok(VERIFY_WRITE, __pu_addr, size))) { \
|
||||||
switch (size) { \
|
switch (size) { \
|
||||||
case 1: __put_user_asm("sb", __pu_addr); break; \
|
case 1: __put_user_asm("sb", __pu_addr); break; \
|
||||||
|
@ -696,10 +710,10 @@ extern size_t __copy_user(void *__to, const void *__from, size_t __n);
|
||||||
const void *__cu_from; \
|
const void *__cu_from; \
|
||||||
long __cu_len; \
|
long __cu_len; \
|
||||||
\
|
\
|
||||||
might_sleep(); \
|
|
||||||
__cu_to = (to); \
|
__cu_to = (to); \
|
||||||
__cu_from = (from); \
|
__cu_from = (from); \
|
||||||
__cu_len = (n); \
|
__cu_len = (n); \
|
||||||
|
might_fault(); \
|
||||||
__cu_len = __invoke_copy_to_user(__cu_to, __cu_from, __cu_len); \
|
__cu_len = __invoke_copy_to_user(__cu_to, __cu_from, __cu_len); \
|
||||||
__cu_len; \
|
__cu_len; \
|
||||||
})
|
})
|
||||||
|
@ -752,13 +766,14 @@ extern size_t __copy_user_inatomic(void *__to, const void *__from, size_t __n);
|
||||||
const void *__cu_from; \
|
const void *__cu_from; \
|
||||||
long __cu_len; \
|
long __cu_len; \
|
||||||
\
|
\
|
||||||
might_sleep(); \
|
|
||||||
__cu_to = (to); \
|
__cu_to = (to); \
|
||||||
__cu_from = (from); \
|
__cu_from = (from); \
|
||||||
__cu_len = (n); \
|
__cu_len = (n); \
|
||||||
if (access_ok(VERIFY_WRITE, __cu_to, __cu_len)) \
|
if (access_ok(VERIFY_WRITE, __cu_to, __cu_len)) { \
|
||||||
|
might_fault(); \
|
||||||
__cu_len = __invoke_copy_to_user(__cu_to, __cu_from, \
|
__cu_len = __invoke_copy_to_user(__cu_to, __cu_from, \
|
||||||
__cu_len); \
|
__cu_len); \
|
||||||
|
} \
|
||||||
__cu_len; \
|
__cu_len; \
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -831,10 +846,10 @@ extern size_t __copy_user_inatomic(void *__to, const void *__from, size_t __n);
|
||||||
const void __user *__cu_from; \
|
const void __user *__cu_from; \
|
||||||
long __cu_len; \
|
long __cu_len; \
|
||||||
\
|
\
|
||||||
might_sleep(); \
|
|
||||||
__cu_to = (to); \
|
__cu_to = (to); \
|
||||||
__cu_from = (from); \
|
__cu_from = (from); \
|
||||||
__cu_len = (n); \
|
__cu_len = (n); \
|
||||||
|
might_fault(); \
|
||||||
__cu_len = __invoke_copy_from_user(__cu_to, __cu_from, \
|
__cu_len = __invoke_copy_from_user(__cu_to, __cu_from, \
|
||||||
__cu_len); \
|
__cu_len); \
|
||||||
__cu_len; \
|
__cu_len; \
|
||||||
|
@ -862,17 +877,31 @@ extern size_t __copy_user_inatomic(void *__to, const void *__from, size_t __n);
|
||||||
const void __user *__cu_from; \
|
const void __user *__cu_from; \
|
||||||
long __cu_len; \
|
long __cu_len; \
|
||||||
\
|
\
|
||||||
might_sleep(); \
|
|
||||||
__cu_to = (to); \
|
__cu_to = (to); \
|
||||||
__cu_from = (from); \
|
__cu_from = (from); \
|
||||||
__cu_len = (n); \
|
__cu_len = (n); \
|
||||||
if (access_ok(VERIFY_READ, __cu_from, __cu_len)) \
|
if (access_ok(VERIFY_READ, __cu_from, __cu_len)) { \
|
||||||
|
might_fault(); \
|
||||||
__cu_len = __invoke_copy_from_user(__cu_to, __cu_from, \
|
__cu_len = __invoke_copy_from_user(__cu_to, __cu_from, \
|
||||||
__cu_len); \
|
__cu_len); \
|
||||||
|
} \
|
||||||
__cu_len; \
|
__cu_len; \
|
||||||
})
|
})
|
||||||
|
|
||||||
#define __copy_in_user(to, from, n) __copy_from_user(to, from, n)
|
#define __copy_in_user(to, from, n) \
|
||||||
|
({ \
|
||||||
|
void __user *__cu_to; \
|
||||||
|
const void __user *__cu_from; \
|
||||||
|
long __cu_len; \
|
||||||
|
\
|
||||||
|
__cu_to = (to); \
|
||||||
|
__cu_from = (from); \
|
||||||
|
__cu_len = (n); \
|
||||||
|
might_fault(); \
|
||||||
|
__cu_len = __invoke_copy_from_user(__cu_to, __cu_from, \
|
||||||
|
__cu_len); \
|
||||||
|
__cu_len; \
|
||||||
|
})
|
||||||
|
|
||||||
#define copy_in_user(to, from, n) \
|
#define copy_in_user(to, from, n) \
|
||||||
({ \
|
({ \
|
||||||
|
@ -880,14 +909,15 @@ extern size_t __copy_user_inatomic(void *__to, const void *__from, size_t __n);
|
||||||
const void __user *__cu_from; \
|
const void __user *__cu_from; \
|
||||||
long __cu_len; \
|
long __cu_len; \
|
||||||
\
|
\
|
||||||
might_sleep(); \
|
|
||||||
__cu_to = (to); \
|
__cu_to = (to); \
|
||||||
__cu_from = (from); \
|
__cu_from = (from); \
|
||||||
__cu_len = (n); \
|
__cu_len = (n); \
|
||||||
if (likely(access_ok(VERIFY_READ, __cu_from, __cu_len) && \
|
if (likely(access_ok(VERIFY_READ, __cu_from, __cu_len) && \
|
||||||
access_ok(VERIFY_WRITE, __cu_to, __cu_len))) \
|
access_ok(VERIFY_WRITE, __cu_to, __cu_len))) { \
|
||||||
|
might_fault(); \
|
||||||
__cu_len = __invoke_copy_from_user(__cu_to, __cu_from, \
|
__cu_len = __invoke_copy_from_user(__cu_to, __cu_from, \
|
||||||
__cu_len); \
|
__cu_len); \
|
||||||
|
} \
|
||||||
__cu_len; \
|
__cu_len; \
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -907,7 +937,7 @@ __clear_user(void __user *addr, __kernel_size_t size)
|
||||||
{
|
{
|
||||||
__kernel_size_t res;
|
__kernel_size_t res;
|
||||||
|
|
||||||
might_sleep();
|
might_fault();
|
||||||
__asm__ __volatile__(
|
__asm__ __volatile__(
|
||||||
"move\t$4, %1\n\t"
|
"move\t$4, %1\n\t"
|
||||||
"move\t$5, $0\n\t"
|
"move\t$5, $0\n\t"
|
||||||
|
@ -956,7 +986,7 @@ __strncpy_from_user(char *__to, const char __user *__from, long __len)
|
||||||
{
|
{
|
||||||
long res;
|
long res;
|
||||||
|
|
||||||
might_sleep();
|
might_fault();
|
||||||
__asm__ __volatile__(
|
__asm__ __volatile__(
|
||||||
"move\t$4, %1\n\t"
|
"move\t$4, %1\n\t"
|
||||||
"move\t$5, %2\n\t"
|
"move\t$5, %2\n\t"
|
||||||
|
@ -993,7 +1023,7 @@ strncpy_from_user(char *__to, const char __user *__from, long __len)
|
||||||
{
|
{
|
||||||
long res;
|
long res;
|
||||||
|
|
||||||
might_sleep();
|
might_fault();
|
||||||
__asm__ __volatile__(
|
__asm__ __volatile__(
|
||||||
"move\t$4, %1\n\t"
|
"move\t$4, %1\n\t"
|
||||||
"move\t$5, %2\n\t"
|
"move\t$5, %2\n\t"
|
||||||
|
@ -1012,7 +1042,7 @@ static inline long __strlen_user(const char __user *s)
|
||||||
{
|
{
|
||||||
long res;
|
long res;
|
||||||
|
|
||||||
might_sleep();
|
might_fault();
|
||||||
__asm__ __volatile__(
|
__asm__ __volatile__(
|
||||||
"move\t$4, %1\n\t"
|
"move\t$4, %1\n\t"
|
||||||
__MODULE_JAL(__strlen_user_nocheck_asm)
|
__MODULE_JAL(__strlen_user_nocheck_asm)
|
||||||
|
@ -1042,7 +1072,7 @@ static inline long strlen_user(const char __user *s)
|
||||||
{
|
{
|
||||||
long res;
|
long res;
|
||||||
|
|
||||||
might_sleep();
|
might_fault();
|
||||||
__asm__ __volatile__(
|
__asm__ __volatile__(
|
||||||
"move\t$4, %1\n\t"
|
"move\t$4, %1\n\t"
|
||||||
__MODULE_JAL(__strlen_user_asm)
|
__MODULE_JAL(__strlen_user_asm)
|
||||||
|
@ -1059,7 +1089,7 @@ static inline long __strnlen_user(const char __user *s, long n)
|
||||||
{
|
{
|
||||||
long res;
|
long res;
|
||||||
|
|
||||||
might_sleep();
|
might_fault();
|
||||||
__asm__ __volatile__(
|
__asm__ __volatile__(
|
||||||
"move\t$4, %1\n\t"
|
"move\t$4, %1\n\t"
|
||||||
"move\t$5, %2\n\t"
|
"move\t$5, %2\n\t"
|
||||||
|
@ -1090,7 +1120,7 @@ static inline long strnlen_user(const char __user *s, long n)
|
||||||
{
|
{
|
||||||
long res;
|
long res;
|
||||||
|
|
||||||
might_sleep();
|
might_fault();
|
||||||
__asm__ __volatile__(
|
__asm__ __volatile__(
|
||||||
"move\t$4, %1\n\t"
|
"move\t$4, %1\n\t"
|
||||||
"move\t$5, %2\n\t"
|
"move\t$5, %2\n\t"
|
||||||
|
|
|
@ -245,7 +245,7 @@ irqreturn_t c0_compare_interrupt(int irq, void *dev_id)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int __cpuinit mips_clockevent_init(void)
|
int __cpuinit smtc_clockevent_init(void)
|
||||||
{
|
{
|
||||||
uint64_t mips_freq = mips_hpt_frequency;
|
uint64_t mips_freq = mips_hpt_frequency;
|
||||||
unsigned int cpu = smp_processor_id();
|
unsigned int cpu = smp_processor_id();
|
||||||
|
|
|
@ -405,8 +405,8 @@ EXPORT(sysn32_call_table)
|
||||||
PTR sys_eventfd
|
PTR sys_eventfd
|
||||||
PTR sys_fallocate
|
PTR sys_fallocate
|
||||||
PTR sys_timerfd_create
|
PTR sys_timerfd_create
|
||||||
PTR sys_timerfd_gettime /* 5285 */
|
PTR compat_sys_timerfd_gettime /* 5285 */
|
||||||
PTR sys_timerfd_settime
|
PTR compat_sys_timerfd_settime
|
||||||
PTR sys_signalfd4
|
PTR sys_signalfd4
|
||||||
PTR sys_eventfd2
|
PTR sys_eventfd2
|
||||||
PTR sys_epoll_create1
|
PTR sys_epoll_create1
|
||||||
|
|
|
@ -525,8 +525,8 @@ sys_call_table:
|
||||||
PTR sys_eventfd
|
PTR sys_eventfd
|
||||||
PTR sys32_fallocate /* 4320 */
|
PTR sys32_fallocate /* 4320 */
|
||||||
PTR sys_timerfd_create
|
PTR sys_timerfd_create
|
||||||
PTR sys_timerfd_gettime
|
PTR compat_sys_timerfd_gettime
|
||||||
PTR sys_timerfd_settime
|
PTR compat_sys_timerfd_settime
|
||||||
PTR compat_sys_signalfd4
|
PTR compat_sys_signalfd4
|
||||||
PTR sys_eventfd2 /* 4325 */
|
PTR sys_eventfd2 /* 4325 */
|
||||||
PTR sys_epoll_create1
|
PTR sys_epoll_create1
|
||||||
|
|
|
@ -482,19 +482,19 @@ fault:
|
||||||
return;
|
return;
|
||||||
|
|
||||||
die_if_kernel("Unhandled kernel unaligned access", regs);
|
die_if_kernel("Unhandled kernel unaligned access", regs);
|
||||||
send_sig(SIGSEGV, current, 1);
|
force_sig(SIGSEGV, current);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
sigbus:
|
sigbus:
|
||||||
die_if_kernel("Unhandled kernel unaligned access", regs);
|
die_if_kernel("Unhandled kernel unaligned access", regs);
|
||||||
send_sig(SIGBUS, current, 1);
|
force_sig(SIGBUS, current);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
sigill:
|
sigill:
|
||||||
die_if_kernel("Unhandled kernel unaligned access or invalid instruction", regs);
|
die_if_kernel("Unhandled kernel unaligned access or invalid instruction", regs);
|
||||||
send_sig(SIGILL, current, 1);
|
force_sig(SIGILL, current);
|
||||||
}
|
}
|
||||||
|
|
||||||
asmlinkage void do_ade(struct pt_regs *regs)
|
asmlinkage void do_ade(struct pt_regs *regs)
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue