提交 b920eb41 编写于 作者: M Mark Brown

Merge tag 'v3.4-rc2' into regulator-drivers

Linux 3.4-rc2 contains some fixes that further patches depend upon.
...@@ -31,3 +31,21 @@ may be weakly ordered, that is that reads and writes may pass each other. ...@@ -31,3 +31,21 @@ may be weakly ordered, that is that reads and writes may pass each other.
Since it is optional for platforms to implement DMA_ATTR_WEAK_ORDERING, Since it is optional for platforms to implement DMA_ATTR_WEAK_ORDERING,
those that do not will simply ignore the attribute and exhibit default those that do not will simply ignore the attribute and exhibit default
behavior. behavior.
DMA_ATTR_WRITE_COMBINE
----------------------
DMA_ATTR_WRITE_COMBINE specifies that writes to the mapping may be
buffered to improve performance.
Since it is optional for platforms to implement DMA_ATTR_WRITE_COMBINE,
those that do not will simply ignore the attribute and exhibit default
behavior.
DMA_ATTR_NON_CONSISTENT
-----------------------
DMA_ATTR_NON_CONSISTENT lets the platform to choose to return either
consistent or non-consistent memory as it sees fit. By using this API,
you are guaranteeing to the platform that you have all the correct and
necessary sync points for this memory in the driver.
...@@ -446,4 +446,21 @@ X!Idrivers/video/console/fonts.c ...@@ -446,4 +446,21 @@ X!Idrivers/video/console/fonts.c
!Edrivers/i2c/i2c-core.c !Edrivers/i2c/i2c-core.c
</chapter> </chapter>
<chapter id="hsi">
<title>High Speed Synchronous Serial Interface (HSI)</title>
<para>
High Speed Synchronous Serial Interface (HSI) is a
serial interface mainly used for connecting application
engines (APE) with cellular modem engines (CMT) in cellular
handsets.
HSI provides multiplexing for up to 16 logical channels,
low-latency and full duplex communication.
</para>
!Iinclude/linux/hsi/hsi.h
!Edrivers/hsi/hsi.c
</chapter>
</book> </book>
...@@ -217,7 +217,7 @@ and name space for cpusets, with a minimum of additional kernel code. ...@@ -217,7 +217,7 @@ and name space for cpusets, with a minimum of additional kernel code.
The cpus and mems files in the root (top_cpuset) cpuset are The cpus and mems files in the root (top_cpuset) cpuset are
read-only. The cpus file automatically tracks the value of read-only. The cpus file automatically tracks the value of
cpu_online_map using a CPU hotplug notifier, and the mems file cpu_online_mask using a CPU hotplug notifier, and the mems file
automatically tracks the value of node_states[N_HIGH_MEMORY]--i.e., automatically tracks the value of node_states[N_HIGH_MEMORY]--i.e.,
nodes with memory--using the cpuset_track_online_nodes() hook. nodes with memory--using the cpuset_track_online_nodes() hook.
......
...@@ -47,7 +47,7 @@ maxcpus=n Restrict boot time cpus to n. Say if you have 4 cpus, using ...@@ -47,7 +47,7 @@ maxcpus=n Restrict boot time cpus to n. Say if you have 4 cpus, using
other cpus later online, read FAQ's for more info. other cpus later online, read FAQ's for more info.
additional_cpus=n (*) Use this to limit hotpluggable cpus. This option sets additional_cpus=n (*) Use this to limit hotpluggable cpus. This option sets
cpu_possible_map = cpu_present_map + additional_cpus cpu_possible_mask = cpu_present_mask + additional_cpus
cede_offline={"off","on"} Use this option to disable/enable putting offlined cede_offline={"off","on"} Use this option to disable/enable putting offlined
processors to an extended H_CEDE state on processors to an extended H_CEDE state on
...@@ -64,11 +64,11 @@ should only rely on this to count the # of cpus, but *MUST* not rely ...@@ -64,11 +64,11 @@ should only rely on this to count the # of cpus, but *MUST* not rely
on the apicid values in those tables for disabled apics. In the event on the apicid values in those tables for disabled apics. In the event
BIOS doesn't mark such hot-pluggable cpus as disabled entries, one could BIOS doesn't mark such hot-pluggable cpus as disabled entries, one could
use this parameter "additional_cpus=x" to represent those cpus in the use this parameter "additional_cpus=x" to represent those cpus in the
cpu_possible_map. cpu_possible_mask.
possible_cpus=n [s390,x86_64] use this to set hotpluggable cpus. possible_cpus=n [s390,x86_64] use this to set hotpluggable cpus.
This option sets possible_cpus bits in This option sets possible_cpus bits in
cpu_possible_map. Thus keeping the numbers of bits set cpu_possible_mask. Thus keeping the numbers of bits set
constant even if the machine gets rebooted. constant even if the machine gets rebooted.
CPU maps and such CPU maps and such
...@@ -76,7 +76,7 @@ CPU maps and such ...@@ -76,7 +76,7 @@ CPU maps and such
[More on cpumaps and primitive to manipulate, please check [More on cpumaps and primitive to manipulate, please check
include/linux/cpumask.h that has more descriptive text.] include/linux/cpumask.h that has more descriptive text.]
cpu_possible_map: Bitmap of possible CPUs that can ever be available in the cpu_possible_mask: Bitmap of possible CPUs that can ever be available in the
system. This is used to allocate some boot time memory for per_cpu variables system. This is used to allocate some boot time memory for per_cpu variables
that aren't designed to grow/shrink as CPUs are made available or removed. that aren't designed to grow/shrink as CPUs are made available or removed.
Once set during boot time discovery phase, the map is static, i.e no bits Once set during boot time discovery phase, the map is static, i.e no bits
...@@ -84,13 +84,13 @@ are added or removed anytime. Trimming it accurately for your system needs ...@@ -84,13 +84,13 @@ are added or removed anytime. Trimming it accurately for your system needs
upfront can save some boot time memory. See below for how we use heuristics upfront can save some boot time memory. See below for how we use heuristics
in x86_64 case to keep this under check. in x86_64 case to keep this under check.
cpu_online_map: Bitmap of all CPUs currently online. Its set in __cpu_up() cpu_online_mask: Bitmap of all CPUs currently online. Its set in __cpu_up()
after a cpu is available for kernel scheduling and ready to receive after a cpu is available for kernel scheduling and ready to receive
interrupts from devices. Its cleared when a cpu is brought down using interrupts from devices. Its cleared when a cpu is brought down using
__cpu_disable(), before which all OS services including interrupts are __cpu_disable(), before which all OS services including interrupts are
migrated to another target CPU. migrated to another target CPU.
cpu_present_map: Bitmap of CPUs currently present in the system. Not all cpu_present_mask: Bitmap of CPUs currently present in the system. Not all
of them may be online. When physical hotplug is processed by the relevant of them may be online. When physical hotplug is processed by the relevant
subsystem (e.g ACPI) can change and new bit either be added or removed subsystem (e.g ACPI) can change and new bit either be added or removed
from the map depending on the event is hot-add/hot-remove. There are currently from the map depending on the event is hot-add/hot-remove. There are currently
...@@ -99,22 +99,22 @@ at which time hotplug is disabled. ...@@ -99,22 +99,22 @@ at which time hotplug is disabled.
You really dont need to manipulate any of the system cpu maps. They should You really dont need to manipulate any of the system cpu maps. They should
be read-only for most use. When setting up per-cpu resources almost always use be read-only for most use. When setting up per-cpu resources almost always use
cpu_possible_map/for_each_possible_cpu() to iterate. cpu_possible_mask/for_each_possible_cpu() to iterate.
Never use anything other than cpumask_t to represent bitmap of CPUs. Never use anything other than cpumask_t to represent bitmap of CPUs.
#include <linux/cpumask.h> #include <linux/cpumask.h>
for_each_possible_cpu - Iterate over cpu_possible_map for_each_possible_cpu - Iterate over cpu_possible_mask
for_each_online_cpu - Iterate over cpu_online_map for_each_online_cpu - Iterate over cpu_online_mask
for_each_present_cpu - Iterate over cpu_present_map for_each_present_cpu - Iterate over cpu_present_mask
for_each_cpu_mask(x,mask) - Iterate over some random collection of cpu mask. for_each_cpu_mask(x,mask) - Iterate over some random collection of cpu mask.
#include <linux/cpu.h> #include <linux/cpu.h>
get_online_cpus() and put_online_cpus(): get_online_cpus() and put_online_cpus():
The above calls are used to inhibit cpu hotplug operations. While the The above calls are used to inhibit cpu hotplug operations. While the
cpu_hotplug.refcount is non zero, the cpu_online_map will not change. cpu_hotplug.refcount is non zero, the cpu_online_mask will not change.
If you merely need to avoid cpus going away, you could also use If you merely need to avoid cpus going away, you could also use
preempt_disable() and preempt_enable() for those sections. preempt_disable() and preempt_enable() for those sections.
Just remember the critical section cannot call any Just remember the critical section cannot call any
......
...@@ -27,13 +27,13 @@ nand0: nand@40000000,0 { ...@@ -27,13 +27,13 @@ nand0: nand@40000000,0 {
reg = <0x40000000 0x10000000 reg = <0x40000000 0x10000000
0xffffe800 0x200 0xffffe800 0x200
>; >;
atmel,nand-addr-offset = <21>; atmel,nand-addr-offset = <21>; /* ale */
atmel,nand-cmd-offset = <22>; atmel,nand-cmd-offset = <22>; /* cle */
nand-on-flash-bbt; nand-on-flash-bbt;
nand-ecc-mode = "soft"; nand-ecc-mode = "soft";
gpios = <&pioC 13 0 gpios = <&pioC 13 0 /* rdy */
&pioC 14 0 &pioC 14 0 /* nce */
0 0 /* cd */
>; >;
partition@0 { partition@0 {
... ...
......
Anatop Voltage regulators
Required properties:
- compatible: Must be "fsl,anatop-regulator"
- anatop-reg-offset: Anatop MFD register offset
- anatop-vol-bit-shift: Bit shift for the register
- anatop-vol-bit-width: Number of bits used in the register
- anatop-min-bit-val: Minimum value of this register
- anatop-min-voltage: Minimum voltage of this regulator
- anatop-max-voltage: Maximum voltage of this regulator
Any property defined as part of the core regulator
binding, defined in regulator.txt, can also be used.
Example:
regulator-vddpu {
compatible = "fsl,anatop-regulator";
regulator-name = "vddpu";
regulator-min-microvolt = <725000>;
regulator-max-microvolt = <1300000>;
regulator-always-on;
anatop-reg-offset = <0x140>;
anatop-vol-bit-shift = <9>;
anatop-vol-bit-width = <5>;
anatop-min-bit-val = <1>;
anatop-min-voltage = <725000>;
anatop-max-voltage = <1300000>;
};
...@@ -6,14 +6,6 @@ be removed from this file. ...@@ -6,14 +6,6 @@ be removed from this file.
--------------------------- ---------------------------
What: x86 floppy disable_hlt
When: 2012
Why: ancient workaround of dubious utility clutters the
code used by everybody else.
Who: Len Brown <len.brown@intel.com>
---------------------------
What: CONFIG_APM_CPU_IDLE, and its ability to call APM BIOS in idle What: CONFIG_APM_CPU_IDLE, and its ability to call APM BIOS in idle
When: 2012 When: 2012
Why: This optional sub-feature of APM is of dubious reliability, Why: This optional sub-feature of APM is of dubious reliability,
......
...@@ -11,7 +11,7 @@ Supported chips: ...@@ -11,7 +11,7 @@ Supported chips:
Socket S1G2: Athlon (X2), Sempron (X2), Turion X2 (Ultra) Socket S1G2: Athlon (X2), Sempron (X2), Turion X2 (Ultra)
* AMD Family 12h processors: "Llano" (E2/A4/A6/A8-Series) * AMD Family 12h processors: "Llano" (E2/A4/A6/A8-Series)
* AMD Family 14h processors: "Brazos" (C/E/G/Z-Series) * AMD Family 14h processors: "Brazos" (C/E/G/Z-Series)
* AMD Family 15h processors: "Bulldozer" * AMD Family 15h processors: "Bulldozer" (FX-Series), "Trinity"
Prefix: 'k10temp' Prefix: 'k10temp'
Addresses scanned: PCI space Addresses scanned: PCI space
......
...@@ -225,6 +225,7 @@ Code Seq#(hex) Include File Comments ...@@ -225,6 +225,7 @@ Code Seq#(hex) Include File Comments
'j' 00-3F linux/joystick.h 'j' 00-3F linux/joystick.h
'k' 00-0F linux/spi/spidev.h conflict! 'k' 00-0F linux/spi/spidev.h conflict!
'k' 00-05 video/kyro.h conflict! 'k' 00-05 video/kyro.h conflict!
'k' 10-17 linux/hsi/hsi_char.h HSI character device
'l' 00-3F linux/tcfs_fs.h transparent cryptographic file system 'l' 00-3F linux/tcfs_fs.h transparent cryptographic file system
<http://web.archive.org/web/*/http://mikonos.dia.unisa.it/tcfs> <http://web.archive.org/web/*/http://mikonos.dia.unisa.it/tcfs>
'l' 40-7F linux/udf_fs_i.h in development: 'l' 40-7F linux/udf_fs_i.h in development:
......
...@@ -2,16 +2,16 @@ Document about softnet driver issues ...@@ -2,16 +2,16 @@ Document about softnet driver issues
Transmit path guidelines: Transmit path guidelines:
1) The hard_start_xmit method must never return '1' under any 1) The ndo_start_xmit method must not return NETDEV_TX_BUSY under
normal circumstances. It is considered a hard error unless any normal circumstances. It is considered a hard error unless
there is no way your device can tell ahead of time when it's there is no way your device can tell ahead of time when it's
transmit function will become busy. transmit function will become busy.
Instead it must maintain the queue properly. For example, Instead it must maintain the queue properly. For example,
for a driver implementing scatter-gather this means: for a driver implementing scatter-gather this means:
static int drv_hard_start_xmit(struct sk_buff *skb, static netdev_tx_t drv_hard_start_xmit(struct sk_buff *skb,
struct net_device *dev) struct net_device *dev)
{ {
struct drv *dp = netdev_priv(dev); struct drv *dp = netdev_priv(dev);
...@@ -23,7 +23,7 @@ Transmit path guidelines: ...@@ -23,7 +23,7 @@ Transmit path guidelines:
unlock_tx(dp); unlock_tx(dp);
printk(KERN_ERR PFX "%s: BUG! Tx Ring full when queue awake!\n", printk(KERN_ERR PFX "%s: BUG! Tx Ring full when queue awake!\n",
dev->name); dev->name);
return 1; return NETDEV_TX_BUSY;
} }
... queue packet to card ... ... queue packet to card ...
...@@ -35,6 +35,7 @@ Transmit path guidelines: ...@@ -35,6 +35,7 @@ Transmit path guidelines:
... ...
unlock_tx(dp); unlock_tx(dp);
... ...
return NETDEV_TX_OK;
} }
And then at the end of your TX reclamation event handling: And then at the end of your TX reclamation event handling:
...@@ -58,15 +59,12 @@ Transmit path guidelines: ...@@ -58,15 +59,12 @@ Transmit path guidelines:
TX_BUFFS_AVAIL(dp) > 0) TX_BUFFS_AVAIL(dp) > 0)
netif_wake_queue(dp->dev); netif_wake_queue(dp->dev);
2) Do not forget to update netdev->trans_start to jiffies after 2) An ndo_start_xmit method must not modify the shared parts of a
each new tx packet is given to the hardware.
3) A hard_start_xmit method must not modify the shared parts of a
cloned SKB. cloned SKB.
4) Do not forget that once you return 0 from your hard_start_xmit 3) Do not forget that once you return NETDEV_TX_OK from your
method, it is your driver's responsibility to free up the SKB ndo_start_xmit method, it is your driver's responsibility to free
and in some finite amount of time. up the SKB and in some finite amount of time.
For example, this means that it is not allowed for your TX For example, this means that it is not allowed for your TX
mitigation scheme to let TX packets "hang out" in the TX mitigation scheme to let TX packets "hang out" in the TX
...@@ -74,8 +72,9 @@ Transmit path guidelines: ...@@ -74,8 +72,9 @@ Transmit path guidelines:
This error can deadlock sockets waiting for send buffer room This error can deadlock sockets waiting for send buffer room
to be freed up. to be freed up.
If you return 1 from the hard_start_xmit method, you must not keep If you return NETDEV_TX_BUSY from the ndo_start_xmit method, you
any reference to that SKB and you must not attempt to free it up. must not keep any reference to that SKB and you must not attempt
to free it up.
Probing guidelines: Probing guidelines:
...@@ -85,10 +84,10 @@ Probing guidelines: ...@@ -85,10 +84,10 @@ Probing guidelines:
Close/stop guidelines: Close/stop guidelines:
1) After the dev->stop routine has been called, the hardware must 1) After the ndo_stop routine has been called, the hardware must
not receive or transmit any data. All in flight packets must not receive or transmit any data. All in flight packets must
be aborted. If necessary, poll or wait for completion of be aborted. If necessary, poll or wait for completion of
any reset commands. any reset commands.
2) The dev->stop routine will be called by unregister_netdevice 2) The ndo_stop routine will be called by unregister_netdevice
if device is still UP. if device is still UP.
...@@ -604,15 +604,8 @@ IP Variables: ...@@ -604,15 +604,8 @@ IP Variables:
ip_local_port_range - 2 INTEGERS ip_local_port_range - 2 INTEGERS
Defines the local port range that is used by TCP and UDP to Defines the local port range that is used by TCP and UDP to
choose the local port. The first number is the first, the choose the local port. The first number is the first, the
second the last local port number. Default value depends on second the last local port number. The default values are
amount of memory available on the system: 32768 and 61000 respectively.
> 128Mb 32768-61000
< 128Mb 1024-4999 or even less.
This number defines number of active connections, which this
system can issue simultaneously to systems not supporting
TCP extensions (timestamps). With tcp_tw_recycle enabled
(i.e. by default) range 1024-4999 is enough to issue up to
2000 connections per second to systems supporting timestamps.
ip_local_reserved_ports - list of comma separated ranges ip_local_reserved_ports - list of comma separated ranges
Specify the ports which are reserved for known third-party Specify the ports which are reserved for known third-party
......
...@@ -47,26 +47,25 @@ packets is preferred. ...@@ -47,26 +47,25 @@ packets is preferred.
struct net_device synchronization rules struct net_device synchronization rules
======================================= =======================================
dev->open: ndo_open:
Synchronization: rtnl_lock() semaphore. Synchronization: rtnl_lock() semaphore.
Context: process Context: process
dev->stop: ndo_stop:
Synchronization: rtnl_lock() semaphore. Synchronization: rtnl_lock() semaphore.
Context: process Context: process
Note1: netif_running() is guaranteed false Note: netif_running() is guaranteed false
Note2: dev->poll() is guaranteed to be stopped
dev->do_ioctl: ndo_do_ioctl:
Synchronization: rtnl_lock() semaphore. Synchronization: rtnl_lock() semaphore.
Context: process Context: process
dev->get_stats: ndo_get_stats:
Synchronization: dev_base_lock rwlock. Synchronization: dev_base_lock rwlock.
Context: nominally process, but don't sleep inside an rwlock Context: nominally process, but don't sleep inside an rwlock
dev->hard_start_xmit: ndo_start_xmit:
Synchronization: netif_tx_lock spinlock. Synchronization: __netif_tx_lock spinlock.
When the driver sets NETIF_F_LLTX in dev->features this will be When the driver sets NETIF_F_LLTX in dev->features this will be
called without holding netif_tx_lock. In this case the driver called without holding netif_tx_lock. In this case the driver
...@@ -87,20 +86,20 @@ dev->hard_start_xmit: ...@@ -87,20 +86,20 @@ dev->hard_start_xmit:
o NETDEV_TX_LOCKED Locking failed, please retry quickly. o NETDEV_TX_LOCKED Locking failed, please retry quickly.
Only valid when NETIF_F_LLTX is set. Only valid when NETIF_F_LLTX is set.
dev->tx_timeout: ndo_tx_timeout:
Synchronization: netif_tx_lock spinlock. Synchronization: netif_tx_lock spinlock; all TX queues frozen.
Context: BHs disabled Context: BHs disabled
Notes: netif_queue_stopped() is guaranteed true Notes: netif_queue_stopped() is guaranteed true
dev->set_rx_mode: ndo_set_rx_mode:
Synchronization: netif_tx_lock spinlock. Synchronization: netif_addr_lock spinlock.
Context: BHs disabled Context: BHs disabled
struct napi_struct synchronization rules struct napi_struct synchronization rules
======================================== ========================================
napi->poll: napi->poll:
Synchronization: NAPI_STATE_SCHED bit in napi->state. Device Synchronization: NAPI_STATE_SCHED bit in napi->state. Device
driver's dev->close method will invoke napi_disable() on driver's ndo_stop method will invoke napi_disable() on
all NAPI instances which will do a sleeping poll on the all NAPI instances which will do a sleeping poll on the
NAPI_STATE_SCHED napi->state bit, waiting for all pending NAPI_STATE_SCHED napi->state bit, waiting for all pending
NAPI activity to cease. NAPI activity to cease.
......
...@@ -228,7 +228,7 @@ M: Len Brown <lenb@kernel.org> ...@@ -228,7 +228,7 @@ M: Len Brown <lenb@kernel.org>
L: linux-acpi@vger.kernel.org L: linux-acpi@vger.kernel.org
W: http://www.lesswatts.org/projects/acpi/ W: http://www.lesswatts.org/projects/acpi/
Q: http://patchwork.kernel.org/project/linux-acpi/list/ Q: http://patchwork.kernel.org/project/linux-acpi/list/
T: git git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6.git T: git git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux
S: Supported S: Supported
F: drivers/acpi/ F: drivers/acpi/
F: drivers/pnp/pnpacpi/ F: drivers/pnp/pnpacpi/
...@@ -1251,7 +1251,6 @@ ATHEROS ATH5K WIRELESS DRIVER ...@@ -1251,7 +1251,6 @@ ATHEROS ATH5K WIRELESS DRIVER
M: Jiri Slaby <jirislaby@gmail.com> M: Jiri Slaby <jirislaby@gmail.com>
M: Nick Kossifidis <mickflemm@gmail.com> M: Nick Kossifidis <mickflemm@gmail.com>
M: "Luis R. Rodriguez" <mcgrof@qca.qualcomm.com> M: "Luis R. Rodriguez" <mcgrof@qca.qualcomm.com>
M: Bob Copeland <me@bobcopeland.com>
L: linux-wireless@vger.kernel.org L: linux-wireless@vger.kernel.org
L: ath5k-devel@lists.ath5k.org L: ath5k-devel@lists.ath5k.org
W: http://wireless.kernel.org/en/users/Drivers/ath5k W: http://wireless.kernel.org/en/users/Drivers/ath5k
...@@ -2451,17 +2450,17 @@ F: fs/ecryptfs/ ...@@ -2451,17 +2450,17 @@ F: fs/ecryptfs/
EDAC-CORE EDAC-CORE
M: Doug Thompson <dougthompson@xmission.com> M: Doug Thompson <dougthompson@xmission.com>
L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers) L: linux-edac@vger.kernel.org
W: bluesmoke.sourceforge.net W: bluesmoke.sourceforge.net
S: Supported S: Supported
F: Documentation/edac.txt F: Documentation/edac.txt
F: drivers/edac/edac_* F: drivers/edac/
F: include/linux/edac.h F: include/linux/edac.h
EDAC-AMD64 EDAC-AMD64
M: Doug Thompson <dougthompson@xmission.com> M: Doug Thompson <dougthompson@xmission.com>
M: Borislav Petkov <borislav.petkov@amd.com> M: Borislav Petkov <borislav.petkov@amd.com>
L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers) L: linux-edac@vger.kernel.org
W: bluesmoke.sourceforge.net W: bluesmoke.sourceforge.net
S: Supported S: Supported
F: drivers/edac/amd64_edac* F: drivers/edac/amd64_edac*
...@@ -2469,35 +2468,35 @@ F: drivers/edac/amd64_edac* ...@@ -2469,35 +2468,35 @@ F: drivers/edac/amd64_edac*
EDAC-E752X EDAC-E752X
M: Mark Gross <mark.gross@intel.com> M: Mark Gross <mark.gross@intel.com>
M: Doug Thompson <dougthompson@xmission.com> M: Doug Thompson <dougthompson@xmission.com>
L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers) L: linux-edac@vger.kernel.org
W: bluesmoke.sourceforge.net W: bluesmoke.sourceforge.net
S: Maintained S: Maintained
F: drivers/edac/e752x_edac.c F: drivers/edac/e752x_edac.c
EDAC-E7XXX EDAC-E7XXX
M: Doug Thompson <dougthompson@xmission.com> M: Doug Thompson <dougthompson@xmission.com>
L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers) L: linux-edac@vger.kernel.org
W: bluesmoke.sourceforge.net W: bluesmoke.sourceforge.net
S: Maintained S: Maintained
F: drivers/edac/e7xxx_edac.c F: drivers/edac/e7xxx_edac.c
EDAC-I82443BXGX EDAC-I82443BXGX
M: Tim Small <tim@buttersideup.com> M: Tim Small <tim@buttersideup.com>
L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers) L: linux-edac@vger.kernel.org
W: bluesmoke.sourceforge.net W: bluesmoke.sourceforge.net
S: Maintained S: Maintained
F: drivers/edac/i82443bxgx_edac.c F: drivers/edac/i82443bxgx_edac.c
EDAC-I3000 EDAC-I3000
M: Jason Uhlenkott <juhlenko@akamai.com> M: Jason Uhlenkott <juhlenko@akamai.com>
L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers) L: linux-edac@vger.kernel.org
W: bluesmoke.sourceforge.net W: bluesmoke.sourceforge.net
S: Maintained S: Maintained
F: drivers/edac/i3000_edac.c F: drivers/edac/i3000_edac.c
EDAC-I5000 EDAC-I5000
M: Doug Thompson <dougthompson@xmission.com> M: Doug Thompson <dougthompson@xmission.com>
L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers) L: linux-edac@vger.kernel.org
W: bluesmoke.sourceforge.net W: bluesmoke.sourceforge.net
S: Maintained S: Maintained
F: drivers/edac/i5000_edac.c F: drivers/edac/i5000_edac.c
...@@ -2526,21 +2525,21 @@ F: drivers/edac/i7core_edac.c ...@@ -2526,21 +2525,21 @@ F: drivers/edac/i7core_edac.c
EDAC-I82975X EDAC-I82975X
M: Ranganathan Desikan <ravi@jetztechnologies.com> M: Ranganathan Desikan <ravi@jetztechnologies.com>
M: "Arvind R." <arvino55@gmail.com> M: "Arvind R." <arvino55@gmail.com>
L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers) L: linux-edac@vger.kernel.org
W: bluesmoke.sourceforge.net W: bluesmoke.sourceforge.net
S: Maintained S: Maintained
F: drivers/edac/i82975x_edac.c F: drivers/edac/i82975x_edac.c
EDAC-PASEMI EDAC-PASEMI
M: Egor Martovetsky <egor@pasemi.com> M: Egor Martovetsky <egor@pasemi.com>
L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers) L: linux-edac@vger.kernel.org
W: bluesmoke.sourceforge.net W: bluesmoke.sourceforge.net
S: Maintained S: Maintained
F: drivers/edac/pasemi_edac.c F: drivers/edac/pasemi_edac.c
EDAC-R82600 EDAC-R82600
M: Tim Small <tim@buttersideup.com> M: Tim Small <tim@buttersideup.com>
L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers) L: linux-edac@vger.kernel.org
W: bluesmoke.sourceforge.net W: bluesmoke.sourceforge.net
S: Maintained S: Maintained
F: drivers/edac/r82600_edac.c F: drivers/edac/r82600_edac.c
...@@ -3557,17 +3556,13 @@ L: linux-pm@vger.kernel.org ...@@ -3557,17 +3556,13 @@ L: linux-pm@vger.kernel.org
S: Supported S: Supported
F: arch/x86/platform/mrst/pmu.* F: arch/x86/platform/mrst/pmu.*
INTEL PRO/WIRELESS 2100 NETWORK CONNECTION SUPPORT INTEL PRO/WIRELESS 2100, 2200BG, 2915ABG NETWORK CONNECTION SUPPORT
M: Stanislav Yakovlev <stas.yakovlev@gmail.com>
L: linux-wireless@vger.kernel.org L: linux-wireless@vger.kernel.org
S: Orphan S: Maintained
F: Documentation/networking/README.ipw2100 F: Documentation/networking/README.ipw2100
F: drivers/net/wireless/ipw2x00/ipw2100.*
INTEL PRO/WIRELESS 2915ABG NETWORK CONNECTION SUPPORT
L: linux-wireless@vger.kernel.org
S: Orphan
F: Documentation/networking/README.ipw2200 F: Documentation/networking/README.ipw2200
F: drivers/net/wireless/ipw2x00/ipw2200.* F: drivers/net/wireless/ipw2x00/
INTEL(R) TRUSTED EXECUTION TECHNOLOGY (TXT) INTEL(R) TRUSTED EXECUTION TECHNOLOGY (TXT)
M: Joseph Cihula <joseph.cihula@intel.com> M: Joseph Cihula <joseph.cihula@intel.com>
...@@ -4314,6 +4309,13 @@ W: http://www.kernel.org/doc/man-pages ...@@ -4314,6 +4309,13 @@ W: http://www.kernel.org/doc/man-pages
L: linux-man@vger.kernel.org L: linux-man@vger.kernel.org
S: Maintained S: Maintained
MARVELL GIGABIT ETHERNET DRIVERS (skge/sky2)
M: Mirko Lindner <mlindner@marvell.com>
M: Stephen Hemminger <shemminger@vyatta.com>
L: netdev@vger.kernel.org
S: Maintained
F: drivers/net/ethernet/marvell/sk*
MARVELL LIBERTAS WIRELESS DRIVER MARVELL LIBERTAS WIRELESS DRIVER
M: Dan Williams <dcbw@redhat.com> M: Dan Williams <dcbw@redhat.com>
L: libertas-dev@lists.infradead.org L: libertas-dev@lists.infradead.org
...@@ -4344,12 +4346,6 @@ M: Nicolas Pitre <nico@fluxnic.net> ...@@ -4344,12 +4346,6 @@ M: Nicolas Pitre <nico@fluxnic.net>
S: Odd Fixes S: Odd Fixes
F: drivers/mmc/host/mvsdio.* F: drivers/mmc/host/mvsdio.*
MARVELL YUKON / SYSKONNECT DRIVER
M: Mirko Lindner <mlindner@syskonnect.de>
M: Ralph Roesler <rroesler@syskonnect.de>
W: http://www.syskonnect.com
S: Supported
MATROX FRAMEBUFFER DRIVER MATROX FRAMEBUFFER DRIVER
L: linux-fbdev@vger.kernel.org L: linux-fbdev@vger.kernel.org
S: Orphan S: Orphan
...@@ -5642,7 +5638,7 @@ M: Ohad Ben-Cohen <ohad@wizery.com> ...@@ -5642,7 +5638,7 @@ M: Ohad Ben-Cohen <ohad@wizery.com>
S: Maintained S: Maintained
F: drivers/remoteproc/ F: drivers/remoteproc/
F: Documentation/remoteproc.txt F: Documentation/remoteproc.txt
F: include/linux/remoteproc.txt F: include/linux/remoteproc.h
RFKILL RFKILL
M: Johannes Berg <johannes@sipsolutions.net> M: Johannes Berg <johannes@sipsolutions.net>
...@@ -6121,12 +6117,6 @@ W: http://www.winischhofer.at/linuxsisusbvga.shtml ...@@ -6121,12 +6117,6 @@ W: http://www.winischhofer.at/linuxsisusbvga.shtml
S: Maintained S: Maintained
F: drivers/usb/misc/sisusbvga/ F: drivers/usb/misc/sisusbvga/
SKGE, SKY2 10/100/1000 GIGABIT ETHERNET DRIVERS
M: Stephen Hemminger <shemminger@vyatta.com>
L: netdev@vger.kernel.org
S: Maintained
F: drivers/net/ethernet/marvell/sk*
SLAB ALLOCATOR SLAB ALLOCATOR
M: Christoph Lameter <cl@linux-foundation.org> M: Christoph Lameter <cl@linux-foundation.org>
M: Pekka Enberg <penberg@kernel.org> M: Pekka Enberg <penberg@kernel.org>
...@@ -6292,6 +6282,15 @@ F: drivers/tty/serial/sunsu.c ...@@ -6292,6 +6282,15 @@ F: drivers/tty/serial/sunsu.c
F: drivers/tty/serial/sunzilog.c F: drivers/tty/serial/sunzilog.c
F: drivers/tty/serial/sunzilog.h F: drivers/tty/serial/sunzilog.h
SPARSE CHECKER
M: "Christopher Li" <sparse@chrisli.org>
L: linux-sparse@vger.kernel.org
W: https://sparse.wiki.kernel.org/
T: git git://git.kernel.org/pub/scm/devel/sparse/sparse.git
T: git git://git.kernel.org/pub/scm/devel/sparse/chrisl/sparse.git
S: Maintained
F: include/linux/compiler.h
SPEAR PLATFORM SUPPORT SPEAR PLATFORM SUPPORT
M: Viresh Kumar <viresh.kumar@st.com> M: Viresh Kumar <viresh.kumar@st.com>
L: spear-devel@list.st.com L: spear-devel@list.st.com
......
VERSION = 3 VERSION = 3
PATCHLEVEL = 4 PATCHLEVEL = 4
SUBLEVEL = 0 SUBLEVEL = 0
EXTRAVERSION = -rc1 EXTRAVERSION = -rc2
NAME = Saber-toothed Squirrel NAME = Saber-toothed Squirrel
# *DOCUMENTATION* # *DOCUMENTATION*
......
...@@ -12,16 +12,22 @@ static inline struct dma_map_ops *get_dma_ops(struct device *dev) ...@@ -12,16 +12,22 @@ static inline struct dma_map_ops *get_dma_ops(struct device *dev)
#include <asm-generic/dma-mapping-common.h> #include <asm-generic/dma-mapping-common.h>
static inline void *dma_alloc_coherent(struct device *dev, size_t size, #define dma_alloc_coherent(d,s,h,f) dma_alloc_attrs(d,s,h,f,NULL)
dma_addr_t *dma_handle, gfp_t gfp)
static inline void *dma_alloc_attrs(struct device *dev, size_t size,
dma_addr_t *dma_handle, gfp_t gfp,
struct dma_attrs *attrs)
{ {
return get_dma_ops(dev)->alloc_coherent(dev, size, dma_handle, gfp); return get_dma_ops(dev)->alloc(dev, size, dma_handle, gfp, attrs);
} }
static inline void dma_free_coherent(struct device *dev, size_t size, #define dma_free_coherent(d,s,c,h) dma_free_attrs(d,s,c,h,NULL)
void *vaddr, dma_addr_t dma_handle)
static inline void dma_free_attrs(struct device *dev, size_t size,
void *vaddr, dma_addr_t dma_handle,
struct dma_attrs *attrs)
{ {
get_dma_ops(dev)->free_coherent(dev, size, vaddr, dma_handle); get_dma_ops(dev)->free(dev, size, vaddr, dma_handle, attrs);
} }
static inline int dma_mapping_error(struct device *dev, dma_addr_t dma_addr) static inline int dma_mapping_error(struct device *dev, dma_addr_t dma_addr)
......
...@@ -108,7 +108,8 @@ sys_pciconfig_write(unsigned long bus, unsigned long dfn, ...@@ -108,7 +108,8 @@ sys_pciconfig_write(unsigned long bus, unsigned long dfn,
} }
static void *alpha_noop_alloc_coherent(struct device *dev, size_t size, static void *alpha_noop_alloc_coherent(struct device *dev, size_t size,
dma_addr_t *dma_handle, gfp_t gfp) dma_addr_t *dma_handle, gfp_t gfp,
struct dma_attrs *attrs)
{ {
void *ret; void *ret;
...@@ -123,7 +124,8 @@ static void *alpha_noop_alloc_coherent(struct device *dev, size_t size, ...@@ -123,7 +124,8 @@ static void *alpha_noop_alloc_coherent(struct device *dev, size_t size,
} }
static void alpha_noop_free_coherent(struct device *dev, size_t size, static void alpha_noop_free_coherent(struct device *dev, size_t size,
void *cpu_addr, dma_addr_t dma_addr) void *cpu_addr, dma_addr_t dma_addr,
struct dma_attrs *attrs)
{ {
free_pages((unsigned long)cpu_addr, get_order(size)); free_pages((unsigned long)cpu_addr, get_order(size));
} }
...@@ -174,8 +176,8 @@ static int alpha_noop_set_mask(struct device *dev, u64 mask) ...@@ -174,8 +176,8 @@ static int alpha_noop_set_mask(struct device *dev, u64 mask)
} }
struct dma_map_ops alpha_noop_ops = { struct dma_map_ops alpha_noop_ops = {
.alloc_coherent = alpha_noop_alloc_coherent, .alloc = alpha_noop_alloc_coherent,
.free_coherent = alpha_noop_free_coherent, .free = alpha_noop_free_coherent,
.map_page = alpha_noop_map_page, .map_page = alpha_noop_map_page,
.map_sg = alpha_noop_map_sg, .map_sg = alpha_noop_map_sg,
.mapping_error = alpha_noop_mapping_error, .mapping_error = alpha_noop_mapping_error,
......
...@@ -434,7 +434,8 @@ static void alpha_pci_unmap_page(struct device *dev, dma_addr_t dma_addr, ...@@ -434,7 +434,8 @@ static void alpha_pci_unmap_page(struct device *dev, dma_addr_t dma_addr,
else DMA_ADDRP is undefined. */ else DMA_ADDRP is undefined. */
static void *alpha_pci_alloc_coherent(struct device *dev, size_t size, static void *alpha_pci_alloc_coherent(struct device *dev, size_t size,
dma_addr_t *dma_addrp, gfp_t gfp) dma_addr_t *dma_addrp, gfp_t gfp,
struct dma_attrs *attrs)
{ {
struct pci_dev *pdev = alpha_gendev_to_pci(dev); struct pci_dev *pdev = alpha_gendev_to_pci(dev);
void *cpu_addr; void *cpu_addr;
...@@ -478,7 +479,8 @@ static void *alpha_pci_alloc_coherent(struct device *dev, size_t size, ...@@ -478,7 +479,8 @@ static void *alpha_pci_alloc_coherent(struct device *dev, size_t size,
DMA_ADDR past this call are illegal. */ DMA_ADDR past this call are illegal. */
static void alpha_pci_free_coherent(struct device *dev, size_t size, static void alpha_pci_free_coherent(struct device *dev, size_t size,
void *cpu_addr, dma_addr_t dma_addr) void *cpu_addr, dma_addr_t dma_addr,
struct dma_attrs *attrs)
{ {
struct pci_dev *pdev = alpha_gendev_to_pci(dev); struct pci_dev *pdev = alpha_gendev_to_pci(dev);
pci_unmap_single(pdev, dma_addr, size, PCI_DMA_BIDIRECTIONAL); pci_unmap_single(pdev, dma_addr, size, PCI_DMA_BIDIRECTIONAL);
...@@ -952,8 +954,8 @@ static int alpha_pci_set_mask(struct device *dev, u64 mask) ...@@ -952,8 +954,8 @@ static int alpha_pci_set_mask(struct device *dev, u64 mask)
} }
struct dma_map_ops alpha_pci_ops = { struct dma_map_ops alpha_pci_ops = {
.alloc_coherent = alpha_pci_alloc_coherent, .alloc = alpha_pci_alloc_coherent,
.free_coherent = alpha_pci_free_coherent, .free = alpha_pci_free_coherent,
.map_page = alpha_pci_map_page, .map_page = alpha_pci_map_page,
.unmap_page = alpha_pci_unmap_page, .unmap_page = alpha_pci_unmap_page,
.map_sg = alpha_pci_map_sg, .map_sg = alpha_pci_map_sg,
......
...@@ -120,12 +120,13 @@ SYSCALL_DEFINE5(rt_sigaction, int, sig, const struct sigaction __user *, act, ...@@ -120,12 +120,13 @@ SYSCALL_DEFINE5(rt_sigaction, int, sig, const struct sigaction __user *, act,
*/ */
SYSCALL_DEFINE1(sigsuspend, old_sigset_t, mask) SYSCALL_DEFINE1(sigsuspend, old_sigset_t, mask)
{ {
mask &= _BLOCKABLE; sigset_t blocked;
spin_lock_irq(&current->sighand->siglock);
current->saved_sigmask = current->blocked; current->saved_sigmask = current->blocked;
siginitset(&current->blocked, mask);
recalc_sigpending(); mask &= _BLOCKABLE;
spin_unlock_irq(&current->sighand->siglock); siginitset(&blocked, mask);
set_current_blocked(&blocked);
current->state = TASK_INTERRUPTIBLE; current->state = TASK_INTERRUPTIBLE;
schedule(); schedule();
...@@ -238,10 +239,7 @@ do_sigreturn(struct sigcontext __user *sc, struct pt_regs *regs, ...@@ -238,10 +239,7 @@ do_sigreturn(struct sigcontext __user *sc, struct pt_regs *regs,
goto give_sigsegv; goto give_sigsegv;
sigdelsetmask(&set, ~_BLOCKABLE); sigdelsetmask(&set, ~_BLOCKABLE);
spin_lock_irq(&current->sighand->siglock); set_current_blocked(&set);
current->blocked = set;
recalc_sigpending();
spin_unlock_irq(&current->sighand->siglock);
if (restore_sigcontext(sc, regs, sw)) if (restore_sigcontext(sc, regs, sw))
goto give_sigsegv; goto give_sigsegv;
...@@ -276,10 +274,7 @@ do_rt_sigreturn(struct rt_sigframe __user *frame, struct pt_regs *regs, ...@@ -276,10 +274,7 @@ do_rt_sigreturn(struct rt_sigframe __user *frame, struct pt_regs *regs,
goto give_sigsegv; goto give_sigsegv;
sigdelsetmask(&set, ~_BLOCKABLE); sigdelsetmask(&set, ~_BLOCKABLE);
spin_lock_irq(&current->sighand->siglock); set_current_blocked(&set);
current->blocked = set;
recalc_sigpending();
spin_unlock_irq(&current->sighand->siglock);
if (restore_sigcontext(&frame->uc.uc_mcontext, regs, sw)) if (restore_sigcontext(&frame->uc.uc_mcontext, regs, sw))
goto give_sigsegv; goto give_sigsegv;
...@@ -501,14 +496,8 @@ handle_signal(int sig, struct k_sigaction *ka, siginfo_t *info, ...@@ -501,14 +496,8 @@ handle_signal(int sig, struct k_sigaction *ka, siginfo_t *info,
else else
ret = setup_frame(sig, ka, oldset, regs, sw); ret = setup_frame(sig, ka, oldset, regs, sw);
if (ret == 0) { if (ret == 0)
spin_lock_irq(&current->sighand->siglock); block_sigmask(ka, sig);
sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask);
if (!(ka->sa.sa_flags & SA_NODEFER))
sigaddset(&current->blocked,sig);
recalc_sigpending();
spin_unlock_irq(&current->sighand->siglock);
}
return ret; return ret;
} }
......
...@@ -450,7 +450,7 @@ setup_smp(void) ...@@ -450,7 +450,7 @@ setup_smp(void)
smp_num_probed = 1; smp_num_probed = 1;
} }
printk(KERN_INFO "SMP: %d CPUs probed -- cpu_present_map = %lx\n", printk(KERN_INFO "SMP: %d CPUs probed -- cpu_present_mask = %lx\n",
smp_num_probed, cpumask_bits(cpu_present_mask)[0]); smp_num_probed, cpumask_bits(cpu_present_mask)[0]);
} }
......
...@@ -338,6 +338,7 @@ config ARCH_AT91 ...@@ -338,6 +338,7 @@ config ARCH_AT91
select HAVE_CLK select HAVE_CLK
select CLKDEV_LOOKUP select CLKDEV_LOOKUP
select IRQ_DOMAIN select IRQ_DOMAIN
select NEED_MACH_IO_H if PCCARD
help help
This enables support for systems based on the Atmel AT91RM9200, This enables support for systems based on the Atmel AT91RM9200,
AT91SAM9 processors. AT91SAM9 processors.
......
...@@ -35,7 +35,7 @@ ...@@ -35,7 +35,7 @@
}; };
}; };
memory@20000000 { memory {
reg = <0x20000000 0x08000000>; reg = <0x20000000 0x08000000>;
}; };
......
...@@ -37,8 +37,8 @@ ...@@ -37,8 +37,8 @@
usb0: ohci@00600000 { usb0: ohci@00600000 {
status = "okay"; status = "okay";
num-ports = <2>; num-ports = <2>;
atmel,vbus-gpio = <&pioD 19 0 atmel,vbus-gpio = <&pioD 19 1
&pioD 20 0 &pioD 20 1
>; >;
}; };
......
...@@ -36,7 +36,7 @@ ...@@ -36,7 +36,7 @@
}; };
}; };
memory@70000000 { memory {
reg = <0x70000000 0x10000000>; reg = <0x70000000 0x10000000>;
}; };
......
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
bootargs = "mem=64M console=ttyS0,115200 root=/dev/mtdblock1 rw rootfstype=jffs2"; bootargs = "mem=64M console=ttyS0,115200 root=/dev/mtdblock1 rw rootfstype=jffs2";
}; };
memory@70000000 { memory {
reg = <0x70000000 0x4000000>; reg = <0x70000000 0x4000000>;
}; };
...@@ -73,8 +73,8 @@ ...@@ -73,8 +73,8 @@
usb0: ohci@00700000 { usb0: ohci@00700000 {
status = "okay"; status = "okay";
num-ports = <2>; num-ports = <2>;
atmel,vbus-gpio = <&pioD 1 0 atmel,vbus-gpio = <&pioD 1 1
&pioD 3 0>; &pioD 3 1>;
}; };
usb1: ehci@00800000 { usb1: ehci@00800000 {
......
...@@ -34,7 +34,7 @@ ...@@ -34,7 +34,7 @@
}; };
}; };
memory@20000000 { memory {
reg = <0x20000000 0x10000000>; reg = <0x20000000 0x10000000>;
}; };
...@@ -201,8 +201,8 @@ ...@@ -201,8 +201,8 @@
>; >;
atmel,nand-addr-offset = <21>; atmel,nand-addr-offset = <21>;
atmel,nand-cmd-offset = <22>; atmel,nand-cmd-offset = <22>;
gpios = <&pioC 8 0 gpios = <&pioD 5 0
&pioC 14 0 &pioD 4 0
0 0
>; >;
status = "disabled"; status = "disabled";
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
*/ */
/ { / {
memory@20000000 { memory {
reg = <0x20000000 0x8000000>; reg = <0x20000000 0x8000000>;
}; };
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
bootargs = "mem=64M console=ttyS0,115200 root=/dev/mtdblock5 rw rootfstype=ubifs"; bootargs = "mem=64M console=ttyS0,115200 root=/dev/mtdblock5 rw rootfstype=ubifs";
}; };
memory@20000000 { memory {
reg = <0x20000000 0x4000000>; reg = <0x20000000 0x4000000>;
}; };
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
#define __ASM_BARRIER_H #define __ASM_BARRIER_H
#ifndef __ASSEMBLY__ #ifndef __ASSEMBLY__
#include <asm/outercache.h>
#define nop() __asm__ __volatile__("mov\tr0,r0\t@ nop\n\t"); #define nop() __asm__ __volatile__("mov\tr0,r0\t@ nop\n\t");
...@@ -39,7 +40,6 @@ ...@@ -39,7 +40,6 @@
#ifdef CONFIG_ARCH_HAS_BARRIERS #ifdef CONFIG_ARCH_HAS_BARRIERS
#include <mach/barriers.h> #include <mach/barriers.h>
#elif defined(CONFIG_ARM_DMA_MEM_BUFFERABLE) || defined(CONFIG_SMP) #elif defined(CONFIG_ARM_DMA_MEM_BUFFERABLE) || defined(CONFIG_SMP)
#include <asm/outercache.h>
#define mb() do { dsb(); outer_sync(); } while (0) #define mb() do { dsb(); outer_sync(); } while (0)
#define rmb() dsb() #define rmb() dsb()
#define wmb() mb() #define wmb() mb()
......
...@@ -119,7 +119,7 @@ static inline void __iomem *__typesafe_io(unsigned long addr) ...@@ -119,7 +119,7 @@ static inline void __iomem *__typesafe_io(unsigned long addr)
#ifdef CONFIG_NEED_MACH_IO_H #ifdef CONFIG_NEED_MACH_IO_H
#include <mach/io.h> #include <mach/io.h>
#else #else
#define __io(a) ({ (void)(a); __typesafe_io(0); }) #define __io(a) __typesafe_io((a) & IO_SPACE_LIMIT)
#endif #endif
/* /*
......
...@@ -299,7 +299,6 @@ static inline int pdev_bad_for_parity(struct pci_dev *dev) ...@@ -299,7 +299,6 @@ static inline int pdev_bad_for_parity(struct pci_dev *dev)
*/ */
void pcibios_fixup_bus(struct pci_bus *bus) void pcibios_fixup_bus(struct pci_bus *bus)
{ {
struct pci_sys_data *root = bus->sysdata;
struct pci_dev *dev; struct pci_dev *dev;
u16 features = PCI_COMMAND_SERR | PCI_COMMAND_PARITY | PCI_COMMAND_FAST_BACK; u16 features = PCI_COMMAND_SERR | PCI_COMMAND_PARITY | PCI_COMMAND_FAST_BACK;
......
#include <linux/bug.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <asm/opcodes.h> #include <asm/opcodes.h>
......
...@@ -152,7 +152,7 @@ int __kprobes __arch_disarm_kprobe(void *p) ...@@ -152,7 +152,7 @@ int __kprobes __arch_disarm_kprobe(void *p)
void __kprobes arch_disarm_kprobe(struct kprobe *p) void __kprobes arch_disarm_kprobe(struct kprobe *p)
{ {
stop_machine(__arch_disarm_kprobe, p, &cpu_online_map); stop_machine(__arch_disarm_kprobe, p, cpu_online_mask);
} }
void __kprobes arch_remove_kprobe(struct kprobe *p) void __kprobes arch_remove_kprobe(struct kprobe *p)
......
...@@ -256,7 +256,7 @@ static int ptrace_read_user(struct task_struct *tsk, unsigned long off, ...@@ -256,7 +256,7 @@ static int ptrace_read_user(struct task_struct *tsk, unsigned long off,
{ {
unsigned long tmp; unsigned long tmp;
if (off & 3 || off >= sizeof(struct user)) if (off & 3)
return -EIO; return -EIO;
tmp = 0; tmp = 0;
...@@ -268,6 +268,8 @@ static int ptrace_read_user(struct task_struct *tsk, unsigned long off, ...@@ -268,6 +268,8 @@ static int ptrace_read_user(struct task_struct *tsk, unsigned long off,
tmp = tsk->mm->end_code; tmp = tsk->mm->end_code;
else if (off < sizeof(struct pt_regs)) else if (off < sizeof(struct pt_regs))
tmp = get_user_reg(tsk, off >> 2); tmp = get_user_reg(tsk, off >> 2);
else if (off >= sizeof(struct user))
return -EIO;
return put_user(tmp, ret); return put_user(tmp, ret);
} }
......
...@@ -349,7 +349,7 @@ void __init smp_prepare_cpus(unsigned int max_cpus) ...@@ -349,7 +349,7 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
* re-initialize the map in platform_smp_prepare_cpus() if * re-initialize the map in platform_smp_prepare_cpus() if
* present != possible (e.g. physical hotplug). * present != possible (e.g. physical hotplug).
*/ */
init_cpu_present(&cpu_possible_map); init_cpu_present(cpu_possible_mask);
/* /*
* Initialise the SCU if there are more than one CPU * Initialise the SCU if there are more than one CPU
...@@ -581,8 +581,9 @@ void smp_send_stop(void) ...@@ -581,8 +581,9 @@ void smp_send_stop(void)
unsigned long timeout; unsigned long timeout;
if (num_online_cpus() > 1) { if (num_online_cpus() > 1) {
cpumask_t mask = cpu_online_map; struct cpumask mask;
cpu_clear(smp_processor_id(), mask); cpumask_copy(&mask, cpu_online_mask);
cpumask_clear_cpu(smp_processor_id(), &mask);
smp_cross_call(&mask, IPI_CPU_STOP); smp_cross_call(&mask, IPI_CPU_STOP);
} }
......
...@@ -598,6 +598,9 @@ void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices) ...@@ -598,6 +598,9 @@ void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices)
else else
cs_pin = spi1_standard_cs[devices[i].chip_select]; cs_pin = spi1_standard_cs[devices[i].chip_select];
if (!gpio_is_valid(cs_pin))
continue;
if (devices[i].bus_num == 0) if (devices[i].bus_num == 0)
enable_spi0 = 1; enable_spi0 = 1;
else else
......
...@@ -415,6 +415,9 @@ void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices) ...@@ -415,6 +415,9 @@ void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices)
else else
cs_pin = spi1_standard_cs[devices[i].chip_select]; cs_pin = spi1_standard_cs[devices[i].chip_select];
if (!gpio_is_valid(cs_pin))
continue;
if (devices[i].bus_num == 0) if (devices[i].bus_num == 0)
enable_spi0 = 1; enable_spi0 = 1;
else else
......
...@@ -72,7 +72,8 @@ void __init at91_add_device_usbh(struct at91_usbh_data *data) ...@@ -72,7 +72,8 @@ void __init at91_add_device_usbh(struct at91_usbh_data *data)
/* Enable VBus control for UHP ports */ /* Enable VBus control for UHP ports */
for (i = 0; i < data->ports; i++) { for (i = 0; i < data->ports; i++) {
if (gpio_is_valid(data->vbus_pin[i])) if (gpio_is_valid(data->vbus_pin[i]))
at91_set_gpio_output(data->vbus_pin[i], 0); at91_set_gpio_output(data->vbus_pin[i],
data->vbus_pin_active_low[i]);
} }
/* Enable overcurrent notification */ /* Enable overcurrent notification */
...@@ -671,6 +672,9 @@ void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices) ...@@ -671,6 +672,9 @@ void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices)
else else
cs_pin = spi1_standard_cs[devices[i].chip_select]; cs_pin = spi1_standard_cs[devices[i].chip_select];
if (!gpio_is_valid(cs_pin))
continue;
if (devices[i].bus_num == 0) if (devices[i].bus_num == 0)
enable_spi0 = 1; enable_spi0 = 1;
else else
......
...@@ -127,12 +127,13 @@ void __init at91_add_device_usbh_ohci(struct at91_usbh_data *data) ...@@ -127,12 +127,13 @@ void __init at91_add_device_usbh_ohci(struct at91_usbh_data *data)
/* Enable VBus control for UHP ports */ /* Enable VBus control for UHP ports */
for (i = 0; i < data->ports; i++) { for (i = 0; i < data->ports; i++) {
if (gpio_is_valid(data->vbus_pin[i])) if (gpio_is_valid(data->vbus_pin[i]))
at91_set_gpio_output(data->vbus_pin[i], 0); at91_set_gpio_output(data->vbus_pin[i],
data->vbus_pin_active_low[i]);
} }
/* Enable overcurrent notification */ /* Enable overcurrent notification */
for (i = 0; i < data->ports; i++) { for (i = 0; i < data->ports; i++) {
if (data->overcurrent_pin[i]) if (gpio_is_valid(data->overcurrent_pin[i]))
at91_set_gpio_input(data->overcurrent_pin[i], 1); at91_set_gpio_input(data->overcurrent_pin[i], 1);
} }
...@@ -188,7 +189,8 @@ void __init at91_add_device_usbh_ehci(struct at91_usbh_data *data) ...@@ -188,7 +189,8 @@ void __init at91_add_device_usbh_ehci(struct at91_usbh_data *data)
/* Enable VBus control for UHP ports */ /* Enable VBus control for UHP ports */
for (i = 0; i < data->ports; i++) { for (i = 0; i < data->ports; i++) {
if (gpio_is_valid(data->vbus_pin[i])) if (gpio_is_valid(data->vbus_pin[i]))
at91_set_gpio_output(data->vbus_pin[i], 0); at91_set_gpio_output(data->vbus_pin[i],
data->vbus_pin_active_low[i]);
} }
usbh_ehci_data = *data; usbh_ehci_data = *data;
...@@ -785,6 +787,9 @@ void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices) ...@@ -785,6 +787,9 @@ void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices)
else else
cs_pin = spi1_standard_cs[devices[i].chip_select]; cs_pin = spi1_standard_cs[devices[i].chip_select];
if (!gpio_is_valid(cs_pin))
continue;
if (devices[i].bus_num == 0) if (devices[i].bus_num == 0)
enable_spi0 = 1; enable_spi0 = 1;
else else
......
...@@ -419,6 +419,9 @@ void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices) ...@@ -419,6 +419,9 @@ void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices)
else else
cs_pin = spi_standard_cs[devices[i].chip_select]; cs_pin = spi_standard_cs[devices[i].chip_select];
if (!gpio_is_valid(cs_pin))
continue;
/* enable chip-select pin */ /* enable chip-select pin */
at91_set_gpio_output(cs_pin, 1); at91_set_gpio_output(cs_pin, 1);
......
...@@ -223,6 +223,8 @@ static struct clk_lookup periph_clocks_lookups[] = { ...@@ -223,6 +223,8 @@ static struct clk_lookup periph_clocks_lookups[] = {
CLKDEV_CON_DEV_ID("usart", "f8028000.serial", &usart3_clk), CLKDEV_CON_DEV_ID("usart", "f8028000.serial", &usart3_clk),
CLKDEV_CON_DEV_ID("t0_clk", "f8008000.timer", &tcb0_clk), CLKDEV_CON_DEV_ID("t0_clk", "f8008000.timer", &tcb0_clk),
CLKDEV_CON_DEV_ID("t0_clk", "f800c000.timer", &tcb0_clk), CLKDEV_CON_DEV_ID("t0_clk", "f800c000.timer", &tcb0_clk),
CLKDEV_CON_DEV_ID("dma_clk", "ffffec00.dma-controller", &dma0_clk),
CLKDEV_CON_DEV_ID("dma_clk", "ffffee00.dma-controller", &dma1_clk),
CLKDEV_CON_ID("pioA", &pioAB_clk), CLKDEV_CON_ID("pioA", &pioAB_clk),
CLKDEV_CON_ID("pioB", &pioAB_clk), CLKDEV_CON_ID("pioB", &pioAB_clk),
CLKDEV_CON_ID("pioC", &pioCD_clk), CLKDEV_CON_ID("pioC", &pioCD_clk),
......
...@@ -74,6 +74,7 @@ static void __init ek_init_early(void) ...@@ -74,6 +74,7 @@ static void __init ek_init_early(void)
static struct at91_usbh_data __initdata ek_usbh_data = { static struct at91_usbh_data __initdata ek_usbh_data = {
.ports = 2, .ports = 2,
.vbus_pin = { AT91_PIN_PA24, AT91_PIN_PA21 }, .vbus_pin = { AT91_PIN_PA24, AT91_PIN_PA21 },
.vbus_pin_active_low = {1, 1},
.overcurrent_pin= {-EINVAL, -EINVAL}, .overcurrent_pin= {-EINVAL, -EINVAL},
}; };
......
...@@ -71,6 +71,7 @@ static void __init ek_init_early(void) ...@@ -71,6 +71,7 @@ static void __init ek_init_early(void)
static struct at91_usbh_data __initdata ek_usbh_hs_data = { static struct at91_usbh_data __initdata ek_usbh_hs_data = {
.ports = 2, .ports = 2,
.vbus_pin = {AT91_PIN_PD1, AT91_PIN_PD3}, .vbus_pin = {AT91_PIN_PD1, AT91_PIN_PD3},
.vbus_pin_active_low = {1, 1},
.overcurrent_pin= {-EINVAL, -EINVAL}, .overcurrent_pin= {-EINVAL, -EINVAL},
}; };
......
...@@ -86,14 +86,15 @@ extern void __init at91_add_device_mci(short mmc_id, struct mci_platform_data *d ...@@ -86,14 +86,15 @@ extern void __init at91_add_device_mci(short mmc_id, struct mci_platform_data *d
extern void __init at91_add_device_eth(struct macb_platform_data *data); extern void __init at91_add_device_eth(struct macb_platform_data *data);
/* USB Host */ /* USB Host */
#define AT91_MAX_USBH_PORTS 3
struct at91_usbh_data { struct at91_usbh_data {
u8 ports; /* number of ports on root hub */ int vbus_pin[AT91_MAX_USBH_PORTS]; /* port power-control pin */
int vbus_pin[2]; /* port power-control pin */ int overcurrent_pin[AT91_MAX_USBH_PORTS];
u8 vbus_pin_active_low[2]; u8 ports; /* number of ports on root hub */
u8 overcurrent_supported; u8 overcurrent_supported;
int overcurrent_pin[2]; u8 vbus_pin_active_low[AT91_MAX_USBH_PORTS];
u8 overcurrent_status[2]; u8 overcurrent_status[AT91_MAX_USBH_PORTS];
u8 overcurrent_changed[2]; u8 overcurrent_changed[AT91_MAX_USBH_PORTS];
}; };
extern void __init at91_add_device_usbh(struct at91_usbh_data *data); extern void __init at91_add_device_usbh(struct at91_usbh_data *data);
extern void __init at91_add_device_usbh_ohci(struct at91_usbh_data *data); extern void __init at91_add_device_usbh_ohci(struct at91_usbh_data *data);
......
/*
* arch/arm/mach-at91/include/mach/io.h
*
* Copyright (C) 2003 SAN People
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef __ASM_ARCH_IO_H
#define __ASM_ARCH_IO_H
#define IO_SPACE_LIMIT 0xFFFFFFFF
#define __io(a) __typesafe_io(a)
#endif
...@@ -583,10 +583,11 @@ core_initcall(exynos_core_init); ...@@ -583,10 +583,11 @@ core_initcall(exynos_core_init);
#ifdef CONFIG_CACHE_L2X0 #ifdef CONFIG_CACHE_L2X0
static int __init exynos4_l2x0_cache_init(void) static int __init exynos4_l2x0_cache_init(void)
{ {
int ret;
if (soc_is_exynos5250()) if (soc_is_exynos5250())
return 0; return 0;
int ret;
ret = l2x0_of_init(L2_AUX_VAL, L2_AUX_MASK); ret = l2x0_of_init(L2_AUX_VAL, L2_AUX_MASK);
if (!ret) { if (!ret) {
l2x0_regs_phys = virt_to_phys(&l2x0_saved_regs); l2x0_regs_phys = virt_to_phys(&l2x0_saved_regs);
......
...@@ -35,8 +35,6 @@ ...@@ -35,8 +35,6 @@
#include <mach/irqs.h> #include <mach/irqs.h>
#include <mach/dma.h> #include <mach/dma.h>
static u64 dma_dmamask = DMA_BIT_MASK(32);
static u8 exynos4210_pdma0_peri[] = { static u8 exynos4210_pdma0_peri[] = {
DMACH_PCM0_RX, DMACH_PCM0_RX,
DMACH_PCM0_TX, DMACH_PCM0_TX,
......
...@@ -21,10 +21,9 @@ ...@@ -21,10 +21,9 @@
*/ */
.macro addruart, rp, rv, tmp .macro addruart, rp, rv, tmp
mov \rp, #0x10000000 mrc p15, 0, \tmp, c0, c0, 0
ldr \rp, [\rp, #0x0] and \tmp, \tmp, #0xf0
and \rp, \rp, #0xf00000 teq \tmp, #0xf0 @@ A15
teq \rp, #0x500000 @@ EXYNOS5
ldreq \rp, =EXYNOS5_PA_UART ldreq \rp, =EXYNOS5_PA_UART
movne \rp, #EXYNOS4_PA_UART @@ EXYNOS4 movne \rp, #EXYNOS4_PA_UART @@ EXYNOS4
ldr \rv, =S3C_VA_UART ldr \rv, =S3C_VA_UART
......
...@@ -20,9 +20,24 @@ volatile u8 *uart_base; ...@@ -20,9 +20,24 @@ volatile u8 *uart_base;
#include <plat/uncompress.h> #include <plat/uncompress.h>
static unsigned int __raw_readl(unsigned int ptr)
{
return *((volatile unsigned int *)ptr);
}
static void arch_detect_cpu(void) static void arch_detect_cpu(void)
{ {
if (machine_is_smdk5250()) u32 chip_id = __raw_readl(EXYNOS_PA_CHIPID);
/*
* product_id is bits 31:12
* bits 23:20 describe the exynosX family
*
*/
chip_id >>= 20;
chip_id &= 0xf;
if (chip_id == 0x5)
uart_base = (volatile u8 *)EXYNOS5_PA_UART + (S3C_UART_OFFSET * CONFIG_S3C_LOWLEVEL_UART_PORT); uart_base = (volatile u8 *)EXYNOS5_PA_UART + (S3C_UART_OFFSET * CONFIG_S3C_LOWLEVEL_UART_PORT);
else else
uart_base = (volatile u8 *)EXYNOS4_PA_UART + (S3C_UART_OFFSET * CONFIG_S3C_LOWLEVEL_UART_PORT); uart_base = (volatile u8 *)EXYNOS4_PA_UART + (S3C_UART_OFFSET * CONFIG_S3C_LOWLEVEL_UART_PORT);
......
...@@ -662,6 +662,7 @@ static struct clk_lookup lookups[] = { ...@@ -662,6 +662,7 @@ static struct clk_lookup lookups[] = {
_REGISTER_CLOCK(NULL, "dma", dma_clk) _REGISTER_CLOCK(NULL, "dma", dma_clk)
_REGISTER_CLOCK(NULL, "rtic", rtic_clk) _REGISTER_CLOCK(NULL, "rtic", rtic_clk)
_REGISTER_CLOCK(NULL, "brom", brom_clk) _REGISTER_CLOCK(NULL, "brom", brom_clk)
_REGISTER_CLOCK(NULL, "emma", emma_clk)
_REGISTER_CLOCK("m2m-emmaprp.0", NULL, emma_clk) _REGISTER_CLOCK("m2m-emmaprp.0", NULL, emma_clk)
_REGISTER_CLOCK(NULL, "slcdc", slcdc_clk) _REGISTER_CLOCK(NULL, "slcdc", slcdc_clk)
_REGISTER_CLOCK("imx27-fec.0", NULL, fec_clk) _REGISTER_CLOCK("imx27-fec.0", NULL, fec_clk)
......
...@@ -483,7 +483,7 @@ static struct clk_lookup lookups[] = { ...@@ -483,7 +483,7 @@ static struct clk_lookup lookups[] = {
_REGISTER_CLOCK("imx2-wdt.0", NULL, wdog_clk) _REGISTER_CLOCK("imx2-wdt.0", NULL, wdog_clk)
_REGISTER_CLOCK(NULL, "max", max_clk) _REGISTER_CLOCK(NULL, "max", max_clk)
_REGISTER_CLOCK(NULL, "audmux", audmux_clk) _REGISTER_CLOCK(NULL, "audmux", audmux_clk)
_REGISTER_CLOCK(NULL, "csi", csi_clk) _REGISTER_CLOCK("mx3-camera.0", NULL, csi_clk)
_REGISTER_CLOCK(NULL, "iim", iim_clk) _REGISTER_CLOCK(NULL, "iim", iim_clk)
_REGISTER_CLOCK(NULL, "gpu2d", gpu2d_clk) _REGISTER_CLOCK(NULL, "gpu2d", gpu2d_clk)
_REGISTER_CLOCK("mxc_nand.0", NULL, nfc_clk) _REGISTER_CLOCK("mxc_nand.0", NULL, nfc_clk)
......
...@@ -38,6 +38,8 @@ ...@@ -38,6 +38,8 @@
#include <linux/usb/otg.h> #include <linux/usb/otg.h>
#include <linux/usb/ulpi.h> #include <linux/usb/ulpi.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/regulator/machine.h>
#include <linux/regulator/fixed.h>
#include <mach/hardware.h> #include <mach/hardware.h>
#include <asm/mach-types.h> #include <asm/mach-types.h>
...@@ -479,6 +481,11 @@ static struct platform_device *devices[] __initdata = { ...@@ -479,6 +481,11 @@ static struct platform_device *devices[] __initdata = {
&armadillo5x0_smc911x_device, &armadillo5x0_smc911x_device,
}; };
static struct regulator_consumer_supply dummy_supplies[] = {
REGULATOR_SUPPLY("vdd33a", "smsc911x"),
REGULATOR_SUPPLY("vddvario", "smsc911x"),
};
/* /*
* Perform board specific initializations * Perform board specific initializations
*/ */
...@@ -489,6 +496,8 @@ static void __init armadillo5x0_init(void) ...@@ -489,6 +496,8 @@ static void __init armadillo5x0_init(void)
mxc_iomux_setup_multiple_pins(armadillo5x0_pins, mxc_iomux_setup_multiple_pins(armadillo5x0_pins,
ARRAY_SIZE(armadillo5x0_pins), "armadillo5x0"); ARRAY_SIZE(armadillo5x0_pins), "armadillo5x0");
regulator_register_fixed(0, dummy_supplies, ARRAY_SIZE(dummy_supplies));
platform_add_devices(devices, ARRAY_SIZE(devices)); platform_add_devices(devices, ARRAY_SIZE(devices));
imx_add_gpio_keys(&armadillo5x0_button_data); imx_add_gpio_keys(&armadillo5x0_button_data);
imx31_add_imx_i2c1(NULL); imx31_add_imx_i2c1(NULL);
......
...@@ -24,6 +24,8 @@ ...@@ -24,6 +24,8 @@
#include <linux/serial_8250.h> #include <linux/serial_8250.h>
#include <linux/smsc911x.h> #include <linux/smsc911x.h>
#include <linux/types.h> #include <linux/types.h>
#include <linux/regulator/machine.h>
#include <linux/regulator/fixed.h>
#include <asm/irq.h> #include <asm/irq.h>
#include <asm/mach-types.h> #include <asm/mach-types.h>
...@@ -166,6 +168,11 @@ static struct platform_device kzm_smsc9118_device = { ...@@ -166,6 +168,11 @@ static struct platform_device kzm_smsc9118_device = {
}, },
}; };
static struct regulator_consumer_supply dummy_supplies[] = {
REGULATOR_SUPPLY("vdd33a", "smsc911x"),
REGULATOR_SUPPLY("vddvario", "smsc911x"),
};
static int __init kzm_init_smsc9118(void) static int __init kzm_init_smsc9118(void)
{ {
/* /*
...@@ -175,6 +182,8 @@ static int __init kzm_init_smsc9118(void) ...@@ -175,6 +182,8 @@ static int __init kzm_init_smsc9118(void)
gpio_request(IOMUX_TO_GPIO(MX31_PIN_GPIO1_2), "smsc9118-int"); gpio_request(IOMUX_TO_GPIO(MX31_PIN_GPIO1_2), "smsc9118-int");
gpio_direction_input(IOMUX_TO_GPIO(MX31_PIN_GPIO1_2)); gpio_direction_input(IOMUX_TO_GPIO(MX31_PIN_GPIO1_2));
regulator_register_fixed(0, dummy_supplies, ARRAY_SIZE(dummy_supplies));
return platform_device_register(&kzm_smsc9118_device); return platform_device_register(&kzm_smsc9118_device);
} }
#else #else
......
...@@ -34,6 +34,8 @@ ...@@ -34,6 +34,8 @@
#include <linux/mfd/mc13783.h> #include <linux/mfd/mc13783.h>
#include <linux/usb/otg.h> #include <linux/usb/otg.h>
#include <linux/usb/ulpi.h> #include <linux/usb/ulpi.h>
#include <linux/regulator/machine.h>
#include <linux/regulator/fixed.h>
#include <asm/mach-types.h> #include <asm/mach-types.h>
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
...@@ -242,6 +244,11 @@ static struct platform_device *devices[] __initdata = { ...@@ -242,6 +244,11 @@ static struct platform_device *devices[] __initdata = {
static int mx31lilly_baseboard; static int mx31lilly_baseboard;
core_param(mx31lilly_baseboard, mx31lilly_baseboard, int, 0444); core_param(mx31lilly_baseboard, mx31lilly_baseboard, int, 0444);
static struct regulator_consumer_supply dummy_supplies[] = {
REGULATOR_SUPPLY("vdd33a", "smsc911x"),
REGULATOR_SUPPLY("vddvario", "smsc911x"),
};
static void __init mx31lilly_board_init(void) static void __init mx31lilly_board_init(void)
{ {
imx31_soc_init(); imx31_soc_init();
...@@ -280,6 +287,8 @@ static void __init mx31lilly_board_init(void) ...@@ -280,6 +287,8 @@ static void __init mx31lilly_board_init(void)
imx31_add_spi_imx1(&spi1_pdata); imx31_add_spi_imx1(&spi1_pdata);
spi_register_board_info(&mc13783_dev, 1); spi_register_board_info(&mc13783_dev, 1);
regulator_register_fixed(0, dummy_supplies, ARRAY_SIZE(dummy_supplies));
platform_add_devices(devices, ARRAY_SIZE(devices)); platform_add_devices(devices, ARRAY_SIZE(devices));
/* USB */ /* USB */
......
...@@ -29,6 +29,8 @@ ...@@ -29,6 +29,8 @@
#include <linux/usb/ulpi.h> #include <linux/usb/ulpi.h>
#include <linux/mtd/physmap.h> #include <linux/mtd/physmap.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/regulator/machine.h>
#include <linux/regulator/fixed.h>
#include <asm/mach-types.h> #include <asm/mach-types.h>
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
...@@ -226,6 +228,11 @@ void __init mx31lite_map_io(void) ...@@ -226,6 +228,11 @@ void __init mx31lite_map_io(void)
static int mx31lite_baseboard; static int mx31lite_baseboard;
core_param(mx31lite_baseboard, mx31lite_baseboard, int, 0444); core_param(mx31lite_baseboard, mx31lite_baseboard, int, 0444);
static struct regulator_consumer_supply dummy_supplies[] = {
REGULATOR_SUPPLY("vdd33a", "smsc911x"),
REGULATOR_SUPPLY("vddvario", "smsc911x"),
};
static void __init mx31lite_init(void) static void __init mx31lite_init(void)
{ {
int ret; int ret;
...@@ -259,6 +266,8 @@ static void __init mx31lite_init(void) ...@@ -259,6 +266,8 @@ static void __init mx31lite_init(void)
if (usbh2_pdata.otg) if (usbh2_pdata.otg)
imx31_add_mxc_ehci_hs(2, &usbh2_pdata); imx31_add_mxc_ehci_hs(2, &usbh2_pdata);
regulator_register_fixed(0, dummy_supplies, ARRAY_SIZE(dummy_supplies));
/* SMSC9117 IRQ pin */ /* SMSC9117 IRQ pin */
ret = gpio_request(IOMUX_TO_GPIO(MX31_PIN_SFS6), "sms9117-irq"); ret = gpio_request(IOMUX_TO_GPIO(MX31_PIN_SFS6), "sms9117-irq");
if (ret) if (ret)
......
...@@ -97,7 +97,7 @@ static struct i2c_board_info __initdata i2c_devices_3ds[] = { ...@@ -97,7 +97,7 @@ static struct i2c_board_info __initdata i2c_devices_3ds[] = {
static int lcd_power_gpio = -ENXIO; static int lcd_power_gpio = -ENXIO;
static int mc9s08dz60_gpiochip_match(struct gpio_chip *chip, static int mc9s08dz60_gpiochip_match(struct gpio_chip *chip,
void *data) const void *data)
{ {
return !strcmp(chip->label, data); return !strcmp(chip->label, data);
} }
......
...@@ -23,6 +23,8 @@ ...@@ -23,6 +23,8 @@
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/gpio.h> #include <linux/gpio.h>
#include <linux/smsc911x.h> #include <linux/smsc911x.h>
#include <linux/regulator/machine.h>
#include <linux/regulator/fixed.h>
#include <mach/common.h> #include <mach/common.h>
#include <mach/hardware.h> #include <mach/hardware.h>
...@@ -214,6 +216,11 @@ static int weim_cs_config(void) ...@@ -214,6 +216,11 @@ static int weim_cs_config(void)
return 0; return 0;
} }
static struct regulator_consumer_supply dummy_supplies[] = {
REGULATOR_SUPPLY("vdd33a", "smsc911x"),
REGULATOR_SUPPLY("vddvario", "smsc911x"),
};
void __init imx53_ard_common_init(void) void __init imx53_ard_common_init(void)
{ {
mxc_iomux_v3_setup_multiple_pads(mx53_ard_pads, mxc_iomux_v3_setup_multiple_pads(mx53_ard_pads,
...@@ -232,6 +239,7 @@ static void __init mx53_ard_board_init(void) ...@@ -232,6 +239,7 @@ static void __init mx53_ard_board_init(void)
imx53_ard_common_init(); imx53_ard_common_init();
mx53_ard_io_init(); mx53_ard_io_init();
regulator_register_fixed(0, dummy_supplies, ARRAY_SIZE(dummy_supplies));
platform_add_devices(devices, ARRAY_SIZE(devices)); platform_add_devices(devices, ARRAY_SIZE(devices));
imx53_add_sdhci_esdhc_imx(0, &mx53_ard_sd1_data); imx53_add_sdhci_esdhc_imx(0, &mx53_ard_sd1_data);
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
#ifndef __ASM_ARCH_MSM_UNCOMPRESS_H #ifndef __ASM_ARCH_MSM_UNCOMPRESS_H
#define __ASM_ARCH_MSM_UNCOMPRESS_H #define __ASM_ARCH_MSM_UNCOMPRESS_H
#include <asm/barrier.h>
#include <asm/processor.h> #include <asm/processor.h>
#include <mach/msm_iomap.h> #include <mach/msm_iomap.h>
......
...@@ -203,15 +203,9 @@ static ssize_t debug_read(struct file *file, char __user *buf, ...@@ -203,15 +203,9 @@ static ssize_t debug_read(struct file *file, char __user *buf,
return simple_read_from_buffer(buf, count, ppos, debug_buffer, bsize); return simple_read_from_buffer(buf, count, ppos, debug_buffer, bsize);
} }
static int debug_open(struct inode *inode, struct file *file)
{
file->private_data = inode->i_private;
return 0;
}
static const struct file_operations debug_ops = { static const struct file_operations debug_ops = {
.read = debug_read, .read = debug_read,
.open = debug_open, .open = simple_open,
.llseek = default_llseek, .llseek = default_llseek,
}; };
......
/*
* arch/arm/mach-omap1/include/mach/io.h
*
* IO definitions for TI OMAP processors and boards
*
* Copied from arch/arm/mach-sa1100/include/mach/io.h
* Copyright (C) 1997-1999 Russell King
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
* NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* 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.,
* 675 Mass Ave, Cambridge, MA 02139, USA.
*
* Modifications:
* 06-12-1997 RMK Created.
* 07-04-1999 RMK Major cleanup
*/
#ifndef __ASM_ARM_ARCH_IO_H
#define __ASM_ARM_ARCH_IO_H
#define IO_SPACE_LIMIT 0xffffffff
/*
* We don't actually have real ISA nor PCI buses, but there is so many
* drivers out there that might just work if we fake them...
*/
#define __io(a) __typesafe_io(a)
#endif
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
#include <linux/i2c/at24.h> #include <linux/i2c/at24.h>
#include <linux/i2c/twl.h> #include <linux/i2c/twl.h>
#include <linux/regulator/fixed.h>
#include <linux/regulator/machine.h> #include <linux/regulator/machine.h>
#include <linux/mmc/host.h> #include <linux/mmc/host.h>
...@@ -81,8 +82,23 @@ static struct omap_smsc911x_platform_data sb_t35_smsc911x_cfg = { ...@@ -81,8 +82,23 @@ static struct omap_smsc911x_platform_data sb_t35_smsc911x_cfg = {
.flags = SMSC911X_USE_32BIT | SMSC911X_SAVE_MAC_ADDRESS, .flags = SMSC911X_USE_32BIT | SMSC911X_SAVE_MAC_ADDRESS,
}; };
static struct regulator_consumer_supply cm_t35_smsc911x_supplies[] = {
REGULATOR_SUPPLY("vddvario", "smsc911x.0"),
REGULATOR_SUPPLY("vdd33a", "smsc911x.0"),
};
static struct regulator_consumer_supply sb_t35_smsc911x_supplies[] = {
REGULATOR_SUPPLY("vddvario", "smsc911x.1"),
REGULATOR_SUPPLY("vdd33a", "smsc911x.1"),
};
static void __init cm_t35_init_ethernet(void) static void __init cm_t35_init_ethernet(void)
{ {
regulator_register_fixed(0, cm_t35_smsc911x_supplies,
ARRAY_SIZE(cm_t35_smsc911x_supplies));
regulator_register_fixed(1, sb_t35_smsc911x_supplies,
ARRAY_SIZE(sb_t35_smsc911x_supplies));
gpmc_smsc911x_init(&cm_t35_smsc911x_cfg); gpmc_smsc911x_init(&cm_t35_smsc911x_cfg);
gpmc_smsc911x_init(&sb_t35_smsc911x_cfg); gpmc_smsc911x_init(&sb_t35_smsc911x_cfg);
} }
......
...@@ -634,8 +634,14 @@ static void __init igep_wlan_bt_init(void) ...@@ -634,8 +634,14 @@ static void __init igep_wlan_bt_init(void)
static inline void __init igep_wlan_bt_init(void) { } static inline void __init igep_wlan_bt_init(void) { }
#endif #endif
static struct regulator_consumer_supply dummy_supplies[] = {
REGULATOR_SUPPLY("vddvario", "smsc911x.0"),
REGULATOR_SUPPLY("vdd33a", "smsc911x.0"),
};
static void __init igep_init(void) static void __init igep_init(void)
{ {
regulator_register_fixed(0, dummy_supplies, ARRAY_SIZE(dummy_supplies));
omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
/* Get IGEP2 hardware revision */ /* Get IGEP2 hardware revision */
......
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
#include <linux/err.h> #include <linux/err.h>
#include <linux/clk.h> #include <linux/clk.h>
#include <linux/spi/spi.h> #include <linux/spi/spi.h>
#include <linux/regulator/fixed.h>
#include <linux/regulator/machine.h> #include <linux/regulator/machine.h>
#include <linux/i2c/twl.h> #include <linux/i2c/twl.h>
#include <linux/io.h> #include <linux/io.h>
...@@ -410,8 +411,14 @@ static struct mtd_partition ldp_nand_partitions[] = { ...@@ -410,8 +411,14 @@ static struct mtd_partition ldp_nand_partitions[] = {
}; };
static struct regulator_consumer_supply dummy_supplies[] = {
REGULATOR_SUPPLY("vddvario", "smsc911x.0"),
REGULATOR_SUPPLY("vdd33a", "smsc911x.0"),
};
static void __init omap_ldp_init(void) static void __init omap_ldp_init(void)
{ {
regulator_register_fixed(0, dummy_supplies, ARRAY_SIZE(dummy_supplies));
omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
ldp_init_smsc911x(); ldp_init_smsc911x();
omap_i2c_init(); omap_i2c_init();
......
...@@ -114,15 +114,6 @@ static struct omap_smsc911x_platform_data smsc911x_cfg = { ...@@ -114,15 +114,6 @@ static struct omap_smsc911x_platform_data smsc911x_cfg = {
static inline void __init omap3evm_init_smsc911x(void) static inline void __init omap3evm_init_smsc911x(void)
{ {
struct clk *l3ck;
unsigned int rate;
l3ck = clk_get(NULL, "l3_ck");
if (IS_ERR(l3ck))
rate = 100000000;
else
rate = clk_get_rate(l3ck);
/* Configure ethernet controller reset gpio */ /* Configure ethernet controller reset gpio */
if (cpu_is_omap3430()) { if (cpu_is_omap3430()) {
if (get_omap3_evm_rev() == OMAP3EVM_BOARD_GEN_1) if (get_omap3_evm_rev() == OMAP3EVM_BOARD_GEN_1)
...@@ -632,9 +623,15 @@ static void __init omap3_evm_wl12xx_init(void) ...@@ -632,9 +623,15 @@ static void __init omap3_evm_wl12xx_init(void)
#endif #endif
} }
static struct regulator_consumer_supply dummy_supplies[] = {
REGULATOR_SUPPLY("vddvario", "smsc911x.0"),
REGULATOR_SUPPLY("vdd33a", "smsc911x.0"),
};
static void __init omap3_evm_init(void) static void __init omap3_evm_init(void)
{ {
omap3_evm_get_revision(); omap3_evm_get_revision();
regulator_register_fixed(0, dummy_supplies, ARRAY_SIZE(dummy_supplies));
if (cpu_is_omap3630()) if (cpu_is_omap3630())
omap3_mux_init(omap36x_board_mux, OMAP_PACKAGE_CBB); omap3_mux_init(omap36x_board_mux, OMAP_PACKAGE_CBB);
......
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
#include <linux/io.h> #include <linux/io.h>
#include <linux/gpio.h> #include <linux/gpio.h>
#include <linux/regulator/fixed.h>
#include <linux/regulator/machine.h> #include <linux/regulator/machine.h>
#include <linux/i2c/twl.h> #include <linux/i2c/twl.h>
...@@ -188,8 +189,14 @@ static struct omap_board_mux board_mux[] __initdata = { ...@@ -188,8 +189,14 @@ static struct omap_board_mux board_mux[] __initdata = {
}; };
#endif #endif
static struct regulator_consumer_supply dummy_supplies[] = {
REGULATOR_SUPPLY("vddvario", "smsc911x.0"),
REGULATOR_SUPPLY("vdd33a", "smsc911x.0"),
};
static void __init omap3logic_init(void) static void __init omap3logic_init(void)
{ {
regulator_register_fixed(0, dummy_supplies, ARRAY_SIZE(dummy_supplies));
omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
omap3torpedo_fix_pbias_voltage(); omap3torpedo_fix_pbias_voltage();
omap3logic_i2c_init(); omap3logic_i2c_init();
......
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
#include <linux/input.h> #include <linux/input.h>
#include <linux/gpio_keys.h> #include <linux/gpio_keys.h>
#include <linux/regulator/fixed.h>
#include <linux/regulator/machine.h> #include <linux/regulator/machine.h>
#include <linux/i2c/twl.h> #include <linux/i2c/twl.h>
#include <linux/mmc/host.h> #include <linux/mmc/host.h>
...@@ -72,15 +73,6 @@ static struct omap_smsc911x_platform_data smsc911x_cfg = { ...@@ -72,15 +73,6 @@ static struct omap_smsc911x_platform_data smsc911x_cfg = {
static inline void __init omap3stalker_init_eth(void) static inline void __init omap3stalker_init_eth(void)
{ {
struct clk *l3ck;
unsigned int rate;
l3ck = clk_get(NULL, "l3_ck");
if (IS_ERR(l3ck))
rate = 100000000;
else
rate = clk_get_rate(l3ck);
omap_mux_init_gpio(19, OMAP_PIN_INPUT_PULLUP); omap_mux_init_gpio(19, OMAP_PIN_INPUT_PULLUP);
gpmc_smsc911x_init(&smsc911x_cfg); gpmc_smsc911x_init(&smsc911x_cfg);
} }
...@@ -419,8 +411,14 @@ static struct omap_board_mux board_mux[] __initdata = { ...@@ -419,8 +411,14 @@ static struct omap_board_mux board_mux[] __initdata = {
}; };
#endif #endif
static struct regulator_consumer_supply dummy_supplies[] = {
REGULATOR_SUPPLY("vddvario", "smsc911x.0"),
REGULATOR_SUPPLY("vdd33a", "smsc911x.0"),
};
static void __init omap3_stalker_init(void) static void __init omap3_stalker_init(void)
{ {
regulator_register_fixed(0, dummy_supplies, ARRAY_SIZE(dummy_supplies));
omap3_mux_init(board_mux, OMAP_PACKAGE_CUS); omap3_mux_init(board_mux, OMAP_PACKAGE_CUS);
omap_board_config = omap3_stalker_config; omap_board_config = omap3_stalker_config;
omap_board_config_size = ARRAY_SIZE(omap3_stalker_config); omap_board_config_size = ARRAY_SIZE(omap3_stalker_config);
......
...@@ -498,10 +498,18 @@ static struct gpio overo_bt_gpios[] __initdata = { ...@@ -498,10 +498,18 @@ static struct gpio overo_bt_gpios[] __initdata = {
{ OVERO_GPIO_BT_NRESET, GPIOF_OUT_INIT_HIGH, "lcd bl enable" }, { OVERO_GPIO_BT_NRESET, GPIOF_OUT_INIT_HIGH, "lcd bl enable" },
}; };
static struct regulator_consumer_supply dummy_supplies[] = {
REGULATOR_SUPPLY("vddvario", "smsc911x.0"),
REGULATOR_SUPPLY("vdd33a", "smsc911x.0"),
REGULATOR_SUPPLY("vddvario", "smsc911x.1"),
REGULATOR_SUPPLY("vdd33a", "smsc911x.1"),
};
static void __init overo_init(void) static void __init overo_init(void)
{ {
int ret; int ret;
regulator_register_fixed(0, dummy_supplies, ARRAY_SIZE(dummy_supplies));
omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
omap_hsmmc_init(mmc); omap_hsmmc_init(mmc);
overo_i2c_init(); overo_i2c_init();
......
...@@ -14,6 +14,9 @@ ...@@ -14,6 +14,9 @@
#include <linux/smsc911x.h> #include <linux/smsc911x.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/regulator/fixed.h>
#include <linux/regulator/machine.h>
#include <plat/gpmc.h> #include <plat/gpmc.h>
#include <plat/gpmc-smsc911x.h> #include <plat/gpmc-smsc911x.h>
...@@ -117,11 +120,17 @@ static struct platform_device *zoom_devices[] __initdata = { ...@@ -117,11 +120,17 @@ static struct platform_device *zoom_devices[] __initdata = {
&zoom_debugboard_serial_device, &zoom_debugboard_serial_device,
}; };
static struct regulator_consumer_supply dummy_supplies[] = {
REGULATOR_SUPPLY("vddvario", "smsc911x.0"),
REGULATOR_SUPPLY("vdd33a", "smsc911x.0"),
};
int __init zoom_debugboard_init(void) int __init zoom_debugboard_init(void)
{ {
if (!omap_zoom_debugboard_detect()) if (!omap_zoom_debugboard_detect())
return 0; return 0;
regulator_register_fixed(0, dummy_supplies, ARRAY_SIZE(dummy_supplies));
zoom_init_smsc911x(); zoom_init_smsc911x();
zoom_init_quaduart(); zoom_init_quaduart();
return platform_add_devices(zoom_devices, ARRAY_SIZE(zoom_devices)); return platform_add_devices(zoom_devices, ARRAY_SIZE(zoom_devices));
......
...@@ -747,7 +747,7 @@ static struct clk dpll4_m3_ck = { ...@@ -747,7 +747,7 @@ static struct clk dpll4_m3_ck = {
.parent = &dpll4_ck, .parent = &dpll4_ck,
.init = &omap2_init_clksel_parent, .init = &omap2_init_clksel_parent,
.clksel_reg = OMAP_CM_REGADDR(OMAP3430_DSS_MOD, CM_CLKSEL), .clksel_reg = OMAP_CM_REGADDR(OMAP3430_DSS_MOD, CM_CLKSEL),
.clksel_mask = OMAP3430_CLKSEL_TV_MASK, .clksel_mask = OMAP3630_CLKSEL_TV_MASK,
.clksel = dpll4_clksel, .clksel = dpll4_clksel,
.clkdm_name = "dpll4_clkdm", .clkdm_name = "dpll4_clkdm",
.recalc = &omap2_clksel_recalc, .recalc = &omap2_clksel_recalc,
...@@ -832,7 +832,7 @@ static struct clk dpll4_m4_ck = { ...@@ -832,7 +832,7 @@ static struct clk dpll4_m4_ck = {
.parent = &dpll4_ck, .parent = &dpll4_ck,
.init = &omap2_init_clksel_parent, .init = &omap2_init_clksel_parent,
.clksel_reg = OMAP_CM_REGADDR(OMAP3430_DSS_MOD, CM_CLKSEL), .clksel_reg = OMAP_CM_REGADDR(OMAP3430_DSS_MOD, CM_CLKSEL),
.clksel_mask = OMAP3430_CLKSEL_DSS1_MASK, .clksel_mask = OMAP3630_CLKSEL_DSS1_MASK,
.clksel = dpll4_clksel, .clksel = dpll4_clksel,
.clkdm_name = "dpll4_clkdm", .clkdm_name = "dpll4_clkdm",
.recalc = &omap2_clksel_recalc, .recalc = &omap2_clksel_recalc,
...@@ -859,7 +859,7 @@ static struct clk dpll4_m5_ck = { ...@@ -859,7 +859,7 @@ static struct clk dpll4_m5_ck = {
.parent = &dpll4_ck, .parent = &dpll4_ck,
.init = &omap2_init_clksel_parent, .init = &omap2_init_clksel_parent,
.clksel_reg = OMAP_CM_REGADDR(OMAP3430_CAM_MOD, CM_CLKSEL), .clksel_reg = OMAP_CM_REGADDR(OMAP3430_CAM_MOD, CM_CLKSEL),
.clksel_mask = OMAP3430_CLKSEL_CAM_MASK, .clksel_mask = OMAP3630_CLKSEL_CAM_MASK,
.clksel = dpll4_clksel, .clksel = dpll4_clksel,
.clkdm_name = "dpll4_clkdm", .clkdm_name = "dpll4_clkdm",
.set_rate = &omap2_clksel_set_rate, .set_rate = &omap2_clksel_set_rate,
...@@ -886,7 +886,7 @@ static struct clk dpll4_m6_ck = { ...@@ -886,7 +886,7 @@ static struct clk dpll4_m6_ck = {
.parent = &dpll4_ck, .parent = &dpll4_ck,
.init = &omap2_init_clksel_parent, .init = &omap2_init_clksel_parent,
.clksel_reg = OMAP_CM_REGADDR(OMAP3430_EMU_MOD, CM_CLKSEL1), .clksel_reg = OMAP_CM_REGADDR(OMAP3430_EMU_MOD, CM_CLKSEL1),
.clksel_mask = OMAP3430_DIV_DPLL4_MASK, .clksel_mask = OMAP3630_DIV_DPLL4_MASK,
.clksel = dpll4_clksel, .clksel = dpll4_clksel,
.clkdm_name = "dpll4_clkdm", .clkdm_name = "dpll4_clkdm",
.recalc = &omap2_clksel_recalc, .recalc = &omap2_clksel_recalc,
...@@ -1394,6 +1394,7 @@ static struct clk cpefuse_fck = { ...@@ -1394,6 +1394,7 @@ static struct clk cpefuse_fck = {
.name = "cpefuse_fck", .name = "cpefuse_fck",
.ops = &clkops_omap2_dflt, .ops = &clkops_omap2_dflt,
.parent = &sys_ck, .parent = &sys_ck,
.clkdm_name = "core_l4_clkdm",
.enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP3430ES2_CM_FCLKEN3), .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP3430ES2_CM_FCLKEN3),
.enable_bit = OMAP3430ES2_EN_CPEFUSE_SHIFT, .enable_bit = OMAP3430ES2_EN_CPEFUSE_SHIFT,
.recalc = &followparent_recalc, .recalc = &followparent_recalc,
...@@ -1403,6 +1404,7 @@ static struct clk ts_fck = { ...@@ -1403,6 +1404,7 @@ static struct clk ts_fck = {
.name = "ts_fck", .name = "ts_fck",
.ops = &clkops_omap2_dflt, .ops = &clkops_omap2_dflt,
.parent = &omap_32k_fck, .parent = &omap_32k_fck,
.clkdm_name = "core_l4_clkdm",
.enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP3430ES2_CM_FCLKEN3), .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP3430ES2_CM_FCLKEN3),
.enable_bit = OMAP3430ES2_EN_TS_SHIFT, .enable_bit = OMAP3430ES2_EN_TS_SHIFT,
.recalc = &followparent_recalc, .recalc = &followparent_recalc,
...@@ -1412,6 +1414,7 @@ static struct clk usbtll_fck = { ...@@ -1412,6 +1414,7 @@ static struct clk usbtll_fck = {
.name = "usbtll_fck", .name = "usbtll_fck",
.ops = &clkops_omap2_dflt_wait, .ops = &clkops_omap2_dflt_wait,
.parent = &dpll5_m2_ck, .parent = &dpll5_m2_ck,
.clkdm_name = "core_l4_clkdm",
.enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP3430ES2_CM_FCLKEN3), .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP3430ES2_CM_FCLKEN3),
.enable_bit = OMAP3430ES2_EN_USBTLL_SHIFT, .enable_bit = OMAP3430ES2_EN_USBTLL_SHIFT,
.recalc = &followparent_recalc, .recalc = &followparent_recalc,
...@@ -1617,6 +1620,7 @@ static struct clk fshostusb_fck = { ...@@ -1617,6 +1620,7 @@ static struct clk fshostusb_fck = {
.name = "fshostusb_fck", .name = "fshostusb_fck",
.ops = &clkops_omap2_dflt_wait, .ops = &clkops_omap2_dflt_wait,
.parent = &core_48m_fck, .parent = &core_48m_fck,
.clkdm_name = "core_l4_clkdm",
.enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1), .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
.enable_bit = OMAP3430ES1_EN_FSHOSTUSB_SHIFT, .enable_bit = OMAP3430ES1_EN_FSHOSTUSB_SHIFT,
.recalc = &followparent_recalc, .recalc = &followparent_recalc,
...@@ -2043,6 +2047,7 @@ static struct clk omapctrl_ick = { ...@@ -2043,6 +2047,7 @@ static struct clk omapctrl_ick = {
.enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
.enable_bit = OMAP3430_EN_OMAPCTRL_SHIFT, .enable_bit = OMAP3430_EN_OMAPCTRL_SHIFT,
.flags = ENABLE_ON_INIT, .flags = ENABLE_ON_INIT,
.clkdm_name = "core_l4_clkdm",
.recalc = &followparent_recalc, .recalc = &followparent_recalc,
}; };
...@@ -2094,6 +2099,7 @@ static struct clk usb_l4_ick = { ...@@ -2094,6 +2099,7 @@ static struct clk usb_l4_ick = {
.clksel_reg = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL), .clksel_reg = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL),
.clksel_mask = OMAP3430ES1_CLKSEL_FSHOSTUSB_MASK, .clksel_mask = OMAP3430ES1_CLKSEL_FSHOSTUSB_MASK,
.clksel = usb_l4_clksel, .clksel = usb_l4_clksel,
.clkdm_name = "core_l4_clkdm",
.recalc = &omap2_clksel_recalc, .recalc = &omap2_clksel_recalc,
}; };
...@@ -3467,8 +3473,8 @@ static struct omap_clk omap3xxx_clks[] = { ...@@ -3467,8 +3473,8 @@ static struct omap_clk omap3xxx_clks[] = {
CLK(NULL, "ipss_ick", &ipss_ick, CK_AM35XX), CLK(NULL, "ipss_ick", &ipss_ick, CK_AM35XX),
CLK(NULL, "rmii_ck", &rmii_ck, CK_AM35XX), CLK(NULL, "rmii_ck", &rmii_ck, CK_AM35XX),
CLK(NULL, "pclk_ck", &pclk_ck, CK_AM35XX), CLK(NULL, "pclk_ck", &pclk_ck, CK_AM35XX),
CLK("davinci_emac", "emac_clk", &emac_ick, CK_AM35XX), CLK("davinci_emac", NULL, &emac_ick, CK_AM35XX),
CLK("davinci_emac", "phy_clk", &emac_fck, CK_AM35XX), CLK("davinci_mdio.0", NULL, &emac_fck, CK_AM35XX),
CLK("vpfe-capture", "master", &vpfe_ick, CK_AM35XX), CLK("vpfe-capture", "master", &vpfe_ick, CK_AM35XX),
CLK("vpfe-capture", "slave", &vpfe_fck, CK_AM35XX), CLK("vpfe-capture", "slave", &vpfe_fck, CK_AM35XX),
CLK("musb-am35x", "ick", &hsotgusb_ick_am35xx, CK_AM35XX), CLK("musb-am35x", "ick", &hsotgusb_ick_am35xx, CK_AM35XX),
......
...@@ -957,8 +957,8 @@ static struct dpll_data dpll_usb_dd = { ...@@ -957,8 +957,8 @@ static struct dpll_data dpll_usb_dd = {
.modes = (1 << DPLL_LOW_POWER_BYPASS) | (1 << DPLL_LOCKED), .modes = (1 << DPLL_LOW_POWER_BYPASS) | (1 << DPLL_LOCKED),
.autoidle_reg = OMAP4430_CM_AUTOIDLE_DPLL_USB, .autoidle_reg = OMAP4430_CM_AUTOIDLE_DPLL_USB,
.idlest_reg = OMAP4430_CM_IDLEST_DPLL_USB, .idlest_reg = OMAP4430_CM_IDLEST_DPLL_USB,
.mult_mask = OMAP4430_DPLL_MULT_MASK, .mult_mask = OMAP4430_DPLL_MULT_USB_MASK,
.div1_mask = OMAP4430_DPLL_DIV_MASK, .div1_mask = OMAP4430_DPLL_DIV_0_7_MASK,
.enable_mask = OMAP4430_DPLL_EN_MASK, .enable_mask = OMAP4430_DPLL_EN_MASK,
.autoidle_mask = OMAP4430_AUTO_DPLL_MODE_MASK, .autoidle_mask = OMAP4430_AUTO_DPLL_MODE_MASK,
.idlest_mask = OMAP4430_ST_DPLL_CLK_MASK, .idlest_mask = OMAP4430_ST_DPLL_CLK_MASK,
...@@ -978,6 +978,7 @@ static struct clk dpll_usb_ck = { ...@@ -978,6 +978,7 @@ static struct clk dpll_usb_ck = {
.recalc = &omap3_dpll_recalc, .recalc = &omap3_dpll_recalc,
.round_rate = &omap2_dpll_round_rate, .round_rate = &omap2_dpll_round_rate,
.set_rate = &omap3_noncore_dpll_set_rate, .set_rate = &omap3_noncore_dpll_set_rate,
.clkdm_name = "l3_init_clkdm",
}; };
static struct clk dpll_usb_clkdcoldo_ck = { static struct clk dpll_usb_clkdcoldo_ck = {
......
...@@ -390,7 +390,7 @@ static struct clockdomain emu_sys_44xx_clkdm = { ...@@ -390,7 +390,7 @@ static struct clockdomain emu_sys_44xx_clkdm = {
.prcm_partition = OMAP4430_PRM_PARTITION, .prcm_partition = OMAP4430_PRM_PARTITION,
.cm_inst = OMAP4430_PRM_EMU_CM_INST, .cm_inst = OMAP4430_PRM_EMU_CM_INST,
.clkdm_offs = OMAP4430_PRM_EMU_CM_EMU_CDOFFS, .clkdm_offs = OMAP4430_PRM_EMU_CM_EMU_CDOFFS,
.flags = CLKDM_CAN_HWSUP, .flags = CLKDM_CAN_ENABLE_AUTO | CLKDM_CAN_FORCE_WAKEUP,
}; };
static struct clockdomain l3_dma_44xx_clkdm = { static struct clockdomain l3_dma_44xx_clkdm = {
......
...@@ -19,15 +19,11 @@ ...@@ -19,15 +19,11 @@
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/io.h> #include <linux/io.h>
#include <linux/smsc911x.h> #include <linux/smsc911x.h>
#include <linux/regulator/fixed.h>
#include <linux/regulator/machine.h>
#include <plat/board.h> #include <plat/board.h>
#include <plat/gpmc.h> #include <plat/gpmc.h>
#include <plat/gpmc-smsc911x.h> #include <plat/gpmc-smsc911x.h>
static struct omap_smsc911x_platform_data *gpmc_cfg;
static struct resource gpmc_smsc911x_resources[] = { static struct resource gpmc_smsc911x_resources[] = {
[0] = { [0] = {
.flags = IORESOURCE_MEM, .flags = IORESOURCE_MEM,
...@@ -41,51 +37,6 @@ static struct smsc911x_platform_config gpmc_smsc911x_config = { ...@@ -41,51 +37,6 @@ static struct smsc911x_platform_config gpmc_smsc911x_config = {
.phy_interface = PHY_INTERFACE_MODE_MII, .phy_interface = PHY_INTERFACE_MODE_MII,
.irq_polarity = SMSC911X_IRQ_POLARITY_ACTIVE_LOW, .irq_polarity = SMSC911X_IRQ_POLARITY_ACTIVE_LOW,
.irq_type = SMSC911X_IRQ_TYPE_OPEN_DRAIN, .irq_type = SMSC911X_IRQ_TYPE_OPEN_DRAIN,
.flags = SMSC911X_USE_16BIT,
};
static struct regulator_consumer_supply gpmc_smsc911x_supply[] = {
REGULATOR_SUPPLY("vddvario", "smsc911x.0"),
REGULATOR_SUPPLY("vdd33a", "smsc911x.0"),
};
/* Generic regulator definition to satisfy smsc911x */
static struct regulator_init_data gpmc_smsc911x_reg_init_data = {
.constraints = {
.min_uV = 3300000,
.max_uV = 3300000,
.valid_modes_mask = REGULATOR_MODE_NORMAL
| REGULATOR_MODE_STANDBY,
.valid_ops_mask = REGULATOR_CHANGE_MODE
| REGULATOR_CHANGE_STATUS,
},
.num_consumer_supplies = ARRAY_SIZE(gpmc_smsc911x_supply),
.consumer_supplies = gpmc_smsc911x_supply,
};
static struct fixed_voltage_config gpmc_smsc911x_fixed_reg_data = {
.supply_name = "gpmc_smsc911x",
.microvolts = 3300000,
.gpio = -EINVAL,
.startup_delay = 0,
.enable_high = 0,
.enabled_at_boot = 1,
.init_data = &gpmc_smsc911x_reg_init_data,
};
/*
* Platform device id of 42 is a temporary fix to avoid conflicts
* with other reg-fixed-voltage devices. The real fix should
* involve the driver core providing a way of dynamically
* assigning a unique id on registration for platform devices
* in the same name space.
*/
static struct platform_device gpmc_smsc911x_regulator = {
.name = "reg-fixed-voltage",
.id = 42,
.dev = {
.platform_data = &gpmc_smsc911x_fixed_reg_data,
},
}; };
/* /*
...@@ -93,23 +44,12 @@ static struct platform_device gpmc_smsc911x_regulator = { ...@@ -93,23 +44,12 @@ static struct platform_device gpmc_smsc911x_regulator = {
* assume that pin multiplexing is done in the board-*.c file, * assume that pin multiplexing is done in the board-*.c file,
* or in the bootloader. * or in the bootloader.
*/ */
void __init gpmc_smsc911x_init(struct omap_smsc911x_platform_data *board_data) void __init gpmc_smsc911x_init(struct omap_smsc911x_platform_data *gpmc_cfg)
{ {
struct platform_device *pdev; struct platform_device *pdev;
unsigned long cs_mem_base; unsigned long cs_mem_base;
int ret; int ret;
gpmc_cfg = board_data;
if (!gpmc_cfg->id) {
ret = platform_device_register(&gpmc_smsc911x_regulator);
if (ret < 0) {
pr_err("Unable to register smsc911x regulators: %d\n",
ret);
return;
}
}
if (gpmc_cs_request(gpmc_cfg->cs, SZ_16M, &cs_mem_base) < 0) { if (gpmc_cs_request(gpmc_cfg->cs, SZ_16M, &cs_mem_base) < 0) {
pr_err("Failed to request GPMC mem region\n"); pr_err("Failed to request GPMC mem region\n");
return; return;
...@@ -139,8 +79,7 @@ void __init gpmc_smsc911x_init(struct omap_smsc911x_platform_data *board_data) ...@@ -139,8 +79,7 @@ void __init gpmc_smsc911x_init(struct omap_smsc911x_platform_data *board_data)
gpio_set_value(gpmc_cfg->gpio_reset, 1); gpio_set_value(gpmc_cfg->gpio_reset, 1);
} }
if (gpmc_cfg->flags) gpmc_smsc911x_config.flags = gpmc_cfg->flags ? : SMSC911X_USE_16BIT;
gpmc_smsc911x_config.flags = gpmc_cfg->flags;
pdev = platform_device_register_resndata(NULL, "smsc911x", gpmc_cfg->id, pdev = platform_device_register_resndata(NULL, "smsc911x", gpmc_cfg->id,
gpmc_smsc911x_resources, ARRAY_SIZE(gpmc_smsc911x_resources), gpmc_smsc911x_resources, ARRAY_SIZE(gpmc_smsc911x_resources),
......
...@@ -506,6 +506,13 @@ static void __init omap_hsmmc_init_one(struct omap2_hsmmc_info *hsmmcinfo, ...@@ -506,6 +506,13 @@ static void __init omap_hsmmc_init_one(struct omap2_hsmmc_info *hsmmcinfo,
if (oh->dev_attr != NULL) { if (oh->dev_attr != NULL) {
mmc_dev_attr = oh->dev_attr; mmc_dev_attr = oh->dev_attr;
mmc_data->controller_flags = mmc_dev_attr->flags; mmc_data->controller_flags = mmc_dev_attr->flags;
/*
* erratum 2.1.1.128 doesn't apply if board has
* a transceiver is attached
*/
if (hsmmcinfo->transceiver)
mmc_data->controller_flags &=
~OMAP_HSMMC_BROKEN_MULTIBLOCK_READ;
} }
pdev = platform_device_alloc(name, ctrl_nr - 1); pdev = platform_device_alloc(name, ctrl_nr - 1);
......
...@@ -22,6 +22,8 @@ ...@@ -22,6 +22,8 @@
#ifndef __MACH_BARRIERS_H #ifndef __MACH_BARRIERS_H
#define __MACH_BARRIERS_H #define __MACH_BARRIERS_H
#include <asm/outercache.h>
extern void omap_bus_sync(void); extern void omap_bus_sync(void);
#define rmb() dsb() #define rmb() dsb()
......
...@@ -1395,7 +1395,7 @@ static int _read_hardreset(struct omap_hwmod *oh, const char *name) ...@@ -1395,7 +1395,7 @@ static int _read_hardreset(struct omap_hwmod *oh, const char *name)
*/ */
static int _ocp_softreset(struct omap_hwmod *oh) static int _ocp_softreset(struct omap_hwmod *oh)
{ {
u32 v; u32 v, softrst_mask;
int c = 0; int c = 0;
int ret = 0; int ret = 0;
...@@ -1427,11 +1427,13 @@ static int _ocp_softreset(struct omap_hwmod *oh) ...@@ -1427,11 +1427,13 @@ static int _ocp_softreset(struct omap_hwmod *oh)
oh->class->sysc->syss_offs) oh->class->sysc->syss_offs)
& SYSS_RESETDONE_MASK), & SYSS_RESETDONE_MASK),
MAX_MODULE_SOFTRESET_WAIT, c); MAX_MODULE_SOFTRESET_WAIT, c);
else if (oh->class->sysc->sysc_flags & SYSC_HAS_RESET_STATUS) else if (oh->class->sysc->sysc_flags & SYSC_HAS_RESET_STATUS) {
softrst_mask = (0x1 << oh->class->sysc->sysc_fields->srst_shift);
omap_test_timeout(!(omap_hwmod_read(oh, omap_test_timeout(!(omap_hwmod_read(oh,
oh->class->sysc->sysc_offs) oh->class->sysc->sysc_offs)
& SYSC_TYPE2_SOFTRESET_MASK), & softrst_mask),
MAX_MODULE_SOFTRESET_WAIT, c); MAX_MODULE_SOFTRESET_WAIT, c);
}
if (c == MAX_MODULE_SOFTRESET_WAIT) if (c == MAX_MODULE_SOFTRESET_WAIT)
pr_warning("omap_hwmod: %s: softreset failed (waited %d usec)\n", pr_warning("omap_hwmod: %s: softreset failed (waited %d usec)\n",
...@@ -1477,6 +1479,11 @@ static int _reset(struct omap_hwmod *oh) ...@@ -1477,6 +1479,11 @@ static int _reset(struct omap_hwmod *oh)
ret = (oh->class->reset) ? oh->class->reset(oh) : _ocp_softreset(oh); ret = (oh->class->reset) ? oh->class->reset(oh) : _ocp_softreset(oh);
if (oh->class->sysc) {
_update_sysc_cache(oh);
_enable_sysc(oh);
}
return ret; return ret;
} }
...@@ -1786,20 +1793,9 @@ static int _setup(struct omap_hwmod *oh, void *data) ...@@ -1786,20 +1793,9 @@ static int _setup(struct omap_hwmod *oh, void *data)
return 0; return 0;
} }
if (!(oh->flags & HWMOD_INIT_NO_RESET)) { if (!(oh->flags & HWMOD_INIT_NO_RESET))
_reset(oh); _reset(oh);
/*
* OCP_SYSCONFIG bits need to be reprogrammed after a softreset.
* The _enable() function should be split to
* avoid the rewrite of the OCP_SYSCONFIG register.
*/
if (oh->class->sysc) {
_update_sysc_cache(oh);
_enable_sysc(oh);
}
}
postsetup_state = oh->_postsetup_state; postsetup_state = oh->_postsetup_state;
if (postsetup_state == _HWMOD_STATE_UNKNOWN) if (postsetup_state == _HWMOD_STATE_UNKNOWN)
postsetup_state = _HWMOD_STATE_ENABLED; postsetup_state = _HWMOD_STATE_ENABLED;
...@@ -1907,20 +1903,10 @@ void omap_hwmod_write(u32 v, struct omap_hwmod *oh, u16 reg_offs) ...@@ -1907,20 +1903,10 @@ void omap_hwmod_write(u32 v, struct omap_hwmod *oh, u16 reg_offs)
*/ */
int omap_hwmod_softreset(struct omap_hwmod *oh) int omap_hwmod_softreset(struct omap_hwmod *oh)
{ {
u32 v; if (!oh)
int ret;
if (!oh || !(oh->_sysc_cache))
return -EINVAL; return -EINVAL;
v = oh->_sysc_cache; return _ocp_softreset(oh);
ret = _set_softreset(oh, &v);
if (ret)
goto error;
_write_sysconfig(v, oh);
error:
return ret;
} }
/** /**
...@@ -2463,26 +2449,28 @@ int omap_hwmod_del_initiator_dep(struct omap_hwmod *oh, ...@@ -2463,26 +2449,28 @@ int omap_hwmod_del_initiator_dep(struct omap_hwmod *oh,
* @oh: struct omap_hwmod * * @oh: struct omap_hwmod *
* *
* Sets the module OCP socket ENAWAKEUP bit to allow the module to * Sets the module OCP socket ENAWAKEUP bit to allow the module to
* send wakeups to the PRCM. Eventually this should sets PRCM wakeup * send wakeups to the PRCM, and enable I/O ring wakeup events for
* registers to cause the PRCM to receive wakeup events from the * this IP block if it has dynamic mux entries. Eventually this
* module. Does not set any wakeup routing registers beyond this * should set PRCM wakeup registers to cause the PRCM to receive
* point - if the module is to wake up any other module or subsystem, * wakeup events from the module. Does not set any wakeup routing
* that must be set separately. Called by omap_device code. Returns * registers beyond this point - if the module is to wake up any other
* -EINVAL on error or 0 upon success. * module or subsystem, that must be set separately. Called by
* omap_device code. Returns -EINVAL on error or 0 upon success.
*/ */
int omap_hwmod_enable_wakeup(struct omap_hwmod *oh) int omap_hwmod_enable_wakeup(struct omap_hwmod *oh)
{ {
unsigned long flags; unsigned long flags;
u32 v; u32 v;
if (!oh->class->sysc ||
!(oh->class->sysc->sysc_flags & SYSC_HAS_ENAWAKEUP))
return -EINVAL;
spin_lock_irqsave(&oh->_lock, flags); spin_lock_irqsave(&oh->_lock, flags);
v = oh->_sysc_cache;
_enable_wakeup(oh, &v); if (oh->class->sysc &&
_write_sysconfig(v, oh); (oh->class->sysc->sysc_flags & SYSC_HAS_ENAWAKEUP)) {
v = oh->_sysc_cache;
_enable_wakeup(oh, &v);
_write_sysconfig(v, oh);
}
_set_idle_ioring_wakeup(oh, true); _set_idle_ioring_wakeup(oh, true);
spin_unlock_irqrestore(&oh->_lock, flags); spin_unlock_irqrestore(&oh->_lock, flags);
...@@ -2494,26 +2482,28 @@ int omap_hwmod_enable_wakeup(struct omap_hwmod *oh) ...@@ -2494,26 +2482,28 @@ int omap_hwmod_enable_wakeup(struct omap_hwmod *oh)
* @oh: struct omap_hwmod * * @oh: struct omap_hwmod *
* *
* Clears the module OCP socket ENAWAKEUP bit to prevent the module * Clears the module OCP socket ENAWAKEUP bit to prevent the module
* from sending wakeups to the PRCM. Eventually this should clear * from sending wakeups to the PRCM, and disable I/O ring wakeup
* PRCM wakeup registers to cause the PRCM to ignore wakeup events * events for this IP block if it has dynamic mux entries. Eventually
* from the module. Does not set any wakeup routing registers beyond * this should clear PRCM wakeup registers to cause the PRCM to ignore
* this point - if the module is to wake up any other module or * wakeup events from the module. Does not set any wakeup routing
* subsystem, that must be set separately. Called by omap_device * registers beyond this point - if the module is to wake up any other
* code. Returns -EINVAL on error or 0 upon success. * module or subsystem, that must be set separately. Called by
* omap_device code. Returns -EINVAL on error or 0 upon success.
*/ */
int omap_hwmod_disable_wakeup(struct omap_hwmod *oh) int omap_hwmod_disable_wakeup(struct omap_hwmod *oh)
{ {
unsigned long flags; unsigned long flags;
u32 v; u32 v;
if (!oh->class->sysc ||
!(oh->class->sysc->sysc_flags & SYSC_HAS_ENAWAKEUP))
return -EINVAL;
spin_lock_irqsave(&oh->_lock, flags); spin_lock_irqsave(&oh->_lock, flags);
v = oh->_sysc_cache;
_disable_wakeup(oh, &v); if (oh->class->sysc &&
_write_sysconfig(v, oh); (oh->class->sysc->sysc_flags & SYSC_HAS_ENAWAKEUP)) {
v = oh->_sysc_cache;
_disable_wakeup(oh, &v);
_write_sysconfig(v, oh);
}
_set_idle_ioring_wakeup(oh, false); _set_idle_ioring_wakeup(oh, false);
spin_unlock_irqrestore(&oh->_lock, flags); spin_unlock_irqrestore(&oh->_lock, flags);
......
...@@ -2996,6 +2996,11 @@ static struct omap_hwmod_ocp_if *omap44xx_mcbsp1_slaves[] = { ...@@ -2996,6 +2996,11 @@ static struct omap_hwmod_ocp_if *omap44xx_mcbsp1_slaves[] = {
&omap44xx_l4_abe__mcbsp1_dma, &omap44xx_l4_abe__mcbsp1_dma,
}; };
static struct omap_hwmod_opt_clk mcbsp1_opt_clks[] = {
{ .role = "pad_fck", .clk = "pad_clks_ck" },
{ .role = "prcm_clk", .clk = "mcbsp1_sync_mux_ck" },
};
static struct omap_hwmod omap44xx_mcbsp1_hwmod = { static struct omap_hwmod omap44xx_mcbsp1_hwmod = {
.name = "mcbsp1", .name = "mcbsp1",
.class = &omap44xx_mcbsp_hwmod_class, .class = &omap44xx_mcbsp_hwmod_class,
...@@ -3012,6 +3017,8 @@ static struct omap_hwmod omap44xx_mcbsp1_hwmod = { ...@@ -3012,6 +3017,8 @@ static struct omap_hwmod omap44xx_mcbsp1_hwmod = {
}, },
.slaves = omap44xx_mcbsp1_slaves, .slaves = omap44xx_mcbsp1_slaves,
.slaves_cnt = ARRAY_SIZE(omap44xx_mcbsp1_slaves), .slaves_cnt = ARRAY_SIZE(omap44xx_mcbsp1_slaves),
.opt_clks = mcbsp1_opt_clks,
.opt_clks_cnt = ARRAY_SIZE(mcbsp1_opt_clks),
}; };
/* mcbsp2 */ /* mcbsp2 */
...@@ -3071,6 +3078,11 @@ static struct omap_hwmod_ocp_if *omap44xx_mcbsp2_slaves[] = { ...@@ -3071,6 +3078,11 @@ static struct omap_hwmod_ocp_if *omap44xx_mcbsp2_slaves[] = {
&omap44xx_l4_abe__mcbsp2_dma, &omap44xx_l4_abe__mcbsp2_dma,
}; };
static struct omap_hwmod_opt_clk mcbsp2_opt_clks[] = {
{ .role = "pad_fck", .clk = "pad_clks_ck" },
{ .role = "prcm_clk", .clk = "mcbsp2_sync_mux_ck" },
};
static struct omap_hwmod omap44xx_mcbsp2_hwmod = { static struct omap_hwmod omap44xx_mcbsp2_hwmod = {
.name = "mcbsp2", .name = "mcbsp2",
.class = &omap44xx_mcbsp_hwmod_class, .class = &omap44xx_mcbsp_hwmod_class,
...@@ -3087,6 +3099,8 @@ static struct omap_hwmod omap44xx_mcbsp2_hwmod = { ...@@ -3087,6 +3099,8 @@ static struct omap_hwmod omap44xx_mcbsp2_hwmod = {
}, },
.slaves = omap44xx_mcbsp2_slaves, .slaves = omap44xx_mcbsp2_slaves,
.slaves_cnt = ARRAY_SIZE(omap44xx_mcbsp2_slaves), .slaves_cnt = ARRAY_SIZE(omap44xx_mcbsp2_slaves),
.opt_clks = mcbsp2_opt_clks,
.opt_clks_cnt = ARRAY_SIZE(mcbsp2_opt_clks),
}; };
/* mcbsp3 */ /* mcbsp3 */
...@@ -3146,6 +3160,11 @@ static struct omap_hwmod_ocp_if *omap44xx_mcbsp3_slaves[] = { ...@@ -3146,6 +3160,11 @@ static struct omap_hwmod_ocp_if *omap44xx_mcbsp3_slaves[] = {
&omap44xx_l4_abe__mcbsp3_dma, &omap44xx_l4_abe__mcbsp3_dma,
}; };
static struct omap_hwmod_opt_clk mcbsp3_opt_clks[] = {
{ .role = "pad_fck", .clk = "pad_clks_ck" },
{ .role = "prcm_clk", .clk = "mcbsp3_sync_mux_ck" },
};
static struct omap_hwmod omap44xx_mcbsp3_hwmod = { static struct omap_hwmod omap44xx_mcbsp3_hwmod = {
.name = "mcbsp3", .name = "mcbsp3",
.class = &omap44xx_mcbsp_hwmod_class, .class = &omap44xx_mcbsp_hwmod_class,
...@@ -3162,6 +3181,8 @@ static struct omap_hwmod omap44xx_mcbsp3_hwmod = { ...@@ -3162,6 +3181,8 @@ static struct omap_hwmod omap44xx_mcbsp3_hwmod = {
}, },
.slaves = omap44xx_mcbsp3_slaves, .slaves = omap44xx_mcbsp3_slaves,
.slaves_cnt = ARRAY_SIZE(omap44xx_mcbsp3_slaves), .slaves_cnt = ARRAY_SIZE(omap44xx_mcbsp3_slaves),
.opt_clks = mcbsp3_opt_clks,
.opt_clks_cnt = ARRAY_SIZE(mcbsp3_opt_clks),
}; };
/* mcbsp4 */ /* mcbsp4 */
...@@ -3200,6 +3221,11 @@ static struct omap_hwmod_ocp_if *omap44xx_mcbsp4_slaves[] = { ...@@ -3200,6 +3221,11 @@ static struct omap_hwmod_ocp_if *omap44xx_mcbsp4_slaves[] = {
&omap44xx_l4_per__mcbsp4, &omap44xx_l4_per__mcbsp4,
}; };
static struct omap_hwmod_opt_clk mcbsp4_opt_clks[] = {
{ .role = "pad_fck", .clk = "pad_clks_ck" },
{ .role = "prcm_clk", .clk = "mcbsp4_sync_mux_ck" },
};
static struct omap_hwmod omap44xx_mcbsp4_hwmod = { static struct omap_hwmod omap44xx_mcbsp4_hwmod = {
.name = "mcbsp4", .name = "mcbsp4",
.class = &omap44xx_mcbsp_hwmod_class, .class = &omap44xx_mcbsp_hwmod_class,
...@@ -3216,6 +3242,8 @@ static struct omap_hwmod omap44xx_mcbsp4_hwmod = { ...@@ -3216,6 +3242,8 @@ static struct omap_hwmod omap44xx_mcbsp4_hwmod = {
}, },
.slaves = omap44xx_mcbsp4_slaves, .slaves = omap44xx_mcbsp4_slaves,
.slaves_cnt = ARRAY_SIZE(omap44xx_mcbsp4_slaves), .slaves_cnt = ARRAY_SIZE(omap44xx_mcbsp4_slaves),
.opt_clks = mcbsp4_opt_clks,
.opt_clks_cnt = ARRAY_SIZE(mcbsp4_opt_clks),
}; };
/* /*
......
...@@ -64,10 +64,10 @@ int __init omap_init_opp_table(struct omap_opp_def *opp_def, ...@@ -64,10 +64,10 @@ int __init omap_init_opp_table(struct omap_opp_def *opp_def,
} }
oh = omap_hwmod_lookup(opp_def->hwmod_name); oh = omap_hwmod_lookup(opp_def->hwmod_name);
if (!oh || !oh->od) { if (!oh || !oh->od) {
pr_warn("%s: no hwmod or odev for %s, [%d] " pr_debug("%s: no hwmod or odev for %s, [%d] "
"cannot add OPPs.\n", __func__, "cannot add OPPs.\n", __func__,
opp_def->hwmod_name, i); opp_def->hwmod_name, i);
return -EINVAL; continue;
} }
dev = &oh->od->pdev->dev; dev = &oh->od->pdev->dev;
......
...@@ -153,8 +153,7 @@ static void omap3_save_secure_ram_context(void) ...@@ -153,8 +153,7 @@ static void omap3_save_secure_ram_context(void)
pwrdm_set_next_pwrst(mpu_pwrdm, mpu_next_state); pwrdm_set_next_pwrst(mpu_pwrdm, mpu_next_state);
/* Following is for error tracking, it should not happen */ /* Following is for error tracking, it should not happen */
if (ret) { if (ret) {
printk(KERN_ERR "save_secure_sram() returns %08x\n", pr_err("save_secure_sram() returns %08x\n", ret);
ret);
while (1) while (1)
; ;
} }
...@@ -289,7 +288,7 @@ void omap_sram_idle(void) ...@@ -289,7 +288,7 @@ void omap_sram_idle(void)
break; break;
default: default:
/* Invalid state */ /* Invalid state */
printk(KERN_ERR "Invalid mpu state in sram_idle\n"); pr_err("Invalid mpu state in sram_idle\n");
return; return;
} }
...@@ -439,18 +438,17 @@ static int omap3_pm_suspend(void) ...@@ -439,18 +438,17 @@ static int omap3_pm_suspend(void)
list_for_each_entry(pwrst, &pwrst_list, node) { list_for_each_entry(pwrst, &pwrst_list, node) {
state = pwrdm_read_prev_pwrst(pwrst->pwrdm); state = pwrdm_read_prev_pwrst(pwrst->pwrdm);
if (state > pwrst->next_state) { if (state > pwrst->next_state) {
printk(KERN_INFO "Powerdomain (%s) didn't enter " pr_info("Powerdomain (%s) didn't enter "
"target state %d\n", "target state %d\n",
pwrst->pwrdm->name, pwrst->next_state); pwrst->pwrdm->name, pwrst->next_state);
ret = -1; ret = -1;
} }
omap_set_pwrdm_state(pwrst->pwrdm, pwrst->saved_state); omap_set_pwrdm_state(pwrst->pwrdm, pwrst->saved_state);
} }
if (ret) if (ret)
printk(KERN_ERR "Could not enter target state in pm_suspend\n"); pr_err("Could not enter target state in pm_suspend\n");
else else
printk(KERN_INFO "Successfully put all powerdomains " pr_info("Successfully put all powerdomains to target state\n");
"to target state\n");
return ret; return ret;
} }
...@@ -734,21 +732,22 @@ static int __init omap3_pm_init(void) ...@@ -734,21 +732,22 @@ static int __init omap3_pm_init(void)
if (ret) { if (ret) {
pr_err("pm: Failed to request pm_io irq\n"); pr_err("pm: Failed to request pm_io irq\n");
goto err1; goto err2;
} }
ret = pwrdm_for_each(pwrdms_setup, NULL); ret = pwrdm_for_each(pwrdms_setup, NULL);
if (ret) { if (ret) {
printk(KERN_ERR "Failed to setup powerdomains\n"); pr_err("Failed to setup powerdomains\n");
goto err2; goto err3;
} }
(void) clkdm_for_each(omap_pm_clkdms_setup, NULL); (void) clkdm_for_each(omap_pm_clkdms_setup, NULL);
mpu_pwrdm = pwrdm_lookup("mpu_pwrdm"); mpu_pwrdm = pwrdm_lookup("mpu_pwrdm");
if (mpu_pwrdm == NULL) { if (mpu_pwrdm == NULL) {
printk(KERN_ERR "Failed to get mpu_pwrdm\n"); pr_err("Failed to get mpu_pwrdm\n");
goto err2; ret = -EINVAL;
goto err3;
} }
neon_pwrdm = pwrdm_lookup("neon_pwrdm"); neon_pwrdm = pwrdm_lookup("neon_pwrdm");
...@@ -781,8 +780,8 @@ static int __init omap3_pm_init(void) ...@@ -781,8 +780,8 @@ static int __init omap3_pm_init(void)
omap3_secure_ram_storage = omap3_secure_ram_storage =
kmalloc(0x803F, GFP_KERNEL); kmalloc(0x803F, GFP_KERNEL);
if (!omap3_secure_ram_storage) if (!omap3_secure_ram_storage)
printk(KERN_ERR "Memory allocation failed when" pr_err("Memory allocation failed when "
"allocating for secure sram context\n"); "allocating for secure sram context\n");
local_irq_disable(); local_irq_disable();
local_fiq_disable(); local_fiq_disable();
...@@ -796,14 +795,17 @@ static int __init omap3_pm_init(void) ...@@ -796,14 +795,17 @@ static int __init omap3_pm_init(void)
} }
omap3_save_scratchpad_contents(); omap3_save_scratchpad_contents();
err1:
return ret; return ret;
err2:
free_irq(INT_34XX_PRCM_MPU_IRQ, NULL); err3:
list_for_each_entry_safe(pwrst, tmp, &pwrst_list, node) { list_for_each_entry_safe(pwrst, tmp, &pwrst_list, node) {
list_del(&pwrst->node); list_del(&pwrst->node);
kfree(pwrst); kfree(pwrst);
} }
free_irq(omap_prcm_event_to_irq("io"), omap3_pm_init);
err2:
free_irq(omap_prcm_event_to_irq("wkup"), NULL);
err1:
return ret; return ret;
} }
......
...@@ -144,7 +144,7 @@ static void omap_default_idle(void) ...@@ -144,7 +144,7 @@ static void omap_default_idle(void)
static int __init omap4_pm_init(void) static int __init omap4_pm_init(void)
{ {
int ret; int ret;
struct clockdomain *emif_clkdm, *mpuss_clkdm, *l3_1_clkdm; struct clockdomain *emif_clkdm, *mpuss_clkdm, *l3_1_clkdm, *l4wkup;
struct clockdomain *ducati_clkdm, *l3_2_clkdm, *l4_per_clkdm; struct clockdomain *ducati_clkdm, *l3_2_clkdm, *l4_per_clkdm;
if (!cpu_is_omap44xx()) if (!cpu_is_omap44xx())
...@@ -168,14 +168,19 @@ static int __init omap4_pm_init(void) ...@@ -168,14 +168,19 @@ static int __init omap4_pm_init(void)
* MPUSS -> L4_PER/L3_* and DUCATI -> L3_* doesn't work as * MPUSS -> L4_PER/L3_* and DUCATI -> L3_* doesn't work as
* expected. The hardware recommendation is to enable static * expected. The hardware recommendation is to enable static
* dependencies for these to avoid system lock ups or random crashes. * dependencies for these to avoid system lock ups or random crashes.
* The L4 wakeup depedency is added to workaround the OCP sync hardware
* BUG with 32K synctimer which lead to incorrect timer value read
* from the 32K counter. The BUG applies for GPTIMER1 and WDT2 which
* are part of L4 wakeup clockdomain.
*/ */
mpuss_clkdm = clkdm_lookup("mpuss_clkdm"); mpuss_clkdm = clkdm_lookup("mpuss_clkdm");
emif_clkdm = clkdm_lookup("l3_emif_clkdm"); emif_clkdm = clkdm_lookup("l3_emif_clkdm");
l3_1_clkdm = clkdm_lookup("l3_1_clkdm"); l3_1_clkdm = clkdm_lookup("l3_1_clkdm");
l3_2_clkdm = clkdm_lookup("l3_2_clkdm"); l3_2_clkdm = clkdm_lookup("l3_2_clkdm");
l4_per_clkdm = clkdm_lookup("l4_per_clkdm"); l4_per_clkdm = clkdm_lookup("l4_per_clkdm");
l4wkup = clkdm_lookup("l4_wkup_clkdm");
ducati_clkdm = clkdm_lookup("ducati_clkdm"); ducati_clkdm = clkdm_lookup("ducati_clkdm");
if ((!mpuss_clkdm) || (!emif_clkdm) || (!l3_1_clkdm) || if ((!mpuss_clkdm) || (!emif_clkdm) || (!l3_1_clkdm) || (!l4wkup) ||
(!l3_2_clkdm) || (!ducati_clkdm) || (!l4_per_clkdm)) (!l3_2_clkdm) || (!ducati_clkdm) || (!l4_per_clkdm))
goto err2; goto err2;
...@@ -183,6 +188,7 @@ static int __init omap4_pm_init(void) ...@@ -183,6 +188,7 @@ static int __init omap4_pm_init(void)
ret |= clkdm_add_wkdep(mpuss_clkdm, l3_1_clkdm); ret |= clkdm_add_wkdep(mpuss_clkdm, l3_1_clkdm);
ret |= clkdm_add_wkdep(mpuss_clkdm, l3_2_clkdm); ret |= clkdm_add_wkdep(mpuss_clkdm, l3_2_clkdm);
ret |= clkdm_add_wkdep(mpuss_clkdm, l4_per_clkdm); ret |= clkdm_add_wkdep(mpuss_clkdm, l4_per_clkdm);
ret |= clkdm_add_wkdep(mpuss_clkdm, l4wkup);
ret |= clkdm_add_wkdep(ducati_clkdm, l3_1_clkdm); ret |= clkdm_add_wkdep(ducati_clkdm, l3_1_clkdm);
ret |= clkdm_add_wkdep(ducati_clkdm, l3_2_clkdm); ret |= clkdm_add_wkdep(ducati_clkdm, l3_2_clkdm);
if (ret) { if (ret) {
......
...@@ -972,7 +972,13 @@ int pwrdm_wait_transition(struct powerdomain *pwrdm) ...@@ -972,7 +972,13 @@ int pwrdm_wait_transition(struct powerdomain *pwrdm)
int pwrdm_state_switch(struct powerdomain *pwrdm) int pwrdm_state_switch(struct powerdomain *pwrdm)
{ {
return _pwrdm_state_switch(pwrdm, PWRDM_STATE_NOW); int ret;
ret = pwrdm_wait_transition(pwrdm);
if (!ret)
ret = _pwrdm_state_switch(pwrdm, PWRDM_STATE_NOW);
return ret;
} }
int pwrdm_clkdm_state_switch(struct clockdomain *clkdm) int pwrdm_clkdm_state_switch(struct clockdomain *clkdm)
......
...@@ -147,8 +147,9 @@ static inline u32 _read_pending_irq_reg(u16 irqen_offs, u16 irqst_offs) ...@@ -147,8 +147,9 @@ static inline u32 _read_pending_irq_reg(u16 irqen_offs, u16 irqst_offs)
u32 mask, st; u32 mask, st;
/* XXX read mask from RAM? */ /* XXX read mask from RAM? */
mask = omap4_prm_read_inst_reg(OMAP4430_PRM_DEVICE_INST, irqen_offs); mask = omap4_prm_read_inst_reg(OMAP4430_PRM_OCP_SOCKET_INST,
st = omap4_prm_read_inst_reg(OMAP4430_PRM_DEVICE_INST, irqst_offs); irqen_offs);
st = omap4_prm_read_inst_reg(OMAP4430_PRM_OCP_SOCKET_INST, irqst_offs);
return mask & st; return mask & st;
} }
...@@ -180,7 +181,7 @@ void omap44xx_prm_read_pending_irqs(unsigned long *events) ...@@ -180,7 +181,7 @@ void omap44xx_prm_read_pending_irqs(unsigned long *events)
*/ */
void omap44xx_prm_ocp_barrier(void) void omap44xx_prm_ocp_barrier(void)
{ {
omap4_prm_read_inst_reg(OMAP4430_PRM_DEVICE_INST, omap4_prm_read_inst_reg(OMAP4430_PRM_OCP_SOCKET_INST,
OMAP4_REVISION_PRM_OFFSET); OMAP4_REVISION_PRM_OFFSET);
} }
...@@ -198,19 +199,19 @@ void omap44xx_prm_ocp_barrier(void) ...@@ -198,19 +199,19 @@ void omap44xx_prm_ocp_barrier(void)
void omap44xx_prm_save_and_clear_irqen(u32 *saved_mask) void omap44xx_prm_save_and_clear_irqen(u32 *saved_mask)
{ {
saved_mask[0] = saved_mask[0] =
omap4_prm_read_inst_reg(OMAP4430_PRM_DEVICE_INST, omap4_prm_read_inst_reg(OMAP4430_PRM_OCP_SOCKET_INST,
OMAP4_PRM_IRQSTATUS_MPU_OFFSET); OMAP4_PRM_IRQSTATUS_MPU_OFFSET);
saved_mask[1] = saved_mask[1] =
omap4_prm_read_inst_reg(OMAP4430_PRM_DEVICE_INST, omap4_prm_read_inst_reg(OMAP4430_PRM_OCP_SOCKET_INST,
OMAP4_PRM_IRQSTATUS_MPU_2_OFFSET); OMAP4_PRM_IRQSTATUS_MPU_2_OFFSET);
omap4_prm_write_inst_reg(0, OMAP4430_PRM_DEVICE_INST, omap4_prm_write_inst_reg(0, OMAP4430_PRM_OCP_SOCKET_INST,
OMAP4_PRM_IRQENABLE_MPU_OFFSET); OMAP4_PRM_IRQENABLE_MPU_OFFSET);
omap4_prm_write_inst_reg(0, OMAP4430_PRM_DEVICE_INST, omap4_prm_write_inst_reg(0, OMAP4430_PRM_OCP_SOCKET_INST,
OMAP4_PRM_IRQENABLE_MPU_2_OFFSET); OMAP4_PRM_IRQENABLE_MPU_2_OFFSET);
/* OCP barrier */ /* OCP barrier */
omap4_prm_read_inst_reg(OMAP4430_PRM_DEVICE_INST, omap4_prm_read_inst_reg(OMAP4430_PRM_OCP_SOCKET_INST,
OMAP4_REVISION_PRM_OFFSET); OMAP4_REVISION_PRM_OFFSET);
} }
...@@ -226,9 +227,9 @@ void omap44xx_prm_save_and_clear_irqen(u32 *saved_mask) ...@@ -226,9 +227,9 @@ void omap44xx_prm_save_and_clear_irqen(u32 *saved_mask)
*/ */
void omap44xx_prm_restore_irqen(u32 *saved_mask) void omap44xx_prm_restore_irqen(u32 *saved_mask)
{ {
omap4_prm_write_inst_reg(saved_mask[0], OMAP4430_PRM_DEVICE_INST, omap4_prm_write_inst_reg(saved_mask[0], OMAP4430_PRM_OCP_SOCKET_INST,
OMAP4_PRM_IRQENABLE_MPU_OFFSET); OMAP4_PRM_IRQENABLE_MPU_OFFSET);
omap4_prm_write_inst_reg(saved_mask[1], OMAP4430_PRM_DEVICE_INST, omap4_prm_write_inst_reg(saved_mask[1], OMAP4430_PRM_OCP_SOCKET_INST,
OMAP4_PRM_IRQENABLE_MPU_2_OFFSET); OMAP4_PRM_IRQENABLE_MPU_2_OFFSET);
} }
......
...@@ -290,7 +290,7 @@ int omap_prcm_register_chain_handler(struct omap_prcm_irq_setup *irq_setup) ...@@ -290,7 +290,7 @@ int omap_prcm_register_chain_handler(struct omap_prcm_irq_setup *irq_setup)
goto err; goto err;
} }
for (i = 0; i <= irq_setup->nr_regs; i++) { for (i = 0; i < irq_setup->nr_regs; i++) {
gc = irq_alloc_generic_chip("PRCM", 1, gc = irq_alloc_generic_chip("PRCM", 1,
irq_setup->base_irq + i * 32, prm_base, irq_setup->base_irq + i * 32, prm_base,
handle_level_irq); handle_level_irq);
......
...@@ -54,7 +54,7 @@ static struct omap_device_pm_latency omap_uhhtll_latency[] = { ...@@ -54,7 +54,7 @@ static struct omap_device_pm_latency omap_uhhtll_latency[] = {
/* /*
* setup_ehci_io_mux - initialize IO pad mux for USBHOST * setup_ehci_io_mux - initialize IO pad mux for USBHOST
*/ */
static void setup_ehci_io_mux(const enum usbhs_omap_port_mode *port_mode) static void __init setup_ehci_io_mux(const enum usbhs_omap_port_mode *port_mode)
{ {
switch (port_mode[0]) { switch (port_mode[0]) {
case OMAP_EHCI_PORT_MODE_PHY: case OMAP_EHCI_PORT_MODE_PHY:
...@@ -197,7 +197,8 @@ static void setup_ehci_io_mux(const enum usbhs_omap_port_mode *port_mode) ...@@ -197,7 +197,8 @@ static void setup_ehci_io_mux(const enum usbhs_omap_port_mode *port_mode)
return; return;
} }
static void setup_4430ehci_io_mux(const enum usbhs_omap_port_mode *port_mode) static
void __init setup_4430ehci_io_mux(const enum usbhs_omap_port_mode *port_mode)
{ {
switch (port_mode[0]) { switch (port_mode[0]) {
case OMAP_EHCI_PORT_MODE_PHY: case OMAP_EHCI_PORT_MODE_PHY:
...@@ -315,7 +316,7 @@ static void setup_4430ehci_io_mux(const enum usbhs_omap_port_mode *port_mode) ...@@ -315,7 +316,7 @@ static void setup_4430ehci_io_mux(const enum usbhs_omap_port_mode *port_mode)
} }
} }
static void setup_ohci_io_mux(const enum usbhs_omap_port_mode *port_mode) static void __init setup_ohci_io_mux(const enum usbhs_omap_port_mode *port_mode)
{ {
switch (port_mode[0]) { switch (port_mode[0]) {
case OMAP_OHCI_PORT_MODE_PHY_6PIN_DATSE0: case OMAP_OHCI_PORT_MODE_PHY_6PIN_DATSE0:
...@@ -412,7 +413,8 @@ static void setup_ohci_io_mux(const enum usbhs_omap_port_mode *port_mode) ...@@ -412,7 +413,8 @@ static void setup_ohci_io_mux(const enum usbhs_omap_port_mode *port_mode)
} }
} }
static void setup_4430ohci_io_mux(const enum usbhs_omap_port_mode *port_mode) static
void __init setup_4430ohci_io_mux(const enum usbhs_omap_port_mode *port_mode)
{ {
switch (port_mode[0]) { switch (port_mode[0]) {
case OMAP_OHCI_PORT_MODE_PHY_6PIN_DATSE0: case OMAP_OHCI_PORT_MODE_PHY_6PIN_DATSE0:
......
...@@ -113,6 +113,7 @@ config MACH_ARMCORE ...@@ -113,6 +113,7 @@ config MACH_ARMCORE
select IWMMXT select IWMMXT
select PXA25x select PXA25x
select MIGHT_HAVE_PCI select MIGHT_HAVE_PCI
select NEED_MACH_IO_H if PCI
config MACH_EM_X270 config MACH_EM_X270
bool "CompuLab EM-x270 platform" bool "CompuLab EM-x270 platform"
......
/*
* arch/arm/mach-pxa/include/mach/io.h
*
* Copied from asm/arch/sa1100/io.h
*/
#ifndef __ASM_ARM_ARCH_IO_H
#define __ASM_ARM_ARCH_IO_H
#define IO_SPACE_LIMIT 0xffffffff
/*
* We don't actually have real ISA nor PCI buses, but there is so many
* drivers out there that might just work if we fake them...
*/
#define __io(a) __typesafe_io(a)
#endif
/* /*
* Copyright (C) 2004-2006 Atmel Corporation * Copyright (c) 2012 Samsung Electronics Co., Ltd.
* http://www.samsung.com
*
* Common Header for S3C24XX SoCs
* *
* This program is free software; you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation. * published by the Free Software Foundation.
*/ */
#ifndef __ASM_AVR32_SPECIAL_INSNS_H
#define __ASM_AVR32_SPECIAL_INSNS_H
#define nop() asm volatile("nop") #ifndef __ARCH_ARM_MACH_S3C24XX_COMMON_H
#define __ARCH_ARM_MACH_S3C24XX_COMMON_H __FILE__
void s3c2410_restart(char mode, const char *cmd);
void s3c244x_restart(char mode, const char *cmd);
#endif /* __ASM_AVR32_SPECIAL_INSNS_H */ #endif /* __ARCH_ARM_MACH_S3C24XX_COMMON_H */
...@@ -313,6 +313,10 @@ static struct sa1100fb_mach_info collie_lcd_info = { ...@@ -313,6 +313,10 @@ static struct sa1100fb_mach_info collie_lcd_info = {
.lccr0 = LCCR0_Color | LCCR0_Sngl | LCCR0_Act, .lccr0 = LCCR0_Color | LCCR0_Sngl | LCCR0_Act,
.lccr3 = LCCR3_OutEnH | LCCR3_PixRsEdg | LCCR3_ACBsDiv(2), .lccr3 = LCCR3_OutEnH | LCCR3_PixRsEdg | LCCR3_ACBsDiv(2),
#ifdef CONFIG_BACKLIGHT_LOCOMO
.lcd_power = locomolcd_power
#endif
}; };
static void __init collie_init(void) static void __init collie_init(void)
......
/* /*
* arch/arm/mach-sa1100/include/mach/collie.h * arch/arm/mach-sa1100/include/mach/collie.h
* *
* This file contains the hardware specific definitions for Assabet * This file contains the hardware specific definitions for Collie
* Only include this file from SA1100-specific files. * Only include this file from SA1100-specific files.
* *
* ChangeLog: * ChangeLog:
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#ifndef __ASM_ARCH_COLLIE_H #ifndef __ASM_ARCH_COLLIE_H
#define __ASM_ARCH_COLLIE_H #define __ASM_ARCH_COLLIE_H
extern void locomolcd_power(int on);
#define COLLIE_SCOOP_GPIO_BASE (GPIO_MAX + 1) #define COLLIE_SCOOP_GPIO_BASE (GPIO_MAX + 1)
#define COLLIE_GPIO_CHARGE_ON (COLLIE_SCOOP_GPIO_BASE + 0) #define COLLIE_GPIO_CHARGE_ON (COLLIE_SCOOP_GPIO_BASE + 0)
......
...@@ -190,7 +190,7 @@ static struct resource pre_mem = { ...@@ -190,7 +190,7 @@ static struct resource pre_mem = {
.flags = IORESOURCE_MEM | IORESOURCE_PREFETCH, .flags = IORESOURCE_MEM | IORESOURCE_PREFETCH,
}; };
static int __init pci_versatile_setup_resources(struct list_head *resources) static int __init pci_versatile_setup_resources(struct pci_sys_data *sys)
{ {
int ret = 0; int ret = 0;
...@@ -218,9 +218,9 @@ static int __init pci_versatile_setup_resources(struct list_head *resources) ...@@ -218,9 +218,9 @@ static int __init pci_versatile_setup_resources(struct list_head *resources)
* the mem resource for this bus * the mem resource for this bus
* the prefetch mem resource for this bus * the prefetch mem resource for this bus
*/ */
pci_add_resource_offset(resources, &io_mem, sys->io_offset); pci_add_resource_offset(&sys->resources, &io_mem, sys->io_offset);
pci_add_resource_offset(resources, &non_mem, sys->mem_offset); pci_add_resource_offset(&sys->resources, &non_mem, sys->mem_offset);
pci_add_resource_offset(resources, &pre_mem, sys->mem_offset); pci_add_resource_offset(&sys->resources, &pre_mem, sys->mem_offset);
goto out; goto out;
...@@ -249,7 +249,7 @@ int __init pci_versatile_setup(int nr, struct pci_sys_data *sys) ...@@ -249,7 +249,7 @@ int __init pci_versatile_setup(int nr, struct pci_sys_data *sys)
if (nr == 0) { if (nr == 0) {
sys->mem_offset = 0; sys->mem_offset = 0;
ret = pci_versatile_setup_resources(&sys->resources); ret = pci_versatile_setup_resources(sys);
if (ret < 0) { if (ret < 0) {
printk("pci_versatile_setup: resources... oops?\n"); printk("pci_versatile_setup: resources... oops?\n");
goto out; goto out;
......
...@@ -80,7 +80,7 @@ static struct smsc911x_platform_config smsc911x_config = { ...@@ -80,7 +80,7 @@ static struct smsc911x_platform_config smsc911x_config = {
static struct platform_device smsc_lan9217_device = { static struct platform_device smsc_lan9217_device = {
.name = "smsc911x", .name = "smsc911x",
.id = 0, .id = -1,
.dev = { .dev = {
.platform_data = &smsc911x_config, .platform_data = &smsc911x_config,
}, },
......
...@@ -17,6 +17,7 @@ config ARCH_OMAP1 ...@@ -17,6 +17,7 @@ config ARCH_OMAP1
select IRQ_DOMAIN select IRQ_DOMAIN
select HAVE_IDE select HAVE_IDE
select NEED_MACH_MEMORY_H select NEED_MACH_MEMORY_H
select NEED_MACH_IO_H if PCCARD
help help
"Systems based on omap7xx, omap15xx or omap16xx" "Systems based on omap7xx, omap15xx or omap16xx"
......
...@@ -441,6 +441,8 @@ static int __init clk_disable_unused(void) ...@@ -441,6 +441,8 @@ static int __init clk_disable_unused(void)
return 0; return 0;
pr_info("clock: disabling unused clocks to save power\n"); pr_info("clock: disabling unused clocks to save power\n");
spin_lock_irqsave(&clockfw_lock, flags);
list_for_each_entry(ck, &clocks, node) { list_for_each_entry(ck, &clocks, node) {
if (ck->ops == &clkops_null) if (ck->ops == &clkops_null)
continue; continue;
...@@ -448,10 +450,9 @@ static int __init clk_disable_unused(void) ...@@ -448,10 +450,9 @@ static int __init clk_disable_unused(void)
if (ck->usecount > 0 || !ck->enable_reg) if (ck->usecount > 0 || !ck->enable_reg)
continue; continue;
spin_lock_irqsave(&clockfw_lock, flags);
arch_clock->clk_disable_unused(ck); arch_clock->clk_disable_unused(ck);
spin_unlock_irqrestore(&clockfw_lock, flags);
} }
spin_unlock_irqrestore(&clockfw_lock, flags);
return 0; return 0;
} }
......
...@@ -47,17 +47,17 @@ extern struct omap_hwmod_sysc_fields omap_hwmod_sysc_type2; ...@@ -47,17 +47,17 @@ extern struct omap_hwmod_sysc_fields omap_hwmod_sysc_type2;
* with the original PRCM protocol defined for OMAP2420 * with the original PRCM protocol defined for OMAP2420
*/ */
#define SYSC_TYPE1_MIDLEMODE_SHIFT 12 #define SYSC_TYPE1_MIDLEMODE_SHIFT 12
#define SYSC_TYPE1_MIDLEMODE_MASK (0x3 << SYSC_MIDLEMODE_SHIFT) #define SYSC_TYPE1_MIDLEMODE_MASK (0x3 << SYSC_TYPE1_MIDLEMODE_SHIFT)
#define SYSC_TYPE1_CLOCKACTIVITY_SHIFT 8 #define SYSC_TYPE1_CLOCKACTIVITY_SHIFT 8
#define SYSC_TYPE1_CLOCKACTIVITY_MASK (0x3 << SYSC_CLOCKACTIVITY_SHIFT) #define SYSC_TYPE1_CLOCKACTIVITY_MASK (0x3 << SYSC_TYPE1_CLOCKACTIVITY_SHIFT)
#define SYSC_TYPE1_SIDLEMODE_SHIFT 3 #define SYSC_TYPE1_SIDLEMODE_SHIFT 3
#define SYSC_TYPE1_SIDLEMODE_MASK (0x3 << SYSC_SIDLEMODE_SHIFT) #define SYSC_TYPE1_SIDLEMODE_MASK (0x3 << SYSC_TYPE1_SIDLEMODE_SHIFT)
#define SYSC_TYPE1_ENAWAKEUP_SHIFT 2 #define SYSC_TYPE1_ENAWAKEUP_SHIFT 2
#define SYSC_TYPE1_ENAWAKEUP_MASK (1 << SYSC_ENAWAKEUP_SHIFT) #define SYSC_TYPE1_ENAWAKEUP_MASK (1 << SYSC_TYPE1_ENAWAKEUP_SHIFT)
#define SYSC_TYPE1_SOFTRESET_SHIFT 1 #define SYSC_TYPE1_SOFTRESET_SHIFT 1
#define SYSC_TYPE1_SOFTRESET_MASK (1 << SYSC_SOFTRESET_SHIFT) #define SYSC_TYPE1_SOFTRESET_MASK (1 << SYSC_TYPE1_SOFTRESET_SHIFT)
#define SYSC_TYPE1_AUTOIDLE_SHIFT 0 #define SYSC_TYPE1_AUTOIDLE_SHIFT 0
#define SYSC_TYPE1_AUTOIDLE_MASK (1 << SYSC_AUTOIDLE_SHIFT) #define SYSC_TYPE1_AUTOIDLE_MASK (1 << SYSC_TYPE1_AUTOIDLE_SHIFT)
/* /*
* OCP SYSCONFIG bit shifts/masks TYPE2. These are for IPs compliant * OCP SYSCONFIG bit shifts/masks TYPE2. These are for IPs compliant
......
...@@ -8,6 +8,8 @@ ...@@ -8,6 +8,8 @@
#ifndef __ASM_AVR32_BARRIER_H #ifndef __ASM_AVR32_BARRIER_H
#define __ASM_AVR32_BARRIER_H #define __ASM_AVR32_BARRIER_H
#define nop() asm volatile("nop")
#define mb() asm volatile("" : : : "memory") #define mb() asm volatile("" : : : "memory")
#define rmb() mb() #define rmb() mb()
#define wmb() asm volatile("sync 0" : : : "memory") #define wmb() asm volatile("sync 0" : : : "memory")
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
#include <linux/types.h> #include <linux/types.h>
#include <linux/serial.h> #include <linux/serial.h>
#include <linux/platform_data/macb.h> #include <linux/platform_data/macb.h>
#include <linux/platform_data/atmel_nand.h> #include <linux/platform_data/atmel.h>
#define GPIO_PIN_NONE (-1) #define GPIO_PIN_NONE (-1)
......
...@@ -823,7 +823,7 @@ config CACHELINE_ALIGNED_L1 ...@@ -823,7 +823,7 @@ config CACHELINE_ALIGNED_L1
bool "Locate cacheline_aligned data to L1 Data Memory" bool "Locate cacheline_aligned data to L1 Data Memory"
default y if !BF54x default y if !BF54x
default n if BF54x default n if BF54x
depends on !SMP && !BF531 depends on !SMP && !BF531 && !CRC32
help help
If enabled, cacheline_aligned data is linked If enabled, cacheline_aligned data is linked
into L1 data memory. (less latency) into L1 data memory. (less latency)
......
...@@ -147,6 +147,7 @@ CONFIG_USB_OTG_BLACKLIST_HUB=y ...@@ -147,6 +147,7 @@ CONFIG_USB_OTG_BLACKLIST_HUB=y
CONFIG_USB_MON=y CONFIG_USB_MON=y
CONFIG_USB_MUSB_HDRC=y CONFIG_USB_MUSB_HDRC=y
CONFIG_USB_MUSB_BLACKFIN=y CONFIG_USB_MUSB_BLACKFIN=y
CONFIG_MUSB_PIO_ONLY=y
CONFIG_USB_STORAGE=y CONFIG_USB_STORAGE=y
CONFIG_USB_GADGET=y CONFIG_USB_GADGET=y
CONFIG_RTC_CLASS=y CONFIG_RTC_CLASS=y
......
...@@ -122,7 +122,8 @@ static inline unsigned long __xchg(unsigned long x, volatile void *ptr, ...@@ -122,7 +122,8 @@ static inline unsigned long __xchg(unsigned long x, volatile void *ptr,
(unsigned long)(n), sizeof(*(ptr)))) (unsigned long)(n), sizeof(*(ptr))))
#define cmpxchg64_local(ptr, o, n) __cmpxchg64_local_generic((ptr), (o), (n)) #define cmpxchg64_local(ptr, o, n) __cmpxchg64_local_generic((ptr), (o), (n))
#include <asm-generic/cmpxchg.h> #define cmpxchg(ptr, o, n) cmpxchg_local((ptr), (o), (n))
#define cmpxchg64(ptr, o, n) cmpxchg64_local((ptr), (o), (n))
#endif /* !CONFIG_SMP */ #endif /* !CONFIG_SMP */
......
...@@ -244,16 +244,26 @@ static inline int gpio_set_debounce(unsigned gpio, unsigned debounce) ...@@ -244,16 +244,26 @@ static inline int gpio_set_debounce(unsigned gpio, unsigned debounce)
return -EINVAL; return -EINVAL;
} }
static inline int gpio_get_value(unsigned gpio) static inline int __gpio_get_value(unsigned gpio)
{ {
return bfin_gpio_get_value(gpio); return bfin_gpio_get_value(gpio);
} }
static inline void gpio_set_value(unsigned gpio, int value) static inline void __gpio_set_value(unsigned gpio, int value)
{ {
return bfin_gpio_set_value(gpio, value); return bfin_gpio_set_value(gpio, value);
} }
static inline int gpio_get_value(unsigned gpio)
{
return __gpio_get_value(gpio);
}
static inline void gpio_set_value(unsigned gpio, int value)
{
return __gpio_set_value(gpio, value);
}
static inline int gpio_to_irq(unsigned gpio) static inline int gpio_to_irq(unsigned gpio)
{ {
if (likely(gpio < MAX_BLACKFIN_GPIOS)) if (likely(gpio < MAX_BLACKFIN_GPIOS))
......
...@@ -85,10 +85,7 @@ asmlinkage int do_rt_sigreturn(struct pt_regs *regs) ...@@ -85,10 +85,7 @@ asmlinkage int do_rt_sigreturn(struct pt_regs *regs)
goto badframe; goto badframe;
sigdelsetmask(&set, ~_BLOCKABLE); sigdelsetmask(&set, ~_BLOCKABLE);
spin_lock_irq(&current->sighand->siglock); set_current_blocked(&set);
current->blocked = set;
recalc_sigpending();
spin_unlock_irq(&current->sighand->siglock);
if (restore_sigcontext(regs, &frame->uc.uc_mcontext)) if (restore_sigcontext(regs, &frame->uc.uc_mcontext))
goto badframe; goto badframe;
...@@ -279,15 +276,8 @@ static int handle_signal(int sig, ...@@ -279,15 +276,8 @@ static int handle_signal(int sig,
/* Set up the stack frame */ /* Set up the stack frame */
ret = setup_rt_frame(sig, ka, info, oldset, regs); ret = setup_rt_frame(sig, ka, info, oldset, regs);
if (ret == 0) { if (ret == 0)
spin_lock_irq(&current->sighand->siglock); block_sigmask(ka, sig);
sigorsets(&current->blocked, &current->blocked,
&ka->sa.sa_mask);
if (!(ka->sa.sa_flags & SA_NODEFER))
sigaddset(&current->blocked, sig);
recalc_sigpending();
spin_unlock_irq(&current->sighand->siglock);
}
return ret; return ret;
} }
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include <linux/dma-mapping.h> #include <linux/dma-mapping.h>
#include <linux/list.h> #include <linux/list.h>
#include <linux/pci.h> #include <linux/pci.h>
#include <linux/export.h>
#include <linux/highmem.h> #include <linux/highmem.h>
#include <linux/scatterlist.h> #include <linux/scatterlist.h>
#include <asm/io.h> #include <asm/io.h>
......
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册