Merge branch 'fbdev/stable-updates'

This commit is contained in:
Paul Mundt 2011-07-13 17:02:12 +09:00
commit 4af358f818
547 changed files with 28497 additions and 2904 deletions

View File

@ -518,7 +518,7 @@ N: Zach Brown
E: zab@zabbo.net E: zab@zabbo.net
D: maestro pci sound D: maestro pci sound
M: David Brownell N: David Brownell
D: Kernel engineer, mentor, and friend. Maintained USB EHCI and D: Kernel engineer, mentor, and friend. Maintained USB EHCI and
D: gadget layers, SPI subsystem, GPIO subsystem, and more than a few D: gadget layers, SPI subsystem, GPIO subsystem, and more than a few
D: device drivers. His encouragement also helped many engineers get D: device drivers. His encouragement also helped many engineers get

View File

@ -2,13 +2,7 @@ Intro
===== =====
This document is designed to provide a list of the minimum levels of This document is designed to provide a list of the minimum levels of
software necessary to run the 2.6 kernels, as well as provide brief software necessary to run the 3.0 kernels.
instructions regarding any other "Gotchas" users may encounter when
trying life on the Bleeding Edge. If upgrading from a pre-2.4.x
kernel, please consult the Changes file included with 2.4.x kernels for
additional information; most of that information will not be repeated
here. Basically, this document assumes that your system is already
functional and running at least 2.4.x kernels.
This document is originally based on my "Changes" file for 2.0.x kernels This document is originally based on my "Changes" file for 2.0.x kernels
and therefore owes credit to the same people as that file (Jared Mauch, and therefore owes credit to the same people as that file (Jared Mauch,
@ -22,11 +16,10 @@ Upgrade to at *least* these software revisions before thinking you've
encountered a bug! If you're unsure what version you're currently encountered a bug! If you're unsure what version you're currently
running, the suggested command should tell you. running, the suggested command should tell you.
Again, keep in mind that this list assumes you are already Again, keep in mind that this list assumes you are already functionally
functionally running a Linux 2.4 kernel. Also, not all tools are running a Linux kernel. Also, not all tools are necessary on all
necessary on all systems; obviously, if you don't have any ISDN systems; obviously, if you don't have any ISDN hardware, for example,
hardware, for example, you probably needn't concern yourself with you probably needn't concern yourself with isdn4k-utils.
isdn4k-utils.
o Gnu C 3.2 # gcc --version o Gnu C 3.2 # gcc --version
o Gnu make 3.80 # make --version o Gnu make 3.80 # make --version
@ -114,12 +107,12 @@ Ksymoops
If the unthinkable happens and your kernel oopses, you may need the If the unthinkable happens and your kernel oopses, you may need the
ksymoops tool to decode it, but in most cases you don't. ksymoops tool to decode it, but in most cases you don't.
In the 2.6 kernel it is generally preferred to build the kernel with It is generally preferred to build the kernel with CONFIG_KALLSYMS so
CONFIG_KALLSYMS so that it produces readable dumps that can be used as-is that it produces readable dumps that can be used as-is (this also
(this also produces better output than ksymoops). produces better output than ksymoops). If for some reason your kernel
If for some reason your kernel is not build with CONFIG_KALLSYMS and is not build with CONFIG_KALLSYMS and you have no way to rebuild and
you have no way to rebuild and reproduce the Oops with that option, then reproduce the Oops with that option, then you can still decode that Oops
you can still decode that Oops with ksymoops. with ksymoops.
Module-Init-Tools Module-Init-Tools
----------------- -----------------
@ -261,8 +254,8 @@ needs to be recompiled or (preferably) upgraded.
NFS-utils NFS-utils
--------- ---------
In 2.4 and earlier kernels, the nfs server needed to know about any In ancient (2.4 and earlier) kernels, the nfs server needed to know
client that expected to be able to access files via NFS. This about any client that expected to be able to access files via NFS. This
information would be given to the kernel by "mountd" when the client information would be given to the kernel by "mountd" when the client
mounted the filesystem, or by "exportfs" at system startup. exportfs mounted the filesystem, or by "exportfs" at system startup. exportfs
would take information about active clients from /var/lib/nfs/rmtab. would take information about active clients from /var/lib/nfs/rmtab.
@ -272,11 +265,11 @@ which is not always easy, particularly when trying to implement
fail-over. Even when the system is working well, rmtab suffers from fail-over. Even when the system is working well, rmtab suffers from
getting lots of old entries that never get removed. getting lots of old entries that never get removed.
With 2.6 we have the option of having the kernel tell mountd when it With modern kernels we have the option of having the kernel tell mountd
gets a request from an unknown host, and mountd can give appropriate when it gets a request from an unknown host, and mountd can give
export information to the kernel. This removes the dependency on appropriate export information to the kernel. This removes the
rmtab and means that the kernel only needs to know about currently dependency on rmtab and means that the kernel only needs to know about
active clients. currently active clients.
To enable this new functionality, you need to: To enable this new functionality, you need to:

View File

@ -680,8 +680,8 @@ ones already enabled by DEBUG.
Chapter 14: Allocating memory Chapter 14: Allocating memory
The kernel provides the following general purpose memory allocators: The kernel provides the following general purpose memory allocators:
kmalloc(), kzalloc(), kcalloc(), and vmalloc(). Please refer to the API kmalloc(), kzalloc(), kcalloc(), vmalloc(), and vzalloc(). Please refer to
documentation for further information about them. the API documentation for further information about them.
The preferred form for passing a size of a struct is the following: The preferred form for passing a size of a struct is the following:

View File

@ -77,7 +77,7 @@ Throttling/Upper Limit policy
- Specify a bandwidth rate on particular device for root group. The format - Specify a bandwidth rate on particular device for root group. The format
for policy is "<major>:<minor> <byes_per_second>". for policy is "<major>:<minor> <byes_per_second>".
echo "8:16 1048576" > /sys/fs/cgroup/blkio/blkio.read_bps_device echo "8:16 1048576" > /sys/fs/cgroup/blkio/blkio.throttle.read_bps_device
Above will put a limit of 1MB/second on reads happening for root group Above will put a limit of 1MB/second on reads happening for root group
on device having major/minor number 8:16. on device having major/minor number 8:16.
@ -90,7 +90,7 @@ Throttling/Upper Limit policy
1024+0 records out 1024+0 records out
4194304 bytes (4.2 MB) copied, 4.0001 s, 1.0 MB/s 4194304 bytes (4.2 MB) copied, 4.0001 s, 1.0 MB/s
Limits for writes can be put using blkio.write_bps_device file. Limits for writes can be put using blkio.throttle.write_bps_device file.
Hierarchical Cgroups Hierarchical Cgroups
==================== ====================
@ -286,28 +286,28 @@ Throttling/Upper limit policy files
specified in bytes per second. Rules are per deivce. Following is specified in bytes per second. Rules are per deivce. Following is
the format. the format.
echo "<major>:<minor> <rate_bytes_per_second>" > /cgrp/blkio.read_bps_device echo "<major>:<minor> <rate_bytes_per_second>" > /cgrp/blkio.throttle.read_bps_device
- blkio.throttle.write_bps_device - blkio.throttle.write_bps_device
- Specifies upper limit on WRITE rate to the device. IO rate is - Specifies upper limit on WRITE rate to the device. IO rate is
specified in bytes per second. Rules are per deivce. Following is specified in bytes per second. Rules are per deivce. Following is
the format. the format.
echo "<major>:<minor> <rate_bytes_per_second>" > /cgrp/blkio.write_bps_device echo "<major>:<minor> <rate_bytes_per_second>" > /cgrp/blkio.throttle.write_bps_device
- blkio.throttle.read_iops_device - blkio.throttle.read_iops_device
- Specifies upper limit on READ rate from the device. IO rate is - Specifies upper limit on READ rate from the device. IO rate is
specified in IO per second. Rules are per deivce. Following is specified in IO per second. Rules are per deivce. Following is
the format. the format.
echo "<major>:<minor> <rate_io_per_second>" > /cgrp/blkio.read_iops_device echo "<major>:<minor> <rate_io_per_second>" > /cgrp/blkio.throttle.read_iops_device
- blkio.throttle.write_iops_device - blkio.throttle.write_iops_device
- Specifies upper limit on WRITE rate to the device. IO rate is - Specifies upper limit on WRITE rate to the device. IO rate is
specified in io per second. Rules are per deivce. Following is specified in io per second. Rules are per deivce. Following is
the format. the format.
echo "<major>:<minor> <rate_io_per_second>" > /cgrp/blkio.write_iops_device echo "<major>:<minor> <rate_io_per_second>" > /cgrp/blkio.throttle.write_iops_device
Note: If both BW and IOPS rules are specified for a device, then IO is Note: If both BW and IOPS rules are specified for a device, then IO is
subjectd to both the constraints. subjectd to both the constraints.

View File

@ -583,3 +583,25 @@ Why: Superseded by the UVCIOC_CTRL_QUERY ioctl.
Who: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Who: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---------------------------- ----------------------------
What: For VIDIOC_S_FREQUENCY the type field must match the device node's type.
If not, return -EINVAL.
When: 3.2
Why: It makes no sense to switch the tuner to radio mode by calling
VIDIOC_S_FREQUENCY on a video node, or to switch the tuner to tv mode by
calling VIDIOC_S_FREQUENCY on a radio node. This is the first step of a
move to more consistent handling of tv and radio tuners.
Who: Hans Verkuil <hans.verkuil@cisco.com>
----------------------------
What: Opening a radio device node will no longer automatically switch the
tuner mode from tv to radio.
When: 3.3
Why: Just opening a V4L device should not change the state of the hardware
like that. It's very unexpected and against the V4L spec. Instead, you
switch to radio mode by calling VIDIOC_S_FREQUENCY. This is the second
and last step of the move to consistent handling of tv and radio tuners.
Who: Hans Verkuil <hans.verkuil@cisco.com>
----------------------------

View File

@ -673,6 +673,22 @@ storage request to complete, or it may attempt to cancel the storage request -
in which case the page will not be stored in the cache this time. in which case the page will not be stored in the cache this time.
BULK INODE PAGE UNCACHE
-----------------------
A convenience routine is provided to perform an uncache on all the pages
attached to an inode. This assumes that the pages on the inode correspond on a
1:1 basis with the pages in the cache.
void fscache_uncache_all_inode_pages(struct fscache_cookie *cookie,
struct inode *inode);
This takes the netfs cookie that the pages were cached with and the inode that
the pages are attached to. This function will wait for pages to finish being
written to the cache and for the cache to finish with the page generally. No
error is returned.
========================== ==========================
INDEX AND DATA FILE UPDATE INDEX AND DATA FILE UPDATE
========================== ==========================

View File

@ -22,6 +22,10 @@ Supported chips:
Prefix: 'f71869' Prefix: 'f71869'
Addresses scanned: none, address read from Super I/O config space Addresses scanned: none, address read from Super I/O config space
Datasheet: Available from the Fintek website Datasheet: Available from the Fintek website
* Fintek F71869A
Prefix: 'f71869a'
Addresses scanned: none, address read from Super I/O config space
Datasheet: Not public
* Fintek F71882FG and F71883FG * Fintek F71882FG and F71883FG
Prefix: 'f71882fg' Prefix: 'f71882fg'
Addresses scanned: none, address read from Super I/O config space Addresses scanned: none, address read from Super I/O config space

View File

@ -9,8 +9,8 @@ Supported chips:
Socket S1G3: Athlon II, Sempron, Turion II Socket S1G3: Athlon II, Sempron, Turion II
* AMD Family 11h processors: * AMD Family 11h processors:
Socket S1G2: Athlon (X2), Sempron (X2), Turion X2 (Ultra) Socket S1G2: Athlon (X2), Sempron (X2), Turion X2 (Ultra)
* AMD Family 12h processors: "Llano" * AMD Family 12h processors: "Llano" (E2/A4/A6/A8-Series)
* AMD Family 14h processors: "Brazos" (C/E/G-Series) * AMD Family 14h processors: "Brazos" (C/E/G/Z-Series)
* AMD Family 15h processors: "Bulldozer" * AMD Family 15h processors: "Bulldozer"
Prefix: 'k10temp' Prefix: 'k10temp'
@ -20,12 +20,16 @@ Supported chips:
http://support.amd.com/us/Processor_TechDocs/31116.pdf http://support.amd.com/us/Processor_TechDocs/31116.pdf
BIOS and Kernel Developer's Guide (BKDG) for AMD Family 11h Processors: BIOS and Kernel Developer's Guide (BKDG) for AMD Family 11h Processors:
http://support.amd.com/us/Processor_TechDocs/41256.pdf http://support.amd.com/us/Processor_TechDocs/41256.pdf
BIOS and Kernel Developer's Guide (BKDG) for AMD Family 12h Processors:
http://support.amd.com/us/Processor_TechDocs/41131.pdf
BIOS and Kernel Developer's Guide (BKDG) for AMD Family 14h Models 00h-0Fh Processors: BIOS and Kernel Developer's Guide (BKDG) for AMD Family 14h Models 00h-0Fh Processors:
http://support.amd.com/us/Processor_TechDocs/43170.pdf http://support.amd.com/us/Processor_TechDocs/43170.pdf
Revision Guide for AMD Family 10h Processors: Revision Guide for AMD Family 10h Processors:
http://support.amd.com/us/Processor_TechDocs/41322.pdf http://support.amd.com/us/Processor_TechDocs/41322.pdf
Revision Guide for AMD Family 11h Processors: Revision Guide for AMD Family 11h Processors:
http://support.amd.com/us/Processor_TechDocs/41788.pdf http://support.amd.com/us/Processor_TechDocs/41788.pdf
Revision Guide for AMD Family 12h Processors:
http://support.amd.com/us/Processor_TechDocs/44739.pdf
Revision Guide for AMD Family 14h Models 00h-0Fh Processors: Revision Guide for AMD Family 14h Models 00h-0Fh Processors:
http://support.amd.com/us/Processor_TechDocs/47534.pdf http://support.amd.com/us/Processor_TechDocs/47534.pdf
AMD Family 11h Processor Power and Thermal Data Sheet for Notebooks: AMD Family 11h Processor Power and Thermal Data Sheet for Notebooks:

View File

@ -2015,6 +2015,8 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
the default. the default.
off: Turn ECRC off off: Turn ECRC off
on: Turn ECRC on. on: Turn ECRC on.
realloc reallocate PCI resources if allocations done by BIOS
are erroneous.
pcie_aspm= [PCIE] Forcibly enable or disable PCIe Active State Power pcie_aspm= [PCIE] Forcibly enable or disable PCIe Active State Power
Management. Management.

View File

@ -534,6 +534,8 @@ Events that are never propagated by the driver:
0x2404 System is waking up from hibernation to undock 0x2404 System is waking up from hibernation to undock
0x2405 System is waking up from hibernation to eject bay 0x2405 System is waking up from hibernation to eject bay
0x5010 Brightness level changed/control event 0x5010 Brightness level changed/control event
0x6000 KEYBOARD: Numlock key pressed
0x6005 KEYBOARD: Fn key pressed (TO BE VERIFIED)
Events that are propagated by the driver to userspace: Events that are propagated by the driver to userspace:
@ -545,6 +547,8 @@ Events that are propagated by the driver to userspace:
0x3006 Bay hotplug request (hint to power up SATA link when 0x3006 Bay hotplug request (hint to power up SATA link when
the optical drive tray is ejected) the optical drive tray is ejected)
0x4003 Undocked (see 0x2x04), can sleep again 0x4003 Undocked (see 0x2x04), can sleep again
0x4010 Docked into hotplug port replicator (non-ACPI dock)
0x4011 Undocked from hotplug port replicator (non-ACPI dock)
0x500B Tablet pen inserted into its storage bay 0x500B Tablet pen inserted into its storage bay
0x500C Tablet pen removed from its storage bay 0x500C Tablet pen removed from its storage bay
0x6011 ALARM: battery is too hot 0x6011 ALARM: battery is too hot
@ -552,6 +556,7 @@ Events that are propagated by the driver to userspace:
0x6021 ALARM: a sensor is too hot 0x6021 ALARM: a sensor is too hot
0x6022 ALARM: a sensor is extremely hot 0x6022 ALARM: a sensor is extremely hot
0x6030 System thermal table changed 0x6030 System thermal table changed
0x6040 Nvidia Optimus/AC adapter related (TO BE VERIFIED)
Battery nearly empty alarms are a last resort attempt to get the Battery nearly empty alarms are a last resort attempt to get the
operating system to hibernate or shutdown cleanly (0x2313), or shutdown operating system to hibernate or shutdown cleanly (0x2313), or shutdown

View File

@ -501,13 +501,29 @@ helper functions described in Section 4. In that case, pm_runtime_resume()
should be used. Of course, for this purpose the device's run-time PM has to be should be used. Of course, for this purpose the device's run-time PM has to be
enabled earlier by calling pm_runtime_enable(). enabled earlier by calling pm_runtime_enable().
If the device bus type's or driver's ->probe() or ->remove() callback runs If the device bus type's or driver's ->probe() callback runs
pm_runtime_suspend() or pm_runtime_idle() or their asynchronous counterparts, pm_runtime_suspend() or pm_runtime_idle() or their asynchronous counterparts,
they will fail returning -EAGAIN, because the device's usage counter is they will fail returning -EAGAIN, because the device's usage counter is
incremented by the core before executing ->probe() and ->remove(). Still, it incremented by the driver core before executing ->probe(). Still, it may be
may be desirable to suspend the device as soon as ->probe() or ->remove() has desirable to suspend the device as soon as ->probe() has finished, so the driver
finished, so the PM core uses pm_runtime_idle_sync() to invoke the core uses pm_runtime_put_sync() to invoke the subsystem-level idle callback for
subsystem-level idle callback for the device at that time. the device at that time.
Moreover, the driver core prevents runtime PM callbacks from racing with the bus
notifier callback in __device_release_driver(), which is necessary, because the
notifier is used by some subsystems to carry out operations affecting the
runtime PM functionality. It does so by calling pm_runtime_get_sync() before
driver_sysfs_remove() and the BUS_NOTIFY_UNBIND_DRIVER notifications. This
resumes the device if it's in the suspended state and prevents it from
being suspended again while those routines are being executed.
To allow bus types and drivers to put devices into the suspended state by
calling pm_runtime_suspend() from their ->remove() routines, the driver core
executes pm_runtime_put_sync() after running the BUS_NOTIFY_UNBIND_DRIVER
notifications in __device_release_driver(). This requires bus types and
drivers to make their ->remove() callbacks avoid races with runtime PM directly,
but also it allows of more flexibility in the handling of devices during the
removal of their drivers.
The user space can effectively disallow the driver of the device to power manage The user space can effectively disallow the driver of the device to power manage
it at run time by changing the value of its /sys/devices/.../power/control it at run time by changing the value of its /sys/devices/.../power/control

View File

@ -13,18 +13,8 @@ static DEFINE_SPINLOCK(xxx_lock);
The above is always safe. It will disable interrupts _locally_, but the The above is always safe. It will disable interrupts _locally_, but the
spinlock itself will guarantee the global lock, so it will guarantee that spinlock itself will guarantee the global lock, so it will guarantee that
there is only one thread-of-control within the region(s) protected by that there is only one thread-of-control within the region(s) protected by that
lock. This works well even under UP. The above sequence under UP lock. This works well even under UP also, so the code does _not_ need to
essentially is just the same as doing worry about UP vs SMP issues: the spinlocks work correctly under both.
unsigned long flags;
save_flags(flags); cli();
... critical section ...
restore_flags(flags);
so the code does _not_ need to worry about UP vs SMP issues: the spinlocks
work correctly under both (and spinlocks are actually more efficient on
architectures that allow doing the "save_flags + cli" in one operation).
NOTE! Implications of spin_locks for memory are further described in: NOTE! Implications of spin_locks for memory are further described in:
@ -36,27 +26,7 @@ The above is usually pretty simple (you usually need and want only one
spinlock for most things - using more than one spinlock can make things a spinlock for most things - using more than one spinlock can make things a
lot more complex and even slower and is usually worth it only for lot more complex and even slower and is usually worth it only for
sequences that you _know_ need to be split up: avoid it at all cost if you sequences that you _know_ need to be split up: avoid it at all cost if you
aren't sure). HOWEVER, it _does_ mean that if you have some code that does aren't sure).
cli();
.. critical section ..
sti();
and another sequence that does
spin_lock_irqsave(flags);
.. critical section ..
spin_unlock_irqrestore(flags);
then they are NOT mutually exclusive, and the critical regions can happen
at the same time on two different CPU's. That's fine per se, but the
critical regions had better be critical for different things (ie they
can't stomp on each other).
The above is a problem mainly if you end up mixing code - for example the
routines in ll_rw_block() tend to use cli/sti to protect the atomicity of
their actions, and if a driver uses spinlocks instead then you should
think about issues like the above.
This is really the only really hard part about spinlocks: once you start This is really the only really hard part about spinlocks: once you start
using spinlocks they tend to expand to areas you might not have noticed using spinlocks they tend to expand to areas you might not have noticed
@ -120,11 +90,10 @@ Lesson 3: spinlocks revisited.
The single spin-lock primitives above are by no means the only ones. They The single spin-lock primitives above are by no means the only ones. They
are the most safe ones, and the ones that work under all circumstances, are the most safe ones, and the ones that work under all circumstances,
but partly _because_ they are safe they are also fairly slow. They are but partly _because_ they are safe they are also fairly slow. They are slower
much faster than a generic global cli/sti pair, but slower than they'd than they'd need to be, because they do have to disable interrupts
need to be, because they do have to disable interrupts (which is just a (which is just a single instruction on a x86, but it's an expensive one -
single instruction on a x86, but it's an expensive one - and on other and on other architectures it can be worse).
architectures it can be worse).
If you have a case where you have to protect a data structure across If you have a case where you have to protect a data structure across
several CPU's and you want to use spinlocks you can potentially use several CPU's and you want to use spinlocks you can potentially use

View File

@ -76,6 +76,13 @@ A transfer's actual_length may be positive even when an error has been
reported. That's because transfers often involve several packets, so that reported. That's because transfers often involve several packets, so that
one or more packets could finish before an error stops further endpoint I/O. one or more packets could finish before an error stops further endpoint I/O.
For isochronous URBs, the urb status value is non-zero only if the URB is
unlinked, the device is removed, the host controller is disabled, or the total
transferred length is less than the requested length and the URB_SHORT_NOT_OK
flag is set. Completion handlers for isochronous URBs should only see
urb->status set to zero, -ENOENT, -ECONNRESET, -ESHUTDOWN, or -EREMOTEIO.
Individual frame descriptor status fields may report more status codes.
0 Transfer completed successfully 0 Transfer completed successfully
@ -132,7 +139,7 @@ one or more packets could finish before an error stops further endpoint I/O.
device removal events immediately. device removal events immediately.
-EXDEV ISO transfer only partially completed -EXDEV ISO transfer only partially completed
look at individual frame status for details (only set in iso_frame_desc[n].status, not urb->status)
-EINVAL ISO madness, if this happens: Log off and go home -EINVAL ISO madness, if this happens: Log off and go home

View File

@ -594,6 +594,16 @@ S: Maintained
F: arch/arm/lib/floppydma.S F: arch/arm/lib/floppydma.S
F: arch/arm/include/asm/floppy.h F: arch/arm/include/asm/floppy.h
ARM PMU PROFILING AND DEBUGGING
M: Will Deacon <will.deacon@arm.com>
S: Maintained
F: arch/arm/kernel/perf_event*
F: arch/arm/oprofile/common.c
F: arch/arm/kernel/pmu.c
F: arch/arm/include/asm/pmu.h
F: arch/arm/kernel/hw_breakpoint.c
F: arch/arm/include/asm/hw_breakpoint.h
ARM PORT ARM PORT
M: Russell King <linux@arm.linux.org.uk> M: Russell King <linux@arm.linux.org.uk>
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
@ -1345,16 +1355,18 @@ F: drivers/auxdisplay/
F: include/linux/cfag12864b.h F: include/linux/cfag12864b.h
AVR32 ARCHITECTURE AVR32 ARCHITECTURE
M: Hans-Christian Egtvedt <hans-christian.egtvedt@atmel.com> M: Haavard Skinnemoen <hskinnemoen@gmail.com>
M: Hans-Christian Egtvedt <egtvedt@samfundet.no>
W: http://www.atmel.com/products/AVR32/ W: http://www.atmel.com/products/AVR32/
W: http://avr32linux.org/ W: http://avr32linux.org/
W: http://avrfreaks.net/ W: http://avrfreaks.net/
S: Supported S: Maintained
F: arch/avr32/ F: arch/avr32/
AVR32/AT32AP MACHINE SUPPORT AVR32/AT32AP MACHINE SUPPORT
M: Hans-Christian Egtvedt <hans-christian.egtvedt@atmel.com> M: Haavard Skinnemoen <hskinnemoen@gmail.com>
S: Supported M: Hans-Christian Egtvedt <egtvedt@samfundet.no>
S: Maintained
F: arch/avr32/mach-at32ap/ F: arch/avr32/mach-at32ap/
AX.25 NETWORK LAYER AX.25 NETWORK LAYER
@ -1390,7 +1402,6 @@ F: include/linux/backlight.h
BATMAN ADVANCED BATMAN ADVANCED
M: Marek Lindner <lindner_marek@yahoo.de> M: Marek Lindner <lindner_marek@yahoo.de>
M: Simon Wunderlich <siwu@hrz.tu-chemnitz.de> M: Simon Wunderlich <siwu@hrz.tu-chemnitz.de>
M: Sven Eckelmann <sven@narfation.org>
L: b.a.t.m.a.n@lists.open-mesh.org L: b.a.t.m.a.n@lists.open-mesh.org
W: http://www.open-mesh.org/ W: http://www.open-mesh.org/
S: Maintained S: Maintained
@ -1423,7 +1434,6 @@ S: Supported
F: arch/blackfin/ F: arch/blackfin/
BLACKFIN EMAC DRIVER BLACKFIN EMAC DRIVER
M: Michael Hennerich <michael.hennerich@analog.com>
L: uclinux-dist-devel@blackfin.uclinux.org L: uclinux-dist-devel@blackfin.uclinux.org
W: http://blackfin.uclinux.org W: http://blackfin.uclinux.org
S: Supported S: Supported
@ -1639,7 +1649,7 @@ CAN NETWORK LAYER
M: Oliver Hartkopp <socketcan@hartkopp.net> M: Oliver Hartkopp <socketcan@hartkopp.net>
M: Oliver Hartkopp <oliver.hartkopp@volkswagen.de> M: Oliver Hartkopp <oliver.hartkopp@volkswagen.de>
M: Urs Thuermann <urs.thuermann@volkswagen.de> M: Urs Thuermann <urs.thuermann@volkswagen.de>
L: socketcan-core@lists.berlios.de L: socketcan-core@lists.berlios.de (subscribers-only)
L: netdev@vger.kernel.org L: netdev@vger.kernel.org
W: http://developer.berlios.de/projects/socketcan/ W: http://developer.berlios.de/projects/socketcan/
S: Maintained S: Maintained
@ -1651,7 +1661,7 @@ F: include/linux/can/raw.h
CAN NETWORK DRIVERS CAN NETWORK DRIVERS
M: Wolfgang Grandegger <wg@grandegger.com> M: Wolfgang Grandegger <wg@grandegger.com>
L: socketcan-core@lists.berlios.de L: socketcan-core@lists.berlios.de (subscribers-only)
L: netdev@vger.kernel.org L: netdev@vger.kernel.org
W: http://developer.berlios.de/projects/socketcan/ W: http://developer.berlios.de/projects/socketcan/
S: Maintained S: Maintained
@ -2197,7 +2207,7 @@ F: drivers/acpi/dock.c
DOCUMENTATION DOCUMENTATION
M: Randy Dunlap <rdunlap@xenotime.net> M: Randy Dunlap <rdunlap@xenotime.net>
L: linux-doc@vger.kernel.org L: linux-doc@vger.kernel.org
T: quilt oss.oracle.com/~rdunlap/kernel-doc-patches/current/ T: quilt http://userweb.kernel.org/~rdunlap/kernel-doc-patches/current/
S: Maintained S: Maintained
F: Documentation/ F: Documentation/
@ -4982,7 +4992,7 @@ F: drivers/power/power_supply*
PNP SUPPORT PNP SUPPORT
M: Adam Belay <abelay@mit.edu> M: Adam Belay <abelay@mit.edu>
M: Bjorn Helgaas <bjorn.helgaas@hp.com> M: Bjorn Helgaas <bhelgaas@google.com>
S: Maintained S: Maintained
F: drivers/pnp/ F: drivers/pnp/
@ -5181,6 +5191,7 @@ S: Supported
F: drivers/net/qlcnic/ F: drivers/net/qlcnic/
QLOGIC QLGE 10Gb ETHERNET DRIVER QLOGIC QLGE 10Gb ETHERNET DRIVER
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
L: netdev@vger.kernel.org L: netdev@vger.kernel.org
@ -6434,8 +6445,9 @@ S: Maintained
F: drivers/usb/misc/rio500* F: drivers/usb/misc/rio500*
USB EHCI DRIVER USB EHCI DRIVER
M: Alan Stern <stern@rowland.harvard.edu>
L: linux-usb@vger.kernel.org L: linux-usb@vger.kernel.org
S: Orphan S: Maintained
F: Documentation/usb/ehci.txt F: Documentation/usb/ehci.txt
F: drivers/usb/host/ehci* F: drivers/usb/host/ehci*
@ -6465,6 +6477,12 @@ S: Maintained
F: Documentation/hid/hiddev.txt F: Documentation/hid/hiddev.txt
F: drivers/hid/usbhid/ F: drivers/hid/usbhid/
USB/IP DRIVERS
M: Matt Mooney <mfm@muteddisk.com>
L: linux-usb@vger.kernel.org
S: Maintained
F: drivers/staging/usbip/
USB ISP116X DRIVER USB ISP116X DRIVER
M: Olav Kongas <ok@artecdesign.ee> M: Olav Kongas <ok@artecdesign.ee>
L: linux-usb@vger.kernel.org L: linux-usb@vger.kernel.org
@ -6494,8 +6512,9 @@ S: Maintained
F: sound/usb/midi.* F: sound/usb/midi.*
USB OHCI DRIVER USB OHCI DRIVER
M: Alan Stern <stern@rowland.harvard.edu>
L: linux-usb@vger.kernel.org L: linux-usb@vger.kernel.org
S: Orphan S: Maintained
F: Documentation/usb/ohci.txt F: Documentation/usb/ohci.txt
F: drivers/usb/host/ohci* F: drivers/usb/host/ohci*
@ -6724,6 +6743,7 @@ F: fs/fat/
VIDEOBUF2 FRAMEWORK VIDEOBUF2 FRAMEWORK
M: Pawel Osciak <pawel@osciak.com> M: Pawel Osciak <pawel@osciak.com>
M: Marek Szyprowski <m.szyprowski@samsung.com> M: Marek Szyprowski <m.szyprowski@samsung.com>
M: Kyungmin Park <kyungmin.park@samsung.com>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
S: Maintained S: Maintained
F: drivers/media/video/videobuf2-* F: drivers/media/video/videobuf2-*

View File

@ -1,7 +1,7 @@
VERSION = 3 VERSION = 3
PATCHLEVEL = 0 PATCHLEVEL = 0
SUBLEVEL = 0 SUBLEVEL = 0
EXTRAVERSION = -rc4 EXTRAVERSION = -rc7
NAME = Sneaky Weasel NAME = Sneaky Weasel
# *DOCUMENTATION* # *DOCUMENTATION*

42
README
View File

@ -1,6 +1,6 @@
Linux kernel release 2.6.xx <http://kernel.org/> Linux kernel release 3.x <http://kernel.org/>
These are the release notes for Linux version 2.6. Read them carefully, These are the release notes for Linux version 3. Read them carefully,
as they tell you what this is all about, explain how to install the as they tell you what this is all about, explain how to install the
kernel, and what to do if something goes wrong. kernel, and what to do if something goes wrong.
@ -62,10 +62,10 @@ INSTALLING the kernel source:
directory where you have permissions (eg. your home directory) and directory where you have permissions (eg. your home directory) and
unpack it: unpack it:
gzip -cd linux-2.6.XX.tar.gz | tar xvf - gzip -cd linux-3.X.tar.gz | tar xvf -
or or
bzip2 -dc linux-2.6.XX.tar.bz2 | tar xvf - bzip2 -dc linux-3.X.tar.bz2 | tar xvf -
Replace "XX" with the version number of the latest kernel. Replace "XX" with the version number of the latest kernel.
@ -75,15 +75,15 @@ INSTALLING the kernel source:
files. They should match the library, and not get messed up by files. They should match the library, and not get messed up by
whatever the kernel-du-jour happens to be. whatever the kernel-du-jour happens to be.
- You can also upgrade between 2.6.xx releases by patching. Patches are - You can also upgrade between 3.x releases by patching. Patches are
distributed in the traditional gzip and the newer bzip2 format. To distributed in the traditional gzip and the newer bzip2 format. To
install by patching, get all the newer patch files, enter the install by patching, get all the newer patch files, enter the
top level directory of the kernel source (linux-2.6.xx) and execute: top level directory of the kernel source (linux-3.x) and execute:
gzip -cd ../patch-2.6.xx.gz | patch -p1 gzip -cd ../patch-3.x.gz | patch -p1
or or
bzip2 -dc ../patch-2.6.xx.bz2 | patch -p1 bzip2 -dc ../patch-3.x.bz2 | patch -p1
(repeat xx for all versions bigger than the version of your current (repeat xx for all versions bigger than the version of your current
source tree, _in_order_) and you should be ok. You may want to remove source tree, _in_order_) and you should be ok. You may want to remove
@ -91,9 +91,9 @@ INSTALLING the kernel source:
failed patches (xxx# or xxx.rej). If there are, either you or me has failed patches (xxx# or xxx.rej). If there are, either you or me has
made a mistake. made a mistake.
Unlike patches for the 2.6.x kernels, patches for the 2.6.x.y kernels Unlike patches for the 3.x kernels, patches for the 3.x.y kernels
(also known as the -stable kernels) are not incremental but instead apply (also known as the -stable kernels) are not incremental but instead apply
directly to the base 2.6.x kernel. Please read directly to the base 3.x kernel. Please read
Documentation/applying-patches.txt for more information. Documentation/applying-patches.txt for more information.
Alternatively, the script patch-kernel can be used to automate this Alternatively, the script patch-kernel can be used to automate this
@ -107,14 +107,14 @@ INSTALLING the kernel source:
an alternative directory can be specified as the second argument. an alternative directory can be specified as the second argument.
- If you are upgrading between releases using the stable series patches - If you are upgrading between releases using the stable series patches
(for example, patch-2.6.xx.y), note that these "dot-releases" are (for example, patch-3.x.y), note that these "dot-releases" are
not incremental and must be applied to the 2.6.xx base tree. For not incremental and must be applied to the 3.x base tree. For
example, if your base kernel is 2.6.12 and you want to apply the example, if your base kernel is 3.0 and you want to apply the
2.6.12.3 patch, you do not and indeed must not first apply the 3.0.3 patch, you do not and indeed must not first apply the
2.6.12.1 and 2.6.12.2 patches. Similarly, if you are running kernel 3.0.1 and 3.0.2 patches. Similarly, if you are running kernel
version 2.6.12.2 and want to jump to 2.6.12.3, you must first version 3.0.2 and want to jump to 3.0.3, you must first
reverse the 2.6.12.2 patch (that is, patch -R) _before_ applying reverse the 3.0.2 patch (that is, patch -R) _before_ applying
the 2.6.12.3 patch. the 3.0.3 patch.
You can read more on this in Documentation/applying-patches.txt You can read more on this in Documentation/applying-patches.txt
- Make sure you have no stale .o files and dependencies lying around: - Make sure you have no stale .o files and dependencies lying around:
@ -126,7 +126,7 @@ INSTALLING the kernel source:
SOFTWARE REQUIREMENTS SOFTWARE REQUIREMENTS
Compiling and running the 2.6.xx kernels requires up-to-date Compiling and running the 3.x kernels requires up-to-date
versions of various software packages. Consult versions of various software packages. Consult
Documentation/Changes for the minimum version numbers required Documentation/Changes for the minimum version numbers required
and how to get updates for these packages. Beware that using and how to get updates for these packages. Beware that using
@ -142,11 +142,11 @@ BUILD directory for the kernel:
Using the option "make O=output/dir" allow you to specify an alternate Using the option "make O=output/dir" allow you to specify an alternate
place for the output files (including .config). place for the output files (including .config).
Example: Example:
kernel source code: /usr/src/linux-2.6.N kernel source code: /usr/src/linux-3.N
build directory: /home/name/build/kernel build directory: /home/name/build/kernel
To configure and build the kernel use: To configure and build the kernel use:
cd /usr/src/linux-2.6.N cd /usr/src/linux-3.N
make O=/home/name/build/kernel menuconfig make O=/home/name/build/kernel menuconfig
make O=/home/name/build/kernel make O=/home/name/build/kernel
sudo make O=/home/name/build/kernel modules_install install sudo make O=/home/name/build/kernel modules_install install

View File

@ -56,7 +56,6 @@ PLAT_NODE_DATA_LOCALNR(unsigned long p, int n)
* Given a kernel address, find the home node of the underlying memory. * Given a kernel address, find the home node of the underlying memory.
*/ */
#define kvaddr_to_nid(kaddr) pa_to_nid(__pa(kaddr)) #define kvaddr_to_nid(kaddr) pa_to_nid(__pa(kaddr))
#define node_start_pfn(nid) (NODE_DATA(nid)->node_start_pfn)
/* /*
* Given a kaddr, LOCAL_BASE_ADDR finds the owning node of the memory * Given a kaddr, LOCAL_BASE_ADDR finds the owning node of the memory

View File

@ -597,6 +597,8 @@ __common_mmu_cache_on:
sub pc, lr, r0, lsr #32 @ properly flush pipeline sub pc, lr, r0, lsr #32 @ properly flush pipeline
#endif #endif
#define PROC_ENTRY_SIZE (4*5)
/* /*
* Here follow the relocatable cache support functions for the * Here follow the relocatable cache support functions for the
* various processors. This is a generic hook for locating an * various processors. This is a generic hook for locating an
@ -624,7 +626,7 @@ call_cache_fn: adr r12, proc_types
ARM( addeq pc, r12, r3 ) @ call cache function ARM( addeq pc, r12, r3 ) @ call cache function
THUMB( addeq r12, r3 ) THUMB( addeq r12, r3 )
THUMB( moveq pc, r12 ) @ call cache function THUMB( moveq pc, r12 ) @ call cache function
add r12, r12, #4*5 add r12, r12, #PROC_ENTRY_SIZE
b 1b b 1b
/* /*
@ -794,6 +796,16 @@ proc_types:
.size proc_types, . - proc_types .size proc_types, . - proc_types
/*
* If you get a "non-constant expression in ".if" statement"
* error from the assembler on this line, check that you have
* not accidentally written a "b" instruction where you should
* have written W(b).
*/
.if (. - proc_types) % PROC_ENTRY_SIZE != 0
.error "The size of one or more proc_types entries is wrong."
.endif
/* /*
* Turn off the Cache and MMU. ARMv3 does not support * Turn off the Cache and MMU. ARMv3 does not support
* reading the control register, but ARMv4 does. * reading the control register, but ARMv4 does.

View File

@ -255,7 +255,7 @@ static inline dma_addr_t map_single(struct device *dev, void *ptr, size_t size,
if (buf == 0) { if (buf == 0) {
dev_err(dev, "%s: unable to map unsafe buffer %p!\n", dev_err(dev, "%s: unable to map unsafe buffer %p!\n",
__func__, ptr); __func__, ptr);
return 0; return ~0;
} }
dev_dbg(dev, dev_dbg(dev,

View File

@ -13,6 +13,9 @@
* Do not include any C declarations in this file - it is included by * Do not include any C declarations in this file - it is included by
* assembler source. * assembler source.
*/ */
#ifndef __ASM_ASSEMBLER_H__
#define __ASM_ASSEMBLER_H__
#ifndef __ASSEMBLY__ #ifndef __ASSEMBLY__
#error "Only include this from assembly code" #error "Only include this from assembly code"
#endif #endif
@ -290,3 +293,4 @@
.macro ldrusr, reg, ptr, inc, cond=al, rept=1, abort=9001f .macro ldrusr, reg, ptr, inc, cond=al, rept=1, abort=9001f
usracc ldr, \reg, \ptr, \inc, \cond, \rept, \abort usracc ldr, \reg, \ptr, \inc, \cond, \rept, \abort
.endm .endm
#endif /* __ASM_ASSEMBLER_H__ */

View File

@ -1,3 +1,5 @@
#include <asm/assembler.h>
/* /*
* Interrupt handling. Preserves r7, r8, r9 * Interrupt handling. Preserves r7, r8, r9
*/ */

View File

@ -193,8 +193,17 @@ apply_relocate(Elf32_Shdr *sechdrs, const char *strtab, unsigned int symindex,
offset -= 0x02000000; offset -= 0x02000000;
offset += sym->st_value - loc; offset += sym->st_value - loc;
/* only Thumb addresses allowed (no interworking) */ /*
if (!(offset & 1) || * For function symbols, only Thumb addresses are
* allowed (no interworking).
*
* For non-function symbols, the destination
* has no specific ARM/Thumb disposition, so
* the branch is resolved under the assumption
* that interworking is not required.
*/
if ((ELF32_ST_TYPE(sym->st_info) == STT_FUNC &&
!(offset & 1)) ||
offset <= (s32)0xff000000 || offset <= (s32)0xff000000 ||
offset >= (s32)0x01000000) { offset >= (s32)0x01000000) {
pr_err("%s: section %u reloc %u sym '%s': relocation %u out of range (%#lx -> %#x)\n", pr_err("%s: section %u reloc %u sym '%s': relocation %u out of range (%#lx -> %#x)\n",

View File

@ -583,7 +583,7 @@ static int armpmu_event_init(struct perf_event *event)
static void armpmu_enable(struct pmu *pmu) static void armpmu_enable(struct pmu *pmu)
{ {
/* Enable all of the perf events on hardware. */ /* Enable all of the perf events on hardware. */
int idx; int idx, enabled = 0;
struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events); struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events);
if (!armpmu) if (!armpmu)
@ -596,9 +596,11 @@ static void armpmu_enable(struct pmu *pmu)
continue; continue;
armpmu->enable(&event->hw, idx); armpmu->enable(&event->hw, idx);
enabled = 1;
} }
armpmu->start(); if (enabled)
armpmu->start();
} }
static void armpmu_disable(struct pmu *pmu) static void armpmu_disable(struct pmu *pmu)

View File

@ -73,6 +73,7 @@ __setup("fpe=", fpe_setup);
#endif #endif
extern void paging_init(struct machine_desc *desc); extern void paging_init(struct machine_desc *desc);
extern void sanity_check_meminfo(void);
extern void reboot_setup(char *str); extern void reboot_setup(char *str);
unsigned int processor_id; unsigned int processor_id;
@ -900,6 +901,7 @@ void __init setup_arch(char **cmdline_p)
parse_early_param(); parse_early_param();
sanity_check_meminfo();
arm_memblock_init(&meminfo, mdesc); arm_memblock_init(&meminfo, mdesc);
paging_init(mdesc); paging_init(mdesc);

View File

@ -318,9 +318,13 @@ asmlinkage void __cpuinit secondary_start_kernel(void)
smp_store_cpu_info(cpu); smp_store_cpu_info(cpu);
/* /*
* OK, now it's safe to let the boot CPU continue * OK, now it's safe to let the boot CPU continue. Wait for
* the CPU migration code to notice that the CPU is online
* before we continue.
*/ */
set_cpu_online(cpu, true); set_cpu_online(cpu, true);
while (!cpu_active(cpu))
cpu_relax();
/* /*
* OK, it's off to the idle thread for us * OK, it's off to the idle thread for us

View File

@ -115,7 +115,7 @@ static void __cpuinit twd_calibrate_rate(void)
twd_timer_rate = (0xFFFFFFFFU - count) * (HZ / 5); twd_timer_rate = (0xFFFFFFFFU - count) * (HZ / 5);
printk("%lu.%02luMHz.\n", twd_timer_rate / 1000000, printk("%lu.%02luMHz.\n", twd_timer_rate / 1000000,
(twd_timer_rate / 1000000) % 100); (twd_timer_rate / 10000) % 100);
} }
} }

View File

@ -223,15 +223,15 @@ static struct clk *periph_clocks[] __initdata = {
}; };
static struct clk_lookup periph_clocks_lookups[] = { static struct clk_lookup periph_clocks_lookups[] = {
CLKDEV_CON_DEV_ID("hclk", "atmel_usba_udc.0", &utmi_clk), CLKDEV_CON_DEV_ID("hclk", "atmel_usba_udc", &utmi_clk),
CLKDEV_CON_DEV_ID("pclk", "atmel_usba_udc.0", &udphs_clk), CLKDEV_CON_DEV_ID("pclk", "atmel_usba_udc", &udphs_clk),
CLKDEV_CON_DEV_ID("mci_clk", "at91_mci.0", &mmc0_clk), CLKDEV_CON_DEV_ID("mci_clk", "at91_mci.0", &mmc0_clk),
CLKDEV_CON_DEV_ID("mci_clk", "at91_mci.1", &mmc1_clk), CLKDEV_CON_DEV_ID("mci_clk", "at91_mci.1", &mmc1_clk),
CLKDEV_CON_DEV_ID("spi_clk", "atmel_spi.0", &spi0_clk), CLKDEV_CON_DEV_ID("spi_clk", "atmel_spi.0", &spi0_clk),
CLKDEV_CON_DEV_ID("spi_clk", "atmel_spi.1", &spi1_clk), CLKDEV_CON_DEV_ID("spi_clk", "atmel_spi.1", &spi1_clk),
CLKDEV_CON_DEV_ID("t0_clk", "atmel_tcb.0", &tcb_clk), CLKDEV_CON_DEV_ID("t0_clk", "atmel_tcb.0", &tcb_clk),
CLKDEV_CON_DEV_ID("ssc", "ssc.0", &ssc0_clk), CLKDEV_CON_DEV_ID("pclk", "ssc.0", &ssc0_clk),
CLKDEV_CON_DEV_ID("ssc", "ssc.1", &ssc1_clk), CLKDEV_CON_DEV_ID("pclk", "ssc.1", &ssc1_clk),
}; };
static struct clk_lookup usart_clocks_lookups[] = { static struct clk_lookup usart_clocks_lookups[] = {

View File

@ -1220,7 +1220,7 @@ void __init at91_set_serial_console(unsigned portnr)
{ {
if (portnr < ATMEL_MAX_UART) { if (portnr < ATMEL_MAX_UART) {
atmel_default_console_device = at91_uarts[portnr]; atmel_default_console_device = at91_uarts[portnr];
at91cap9_set_console_clock(portnr); at91cap9_set_console_clock(at91_uarts[portnr]->id);
} }
} }

View File

@ -199,9 +199,9 @@ static struct clk_lookup periph_clocks_lookups[] = {
CLKDEV_CON_DEV_ID("t0_clk", "atmel_tcb.1", &tc3_clk), CLKDEV_CON_DEV_ID("t0_clk", "atmel_tcb.1", &tc3_clk),
CLKDEV_CON_DEV_ID("t1_clk", "atmel_tcb.1", &tc4_clk), CLKDEV_CON_DEV_ID("t1_clk", "atmel_tcb.1", &tc4_clk),
CLKDEV_CON_DEV_ID("t2_clk", "atmel_tcb.1", &tc5_clk), CLKDEV_CON_DEV_ID("t2_clk", "atmel_tcb.1", &tc5_clk),
CLKDEV_CON_DEV_ID("ssc", "ssc.0", &ssc0_clk), CLKDEV_CON_DEV_ID("pclk", "ssc.0", &ssc0_clk),
CLKDEV_CON_DEV_ID("ssc", "ssc.1", &ssc1_clk), CLKDEV_CON_DEV_ID("pclk", "ssc.1", &ssc1_clk),
CLKDEV_CON_DEV_ID("ssc", "ssc.2", &ssc2_clk), CLKDEV_CON_DEV_ID("pclk", "ssc.2", &ssc2_clk),
}; };
static struct clk_lookup usart_clocks_lookups[] = { static struct clk_lookup usart_clocks_lookups[] = {

View File

@ -1135,7 +1135,7 @@ void __init at91_set_serial_console(unsigned portnr)
{ {
if (portnr < ATMEL_MAX_UART) { if (portnr < ATMEL_MAX_UART) {
atmel_default_console_device = at91_uarts[portnr]; atmel_default_console_device = at91_uarts[portnr];
at91rm9200_set_console_clock(portnr); at91rm9200_set_console_clock(at91_uarts[portnr]->id);
} }
} }

View File

@ -1173,7 +1173,7 @@ void __init at91_set_serial_console(unsigned portnr)
{ {
if (portnr < ATMEL_MAX_UART) { if (portnr < ATMEL_MAX_UART) {
atmel_default_console_device = at91_uarts[portnr]; atmel_default_console_device = at91_uarts[portnr];
at91sam9260_set_console_clock(portnr); at91sam9260_set_console_clock(at91_uarts[portnr]->id);
} }
} }

View File

@ -1013,7 +1013,7 @@ void __init at91_set_serial_console(unsigned portnr)
{ {
if (portnr < ATMEL_MAX_UART) { if (portnr < ATMEL_MAX_UART) {
atmel_default_console_device = at91_uarts[portnr]; atmel_default_console_device = at91_uarts[portnr];
at91sam9261_set_console_clock(portnr); at91sam9261_set_console_clock(at91_uarts[portnr]->id);
} }
} }

View File

@ -1395,7 +1395,7 @@ void __init at91_set_serial_console(unsigned portnr)
{ {
if (portnr < ATMEL_MAX_UART) { if (portnr < ATMEL_MAX_UART) {
atmel_default_console_device = at91_uarts[portnr]; atmel_default_console_device = at91_uarts[portnr];
at91sam9263_set_console_clock(portnr); at91sam9263_set_console_clock(at91_uarts[portnr]->id);
} }
} }

View File

@ -217,11 +217,11 @@ static struct clk *periph_clocks[] __initdata = {
static struct clk_lookup periph_clocks_lookups[] = { static struct clk_lookup periph_clocks_lookups[] = {
/* One additional fake clock for ohci */ /* One additional fake clock for ohci */
CLKDEV_CON_ID("ohci_clk", &uhphs_clk), CLKDEV_CON_ID("ohci_clk", &uhphs_clk),
CLKDEV_CON_DEV_ID("ehci_clk", "atmel-ehci.0", &uhphs_clk), CLKDEV_CON_DEV_ID("ehci_clk", "atmel-ehci", &uhphs_clk),
CLKDEV_CON_DEV_ID("hclk", "atmel_usba_udc.0", &utmi_clk), CLKDEV_CON_DEV_ID("hclk", "atmel_usba_udc", &utmi_clk),
CLKDEV_CON_DEV_ID("pclk", "atmel_usba_udc.0", &udphs_clk), CLKDEV_CON_DEV_ID("pclk", "atmel_usba_udc", &udphs_clk),
CLKDEV_CON_DEV_ID("mci_clk", "at91_mci.0", &mmc0_clk), CLKDEV_CON_DEV_ID("mci_clk", "atmel_mci.0", &mmc0_clk),
CLKDEV_CON_DEV_ID("mci_clk", "at91_mci.1", &mmc1_clk), CLKDEV_CON_DEV_ID("mci_clk", "atmel_mci.1", &mmc1_clk),
CLKDEV_CON_DEV_ID("spi_clk", "atmel_spi.0", &spi0_clk), CLKDEV_CON_DEV_ID("spi_clk", "atmel_spi.0", &spi0_clk),
CLKDEV_CON_DEV_ID("spi_clk", "atmel_spi.1", &spi1_clk), CLKDEV_CON_DEV_ID("spi_clk", "atmel_spi.1", &spi1_clk),
CLKDEV_CON_DEV_ID("t0_clk", "atmel_tcb.0", &tcb0_clk), CLKDEV_CON_DEV_ID("t0_clk", "atmel_tcb.0", &tcb0_clk),

View File

@ -1550,7 +1550,7 @@ void __init at91_set_serial_console(unsigned portnr)
{ {
if (portnr < ATMEL_MAX_UART) { if (portnr < ATMEL_MAX_UART) {
atmel_default_console_device = at91_uarts[portnr]; atmel_default_console_device = at91_uarts[portnr];
at91sam9g45_set_console_clock(portnr); at91sam9g45_set_console_clock(at91_uarts[portnr]->id);
} }
} }

View File

@ -191,8 +191,8 @@ static struct clk *periph_clocks[] __initdata = {
}; };
static struct clk_lookup periph_clocks_lookups[] = { static struct clk_lookup periph_clocks_lookups[] = {
CLKDEV_CON_DEV_ID("hclk", "atmel_usba_udc.0", &utmi_clk), CLKDEV_CON_DEV_ID("hclk", "atmel_usba_udc", &utmi_clk),
CLKDEV_CON_DEV_ID("pclk", "atmel_usba_udc.0", &udphs_clk), CLKDEV_CON_DEV_ID("pclk", "atmel_usba_udc", &udphs_clk),
CLKDEV_CON_DEV_ID("t0_clk", "atmel_tcb.0", &tc0_clk), CLKDEV_CON_DEV_ID("t0_clk", "atmel_tcb.0", &tc0_clk),
CLKDEV_CON_DEV_ID("t1_clk", "atmel_tcb.0", &tc1_clk), CLKDEV_CON_DEV_ID("t1_clk", "atmel_tcb.0", &tc1_clk),
CLKDEV_CON_DEV_ID("t2_clk", "atmel_tcb.0", &tc2_clk), CLKDEV_CON_DEV_ID("t2_clk", "atmel_tcb.0", &tc2_clk),

View File

@ -1168,7 +1168,7 @@ void __init at91_set_serial_console(unsigned portnr)
{ {
if (portnr < ATMEL_MAX_UART) { if (portnr < ATMEL_MAX_UART) {
atmel_default_console_device = at91_uarts[portnr]; atmel_default_console_device = at91_uarts[portnr];
at91sam9rl_set_console_clock(portnr); at91sam9rl_set_console_clock(at91_uarts[portnr]->id);
} }
} }

View File

@ -215,7 +215,7 @@ static void __init cap9adk_add_device_nand(void)
csa = at91_sys_read(AT91_MATRIX_EBICSA); csa = at91_sys_read(AT91_MATRIX_EBICSA);
at91_sys_write(AT91_MATRIX_EBICSA, csa | AT91_MATRIX_EBI_VDDIOMSEL_3_3V); at91_sys_write(AT91_MATRIX_EBICSA, csa | AT91_MATRIX_EBI_VDDIOMSEL_3_3V);
cap9adk_nand_data.bus_width_16 = !board_have_nand_8bit(); cap9adk_nand_data.bus_width_16 = board_have_nand_16bit();
/* setup bus-width (8 or 16) */ /* setup bus-width (8 or 16) */
if (cap9adk_nand_data.bus_width_16) if (cap9adk_nand_data.bus_width_16)
cap9adk_nand_smc_config.mode |= AT91_SMC_DBW_16; cap9adk_nand_smc_config.mode |= AT91_SMC_DBW_16;

View File

@ -214,7 +214,7 @@ static struct sam9_smc_config __initdata ek_nand_smc_config = {
static void __init ek_add_device_nand(void) static void __init ek_add_device_nand(void)
{ {
ek_nand_data.bus_width_16 = !board_have_nand_8bit(); ek_nand_data.bus_width_16 = board_have_nand_16bit();
/* setup bus-width (8 or 16) */ /* setup bus-width (8 or 16) */
if (ek_nand_data.bus_width_16) if (ek_nand_data.bus_width_16)
ek_nand_smc_config.mode |= AT91_SMC_DBW_16; ek_nand_smc_config.mode |= AT91_SMC_DBW_16;

View File

@ -220,7 +220,7 @@ static struct sam9_smc_config __initdata ek_nand_smc_config = {
static void __init ek_add_device_nand(void) static void __init ek_add_device_nand(void)
{ {
ek_nand_data.bus_width_16 = !board_have_nand_8bit(); ek_nand_data.bus_width_16 = board_have_nand_16bit();
/* setup bus-width (8 or 16) */ /* setup bus-width (8 or 16) */
if (ek_nand_data.bus_width_16) if (ek_nand_data.bus_width_16)
ek_nand_smc_config.mode |= AT91_SMC_DBW_16; ek_nand_smc_config.mode |= AT91_SMC_DBW_16;

View File

@ -221,7 +221,7 @@ static struct sam9_smc_config __initdata ek_nand_smc_config = {
static void __init ek_add_device_nand(void) static void __init ek_add_device_nand(void)
{ {
ek_nand_data.bus_width_16 = !board_have_nand_8bit(); ek_nand_data.bus_width_16 = board_have_nand_16bit();
/* setup bus-width (8 or 16) */ /* setup bus-width (8 or 16) */
if (ek_nand_data.bus_width_16) if (ek_nand_data.bus_width_16)
ek_nand_smc_config.mode |= AT91_SMC_DBW_16; ek_nand_smc_config.mode |= AT91_SMC_DBW_16;

View File

@ -198,7 +198,7 @@ static struct sam9_smc_config __initdata ek_nand_smc_config = {
static void __init ek_add_device_nand(void) static void __init ek_add_device_nand(void)
{ {
ek_nand_data.bus_width_16 = !board_have_nand_8bit(); ek_nand_data.bus_width_16 = board_have_nand_16bit();
/* setup bus-width (8 or 16) */ /* setup bus-width (8 or 16) */
if (ek_nand_data.bus_width_16) if (ek_nand_data.bus_width_16)
ek_nand_smc_config.mode |= AT91_SMC_DBW_16; ek_nand_smc_config.mode |= AT91_SMC_DBW_16;

View File

@ -178,7 +178,7 @@ static struct sam9_smc_config __initdata ek_nand_smc_config = {
static void __init ek_add_device_nand(void) static void __init ek_add_device_nand(void)
{ {
ek_nand_data.bus_width_16 = !board_have_nand_8bit(); ek_nand_data.bus_width_16 = board_have_nand_16bit();
/* setup bus-width (8 or 16) */ /* setup bus-width (8 or 16) */
if (ek_nand_data.bus_width_16) if (ek_nand_data.bus_width_16)
ek_nand_smc_config.mode |= AT91_SMC_DBW_16; ek_nand_smc_config.mode |= AT91_SMC_DBW_16;

View File

@ -13,13 +13,13 @@
* the 16-31 bit are reserved for at91 generic information * the 16-31 bit are reserved for at91 generic information
* *
* bit 31: * bit 31:
* 0 => nand 16 bit * 0 => nand 8 bit
* 1 => nand 8 bit * 1 => nand 16 bit
*/ */
#define BOARD_HAVE_NAND_8BIT (1 << 31) #define BOARD_HAVE_NAND_16BIT (1 << 31)
static int inline board_have_nand_8bit(void) static inline int board_have_nand_16bit(void)
{ {
return system_rev & BOARD_HAVE_NAND_8BIT; return system_rev & BOARD_HAVE_NAND_16BIT;
} }
#endif /* __ARCH_SYSTEM_REV_H__ */ #endif /* __ARCH_SYSTEM_REV_H__ */

View File

@ -53,7 +53,7 @@ davinci_alloc_gc(void __iomem *base, unsigned int irq_start, unsigned int num)
gc = irq_alloc_generic_chip("AINTC", 1, irq_start, base, handle_edge_irq); gc = irq_alloc_generic_chip("AINTC", 1, irq_start, base, handle_edge_irq);
ct = gc->chip_types; ct = gc->chip_types;
ct->chip.irq_ack = irq_gc_ack; ct->chip.irq_ack = irq_gc_ack_set_bit;
ct->chip.irq_mask = irq_gc_mask_clr_bit; ct->chip.irq_mask = irq_gc_mask_clr_bit;
ct->chip.irq_unmask = irq_gc_mask_set_bit; ct->chip.irq_unmask = irq_gc_mask_set_bit;

View File

@ -251,9 +251,9 @@ static void ep93xx_uart_set_mctrl(struct amba_device *dev,
unsigned int mcr; unsigned int mcr;
mcr = 0; mcr = 0;
if (!(mctrl & TIOCM_RTS)) if (mctrl & TIOCM_RTS)
mcr |= 2; mcr |= 2;
if (!(mctrl & TIOCM_DTR)) if (mctrl & TIOCM_DTR)
mcr |= 1; mcr |= 1;
__raw_writel(mcr, base + EP93XX_UART_MCR_OFFSET); __raw_writel(mcr, base + EP93XX_UART_MCR_OFFSET);

View File

@ -23,6 +23,7 @@
#include <plat/sdhci.h> #include <plat/sdhci.h>
#include <plat/devs.h> #include <plat/devs.h>
#include <plat/fimc-core.h> #include <plat/fimc-core.h>
#include <plat/iic-core.h>
#include <mach/regs-irq.h> #include <mach/regs-irq.h>
@ -132,6 +133,11 @@ void __init exynos4_map_io(void)
s3c_fimc_setname(1, "exynos4-fimc"); s3c_fimc_setname(1, "exynos4-fimc");
s3c_fimc_setname(2, "exynos4-fimc"); s3c_fimc_setname(2, "exynos4-fimc");
s3c_fimc_setname(3, "exynos4-fimc"); s3c_fimc_setname(3, "exynos4-fimc");
/* The I2C bus controllers are directly compatible with s3c2440 */
s3c_i2c0_setname("s3c2440-i2c");
s3c_i2c1_setname("s3c2440-i2c");
s3c_i2c2_setname("s3c2440-i2c");
} }
void __init exynos4_init_clocks(int xtal) void __init exynos4_init_clocks(int xtal)

View File

@ -330,7 +330,7 @@ struct platform_device exynos4_device_ac97 = {
static int exynos4_spdif_cfg_gpio(struct platform_device *pdev) static int exynos4_spdif_cfg_gpio(struct platform_device *pdev)
{ {
s3c_gpio_cfgpin_range(EXYNOS4_GPC1(0), 2, S3C_GPIO_SFN(3)); s3c_gpio_cfgpin_range(EXYNOS4_GPC1(0), 2, S3C_GPIO_SFN(4));
return 0; return 0;
} }

View File

@ -13,7 +13,7 @@
#include <linux/linkage.h> #include <linux/linkage.h>
#include <linux/init.h> #include <linux/init.h>
__INIT __CPUINIT
/* /*
* exynos4 specific entry point for secondary CPUs. This provides * exynos4 specific entry point for secondary CPUs. This provides

View File

@ -35,6 +35,7 @@ void __init exynos4_common_init_uarts(struct s3c2410_uartcfg *cfg, int no)
tcfg->clocks = exynos4_serial_clocks; tcfg->clocks = exynos4_serial_clocks;
tcfg->clocks_size = ARRAY_SIZE(exynos4_serial_clocks); tcfg->clocks_size = ARRAY_SIZE(exynos4_serial_clocks);
} }
tcfg->flags |= NO_NEED_CHECK_CLKSRC;
} }
s3c24xx_init_uartdevs("s5pv210-uart", s5p_uart_resources, cfg, no); s3c24xx_init_uartdevs("s5pv210-uart", s5p_uart_resources, cfg, no);

View File

@ -78,9 +78,7 @@ static struct s3c2410_uartcfg smdkv310_uartcfgs[] __initdata = {
}; };
static struct s3c_sdhci_platdata smdkv310_hsmmc0_pdata __initdata = { static struct s3c_sdhci_platdata smdkv310_hsmmc0_pdata __initdata = {
.cd_type = S3C_SDHCI_CD_GPIO, .cd_type = S3C_SDHCI_CD_INTERNAL,
.ext_cd_gpio = EXYNOS4_GPK0(2),
.ext_cd_gpio_invert = 1,
.clk_type = S3C_SDHCI_CLK_DIV_EXTERNAL, .clk_type = S3C_SDHCI_CLK_DIV_EXTERNAL,
#ifdef CONFIG_EXYNOS4_SDHCI_CH0_8BIT #ifdef CONFIG_EXYNOS4_SDHCI_CH0_8BIT
.max_width = 8, .max_width = 8,
@ -96,9 +94,7 @@ static struct s3c_sdhci_platdata smdkv310_hsmmc1_pdata __initdata = {
}; };
static struct s3c_sdhci_platdata smdkv310_hsmmc2_pdata __initdata = { static struct s3c_sdhci_platdata smdkv310_hsmmc2_pdata __initdata = {
.cd_type = S3C_SDHCI_CD_GPIO, .cd_type = S3C_SDHCI_CD_INTERNAL,
.ext_cd_gpio = EXYNOS4_GPK2(2),
.ext_cd_gpio_invert = 1,
.clk_type = S3C_SDHCI_CLK_DIV_EXTERNAL, .clk_type = S3C_SDHCI_CLK_DIV_EXTERNAL,
#ifdef CONFIG_EXYNOS4_SDHCI_CH2_8BIT #ifdef CONFIG_EXYNOS4_SDHCI_CH2_8BIT
.max_width = 8, .max_width = 8,

View File

@ -6,12 +6,14 @@ config ARCH_H7201
bool "gms30c7201" bool "gms30c7201"
depends on ARCH_H720X depends on ARCH_H720X
select CPU_H7201 select CPU_H7201
select ZONE_DMA
help help
Say Y here if you are using the Hynix GMS30C7201 Reference Board Say Y here if you are using the Hynix GMS30C7201 Reference Board
config ARCH_H7202 config ARCH_H7202
bool "hms30c7202" bool "hms30c7202"
select CPU_H7202 select CPU_H7202
select ZONE_DMA
depends on ARCH_H720X depends on ARCH_H720X
help help
Say Y here if you are using the Hynix HMS30C7202 Reference Board Say Y here if you are using the Hynix HMS30C7202 Reference Board

View File

@ -79,7 +79,7 @@ static APBC_CLK(ssp4, PXA168_SSP4, 4, 0);
static APBC_CLK(ssp5, PXA168_SSP5, 4, 0); static APBC_CLK(ssp5, PXA168_SSP5, 4, 0);
static APBC_CLK(keypad, PXA168_KPC, 0, 32000); static APBC_CLK(keypad, PXA168_KPC, 0, 32000);
static APMU_CLK(nand, NAND, 0x01db, 208000000); static APMU_CLK(nand, NAND, 0x19b, 156000000);
static APMU_CLK(lcd, LCD, 0x7f, 312000000); static APMU_CLK(lcd, LCD, 0x7f, 312000000);
/* device and clock bindings */ /* device and clock bindings */

View File

@ -110,7 +110,7 @@ static APBC_CLK(pwm2, PXA910_PWM2, 1, 13000000);
static APBC_CLK(pwm3, PXA910_PWM3, 1, 13000000); static APBC_CLK(pwm3, PXA910_PWM3, 1, 13000000);
static APBC_CLK(pwm4, PXA910_PWM4, 1, 13000000); static APBC_CLK(pwm4, PXA910_PWM4, 1, 13000000);
static APMU_CLK(nand, NAND, 0x01db, 208000000); static APMU_CLK(nand, NAND, 0x19b, 156000000);
static APMU_CLK(u2o, USB, 0x1b, 480000000); static APMU_CLK(u2o, USB, 0x1b, 480000000);
/* device and clock bindings */ /* device and clock bindings */

View File

@ -215,7 +215,7 @@ static struct omap_kp_platform_data ams_delta_kp_data __initdata = {
.delay = 9, .delay = 9,
}; };
static struct platform_device ams_delta_kp_device __initdata = { static struct platform_device ams_delta_kp_device = {
.name = "omap-keypad", .name = "omap-keypad",
.id = -1, .id = -1,
.dev = { .dev = {
@ -225,12 +225,12 @@ static struct platform_device ams_delta_kp_device __initdata = {
.resource = ams_delta_kp_resources, .resource = ams_delta_kp_resources,
}; };
static struct platform_device ams_delta_lcd_device __initdata = { static struct platform_device ams_delta_lcd_device = {
.name = "lcd_ams_delta", .name = "lcd_ams_delta",
.id = -1, .id = -1,
}; };
static struct platform_device ams_delta_led_device __initdata = { static struct platform_device ams_delta_led_device = {
.name = "ams-delta-led", .name = "ams-delta-led",
.id = -1 .id = -1
}; };
@ -267,7 +267,7 @@ static struct soc_camera_link ams_delta_iclink = {
.power = ams_delta_camera_power, .power = ams_delta_camera_power,
}; };
static struct platform_device ams_delta_camera_device __initdata = { static struct platform_device ams_delta_camera_device = {
.name = "soc-camera-pdrv", .name = "soc-camera-pdrv",
.id = 0, .id = 0,
.dev = { .dev = {

View File

@ -41,7 +41,7 @@ static struct __initdata omap_gpio_platform_data omap15xx_mpu_gpio_config = {
.bank_stride = 1, .bank_stride = 1,
}; };
static struct __initdata platform_device omap15xx_mpu_gpio = { static struct platform_device omap15xx_mpu_gpio = {
.name = "omap_gpio", .name = "omap_gpio",
.id = 0, .id = 0,
.dev = { .dev = {
@ -70,7 +70,7 @@ static struct __initdata omap_gpio_platform_data omap15xx_gpio_config = {
.bank_width = 16, .bank_width = 16,
}; };
static struct __initdata platform_device omap15xx_gpio = { static struct platform_device omap15xx_gpio = {
.name = "omap_gpio", .name = "omap_gpio",
.id = 1, .id = 1,
.dev = { .dev = {

View File

@ -44,7 +44,7 @@ static struct __initdata omap_gpio_platform_data omap16xx_mpu_gpio_config = {
.bank_stride = 1, .bank_stride = 1,
}; };
static struct __initdata platform_device omap16xx_mpu_gpio = { static struct platform_device omap16xx_mpu_gpio = {
.name = "omap_gpio", .name = "omap_gpio",
.id = 0, .id = 0,
.dev = { .dev = {
@ -73,7 +73,7 @@ static struct __initdata omap_gpio_platform_data omap16xx_gpio1_config = {
.bank_width = 16, .bank_width = 16,
}; };
static struct __initdata platform_device omap16xx_gpio1 = { static struct platform_device omap16xx_gpio1 = {
.name = "omap_gpio", .name = "omap_gpio",
.id = 1, .id = 1,
.dev = { .dev = {
@ -102,7 +102,7 @@ static struct __initdata omap_gpio_platform_data omap16xx_gpio2_config = {
.bank_width = 16, .bank_width = 16,
}; };
static struct __initdata platform_device omap16xx_gpio2 = { static struct platform_device omap16xx_gpio2 = {
.name = "omap_gpio", .name = "omap_gpio",
.id = 2, .id = 2,
.dev = { .dev = {
@ -131,7 +131,7 @@ static struct __initdata omap_gpio_platform_data omap16xx_gpio3_config = {
.bank_width = 16, .bank_width = 16,
}; };
static struct __initdata platform_device omap16xx_gpio3 = { static struct platform_device omap16xx_gpio3 = {
.name = "omap_gpio", .name = "omap_gpio",
.id = 3, .id = 3,
.dev = { .dev = {
@ -160,7 +160,7 @@ static struct __initdata omap_gpio_platform_data omap16xx_gpio4_config = {
.bank_width = 16, .bank_width = 16,
}; };
static struct __initdata platform_device omap16xx_gpio4 = { static struct platform_device omap16xx_gpio4 = {
.name = "omap_gpio", .name = "omap_gpio",
.id = 4, .id = 4,
.dev = { .dev = {

View File

@ -46,7 +46,7 @@ static struct __initdata omap_gpio_platform_data omap7xx_mpu_gpio_config = {
.bank_stride = 2, .bank_stride = 2,
}; };
static struct __initdata platform_device omap7xx_mpu_gpio = { static struct platform_device omap7xx_mpu_gpio = {
.name = "omap_gpio", .name = "omap_gpio",
.id = 0, .id = 0,
.dev = { .dev = {
@ -75,7 +75,7 @@ static struct __initdata omap_gpio_platform_data omap7xx_gpio1_config = {
.bank_width = 32, .bank_width = 32,
}; };
static struct __initdata platform_device omap7xx_gpio1 = { static struct platform_device omap7xx_gpio1 = {
.name = "omap_gpio", .name = "omap_gpio",
.id = 1, .id = 1,
.dev = { .dev = {
@ -104,7 +104,7 @@ static struct __initdata omap_gpio_platform_data omap7xx_gpio2_config = {
.bank_width = 32, .bank_width = 32,
}; };
static struct __initdata platform_device omap7xx_gpio2 = { static struct platform_device omap7xx_gpio2 = {
.name = "omap_gpio", .name = "omap_gpio",
.id = 2, .id = 2,
.dev = { .dev = {
@ -133,7 +133,7 @@ static struct __initdata omap_gpio_platform_data omap7xx_gpio3_config = {
.bank_width = 32, .bank_width = 32,
}; };
static struct __initdata platform_device omap7xx_gpio3 = { static struct platform_device omap7xx_gpio3 = {
.name = "omap_gpio", .name = "omap_gpio",
.id = 3, .id = 3,
.dev = { .dev = {
@ -162,7 +162,7 @@ static struct __initdata omap_gpio_platform_data omap7xx_gpio4_config = {
.bank_width = 32, .bank_width = 32,
}; };
static struct __initdata platform_device omap7xx_gpio4 = { static struct platform_device omap7xx_gpio4 = {
.name = "omap_gpio", .name = "omap_gpio",
.id = 4, .id = 4,
.dev = { .dev = {
@ -191,7 +191,7 @@ static struct __initdata omap_gpio_platform_data omap7xx_gpio5_config = {
.bank_width = 32, .bank_width = 32,
}; };
static struct __initdata platform_device omap7xx_gpio5 = { static struct platform_device omap7xx_gpio5 = {
.name = "omap_gpio", .name = "omap_gpio",
.id = 5, .id = 5,
.dev = { .dev = {
@ -220,7 +220,7 @@ static struct __initdata omap_gpio_platform_data omap7xx_gpio6_config = {
.bank_width = 32, .bank_width = 32,
}; };
static struct __initdata platform_device omap7xx_gpio6 = { static struct platform_device omap7xx_gpio6 = {
.name = "omap_gpio", .name = "omap_gpio",
.id = 6, .id = 6,
.dev = { .dev = {

View File

@ -558,7 +558,7 @@ static struct radio_si4713_platform_data rx51_si4713_data __initdata_or_module =
.subdev_board_info = &rx51_si4713_board_info, .subdev_board_info = &rx51_si4713_board_info,
}; };
static struct platform_device rx51_si4713_dev __initdata_or_module = { static struct platform_device rx51_si4713_dev = {
.name = "radio-si4713", .name = "radio-si4713",
.id = -1, .id = -1,
.dev = { .dev = {

View File

@ -347,9 +347,9 @@ static int pxa2xx_mfp_suspend(void)
if ((gpio_desc[i].config & MFP_LPM_KEEP_OUTPUT) && if ((gpio_desc[i].config & MFP_LPM_KEEP_OUTPUT) &&
(GPDR(i) & GPIO_bit(i))) { (GPDR(i) & GPIO_bit(i))) {
if (GPLR(i) & GPIO_bit(i)) if (GPLR(i) & GPIO_bit(i))
PGSR(i) |= GPIO_bit(i); PGSR(gpio_to_bank(i)) |= GPIO_bit(i);
else else
PGSR(i) &= ~GPIO_bit(i); PGSR(gpio_to_bank(i)) &= ~GPIO_bit(i);
} }
} }

View File

@ -573,10 +573,10 @@ static struct pxafb_mode_info sharp_lq043t3dx02_mode = {
.xres = 480, .xres = 480,
.yres = 272, .yres = 272,
.bpp = 16, .bpp = 16,
.hsync_len = 4, .hsync_len = 41,
.left_margin = 2, .left_margin = 2,
.right_margin = 1, .right_margin = 1,
.vsync_len = 1, .vsync_len = 10,
.upper_margin = 3, .upper_margin = 3,
.lower_margin = 1, .lower_margin = 1,
.sync = 0, .sync = 0,
@ -596,29 +596,31 @@ static void __init raumfeld_lcd_init(void)
{ {
int ret; int ret;
pxa_set_fb_info(NULL, &raumfeld_sharp_lcd_info);
/* Earlier devices had the backlight regulator controlled
* via PWM, later versions use another controller for that */
if ((system_rev & 0xff) < 2) {
mfp_cfg_t raumfeld_pwm_pin_config = GPIO17_PWM0_OUT;
pxa3xx_mfp_config(&raumfeld_pwm_pin_config, 1);
platform_device_register(&raumfeld_pwm_backlight_device);
} else
platform_device_register(&raumfeld_lt3593_device);
ret = gpio_request(GPIO_TFT_VA_EN, "display VA enable"); ret = gpio_request(GPIO_TFT_VA_EN, "display VA enable");
if (ret < 0) if (ret < 0)
pr_warning("Unable to request GPIO_TFT_VA_EN\n"); pr_warning("Unable to request GPIO_TFT_VA_EN\n");
else else
gpio_direction_output(GPIO_TFT_VA_EN, 1); gpio_direction_output(GPIO_TFT_VA_EN, 1);
msleep(100);
ret = gpio_request(GPIO_DISPLAY_ENABLE, "display enable"); ret = gpio_request(GPIO_DISPLAY_ENABLE, "display enable");
if (ret < 0) if (ret < 0)
pr_warning("Unable to request GPIO_DISPLAY_ENABLE\n"); pr_warning("Unable to request GPIO_DISPLAY_ENABLE\n");
else else
gpio_direction_output(GPIO_DISPLAY_ENABLE, 1); gpio_direction_output(GPIO_DISPLAY_ENABLE, 1);
/* Hardware revision 2 has the backlight regulator controlled
* by an LT3593, earlier and later devices use PWM for that. */
if ((system_rev & 0xff) == 2) {
platform_device_register(&raumfeld_lt3593_device);
} else {
mfp_cfg_t raumfeld_pwm_pin_config = GPIO17_PWM0_OUT;
pxa3xx_mfp_config(&raumfeld_pwm_pin_config, 1);
platform_device_register(&raumfeld_pwm_backlight_device);
}
pxa_set_fb_info(NULL, &raumfeld_sharp_lcd_info);
platform_device_register(&pxa3xx_device_gcu); platform_device_register(&pxa3xx_device_gcu);
} }
@ -657,10 +659,10 @@ static struct lis3lv02d_platform_data lis3_pdata = {
#define SPI_AK4104 \ #define SPI_AK4104 \
{ \ { \
.modalias = "ak4104", \ .modalias = "ak4104-codec", \
.max_speed_hz = 10000, \ .max_speed_hz = 10000, \
.bus_num = 0, \ .bus_num = 0, \
.chip_select = 0, \ .chip_select = 0, \
.controller_data = (void *) GPIO_SPDIF_CS, \ .controller_data = (void *) GPIO_SPDIF_CS, \
} }

View File

@ -552,7 +552,7 @@ struct mini2440_features_t {
struct platform_device *optional[8]; struct platform_device *optional[8];
}; };
static void mini2440_parse_features( static void __init mini2440_parse_features(
struct mini2440_features_t * features, struct mini2440_features_t * features,
const char * features_str ) const char * features_str )
{ {

View File

@ -88,6 +88,7 @@ static struct s3c64xx_spi_info s3c64xx_spi0_pdata = {
.cfg_gpio = s3c64xx_spi_cfg_gpio, .cfg_gpio = s3c64xx_spi_cfg_gpio,
.fifo_lvl_mask = 0x7f, .fifo_lvl_mask = 0x7f,
.rx_lvl_offset = 13, .rx_lvl_offset = 13,
.tx_st_done = 21,
}; };
static u64 spi_dmamask = DMA_BIT_MASK(32); static u64 spi_dmamask = DMA_BIT_MASK(32);
@ -132,6 +133,7 @@ static struct s3c64xx_spi_info s3c64xx_spi1_pdata = {
.cfg_gpio = s3c64xx_spi_cfg_gpio, .cfg_gpio = s3c64xx_spi_cfg_gpio,
.fifo_lvl_mask = 0x7f, .fifo_lvl_mask = 0x7f,
.rx_lvl_offset = 13, .rx_lvl_offset = 13,
.tx_st_done = 21,
}; };
struct platform_device s3c64xx_device_spi1 = { struct platform_device s3c64xx_device_spi1 = {

View File

@ -112,12 +112,14 @@ static struct s3c64xx_spi_info s5p6440_spi0_pdata = {
.cfg_gpio = s5p6440_spi_cfg_gpio, .cfg_gpio = s5p6440_spi_cfg_gpio,
.fifo_lvl_mask = 0x1ff, .fifo_lvl_mask = 0x1ff,
.rx_lvl_offset = 15, .rx_lvl_offset = 15,
.tx_st_done = 25,
}; };
static struct s3c64xx_spi_info s5p6450_spi0_pdata = { static struct s3c64xx_spi_info s5p6450_spi0_pdata = {
.cfg_gpio = s5p6450_spi_cfg_gpio, .cfg_gpio = s5p6450_spi_cfg_gpio,
.fifo_lvl_mask = 0x1ff, .fifo_lvl_mask = 0x1ff,
.rx_lvl_offset = 15, .rx_lvl_offset = 15,
.tx_st_done = 25,
}; };
static u64 spi_dmamask = DMA_BIT_MASK(32); static u64 spi_dmamask = DMA_BIT_MASK(32);
@ -160,12 +162,14 @@ static struct s3c64xx_spi_info s5p6440_spi1_pdata = {
.cfg_gpio = s5p6440_spi_cfg_gpio, .cfg_gpio = s5p6440_spi_cfg_gpio,
.fifo_lvl_mask = 0x7f, .fifo_lvl_mask = 0x7f,
.rx_lvl_offset = 15, .rx_lvl_offset = 15,
.tx_st_done = 25,
}; };
static struct s3c64xx_spi_info s5p6450_spi1_pdata = { static struct s3c64xx_spi_info s5p6450_spi1_pdata = {
.cfg_gpio = s5p6450_spi_cfg_gpio, .cfg_gpio = s5p6450_spi_cfg_gpio,
.fifo_lvl_mask = 0x7f, .fifo_lvl_mask = 0x7f,
.rx_lvl_offset = 15, .rx_lvl_offset = 15,
.tx_st_done = 25,
}; };
struct platform_device s5p64x0_device_spi1 = { struct platform_device s5p64x0_device_spi1 = {

View File

@ -15,6 +15,7 @@
#include <mach/dma.h> #include <mach/dma.h>
#include <mach/map.h> #include <mach/map.h>
#include <mach/spi-clocks.h> #include <mach/spi-clocks.h>
#include <mach/irqs.h>
#include <plat/s3c64xx-spi.h> #include <plat/s3c64xx-spi.h>
#include <plat/gpio-cfg.h> #include <plat/gpio-cfg.h>
@ -90,6 +91,7 @@ static struct s3c64xx_spi_info s5pc100_spi0_pdata = {
.fifo_lvl_mask = 0x7f, .fifo_lvl_mask = 0x7f,
.rx_lvl_offset = 13, .rx_lvl_offset = 13,
.high_speed = 1, .high_speed = 1,
.tx_st_done = 21,
}; };
static u64 spi_dmamask = DMA_BIT_MASK(32); static u64 spi_dmamask = DMA_BIT_MASK(32);
@ -134,6 +136,7 @@ static struct s3c64xx_spi_info s5pc100_spi1_pdata = {
.fifo_lvl_mask = 0x7f, .fifo_lvl_mask = 0x7f,
.rx_lvl_offset = 13, .rx_lvl_offset = 13,
.high_speed = 1, .high_speed = 1,
.tx_st_done = 21,
}; };
struct platform_device s5pc100_device_spi1 = { struct platform_device s5pc100_device_spi1 = {
@ -176,6 +179,7 @@ static struct s3c64xx_spi_info s5pc100_spi2_pdata = {
.fifo_lvl_mask = 0x7f, .fifo_lvl_mask = 0x7f,
.rx_lvl_offset = 13, .rx_lvl_offset = 13,
.high_speed = 1, .high_speed = 1,
.tx_st_done = 21,
}; };
struct platform_device s5pc100_device_spi2 = { struct platform_device s5pc100_device_spi2 = {

View File

@ -85,6 +85,7 @@ static struct s3c64xx_spi_info s5pv210_spi0_pdata = {
.fifo_lvl_mask = 0x1ff, .fifo_lvl_mask = 0x1ff,
.rx_lvl_offset = 15, .rx_lvl_offset = 15,
.high_speed = 1, .high_speed = 1,
.tx_st_done = 25,
}; };
static u64 spi_dmamask = DMA_BIT_MASK(32); static u64 spi_dmamask = DMA_BIT_MASK(32);
@ -129,6 +130,7 @@ static struct s3c64xx_spi_info s5pv210_spi1_pdata = {
.fifo_lvl_mask = 0x7f, .fifo_lvl_mask = 0x7f,
.rx_lvl_offset = 15, .rx_lvl_offset = 15,
.high_speed = 1, .high_speed = 1,
.tx_st_done = 25,
}; };
struct platform_device s5pv210_device_spi1 = { struct platform_device s5pv210_device_spi1 = {

View File

@ -381,7 +381,7 @@ void ag5evm_sdhi1_set_pwr(struct platform_device *pdev, int state)
gpio_set_value(GPIO_PORT114, state); gpio_set_value(GPIO_PORT114, state);
} }
static struct sh_mobile_sdhi_info sh_sdhi1_platdata = { static struct sh_mobile_sdhi_info sh_sdhi1_info = {
.tmio_flags = TMIO_MMC_WRPROTECT_DISABLE, .tmio_flags = TMIO_MMC_WRPROTECT_DISABLE,
.tmio_caps = MMC_CAP_NONREMOVABLE | MMC_CAP_SDIO_IRQ, .tmio_caps = MMC_CAP_NONREMOVABLE | MMC_CAP_SDIO_IRQ,
.tmio_ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34, .tmio_ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34,
@ -413,7 +413,7 @@ static struct platform_device sdhi1_device = {
.name = "sh_mobile_sdhi", .name = "sh_mobile_sdhi",
.id = 1, .id = 1,
.dev = { .dev = {
.platform_data = &sh_sdhi1_platdata, .platform_data = &sh_sdhi1_info,
}, },
.num_resources = ARRAY_SIZE(sdhi1_resources), .num_resources = ARRAY_SIZE(sdhi1_resources),
.resource = sdhi1_resources, .resource = sdhi1_resources,

View File

@ -913,7 +913,7 @@ static struct i2c_board_info imx074_info = {
I2C_BOARD_INFO("imx074", 0x1a), I2C_BOARD_INFO("imx074", 0x1a),
}; };
struct soc_camera_link imx074_link = { static struct soc_camera_link imx074_link = {
.bus_id = 0, .bus_id = 0,
.board_info = &imx074_info, .board_info = &imx074_info,
.i2c_adapter_id = 0, .i2c_adapter_id = 0,

View File

@ -1287,9 +1287,9 @@ static struct platform_device *mackerel_devices[] __initdata = {
&nor_flash_device, &nor_flash_device,
&smc911x_device, &smc911x_device,
&lcdc_device, &lcdc_device,
&usbhs0_device,
&usb1_host_device, &usb1_host_device,
&usbhs1_device, &usbhs1_device,
&usbhs0_device,
&leds_device, &leds_device,
&fsi_device, &fsi_device,
&fsi_ak4643_device, &fsi_ak4643_device,

View File

@ -110,10 +110,18 @@ static pin_cfg_t mop500_pins_common[] = {
GPIO168_KP_O0, GPIO168_KP_O0,
/* UART */ /* UART */
GPIO0_U0_CTSn | PIN_INPUT_PULLUP, /* uart-0 pins gpio configuration should be
GPIO1_U0_RTSn | PIN_OUTPUT_HIGH, * kept intact to prevent glitch in tx line
GPIO2_U0_RXD | PIN_INPUT_PULLUP, * when tty dev is opened. Later these pins
GPIO3_U0_TXD | PIN_OUTPUT_HIGH, * are configured to uart mop500_pins_uart0
*
* It will be replaced with uart configuration
* once the issue is solved.
*/
GPIO0_GPIO | PIN_INPUT_PULLUP,
GPIO1_GPIO | PIN_OUTPUT_HIGH,
GPIO2_GPIO | PIN_INPUT_PULLUP,
GPIO3_GPIO | PIN_OUTPUT_HIGH,
GPIO29_U2_RXD | PIN_INPUT_PULLUP, GPIO29_U2_RXD | PIN_INPUT_PULLUP,
GPIO30_U2_TXD | PIN_OUTPUT_HIGH, GPIO30_U2_TXD | PIN_OUTPUT_HIGH,

View File

@ -27,18 +27,21 @@
#include <linux/leds-lp5521.h> #include <linux/leds-lp5521.h>
#include <linux/input.h> #include <linux/input.h>
#include <linux/gpio_keys.h> #include <linux/gpio_keys.h>
#include <linux/delay.h>
#include <asm/mach-types.h> #include <asm/mach-types.h>
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
#include <plat/i2c.h> #include <plat/i2c.h>
#include <plat/ste_dma40.h> #include <plat/ste_dma40.h>
#include <plat/pincfg.h>
#include <mach/hardware.h> #include <mach/hardware.h>
#include <mach/setup.h> #include <mach/setup.h>
#include <mach/devices.h> #include <mach/devices.h>
#include <mach/irqs.h> #include <mach/irqs.h>
#include "pins-db8500.h"
#include "ste-dma40-db8500.h" #include "ste-dma40-db8500.h"
#include "devices-db8500.h" #include "devices-db8500.h"
#include "board-mop500.h" #include "board-mop500.h"
@ -393,12 +396,63 @@ static struct stedma40_chan_cfg uart2_dma_cfg_tx = {
}; };
#endif #endif
static pin_cfg_t mop500_pins_uart0[] = {
GPIO0_U0_CTSn | PIN_INPUT_PULLUP,
GPIO1_U0_RTSn | PIN_OUTPUT_HIGH,
GPIO2_U0_RXD | PIN_INPUT_PULLUP,
GPIO3_U0_TXD | PIN_OUTPUT_HIGH,
};
#define PRCC_K_SOFTRST_SET 0x18
#define PRCC_K_SOFTRST_CLEAR 0x1C
static void ux500_uart0_reset(void)
{
void __iomem *prcc_rst_set, *prcc_rst_clr;
prcc_rst_set = (void __iomem *)IO_ADDRESS(U8500_CLKRST1_BASE +
PRCC_K_SOFTRST_SET);
prcc_rst_clr = (void __iomem *)IO_ADDRESS(U8500_CLKRST1_BASE +
PRCC_K_SOFTRST_CLEAR);
/* Activate soft reset PRCC_K_SOFTRST_CLEAR */
writel((readl(prcc_rst_clr) | 0x1), prcc_rst_clr);
udelay(1);
/* Release soft reset PRCC_K_SOFTRST_SET */
writel((readl(prcc_rst_set) | 0x1), prcc_rst_set);
udelay(1);
}
static void ux500_uart0_init(void)
{
int ret;
ret = nmk_config_pins(mop500_pins_uart0,
ARRAY_SIZE(mop500_pins_uart0));
if (ret < 0)
pr_err("pl011: uart pins_enable failed\n");
}
static void ux500_uart0_exit(void)
{
int ret;
ret = nmk_config_pins_sleep(mop500_pins_uart0,
ARRAY_SIZE(mop500_pins_uart0));
if (ret < 0)
pr_err("pl011: uart pins_disable failed\n");
}
static struct amba_pl011_data uart0_plat = { static struct amba_pl011_data uart0_plat = {
#ifdef CONFIG_STE_DMA40 #ifdef CONFIG_STE_DMA40
.dma_filter = stedma40_filter, .dma_filter = stedma40_filter,
.dma_rx_param = &uart0_dma_cfg_rx, .dma_rx_param = &uart0_dma_cfg_rx,
.dma_tx_param = &uart0_dma_cfg_tx, .dma_tx_param = &uart0_dma_cfg_tx,
#endif #endif
.init = ux500_uart0_init,
.exit = ux500_uart0_exit,
.reset = ux500_uart0_reset,
}; };
static struct amba_pl011_data uart1_plat = { static struct amba_pl011_data uart1_plat = {

View File

@ -39,9 +39,10 @@
static void __iomem *ic_regbase; static void __iomem *ic_regbase;
static void __iomem *sic_regbase; static void __iomem *sic_regbase;
static void vt8500_irq_mask(unsigned int irq) static void vt8500_irq_mask(struct irq_data *d)
{ {
void __iomem *base = ic_regbase; void __iomem *base = ic_regbase;
unsigned irq = d->irq;
u8 edge; u8 edge;
if (irq >= 64) { if (irq >= 64) {
@ -64,9 +65,10 @@ static void vt8500_irq_mask(unsigned int irq)
} }
} }
static void vt8500_irq_unmask(unsigned int irq) static void vt8500_irq_unmask(struct irq_data *d)
{ {
void __iomem *base = ic_regbase; void __iomem *base = ic_regbase;
unsigned irq = d->irq;
u8 dctr; u8 dctr;
if (irq >= 64) { if (irq >= 64) {
@ -78,10 +80,11 @@ static void vt8500_irq_unmask(unsigned int irq)
writeb(dctr, base + VT8500_IC_DCTR + irq); writeb(dctr, base + VT8500_IC_DCTR + irq);
} }
static int vt8500_irq_set_type(unsigned int irq, unsigned int flow_type) static int vt8500_irq_set_type(struct irq_data *d, unsigned int flow_type)
{ {
void __iomem *base = ic_regbase; void __iomem *base = ic_regbase;
unsigned int orig_irq = irq; unsigned irq = d->irq;
unsigned orig_irq = irq;
u8 dctr; u8 dctr;
if (irq >= 64) { if (irq >= 64) {
@ -114,11 +117,11 @@ static int vt8500_irq_set_type(unsigned int irq, unsigned int flow_type)
} }
static struct irq_chip vt8500_irq_chip = { static struct irq_chip vt8500_irq_chip = {
.name = "vt8500", .name = "vt8500",
.ack = vt8500_irq_mask, .irq_ack = vt8500_irq_mask,
.mask = vt8500_irq_mask, .irq_mask = vt8500_irq_mask,
.unmask = vt8500_irq_unmask, .irq_unmask = vt8500_irq_unmask,
.set_type = vt8500_irq_set_type, .irq_set_type = vt8500_irq_set_type,
}; };
void __init vt8500_init_irq(void) void __init vt8500_init_irq(void)

View File

@ -120,17 +120,22 @@ static void l2x0_cache_sync(void)
spin_unlock_irqrestore(&l2x0_lock, flags); spin_unlock_irqrestore(&l2x0_lock, flags);
} }
static void __l2x0_flush_all(void)
{
debug_writel(0x03);
writel_relaxed(l2x0_way_mask, l2x0_base + L2X0_CLEAN_INV_WAY);
cache_wait_way(l2x0_base + L2X0_CLEAN_INV_WAY, l2x0_way_mask);
cache_sync();
debug_writel(0x00);
}
static void l2x0_flush_all(void) static void l2x0_flush_all(void)
{ {
unsigned long flags; unsigned long flags;
/* clean all ways */ /* clean all ways */
spin_lock_irqsave(&l2x0_lock, flags); spin_lock_irqsave(&l2x0_lock, flags);
debug_writel(0x03); __l2x0_flush_all();
writel_relaxed(l2x0_way_mask, l2x0_base + L2X0_CLEAN_INV_WAY);
cache_wait_way(l2x0_base + L2X0_CLEAN_INV_WAY, l2x0_way_mask);
cache_sync();
debug_writel(0x00);
spin_unlock_irqrestore(&l2x0_lock, flags); spin_unlock_irqrestore(&l2x0_lock, flags);
} }
@ -266,7 +271,9 @@ static void l2x0_disable(void)
unsigned long flags; unsigned long flags;
spin_lock_irqsave(&l2x0_lock, flags); spin_lock_irqsave(&l2x0_lock, flags);
writel(0, l2x0_base + L2X0_CTRL); __l2x0_flush_all();
writel_relaxed(0, l2x0_base + L2X0_CTRL);
dsb();
spin_unlock_irqrestore(&l2x0_lock, flags); spin_unlock_irqrestore(&l2x0_lock, flags);
} }

View File

@ -759,7 +759,7 @@ early_param("vmalloc", early_vmalloc);
static phys_addr_t lowmem_limit __initdata = 0; static phys_addr_t lowmem_limit __initdata = 0;
static void __init sanity_check_meminfo(void) void __init sanity_check_meminfo(void)
{ {
int i, j, highmem = 0; int i, j, highmem = 0;
@ -1032,8 +1032,9 @@ void __init paging_init(struct machine_desc *mdesc)
{ {
void *zero_page; void *zero_page;
memblock_set_current_limit(lowmem_limit);
build_mem_type_table(); build_mem_type_table();
sanity_check_meminfo();
prepare_page_table(); prepare_page_table();
map_lowmem(); map_lowmem();
devicemaps_init(mdesc); devicemaps_init(mdesc);

View File

@ -27,6 +27,10 @@ void __init arm_mm_memblock_reserve(void)
memblock_reserve(CONFIG_VECTORS_BASE, PAGE_SIZE); memblock_reserve(CONFIG_VECTORS_BASE, PAGE_SIZE);
} }
void __init sanity_check_meminfo(void)
{
}
/* /*
* paging_init() sets up the page tables, initialises the zone memory * paging_init() sets up the page tables, initialises the zone memory
* maps, and sets up the zero page, bad page and bad page tables. * maps, and sets up the zero page, bad page and bad page tables.

View File

@ -210,19 +210,21 @@ cpu_v7_name:
/* Suspend/resume support: derived from arch/arm/mach-s5pv210/sleep.S */ /* Suspend/resume support: derived from arch/arm/mach-s5pv210/sleep.S */
.globl cpu_v7_suspend_size .globl cpu_v7_suspend_size
.equ cpu_v7_suspend_size, 4 * 8 .equ cpu_v7_suspend_size, 4 * 9
#ifdef CONFIG_PM_SLEEP #ifdef CONFIG_PM_SLEEP
ENTRY(cpu_v7_do_suspend) ENTRY(cpu_v7_do_suspend)
stmfd sp!, {r4 - r11, lr} stmfd sp!, {r4 - r11, lr}
mrc p15, 0, r4, c13, c0, 0 @ FCSE/PID mrc p15, 0, r4, c13, c0, 0 @ FCSE/PID
mrc p15, 0, r5, c13, c0, 1 @ Context ID mrc p15, 0, r5, c13, c0, 1 @ Context ID
mrc p15, 0, r6, c13, c0, 3 @ User r/o thread ID
stmia r0!, {r4 - r6}
mrc p15, 0, r6, c3, c0, 0 @ Domain ID mrc p15, 0, r6, c3, c0, 0 @ Domain ID
mrc p15, 0, r7, c2, c0, 0 @ TTB 0 mrc p15, 0, r7, c2, c0, 0 @ TTB 0
mrc p15, 0, r8, c2, c0, 1 @ TTB 1 mrc p15, 0, r8, c2, c0, 1 @ TTB 1
mrc p15, 0, r9, c1, c0, 0 @ Control register mrc p15, 0, r9, c1, c0, 0 @ Control register
mrc p15, 0, r10, c1, c0, 1 @ Auxiliary control register mrc p15, 0, r10, c1, c0, 1 @ Auxiliary control register
mrc p15, 0, r11, c1, c0, 2 @ Co-processor access control mrc p15, 0, r11, c1, c0, 2 @ Co-processor access control
stmia r0, {r4 - r11} stmia r0, {r6 - r11}
ldmfd sp!, {r4 - r11, pc} ldmfd sp!, {r4 - r11, pc}
ENDPROC(cpu_v7_do_suspend) ENDPROC(cpu_v7_do_suspend)
@ -230,9 +232,11 @@ ENTRY(cpu_v7_do_resume)
mov ip, #0 mov ip, #0
mcr p15, 0, ip, c8, c7, 0 @ invalidate TLBs mcr p15, 0, ip, c8, c7, 0 @ invalidate TLBs
mcr p15, 0, ip, c7, c5, 0 @ invalidate I cache mcr p15, 0, ip, c7, c5, 0 @ invalidate I cache
ldmia r0, {r4 - r11} ldmia r0!, {r4 - r6}
mcr p15, 0, r4, c13, c0, 0 @ FCSE/PID mcr p15, 0, r4, c13, c0, 0 @ FCSE/PID
mcr p15, 0, r5, c13, c0, 1 @ Context ID mcr p15, 0, r5, c13, c0, 1 @ Context ID
mcr p15, 0, r6, c13, c0, 3 @ User r/o thread ID
ldmia r0, {r6 - r11}
mcr p15, 0, r6, c3, c0, 0 @ Domain ID mcr p15, 0, r6, c3, c0, 0 @ Domain ID
mcr p15, 0, r7, c2, c0, 0 @ TTB 0 mcr p15, 0, r7, c2, c0, 0 @ TTB 0
mcr p15, 0, r8, c2, c0, 1 @ TTB 1 mcr p15, 0, r8, c2, c0, 1 @ TTB 1
@ -418,9 +422,9 @@ ENTRY(v7_processor_functions)
.word cpu_v7_dcache_clean_area .word cpu_v7_dcache_clean_area
.word cpu_v7_switch_mm .word cpu_v7_switch_mm
.word cpu_v7_set_pte_ext .word cpu_v7_set_pte_ext
.word 0 .word cpu_v7_suspend_size
.word 0 .word cpu_v7_do_suspend
.word 0 .word cpu_v7_do_resume
.size v7_processor_functions, . - v7_processor_functions .size v7_processor_functions, . - v7_processor_functions
.section ".rodata" .section ".rodata"

View File

@ -18,6 +18,7 @@
*/ */
#include <linux/init.h> #include <linux/init.h>
#include <asm/traps.h> #include <asm/traps.h>
#include <asm/ptrace.h>
static int cp6_trap(struct pt_regs *regs, unsigned int instr) static int cp6_trap(struct pt_regs *regs, unsigned int instr)
{ {

View File

@ -432,7 +432,7 @@ void __init orion_gpio_init(int gpio_base, int ngpio,
ct->regs.mask = ochip->mask_offset + GPIO_EDGE_MASK_OFF; ct->regs.mask = ochip->mask_offset + GPIO_EDGE_MASK_OFF;
ct->regs.ack = GPIO_EDGE_CAUSE_OFF; ct->regs.ack = GPIO_EDGE_CAUSE_OFF;
ct->type = IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING; ct->type = IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING;
ct->chip.irq_ack = irq_gc_ack; ct->chip.irq_ack = irq_gc_ack_clr_bit;
ct->chip.irq_mask = irq_gc_mask_clr_bit; ct->chip.irq_mask = irq_gc_mask_clr_bit;
ct->chip.irq_unmask = irq_gc_mask_set_bit; ct->chip.irq_unmask = irq_gc_mask_set_bit;
ct->chip.irq_set_type = gpio_irq_set_type; ct->chip.irq_set_type = gpio_irq_set_type;

View File

@ -50,7 +50,7 @@ static inline void __iomem *gpio_chip_base(struct gpio_chip *c)
return container_of(c, struct pxa_gpio_chip, chip)->regbase; return container_of(c, struct pxa_gpio_chip, chip)->regbase;
} }
static inline struct pxa_gpio_chip *gpio_to_chip(unsigned gpio) static inline struct pxa_gpio_chip *gpio_to_pxachip(unsigned gpio)
{ {
return &pxa_gpio_chips[gpio_to_bank(gpio)]; return &pxa_gpio_chips[gpio_to_bank(gpio)];
} }
@ -161,7 +161,7 @@ static int pxa_gpio_irq_type(struct irq_data *d, unsigned int type)
int gpio = irq_to_gpio(d->irq); int gpio = irq_to_gpio(d->irq);
unsigned long gpdr, mask = GPIO_bit(gpio); unsigned long gpdr, mask = GPIO_bit(gpio);
c = gpio_to_chip(gpio); c = gpio_to_pxachip(gpio);
if (type == IRQ_TYPE_PROBE) { if (type == IRQ_TYPE_PROBE) {
/* Don't mess with enabled GPIOs using preconfigured edges or /* Don't mess with enabled GPIOs using preconfigured edges or
@ -230,7 +230,7 @@ static void pxa_gpio_demux_handler(unsigned int irq, struct irq_desc *desc)
static void pxa_ack_muxed_gpio(struct irq_data *d) static void pxa_ack_muxed_gpio(struct irq_data *d)
{ {
int gpio = irq_to_gpio(d->irq); int gpio = irq_to_gpio(d->irq);
struct pxa_gpio_chip *c = gpio_to_chip(gpio); struct pxa_gpio_chip *c = gpio_to_pxachip(gpio);
__raw_writel(GPIO_bit(gpio), c->regbase + GEDR_OFFSET); __raw_writel(GPIO_bit(gpio), c->regbase + GEDR_OFFSET);
} }
@ -238,7 +238,7 @@ static void pxa_ack_muxed_gpio(struct irq_data *d)
static void pxa_mask_muxed_gpio(struct irq_data *d) static void pxa_mask_muxed_gpio(struct irq_data *d)
{ {
int gpio = irq_to_gpio(d->irq); int gpio = irq_to_gpio(d->irq);
struct pxa_gpio_chip *c = gpio_to_chip(gpio); struct pxa_gpio_chip *c = gpio_to_pxachip(gpio);
uint32_t grer, gfer; uint32_t grer, gfer;
c->irq_mask &= ~GPIO_bit(gpio); c->irq_mask &= ~GPIO_bit(gpio);
@ -252,7 +252,7 @@ static void pxa_mask_muxed_gpio(struct irq_data *d)
static void pxa_unmask_muxed_gpio(struct irq_data *d) static void pxa_unmask_muxed_gpio(struct irq_data *d)
{ {
int gpio = irq_to_gpio(d->irq); int gpio = irq_to_gpio(d->irq);
struct pxa_gpio_chip *c = gpio_to_chip(gpio); struct pxa_gpio_chip *c = gpio_to_pxachip(gpio);
c->irq_mask |= GPIO_bit(gpio); c->irq_mask |= GPIO_bit(gpio);
update_edge_detect(c); update_edge_detect(c);

View File

@ -1027,17 +1027,13 @@ int s3c2410_dma_config(unsigned int channel,
struct s3c2410_dma_chan *chan = s3c_dma_lookup_channel(channel); struct s3c2410_dma_chan *chan = s3c_dma_lookup_channel(channel);
unsigned int dcon; unsigned int dcon;
pr_debug("%s: chan=%d, xfer_unit=%d, dcon=%08x\n", pr_debug("%s: chan=%d, xfer_unit=%d\n", __func__, channel, xferunit);
__func__, channel, xferunit, dcon);
if (chan == NULL) if (chan == NULL)
return -EINVAL; return -EINVAL;
pr_debug("%s: Initial dcon is %08x\n", __func__, dcon);
dcon = chan->dcon & dma_sel.dcon_mask; dcon = chan->dcon & dma_sel.dcon_mask;
pr_debug("%s: dcon is %08x\n", __func__, dcon);
pr_debug("%s: New dcon is %08x\n", __func__, dcon);
switch (chan->req_ch) { switch (chan->req_ch) {
case DMACH_I2S_IN: case DMACH_I2S_IN:
@ -1235,7 +1231,7 @@ static void s3c2410_dma_resume_chan(struct s3c2410_dma_chan *cp)
/* restore channel's hardware configuration */ /* restore channel's hardware configuration */
if (!cp->in_use) if (!cp->in_use)
return 0; return;
printk(KERN_INFO "dma%d: restoring configuration\n", cp->number); printk(KERN_INFO "dma%d: restoring configuration\n", cp->number);
@ -1246,8 +1242,6 @@ static void s3c2410_dma_resume_chan(struct s3c2410_dma_chan *cp)
if (cp->map != NULL) if (cp->map != NULL)
dma_sel.select(cp, cp->map); dma_sel.select(cp, cp->map);
return 0;
} }
static void s3c2410_dma_resume(void) static void s3c2410_dma_resume(void)

View File

@ -152,7 +152,7 @@ static __init int s5p_gpioint_add(struct s3c_gpio_chip *chip)
if (!gc) if (!gc)
return -ENOMEM; return -ENOMEM;
ct = gc->chip_types; ct = gc->chip_types;
ct->chip.irq_ack = irq_gc_ack; ct->chip.irq_ack = irq_gc_ack_set_bit;
ct->chip.irq_mask = irq_gc_mask_set_bit; ct->chip.irq_mask = irq_gc_mask_set_bit;
ct->chip.irq_unmask = irq_gc_mask_clr_bit; ct->chip.irq_unmask = irq_gc_mask_clr_bit;
ct->chip.irq_set_type = s5p_gpioint_set_type, ct->chip.irq_set_type = s5p_gpioint_set_type,

View File

@ -370,11 +370,11 @@ static void __init s5p_clocksource_init(void)
clock_rate = clk_get_rate(tin_source); clock_rate = clk_get_rate(tin_source);
init_sched_clock(&cd, s5p_update_sched_clock, 32, clock_rate);
s5p_time_setup(timer_source.source_id, TCNT_MAX); s5p_time_setup(timer_source.source_id, TCNT_MAX);
s5p_time_start(timer_source.source_id, PERIODIC); s5p_time_start(timer_source.source_id, PERIODIC);
init_sched_clock(&cd, s5p_update_sched_clock, 32, clock_rate);
if (clocksource_register_hz(&time_clocksource, clock_rate)) if (clocksource_register_hz(&time_clocksource, clock_rate))
panic("%s: can't register clocksource\n", time_clocksource.name); panic("%s: can't register clocksource\n", time_clocksource.name);
} }

View File

@ -12,6 +12,10 @@
* it under the terms of the GNU General Public License version 2 as * it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation. * published by the Free Software Foundation.
*/ */
#ifndef __PLAT_DEVS_H
#define __PLAT_DEVS_H __FILE__
#include <linux/platform_device.h> #include <linux/platform_device.h>
struct s3c24xx_uart_resources { struct s3c24xx_uart_resources {
@ -159,3 +163,5 @@ extern struct platform_device s3c_device_ac97;
*/ */
extern void *s3c_set_platdata(void *pd, size_t pdsize, extern void *s3c_set_platdata(void *pd, size_t pdsize,
struct platform_device *pdev); struct platform_device *pdev);
#endif /* __PLAT_DEVS_H */

View File

@ -224,6 +224,8 @@
#define S5PV210_UFSTAT_RXMASK (255<<0) #define S5PV210_UFSTAT_RXMASK (255<<0)
#define S5PV210_UFSTAT_RXSHIFT (0) #define S5PV210_UFSTAT_RXSHIFT (0)
#define NO_NEED_CHECK_CLKSRC 1
#ifndef __ASSEMBLY__ #ifndef __ASSEMBLY__
/* struct s3c24xx_uart_clksrc /* struct s3c24xx_uart_clksrc

View File

@ -39,6 +39,7 @@ struct s3c64xx_spi_csinfo {
* @fifo_lvl_mask: All tx fifo_lvl fields start at offset-6 * @fifo_lvl_mask: All tx fifo_lvl fields start at offset-6
* @rx_lvl_offset: Depends on tx fifo_lvl field and bus number * @rx_lvl_offset: Depends on tx fifo_lvl field and bus number
* @high_speed: If the controller supports HIGH_SPEED_EN bit * @high_speed: If the controller supports HIGH_SPEED_EN bit
* @tx_st_done: Depends on tx fifo_lvl field
*/ */
struct s3c64xx_spi_info { struct s3c64xx_spi_info {
int src_clk_nr; int src_clk_nr;
@ -53,6 +54,7 @@ struct s3c64xx_spi_info {
int fifo_lvl_mask; int fifo_lvl_mask;
int rx_lvl_offset; int rx_lvl_offset;
int high_speed; int high_speed;
int tx_st_done;
}; };
/** /**

View File

@ -55,7 +55,7 @@ static void __init s3c_init_uart_irq(struct s3c_uart_irq *uirq)
gc = irq_alloc_generic_chip("s3c-uart", 1, uirq->base_irq, reg_base, gc = irq_alloc_generic_chip("s3c-uart", 1, uirq->base_irq, reg_base,
handle_level_irq); handle_level_irq);
ct = gc->chip_types; ct = gc->chip_types;
ct->chip.irq_ack = irq_gc_ack; ct->chip.irq_ack = irq_gc_ack_set_bit;
ct->chip.irq_mask = irq_gc_mask_set_bit; ct->chip.irq_mask = irq_gc_mask_set_bit;
ct->chip.irq_unmask = irq_gc_mask_clr_bit; ct->chip.irq_unmask = irq_gc_mask_clr_bit;
ct->regs.ack = S3C64XX_UINTP; ct->regs.ack = S3C64XX_UINTP;

View File

@ -14,12 +14,6 @@ extern struct pglist_data *node_data[];
#define NODE_DATA(nid) (node_data[nid]) #define NODE_DATA(nid) (node_data[nid])
#define node_localnr(pfn, nid) ((pfn) - NODE_DATA(nid)->node_start_pfn) #define node_localnr(pfn, nid) ((pfn) - NODE_DATA(nid)->node_start_pfn)
#define node_start_pfn(nid) (NODE_DATA(nid)->node_start_pfn)
#define node_end_pfn(nid) \
({ \
pg_data_t *__pgdat = NODE_DATA(nid); \
__pgdat->node_start_pfn + __pgdat->node_spanned_pages - 1; \
})
#define pmd_page(pmd) (pfn_to_page(pmd_val(pmd) >> PAGE_SHIFT)) #define pmd_page(pmd) (pfn_to_page(pmd_val(pmd) >> PAGE_SHIFT))
/* /*
@ -44,7 +38,7 @@ static __inline__ int pfn_to_nid(unsigned long pfn)
int node; int node;
for (node = 0 ; node < MAX_NUMNODES ; node++) for (node = 0 ; node < MAX_NUMNODES ; node++)
if (pfn >= node_start_pfn(node) && pfn <= node_end_pfn(node)) if (pfn >= node_start_pfn(node) && pfn < node_end_pfn(node))
break; break;
return node; return node;

View File

@ -14,13 +14,6 @@ extern struct node_map_data node_data[];
#define NODE_DATA(nid) (&node_data[nid].pg_data) #define NODE_DATA(nid) (&node_data[nid].pg_data)
#define node_start_pfn(nid) (NODE_DATA(nid)->node_start_pfn)
#define node_end_pfn(nid) \
({ \
pg_data_t *__pgdat = NODE_DATA(nid); \
__pgdat->node_start_pfn + __pgdat->node_spanned_pages; \
})
/* We have these possible memory map layouts: /* We have these possible memory map layouts:
* Astro: 0-3.75, 67.75-68, 4-64 * Astro: 0-3.75, 67.75-68, 4-64
* zx1: 0-1, 257-260, 4-256 * zx1: 0-1, 257-260, 4-256

View File

@ -209,8 +209,10 @@ i2c@3100 {
wm8776:codec@1a { wm8776:codec@1a {
compatible = "wlf,wm8776"; compatible = "wlf,wm8776";
reg = <0x1a>; reg = <0x1a>;
/* MCLK source is a stand-alone oscillator */ /*
clock-frequency = <12288000>; * clock-frequency will be set by U-Boot if
* the clock is enabled.
*/
}; };
}; };
@ -280,7 +282,8 @@ ssi@15000 {
codec-handle = <&wm8776>; codec-handle = <&wm8776>;
fsl,playback-dma = <&dma00>; fsl,playback-dma = <&dma00>;
fsl,capture-dma = <&dma01>; fsl,capture-dma = <&dma01>;
fsl,fifo-depth = <16>; fsl,fifo-depth = <15>;
fsl,ssi-asynchronous;
}; };
dma@c300 { dma@c300 {

View File

@ -148,7 +148,6 @@ CONFIG_SCSI_SAS_ATTRS=m
CONFIG_SCSI_CXGB3_ISCSI=m CONFIG_SCSI_CXGB3_ISCSI=m
CONFIG_SCSI_CXGB4_ISCSI=m CONFIG_SCSI_CXGB4_ISCSI=m
CONFIG_SCSI_BNX2_ISCSI=m CONFIG_SCSI_BNX2_ISCSI=m
CONFIG_SCSI_BNX2_ISCSI=m
CONFIG_BE2ISCSI=m CONFIG_BE2ISCSI=m
CONFIG_SCSI_IBMVSCSI=y CONFIG_SCSI_IBMVSCSI=y
CONFIG_SCSI_IBMVFC=m CONFIG_SCSI_IBMVFC=m

View File

@ -38,13 +38,6 @@ u64 memory_hotplug_max(void);
#define memory_hotplug_max() memblock_end_of_DRAM() #define memory_hotplug_max() memblock_end_of_DRAM()
#endif #endif
/*
* Following are macros that each numa implmentation must define.
*/
#define node_start_pfn(nid) (NODE_DATA(nid)->node_start_pfn)
#define node_end_pfn(nid) (NODE_DATA(nid)->node_end_pfn)
#else #else
#define memory_hotplug_max() memblock_end_of_DRAM() #define memory_hotplug_max() memblock_end_of_DRAM()
#endif /* CONFIG_NEED_MULTIPLE_NODES */ #endif /* CONFIG_NEED_MULTIPLE_NODES */

View File

@ -4,6 +4,7 @@
#include <linux/init.h> #include <linux/init.h>
#include <linux/rtc.h> #include <linux/rtc.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/ratelimit.h>
#include <asm/prom.h> #include <asm/prom.h>
#include <asm/rtas.h> #include <asm/rtas.h>
#include <asm/time.h> #include <asm/time.h>
@ -29,9 +30,10 @@ unsigned long __init rtas_get_boot_time(void)
} }
} while (wait_time && (get_tb() < max_wait_tb)); } while (wait_time && (get_tb() < max_wait_tb));
if (error != 0 && printk_ratelimit()) { if (error != 0) {
printk(KERN_WARNING "error: reading the clock failed (%d)\n", printk_ratelimited(KERN_WARNING
error); "error: reading the clock failed (%d)\n",
error);
return 0; return 0;
} }
@ -55,19 +57,21 @@ void rtas_get_rtc_time(struct rtc_time *rtc_tm)
wait_time = rtas_busy_delay_time(error); wait_time = rtas_busy_delay_time(error);
if (wait_time) { if (wait_time) {
if (in_interrupt() && printk_ratelimit()) { if (in_interrupt()) {
memset(rtc_tm, 0, sizeof(struct rtc_time)); memset(rtc_tm, 0, sizeof(struct rtc_time));
printk(KERN_WARNING "error: reading clock" printk_ratelimited(KERN_WARNING
" would delay interrupt\n"); "error: reading clock "
"would delay interrupt\n");
return; /* delay not allowed */ return; /* delay not allowed */
} }
msleep(wait_time); msleep(wait_time);
} }
} while (wait_time && (get_tb() < max_wait_tb)); } while (wait_time && (get_tb() < max_wait_tb));
if (error != 0 && printk_ratelimit()) { if (error != 0) {
printk(KERN_WARNING "error: reading the clock failed (%d)\n", printk_ratelimited(KERN_WARNING
error); "error: reading the clock failed (%d)\n",
error);
return; return;
} }
@ -99,9 +103,10 @@ int rtas_set_rtc_time(struct rtc_time *tm)
} }
} while (wait_time && (get_tb() < max_wait_tb)); } while (wait_time && (get_tb() < max_wait_tb));
if (error != 0 && printk_ratelimit()) if (error != 0)
printk(KERN_WARNING "error: setting the clock failed (%d)\n", printk_ratelimited(KERN_WARNING
error); "error: setting the clock failed (%d)\n",
error);
return 0; return 0;
} }

View File

@ -25,6 +25,7 @@
#include <linux/errno.h> #include <linux/errno.h>
#include <linux/elf.h> #include <linux/elf.h>
#include <linux/ptrace.h> #include <linux/ptrace.h>
#include <linux/ratelimit.h>
#ifdef CONFIG_PPC64 #ifdef CONFIG_PPC64
#include <linux/syscalls.h> #include <linux/syscalls.h>
#include <linux/compat.h> #include <linux/compat.h>
@ -892,11 +893,12 @@ int handle_rt_signal32(unsigned long sig, struct k_sigaction *ka,
printk("badframe in handle_rt_signal, regs=%p frame=%p newsp=%lx\n", printk("badframe in handle_rt_signal, regs=%p frame=%p newsp=%lx\n",
regs, frame, newsp); regs, frame, newsp);
#endif #endif
if (show_unhandled_signals && printk_ratelimit()) if (show_unhandled_signals)
printk(KERN_INFO "%s[%d]: bad frame in handle_rt_signal32: " printk_ratelimited(KERN_INFO
"%p nip %08lx lr %08lx\n", "%s[%d]: bad frame in handle_rt_signal32: "
current->comm, current->pid, "%p nip %08lx lr %08lx\n",
addr, regs->nip, regs->link); current->comm, current->pid,
addr, regs->nip, regs->link);
force_sigsegv(sig, current); force_sigsegv(sig, current);
return 0; return 0;
@ -1058,11 +1060,12 @@ long sys_rt_sigreturn(int r3, int r4, int r5, int r6, int r7, int r8,
return 0; return 0;
bad: bad:
if (show_unhandled_signals && printk_ratelimit()) if (show_unhandled_signals)
printk(KERN_INFO "%s[%d]: bad frame in sys_rt_sigreturn: " printk_ratelimited(KERN_INFO
"%p nip %08lx lr %08lx\n", "%s[%d]: bad frame in sys_rt_sigreturn: "
current->comm, current->pid, "%p nip %08lx lr %08lx\n",
rt_sf, regs->nip, regs->link); current->comm, current->pid,
rt_sf, regs->nip, regs->link);
force_sig(SIGSEGV, current); force_sig(SIGSEGV, current);
return 0; return 0;
@ -1149,12 +1152,12 @@ int sys_debug_setcontext(struct ucontext __user *ctx,
* We kill the task with a SIGSEGV in this situation. * We kill the task with a SIGSEGV in this situation.
*/ */
if (do_setcontext(ctx, regs, 1)) { if (do_setcontext(ctx, regs, 1)) {
if (show_unhandled_signals && printk_ratelimit()) if (show_unhandled_signals)
printk(KERN_INFO "%s[%d]: bad frame in " printk_ratelimited(KERN_INFO "%s[%d]: bad frame in "
"sys_debug_setcontext: %p nip %08lx " "sys_debug_setcontext: %p nip %08lx "
"lr %08lx\n", "lr %08lx\n",
current->comm, current->pid, current->comm, current->pid,
ctx, regs->nip, regs->link); ctx, regs->nip, regs->link);
force_sig(SIGSEGV, current); force_sig(SIGSEGV, current);
goto out; goto out;
@ -1236,11 +1239,12 @@ int handle_signal32(unsigned long sig, struct k_sigaction *ka,
printk("badframe in handle_signal, regs=%p frame=%p newsp=%lx\n", printk("badframe in handle_signal, regs=%p frame=%p newsp=%lx\n",
regs, frame, newsp); regs, frame, newsp);
#endif #endif
if (show_unhandled_signals && printk_ratelimit()) if (show_unhandled_signals)
printk(KERN_INFO "%s[%d]: bad frame in handle_signal32: " printk_ratelimited(KERN_INFO
"%p nip %08lx lr %08lx\n", "%s[%d]: bad frame in handle_signal32: "
current->comm, current->pid, "%p nip %08lx lr %08lx\n",
frame, regs->nip, regs->link); current->comm, current->pid,
frame, regs->nip, regs->link);
force_sigsegv(sig, current); force_sigsegv(sig, current);
return 0; return 0;
@ -1288,11 +1292,12 @@ long sys_sigreturn(int r3, int r4, int r5, int r6, int r7, int r8,
return 0; return 0;
badframe: badframe:
if (show_unhandled_signals && printk_ratelimit()) if (show_unhandled_signals)
printk(KERN_INFO "%s[%d]: bad frame in sys_sigreturn: " printk_ratelimited(KERN_INFO
"%p nip %08lx lr %08lx\n", "%s[%d]: bad frame in sys_sigreturn: "
current->comm, current->pid, "%p nip %08lx lr %08lx\n",
addr, regs->nip, regs->link); current->comm, current->pid,
addr, regs->nip, regs->link);
force_sig(SIGSEGV, current); force_sig(SIGSEGV, current);
return 0; return 0;

View File

@ -24,6 +24,7 @@
#include <linux/elf.h> #include <linux/elf.h>
#include <linux/ptrace.h> #include <linux/ptrace.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/ratelimit.h>
#include <asm/sigcontext.h> #include <asm/sigcontext.h>
#include <asm/ucontext.h> #include <asm/ucontext.h>
@ -380,10 +381,10 @@ int sys_rt_sigreturn(unsigned long r3, unsigned long r4, unsigned long r5,
printk("badframe in sys_rt_sigreturn, regs=%p uc=%p &uc->uc_mcontext=%p\n", printk("badframe in sys_rt_sigreturn, regs=%p uc=%p &uc->uc_mcontext=%p\n",
regs, uc, &uc->uc_mcontext); regs, uc, &uc->uc_mcontext);
#endif #endif
if (show_unhandled_signals && printk_ratelimit()) if (show_unhandled_signals)
printk(regs->msr & MSR_64BIT ? fmt64 : fmt32, printk_ratelimited(regs->msr & MSR_64BIT ? fmt64 : fmt32,
current->comm, current->pid, "rt_sigreturn", current->comm, current->pid, "rt_sigreturn",
(long)uc, regs->nip, regs->link); (long)uc, regs->nip, regs->link);
force_sig(SIGSEGV, current); force_sig(SIGSEGV, current);
return 0; return 0;
@ -468,10 +469,10 @@ int handle_rt_signal64(int signr, struct k_sigaction *ka, siginfo_t *info,
printk("badframe in setup_rt_frame, regs=%p frame=%p newsp=%lx\n", printk("badframe in setup_rt_frame, regs=%p frame=%p newsp=%lx\n",
regs, frame, newsp); regs, frame, newsp);
#endif #endif
if (show_unhandled_signals && printk_ratelimit()) if (show_unhandled_signals)
printk(regs->msr & MSR_64BIT ? fmt64 : fmt32, printk_ratelimited(regs->msr & MSR_64BIT ? fmt64 : fmt32,
current->comm, current->pid, "setup_rt_frame", current->comm, current->pid, "setup_rt_frame",
(long)frame, regs->nip, regs->link); (long)frame, regs->nip, regs->link);
force_sigsegv(signr, current); force_sigsegv(signr, current);
return 0; return 0;

View File

@ -34,6 +34,7 @@
#include <linux/bug.h> #include <linux/bug.h>
#include <linux/kdebug.h> #include <linux/kdebug.h>
#include <linux/debugfs.h> #include <linux/debugfs.h>
#include <linux/ratelimit.h>
#include <asm/emulated_ops.h> #include <asm/emulated_ops.h>
#include <asm/pgtable.h> #include <asm/pgtable.h>
@ -197,12 +198,11 @@ void _exception(int signr, struct pt_regs *regs, int code, unsigned long addr)
if (die("Exception in kernel mode", regs, signr)) if (die("Exception in kernel mode", regs, signr))
return; return;
} else if (show_unhandled_signals && } else if (show_unhandled_signals &&
unhandled_signal(current, signr) && unhandled_signal(current, signr)) {
printk_ratelimit()) { printk_ratelimited(regs->msr & MSR_64BIT ? fmt64 : fmt32,
printk(regs->msr & MSR_64BIT ? fmt64 : fmt32, current->comm, current->pid, signr,
current->comm, current->pid, signr, addr, regs->nip, regs->link, code);
addr, regs->nip, regs->link, code); }
}
memset(&info, 0, sizeof(info)); memset(&info, 0, sizeof(info));
info.si_signo = signr; info.si_signo = signr;
@ -425,7 +425,7 @@ int machine_check_e500mc(struct pt_regs *regs)
unsigned long reason = mcsr; unsigned long reason = mcsr;
int recoverable = 1; int recoverable = 1;
if (reason & MCSR_BUS_RBERR) { if (reason & MCSR_LD) {
recoverable = fsl_rio_mcheck_exception(regs); recoverable = fsl_rio_mcheck_exception(regs);
if (recoverable == 1) if (recoverable == 1)
goto silent_out; goto silent_out;
@ -1342,9 +1342,8 @@ void altivec_assist_exception(struct pt_regs *regs)
} else { } else {
/* didn't recognize the instruction */ /* didn't recognize the instruction */
/* XXX quick hack for now: set the non-Java bit in the VSCR */ /* XXX quick hack for now: set the non-Java bit in the VSCR */
if (printk_ratelimit()) printk_ratelimited(KERN_ERR "Unrecognized altivec instruction "
printk(KERN_ERR "Unrecognized altivec instruction " "in %s at %lx\n", current->comm, regs->nip);
"in %s at %lx\n", current->comm, regs->nip);
current->thread.vscr.u[3] |= 0x10000; current->thread.vscr.u[3] |= 0x10000;
} }
} }
@ -1548,9 +1547,8 @@ u32 ppc_warn_emulated;
void ppc_warn_emulated_print(const char *type) void ppc_warn_emulated_print(const char *type)
{ {
if (printk_ratelimit()) pr_warn_ratelimited("%s used emulated %s instruction\n", current->comm,
pr_warning("%s used emulated %s instruction\n", current->comm, type);
type);
} }
static int __init ppc_warn_emulated_init(void) static int __init ppc_warn_emulated_init(void)

View File

@ -31,6 +31,7 @@
#include <linux/kdebug.h> #include <linux/kdebug.h>
#include <linux/perf_event.h> #include <linux/perf_event.h>
#include <linux/magic.h> #include <linux/magic.h>
#include <linux/ratelimit.h>
#include <asm/firmware.h> #include <asm/firmware.h>
#include <asm/page.h> #include <asm/page.h>
@ -346,11 +347,10 @@ int __kprobes do_page_fault(struct pt_regs *regs, unsigned long address,
return 0; return 0;
} }
if (is_exec && (error_code & DSISR_PROTFAULT) if (is_exec && (error_code & DSISR_PROTFAULT))
&& printk_ratelimit()) printk_ratelimited(KERN_CRIT "kernel tried to execute NX-protected"
printk(KERN_CRIT "kernel tried to execute NX-protected" " page (%lx) - exploit attempt? (uid: %d)\n",
" page (%lx) - exploit attempt? (uid: %d)\n", address, current_uid());
address, current_uid());
return SIGSEGV; return SIGSEGV;

View File

@ -12,6 +12,8 @@
#include <linux/of.h> #include <linux/of.h>
#include <linux/memblock.h> #include <linux/memblock.h>
#include <linux/vmalloc.h> #include <linux/vmalloc.h>
#include <linux/memory.h>
#include <asm/firmware.h> #include <asm/firmware.h>
#include <asm/machdep.h> #include <asm/machdep.h>
#include <asm/pSeries_reconfig.h> #include <asm/pSeries_reconfig.h>
@ -20,24 +22,25 @@
static unsigned long get_memblock_size(void) static unsigned long get_memblock_size(void)
{ {
struct device_node *np; struct device_node *np;
unsigned int memblock_size = 0; unsigned int memblock_size = MIN_MEMORY_BLOCK_SIZE;
struct resource r;
np = of_find_node_by_path("/ibm,dynamic-reconfiguration-memory"); np = of_find_node_by_path("/ibm,dynamic-reconfiguration-memory");
if (np) { if (np) {
const unsigned long *size; const __be64 *size;
size = of_get_property(np, "ibm,lmb-size", NULL); size = of_get_property(np, "ibm,lmb-size", NULL);
memblock_size = size ? *size : 0; if (size)
memblock_size = be64_to_cpup(size);
of_node_put(np); of_node_put(np);
} else { } else if (machine_is(pseries)) {
/* This fallback really only applies to pseries */
unsigned int memzero_size = 0; unsigned int memzero_size = 0;
const unsigned int *regs;
np = of_find_node_by_path("/memory@0"); np = of_find_node_by_path("/memory@0");
if (np) { if (np) {
regs = of_get_property(np, "reg", NULL); if (!of_address_to_resource(np, 0, &r))
memzero_size = regs ? regs[3] : 0; memzero_size = resource_size(&r);
of_node_put(np); of_node_put(np);
} }
@ -50,16 +53,21 @@ static unsigned long get_memblock_size(void)
sprintf(buf, "/memory@%x", memzero_size); sprintf(buf, "/memory@%x", memzero_size);
np = of_find_node_by_path(buf); np = of_find_node_by_path(buf);
if (np) { if (np) {
regs = of_get_property(np, "reg", NULL); if (!of_address_to_resource(np, 0, &r))
memblock_size = regs ? regs[3] : 0; memblock_size = resource_size(&r);
of_node_put(np); of_node_put(np);
} }
} }
} }
return memblock_size; return memblock_size;
} }
/* WARNING: This is going to override the generic definition whenever
* pseries is built-in regardless of what platform is active at boot
* time. This is fine for now as this is the only "option" and it
* should work everywhere. If not, we'll have to turn this into a
* ppc_md. callback
*/
unsigned long memory_block_size_bytes(void) unsigned long memory_block_size_bytes(void)
{ {
return get_memblock_size(); return get_memblock_size();

View File

@ -283,23 +283,24 @@ static void __iomem *rio_regs_win;
#ifdef CONFIG_E500 #ifdef CONFIG_E500
int fsl_rio_mcheck_exception(struct pt_regs *regs) int fsl_rio_mcheck_exception(struct pt_regs *regs)
{ {
const struct exception_table_entry *entry = NULL; const struct exception_table_entry *entry;
unsigned long reason = mfspr(SPRN_MCSR); unsigned long reason;
if (reason & MCSR_BUS_RBERR) { if (!rio_regs_win)
reason = in_be32((u32 *)(rio_regs_win + RIO_LTLEDCSR)); return 0;
if (reason & (RIO_LTLEDCSR_IER | RIO_LTLEDCSR_PRT)) {
/* Check if we are prepared to handle this fault */ reason = in_be32((u32 *)(rio_regs_win + RIO_LTLEDCSR));
entry = search_exception_tables(regs->nip); if (reason & (RIO_LTLEDCSR_IER | RIO_LTLEDCSR_PRT)) {
if (entry) { /* Check if we are prepared to handle this fault */
pr_debug("RIO: %s - MC Exception handled\n", entry = search_exception_tables(regs->nip);
__func__); if (entry) {
out_be32((u32 *)(rio_regs_win + RIO_LTLEDCSR), pr_debug("RIO: %s - MC Exception handled\n",
0); __func__);
regs->msr |= MSR_RI; out_be32((u32 *)(rio_regs_win + RIO_LTLEDCSR),
regs->nip = entry->fixup; 0);
return 1; regs->msr |= MSR_RI;
} regs->nip = entry->fixup;
return 1;
} }
} }

View File

@ -29,6 +29,7 @@
#include <linux/pci.h> #include <linux/pci.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/syscore_ops.h> #include <linux/syscore_ops.h>
#include <linux/ratelimit.h>
#include <asm/ptrace.h> #include <asm/ptrace.h>
#include <asm/signal.h> #include <asm/signal.h>
@ -1648,9 +1649,8 @@ static unsigned int _mpic_get_one_irq(struct mpic *mpic, int reg)
return NO_IRQ; return NO_IRQ;
} }
if (unlikely(mpic->protected && test_bit(src, mpic->protected))) { if (unlikely(mpic->protected && test_bit(src, mpic->protected))) {
if (printk_ratelimit()) printk_ratelimited(KERN_WARNING "%s: Got protected source %d !\n",
printk(KERN_WARNING "%s: Got protected source %d !\n", mpic->name, (int)src);
mpic->name, (int)src);
mpic_eoi(mpic); mpic_eoi(mpic);
return NO_IRQ; return NO_IRQ;
} }
@ -1688,9 +1688,8 @@ unsigned int mpic_get_coreint_irq(void)
return NO_IRQ; return NO_IRQ;
} }
if (unlikely(mpic->protected && test_bit(src, mpic->protected))) { if (unlikely(mpic->protected && test_bit(src, mpic->protected))) {
if (printk_ratelimit()) printk_ratelimited(KERN_WARNING "%s: Got protected source %d !\n",
printk(KERN_WARNING "%s: Got protected source %d !\n", mpic->name, (int)src);
mpic->name, (int)src);
return NO_IRQ; return NO_IRQ;
} }

View File

@ -579,6 +579,7 @@ config S390_GUEST
def_bool y def_bool y
prompt "s390 guest support for KVM (EXPERIMENTAL)" prompt "s390 guest support for KVM (EXPERIMENTAL)"
depends on 64BIT && EXPERIMENTAL depends on 64BIT && EXPERIMENTAL
select VIRTUALIZATION
select VIRTIO select VIRTIO
select VIRTIO_RING select VIRTIO_RING
select VIRTIO_CONSOLE select VIRTIO_CONSOLE

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