Linux 3.4-rc5
-----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.18 (GNU/Linux) iQEcBAABAgAGBQJPnb50AAoJEHm+PkMAQRiGAE0H/A4zFZIUGmF3miKPDYmejmrZ oVDYxVAu6JHjHWhu8E3VsinvyVscowjV8dr15eSaQzmDmRkSHAnUQ+dB7Di7jLC2 MNopxsWjwyZ8zvvr3rFR76kjbWKk/1GYytnf7GPZLbJQzd51om2V/TY/6qkwiDSX U8Tt7ihSgHAezefqEmWp2X/1pxDCEt+VFyn9vWpkhgdfM1iuzF39MbxSZAgqDQ/9 JJrBHFXhArqJguhENwL7OdDzkYqkdzlGtS0xgeY7qio2CzSXxZXK4svT6FFGA8Za xlAaIvzslDniv3vR2ZKd6wzUwFHuynX222hNim3QMaYdXm012M+Nn1ufKYGFxI0= =4d4w -----END PGP SIGNATURE----- Merge tag 'v3.4-rc5' into for-3.5/core The core branch is behind driver commits that we want to build on for 3.5, hence I'm pulling in a later -rc. Linux 3.4-rc5 Conflicts: Documentation/feature-removal-schedule.txt Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
commit
0b7877d4ee
|
@ -1,5 +1,5 @@
|
||||||
What: /sys/bus/usb/drivers/usbtmc/devices/*/interface_capabilities
|
What: /sys/bus/usb/drivers/usbtmc/*/interface_capabilities
|
||||||
What: /sys/bus/usb/drivers/usbtmc/devices/*/device_capabilities
|
What: /sys/bus/usb/drivers/usbtmc/*/device_capabilities
|
||||||
Date: August 2008
|
Date: August 2008
|
||||||
Contact: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
Contact: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||||
Description:
|
Description:
|
||||||
|
@ -12,8 +12,8 @@ Description:
|
||||||
The files are read only.
|
The files are read only.
|
||||||
|
|
||||||
|
|
||||||
What: /sys/bus/usb/drivers/usbtmc/devices/*/usb488_interface_capabilities
|
What: /sys/bus/usb/drivers/usbtmc/*/usb488_interface_capabilities
|
||||||
What: /sys/bus/usb/drivers/usbtmc/devices/*/usb488_device_capabilities
|
What: /sys/bus/usb/drivers/usbtmc/*/usb488_device_capabilities
|
||||||
Date: August 2008
|
Date: August 2008
|
||||||
Contact: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
Contact: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||||
Description:
|
Description:
|
||||||
|
@ -27,7 +27,7 @@ Description:
|
||||||
The files are read only.
|
The files are read only.
|
||||||
|
|
||||||
|
|
||||||
What: /sys/bus/usb/drivers/usbtmc/devices/*/TermChar
|
What: /sys/bus/usb/drivers/usbtmc/*/TermChar
|
||||||
Date: August 2008
|
Date: August 2008
|
||||||
Contact: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
Contact: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||||
Description:
|
Description:
|
||||||
|
@ -40,7 +40,7 @@ Description:
|
||||||
sent to the device or not.
|
sent to the device or not.
|
||||||
|
|
||||||
|
|
||||||
What: /sys/bus/usb/drivers/usbtmc/devices/*/TermCharEnabled
|
What: /sys/bus/usb/drivers/usbtmc/*/TermCharEnabled
|
||||||
Date: August 2008
|
Date: August 2008
|
||||||
Contact: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
Contact: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||||
Description:
|
Description:
|
||||||
|
@ -51,7 +51,7 @@ Description:
|
||||||
published by the USB-IF.
|
published by the USB-IF.
|
||||||
|
|
||||||
|
|
||||||
What: /sys/bus/usb/drivers/usbtmc/devices/*/auto_abort
|
What: /sys/bus/usb/drivers/usbtmc/*/auto_abort
|
||||||
Date: August 2008
|
Date: August 2008
|
||||||
Contact: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
Contact: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||||
Description:
|
Description:
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
What: /sys/block/rssd*/registers
|
||||||
|
Date: March 2012
|
||||||
|
KernelVersion: 3.3
|
||||||
|
Contact: Asai Thambi S P <asamymuthupa@micron.com>
|
||||||
|
Description: This is a read-only file. Dumps below driver information and
|
||||||
|
hardware registers.
|
||||||
|
- S ACTive
|
||||||
|
- Command Issue
|
||||||
|
- Allocated
|
||||||
|
- Completed
|
||||||
|
- PORT IRQ STAT
|
||||||
|
- HOST IRQ STAT
|
||||||
|
|
||||||
|
What: /sys/block/rssd*/status
|
||||||
|
Date: April 2012
|
||||||
|
KernelVersion: 3.4
|
||||||
|
Contact: Asai Thambi S P <asamymuthupa@micron.com>
|
||||||
|
Description: This is a read-only file. Indicates the status of the device.
|
|
@ -0,0 +1,19 @@
|
||||||
|
What: /sys/bus/hsi
|
||||||
|
Date: April 2012
|
||||||
|
KernelVersion: 3.4
|
||||||
|
Contact: Carlos Chinea <carlos.chinea@nokia.com>
|
||||||
|
Description:
|
||||||
|
High Speed Synchronous Serial Interface (HSI) is a
|
||||||
|
serial interface mainly used for connecting application
|
||||||
|
engines (APE) with cellular modem engines (CMT) in cellular
|
||||||
|
handsets.
|
||||||
|
The bus will be populated with devices (hsi_clients) representing
|
||||||
|
the protocols available in the system. Bus drivers implement
|
||||||
|
those protocols.
|
||||||
|
|
||||||
|
What: /sys/bus/hsi/devices/.../modalias
|
||||||
|
Date: April 2012
|
||||||
|
KernelVersion: 3.4
|
||||||
|
Contact: Carlos Chinea <carlos.chinea@nokia.com>
|
||||||
|
Description: Stores the same MODALIAS value emitted by uevent
|
||||||
|
Format: hsi:<hsi_client device name>
|
|
@ -0,0 +1,8 @@
|
||||||
|
What: /sys/block/<device>/iosched/target_latency
|
||||||
|
Date: March 2012
|
||||||
|
contact: Tao Ma <boyu.mt@taobao.com>
|
||||||
|
Description:
|
||||||
|
The /sys/block/<device>/iosched/target_latency only exists
|
||||||
|
when the user sets cfq to /sys/block/<device>/scheduler.
|
||||||
|
It contains an estimated latency time for the cfq. cfq will
|
||||||
|
use it to calculate the time slice used for every task.
|
|
@ -31,3 +31,21 @@ may be weakly ordered, that is that reads and writes may pass each other.
|
||||||
Since it is optional for platforms to implement DMA_ATTR_WEAK_ORDERING,
|
Since it is optional for platforms to implement DMA_ATTR_WEAK_ORDERING,
|
||||||
those that do not will simply ignore the attribute and exhibit default
|
those that do not will simply ignore the attribute and exhibit default
|
||||||
behavior.
|
behavior.
|
||||||
|
|
||||||
|
DMA_ATTR_WRITE_COMBINE
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
DMA_ATTR_WRITE_COMBINE specifies that writes to the mapping may be
|
||||||
|
buffered to improve performance.
|
||||||
|
|
||||||
|
Since it is optional for platforms to implement DMA_ATTR_WRITE_COMBINE,
|
||||||
|
those that do not will simply ignore the attribute and exhibit default
|
||||||
|
behavior.
|
||||||
|
|
||||||
|
DMA_ATTR_NON_CONSISTENT
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
DMA_ATTR_NON_CONSISTENT lets the platform to choose to return either
|
||||||
|
consistent or non-consistent memory as it sees fit. By using this API,
|
||||||
|
you are guaranteeing to the platform that you have all the correct and
|
||||||
|
necessary sync points for this memory in the driver.
|
||||||
|
|
|
@ -446,4 +446,21 @@ X!Idrivers/video/console/fonts.c
|
||||||
!Edrivers/i2c/i2c-core.c
|
!Edrivers/i2c/i2c-core.c
|
||||||
</chapter>
|
</chapter>
|
||||||
|
|
||||||
|
<chapter id="hsi">
|
||||||
|
<title>High Speed Synchronous Serial Interface (HSI)</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
High Speed Synchronous Serial Interface (HSI) is a
|
||||||
|
serial interface mainly used for connecting application
|
||||||
|
engines (APE) with cellular modem engines (CMT) in cellular
|
||||||
|
handsets.
|
||||||
|
|
||||||
|
HSI provides multiplexing for up to 16 logical channels,
|
||||||
|
low-latency and full duplex communication.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
!Iinclude/linux/hsi/hsi.h
|
||||||
|
!Edrivers/hsi/hsi.c
|
||||||
|
</chapter>
|
||||||
|
|
||||||
</book>
|
</book>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<refentry id="V4L2-PIX-FMT-NV12M">
|
<refentry id="V4L2-PIX-FMT-NV12M">
|
||||||
<refmeta>
|
<refmeta>
|
||||||
<refentrytitle>V4L2_PIX_FMT_NV12M ('NV12M')</refentrytitle>
|
<refentrytitle>V4L2_PIX_FMT_NV12M ('NM12')</refentrytitle>
|
||||||
&manvol;
|
&manvol;
|
||||||
</refmeta>
|
</refmeta>
|
||||||
<refnamediv>
|
<refnamediv>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<refentry id="V4L2-PIX-FMT-YUV420M">
|
<refentry id="V4L2-PIX-FMT-YUV420M">
|
||||||
<refmeta>
|
<refmeta>
|
||||||
<refentrytitle>V4L2_PIX_FMT_YUV420M ('YU12M')</refentrytitle>
|
<refentrytitle>V4L2_PIX_FMT_YUV420M ('YM12')</refentrytitle>
|
||||||
&manvol;
|
&manvol;
|
||||||
</refmeta>
|
</refmeta>
|
||||||
<refnamediv>
|
<refnamediv>
|
||||||
|
|
|
@ -217,7 +217,7 @@ and name space for cpusets, with a minimum of additional kernel code.
|
||||||
|
|
||||||
The cpus and mems files in the root (top_cpuset) cpuset are
|
The cpus and mems files in the root (top_cpuset) cpuset are
|
||||||
read-only. The cpus file automatically tracks the value of
|
read-only. The cpus file automatically tracks the value of
|
||||||
cpu_online_map using a CPU hotplug notifier, and the mems file
|
cpu_online_mask using a CPU hotplug notifier, and the mems file
|
||||||
automatically tracks the value of node_states[N_HIGH_MEMORY]--i.e.,
|
automatically tracks the value of node_states[N_HIGH_MEMORY]--i.e.,
|
||||||
nodes with memory--using the cpuset_track_online_nodes() hook.
|
nodes with memory--using the cpuset_track_online_nodes() hook.
|
||||||
|
|
||||||
|
|
|
@ -34,8 +34,7 @@ Current Status: linux-2.6.34-mmotm(development version of 2010/April)
|
||||||
|
|
||||||
Features:
|
Features:
|
||||||
- accounting anonymous pages, file caches, swap caches usage and limiting them.
|
- accounting anonymous pages, file caches, swap caches usage and limiting them.
|
||||||
- private LRU and reclaim routine. (system's global LRU and private LRU
|
- pages are linked to per-memcg LRU exclusively, and there is no global LRU.
|
||||||
work independently from each other)
|
|
||||||
- optionally, memory+swap usage can be accounted and limited.
|
- optionally, memory+swap usage can be accounted and limited.
|
||||||
- hierarchical accounting
|
- hierarchical accounting
|
||||||
- soft limit
|
- soft limit
|
||||||
|
@ -154,7 +153,7 @@ updated. page_cgroup has its own LRU on cgroup.
|
||||||
2.2.1 Accounting details
|
2.2.1 Accounting details
|
||||||
|
|
||||||
All mapped anon pages (RSS) and cache pages (Page Cache) are accounted.
|
All mapped anon pages (RSS) and cache pages (Page Cache) are accounted.
|
||||||
Some pages which are never reclaimable and will not be on the global LRU
|
Some pages which are never reclaimable and will not be on the LRU
|
||||||
are not accounted. We just account pages under usual VM management.
|
are not accounted. We just account pages under usual VM management.
|
||||||
|
|
||||||
RSS pages are accounted at page_fault unless they've already been accounted
|
RSS pages are accounted at page_fault unless they've already been accounted
|
||||||
|
|
|
@ -47,7 +47,7 @@ maxcpus=n Restrict boot time cpus to n. Say if you have 4 cpus, using
|
||||||
other cpus later online, read FAQ's for more info.
|
other cpus later online, read FAQ's for more info.
|
||||||
|
|
||||||
additional_cpus=n (*) Use this to limit hotpluggable cpus. This option sets
|
additional_cpus=n (*) Use this to limit hotpluggable cpus. This option sets
|
||||||
cpu_possible_map = cpu_present_map + additional_cpus
|
cpu_possible_mask = cpu_present_mask + additional_cpus
|
||||||
|
|
||||||
cede_offline={"off","on"} Use this option to disable/enable putting offlined
|
cede_offline={"off","on"} Use this option to disable/enable putting offlined
|
||||||
processors to an extended H_CEDE state on
|
processors to an extended H_CEDE state on
|
||||||
|
@ -64,11 +64,11 @@ should only rely on this to count the # of cpus, but *MUST* not rely
|
||||||
on the apicid values in those tables for disabled apics. In the event
|
on the apicid values in those tables for disabled apics. In the event
|
||||||
BIOS doesn't mark such hot-pluggable cpus as disabled entries, one could
|
BIOS doesn't mark such hot-pluggable cpus as disabled entries, one could
|
||||||
use this parameter "additional_cpus=x" to represent those cpus in the
|
use this parameter "additional_cpus=x" to represent those cpus in the
|
||||||
cpu_possible_map.
|
cpu_possible_mask.
|
||||||
|
|
||||||
possible_cpus=n [s390,x86_64] use this to set hotpluggable cpus.
|
possible_cpus=n [s390,x86_64] use this to set hotpluggable cpus.
|
||||||
This option sets possible_cpus bits in
|
This option sets possible_cpus bits in
|
||||||
cpu_possible_map. Thus keeping the numbers of bits set
|
cpu_possible_mask. Thus keeping the numbers of bits set
|
||||||
constant even if the machine gets rebooted.
|
constant even if the machine gets rebooted.
|
||||||
|
|
||||||
CPU maps and such
|
CPU maps and such
|
||||||
|
@ -76,7 +76,7 @@ CPU maps and such
|
||||||
[More on cpumaps and primitive to manipulate, please check
|
[More on cpumaps and primitive to manipulate, please check
|
||||||
include/linux/cpumask.h that has more descriptive text.]
|
include/linux/cpumask.h that has more descriptive text.]
|
||||||
|
|
||||||
cpu_possible_map: Bitmap of possible CPUs that can ever be available in the
|
cpu_possible_mask: Bitmap of possible CPUs that can ever be available in the
|
||||||
system. This is used to allocate some boot time memory for per_cpu variables
|
system. This is used to allocate some boot time memory for per_cpu variables
|
||||||
that aren't designed to grow/shrink as CPUs are made available or removed.
|
that aren't designed to grow/shrink as CPUs are made available or removed.
|
||||||
Once set during boot time discovery phase, the map is static, i.e no bits
|
Once set during boot time discovery phase, the map is static, i.e no bits
|
||||||
|
@ -84,13 +84,13 @@ are added or removed anytime. Trimming it accurately for your system needs
|
||||||
upfront can save some boot time memory. See below for how we use heuristics
|
upfront can save some boot time memory. See below for how we use heuristics
|
||||||
in x86_64 case to keep this under check.
|
in x86_64 case to keep this under check.
|
||||||
|
|
||||||
cpu_online_map: Bitmap of all CPUs currently online. Its set in __cpu_up()
|
cpu_online_mask: Bitmap of all CPUs currently online. Its set in __cpu_up()
|
||||||
after a cpu is available for kernel scheduling and ready to receive
|
after a cpu is available for kernel scheduling and ready to receive
|
||||||
interrupts from devices. Its cleared when a cpu is brought down using
|
interrupts from devices. Its cleared when a cpu is brought down using
|
||||||
__cpu_disable(), before which all OS services including interrupts are
|
__cpu_disable(), before which all OS services including interrupts are
|
||||||
migrated to another target CPU.
|
migrated to another target CPU.
|
||||||
|
|
||||||
cpu_present_map: Bitmap of CPUs currently present in the system. Not all
|
cpu_present_mask: Bitmap of CPUs currently present in the system. Not all
|
||||||
of them may be online. When physical hotplug is processed by the relevant
|
of them may be online. When physical hotplug is processed by the relevant
|
||||||
subsystem (e.g ACPI) can change and new bit either be added or removed
|
subsystem (e.g ACPI) can change and new bit either be added or removed
|
||||||
from the map depending on the event is hot-add/hot-remove. There are currently
|
from the map depending on the event is hot-add/hot-remove. There are currently
|
||||||
|
@ -99,22 +99,22 @@ at which time hotplug is disabled.
|
||||||
|
|
||||||
You really dont need to manipulate any of the system cpu maps. They should
|
You really dont need to manipulate any of the system cpu maps. They should
|
||||||
be read-only for most use. When setting up per-cpu resources almost always use
|
be read-only for most use. When setting up per-cpu resources almost always use
|
||||||
cpu_possible_map/for_each_possible_cpu() to iterate.
|
cpu_possible_mask/for_each_possible_cpu() to iterate.
|
||||||
|
|
||||||
Never use anything other than cpumask_t to represent bitmap of CPUs.
|
Never use anything other than cpumask_t to represent bitmap of CPUs.
|
||||||
|
|
||||||
#include <linux/cpumask.h>
|
#include <linux/cpumask.h>
|
||||||
|
|
||||||
for_each_possible_cpu - Iterate over cpu_possible_map
|
for_each_possible_cpu - Iterate over cpu_possible_mask
|
||||||
for_each_online_cpu - Iterate over cpu_online_map
|
for_each_online_cpu - Iterate over cpu_online_mask
|
||||||
for_each_present_cpu - Iterate over cpu_present_map
|
for_each_present_cpu - Iterate over cpu_present_mask
|
||||||
for_each_cpu_mask(x,mask) - Iterate over some random collection of cpu mask.
|
for_each_cpu_mask(x,mask) - Iterate over some random collection of cpu mask.
|
||||||
|
|
||||||
#include <linux/cpu.h>
|
#include <linux/cpu.h>
|
||||||
get_online_cpus() and put_online_cpus():
|
get_online_cpus() and put_online_cpus():
|
||||||
|
|
||||||
The above calls are used to inhibit cpu hotplug operations. While the
|
The above calls are used to inhibit cpu hotplug operations. While the
|
||||||
cpu_hotplug.refcount is non zero, the cpu_online_map will not change.
|
cpu_hotplug.refcount is non zero, the cpu_online_mask will not change.
|
||||||
If you merely need to avoid cpus going away, you could also use
|
If you merely need to avoid cpus going away, you could also use
|
||||||
preempt_disable() and preempt_enable() for those sections.
|
preempt_disable() and preempt_enable() for those sections.
|
||||||
Just remember the critical section cannot call any
|
Just remember the critical section cannot call any
|
||||||
|
|
|
@ -27,13 +27,13 @@ nand0: nand@40000000,0 {
|
||||||
reg = <0x40000000 0x10000000
|
reg = <0x40000000 0x10000000
|
||||||
0xffffe800 0x200
|
0xffffe800 0x200
|
||||||
>;
|
>;
|
||||||
atmel,nand-addr-offset = <21>;
|
atmel,nand-addr-offset = <21>; /* ale */
|
||||||
atmel,nand-cmd-offset = <22>;
|
atmel,nand-cmd-offset = <22>; /* cle */
|
||||||
nand-on-flash-bbt;
|
nand-on-flash-bbt;
|
||||||
nand-ecc-mode = "soft";
|
nand-ecc-mode = "soft";
|
||||||
gpios = <&pioC 13 0
|
gpios = <&pioC 13 0 /* rdy */
|
||||||
&pioC 14 0
|
&pioC 14 0 /* nce */
|
||||||
0
|
0 /* cd */
|
||||||
>;
|
>;
|
||||||
partition@0 {
|
partition@0 {
|
||||||
...
|
...
|
||||||
|
|
|
@ -0,0 +1,29 @@
|
||||||
|
Anatop Voltage regulators
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
- compatible: Must be "fsl,anatop-regulator"
|
||||||
|
- anatop-reg-offset: Anatop MFD register offset
|
||||||
|
- anatop-vol-bit-shift: Bit shift for the register
|
||||||
|
- anatop-vol-bit-width: Number of bits used in the register
|
||||||
|
- anatop-min-bit-val: Minimum value of this register
|
||||||
|
- anatop-min-voltage: Minimum voltage of this regulator
|
||||||
|
- anatop-max-voltage: Maximum voltage of this regulator
|
||||||
|
|
||||||
|
Any property defined as part of the core regulator
|
||||||
|
binding, defined in regulator.txt, can also be used.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
regulator-vddpu {
|
||||||
|
compatible = "fsl,anatop-regulator";
|
||||||
|
regulator-name = "vddpu";
|
||||||
|
regulator-min-microvolt = <725000>;
|
||||||
|
regulator-max-microvolt = <1300000>;
|
||||||
|
regulator-always-on;
|
||||||
|
anatop-reg-offset = <0x140>;
|
||||||
|
anatop-vol-bit-shift = <9>;
|
||||||
|
anatop-vol-bit-width = <5>;
|
||||||
|
anatop-min-bit-val = <1>;
|
||||||
|
anatop-min-voltage = <725000>;
|
||||||
|
anatop-max-voltage = <1300000>;
|
||||||
|
};
|
|
@ -6,14 +6,6 @@ be removed from this file.
|
||||||
|
|
||||||
---------------------------
|
---------------------------
|
||||||
|
|
||||||
What: x86 floppy disable_hlt
|
|
||||||
When: 2012
|
|
||||||
Why: ancient workaround of dubious utility clutters the
|
|
||||||
code used by everybody else.
|
|
||||||
Who: Len Brown <len.brown@intel.com>
|
|
||||||
|
|
||||||
---------------------------
|
|
||||||
|
|
||||||
What: CONFIG_APM_CPU_IDLE, and its ability to call APM BIOS in idle
|
What: CONFIG_APM_CPU_IDLE, and its ability to call APM BIOS in idle
|
||||||
When: 2012
|
When: 2012
|
||||||
Why: This optional sub-feature of APM is of dubious reliability,
|
Why: This optional sub-feature of APM is of dubious reliability,
|
||||||
|
@ -548,3 +540,11 @@ Why: Remount currently allows changing bound subsystems and
|
||||||
release_agent. Rebinding is hardly useful as it only works
|
release_agent. Rebinding is hardly useful as it only works
|
||||||
when the hierarchy is empty and release_agent itself should be
|
when the hierarchy is empty and release_agent itself should be
|
||||||
replaced with conventional fsnotify.
|
replaced with conventional fsnotify.
|
||||||
|
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
What: setitimer accepts user NULL pointer (value)
|
||||||
|
When: 3.6
|
||||||
|
Why: setitimer is not returning -EFAULT if user pointer is NULL. This
|
||||||
|
violates the spec.
|
||||||
|
Who: Sasikantha Babu <sasikanth.v19@gmail.com>
|
||||||
|
|
|
@ -114,7 +114,7 @@ members are defined:
|
||||||
struct file_system_type {
|
struct file_system_type {
|
||||||
const char *name;
|
const char *name;
|
||||||
int fs_flags;
|
int fs_flags;
|
||||||
struct dentry (*mount) (struct file_system_type *, int,
|
struct dentry *(*mount) (struct file_system_type *, int,
|
||||||
const char *, void *);
|
const char *, void *);
|
||||||
void (*kill_sb) (struct super_block *);
|
void (*kill_sb) (struct super_block *);
|
||||||
struct module *owner;
|
struct module *owner;
|
||||||
|
|
|
@ -11,7 +11,7 @@ Supported chips:
|
||||||
Socket S1G2: Athlon (X2), Sempron (X2), Turion X2 (Ultra)
|
Socket S1G2: Athlon (X2), Sempron (X2), Turion X2 (Ultra)
|
||||||
* AMD Family 12h processors: "Llano" (E2/A4/A6/A8-Series)
|
* AMD Family 12h processors: "Llano" (E2/A4/A6/A8-Series)
|
||||||
* AMD Family 14h processors: "Brazos" (C/E/G/Z-Series)
|
* AMD Family 14h processors: "Brazos" (C/E/G/Z-Series)
|
||||||
* AMD Family 15h processors: "Bulldozer"
|
* AMD Family 15h processors: "Bulldozer" (FX-Series), "Trinity"
|
||||||
|
|
||||||
Prefix: 'k10temp'
|
Prefix: 'k10temp'
|
||||||
Addresses scanned: PCI space
|
Addresses scanned: PCI space
|
||||||
|
|
|
@ -225,6 +225,7 @@ Code Seq#(hex) Include File Comments
|
||||||
'j' 00-3F linux/joystick.h
|
'j' 00-3F linux/joystick.h
|
||||||
'k' 00-0F linux/spi/spidev.h conflict!
|
'k' 00-0F linux/spi/spidev.h conflict!
|
||||||
'k' 00-05 video/kyro.h conflict!
|
'k' 00-05 video/kyro.h conflict!
|
||||||
|
'k' 10-17 linux/hsi/hsi_char.h HSI character device
|
||||||
'l' 00-3F linux/tcfs_fs.h transparent cryptographic file system
|
'l' 00-3F linux/tcfs_fs.h transparent cryptographic file system
|
||||||
<http://web.archive.org/web/*/http://mikonos.dia.unisa.it/tcfs>
|
<http://web.archive.org/web/*/http://mikonos.dia.unisa.it/tcfs>
|
||||||
'l' 40-7F linux/udf_fs_i.h in development:
|
'l' 40-7F linux/udf_fs_i.h in development:
|
||||||
|
|
|
@ -2,16 +2,16 @@ Document about softnet driver issues
|
||||||
|
|
||||||
Transmit path guidelines:
|
Transmit path guidelines:
|
||||||
|
|
||||||
1) The hard_start_xmit method must never return '1' under any
|
1) The ndo_start_xmit method must not return NETDEV_TX_BUSY under
|
||||||
normal circumstances. It is considered a hard error unless
|
any normal circumstances. It is considered a hard error unless
|
||||||
there is no way your device can tell ahead of time when it's
|
there is no way your device can tell ahead of time when it's
|
||||||
transmit function will become busy.
|
transmit function will become busy.
|
||||||
|
|
||||||
Instead it must maintain the queue properly. For example,
|
Instead it must maintain the queue properly. For example,
|
||||||
for a driver implementing scatter-gather this means:
|
for a driver implementing scatter-gather this means:
|
||||||
|
|
||||||
static int drv_hard_start_xmit(struct sk_buff *skb,
|
static netdev_tx_t drv_hard_start_xmit(struct sk_buff *skb,
|
||||||
struct net_device *dev)
|
struct net_device *dev)
|
||||||
{
|
{
|
||||||
struct drv *dp = netdev_priv(dev);
|
struct drv *dp = netdev_priv(dev);
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@ Transmit path guidelines:
|
||||||
unlock_tx(dp);
|
unlock_tx(dp);
|
||||||
printk(KERN_ERR PFX "%s: BUG! Tx Ring full when queue awake!\n",
|
printk(KERN_ERR PFX "%s: BUG! Tx Ring full when queue awake!\n",
|
||||||
dev->name);
|
dev->name);
|
||||||
return 1;
|
return NETDEV_TX_BUSY;
|
||||||
}
|
}
|
||||||
|
|
||||||
... queue packet to card ...
|
... queue packet to card ...
|
||||||
|
@ -35,6 +35,7 @@ Transmit path guidelines:
|
||||||
...
|
...
|
||||||
unlock_tx(dp);
|
unlock_tx(dp);
|
||||||
...
|
...
|
||||||
|
return NETDEV_TX_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
And then at the end of your TX reclamation event handling:
|
And then at the end of your TX reclamation event handling:
|
||||||
|
@ -58,15 +59,12 @@ Transmit path guidelines:
|
||||||
TX_BUFFS_AVAIL(dp) > 0)
|
TX_BUFFS_AVAIL(dp) > 0)
|
||||||
netif_wake_queue(dp->dev);
|
netif_wake_queue(dp->dev);
|
||||||
|
|
||||||
2) Do not forget to update netdev->trans_start to jiffies after
|
2) An ndo_start_xmit method must not modify the shared parts of a
|
||||||
each new tx packet is given to the hardware.
|
|
||||||
|
|
||||||
3) A hard_start_xmit method must not modify the shared parts of a
|
|
||||||
cloned SKB.
|
cloned SKB.
|
||||||
|
|
||||||
4) Do not forget that once you return 0 from your hard_start_xmit
|
3) Do not forget that once you return NETDEV_TX_OK from your
|
||||||
method, it is your driver's responsibility to free up the SKB
|
ndo_start_xmit method, it is your driver's responsibility to free
|
||||||
and in some finite amount of time.
|
up the SKB and in some finite amount of time.
|
||||||
|
|
||||||
For example, this means that it is not allowed for your TX
|
For example, this means that it is not allowed for your TX
|
||||||
mitigation scheme to let TX packets "hang out" in the TX
|
mitigation scheme to let TX packets "hang out" in the TX
|
||||||
|
@ -74,8 +72,9 @@ Transmit path guidelines:
|
||||||
This error can deadlock sockets waiting for send buffer room
|
This error can deadlock sockets waiting for send buffer room
|
||||||
to be freed up.
|
to be freed up.
|
||||||
|
|
||||||
If you return 1 from the hard_start_xmit method, you must not keep
|
If you return NETDEV_TX_BUSY from the ndo_start_xmit method, you
|
||||||
any reference to that SKB and you must not attempt to free it up.
|
must not keep any reference to that SKB and you must not attempt
|
||||||
|
to free it up.
|
||||||
|
|
||||||
Probing guidelines:
|
Probing guidelines:
|
||||||
|
|
||||||
|
@ -85,10 +84,10 @@ Probing guidelines:
|
||||||
|
|
||||||
Close/stop guidelines:
|
Close/stop guidelines:
|
||||||
|
|
||||||
1) After the dev->stop routine has been called, the hardware must
|
1) After the ndo_stop routine has been called, the hardware must
|
||||||
not receive or transmit any data. All in flight packets must
|
not receive or transmit any data. All in flight packets must
|
||||||
be aborted. If necessary, poll or wait for completion of
|
be aborted. If necessary, poll or wait for completion of
|
||||||
any reset commands.
|
any reset commands.
|
||||||
|
|
||||||
2) The dev->stop routine will be called by unregister_netdevice
|
2) The ndo_stop routine will be called by unregister_netdevice
|
||||||
if device is still UP.
|
if device is still UP.
|
||||||
|
|
|
@ -604,15 +604,8 @@ IP Variables:
|
||||||
ip_local_port_range - 2 INTEGERS
|
ip_local_port_range - 2 INTEGERS
|
||||||
Defines the local port range that is used by TCP and UDP to
|
Defines the local port range that is used by TCP and UDP to
|
||||||
choose the local port. The first number is the first, the
|
choose the local port. The first number is the first, the
|
||||||
second the last local port number. Default value depends on
|
second the last local port number. The default values are
|
||||||
amount of memory available on the system:
|
32768 and 61000 respectively.
|
||||||
> 128Mb 32768-61000
|
|
||||||
< 128Mb 1024-4999 or even less.
|
|
||||||
This number defines number of active connections, which this
|
|
||||||
system can issue simultaneously to systems not supporting
|
|
||||||
TCP extensions (timestamps). With tcp_tw_recycle enabled
|
|
||||||
(i.e. by default) range 1024-4999 is enough to issue up to
|
|
||||||
2000 connections per second to systems supporting timestamps.
|
|
||||||
|
|
||||||
ip_local_reserved_ports - list of comma separated ranges
|
ip_local_reserved_ports - list of comma separated ranges
|
||||||
Specify the ports which are reserved for known third-party
|
Specify the ports which are reserved for known third-party
|
||||||
|
|
|
@ -47,26 +47,25 @@ packets is preferred.
|
||||||
|
|
||||||
struct net_device synchronization rules
|
struct net_device synchronization rules
|
||||||
=======================================
|
=======================================
|
||||||
dev->open:
|
ndo_open:
|
||||||
Synchronization: rtnl_lock() semaphore.
|
Synchronization: rtnl_lock() semaphore.
|
||||||
Context: process
|
Context: process
|
||||||
|
|
||||||
dev->stop:
|
ndo_stop:
|
||||||
Synchronization: rtnl_lock() semaphore.
|
Synchronization: rtnl_lock() semaphore.
|
||||||
Context: process
|
Context: process
|
||||||
Note1: netif_running() is guaranteed false
|
Note: netif_running() is guaranteed false
|
||||||
Note2: dev->poll() is guaranteed to be stopped
|
|
||||||
|
|
||||||
dev->do_ioctl:
|
ndo_do_ioctl:
|
||||||
Synchronization: rtnl_lock() semaphore.
|
Synchronization: rtnl_lock() semaphore.
|
||||||
Context: process
|
Context: process
|
||||||
|
|
||||||
dev->get_stats:
|
ndo_get_stats:
|
||||||
Synchronization: dev_base_lock rwlock.
|
Synchronization: dev_base_lock rwlock.
|
||||||
Context: nominally process, but don't sleep inside an rwlock
|
Context: nominally process, but don't sleep inside an rwlock
|
||||||
|
|
||||||
dev->hard_start_xmit:
|
ndo_start_xmit:
|
||||||
Synchronization: netif_tx_lock spinlock.
|
Synchronization: __netif_tx_lock spinlock.
|
||||||
|
|
||||||
When the driver sets NETIF_F_LLTX in dev->features this will be
|
When the driver sets NETIF_F_LLTX in dev->features this will be
|
||||||
called without holding netif_tx_lock. In this case the driver
|
called without holding netif_tx_lock. In this case the driver
|
||||||
|
@ -87,20 +86,20 @@ dev->hard_start_xmit:
|
||||||
o NETDEV_TX_LOCKED Locking failed, please retry quickly.
|
o NETDEV_TX_LOCKED Locking failed, please retry quickly.
|
||||||
Only valid when NETIF_F_LLTX is set.
|
Only valid when NETIF_F_LLTX is set.
|
||||||
|
|
||||||
dev->tx_timeout:
|
ndo_tx_timeout:
|
||||||
Synchronization: netif_tx_lock spinlock.
|
Synchronization: netif_tx_lock spinlock; all TX queues frozen.
|
||||||
Context: BHs disabled
|
Context: BHs disabled
|
||||||
Notes: netif_queue_stopped() is guaranteed true
|
Notes: netif_queue_stopped() is guaranteed true
|
||||||
|
|
||||||
dev->set_rx_mode:
|
ndo_set_rx_mode:
|
||||||
Synchronization: netif_tx_lock spinlock.
|
Synchronization: netif_addr_lock spinlock.
|
||||||
Context: BHs disabled
|
Context: BHs disabled
|
||||||
|
|
||||||
struct napi_struct synchronization rules
|
struct napi_struct synchronization rules
|
||||||
========================================
|
========================================
|
||||||
napi->poll:
|
napi->poll:
|
||||||
Synchronization: NAPI_STATE_SCHED bit in napi->state. Device
|
Synchronization: NAPI_STATE_SCHED bit in napi->state. Device
|
||||||
driver's dev->close method will invoke napi_disable() on
|
driver's ndo_stop method will invoke napi_disable() on
|
||||||
all NAPI instances which will do a sleeping poll on the
|
all NAPI instances which will do a sleeping poll on the
|
||||||
NAPI_STATE_SCHED napi->state bit, waiting for all pending
|
NAPI_STATE_SCHED napi->state bit, waiting for all pending
|
||||||
NAPI activity to cease.
|
NAPI activity to cease.
|
||||||
|
|
|
@ -9,7 +9,7 @@ architectures).
|
||||||
|
|
||||||
II. How does it work?
|
II. How does it work?
|
||||||
|
|
||||||
There are four per-task flags used for that, PF_NOFREEZE, PF_FROZEN, TIF_FREEZE
|
There are three per-task flags used for that, PF_NOFREEZE, PF_FROZEN
|
||||||
and PF_FREEZER_SKIP (the last one is auxiliary). The tasks that have
|
and PF_FREEZER_SKIP (the last one is auxiliary). The tasks that have
|
||||||
PF_NOFREEZE unset (all user space processes and some kernel threads) are
|
PF_NOFREEZE unset (all user space processes and some kernel threads) are
|
||||||
regarded as 'freezable' and treated in a special way before the system enters a
|
regarded as 'freezable' and treated in a special way before the system enters a
|
||||||
|
@ -17,30 +17,31 @@ suspend state as well as before a hibernation image is created (in what follows
|
||||||
we only consider hibernation, but the description also applies to suspend).
|
we only consider hibernation, but the description also applies to suspend).
|
||||||
|
|
||||||
Namely, as the first step of the hibernation procedure the function
|
Namely, as the first step of the hibernation procedure the function
|
||||||
freeze_processes() (defined in kernel/power/process.c) is called. It executes
|
freeze_processes() (defined in kernel/power/process.c) is called. A system-wide
|
||||||
try_to_freeze_tasks() that sets TIF_FREEZE for all of the freezable tasks and
|
variable system_freezing_cnt (as opposed to a per-task flag) is used to indicate
|
||||||
either wakes them up, if they are kernel threads, or sends fake signals to them,
|
whether the system is to undergo a freezing operation. And freeze_processes()
|
||||||
if they are user space processes. A task that has TIF_FREEZE set, should react
|
sets this variable. After this, it executes try_to_freeze_tasks() that sends a
|
||||||
to it by calling the function called __refrigerator() (defined in
|
fake signal to all user space processes, and wakes up all the kernel threads.
|
||||||
kernel/freezer.c), which sets the task's PF_FROZEN flag, changes its state
|
All freezable tasks must react to that by calling try_to_freeze(), which
|
||||||
to TASK_UNINTERRUPTIBLE and makes it loop until PF_FROZEN is cleared for it.
|
results in a call to __refrigerator() (defined in kernel/freezer.c), which sets
|
||||||
Then, we say that the task is 'frozen' and therefore the set of functions
|
the task's PF_FROZEN flag, changes its state to TASK_UNINTERRUPTIBLE and makes
|
||||||
handling this mechanism is referred to as 'the freezer' (these functions are
|
it loop until PF_FROZEN is cleared for it. Then, we say that the task is
|
||||||
defined in kernel/power/process.c, kernel/freezer.c & include/linux/freezer.h).
|
'frozen' and therefore the set of functions handling this mechanism is referred
|
||||||
User space processes are generally frozen before kernel threads.
|
to as 'the freezer' (these functions are defined in kernel/power/process.c,
|
||||||
|
kernel/freezer.c & include/linux/freezer.h). User space processes are generally
|
||||||
|
frozen before kernel threads.
|
||||||
|
|
||||||
__refrigerator() must not be called directly. Instead, use the
|
__refrigerator() must not be called directly. Instead, use the
|
||||||
try_to_freeze() function (defined in include/linux/freezer.h), that checks
|
try_to_freeze() function (defined in include/linux/freezer.h), that checks
|
||||||
the task's TIF_FREEZE flag and makes the task enter __refrigerator() if the
|
if the task is to be frozen and makes the task enter __refrigerator().
|
||||||
flag is set.
|
|
||||||
|
|
||||||
For user space processes try_to_freeze() is called automatically from the
|
For user space processes try_to_freeze() is called automatically from the
|
||||||
signal-handling code, but the freezable kernel threads need to call it
|
signal-handling code, but the freezable kernel threads need to call it
|
||||||
explicitly in suitable places or use the wait_event_freezable() or
|
explicitly in suitable places or use the wait_event_freezable() or
|
||||||
wait_event_freezable_timeout() macros (defined in include/linux/freezer.h)
|
wait_event_freezable_timeout() macros (defined in include/linux/freezer.h)
|
||||||
that combine interruptible sleep with checking if TIF_FREEZE is set and calling
|
that combine interruptible sleep with checking if the task is to be frozen and
|
||||||
try_to_freeze(). The main loop of a freezable kernel thread may look like the
|
calling try_to_freeze(). The main loop of a freezable kernel thread may look
|
||||||
following one:
|
like the following one:
|
||||||
|
|
||||||
set_freezable();
|
set_freezable();
|
||||||
do {
|
do {
|
||||||
|
@ -53,7 +54,7 @@ following one:
|
||||||
(from drivers/usb/core/hub.c::hub_thread()).
|
(from drivers/usb/core/hub.c::hub_thread()).
|
||||||
|
|
||||||
If a freezable kernel thread fails to call try_to_freeze() after the freezer has
|
If a freezable kernel thread fails to call try_to_freeze() after the freezer has
|
||||||
set TIF_FREEZE for it, the freezing of tasks will fail and the entire
|
initiated a freezing operation, the freezing of tasks will fail and the entire
|
||||||
hibernation operation will be cancelled. For this reason, freezable kernel
|
hibernation operation will be cancelled. For this reason, freezable kernel
|
||||||
threads must call try_to_freeze() somewhere or use one of the
|
threads must call try_to_freeze() somewhere or use one of the
|
||||||
wait_event_freezable() and wait_event_freezable_timeout() macros.
|
wait_event_freezable() and wait_event_freezable_timeout() macros.
|
||||||
|
|
|
@ -123,7 +123,7 @@ KEY SERVICE OVERVIEW
|
||||||
|
|
||||||
The key service provides a number of features besides keys:
|
The key service provides a number of features besides keys:
|
||||||
|
|
||||||
(*) The key service defines two special key types:
|
(*) The key service defines three special key types:
|
||||||
|
|
||||||
(+) "keyring"
|
(+) "keyring"
|
||||||
|
|
||||||
|
@ -137,6 +137,18 @@ The key service provides a number of features besides keys:
|
||||||
blobs of data. These can be created, updated and read by userspace,
|
blobs of data. These can be created, updated and read by userspace,
|
||||||
and aren't intended for use by kernel services.
|
and aren't intended for use by kernel services.
|
||||||
|
|
||||||
|
(+) "logon"
|
||||||
|
|
||||||
|
Like a "user" key, a "logon" key has a payload that is an arbitrary
|
||||||
|
blob of data. It is intended as a place to store secrets which are
|
||||||
|
accessible to the kernel but not to userspace programs.
|
||||||
|
|
||||||
|
The description can be arbitrary, but must be prefixed with a non-zero
|
||||||
|
length string that describes the key "subclass". The subclass is
|
||||||
|
separated from the rest of the description by a ':'. "logon" keys can
|
||||||
|
be created and updated from userspace, but the payload is only
|
||||||
|
readable from kernel space.
|
||||||
|
|
||||||
(*) Each process subscribes to three keyrings: a thread-specific keyring, a
|
(*) Each process subscribes to three keyrings: a thread-specific keyring, a
|
||||||
process-specific keyring, and a session-specific keyring.
|
process-specific keyring, and a session-specific keyring.
|
||||||
|
|
||||||
|
|
|
@ -43,7 +43,9 @@ ALC680
|
||||||
|
|
||||||
ALC882/883/885/888/889
|
ALC882/883/885/888/889
|
||||||
======================
|
======================
|
||||||
N/A
|
acer-aspire-4930g Acer Aspire 4930G/5930G/6530G/6930G/7730G
|
||||||
|
acer-aspire-8930g Acer Aspire 8330G/6935G
|
||||||
|
acer-aspire Acer Aspire others
|
||||||
|
|
||||||
ALC861/660
|
ALC861/660
|
||||||
==========
|
==========
|
||||||
|
|
|
@ -168,6 +168,28 @@ that if the completion handler or anyone else tries to resubmit it
|
||||||
they will get a -EPERM error. Thus you can be sure that when
|
they will get a -EPERM error. Thus you can be sure that when
|
||||||
usb_kill_urb() returns, the URB is totally idle.
|
usb_kill_urb() returns, the URB is totally idle.
|
||||||
|
|
||||||
|
There is a lifetime issue to consider. An URB may complete at any
|
||||||
|
time, and the completion handler may free the URB. If this happens
|
||||||
|
while usb_unlink_urb or usb_kill_urb is running, it will cause a
|
||||||
|
memory-access violation. The driver is responsible for avoiding this,
|
||||||
|
which often means some sort of lock will be needed to prevent the URB
|
||||||
|
from being deallocated while it is still in use.
|
||||||
|
|
||||||
|
On the other hand, since usb_unlink_urb may end up calling the
|
||||||
|
completion handler, the handler must not take any lock that is held
|
||||||
|
when usb_unlink_urb is invoked. The general solution to this problem
|
||||||
|
is to increment the URB's reference count while holding the lock, then
|
||||||
|
drop the lock and call usb_unlink_urb or usb_kill_urb, and then
|
||||||
|
decrement the URB's reference count. You increment the reference
|
||||||
|
count by calling
|
||||||
|
|
||||||
|
struct urb *usb_get_urb(struct urb *urb)
|
||||||
|
|
||||||
|
(ignore the return value; it is the same as the argument) and
|
||||||
|
decrement the reference count by calling usb_free_urb. Of course,
|
||||||
|
none of this is necessary if there's no danger of the URB being freed
|
||||||
|
by the completion handler.
|
||||||
|
|
||||||
|
|
||||||
1.7. What about the completion handler?
|
1.7. What about the completion handler?
|
||||||
|
|
||||||
|
|
|
@ -183,10 +183,10 @@ An input control transfer to get a port status.
|
||||||
d5ea89a0 3575914555 S Ci:1:001:0 s a3 00 0000 0003 0004 4 <
|
d5ea89a0 3575914555 S Ci:1:001:0 s a3 00 0000 0003 0004 4 <
|
||||||
d5ea89a0 3575914560 C Ci:1:001:0 0 4 = 01050000
|
d5ea89a0 3575914560 C Ci:1:001:0 0 4 = 01050000
|
||||||
|
|
||||||
An output bulk transfer to send a SCSI command 0x5E in a 31-byte Bulk wrapper
|
An output bulk transfer to send a SCSI command 0x28 (READ_10) in a 31-byte
|
||||||
to a storage device at address 5:
|
Bulk wrapper to a storage device at address 5:
|
||||||
|
|
||||||
dd65f0e8 4128379752 S Bo:1:005:2 -115 31 = 55534243 5e000000 00000000 00000600 00000000 00000000 00000000 000000
|
dd65f0e8 4128379752 S Bo:1:005:2 -115 31 = 55534243 ad000000 00800000 80010a28 20000000 20000040 00000000 000000
|
||||||
dd65f0e8 4128379808 C Bo:1:005:2 0 31 >
|
dd65f0e8 4128379808 C Bo:1:005:2 0 31 >
|
||||||
|
|
||||||
* Raw binary format and API
|
* Raw binary format and API
|
||||||
|
|
97
MAINTAINERS
97
MAINTAINERS
|
@ -228,7 +228,7 @@ M: Len Brown <lenb@kernel.org>
|
||||||
L: linux-acpi@vger.kernel.org
|
L: linux-acpi@vger.kernel.org
|
||||||
W: http://www.lesswatts.org/projects/acpi/
|
W: http://www.lesswatts.org/projects/acpi/
|
||||||
Q: http://patchwork.kernel.org/project/linux-acpi/list/
|
Q: http://patchwork.kernel.org/project/linux-acpi/list/
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux
|
||||||
S: Supported
|
S: Supported
|
||||||
F: drivers/acpi/
|
F: drivers/acpi/
|
||||||
F: drivers/pnp/pnpacpi/
|
F: drivers/pnp/pnpacpi/
|
||||||
|
@ -1251,7 +1251,6 @@ ATHEROS ATH5K WIRELESS DRIVER
|
||||||
M: Jiri Slaby <jirislaby@gmail.com>
|
M: Jiri Slaby <jirislaby@gmail.com>
|
||||||
M: Nick Kossifidis <mickflemm@gmail.com>
|
M: Nick Kossifidis <mickflemm@gmail.com>
|
||||||
M: "Luis R. Rodriguez" <mcgrof@qca.qualcomm.com>
|
M: "Luis R. Rodriguez" <mcgrof@qca.qualcomm.com>
|
||||||
M: Bob Copeland <me@bobcopeland.com>
|
|
||||||
L: linux-wireless@vger.kernel.org
|
L: linux-wireless@vger.kernel.org
|
||||||
L: ath5k-devel@lists.ath5k.org
|
L: ath5k-devel@lists.ath5k.org
|
||||||
W: http://wireless.kernel.org/en/users/Drivers/ath5k
|
W: http://wireless.kernel.org/en/users/Drivers/ath5k
|
||||||
|
@ -1522,8 +1521,8 @@ M: Gustavo Padovan <gustavo@padovan.org>
|
||||||
M: Johan Hedberg <johan.hedberg@gmail.com>
|
M: Johan Hedberg <johan.hedberg@gmail.com>
|
||||||
L: linux-bluetooth@vger.kernel.org
|
L: linux-bluetooth@vger.kernel.org
|
||||||
W: http://www.bluez.org/
|
W: http://www.bluez.org/
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/padovan/bluetooth.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth.git
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/jh/bluetooth.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next.git
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/bluetooth/
|
F: drivers/bluetooth/
|
||||||
|
|
||||||
|
@ -1533,8 +1532,8 @@ M: Gustavo Padovan <gustavo@padovan.org>
|
||||||
M: Johan Hedberg <johan.hedberg@gmail.com>
|
M: Johan Hedberg <johan.hedberg@gmail.com>
|
||||||
L: linux-bluetooth@vger.kernel.org
|
L: linux-bluetooth@vger.kernel.org
|
||||||
W: http://www.bluez.org/
|
W: http://www.bluez.org/
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/padovan/bluetooth.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth.git
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/jh/bluetooth.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next.git
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: net/bluetooth/
|
F: net/bluetooth/
|
||||||
F: include/net/bluetooth/
|
F: include/net/bluetooth/
|
||||||
|
@ -2322,9 +2321,9 @@ S: Supported
|
||||||
F: drivers/acpi/dock.c
|
F: drivers/acpi/dock.c
|
||||||
|
|
||||||
DOCUMENTATION
|
DOCUMENTATION
|
||||||
M: Randy Dunlap <rdunlap@xenotime.net>
|
M: Rob Landley <rob@landley.net>
|
||||||
L: linux-doc@vger.kernel.org
|
L: linux-doc@vger.kernel.org
|
||||||
T: quilt http://xenotime.net/kernel-doc-patches/current/
|
T: TBD
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: Documentation/
|
F: Documentation/
|
||||||
|
|
||||||
|
@ -2451,17 +2450,17 @@ F: fs/ecryptfs/
|
||||||
|
|
||||||
EDAC-CORE
|
EDAC-CORE
|
||||||
M: Doug Thompson <dougthompson@xmission.com>
|
M: Doug Thompson <dougthompson@xmission.com>
|
||||||
L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers)
|
L: linux-edac@vger.kernel.org
|
||||||
W: bluesmoke.sourceforge.net
|
W: bluesmoke.sourceforge.net
|
||||||
S: Supported
|
S: Supported
|
||||||
F: Documentation/edac.txt
|
F: Documentation/edac.txt
|
||||||
F: drivers/edac/edac_*
|
F: drivers/edac/
|
||||||
F: include/linux/edac.h
|
F: include/linux/edac.h
|
||||||
|
|
||||||
EDAC-AMD64
|
EDAC-AMD64
|
||||||
M: Doug Thompson <dougthompson@xmission.com>
|
M: Doug Thompson <dougthompson@xmission.com>
|
||||||
M: Borislav Petkov <borislav.petkov@amd.com>
|
M: Borislav Petkov <borislav.petkov@amd.com>
|
||||||
L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers)
|
L: linux-edac@vger.kernel.org
|
||||||
W: bluesmoke.sourceforge.net
|
W: bluesmoke.sourceforge.net
|
||||||
S: Supported
|
S: Supported
|
||||||
F: drivers/edac/amd64_edac*
|
F: drivers/edac/amd64_edac*
|
||||||
|
@ -2469,35 +2468,35 @@ F: drivers/edac/amd64_edac*
|
||||||
EDAC-E752X
|
EDAC-E752X
|
||||||
M: Mark Gross <mark.gross@intel.com>
|
M: Mark Gross <mark.gross@intel.com>
|
||||||
M: Doug Thompson <dougthompson@xmission.com>
|
M: Doug Thompson <dougthompson@xmission.com>
|
||||||
L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers)
|
L: linux-edac@vger.kernel.org
|
||||||
W: bluesmoke.sourceforge.net
|
W: bluesmoke.sourceforge.net
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/edac/e752x_edac.c
|
F: drivers/edac/e752x_edac.c
|
||||||
|
|
||||||
EDAC-E7XXX
|
EDAC-E7XXX
|
||||||
M: Doug Thompson <dougthompson@xmission.com>
|
M: Doug Thompson <dougthompson@xmission.com>
|
||||||
L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers)
|
L: linux-edac@vger.kernel.org
|
||||||
W: bluesmoke.sourceforge.net
|
W: bluesmoke.sourceforge.net
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/edac/e7xxx_edac.c
|
F: drivers/edac/e7xxx_edac.c
|
||||||
|
|
||||||
EDAC-I82443BXGX
|
EDAC-I82443BXGX
|
||||||
M: Tim Small <tim@buttersideup.com>
|
M: Tim Small <tim@buttersideup.com>
|
||||||
L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers)
|
L: linux-edac@vger.kernel.org
|
||||||
W: bluesmoke.sourceforge.net
|
W: bluesmoke.sourceforge.net
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/edac/i82443bxgx_edac.c
|
F: drivers/edac/i82443bxgx_edac.c
|
||||||
|
|
||||||
EDAC-I3000
|
EDAC-I3000
|
||||||
M: Jason Uhlenkott <juhlenko@akamai.com>
|
M: Jason Uhlenkott <juhlenko@akamai.com>
|
||||||
L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers)
|
L: linux-edac@vger.kernel.org
|
||||||
W: bluesmoke.sourceforge.net
|
W: bluesmoke.sourceforge.net
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/edac/i3000_edac.c
|
F: drivers/edac/i3000_edac.c
|
||||||
|
|
||||||
EDAC-I5000
|
EDAC-I5000
|
||||||
M: Doug Thompson <dougthompson@xmission.com>
|
M: Doug Thompson <dougthompson@xmission.com>
|
||||||
L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers)
|
L: linux-edac@vger.kernel.org
|
||||||
W: bluesmoke.sourceforge.net
|
W: bluesmoke.sourceforge.net
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/edac/i5000_edac.c
|
F: drivers/edac/i5000_edac.c
|
||||||
|
@ -2526,21 +2525,21 @@ F: drivers/edac/i7core_edac.c
|
||||||
EDAC-I82975X
|
EDAC-I82975X
|
||||||
M: Ranganathan Desikan <ravi@jetztechnologies.com>
|
M: Ranganathan Desikan <ravi@jetztechnologies.com>
|
||||||
M: "Arvind R." <arvino55@gmail.com>
|
M: "Arvind R." <arvino55@gmail.com>
|
||||||
L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers)
|
L: linux-edac@vger.kernel.org
|
||||||
W: bluesmoke.sourceforge.net
|
W: bluesmoke.sourceforge.net
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/edac/i82975x_edac.c
|
F: drivers/edac/i82975x_edac.c
|
||||||
|
|
||||||
EDAC-PASEMI
|
EDAC-PASEMI
|
||||||
M: Egor Martovetsky <egor@pasemi.com>
|
M: Egor Martovetsky <egor@pasemi.com>
|
||||||
L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers)
|
L: linux-edac@vger.kernel.org
|
||||||
W: bluesmoke.sourceforge.net
|
W: bluesmoke.sourceforge.net
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/edac/pasemi_edac.c
|
F: drivers/edac/pasemi_edac.c
|
||||||
|
|
||||||
EDAC-R82600
|
EDAC-R82600
|
||||||
M: Tim Small <tim@buttersideup.com>
|
M: Tim Small <tim@buttersideup.com>
|
||||||
L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers)
|
L: linux-edac@vger.kernel.org
|
||||||
W: bluesmoke.sourceforge.net
|
W: bluesmoke.sourceforge.net
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/edac/r82600_edac.c
|
F: drivers/edac/r82600_edac.c
|
||||||
|
@ -3557,17 +3556,13 @@ L: linux-pm@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
F: arch/x86/platform/mrst/pmu.*
|
F: arch/x86/platform/mrst/pmu.*
|
||||||
|
|
||||||
INTEL PRO/WIRELESS 2100 NETWORK CONNECTION SUPPORT
|
INTEL PRO/WIRELESS 2100, 2200BG, 2915ABG NETWORK CONNECTION SUPPORT
|
||||||
|
M: Stanislav Yakovlev <stas.yakovlev@gmail.com>
|
||||||
L: linux-wireless@vger.kernel.org
|
L: linux-wireless@vger.kernel.org
|
||||||
S: Orphan
|
S: Maintained
|
||||||
F: Documentation/networking/README.ipw2100
|
F: Documentation/networking/README.ipw2100
|
||||||
F: drivers/net/wireless/ipw2x00/ipw2100.*
|
|
||||||
|
|
||||||
INTEL PRO/WIRELESS 2915ABG NETWORK CONNECTION SUPPORT
|
|
||||||
L: linux-wireless@vger.kernel.org
|
|
||||||
S: Orphan
|
|
||||||
F: Documentation/networking/README.ipw2200
|
F: Documentation/networking/README.ipw2200
|
||||||
F: drivers/net/wireless/ipw2x00/ipw2200.*
|
F: drivers/net/wireless/ipw2x00/
|
||||||
|
|
||||||
INTEL(R) TRUSTED EXECUTION TECHNOLOGY (TXT)
|
INTEL(R) TRUSTED EXECUTION TECHNOLOGY (TXT)
|
||||||
M: Joseph Cihula <joseph.cihula@intel.com>
|
M: Joseph Cihula <joseph.cihula@intel.com>
|
||||||
|
@ -3597,6 +3592,7 @@ S: Supported
|
||||||
F: drivers/net/wireless/iwlegacy/
|
F: drivers/net/wireless/iwlegacy/
|
||||||
|
|
||||||
INTEL WIRELESS WIFI LINK (iwlwifi)
|
INTEL WIRELESS WIFI LINK (iwlwifi)
|
||||||
|
M: Johannes Berg <johannes.berg@intel.com>
|
||||||
M: Wey-Yi Guy <wey-yi.w.guy@intel.com>
|
M: Wey-Yi Guy <wey-yi.w.guy@intel.com>
|
||||||
M: Intel Linux Wireless <ilw@linux.intel.com>
|
M: Intel Linux Wireless <ilw@linux.intel.com>
|
||||||
L: linux-wireless@vger.kernel.org
|
L: linux-wireless@vger.kernel.org
|
||||||
|
@ -4314,6 +4310,13 @@ W: http://www.kernel.org/doc/man-pages
|
||||||
L: linux-man@vger.kernel.org
|
L: linux-man@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
|
||||||
|
MARVELL GIGABIT ETHERNET DRIVERS (skge/sky2)
|
||||||
|
M: Mirko Lindner <mlindner@marvell.com>
|
||||||
|
M: Stephen Hemminger <shemminger@vyatta.com>
|
||||||
|
L: netdev@vger.kernel.org
|
||||||
|
S: Maintained
|
||||||
|
F: drivers/net/ethernet/marvell/sk*
|
||||||
|
|
||||||
MARVELL LIBERTAS WIRELESS DRIVER
|
MARVELL LIBERTAS WIRELESS DRIVER
|
||||||
M: Dan Williams <dcbw@redhat.com>
|
M: Dan Williams <dcbw@redhat.com>
|
||||||
L: libertas-dev@lists.infradead.org
|
L: libertas-dev@lists.infradead.org
|
||||||
|
@ -4344,12 +4347,6 @@ M: Nicolas Pitre <nico@fluxnic.net>
|
||||||
S: Odd Fixes
|
S: Odd Fixes
|
||||||
F: drivers/mmc/host/mvsdio.*
|
F: drivers/mmc/host/mvsdio.*
|
||||||
|
|
||||||
MARVELL YUKON / SYSKONNECT DRIVER
|
|
||||||
M: Mirko Lindner <mlindner@syskonnect.de>
|
|
||||||
M: Ralph Roesler <rroesler@syskonnect.de>
|
|
||||||
W: http://www.syskonnect.com
|
|
||||||
S: Supported
|
|
||||||
|
|
||||||
MATROX FRAMEBUFFER DRIVER
|
MATROX FRAMEBUFFER DRIVER
|
||||||
L: linux-fbdev@vger.kernel.org
|
L: linux-fbdev@vger.kernel.org
|
||||||
S: Orphan
|
S: Orphan
|
||||||
|
@ -4537,8 +4534,7 @@ S: Supported
|
||||||
F: drivers/net/ethernet/myricom/myri10ge/
|
F: drivers/net/ethernet/myricom/myri10ge/
|
||||||
|
|
||||||
NATSEMI ETHERNET DRIVER (DP8381x)
|
NATSEMI ETHERNET DRIVER (DP8381x)
|
||||||
M: Tim Hockin <thockin@hockin.org>
|
S: Orphan
|
||||||
S: Maintained
|
|
||||||
F: drivers/net/ethernet/natsemi/natsemi.c
|
F: drivers/net/ethernet/natsemi/natsemi.c
|
||||||
|
|
||||||
NATIVE INSTRUMENTS USB SOUND INTERFACE DRIVER
|
NATIVE INSTRUMENTS USB SOUND INTERFACE DRIVER
|
||||||
|
@ -4807,6 +4803,7 @@ F: arch/arm/mach-omap2/clockdomain2xxx_3xxx.c
|
||||||
F: arch/arm/mach-omap2/clockdomain44xx.c
|
F: arch/arm/mach-omap2/clockdomain44xx.c
|
||||||
|
|
||||||
OMAP AUDIO SUPPORT
|
OMAP AUDIO SUPPORT
|
||||||
|
M: Peter Ujfalusi <peter.ujfalusi@ti.com>
|
||||||
M: Jarkko Nikula <jarkko.nikula@bitmer.com>
|
M: Jarkko Nikula <jarkko.nikula@bitmer.com>
|
||||||
L: alsa-devel@alsa-project.org (subscribers-only)
|
L: alsa-devel@alsa-project.org (subscribers-only)
|
||||||
L: linux-omap@vger.kernel.org
|
L: linux-omap@vger.kernel.org
|
||||||
|
@ -5121,6 +5118,11 @@ F: drivers/i2c/busses/i2c-pca-*
|
||||||
F: include/linux/i2c-algo-pca.h
|
F: include/linux/i2c-algo-pca.h
|
||||||
F: include/linux/i2c-pca-platform.h
|
F: include/linux/i2c-pca-platform.h
|
||||||
|
|
||||||
|
PCDP - PRIMARY CONSOLE AND DEBUG PORT
|
||||||
|
M: Khalid Aziz <khalid.aziz@hp.com>
|
||||||
|
S: Maintained
|
||||||
|
F: drivers/firmware/pcdp.*
|
||||||
|
|
||||||
PCI ERROR RECOVERY
|
PCI ERROR RECOVERY
|
||||||
M: Linas Vepstas <linasvepstas@gmail.com>
|
M: Linas Vepstas <linasvepstas@gmail.com>
|
||||||
L: linux-pci@vger.kernel.org
|
L: linux-pci@vger.kernel.org
|
||||||
|
@ -5642,7 +5644,7 @@ M: Ohad Ben-Cohen <ohad@wizery.com>
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/remoteproc/
|
F: drivers/remoteproc/
|
||||||
F: Documentation/remoteproc.txt
|
F: Documentation/remoteproc.txt
|
||||||
F: include/linux/remoteproc.txt
|
F: include/linux/remoteproc.h
|
||||||
|
|
||||||
RFKILL
|
RFKILL
|
||||||
M: Johannes Berg <johannes@sipsolutions.net>
|
M: Johannes Berg <johannes@sipsolutions.net>
|
||||||
|
@ -6121,12 +6123,6 @@ W: http://www.winischhofer.at/linuxsisusbvga.shtml
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/usb/misc/sisusbvga/
|
F: drivers/usb/misc/sisusbvga/
|
||||||
|
|
||||||
SKGE, SKY2 10/100/1000 GIGABIT ETHERNET DRIVERS
|
|
||||||
M: Stephen Hemminger <shemminger@vyatta.com>
|
|
||||||
L: netdev@vger.kernel.org
|
|
||||||
S: Maintained
|
|
||||||
F: drivers/net/ethernet/marvell/sk*
|
|
||||||
|
|
||||||
SLAB ALLOCATOR
|
SLAB ALLOCATOR
|
||||||
M: Christoph Lameter <cl@linux-foundation.org>
|
M: Christoph Lameter <cl@linux-foundation.org>
|
||||||
M: Pekka Enberg <penberg@kernel.org>
|
M: Pekka Enberg <penberg@kernel.org>
|
||||||
|
@ -6292,6 +6288,15 @@ F: drivers/tty/serial/sunsu.c
|
||||||
F: drivers/tty/serial/sunzilog.c
|
F: drivers/tty/serial/sunzilog.c
|
||||||
F: drivers/tty/serial/sunzilog.h
|
F: drivers/tty/serial/sunzilog.h
|
||||||
|
|
||||||
|
SPARSE CHECKER
|
||||||
|
M: "Christopher Li" <sparse@chrisli.org>
|
||||||
|
L: linux-sparse@vger.kernel.org
|
||||||
|
W: https://sparse.wiki.kernel.org/
|
||||||
|
T: git git://git.kernel.org/pub/scm/devel/sparse/sparse.git
|
||||||
|
T: git git://git.kernel.org/pub/scm/devel/sparse/chrisl/sparse.git
|
||||||
|
S: Maintained
|
||||||
|
F: include/linux/compiler.h
|
||||||
|
|
||||||
SPEAR PLATFORM SUPPORT
|
SPEAR PLATFORM SUPPORT
|
||||||
M: Viresh Kumar <viresh.kumar@st.com>
|
M: Viresh Kumar <viresh.kumar@st.com>
|
||||||
L: spear-devel@list.st.com
|
L: spear-devel@list.st.com
|
||||||
|
@ -6467,6 +6472,7 @@ S: Odd Fixes
|
||||||
F: drivers/staging/olpc_dcon/
|
F: drivers/staging/olpc_dcon/
|
||||||
|
|
||||||
STAGING - OZMO DEVICES USB OVER WIFI DRIVER
|
STAGING - OZMO DEVICES USB OVER WIFI DRIVER
|
||||||
|
M: Rupesh Gujare <rgujare@ozmodevices.com>
|
||||||
M: Chris Kelly <ckelly@ozmodevices.com>
|
M: Chris Kelly <ckelly@ozmodevices.com>
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/staging/ozwpan/
|
F: drivers/staging/ozwpan/
|
||||||
|
@ -7462,8 +7468,7 @@ F: include/linux/wm97xx.h
|
||||||
|
|
||||||
WOLFSON MICROELECTRONICS DRIVERS
|
WOLFSON MICROELECTRONICS DRIVERS
|
||||||
M: Mark Brown <broonie@opensource.wolfsonmicro.com>
|
M: Mark Brown <broonie@opensource.wolfsonmicro.com>
|
||||||
M: Ian Lartey <ian@opensource.wolfsonmicro.com>
|
L: patches@opensource.wolfsonmicro.com
|
||||||
M: Dimitris Papastamos <dp@opensource.wolfsonmicro.com>
|
|
||||||
T: git git://opensource.wolfsonmicro.com/linux-2.6-asoc
|
T: git git://opensource.wolfsonmicro.com/linux-2.6-asoc
|
||||||
T: git git://opensource.wolfsonmicro.com/linux-2.6-audioplus
|
T: git git://opensource.wolfsonmicro.com/linux-2.6-audioplus
|
||||||
W: http://opensource.wolfsonmicro.com/content/linux-drivers-wolfson-devices
|
W: http://opensource.wolfsonmicro.com/content/linux-drivers-wolfson-devices
|
||||||
|
@ -7574,8 +7579,8 @@ F: Documentation/filesystems/xfs.txt
|
||||||
F: fs/xfs/
|
F: fs/xfs/
|
||||||
|
|
||||||
XILINX AXI ETHERNET DRIVER
|
XILINX AXI ETHERNET DRIVER
|
||||||
M: Ariane Keller <ariane.keller@tik.ee.ethz.ch>
|
M: Anirudha Sarangi <anirudh@xilinx.com>
|
||||||
M: Daniel Borkmann <daniel.borkmann@tik.ee.ethz.ch>
|
M: John Linn <John.Linn@xilinx.com>
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/net/ethernet/xilinx/xilinx_axienet*
|
F: drivers/net/ethernet/xilinx/xilinx_axienet*
|
||||||
|
|
||||||
|
|
2
Makefile
2
Makefile
|
@ -1,7 +1,7 @@
|
||||||
VERSION = 3
|
VERSION = 3
|
||||||
PATCHLEVEL = 4
|
PATCHLEVEL = 4
|
||||||
SUBLEVEL = 0
|
SUBLEVEL = 0
|
||||||
EXTRAVERSION = -rc1
|
EXTRAVERSION = -rc5
|
||||||
NAME = Saber-toothed Squirrel
|
NAME = Saber-toothed Squirrel
|
||||||
|
|
||||||
# *DOCUMENTATION*
|
# *DOCUMENTATION*
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
#include <asm/barrier.h>
|
#include <asm/barrier.h>
|
||||||
|
#include <asm/cmpxchg.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Atomic operations that C can't guarantee us. Useful for
|
* Atomic operations that C can't guarantee us. Useful for
|
||||||
|
@ -168,73 +169,6 @@ static __inline__ long atomic64_sub_return(long i, atomic64_t * v)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Atomic exchange routines.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define __ASM__MB
|
|
||||||
#define ____xchg(type, args...) __xchg ## type ## _local(args)
|
|
||||||
#define ____cmpxchg(type, args...) __cmpxchg ## type ## _local(args)
|
|
||||||
#include <asm/xchg.h>
|
|
||||||
|
|
||||||
#define xchg_local(ptr,x) \
|
|
||||||
({ \
|
|
||||||
__typeof__(*(ptr)) _x_ = (x); \
|
|
||||||
(__typeof__(*(ptr))) __xchg_local((ptr), (unsigned long)_x_, \
|
|
||||||
sizeof(*(ptr))); \
|
|
||||||
})
|
|
||||||
|
|
||||||
#define cmpxchg_local(ptr, o, n) \
|
|
||||||
({ \
|
|
||||||
__typeof__(*(ptr)) _o_ = (o); \
|
|
||||||
__typeof__(*(ptr)) _n_ = (n); \
|
|
||||||
(__typeof__(*(ptr))) __cmpxchg_local((ptr), (unsigned long)_o_, \
|
|
||||||
(unsigned long)_n_, \
|
|
||||||
sizeof(*(ptr))); \
|
|
||||||
})
|
|
||||||
|
|
||||||
#define cmpxchg64_local(ptr, o, n) \
|
|
||||||
({ \
|
|
||||||
BUILD_BUG_ON(sizeof(*(ptr)) != 8); \
|
|
||||||
cmpxchg_local((ptr), (o), (n)); \
|
|
||||||
})
|
|
||||||
|
|
||||||
#ifdef CONFIG_SMP
|
|
||||||
#undef __ASM__MB
|
|
||||||
#define __ASM__MB "\tmb\n"
|
|
||||||
#endif
|
|
||||||
#undef ____xchg
|
|
||||||
#undef ____cmpxchg
|
|
||||||
#define ____xchg(type, args...) __xchg ##type(args)
|
|
||||||
#define ____cmpxchg(type, args...) __cmpxchg ##type(args)
|
|
||||||
#include <asm/xchg.h>
|
|
||||||
|
|
||||||
#define xchg(ptr,x) \
|
|
||||||
({ \
|
|
||||||
__typeof__(*(ptr)) _x_ = (x); \
|
|
||||||
(__typeof__(*(ptr))) __xchg((ptr), (unsigned long)_x_, \
|
|
||||||
sizeof(*(ptr))); \
|
|
||||||
})
|
|
||||||
|
|
||||||
#define cmpxchg(ptr, o, n) \
|
|
||||||
({ \
|
|
||||||
__typeof__(*(ptr)) _o_ = (o); \
|
|
||||||
__typeof__(*(ptr)) _n_ = (n); \
|
|
||||||
(__typeof__(*(ptr))) __cmpxchg((ptr), (unsigned long)_o_, \
|
|
||||||
(unsigned long)_n_, sizeof(*(ptr)));\
|
|
||||||
})
|
|
||||||
|
|
||||||
#define cmpxchg64(ptr, o, n) \
|
|
||||||
({ \
|
|
||||||
BUILD_BUG_ON(sizeof(*(ptr)) != 8); \
|
|
||||||
cmpxchg((ptr), (o), (n)); \
|
|
||||||
})
|
|
||||||
|
|
||||||
#undef __ASM__MB
|
|
||||||
#undef ____cmpxchg
|
|
||||||
|
|
||||||
#define __HAVE_ARCH_CMPXCHG 1
|
|
||||||
|
|
||||||
#define atomic64_cmpxchg(v, old, new) (cmpxchg(&((v)->counter), old, new))
|
#define atomic64_cmpxchg(v, old, new) (cmpxchg(&((v)->counter), old, new))
|
||||||
#define atomic64_xchg(v, new) (xchg(&((v)->counter), new))
|
#define atomic64_xchg(v, new) (xchg(&((v)->counter), new))
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,71 @@
|
||||||
|
#ifndef _ALPHA_CMPXCHG_H
|
||||||
|
#define _ALPHA_CMPXCHG_H
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Atomic exchange routines.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define __ASM__MB
|
||||||
|
#define ____xchg(type, args...) __xchg ## type ## _local(args)
|
||||||
|
#define ____cmpxchg(type, args...) __cmpxchg ## type ## _local(args)
|
||||||
|
#include <asm/xchg.h>
|
||||||
|
|
||||||
|
#define xchg_local(ptr, x) \
|
||||||
|
({ \
|
||||||
|
__typeof__(*(ptr)) _x_ = (x); \
|
||||||
|
(__typeof__(*(ptr))) __xchg_local((ptr), (unsigned long)_x_, \
|
||||||
|
sizeof(*(ptr))); \
|
||||||
|
})
|
||||||
|
|
||||||
|
#define cmpxchg_local(ptr, o, n) \
|
||||||
|
({ \
|
||||||
|
__typeof__(*(ptr)) _o_ = (o); \
|
||||||
|
__typeof__(*(ptr)) _n_ = (n); \
|
||||||
|
(__typeof__(*(ptr))) __cmpxchg_local((ptr), (unsigned long)_o_, \
|
||||||
|
(unsigned long)_n_, \
|
||||||
|
sizeof(*(ptr))); \
|
||||||
|
})
|
||||||
|
|
||||||
|
#define cmpxchg64_local(ptr, o, n) \
|
||||||
|
({ \
|
||||||
|
BUILD_BUG_ON(sizeof(*(ptr)) != 8); \
|
||||||
|
cmpxchg_local((ptr), (o), (n)); \
|
||||||
|
})
|
||||||
|
|
||||||
|
#ifdef CONFIG_SMP
|
||||||
|
#undef __ASM__MB
|
||||||
|
#define __ASM__MB "\tmb\n"
|
||||||
|
#endif
|
||||||
|
#undef ____xchg
|
||||||
|
#undef ____cmpxchg
|
||||||
|
#define ____xchg(type, args...) __xchg ##type(args)
|
||||||
|
#define ____cmpxchg(type, args...) __cmpxchg ##type(args)
|
||||||
|
#include <asm/xchg.h>
|
||||||
|
|
||||||
|
#define xchg(ptr, x) \
|
||||||
|
({ \
|
||||||
|
__typeof__(*(ptr)) _x_ = (x); \
|
||||||
|
(__typeof__(*(ptr))) __xchg((ptr), (unsigned long)_x_, \
|
||||||
|
sizeof(*(ptr))); \
|
||||||
|
})
|
||||||
|
|
||||||
|
#define cmpxchg(ptr, o, n) \
|
||||||
|
({ \
|
||||||
|
__typeof__(*(ptr)) _o_ = (o); \
|
||||||
|
__typeof__(*(ptr)) _n_ = (n); \
|
||||||
|
(__typeof__(*(ptr))) __cmpxchg((ptr), (unsigned long)_o_, \
|
||||||
|
(unsigned long)_n_, sizeof(*(ptr)));\
|
||||||
|
})
|
||||||
|
|
||||||
|
#define cmpxchg64(ptr, o, n) \
|
||||||
|
({ \
|
||||||
|
BUILD_BUG_ON(sizeof(*(ptr)) != 8); \
|
||||||
|
cmpxchg((ptr), (o), (n)); \
|
||||||
|
})
|
||||||
|
|
||||||
|
#undef __ASM__MB
|
||||||
|
#undef ____cmpxchg
|
||||||
|
|
||||||
|
#define __HAVE_ARCH_CMPXCHG 1
|
||||||
|
|
||||||
|
#endif /* _ALPHA_CMPXCHG_H */
|
|
@ -12,16 +12,22 @@ static inline struct dma_map_ops *get_dma_ops(struct device *dev)
|
||||||
|
|
||||||
#include <asm-generic/dma-mapping-common.h>
|
#include <asm-generic/dma-mapping-common.h>
|
||||||
|
|
||||||
static inline void *dma_alloc_coherent(struct device *dev, size_t size,
|
#define dma_alloc_coherent(d,s,h,f) dma_alloc_attrs(d,s,h,f,NULL)
|
||||||
dma_addr_t *dma_handle, gfp_t gfp)
|
|
||||||
|
static inline void *dma_alloc_attrs(struct device *dev, size_t size,
|
||||||
|
dma_addr_t *dma_handle, gfp_t gfp,
|
||||||
|
struct dma_attrs *attrs)
|
||||||
{
|
{
|
||||||
return get_dma_ops(dev)->alloc_coherent(dev, size, dma_handle, gfp);
|
return get_dma_ops(dev)->alloc(dev, size, dma_handle, gfp, attrs);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void dma_free_coherent(struct device *dev, size_t size,
|
#define dma_free_coherent(d,s,c,h) dma_free_attrs(d,s,c,h,NULL)
|
||||||
void *vaddr, dma_addr_t dma_handle)
|
|
||||||
|
static inline void dma_free_attrs(struct device *dev, size_t size,
|
||||||
|
void *vaddr, dma_addr_t dma_handle,
|
||||||
|
struct dma_attrs *attrs)
|
||||||
{
|
{
|
||||||
get_dma_ops(dev)->free_coherent(dev, size, vaddr, dma_handle);
|
get_dma_ops(dev)->free(dev, size, vaddr, dma_handle, attrs);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int dma_mapping_error(struct device *dev, dma_addr_t dma_addr)
|
static inline int dma_mapping_error(struct device *dev, dma_addr_t dma_addr)
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
#ifndef _ALPHA_ATOMIC_H
|
#ifndef _ALPHA_CMPXCHG_H
|
||||||
#error Do not include xchg.h directly!
|
#error Do not include xchg.h directly!
|
||||||
#else
|
#else
|
||||||
/*
|
/*
|
||||||
* xchg/xchg_local and cmpxchg/cmpxchg_local share the same code
|
* xchg/xchg_local and cmpxchg/cmpxchg_local share the same code
|
||||||
* except that local version do not have the expensive memory barrier.
|
* except that local version do not have the expensive memory barrier.
|
||||||
* So this file is included twice from asm/system.h.
|
* So this file is included twice from asm/cmpxchg.h.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -108,7 +108,8 @@ sys_pciconfig_write(unsigned long bus, unsigned long dfn,
|
||||||
}
|
}
|
||||||
|
|
||||||
static void *alpha_noop_alloc_coherent(struct device *dev, size_t size,
|
static void *alpha_noop_alloc_coherent(struct device *dev, size_t size,
|
||||||
dma_addr_t *dma_handle, gfp_t gfp)
|
dma_addr_t *dma_handle, gfp_t gfp,
|
||||||
|
struct dma_attrs *attrs)
|
||||||
{
|
{
|
||||||
void *ret;
|
void *ret;
|
||||||
|
|
||||||
|
@ -123,7 +124,8 @@ static void *alpha_noop_alloc_coherent(struct device *dev, size_t size,
|
||||||
}
|
}
|
||||||
|
|
||||||
static void alpha_noop_free_coherent(struct device *dev, size_t size,
|
static void alpha_noop_free_coherent(struct device *dev, size_t size,
|
||||||
void *cpu_addr, dma_addr_t dma_addr)
|
void *cpu_addr, dma_addr_t dma_addr,
|
||||||
|
struct dma_attrs *attrs)
|
||||||
{
|
{
|
||||||
free_pages((unsigned long)cpu_addr, get_order(size));
|
free_pages((unsigned long)cpu_addr, get_order(size));
|
||||||
}
|
}
|
||||||
|
@ -174,8 +176,8 @@ static int alpha_noop_set_mask(struct device *dev, u64 mask)
|
||||||
}
|
}
|
||||||
|
|
||||||
struct dma_map_ops alpha_noop_ops = {
|
struct dma_map_ops alpha_noop_ops = {
|
||||||
.alloc_coherent = alpha_noop_alloc_coherent,
|
.alloc = alpha_noop_alloc_coherent,
|
||||||
.free_coherent = alpha_noop_free_coherent,
|
.free = alpha_noop_free_coherent,
|
||||||
.map_page = alpha_noop_map_page,
|
.map_page = alpha_noop_map_page,
|
||||||
.map_sg = alpha_noop_map_sg,
|
.map_sg = alpha_noop_map_sg,
|
||||||
.mapping_error = alpha_noop_mapping_error,
|
.mapping_error = alpha_noop_mapping_error,
|
||||||
|
|
|
@ -434,7 +434,8 @@ static void alpha_pci_unmap_page(struct device *dev, dma_addr_t dma_addr,
|
||||||
else DMA_ADDRP is undefined. */
|
else DMA_ADDRP is undefined. */
|
||||||
|
|
||||||
static void *alpha_pci_alloc_coherent(struct device *dev, size_t size,
|
static void *alpha_pci_alloc_coherent(struct device *dev, size_t size,
|
||||||
dma_addr_t *dma_addrp, gfp_t gfp)
|
dma_addr_t *dma_addrp, gfp_t gfp,
|
||||||
|
struct dma_attrs *attrs)
|
||||||
{
|
{
|
||||||
struct pci_dev *pdev = alpha_gendev_to_pci(dev);
|
struct pci_dev *pdev = alpha_gendev_to_pci(dev);
|
||||||
void *cpu_addr;
|
void *cpu_addr;
|
||||||
|
@ -478,7 +479,8 @@ try_again:
|
||||||
DMA_ADDR past this call are illegal. */
|
DMA_ADDR past this call are illegal. */
|
||||||
|
|
||||||
static void alpha_pci_free_coherent(struct device *dev, size_t size,
|
static void alpha_pci_free_coherent(struct device *dev, size_t size,
|
||||||
void *cpu_addr, dma_addr_t dma_addr)
|
void *cpu_addr, dma_addr_t dma_addr,
|
||||||
|
struct dma_attrs *attrs)
|
||||||
{
|
{
|
||||||
struct pci_dev *pdev = alpha_gendev_to_pci(dev);
|
struct pci_dev *pdev = alpha_gendev_to_pci(dev);
|
||||||
pci_unmap_single(pdev, dma_addr, size, PCI_DMA_BIDIRECTIONAL);
|
pci_unmap_single(pdev, dma_addr, size, PCI_DMA_BIDIRECTIONAL);
|
||||||
|
@ -952,8 +954,8 @@ static int alpha_pci_set_mask(struct device *dev, u64 mask)
|
||||||
}
|
}
|
||||||
|
|
||||||
struct dma_map_ops alpha_pci_ops = {
|
struct dma_map_ops alpha_pci_ops = {
|
||||||
.alloc_coherent = alpha_pci_alloc_coherent,
|
.alloc = alpha_pci_alloc_coherent,
|
||||||
.free_coherent = alpha_pci_free_coherent,
|
.free = alpha_pci_free_coherent,
|
||||||
.map_page = alpha_pci_map_page,
|
.map_page = alpha_pci_map_page,
|
||||||
.unmap_page = alpha_pci_unmap_page,
|
.unmap_page = alpha_pci_unmap_page,
|
||||||
.map_sg = alpha_pci_map_sg,
|
.map_sg = alpha_pci_map_sg,
|
||||||
|
|
|
@ -120,12 +120,13 @@ SYSCALL_DEFINE5(rt_sigaction, int, sig, const struct sigaction __user *, act,
|
||||||
*/
|
*/
|
||||||
SYSCALL_DEFINE1(sigsuspend, old_sigset_t, mask)
|
SYSCALL_DEFINE1(sigsuspend, old_sigset_t, mask)
|
||||||
{
|
{
|
||||||
mask &= _BLOCKABLE;
|
sigset_t blocked;
|
||||||
spin_lock_irq(¤t->sighand->siglock);
|
|
||||||
current->saved_sigmask = current->blocked;
|
current->saved_sigmask = current->blocked;
|
||||||
siginitset(¤t->blocked, mask);
|
|
||||||
recalc_sigpending();
|
mask &= _BLOCKABLE;
|
||||||
spin_unlock_irq(¤t->sighand->siglock);
|
siginitset(&blocked, mask);
|
||||||
|
set_current_blocked(&blocked);
|
||||||
|
|
||||||
current->state = TASK_INTERRUPTIBLE;
|
current->state = TASK_INTERRUPTIBLE;
|
||||||
schedule();
|
schedule();
|
||||||
|
@ -238,10 +239,7 @@ do_sigreturn(struct sigcontext __user *sc, struct pt_regs *regs,
|
||||||
goto give_sigsegv;
|
goto give_sigsegv;
|
||||||
|
|
||||||
sigdelsetmask(&set, ~_BLOCKABLE);
|
sigdelsetmask(&set, ~_BLOCKABLE);
|
||||||
spin_lock_irq(¤t->sighand->siglock);
|
set_current_blocked(&set);
|
||||||
current->blocked = set;
|
|
||||||
recalc_sigpending();
|
|
||||||
spin_unlock_irq(¤t->sighand->siglock);
|
|
||||||
|
|
||||||
if (restore_sigcontext(sc, regs, sw))
|
if (restore_sigcontext(sc, regs, sw))
|
||||||
goto give_sigsegv;
|
goto give_sigsegv;
|
||||||
|
@ -276,10 +274,7 @@ do_rt_sigreturn(struct rt_sigframe __user *frame, struct pt_regs *regs,
|
||||||
goto give_sigsegv;
|
goto give_sigsegv;
|
||||||
|
|
||||||
sigdelsetmask(&set, ~_BLOCKABLE);
|
sigdelsetmask(&set, ~_BLOCKABLE);
|
||||||
spin_lock_irq(¤t->sighand->siglock);
|
set_current_blocked(&set);
|
||||||
current->blocked = set;
|
|
||||||
recalc_sigpending();
|
|
||||||
spin_unlock_irq(¤t->sighand->siglock);
|
|
||||||
|
|
||||||
if (restore_sigcontext(&frame->uc.uc_mcontext, regs, sw))
|
if (restore_sigcontext(&frame->uc.uc_mcontext, regs, sw))
|
||||||
goto give_sigsegv;
|
goto give_sigsegv;
|
||||||
|
@ -501,14 +496,8 @@ handle_signal(int sig, struct k_sigaction *ka, siginfo_t *info,
|
||||||
else
|
else
|
||||||
ret = setup_frame(sig, ka, oldset, regs, sw);
|
ret = setup_frame(sig, ka, oldset, regs, sw);
|
||||||
|
|
||||||
if (ret == 0) {
|
if (ret == 0)
|
||||||
spin_lock_irq(¤t->sighand->siglock);
|
block_sigmask(ka, sig);
|
||||||
sigorsets(¤t->blocked,¤t->blocked,&ka->sa.sa_mask);
|
|
||||||
if (!(ka->sa.sa_flags & SA_NODEFER))
|
|
||||||
sigaddset(¤t->blocked,sig);
|
|
||||||
recalc_sigpending();
|
|
||||||
spin_unlock_irq(¤t->sighand->siglock);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
|
@ -450,7 +450,7 @@ setup_smp(void)
|
||||||
smp_num_probed = 1;
|
smp_num_probed = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
printk(KERN_INFO "SMP: %d CPUs probed -- cpu_present_map = %lx\n",
|
printk(KERN_INFO "SMP: %d CPUs probed -- cpu_present_mask = %lx\n",
|
||||||
smp_num_probed, cpumask_bits(cpu_present_mask)[0]);
|
smp_num_probed, cpumask_bits(cpu_present_mask)[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -338,6 +338,7 @@ config ARCH_AT91
|
||||||
select HAVE_CLK
|
select HAVE_CLK
|
||||||
select CLKDEV_LOOKUP
|
select CLKDEV_LOOKUP
|
||||||
select IRQ_DOMAIN
|
select IRQ_DOMAIN
|
||||||
|
select NEED_MACH_IO_H if PCCARD
|
||||||
help
|
help
|
||||||
This enables support for systems based on the Atmel AT91RM9200,
|
This enables support for systems based on the Atmel AT91RM9200,
|
||||||
AT91SAM9 processors.
|
AT91SAM9 processors.
|
||||||
|
|
|
@ -77,6 +77,8 @@ int atags_to_fdt(void *atag_list, void *fdt, int total_space)
|
||||||
} else if (atag->hdr.tag == ATAG_MEM) {
|
} else if (atag->hdr.tag == ATAG_MEM) {
|
||||||
if (memcount >= sizeof(mem_reg_property)/4)
|
if (memcount >= sizeof(mem_reg_property)/4)
|
||||||
continue;
|
continue;
|
||||||
|
if (!atag->u.mem.size)
|
||||||
|
continue;
|
||||||
mem_reg_property[memcount++] = cpu_to_fdt32(atag->u.mem.start);
|
mem_reg_property[memcount++] = cpu_to_fdt32(atag->u.mem.start);
|
||||||
mem_reg_property[memcount++] = cpu_to_fdt32(atag->u.mem.size);
|
mem_reg_property[memcount++] = cpu_to_fdt32(atag->u.mem.size);
|
||||||
} else if (atag->hdr.tag == ATAG_INITRD2) {
|
} else if (atag->hdr.tag == ATAG_INITRD2) {
|
||||||
|
|
|
@ -273,7 +273,7 @@ restart: adr r0, LC0
|
||||||
add r0, r0, #0x100
|
add r0, r0, #0x100
|
||||||
mov r1, r6
|
mov r1, r6
|
||||||
sub r2, sp, r6
|
sub r2, sp, r6
|
||||||
blne atags_to_fdt
|
bleq atags_to_fdt
|
||||||
|
|
||||||
ldmfd sp!, {r0-r3, ip, lr}
|
ldmfd sp!, {r0-r3, ip, lr}
|
||||||
sub sp, sp, #0x10000
|
sub sp, sp, #0x10000
|
||||||
|
|
|
@ -35,7 +35,7 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
memory@20000000 {
|
memory {
|
||||||
reg = <0x20000000 0x08000000>;
|
reg = <0x20000000 0x08000000>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -55,7 +55,6 @@
|
||||||
#interrupt-cells = <2>;
|
#interrupt-cells = <2>;
|
||||||
compatible = "atmel,at91rm9200-aic";
|
compatible = "atmel,at91rm9200-aic";
|
||||||
interrupt-controller;
|
interrupt-controller;
|
||||||
interrupt-parent;
|
|
||||||
reg = <0xfffff000 0x200>;
|
reg = <0xfffff000 0x200>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -37,8 +37,8 @@
|
||||||
usb0: ohci@00600000 {
|
usb0: ohci@00600000 {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
num-ports = <2>;
|
num-ports = <2>;
|
||||||
atmel,vbus-gpio = <&pioD 19 0
|
atmel,vbus-gpio = <&pioD 19 1
|
||||||
&pioD 20 0
|
&pioD 20 1
|
||||||
>;
|
>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -36,7 +36,7 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
memory@70000000 {
|
memory {
|
||||||
reg = <0x70000000 0x10000000>;
|
reg = <0x70000000 0x10000000>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -56,7 +56,6 @@
|
||||||
#interrupt-cells = <2>;
|
#interrupt-cells = <2>;
|
||||||
compatible = "atmel,at91rm9200-aic";
|
compatible = "atmel,at91rm9200-aic";
|
||||||
interrupt-controller;
|
interrupt-controller;
|
||||||
interrupt-parent;
|
|
||||||
reg = <0xfffff000 0x200>;
|
reg = <0xfffff000 0x200>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
bootargs = "mem=64M console=ttyS0,115200 root=/dev/mtdblock1 rw rootfstype=jffs2";
|
bootargs = "mem=64M console=ttyS0,115200 root=/dev/mtdblock1 rw rootfstype=jffs2";
|
||||||
};
|
};
|
||||||
|
|
||||||
memory@70000000 {
|
memory {
|
||||||
reg = <0x70000000 0x4000000>;
|
reg = <0x70000000 0x4000000>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -73,8 +73,8 @@
|
||||||
usb0: ohci@00700000 {
|
usb0: ohci@00700000 {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
num-ports = <2>;
|
num-ports = <2>;
|
||||||
atmel,vbus-gpio = <&pioD 1 0
|
atmel,vbus-gpio = <&pioD 1 1
|
||||||
&pioD 3 0>;
|
&pioD 3 1>;
|
||||||
};
|
};
|
||||||
|
|
||||||
usb1: ehci@00800000 {
|
usb1: ehci@00800000 {
|
||||||
|
|
|
@ -34,7 +34,7 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
memory@20000000 {
|
memory {
|
||||||
reg = <0x20000000 0x10000000>;
|
reg = <0x20000000 0x10000000>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -54,7 +54,6 @@
|
||||||
#interrupt-cells = <2>;
|
#interrupt-cells = <2>;
|
||||||
compatible = "atmel,at91rm9200-aic";
|
compatible = "atmel,at91rm9200-aic";
|
||||||
interrupt-controller;
|
interrupt-controller;
|
||||||
interrupt-parent;
|
|
||||||
reg = <0xfffff000 0x200>;
|
reg = <0xfffff000 0x200>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -201,8 +200,8 @@
|
||||||
>;
|
>;
|
||||||
atmel,nand-addr-offset = <21>;
|
atmel,nand-addr-offset = <21>;
|
||||||
atmel,nand-cmd-offset = <22>;
|
atmel,nand-cmd-offset = <22>;
|
||||||
gpios = <&pioC 8 0
|
gpios = <&pioD 5 0
|
||||||
&pioC 14 0
|
&pioD 4 0
|
||||||
0
|
0
|
||||||
>;
|
>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
memory@20000000 {
|
memory {
|
||||||
reg = <0x20000000 0x8000000>;
|
reg = <0x20000000 0x8000000>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,6 @@
|
||||||
#interrupt-cells = <3>;
|
#interrupt-cells = <3>;
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
interrupt-controller;
|
interrupt-controller;
|
||||||
interrupt-parent;
|
|
||||||
reg = <0xa0411000 0x1000>,
|
reg = <0xa0411000 0x1000>,
|
||||||
<0xa0410100 0x100>;
|
<0xa0410100 0x100>;
|
||||||
};
|
};
|
||||||
|
|
|
@ -89,7 +89,6 @@
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
interrupt-controller;
|
interrupt-controller;
|
||||||
interrupt-parent;
|
|
||||||
reg = <0xfff11000 0x1000>,
|
reg = <0xfff11000 0x1000>,
|
||||||
<0xfff10100 0x100>;
|
<0xfff10100 0x100>;
|
||||||
};
|
};
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
intc: interrupt-controller@02080000 {
|
intc: interrupt-controller@02080000 {
|
||||||
compatible = "qcom,msm-8660-qgic";
|
compatible = "qcom,msm-8660-qgic";
|
||||||
interrupt-controller;
|
interrupt-controller;
|
||||||
#interrupt-cells = <1>;
|
#interrupt-cells = <3>;
|
||||||
reg = < 0x02080000 0x1000 >,
|
reg = < 0x02080000 0x1000 >,
|
||||||
< 0x02081000 0x1000 >;
|
< 0x02081000 0x1000 >;
|
||||||
};
|
};
|
||||||
|
@ -19,6 +19,6 @@
|
||||||
compatible = "qcom,msm-hsuart", "qcom,msm-uart";
|
compatible = "qcom,msm-hsuart", "qcom,msm-uart";
|
||||||
reg = <0x19c40000 0x1000>,
|
reg = <0x19c40000 0x1000>,
|
||||||
<0x19c00000 0x1000>;
|
<0x19c00000 0x1000>;
|
||||||
interrupts = <195>;
|
interrupts = <0 195 0x0>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
bootargs = "mem=64M console=ttyS0,115200 root=/dev/mtdblock5 rw rootfstype=ubifs";
|
bootargs = "mem=64M console=ttyS0,115200 root=/dev/mtdblock5 rw rootfstype=ubifs";
|
||||||
};
|
};
|
||||||
|
|
||||||
memory@20000000 {
|
memory {
|
||||||
reg = <0x20000000 0x4000000>;
|
reg = <0x20000000 0x4000000>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -427,19 +427,18 @@ int __init vic_of_init(struct device_node *node, struct device_node *parent)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Handle each interrupt in a single VIC. Returns non-zero if we've
|
* Handle each interrupt in a single VIC. Returns non-zero if we've
|
||||||
* handled at least one interrupt. This does a single read of the
|
* handled at least one interrupt. This reads the status register
|
||||||
* status register and handles all interrupts in order from LSB first.
|
* before handling each interrupt, which is necessary given that
|
||||||
|
* handle_IRQ may briefly re-enable interrupts for soft IRQ handling.
|
||||||
*/
|
*/
|
||||||
static int handle_one_vic(struct vic_device *vic, struct pt_regs *regs)
|
static int handle_one_vic(struct vic_device *vic, struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
u32 stat, irq;
|
u32 stat, irq;
|
||||||
int handled = 0;
|
int handled = 0;
|
||||||
|
|
||||||
stat = readl_relaxed(vic->base + VIC_IRQ_STATUS);
|
while ((stat = readl_relaxed(vic->base + VIC_IRQ_STATUS))) {
|
||||||
while (stat) {
|
|
||||||
irq = ffs(stat) - 1;
|
irq = ffs(stat) - 1;
|
||||||
handle_IRQ(irq_find_mapping(vic->domain, irq), regs);
|
handle_IRQ(irq_find_mapping(vic->domain, irq), regs);
|
||||||
stat &= ~(1 << irq);
|
|
||||||
handled = 1;
|
handled = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -112,6 +112,7 @@ CONFIG_WATCHDOG=y
|
||||||
CONFIG_IMX2_WDT=y
|
CONFIG_IMX2_WDT=y
|
||||||
CONFIG_MFD_MC13XXX=y
|
CONFIG_MFD_MC13XXX=y
|
||||||
CONFIG_REGULATOR=y
|
CONFIG_REGULATOR=y
|
||||||
|
CONFIG_REGULATOR_FIXED_VOLTAGE=y
|
||||||
CONFIG_REGULATOR_MC13783=y
|
CONFIG_REGULATOR_MC13783=y
|
||||||
CONFIG_REGULATOR_MC13892=y
|
CONFIG_REGULATOR_MC13892=y
|
||||||
CONFIG_FB=y
|
CONFIG_FB=y
|
||||||
|
|
|
@ -14,6 +14,8 @@ CONFIG_MODULE_FORCE_UNLOAD=y
|
||||||
# CONFIG_BLK_DEV_BSG is not set
|
# CONFIG_BLK_DEV_BSG is not set
|
||||||
CONFIG_BLK_DEV_INTEGRITY=y
|
CONFIG_BLK_DEV_INTEGRITY=y
|
||||||
CONFIG_ARCH_S3C24XX=y
|
CONFIG_ARCH_S3C24XX=y
|
||||||
|
# CONFIG_CPU_S3C2410 is not set
|
||||||
|
CONFIG_CPU_S3C2440=y
|
||||||
CONFIG_S3C_ADC=y
|
CONFIG_S3C_ADC=y
|
||||||
CONFIG_S3C24XX_PWM=y
|
CONFIG_S3C24XX_PWM=y
|
||||||
CONFIG_MACH_MINI2440=y
|
CONFIG_MACH_MINI2440=y
|
||||||
|
|
|
@ -8,8 +8,6 @@ CONFIG_MODULE_UNLOAD=y
|
||||||
# CONFIG_LBDAF is not set
|
# CONFIG_LBDAF is not set
|
||||||
# CONFIG_BLK_DEV_BSG is not set
|
# CONFIG_BLK_DEV_BSG is not set
|
||||||
CONFIG_ARCH_U8500=y
|
CONFIG_ARCH_U8500=y
|
||||||
CONFIG_UX500_SOC_DB5500=y
|
|
||||||
CONFIG_UX500_SOC_DB8500=y
|
|
||||||
CONFIG_MACH_HREFV60=y
|
CONFIG_MACH_HREFV60=y
|
||||||
CONFIG_MACH_SNOWBALL=y
|
CONFIG_MACH_SNOWBALL=y
|
||||||
CONFIG_MACH_U5500=y
|
CONFIG_MACH_U5500=y
|
||||||
|
@ -39,7 +37,6 @@ CONFIG_CAIF=y
|
||||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||||
CONFIG_BLK_DEV_RAM=y
|
CONFIG_BLK_DEV_RAM=y
|
||||||
CONFIG_BLK_DEV_RAM_SIZE=65536
|
CONFIG_BLK_DEV_RAM_SIZE=65536
|
||||||
CONFIG_MISC_DEVICES=y
|
|
||||||
CONFIG_AB8500_PWM=y
|
CONFIG_AB8500_PWM=y
|
||||||
CONFIG_SENSORS_BH1780=y
|
CONFIG_SENSORS_BH1780=y
|
||||||
CONFIG_NETDEVICES=y
|
CONFIG_NETDEVICES=y
|
||||||
|
@ -65,16 +62,18 @@ CONFIG_SERIAL_AMBA_PL011=y
|
||||||
CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
|
CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
|
||||||
CONFIG_HW_RANDOM=y
|
CONFIG_HW_RANDOM=y
|
||||||
CONFIG_HW_RANDOM_NOMADIK=y
|
CONFIG_HW_RANDOM_NOMADIK=y
|
||||||
CONFIG_I2C=y
|
|
||||||
CONFIG_I2C_NOMADIK=y
|
|
||||||
CONFIG_SPI=y
|
CONFIG_SPI=y
|
||||||
CONFIG_SPI_PL022=y
|
CONFIG_SPI_PL022=y
|
||||||
CONFIG_GPIO_STMPE=y
|
CONFIG_GPIO_STMPE=y
|
||||||
CONFIG_GPIO_TC3589X=y
|
CONFIG_GPIO_TC3589X=y
|
||||||
|
CONFIG_POWER_SUPPLY=y
|
||||||
|
CONFIG_AB8500_BM=y
|
||||||
|
CONFIG_AB8500_BATTERY_THERM_ON_BATCTRL=y
|
||||||
CONFIG_MFD_STMPE=y
|
CONFIG_MFD_STMPE=y
|
||||||
CONFIG_MFD_TC3589X=y
|
CONFIG_MFD_TC3589X=y
|
||||||
CONFIG_AB5500_CORE=y
|
CONFIG_AB5500_CORE=y
|
||||||
CONFIG_AB8500_CORE=y
|
CONFIG_AB8500_CORE=y
|
||||||
|
CONFIG_REGULATOR=y
|
||||||
CONFIG_REGULATOR_AB8500=y
|
CONFIG_REGULATOR_AB8500=y
|
||||||
# CONFIG_HID_SUPPORT is not set
|
# CONFIG_HID_SUPPORT is not set
|
||||||
CONFIG_USB_GADGET=y
|
CONFIG_USB_GADGET=y
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
#define __ASM_BARRIER_H
|
#define __ASM_BARRIER_H
|
||||||
|
|
||||||
#ifndef __ASSEMBLY__
|
#ifndef __ASSEMBLY__
|
||||||
|
#include <asm/outercache.h>
|
||||||
|
|
||||||
#define nop() __asm__ __volatile__("mov\tr0,r0\t@ nop\n\t");
|
#define nop() __asm__ __volatile__("mov\tr0,r0\t@ nop\n\t");
|
||||||
|
|
||||||
|
@ -39,7 +40,6 @@
|
||||||
#ifdef CONFIG_ARCH_HAS_BARRIERS
|
#ifdef CONFIG_ARCH_HAS_BARRIERS
|
||||||
#include <mach/barriers.h>
|
#include <mach/barriers.h>
|
||||||
#elif defined(CONFIG_ARM_DMA_MEM_BUFFERABLE) || defined(CONFIG_SMP)
|
#elif defined(CONFIG_ARM_DMA_MEM_BUFFERABLE) || defined(CONFIG_SMP)
|
||||||
#include <asm/outercache.h>
|
|
||||||
#define mb() do { dsb(); outer_sync(); } while (0)
|
#define mb() do { dsb(); outer_sync(); } while (0)
|
||||||
#define rmb() dsb()
|
#define rmb() dsb()
|
||||||
#define wmb() mb()
|
#define wmb() mb()
|
||||||
|
|
|
@ -119,7 +119,7 @@ static inline void __iomem *__typesafe_io(unsigned long addr)
|
||||||
#ifdef CONFIG_NEED_MACH_IO_H
|
#ifdef CONFIG_NEED_MACH_IO_H
|
||||||
#include <mach/io.h>
|
#include <mach/io.h>
|
||||||
#else
|
#else
|
||||||
#define __io(a) ({ (void)(a); __typesafe_io(0); })
|
#define __io(a) __typesafe_io((a) & IO_SPACE_LIMIT)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
#define JUMP_LABEL_NOP "nop"
|
#define JUMP_LABEL_NOP "nop"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static __always_inline bool arch_static_branch(struct jump_label_key *key)
|
static __always_inline bool arch_static_branch(struct static_key *key)
|
||||||
{
|
{
|
||||||
asm goto("1:\n\t"
|
asm goto("1:\n\t"
|
||||||
JUMP_LABEL_NOP "\n\t"
|
JUMP_LABEL_NOP "\n\t"
|
||||||
|
|
|
@ -299,7 +299,6 @@ static inline int pdev_bad_for_parity(struct pci_dev *dev)
|
||||||
*/
|
*/
|
||||||
void pcibios_fixup_bus(struct pci_bus *bus)
|
void pcibios_fixup_bus(struct pci_bus *bus)
|
||||||
{
|
{
|
||||||
struct pci_sys_data *root = bus->sysdata;
|
|
||||||
struct pci_dev *dev;
|
struct pci_dev *dev;
|
||||||
u16 features = PCI_COMMAND_SERR | PCI_COMMAND_PARITY | PCI_COMMAND_FAST_BACK;
|
u16 features = PCI_COMMAND_SERR | PCI_COMMAND_PARITY | PCI_COMMAND_FAST_BACK;
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
#include <linux/bug.h>
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <asm/opcodes.h>
|
#include <asm/opcodes.h>
|
||||||
|
|
||||||
|
|
|
@ -152,7 +152,7 @@ int __kprobes __arch_disarm_kprobe(void *p)
|
||||||
|
|
||||||
void __kprobes arch_disarm_kprobe(struct kprobe *p)
|
void __kprobes arch_disarm_kprobe(struct kprobe *p)
|
||||||
{
|
{
|
||||||
stop_machine(__arch_disarm_kprobe, p, &cpu_online_map);
|
stop_machine(__arch_disarm_kprobe, p, cpu_online_mask);
|
||||||
}
|
}
|
||||||
|
|
||||||
void __kprobes arch_remove_kprobe(struct kprobe *p)
|
void __kprobes arch_remove_kprobe(struct kprobe *p)
|
||||||
|
|
|
@ -256,7 +256,7 @@ static int ptrace_read_user(struct task_struct *tsk, unsigned long off,
|
||||||
{
|
{
|
||||||
unsigned long tmp;
|
unsigned long tmp;
|
||||||
|
|
||||||
if (off & 3 || off >= sizeof(struct user))
|
if (off & 3)
|
||||||
return -EIO;
|
return -EIO;
|
||||||
|
|
||||||
tmp = 0;
|
tmp = 0;
|
||||||
|
@ -268,6 +268,8 @@ static int ptrace_read_user(struct task_struct *tsk, unsigned long off,
|
||||||
tmp = tsk->mm->end_code;
|
tmp = tsk->mm->end_code;
|
||||||
else if (off < sizeof(struct pt_regs))
|
else if (off < sizeof(struct pt_regs))
|
||||||
tmp = get_user_reg(tsk, off >> 2);
|
tmp = get_user_reg(tsk, off >> 2);
|
||||||
|
else if (off >= sizeof(struct user))
|
||||||
|
return -EIO;
|
||||||
|
|
||||||
return put_user(tmp, ret);
|
return put_user(tmp, ret);
|
||||||
}
|
}
|
||||||
|
|
|
@ -523,7 +523,21 @@ int __init arm_add_memory(phys_addr_t start, unsigned long size)
|
||||||
*/
|
*/
|
||||||
size -= start & ~PAGE_MASK;
|
size -= start & ~PAGE_MASK;
|
||||||
bank->start = PAGE_ALIGN(start);
|
bank->start = PAGE_ALIGN(start);
|
||||||
bank->size = size & PAGE_MASK;
|
|
||||||
|
#ifndef CONFIG_LPAE
|
||||||
|
if (bank->start + size < bank->start) {
|
||||||
|
printk(KERN_CRIT "Truncating memory at 0x%08llx to fit in "
|
||||||
|
"32-bit physical address space\n", (long long)start);
|
||||||
|
/*
|
||||||
|
* To ensure bank->start + bank->size is representable in
|
||||||
|
* 32 bits, we use ULONG_MAX as the upper limit rather than 4GB.
|
||||||
|
* This means we lose a page after masking.
|
||||||
|
*/
|
||||||
|
size = ULONG_MAX - bank->start;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
bank->size = size & PAGE_MASK;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check whether this memory region has non-zero size or
|
* Check whether this memory region has non-zero size or
|
||||||
|
|
|
@ -349,7 +349,7 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
|
||||||
* re-initialize the map in platform_smp_prepare_cpus() if
|
* re-initialize the map in platform_smp_prepare_cpus() if
|
||||||
* present != possible (e.g. physical hotplug).
|
* present != possible (e.g. physical hotplug).
|
||||||
*/
|
*/
|
||||||
init_cpu_present(&cpu_possible_map);
|
init_cpu_present(cpu_possible_mask);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Initialise the SCU if there are more than one CPU
|
* Initialise the SCU if there are more than one CPU
|
||||||
|
@ -581,8 +581,9 @@ void smp_send_stop(void)
|
||||||
unsigned long timeout;
|
unsigned long timeout;
|
||||||
|
|
||||||
if (num_online_cpus() > 1) {
|
if (num_online_cpus() > 1) {
|
||||||
cpumask_t mask = cpu_online_map;
|
struct cpumask mask;
|
||||||
cpu_clear(smp_processor_id(), mask);
|
cpumask_copy(&mask, cpu_online_mask);
|
||||||
|
cpumask_clear_cpu(smp_processor_id(), &mask);
|
||||||
|
|
||||||
smp_cross_call(&mask, IPI_CPU_STOP);
|
smp_cross_call(&mask, IPI_CPU_STOP);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1173,7 +1173,6 @@ void __init at91_add_device_serial(void)
|
||||||
printk(KERN_INFO "AT91: No default serial console defined.\n");
|
printk(KERN_INFO "AT91: No default serial console defined.\n");
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
void __init __deprecated at91_init_serial(struct at91_uart_config *config) {}
|
|
||||||
void __init at91_register_uart(unsigned id, unsigned portnr, unsigned pins) {}
|
void __init at91_register_uart(unsigned id, unsigned portnr, unsigned pins) {}
|
||||||
void __init at91_set_serial_console(unsigned portnr) {}
|
void __init at91_set_serial_console(unsigned portnr) {}
|
||||||
void __init at91_add_device_serial(void) {}
|
void __init at91_add_device_serial(void) {}
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
#include <linux/irq.h>
|
#include <linux/irq.h>
|
||||||
#include <linux/clockchips.h>
|
#include <linux/clockchips.h>
|
||||||
|
#include <linux/export.h>
|
||||||
|
|
||||||
#include <asm/mach/time.h>
|
#include <asm/mach/time.h>
|
||||||
|
|
||||||
|
@ -176,6 +177,7 @@ static struct clock_event_device clkevt = {
|
||||||
};
|
};
|
||||||
|
|
||||||
void __iomem *at91_st_base;
|
void __iomem *at91_st_base;
|
||||||
|
EXPORT_SYMBOL_GPL(at91_st_base);
|
||||||
|
|
||||||
void __init at91rm9200_ioremap_st(u32 addr)
|
void __init at91rm9200_ioremap_st(u32 addr)
|
||||||
{
|
{
|
||||||
|
|
|
@ -598,6 +598,9 @@ void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices)
|
||||||
else
|
else
|
||||||
cs_pin = spi1_standard_cs[devices[i].chip_select];
|
cs_pin = spi1_standard_cs[devices[i].chip_select];
|
||||||
|
|
||||||
|
if (!gpio_is_valid(cs_pin))
|
||||||
|
continue;
|
||||||
|
|
||||||
if (devices[i].bus_num == 0)
|
if (devices[i].bus_num == 0)
|
||||||
enable_spi0 = 1;
|
enable_spi0 = 1;
|
||||||
else
|
else
|
||||||
|
|
|
@ -415,6 +415,9 @@ void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices)
|
||||||
else
|
else
|
||||||
cs_pin = spi1_standard_cs[devices[i].chip_select];
|
cs_pin = spi1_standard_cs[devices[i].chip_select];
|
||||||
|
|
||||||
|
if (!gpio_is_valid(cs_pin))
|
||||||
|
continue;
|
||||||
|
|
||||||
if (devices[i].bus_num == 0)
|
if (devices[i].bus_num == 0)
|
||||||
enable_spi0 = 1;
|
enable_spi0 = 1;
|
||||||
else
|
else
|
||||||
|
|
|
@ -72,7 +72,8 @@ void __init at91_add_device_usbh(struct at91_usbh_data *data)
|
||||||
/* Enable VBus control for UHP ports */
|
/* Enable VBus control for UHP ports */
|
||||||
for (i = 0; i < data->ports; i++) {
|
for (i = 0; i < data->ports; i++) {
|
||||||
if (gpio_is_valid(data->vbus_pin[i]))
|
if (gpio_is_valid(data->vbus_pin[i]))
|
||||||
at91_set_gpio_output(data->vbus_pin[i], 0);
|
at91_set_gpio_output(data->vbus_pin[i],
|
||||||
|
data->vbus_pin_active_low[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Enable overcurrent notification */
|
/* Enable overcurrent notification */
|
||||||
|
@ -671,6 +672,9 @@ void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices)
|
||||||
else
|
else
|
||||||
cs_pin = spi1_standard_cs[devices[i].chip_select];
|
cs_pin = spi1_standard_cs[devices[i].chip_select];
|
||||||
|
|
||||||
|
if (!gpio_is_valid(cs_pin))
|
||||||
|
continue;
|
||||||
|
|
||||||
if (devices[i].bus_num == 0)
|
if (devices[i].bus_num == 0)
|
||||||
enable_spi0 = 1;
|
enable_spi0 = 1;
|
||||||
else
|
else
|
||||||
|
|
|
@ -127,12 +127,13 @@ void __init at91_add_device_usbh_ohci(struct at91_usbh_data *data)
|
||||||
/* Enable VBus control for UHP ports */
|
/* Enable VBus control for UHP ports */
|
||||||
for (i = 0; i < data->ports; i++) {
|
for (i = 0; i < data->ports; i++) {
|
||||||
if (gpio_is_valid(data->vbus_pin[i]))
|
if (gpio_is_valid(data->vbus_pin[i]))
|
||||||
at91_set_gpio_output(data->vbus_pin[i], 0);
|
at91_set_gpio_output(data->vbus_pin[i],
|
||||||
|
data->vbus_pin_active_low[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Enable overcurrent notification */
|
/* Enable overcurrent notification */
|
||||||
for (i = 0; i < data->ports; i++) {
|
for (i = 0; i < data->ports; i++) {
|
||||||
if (data->overcurrent_pin[i])
|
if (gpio_is_valid(data->overcurrent_pin[i]))
|
||||||
at91_set_gpio_input(data->overcurrent_pin[i], 1);
|
at91_set_gpio_input(data->overcurrent_pin[i], 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -188,7 +189,8 @@ void __init at91_add_device_usbh_ehci(struct at91_usbh_data *data)
|
||||||
/* Enable VBus control for UHP ports */
|
/* Enable VBus control for UHP ports */
|
||||||
for (i = 0; i < data->ports; i++) {
|
for (i = 0; i < data->ports; i++) {
|
||||||
if (gpio_is_valid(data->vbus_pin[i]))
|
if (gpio_is_valid(data->vbus_pin[i]))
|
||||||
at91_set_gpio_output(data->vbus_pin[i], 0);
|
at91_set_gpio_output(data->vbus_pin[i],
|
||||||
|
data->vbus_pin_active_low[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
usbh_ehci_data = *data;
|
usbh_ehci_data = *data;
|
||||||
|
@ -785,6 +787,9 @@ void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices)
|
||||||
else
|
else
|
||||||
cs_pin = spi1_standard_cs[devices[i].chip_select];
|
cs_pin = spi1_standard_cs[devices[i].chip_select];
|
||||||
|
|
||||||
|
if (!gpio_is_valid(cs_pin))
|
||||||
|
continue;
|
||||||
|
|
||||||
if (devices[i].bus_num == 0)
|
if (devices[i].bus_num == 0)
|
||||||
enable_spi0 = 1;
|
enable_spi0 = 1;
|
||||||
else
|
else
|
||||||
|
|
|
@ -419,6 +419,9 @@ void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices)
|
||||||
else
|
else
|
||||||
cs_pin = spi_standard_cs[devices[i].chip_select];
|
cs_pin = spi_standard_cs[devices[i].chip_select];
|
||||||
|
|
||||||
|
if (!gpio_is_valid(cs_pin))
|
||||||
|
continue;
|
||||||
|
|
||||||
/* enable chip-select pin */
|
/* enable chip-select pin */
|
||||||
at91_set_gpio_output(cs_pin, 1);
|
at91_set_gpio_output(cs_pin, 1);
|
||||||
|
|
||||||
|
|
|
@ -223,6 +223,8 @@ static struct clk_lookup periph_clocks_lookups[] = {
|
||||||
CLKDEV_CON_DEV_ID("usart", "f8028000.serial", &usart3_clk),
|
CLKDEV_CON_DEV_ID("usart", "f8028000.serial", &usart3_clk),
|
||||||
CLKDEV_CON_DEV_ID("t0_clk", "f8008000.timer", &tcb0_clk),
|
CLKDEV_CON_DEV_ID("t0_clk", "f8008000.timer", &tcb0_clk),
|
||||||
CLKDEV_CON_DEV_ID("t0_clk", "f800c000.timer", &tcb0_clk),
|
CLKDEV_CON_DEV_ID("t0_clk", "f800c000.timer", &tcb0_clk),
|
||||||
|
CLKDEV_CON_DEV_ID("dma_clk", "ffffec00.dma-controller", &dma0_clk),
|
||||||
|
CLKDEV_CON_DEV_ID("dma_clk", "ffffee00.dma-controller", &dma1_clk),
|
||||||
CLKDEV_CON_ID("pioA", &pioAB_clk),
|
CLKDEV_CON_ID("pioA", &pioAB_clk),
|
||||||
CLKDEV_CON_ID("pioB", &pioAB_clk),
|
CLKDEV_CON_ID("pioB", &pioAB_clk),
|
||||||
CLKDEV_CON_ID("pioC", &pioCD_clk),
|
CLKDEV_CON_ID("pioC", &pioCD_clk),
|
||||||
|
|
|
@ -117,7 +117,7 @@ static struct i2c_board_info __initdata ek_i2c_devices[] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
#define EK_FLASH_BASE AT91_CHIPSELECT_0
|
#define EK_FLASH_BASE AT91_CHIPSELECT_0
|
||||||
#define EK_FLASH_SIZE SZ_2M
|
#define EK_FLASH_SIZE SZ_8M
|
||||||
|
|
||||||
static struct physmap_flash_data ek_flash_data = {
|
static struct physmap_flash_data ek_flash_data = {
|
||||||
.width = 2,
|
.width = 2,
|
||||||
|
|
|
@ -85,8 +85,6 @@ static struct resource dm9000_resource[] = {
|
||||||
.flags = IORESOURCE_MEM
|
.flags = IORESOURCE_MEM
|
||||||
},
|
},
|
||||||
[2] = {
|
[2] = {
|
||||||
.start = AT91_PIN_PC11,
|
|
||||||
.end = AT91_PIN_PC11,
|
|
||||||
.flags = IORESOURCE_IRQ
|
.flags = IORESOURCE_IRQ
|
||||||
| IORESOURCE_IRQ_LOWEDGE | IORESOURCE_IRQ_HIGHEDGE,
|
| IORESOURCE_IRQ_LOWEDGE | IORESOURCE_IRQ_HIGHEDGE,
|
||||||
}
|
}
|
||||||
|
@ -130,6 +128,8 @@ static struct sam9_smc_config __initdata dm9000_smc_config = {
|
||||||
|
|
||||||
static void __init ek_add_device_dm9000(void)
|
static void __init ek_add_device_dm9000(void)
|
||||||
{
|
{
|
||||||
|
struct resource *r = &dm9000_resource[2];
|
||||||
|
|
||||||
/* Configure chip-select 2 (DM9000) */
|
/* Configure chip-select 2 (DM9000) */
|
||||||
sam9_smc_configure(0, 2, &dm9000_smc_config);
|
sam9_smc_configure(0, 2, &dm9000_smc_config);
|
||||||
|
|
||||||
|
@ -139,6 +139,7 @@ static void __init ek_add_device_dm9000(void)
|
||||||
/* Configure Interrupt pin as input, no pull-up */
|
/* Configure Interrupt pin as input, no pull-up */
|
||||||
at91_set_gpio_input(AT91_PIN_PC11, 0);
|
at91_set_gpio_input(AT91_PIN_PC11, 0);
|
||||||
|
|
||||||
|
r->start = r->end = gpio_to_irq(AT91_PIN_PC11);
|
||||||
platform_device_register(&dm9000_device);
|
platform_device_register(&dm9000_device);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -74,6 +74,7 @@ static void __init ek_init_early(void)
|
||||||
static struct at91_usbh_data __initdata ek_usbh_data = {
|
static struct at91_usbh_data __initdata ek_usbh_data = {
|
||||||
.ports = 2,
|
.ports = 2,
|
||||||
.vbus_pin = { AT91_PIN_PA24, AT91_PIN_PA21 },
|
.vbus_pin = { AT91_PIN_PA24, AT91_PIN_PA21 },
|
||||||
|
.vbus_pin_active_low = {1, 1},
|
||||||
.overcurrent_pin= {-EINVAL, -EINVAL},
|
.overcurrent_pin= {-EINVAL, -EINVAL},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -71,6 +71,7 @@ static void __init ek_init_early(void)
|
||||||
static struct at91_usbh_data __initdata ek_usbh_hs_data = {
|
static struct at91_usbh_data __initdata ek_usbh_hs_data = {
|
||||||
.ports = 2,
|
.ports = 2,
|
||||||
.vbus_pin = {AT91_PIN_PD1, AT91_PIN_PD3},
|
.vbus_pin = {AT91_PIN_PD1, AT91_PIN_PD3},
|
||||||
|
.vbus_pin_active_low = {1, 1},
|
||||||
.overcurrent_pin= {-EINVAL, -EINVAL},
|
.overcurrent_pin= {-EINVAL, -EINVAL},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -35,6 +35,7 @@
|
||||||
#include "generic.h"
|
#include "generic.h"
|
||||||
|
|
||||||
void __iomem *at91_pmc_base;
|
void __iomem *at91_pmc_base;
|
||||||
|
EXPORT_SYMBOL_GPL(at91_pmc_base);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* There's a lot more which can be done with clocks, including cpufreq
|
* There's a lot more which can be done with clocks, including cpufreq
|
||||||
|
|
|
@ -25,7 +25,7 @@ extern void __iomem *at91_pmc_base;
|
||||||
#define at91_pmc_write(field, value) \
|
#define at91_pmc_write(field, value) \
|
||||||
__raw_writel(value, at91_pmc_base + field)
|
__raw_writel(value, at91_pmc_base + field)
|
||||||
#else
|
#else
|
||||||
.extern at91_aic_base
|
.extern at91_pmc_base
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define AT91_PMC_SCER 0x00 /* System Clock Enable Register */
|
#define AT91_PMC_SCER 0x00 /* System Clock Enable Register */
|
||||||
|
|
|
@ -86,14 +86,15 @@ extern void __init at91_add_device_mci(short mmc_id, struct mci_platform_data *d
|
||||||
extern void __init at91_add_device_eth(struct macb_platform_data *data);
|
extern void __init at91_add_device_eth(struct macb_platform_data *data);
|
||||||
|
|
||||||
/* USB Host */
|
/* USB Host */
|
||||||
|
#define AT91_MAX_USBH_PORTS 3
|
||||||
struct at91_usbh_data {
|
struct at91_usbh_data {
|
||||||
u8 ports; /* number of ports on root hub */
|
int vbus_pin[AT91_MAX_USBH_PORTS]; /* port power-control pin */
|
||||||
int vbus_pin[2]; /* port power-control pin */
|
int overcurrent_pin[AT91_MAX_USBH_PORTS];
|
||||||
u8 vbus_pin_active_low[2];
|
u8 ports; /* number of ports on root hub */
|
||||||
u8 overcurrent_supported;
|
u8 overcurrent_supported;
|
||||||
int overcurrent_pin[2];
|
u8 vbus_pin_active_low[AT91_MAX_USBH_PORTS];
|
||||||
u8 overcurrent_status[2];
|
u8 overcurrent_status[AT91_MAX_USBH_PORTS];
|
||||||
u8 overcurrent_changed[2];
|
u8 overcurrent_changed[AT91_MAX_USBH_PORTS];
|
||||||
};
|
};
|
||||||
extern void __init at91_add_device_usbh(struct at91_usbh_data *data);
|
extern void __init at91_add_device_usbh(struct at91_usbh_data *data);
|
||||||
extern void __init at91_add_device_usbh_ohci(struct at91_usbh_data *data);
|
extern void __init at91_add_device_usbh_ohci(struct at91_usbh_data *data);
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
/*
|
||||||
|
* arch/arm/mach-at91/include/mach/io.h
|
||||||
|
*
|
||||||
|
* Copyright (C) 2003 SAN People
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __ASM_ARCH_IO_H
|
||||||
|
#define __ASM_ARCH_IO_H
|
||||||
|
|
||||||
|
#define IO_SPACE_LIMIT 0xFFFFFFFF
|
||||||
|
#define __io(a) __typesafe_io(a)
|
||||||
|
|
||||||
|
#endif
|
|
@ -54,6 +54,7 @@ void __init at91_init_interrupts(unsigned int *priority)
|
||||||
}
|
}
|
||||||
|
|
||||||
void __iomem *at91_ramc_base[2];
|
void __iomem *at91_ramc_base[2];
|
||||||
|
EXPORT_SYMBOL_GPL(at91_ramc_base);
|
||||||
|
|
||||||
void __init at91_ioremap_ramc(int id, u32 addr, u32 size)
|
void __init at91_ioremap_ramc(int id, u32 addr, u32 size)
|
||||||
{
|
{
|
||||||
|
@ -292,6 +293,7 @@ void __init at91_ioremap_rstc(u32 base_addr)
|
||||||
}
|
}
|
||||||
|
|
||||||
void __iomem *at91_matrix_base;
|
void __iomem *at91_matrix_base;
|
||||||
|
EXPORT_SYMBOL_GPL(at91_matrix_base);
|
||||||
|
|
||||||
void __init at91_ioremap_matrix(u32 base_addr)
|
void __init at91_ioremap_matrix(u32 base_addr)
|
||||||
{
|
{
|
||||||
|
|
|
@ -52,8 +52,8 @@
|
||||||
#include <mach/csp/chipcHw_inline.h>
|
#include <mach/csp/chipcHw_inline.h>
|
||||||
#include <mach/csp/tmrHw_reg.h>
|
#include <mach/csp/tmrHw_reg.h>
|
||||||
|
|
||||||
static AMBA_APB_DEVICE(uartA, "uarta", MM_ADDR_IO_UARTA, { IRQ_UARTA }, NULL);
|
static AMBA_APB_DEVICE(uartA, "uartA", 0, MM_ADDR_IO_UARTA, {IRQ_UARTA}, NULL);
|
||||||
static AMBA_APB_DEVICE(uartB, "uartb", MM_ADDR_IO_UARTB, { IRQ_UARTB }, NULL);
|
static AMBA_APB_DEVICE(uartB, "uartB", 0, MM_ADDR_IO_UARTB, {IRQ_UARTB}, NULL);
|
||||||
|
|
||||||
static struct clk pll1_clk = {
|
static struct clk pll1_clk = {
|
||||||
.name = "PLL1",
|
.name = "PLL1",
|
||||||
|
|
|
@ -368,6 +368,7 @@ comment "Flattened Device Tree based board for EXYNOS SoCs"
|
||||||
|
|
||||||
config MACH_EXYNOS4_DT
|
config MACH_EXYNOS4_DT
|
||||||
bool "Samsung Exynos4 Machine using device tree"
|
bool "Samsung Exynos4 Machine using device tree"
|
||||||
|
depends on ARCH_EXYNOS4
|
||||||
select CPU_EXYNOS4210
|
select CPU_EXYNOS4210
|
||||||
select USE_OF
|
select USE_OF
|
||||||
select ARM_AMBA
|
select ARM_AMBA
|
||||||
|
@ -380,6 +381,7 @@ config MACH_EXYNOS4_DT
|
||||||
|
|
||||||
config MACH_EXYNOS5_DT
|
config MACH_EXYNOS5_DT
|
||||||
bool "SAMSUNG EXYNOS5 Machine using device tree"
|
bool "SAMSUNG EXYNOS5 Machine using device tree"
|
||||||
|
depends on ARCH_EXYNOS5
|
||||||
select SOC_EXYNOS5250
|
select SOC_EXYNOS5250
|
||||||
select USE_OF
|
select USE_OF
|
||||||
select ARM_AMBA
|
select ARM_AMBA
|
||||||
|
|
|
@ -497,25 +497,25 @@ static struct clk exynos4_init_clocks_off[] = {
|
||||||
.ctrlbit = (1 << 3),
|
.ctrlbit = (1 << 3),
|
||||||
}, {
|
}, {
|
||||||
.name = "hsmmc",
|
.name = "hsmmc",
|
||||||
.devname = "s3c-sdhci.0",
|
.devname = "exynos4-sdhci.0",
|
||||||
.parent = &exynos4_clk_aclk_133.clk,
|
.parent = &exynos4_clk_aclk_133.clk,
|
||||||
.enable = exynos4_clk_ip_fsys_ctrl,
|
.enable = exynos4_clk_ip_fsys_ctrl,
|
||||||
.ctrlbit = (1 << 5),
|
.ctrlbit = (1 << 5),
|
||||||
}, {
|
}, {
|
||||||
.name = "hsmmc",
|
.name = "hsmmc",
|
||||||
.devname = "s3c-sdhci.1",
|
.devname = "exynos4-sdhci.1",
|
||||||
.parent = &exynos4_clk_aclk_133.clk,
|
.parent = &exynos4_clk_aclk_133.clk,
|
||||||
.enable = exynos4_clk_ip_fsys_ctrl,
|
.enable = exynos4_clk_ip_fsys_ctrl,
|
||||||
.ctrlbit = (1 << 6),
|
.ctrlbit = (1 << 6),
|
||||||
}, {
|
}, {
|
||||||
.name = "hsmmc",
|
.name = "hsmmc",
|
||||||
.devname = "s3c-sdhci.2",
|
.devname = "exynos4-sdhci.2",
|
||||||
.parent = &exynos4_clk_aclk_133.clk,
|
.parent = &exynos4_clk_aclk_133.clk,
|
||||||
.enable = exynos4_clk_ip_fsys_ctrl,
|
.enable = exynos4_clk_ip_fsys_ctrl,
|
||||||
.ctrlbit = (1 << 7),
|
.ctrlbit = (1 << 7),
|
||||||
}, {
|
}, {
|
||||||
.name = "hsmmc",
|
.name = "hsmmc",
|
||||||
.devname = "s3c-sdhci.3",
|
.devname = "exynos4-sdhci.3",
|
||||||
.parent = &exynos4_clk_aclk_133.clk,
|
.parent = &exynos4_clk_aclk_133.clk,
|
||||||
.enable = exynos4_clk_ip_fsys_ctrl,
|
.enable = exynos4_clk_ip_fsys_ctrl,
|
||||||
.ctrlbit = (1 << 8),
|
.ctrlbit = (1 << 8),
|
||||||
|
@ -1202,7 +1202,7 @@ static struct clksrc_clk exynos4_clk_sclk_uart3 = {
|
||||||
static struct clksrc_clk exynos4_clk_sclk_mmc0 = {
|
static struct clksrc_clk exynos4_clk_sclk_mmc0 = {
|
||||||
.clk = {
|
.clk = {
|
||||||
.name = "sclk_mmc",
|
.name = "sclk_mmc",
|
||||||
.devname = "s3c-sdhci.0",
|
.devname = "exynos4-sdhci.0",
|
||||||
.parent = &exynos4_clk_dout_mmc0.clk,
|
.parent = &exynos4_clk_dout_mmc0.clk,
|
||||||
.enable = exynos4_clksrc_mask_fsys_ctrl,
|
.enable = exynos4_clksrc_mask_fsys_ctrl,
|
||||||
.ctrlbit = (1 << 0),
|
.ctrlbit = (1 << 0),
|
||||||
|
@ -1213,7 +1213,7 @@ static struct clksrc_clk exynos4_clk_sclk_mmc0 = {
|
||||||
static struct clksrc_clk exynos4_clk_sclk_mmc1 = {
|
static struct clksrc_clk exynos4_clk_sclk_mmc1 = {
|
||||||
.clk = {
|
.clk = {
|
||||||
.name = "sclk_mmc",
|
.name = "sclk_mmc",
|
||||||
.devname = "s3c-sdhci.1",
|
.devname = "exynos4-sdhci.1",
|
||||||
.parent = &exynos4_clk_dout_mmc1.clk,
|
.parent = &exynos4_clk_dout_mmc1.clk,
|
||||||
.enable = exynos4_clksrc_mask_fsys_ctrl,
|
.enable = exynos4_clksrc_mask_fsys_ctrl,
|
||||||
.ctrlbit = (1 << 4),
|
.ctrlbit = (1 << 4),
|
||||||
|
@ -1224,7 +1224,7 @@ static struct clksrc_clk exynos4_clk_sclk_mmc1 = {
|
||||||
static struct clksrc_clk exynos4_clk_sclk_mmc2 = {
|
static struct clksrc_clk exynos4_clk_sclk_mmc2 = {
|
||||||
.clk = {
|
.clk = {
|
||||||
.name = "sclk_mmc",
|
.name = "sclk_mmc",
|
||||||
.devname = "s3c-sdhci.2",
|
.devname = "exynos4-sdhci.2",
|
||||||
.parent = &exynos4_clk_dout_mmc2.clk,
|
.parent = &exynos4_clk_dout_mmc2.clk,
|
||||||
.enable = exynos4_clksrc_mask_fsys_ctrl,
|
.enable = exynos4_clksrc_mask_fsys_ctrl,
|
||||||
.ctrlbit = (1 << 8),
|
.ctrlbit = (1 << 8),
|
||||||
|
@ -1235,7 +1235,7 @@ static struct clksrc_clk exynos4_clk_sclk_mmc2 = {
|
||||||
static struct clksrc_clk exynos4_clk_sclk_mmc3 = {
|
static struct clksrc_clk exynos4_clk_sclk_mmc3 = {
|
||||||
.clk = {
|
.clk = {
|
||||||
.name = "sclk_mmc",
|
.name = "sclk_mmc",
|
||||||
.devname = "s3c-sdhci.3",
|
.devname = "exynos4-sdhci.3",
|
||||||
.parent = &exynos4_clk_dout_mmc3.clk,
|
.parent = &exynos4_clk_dout_mmc3.clk,
|
||||||
.enable = exynos4_clksrc_mask_fsys_ctrl,
|
.enable = exynos4_clksrc_mask_fsys_ctrl,
|
||||||
.ctrlbit = (1 << 12),
|
.ctrlbit = (1 << 12),
|
||||||
|
@ -1340,10 +1340,10 @@ static struct clk_lookup exynos4_clk_lookup[] = {
|
||||||
CLKDEV_INIT("exynos4210-uart.1", "clk_uart_baud0", &exynos4_clk_sclk_uart1.clk),
|
CLKDEV_INIT("exynos4210-uart.1", "clk_uart_baud0", &exynos4_clk_sclk_uart1.clk),
|
||||||
CLKDEV_INIT("exynos4210-uart.2", "clk_uart_baud0", &exynos4_clk_sclk_uart2.clk),
|
CLKDEV_INIT("exynos4210-uart.2", "clk_uart_baud0", &exynos4_clk_sclk_uart2.clk),
|
||||||
CLKDEV_INIT("exynos4210-uart.3", "clk_uart_baud0", &exynos4_clk_sclk_uart3.clk),
|
CLKDEV_INIT("exynos4210-uart.3", "clk_uart_baud0", &exynos4_clk_sclk_uart3.clk),
|
||||||
CLKDEV_INIT("s3c-sdhci.0", "mmc_busclk.2", &exynos4_clk_sclk_mmc0.clk),
|
CLKDEV_INIT("exynos4-sdhci.0", "mmc_busclk.2", &exynos4_clk_sclk_mmc0.clk),
|
||||||
CLKDEV_INIT("s3c-sdhci.1", "mmc_busclk.2", &exynos4_clk_sclk_mmc1.clk),
|
CLKDEV_INIT("exynos4-sdhci.1", "mmc_busclk.2", &exynos4_clk_sclk_mmc1.clk),
|
||||||
CLKDEV_INIT("s3c-sdhci.2", "mmc_busclk.2", &exynos4_clk_sclk_mmc2.clk),
|
CLKDEV_INIT("exynos4-sdhci.2", "mmc_busclk.2", &exynos4_clk_sclk_mmc2.clk),
|
||||||
CLKDEV_INIT("s3c-sdhci.3", "mmc_busclk.2", &exynos4_clk_sclk_mmc3.clk),
|
CLKDEV_INIT("exynos4-sdhci.3", "mmc_busclk.2", &exynos4_clk_sclk_mmc3.clk),
|
||||||
CLKDEV_INIT("exynos4-fb.0", "lcd", &exynos4_clk_fimd0),
|
CLKDEV_INIT("exynos4-fb.0", "lcd", &exynos4_clk_fimd0),
|
||||||
CLKDEV_INIT("dma-pl330.0", "apb_pclk", &exynos4_clk_pdma0),
|
CLKDEV_INIT("dma-pl330.0", "apb_pclk", &exynos4_clk_pdma0),
|
||||||
CLKDEV_INIT("dma-pl330.1", "apb_pclk", &exynos4_clk_pdma1),
|
CLKDEV_INIT("dma-pl330.1", "apb_pclk", &exynos4_clk_pdma1),
|
||||||
|
|
|
@ -455,25 +455,25 @@ static struct clk exynos5_init_clocks_off[] = {
|
||||||
.ctrlbit = (1 << 20),
|
.ctrlbit = (1 << 20),
|
||||||
}, {
|
}, {
|
||||||
.name = "hsmmc",
|
.name = "hsmmc",
|
||||||
.devname = "s3c-sdhci.0",
|
.devname = "exynos4-sdhci.0",
|
||||||
.parent = &exynos5_clk_aclk_200.clk,
|
.parent = &exynos5_clk_aclk_200.clk,
|
||||||
.enable = exynos5_clk_ip_fsys_ctrl,
|
.enable = exynos5_clk_ip_fsys_ctrl,
|
||||||
.ctrlbit = (1 << 12),
|
.ctrlbit = (1 << 12),
|
||||||
}, {
|
}, {
|
||||||
.name = "hsmmc",
|
.name = "hsmmc",
|
||||||
.devname = "s3c-sdhci.1",
|
.devname = "exynos4-sdhci.1",
|
||||||
.parent = &exynos5_clk_aclk_200.clk,
|
.parent = &exynos5_clk_aclk_200.clk,
|
||||||
.enable = exynos5_clk_ip_fsys_ctrl,
|
.enable = exynos5_clk_ip_fsys_ctrl,
|
||||||
.ctrlbit = (1 << 13),
|
.ctrlbit = (1 << 13),
|
||||||
}, {
|
}, {
|
||||||
.name = "hsmmc",
|
.name = "hsmmc",
|
||||||
.devname = "s3c-sdhci.2",
|
.devname = "exynos4-sdhci.2",
|
||||||
.parent = &exynos5_clk_aclk_200.clk,
|
.parent = &exynos5_clk_aclk_200.clk,
|
||||||
.enable = exynos5_clk_ip_fsys_ctrl,
|
.enable = exynos5_clk_ip_fsys_ctrl,
|
||||||
.ctrlbit = (1 << 14),
|
.ctrlbit = (1 << 14),
|
||||||
}, {
|
}, {
|
||||||
.name = "hsmmc",
|
.name = "hsmmc",
|
||||||
.devname = "s3c-sdhci.3",
|
.devname = "exynos4-sdhci.3",
|
||||||
.parent = &exynos5_clk_aclk_200.clk,
|
.parent = &exynos5_clk_aclk_200.clk,
|
||||||
.enable = exynos5_clk_ip_fsys_ctrl,
|
.enable = exynos5_clk_ip_fsys_ctrl,
|
||||||
.ctrlbit = (1 << 15),
|
.ctrlbit = (1 << 15),
|
||||||
|
@ -813,7 +813,7 @@ static struct clksrc_clk exynos5_clk_sclk_uart3 = {
|
||||||
static struct clksrc_clk exynos5_clk_sclk_mmc0 = {
|
static struct clksrc_clk exynos5_clk_sclk_mmc0 = {
|
||||||
.clk = {
|
.clk = {
|
||||||
.name = "sclk_mmc",
|
.name = "sclk_mmc",
|
||||||
.devname = "s3c-sdhci.0",
|
.devname = "exynos4-sdhci.0",
|
||||||
.parent = &exynos5_clk_dout_mmc0.clk,
|
.parent = &exynos5_clk_dout_mmc0.clk,
|
||||||
.enable = exynos5_clksrc_mask_fsys_ctrl,
|
.enable = exynos5_clksrc_mask_fsys_ctrl,
|
||||||
.ctrlbit = (1 << 0),
|
.ctrlbit = (1 << 0),
|
||||||
|
@ -824,7 +824,7 @@ static struct clksrc_clk exynos5_clk_sclk_mmc0 = {
|
||||||
static struct clksrc_clk exynos5_clk_sclk_mmc1 = {
|
static struct clksrc_clk exynos5_clk_sclk_mmc1 = {
|
||||||
.clk = {
|
.clk = {
|
||||||
.name = "sclk_mmc",
|
.name = "sclk_mmc",
|
||||||
.devname = "s3c-sdhci.1",
|
.devname = "exynos4-sdhci.1",
|
||||||
.parent = &exynos5_clk_dout_mmc1.clk,
|
.parent = &exynos5_clk_dout_mmc1.clk,
|
||||||
.enable = exynos5_clksrc_mask_fsys_ctrl,
|
.enable = exynos5_clksrc_mask_fsys_ctrl,
|
||||||
.ctrlbit = (1 << 4),
|
.ctrlbit = (1 << 4),
|
||||||
|
@ -835,7 +835,7 @@ static struct clksrc_clk exynos5_clk_sclk_mmc1 = {
|
||||||
static struct clksrc_clk exynos5_clk_sclk_mmc2 = {
|
static struct clksrc_clk exynos5_clk_sclk_mmc2 = {
|
||||||
.clk = {
|
.clk = {
|
||||||
.name = "sclk_mmc",
|
.name = "sclk_mmc",
|
||||||
.devname = "s3c-sdhci.2",
|
.devname = "exynos4-sdhci.2",
|
||||||
.parent = &exynos5_clk_dout_mmc2.clk,
|
.parent = &exynos5_clk_dout_mmc2.clk,
|
||||||
.enable = exynos5_clksrc_mask_fsys_ctrl,
|
.enable = exynos5_clksrc_mask_fsys_ctrl,
|
||||||
.ctrlbit = (1 << 8),
|
.ctrlbit = (1 << 8),
|
||||||
|
@ -846,7 +846,7 @@ static struct clksrc_clk exynos5_clk_sclk_mmc2 = {
|
||||||
static struct clksrc_clk exynos5_clk_sclk_mmc3 = {
|
static struct clksrc_clk exynos5_clk_sclk_mmc3 = {
|
||||||
.clk = {
|
.clk = {
|
||||||
.name = "sclk_mmc",
|
.name = "sclk_mmc",
|
||||||
.devname = "s3c-sdhci.3",
|
.devname = "exynos4-sdhci.3",
|
||||||
.parent = &exynos5_clk_dout_mmc3.clk,
|
.parent = &exynos5_clk_dout_mmc3.clk,
|
||||||
.enable = exynos5_clksrc_mask_fsys_ctrl,
|
.enable = exynos5_clksrc_mask_fsys_ctrl,
|
||||||
.ctrlbit = (1 << 12),
|
.ctrlbit = (1 << 12),
|
||||||
|
@ -990,10 +990,10 @@ static struct clk_lookup exynos5_clk_lookup[] = {
|
||||||
CLKDEV_INIT("exynos4210-uart.1", "clk_uart_baud0", &exynos5_clk_sclk_uart1.clk),
|
CLKDEV_INIT("exynos4210-uart.1", "clk_uart_baud0", &exynos5_clk_sclk_uart1.clk),
|
||||||
CLKDEV_INIT("exynos4210-uart.2", "clk_uart_baud0", &exynos5_clk_sclk_uart2.clk),
|
CLKDEV_INIT("exynos4210-uart.2", "clk_uart_baud0", &exynos5_clk_sclk_uart2.clk),
|
||||||
CLKDEV_INIT("exynos4210-uart.3", "clk_uart_baud0", &exynos5_clk_sclk_uart3.clk),
|
CLKDEV_INIT("exynos4210-uart.3", "clk_uart_baud0", &exynos5_clk_sclk_uart3.clk),
|
||||||
CLKDEV_INIT("s3c-sdhci.0", "mmc_busclk.2", &exynos5_clk_sclk_mmc0.clk),
|
CLKDEV_INIT("exynos4-sdhci.0", "mmc_busclk.2", &exynos5_clk_sclk_mmc0.clk),
|
||||||
CLKDEV_INIT("s3c-sdhci.1", "mmc_busclk.2", &exynos5_clk_sclk_mmc1.clk),
|
CLKDEV_INIT("exynos4-sdhci.1", "mmc_busclk.2", &exynos5_clk_sclk_mmc1.clk),
|
||||||
CLKDEV_INIT("s3c-sdhci.2", "mmc_busclk.2", &exynos5_clk_sclk_mmc2.clk),
|
CLKDEV_INIT("exynos4-sdhci.2", "mmc_busclk.2", &exynos5_clk_sclk_mmc2.clk),
|
||||||
CLKDEV_INIT("s3c-sdhci.3", "mmc_busclk.2", &exynos5_clk_sclk_mmc3.clk),
|
CLKDEV_INIT("exynos4-sdhci.3", "mmc_busclk.2", &exynos5_clk_sclk_mmc3.clk),
|
||||||
CLKDEV_INIT("dma-pl330.0", "apb_pclk", &exynos5_clk_pdma0),
|
CLKDEV_INIT("dma-pl330.0", "apb_pclk", &exynos5_clk_pdma0),
|
||||||
CLKDEV_INIT("dma-pl330.1", "apb_pclk", &exynos5_clk_pdma1),
|
CLKDEV_INIT("dma-pl330.1", "apb_pclk", &exynos5_clk_pdma1),
|
||||||
CLKDEV_INIT("dma-pl330.2", "apb_pclk", &exynos5_clk_mdma1),
|
CLKDEV_INIT("dma-pl330.2", "apb_pclk", &exynos5_clk_mdma1),
|
||||||
|
|
|
@ -326,6 +326,11 @@ static void __init exynos4_map_io(void)
|
||||||
s3c_fimc_setname(2, "exynos4-fimc");
|
s3c_fimc_setname(2, "exynos4-fimc");
|
||||||
s3c_fimc_setname(3, "exynos4-fimc");
|
s3c_fimc_setname(3, "exynos4-fimc");
|
||||||
|
|
||||||
|
s3c_sdhci_setname(0, "exynos4-sdhci");
|
||||||
|
s3c_sdhci_setname(1, "exynos4-sdhci");
|
||||||
|
s3c_sdhci_setname(2, "exynos4-sdhci");
|
||||||
|
s3c_sdhci_setname(3, "exynos4-sdhci");
|
||||||
|
|
||||||
/* The I2C bus controllers are directly compatible with s3c2440 */
|
/* The I2C bus controllers are directly compatible with s3c2440 */
|
||||||
s3c_i2c0_setname("s3c2440-i2c");
|
s3c_i2c0_setname("s3c2440-i2c");
|
||||||
s3c_i2c1_setname("s3c2440-i2c");
|
s3c_i2c1_setname("s3c2440-i2c");
|
||||||
|
@ -344,6 +349,11 @@ static void __init exynos5_map_io(void)
|
||||||
s3c_device_i2c0.resource[1].start = EXYNOS5_IRQ_IIC;
|
s3c_device_i2c0.resource[1].start = EXYNOS5_IRQ_IIC;
|
||||||
s3c_device_i2c0.resource[1].end = EXYNOS5_IRQ_IIC;
|
s3c_device_i2c0.resource[1].end = EXYNOS5_IRQ_IIC;
|
||||||
|
|
||||||
|
s3c_sdhci_setname(0, "exynos4-sdhci");
|
||||||
|
s3c_sdhci_setname(1, "exynos4-sdhci");
|
||||||
|
s3c_sdhci_setname(2, "exynos4-sdhci");
|
||||||
|
s3c_sdhci_setname(3, "exynos4-sdhci");
|
||||||
|
|
||||||
/* The I2C bus controllers are directly compatible with s3c2440 */
|
/* The I2C bus controllers are directly compatible with s3c2440 */
|
||||||
s3c_i2c0_setname("s3c2440-i2c");
|
s3c_i2c0_setname("s3c2440-i2c");
|
||||||
s3c_i2c1_setname("s3c2440-i2c");
|
s3c_i2c1_setname("s3c2440-i2c");
|
||||||
|
@ -537,7 +547,9 @@ void __init exynos5_init_irq(void)
|
||||||
{
|
{
|
||||||
int irq;
|
int irq;
|
||||||
|
|
||||||
gic_init(0, IRQ_PPI(0), S5P_VA_GIC_DIST, S5P_VA_GIC_CPU);
|
#ifdef CONFIG_OF
|
||||||
|
of_irq_init(exynos4_dt_irq_match);
|
||||||
|
#endif
|
||||||
|
|
||||||
for (irq = 0; irq < EXYNOS5_MAX_COMBINER_NR; irq++) {
|
for (irq = 0; irq < EXYNOS5_MAX_COMBINER_NR; irq++) {
|
||||||
combiner_init(irq, (void __iomem *)S5P_VA_COMBINER(irq),
|
combiner_init(irq, (void __iomem *)S5P_VA_COMBINER(irq),
|
||||||
|
@ -583,10 +595,11 @@ core_initcall(exynos_core_init);
|
||||||
#ifdef CONFIG_CACHE_L2X0
|
#ifdef CONFIG_CACHE_L2X0
|
||||||
static int __init exynos4_l2x0_cache_init(void)
|
static int __init exynos4_l2x0_cache_init(void)
|
||||||
{
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
if (soc_is_exynos5250())
|
if (soc_is_exynos5250())
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
int ret;
|
|
||||||
ret = l2x0_of_init(L2_AUX_VAL, L2_AUX_MASK);
|
ret = l2x0_of_init(L2_AUX_VAL, L2_AUX_MASK);
|
||||||
if (!ret) {
|
if (!ret) {
|
||||||
l2x0_regs_phys = virt_to_phys(&l2x0_saved_regs);
|
l2x0_regs_phys = virt_to_phys(&l2x0_saved_regs);
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
#include <linux/dma-mapping.h>
|
#include <linux/dma-mapping.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
|
#include <linux/ioport.h>
|
||||||
#include <linux/mmc/dw_mmc.h>
|
#include <linux/mmc/dw_mmc.h>
|
||||||
|
|
||||||
#include <plat/devs.h>
|
#include <plat/devs.h>
|
||||||
|
@ -33,16 +34,8 @@ static int exynos4_dwmci_init(u32 slot_id, irq_handler_t handler, void *data)
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct resource exynos4_dwmci_resource[] = {
|
static struct resource exynos4_dwmci_resource[] = {
|
||||||
[0] = {
|
[0] = DEFINE_RES_MEM(EXYNOS4_PA_DWMCI, SZ_4K),
|
||||||
.start = EXYNOS4_PA_DWMCI,
|
[1] = DEFINE_RES_IRQ(EXYNOS4_IRQ_DWMCI),
|
||||||
.end = EXYNOS4_PA_DWMCI + SZ_4K - 1,
|
|
||||||
.flags = IORESOURCE_MEM,
|
|
||||||
},
|
|
||||||
[1] = {
|
|
||||||
.start = IRQ_DWMCI,
|
|
||||||
.end = IRQ_DWMCI,
|
|
||||||
.flags = IORESOURCE_IRQ,
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct dw_mci_board exynos4_dwci_pdata = {
|
static struct dw_mci_board exynos4_dwci_pdata = {
|
||||||
|
|
|
@ -35,8 +35,6 @@
|
||||||
#include <mach/irqs.h>
|
#include <mach/irqs.h>
|
||||||
#include <mach/dma.h>
|
#include <mach/dma.h>
|
||||||
|
|
||||||
static u64 dma_dmamask = DMA_BIT_MASK(32);
|
|
||||||
|
|
||||||
static u8 exynos4210_pdma0_peri[] = {
|
static u8 exynos4210_pdma0_peri[] = {
|
||||||
DMACH_PCM0_RX,
|
DMACH_PCM0_RX,
|
||||||
DMACH_PCM0_TX,
|
DMACH_PCM0_TX,
|
||||||
|
|
|
@ -21,10 +21,9 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
.macro addruart, rp, rv, tmp
|
.macro addruart, rp, rv, tmp
|
||||||
mov \rp, #0x10000000
|
mrc p15, 0, \tmp, c0, c0, 0
|
||||||
ldr \rp, [\rp, #0x0]
|
and \tmp, \tmp, #0xf0
|
||||||
and \rp, \rp, #0xf00000
|
teq \tmp, #0xf0 @@ A15
|
||||||
teq \rp, #0x500000 @@ EXYNOS5
|
|
||||||
ldreq \rp, =EXYNOS5_PA_UART
|
ldreq \rp, =EXYNOS5_PA_UART
|
||||||
movne \rp, #EXYNOS4_PA_UART @@ EXYNOS4
|
movne \rp, #EXYNOS4_PA_UART @@ EXYNOS4
|
||||||
ldr \rv, =S3C_VA_UART
|
ldr \rv, =S3C_VA_UART
|
||||||
|
|
|
@ -212,6 +212,8 @@
|
||||||
#define IRQ_MFC EXYNOS4_IRQ_MFC
|
#define IRQ_MFC EXYNOS4_IRQ_MFC
|
||||||
#define IRQ_SDO EXYNOS4_IRQ_SDO
|
#define IRQ_SDO EXYNOS4_IRQ_SDO
|
||||||
|
|
||||||
|
#define IRQ_I2S0 EXYNOS4_IRQ_I2S0
|
||||||
|
|
||||||
#define IRQ_ADC EXYNOS4_IRQ_ADC0
|
#define IRQ_ADC EXYNOS4_IRQ_ADC0
|
||||||
#define IRQ_TC EXYNOS4_IRQ_PEN0
|
#define IRQ_TC EXYNOS4_IRQ_PEN0
|
||||||
|
|
||||||
|
|
|
@ -89,6 +89,10 @@
|
||||||
#define EXYNOS4_PA_MDMA1 0x12840000
|
#define EXYNOS4_PA_MDMA1 0x12840000
|
||||||
#define EXYNOS4_PA_PDMA0 0x12680000
|
#define EXYNOS4_PA_PDMA0 0x12680000
|
||||||
#define EXYNOS4_PA_PDMA1 0x12690000
|
#define EXYNOS4_PA_PDMA1 0x12690000
|
||||||
|
#define EXYNOS5_PA_MDMA0 0x10800000
|
||||||
|
#define EXYNOS5_PA_MDMA1 0x11C10000
|
||||||
|
#define EXYNOS5_PA_PDMA0 0x121A0000
|
||||||
|
#define EXYNOS5_PA_PDMA1 0x121B0000
|
||||||
|
|
||||||
#define EXYNOS4_PA_SYSMMU_MDMA 0x10A40000
|
#define EXYNOS4_PA_SYSMMU_MDMA 0x10A40000
|
||||||
#define EXYNOS4_PA_SYSMMU_SSS 0x10A50000
|
#define EXYNOS4_PA_SYSMMU_SSS 0x10A50000
|
||||||
|
|
|
@ -255,9 +255,15 @@
|
||||||
|
|
||||||
/* For EXYNOS5250 */
|
/* For EXYNOS5250 */
|
||||||
|
|
||||||
|
#define EXYNOS5_APLL_LOCK EXYNOS_CLKREG(0x00000)
|
||||||
#define EXYNOS5_APLL_CON0 EXYNOS_CLKREG(0x00100)
|
#define EXYNOS5_APLL_CON0 EXYNOS_CLKREG(0x00100)
|
||||||
#define EXYNOS5_CLKSRC_CPU EXYNOS_CLKREG(0x00200)
|
#define EXYNOS5_CLKSRC_CPU EXYNOS_CLKREG(0x00200)
|
||||||
|
#define EXYNOS5_CLKMUX_STATCPU EXYNOS_CLKREG(0x00400)
|
||||||
#define EXYNOS5_CLKDIV_CPU0 EXYNOS_CLKREG(0x00500)
|
#define EXYNOS5_CLKDIV_CPU0 EXYNOS_CLKREG(0x00500)
|
||||||
|
#define EXYNOS5_CLKDIV_CPU1 EXYNOS_CLKREG(0x00504)
|
||||||
|
#define EXYNOS5_CLKDIV_STATCPU0 EXYNOS_CLKREG(0x00600)
|
||||||
|
#define EXYNOS5_CLKDIV_STATCPU1 EXYNOS_CLKREG(0x00604)
|
||||||
|
|
||||||
#define EXYNOS5_MPLL_CON0 EXYNOS_CLKREG(0x04100)
|
#define EXYNOS5_MPLL_CON0 EXYNOS_CLKREG(0x04100)
|
||||||
#define EXYNOS5_CLKSRC_CORE1 EXYNOS_CLKREG(0x04204)
|
#define EXYNOS5_CLKSRC_CORE1 EXYNOS_CLKREG(0x04204)
|
||||||
|
|
||||||
|
|
|
@ -20,9 +20,24 @@ volatile u8 *uart_base;
|
||||||
|
|
||||||
#include <plat/uncompress.h>
|
#include <plat/uncompress.h>
|
||||||
|
|
||||||
|
static unsigned int __raw_readl(unsigned int ptr)
|
||||||
|
{
|
||||||
|
return *((volatile unsigned int *)ptr);
|
||||||
|
}
|
||||||
|
|
||||||
static void arch_detect_cpu(void)
|
static void arch_detect_cpu(void)
|
||||||
{
|
{
|
||||||
if (machine_is_smdk5250())
|
u32 chip_id = __raw_readl(EXYNOS_PA_CHIPID);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* product_id is bits 31:12
|
||||||
|
* bits 23:20 describe the exynosX family
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
chip_id >>= 20;
|
||||||
|
chip_id &= 0xf;
|
||||||
|
|
||||||
|
if (chip_id == 0x5)
|
||||||
uart_base = (volatile u8 *)EXYNOS5_PA_UART + (S3C_UART_OFFSET * CONFIG_S3C_LOWLEVEL_UART_PORT);
|
uart_base = (volatile u8 *)EXYNOS5_PA_UART + (S3C_UART_OFFSET * CONFIG_S3C_LOWLEVEL_UART_PORT);
|
||||||
else
|
else
|
||||||
uart_base = (volatile u8 *)EXYNOS4_PA_UART + (S3C_UART_OFFSET * CONFIG_S3C_LOWLEVEL_UART_PORT);
|
uart_base = (volatile u8 *)EXYNOS4_PA_UART + (S3C_UART_OFFSET * CONFIG_S3C_LOWLEVEL_UART_PORT);
|
||||||
|
|
|
@ -45,7 +45,7 @@ static const struct of_dev_auxdata exynos5250_auxdata_lookup[] __initconst = {
|
||||||
"exynos4210-uart.3", NULL),
|
"exynos4210-uart.3", NULL),
|
||||||
OF_DEV_AUXDATA("arm,pl330", EXYNOS5_PA_PDMA0, "dma-pl330.0", NULL),
|
OF_DEV_AUXDATA("arm,pl330", EXYNOS5_PA_PDMA0, "dma-pl330.0", NULL),
|
||||||
OF_DEV_AUXDATA("arm,pl330", EXYNOS5_PA_PDMA1, "dma-pl330.1", NULL),
|
OF_DEV_AUXDATA("arm,pl330", EXYNOS5_PA_PDMA1, "dma-pl330.1", NULL),
|
||||||
OF_DEV_AUXDATA("arm,pl330", EXYNOS5_PA_PDMA1, "dma-pl330.2", NULL),
|
OF_DEV_AUXDATA("arm,pl330", EXYNOS5_PA_MDMA1, "dma-pl330.2", NULL),
|
||||||
{},
|
{},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -112,6 +112,7 @@ static struct s3c_sdhci_platdata nuri_hsmmc0_data __initdata = {
|
||||||
.host_caps = (MMC_CAP_8_BIT_DATA | MMC_CAP_4_BIT_DATA |
|
.host_caps = (MMC_CAP_8_BIT_DATA | MMC_CAP_4_BIT_DATA |
|
||||||
MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED |
|
MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED |
|
||||||
MMC_CAP_ERASE),
|
MMC_CAP_ERASE),
|
||||||
|
.host_caps2 = MMC_CAP2_BROKEN_VOLTAGE,
|
||||||
.cd_type = S3C_SDHCI_CD_PERMANENT,
|
.cd_type = S3C_SDHCI_CD_PERMANENT,
|
||||||
.clk_type = S3C_SDHCI_CLK_DIV_EXTERNAL,
|
.clk_type = S3C_SDHCI_CLK_DIV_EXTERNAL,
|
||||||
};
|
};
|
||||||
|
@ -307,49 +308,7 @@ static struct i2c_board_info i2c1_devs[] __initdata = {
|
||||||
};
|
};
|
||||||
|
|
||||||
/* TSP */
|
/* TSP */
|
||||||
static u8 mxt_init_vals[] = {
|
|
||||||
/* MXT_GEN_COMMAND(6) */
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
/* MXT_GEN_POWER(7) */
|
|
||||||
0x20, 0xff, 0x32,
|
|
||||||
/* MXT_GEN_ACQUIRE(8) */
|
|
||||||
0x0a, 0x00, 0x05, 0x00, 0x00, 0x00, 0x09, 0x23,
|
|
||||||
/* MXT_TOUCH_MULTI(9) */
|
|
||||||
0x00, 0x00, 0x00, 0x13, 0x0b, 0x00, 0x00, 0x00, 0x02, 0x00,
|
|
||||||
0x00, 0x01, 0x01, 0x0e, 0x0a, 0x0a, 0x0a, 0x0a, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00,
|
|
||||||
/* MXT_TOUCH_KEYARRAY(15) */
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00,
|
|
||||||
0x00,
|
|
||||||
/* MXT_SPT_GPIOPWM(19) */
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
/* MXT_PROCI_GRIPFACE(20) */
|
|
||||||
0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x28, 0x04,
|
|
||||||
0x0f, 0x0a,
|
|
||||||
/* MXT_PROCG_NOISE(22) */
|
|
||||||
0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x23, 0x00,
|
|
||||||
0x00, 0x05, 0x0f, 0x19, 0x23, 0x2d, 0x03,
|
|
||||||
/* MXT_TOUCH_PROXIMITY(23) */
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
/* MXT_PROCI_ONETOUCH(24) */
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
/* MXT_SPT_SELFTEST(25) */
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00,
|
|
||||||
/* MXT_PROCI_TWOTOUCH(27) */
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
/* MXT_SPT_CTECONFIG(28) */
|
|
||||||
0x00, 0x00, 0x02, 0x08, 0x10, 0x00,
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct mxt_platform_data mxt_platform_data = {
|
static struct mxt_platform_data mxt_platform_data = {
|
||||||
.config = mxt_init_vals,
|
|
||||||
.config_length = ARRAY_SIZE(mxt_init_vals),
|
|
||||||
|
|
||||||
.x_line = 18,
|
.x_line = 18,
|
||||||
.y_line = 11,
|
.y_line = 11,
|
||||||
.x_size = 1024,
|
.x_size = 1024,
|
||||||
|
@ -571,7 +530,7 @@ static struct regulator_init_data __initdata max8997_ldo7_data = {
|
||||||
|
|
||||||
static struct regulator_init_data __initdata max8997_ldo8_data = {
|
static struct regulator_init_data __initdata max8997_ldo8_data = {
|
||||||
.constraints = {
|
.constraints = {
|
||||||
.name = "VUSB/VDAC_3.3V_C210",
|
.name = "VUSB+VDAC_3.3V_C210",
|
||||||
.min_uV = 3300000,
|
.min_uV = 3300000,
|
||||||
.max_uV = 3300000,
|
.max_uV = 3300000,
|
||||||
.valid_ops_mask = REGULATOR_CHANGE_STATUS,
|
.valid_ops_mask = REGULATOR_CHANGE_STATUS,
|
||||||
|
@ -1347,6 +1306,7 @@ static struct platform_device *nuri_devices[] __initdata = {
|
||||||
|
|
||||||
static void __init nuri_map_io(void)
|
static void __init nuri_map_io(void)
|
||||||
{
|
{
|
||||||
|
clk_xusbxti.rate = 24000000;
|
||||||
exynos_init_io(NULL, 0);
|
exynos_init_io(NULL, 0);
|
||||||
s3c24xx_init_clocks(24000000);
|
s3c24xx_init_clocks(24000000);
|
||||||
s3c24xx_init_uarts(nuri_uartcfgs, ARRAY_SIZE(nuri_uartcfgs));
|
s3c24xx_init_uarts(nuri_uartcfgs, ARRAY_SIZE(nuri_uartcfgs));
|
||||||
|
@ -1379,7 +1339,6 @@ static void __init nuri_machine_init(void)
|
||||||
nuri_camera_init();
|
nuri_camera_init();
|
||||||
|
|
||||||
nuri_ehci_init();
|
nuri_ehci_init();
|
||||||
clk_xusbxti.rate = 24000000;
|
|
||||||
|
|
||||||
/* Last */
|
/* Last */
|
||||||
platform_add_devices(nuri_devices, ARRAY_SIZE(nuri_devices));
|
platform_add_devices(nuri_devices, ARRAY_SIZE(nuri_devices));
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
#include <asm/mach-types.h>
|
#include <asm/mach-types.h>
|
||||||
|
|
||||||
#include <plat/regs-serial.h>
|
#include <plat/regs-serial.h>
|
||||||
|
#include <plat/clock.h>
|
||||||
#include <plat/cpu.h>
|
#include <plat/cpu.h>
|
||||||
#include <plat/devs.h>
|
#include <plat/devs.h>
|
||||||
#include <plat/iic.h>
|
#include <plat/iic.h>
|
||||||
|
@ -746,6 +747,7 @@ static struct s3c_sdhci_platdata universal_hsmmc0_data __initdata = {
|
||||||
.max_width = 8,
|
.max_width = 8,
|
||||||
.host_caps = (MMC_CAP_8_BIT_DATA | MMC_CAP_4_BIT_DATA |
|
.host_caps = (MMC_CAP_8_BIT_DATA | MMC_CAP_4_BIT_DATA |
|
||||||
MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED),
|
MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED),
|
||||||
|
.host_caps2 = MMC_CAP2_BROKEN_VOLTAGE,
|
||||||
.cd_type = S3C_SDHCI_CD_PERMANENT,
|
.cd_type = S3C_SDHCI_CD_PERMANENT,
|
||||||
.clk_type = S3C_SDHCI_CLK_DIV_EXTERNAL,
|
.clk_type = S3C_SDHCI_CLK_DIV_EXTERNAL,
|
||||||
};
|
};
|
||||||
|
@ -1057,6 +1059,7 @@ static struct platform_device *universal_devices[] __initdata = {
|
||||||
|
|
||||||
static void __init universal_map_io(void)
|
static void __init universal_map_io(void)
|
||||||
{
|
{
|
||||||
|
clk_xusbxti.rate = 24000000;
|
||||||
exynos_init_io(NULL, 0);
|
exynos_init_io(NULL, 0);
|
||||||
s3c24xx_init_clocks(24000000);
|
s3c24xx_init_clocks(24000000);
|
||||||
s3c24xx_init_uarts(universal_uartcfgs, ARRAY_SIZE(universal_uartcfgs));
|
s3c24xx_init_uarts(universal_uartcfgs, ARRAY_SIZE(universal_uartcfgs));
|
||||||
|
|
|
@ -662,6 +662,7 @@ static struct clk_lookup lookups[] = {
|
||||||
_REGISTER_CLOCK(NULL, "dma", dma_clk)
|
_REGISTER_CLOCK(NULL, "dma", dma_clk)
|
||||||
_REGISTER_CLOCK(NULL, "rtic", rtic_clk)
|
_REGISTER_CLOCK(NULL, "rtic", rtic_clk)
|
||||||
_REGISTER_CLOCK(NULL, "brom", brom_clk)
|
_REGISTER_CLOCK(NULL, "brom", brom_clk)
|
||||||
|
_REGISTER_CLOCK(NULL, "emma", emma_clk)
|
||||||
_REGISTER_CLOCK("m2m-emmaprp.0", NULL, emma_clk)
|
_REGISTER_CLOCK("m2m-emmaprp.0", NULL, emma_clk)
|
||||||
_REGISTER_CLOCK(NULL, "slcdc", slcdc_clk)
|
_REGISTER_CLOCK(NULL, "slcdc", slcdc_clk)
|
||||||
_REGISTER_CLOCK("imx27-fec.0", NULL, fec_clk)
|
_REGISTER_CLOCK("imx27-fec.0", NULL, fec_clk)
|
||||||
|
|
|
@ -483,7 +483,7 @@ static struct clk_lookup lookups[] = {
|
||||||
_REGISTER_CLOCK("imx2-wdt.0", NULL, wdog_clk)
|
_REGISTER_CLOCK("imx2-wdt.0", NULL, wdog_clk)
|
||||||
_REGISTER_CLOCK(NULL, "max", max_clk)
|
_REGISTER_CLOCK(NULL, "max", max_clk)
|
||||||
_REGISTER_CLOCK(NULL, "audmux", audmux_clk)
|
_REGISTER_CLOCK(NULL, "audmux", audmux_clk)
|
||||||
_REGISTER_CLOCK(NULL, "csi", csi_clk)
|
_REGISTER_CLOCK("mx3-camera.0", NULL, csi_clk)
|
||||||
_REGISTER_CLOCK(NULL, "iim", iim_clk)
|
_REGISTER_CLOCK(NULL, "iim", iim_clk)
|
||||||
_REGISTER_CLOCK(NULL, "gpu2d", gpu2d_clk)
|
_REGISTER_CLOCK(NULL, "gpu2d", gpu2d_clk)
|
||||||
_REGISTER_CLOCK("mxc_nand.0", NULL, nfc_clk)
|
_REGISTER_CLOCK("mxc_nand.0", NULL, nfc_clk)
|
||||||
|
|
|
@ -35,7 +35,7 @@ static const struct of_dev_auxdata imx27_auxdata_lookup[] __initconst = {
|
||||||
static int __init imx27_avic_add_irq_domain(struct device_node *np,
|
static int __init imx27_avic_add_irq_domain(struct device_node *np,
|
||||||
struct device_node *interrupt_parent)
|
struct device_node *interrupt_parent)
|
||||||
{
|
{
|
||||||
irq_domain_add_simple(np, 0);
|
irq_domain_add_legacy(np, 64, 0, 0, &irq_domain_simple_ops, NULL);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -44,7 +44,9 @@ static int __init imx27_gpio_add_irq_domain(struct device_node *np,
|
||||||
{
|
{
|
||||||
static int gpio_irq_base = MXC_GPIO_IRQ_START + ARCH_NR_GPIOS;
|
static int gpio_irq_base = MXC_GPIO_IRQ_START + ARCH_NR_GPIOS;
|
||||||
|
|
||||||
irq_domain_add_simple(np, gpio_irq_base);
|
gpio_irq_base -= 32;
|
||||||
|
irq_domain_add_legacy(np, 32, gpio_irq_base, 0, &irq_domain_simple_ops,
|
||||||
|
NULL);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,6 +38,8 @@
|
||||||
#include <linux/usb/otg.h>
|
#include <linux/usb/otg.h>
|
||||||
#include <linux/usb/ulpi.h>
|
#include <linux/usb/ulpi.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
|
#include <linux/regulator/machine.h>
|
||||||
|
#include <linux/regulator/fixed.h>
|
||||||
|
|
||||||
#include <mach/hardware.h>
|
#include <mach/hardware.h>
|
||||||
#include <asm/mach-types.h>
|
#include <asm/mach-types.h>
|
||||||
|
@ -479,6 +481,11 @@ static struct platform_device *devices[] __initdata = {
|
||||||
&armadillo5x0_smc911x_device,
|
&armadillo5x0_smc911x_device,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static struct regulator_consumer_supply dummy_supplies[] = {
|
||||||
|
REGULATOR_SUPPLY("vdd33a", "smsc911x"),
|
||||||
|
REGULATOR_SUPPLY("vddvario", "smsc911x"),
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Perform board specific initializations
|
* Perform board specific initializations
|
||||||
*/
|
*/
|
||||||
|
@ -489,6 +496,8 @@ static void __init armadillo5x0_init(void)
|
||||||
mxc_iomux_setup_multiple_pins(armadillo5x0_pins,
|
mxc_iomux_setup_multiple_pins(armadillo5x0_pins,
|
||||||
ARRAY_SIZE(armadillo5x0_pins), "armadillo5x0");
|
ARRAY_SIZE(armadillo5x0_pins), "armadillo5x0");
|
||||||
|
|
||||||
|
regulator_register_fixed(0, dummy_supplies, ARRAY_SIZE(dummy_supplies));
|
||||||
|
|
||||||
platform_add_devices(devices, ARRAY_SIZE(devices));
|
platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||||
imx_add_gpio_keys(&armadillo5x0_button_data);
|
imx_add_gpio_keys(&armadillo5x0_button_data);
|
||||||
imx31_add_imx_i2c1(NULL);
|
imx31_add_imx_i2c1(NULL);
|
||||||
|
|
|
@ -24,6 +24,8 @@
|
||||||
#include <linux/serial_8250.h>
|
#include <linux/serial_8250.h>
|
||||||
#include <linux/smsc911x.h>
|
#include <linux/smsc911x.h>
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
|
#include <linux/regulator/machine.h>
|
||||||
|
#include <linux/regulator/fixed.h>
|
||||||
|
|
||||||
#include <asm/irq.h>
|
#include <asm/irq.h>
|
||||||
#include <asm/mach-types.h>
|
#include <asm/mach-types.h>
|
||||||
|
@ -166,6 +168,11 @@ static struct platform_device kzm_smsc9118_device = {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static struct regulator_consumer_supply dummy_supplies[] = {
|
||||||
|
REGULATOR_SUPPLY("vdd33a", "smsc911x"),
|
||||||
|
REGULATOR_SUPPLY("vddvario", "smsc911x"),
|
||||||
|
};
|
||||||
|
|
||||||
static int __init kzm_init_smsc9118(void)
|
static int __init kzm_init_smsc9118(void)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
|
@ -175,6 +182,8 @@ static int __init kzm_init_smsc9118(void)
|
||||||
gpio_request(IOMUX_TO_GPIO(MX31_PIN_GPIO1_2), "smsc9118-int");
|
gpio_request(IOMUX_TO_GPIO(MX31_PIN_GPIO1_2), "smsc9118-int");
|
||||||
gpio_direction_input(IOMUX_TO_GPIO(MX31_PIN_GPIO1_2));
|
gpio_direction_input(IOMUX_TO_GPIO(MX31_PIN_GPIO1_2));
|
||||||
|
|
||||||
|
regulator_register_fixed(0, dummy_supplies, ARRAY_SIZE(dummy_supplies));
|
||||||
|
|
||||||
return platform_device_register(&kzm_smsc9118_device);
|
return platform_device_register(&kzm_smsc9118_device);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -34,6 +34,8 @@
|
||||||
#include <linux/mfd/mc13783.h>
|
#include <linux/mfd/mc13783.h>
|
||||||
#include <linux/usb/otg.h>
|
#include <linux/usb/otg.h>
|
||||||
#include <linux/usb/ulpi.h>
|
#include <linux/usb/ulpi.h>
|
||||||
|
#include <linux/regulator/machine.h>
|
||||||
|
#include <linux/regulator/fixed.h>
|
||||||
|
|
||||||
#include <asm/mach-types.h>
|
#include <asm/mach-types.h>
|
||||||
#include <asm/mach/arch.h>
|
#include <asm/mach/arch.h>
|
||||||
|
@ -242,6 +244,11 @@ static struct platform_device *devices[] __initdata = {
|
||||||
static int mx31lilly_baseboard;
|
static int mx31lilly_baseboard;
|
||||||
core_param(mx31lilly_baseboard, mx31lilly_baseboard, int, 0444);
|
core_param(mx31lilly_baseboard, mx31lilly_baseboard, int, 0444);
|
||||||
|
|
||||||
|
static struct regulator_consumer_supply dummy_supplies[] = {
|
||||||
|
REGULATOR_SUPPLY("vdd33a", "smsc911x"),
|
||||||
|
REGULATOR_SUPPLY("vddvario", "smsc911x"),
|
||||||
|
};
|
||||||
|
|
||||||
static void __init mx31lilly_board_init(void)
|
static void __init mx31lilly_board_init(void)
|
||||||
{
|
{
|
||||||
imx31_soc_init();
|
imx31_soc_init();
|
||||||
|
@ -280,6 +287,8 @@ static void __init mx31lilly_board_init(void)
|
||||||
imx31_add_spi_imx1(&spi1_pdata);
|
imx31_add_spi_imx1(&spi1_pdata);
|
||||||
spi_register_board_info(&mc13783_dev, 1);
|
spi_register_board_info(&mc13783_dev, 1);
|
||||||
|
|
||||||
|
regulator_register_fixed(0, dummy_supplies, ARRAY_SIZE(dummy_supplies));
|
||||||
|
|
||||||
platform_add_devices(devices, ARRAY_SIZE(devices));
|
platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||||
|
|
||||||
/* USB */
|
/* USB */
|
||||||
|
|
|
@ -29,6 +29,8 @@
|
||||||
#include <linux/usb/ulpi.h>
|
#include <linux/usb/ulpi.h>
|
||||||
#include <linux/mtd/physmap.h>
|
#include <linux/mtd/physmap.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
|
#include <linux/regulator/machine.h>
|
||||||
|
#include <linux/regulator/fixed.h>
|
||||||
|
|
||||||
#include <asm/mach-types.h>
|
#include <asm/mach-types.h>
|
||||||
#include <asm/mach/arch.h>
|
#include <asm/mach/arch.h>
|
||||||
|
@ -226,6 +228,11 @@ void __init mx31lite_map_io(void)
|
||||||
static int mx31lite_baseboard;
|
static int mx31lite_baseboard;
|
||||||
core_param(mx31lite_baseboard, mx31lite_baseboard, int, 0444);
|
core_param(mx31lite_baseboard, mx31lite_baseboard, int, 0444);
|
||||||
|
|
||||||
|
static struct regulator_consumer_supply dummy_supplies[] = {
|
||||||
|
REGULATOR_SUPPLY("vdd33a", "smsc911x"),
|
||||||
|
REGULATOR_SUPPLY("vddvario", "smsc911x"),
|
||||||
|
};
|
||||||
|
|
||||||
static void __init mx31lite_init(void)
|
static void __init mx31lite_init(void)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
@ -259,6 +266,8 @@ static void __init mx31lite_init(void)
|
||||||
if (usbh2_pdata.otg)
|
if (usbh2_pdata.otg)
|
||||||
imx31_add_mxc_ehci_hs(2, &usbh2_pdata);
|
imx31_add_mxc_ehci_hs(2, &usbh2_pdata);
|
||||||
|
|
||||||
|
regulator_register_fixed(0, dummy_supplies, ARRAY_SIZE(dummy_supplies));
|
||||||
|
|
||||||
/* SMSC9117 IRQ pin */
|
/* SMSC9117 IRQ pin */
|
||||||
ret = gpio_request(IOMUX_TO_GPIO(MX31_PIN_SFS6), "sms9117-irq");
|
ret = gpio_request(IOMUX_TO_GPIO(MX31_PIN_SFS6), "sms9117-irq");
|
||||||
if (ret)
|
if (ret)
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue