Merge branch 'linus' into x86/urgent
Merge in Linus's tree to avoid a conflict. Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
commit
d431adfbc9
567 changed files with 11589 additions and 6284 deletions
|
@ -142,13 +142,14 @@ KernelVersion: 3.4
|
||||||
Contact: linux-mtd@lists.infradead.org
|
Contact: linux-mtd@lists.infradead.org
|
||||||
Description:
|
Description:
|
||||||
This allows the user to examine and adjust the criteria by which
|
This allows the user to examine and adjust the criteria by which
|
||||||
mtd returns -EUCLEAN from mtd_read(). If the maximum number of
|
mtd returns -EUCLEAN from mtd_read() and mtd_read_oob(). If the
|
||||||
bit errors that were corrected on any single region comprising
|
maximum number of bit errors that were corrected on any single
|
||||||
an ecc step (as reported by the driver) equals or exceeds this
|
region comprising an ecc step (as reported by the driver) equals
|
||||||
value, -EUCLEAN is returned. Otherwise, absent an error, 0 is
|
or exceeds this value, -EUCLEAN is returned. Otherwise, absent
|
||||||
returned. Higher layers (e.g., UBI) use this return code as an
|
an error, 0 is returned. Higher layers (e.g., UBI) use this
|
||||||
indication that an erase block may be degrading and should be
|
return code as an indication that an erase block may be
|
||||||
scrutinized as a candidate for being marked as bad.
|
degrading and should be scrutinized as a candidate for being
|
||||||
|
marked as bad.
|
||||||
|
|
||||||
The initial value may be specified by the flash device driver.
|
The initial value may be specified by the flash device driver.
|
||||||
If not, then the default value is ecc_strength.
|
If not, then the default value is ecc_strength.
|
||||||
|
@ -167,7 +168,7 @@ Description:
|
||||||
block degradation, but high enough to avoid the consequences of
|
block degradation, but high enough to avoid the consequences of
|
||||||
a persistent return value of -EUCLEAN on devices where sticky
|
a persistent return value of -EUCLEAN on devices where sticky
|
||||||
bitflips occur. Note that if bitflip_threshold exceeds
|
bitflips occur. Note that if bitflip_threshold exceeds
|
||||||
ecc_strength, -EUCLEAN is never returned by mtd_read().
|
ecc_strength, -EUCLEAN is never returned by the read operations.
|
||||||
Conversely, if bitflip_threshold is zero, -EUCLEAN is always
|
Conversely, if bitflip_threshold is zero, -EUCLEAN is always
|
||||||
returned, absent a hard error.
|
returned, absent a hard error.
|
||||||
|
|
||||||
|
|
|
@ -3988,7 +3988,7 @@ interface and may change in the future.</para>
|
||||||
from RGB to Y'CbCr color space.
|
from RGB to Y'CbCr color space.
|
||||||
</entry>
|
</entry>
|
||||||
</row>
|
</row>
|
||||||
<row id = "v4l2-jpeg-chroma-subsampling">
|
<row>
|
||||||
<entrytbl spanname="descr" cols="2">
|
<entrytbl spanname="descr" cols="2">
|
||||||
<tbody valign="top">
|
<tbody valign="top">
|
||||||
<row>
|
<row>
|
||||||
|
|
|
@ -284,13 +284,6 @@ These controls are described in <xref
|
||||||
processing controls. These controls are described in <xref
|
processing controls. These controls are described in <xref
|
||||||
linkend="image-process-controls" />.</entry>
|
linkend="image-process-controls" />.</entry>
|
||||||
</row>
|
</row>
|
||||||
<row>
|
|
||||||
<entry><constant>V4L2_CTRL_CLASS_JPEG</constant></entry>
|
|
||||||
<entry>0x9d0000</entry>
|
|
||||||
<entry>The class containing JPEG compression controls.
|
|
||||||
These controls are described in <xref
|
|
||||||
linkend="jpeg-controls" />.</entry>
|
|
||||||
</row>
|
|
||||||
</tbody>
|
</tbody>
|
||||||
</tgroup>
|
</tgroup>
|
||||||
</table>
|
</table>
|
||||||
|
|
|
@ -162,9 +162,9 @@ over a rather long period of time, but improvements are always welcome!
|
||||||
when publicizing a pointer to a structure that can
|
when publicizing a pointer to a structure that can
|
||||||
be traversed by an RCU read-side critical section.
|
be traversed by an RCU read-side critical section.
|
||||||
|
|
||||||
5. If call_rcu(), or a related primitive such as call_rcu_bh() or
|
5. If call_rcu(), or a related primitive such as call_rcu_bh(),
|
||||||
call_rcu_sched(), is used, the callback function must be
|
call_rcu_sched(), or call_srcu() is used, the callback function
|
||||||
written to be called from softirq context. In particular,
|
must be written to be called from softirq context. In particular,
|
||||||
it cannot block.
|
it cannot block.
|
||||||
|
|
||||||
6. Since synchronize_rcu() can block, it cannot be called from
|
6. Since synchronize_rcu() can block, it cannot be called from
|
||||||
|
@ -202,11 +202,12 @@ over a rather long period of time, but improvements are always welcome!
|
||||||
updater uses call_rcu_sched() or synchronize_sched(), then
|
updater uses call_rcu_sched() or synchronize_sched(), then
|
||||||
the corresponding readers must disable preemption, possibly
|
the corresponding readers must disable preemption, possibly
|
||||||
by calling rcu_read_lock_sched() and rcu_read_unlock_sched().
|
by calling rcu_read_lock_sched() and rcu_read_unlock_sched().
|
||||||
If the updater uses synchronize_srcu(), the the corresponding
|
If the updater uses synchronize_srcu() or call_srcu(),
|
||||||
readers must use srcu_read_lock() and srcu_read_unlock(),
|
the the corresponding readers must use srcu_read_lock() and
|
||||||
and with the same srcu_struct. The rules for the expedited
|
srcu_read_unlock(), and with the same srcu_struct. The rules for
|
||||||
primitives are the same as for their non-expedited counterparts.
|
the expedited primitives are the same as for their non-expedited
|
||||||
Mixing things up will result in confusion and broken kernels.
|
counterparts. Mixing things up will result in confusion and
|
||||||
|
broken kernels.
|
||||||
|
|
||||||
One exception to this rule: rcu_read_lock() and rcu_read_unlock()
|
One exception to this rule: rcu_read_lock() and rcu_read_unlock()
|
||||||
may be substituted for rcu_read_lock_bh() and rcu_read_unlock_bh()
|
may be substituted for rcu_read_lock_bh() and rcu_read_unlock_bh()
|
||||||
|
@ -333,14 +334,14 @@ over a rather long period of time, but improvements are always welcome!
|
||||||
victim CPU from ever going offline.)
|
victim CPU from ever going offline.)
|
||||||
|
|
||||||
14. SRCU (srcu_read_lock(), srcu_read_unlock(), srcu_dereference(),
|
14. SRCU (srcu_read_lock(), srcu_read_unlock(), srcu_dereference(),
|
||||||
synchronize_srcu(), and synchronize_srcu_expedited()) may only
|
synchronize_srcu(), synchronize_srcu_expedited(), and call_srcu())
|
||||||
be invoked from process context. Unlike other forms of RCU, it
|
may only be invoked from process context. Unlike other forms of
|
||||||
-is- permissible to block in an SRCU read-side critical section
|
RCU, it -is- permissible to block in an SRCU read-side critical
|
||||||
(demarked by srcu_read_lock() and srcu_read_unlock()), hence the
|
section (demarked by srcu_read_lock() and srcu_read_unlock()),
|
||||||
"SRCU": "sleepable RCU". Please note that if you don't need
|
hence the "SRCU": "sleepable RCU". Please note that if you
|
||||||
to sleep in read-side critical sections, you should be using
|
don't need to sleep in read-side critical sections, you should be
|
||||||
RCU rather than SRCU, because RCU is almost always faster and
|
using RCU rather than SRCU, because RCU is almost always faster
|
||||||
easier to use than is SRCU.
|
and easier to use than is SRCU.
|
||||||
|
|
||||||
If you need to enter your read-side critical section in a
|
If you need to enter your read-side critical section in a
|
||||||
hardirq or exception handler, and then exit that same read-side
|
hardirq or exception handler, and then exit that same read-side
|
||||||
|
@ -353,8 +354,8 @@ over a rather long period of time, but improvements are always welcome!
|
||||||
cleanup_srcu_struct(). These are passed a "struct srcu_struct"
|
cleanup_srcu_struct(). These are passed a "struct srcu_struct"
|
||||||
that defines the scope of a given SRCU domain. Once initialized,
|
that defines the scope of a given SRCU domain. Once initialized,
|
||||||
the srcu_struct is passed to srcu_read_lock(), srcu_read_unlock()
|
the srcu_struct is passed to srcu_read_lock(), srcu_read_unlock()
|
||||||
synchronize_srcu(), and synchronize_srcu_expedited(). A given
|
synchronize_srcu(), synchronize_srcu_expedited(), and call_srcu().
|
||||||
synchronize_srcu() waits only for SRCU read-side critical
|
A given synchronize_srcu() waits only for SRCU read-side critical
|
||||||
sections governed by srcu_read_lock() and srcu_read_unlock()
|
sections governed by srcu_read_lock() and srcu_read_unlock()
|
||||||
calls that have been passed the same srcu_struct. This property
|
calls that have been passed the same srcu_struct. This property
|
||||||
is what makes sleeping read-side critical sections tolerable --
|
is what makes sleeping read-side critical sections tolerable --
|
||||||
|
@ -374,7 +375,7 @@ over a rather long period of time, but improvements are always welcome!
|
||||||
requiring SRCU's read-side deadlock immunity or low read-side
|
requiring SRCU's read-side deadlock immunity or low read-side
|
||||||
realtime latency.
|
realtime latency.
|
||||||
|
|
||||||
Note that, rcu_assign_pointer() relates to SRCU just as they do
|
Note that, rcu_assign_pointer() relates to SRCU just as it does
|
||||||
to other forms of RCU.
|
to other forms of RCU.
|
||||||
|
|
||||||
15. The whole point of call_rcu(), synchronize_rcu(), and friends
|
15. The whole point of call_rcu(), synchronize_rcu(), and friends
|
||||||
|
|
|
@ -79,8 +79,6 @@ complete. Pseudo-code using rcu_barrier() is as follows:
|
||||||
2. Execute rcu_barrier().
|
2. Execute rcu_barrier().
|
||||||
3. Allow the module to be unloaded.
|
3. Allow the module to be unloaded.
|
||||||
|
|
||||||
Quick Quiz #1: Why is there no srcu_barrier()?
|
|
||||||
|
|
||||||
The rcutorture module makes use of rcu_barrier in its exit function
|
The rcutorture module makes use of rcu_barrier in its exit function
|
||||||
as follows:
|
as follows:
|
||||||
|
|
||||||
|
@ -162,7 +160,7 @@ for any pre-existing callbacks to complete.
|
||||||
Then lines 55-62 print status and do operation-specific cleanup, and
|
Then lines 55-62 print status and do operation-specific cleanup, and
|
||||||
then return, permitting the module-unload operation to be completed.
|
then return, permitting the module-unload operation to be completed.
|
||||||
|
|
||||||
Quick Quiz #2: Is there any other situation where rcu_barrier() might
|
Quick Quiz #1: Is there any other situation where rcu_barrier() might
|
||||||
be required?
|
be required?
|
||||||
|
|
||||||
Your module might have additional complications. For example, if your
|
Your module might have additional complications. For example, if your
|
||||||
|
@ -242,7 +240,7 @@ reaches zero, as follows:
|
||||||
4 complete(&rcu_barrier_completion);
|
4 complete(&rcu_barrier_completion);
|
||||||
5 }
|
5 }
|
||||||
|
|
||||||
Quick Quiz #3: What happens if CPU 0's rcu_barrier_func() executes
|
Quick Quiz #2: What happens if CPU 0's rcu_barrier_func() executes
|
||||||
immediately (thus incrementing rcu_barrier_cpu_count to the
|
immediately (thus incrementing rcu_barrier_cpu_count to the
|
||||||
value one), but the other CPU's rcu_barrier_func() invocations
|
value one), but the other CPU's rcu_barrier_func() invocations
|
||||||
are delayed for a full grace period? Couldn't this result in
|
are delayed for a full grace period? Couldn't this result in
|
||||||
|
@ -259,12 +257,7 @@ so that your module may be safely unloaded.
|
||||||
|
|
||||||
Answers to Quick Quizzes
|
Answers to Quick Quizzes
|
||||||
|
|
||||||
Quick Quiz #1: Why is there no srcu_barrier()?
|
Quick Quiz #1: Is there any other situation where rcu_barrier() might
|
||||||
|
|
||||||
Answer: Since there is no call_srcu(), there can be no outstanding SRCU
|
|
||||||
callbacks. Therefore, there is no need to wait for them.
|
|
||||||
|
|
||||||
Quick Quiz #2: Is there any other situation where rcu_barrier() might
|
|
||||||
be required?
|
be required?
|
||||||
|
|
||||||
Answer: Interestingly enough, rcu_barrier() was not originally
|
Answer: Interestingly enough, rcu_barrier() was not originally
|
||||||
|
@ -278,7 +271,7 @@ Answer: Interestingly enough, rcu_barrier() was not originally
|
||||||
implementing rcutorture, and found that rcu_barrier() solves
|
implementing rcutorture, and found that rcu_barrier() solves
|
||||||
this problem as well.
|
this problem as well.
|
||||||
|
|
||||||
Quick Quiz #3: What happens if CPU 0's rcu_barrier_func() executes
|
Quick Quiz #2: What happens if CPU 0's rcu_barrier_func() executes
|
||||||
immediately (thus incrementing rcu_barrier_cpu_count to the
|
immediately (thus incrementing rcu_barrier_cpu_count to the
|
||||||
value one), but the other CPU's rcu_barrier_func() invocations
|
value one), but the other CPU's rcu_barrier_func() invocations
|
||||||
are delayed for a full grace period? Couldn't this result in
|
are delayed for a full grace period? Couldn't this result in
|
||||||
|
|
|
@ -174,11 +174,20 @@ torture_type The type of RCU to test, with string values as follows:
|
||||||
and synchronize_rcu_bh_expedited().
|
and synchronize_rcu_bh_expedited().
|
||||||
|
|
||||||
"srcu": srcu_read_lock(), srcu_read_unlock() and
|
"srcu": srcu_read_lock(), srcu_read_unlock() and
|
||||||
|
call_srcu().
|
||||||
|
|
||||||
|
"srcu_sync": srcu_read_lock(), srcu_read_unlock() and
|
||||||
synchronize_srcu().
|
synchronize_srcu().
|
||||||
|
|
||||||
"srcu_expedited": srcu_read_lock(), srcu_read_unlock() and
|
"srcu_expedited": srcu_read_lock(), srcu_read_unlock() and
|
||||||
synchronize_srcu_expedited().
|
synchronize_srcu_expedited().
|
||||||
|
|
||||||
|
"srcu_raw": srcu_read_lock_raw(), srcu_read_unlock_raw(),
|
||||||
|
and call_srcu().
|
||||||
|
|
||||||
|
"srcu_raw_sync": srcu_read_lock_raw(), srcu_read_unlock_raw(),
|
||||||
|
and synchronize_srcu().
|
||||||
|
|
||||||
"sched": preempt_disable(), preempt_enable(), and
|
"sched": preempt_disable(), preempt_enable(), and
|
||||||
call_rcu_sched().
|
call_rcu_sched().
|
||||||
|
|
||||||
|
|
|
@ -833,9 +833,9 @@ sched: Critical sections Grace period Barrier
|
||||||
|
|
||||||
SRCU: Critical sections Grace period Barrier
|
SRCU: Critical sections Grace period Barrier
|
||||||
|
|
||||||
srcu_read_lock synchronize_srcu N/A
|
srcu_read_lock synchronize_srcu srcu_barrier
|
||||||
srcu_read_unlock synchronize_srcu_expedited
|
srcu_read_unlock call_srcu
|
||||||
srcu_read_lock_raw
|
srcu_read_lock_raw synchronize_srcu_expedited
|
||||||
srcu_read_unlock_raw
|
srcu_read_unlock_raw
|
||||||
srcu_dereference
|
srcu_dereference
|
||||||
|
|
||||||
|
|
|
@ -1626,3 +1626,5 @@ MX6Q_PAD_SD2_DAT3__PCIE_CTRL_MUX_11 1587
|
||||||
MX6Q_PAD_SD2_DAT3__GPIO_1_12 1588
|
MX6Q_PAD_SD2_DAT3__GPIO_1_12 1588
|
||||||
MX6Q_PAD_SD2_DAT3__SJC_DONE 1589
|
MX6Q_PAD_SD2_DAT3__SJC_DONE 1589
|
||||||
MX6Q_PAD_SD2_DAT3__ANATOP_TESTO_3 1590
|
MX6Q_PAD_SD2_DAT3__ANATOP_TESTO_3 1590
|
||||||
|
MX6Q_PAD_ENET_RX_ER__ANATOP_USBOTG_ID 1591
|
||||||
|
MX6Q_PAD_GPIO_1__ANATOP_USBOTG_ID 1592
|
||||||
|
|
|
@ -86,7 +86,7 @@ There is also a gitweb interface available at
|
||||||
http://www.kernel.org/git/?p=utils/kernel/kexec/kexec-tools.git
|
http://www.kernel.org/git/?p=utils/kernel/kexec/kexec-tools.git
|
||||||
|
|
||||||
More information about kexec-tools can be found at
|
More information about kexec-tools can be found at
|
||||||
http://www.kernel.org/pub/linux/utils/kernel/kexec/README.html
|
http://horms.net/projects/kexec/
|
||||||
|
|
||||||
3) Unpack the tarball with the tar command, as follows:
|
3) Unpack the tarball with the tar command, as follows:
|
||||||
|
|
||||||
|
|
|
@ -2367,6 +2367,11 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
||||||
Set maximum number of finished RCU callbacks to process
|
Set maximum number of finished RCU callbacks to process
|
||||||
in one batch.
|
in one batch.
|
||||||
|
|
||||||
|
rcutree.fanout_leaf= [KNL,BOOT]
|
||||||
|
Increase the number of CPUs assigned to each
|
||||||
|
leaf rcu_node structure. Useful for very large
|
||||||
|
systems.
|
||||||
|
|
||||||
rcutree.qhimark= [KNL,BOOT]
|
rcutree.qhimark= [KNL,BOOT]
|
||||||
Set threshold of queued
|
Set threshold of queued
|
||||||
RCU callbacks over which batch limiting is disabled.
|
RCU callbacks over which batch limiting is disabled.
|
||||||
|
|
|
@ -3433,13 +3433,14 @@ S: Supported
|
||||||
F: drivers/idle/i7300_idle.c
|
F: drivers/idle/i7300_idle.c
|
||||||
|
|
||||||
IEEE 802.15.4 SUBSYSTEM
|
IEEE 802.15.4 SUBSYSTEM
|
||||||
|
M: Alexander Smirnov <alex.bluesman.smirnov@gmail.com>
|
||||||
M: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
|
M: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
|
||||||
M: Sergey Lapin <slapin@ossfans.org>
|
|
||||||
L: linux-zigbee-devel@lists.sourceforge.net (moderated for non-subscribers)
|
L: linux-zigbee-devel@lists.sourceforge.net (moderated for non-subscribers)
|
||||||
W: http://apps.sourceforge.net/trac/linux-zigbee
|
W: http://apps.sourceforge.net/trac/linux-zigbee
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/lowpan/lowpan.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/lowpan/lowpan.git
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: net/ieee802154/
|
F: net/ieee802154/
|
||||||
|
F: net/mac802154/
|
||||||
F: drivers/ieee802154/
|
F: drivers/ieee802154/
|
||||||
|
|
||||||
IIO SUBSYSTEM AND DRIVERS
|
IIO SUBSYSTEM AND DRIVERS
|
||||||
|
@ -4857,6 +4858,7 @@ M: Kevin Hilman <khilman@ti.com>
|
||||||
L: linux-omap@vger.kernel.org
|
L: linux-omap@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: arch/arm/*omap*/*pm*
|
F: arch/arm/*omap*/*pm*
|
||||||
|
F: drivers/cpufreq/omap-cpufreq.c
|
||||||
|
|
||||||
OMAP POWERDOMAIN/CLOCKDOMAIN SOC ADAPTATION LAYER SUPPORT
|
OMAP POWERDOMAIN/CLOCKDOMAIN SOC ADAPTATION LAYER SUPPORT
|
||||||
M: Rajendra Nayak <rnayak@ti.com>
|
M: Rajendra Nayak <rnayak@ti.com>
|
||||||
|
@ -5563,7 +5565,7 @@ F: Documentation/networking/LICENSE.qla3xxx
|
||||||
F: drivers/net/ethernet/qlogic/qla3xxx.*
|
F: drivers/net/ethernet/qlogic/qla3xxx.*
|
||||||
|
|
||||||
QLOGIC QLCNIC (1/10)Gb ETHERNET DRIVER
|
QLOGIC QLCNIC (1/10)Gb ETHERNET DRIVER
|
||||||
M: Anirban Chakraborty <anirban.chakraborty@qlogic.com>
|
M: Jitendra Kalsaria <jitendra.kalsaria@qlogic.com>
|
||||||
M: Sony Chacko <sony.chacko@qlogic.com>
|
M: Sony Chacko <sony.chacko@qlogic.com>
|
||||||
M: linux-driver@qlogic.com
|
M: linux-driver@qlogic.com
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
|
@ -5571,7 +5573,6 @@ S: Supported
|
||||||
F: drivers/net/ethernet/qlogic/qlcnic/
|
F: drivers/net/ethernet/qlogic/qlcnic/
|
||||||
|
|
||||||
QLOGIC QLGE 10Gb ETHERNET DRIVER
|
QLOGIC QLGE 10Gb ETHERNET DRIVER
|
||||||
M: Anirban Chakraborty <anirban.chakraborty@qlogic.com>
|
|
||||||
M: Jitendra Kalsaria <jitendra.kalsaria@qlogic.com>
|
M: Jitendra Kalsaria <jitendra.kalsaria@qlogic.com>
|
||||||
M: Ron Mercer <ron.mercer@qlogic.com>
|
M: Ron Mercer <ron.mercer@qlogic.com>
|
||||||
M: linux-driver@qlogic.com
|
M: linux-driver@qlogic.com
|
||||||
|
@ -5909,7 +5910,7 @@ M: Ingo Molnar <mingo@redhat.com>
|
||||||
M: Peter Zijlstra <peterz@infradead.org>
|
M: Peter Zijlstra <peterz@infradead.org>
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git sched/core
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git sched/core
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: kernel/sched*
|
F: kernel/sched/
|
||||||
F: include/linux/sched.h
|
F: include/linux/sched.h
|
||||||
|
|
||||||
SCORE ARCHITECTURE
|
SCORE ARCHITECTURE
|
||||||
|
|
2
Makefile
2
Makefile
|
@ -1,7 +1,7 @@
|
||||||
VERSION = 3
|
VERSION = 3
|
||||||
PATCHLEVEL = 5
|
PATCHLEVEL = 5
|
||||||
SUBLEVEL = 0
|
SUBLEVEL = 0
|
||||||
EXTRAVERSION = -rc6
|
EXTRAVERSION =
|
||||||
NAME = Saber-toothed Squirrel
|
NAME = Saber-toothed Squirrel
|
||||||
|
|
||||||
# *DOCUMENTATION*
|
# *DOCUMENTATION*
|
||||||
|
|
|
@ -43,8 +43,8 @@
|
||||||
|
|
||||||
pmu {
|
pmu {
|
||||||
compatible = "arm,cortex-a9-pmu";
|
compatible = "arm,cortex-a9-pmu";
|
||||||
interrupts = <0 8 0x04
|
interrupts = <0 6 0x04
|
||||||
0 9 0x04>;
|
0 7 0x04>;
|
||||||
};
|
};
|
||||||
|
|
||||||
L2: l2-cache {
|
L2: l2-cache {
|
||||||
|
@ -119,8 +119,8 @@
|
||||||
gmac0: eth@e2000000 {
|
gmac0: eth@e2000000 {
|
||||||
compatible = "st,spear600-gmac";
|
compatible = "st,spear600-gmac";
|
||||||
reg = <0xe2000000 0x8000>;
|
reg = <0xe2000000 0x8000>;
|
||||||
interrupts = <0 23 0x4
|
interrupts = <0 33 0x4
|
||||||
0 24 0x4>;
|
0 34 0x4>;
|
||||||
interrupt-names = "macirq", "eth_wake_irq";
|
interrupt-names = "macirq", "eth_wake_irq";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
@ -202,6 +202,7 @@
|
||||||
kbd@e0300000 {
|
kbd@e0300000 {
|
||||||
compatible = "st,spear300-kbd";
|
compatible = "st,spear300-kbd";
|
||||||
reg = <0xe0300000 0x1000>;
|
reg = <0xe0300000 0x1000>;
|
||||||
|
interrupts = <0 52 0x4>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -224,7 +225,7 @@
|
||||||
serial@e0000000 {
|
serial@e0000000 {
|
||||||
compatible = "arm,pl011", "arm,primecell";
|
compatible = "arm,pl011", "arm,primecell";
|
||||||
reg = <0xe0000000 0x1000>;
|
reg = <0xe0000000 0x1000>;
|
||||||
interrupts = <0 36 0x4>;
|
interrupts = <0 35 0x4>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -15,8 +15,8 @@
|
||||||
/include/ "spear320.dtsi"
|
/include/ "spear320.dtsi"
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
model = "ST SPEAr300 Evaluation Board";
|
model = "ST SPEAr320 Evaluation Board";
|
||||||
compatible = "st,spear300-evb", "st,spear300";
|
compatible = "st,spear320-evb", "st,spear320";
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@
|
||||||
|
|
||||||
ahb {
|
ahb {
|
||||||
pinmux@b3000000 {
|
pinmux@b3000000 {
|
||||||
st,pinmux-mode = <3>;
|
st,pinmux-mode = <4>;
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
pinctrl-0 = <&state_default>;
|
pinctrl-0 = <&state_default>;
|
||||||
|
|
||||||
|
|
|
@ -181,6 +181,7 @@
|
||||||
timer@f0000000 {
|
timer@f0000000 {
|
||||||
compatible = "st,spear-timer";
|
compatible = "st,spear-timer";
|
||||||
reg = <0xf0000000 0x400>;
|
reg = <0xf0000000 0x400>;
|
||||||
|
interrupt-parent = <&vic0>;
|
||||||
interrupts = <16>;
|
interrupts = <16>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -176,7 +176,6 @@ CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
|
||||||
CONFIG_USB_DEVICEFS=y
|
CONFIG_USB_DEVICEFS=y
|
||||||
CONFIG_USB_SUSPEND=y
|
CONFIG_USB_SUSPEND=y
|
||||||
CONFIG_USB_MON=y
|
CONFIG_USB_MON=y
|
||||||
CONFIG_USB_EHCI_HCD=y
|
|
||||||
CONFIG_USB_WDM=y
|
CONFIG_USB_WDM=y
|
||||||
CONFIG_USB_STORAGE=y
|
CONFIG_USB_STORAGE=y
|
||||||
CONFIG_USB_LIBUSUAL=y
|
CONFIG_USB_LIBUSUAL=y
|
||||||
|
|
|
@ -119,7 +119,9 @@ static __init void exynos_pm_add_dev_to_genpd(struct platform_device *pdev,
|
||||||
struct exynos_pm_domain *pd)
|
struct exynos_pm_domain *pd)
|
||||||
{
|
{
|
||||||
if (pdev->dev.bus) {
|
if (pdev->dev.bus) {
|
||||||
if (pm_genpd_add_device(&pd->pd, &pdev->dev))
|
if (!pm_genpd_add_device(&pd->pd, &pdev->dev))
|
||||||
|
pm_genpd_dev_need_restore(&pdev->dev, true);
|
||||||
|
else
|
||||||
pr_info("%s: error in adding %s device to %s power"
|
pr_info("%s: error in adding %s device to %s power"
|
||||||
"domain\n", __func__, dev_name(&pdev->dev),
|
"domain\n", __func__, dev_name(&pdev->dev),
|
||||||
pd->name);
|
pd->name);
|
||||||
|
@ -151,9 +153,12 @@ static __init int exynos4_pm_init_power_domain(void)
|
||||||
if (of_have_populated_dt())
|
if (of_have_populated_dt())
|
||||||
return exynos_pm_dt_parse_domains();
|
return exynos_pm_dt_parse_domains();
|
||||||
|
|
||||||
for (idx = 0; idx < ARRAY_SIZE(exynos4_pm_domains); idx++)
|
for (idx = 0; idx < ARRAY_SIZE(exynos4_pm_domains); idx++) {
|
||||||
pm_genpd_init(&exynos4_pm_domains[idx]->pd, NULL,
|
struct exynos_pm_domain *pd = exynos4_pm_domains[idx];
|
||||||
exynos4_pm_domains[idx]->is_off);
|
int on = __raw_readl(pd->base + 0x4) & S5P_INT_LOCAL_PWR_EN;
|
||||||
|
|
||||||
|
pm_genpd_init(&pd->pd, NULL, !on);
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_S5P_DEV_FIMD0
|
#ifdef CONFIG_S5P_DEV_FIMD0
|
||||||
exynos_pm_add_dev_to_genpd(&s5p_device_fimd0, &exynos4_pd_lcd0);
|
exynos_pm_add_dev_to_genpd(&s5p_device_fimd0, &exynos4_pd_lcd0);
|
||||||
|
|
|
@ -31,12 +31,16 @@
|
||||||
*
|
*
|
||||||
* CLKDM_NO_AUTODEPS: Prevent "autodeps" from being added/removed from this
|
* CLKDM_NO_AUTODEPS: Prevent "autodeps" from being added/removed from this
|
||||||
* clockdomain. (Currently, this applies to OMAP3 clockdomains only.)
|
* clockdomain. (Currently, this applies to OMAP3 clockdomains only.)
|
||||||
|
* CLKDM_ACTIVE_WITH_MPU: The PRCM guarantees that this clockdomain is
|
||||||
|
* active whenever the MPU is active. True for interconnects and
|
||||||
|
* the WKUP clockdomains.
|
||||||
*/
|
*/
|
||||||
#define CLKDM_CAN_FORCE_SLEEP (1 << 0)
|
#define CLKDM_CAN_FORCE_SLEEP (1 << 0)
|
||||||
#define CLKDM_CAN_FORCE_WAKEUP (1 << 1)
|
#define CLKDM_CAN_FORCE_WAKEUP (1 << 1)
|
||||||
#define CLKDM_CAN_ENABLE_AUTO (1 << 2)
|
#define CLKDM_CAN_ENABLE_AUTO (1 << 2)
|
||||||
#define CLKDM_CAN_DISABLE_AUTO (1 << 3)
|
#define CLKDM_CAN_DISABLE_AUTO (1 << 3)
|
||||||
#define CLKDM_NO_AUTODEPS (1 << 4)
|
#define CLKDM_NO_AUTODEPS (1 << 4)
|
||||||
|
#define CLKDM_ACTIVE_WITH_MPU (1 << 5)
|
||||||
|
|
||||||
#define CLKDM_CAN_HWSUP (CLKDM_CAN_ENABLE_AUTO | CLKDM_CAN_DISABLE_AUTO)
|
#define CLKDM_CAN_HWSUP (CLKDM_CAN_ENABLE_AUTO | CLKDM_CAN_DISABLE_AUTO)
|
||||||
#define CLKDM_CAN_SWSUP (CLKDM_CAN_FORCE_SLEEP | CLKDM_CAN_FORCE_WAKEUP)
|
#define CLKDM_CAN_SWSUP (CLKDM_CAN_FORCE_SLEEP | CLKDM_CAN_FORCE_WAKEUP)
|
||||||
|
|
|
@ -88,4 +88,5 @@ struct clockdomain wkup_common_clkdm = {
|
||||||
.name = "wkup_clkdm",
|
.name = "wkup_clkdm",
|
||||||
.pwrdm = { .name = "wkup_pwrdm" },
|
.pwrdm = { .name = "wkup_pwrdm" },
|
||||||
.dep_bit = OMAP_EN_WKUP_SHIFT,
|
.dep_bit = OMAP_EN_WKUP_SHIFT,
|
||||||
|
.flags = CLKDM_ACTIVE_WITH_MPU,
|
||||||
};
|
};
|
||||||
|
|
|
@ -381,7 +381,7 @@ static struct clockdomain l4_wkup_44xx_clkdm = {
|
||||||
.cm_inst = OMAP4430_PRM_WKUP_CM_INST,
|
.cm_inst = OMAP4430_PRM_WKUP_CM_INST,
|
||||||
.clkdm_offs = OMAP4430_PRM_WKUP_CM_WKUP_CDOFFS,
|
.clkdm_offs = OMAP4430_PRM_WKUP_CM_WKUP_CDOFFS,
|
||||||
.dep_bit = OMAP4430_L4WKUP_STATDEP_SHIFT,
|
.dep_bit = OMAP4430_L4WKUP_STATDEP_SHIFT,
|
||||||
.flags = CLKDM_CAN_HWSUP,
|
.flags = CLKDM_CAN_HWSUP | CLKDM_ACTIVE_WITH_MPU,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct clockdomain emu_sys_44xx_clkdm = {
|
static struct clockdomain emu_sys_44xx_clkdm = {
|
||||||
|
|
|
@ -1124,15 +1124,18 @@ static struct omap_hwmod_addr_space * __init _find_mpu_rt_addr_space(struct omap
|
||||||
* _enable_sysc - try to bring a module out of idle via OCP_SYSCONFIG
|
* _enable_sysc - try to bring a module out of idle via OCP_SYSCONFIG
|
||||||
* @oh: struct omap_hwmod *
|
* @oh: struct omap_hwmod *
|
||||||
*
|
*
|
||||||
* If module is marked as SWSUP_SIDLE, force the module out of slave
|
* Ensure that the OCP_SYSCONFIG register for the IP block represented
|
||||||
* idle; otherwise, configure it for smart-idle. If module is marked
|
* by @oh is set to indicate to the PRCM that the IP block is active.
|
||||||
* as SWSUP_MSUSPEND, force the module out of master standby;
|
* Usually this means placing the module into smart-idle mode and
|
||||||
* otherwise, configure it for smart-standby. No return value.
|
* smart-standby, but if there is a bug in the automatic idle handling
|
||||||
|
* for the IP block, it may need to be placed into the force-idle or
|
||||||
|
* no-idle variants of these modes. No return value.
|
||||||
*/
|
*/
|
||||||
static void _enable_sysc(struct omap_hwmod *oh)
|
static void _enable_sysc(struct omap_hwmod *oh)
|
||||||
{
|
{
|
||||||
u8 idlemode, sf;
|
u8 idlemode, sf;
|
||||||
u32 v;
|
u32 v;
|
||||||
|
bool clkdm_act;
|
||||||
|
|
||||||
if (!oh->class->sysc)
|
if (!oh->class->sysc)
|
||||||
return;
|
return;
|
||||||
|
@ -1141,6 +1144,14 @@ static void _enable_sysc(struct omap_hwmod *oh)
|
||||||
sf = oh->class->sysc->sysc_flags;
|
sf = oh->class->sysc->sysc_flags;
|
||||||
|
|
||||||
if (sf & SYSC_HAS_SIDLEMODE) {
|
if (sf & SYSC_HAS_SIDLEMODE) {
|
||||||
|
clkdm_act = ((oh->clkdm &&
|
||||||
|
oh->clkdm->flags & CLKDM_ACTIVE_WITH_MPU) ||
|
||||||
|
(oh->_clk && oh->_clk->clkdm &&
|
||||||
|
oh->_clk->clkdm->flags & CLKDM_ACTIVE_WITH_MPU));
|
||||||
|
if (clkdm_act && !(oh->class->sysc->idlemodes &
|
||||||
|
(SIDLE_SMART | SIDLE_SMART_WKUP)))
|
||||||
|
idlemode = HWMOD_IDLEMODE_FORCE;
|
||||||
|
else
|
||||||
idlemode = (oh->flags & HWMOD_SWSUP_SIDLE) ?
|
idlemode = (oh->flags & HWMOD_SWSUP_SIDLE) ?
|
||||||
HWMOD_IDLEMODE_NO : HWMOD_IDLEMODE_SMART;
|
HWMOD_IDLEMODE_NO : HWMOD_IDLEMODE_SMART;
|
||||||
_set_slave_idlemode(oh, idlemode, &v);
|
_set_slave_idlemode(oh, idlemode, &v);
|
||||||
|
@ -1208,8 +1219,13 @@ static void _idle_sysc(struct omap_hwmod *oh)
|
||||||
sf = oh->class->sysc->sysc_flags;
|
sf = oh->class->sysc->sysc_flags;
|
||||||
|
|
||||||
if (sf & SYSC_HAS_SIDLEMODE) {
|
if (sf & SYSC_HAS_SIDLEMODE) {
|
||||||
idlemode = (oh->flags & HWMOD_SWSUP_SIDLE) ?
|
/* XXX What about HWMOD_IDLEMODE_SMART_WKUP? */
|
||||||
HWMOD_IDLEMODE_FORCE : HWMOD_IDLEMODE_SMART;
|
if (oh->flags & HWMOD_SWSUP_SIDLE ||
|
||||||
|
!(oh->class->sysc->idlemodes &
|
||||||
|
(SIDLE_SMART | SIDLE_SMART_WKUP)))
|
||||||
|
idlemode = HWMOD_IDLEMODE_FORCE;
|
||||||
|
else
|
||||||
|
idlemode = HWMOD_IDLEMODE_SMART;
|
||||||
_set_slave_idlemode(oh, idlemode, &v);
|
_set_slave_idlemode(oh, idlemode, &v);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -106,7 +106,7 @@ static struct clk s3c2440_clk_cam_upll = {
|
||||||
static struct clk s3c2440_clk_ac97 = {
|
static struct clk s3c2440_clk_ac97 = {
|
||||||
.name = "ac97",
|
.name = "ac97",
|
||||||
.enable = s3c2410_clkcon_enable,
|
.enable = s3c2410_clkcon_enable,
|
||||||
.ctrlbit = S3C2440_CLKCON_CAMERA,
|
.ctrlbit = S3C2440_CLKCON_AC97,
|
||||||
};
|
};
|
||||||
|
|
||||||
static unsigned long s3c2440_fclk_n_getrate(struct clk *clk)
|
static unsigned long s3c2440_fclk_n_getrate(struct clk *clk)
|
||||||
|
|
|
@ -22,8 +22,13 @@
|
||||||
#include <mach/common.h>
|
#include <mach/common.h>
|
||||||
#include <mach/emev2.h>
|
#include <mach/emev2.h>
|
||||||
|
|
||||||
|
#ifdef CONFIG_ARCH_SH73A0
|
||||||
#define is_sh73a0() (machine_is_ag5evm() || machine_is_kota2() || \
|
#define is_sh73a0() (machine_is_ag5evm() || machine_is_kota2() || \
|
||||||
of_machine_is_compatible("renesas,sh73a0"))
|
of_machine_is_compatible("renesas,sh73a0"))
|
||||||
|
#else
|
||||||
|
#define is_sh73a0() (0)
|
||||||
|
#endif
|
||||||
|
|
||||||
#define is_r8a7779() machine_is_marzen()
|
#define is_r8a7779() machine_is_marzen()
|
||||||
|
|
||||||
#ifdef CONFIG_ARCH_EMEV2
|
#ifdef CONFIG_ARCH_EMEV2
|
||||||
|
|
|
@ -87,7 +87,7 @@ void __init spear3xx_map_io(void)
|
||||||
|
|
||||||
static void __init spear3xx_timer_init(void)
|
static void __init spear3xx_timer_init(void)
|
||||||
{
|
{
|
||||||
char pclk_name[] = "pll3_48m_clk";
|
char pclk_name[] = "pll3_clk";
|
||||||
struct clk *gpt_clk, *pclk;
|
struct clk *gpt_clk, *pclk;
|
||||||
|
|
||||||
spear3xx_clk_init();
|
spear3xx_clk_init();
|
||||||
|
|
|
@ -423,7 +423,7 @@ void __init spear6xx_map_io(void)
|
||||||
|
|
||||||
static void __init spear6xx_timer_init(void)
|
static void __init spear6xx_timer_init(void)
|
||||||
{
|
{
|
||||||
char pclk_name[] = "pll3_48m_clk";
|
char pclk_name[] = "pll3_clk";
|
||||||
struct clk *gpt_clk, *pclk;
|
struct clk *gpt_clk, *pclk;
|
||||||
|
|
||||||
spear6xx_clk_init();
|
spear6xx_clk_init();
|
||||||
|
|
|
@ -625,11 +625,6 @@ static struct platform_device *snowball_platform_devs[] __initdata = {
|
||||||
&ab8500_device,
|
&ab8500_device,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct platform_device *snowball_of_platform_devs[] __initdata = {
|
|
||||||
&snowball_led_dev,
|
|
||||||
&snowball_key_dev,
|
|
||||||
};
|
|
||||||
|
|
||||||
static void __init mop500_init_machine(void)
|
static void __init mop500_init_machine(void)
|
||||||
{
|
{
|
||||||
struct device *parent = NULL;
|
struct device *parent = NULL;
|
||||||
|
@ -769,6 +764,11 @@ MACHINE_END
|
||||||
|
|
||||||
#ifdef CONFIG_MACH_UX500_DT
|
#ifdef CONFIG_MACH_UX500_DT
|
||||||
|
|
||||||
|
static struct platform_device *snowball_of_platform_devs[] __initdata = {
|
||||||
|
&snowball_led_dev,
|
||||||
|
&snowball_key_dev,
|
||||||
|
};
|
||||||
|
|
||||||
struct of_dev_auxdata u8500_auxdata_lookup[] __initdata = {
|
struct of_dev_auxdata u8500_auxdata_lookup[] __initdata = {
|
||||||
/* Requires DMA and call-back bindings. */
|
/* Requires DMA and call-back bindings. */
|
||||||
OF_DEV_AUXDATA("arm,pl011", 0x80120000, "uart0", &uart0_plat),
|
OF_DEV_AUXDATA("arm,pl011", 0x80120000, "uart0", &uart0_plat),
|
||||||
|
@ -786,6 +786,8 @@ struct of_dev_auxdata u8500_auxdata_lookup[] __initdata = {
|
||||||
OF_DEV_AUXDATA("st,nomadik-gpio", 0x8011e000, "gpio.6", NULL),
|
OF_DEV_AUXDATA("st,nomadik-gpio", 0x8011e000, "gpio.6", NULL),
|
||||||
OF_DEV_AUXDATA("st,nomadik-gpio", 0x8011e080, "gpio.7", NULL),
|
OF_DEV_AUXDATA("st,nomadik-gpio", 0x8011e080, "gpio.7", NULL),
|
||||||
OF_DEV_AUXDATA("st,nomadik-gpio", 0xa03fe000, "gpio.8", NULL),
|
OF_DEV_AUXDATA("st,nomadik-gpio", 0xa03fe000, "gpio.8", NULL),
|
||||||
|
/* Requires device name bindings. */
|
||||||
|
OF_DEV_AUXDATA("stericsson,nmk_pinctrl", 0, "pinctrl-db8500", NULL),
|
||||||
{},
|
{},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -63,8 +63,10 @@ static void __init ux500_timer_init(void)
|
||||||
|
|
||||||
/* TODO: Once MTU has been DT:ed place code above into else. */
|
/* TODO: Once MTU has been DT:ed place code above into else. */
|
||||||
if (of_have_populated_dt()) {
|
if (of_have_populated_dt()) {
|
||||||
|
#ifdef CONFIG_OF
|
||||||
np = of_find_matching_node(NULL, prcmu_timer_of_match);
|
np = of_find_matching_node(NULL, prcmu_timer_of_match);
|
||||||
if (!np)
|
if (!np)
|
||||||
|
#endif
|
||||||
goto dt_fail;
|
goto dt_fail;
|
||||||
|
|
||||||
tmp_base = of_iomap(np, 0);
|
tmp_base = of_iomap(np, 0);
|
||||||
|
|
|
@ -1091,7 +1091,7 @@ error:
|
||||||
while (--i)
|
while (--i)
|
||||||
if (pages[i])
|
if (pages[i])
|
||||||
__free_pages(pages[i], 0);
|
__free_pages(pages[i], 0);
|
||||||
if (array_size < PAGE_SIZE)
|
if (array_size <= PAGE_SIZE)
|
||||||
kfree(pages);
|
kfree(pages);
|
||||||
else
|
else
|
||||||
vfree(pages);
|
vfree(pages);
|
||||||
|
@ -1106,7 +1106,7 @@ static int __iommu_free_buffer(struct device *dev, struct page **pages, size_t s
|
||||||
for (i = 0; i < count; i++)
|
for (i = 0; i < count; i++)
|
||||||
if (pages[i])
|
if (pages[i])
|
||||||
__free_pages(pages[i], 0);
|
__free_pages(pages[i], 0);
|
||||||
if (array_size < PAGE_SIZE)
|
if (array_size <= PAGE_SIZE)
|
||||||
kfree(pages);
|
kfree(pages);
|
||||||
else
|
else
|
||||||
vfree(pages);
|
vfree(pages);
|
||||||
|
|
|
@ -157,11 +157,13 @@ int s3c_adc_start(struct s3c_adc_client *client,
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (client->is_ts && adc->ts_pend)
|
|
||||||
return -EAGAIN;
|
|
||||||
|
|
||||||
spin_lock_irqsave(&adc->lock, flags);
|
spin_lock_irqsave(&adc->lock, flags);
|
||||||
|
|
||||||
|
if (client->is_ts && adc->ts_pend) {
|
||||||
|
spin_unlock_irqrestore(&adc->lock, flags);
|
||||||
|
return -EAGAIN;
|
||||||
|
}
|
||||||
|
|
||||||
client->channel = channel;
|
client->channel = channel;
|
||||||
client->nr_samples = nr_samples;
|
client->nr_samples = nr_samples;
|
||||||
|
|
||||||
|
|
|
@ -126,7 +126,8 @@ struct platform_device s3c_device_adc = {
|
||||||
#ifdef CONFIG_CPU_S3C2440
|
#ifdef CONFIG_CPU_S3C2440
|
||||||
static struct resource s3c_camif_resource[] = {
|
static struct resource s3c_camif_resource[] = {
|
||||||
[0] = DEFINE_RES_MEM(S3C2440_PA_CAMIF, S3C2440_SZ_CAMIF),
|
[0] = DEFINE_RES_MEM(S3C2440_PA_CAMIF, S3C2440_SZ_CAMIF),
|
||||||
[1] = DEFINE_RES_IRQ(IRQ_CAM),
|
[1] = DEFINE_RES_IRQ(IRQ_S3C2440_CAM_C),
|
||||||
|
[2] = DEFINE_RES_IRQ(IRQ_S3C2440_CAM_P),
|
||||||
};
|
};
|
||||||
|
|
||||||
struct platform_device s3c_device_camif = {
|
struct platform_device s3c_device_camif = {
|
||||||
|
|
|
@ -37,6 +37,7 @@ struct clk clk_ext_xtal_mux = {
|
||||||
struct clk clk_xusbxti = {
|
struct clk clk_xusbxti = {
|
||||||
.name = "xusbxti",
|
.name = "xusbxti",
|
||||||
.id = -1,
|
.id = -1,
|
||||||
|
.rate = 24000000,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct clk s5p_clk_27m = {
|
struct clk s5p_clk_27m = {
|
||||||
|
|
|
@ -70,4 +70,7 @@ extern int is_in_rom(unsigned long);
|
||||||
#define VMALLOC_END 0xffffffff
|
#define VMALLOC_END 0xffffffff
|
||||||
|
|
||||||
#define arch_enter_lazy_cpu_mode() do {} while (0)
|
#define arch_enter_lazy_cpu_mode() do {} while (0)
|
||||||
|
|
||||||
|
#include <asm-generic/pgtable.h>
|
||||||
|
|
||||||
#endif /* _H8300_PGTABLE_H */
|
#endif /* _H8300_PGTABLE_H */
|
||||||
|
|
|
@ -100,7 +100,6 @@ extern int __put_user_bad(void);
|
||||||
break; \
|
break; \
|
||||||
default: \
|
default: \
|
||||||
__gu_err = __get_user_bad(); \
|
__gu_err = __get_user_bad(); \
|
||||||
__gu_val = 0; \
|
|
||||||
break; \
|
break; \
|
||||||
} \
|
} \
|
||||||
(x) = __gu_val; \
|
(x) = __gu_val; \
|
||||||
|
@ -159,4 +158,6 @@ clear_user(void *to, unsigned long n)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define __clear_user clear_user
|
||||||
|
|
||||||
#endif /* _H8300_UACCESS_H */
|
#endif /* _H8300_UACCESS_H */
|
||||||
|
|
|
@ -447,7 +447,7 @@ handle_signal(unsigned long sig, siginfo_t *info, struct k_sigaction *ka,
|
||||||
* want to handle. Thus you cannot kill init even with a SIGKILL even by
|
* want to handle. Thus you cannot kill init even with a SIGKILL even by
|
||||||
* mistake.
|
* mistake.
|
||||||
*/
|
*/
|
||||||
statis void do_signal(struct pt_regs *regs)
|
static void do_signal(struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
siginfo_t info;
|
siginfo_t info;
|
||||||
int signr;
|
int signr;
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
#include <linux/profile.h>
|
#include <linux/profile.h>
|
||||||
|
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
|
#include <asm/irq_regs.h>
|
||||||
#include <asm/timer.h>
|
#include <asm/timer.h>
|
||||||
|
|
||||||
#define TICK_SIZE (tick_nsec / 1000)
|
#define TICK_SIZE (tick_nsec / 1000)
|
||||||
|
|
|
@ -180,9 +180,7 @@ void __cpuinit start_secondary(void)
|
||||||
|
|
||||||
notify_cpu_starting(cpu);
|
notify_cpu_starting(cpu);
|
||||||
|
|
||||||
ipi_call_lock();
|
|
||||||
set_cpu_online(cpu, true);
|
set_cpu_online(cpu, true);
|
||||||
ipi_call_unlock();
|
|
||||||
|
|
||||||
local_irq_enable();
|
local_irq_enable();
|
||||||
|
|
||||||
|
|
|
@ -382,7 +382,6 @@ smp_callin (void)
|
||||||
set_numa_node(cpu_to_node_map[cpuid]);
|
set_numa_node(cpu_to_node_map[cpuid]);
|
||||||
set_numa_mem(local_memory_node(cpu_to_node_map[cpuid]));
|
set_numa_mem(local_memory_node(cpu_to_node_map[cpuid]));
|
||||||
|
|
||||||
ipi_call_lock_irq();
|
|
||||||
spin_lock(&vector_lock);
|
spin_lock(&vector_lock);
|
||||||
/* Setup the per cpu irq handling data structures */
|
/* Setup the per cpu irq handling data structures */
|
||||||
__setup_vector_irq(cpuid);
|
__setup_vector_irq(cpuid);
|
||||||
|
@ -390,7 +389,6 @@ smp_callin (void)
|
||||||
set_cpu_online(cpuid, true);
|
set_cpu_online(cpuid, true);
|
||||||
per_cpu(cpu_state, cpuid) = CPU_ONLINE;
|
per_cpu(cpu_state, cpuid) = CPU_ONLINE;
|
||||||
spin_unlock(&vector_lock);
|
spin_unlock(&vector_lock);
|
||||||
ipi_call_unlock_irq();
|
|
||||||
|
|
||||||
smp_setup_percpu_timer();
|
smp_setup_percpu_timer();
|
||||||
|
|
||||||
|
|
|
@ -43,9 +43,9 @@ endif
|
||||||
|
|
||||||
OBJCOPYFLAGS += -R .empty_zero_page
|
OBJCOPYFLAGS += -R .empty_zero_page
|
||||||
|
|
||||||
suffix_$(CONFIG_KERNEL_GZIP) = gz
|
suffix-$(CONFIG_KERNEL_GZIP) = gz
|
||||||
suffix_$(CONFIG_KERNEL_BZIP2) = bz2
|
suffix-$(CONFIG_KERNEL_BZIP2) = bz2
|
||||||
suffix_$(CONFIG_KERNEL_LZMA) = lzma
|
suffix-$(CONFIG_KERNEL_LZMA) = lzma
|
||||||
|
|
||||||
$(obj)/piggy.o: $(obj)/vmlinux.scr $(obj)/vmlinux.bin.$(suffix-y) FORCE
|
$(obj)/piggy.o: $(obj)/vmlinux.scr $(obj)/vmlinux.bin.$(suffix-y) FORCE
|
||||||
$(call if_changed,ld)
|
$(call if_changed,ld)
|
||||||
|
|
|
@ -28,7 +28,7 @@ static unsigned long free_mem_ptr;
|
||||||
static unsigned long free_mem_end_ptr;
|
static unsigned long free_mem_end_ptr;
|
||||||
|
|
||||||
#ifdef CONFIG_KERNEL_BZIP2
|
#ifdef CONFIG_KERNEL_BZIP2
|
||||||
static void *memset(void *s, int c, size_t n)
|
void *memset(void *s, int c, size_t n)
|
||||||
{
|
{
|
||||||
char *ss = s;
|
char *ss = s;
|
||||||
|
|
||||||
|
@ -39,6 +39,16 @@ static void *memset(void *s, int c, size_t n)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_KERNEL_GZIP
|
#ifdef CONFIG_KERNEL_GZIP
|
||||||
|
void *memcpy(void *dest, const void *src, size_t n)
|
||||||
|
{
|
||||||
|
char *d = dest;
|
||||||
|
const char *s = src;
|
||||||
|
while (n--)
|
||||||
|
*d++ = *s++;
|
||||||
|
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
#define BOOT_HEAP_SIZE 0x10000
|
#define BOOT_HEAP_SIZE 0x10000
|
||||||
#include "../../../../lib/decompress_inflate.c"
|
#include "../../../../lib/decompress_inflate.c"
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -113,9 +113,6 @@ struct pt_regs {
|
||||||
|
|
||||||
#define PTRACE_OLDSETOPTIONS 21
|
#define PTRACE_OLDSETOPTIONS 21
|
||||||
|
|
||||||
/* options set using PTRACE_SETOPTIONS */
|
|
||||||
#define PTRACE_O_TRACESYSGOOD 0x00000001
|
|
||||||
|
|
||||||
#ifdef __KERNEL__
|
#ifdef __KERNEL__
|
||||||
|
|
||||||
#include <asm/m32r.h> /* M32R_PSW_BSM, M32R_PSW_BPM */
|
#include <asm/m32r.h> /* M32R_PSW_BSM, M32R_PSW_BPM */
|
||||||
|
|
|
@ -79,11 +79,6 @@ static __inline__ int cpu_number_map(int cpu)
|
||||||
return cpu;
|
return cpu;
|
||||||
}
|
}
|
||||||
|
|
||||||
static __inline__ unsigned int num_booting_cpus(void)
|
|
||||||
{
|
|
||||||
return cpumask_weight(&cpu_callout_map);
|
|
||||||
}
|
|
||||||
|
|
||||||
extern void smp_send_timer(void);
|
extern void smp_send_timer(void);
|
||||||
extern unsigned long send_IPI_mask_phys(const cpumask_t*, int, int);
|
extern unsigned long send_IPI_mask_phys(const cpumask_t*, int, int);
|
||||||
|
|
||||||
|
|
|
@ -591,17 +591,16 @@ void user_enable_single_step(struct task_struct *child)
|
||||||
|
|
||||||
if (access_process_vm(child, pc&~3, &insn, sizeof(insn), 0)
|
if (access_process_vm(child, pc&~3, &insn, sizeof(insn), 0)
|
||||||
!= sizeof(insn))
|
!= sizeof(insn))
|
||||||
return -EIO;
|
return;
|
||||||
|
|
||||||
compute_next_pc(insn, pc, &next_pc, child);
|
compute_next_pc(insn, pc, &next_pc, child);
|
||||||
if (next_pc & 0x80000000)
|
if (next_pc & 0x80000000)
|
||||||
return -EIO;
|
return;
|
||||||
|
|
||||||
if (embed_debug_trap(child, next_pc))
|
if (embed_debug_trap(child, next_pc))
|
||||||
return -EIO;
|
return;
|
||||||
|
|
||||||
invalidate_cache();
|
invalidate_cache();
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void user_disable_single_step(struct task_struct *child)
|
void user_disable_single_step(struct task_struct *child)
|
||||||
|
|
|
@ -286,7 +286,7 @@ handle_signal(unsigned long sig, struct k_sigaction *ka, siginfo_t *info,
|
||||||
case -ERESTARTNOINTR:
|
case -ERESTARTNOINTR:
|
||||||
regs->r0 = regs->orig_r0;
|
regs->r0 = regs->orig_r0;
|
||||||
if (prev_insn(regs) < 0)
|
if (prev_insn(regs) < 0)
|
||||||
return -EFAULT;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -288,6 +288,7 @@ config MIPS_MALTA
|
||||||
select SYS_HAS_CPU_MIPS32_R1
|
select SYS_HAS_CPU_MIPS32_R1
|
||||||
select SYS_HAS_CPU_MIPS32_R2
|
select SYS_HAS_CPU_MIPS32_R2
|
||||||
select SYS_HAS_CPU_MIPS64_R1
|
select SYS_HAS_CPU_MIPS64_R1
|
||||||
|
select SYS_HAS_CPU_MIPS64_R2
|
||||||
select SYS_HAS_CPU_NEVADA
|
select SYS_HAS_CPU_NEVADA
|
||||||
select SYS_HAS_CPU_RM7000
|
select SYS_HAS_CPU_RM7000
|
||||||
select SYS_HAS_EARLY_PRINTK
|
select SYS_HAS_EARLY_PRINTK
|
||||||
|
@ -1423,6 +1424,7 @@ config CPU_SB1
|
||||||
config CPU_CAVIUM_OCTEON
|
config CPU_CAVIUM_OCTEON
|
||||||
bool "Cavium Octeon processor"
|
bool "Cavium Octeon processor"
|
||||||
depends on SYS_HAS_CPU_CAVIUM_OCTEON
|
depends on SYS_HAS_CPU_CAVIUM_OCTEON
|
||||||
|
select ARCH_SPARSEMEM_ENABLE
|
||||||
select CPU_HAS_PREFETCH
|
select CPU_HAS_PREFETCH
|
||||||
select CPU_SUPPORTS_64BIT_KERNEL
|
select CPU_SUPPORTS_64BIT_KERNEL
|
||||||
select SYS_SUPPORTS_SMP
|
select SYS_SUPPORTS_SMP
|
||||||
|
|
|
@ -21,6 +21,7 @@ config BCM47XX_BCMA
|
||||||
select BCMA
|
select BCMA
|
||||||
select BCMA_HOST_SOC
|
select BCMA_HOST_SOC
|
||||||
select BCMA_DRIVER_MIPS
|
select BCMA_DRIVER_MIPS
|
||||||
|
select BCMA_HOST_PCI if PCI
|
||||||
select BCMA_DRIVER_PCI_HOSTMODE if PCI
|
select BCMA_DRIVER_PCI_HOSTMODE if PCI
|
||||||
default y
|
default y
|
||||||
help
|
help
|
||||||
|
|
|
@ -79,11 +79,11 @@ static int __init config_pcmcia_cs(unsigned int cs,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const __initdata struct {
|
static const struct {
|
||||||
unsigned int cs;
|
unsigned int cs;
|
||||||
unsigned int base;
|
unsigned int base;
|
||||||
unsigned int size;
|
unsigned int size;
|
||||||
} pcmcia_cs[3] = {
|
} pcmcia_cs[3] __initconst = {
|
||||||
{
|
{
|
||||||
.cs = MPI_CS_PCMCIA_COMMON,
|
.cs = MPI_CS_PCMCIA_COMMON,
|
||||||
.base = BCM_PCMCIA_COMMON_BASE_PA,
|
.base = BCM_PCMCIA_COMMON_BASE_PA,
|
||||||
|
|
|
@ -82,10 +82,6 @@ config CAVIUM_OCTEON_LOCK_L2_MEMCPY
|
||||||
help
|
help
|
||||||
Lock the kernel's implementation of memcpy() into L2.
|
Lock the kernel's implementation of memcpy() into L2.
|
||||||
|
|
||||||
config ARCH_SPARSEMEM_ENABLE
|
|
||||||
def_bool y
|
|
||||||
select SPARSEMEM_STATIC
|
|
||||||
|
|
||||||
config IOMMU_HELPER
|
config IOMMU_HELPER
|
||||||
bool
|
bool
|
||||||
|
|
||||||
|
|
|
@ -185,7 +185,6 @@ static void __cpuinit octeon_init_secondary(void)
|
||||||
octeon_init_cvmcount();
|
octeon_init_cvmcount();
|
||||||
|
|
||||||
octeon_irq_setup_secondary();
|
octeon_irq_setup_secondary();
|
||||||
raw_local_irq_enable();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -233,6 +232,7 @@ static void octeon_smp_finish(void)
|
||||||
|
|
||||||
/* to generate the first CPU timer interrupt */
|
/* to generate the first CPU timer interrupt */
|
||||||
write_c0_compare(read_c0_count() + mips_hpt_frequency / HZ);
|
write_c0_compare(read_c0_count() + mips_hpt_frequency / HZ);
|
||||||
|
local_irq_enable();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -17,7 +17,6 @@
|
||||||
#include <linux/irqflags.h>
|
#include <linux/irqflags.h>
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
#include <asm/barrier.h>
|
#include <asm/barrier.h>
|
||||||
#include <asm/bug.h>
|
|
||||||
#include <asm/byteorder.h> /* sigh ... */
|
#include <asm/byteorder.h> /* sigh ... */
|
||||||
#include <asm/cpu-features.h>
|
#include <asm/cpu-features.h>
|
||||||
#include <asm/sgidefs.h>
|
#include <asm/sgidefs.h>
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
#ifndef __ASM_CMPXCHG_H
|
#ifndef __ASM_CMPXCHG_H
|
||||||
#define __ASM_CMPXCHG_H
|
#define __ASM_CMPXCHG_H
|
||||||
|
|
||||||
|
#include <linux/bug.h>
|
||||||
#include <linux/irqflags.h>
|
#include <linux/irqflags.h>
|
||||||
#include <asm/war.h>
|
#include <asm/war.h>
|
||||||
|
|
||||||
|
|
|
@ -94,6 +94,7 @@
|
||||||
#define PRID_IMP_24KE 0x9600
|
#define PRID_IMP_24KE 0x9600
|
||||||
#define PRID_IMP_74K 0x9700
|
#define PRID_IMP_74K 0x9700
|
||||||
#define PRID_IMP_1004K 0x9900
|
#define PRID_IMP_1004K 0x9900
|
||||||
|
#define PRID_IMP_M14KC 0x9c00
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* These are the PRID's for when 23:16 == PRID_COMP_SIBYTE
|
* These are the PRID's for when 23:16 == PRID_COMP_SIBYTE
|
||||||
|
@ -260,12 +261,12 @@ enum cpu_type_enum {
|
||||||
*/
|
*/
|
||||||
CPU_4KC, CPU_4KEC, CPU_4KSC, CPU_24K, CPU_34K, CPU_1004K, CPU_74K,
|
CPU_4KC, CPU_4KEC, CPU_4KSC, CPU_24K, CPU_34K, CPU_1004K, CPU_74K,
|
||||||
CPU_ALCHEMY, CPU_PR4450, CPU_BMIPS32, CPU_BMIPS3300, CPU_BMIPS4350,
|
CPU_ALCHEMY, CPU_PR4450, CPU_BMIPS32, CPU_BMIPS3300, CPU_BMIPS4350,
|
||||||
CPU_BMIPS4380, CPU_BMIPS5000, CPU_JZRISC,
|
CPU_BMIPS4380, CPU_BMIPS5000, CPU_JZRISC, CPU_M14KC,
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* MIPS64 class processors
|
* MIPS64 class processors
|
||||||
*/
|
*/
|
||||||
CPU_5KC, CPU_20KC, CPU_25KF, CPU_SB1, CPU_SB1A, CPU_LOONGSON2,
|
CPU_5KC, CPU_5KE, CPU_20KC, CPU_25KF, CPU_SB1, CPU_SB1A, CPU_LOONGSON2,
|
||||||
CPU_CAVIUM_OCTEON, CPU_CAVIUM_OCTEON_PLUS, CPU_CAVIUM_OCTEON2,
|
CPU_CAVIUM_OCTEON, CPU_CAVIUM_OCTEON_PLUS, CPU_CAVIUM_OCTEON2,
|
||||||
CPU_XLR, CPU_XLP,
|
CPU_XLR, CPU_XLP,
|
||||||
|
|
||||||
|
@ -288,7 +289,7 @@ enum cpu_type_enum {
|
||||||
#define MIPS_CPU_ISA_M64R2 0x00000100
|
#define MIPS_CPU_ISA_M64R2 0x00000100
|
||||||
|
|
||||||
#define MIPS_CPU_ISA_32BIT (MIPS_CPU_ISA_I | MIPS_CPU_ISA_II | \
|
#define MIPS_CPU_ISA_32BIT (MIPS_CPU_ISA_I | MIPS_CPU_ISA_II | \
|
||||||
MIPS_CPU_ISA_M32R1 | MIPS_CPU_ISA_M32R2 )
|
MIPS_CPU_ISA_M32R1 | MIPS_CPU_ISA_M32R2)
|
||||||
#define MIPS_CPU_ISA_64BIT (MIPS_CPU_ISA_III | MIPS_CPU_ISA_IV | \
|
#define MIPS_CPU_ISA_64BIT (MIPS_CPU_ISA_III | MIPS_CPU_ISA_IV | \
|
||||||
MIPS_CPU_ISA_V | MIPS_CPU_ISA_M64R1 | MIPS_CPU_ISA_M64R2)
|
MIPS_CPU_ISA_V | MIPS_CPU_ISA_M64R1 | MIPS_CPU_ISA_M64R2)
|
||||||
|
|
||||||
|
|
|
@ -206,7 +206,7 @@
|
||||||
|
|
||||||
#define GIC_VPE_EIC_SHADOW_SET_BASE 0x0100
|
#define GIC_VPE_EIC_SHADOW_SET_BASE 0x0100
|
||||||
#define GIC_VPE_EIC_SS(intr) \
|
#define GIC_VPE_EIC_SS(intr) \
|
||||||
(GIC_EIC_SHADOW_SET_BASE + (4 * intr))
|
(GIC_VPE_EIC_SHADOW_SET_BASE + (4 * intr))
|
||||||
|
|
||||||
#define GIC_VPE_EIC_VEC_BASE 0x0800
|
#define GIC_VPE_EIC_VEC_BASE 0x0800
|
||||||
#define GIC_VPE_EIC_VEC(intr) \
|
#define GIC_VPE_EIC_VEC(intr) \
|
||||||
|
@ -330,6 +330,17 @@ struct gic_intr_map {
|
||||||
#define GIC_FLAG_TRANSPARENT 0x02
|
#define GIC_FLAG_TRANSPARENT 0x02
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This is only used in EIC mode. This helps to figure out which
|
||||||
|
* shared interrupts we need to process when we get a vector interrupt.
|
||||||
|
*/
|
||||||
|
#define GIC_MAX_SHARED_INTR 0x5
|
||||||
|
struct gic_shared_intr_map {
|
||||||
|
unsigned int num_shared_intr;
|
||||||
|
unsigned int intr_list[GIC_MAX_SHARED_INTR];
|
||||||
|
unsigned int local_intr_mask;
|
||||||
|
};
|
||||||
|
|
||||||
extern void gic_init(unsigned long gic_base_addr,
|
extern void gic_init(unsigned long gic_base_addr,
|
||||||
unsigned long gic_addrspace_size, struct gic_intr_map *intrmap,
|
unsigned long gic_addrspace_size, struct gic_intr_map *intrmap,
|
||||||
unsigned int intrmap_size, unsigned int irqbase);
|
unsigned int intrmap_size, unsigned int irqbase);
|
||||||
|
@ -338,5 +349,7 @@ extern unsigned int gic_get_int(void);
|
||||||
extern void gic_send_ipi(unsigned int intr);
|
extern void gic_send_ipi(unsigned int intr);
|
||||||
extern unsigned int plat_ipi_call_int_xlate(unsigned int);
|
extern unsigned int plat_ipi_call_int_xlate(unsigned int);
|
||||||
extern unsigned int plat_ipi_resched_int_xlate(unsigned int);
|
extern unsigned int plat_ipi_resched_int_xlate(unsigned int);
|
||||||
|
extern void gic_bind_eic_interrupt(int irq, int set);
|
||||||
|
extern unsigned int gic_get_timer_pending(void);
|
||||||
|
|
||||||
#endif /* _ASM_GICREGS_H */
|
#endif /* _ASM_GICREGS_H */
|
||||||
|
|
|
@ -251,7 +251,7 @@ struct f_format { /* FPU register format */
|
||||||
unsigned int func : 6;
|
unsigned int func : 6;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ma_format { /* FPU multipy and add format (MIPS IV) */
|
struct ma_format { /* FPU multiply and add format (MIPS IV) */
|
||||||
unsigned int opcode : 6;
|
unsigned int opcode : 6;
|
||||||
unsigned int fr : 5;
|
unsigned int fr : 5;
|
||||||
unsigned int ft : 5;
|
unsigned int ft : 5;
|
||||||
|
@ -324,7 +324,7 @@ struct f_format { /* FPU register format */
|
||||||
unsigned int opcode : 6;
|
unsigned int opcode : 6;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ma_format { /* FPU multipy and add format (MIPS IV) */
|
struct ma_format { /* FPU multiply and add format (MIPS IV) */
|
||||||
unsigned int fmt : 2;
|
unsigned int fmt : 2;
|
||||||
unsigned int func : 4;
|
unsigned int func : 4;
|
||||||
unsigned int fd : 5;
|
unsigned int fd : 5;
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
|
|
||||||
#include <asm/addrspace.h>
|
#include <asm/addrspace.h>
|
||||||
|
#include <asm/bug.h>
|
||||||
#include <asm/byteorder.h>
|
#include <asm/byteorder.h>
|
||||||
#include <asm/cpu.h>
|
#include <asm/cpu.h>
|
||||||
#include <asm/cpu-features.h>
|
#include <asm/cpu-features.h>
|
||||||
|
|
|
@ -136,6 +136,7 @@ extern void free_irqno(unsigned int irq);
|
||||||
* IE7. Since R2 their number has to be read from the c0_intctl register.
|
* IE7. Since R2 their number has to be read from the c0_intctl register.
|
||||||
*/
|
*/
|
||||||
#define CP0_LEGACY_COMPARE_IRQ 7
|
#define CP0_LEGACY_COMPARE_IRQ 7
|
||||||
|
#define CP0_LEGACY_PERFCNT_IRQ 7
|
||||||
|
|
||||||
extern int cp0_compare_irq;
|
extern int cp0_compare_irq;
|
||||||
extern int cp0_compare_irq_shift;
|
extern int cp0_compare_irq_shift;
|
||||||
|
|
|
@ -99,7 +99,7 @@
|
||||||
#define CKCTL_6368_USBH_CLK_EN (1 << 15)
|
#define CKCTL_6368_USBH_CLK_EN (1 << 15)
|
||||||
#define CKCTL_6368_DISABLE_GLESS_EN (1 << 16)
|
#define CKCTL_6368_DISABLE_GLESS_EN (1 << 16)
|
||||||
#define CKCTL_6368_NAND_CLK_EN (1 << 17)
|
#define CKCTL_6368_NAND_CLK_EN (1 << 17)
|
||||||
#define CKCTL_6368_IPSEC_CLK_EN (1 << 17)
|
#define CKCTL_6368_IPSEC_CLK_EN (1 << 18)
|
||||||
|
|
||||||
#define CKCTL_6368_ALL_SAFE_EN (CKCTL_6368_SWPKT_USB_EN | \
|
#define CKCTL_6368_ALL_SAFE_EN (CKCTL_6368_SWPKT_USB_EN | \
|
||||||
CKCTL_6368_SWPKT_SAR_EN | \
|
CKCTL_6368_SWPKT_SAR_EN | \
|
||||||
|
|
|
@ -86,6 +86,16 @@
|
||||||
#define GIC_CPU_INT4 4 /* . */
|
#define GIC_CPU_INT4 4 /* . */
|
||||||
#define GIC_CPU_INT5 5 /* Core Interrupt 5 */
|
#define GIC_CPU_INT5 5 /* Core Interrupt 5 */
|
||||||
|
|
||||||
|
/* MALTA GIC local interrupts */
|
||||||
|
#define GIC_INT_TMR (GIC_CPU_INT5)
|
||||||
|
#define GIC_INT_PERFCTR (GIC_CPU_INT5)
|
||||||
|
|
||||||
|
/* GIC constants */
|
||||||
|
/* Add 2 to convert non-eic hw int # to eic vector # */
|
||||||
|
#define GIC_CPU_TO_VEC_OFFSET (2)
|
||||||
|
/* If we map an intr to pin X, GIC will actually generate vector X+1 */
|
||||||
|
#define GIC_PIN_TO_VEC_OFFSET (1)
|
||||||
|
|
||||||
#define GIC_EXT_INTR(x) x
|
#define GIC_EXT_INTR(x) x
|
||||||
|
|
||||||
/* External Interrupts used for IPI */
|
/* External Interrupts used for IPI */
|
||||||
|
|
|
@ -22,7 +22,7 @@ struct task_struct;
|
||||||
* switch_to(n) should switch tasks to task nr n, first
|
* switch_to(n) should switch tasks to task nr n, first
|
||||||
* checking that n isn't the current task, in which case it does nothing.
|
* checking that n isn't the current task, in which case it does nothing.
|
||||||
*/
|
*/
|
||||||
extern asmlinkage void *resume(void *last, void *next, void *next_ti);
|
extern asmlinkage void *resume(void *last, void *next, void *next_ti, u32 __usedfpu);
|
||||||
|
|
||||||
extern unsigned int ll_bit;
|
extern unsigned int ll_bit;
|
||||||
extern struct task_struct *ll_task;
|
extern struct task_struct *ll_task;
|
||||||
|
@ -66,11 +66,13 @@ do { \
|
||||||
|
|
||||||
#define switch_to(prev, next, last) \
|
#define switch_to(prev, next, last) \
|
||||||
do { \
|
do { \
|
||||||
|
u32 __usedfpu; \
|
||||||
__mips_mt_fpaff_switch_to(prev); \
|
__mips_mt_fpaff_switch_to(prev); \
|
||||||
if (cpu_has_dsp) \
|
if (cpu_has_dsp) \
|
||||||
__save_dsp(prev); \
|
__save_dsp(prev); \
|
||||||
__clear_software_ll_bit(); \
|
__clear_software_ll_bit(); \
|
||||||
(last) = resume(prev, next, task_thread_info(next)); \
|
__usedfpu = test_and_clear_tsk_thread_flag(prev, TIF_USEDFPU); \
|
||||||
|
(last) = resume(prev, next, task_thread_info(next), __usedfpu); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define finish_arch_switch(prev) \
|
#define finish_arch_switch(prev) \
|
||||||
|
|
|
@ -60,6 +60,8 @@ struct thread_info {
|
||||||
register struct thread_info *__current_thread_info __asm__("$28");
|
register struct thread_info *__current_thread_info __asm__("$28");
|
||||||
#define current_thread_info() __current_thread_info
|
#define current_thread_info() __current_thread_info
|
||||||
|
|
||||||
|
#endif /* !__ASSEMBLY__ */
|
||||||
|
|
||||||
/* thread information allocation */
|
/* thread information allocation */
|
||||||
#if defined(CONFIG_PAGE_SIZE_4KB) && defined(CONFIG_32BIT)
|
#if defined(CONFIG_PAGE_SIZE_4KB) && defined(CONFIG_32BIT)
|
||||||
#define THREAD_SIZE_ORDER (1)
|
#define THREAD_SIZE_ORDER (1)
|
||||||
|
@ -85,8 +87,6 @@ register struct thread_info *__current_thread_info __asm__("$28");
|
||||||
|
|
||||||
#define STACK_WARN (THREAD_SIZE / 8)
|
#define STACK_WARN (THREAD_SIZE / 8)
|
||||||
|
|
||||||
#endif /* !__ASSEMBLY__ */
|
|
||||||
|
|
||||||
#define PREEMPT_ACTIVE 0x10000000
|
#define PREEMPT_ACTIVE 0x10000000
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
* Copyright (C) xxxx the Anonymous
|
* Copyright (C) xxxx the Anonymous
|
||||||
* Copyright (C) 1994 - 2006 Ralf Baechle
|
* Copyright (C) 1994 - 2006 Ralf Baechle
|
||||||
* Copyright (C) 2003, 2004 Maciej W. Rozycki
|
* Copyright (C) 2003, 2004 Maciej W. Rozycki
|
||||||
* Copyright (C) 2001, 2004 MIPS Inc.
|
* Copyright (C) 2001, 2004, 2011, 2012 MIPS Technologies, Inc.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or
|
* This program is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* modify it under the terms of the GNU General Public License
|
||||||
|
@ -199,6 +199,7 @@ void __init check_wait(void)
|
||||||
cpu_wait = rm7k_wait_irqoff;
|
cpu_wait = rm7k_wait_irqoff;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case CPU_M14KC:
|
||||||
case CPU_24K:
|
case CPU_24K:
|
||||||
case CPU_34K:
|
case CPU_34K:
|
||||||
case CPU_1004K:
|
case CPU_1004K:
|
||||||
|
@ -810,6 +811,10 @@ static inline void cpu_probe_mips(struct cpuinfo_mips *c, unsigned int cpu)
|
||||||
c->cputype = CPU_5KC;
|
c->cputype = CPU_5KC;
|
||||||
__cpu_name[cpu] = "MIPS 5Kc";
|
__cpu_name[cpu] = "MIPS 5Kc";
|
||||||
break;
|
break;
|
||||||
|
case PRID_IMP_5KE:
|
||||||
|
c->cputype = CPU_5KE;
|
||||||
|
__cpu_name[cpu] = "MIPS 5KE";
|
||||||
|
break;
|
||||||
case PRID_IMP_20KC:
|
case PRID_IMP_20KC:
|
||||||
c->cputype = CPU_20KC;
|
c->cputype = CPU_20KC;
|
||||||
__cpu_name[cpu] = "MIPS 20Kc";
|
__cpu_name[cpu] = "MIPS 20Kc";
|
||||||
|
@ -831,6 +836,10 @@ static inline void cpu_probe_mips(struct cpuinfo_mips *c, unsigned int cpu)
|
||||||
c->cputype = CPU_74K;
|
c->cputype = CPU_74K;
|
||||||
__cpu_name[cpu] = "MIPS 74Kc";
|
__cpu_name[cpu] = "MIPS 74Kc";
|
||||||
break;
|
break;
|
||||||
|
case PRID_IMP_M14KC:
|
||||||
|
c->cputype = CPU_M14KC;
|
||||||
|
__cpu_name[cpu] = "MIPS M14Kc";
|
||||||
|
break;
|
||||||
case PRID_IMP_1004K:
|
case PRID_IMP_1004K:
|
||||||
c->cputype = CPU_1004K;
|
c->cputype = CPU_1004K;
|
||||||
__cpu_name[cpu] = "MIPS 1004Kc";
|
__cpu_name[cpu] = "MIPS 1004Kc";
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
* License. See the file "COPYING" in the main directory of this archive
|
* License. See the file "COPYING" in the main directory of this archive
|
||||||
* for more details.
|
* for more details.
|
||||||
*
|
*
|
||||||
* Copyright (C) 1996, 97, 98, 99, 2000, 01, 03, 04, 05 by Ralf Baechle
|
* Copyright (C) 1996, 97, 98, 99, 2000, 01, 03, 04, 05, 12 by Ralf Baechle
|
||||||
* Copyright (C) 1999, 2000, 01 Silicon Graphics, Inc.
|
* Copyright (C) 1999, 2000, 01 Silicon Graphics, Inc.
|
||||||
*/
|
*/
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
|
@ -34,6 +34,12 @@ EXPORT_SYMBOL(memmove);
|
||||||
|
|
||||||
EXPORT_SYMBOL(kernel_thread);
|
EXPORT_SYMBOL(kernel_thread);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Functions that operate on entire pages. Mostly used by memory management.
|
||||||
|
*/
|
||||||
|
EXPORT_SYMBOL(clear_page);
|
||||||
|
EXPORT_SYMBOL(copy_page);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Userspace access stuff.
|
* Userspace access stuff.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* task_struct *resume(task_struct *prev, task_struct *next,
|
* task_struct *resume(task_struct *prev, task_struct *next,
|
||||||
* struct thread_info *next_ti)
|
* struct thread_info *next_ti, int usedfpu)
|
||||||
*/
|
*/
|
||||||
.align 7
|
.align 7
|
||||||
LEAF(resume)
|
LEAF(resume)
|
||||||
|
|
|
@ -162,11 +162,6 @@ static unsigned int counters_total_to_per_cpu(unsigned int counters)
|
||||||
return counters >> vpe_shift();
|
return counters >> vpe_shift();
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned int counters_per_cpu_to_total(unsigned int counters)
|
|
||||||
{
|
|
||||||
return counters << vpe_shift();
|
|
||||||
}
|
|
||||||
|
|
||||||
#else /* !CONFIG_MIPS_MT_SMP */
|
#else /* !CONFIG_MIPS_MT_SMP */
|
||||||
#define vpe_id() 0
|
#define vpe_id() 0
|
||||||
|
|
||||||
|
|
|
@ -43,7 +43,7 @@
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* task_struct *resume(task_struct *prev, task_struct *next,
|
* task_struct *resume(task_struct *prev, task_struct *next,
|
||||||
* struct thread_info *next_ti) )
|
* struct thread_info *next_ti, int usedfpu)
|
||||||
*/
|
*/
|
||||||
LEAF(resume)
|
LEAF(resume)
|
||||||
mfc0 t1, CP0_STATUS
|
mfc0 t1, CP0_STATUS
|
||||||
|
@ -51,18 +51,9 @@ LEAF(resume)
|
||||||
cpu_save_nonscratch a0
|
cpu_save_nonscratch a0
|
||||||
sw ra, THREAD_REG31(a0)
|
sw ra, THREAD_REG31(a0)
|
||||||
|
|
||||||
/*
|
beqz a3, 1f
|
||||||
* check if we need to save FPU registers
|
|
||||||
*/
|
|
||||||
lw t3, TASK_THREAD_INFO(a0)
|
|
||||||
lw t0, TI_FLAGS(t3)
|
|
||||||
li t1, _TIF_USEDFPU
|
|
||||||
and t2, t0, t1
|
|
||||||
beqz t2, 1f
|
|
||||||
nor t1, zero, t1
|
|
||||||
|
|
||||||
and t0, t0, t1
|
PTR_L t3, TASK_THREAD_INFO(a0)
|
||||||
sw t0, TI_FLAGS(t3)
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* clear saved user stack CU1 bit
|
* clear saved user stack CU1 bit
|
||||||
|
|
|
@ -41,7 +41,7 @@
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* task_struct *resume(task_struct *prev, task_struct *next,
|
* task_struct *resume(task_struct *prev, task_struct *next,
|
||||||
* struct thread_info *next_ti)
|
* struct thread_info *next_ti, int usedfpu)
|
||||||
*/
|
*/
|
||||||
.align 5
|
.align 5
|
||||||
LEAF(resume)
|
LEAF(resume)
|
||||||
|
@ -53,16 +53,10 @@
|
||||||
/*
|
/*
|
||||||
* check if we need to save FPU registers
|
* check if we need to save FPU registers
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
beqz a3, 1f
|
||||||
|
|
||||||
PTR_L t3, TASK_THREAD_INFO(a0)
|
PTR_L t3, TASK_THREAD_INFO(a0)
|
||||||
LONG_L t0, TI_FLAGS(t3)
|
|
||||||
li t1, _TIF_USEDFPU
|
|
||||||
and t2, t0, t1
|
|
||||||
beqz t2, 1f
|
|
||||||
nor t1, zero, t1
|
|
||||||
|
|
||||||
and t0, t0, t1
|
|
||||||
LONG_S t0, TI_FLAGS(t3)
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* clear saved user stack CU1 bit
|
* clear saved user stack CU1 bit
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
#include <linux/smp.h>
|
#include <linux/smp.h>
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
#include <linux/spinlock.h>
|
#include <linux/spinlock.h>
|
||||||
#include <linux/init.h>
|
|
||||||
#include <linux/cpu.h>
|
#include <linux/cpu.h>
|
||||||
#include <linux/cpumask.h>
|
#include <linux/cpumask.h>
|
||||||
#include <linux/reboot.h>
|
#include <linux/reboot.h>
|
||||||
|
@ -197,13 +196,6 @@ static void bmips_init_secondary(void)
|
||||||
|
|
||||||
write_c0_brcm_action(ACTION_CLR_IPI(smp_processor_id(), 0));
|
write_c0_brcm_action(ACTION_CLR_IPI(smp_processor_id(), 0));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* make sure there won't be a timer interrupt for a little while */
|
|
||||||
write_c0_compare(read_c0_count() + mips_hpt_frequency / HZ);
|
|
||||||
|
|
||||||
irq_enable_hazard();
|
|
||||||
set_c0_status(IE_SW0 | IE_SW1 | IE_IRQ1 | IE_IRQ5 | ST0_IE);
|
|
||||||
irq_enable_hazard();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -212,6 +204,13 @@ static void bmips_init_secondary(void)
|
||||||
static void bmips_smp_finish(void)
|
static void bmips_smp_finish(void)
|
||||||
{
|
{
|
||||||
pr_info("SMP: CPU%d is running\n", smp_processor_id());
|
pr_info("SMP: CPU%d is running\n", smp_processor_id());
|
||||||
|
|
||||||
|
/* make sure there won't be a timer interrupt for a little while */
|
||||||
|
write_c0_compare(read_c0_count() + mips_hpt_frequency / HZ);
|
||||||
|
|
||||||
|
irq_enable_hazard();
|
||||||
|
set_c0_status(IE_SW0 | IE_SW1 | IE_IRQ1 | IE_IRQ5 | ST0_IE);
|
||||||
|
irq_enable_hazard();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -122,13 +122,21 @@ asmlinkage __cpuinit void start_secondary(void)
|
||||||
|
|
||||||
notify_cpu_starting(cpu);
|
notify_cpu_starting(cpu);
|
||||||
|
|
||||||
mp_ops->smp_finish();
|
set_cpu_online(cpu, true);
|
||||||
|
|
||||||
set_cpu_sibling_map(cpu);
|
set_cpu_sibling_map(cpu);
|
||||||
|
|
||||||
cpu_set(cpu, cpu_callin_map);
|
cpu_set(cpu, cpu_callin_map);
|
||||||
|
|
||||||
synchronise_count_slave();
|
synchronise_count_slave();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* irq will be enabled in ->smp_finish(), enabling it too early
|
||||||
|
* is dangerous.
|
||||||
|
*/
|
||||||
|
WARN_ON_ONCE(!irqs_disabled());
|
||||||
|
mp_ops->smp_finish();
|
||||||
|
|
||||||
cpu_idle();
|
cpu_idle();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -196,8 +204,6 @@ int __cpuinit __cpu_up(unsigned int cpu, struct task_struct *tidle)
|
||||||
while (!cpu_isset(cpu, cpu_callin_map))
|
while (!cpu_isset(cpu, cpu_callin_map))
|
||||||
udelay(100);
|
udelay(100);
|
||||||
|
|
||||||
set_cpu_online(cpu, true);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -322,7 +322,7 @@ int __init smtc_build_cpu_map(int start_cpu_slot)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Common setup before any secondaries are started
|
* Common setup before any secondaries are started
|
||||||
* Make sure all CPU's are in a sensible state before we boot any of the
|
* Make sure all CPUs are in a sensible state before we boot any of the
|
||||||
* secondaries.
|
* secondaries.
|
||||||
*
|
*
|
||||||
* For MIPS MT "SMTC" operation, we set up all TCs, spread as evenly
|
* For MIPS MT "SMTC" operation, we set up all TCs, spread as evenly
|
||||||
|
@ -340,12 +340,12 @@ static void smtc_tc_setup(int vpe, int tc, int cpu)
|
||||||
/*
|
/*
|
||||||
* TCContext gets an offset from the base of the IPIQ array
|
* TCContext gets an offset from the base of the IPIQ array
|
||||||
* to be used in low-level code to detect the presence of
|
* to be used in low-level code to detect the presence of
|
||||||
* an active IPI queue
|
* an active IPI queue.
|
||||||
*/
|
*/
|
||||||
write_tc_c0_tccontext((sizeof(struct smtc_ipi_q) * cpu) << 16);
|
write_tc_c0_tccontext((sizeof(struct smtc_ipi_q) * cpu) << 16);
|
||||||
/* Bind tc to vpe */
|
/* Bind tc to vpe */
|
||||||
write_tc_c0_tcbind(vpe);
|
write_tc_c0_tcbind(vpe);
|
||||||
/* In general, all TCs should have the same cpu_data indications */
|
/* In general, all TCs should have the same cpu_data indications. */
|
||||||
memcpy(&cpu_data[cpu], &cpu_data[0], sizeof(struct cpuinfo_mips));
|
memcpy(&cpu_data[cpu], &cpu_data[0], sizeof(struct cpuinfo_mips));
|
||||||
/* For 34Kf, start with TC/CPU 0 as sole owner of single FPU context */
|
/* For 34Kf, start with TC/CPU 0 as sole owner of single FPU context */
|
||||||
if (cpu_data[0].cputype == CPU_34K ||
|
if (cpu_data[0].cputype == CPU_34K ||
|
||||||
|
@ -358,8 +358,8 @@ static void smtc_tc_setup(int vpe, int tc, int cpu)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Tweak to get Count registes in as close a sync as possible.
|
* Tweak to get Count registes in as close a sync as possible. The
|
||||||
* Value seems good for 34K-class cores.
|
* value seems good for 34K-class cores.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define CP0_SKEW 8
|
#define CP0_SKEW 8
|
||||||
|
@ -615,7 +615,6 @@ void __cpuinit smtc_boot_secondary(int cpu, struct task_struct *idle)
|
||||||
|
|
||||||
void smtc_init_secondary(void)
|
void smtc_init_secondary(void)
|
||||||
{
|
{
|
||||||
local_irq_enable();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void smtc_smp_finish(void)
|
void smtc_smp_finish(void)
|
||||||
|
@ -631,6 +630,8 @@ void smtc_smp_finish(void)
|
||||||
if (cpu > 0 && (cpu_data[cpu].vpe_id != cpu_data[cpu - 1].vpe_id))
|
if (cpu > 0 && (cpu_data[cpu].vpe_id != cpu_data[cpu - 1].vpe_id))
|
||||||
write_c0_compare(read_c0_count() + mips_hpt_frequency/HZ);
|
write_c0_compare(read_c0_count() + mips_hpt_frequency/HZ);
|
||||||
|
|
||||||
|
local_irq_enable();
|
||||||
|
|
||||||
printk("TC %d going on-line as CPU %d\n",
|
printk("TC %d going on-line as CPU %d\n",
|
||||||
cpu_data[smp_processor_id()].tc_id, smp_processor_id());
|
cpu_data[smp_processor_id()].tc_id, smp_processor_id());
|
||||||
}
|
}
|
||||||
|
|
|
@ -111,7 +111,6 @@ void __cpuinit synchronise_count_master(void)
|
||||||
void __cpuinit synchronise_count_slave(void)
|
void __cpuinit synchronise_count_slave(void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
unsigned long flags;
|
|
||||||
unsigned int initcount;
|
unsigned int initcount;
|
||||||
int ncpus;
|
int ncpus;
|
||||||
|
|
||||||
|
@ -123,8 +122,6 @@ void __cpuinit synchronise_count_slave(void)
|
||||||
return;
|
return;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
local_irq_save(flags);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Not every cpu is online at the time this gets called,
|
* Not every cpu is online at the time this gets called,
|
||||||
* so we first wait for the master to say everyone is ready
|
* so we first wait for the master to say everyone is ready
|
||||||
|
@ -154,7 +151,5 @@ void __cpuinit synchronise_count_slave(void)
|
||||||
}
|
}
|
||||||
/* Arrange for an interrupt in a short while */
|
/* Arrange for an interrupt in a short while */
|
||||||
write_c0_compare(read_c0_count() + COUNTON);
|
write_c0_compare(read_c0_count() + COUNTON);
|
||||||
|
|
||||||
local_irq_restore(flags);
|
|
||||||
}
|
}
|
||||||
#undef NR_LOOPS
|
#undef NR_LOOPS
|
||||||
|
|
|
@ -132,6 +132,9 @@ static void show_backtrace(struct task_struct *task, const struct pt_regs *regs)
|
||||||
unsigned long ra = regs->regs[31];
|
unsigned long ra = regs->regs[31];
|
||||||
unsigned long pc = regs->cp0_epc;
|
unsigned long pc = regs->cp0_epc;
|
||||||
|
|
||||||
|
if (!task)
|
||||||
|
task = current;
|
||||||
|
|
||||||
if (raw_show_trace || !__kernel_text_address(pc)) {
|
if (raw_show_trace || !__kernel_text_address(pc)) {
|
||||||
show_raw_backtrace(sp);
|
show_raw_backtrace(sp);
|
||||||
return;
|
return;
|
||||||
|
@ -1249,6 +1252,7 @@ static inline void parity_protection_init(void)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CPU_5KC:
|
case CPU_5KC:
|
||||||
|
case CPU_5KE:
|
||||||
write_c0_ecc(0x80000000);
|
write_c0_ecc(0x80000000);
|
||||||
back_to_back_c0_hazard();
|
back_to_back_c0_hazard();
|
||||||
/* Set the PE bit (bit 31) in the c0_errctl register. */
|
/* Set the PE bit (bit 31) in the c0_errctl register. */
|
||||||
|
@ -1498,6 +1502,7 @@ extern void flush_tlb_handlers(void);
|
||||||
* Timer interrupt
|
* Timer interrupt
|
||||||
*/
|
*/
|
||||||
int cp0_compare_irq;
|
int cp0_compare_irq;
|
||||||
|
EXPORT_SYMBOL_GPL(cp0_compare_irq);
|
||||||
int cp0_compare_irq_shift;
|
int cp0_compare_irq_shift;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1597,7 +1602,7 @@ void __cpuinit per_cpu_trap_init(bool is_boot_cpu)
|
||||||
cp0_perfcount_irq = -1;
|
cp0_perfcount_irq = -1;
|
||||||
} else {
|
} else {
|
||||||
cp0_compare_irq = CP0_LEGACY_COMPARE_IRQ;
|
cp0_compare_irq = CP0_LEGACY_COMPARE_IRQ;
|
||||||
cp0_compare_irq_shift = cp0_compare_irq;
|
cp0_compare_irq_shift = CP0_LEGACY_PERFCNT_IRQ;
|
||||||
cp0_perfcount_irq = -1;
|
cp0_perfcount_irq = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#include <asm/asm-offsets.h>
|
#include <asm/asm-offsets.h>
|
||||||
#include <asm/page.h>
|
#include <asm/page.h>
|
||||||
|
#include <asm/thread_info.h>
|
||||||
#include <asm-generic/vmlinux.lds.h>
|
#include <asm-generic/vmlinux.lds.h>
|
||||||
|
|
||||||
#undef mips
|
#undef mips
|
||||||
|
@ -72,7 +73,7 @@ SECTIONS
|
||||||
.data : { /* Data */
|
.data : { /* Data */
|
||||||
. = . + DATAOFFSET; /* for CONFIG_MAPPED_KERNEL */
|
. = . + DATAOFFSET; /* for CONFIG_MAPPED_KERNEL */
|
||||||
|
|
||||||
INIT_TASK_DATA(PAGE_SIZE)
|
INIT_TASK_DATA(THREAD_SIZE)
|
||||||
NOSAVE_DATA
|
NOSAVE_DATA
|
||||||
CACHELINE_ALIGNED_DATA(1 << CONFIG_MIPS_L1_CACHE_SHIFT)
|
CACHELINE_ALIGNED_DATA(1 << CONFIG_MIPS_L1_CACHE_SHIFT)
|
||||||
READ_MOSTLY_DATA(1 << CONFIG_MIPS_L1_CACHE_SHIFT)
|
READ_MOSTLY_DATA(1 << CONFIG_MIPS_L1_CACHE_SHIFT)
|
||||||
|
|
|
@ -3,8 +3,8 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
obj-y += cache.o dma-default.o extable.o fault.o \
|
obj-y += cache.o dma-default.o extable.o fault.o \
|
||||||
gup.o init.o mmap.o page.o tlbex.o \
|
gup.o init.o mmap.o page.o page-funcs.o \
|
||||||
tlbex-fault.o uasm.o
|
tlbex.o tlbex-fault.o uasm.o
|
||||||
|
|
||||||
obj-$(CONFIG_32BIT) += ioremap.o pgtable-32.o
|
obj-$(CONFIG_32BIT) += ioremap.o pgtable-32.o
|
||||||
obj-$(CONFIG_64BIT) += pgtable-64.o
|
obj-$(CONFIG_64BIT) += pgtable-64.o
|
||||||
|
|
|
@ -977,7 +977,7 @@ static void __cpuinit probe_pcache(void)
|
||||||
c->icache.linesz = 2 << lsize;
|
c->icache.linesz = 2 << lsize;
|
||||||
else
|
else
|
||||||
c->icache.linesz = lsize;
|
c->icache.linesz = lsize;
|
||||||
c->icache.sets = 64 << ((config1 >> 22) & 7);
|
c->icache.sets = 32 << (((config1 >> 22) + 1) & 7);
|
||||||
c->icache.ways = 1 + ((config1 >> 16) & 7);
|
c->icache.ways = 1 + ((config1 >> 16) & 7);
|
||||||
|
|
||||||
icache_size = c->icache.sets *
|
icache_size = c->icache.sets *
|
||||||
|
@ -997,7 +997,7 @@ static void __cpuinit probe_pcache(void)
|
||||||
c->dcache.linesz = 2 << lsize;
|
c->dcache.linesz = 2 << lsize;
|
||||||
else
|
else
|
||||||
c->dcache.linesz= lsize;
|
c->dcache.linesz= lsize;
|
||||||
c->dcache.sets = 64 << ((config1 >> 13) & 7);
|
c->dcache.sets = 32 << (((config1 >> 13) + 1) & 7);
|
||||||
c->dcache.ways = 1 + ((config1 >> 7) & 7);
|
c->dcache.ways = 1 + ((config1 >> 7) & 7);
|
||||||
|
|
||||||
dcache_size = c->dcache.sets *
|
dcache_size = c->dcache.sets *
|
||||||
|
@ -1051,6 +1051,7 @@ static void __cpuinit probe_pcache(void)
|
||||||
case CPU_R14000:
|
case CPU_R14000:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case CPU_M14KC:
|
||||||
case CPU_24K:
|
case CPU_24K:
|
||||||
case CPU_34K:
|
case CPU_34K:
|
||||||
case CPU_74K:
|
case CPU_74K:
|
||||||
|
|
50
arch/mips/mm/page-funcs.S
Normal file
50
arch/mips/mm/page-funcs.S
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
/*
|
||||||
|
* This file is subject to the terms and conditions of the GNU General Public
|
||||||
|
* License. See the file "COPYING" in the main directory of this archive
|
||||||
|
* for more details.
|
||||||
|
*
|
||||||
|
* Micro-assembler generated clear_page/copy_page functions.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2012 MIPS Technologies, Inc.
|
||||||
|
* Copyright (C) 2012 Ralf Baechle <ralf@linux-mips.org>
|
||||||
|
*/
|
||||||
|
#include <asm/asm.h>
|
||||||
|
#include <asm/regdef.h>
|
||||||
|
|
||||||
|
#ifdef CONFIG_SIBYTE_DMA_PAGEOPS
|
||||||
|
#define cpu_clear_page_function_name clear_page_cpu
|
||||||
|
#define cpu_copy_page_function_name copy_page_cpu
|
||||||
|
#else
|
||||||
|
#define cpu_clear_page_function_name clear_page
|
||||||
|
#define cpu_copy_page_function_name copy_page
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Maximum sizes:
|
||||||
|
*
|
||||||
|
* R4000 128 bytes S-cache: 0x058 bytes
|
||||||
|
* R4600 v1.7: 0x05c bytes
|
||||||
|
* R4600 v2.0: 0x060 bytes
|
||||||
|
* With prefetching, 16 word strides 0x120 bytes
|
||||||
|
*/
|
||||||
|
EXPORT(__clear_page_start)
|
||||||
|
LEAF(cpu_clear_page_function_name)
|
||||||
|
1: j 1b /* Dummy, will be replaced. */
|
||||||
|
.space 288
|
||||||
|
END(cpu_clear_page_function_name)
|
||||||
|
EXPORT(__clear_page_end)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Maximum sizes:
|
||||||
|
*
|
||||||
|
* R4000 128 bytes S-cache: 0x11c bytes
|
||||||
|
* R4600 v1.7: 0x080 bytes
|
||||||
|
* R4600 v2.0: 0x07c bytes
|
||||||
|
* With prefetching, 16 word strides 0x540 bytes
|
||||||
|
*/
|
||||||
|
EXPORT(__copy_page_start)
|
||||||
|
LEAF(cpu_copy_page_function_name)
|
||||||
|
1: j 1b /* Dummy, will be replaced. */
|
||||||
|
.space 1344
|
||||||
|
END(cpu_copy_page_function_name)
|
||||||
|
EXPORT(__copy_page_end)
|
|
@ -6,6 +6,7 @@
|
||||||
* Copyright (C) 2003, 04, 05 Ralf Baechle (ralf@linux-mips.org)
|
* Copyright (C) 2003, 04, 05 Ralf Baechle (ralf@linux-mips.org)
|
||||||
* Copyright (C) 2007 Maciej W. Rozycki
|
* Copyright (C) 2007 Maciej W. Rozycki
|
||||||
* Copyright (C) 2008 Thiemo Seufer
|
* Copyright (C) 2008 Thiemo Seufer
|
||||||
|
* Copyright (C) 2012 MIPS Technologies, Inc.
|
||||||
*/
|
*/
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
|
@ -71,45 +72,6 @@ static struct uasm_reloc __cpuinitdata relocs[5];
|
||||||
#define cpu_is_r4600_v1_x() ((read_c0_prid() & 0xfffffff0) == 0x00002010)
|
#define cpu_is_r4600_v1_x() ((read_c0_prid() & 0xfffffff0) == 0x00002010)
|
||||||
#define cpu_is_r4600_v2_x() ((read_c0_prid() & 0xfffffff0) == 0x00002020)
|
#define cpu_is_r4600_v2_x() ((read_c0_prid() & 0xfffffff0) == 0x00002020)
|
||||||
|
|
||||||
/*
|
|
||||||
* Maximum sizes:
|
|
||||||
*
|
|
||||||
* R4000 128 bytes S-cache: 0x058 bytes
|
|
||||||
* R4600 v1.7: 0x05c bytes
|
|
||||||
* R4600 v2.0: 0x060 bytes
|
|
||||||
* With prefetching, 16 word strides 0x120 bytes
|
|
||||||
*/
|
|
||||||
|
|
||||||
static u32 clear_page_array[0x120 / 4];
|
|
||||||
|
|
||||||
#ifdef CONFIG_SIBYTE_DMA_PAGEOPS
|
|
||||||
void clear_page_cpu(void *page) __attribute__((alias("clear_page_array")));
|
|
||||||
#else
|
|
||||||
void clear_page(void *page) __attribute__((alias("clear_page_array")));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
EXPORT_SYMBOL(clear_page);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Maximum sizes:
|
|
||||||
*
|
|
||||||
* R4000 128 bytes S-cache: 0x11c bytes
|
|
||||||
* R4600 v1.7: 0x080 bytes
|
|
||||||
* R4600 v2.0: 0x07c bytes
|
|
||||||
* With prefetching, 16 word strides 0x540 bytes
|
|
||||||
*/
|
|
||||||
static u32 copy_page_array[0x540 / 4];
|
|
||||||
|
|
||||||
#ifdef CONFIG_SIBYTE_DMA_PAGEOPS
|
|
||||||
void
|
|
||||||
copy_page_cpu(void *to, void *from) __attribute__((alias("copy_page_array")));
|
|
||||||
#else
|
|
||||||
void copy_page(void *to, void *from) __attribute__((alias("copy_page_array")));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
EXPORT_SYMBOL(copy_page);
|
|
||||||
|
|
||||||
|
|
||||||
static int pref_bias_clear_store __cpuinitdata;
|
static int pref_bias_clear_store __cpuinitdata;
|
||||||
static int pref_bias_copy_load __cpuinitdata;
|
static int pref_bias_copy_load __cpuinitdata;
|
||||||
static int pref_bias_copy_store __cpuinitdata;
|
static int pref_bias_copy_store __cpuinitdata;
|
||||||
|
@ -282,10 +244,15 @@ static inline void __cpuinit build_clear_pref(u32 **buf, int off)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern u32 __clear_page_start;
|
||||||
|
extern u32 __clear_page_end;
|
||||||
|
extern u32 __copy_page_start;
|
||||||
|
extern u32 __copy_page_end;
|
||||||
|
|
||||||
void __cpuinit build_clear_page(void)
|
void __cpuinit build_clear_page(void)
|
||||||
{
|
{
|
||||||
int off;
|
int off;
|
||||||
u32 *buf = (u32 *)&clear_page_array;
|
u32 *buf = &__clear_page_start;
|
||||||
struct uasm_label *l = labels;
|
struct uasm_label *l = labels;
|
||||||
struct uasm_reloc *r = relocs;
|
struct uasm_reloc *r = relocs;
|
||||||
int i;
|
int i;
|
||||||
|
@ -356,17 +323,17 @@ void __cpuinit build_clear_page(void)
|
||||||
uasm_i_jr(&buf, RA);
|
uasm_i_jr(&buf, RA);
|
||||||
uasm_i_nop(&buf);
|
uasm_i_nop(&buf);
|
||||||
|
|
||||||
BUG_ON(buf > clear_page_array + ARRAY_SIZE(clear_page_array));
|
BUG_ON(buf > &__clear_page_end);
|
||||||
|
|
||||||
uasm_resolve_relocs(relocs, labels);
|
uasm_resolve_relocs(relocs, labels);
|
||||||
|
|
||||||
pr_debug("Synthesized clear page handler (%u instructions).\n",
|
pr_debug("Synthesized clear page handler (%u instructions).\n",
|
||||||
(u32)(buf - clear_page_array));
|
(u32)(buf - &__clear_page_start));
|
||||||
|
|
||||||
pr_debug("\t.set push\n");
|
pr_debug("\t.set push\n");
|
||||||
pr_debug("\t.set noreorder\n");
|
pr_debug("\t.set noreorder\n");
|
||||||
for (i = 0; i < (buf - clear_page_array); i++)
|
for (i = 0; i < (buf - &__clear_page_start); i++)
|
||||||
pr_debug("\t.word 0x%08x\n", clear_page_array[i]);
|
pr_debug("\t.word 0x%08x\n", (&__clear_page_start)[i]);
|
||||||
pr_debug("\t.set pop\n");
|
pr_debug("\t.set pop\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -427,7 +394,7 @@ static inline void build_copy_store_pref(u32 **buf, int off)
|
||||||
void __cpuinit build_copy_page(void)
|
void __cpuinit build_copy_page(void)
|
||||||
{
|
{
|
||||||
int off;
|
int off;
|
||||||
u32 *buf = (u32 *)©_page_array;
|
u32 *buf = &__copy_page_start;
|
||||||
struct uasm_label *l = labels;
|
struct uasm_label *l = labels;
|
||||||
struct uasm_reloc *r = relocs;
|
struct uasm_reloc *r = relocs;
|
||||||
int i;
|
int i;
|
||||||
|
@ -595,21 +562,23 @@ void __cpuinit build_copy_page(void)
|
||||||
uasm_i_jr(&buf, RA);
|
uasm_i_jr(&buf, RA);
|
||||||
uasm_i_nop(&buf);
|
uasm_i_nop(&buf);
|
||||||
|
|
||||||
BUG_ON(buf > copy_page_array + ARRAY_SIZE(copy_page_array));
|
BUG_ON(buf > &__copy_page_end);
|
||||||
|
|
||||||
uasm_resolve_relocs(relocs, labels);
|
uasm_resolve_relocs(relocs, labels);
|
||||||
|
|
||||||
pr_debug("Synthesized copy page handler (%u instructions).\n",
|
pr_debug("Synthesized copy page handler (%u instructions).\n",
|
||||||
(u32)(buf - copy_page_array));
|
(u32)(buf - &__copy_page_start));
|
||||||
|
|
||||||
pr_debug("\t.set push\n");
|
pr_debug("\t.set push\n");
|
||||||
pr_debug("\t.set noreorder\n");
|
pr_debug("\t.set noreorder\n");
|
||||||
for (i = 0; i < (buf - copy_page_array); i++)
|
for (i = 0; i < (buf - &__copy_page_start); i++)
|
||||||
pr_debug("\t.word 0x%08x\n", copy_page_array[i]);
|
pr_debug("\t.word 0x%08x\n", (&__copy_page_start)[i]);
|
||||||
pr_debug("\t.set pop\n");
|
pr_debug("\t.set pop\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_SIBYTE_DMA_PAGEOPS
|
#ifdef CONFIG_SIBYTE_DMA_PAGEOPS
|
||||||
|
extern void clear_page_cpu(void *page);
|
||||||
|
extern void copy_page_cpu(void *to, void *from);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Pad descriptors to cacheline, since each is exclusively owned by a
|
* Pad descriptors to cacheline, since each is exclusively owned by a
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
* Copyright (C) 2005, 2007, 2008, 2009 Maciej W. Rozycki
|
* Copyright (C) 2005, 2007, 2008, 2009 Maciej W. Rozycki
|
||||||
* Copyright (C) 2006 Ralf Baechle (ralf@linux-mips.org)
|
* Copyright (C) 2006 Ralf Baechle (ralf@linux-mips.org)
|
||||||
* Copyright (C) 2008, 2009 Cavium Networks, Inc.
|
* Copyright (C) 2008, 2009 Cavium Networks, Inc.
|
||||||
|
* Copyright (C) 2011 MIPS Technologies, Inc.
|
||||||
*
|
*
|
||||||
* ... and the days got worse and worse and now you see
|
* ... and the days got worse and worse and now you see
|
||||||
* I've gone completly out of my mind.
|
* I've gone completly out of my mind.
|
||||||
|
@ -494,6 +495,7 @@ static void __cpuinit build_tlb_write_entry(u32 **p, struct uasm_label **l,
|
||||||
case CPU_R14000:
|
case CPU_R14000:
|
||||||
case CPU_4KC:
|
case CPU_4KC:
|
||||||
case CPU_4KEC:
|
case CPU_4KEC:
|
||||||
|
case CPU_M14KC:
|
||||||
case CPU_SB1:
|
case CPU_SB1:
|
||||||
case CPU_SB1A:
|
case CPU_SB1A:
|
||||||
case CPU_4KSC:
|
case CPU_4KSC:
|
||||||
|
|
|
@ -241,8 +241,9 @@ void __init mips_pcibios_init(void)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (controller->io_resource->start < 0x00001000UL) /* FIXME */
|
/* Change start address to avoid conflicts with ACPI and SMB devices */
|
||||||
controller->io_resource->start = 0x00001000UL;
|
if (controller->io_resource->start < 0x00002000UL)
|
||||||
|
controller->io_resource->start = 0x00002000UL;
|
||||||
|
|
||||||
iomem_resource.end &= 0xfffffffffULL; /* 64 GB */
|
iomem_resource.end &= 0xfffffffffULL; /* 64 GB */
|
||||||
ioport_resource.end = controller->io_resource->end;
|
ioport_resource.end = controller->io_resource->end;
|
||||||
|
@ -253,7 +254,7 @@ void __init mips_pcibios_init(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Enable PCI 2.1 compatibility in PIIX4 */
|
/* Enable PCI 2.1 compatibility in PIIX4 */
|
||||||
static void __init quirk_dlcsetup(struct pci_dev *dev)
|
static void __devinit quirk_dlcsetup(struct pci_dev *dev)
|
||||||
{
|
{
|
||||||
u8 odlc, ndlc;
|
u8 odlc, ndlc;
|
||||||
(void) pci_read_config_byte(dev, 0x82, &odlc);
|
(void) pci_read_config_byte(dev, 0x82, &odlc);
|
||||||
|
|
|
@ -111,7 +111,7 @@ static void __init pci_clock_check(void)
|
||||||
unsigned int __iomem *jmpr_p =
|
unsigned int __iomem *jmpr_p =
|
||||||
(unsigned int *) ioremap(MALTA_JMPRS_REG, sizeof(unsigned int));
|
(unsigned int *) ioremap(MALTA_JMPRS_REG, sizeof(unsigned int));
|
||||||
int jmpr = (__raw_readl(jmpr_p) >> 2) & 0x07;
|
int jmpr = (__raw_readl(jmpr_p) >> 2) & 0x07;
|
||||||
static const int pciclocks[] __initdata = {
|
static const int pciclocks[] __initconst = {
|
||||||
33, 20, 25, 30, 12, 16, 37, 10
|
33, 20, 25, 30, 12, 16, 37, 10
|
||||||
};
|
};
|
||||||
int pciclock = pciclocks[jmpr];
|
int pciclock = pciclocks[jmpr];
|
||||||
|
|
|
@ -82,8 +82,10 @@ void __init prom_free_prom_memory(void)
|
||||||
|
|
||||||
void xlp_mmu_init(void)
|
void xlp_mmu_init(void)
|
||||||
{
|
{
|
||||||
|
/* enable extended TLB and Large Fixed TLB */
|
||||||
write_c0_config6(read_c0_config6() | 0x24);
|
write_c0_config6(read_c0_config6() | 0x24);
|
||||||
current_cpu_data.tlbsize = ((read_c0_config6() >> 16) & 0xffff) + 1;
|
|
||||||
|
/* set page mask of Fixed TLB in config7 */
|
||||||
write_c0_config7(PM_DEFAULT_MASK >>
|
write_c0_config7(PM_DEFAULT_MASK >>
|
||||||
(13 + (ffz(PM_DEFAULT_MASK >> 13) / 2)));
|
(13 + (ffz(PM_DEFAULT_MASK >> 13) / 2)));
|
||||||
}
|
}
|
||||||
|
@ -100,6 +102,10 @@ void __init prom_init(void)
|
||||||
nlm_common_ebase = read_c0_ebase() & (~((1 << 12) - 1));
|
nlm_common_ebase = read_c0_ebase() & (~((1 << 12) - 1));
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
nlm_wakeup_secondary_cpus(0xffffffff);
|
nlm_wakeup_secondary_cpus(0xffffffff);
|
||||||
|
|
||||||
|
/* update TLB size after waking up threads */
|
||||||
|
current_cpu_data.tlbsize = ((read_c0_config6() >> 16) & 0xffff) + 1;
|
||||||
|
|
||||||
register_smp_ops(&nlm_smp_ops);
|
register_smp_ops(&nlm_smp_ops);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
@ -78,6 +78,7 @@ int __init oprofile_arch_init(struct oprofile_operations *ops)
|
||||||
|
|
||||||
switch (current_cpu_type()) {
|
switch (current_cpu_type()) {
|
||||||
case CPU_5KC:
|
case CPU_5KC:
|
||||||
|
case CPU_M14KC:
|
||||||
case CPU_20KC:
|
case CPU_20KC:
|
||||||
case CPU_24K:
|
case CPU_24K:
|
||||||
case CPU_25KF:
|
case CPU_25KF:
|
||||||
|
|
|
@ -322,6 +322,10 @@ static int __init mipsxx_init(void)
|
||||||
|
|
||||||
op_model_mipsxx_ops.num_counters = counters;
|
op_model_mipsxx_ops.num_counters = counters;
|
||||||
switch (current_cpu_type()) {
|
switch (current_cpu_type()) {
|
||||||
|
case CPU_M14KC:
|
||||||
|
op_model_mipsxx_ops.cpu_type = "mips/M14Kc";
|
||||||
|
break;
|
||||||
|
|
||||||
case CPU_20KC:
|
case CPU_20KC:
|
||||||
op_model_mipsxx_ops.cpu_type = "mips/20K";
|
op_model_mipsxx_ops.cpu_type = "mips/20K";
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -48,7 +48,7 @@ int pcibios_plat_dev_init(struct pci_dev *dev)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __init loongson2e_nec_fixup(struct pci_dev *pdev)
|
static void __devinit loongson2e_nec_fixup(struct pci_dev *pdev)
|
||||||
{
|
{
|
||||||
unsigned int val;
|
unsigned int val;
|
||||||
|
|
||||||
|
@ -60,7 +60,7 @@ static void __init loongson2e_nec_fixup(struct pci_dev *pdev)
|
||||||
pci_write_config_dword(pdev, 0xe4, 1 << 5);
|
pci_write_config_dword(pdev, 0xe4, 1 << 5);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __init loongson2e_686b_func0_fixup(struct pci_dev *pdev)
|
static void __devinit loongson2e_686b_func0_fixup(struct pci_dev *pdev)
|
||||||
{
|
{
|
||||||
unsigned char c;
|
unsigned char c;
|
||||||
|
|
||||||
|
@ -135,7 +135,7 @@ static void __init loongson2e_686b_func0_fixup(struct pci_dev *pdev)
|
||||||
printk(KERN_INFO"via686b fix: ISA bridge done\n");
|
printk(KERN_INFO"via686b fix: ISA bridge done\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __init loongson2e_686b_func1_fixup(struct pci_dev *pdev)
|
static void __devinit loongson2e_686b_func1_fixup(struct pci_dev *pdev)
|
||||||
{
|
{
|
||||||
printk(KERN_INFO"via686b fix: IDE\n");
|
printk(KERN_INFO"via686b fix: IDE\n");
|
||||||
|
|
||||||
|
@ -168,19 +168,19 @@ static void __init loongson2e_686b_func1_fixup(struct pci_dev *pdev)
|
||||||
printk(KERN_INFO"via686b fix: IDE done\n");
|
printk(KERN_INFO"via686b fix: IDE done\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __init loongson2e_686b_func2_fixup(struct pci_dev *pdev)
|
static void __devinit loongson2e_686b_func2_fixup(struct pci_dev *pdev)
|
||||||
{
|
{
|
||||||
/* irq routing */
|
/* irq routing */
|
||||||
pci_write_config_byte(pdev, PCI_INTERRUPT_LINE, 10);
|
pci_write_config_byte(pdev, PCI_INTERRUPT_LINE, 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __init loongson2e_686b_func3_fixup(struct pci_dev *pdev)
|
static void __devinit loongson2e_686b_func3_fixup(struct pci_dev *pdev)
|
||||||
{
|
{
|
||||||
/* irq routing */
|
/* irq routing */
|
||||||
pci_write_config_byte(pdev, PCI_INTERRUPT_LINE, 11);
|
pci_write_config_byte(pdev, PCI_INTERRUPT_LINE, 11);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __init loongson2e_686b_func5_fixup(struct pci_dev *pdev)
|
static void __devinit loongson2e_686b_func5_fixup(struct pci_dev *pdev)
|
||||||
{
|
{
|
||||||
unsigned int val;
|
unsigned int val;
|
||||||
unsigned char c;
|
unsigned char c;
|
||||||
|
|
|
@ -96,21 +96,21 @@ int pcibios_plat_dev_init(struct pci_dev *dev)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* CS5536 SPEC. fixup */
|
/* CS5536 SPEC. fixup */
|
||||||
static void __init loongson_cs5536_isa_fixup(struct pci_dev *pdev)
|
static void __devinit loongson_cs5536_isa_fixup(struct pci_dev *pdev)
|
||||||
{
|
{
|
||||||
/* the uart1 and uart2 interrupt in PIC is enabled as default */
|
/* the uart1 and uart2 interrupt in PIC is enabled as default */
|
||||||
pci_write_config_dword(pdev, PCI_UART1_INT_REG, 1);
|
pci_write_config_dword(pdev, PCI_UART1_INT_REG, 1);
|
||||||
pci_write_config_dword(pdev, PCI_UART2_INT_REG, 1);
|
pci_write_config_dword(pdev, PCI_UART2_INT_REG, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __init loongson_cs5536_ide_fixup(struct pci_dev *pdev)
|
static void __devinit loongson_cs5536_ide_fixup(struct pci_dev *pdev)
|
||||||
{
|
{
|
||||||
/* setting the mutex pin as IDE function */
|
/* setting the mutex pin as IDE function */
|
||||||
pci_write_config_dword(pdev, PCI_IDE_CFG_REG,
|
pci_write_config_dword(pdev, PCI_IDE_CFG_REG,
|
||||||
CS5536_IDE_FLASH_SIGNATURE);
|
CS5536_IDE_FLASH_SIGNATURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __init loongson_cs5536_acc_fixup(struct pci_dev *pdev)
|
static void __devinit loongson_cs5536_acc_fixup(struct pci_dev *pdev)
|
||||||
{
|
{
|
||||||
/* enable the AUDIO interrupt in PIC */
|
/* enable the AUDIO interrupt in PIC */
|
||||||
pci_write_config_dword(pdev, PCI_ACC_INT_REG, 1);
|
pci_write_config_dword(pdev, PCI_ACC_INT_REG, 1);
|
||||||
|
@ -118,14 +118,14 @@ static void __init loongson_cs5536_acc_fixup(struct pci_dev *pdev)
|
||||||
pci_write_config_byte(pdev, PCI_LATENCY_TIMER, 0xc0);
|
pci_write_config_byte(pdev, PCI_LATENCY_TIMER, 0xc0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __init loongson_cs5536_ohci_fixup(struct pci_dev *pdev)
|
static void __devinit loongson_cs5536_ohci_fixup(struct pci_dev *pdev)
|
||||||
{
|
{
|
||||||
/* enable the OHCI interrupt in PIC */
|
/* enable the OHCI interrupt in PIC */
|
||||||
/* THE OHCI, EHCI, UDC, OTG are shared with interrupt in PIC */
|
/* THE OHCI, EHCI, UDC, OTG are shared with interrupt in PIC */
|
||||||
pci_write_config_dword(pdev, PCI_OHCI_INT_REG, 1);
|
pci_write_config_dword(pdev, PCI_OHCI_INT_REG, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __init loongson_cs5536_ehci_fixup(struct pci_dev *pdev)
|
static void __devinit loongson_cs5536_ehci_fixup(struct pci_dev *pdev)
|
||||||
{
|
{
|
||||||
u32 hi, lo;
|
u32 hi, lo;
|
||||||
|
|
||||||
|
@ -137,7 +137,7 @@ static void __init loongson_cs5536_ehci_fixup(struct pci_dev *pdev)
|
||||||
pci_write_config_dword(pdev, PCI_EHCI_FLADJ_REG, 0x2000);
|
pci_write_config_dword(pdev, PCI_EHCI_FLADJ_REG, 0x2000);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __init loongson_nec_fixup(struct pci_dev *pdev)
|
static void __devinit loongson_nec_fixup(struct pci_dev *pdev)
|
||||||
{
|
{
|
||||||
unsigned int val;
|
unsigned int val;
|
||||||
|
|
||||||
|
|
|
@ -49,10 +49,10 @@ int pcibios_plat_dev_init(struct pci_dev *dev)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __init malta_piix_func0_fixup(struct pci_dev *pdev)
|
static void __devinit malta_piix_func0_fixup(struct pci_dev *pdev)
|
||||||
{
|
{
|
||||||
unsigned char reg_val;
|
unsigned char reg_val;
|
||||||
static int piixirqmap[16] __initdata = { /* PIIX PIRQC[A:D] irq mappings */
|
static int piixirqmap[16] __devinitdata = { /* PIIX PIRQC[A:D] irq mappings */
|
||||||
0, 0, 0, 3,
|
0, 0, 0, 3,
|
||||||
4, 5, 6, 7,
|
4, 5, 6, 7,
|
||||||
0, 9, 10, 11,
|
0, 9, 10, 11,
|
||||||
|
@ -83,7 +83,7 @@ static void __init malta_piix_func0_fixup(struct pci_dev *pdev)
|
||||||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371AB_0,
|
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371AB_0,
|
||||||
malta_piix_func0_fixup);
|
malta_piix_func0_fixup);
|
||||||
|
|
||||||
static void __init malta_piix_func1_fixup(struct pci_dev *pdev)
|
static void __devinit malta_piix_func1_fixup(struct pci_dev *pdev)
|
||||||
{
|
{
|
||||||
unsigned char reg_val;
|
unsigned char reg_val;
|
||||||
|
|
||||||
|
|
|
@ -22,13 +22,13 @@
|
||||||
|
|
||||||
#include <asm/vr41xx/mpc30x.h>
|
#include <asm/vr41xx/mpc30x.h>
|
||||||
|
|
||||||
static const int internal_func_irqs[] __initdata = {
|
static const int internal_func_irqs[] __initconst = {
|
||||||
VRC4173_CASCADE_IRQ,
|
VRC4173_CASCADE_IRQ,
|
||||||
VRC4173_AC97_IRQ,
|
VRC4173_AC97_IRQ,
|
||||||
VRC4173_USB_IRQ,
|
VRC4173_USB_IRQ,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const int irq_tab_mpc30x[] __initdata = {
|
static const int irq_tab_mpc30x[] __initconst = {
|
||||||
[12] = VRC4173_PCMCIA1_IRQ,
|
[12] = VRC4173_PCMCIA1_IRQ,
|
||||||
[13] = VRC4173_PCMCIA2_IRQ,
|
[13] = VRC4173_PCMCIA2_IRQ,
|
||||||
[29] = MQ200_IRQ,
|
[29] = MQ200_IRQ,
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
* Set the BCM1250, etc. PCI host bridge's TRDY timeout
|
* Set the BCM1250, etc. PCI host bridge's TRDY timeout
|
||||||
* to the finite max.
|
* to the finite max.
|
||||||
*/
|
*/
|
||||||
static void __init quirk_sb1250_pci(struct pci_dev *dev)
|
static void __devinit quirk_sb1250_pci(struct pci_dev *dev)
|
||||||
{
|
{
|
||||||
pci_write_config_byte(dev, 0x40, 0xff);
|
pci_write_config_byte(dev, 0x40, 0xff);
|
||||||
}
|
}
|
||||||
|
@ -25,7 +25,7 @@ DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_SIBYTE, PCI_DEVICE_ID_BCM1250_PCI,
|
||||||
/*
|
/*
|
||||||
* The BCM1250, etc. PCI/HT bridge reports as a host bridge.
|
* The BCM1250, etc. PCI/HT bridge reports as a host bridge.
|
||||||
*/
|
*/
|
||||||
static void __init quirk_sb1250_ht(struct pci_dev *dev)
|
static void __devinit quirk_sb1250_ht(struct pci_dev *dev)
|
||||||
{
|
{
|
||||||
dev->class = PCI_CLASS_BRIDGE_PCI << 8;
|
dev->class = PCI_CLASS_BRIDGE_PCI << 8;
|
||||||
}
|
}
|
||||||
|
@ -35,7 +35,7 @@ DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_SIBYTE, PCI_DEVICE_ID_BCM1250_HT,
|
||||||
/*
|
/*
|
||||||
* Set the SP1011 HT/PCI bridge's TRDY timeout to the finite max.
|
* Set the SP1011 HT/PCI bridge's TRDY timeout to the finite max.
|
||||||
*/
|
*/
|
||||||
static void __init quirk_sp1011(struct pci_dev *dev)
|
static void __devinit quirk_sp1011(struct pci_dev *dev)
|
||||||
{
|
{
|
||||||
pci_write_config_byte(dev, 0x64, 0xff);
|
pci_write_config_byte(dev, 0x64, 0xff);
|
||||||
}
|
}
|
||||||
|
|
|
@ -495,7 +495,7 @@ irqreturn_t tx4927_pcierr_interrupt(int irq, void *dev_id)
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_TOSHIBA_FPCIB0
|
#ifdef CONFIG_TOSHIBA_FPCIB0
|
||||||
static void __init tx4927_quirk_slc90e66_bridge(struct pci_dev *dev)
|
static void __devinit tx4927_quirk_slc90e66_bridge(struct pci_dev *dev)
|
||||||
{
|
{
|
||||||
struct tx4927_pcic_reg __iomem *pcicptr = pci_bus_to_pcicptr(dev->bus);
|
struct tx4927_pcic_reg __iomem *pcicptr = pci_bus_to_pcicptr(dev->bus);
|
||||||
|
|
||||||
|
|
|
@ -212,7 +212,7 @@ static inline void pci_enable_swapping(struct pci_dev *dev)
|
||||||
bridge->b_widget.w_tflush; /* Flush */
|
bridge->b_widget.w_tflush; /* Flush */
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __init pci_fixup_ioc3(struct pci_dev *d)
|
static void __devinit pci_fixup_ioc3(struct pci_dev *d)
|
||||||
{
|
{
|
||||||
pci_disable_swapping(d);
|
pci_disable_swapping(d);
|
||||||
}
|
}
|
||||||
|
|
|
@ -129,7 +129,7 @@ static int __devinit ltq_pci_startup(struct platform_device *pdev)
|
||||||
|
|
||||||
/* setup reset gpio used by pci */
|
/* setup reset gpio used by pci */
|
||||||
reset_gpio = of_get_named_gpio(node, "gpio-reset", 0);
|
reset_gpio = of_get_named_gpio(node, "gpio-reset", 0);
|
||||||
if (reset_gpio > 0)
|
if (gpio_is_valid(reset_gpio))
|
||||||
devm_gpio_request(&pdev->dev, reset_gpio, "pci-reset");
|
devm_gpio_request(&pdev->dev, reset_gpio, "pci-reset");
|
||||||
|
|
||||||
/* enable auto-switching between PCI and EBU */
|
/* enable auto-switching between PCI and EBU */
|
||||||
|
@ -192,7 +192,7 @@ static int __devinit ltq_pci_startup(struct platform_device *pdev)
|
||||||
ltq_ebu_w32(ltq_ebu_r32(LTQ_EBU_PCC_IEN) | 0x10, LTQ_EBU_PCC_IEN);
|
ltq_ebu_w32(ltq_ebu_r32(LTQ_EBU_PCC_IEN) | 0x10, LTQ_EBU_PCC_IEN);
|
||||||
|
|
||||||
/* toggle reset pin */
|
/* toggle reset pin */
|
||||||
if (reset_gpio > 0) {
|
if (gpio_is_valid(reset_gpio)) {
|
||||||
__gpio_set_value(reset_gpio, 0);
|
__gpio_set_value(reset_gpio, 0);
|
||||||
wmb();
|
wmb();
|
||||||
mdelay(1);
|
mdelay(1);
|
||||||
|
|
|
@ -41,6 +41,7 @@
|
||||||
#include <linux/irq.h>
|
#include <linux/irq.h>
|
||||||
#include <linux/irqdesc.h>
|
#include <linux/irqdesc.h>
|
||||||
#include <linux/console.h>
|
#include <linux/console.h>
|
||||||
|
#include <linux/pci_regs.h>
|
||||||
|
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
|
|
||||||
|
@ -156,35 +157,55 @@ struct pci_controller nlm_pci_controller = {
|
||||||
.io_offset = 0x00000000UL,
|
.io_offset = 0x00000000UL,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The top level PCIe links on the XLS PCIe controller appear as
|
||||||
|
* bridges. Given a device, this function finds which link it is
|
||||||
|
* on.
|
||||||
|
*/
|
||||||
|
static struct pci_dev *xls_get_pcie_link(const struct pci_dev *dev)
|
||||||
|
{
|
||||||
|
struct pci_bus *bus, *p;
|
||||||
|
|
||||||
|
/* Find the bridge on bus 0 */
|
||||||
|
bus = dev->bus;
|
||||||
|
for (p = bus->parent; p && p->number != 0; p = p->parent)
|
||||||
|
bus = p;
|
||||||
|
|
||||||
|
return p ? bus->self : NULL;
|
||||||
|
}
|
||||||
|
|
||||||
static int get_irq_vector(const struct pci_dev *dev)
|
static int get_irq_vector(const struct pci_dev *dev)
|
||||||
{
|
{
|
||||||
|
struct pci_dev *lnk;
|
||||||
|
|
||||||
if (!nlm_chip_is_xls())
|
if (!nlm_chip_is_xls())
|
||||||
return PIC_PCIX_IRQ; /* for XLR just one IRQ*/
|
return PIC_PCIX_IRQ; /* for XLR just one IRQ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* For XLS PCIe, there is an IRQ per Link, find out which
|
* For XLS PCIe, there is an IRQ per Link, find out which
|
||||||
* link the device is on to assign interrupts
|
* link the device is on to assign interrupts
|
||||||
*/
|
*/
|
||||||
if (dev->bus->self == NULL)
|
lnk = xls_get_pcie_link(dev);
|
||||||
|
if (lnk == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
switch (dev->bus->self->devfn) {
|
switch (PCI_SLOT(lnk->devfn)) {
|
||||||
case 0x0:
|
case 0:
|
||||||
return PIC_PCIE_LINK0_IRQ;
|
return PIC_PCIE_LINK0_IRQ;
|
||||||
case 0x8:
|
case 1:
|
||||||
return PIC_PCIE_LINK1_IRQ;
|
return PIC_PCIE_LINK1_IRQ;
|
||||||
case 0x10:
|
case 2:
|
||||||
if (nlm_chip_is_xls_b())
|
if (nlm_chip_is_xls_b())
|
||||||
return PIC_PCIE_XLSB0_LINK2_IRQ;
|
return PIC_PCIE_XLSB0_LINK2_IRQ;
|
||||||
else
|
else
|
||||||
return PIC_PCIE_LINK2_IRQ;
|
return PIC_PCIE_LINK2_IRQ;
|
||||||
case 0x18:
|
case 3:
|
||||||
if (nlm_chip_is_xls_b())
|
if (nlm_chip_is_xls_b())
|
||||||
return PIC_PCIE_XLSB0_LINK3_IRQ;
|
return PIC_PCIE_XLSB0_LINK3_IRQ;
|
||||||
else
|
else
|
||||||
return PIC_PCIE_LINK3_IRQ;
|
return PIC_PCIE_LINK3_IRQ;
|
||||||
}
|
}
|
||||||
WARN(1, "Unexpected devfn %d\n", dev->bus->self->devfn);
|
WARN(1, "Unexpected devfn %d\n", lnk->devfn);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -202,7 +223,27 @@ void arch_teardown_msi_irq(unsigned int irq)
|
||||||
int arch_setup_msi_irq(struct pci_dev *dev, struct msi_desc *desc)
|
int arch_setup_msi_irq(struct pci_dev *dev, struct msi_desc *desc)
|
||||||
{
|
{
|
||||||
struct msi_msg msg;
|
struct msi_msg msg;
|
||||||
|
struct pci_dev *lnk;
|
||||||
int irq, ret;
|
int irq, ret;
|
||||||
|
u16 val;
|
||||||
|
|
||||||
|
/* MSI not supported on XLR */
|
||||||
|
if (!nlm_chip_is_xls())
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Enable MSI on the XLS PCIe controller bridge which was disabled
|
||||||
|
* at enumeration, the bridge MSI capability is at 0x50
|
||||||
|
*/
|
||||||
|
lnk = xls_get_pcie_link(dev);
|
||||||
|
if (lnk == NULL)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
pci_read_config_word(lnk, 0x50 + PCI_MSI_FLAGS, &val);
|
||||||
|
if ((val & PCI_MSI_FLAGS_ENABLE) == 0) {
|
||||||
|
val |= PCI_MSI_FLAGS_ENABLE;
|
||||||
|
pci_write_config_word(lnk, 0x50 + PCI_MSI_FLAGS, val);
|
||||||
|
}
|
||||||
|
|
||||||
irq = get_irq_vector(dev);
|
irq = get_irq_vector(dev);
|
||||||
if (irq <= 0)
|
if (irq <= 0)
|
||||||
|
@ -327,7 +368,7 @@ static int __init pcibios_init(void)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
/* XLR PCI controller ACK */
|
/* XLR PCI controller ACK */
|
||||||
irq_set_handler_data(PIC_PCIE_XLSB0_LINK3_IRQ, xlr_pci_ack);
|
irq_set_handler_data(PIC_PCIX_IRQ, xlr_pci_ack);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -115,11 +115,11 @@ static void yos_send_ipi_mask(const struct cpumask *mask, unsigned int action)
|
||||||
*/
|
*/
|
||||||
static void __cpuinit yos_init_secondary(void)
|
static void __cpuinit yos_init_secondary(void)
|
||||||
{
|
{
|
||||||
set_c0_status(ST0_CO | ST0_IE | ST0_IM);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __cpuinit yos_smp_finish(void)
|
static void __cpuinit yos_smp_finish(void)
|
||||||
{
|
{
|
||||||
|
set_c0_status(ST0_CO | ST0_IM | ST0_IE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Hook for after all CPUs are online */
|
/* Hook for after all CPUs are online */
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
|
|
||||||
#define CALLIOPE_ADDR(x) (CALLIOPE_IO_BASE + (x))
|
#define CALLIOPE_ADDR(x) (CALLIOPE_IO_BASE + (x))
|
||||||
|
|
||||||
const struct register_map calliope_register_map __initdata = {
|
const struct register_map calliope_register_map __initconst = {
|
||||||
.eic_slow0_strt_add = {.phys = CALLIOPE_ADDR(0x800000)},
|
.eic_slow0_strt_add = {.phys = CALLIOPE_ADDR(0x800000)},
|
||||||
.eic_cfg_bits = {.phys = CALLIOPE_ADDR(0x800038)},
|
.eic_cfg_bits = {.phys = CALLIOPE_ADDR(0x800038)},
|
||||||
.eic_ready_status = {.phys = CALLIOPE_ADDR(0x80004c)},
|
.eic_ready_status = {.phys = CALLIOPE_ADDR(0x80004c)},
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
|
|
||||||
#define CRONUS_ADDR(x) (CRONUS_IO_BASE + (x))
|
#define CRONUS_ADDR(x) (CRONUS_IO_BASE + (x))
|
||||||
|
|
||||||
const struct register_map cronus_register_map __initdata = {
|
const struct register_map cronus_register_map __initconst = {
|
||||||
.eic_slow0_strt_add = {.phys = CRONUS_ADDR(0x000000)},
|
.eic_slow0_strt_add = {.phys = CRONUS_ADDR(0x000000)},
|
||||||
.eic_cfg_bits = {.phys = CRONUS_ADDR(0x000038)},
|
.eic_cfg_bits = {.phys = CRONUS_ADDR(0x000038)},
|
||||||
.eic_ready_status = {.phys = CRONUS_ADDR(0x00004C)},
|
.eic_ready_status = {.phys = CRONUS_ADDR(0x00004C)},
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <asm/mach-powertv/asic.h>
|
#include <asm/mach-powertv/asic.h>
|
||||||
|
|
||||||
const struct register_map gaia_register_map __initdata = {
|
const struct register_map gaia_register_map __initconst = {
|
||||||
.eic_slow0_strt_add = {.phys = GAIA_IO_BASE + 0x000000},
|
.eic_slow0_strt_add = {.phys = GAIA_IO_BASE + 0x000000},
|
||||||
.eic_cfg_bits = {.phys = GAIA_IO_BASE + 0x000038},
|
.eic_cfg_bits = {.phys = GAIA_IO_BASE + 0x000038},
|
||||||
.eic_ready_status = {.phys = GAIA_IO_BASE + 0x00004C},
|
.eic_ready_status = {.phys = GAIA_IO_BASE + 0x00004C},
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
|
|
||||||
#define ZEUS_ADDR(x) (ZEUS_IO_BASE + (x))
|
#define ZEUS_ADDR(x) (ZEUS_IO_BASE + (x))
|
||||||
|
|
||||||
const struct register_map zeus_register_map __initdata = {
|
const struct register_map zeus_register_map __initconst = {
|
||||||
.eic_slow0_strt_add = {.phys = ZEUS_ADDR(0x000000)},
|
.eic_slow0_strt_add = {.phys = ZEUS_ADDR(0x000000)},
|
||||||
.eic_cfg_bits = {.phys = ZEUS_ADDR(0x000038)},
|
.eic_cfg_bits = {.phys = ZEUS_ADDR(0x000038)},
|
||||||
.eic_ready_status = {.phys = ZEUS_ADDR(0x00004c)},
|
.eic_ready_status = {.phys = ZEUS_ADDR(0x00004c)},
|
||||||
|
|
|
@ -269,7 +269,7 @@ txx9_i8259_irq_setup(int irq)
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __init quirk_slc90e66_bridge(struct pci_dev *dev)
|
static void __devinit quirk_slc90e66_bridge(struct pci_dev *dev)
|
||||||
{
|
{
|
||||||
int irq; /* PCI/ISA Bridge interrupt */
|
int irq; /* PCI/ISA Bridge interrupt */
|
||||||
u8 reg_64;
|
u8 reg_64;
|
||||||
|
|
|
@ -81,9 +81,6 @@ struct pt_regs {
|
||||||
#define PTRACE_GETFPREGS 14
|
#define PTRACE_GETFPREGS 14
|
||||||
#define PTRACE_SETFPREGS 15
|
#define PTRACE_SETFPREGS 15
|
||||||
|
|
||||||
/* options set using PTRACE_SETOPTIONS */
|
|
||||||
#define PTRACE_O_TRACESYSGOOD 0x00000001
|
|
||||||
|
|
||||||
#ifdef __KERNEL__
|
#ifdef __KERNEL__
|
||||||
|
|
||||||
#define user_mode(regs) (((regs)->epsw & EPSW_nSL) == EPSW_nSL)
|
#define user_mode(regs) (((regs)->epsw & EPSW_nSL) == EPSW_nSL)
|
||||||
|
|
|
@ -123,7 +123,7 @@ static inline unsigned long current_stack_pointer(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef CONFIG_KGDB
|
#ifndef CONFIG_KGDB
|
||||||
void arch_release_thread_info(struct thread_info *ti)
|
void arch_release_thread_info(struct thread_info *ti);
|
||||||
#endif
|
#endif
|
||||||
#define get_thread_info(ti) get_task_struct((ti)->task)
|
#define get_thread_info(ti) get_task_struct((ti)->task)
|
||||||
#define put_thread_info(ti) put_task_struct((ti)->task)
|
#define put_thread_info(ti) put_task_struct((ti)->task)
|
||||||
|
|
|
@ -11,7 +11,6 @@
|
||||||
#ifndef _ASM_TIMEX_H
|
#ifndef _ASM_TIMEX_H
|
||||||
#define _ASM_TIMEX_H
|
#define _ASM_TIMEX_H
|
||||||
|
|
||||||
#include <asm/hardirq.h>
|
|
||||||
#include <unit/timex.h>
|
#include <unit/timex.h>
|
||||||
|
|
||||||
#define TICK_SIZE (tick_nsec / 1000)
|
#define TICK_SIZE (tick_nsec / 1000)
|
||||||
|
@ -30,16 +29,6 @@ static inline cycles_t get_cycles(void)
|
||||||
extern int init_clockevents(void);
|
extern int init_clockevents(void);
|
||||||
extern int init_clocksource(void);
|
extern int init_clocksource(void);
|
||||||
|
|
||||||
static inline void setup_jiffies_interrupt(int irq,
|
|
||||||
struct irqaction *action)
|
|
||||||
{
|
|
||||||
u16 tmp;
|
|
||||||
setup_irq(irq, action);
|
|
||||||
set_intr_level(irq, NUM2GxICR_LEVEL(CONFIG_TIMER_IRQ_LEVEL));
|
|
||||||
GxICR(irq) |= GxICR_ENABLE | GxICR_DETECT | GxICR_REQUEST;
|
|
||||||
tmp = GxICR(irq);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* __KERNEL__ */
|
#endif /* __KERNEL__ */
|
||||||
|
|
||||||
#endif /* _ASM_TIMEX_H */
|
#endif /* _ASM_TIMEX_H */
|
||||||
|
|
|
@ -70,6 +70,16 @@ static void event_handler(struct clock_event_device *dev)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void setup_jiffies_interrupt(int irq,
|
||||||
|
struct irqaction *action)
|
||||||
|
{
|
||||||
|
u16 tmp;
|
||||||
|
setup_irq(irq, action);
|
||||||
|
set_intr_level(irq, NUM2GxICR_LEVEL(CONFIG_TIMER_IRQ_LEVEL));
|
||||||
|
GxICR(irq) |= GxICR_ENABLE | GxICR_DETECT | GxICR_REQUEST;
|
||||||
|
tmp = GxICR(irq);
|
||||||
|
}
|
||||||
|
|
||||||
int __init init_clockevents(void)
|
int __init init_clockevents(void)
|
||||||
{
|
{
|
||||||
struct clock_event_device *cd;
|
struct clock_event_device *cd;
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue