Merge commit 'v2.6.34-rc6' into x86/cpu

This commit is contained in:
H. Peter Anvin 2010-05-08 14:59:58 -07:00
commit d7be0ce6af
4946 changed files with 36643 additions and 9956 deletions

View File

@ -16,6 +16,15 @@
</address> </address>
</affiliation> </affiliation>
</author> </author>
<author>
<firstname>William</firstname>
<surname>Cohen</surname>
<affiliation>
<address>
<email>wcohen@redhat.com</email>
</address>
</affiliation>
</author>
</authorgroup> </authorgroup>
<legalnotice> <legalnotice>
@ -91,4 +100,8 @@
!Iinclude/trace/events/signal.h !Iinclude/trace/events/signal.h
</chapter> </chapter>
<chapter id="block">
<title>Block IO</title>
!Iinclude/trace/events/block.h
</chapter>
</book> </book>

View File

@ -234,7 +234,7 @@ process is as follows:
Linus, usually the patches that have already been included in the Linus, usually the patches that have already been included in the
-next kernel for a few weeks. The preferred way to submit big changes -next kernel for a few weeks. The preferred way to submit big changes
is using git (the kernel's source management tool, more information is using git (the kernel's source management tool, more information
can be found at http://git.or.cz/) but plain patches are also just can be found at http://git-scm.com/) but plain patches are also just
fine. fine.
- After two weeks a -rc1 kernel is released it is now possible to push - After two weeks a -rc1 kernel is released it is now possible to push
only patches that do not include new features that could affect the only patches that do not include new features that could affect the

View File

@ -34,7 +34,7 @@ NMI handler.
cpu = smp_processor_id(); cpu = smp_processor_id();
++nmi_count(cpu); ++nmi_count(cpu);
if (!rcu_dereference(nmi_callback)(regs, cpu)) if (!rcu_dereference_sched(nmi_callback)(regs, cpu))
default_do_nmi(regs); default_do_nmi(regs);
nmi_exit(); nmi_exit();
@ -47,12 +47,13 @@ function pointer. If this handler returns zero, do_nmi() invokes the
default_do_nmi() function to handle a machine-specific NMI. Finally, default_do_nmi() function to handle a machine-specific NMI. Finally,
preemption is restored. preemption is restored.
Strictly speaking, rcu_dereference() is not needed, since this code runs In theory, rcu_dereference_sched() is not needed, since this code runs
only on i386, which does not need rcu_dereference() anyway. However, only on i386, which in theory does not need rcu_dereference_sched()
it is a good documentation aid, particularly for anyone attempting to anyway. However, in practice it is a good documentation aid, particularly
do something similar on Alpha. for anyone attempting to do something similar on Alpha or on systems
with aggressive optimizing compilers.
Quick Quiz: Why might the rcu_dereference() be necessary on Alpha, Quick Quiz: Why might the rcu_dereference_sched() be necessary on Alpha,
given that the code referenced by the pointer is read-only? given that the code referenced by the pointer is read-only?
@ -99,17 +100,21 @@ invoke irq_enter() and irq_exit() on NMI entry and exit, respectively.
Answer to Quick Quiz Answer to Quick Quiz
Why might the rcu_dereference() be necessary on Alpha, given Why might the rcu_dereference_sched() be necessary on Alpha, given
that the code referenced by the pointer is read-only? that the code referenced by the pointer is read-only?
Answer: The caller to set_nmi_callback() might well have Answer: The caller to set_nmi_callback() might well have
initialized some data that is to be used by the initialized some data that is to be used by the new NMI
new NMI handler. In this case, the rcu_dereference() handler. In this case, the rcu_dereference_sched() would
would be needed, because otherwise a CPU that received be needed, because otherwise a CPU that received an NMI
an NMI just after the new handler was set might see just after the new handler was set might see the pointer
the pointer to the new NMI handler, but the old to the new NMI handler, but the old pre-initialized
pre-initialized version of the handler's data. version of the handler's data.
More important, the rcu_dereference() makes it clear This same sad story can happen on other CPUs when using
to someone reading the code that the pointer is being a compiler with aggressive pointer-value speculation
protected by RCU. optimizations.
More important, the rcu_dereference_sched() makes it
clear to someone reading the code that the pointer is
being protected by RCU-sched.

View File

@ -260,7 +260,8 @@ over a rather long period of time, but improvements are always welcome!
The reason that it is permissible to use RCU list-traversal The reason that it is permissible to use RCU list-traversal
primitives when the update-side lock is held is that doing so primitives when the update-side lock is held is that doing so
can be quite helpful in reducing code bloat when common code is can be quite helpful in reducing code bloat when common code is
shared between readers and updaters. shared between readers and updaters. Additional primitives
are provided for this case, as discussed in lockdep.txt.
10. Conversely, if you are in an RCU read-side critical section, 10. Conversely, if you are in an RCU read-side critical section,
and you don't hold the appropriate update-side lock, you -must- and you don't hold the appropriate update-side lock, you -must-
@ -344,8 +345,8 @@ over a rather long period of time, but improvements are always welcome!
requiring SRCU's read-side deadlock immunity or low read-side requiring SRCU's read-side deadlock immunity or low read-side
realtime latency. realtime latency.
Note that, rcu_assign_pointer() and rcu_dereference() relate to Note that, rcu_assign_pointer() relates to SRCU just as they do
SRCU just as they do to other forms of RCU. to other forms of RCU.
15. The whole point of call_rcu(), synchronize_rcu(), and friends 15. The whole point of call_rcu(), synchronize_rcu(), and friends
is to wait until all pre-existing readers have finished before is to wait until all pre-existing readers have finished before

View File

@ -32,9 +32,20 @@ checking of rcu_dereference() primitives:
srcu_dereference(p, sp): srcu_dereference(p, sp):
Check for SRCU read-side critical section. Check for SRCU read-side critical section.
rcu_dereference_check(p, c): rcu_dereference_check(p, c):
Use explicit check expression "c". Use explicit check expression "c". This is useful in
code that is invoked by both readers and updaters.
rcu_dereference_raw(p) rcu_dereference_raw(p)
Don't check. (Use sparingly, if at all.) Don't check. (Use sparingly, if at all.)
rcu_dereference_protected(p, c):
Use explicit check expression "c", and omit all barriers
and compiler constraints. This is useful when the data
structure cannot change, for example, in code that is
invoked only by updaters.
rcu_access_pointer(p):
Return the value of the pointer and omit all barriers,
but retain the compiler constraints that prevent duplicating
or coalescsing. This is useful when when testing the
value of the pointer itself, for example, against NULL.
The rcu_dereference_check() check expression can be any boolean The rcu_dereference_check() check expression can be any boolean
expression, but would normally include one of the rcu_read_lock_held() expression, but would normally include one of the rcu_read_lock_held()
@ -59,7 +70,20 @@ In case (1), the pointer is picked up in an RCU-safe manner for vanilla
RCU read-side critical sections, in case (2) the ->file_lock prevents RCU read-side critical sections, in case (2) the ->file_lock prevents
any change from taking place, and finally, in case (3) the current task any change from taking place, and finally, in case (3) the current task
is the only task accessing the file_struct, again preventing any change is the only task accessing the file_struct, again preventing any change
from taking place. from taking place. If the above statement was invoked only from updater
code, it could instead be written as follows:
file = rcu_dereference_protected(fdt->fd[fd],
lockdep_is_held(&files->file_lock) ||
atomic_read(&files->count) == 1);
This would verify cases #2 and #3 above, and furthermore lockdep would
complain if this was used in an RCU read-side critical section unless one
of these two cases held. Because rcu_dereference_protected() omits all
barriers and compiler constraints, it generates better code than do the
other flavors of rcu_dereference(). On the other hand, it is illegal
to use rcu_dereference_protected() if either the RCU-protected pointer
or the RCU-protected data that it points to can change concurrently.
There are currently only "universal" versions of the rcu_assign_pointer() There are currently only "universal" versions of the rcu_assign_pointer()
and RCU list-/tree-traversal primitives, which do not (yet) check for and RCU list-/tree-traversal primitives, which do not (yet) check for

View File

@ -840,6 +840,12 @@ SRCU: Initialization/cleanup
init_srcu_struct init_srcu_struct
cleanup_srcu_struct cleanup_srcu_struct
All: lockdep-checked RCU-protected pointer access
rcu_dereference_check
rcu_dereference_protected
rcu_access_pointer
See the comment headers in the source code (or the docbook generated See the comment headers in the source code (or the docbook generated
from them) for more information. from them) for more information.

View File

@ -1162,8 +1162,8 @@ where a driver received a request ala this before:
As mentioned, there is no virtual mapping of a bio. For DMA, this is As mentioned, there is no virtual mapping of a bio. For DMA, this is
not a problem as the driver probably never will need a virtual mapping. not a problem as the driver probably never will need a virtual mapping.
Instead it needs a bus mapping (pci_map_page for a single segment or Instead it needs a bus mapping (dma_map_page for a single segment or
use blk_rq_map_sg for scatter gather) to be able to ship it to the driver. For use dma_map_sg for scatter gather) to be able to ship it to the driver. For
PIO drivers (or drivers that need to revert to PIO transfer once in a PIO drivers (or drivers that need to revert to PIO transfer once in a
while (IDE for example)), where the CPU is doing the actual data while (IDE for example)), where the CPU is doing the actual data
transfer a virtual mapping is needed. If the driver supports highmem I/O, transfer a virtual mapping is needed. If the driver supports highmem I/O,

View File

@ -235,8 +235,7 @@ containing the following files describing that cgroup:
- cgroup.procs: list of tgids in the cgroup. This list is not - cgroup.procs: list of tgids in the cgroup. This list is not
guaranteed to be sorted or free of duplicate tgids, and userspace guaranteed to be sorted or free of duplicate tgids, and userspace
should sort/uniquify the list if this property is required. should sort/uniquify the list if this property is required.
Writing a tgid into this file moves all threads with that tgid into This is a read-only file, for now.
this cgroup.
- notify_on_release flag: run the release agent on exit? - notify_on_release flag: run the release agent on exit?
- release_agent: the path to use for release notifications (this file - release_agent: the path to use for release notifications (this file
exists in the top cgroup only) exists in the top cgroup only)

View File

@ -25,6 +25,7 @@
#include <linux/module.h> #include <linux/module.h>
#include <linux/moduleparam.h> #include <linux/moduleparam.h>
#include <linux/skbuff.h> #include <linux/skbuff.h>
#include <linux/slab.h>
#include <linux/timer.h> #include <linux/timer.h>
#include <linux/connector.h> #include <linux/connector.h>

View File

@ -1,9 +1,9 @@
What is imacfb? What is efifb?
=============== ===============
This is a generic EFI platform driver for Intel based Apple computers. This is a generic EFI platform driver for Intel based Apple computers.
Imacfb is only for EFI booted Intel Macs. efifb is only for EFI booted Intel Macs.
Supported Hardware Supported Hardware
================== ==================
@ -16,16 +16,16 @@ MacMini
How to use it? How to use it?
============== ==============
Imacfb does not have any kind of autodetection of your machine. efifb does not have any kind of autodetection of your machine.
You have to add the following kernel parameters in your elilo.conf: You have to add the following kernel parameters in your elilo.conf:
Macbook : Macbook :
video=imacfb:macbook video=efifb:macbook
MacMini : MacMini :
video=imacfb:mini video=efifb:mini
Macbook Pro 15", iMac 17" : Macbook Pro 15", iMac 17" :
video=imacfb:i17 video=efifb:i17
Macbook Pro 17", iMac 20" : Macbook Pro 17", iMac 20" :
video=imacfb:i20 video=efifb:i20
-- --
Edgar Hucek <gimli@dark-green.com> Edgar Hucek <gimli@dark-green.com>

View File

@ -37,6 +37,15 @@ For Plan 9 From User Space applications (http://swtch.com/plan9)
mount -t 9p `namespace`/acme /mnt/9 -o trans=unix,uname=$USER mount -t 9p `namespace`/acme /mnt/9 -o trans=unix,uname=$USER
For server running on QEMU host with virtio transport:
mount -t 9p -o trans=virtio <mount_tag> /mnt/9
where mount_tag is the tag associated by the server to each of the exported
mount points. Each 9P export is seen by the client as a virtio device with an
associated "mount_tag" property. Available mount tags can be
seen by reading /sys/bus/virtio/drivers/9pnet_virtio/virtio<n>/mount_tag files.
OPTIONS OPTIONS
======= =======
@ -47,7 +56,7 @@ OPTIONS
fd - used passed file descriptors for connection fd - used passed file descriptors for connection
(see rfdno and wfdno) (see rfdno and wfdno)
virtio - connect to the next virtio channel available virtio - connect to the next virtio channel available
(from lguest or KVM with trans_virtio module) (from QEMU with trans_virtio module)
rdma - connect to a specified RDMA channel rdma - connect to a specified RDMA channel
uname=name user name to attempt mount as on the remote server. The uname=name user name to attempt mount as on the remote server. The
@ -85,7 +94,12 @@ OPTIONS
port=n port to connect to on the remote server port=n port to connect to on the remote server
noextend force legacy mode (no 9p2000.u semantics) noextend force legacy mode (no 9p2000.u or 9p2000.L semantics)
version=name Select 9P protocol version. Valid options are:
9p2000 - Legacy mode (same as noextend)
9p2000.u - Use 9P2000.u protocol
9p2000.L - Use 9P2000.L protocol
dfltuid attempt to mount as a particular uid dfltuid attempt to mount as a particular uid

View File

@ -68,6 +68,22 @@ like:
SYN_MT_REPORT SYN_MT_REPORT
SYN_REPORT SYN_REPORT
Here is the sequence after lifting one of the fingers:
ABS_MT_POSITION_X
ABS_MT_POSITION_Y
SYN_MT_REPORT
SYN_REPORT
And here is the sequence after lifting the remaining finger:
SYN_MT_REPORT
SYN_REPORT
If the driver reports one of BTN_TOUCH or ABS_PRESSURE in addition to the
ABS_MT events, the last SYN_MT_REPORT event may be omitted. Otherwise, the
last SYN_REPORT will be dropped by the input core, resulting in no
zero-finger event reaching userland.
Event Semantics Event Semantics
--------------- ---------------
@ -217,11 +233,6 @@ where examples can be found.
difference between the contact position and the approaching tool position difference between the contact position and the approaching tool position
could be used to derive tilt. could be used to derive tilt.
[2] The list can of course be extended. [2] The list can of course be extended.
[3] The multi-touch X driver is currently in the prototyping stage. At the [3] Multitouch X driver project: http://bitmath.org/code/multitouch/.
time of writing (April 2009), the MT protocol is not yet merged, and the
prototype implements finger matching, basic mouse support and two-finger
scrolling. The project aims at improving the quality of current multi-touch
functionality available in the Synaptics X driver, and in addition
implement more advanced gestures.
[4] See the section on event computation. [4] See the section on event computation.
[5] See the section on finger tracking. [5] See the section on finger tracking.

View File

@ -320,11 +320,6 @@ and is between 256 and 4096 characters. It is defined in the file
amd_iommu= [HW,X86-84] amd_iommu= [HW,X86-84]
Pass parameters to the AMD IOMMU driver in the system. Pass parameters to the AMD IOMMU driver in the system.
Possible values are: Possible values are:
isolate - enable device isolation (each device, as far
as possible, will get its own protection
domain) [default]
share - put every device behind one IOMMU into the
same protection domain
fullflush - enable flushing of IO/TLB entries when fullflush - enable flushing of IO/TLB entries when
they are unmapped. Otherwise they are they are unmapped. Otherwise they are
flushed before they will be reused, which flushed before they will be reused, which
@ -1199,7 +1194,7 @@ and is between 256 and 4096 characters. It is defined in the file
libata.force= [LIBATA] Force configurations. The format is comma libata.force= [LIBATA] Force configurations. The format is comma
separated list of "[ID:]VAL" where ID is separated list of "[ID:]VAL" where ID is
PORT[:DEVICE]. PORT and DEVICE are decimal numbers PORT[.DEVICE]. PORT and DEVICE are decimal numbers
matching port, link or device. Basically, it matches matching port, link or device. Basically, it matches
the ATA ID string printed on console by libata. If the ATA ID string printed on console by libata. If
the whole ID part is omitted, the last PORT and DEVICE the whole ID part is omitted, the last PORT and DEVICE

View File

@ -0,0 +1,143 @@
STMicroelectronics 10/100/1000 Synopsys Ethernet driver
Copyright (C) 2007-2010 STMicroelectronics Ltd
Author: Giuseppe Cavallaro <peppe.cavallaro@st.com>
This is the driver for the MAC 10/100/1000 on-chip Ethernet controllers
(Synopsys IP blocks); it has been fully tested on STLinux platforms.
Currently this network device driver is for all STM embedded MAC/GMAC
(7xxx SoCs).
DWC Ether MAC 10/100/1000 Universal version 3.41a and DWC Ether MAC 10/100
Universal version 4.0 have been used for developing the first code
implementation.
Please, for more information also visit: www.stlinux.com
1) Kernel Configuration
The kernel configuration option is STMMAC_ETH:
Device Drivers ---> Network device support ---> Ethernet (1000 Mbit) --->
STMicroelectronics 10/100/1000 Ethernet driver (STMMAC_ETH)
2) Driver parameters list:
debug: message level (0: no output, 16: all);
phyaddr: to manually provide the physical address to the PHY device;
dma_rxsize: DMA rx ring size;
dma_txsize: DMA tx ring size;
buf_sz: DMA buffer size;
tc: control the HW FIFO threshold;
tx_coe: Enable/Disable Tx Checksum Offload engine;
watchdog: transmit timeout (in milliseconds);
flow_ctrl: Flow control ability [on/off];
pause: Flow Control Pause Time;
tmrate: timer period (only if timer optimisation is configured).
3) Command line options
Driver parameters can be also passed in command line by using:
stmmaceth=dma_rxsize:128,dma_txsize:512
4) Driver information and notes
4.1) Transmit process
The xmit method is invoked when the kernel needs to transmit a packet; it sets
the descriptors in the ring and informs the DMA engine that there is a packet
ready to be transmitted.
Once the controller has finished transmitting the packet, an interrupt is
triggered; So the driver will be able to release the socket buffers.
By default, the driver sets the NETIF_F_SG bit in the features field of the
net_device structure enabling the scatter/gather feature.
4.2) Receive process
When one or more packets are received, an interrupt happens. The interrupts
are not queued so the driver has to scan all the descriptors in the ring during
the receive process.
This is based on NAPI so the interrupt handler signals only if there is work to be
done, and it exits.
Then the poll method will be scheduled at some future point.
The incoming packets are stored, by the DMA, in a list of pre-allocated socket
buffers in order to avoid the memcpy (Zero-copy).
4.3) Timer-Driver Interrupt
Instead of having the device that asynchronously notifies the frame receptions, the
driver configures a timer to generate an interrupt at regular intervals.
Based on the granularity of the timer, the frames that are received by the device
will experience different levels of latency. Some NICs have dedicated timer
device to perform this task. STMMAC can use either the RTC device or the TMU
channel 2 on STLinux platforms.
The timers frequency can be passed to the driver as parameter; when change it,
take care of both hardware capability and network stability/performance impact.
Several performance tests on STM platforms showed this optimisation allows to spare
the CPU while having the maximum throughput.
4.4) WOL
Wake up on Lan feature through Magic Frame is only supported for the GMAC
core.
4.5) DMA descriptors
Driver handles both normal and enhanced descriptors. The latter has been only
tested on DWC Ether MAC 10/100/1000 Universal version 3.41a.
4.6) Ethtool support
Ethtool is supported. Driver statistics and internal errors can be taken using:
ethtool -S ethX command. It is possible to dump registers etc.
4.7) Jumbo and Segmentation Offloading
Jumbo frames are supported and tested for the GMAC.
The GSO has been also added but it's performed in software.
LRO is not supported.
4.8) Physical
The driver is compatible with PAL to work with PHY and GPHY devices.
4.9) Platform information
Several information came from the platform; please refer to the
driver's Header file in include/linux directory.
struct plat_stmmacenet_data {
int bus_id;
int pbl;
int has_gmac;
void (*fix_mac_speed)(void *priv, unsigned int speed);
void (*bus_setup)(unsigned long ioaddr);
#ifdef CONFIG_STM_DRIVERS
struct stm_pad_config *pad_config;
#endif
void *bsp_priv;
};
Where:
- pbl (Programmable Burst Length) is maximum number of
beats to be transferred in one DMA transaction.
GMAC also enables the 4xPBL by default.
- fix_mac_speed and bus_setup are used to configure internal target
registers (on STM platforms);
- has_gmac: GMAC core is on board (get it at run-time in the next step);
- bus_id: bus identifier.
struct plat_stmmacphy_data {
int bus_id;
int phy_addr;
unsigned int phy_mask;
int interface;
int (*phy_reset)(void *priv);
void *priv;
};
Where:
- bus_id: bus identifier;
- phy_addr: physical address used for the attached phy device;
set it to -1 to get it at run-time;
- interface: physical MII interface mode;
- phy_reset: hook to reset HW function.
TODO:
- Continue to make the driver more generic and suitable for other Synopsys
Ethernet controllers used on other architectures (i.e. ARM).
- 10G controllers are not supported.
- MAC uses Normal descriptors and GMAC uses enhanced ones.
This is a limit that should be reviewed. MAC could want to
use the enhanced structure.
- Checksumming: Rx/Tx csum is done in HW in case of GMAC only.
- Review the timer optimisation code to use an embedded device that seems to be
available in new chip generations.

View File

@ -41,11 +41,12 @@ SOF_TIMESTAMPING_SOFTWARE: return system time stamp generated in
SOF_TIMESTAMPING_TX/RX determine how time stamps are generated. SOF_TIMESTAMPING_TX/RX determine how time stamps are generated.
SOF_TIMESTAMPING_RAW/SYS determine how they are reported in the SOF_TIMESTAMPING_RAW/SYS determine how they are reported in the
following control message: following control message:
struct scm_timestamping {
struct timespec systime; struct scm_timestamping {
struct timespec hwtimetrans; struct timespec systime;
struct timespec hwtimeraw; struct timespec hwtimetrans;
}; struct timespec hwtimeraw;
};
recvmsg() can be used to get this control message for regular incoming recvmsg() can be used to get this control message for regular incoming
packets. For send time stamps the outgoing packet is looped back to packets. For send time stamps the outgoing packet is looped back to
@ -87,12 +88,13 @@ by the network device and will be empty without that support.
SIOCSHWTSTAMP: SIOCSHWTSTAMP:
Hardware time stamping must also be initialized for each device driver Hardware time stamping must also be initialized for each device driver
that is expected to do hardware time stamping. The parameter is: that is expected to do hardware time stamping. The parameter is defined in
/include/linux/net_tstamp.h as:
struct hwtstamp_config { struct hwtstamp_config {
int flags; /* no flags defined right now, must be zero */ int flags; /* no flags defined right now, must be zero */
int tx_type; /* HWTSTAMP_TX_* */ int tx_type; /* HWTSTAMP_TX_* */
int rx_filter; /* HWTSTAMP_FILTER_* */ int rx_filter; /* HWTSTAMP_FILTER_* */
}; };
Desired behavior is passed into the kernel and to a specific device by Desired behavior is passed into the kernel and to a specific device by
@ -139,42 +141,56 @@ enum {
/* time stamp any incoming packet */ /* time stamp any incoming packet */
HWTSTAMP_FILTER_ALL, HWTSTAMP_FILTER_ALL,
/* return value: time stamp all packets requested plus some others */ /* return value: time stamp all packets requested plus some others */
HWTSTAMP_FILTER_SOME, HWTSTAMP_FILTER_SOME,
/* PTP v1, UDP, any kind of event packet */ /* PTP v1, UDP, any kind of event packet */
HWTSTAMP_FILTER_PTP_V1_L4_EVENT, HWTSTAMP_FILTER_PTP_V1_L4_EVENT,
... /* for the complete list of values, please check
* the include file /include/linux/net_tstamp.h
*/
}; };
DEVICE IMPLEMENTATION DEVICE IMPLEMENTATION
A driver which supports hardware time stamping must support the A driver which supports hardware time stamping must support the
SIOCSHWTSTAMP ioctl. Time stamps for received packets must be stored SIOCSHWTSTAMP ioctl and update the supplied struct hwtstamp_config with
in the skb with skb_hwtstamp_set(). the actual values as described in the section on SIOCSHWTSTAMP.
Time stamps for received packets must be stored in the skb. To get a pointer
to the shared time stamp structure of the skb call skb_hwtstamps(). Then
set the time stamps in the structure:
struct skb_shared_hwtstamps {
/* hardware time stamp transformed into duration
* since arbitrary point in time
*/
ktime_t hwtstamp;
ktime_t syststamp; /* hwtstamp transformed to system time base */
};
Time stamps for outgoing packets are to be generated as follows: Time stamps for outgoing packets are to be generated as follows:
- In hard_start_xmit(), check if skb_hwtstamp_check_tx_hardware() - In hard_start_xmit(), check if skb_tx(skb)->hardware is set no-zero.
returns non-zero. If yes, then the driver is expected If yes, then the driver is expected to do hardware time stamping.
to do hardware time stamping.
- If this is possible for the skb and requested, then declare - If this is possible for the skb and requested, then declare
that the driver is doing the time stamping by calling that the driver is doing the time stamping by setting the field
skb_hwtstamp_tx_in_progress(). A driver not supporting skb_tx(skb)->in_progress non-zero. You might want to keep a pointer
hardware time stamping doesn't do that. A driver must never to the associated skb for the next step and not free the skb. A driver
touch sk_buff::tstamp! It is used to store how time stamping not supporting hardware time stamping doesn't do that. A driver must
for an outgoing packets is to be done. never touch sk_buff::tstamp! It is used to store software generated
time stamps by the network subsystem.
- As soon as the driver has sent the packet and/or obtained a - As soon as the driver has sent the packet and/or obtained a
hardware time stamp for it, it passes the time stamp back by hardware time stamp for it, it passes the time stamp back by
calling skb_hwtstamp_tx() with the original skb, the raw calling skb_hwtstamp_tx() with the original skb, the raw
hardware time stamp and a handle to the device (necessary hardware time stamp. skb_hwtstamp_tx() clones the original skb and
to convert the hardware time stamp to system time). If obtaining adds the timestamps, therefore the original skb has to be freed now.
the hardware time stamp somehow fails, then the driver should If obtaining the hardware time stamp somehow fails, then the driver
not fall back to software time stamping. The rationale is that should not fall back to software time stamping. The rationale is that
this would occur at a later time in the processing pipeline this would occur at a later time in the processing pipeline than other
than other software time stamping and therefore could lead software time stamping and therefore could lead to unexpected deltas
to unexpected deltas between time stamps. between time stamps.
- If the driver did not call skb_hwtstamp_tx_in_progress(), then - If the driver did not call set skb_tx(skb)->in_progress, then
dev_hard_start_xmit() checks whether software time stamping dev_hard_start_xmit() checks whether software time stamping
is wanted as fallback and potentially generates the time stamp. is wanted as fallback and potentially generates the time stamp.

View File

@ -21,6 +21,15 @@ Required properties:
- fsl,qe-num-snums: define how many serial number(SNUM) the QE can use for the - fsl,qe-num-snums: define how many serial number(SNUM) the QE can use for the
threads. threads.
Optional properties:
- fsl,firmware-phandle:
Usage: required only if there is no fsl,qe-firmware child node
Value type: <phandle>
Definition: Points to a firmware node (see "QE Firmware Node" below)
that contains the firmware that should be uploaded for this QE.
The compatible property for the firmware node should say,
"fsl,qe-firmware".
Recommended properties Recommended properties
- brg-frequency : the internal clock source frequency for baud-rate - brg-frequency : the internal clock source frequency for baud-rate
generators in Hz. generators in Hz.
@ -59,3 +68,48 @@ Example:
reg = <0 c000>; reg = <0 c000>;
}; };
}; };
* QE Firmware Node
This node defines a firmware binary that is embedded in the device tree, for
the purpose of passing the firmware from bootloader to the kernel, or from
the hypervisor to the guest.
The firmware node itself contains the firmware binary contents, a compatible
property, and any firmware-specific properties. The node should be placed
inside a QE node that needs it. Doing so eliminates the need for a
fsl,firmware-phandle property. Other QE nodes that need the same firmware
should define an fsl,firmware-phandle property that points to the firmware node
in the first QE node.
The fsl,firmware property can be specified in the DTS (possibly using incbin)
or can be inserted by the boot loader at boot time.
Required properties:
- compatible
Usage: required
Value type: <string>
Definition: A standard property. Specify a string that indicates what
kind of firmware it is. For QE, this should be "fsl,qe-firmware".
- fsl,firmware
Usage: required
Value type: <prop-encoded-array>, encoded as an array of bytes
Definition: A standard property. This property contains the firmware
binary "blob".
Example:
qe1@e0080000 {
compatible = "fsl,qe";
qe_firmware:qe-firmware {
compatible = "fsl,qe-firmware";
fsl,firmware = [0x70 0xcd 0x00 0x00 0x01 0x46 0x45 ...];
};
...
};
qe2@e0090000 {
compatible = "fsl,qe";
fsl,firmware-phandle = <&qe_firmware>;
...
};

View File

@ -119,10 +119,18 @@ the codec slots 0 and 1 no matter what the hardware reports.
Interrupt Handling Interrupt Handling
~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~
In rare but some cases, the interrupt isn't properly handled as HD-audio driver uses MSI as default (if available) since 2.6.33
default. You would notice this by the DMA transfer error reported by kernel as MSI works better on some machines, and in general, it's
ALSA PCM core, for example. Using MSI might help in such a case. better for performance. However, Nvidia controllers showed bad
Pass `enable_msi=1` option for enabling MSI. regressions with MSI (especially in a combination with AMD chipset),
thus we disabled MSI for them.
There seem also still other devices that don't work with MSI. If you
see a regression wrt the sound quality (stuttering, etc) or a lock-up
in the recent kernel, try to pass `enable_msi=0` option to disable
MSI. If it works, you can add the known bad device to the blacklist
defined in hda_intel.c. In such a case, please report and give the
patch back to the upstream developer.
HD-AUDIO CODEC HD-AUDIO CODEC

View File

@ -18,16 +18,15 @@ Rules on what kind of patches are accepted, and which ones are not, into the
- It cannot contain any "trivial" fixes in it (spelling changes, - It cannot contain any "trivial" fixes in it (spelling changes,
whitespace cleanups, etc). whitespace cleanups, etc).
- It must follow the Documentation/SubmittingPatches rules. - It must follow the Documentation/SubmittingPatches rules.
- It or an equivalent fix must already exist in Linus' tree. Quote the - It or an equivalent fix must already exist in Linus' tree (upstream).
respective commit ID in Linus' tree in your patch submission to -stable.
Procedure for submitting patches to the -stable tree: Procedure for submitting patches to the -stable tree:
- Send the patch, after verifying that it follows the above rules, to - Send the patch, after verifying that it follows the above rules, to
stable@kernel.org. stable@kernel.org. You must note the upstream commit ID in the changelog
- To have the patch automatically included in the stable tree, add the of your submission.
the tag - To have the patch automatically included in the stable tree, add the tag
Cc: stable@kernel.org Cc: stable@kernel.org
in the sign-off area. Once the patch is merged it will be applied to in the sign-off area. Once the patch is merged it will be applied to
the stable tree without anything else needing to be done by the author the stable tree without anything else needing to be done by the author

View File

@ -17,9 +17,6 @@ int main(void)
ret = -1; ret = -1;
break; break;
} }
ret = fsync(fd);
if (ret)
break;
sleep(10); sleep(10);
} }
close(fd); close(fd);

View File

@ -31,6 +31,8 @@ static void keep_alive(void)
*/ */
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
int flags;
fd = open("/dev/watchdog", O_WRONLY); fd = open("/dev/watchdog", O_WRONLY);
if (fd == -1) { if (fd == -1) {
@ -41,12 +43,14 @@ int main(int argc, char *argv[])
if (argc > 1) { if (argc > 1) {
if (!strncasecmp(argv[1], "-d", 2)) { if (!strncasecmp(argv[1], "-d", 2)) {
ioctl(fd, WDIOC_SETOPTIONS, WDIOS_DISABLECARD); flags = WDIOS_DISABLECARD;
ioctl(fd, WDIOC_SETOPTIONS, &flags);
fprintf(stderr, "Watchdog card disabled.\n"); fprintf(stderr, "Watchdog card disabled.\n");
fflush(stderr); fflush(stderr);
exit(0); exit(0);
} else if (!strncasecmp(argv[1], "-e", 2)) { } else if (!strncasecmp(argv[1], "-e", 2)) {
ioctl(fd, WDIOC_SETOPTIONS, WDIOS_ENABLECARD); flags = WDIOS_ENABLECARD;
ioctl(fd, WDIOC_SETOPTIONS, &flags);
fprintf(stderr, "Watchdog card enabled.\n"); fprintf(stderr, "Watchdog card enabled.\n");
fflush(stderr); fflush(stderr);
exit(0); exit(0);

View File

@ -222,11 +222,10 @@ returned value is the temperature in degrees fahrenheit.
ioctl(fd, WDIOC_GETTEMP, &temperature); ioctl(fd, WDIOC_GETTEMP, &temperature);
Finally the SETOPTIONS ioctl can be used to control some aspects of Finally the SETOPTIONS ioctl can be used to control some aspects of
the cards operation; right now the pcwd driver is the only one the cards operation.
supporting this ioctl.
int options = 0; int options = 0;
ioctl(fd, WDIOC_SETOPTIONS, options); ioctl(fd, WDIOC_SETOPTIONS, &options);
The following options are available: The following options are available:

View File

@ -485,8 +485,8 @@ S: Maintained
F: drivers/input/mouse/bcm5974.c F: drivers/input/mouse/bcm5974.c
APPLE SMC DRIVER APPLE SMC DRIVER
M: Nicolas Boichat <nicolas@boichat.ch> M: Henrik Rydberg <rydberg@euromail.se>
L: mactel-linux-devel@lists.sourceforge.net L: lm-sensors@lm-sensors.org
S: Maintained S: Maintained
F: drivers/hwmon/applesmc.c F: drivers/hwmon/applesmc.c
@ -971,6 +971,16 @@ L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
W: http://www.mcuos.com W: http://www.mcuos.com
S: Maintained S: Maintained
ARM/U300 MACHINE SUPPORT
M: Linus Walleij <linus.walleij@stericsson.com>
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
S: Supported
F: arch/arm/mach-u300/
F: drivers/i2c/busses/i2c-stu300.c
F: drivers/rtc/rtc-coh901331.c
F: drivers/watchdog/coh901327_wdt.c
F: drivers/dma/coh901318*
ARM/U8500 ARM ARCHITECTURE ARM/U8500 ARM ARCHITECTURE
M: Srinidhi Kasagar <srinidhi.kasagar@stericsson.com> M: Srinidhi Kasagar <srinidhi.kasagar@stericsson.com>
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
@ -1950,7 +1960,7 @@ F: lib/kobj*
DRM DRIVERS DRM DRIVERS
M: David Airlie <airlied@linux.ie> M: David Airlie <airlied@linux.ie>
L: dri-devel@lists.sourceforge.net L: dri-devel@lists.freedesktop.org
T: git git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6.git T: git git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6.git
S: Maintained S: Maintained
F: drivers/gpu/drm/ F: drivers/gpu/drm/
@ -2474,12 +2484,6 @@ L: linuxppc-dev@ozlabs.org
S: Odd Fixes S: Odd Fixes
F: drivers/char/hvc_* F: drivers/char/hvc_*
VIRTIO CONSOLE DRIVER
M: Amit Shah <amit.shah@redhat.com>
L: virtualization@lists.linux-foundation.org
S: Maintained
F: drivers/char/virtio_console.c
iSCSI BOOT FIRMWARE TABLE (iBFT) DRIVER iSCSI BOOT FIRMWARE TABLE (iBFT) DRIVER
M: Peter Jones <pjones@redhat.com> M: Peter Jones <pjones@redhat.com>
M: Konrad Rzeszutek Wilk <konrad@kernel.org> M: Konrad Rzeszutek Wilk <konrad@kernel.org>
@ -4478,17 +4482,17 @@ S: Maintained
F: drivers/ata/sata_promise.* F: drivers/ata/sata_promise.*
PS3 NETWORK SUPPORT PS3 NETWORK SUPPORT
M: Geoff Levand <geoffrey.levand@am.sony.com> M: Geoff Levand <geoff@infradead.org>
L: netdev@vger.kernel.org L: netdev@vger.kernel.org
L: cbe-oss-dev@ozlabs.org L: cbe-oss-dev@ozlabs.org
S: Supported S: Maintained
F: drivers/net/ps3_gelic_net.* F: drivers/net/ps3_gelic_net.*
PS3 PLATFORM SUPPORT PS3 PLATFORM SUPPORT
M: Geoff Levand <geoffrey.levand@am.sony.com> M: Geoff Levand <geoff@infradead.org>
L: linuxppc-dev@ozlabs.org L: linuxppc-dev@ozlabs.org
L: cbe-oss-dev@ozlabs.org L: cbe-oss-dev@ozlabs.org
S: Supported S: Maintained
F: arch/powerpc/boot/ps3* F: arch/powerpc/boot/ps3*
F: arch/powerpc/include/asm/lv1call.h F: arch/powerpc/include/asm/lv1call.h
F: arch/powerpc/include/asm/ps3*.h F: arch/powerpc/include/asm/ps3*.h
@ -4787,12 +4791,11 @@ F: drivers/s390/crypto/
S390 ZFCP DRIVER S390 ZFCP DRIVER
M: Christof Schmitt <christof.schmitt@de.ibm.com> M: Christof Schmitt <christof.schmitt@de.ibm.com>
M: Martin Peschke <mp3@de.ibm.com> M: Swen Schillig <swen@vnet.ibm.com>
M: linux390@de.ibm.com M: linux390@de.ibm.com
L: linux-s390@vger.kernel.org L: linux-s390@vger.kernel.org
W: http://www.ibm.com/developerworks/linux/linux390/ W: http://www.ibm.com/developerworks/linux/linux390/
S: Supported S: Supported
F: Documentation/s390/zfcpdump.txt
F: drivers/s390/scsi/zfcp_* F: drivers/s390/scsi/zfcp_*
S390 IUCV NETWORK LAYER S390 IUCV NETWORK LAYER
@ -5971,6 +5974,13 @@ S: Maintained
F: Documentation/filesystems/vfat.txt F: Documentation/filesystems/vfat.txt
F: fs/fat/ F: fs/fat/
VIRTIO CONSOLE DRIVER
M: Amit Shah <amit.shah@redhat.com>
L: virtualization@lists.linux-foundation.org
S: Maintained
F: drivers/char/virtio_console.c
F: include/linux/virtio_console.h
VIRTIO HOST (VHOST) VIRTIO HOST (VHOST)
M: "Michael S. Tsirkin" <mst@redhat.com> M: "Michael S. Tsirkin" <mst@redhat.com>
L: kvm@vger.kernel.org L: kvm@vger.kernel.org

View File

@ -1,8 +1,8 @@
VERSION = 2 VERSION = 2
PATCHLEVEL = 6 PATCHLEVEL = 6
SUBLEVEL = 34 SUBLEVEL = 34
EXTRAVERSION = -rc3 EXTRAVERSION = -rc6
NAME = Man-Eating Seals of Antiquity NAME = Sheep on Meth
# *DOCUMENTATION* # *DOCUMENTATION*
# To see a list of typical targets execute "make help" # To see a list of typical targets execute "make help"

View File

@ -8,6 +8,7 @@
* based significantly on the arch/alpha/boot/main.c of Linus Torvalds * based significantly on the arch/alpha/boot/main.c of Linus Torvalds
*/ */
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/slab.h>
#include <linux/string.h> #include <linux/string.h>
#include <generated/utsrelease.h> #include <generated/utsrelease.h>
#include <linux/mm.h> #include <linux/mm.h>

View File

@ -10,6 +10,7 @@
* and the decompression code from MILO. * and the decompression code from MILO.
*/ */
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/slab.h>
#include <linux/string.h> #include <linux/string.h>
#include <generated/utsrelease.h> #include <generated/utsrelease.h>
#include <linux/mm.h> #include <linux/mm.h>

View File

@ -6,6 +6,7 @@
* This file is the bootloader for the Linux/AXP kernel * This file is the bootloader for the Linux/AXP kernel
*/ */
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/slab.h>
#include <linux/string.h> #include <linux/string.h>
#include <generated/utsrelease.h> #include <generated/utsrelease.h>
#include <linux/mm.h> #include <linux/mm.h>

View File

@ -19,6 +19,7 @@
*/ */
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/slab.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>

View File

@ -18,7 +18,6 @@
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/ptrace.h> #include <linux/ptrace.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/slab.h>
#include <linux/random.h> #include <linux/random.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/irq.h> #include <linux/irq.h>

View File

@ -20,7 +20,6 @@
#include <linux/syscalls.h> #include <linux/syscalls.h>
#include <linux/unistd.h> #include <linux/unistd.h>
#include <linux/ptrace.h> #include <linux/ptrace.h>
#include <linux/slab.h>
#include <linux/user.h> #include <linux/user.h>
#include <linux/utsname.h> #include <linux/utsname.h>
#include <linux/time.h> #include <linux/time.h>
@ -37,6 +36,7 @@
#include <linux/uio.h> #include <linux/uio.h>
#include <linux/vfs.h> #include <linux/vfs.h>
#include <linux/rcupdate.h> #include <linux/rcupdate.h>
#include <linux/slab.h>
#include <asm/fpu.h> #include <asm/fpu.h>
#include <asm/io.h> #include <asm/io.h>

View File

@ -7,6 +7,7 @@
#include <linux/pci.h> #include <linux/pci.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/bootmem.h> #include <linux/bootmem.h>
#include <linux/gfp.h>
#include <linux/capability.h> #include <linux/capability.h>
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/errno.h> #include <linux/errno.h>

View File

@ -10,6 +10,7 @@
*/ */
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/slab.h>
#include <linux/pci.h> #include <linux/pci.h>
static int hose_mmap_page_range(struct pci_controller *hose, static int hose_mmap_page_range(struct pci_controller *hose,

View File

@ -5,7 +5,7 @@
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/pci.h> #include <linux/pci.h>
#include <linux/slab.h> #include <linux/gfp.h>
#include <linux/bootmem.h> #include <linux/bootmem.h>
#include <linux/scatterlist.h> #include <linux/scatterlist.h>
#include <linux/log2.h> #include <linux/log2.h>

View File

@ -17,7 +17,6 @@
#include <linux/stddef.h> #include <linux/stddef.h>
#include <linux/unistd.h> #include <linux/unistd.h>
#include <linux/ptrace.h> #include <linux/ptrace.h>
#include <linux/slab.h>
#include <linux/user.h> #include <linux/user.h>
#include <linux/time.h> #include <linux/time.h>
#include <linux/major.h> #include <linux/major.h>
@ -28,6 +27,7 @@
#include <linux/reboot.h> #include <linux/reboot.h>
#include <linux/tty.h> #include <linux/tty.h>
#include <linux/console.h> #include <linux/console.h>
#include <linux/slab.h>
#include <asm/reg.h> #include <asm/reg.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>

View File

@ -11,7 +11,6 @@
#include <linux/errno.h> #include <linux/errno.h>
#include <linux/ptrace.h> #include <linux/ptrace.h>
#include <linux/user.h> #include <linux/user.h>
#include <linux/slab.h>
#include <linux/security.h> #include <linux/security.h>
#include <linux/signal.h> #include <linux/signal.h>

View File

@ -3,7 +3,6 @@
*/ */
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/slab.h>
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/delay.h> #include <linux/delay.h>

View File

@ -4,7 +4,6 @@
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/slab.h>
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/delay.h> #include <linux/delay.h>

View File

@ -30,6 +30,7 @@
*/ */
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/gfp.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/proc_fs.h> #include <linux/proc_fs.h>

View File

@ -20,6 +20,7 @@
#include <linux/init.h> #include <linux/init.h>
#include <linux/bootmem.h> /* max_low_pfn */ #include <linux/bootmem.h> /* max_low_pfn */
#include <linux/vmalloc.h> #include <linux/vmalloc.h>
#include <linux/gfp.h>
#include <asm/system.h> #include <asm/system.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>

View File

@ -253,6 +253,7 @@ config ARCH_REALVIEW
select GENERIC_TIME select GENERIC_TIME
select GENERIC_CLOCKEVENTS select GENERIC_CLOCKEVENTS
select ARCH_WANT_OPTIONAL_GPIOLIB select ARCH_WANT_OPTIONAL_GPIOLIB
select GPIO_PL061 if GPIOLIB
help help
This enables support for ARM Ltd RealView boards. This enables support for ARM Ltd RealView boards.

View File

@ -172,7 +172,7 @@ not_angel:
adr r0, LC0 adr r0, LC0
ARM( ldmia r0, {r1, r2, r3, r4, r5, r6, r11, ip, sp}) ARM( ldmia r0, {r1, r2, r3, r4, r5, r6, r11, ip, sp})
THUMB( ldmia r0, {r1, r2, r3, r4, r5, r6, r11, ip} ) THUMB( ldmia r0, {r1, r2, r3, r4, r5, r6, r11, ip} )
THUMB( ldr sp, [r0, #28] ) THUMB( ldr sp, [r0, #32] )
subs r0, r0, r1 @ calculate the delta offset subs r0, r0, r1 @ calculate the delta offset
@ if delta is zero, we are @ if delta is zero, we are

View File

@ -18,6 +18,7 @@
#include <linux/string.h> #include <linux/string.h>
#include <linux/mutex.h> #include <linux/mutex.h>
#include <linux/clk.h> #include <linux/clk.h>
#include <linux/slab.h>
#include <asm/clkdev.h> #include <asm/clkdev.h>
#include <mach/clkdev.h> #include <mach/clkdev.h>

View File

@ -21,7 +21,6 @@
#include <linux/ptrace.h> #include <linux/ptrace.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/slab.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/ioport.h> #include <linux/ioport.h>
#include <linux/irq.h> #include <linux/irq.h>

View File

@ -1,13 +1,13 @@
# #
# Automatically generated make config: don't edit # Automatically generated make config: don't edit
# Linux kernel version: 2.6.31-rc3 # Linux kernel version: 2.6.34-rc2
# Fri Jul 17 12:07:28 2009 # Mon Mar 29 12:01:41 2010
# #
CONFIG_ARM=y CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y
CONFIG_GENERIC_TIME=y CONFIG_GENERIC_TIME=y
CONFIG_GENERIC_CLOCKEVENTS=y CONFIG_GENERIC_CLOCKEVENTS=y
CONFIG_MMU=y CONFIG_HAVE_PROC_CPU=y
CONFIG_GENERIC_HARDIRQS=y CONFIG_GENERIC_HARDIRQS=y
CONFIG_STACKTRACE_SUPPORT=y CONFIG_STACKTRACE_SUPPORT=y
CONFIG_HAVE_LATENCYTOP_SUPPORT=y CONFIG_HAVE_LATENCYTOP_SUPPORT=y
@ -18,6 +18,7 @@ CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_RWSEM_GENERIC_SPINLOCK=y CONFIG_RWSEM_GENERIC_SPINLOCK=y
CONFIG_GENERIC_HWEIGHT=y CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y CONFIG_GENERIC_CALIBRATE_DELAY=y
CONFIG_NEED_DMA_MAP_STATE=y
CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
CONFIG_VECTORS_BASE=0xffff0000 CONFIG_VECTORS_BASE=0xffff0000
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
@ -32,6 +33,12 @@ CONFIG_LOCK_KERNEL=y
CONFIG_INIT_ENV_ARG_LIMIT=32 CONFIG_INIT_ENV_ARG_LIMIT=32
CONFIG_LOCALVERSION="" CONFIG_LOCALVERSION=""
# CONFIG_LOCALVERSION_AUTO is not set # CONFIG_LOCALVERSION_AUTO is not set
CONFIG_HAVE_KERNEL_GZIP=y
CONFIG_HAVE_KERNEL_LZO=y
CONFIG_KERNEL_GZIP=y
# CONFIG_KERNEL_BZIP2 is not set
# CONFIG_KERNEL_LZMA is not set
# CONFIG_KERNEL_LZO is not set
# CONFIG_SWAP is not set # CONFIG_SWAP is not set
CONFIG_SYSVIPC=y CONFIG_SYSVIPC=y
CONFIG_SYSVIPC_SYSCTL=y CONFIG_SYSVIPC_SYSCTL=y
@ -43,21 +50,22 @@ CONFIG_SYSVIPC_SYSCTL=y
# #
# RCU Subsystem # RCU Subsystem
# #
CONFIG_CLASSIC_RCU=y CONFIG_TREE_RCU=y
# CONFIG_TREE_RCU is not set # CONFIG_TREE_PREEMPT_RCU is not set
# CONFIG_PREEMPT_RCU is not set # CONFIG_TINY_RCU is not set
# CONFIG_RCU_TRACE is not set
CONFIG_RCU_FANOUT=32
# CONFIG_RCU_FANOUT_EXACT is not set
# CONFIG_TREE_RCU_TRACE is not set # CONFIG_TREE_RCU_TRACE is not set
# CONFIG_PREEMPT_RCU_TRACE is not set
# CONFIG_IKCONFIG is not set # CONFIG_IKCONFIG is not set
CONFIG_LOG_BUF_SHIFT=17 CONFIG_LOG_BUF_SHIFT=17
# CONFIG_GROUP_SCHED is not set
# CONFIG_CGROUPS is not set
# CONFIG_SYSFS_DEPRECATED_V2 is not set # CONFIG_SYSFS_DEPRECATED_V2 is not set
# CONFIG_RELAY is not set # CONFIG_RELAY is not set
# CONFIG_NAMESPACES is not set # CONFIG_NAMESPACES is not set
# CONFIG_BLK_DEV_INITRD is not set # CONFIG_BLK_DEV_INITRD is not set
CONFIG_CC_OPTIMIZE_FOR_SIZE=y CONFIG_CC_OPTIMIZE_FOR_SIZE=y
CONFIG_SYSCTL=y CONFIG_SYSCTL=y
CONFIG_ANON_INODES=y
CONFIG_EMBEDDED=y CONFIG_EMBEDDED=y
CONFIG_UID16=y CONFIG_UID16=y
CONFIG_SYSCTL_SYSCALL=y CONFIG_SYSCTL_SYSCALL=y
@ -75,19 +83,21 @@ CONFIG_FUTEX=y
# CONFIG_EVENTFD is not set # CONFIG_EVENTFD is not set
CONFIG_SHMEM=y CONFIG_SHMEM=y
# CONFIG_AIO is not set # CONFIG_AIO is not set
CONFIG_HAVE_PERF_EVENTS=y
CONFIG_PERF_USE_VMALLOC=y
# #
# Performance Counters # Kernel Performance Events And Counters
# #
CONFIG_PERF_EVENTS=y
CONFIG_PERF_COUNTERS=y
# CONFIG_VM_EVENT_COUNTERS is not set # CONFIG_VM_EVENT_COUNTERS is not set
# CONFIG_SLUB_DEBUG is not set # CONFIG_SLUB_DEBUG is not set
# CONFIG_STRIP_ASM_SYMS is not set
# CONFIG_COMPAT_BRK is not set # CONFIG_COMPAT_BRK is not set
# CONFIG_SLAB is not set # CONFIG_SLAB is not set
CONFIG_SLUB=y CONFIG_SLUB=y
# 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_HAVE_OPROFILE=y CONFIG_HAVE_OPROFILE=y
# CONFIG_KPROBES is not set # CONFIG_KPROBES is not set
CONFIG_HAVE_KPROBES=y CONFIG_HAVE_KPROBES=y
@ -115,24 +125,53 @@ CONFIG_LBDAF=y
# IO Schedulers # IO Schedulers
# #
CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_NOOP=y
# CONFIG_IOSCHED_AS is not set
# CONFIG_IOSCHED_DEADLINE is not set # CONFIG_IOSCHED_DEADLINE is not set
# CONFIG_IOSCHED_CFQ is not set # CONFIG_IOSCHED_CFQ is not set
# CONFIG_DEFAULT_AS is not set
# CONFIG_DEFAULT_DEADLINE is not set # CONFIG_DEFAULT_DEADLINE is not set
# CONFIG_DEFAULT_CFQ is not set # CONFIG_DEFAULT_CFQ is not set
CONFIG_DEFAULT_NOOP=y CONFIG_DEFAULT_NOOP=y
CONFIG_DEFAULT_IOSCHED="noop" CONFIG_DEFAULT_IOSCHED="noop"
# CONFIG_INLINE_SPIN_TRYLOCK is not set
# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
# CONFIG_INLINE_SPIN_LOCK is not set
# CONFIG_INLINE_SPIN_LOCK_BH is not set
# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
# CONFIG_INLINE_SPIN_UNLOCK is not set
# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
# CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set
# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
# CONFIG_INLINE_READ_TRYLOCK is not set
# CONFIG_INLINE_READ_LOCK is not set
# CONFIG_INLINE_READ_LOCK_BH is not set
# CONFIG_INLINE_READ_LOCK_IRQ is not set
# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
# CONFIG_INLINE_READ_UNLOCK is not set
# CONFIG_INLINE_READ_UNLOCK_BH is not set
# CONFIG_INLINE_READ_UNLOCK_IRQ is not set
# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
# CONFIG_INLINE_WRITE_TRYLOCK is not set
# CONFIG_INLINE_WRITE_LOCK is not set
# CONFIG_INLINE_WRITE_LOCK_BH is not set
# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
# CONFIG_INLINE_WRITE_UNLOCK is not set
# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
# CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set
# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
# CONFIG_MUTEX_SPIN_ON_OWNER is not set
# CONFIG_FREEZER is not set # CONFIG_FREEZER is not set
# #
# System Type # System Type
# #
CONFIG_MMU=y
# CONFIG_ARCH_AAEC2000 is not set # CONFIG_ARCH_AAEC2000 is not set
# CONFIG_ARCH_INTEGRATOR is not set # CONFIG_ARCH_INTEGRATOR is not set
# CONFIG_ARCH_REALVIEW is not set # CONFIG_ARCH_REALVIEW is not set
# CONFIG_ARCH_VERSATILE is not set # CONFIG_ARCH_VERSATILE is not set
# CONFIG_ARCH_AT91 is not set # CONFIG_ARCH_AT91 is not set
CONFIG_ARCH_BCMRING=y
# CONFIG_ARCH_CLPS711X is not set # CONFIG_ARCH_CLPS711X is not set
# CONFIG_ARCH_GEMINI is not set # CONFIG_ARCH_GEMINI is not set
# CONFIG_ARCH_EBSA110 is not set # CONFIG_ARCH_EBSA110 is not set
@ -149,6 +188,7 @@ CONFIG_DEFAULT_IOSCHED="noop"
# CONFIG_ARCH_IXP2000 is not set # CONFIG_ARCH_IXP2000 is not set
# CONFIG_ARCH_IXP4XX is not set # CONFIG_ARCH_IXP4XX is not set
# CONFIG_ARCH_L7200 is not set # CONFIG_ARCH_L7200 is not set
# CONFIG_ARCH_DOVE is not set
# CONFIG_ARCH_KIRKWOOD is not set # CONFIG_ARCH_KIRKWOOD is not set
# CONFIG_ARCH_LOKI is not set # CONFIG_ARCH_LOKI is not set
# CONFIG_ARCH_MV78XX0 is not set # CONFIG_ARCH_MV78XX0 is not set
@ -157,19 +197,26 @@ CONFIG_DEFAULT_IOSCHED="noop"
# CONFIG_ARCH_KS8695 is not set # CONFIG_ARCH_KS8695 is not set
# CONFIG_ARCH_NS9XXX is not set # CONFIG_ARCH_NS9XXX is not set
# CONFIG_ARCH_W90X900 is not set # CONFIG_ARCH_W90X900 is not set
# CONFIG_ARCH_NUC93X is not set
# CONFIG_ARCH_PNX4008 is not set # CONFIG_ARCH_PNX4008 is not set
# CONFIG_ARCH_PXA is not set # CONFIG_ARCH_PXA is not set
# CONFIG_ARCH_MSM is not set # CONFIG_ARCH_MSM is not set
# CONFIG_ARCH_SHMOBILE is not set
# CONFIG_ARCH_RPC is not set # CONFIG_ARCH_RPC is not set
# CONFIG_ARCH_SA1100 is not set # CONFIG_ARCH_SA1100 is not set
# CONFIG_ARCH_S3C2410 is not set # CONFIG_ARCH_S3C2410 is not set
# CONFIG_ARCH_S3C64XX is not set # CONFIG_ARCH_S3C64XX is not set
# CONFIG_ARCH_S5P6440 is not set
# CONFIG_ARCH_S5P6442 is not set
# CONFIG_ARCH_S5PC1XX is not set
# CONFIG_ARCH_S5PV210 is not set
# CONFIG_ARCH_SHARK is not set # CONFIG_ARCH_SHARK is not set
# CONFIG_ARCH_LH7A40X is not set # CONFIG_ARCH_LH7A40X is not set
# CONFIG_ARCH_U300 is not set # CONFIG_ARCH_U300 is not set
# CONFIG_ARCH_U8500 is not set
# CONFIG_ARCH_NOMADIK is not set
# CONFIG_ARCH_DAVINCI is not set # CONFIG_ARCH_DAVINCI is not set
# CONFIG_ARCH_OMAP is not set # CONFIG_ARCH_OMAP is not set
CONFIG_ARCH_BCMRING=y
# CONFIG_ARCH_FPGA11107 is not set # CONFIG_ARCH_FPGA11107 is not set
CONFIG_ARCH_BCM11107=y CONFIG_ARCH_BCM11107=y
@ -185,7 +232,7 @@ CONFIG_CPU_V6=y
CONFIG_CPU_32v6K=y CONFIG_CPU_32v6K=y
CONFIG_CPU_32v6=y CONFIG_CPU_32v6=y
CONFIG_CPU_ABRT_EV6=y CONFIG_CPU_ABRT_EV6=y
CONFIG_CPU_PABRT_NOIFAR=y CONFIG_CPU_PABRT_V6=y
CONFIG_CPU_CACHE_V6=y CONFIG_CPU_CACHE_V6=y
CONFIG_CPU_CACHE_VIPT=y CONFIG_CPU_CACHE_VIPT=y
CONFIG_CPU_COPY_V6=y CONFIG_CPU_COPY_V6=y
@ -201,6 +248,8 @@ CONFIG_ARM_THUMB=y
# CONFIG_CPU_ICACHE_DISABLE is not set # CONFIG_CPU_ICACHE_DISABLE is not set
# CONFIG_CPU_DCACHE_DISABLE is not set # CONFIG_CPU_DCACHE_DISABLE is not set
# CONFIG_CPU_BPREDICT_DISABLE is not set # CONFIG_CPU_BPREDICT_DISABLE is not set
CONFIG_ARM_L1_CACHE_SHIFT=5
CONFIG_CPU_HAS_PMU=y
# CONFIG_ARM_ERRATA_411920 is not set # CONFIG_ARM_ERRATA_411920 is not set
CONFIG_COMMON_CLKDEV=y CONFIG_COMMON_CLKDEV=y
@ -222,6 +271,8 @@ CONFIG_VMSPLIT_3G=y
# CONFIG_VMSPLIT_2G is not set # CONFIG_VMSPLIT_2G is not set
# CONFIG_VMSPLIT_1G is not set # CONFIG_VMSPLIT_1G is not set
CONFIG_PAGE_OFFSET=0xC0000000 CONFIG_PAGE_OFFSET=0xC0000000
# CONFIG_PREEMPT_NONE is not set
# CONFIG_PREEMPT_VOLUNTARY is not set
CONFIG_PREEMPT=y CONFIG_PREEMPT=y
CONFIG_HZ=100 CONFIG_HZ=100
CONFIG_AEABI=y CONFIG_AEABI=y
@ -229,6 +280,7 @@ CONFIG_AEABI=y
# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set # CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set # CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
# CONFIG_HIGHMEM is not set # CONFIG_HIGHMEM is not set
CONFIG_HW_PERF_EVENTS=y
CONFIG_SELECT_MEMORY_MODEL=y CONFIG_SELECT_MEMORY_MODEL=y
CONFIG_FLATMEM_MANUAL=y CONFIG_FLATMEM_MANUAL=y
# CONFIG_DISCONTIGMEM_MANUAL is not set # CONFIG_DISCONTIGMEM_MANUAL is not set
@ -240,8 +292,7 @@ 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_HAVE_MLOCK=y # CONFIG_KSM is not set
CONFIG_HAVE_MLOCKED_PAGE_BIT=y
CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
CONFIG_ALIGNMENT_TRAP=y CONFIG_ALIGNMENT_TRAP=y
CONFIG_UACCESS_WITH_MEMCPY=y CONFIG_UACCESS_WITH_MEMCPY=y
@ -335,9 +386,9 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y
# CONFIG_CONNECTOR is not set # CONFIG_CONNECTOR is not set
CONFIG_MTD=y CONFIG_MTD=y
# CONFIG_MTD_DEBUG is not set # CONFIG_MTD_DEBUG is not set
# CONFIG_MTD_TESTS is not set
CONFIG_MTD_CONCAT=y CONFIG_MTD_CONCAT=y
CONFIG_MTD_PARTITIONS=y CONFIG_MTD_PARTITIONS=y
# CONFIG_MTD_TESTS is not set
# CONFIG_MTD_REDBOOT_PARTS is not set # CONFIG_MTD_REDBOOT_PARTS is not set
CONFIG_MTD_CMDLINE_PARTS=y CONFIG_MTD_CMDLINE_PARTS=y
# CONFIG_MTD_AFS_PARTS is not set # CONFIG_MTD_AFS_PARTS is not set
@ -433,6 +484,10 @@ CONFIG_MTD_NAND_BCM_UMI_HWCS=y
CONFIG_BLK_DEV=y CONFIG_BLK_DEV=y
# CONFIG_BLK_DEV_COW_COMMON is not set # CONFIG_BLK_DEV_COW_COMMON is not set
# CONFIG_BLK_DEV_LOOP is not set # CONFIG_BLK_DEV_LOOP is not set
#
# DRBD disabled because PROC_FS, INET or CONNECTOR not selected
#
# CONFIG_BLK_DEV_NBD is not set # CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_RAM is not set # CONFIG_BLK_DEV_RAM is not set
# CONFIG_CDROM_PKTCDVD is not set # CONFIG_CDROM_PKTCDVD is not set
@ -444,6 +499,7 @@ CONFIG_HAVE_IDE=y
# #
# SCSI device support # SCSI device support
# #
CONFIG_SCSI_MOD=y
# CONFIG_RAID_ATTRS is not set # CONFIG_RAID_ATTRS is not set
# CONFIG_SCSI is not set # CONFIG_SCSI is not set
# CONFIG_SCSI_DMA is not set # CONFIG_SCSI_DMA is not set
@ -452,6 +508,7 @@ CONFIG_HAVE_IDE=y
# CONFIG_MD is not set # CONFIG_MD is not set
# CONFIG_NETDEVICES is not set # CONFIG_NETDEVICES is not set
# CONFIG_ISDN is not set # CONFIG_ISDN is not set
# CONFIG_PHONE is not set
# #
# Input device support # Input device support
@ -459,6 +516,7 @@ CONFIG_HAVE_IDE=y
CONFIG_INPUT=y CONFIG_INPUT=y
# CONFIG_INPUT_FF_MEMLESS is not set # CONFIG_INPUT_FF_MEMLESS is not set
# CONFIG_INPUT_POLLDEV is not set # CONFIG_INPUT_POLLDEV is not set
# CONFIG_INPUT_SPARSEKMAP is not set
# #
# Userland interfaces # Userland interfaces
@ -508,6 +566,7 @@ CONFIG_SERIAL_AMBA_PL011=y
CONFIG_SERIAL_AMBA_PL011_CONSOLE=y CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
CONFIG_SERIAL_CORE=y CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y CONFIG_SERIAL_CORE_CONSOLE=y
# CONFIG_SERIAL_TIMBERDALE is not set
CONFIG_UNIX98_PTYS=y CONFIG_UNIX98_PTYS=y
# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
CONFIG_LEGACY_PTYS=y CONFIG_LEGACY_PTYS=y
@ -519,13 +578,17 @@ CONFIG_LEGACY_PTY_COUNT=64
# CONFIG_TCG_TPM is not set # CONFIG_TCG_TPM is not set
# CONFIG_I2C is not set # CONFIG_I2C is not set
# CONFIG_SPI is not set # CONFIG_SPI is not set
#
# PPS support
#
# CONFIG_PPS is not set
CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
# CONFIG_GPIOLIB is not set # CONFIG_GPIOLIB is not set
# CONFIG_W1 is not set # CONFIG_W1 is not set
# CONFIG_POWER_SUPPLY is not set # CONFIG_POWER_SUPPLY is not set
# CONFIG_HWMON is not set # CONFIG_HWMON is not set
# CONFIG_THERMAL is not set # CONFIG_THERMAL is not set
# CONFIG_THERMAL_HWMON is not set
# CONFIG_WATCHDOG is not set # CONFIG_WATCHDOG is not set
CONFIG_SSB_POSSIBLE=y CONFIG_SSB_POSSIBLE=y
@ -541,6 +604,7 @@ CONFIG_SSB_POSSIBLE=y
# CONFIG_MFD_SM501 is not set # CONFIG_MFD_SM501 is not set
# CONFIG_HTC_PASIC3 is not set # CONFIG_HTC_PASIC3 is not set
# CONFIG_MFD_TMIO is not set # CONFIG_MFD_TMIO is not set
# CONFIG_REGULATOR is not set
# CONFIG_MEDIA_SUPPORT is not set # CONFIG_MEDIA_SUPPORT is not set
# #
@ -566,14 +630,17 @@ CONFIG_DUMMY_CONSOLE=y
# CONFIG_USB_SUPPORT is not set # CONFIG_USB_SUPPORT is not set
# CONFIG_MMC is not set # CONFIG_MMC is not set
# CONFIG_MEMSTICK is not set # CONFIG_MEMSTICK is not set
# CONFIG_ACCESSIBILITY is not set
# CONFIG_NEW_LEDS is not set # CONFIG_NEW_LEDS is not set
# CONFIG_ACCESSIBILITY is not set
CONFIG_RTC_LIB=y CONFIG_RTC_LIB=y
# 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_AUXDISPLAY is not set
# CONFIG_REGULATOR is not set
# CONFIG_UIO is not set # CONFIG_UIO is not set
#
# TI VLYNQ
#
# CONFIG_STAGING is not set # CONFIG_STAGING is not set
# #
@ -589,9 +656,12 @@ CONFIG_FS_POSIX_ACL=y
# CONFIG_GFS2_FS is not set # CONFIG_GFS2_FS is not set
# CONFIG_OCFS2_FS is not set # CONFIG_OCFS2_FS is not set
# CONFIG_BTRFS_FS is not set # CONFIG_BTRFS_FS is not set
# CONFIG_NILFS2_FS is not set
# CONFIG_FILE_LOCKING is not set # CONFIG_FILE_LOCKING is not set
# CONFIG_FSNOTIFY is not set # CONFIG_FSNOTIFY is not set
# CONFIG_DNOTIFY is not set
# CONFIG_INOTIFY is not set # CONFIG_INOTIFY is not set
# CONFIG_INOTIFY_USER is not set
# CONFIG_QUOTA is not set # CONFIG_QUOTA is not set
# CONFIG_AUTOFS_FS is not set # CONFIG_AUTOFS_FS is not set
# CONFIG_AUTOFS4_FS is not set # CONFIG_AUTOFS4_FS is not set
@ -647,6 +717,7 @@ CONFIG_JFFS2_ZLIB=y
# CONFIG_JFFS2_LZO is not set # CONFIG_JFFS2_LZO is not set
CONFIG_JFFS2_RTIME=y CONFIG_JFFS2_RTIME=y
# CONFIG_JFFS2_RUBIN is not set # CONFIG_JFFS2_RUBIN is not set
# CONFIG_LOGFS is not set
# CONFIG_CRAMFS is not set # CONFIG_CRAMFS is not set
# CONFIG_SQUASHFS is not set # CONFIG_SQUASHFS is not set
# CONFIG_VXFS_FS is not set # CONFIG_VXFS_FS is not set
@ -657,7 +728,6 @@ CONFIG_JFFS2_RTIME=y
# CONFIG_ROMFS_FS is not set # CONFIG_ROMFS_FS is not set
# 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 is not set # CONFIG_NETWORK_FILESYSTEMS is not set
# #
@ -675,11 +745,12 @@ CONFIG_MSDOS_PARTITION=y
CONFIG_ENABLE_MUST_CHECK=y CONFIG_ENABLE_MUST_CHECK=y
CONFIG_FRAME_WARN=1024 CONFIG_FRAME_WARN=1024
CONFIG_MAGIC_SYSRQ=y CONFIG_MAGIC_SYSRQ=y
# CONFIG_STRIP_ASM_SYMS is not set
# CONFIG_UNUSED_SYMBOLS is not set # CONFIG_UNUSED_SYMBOLS is not set
# CONFIG_DEBUG_FS is not set # CONFIG_DEBUG_FS is not set
CONFIG_HEADERS_CHECK=y CONFIG_HEADERS_CHECK=y
# CONFIG_DEBUG_KERNEL is not set # CONFIG_DEBUG_KERNEL is not set
# CONFIG_DEBUG_BUGVERBOSE is not set CONFIG_DEBUG_BUGVERBOSE=y
# CONFIG_DEBUG_MEMORY_INIT is not set # CONFIG_DEBUG_MEMORY_INIT is not set
CONFIG_FRAME_POINTER=y CONFIG_FRAME_POINTER=y
# CONFIG_RCU_CPU_STALL_DETECTOR is not set # CONFIG_RCU_CPU_STALL_DETECTOR is not set
@ -693,6 +764,7 @@ CONFIG_TRACING_SUPPORT=y
CONFIG_HAVE_ARCH_KGDB=y CONFIG_HAVE_ARCH_KGDB=y
# CONFIG_ARM_UNWIND is not set # CONFIG_ARM_UNWIND is not set
# CONFIG_DEBUG_USER is not set # CONFIG_DEBUG_USER is not set
# CONFIG_OC_ETM is not set
# #
# Security options # Security options
@ -700,7 +772,11 @@ CONFIG_HAVE_ARCH_KGDB=y
# CONFIG_KEYS is not set # CONFIG_KEYS is not set
# CONFIG_SECURITY is not set # CONFIG_SECURITY is not set
# CONFIG_SECURITYFS is not set # CONFIG_SECURITYFS is not set
# CONFIG_SECURITY_FILE_CAPABILITIES is not set # CONFIG_DEFAULT_SECURITY_SELINUX is not set
# CONFIG_DEFAULT_SECURITY_SMACK is not set
# CONFIG_DEFAULT_SECURITY_TOMOYO is not set
CONFIG_DEFAULT_SECURITY_DAC=y
CONFIG_DEFAULT_SECURITY=""
# CONFIG_CRYPTO is not set # CONFIG_CRYPTO is not set
# CONFIG_BINARY_PRINTF is not set # CONFIG_BINARY_PRINTF is not set

View File

@ -1058,7 +1058,6 @@ CONFIG_JFFS2_CMODE_PRIORITY=y
# CONFIG_ROMFS_FS is not set # CONFIG_ROMFS_FS is not set
# 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 is not set # CONFIG_NFS_FS is not set
# CONFIG_NFSD is not set # CONFIG_NFSD is not set

View File

@ -661,7 +661,7 @@ CONFIG_DEVKMEM=y
CONFIG_SERIAL_8250=y CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_CONSOLE=y CONFIG_SERIAL_8250_CONSOLE=y
CONFIG_SERIAL_8250_NR_UARTS=32 CONFIG_SERIAL_8250_NR_UARTS=32
CONFIG_SERIAL_8250_RUNTIME_UARTS=4 CONFIG_SERIAL_8250_RUNTIME_UARTS=1
CONFIG_SERIAL_8250_EXTENDED=y CONFIG_SERIAL_8250_EXTENDED=y
CONFIG_SERIAL_8250_MANY_PORTS=y CONFIG_SERIAL_8250_MANY_PORTS=y
CONFIG_SERIAL_8250_SHARE_IRQ=y CONFIG_SERIAL_8250_SHARE_IRQ=y

View File

@ -680,7 +680,7 @@ CONFIG_DEVKMEM=y
CONFIG_SERIAL_8250=y CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_CONSOLE=y CONFIG_SERIAL_8250_CONSOLE=y
CONFIG_SERIAL_8250_NR_UARTS=32 CONFIG_SERIAL_8250_NR_UARTS=32
CONFIG_SERIAL_8250_RUNTIME_UARTS=4 CONFIG_SERIAL_8250_RUNTIME_UARTS=1
CONFIG_SERIAL_8250_EXTENDED=y CONFIG_SERIAL_8250_EXTENDED=y
CONFIG_SERIAL_8250_MANY_PORTS=y CONFIG_SERIAL_8250_MANY_PORTS=y
CONFIG_SERIAL_8250_SHARE_IRQ=y CONFIG_SERIAL_8250_SHARE_IRQ=y

View File

@ -59,8 +59,6 @@ CONFIG_FAIR_GROUP_SCHED=y
CONFIG_USER_SCHED=y CONFIG_USER_SCHED=y
# CONFIG_CGROUP_SCHED is not set # CONFIG_CGROUP_SCHED is not set
# CONFIG_CGROUPS is not set # CONFIG_CGROUPS is not set
CONFIG_SYSFS_DEPRECATED=y
CONFIG_SYSFS_DEPRECATED_V2=y
# CONFIG_RELAY is not set # CONFIG_RELAY is not set
# CONFIG_NAMESPACES is not set # CONFIG_NAMESPACES is not set
CONFIG_BLK_DEV_INITRD=y CONFIG_BLK_DEV_INITRD=y
@ -480,7 +478,6 @@ CONFIG_BT_HIDP=m
# CONFIG_BT_HCIBFUSB is not set # CONFIG_BT_HCIBFUSB is not set
# CONFIG_BT_HCIVHCI is not set # CONFIG_BT_HCIVHCI 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=y CONFIG_CFG80211=y
# CONFIG_CFG80211_REG_DEBUG is not set # CONFIG_CFG80211_REG_DEBUG is not set

View File

@ -149,10 +149,10 @@
#define USER(x...) \ #define USER(x...) \
9999: x; \ 9999: x; \
.section __ex_table,"a"; \ .pushsection __ex_table,"a"; \
.align 3; \ .align 3; \
.long 9999b,9001f; \ .long 9999b,9001f; \
.previous .popsection
/* /*
* SMP data memory barrier * SMP data memory barrier
@ -193,10 +193,10 @@
.error "Unsupported inc macro argument" .error "Unsupported inc macro argument"
.endif .endif
.section __ex_table,"a" .pushsection __ex_table,"a"
.align 3 .align 3
.long 9999b, \abort .long 9999b, \abort
.previous .popsection
.endm .endm
.macro usracc, instr, reg, ptr, inc, cond, rept, abort .macro usracc, instr, reg, ptr, inc, cond, rept, abort
@ -234,10 +234,10 @@
.error "Unsupported inc macro argument" .error "Unsupported inc macro argument"
.endif .endif
.section __ex_table,"a" .pushsection __ex_table,"a"
.align 3 .align 3
.long 9999b, \abort .long 9999b, \abort
.previous .popsection
.endr .endr
.endm .endm

View File

@ -15,6 +15,7 @@
#include <asm/glue.h> #include <asm/glue.h>
#include <asm/shmparam.h> #include <asm/shmparam.h>
#include <asm/cachetype.h> #include <asm/cachetype.h>
#include <asm/outercache.h>
#define CACHE_COLOUR(vaddr) ((vaddr & (SHMLBA - 1)) >> PAGE_SHIFT) #define CACHE_COLOUR(vaddr) ((vaddr & (SHMLBA - 1)) >> PAGE_SHIFT)
@ -219,12 +220,6 @@ struct cpu_cache_fns {
void (*dma_flush_range)(const void *, const void *); void (*dma_flush_range)(const void *, const void *);
}; };
struct outer_cache_fns {
void (*inv_range)(unsigned long, unsigned long);
void (*clean_range)(unsigned long, unsigned long);
void (*flush_range)(unsigned long, unsigned long);
};
/* /*
* Select the calling method * Select the calling method
*/ */
@ -281,37 +276,6 @@ extern void dmac_flush_range(const void *, const void *);
#endif #endif
#ifdef CONFIG_OUTER_CACHE
extern struct outer_cache_fns outer_cache;
static inline void outer_inv_range(unsigned long start, unsigned long end)
{
if (outer_cache.inv_range)
outer_cache.inv_range(start, end);
}
static inline void outer_clean_range(unsigned long start, unsigned long end)
{
if (outer_cache.clean_range)
outer_cache.clean_range(start, end);
}
static inline void outer_flush_range(unsigned long start, unsigned long end)
{
if (outer_cache.flush_range)
outer_cache.flush_range(start, end);
}
#else
static inline void outer_inv_range(unsigned long start, unsigned long end)
{ }
static inline void outer_clean_range(unsigned long start, unsigned long end)
{ }
static inline void outer_flush_range(unsigned long start, unsigned long end)
{ }
#endif
/* /*
* Copy user data from/to a page which is mapped into a different * Copy user data from/to a page which is mapped into a different
* processes address space. Really, we want to allow our "user * processes address space. Really, we want to allow our "user

View File

@ -13,6 +13,7 @@
#define __ASM_CLKDEV_H #define __ASM_CLKDEV_H
struct clk; struct clk;
struct device;
struct clk_lookup { struct clk_lookup {
struct list_head node; struct list_head node;

View File

@ -21,14 +21,14 @@
"2: strt %0, [%2]\n" \ "2: strt %0, [%2]\n" \
" mov %0, #0\n" \ " mov %0, #0\n" \
"3:\n" \ "3:\n" \
" .section __ex_table,\"a\"\n" \ " .pushsection __ex_table,\"a\"\n" \
" .align 3\n" \ " .align 3\n" \
" .long 1b, 4f, 2b, 4f\n" \ " .long 1b, 4f, 2b, 4f\n" \
" .previous\n" \ " .popsection\n" \
" .section .fixup,\"ax\"\n" \ " .pushsection .fixup,\"ax\"\n" \
"4: mov %0, %4\n" \ "4: mov %0, %4\n" \
" b 3b\n" \ " b 3b\n" \
" .previous" \ " .popsection" \
: "=&r" (ret), "=&r" (oldval) \ : "=&r" (ret), "=&r" (oldval) \
: "r" (uaddr), "r" (oparg), "Ir" (-EFAULT) \ : "r" (uaddr), "r" (oparg), "Ir" (-EFAULT) \
: "cc", "memory") : "cc", "memory")
@ -102,14 +102,14 @@ futex_atomic_cmpxchg_inatomic(int __user *uaddr, int oldval, int newval)
" it eq @ explicit IT needed for the 2b label\n" " it eq @ explicit IT needed for the 2b label\n"
"2: streqt %2, [%3]\n" "2: streqt %2, [%3]\n"
"3:\n" "3:\n"
" .section __ex_table,\"a\"\n" " .pushsection __ex_table,\"a\"\n"
" .align 3\n" " .align 3\n"
" .long 1b, 4f, 2b, 4f\n" " .long 1b, 4f, 2b, 4f\n"
" .previous\n" " .popsection\n"
" .section .fixup,\"ax\"\n" " .pushsection .fixup,\"ax\"\n"
"4: mov %0, %4\n" "4: mov %0, %4\n"
" b 3b\n" " b 3b\n"
" .previous" " .popsection"
: "=&r" (val) : "=&r" (val)
: "r" (oldval), "r" (newval), "r" (uaddr), "Ir" (-EFAULT) : "r" (oldval), "r" (newval), "r" (uaddr), "Ir" (-EFAULT)
: "cc", "memory"); : "cc", "memory");

View File

@ -11,7 +11,11 @@
#define kmap_prot PAGE_KERNEL #define kmap_prot PAGE_KERNEL
#define flush_cache_kmaps() flush_cache_all() #define flush_cache_kmaps() \
do { \
if (cache_is_vivt()) \
flush_cache_all(); \
} while (0)
extern pte_t *pkmap_page_table; extern pte_t *pkmap_page_table;
@ -21,11 +25,20 @@ extern void *kmap_high(struct page *page);
extern void *kmap_high_get(struct page *page); extern void *kmap_high_get(struct page *page);
extern void kunmap_high(struct page *page); extern void kunmap_high(struct page *page);
extern void *kmap_high_l1_vipt(struct page *page, pte_t *saved_pte);
extern void kunmap_high_l1_vipt(struct page *page, pte_t saved_pte);
/*
* The following functions are already defined by <linux/highmem.h>
* when CONFIG_HIGHMEM is not set.
*/
#ifdef CONFIG_HIGHMEM
extern void *kmap(struct page *page); extern void *kmap(struct page *page);
extern void kunmap(struct page *page); extern void kunmap(struct page *page);
extern void *kmap_atomic(struct page *page, enum km_type type); extern void *kmap_atomic(struct page *page, enum km_type type);
extern void kunmap_atomic(void *kvaddr, enum km_type type); extern void kunmap_atomic(void *kvaddr, enum km_type type);
extern void *kmap_atomic_pfn(unsigned long pfn, enum km_type type); extern void *kmap_atomic_pfn(unsigned long pfn, enum km_type type);
extern struct page *kmap_atomic_to_page(const void *ptr); extern struct page *kmap_atomic_to_page(const void *ptr);
#endif
#endif #endif

View File

@ -17,6 +17,7 @@
#ifndef __ASSEMBLY__ #ifndef __ASSEMBLY__
struct irqaction; struct irqaction;
struct pt_regs;
extern void migrate_irqs(void); extern void migrate_irqs(void);
extern void asm_do_IRQ(unsigned int, struct pt_regs *); extern void asm_do_IRQ(unsigned int, struct pt_regs *);

View File

@ -18,6 +18,7 @@ enum km_type {
KM_IRQ1, KM_IRQ1,
KM_SOFTIRQ0, KM_SOFTIRQ0,
KM_SOFTIRQ1, KM_SOFTIRQ1,
KM_L1_CACHE,
KM_L2_CACHE, KM_L2_CACHE,
KM_TYPE_NR KM_TYPE_NR
}; };

View File

@ -0,0 +1,75 @@
/*
* arch/arm/include/asm/outercache.h
*
* Copyright (C) 2010 ARM Ltd.
* Written by Catalin Marinas <catalin.marinas@arm.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef __ASM_OUTERCACHE_H
#define __ASM_OUTERCACHE_H
struct outer_cache_fns {
void (*inv_range)(unsigned long, unsigned long);
void (*clean_range)(unsigned long, unsigned long);
void (*flush_range)(unsigned long, unsigned long);
#ifdef CONFIG_OUTER_CACHE_SYNC
void (*sync)(void);
#endif
};
#ifdef CONFIG_OUTER_CACHE
extern struct outer_cache_fns outer_cache;
static inline void outer_inv_range(unsigned long start, unsigned long end)
{
if (outer_cache.inv_range)
outer_cache.inv_range(start, end);
}
static inline void outer_clean_range(unsigned long start, unsigned long end)
{
if (outer_cache.clean_range)
outer_cache.clean_range(start, end);
}
static inline void outer_flush_range(unsigned long start, unsigned long end)
{
if (outer_cache.flush_range)
outer_cache.flush_range(start, end);
}
#else
static inline void outer_inv_range(unsigned long start, unsigned long end)
{ }
static inline void outer_clean_range(unsigned long start, unsigned long end)
{ }
static inline void outer_flush_range(unsigned long start, unsigned long end)
{ }
#endif
#ifdef CONFIG_OUTER_CACHE_SYNC
static inline void outer_sync(void)
{
if (outer_cache.sync)
outer_cache.sync();
}
#else
static inline void outer_sync(void)
{ }
#endif
#endif /* __ASM_OUTERCACHE_H */

View File

@ -60,6 +60,8 @@
#include <linux/linkage.h> #include <linux/linkage.h>
#include <linux/irqflags.h> #include <linux/irqflags.h>
#include <asm/outercache.h>
#define __exception __attribute__((section(".exception.text"))) #define __exception __attribute__((section(".exception.text")))
struct thread_info; struct thread_info;
@ -137,10 +139,12 @@ extern unsigned int user_debug;
#define dmb() __asm__ __volatile__ ("" : : : "memory") #define dmb() __asm__ __volatile__ ("" : : : "memory")
#endif #endif
#if __LINUX_ARM_ARCH__ >= 7 || defined(CONFIG_SMP) #ifdef CONFIG_ARCH_HAS_BARRIERS
#define mb() dmb() #include <mach/barriers.h>
#elif __LINUX_ARM_ARCH__ >= 7 || defined(CONFIG_SMP)
#define mb() do { dsb(); outer_sync(); } while (0)
#define rmb() dmb() #define rmb() dmb()
#define wmb() dmb() #define wmb() mb()
#else #else
#define mb() do { if (arch_is_coherent()) dmb(); else barrier(); } while (0) #define mb() do { if (arch_is_coherent()) dmb(); else barrier(); } while (0)
#define rmb() do { if (arch_is_coherent()) dmb(); else barrier(); } while (0) #define rmb() do { if (arch_is_coherent()) dmb(); else barrier(); } while (0)
@ -152,9 +156,9 @@ extern unsigned int user_debug;
#define smp_rmb() barrier() #define smp_rmb() barrier()
#define smp_wmb() barrier() #define smp_wmb() barrier()
#else #else
#define smp_mb() mb() #define smp_mb() dmb()
#define smp_rmb() rmb() #define smp_rmb() dmb()
#define smp_wmb() wmb() #define smp_wmb() dmb()
#endif #endif
#define read_barrier_depends() do { } while(0) #define read_barrier_depends() do { } while(0)

View File

@ -229,16 +229,16 @@ do { \
__asm__ __volatile__( \ __asm__ __volatile__( \
"1: ldrbt %1,[%2]\n" \ "1: ldrbt %1,[%2]\n" \
"2:\n" \ "2:\n" \
" .section .fixup,\"ax\"\n" \ " .pushsection .fixup,\"ax\"\n" \
" .align 2\n" \ " .align 2\n" \
"3: mov %0, %3\n" \ "3: mov %0, %3\n" \
" mov %1, #0\n" \ " mov %1, #0\n" \
" b 2b\n" \ " b 2b\n" \
" .previous\n" \ " .popsection\n" \
" .section __ex_table,\"a\"\n" \ " .pushsection __ex_table,\"a\"\n" \
" .align 3\n" \ " .align 3\n" \
" .long 1b, 3b\n" \ " .long 1b, 3b\n" \
" .previous" \ " .popsection" \
: "+r" (err), "=&r" (x) \ : "+r" (err), "=&r" (x) \
: "r" (addr), "i" (-EFAULT) \ : "r" (addr), "i" (-EFAULT) \
: "cc") : "cc")
@ -265,16 +265,16 @@ do { \
__asm__ __volatile__( \ __asm__ __volatile__( \
"1: ldrt %1,[%2]\n" \ "1: ldrt %1,[%2]\n" \
"2:\n" \ "2:\n" \
" .section .fixup,\"ax\"\n" \ " .pushsection .fixup,\"ax\"\n" \
" .align 2\n" \ " .align 2\n" \
"3: mov %0, %3\n" \ "3: mov %0, %3\n" \
" mov %1, #0\n" \ " mov %1, #0\n" \
" b 2b\n" \ " b 2b\n" \
" .previous\n" \ " .popsection\n" \
" .section __ex_table,\"a\"\n" \ " .pushsection __ex_table,\"a\"\n" \
" .align 3\n" \ " .align 3\n" \
" .long 1b, 3b\n" \ " .long 1b, 3b\n" \
" .previous" \ " .popsection" \
: "+r" (err), "=&r" (x) \ : "+r" (err), "=&r" (x) \
: "r" (addr), "i" (-EFAULT) \ : "r" (addr), "i" (-EFAULT) \
: "cc") : "cc")
@ -310,15 +310,15 @@ do { \
__asm__ __volatile__( \ __asm__ __volatile__( \
"1: strbt %1,[%2]\n" \ "1: strbt %1,[%2]\n" \
"2:\n" \ "2:\n" \
" .section .fixup,\"ax\"\n" \ " .pushsection .fixup,\"ax\"\n" \
" .align 2\n" \ " .align 2\n" \
"3: mov %0, %3\n" \ "3: mov %0, %3\n" \
" b 2b\n" \ " b 2b\n" \
" .previous\n" \ " .popsection\n" \
" .section __ex_table,\"a\"\n" \ " .pushsection __ex_table,\"a\"\n" \
" .align 3\n" \ " .align 3\n" \
" .long 1b, 3b\n" \ " .long 1b, 3b\n" \
" .previous" \ " .popsection" \
: "+r" (err) \ : "+r" (err) \
: "r" (x), "r" (__pu_addr), "i" (-EFAULT) \ : "r" (x), "r" (__pu_addr), "i" (-EFAULT) \
: "cc") : "cc")
@ -343,15 +343,15 @@ do { \
__asm__ __volatile__( \ __asm__ __volatile__( \
"1: strt %1,[%2]\n" \ "1: strt %1,[%2]\n" \
"2:\n" \ "2:\n" \
" .section .fixup,\"ax\"\n" \ " .pushsection .fixup,\"ax\"\n" \
" .align 2\n" \ " .align 2\n" \
"3: mov %0, %3\n" \ "3: mov %0, %3\n" \
" b 2b\n" \ " b 2b\n" \
" .previous\n" \ " .popsection\n" \
" .section __ex_table,\"a\"\n" \ " .pushsection __ex_table,\"a\"\n" \
" .align 3\n" \ " .align 3\n" \
" .long 1b, 3b\n" \ " .long 1b, 3b\n" \
" .previous" \ " .popsection" \
: "+r" (err) \ : "+r" (err) \
: "r" (x), "r" (__pu_addr), "i" (-EFAULT) \ : "r" (x), "r" (__pu_addr), "i" (-EFAULT) \
: "cc") : "cc")
@ -371,16 +371,16 @@ do { \
THUMB( "1: strt " __reg_oper1 ", [%1]\n" ) \ THUMB( "1: strt " __reg_oper1 ", [%1]\n" ) \
THUMB( "2: strt " __reg_oper0 ", [%1, #4]\n" ) \ THUMB( "2: strt " __reg_oper0 ", [%1, #4]\n" ) \
"3:\n" \ "3:\n" \
" .section .fixup,\"ax\"\n" \ " .pushsection .fixup,\"ax\"\n" \
" .align 2\n" \ " .align 2\n" \
"4: mov %0, %3\n" \ "4: mov %0, %3\n" \
" b 3b\n" \ " b 3b\n" \
" .previous\n" \ " .popsection\n" \
" .section __ex_table,\"a\"\n" \ " .pushsection __ex_table,\"a\"\n" \
" .align 3\n" \ " .align 3\n" \
" .long 1b, 4b\n" \ " .long 1b, 4b\n" \
" .long 2b, 4b\n" \ " .long 2b, 4b\n" \
" .previous" \ " .popsection" \
: "+r" (err), "+r" (__pu_addr) \ : "+r" (err), "+r" (__pu_addr) \
: "r" (x), "i" (-EFAULT) \ : "r" (x), "i" (-EFAULT) \
: "cc") : "cc")

View File

@ -59,23 +59,22 @@ struct iwmmxt_sigframe {
#endif /* CONFIG_IWMMXT */ #endif /* CONFIG_IWMMXT */
#ifdef CONFIG_VFP #ifdef CONFIG_VFP
#if __LINUX_ARM_ARCH__ < 6
/* For ARM pre-v6, we use fstmiax and fldmiax. This adds one extra
* word after the registers, and a word of padding at the end for
* alignment. */
#define VFP_MAGIC 0x56465001 #define VFP_MAGIC 0x56465001
#define VFP_STORAGE_SIZE 152
#else
#define VFP_MAGIC 0x56465002
#define VFP_STORAGE_SIZE 144
#endif
struct vfp_sigframe struct vfp_sigframe
{ {
unsigned long magic; unsigned long magic;
unsigned long size; unsigned long size;
union vfp_state storage; struct user_vfp ufp;
}; struct user_vfp_exc ufp_exc;
} __attribute__((__aligned__(8)));
/*
* 8 byte for magic and size, 264 byte for ufp, 12 bytes for ufp_exc,
* 4 bytes padding.
*/
#define VFP_STORAGE_SIZE sizeof(struct vfp_sigframe)
#endif /* CONFIG_VFP */ #endif /* CONFIG_VFP */
/* /*
@ -91,7 +90,7 @@ struct aux_sigframe {
#ifdef CONFIG_IWMMXT #ifdef CONFIG_IWMMXT
struct iwmmxt_sigframe iwmmxt; struct iwmmxt_sigframe iwmmxt;
#endif #endif
#if 0 && defined CONFIG_VFP /* Not yet saved. */ #ifdef CONFIG_VFP
struct vfp_sigframe vfp; struct vfp_sigframe vfp;
#endif #endif
/* Something that isn't a valid magic number for any coprocessor. */ /* Something that isn't a valid magic number for any coprocessor. */

View File

@ -83,11 +83,21 @@ struct user{
/* /*
* User specific VFP registers. If only VFPv2 is present, registers 16 to 31 * User specific VFP registers. If only VFPv2 is present, registers 16 to 31
* are ignored by the ptrace system call. * are ignored by the ptrace system call and the signal handler.
*/ */
struct user_vfp { struct user_vfp {
unsigned long long fpregs[32]; unsigned long long fpregs[32];
unsigned long fpscr; unsigned long fpscr;
}; };
/*
* VFP exception registers exposed to user space during signal delivery.
* Fields not relavant to the current VFP architecture are ignored.
*/
struct user_vfp_exc {
unsigned long fpexc;
unsigned long fpinst;
unsigned long fpinst2;
};
#endif /* _ARM_USER_H */ #endif /* _ARM_USER_H */

View File

@ -523,16 +523,16 @@ ENDPROC(__und_usr)
/* /*
* The out of line fixup for the ldrt above. * The out of line fixup for the ldrt above.
*/ */
.section .fixup, "ax" .pushsection .fixup, "ax"
4: mov pc, r9 4: mov pc, r9
.previous .popsection
.section __ex_table,"a" .pushsection __ex_table,"a"
.long 1b, 4b .long 1b, 4b
#if __LINUX_ARM_ARCH__ >= 7 #if __LINUX_ARM_ARCH__ >= 7
.long 2b, 4b .long 2b, 4b
.long 3b, 4b .long 3b, 4b
#endif #endif
.previous .popsection
/* /*
* Check whether the instruction is a co-processor instruction. * Check whether the instruction is a co-processor instruction.
@ -679,7 +679,7 @@ do_fpe:
.data .data
ENTRY(fp_enter) ENTRY(fp_enter)
.word no_fp .word no_fp
.previous .text
ENTRY(no_fp) ENTRY(no_fp)
mov pc, lr mov pc, lr

View File

@ -62,15 +62,15 @@ int ftrace_modify_code(unsigned long pc, unsigned char *old_code,
" movne %0, #2 \n" " movne %0, #2 \n"
"3:\n" "3:\n"
".section .fixup, \"ax\"\n" ".pushsection .fixup, \"ax\"\n"
"4: mov %0, #1 \n" "4: mov %0, #1 \n"
" b 3b \n" " b 3b \n"
".previous\n" ".popsection\n"
".section __ex_table, \"a\"\n" ".pushsection __ex_table, \"a\"\n"
" .long 1b, 4b \n" " .long 1b, 4b \n"
" .long 2b, 4b \n" " .long 2b, 4b \n"
".previous\n" ".popsection\n"
: "=r"(err), "=r"(replaced) : "=r"(err), "=r"(replaced)
: "r"(pc), "r"(new), "r"(old), "0"(err), "1"(replaced) : "r"(pc), "r"(new), "r"(old), "0"(err), "1"(replaced)

View File

@ -27,7 +27,6 @@
#include <linux/ioport.h> #include <linux/ioport.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/irq.h> #include <linux/irq.h>
#include <linux/slab.h>
#include <linux/random.h> #include <linux/random.h>
#include <linux/smp.h> #include <linux/smp.h>
#include <linux/init.h> #include <linux/init.h>

View File

@ -22,6 +22,7 @@
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/kprobes.h> #include <linux/kprobes.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/slab.h>
#include <linux/stop_machine.h> #include <linux/stop_machine.h>
#include <linux/stringify.h> #include <linux/stringify.h>
#include <asm/traps.h> #include <asm/traps.h>
@ -393,6 +394,14 @@ void __kprobes jprobe_return(void)
/* /*
* Setup an empty pt_regs. Fill SP and PC fields as * Setup an empty pt_regs. Fill SP and PC fields as
* they're needed by longjmp_break_handler. * they're needed by longjmp_break_handler.
*
* We allocate some slack between the original SP and start of
* our fabricated regs. To be precise we want to have worst case
* covered which is STMFD with all 16 regs so we allocate 2 *
* sizeof(struct_pt_regs)).
*
* This is to prevent any simulated instruction from writing
* over the regs when they are accessing the stack.
*/ */
"sub sp, %0, %1 \n\t" "sub sp, %0, %1 \n\t"
"ldr r0, ="__stringify(JPROBE_MAGIC_ADDR)"\n\t" "ldr r0, ="__stringify(JPROBE_MAGIC_ADDR)"\n\t"
@ -410,7 +419,7 @@ void __kprobes jprobe_return(void)
"ldmia sp, {r0 - pc} \n\t" "ldmia sp, {r0 - pc} \n\t"
: :
: "r" (kcb->jprobe_saved_regs.ARM_sp), : "r" (kcb->jprobe_saved_regs.ARM_sp),
"I" (sizeof(struct pt_regs)), "I" (sizeof(struct pt_regs) * 2),
"J" (offsetof(struct pt_regs, ARM_sp)), "J" (offsetof(struct pt_regs, ARM_sp)),
"J" (offsetof(struct pt_regs, ARM_pc)), "J" (offsetof(struct pt_regs, ARM_pc)),
"J" (offsetof(struct pt_regs, ARM_cpsr)) "J" (offsetof(struct pt_regs, ARM_cpsr))

View File

@ -16,9 +16,9 @@
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/elf.h> #include <linux/elf.h>
#include <linux/vmalloc.h> #include <linux/vmalloc.h>
#include <linux/slab.h>
#include <linux/fs.h> #include <linux/fs.h>
#include <linux/string.h> #include <linux/string.h>
#include <linux/gfp.h>
#include <asm/pgtable.h> #include <asm/pgtable.h>
#include <asm/sections.h> #include <asm/sections.h>

View File

@ -16,7 +16,6 @@
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/stddef.h> #include <linux/stddef.h>
#include <linux/unistd.h> #include <linux/unistd.h>
#include <linux/slab.h>
#include <linux/user.h> #include <linux/user.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/reboot.h> #include <linux/reboot.h>
@ -356,7 +355,7 @@ EXPORT_SYMBOL(dump_fpu);
* the thread function, and r3 points to the exit function. * the thread function, and r3 points to the exit function.
*/ */
extern void kernel_thread_helper(void); extern void kernel_thread_helper(void);
asm( ".section .text\n" asm( ".pushsection .text\n"
" .align\n" " .align\n"
" .type kernel_thread_helper, #function\n" " .type kernel_thread_helper, #function\n"
"kernel_thread_helper:\n" "kernel_thread_helper:\n"
@ -364,11 +363,11 @@ asm( ".section .text\n"
" mov lr, r3\n" " mov lr, r3\n"
" mov pc, r2\n" " mov pc, r2\n"
" .size kernel_thread_helper, . - kernel_thread_helper\n" " .size kernel_thread_helper, . - kernel_thread_helper\n"
" .previous"); " .popsection");
#ifdef CONFIG_ARM_UNWIND #ifdef CONFIG_ARM_UNWIND
extern void kernel_thread_exit(long code); extern void kernel_thread_exit(long code);
asm( ".section .text\n" asm( ".pushsection .text\n"
" .align\n" " .align\n"
" .type kernel_thread_exit, #function\n" " .type kernel_thread_exit, #function\n"
"kernel_thread_exit:\n" "kernel_thread_exit:\n"
@ -378,7 +377,7 @@ asm( ".section .text\n"
" nop\n" " nop\n"
" .fnend\n" " .fnend\n"
" .size kernel_thread_exit, . - kernel_thread_exit\n" " .size kernel_thread_exit, . - kernel_thread_exit\n"
" .previous"); " .popsection");
#else #else
#define kernel_thread_exit do_exit #define kernel_thread_exit do_exit
#endif #endif

View File

@ -18,6 +18,7 @@
#include <asm/cacheflush.h> #include <asm/cacheflush.h>
#include <asm/ucontext.h> #include <asm/ucontext.h>
#include <asm/unistd.h> #include <asm/unistd.h>
#include <asm/vfp.h>
#include "ptrace.h" #include "ptrace.h"
#include "signal.h" #include "signal.h"
@ -175,6 +176,90 @@ static int restore_iwmmxt_context(struct iwmmxt_sigframe *frame)
#endif #endif
#ifdef CONFIG_VFP
static int preserve_vfp_context(struct vfp_sigframe __user *frame)
{
struct thread_info *thread = current_thread_info();
struct vfp_hard_struct *h = &thread->vfpstate.hard;
const unsigned long magic = VFP_MAGIC;
const unsigned long size = VFP_STORAGE_SIZE;
int err = 0;
vfp_sync_hwstate(thread);
__put_user_error(magic, &frame->magic, err);
__put_user_error(size, &frame->size, err);
/*
* Copy the floating point registers. There can be unused
* registers see asm/hwcap.h for details.
*/
err |= __copy_to_user(&frame->ufp.fpregs, &h->fpregs,
sizeof(h->fpregs));
/*
* Copy the status and control register.
*/
__put_user_error(h->fpscr, &frame->ufp.fpscr, err);
/*
* Copy the exception registers.
*/
__put_user_error(h->fpexc, &frame->ufp_exc.fpexc, err);
__put_user_error(h->fpinst, &frame->ufp_exc.fpinst, err);
__put_user_error(h->fpinst2, &frame->ufp_exc.fpinst2, err);
return err ? -EFAULT : 0;
}
static int restore_vfp_context(struct vfp_sigframe __user *frame)
{
struct thread_info *thread = current_thread_info();
struct vfp_hard_struct *h = &thread->vfpstate.hard;
unsigned long magic;
unsigned long size;
unsigned long fpexc;
int err = 0;
__get_user_error(magic, &frame->magic, err);
__get_user_error(size, &frame->size, err);
if (err)
return -EFAULT;
if (magic != VFP_MAGIC || size != VFP_STORAGE_SIZE)
return -EINVAL;
/*
* Copy the floating point registers. There can be unused
* registers see asm/hwcap.h for details.
*/
err |= __copy_from_user(&h->fpregs, &frame->ufp.fpregs,
sizeof(h->fpregs));
/*
* Copy the status and control register.
*/
__get_user_error(h->fpscr, &frame->ufp.fpscr, err);
/*
* Sanitise and restore the exception registers.
*/
__get_user_error(fpexc, &frame->ufp_exc.fpexc, err);
/* Ensure the VFP is enabled. */
fpexc |= FPEXC_EN;
/* Ensure FPINST2 is invalid and the exception flag is cleared. */
fpexc &= ~(FPEXC_EX | FPEXC_FP2V);
h->fpexc = fpexc;
__get_user_error(h->fpinst, &frame->ufp_exc.fpinst, err);
__get_user_error(h->fpinst2, &frame->ufp_exc.fpinst2, err);
if (!err)
vfp_flush_hwstate(thread);
return err ? -EFAULT : 0;
}
#endif
/* /*
* Do a signal return; undo the signal stack. These are aligned to 64-bit. * Do a signal return; undo the signal stack. These are aligned to 64-bit.
*/ */
@ -233,8 +318,8 @@ static int restore_sigframe(struct pt_regs *regs, struct sigframe __user *sf)
err |= restore_iwmmxt_context(&aux->iwmmxt); err |= restore_iwmmxt_context(&aux->iwmmxt);
#endif #endif
#ifdef CONFIG_VFP #ifdef CONFIG_VFP
// if (err == 0) if (err == 0)
// err |= vfp_restore_state(&sf->aux.vfp); err |= restore_vfp_context(&aux->vfp);
#endif #endif
return err; return err;
@ -348,8 +433,8 @@ setup_sigframe(struct sigframe __user *sf, struct pt_regs *regs, sigset_t *set)
err |= preserve_iwmmxt_context(&aux->iwmmxt); err |= preserve_iwmmxt_context(&aux->iwmmxt);
#endif #endif
#ifdef CONFIG_VFP #ifdef CONFIG_VFP
// if (err == 0) if (err == 0)
// err |= vfp_save_state(&sf->aux.vfp); err |= preserve_vfp_context(&aux->vfp);
#endif #endif
__put_user_error(0, &aux->end_magic, err); __put_user_error(0, &aux->end_magic, err);

View File

@ -15,7 +15,6 @@
#include <linux/module.h> #include <linux/module.h>
#include <linux/errno.h> #include <linux/errno.h>
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/slab.h>
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/sem.h> #include <linux/sem.h>
#include <linux/msg.h> #include <linux/msg.h>
@ -27,6 +26,7 @@
#include <linux/file.h> #include <linux/file.h>
#include <linux/ipc.h> #include <linux/ipc.h>
#include <linux/uaccess.h> #include <linux/uaccess.h>
#include <linux/slab.h>
/* Fork a new task - this creates a new program thread. /* Fork a new task - this creates a new program thread.
* This is called indirectly via a small wrapper * This is called indirectly via a small wrapper

View File

@ -110,13 +110,13 @@ no_frame: ldmfd sp!, {r4 - r8, pc}
ENDPROC(__backtrace) ENDPROC(__backtrace)
ENDPROC(c_backtrace) ENDPROC(c_backtrace)
.section __ex_table,"a" .pushsection __ex_table,"a"
.align 3 .align 3
.long 1001b, 1006b .long 1001b, 1006b
.long 1002b, 1006b .long 1002b, 1006b
.long 1003b, 1006b .long 1003b, 1006b
.long 1004b, 1006b .long 1004b, 1006b
.previous .popsection
#define instr r4 #define instr r4
#define reg r5 #define reg r5

View File

@ -46,8 +46,8 @@ USER( strnebt r2, [r0])
ldmfd sp!, {r1, pc} ldmfd sp!, {r1, pc}
ENDPROC(__clear_user) ENDPROC(__clear_user)
.section .fixup,"ax" .pushsection .fixup,"ax"
.align 0 .align 0
9001: ldmfd sp!, {r0, pc} 9001: ldmfd sp!, {r0, pc}
.previous .popsection

View File

@ -90,7 +90,7 @@ ENTRY(__copy_from_user)
ENDPROC(__copy_from_user) ENDPROC(__copy_from_user)
.section .fixup,"ax" .pushsection .fixup,"ax"
.align 0 .align 0
copy_abort_preamble copy_abort_preamble
ldmfd sp!, {r1, r2} ldmfd sp!, {r1, r2}
@ -100,5 +100,5 @@ ENDPROC(__copy_from_user)
bl __memzero bl __memzero
ldr r0, [sp], #4 ldr r0, [sp], #4
copy_abort_end copy_abort_end
.previous .popsection

View File

@ -94,12 +94,12 @@ WEAK(__copy_to_user)
ENDPROC(__copy_to_user) ENDPROC(__copy_to_user)
.section .fixup,"ax" .pushsection .fixup,"ax"
.align 0 .align 0
copy_abort_preamble copy_abort_preamble
ldmfd sp!, {r1, r2, r3} ldmfd sp!, {r1, r2, r3}
sub r0, r0, r1 sub r0, r0, r1
rsb r0, r0, r2 rsb r0, r0, r2
copy_abort_end copy_abort_end
.previous .popsection

View File

@ -68,7 +68,7 @@
* so properly, we would have to add in whatever registers were loaded before * so properly, we would have to add in whatever registers were loaded before
* the fault, which, with the current asm above is not predictable. * the fault, which, with the current asm above is not predictable.
*/ */
.section .fixup,"ax" .pushsection .fixup,"ax"
.align 4 .align 4
9001: mov r4, #-EFAULT 9001: mov r4, #-EFAULT
ldr r5, [fp, #4] @ *err_ptr ldr r5, [fp, #4] @ *err_ptr
@ -80,4 +80,4 @@
strneb r0, [r1], #1 strneb r0, [r1], #1
bne 9002b bne 9002b
load_regs load_regs
.previous .popsection

View File

@ -64,9 +64,9 @@ __get_user_bad:
mov pc, lr mov pc, lr
ENDPROC(__get_user_bad) ENDPROC(__get_user_bad)
.section __ex_table, "a" .pushsection __ex_table, "a"
.long 1b, __get_user_bad .long 1b, __get_user_bad
.long 2b, __get_user_bad .long 2b, __get_user_bad
.long 3b, __get_user_bad .long 3b, __get_user_bad
.long 4b, __get_user_bad .long 4b, __get_user_bad
.previous .popsection

View File

@ -74,7 +74,7 @@ ENTRY(memmove)
rsb ip, ip, #32 rsb ip, ip, #32
addne pc, pc, ip @ C is always clear here addne pc, pc, ip @ C is always clear here
b 7f b 7f
6: nop 6: W(nop)
W(ldr) r3, [r1, #-4]! W(ldr) r3, [r1, #-4]!
W(ldr) r4, [r1, #-4]! W(ldr) r4, [r1, #-4]!
W(ldr) r5, [r1, #-4]! W(ldr) r5, [r1, #-4]!
@ -85,7 +85,7 @@ ENTRY(memmove)
add pc, pc, ip add pc, pc, ip
nop nop
nop W(nop)
W(str) r3, [r0, #-4]! W(str) r3, [r0, #-4]!
W(str) r4, [r0, #-4]! W(str) r4, [r0, #-4]!
W(str) r5, [r0, #-4]! W(str) r5, [r0, #-4]!

View File

@ -81,11 +81,11 @@ __put_user_bad:
mov pc, lr mov pc, lr
ENDPROC(__put_user_bad) ENDPROC(__put_user_bad)
.section __ex_table, "a" .pushsection __ex_table, "a"
.long 1b, __put_user_bad .long 1b, __put_user_bad
.long 2b, __put_user_bad .long 2b, __put_user_bad
.long 3b, __put_user_bad .long 3b, __put_user_bad
.long 4b, __put_user_bad .long 4b, __put_user_bad
.long 5b, __put_user_bad .long 5b, __put_user_bad
.long 6b, __put_user_bad .long 6b, __put_user_bad
.previous .popsection

View File

@ -33,11 +33,11 @@ ENTRY(__strncpy_from_user)
mov pc, lr mov pc, lr
ENDPROC(__strncpy_from_user) ENDPROC(__strncpy_from_user)
.section .fixup,"ax" .pushsection .fixup,"ax"
.align 0 .align 0
9001: mov r3, #0 9001: mov r3, #0
strb r3, [r0, #0] @ null terminate strb r3, [r0, #0] @ null terminate
mov r0, #-EFAULT mov r0, #-EFAULT
mov pc, lr mov pc, lr
.previous .popsection

View File

@ -33,8 +33,8 @@ ENTRY(__strnlen_user)
mov pc, lr mov pc, lr
ENDPROC(__strnlen_user) ENDPROC(__strnlen_user)
.section .fixup,"ax" .pushsection .fixup,"ax"
.align 0 .align 0
9001: mov r0, #0 9001: mov r0, #0
mov pc, lr mov pc, lr
.previous .popsection

View File

@ -279,10 +279,10 @@ USER( strgtbt r3, [r0], #1) @ May fault
b .Lc2u_finished b .Lc2u_finished
ENDPROC(__copy_to_user) ENDPROC(__copy_to_user)
.section .fixup,"ax" .pushsection .fixup,"ax"
.align 0 .align 0
9001: ldmfd sp!, {r0, r4 - r7, pc} 9001: ldmfd sp!, {r0, r4 - r7, pc}
.previous .popsection
/* Prototype: unsigned long __copy_from_user(void *to,const void *from,unsigned long n); /* Prototype: unsigned long __copy_from_user(void *to,const void *from,unsigned long n);
* Purpose : copy a block from user memory to kernel memory * Purpose : copy a block from user memory to kernel memory
@ -545,7 +545,7 @@ USER( ldrgtbt r3, [r1], #1) @ May fault
b .Lcfu_finished b .Lcfu_finished
ENDPROC(__copy_from_user) ENDPROC(__copy_from_user)
.section .fixup,"ax" .pushsection .fixup,"ax"
.align 0 .align 0
/* /*
* We took an exception. r0 contains a pointer to * We took an exception. r0 contains a pointer to
@ -559,5 +559,5 @@ ENDPROC(__copy_from_user)
blne __memzero blne __memzero
mov r0, r4 mov r0, r4
ldmfd sp!, {r4 - r7, pc} ldmfd sp!, {r4 - r7, pc}
.previous .popsection

View File

@ -16,6 +16,7 @@
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/hardirq.h> /* for in_atomic() */ #include <linux/hardirq.h> /* for in_atomic() */
#include <linux/gfp.h>
#include <asm/current.h> #include <asm/current.h>
#include <asm/page.h> #include <asm/page.h>

View File

@ -20,6 +20,7 @@
#include <linux/timex.h> #include <linux/timex.h>
#include <linux/signal.h> #include <linux/signal.h>
#include <linux/clk.h> #include <linux/clk.h>
#include <linux/gfp.h>
#include <mach/hardware.h> #include <mach/hardware.h>
#include <asm/irq.h> #include <asm/irq.h>

View File

@ -16,8 +16,8 @@ obj-$(CONFIG_ARCH_AT91SAM9261) += at91sam9261.o at91sam926x_time.o at91sam9261_d
obj-$(CONFIG_ARCH_AT91SAM9G10) += at91sam9261.o at91sam926x_time.o at91sam9261_devices.o sam9_smc.o obj-$(CONFIG_ARCH_AT91SAM9G10) += at91sam9261.o at91sam926x_time.o at91sam9261_devices.o sam9_smc.o
obj-$(CONFIG_ARCH_AT91SAM9263) += at91sam9263.o at91sam926x_time.o at91sam9263_devices.o sam9_smc.o obj-$(CONFIG_ARCH_AT91SAM9263) += at91sam9263.o at91sam926x_time.o at91sam9263_devices.o sam9_smc.o
obj-$(CONFIG_ARCH_AT91SAM9RL) += at91sam9rl.o at91sam926x_time.o at91sam9rl_devices.o sam9_smc.o obj-$(CONFIG_ARCH_AT91SAM9RL) += at91sam9rl.o at91sam926x_time.o at91sam9rl_devices.o sam9_smc.o
obj-$(CONFIG_ARCH_AT91SAM9G20) += at91sam9260.o at91sam926x_time.o at91sam9260_devices.o sam9_smc.o obj-$(CONFIG_ARCH_AT91SAM9G20) += at91sam9260.o at91sam926x_time.o at91sam9260_devices.o sam9_smc.o
obj-$(CONFIG_ARCH_AT91SAM9G45) += at91sam9g45.o at91sam926x_time.o at91sam9g45_devices.o sam9_smc.o obj-$(CONFIG_ARCH_AT91SAM9G45) += at91sam9g45.o at91sam926x_time.o at91sam9g45_devices.o sam9_smc.o
obj-$(CONFIG_ARCH_AT91CAP9) += at91cap9.o at91sam926x_time.o at91cap9_devices.o sam9_smc.o obj-$(CONFIG_ARCH_AT91CAP9) += at91cap9.o at91sam926x_time.o at91cap9_devices.o sam9_smc.o
obj-$(CONFIG_ARCH_AT572D940HF) += at572d940hf.o at91sam926x_time.o at572d940hf_devices.o sam9_smc.o obj-$(CONFIG_ARCH_AT572D940HF) += at572d940hf.o at91sam926x_time.o at572d940hf_devices.o sam9_smc.o
obj-$(CONFIG_ARCH_AT91X40) += at91x40.o at91x40_time.o obj-$(CONFIG_ARCH_AT91X40) += at91x40.o at91x40_time.o

View File

@ -175,8 +175,6 @@ ENTRY(at91_slow_clock)
orr r3, r3, #(1 << 29) /* bit 29 always set */ orr r3, r3, #(1 << 29) /* bit 29 always set */
str r3, [r1, #(AT91_CKGR_PLLAR - AT91_PMC)] str r3, [r1, #(AT91_CKGR_PLLAR - AT91_PMC)]
wait_pllalock
/* Save PLLB setting and disable it */ /* Save PLLB setting and disable it */
ldr r3, [r1, #(AT91_CKGR_PLLBR - AT91_PMC)] ldr r3, [r1, #(AT91_CKGR_PLLBR - AT91_PMC)]
str r3, .saved_pllbr str r3, .saved_pllbr
@ -184,8 +182,6 @@ ENTRY(at91_slow_clock)
mov r3, #AT91_PMC_PLLCOUNT mov r3, #AT91_PMC_PLLCOUNT
str r3, [r1, #(AT91_CKGR_PLLBR - AT91_PMC)] str r3, [r1, #(AT91_CKGR_PLLBR - AT91_PMC)]
wait_pllblock
/* Turn off the main oscillator */ /* Turn off the main oscillator */
ldr r3, [r1, #(AT91_CKGR_MOR - AT91_PMC)] ldr r3, [r1, #(AT91_CKGR_MOR - AT91_PMC)]
bic r3, r3, #AT91_PMC_MOSCEN bic r3, r3, #AT91_PMC_MOSCEN
@ -205,13 +201,25 @@ ENTRY(at91_slow_clock)
ldr r3, .saved_pllbr ldr r3, .saved_pllbr
str r3, [r1, #(AT91_CKGR_PLLBR - AT91_PMC)] str r3, [r1, #(AT91_CKGR_PLLBR - AT91_PMC)]
tst r3, #(AT91_PMC_MUL & 0xff0000)
bne 1f
tst r3, #(AT91_PMC_MUL & ~0xff0000)
beq 2f
1:
wait_pllblock wait_pllblock
2:
/* Restore PLLA setting */ /* Restore PLLA setting */
ldr r3, .saved_pllar ldr r3, .saved_pllar
str r3, [r1, #(AT91_CKGR_PLLAR - AT91_PMC)] str r3, [r1, #(AT91_CKGR_PLLAR - AT91_PMC)]
tst r3, #(AT91_PMC_MUL & 0xff0000)
bne 3f
tst r3, #(AT91_PMC_MUL & ~0xff0000)
beq 4f
3:
wait_pllalock wait_pllalock
4:
#ifdef SLOWDOWN_MASTER_CLOCK #ifdef SLOWDOWN_MASTER_CLOCK
/* /*

View File

@ -28,6 +28,7 @@
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/irqreturn.h> #include <linux/irqreturn.h>
#include <linux/proc_fs.h> #include <linux/proc_fs.h>
#include <linux/slab.h>
#include <mach/timer.h> #include <mach/timer.h>
@ -2220,11 +2221,15 @@ EXPORT_SYMBOL(dma_map_create_descriptor_ring);
int dma_unmap(DMA_MemMap_t *memMap, /* Stores state information about the map */ int dma_unmap(DMA_MemMap_t *memMap, /* Stores state information about the map */
int dirtied /* non-zero if any of the pages were modified */ int dirtied /* non-zero if any of the pages were modified */
) { ) {
int rc = 0;
int regionIdx; int regionIdx;
int segmentIdx; int segmentIdx;
DMA_Region_t *region; DMA_Region_t *region;
DMA_Segment_t *segment; DMA_Segment_t *segment;
down(&memMap->lock);
for (regionIdx = 0; regionIdx < memMap->numRegionsUsed; regionIdx++) { for (regionIdx = 0; regionIdx < memMap->numRegionsUsed; regionIdx++) {
region = &memMap->region[regionIdx]; region = &memMap->region[regionIdx];
@ -2238,7 +2243,8 @@ int dma_unmap(DMA_MemMap_t *memMap, /* Stores state information about the map */
printk(KERN_ERR printk(KERN_ERR
"%s: vmalloc'd pages are not yet supported\n", "%s: vmalloc'd pages are not yet supported\n",
__func__); __func__);
return -EINVAL; rc = -EINVAL;
goto out;
} }
case DMA_MEM_TYPE_KMALLOC: case DMA_MEM_TYPE_KMALLOC:
@ -2275,7 +2281,8 @@ int dma_unmap(DMA_MemMap_t *memMap, /* Stores state information about the map */
printk(KERN_ERR printk(KERN_ERR
"%s: Unsupported memory type: %d\n", "%s: Unsupported memory type: %d\n",
__func__, region->memType); __func__, region->memType);
return -EINVAL; rc = -EINVAL;
goto out;
} }
} }
@ -2313,9 +2320,10 @@ int dma_unmap(DMA_MemMap_t *memMap, /* Stores state information about the map */
memMap->numRegionsUsed = 0; memMap->numRegionsUsed = 0;
memMap->inUse = 0; memMap->inUse = 0;
out:
up(&memMap->lock); up(&memMap->lock);
return 0; return rc;
} }
EXPORT_SYMBOL(dma_unmap); EXPORT_SYMBOL(dma_unmap);

View File

@ -22,6 +22,7 @@
#include <linux/leds.h> #include <linux/leds.h>
#include <linux/mtd/mtd.h> #include <linux/mtd/mtd.h>
#include <linux/mtd/partitions.h> #include <linux/mtd/partitions.h>
#include <linux/slab.h>
#include <linux/mtd/nand.h> #include <linux/mtd/nand.h>
#include <linux/input.h> #include <linux/input.h>
#include <linux/spi/spi.h> #include <linux/spi/spi.h>

View File

@ -758,7 +758,6 @@ static u8 dm365_default_priorities[DAVINCI_N_AINTC_IRQ] = {
[IRQ_MMCINT] = 7, [IRQ_MMCINT] = 7,
[IRQ_DM365_MMCINT1] = 7, [IRQ_DM365_MMCINT1] = 7,
[IRQ_DM365_PWMINT3] = 7, [IRQ_DM365_PWMINT3] = 7,
[IRQ_DDRINT] = 4,
[IRQ_AEMIFINT] = 2, [IRQ_AEMIFINT] = 2,
[IRQ_DM365_SDIOINT1] = 2, [IRQ_DM365_SDIOINT1] = 2,
[IRQ_TINT0_TINT12] = 7, [IRQ_TINT0_TINT12] = 7,

View File

@ -23,6 +23,7 @@
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/io.h> #include <linux/io.h>
#include <linux/slab.h>
#include <mach/edma.h> #include <mach/edma.h>
@ -1266,7 +1267,8 @@ int edma_start(unsigned channel)
/* EDMA channel with event association */ /* EDMA channel with event association */
pr_debug("EDMA: ER%d %08x\n", j, pr_debug("EDMA: ER%d %08x\n", j,
edma_shadow0_read_array(ctlr, SH_ER, j)); edma_shadow0_read_array(ctlr, SH_ER, j));
/* Clear any pending error */ /* Clear any pending event or error */
edma_write_array(ctlr, EDMA_ECR, j, mask);
edma_write_array(ctlr, EDMA_EMCR, j, mask); edma_write_array(ctlr, EDMA_EMCR, j, mask);
/* Clear any SER */ /* Clear any SER */
edma_shadow0_write_array(ctlr, SH_SECR, j, mask); edma_shadow0_write_array(ctlr, SH_SECR, j, mask);

View File

@ -3,7 +3,7 @@
* *
* Author: Mark A. Greer <mgreer@mvista.com> * Author: Mark A. Greer <mgreer@mvista.com>
* *
* 2007, 2009 (c) MontaVista Software, Inc. This file is licensed under * 2007, 2009-2010 (c) MontaVista Software, Inc. This file is licensed under
* the terms of the GNU General Public License version 2. This program * the terms of the GNU General Public License version 2. This program
* is licensed "as is" without any warranty of any kind, whether express * is licensed "as is" without any warranty of any kind, whether express
* or implied. * or implied.
@ -13,7 +13,9 @@
#include <video/da8xx-fb.h> #include <video/da8xx-fb.h>
#include <linux/platform_device.h>
#include <linux/davinci_emac.h> #include <linux/davinci_emac.h>
#include <mach/serial.h> #include <mach/serial.h>
#include <mach/edma.h> #include <mach/edma.h>
#include <mach/i2c.h> #include <mach/i2c.h>
@ -144,6 +146,10 @@ extern const short da850_mmcsd0_pins[];
extern const short da850_nand_pins[]; extern const short da850_nand_pins[];
extern const short da850_nor_pins[]; extern const short da850_nor_pins[];
#ifdef CONFIG_DAVINCI_MUX
int da8xx_pinmux_setup(const short pins[]); int da8xx_pinmux_setup(const short pins[]);
#else
static inline int da8xx_pinmux_setup(const short pins[]) { return 0; }
#endif
#endif /* __ASM_ARCH_DAVINCI_DA8XX_H */ #endif /* __ASM_ARCH_DAVINCI_DA8XX_H */

View File

@ -253,8 +253,6 @@ static void __init timer_init(void)
irq = USING_COMPARE(t) ? dtip[i].cmp_irq : irq; irq = USING_COMPARE(t) ? dtip[i].cmp_irq : irq;
setup_irq(irq, &t->irqaction); setup_irq(irq, &t->irqaction);
} }
timer32_config(&timers[i]);
} }
} }
@ -331,6 +329,7 @@ static void __init davinci_timer_init(void)
unsigned int clocksource_id; unsigned int clocksource_id;
static char err[] __initdata = KERN_ERR static char err[] __initdata = KERN_ERR
"%s: can't register clocksource!\n"; "%s: can't register clocksource!\n";
int i;
clockevent_id = soc_info->timer_info->clockevent_id; clockevent_id = soc_info->timer_info->clockevent_id;
clocksource_id = soc_info->timer_info->clocksource_id; clocksource_id = soc_info->timer_info->clocksource_id;
@ -389,6 +388,9 @@ static void __init davinci_timer_init(void)
clockevent_davinci.cpumask = cpumask_of(0); clockevent_davinci.cpumask = cpumask_of(0);
clockevents_register_device(&clockevent_davinci); clockevents_register_device(&clockevent_davinci);
for (i=0; i< ARRAY_SIZE(timers); i++)
timer32_config(&timers[i]);
} }
struct sys_timer davinci_timer = { struct sys_timer davinci_timer = {

View File

@ -25,7 +25,7 @@
#include <mach/hardware.h> #include <mach/hardware.h>
/************************************************************************* /*************************************************************************
* GPIO handling for EP93xx * Interrupt handling for EP93xx on-chip GPIOs
*************************************************************************/ *************************************************************************/
static unsigned char gpio_int_unmasked[3]; static unsigned char gpio_int_unmasked[3];
static unsigned char gpio_int_enabled[3]; static unsigned char gpio_int_enabled[3];
@ -40,7 +40,7 @@ static const u8 eoi_register_offset[3] = { 0x98, 0xb4, 0x54 };
static const u8 int_en_register_offset[3] = { 0x9c, 0xb8, 0x58 }; static const u8 int_en_register_offset[3] = { 0x9c, 0xb8, 0x58 };
static const u8 int_debounce_register_offset[3] = { 0xa8, 0xc4, 0x64 }; static const u8 int_debounce_register_offset[3] = { 0xa8, 0xc4, 0x64 };
void ep93xx_gpio_update_int_params(unsigned port) static void ep93xx_gpio_update_int_params(unsigned port)
{ {
BUG_ON(port > 2); BUG_ON(port > 2);
@ -56,7 +56,7 @@ void ep93xx_gpio_update_int_params(unsigned port)
EP93XX_GPIO_REG(int_en_register_offset[port])); EP93XX_GPIO_REG(int_en_register_offset[port]));
} }
void ep93xx_gpio_int_mask(unsigned line) static inline void ep93xx_gpio_int_mask(unsigned line)
{ {
gpio_int_unmasked[line >> 3] &= ~(1 << (line & 7)); gpio_int_unmasked[line >> 3] &= ~(1 << (line & 7));
} }

View File

@ -14,7 +14,6 @@
*/ */
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/slab.h>
#include <linux/mman.h> #include <linux/mman.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>

View File

@ -13,7 +13,6 @@
#include <linux/types.h> #include <linux/types.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/cpufreq.h> #include <linux/cpufreq.h>
#include <linux/slab.h>
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/smp.h> #include <linux/smp.h>
#include <linux/init.h> #include <linux/init.h>

View File

@ -21,6 +21,7 @@
#include <linux/amba/bus.h> #include <linux/amba/bus.h>
#include <linux/amba/clcd.h> #include <linux/amba/clcd.h>
#include <linux/io.h> #include <linux/io.h>
#include <linux/slab.h>
#include <asm/clkdev.h> #include <asm/clkdev.h>
#include <mach/clkdev.h> #include <mach/clkdev.h>

View File

@ -13,7 +13,6 @@
#include <linux/list.h> #include <linux/list.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/dma-mapping.h> #include <linux/dma-mapping.h>
#include <linux/slab.h>
#include <linux/string.h> #include <linux/string.h>
#include <linux/sysdev.h> #include <linux/sysdev.h>
#include <linux/amba/bus.h> #include <linux/amba/bus.h>
@ -21,6 +20,7 @@
#include <linux/amba/clcd.h> #include <linux/amba/clcd.h>
#include <linux/amba/mmci.h> #include <linux/amba/mmci.h>
#include <linux/io.h> #include <linux/io.h>
#include <linux/gfp.h>
#include <asm/clkdev.h> #include <asm/clkdev.h>
#include <mach/clkdev.h> #include <mach/clkdev.h>

View File

@ -22,7 +22,6 @@
*/ */
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/pci.h> #include <linux/pci.h>
#include <linux/slab.h>
#include <linux/ioport.h> #include <linux/ioport.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/spinlock.h> #include <linux/spinlock.h>

View File

@ -18,6 +18,7 @@
*/ */
#include <linux/pci.h> #include <linux/pci.h>
#include <linux/slab.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/jiffies.h> #include <linux/jiffies.h>
#include <asm/irq.h> #include <asm/irq.h>

View File

@ -19,7 +19,6 @@
#include <linux/pci.h> #include <linux/pci.h>
#include <linux/pm.h> #include <linux/pm.h>
#include <linux/string.h> #include <linux/string.h>
#include <linux/slab.h>
#include <linux/serial_core.h> #include <linux/serial_core.h>
#include <linux/serial_8250.h> #include <linux/serial_8250.h>
#include <linux/mtd/physmap.h> #include <linux/mtd/physmap.h>

View File

@ -21,7 +21,6 @@
#include <linux/pci.h> #include <linux/pci.h>
#include <linux/pm.h> #include <linux/pm.h>
#include <linux/string.h> #include <linux/string.h>
#include <linux/slab.h>
#include <linux/serial_core.h> #include <linux/serial_core.h>
#include <linux/serial_8250.h> #include <linux/serial_8250.h>
#include <linux/mtd/physmap.h> #include <linux/mtd/physmap.h>

View File

@ -18,7 +18,6 @@
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/pci.h> #include <linux/pci.h>
#include <linux/string.h> #include <linux/string.h>
#include <linux/slab.h>
#include <linux/serial_core.h> #include <linux/serial_core.h>
#include <linux/serial_8250.h> #include <linux/serial_8250.h>
#include <linux/mtd/physmap.h> #include <linux/mtd/physmap.h>

View File

@ -23,7 +23,6 @@
#include <linux/pci.h> #include <linux/pci.h>
#include <linux/pm.h> #include <linux/pm.h>
#include <linux/string.h> #include <linux/string.h>
#include <linux/slab.h>
#include <linux/serial_core.h> #include <linux/serial_core.h>
#include <linux/serial_8250.h> #include <linux/serial_8250.h>
#include <linux/mtd/physmap.h> #include <linux/mtd/physmap.h>

View File

@ -17,7 +17,6 @@
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/pci.h> #include <linux/pci.h>
#include <linux/string.h> #include <linux/string.h>
#include <linux/slab.h>
#include <linux/serial_core.h> #include <linux/serial_core.h>
#include <linux/serial_8250.h> #include <linux/serial_8250.h>
#include <linux/mtd/physmap.h> #include <linux/mtd/physmap.h>

Some files were not shown because too many files have changed in this diff Show More