mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-05-04 14:23:46 +00:00
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Conflicts: drivers/net/usb/qmi_wwan.c include/net/dst.h Trivial merge conflicts, both were overlapping changes. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
c3fa32b976
557 changed files with 4351 additions and 2992 deletions
|
@ -37,8 +37,8 @@ Description:
|
||||||
that the USB device has been connected to the machine. This
|
that the USB device has been connected to the machine. This
|
||||||
file is read-only.
|
file is read-only.
|
||||||
Users:
|
Users:
|
||||||
PowerTOP <power@bughost.org>
|
PowerTOP <powertop@lists.01.org>
|
||||||
http://www.lesswatts.org/projects/powertop/
|
https://01.org/powertop/
|
||||||
|
|
||||||
What: /sys/bus/usb/device/.../power/active_duration
|
What: /sys/bus/usb/device/.../power/active_duration
|
||||||
Date: January 2008
|
Date: January 2008
|
||||||
|
@ -57,8 +57,8 @@ Description:
|
||||||
will give an integer percentage. Note that this does not
|
will give an integer percentage. Note that this does not
|
||||||
account for counter wrap.
|
account for counter wrap.
|
||||||
Users:
|
Users:
|
||||||
PowerTOP <power@bughost.org>
|
PowerTOP <powertop@lists.01.org>
|
||||||
http://www.lesswatts.org/projects/powertop/
|
https://01.org/powertop/
|
||||||
|
|
||||||
What: /sys/bus/usb/devices/<busnum>-<port[.port]>...:<config num>-<interface num>/supports_autosuspend
|
What: /sys/bus/usb/devices/<busnum>-<port[.port]>...:<config num>-<interface num>/supports_autosuspend
|
||||||
Date: January 2008
|
Date: January 2008
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
What: /sys/devices/.../power/
|
What: /sys/devices/.../power/
|
||||||
Date: January 2009
|
Date: January 2009
|
||||||
Contact: Rafael J. Wysocki <rjw@sisk.pl>
|
Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
|
||||||
Description:
|
Description:
|
||||||
The /sys/devices/.../power directory contains attributes
|
The /sys/devices/.../power directory contains attributes
|
||||||
allowing the user space to check and modify some power
|
allowing the user space to check and modify some power
|
||||||
|
@ -8,7 +8,7 @@ Description:
|
||||||
|
|
||||||
What: /sys/devices/.../power/wakeup
|
What: /sys/devices/.../power/wakeup
|
||||||
Date: January 2009
|
Date: January 2009
|
||||||
Contact: Rafael J. Wysocki <rjw@sisk.pl>
|
Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
|
||||||
Description:
|
Description:
|
||||||
The /sys/devices/.../power/wakeup attribute allows the user
|
The /sys/devices/.../power/wakeup attribute allows the user
|
||||||
space to check if the device is enabled to wake up the system
|
space to check if the device is enabled to wake up the system
|
||||||
|
@ -34,7 +34,7 @@ Description:
|
||||||
|
|
||||||
What: /sys/devices/.../power/control
|
What: /sys/devices/.../power/control
|
||||||
Date: January 2009
|
Date: January 2009
|
||||||
Contact: Rafael J. Wysocki <rjw@sisk.pl>
|
Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
|
||||||
Description:
|
Description:
|
||||||
The /sys/devices/.../power/control attribute allows the user
|
The /sys/devices/.../power/control attribute allows the user
|
||||||
space to control the run-time power management of the device.
|
space to control the run-time power management of the device.
|
||||||
|
@ -53,7 +53,7 @@ Description:
|
||||||
|
|
||||||
What: /sys/devices/.../power/async
|
What: /sys/devices/.../power/async
|
||||||
Date: January 2009
|
Date: January 2009
|
||||||
Contact: Rafael J. Wysocki <rjw@sisk.pl>
|
Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
|
||||||
Description:
|
Description:
|
||||||
The /sys/devices/.../async attribute allows the user space to
|
The /sys/devices/.../async attribute allows the user space to
|
||||||
enable or diasble the device's suspend and resume callbacks to
|
enable or diasble the device's suspend and resume callbacks to
|
||||||
|
@ -79,7 +79,7 @@ Description:
|
||||||
|
|
||||||
What: /sys/devices/.../power/wakeup_count
|
What: /sys/devices/.../power/wakeup_count
|
||||||
Date: September 2010
|
Date: September 2010
|
||||||
Contact: Rafael J. Wysocki <rjw@sisk.pl>
|
Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
|
||||||
Description:
|
Description:
|
||||||
The /sys/devices/.../wakeup_count attribute contains the number
|
The /sys/devices/.../wakeup_count attribute contains the number
|
||||||
of signaled wakeup events associated with the device. This
|
of signaled wakeup events associated with the device. This
|
||||||
|
@ -88,7 +88,7 @@ Description:
|
||||||
|
|
||||||
What: /sys/devices/.../power/wakeup_active_count
|
What: /sys/devices/.../power/wakeup_active_count
|
||||||
Date: September 2010
|
Date: September 2010
|
||||||
Contact: Rafael J. Wysocki <rjw@sisk.pl>
|
Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
|
||||||
Description:
|
Description:
|
||||||
The /sys/devices/.../wakeup_active_count attribute contains the
|
The /sys/devices/.../wakeup_active_count attribute contains the
|
||||||
number of times the processing of wakeup events associated with
|
number of times the processing of wakeup events associated with
|
||||||
|
@ -98,7 +98,7 @@ Description:
|
||||||
|
|
||||||
What: /sys/devices/.../power/wakeup_abort_count
|
What: /sys/devices/.../power/wakeup_abort_count
|
||||||
Date: February 2012
|
Date: February 2012
|
||||||
Contact: Rafael J. Wysocki <rjw@sisk.pl>
|
Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
|
||||||
Description:
|
Description:
|
||||||
The /sys/devices/.../wakeup_abort_count attribute contains the
|
The /sys/devices/.../wakeup_abort_count attribute contains the
|
||||||
number of times the processing of a wakeup event associated with
|
number of times the processing of a wakeup event associated with
|
||||||
|
@ -109,7 +109,7 @@ Description:
|
||||||
|
|
||||||
What: /sys/devices/.../power/wakeup_expire_count
|
What: /sys/devices/.../power/wakeup_expire_count
|
||||||
Date: February 2012
|
Date: February 2012
|
||||||
Contact: Rafael J. Wysocki <rjw@sisk.pl>
|
Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
|
||||||
Description:
|
Description:
|
||||||
The /sys/devices/.../wakeup_expire_count attribute contains the
|
The /sys/devices/.../wakeup_expire_count attribute contains the
|
||||||
number of times a wakeup event associated with the device has
|
number of times a wakeup event associated with the device has
|
||||||
|
@ -119,7 +119,7 @@ Description:
|
||||||
|
|
||||||
What: /sys/devices/.../power/wakeup_active
|
What: /sys/devices/.../power/wakeup_active
|
||||||
Date: September 2010
|
Date: September 2010
|
||||||
Contact: Rafael J. Wysocki <rjw@sisk.pl>
|
Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
|
||||||
Description:
|
Description:
|
||||||
The /sys/devices/.../wakeup_active attribute contains either 1,
|
The /sys/devices/.../wakeup_active attribute contains either 1,
|
||||||
or 0, depending on whether or not a wakeup event associated with
|
or 0, depending on whether or not a wakeup event associated with
|
||||||
|
@ -129,7 +129,7 @@ Description:
|
||||||
|
|
||||||
What: /sys/devices/.../power/wakeup_total_time_ms
|
What: /sys/devices/.../power/wakeup_total_time_ms
|
||||||
Date: September 2010
|
Date: September 2010
|
||||||
Contact: Rafael J. Wysocki <rjw@sisk.pl>
|
Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
|
||||||
Description:
|
Description:
|
||||||
The /sys/devices/.../wakeup_total_time_ms attribute contains
|
The /sys/devices/.../wakeup_total_time_ms attribute contains
|
||||||
the total time of processing wakeup events associated with the
|
the total time of processing wakeup events associated with the
|
||||||
|
@ -139,7 +139,7 @@ Description:
|
||||||
|
|
||||||
What: /sys/devices/.../power/wakeup_max_time_ms
|
What: /sys/devices/.../power/wakeup_max_time_ms
|
||||||
Date: September 2010
|
Date: September 2010
|
||||||
Contact: Rafael J. Wysocki <rjw@sisk.pl>
|
Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
|
||||||
Description:
|
Description:
|
||||||
The /sys/devices/.../wakeup_max_time_ms attribute contains
|
The /sys/devices/.../wakeup_max_time_ms attribute contains
|
||||||
the maximum time of processing a single wakeup event associated
|
the maximum time of processing a single wakeup event associated
|
||||||
|
@ -149,7 +149,7 @@ Description:
|
||||||
|
|
||||||
What: /sys/devices/.../power/wakeup_last_time_ms
|
What: /sys/devices/.../power/wakeup_last_time_ms
|
||||||
Date: September 2010
|
Date: September 2010
|
||||||
Contact: Rafael J. Wysocki <rjw@sisk.pl>
|
Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
|
||||||
Description:
|
Description:
|
||||||
The /sys/devices/.../wakeup_last_time_ms attribute contains
|
The /sys/devices/.../wakeup_last_time_ms attribute contains
|
||||||
the value of the monotonic clock corresponding to the time of
|
the value of the monotonic clock corresponding to the time of
|
||||||
|
@ -160,7 +160,7 @@ Description:
|
||||||
|
|
||||||
What: /sys/devices/.../power/wakeup_prevent_sleep_time_ms
|
What: /sys/devices/.../power/wakeup_prevent_sleep_time_ms
|
||||||
Date: February 2012
|
Date: February 2012
|
||||||
Contact: Rafael J. Wysocki <rjw@sisk.pl>
|
Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
|
||||||
Description:
|
Description:
|
||||||
The /sys/devices/.../wakeup_prevent_sleep_time_ms attribute
|
The /sys/devices/.../wakeup_prevent_sleep_time_ms attribute
|
||||||
contains the total time the device has been preventing
|
contains the total time the device has been preventing
|
||||||
|
@ -189,7 +189,7 @@ Description:
|
||||||
|
|
||||||
What: /sys/devices/.../power/pm_qos_latency_us
|
What: /sys/devices/.../power/pm_qos_latency_us
|
||||||
Date: March 2012
|
Date: March 2012
|
||||||
Contact: Rafael J. Wysocki <rjw@sisk.pl>
|
Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
|
||||||
Description:
|
Description:
|
||||||
The /sys/devices/.../power/pm_qos_resume_latency_us attribute
|
The /sys/devices/.../power/pm_qos_resume_latency_us attribute
|
||||||
contains the PM QoS resume latency limit for the given device,
|
contains the PM QoS resume latency limit for the given device,
|
||||||
|
@ -207,7 +207,7 @@ Description:
|
||||||
|
|
||||||
What: /sys/devices/.../power/pm_qos_no_power_off
|
What: /sys/devices/.../power/pm_qos_no_power_off
|
||||||
Date: September 2012
|
Date: September 2012
|
||||||
Contact: Rafael J. Wysocki <rjw@sisk.pl>
|
Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
|
||||||
Description:
|
Description:
|
||||||
The /sys/devices/.../power/pm_qos_no_power_off attribute
|
The /sys/devices/.../power/pm_qos_no_power_off attribute
|
||||||
is used for manipulating the PM QoS "no power off" flag. If
|
is used for manipulating the PM QoS "no power off" flag. If
|
||||||
|
@ -222,7 +222,7 @@ Description:
|
||||||
|
|
||||||
What: /sys/devices/.../power/pm_qos_remote_wakeup
|
What: /sys/devices/.../power/pm_qos_remote_wakeup
|
||||||
Date: September 2012
|
Date: September 2012
|
||||||
Contact: Rafael J. Wysocki <rjw@sisk.pl>
|
Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
|
||||||
Description:
|
Description:
|
||||||
The /sys/devices/.../power/pm_qos_remote_wakeup attribute
|
The /sys/devices/.../power/pm_qos_remote_wakeup attribute
|
||||||
is used for manipulating the PM QoS "remote wakeup required"
|
is used for manipulating the PM QoS "remote wakeup required"
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
What: /sys/power/
|
What: /sys/power/
|
||||||
Date: August 2006
|
Date: August 2006
|
||||||
Contact: Rafael J. Wysocki <rjw@sisk.pl>
|
Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
|
||||||
Description:
|
Description:
|
||||||
The /sys/power directory will contain files that will
|
The /sys/power directory will contain files that will
|
||||||
provide a unified interface to the power management
|
provide a unified interface to the power management
|
||||||
|
@ -8,7 +8,7 @@ Description:
|
||||||
|
|
||||||
What: /sys/power/state
|
What: /sys/power/state
|
||||||
Date: August 2006
|
Date: August 2006
|
||||||
Contact: Rafael J. Wysocki <rjw@sisk.pl>
|
Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
|
||||||
Description:
|
Description:
|
||||||
The /sys/power/state file controls the system power state.
|
The /sys/power/state file controls the system power state.
|
||||||
Reading from this file returns what states are supported,
|
Reading from this file returns what states are supported,
|
||||||
|
@ -22,7 +22,7 @@ Description:
|
||||||
|
|
||||||
What: /sys/power/disk
|
What: /sys/power/disk
|
||||||
Date: September 2006
|
Date: September 2006
|
||||||
Contact: Rafael J. Wysocki <rjw@sisk.pl>
|
Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
|
||||||
Description:
|
Description:
|
||||||
The /sys/power/disk file controls the operating mode of the
|
The /sys/power/disk file controls the operating mode of the
|
||||||
suspend-to-disk mechanism. Reading from this file returns
|
suspend-to-disk mechanism. Reading from this file returns
|
||||||
|
@ -67,7 +67,7 @@ Description:
|
||||||
|
|
||||||
What: /sys/power/image_size
|
What: /sys/power/image_size
|
||||||
Date: August 2006
|
Date: August 2006
|
||||||
Contact: Rafael J. Wysocki <rjw@sisk.pl>
|
Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
|
||||||
Description:
|
Description:
|
||||||
The /sys/power/image_size file controls the size of the image
|
The /sys/power/image_size file controls the size of the image
|
||||||
created by the suspend-to-disk mechanism. It can be written a
|
created by the suspend-to-disk mechanism. It can be written a
|
||||||
|
@ -84,7 +84,7 @@ Description:
|
||||||
|
|
||||||
What: /sys/power/pm_trace
|
What: /sys/power/pm_trace
|
||||||
Date: August 2006
|
Date: August 2006
|
||||||
Contact: Rafael J. Wysocki <rjw@sisk.pl>
|
Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
|
||||||
Description:
|
Description:
|
||||||
The /sys/power/pm_trace file controls the code which saves the
|
The /sys/power/pm_trace file controls the code which saves the
|
||||||
last PM event point in the RTC across reboots, so that you can
|
last PM event point in the RTC across reboots, so that you can
|
||||||
|
@ -133,7 +133,7 @@ Description:
|
||||||
|
|
||||||
What: /sys/power/pm_async
|
What: /sys/power/pm_async
|
||||||
Date: January 2009
|
Date: January 2009
|
||||||
Contact: Rafael J. Wysocki <rjw@sisk.pl>
|
Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
|
||||||
Description:
|
Description:
|
||||||
The /sys/power/pm_async file controls the switch allowing the
|
The /sys/power/pm_async file controls the switch allowing the
|
||||||
user space to enable or disable asynchronous suspend and resume
|
user space to enable or disable asynchronous suspend and resume
|
||||||
|
@ -146,7 +146,7 @@ Description:
|
||||||
|
|
||||||
What: /sys/power/wakeup_count
|
What: /sys/power/wakeup_count
|
||||||
Date: July 2010
|
Date: July 2010
|
||||||
Contact: Rafael J. Wysocki <rjw@sisk.pl>
|
Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
|
||||||
Description:
|
Description:
|
||||||
The /sys/power/wakeup_count file allows user space to put the
|
The /sys/power/wakeup_count file allows user space to put the
|
||||||
system into a sleep state while taking into account the
|
system into a sleep state while taking into account the
|
||||||
|
@ -161,7 +161,7 @@ Description:
|
||||||
|
|
||||||
What: /sys/power/reserved_size
|
What: /sys/power/reserved_size
|
||||||
Date: May 2011
|
Date: May 2011
|
||||||
Contact: Rafael J. Wysocki <rjw@sisk.pl>
|
Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
|
||||||
Description:
|
Description:
|
||||||
The /sys/power/reserved_size file allows user space to control
|
The /sys/power/reserved_size file allows user space to control
|
||||||
the amount of memory reserved for allocations made by device
|
the amount of memory reserved for allocations made by device
|
||||||
|
@ -175,7 +175,7 @@ Description:
|
||||||
|
|
||||||
What: /sys/power/autosleep
|
What: /sys/power/autosleep
|
||||||
Date: April 2012
|
Date: April 2012
|
||||||
Contact: Rafael J. Wysocki <rjw@sisk.pl>
|
Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
|
||||||
Description:
|
Description:
|
||||||
The /sys/power/autosleep file can be written one of the strings
|
The /sys/power/autosleep file can be written one of the strings
|
||||||
returned by reads from /sys/power/state. If that happens, a
|
returned by reads from /sys/power/state. If that happens, a
|
||||||
|
@ -192,7 +192,7 @@ Description:
|
||||||
|
|
||||||
What: /sys/power/wake_lock
|
What: /sys/power/wake_lock
|
||||||
Date: February 2012
|
Date: February 2012
|
||||||
Contact: Rafael J. Wysocki <rjw@sisk.pl>
|
Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
|
||||||
Description:
|
Description:
|
||||||
The /sys/power/wake_lock file allows user space to create
|
The /sys/power/wake_lock file allows user space to create
|
||||||
wakeup source objects and activate them on demand (if one of
|
wakeup source objects and activate them on demand (if one of
|
||||||
|
@ -219,7 +219,7 @@ Description:
|
||||||
|
|
||||||
What: /sys/power/wake_unlock
|
What: /sys/power/wake_unlock
|
||||||
Date: February 2012
|
Date: February 2012
|
||||||
Contact: Rafael J. Wysocki <rjw@sisk.pl>
|
Contact: Rafael J. Wysocki <rjw@rjwysocki.net>
|
||||||
Description:
|
Description:
|
||||||
The /sys/power/wake_unlock file allows user space to deactivate
|
The /sys/power/wake_unlock file allows user space to deactivate
|
||||||
wakeup sources created with the help of /sys/power/wake_lock.
|
wakeup sources created with the help of /sys/power/wake_lock.
|
||||||
|
|
|
@ -4,4 +4,4 @@ CONFIG_ACPI_CUSTOM_DSDT builds the image into the kernel.
|
||||||
|
|
||||||
When to use this method is described in detail on the
|
When to use this method is described in detail on the
|
||||||
Linux/ACPI home page:
|
Linux/ACPI home page:
|
||||||
http://www.lesswatts.org/projects/acpi/overridingDSDT.php
|
https://01.org/linux-acpi/documentation/overriding-dsdt
|
||||||
|
|
|
@ -1,168 +0,0 @@
|
||||||
*** Memory binding ***
|
|
||||||
|
|
||||||
The /memory node provides basic information about the address and size
|
|
||||||
of the physical memory. This node is usually filled or updated by the
|
|
||||||
bootloader, depending on the actual memory configuration of the given
|
|
||||||
hardware.
|
|
||||||
|
|
||||||
The memory layout is described by the following node:
|
|
||||||
|
|
||||||
/ {
|
|
||||||
#address-cells = <(n)>;
|
|
||||||
#size-cells = <(m)>;
|
|
||||||
memory {
|
|
||||||
device_type = "memory";
|
|
||||||
reg = <(baseaddr1) (size1)
|
|
||||||
(baseaddr2) (size2)
|
|
||||||
...
|
|
||||||
(baseaddrN) (sizeN)>;
|
|
||||||
};
|
|
||||||
...
|
|
||||||
};
|
|
||||||
|
|
||||||
A memory node follows the typical device tree rules for "reg" property:
|
|
||||||
n: number of cells used to store base address value
|
|
||||||
m: number of cells used to store size value
|
|
||||||
baseaddrX: defines a base address of the defined memory bank
|
|
||||||
sizeX: the size of the defined memory bank
|
|
||||||
|
|
||||||
|
|
||||||
More than one memory bank can be defined.
|
|
||||||
|
|
||||||
|
|
||||||
*** Reserved memory regions ***
|
|
||||||
|
|
||||||
In /memory/reserved-memory node one can create child nodes describing
|
|
||||||
particular reserved (excluded from normal use) memory regions. Such
|
|
||||||
memory regions are usually designed for the special usage by various
|
|
||||||
device drivers. A good example are contiguous memory allocations or
|
|
||||||
memory sharing with other operating system on the same hardware board.
|
|
||||||
Those special memory regions might depend on the board configuration and
|
|
||||||
devices used on the target system.
|
|
||||||
|
|
||||||
Parameters for each memory region can be encoded into the device tree
|
|
||||||
with the following convention:
|
|
||||||
|
|
||||||
[(label):] (name) {
|
|
||||||
compatible = "linux,contiguous-memory-region", "reserved-memory-region";
|
|
||||||
reg = <(address) (size)>;
|
|
||||||
(linux,default-contiguous-region);
|
|
||||||
};
|
|
||||||
|
|
||||||
compatible: one or more of:
|
|
||||||
- "linux,contiguous-memory-region" - enables binding of this
|
|
||||||
region to Contiguous Memory Allocator (special region for
|
|
||||||
contiguous memory allocations, shared with movable system
|
|
||||||
memory, Linux kernel-specific).
|
|
||||||
- "reserved-memory-region" - compatibility is defined, given
|
|
||||||
region is assigned for exclusive usage for by the respective
|
|
||||||
devices.
|
|
||||||
|
|
||||||
reg: standard property defining the base address and size of
|
|
||||||
the memory region
|
|
||||||
|
|
||||||
linux,default-contiguous-region: property indicating that the region
|
|
||||||
is the default region for all contiguous memory
|
|
||||||
allocations, Linux specific (optional)
|
|
||||||
|
|
||||||
It is optional to specify the base address, so if one wants to use
|
|
||||||
autoconfiguration of the base address, '0' can be specified as a base
|
|
||||||
address in the 'reg' property.
|
|
||||||
|
|
||||||
The /memory/reserved-memory node must contain the same #address-cells
|
|
||||||
and #size-cells value as the root node.
|
|
||||||
|
|
||||||
|
|
||||||
*** Device node's properties ***
|
|
||||||
|
|
||||||
Once regions in the /memory/reserved-memory node have been defined, they
|
|
||||||
may be referenced by other device nodes. Bindings that wish to reference
|
|
||||||
memory regions should explicitly document their use of the following
|
|
||||||
property:
|
|
||||||
|
|
||||||
memory-region = <&phandle_to_defined_region>;
|
|
||||||
|
|
||||||
This property indicates that the device driver should use the memory
|
|
||||||
region pointed by the given phandle.
|
|
||||||
|
|
||||||
|
|
||||||
*** Example ***
|
|
||||||
|
|
||||||
This example defines a memory consisting of 4 memory banks. 3 contiguous
|
|
||||||
regions are defined for Linux kernel, one default of all device drivers
|
|
||||||
(named contig_mem, placed at 0x72000000, 64MiB), one dedicated to the
|
|
||||||
framebuffer device (labelled display_mem, placed at 0x78000000, 8MiB)
|
|
||||||
and one for multimedia processing (labelled multimedia_mem, placed at
|
|
||||||
0x77000000, 64MiB). 'display_mem' region is then assigned to fb@12300000
|
|
||||||
device for DMA memory allocations (Linux kernel drivers will use CMA is
|
|
||||||
available or dma-exclusive usage otherwise). 'multimedia_mem' is
|
|
||||||
assigned to scaler@12500000 and codec@12600000 devices for contiguous
|
|
||||||
memory allocations when CMA driver is enabled.
|
|
||||||
|
|
||||||
The reason for creating a separate region for framebuffer device is to
|
|
||||||
match the framebuffer base address to the one configured by bootloader,
|
|
||||||
so once Linux kernel drivers starts no glitches on the displayed boot
|
|
||||||
logo appears. Scaller and codec drivers should share the memory
|
|
||||||
allocations.
|
|
||||||
|
|
||||||
/ {
|
|
||||||
#address-cells = <1>;
|
|
||||||
#size-cells = <1>;
|
|
||||||
|
|
||||||
/* ... */
|
|
||||||
|
|
||||||
memory {
|
|
||||||
reg = <0x40000000 0x10000000
|
|
||||||
0x50000000 0x10000000
|
|
||||||
0x60000000 0x10000000
|
|
||||||
0x70000000 0x10000000>;
|
|
||||||
|
|
||||||
reserved-memory {
|
|
||||||
#address-cells = <1>;
|
|
||||||
#size-cells = <1>;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* global autoconfigured region for contiguous allocations
|
|
||||||
* (used only with Contiguous Memory Allocator)
|
|
||||||
*/
|
|
||||||
contig_region@0 {
|
|
||||||
compatible = "linux,contiguous-memory-region";
|
|
||||||
reg = <0x0 0x4000000>;
|
|
||||||
linux,default-contiguous-region;
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* special region for framebuffer
|
|
||||||
*/
|
|
||||||
display_region: region@78000000 {
|
|
||||||
compatible = "linux,contiguous-memory-region", "reserved-memory-region";
|
|
||||||
reg = <0x78000000 0x800000>;
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* special region for multimedia processing devices
|
|
||||||
*/
|
|
||||||
multimedia_region: region@77000000 {
|
|
||||||
compatible = "linux,contiguous-memory-region";
|
|
||||||
reg = <0x77000000 0x4000000>;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
/* ... */
|
|
||||||
|
|
||||||
fb0: fb@12300000 {
|
|
||||||
status = "okay";
|
|
||||||
memory-region = <&display_region>;
|
|
||||||
};
|
|
||||||
|
|
||||||
scaler: scaler@12500000 {
|
|
||||||
status = "okay";
|
|
||||||
memory-region = <&multimedia_region>;
|
|
||||||
};
|
|
||||||
|
|
||||||
codec: codec@12600000 {
|
|
||||||
status = "okay";
|
|
||||||
memory-region = <&multimedia_region>;
|
|
||||||
};
|
|
||||||
};
|
|
|
@ -9,12 +9,15 @@ compulsory and any optional properties, common to all SD/MMC drivers, as
|
||||||
described in mmc.txt, can be used. Additionally the following tmio_mmc-specific
|
described in mmc.txt, can be used. Additionally the following tmio_mmc-specific
|
||||||
optional bindings can be used.
|
optional bindings can be used.
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
- compatible: "renesas,sdhi-shmobile" - a generic sh-mobile SDHI unit
|
||||||
|
"renesas,sdhi-sh7372" - SDHI IP on SH7372 SoC
|
||||||
|
"renesas,sdhi-sh73a0" - SDHI IP on SH73A0 SoC
|
||||||
|
"renesas,sdhi-r8a73a4" - SDHI IP on R8A73A4 SoC
|
||||||
|
"renesas,sdhi-r8a7740" - SDHI IP on R8A7740 SoC
|
||||||
|
"renesas,sdhi-r8a7778" - SDHI IP on R8A7778 SoC
|
||||||
|
"renesas,sdhi-r8a7779" - SDHI IP on R8A7779 SoC
|
||||||
|
"renesas,sdhi-r8a7790" - SDHI IP on R8A7790 SoC
|
||||||
|
|
||||||
Optional properties:
|
Optional properties:
|
||||||
- toshiba,mmc-wrprotect-disable: write-protect detection is unavailable
|
- toshiba,mmc-wrprotect-disable: write-protect detection is unavailable
|
||||||
|
|
||||||
When used with Renesas SDHI hardware, the following compatibility strings
|
|
||||||
configure various model-specific properties:
|
|
||||||
|
|
||||||
"renesas,sh7372-sdhi": (default) compatible with SH7372
|
|
||||||
"renesas,r8a7740-sdhi": compatible with R8A7740: certain MMC/SD commands have to
|
|
||||||
wait for the interface to become idle.
|
|
||||||
|
|
|
@ -28,6 +28,7 @@ ALC269/270/275/276/28x/29x
|
||||||
alc269-dmic Enable ALC269(VA) digital mic workaround
|
alc269-dmic Enable ALC269(VA) digital mic workaround
|
||||||
alc271-dmic Enable ALC271X digital mic workaround
|
alc271-dmic Enable ALC271X digital mic workaround
|
||||||
inv-dmic Inverted internal mic workaround
|
inv-dmic Inverted internal mic workaround
|
||||||
|
headset-mic Indicates a combined headset (headphone+mic) jack
|
||||||
lenovo-dock Enables docking station I/O for some Lenovos
|
lenovo-dock Enables docking station I/O for some Lenovos
|
||||||
dell-headset-multi Headset jack, which can also be used as mic-in
|
dell-headset-multi Headset jack, which can also be used as mic-in
|
||||||
dell-headset-dock Headset jack (without mic-in), and also dock I/O
|
dell-headset-dock Headset jack (without mic-in), and also dock I/O
|
||||||
|
|
54
MAINTAINERS
54
MAINTAINERS
|
@ -237,11 +237,11 @@ F: drivers/platform/x86/acer-wmi.c
|
||||||
|
|
||||||
ACPI
|
ACPI
|
||||||
M: Len Brown <lenb@kernel.org>
|
M: Len Brown <lenb@kernel.org>
|
||||||
M: Rafael J. Wysocki <rjw@sisk.pl>
|
M: Rafael J. Wysocki <rjw@rjwysocki.net>
|
||||||
L: linux-acpi@vger.kernel.org
|
L: linux-acpi@vger.kernel.org
|
||||||
W: http://www.lesswatts.org/projects/acpi/
|
W: https://01.org/linux-acpi
|
||||||
Q: http://patchwork.kernel.org/project/linux-acpi/list/
|
Q: https://patchwork.kernel.org/project/linux-acpi/list/
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
|
||||||
S: Supported
|
S: Supported
|
||||||
F: drivers/acpi/
|
F: drivers/acpi/
|
||||||
F: drivers/pnp/pnpacpi/
|
F: drivers/pnp/pnpacpi/
|
||||||
|
@ -256,21 +256,21 @@ F: drivers/pci/*/*/*acpi*
|
||||||
ACPI FAN DRIVER
|
ACPI FAN DRIVER
|
||||||
M: Zhang Rui <rui.zhang@intel.com>
|
M: Zhang Rui <rui.zhang@intel.com>
|
||||||
L: linux-acpi@vger.kernel.org
|
L: linux-acpi@vger.kernel.org
|
||||||
W: http://www.lesswatts.org/projects/acpi/
|
W: https://01.org/linux-acpi
|
||||||
S: Supported
|
S: Supported
|
||||||
F: drivers/acpi/fan.c
|
F: drivers/acpi/fan.c
|
||||||
|
|
||||||
ACPI THERMAL DRIVER
|
ACPI THERMAL DRIVER
|
||||||
M: Zhang Rui <rui.zhang@intel.com>
|
M: Zhang Rui <rui.zhang@intel.com>
|
||||||
L: linux-acpi@vger.kernel.org
|
L: linux-acpi@vger.kernel.org
|
||||||
W: http://www.lesswatts.org/projects/acpi/
|
W: https://01.org/linux-acpi
|
||||||
S: Supported
|
S: Supported
|
||||||
F: drivers/acpi/*thermal*
|
F: drivers/acpi/*thermal*
|
||||||
|
|
||||||
ACPI VIDEO DRIVER
|
ACPI VIDEO DRIVER
|
||||||
M: Zhang Rui <rui.zhang@intel.com>
|
M: Zhang Rui <rui.zhang@intel.com>
|
||||||
L: linux-acpi@vger.kernel.org
|
L: linux-acpi@vger.kernel.org
|
||||||
W: http://www.lesswatts.org/projects/acpi/
|
W: https://01.org/linux-acpi
|
||||||
S: Supported
|
S: Supported
|
||||||
F: drivers/acpi/video.c
|
F: drivers/acpi/video.c
|
||||||
|
|
||||||
|
@ -824,15 +824,21 @@ S: Maintained
|
||||||
F: arch/arm/mach-gemini/
|
F: arch/arm/mach-gemini/
|
||||||
|
|
||||||
ARM/CSR SIRFPRIMA2 MACHINE SUPPORT
|
ARM/CSR SIRFPRIMA2 MACHINE SUPPORT
|
||||||
M: Barry Song <baohua.song@csr.com>
|
M: Barry Song <baohua@kernel.org>
|
||||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/baohua/linux.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/baohua/linux.git
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: arch/arm/mach-prima2/
|
F: arch/arm/mach-prima2/
|
||||||
|
F: drivers/clk/clk-prima2.c
|
||||||
|
F: drivers/clocksource/timer-prima2.c
|
||||||
|
F: drivers/clocksource/timer-marco.c
|
||||||
F: drivers/dma/sirf-dma.c
|
F: drivers/dma/sirf-dma.c
|
||||||
F: drivers/i2c/busses/i2c-sirf.c
|
F: drivers/i2c/busses/i2c-sirf.c
|
||||||
|
F: drivers/input/misc/sirfsoc-onkey.c
|
||||||
|
F: drivers/irqchip/irq-sirfsoc.c
|
||||||
F: drivers/mmc/host/sdhci-sirf.c
|
F: drivers/mmc/host/sdhci-sirf.c
|
||||||
F: drivers/pinctrl/sirf/
|
F: drivers/pinctrl/sirf/
|
||||||
|
F: drivers/rtc/rtc-sirfsoc.c
|
||||||
F: drivers/spi/spi-sirf.c
|
F: drivers/spi/spi-sirf.c
|
||||||
|
|
||||||
ARM/EBSA110 MACHINE SUPPORT
|
ARM/EBSA110 MACHINE SUPPORT
|
||||||
|
@ -2295,7 +2301,7 @@ S: Maintained
|
||||||
F: drivers/net/ethernet/ti/cpmac.c
|
F: drivers/net/ethernet/ti/cpmac.c
|
||||||
|
|
||||||
CPU FREQUENCY DRIVERS
|
CPU FREQUENCY DRIVERS
|
||||||
M: Rafael J. Wysocki <rjw@sisk.pl>
|
M: Rafael J. Wysocki <rjw@rjwysocki.net>
|
||||||
M: Viresh Kumar <viresh.kumar@linaro.org>
|
M: Viresh Kumar <viresh.kumar@linaro.org>
|
||||||
L: cpufreq@vger.kernel.org
|
L: cpufreq@vger.kernel.org
|
||||||
L: linux-pm@vger.kernel.org
|
L: linux-pm@vger.kernel.org
|
||||||
|
@ -2326,7 +2332,7 @@ S: Maintained
|
||||||
F: drivers/cpuidle/cpuidle-big_little.c
|
F: drivers/cpuidle/cpuidle-big_little.c
|
||||||
|
|
||||||
CPUIDLE DRIVERS
|
CPUIDLE DRIVERS
|
||||||
M: Rafael J. Wysocki <rjw@sisk.pl>
|
M: Rafael J. Wysocki <rjw@rjwysocki.net>
|
||||||
M: Daniel Lezcano <daniel.lezcano@linaro.org>
|
M: Daniel Lezcano <daniel.lezcano@linaro.org>
|
||||||
L: linux-pm@vger.kernel.org
|
L: linux-pm@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
@ -3548,7 +3554,7 @@ F: fs/freevxfs/
|
||||||
|
|
||||||
FREEZER
|
FREEZER
|
||||||
M: Pavel Machek <pavel@ucw.cz>
|
M: Pavel Machek <pavel@ucw.cz>
|
||||||
M: "Rafael J. Wysocki" <rjw@sisk.pl>
|
M: "Rafael J. Wysocki" <rjw@rjwysocki.net>
|
||||||
L: linux-pm@vger.kernel.org
|
L: linux-pm@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
F: Documentation/power/freezing-of-tasks.txt
|
F: Documentation/power/freezing-of-tasks.txt
|
||||||
|
@ -3619,6 +3625,12 @@ L: linux-scsi@vger.kernel.org
|
||||||
S: Odd Fixes (e.g., new signatures)
|
S: Odd Fixes (e.g., new signatures)
|
||||||
F: drivers/scsi/fdomain.*
|
F: drivers/scsi/fdomain.*
|
||||||
|
|
||||||
|
GCOV BASED KERNEL PROFILING
|
||||||
|
M: Peter Oberparleiter <oberpar@linux.vnet.ibm.com>
|
||||||
|
S: Maintained
|
||||||
|
F: kernel/gcov/
|
||||||
|
F: Documentation/gcov.txt
|
||||||
|
|
||||||
GDT SCSI DISK ARRAY CONTROLLER DRIVER
|
GDT SCSI DISK ARRAY CONTROLLER DRIVER
|
||||||
M: Achim Leubner <achim_leubner@adaptec.com>
|
M: Achim Leubner <achim_leubner@adaptec.com>
|
||||||
L: linux-scsi@vger.kernel.org
|
L: linux-scsi@vger.kernel.org
|
||||||
|
@ -3884,7 +3896,7 @@ F: drivers/video/hgafb.c
|
||||||
|
|
||||||
HIBERNATION (aka Software Suspend, aka swsusp)
|
HIBERNATION (aka Software Suspend, aka swsusp)
|
||||||
M: Pavel Machek <pavel@ucw.cz>
|
M: Pavel Machek <pavel@ucw.cz>
|
||||||
M: "Rafael J. Wysocki" <rjw@sisk.pl>
|
M: "Rafael J. Wysocki" <rjw@rjwysocki.net>
|
||||||
L: linux-pm@vger.kernel.org
|
L: linux-pm@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
F: arch/x86/power/
|
F: arch/x86/power/
|
||||||
|
@ -4334,7 +4346,7 @@ F: drivers/video/i810/
|
||||||
INTEL MENLOW THERMAL DRIVER
|
INTEL MENLOW THERMAL DRIVER
|
||||||
M: Sujith Thomas <sujith.thomas@intel.com>
|
M: Sujith Thomas <sujith.thomas@intel.com>
|
||||||
L: platform-driver-x86@vger.kernel.org
|
L: platform-driver-x86@vger.kernel.org
|
||||||
W: http://www.lesswatts.org/projects/acpi/
|
W: https://01.org/linux-acpi
|
||||||
S: Supported
|
S: Supported
|
||||||
F: drivers/platform/x86/intel_menlow.c
|
F: drivers/platform/x86/intel_menlow.c
|
||||||
|
|
||||||
|
@ -4471,6 +4483,13 @@ L: linux-serial@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/tty/serial/ioc3_serial.c
|
F: drivers/tty/serial/ioc3_serial.c
|
||||||
|
|
||||||
|
IOMMU DRIVERS
|
||||||
|
M: Joerg Roedel <joro@8bytes.org>
|
||||||
|
L: iommu@lists.linux-foundation.org
|
||||||
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu.git
|
||||||
|
S: Maintained
|
||||||
|
F: drivers/iommu/
|
||||||
|
|
||||||
IP MASQUERADING
|
IP MASQUERADING
|
||||||
M: Juanjo Ciarlante <jjciarla@raiz.uncu.edu.ar>
|
M: Juanjo Ciarlante <jjciarla@raiz.uncu.edu.ar>
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
@ -7812,6 +7831,13 @@ F: Documentation/sound/alsa/soc/
|
||||||
F: sound/soc/
|
F: sound/soc/
|
||||||
F: include/sound/soc*
|
F: include/sound/soc*
|
||||||
|
|
||||||
|
SOUND - DMAENGINE HELPERS
|
||||||
|
M: Lars-Peter Clausen <lars@metafoo.de>
|
||||||
|
S: Supported
|
||||||
|
F: include/sound/dmaengine_pcm.h
|
||||||
|
F: sound/core/pcm_dmaengine.c
|
||||||
|
F: sound/soc/soc-generic-dmaengine-pcm.c
|
||||||
|
|
||||||
SPARC + UltraSPARC (sparc/sparc64)
|
SPARC + UltraSPARC (sparc/sparc64)
|
||||||
M: "David S. Miller" <davem@davemloft.net>
|
M: "David S. Miller" <davem@davemloft.net>
|
||||||
L: sparclinux@vger.kernel.org
|
L: sparclinux@vger.kernel.org
|
||||||
|
@ -8091,7 +8117,7 @@ F: drivers/sh/
|
||||||
SUSPEND TO RAM
|
SUSPEND TO RAM
|
||||||
M: Len Brown <len.brown@intel.com>
|
M: Len Brown <len.brown@intel.com>
|
||||||
M: Pavel Machek <pavel@ucw.cz>
|
M: Pavel Machek <pavel@ucw.cz>
|
||||||
M: "Rafael J. Wysocki" <rjw@sisk.pl>
|
M: "Rafael J. Wysocki" <rjw@rjwysocki.net>
|
||||||
L: linux-pm@vger.kernel.org
|
L: linux-pm@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
F: Documentation/power/
|
F: Documentation/power/
|
||||||
|
|
2
Makefile
2
Makefile
|
@ -1,7 +1,7 @@
|
||||||
VERSION = 3
|
VERSION = 3
|
||||||
PATCHLEVEL = 12
|
PATCHLEVEL = 12
|
||||||
SUBLEVEL = 0
|
SUBLEVEL = 0
|
||||||
EXTRAVERSION = -rc3
|
EXTRAVERSION = -rc6
|
||||||
NAME = One Giant Leap for Frogkind
|
NAME = One Giant Leap for Frogkind
|
||||||
|
|
||||||
# *DOCUMENTATION*
|
# *DOCUMENTATION*
|
||||||
|
|
|
@ -102,7 +102,7 @@ static int genregs_set(struct task_struct *target,
|
||||||
REG_IGNORE_ONE(pad2);
|
REG_IGNORE_ONE(pad2);
|
||||||
REG_IN_CHUNK(callee, efa, cregs); /* callee_regs[r25..r13] */
|
REG_IN_CHUNK(callee, efa, cregs); /* callee_regs[r25..r13] */
|
||||||
REG_IGNORE_ONE(efa); /* efa update invalid */
|
REG_IGNORE_ONE(efa); /* efa update invalid */
|
||||||
REG_IN_ONE(stop_pc, &ptregs->ret); /* stop_pc: PC update */
|
REG_IGNORE_ONE(stop_pc); /* PC updated via @ret */
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
|
@ -101,7 +101,6 @@ SYSCALL_DEFINE0(rt_sigreturn)
|
||||||
{
|
{
|
||||||
struct rt_sigframe __user *sf;
|
struct rt_sigframe __user *sf;
|
||||||
unsigned int magic;
|
unsigned int magic;
|
||||||
int err;
|
|
||||||
struct pt_regs *regs = current_pt_regs();
|
struct pt_regs *regs = current_pt_regs();
|
||||||
|
|
||||||
/* Always make any pending restarted system calls return -EINTR */
|
/* Always make any pending restarted system calls return -EINTR */
|
||||||
|
@ -119,15 +118,16 @@ SYSCALL_DEFINE0(rt_sigreturn)
|
||||||
if (!access_ok(VERIFY_READ, sf, sizeof(*sf)))
|
if (!access_ok(VERIFY_READ, sf, sizeof(*sf)))
|
||||||
goto badframe;
|
goto badframe;
|
||||||
|
|
||||||
err = restore_usr_regs(regs, sf);
|
if (__get_user(magic, &sf->sigret_magic))
|
||||||
err |= __get_user(magic, &sf->sigret_magic);
|
|
||||||
if (err)
|
|
||||||
goto badframe;
|
goto badframe;
|
||||||
|
|
||||||
if (unlikely(is_do_ss_needed(magic)))
|
if (unlikely(is_do_ss_needed(magic)))
|
||||||
if (restore_altstack(&sf->uc.uc_stack))
|
if (restore_altstack(&sf->uc.uc_stack))
|
||||||
goto badframe;
|
goto badframe;
|
||||||
|
|
||||||
|
if (restore_usr_regs(regs, sf))
|
||||||
|
goto badframe;
|
||||||
|
|
||||||
/* Don't restart from sigreturn */
|
/* Don't restart from sigreturn */
|
||||||
syscall_wont_restart(regs);
|
syscall_wont_restart(regs);
|
||||||
|
|
||||||
|
@ -190,6 +190,15 @@ setup_rt_frame(int signo, struct k_sigaction *ka, siginfo_t *info,
|
||||||
if (!sf)
|
if (!sf)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* w/o SA_SIGINFO, struct ucontext is partially populated (only
|
||||||
|
* uc_mcontext/uc_sigmask) for kernel's normal user state preservation
|
||||||
|
* during signal handler execution. This works for SA_SIGINFO as well
|
||||||
|
* although the semantics are now overloaded (the same reg state can be
|
||||||
|
* inspected by userland: but are they allowed to fiddle with it ?
|
||||||
|
*/
|
||||||
|
err |= stash_usr_regs(sf, regs, set);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* SA_SIGINFO requires 3 args to signal handler:
|
* SA_SIGINFO requires 3 args to signal handler:
|
||||||
* #1: sig-no (common to any handler)
|
* #1: sig-no (common to any handler)
|
||||||
|
@ -213,14 +222,6 @@ setup_rt_frame(int signo, struct k_sigaction *ka, siginfo_t *info,
|
||||||
magic = MAGIC_SIGALTSTK;
|
magic = MAGIC_SIGALTSTK;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* w/o SA_SIGINFO, struct ucontext is partially populated (only
|
|
||||||
* uc_mcontext/uc_sigmask) for kernel's normal user state preservation
|
|
||||||
* during signal handler execution. This works for SA_SIGINFO as well
|
|
||||||
* although the semantics are now overloaded (the same reg state can be
|
|
||||||
* inspected by userland: but are they allowed to fiddle with it ?
|
|
||||||
*/
|
|
||||||
err |= stash_usr_regs(sf, regs, set);
|
|
||||||
err |= __put_user(magic, &sf->sigret_magic);
|
err |= __put_user(magic, &sf->sigret_magic);
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
|
|
@ -296,10 +296,15 @@ archprepare:
|
||||||
# Convert bzImage to zImage
|
# Convert bzImage to zImage
|
||||||
bzImage: zImage
|
bzImage: zImage
|
||||||
|
|
||||||
zImage Image xipImage bootpImage uImage: vmlinux
|
BOOT_TARGETS = zImage Image xipImage bootpImage uImage
|
||||||
|
INSTALL_TARGETS = zinstall uinstall install
|
||||||
|
|
||||||
|
PHONY += bzImage $(BOOT_TARGETS) $(INSTALL_TARGETS)
|
||||||
|
|
||||||
|
$(BOOT_TARGETS): vmlinux
|
||||||
$(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/$@
|
$(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/$@
|
||||||
|
|
||||||
zinstall uinstall install: vmlinux
|
$(INSTALL_TARGETS):
|
||||||
$(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $@
|
$(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $@
|
||||||
|
|
||||||
%.dtb: | scripts
|
%.dtb: | scripts
|
||||||
|
|
|
@ -95,24 +95,24 @@ initrd:
|
||||||
@test "$(INITRD)" != "" || \
|
@test "$(INITRD)" != "" || \
|
||||||
(echo You must specify INITRD; exit -1)
|
(echo You must specify INITRD; exit -1)
|
||||||
|
|
||||||
install: $(obj)/Image
|
install:
|
||||||
$(CONFIG_SHELL) $(srctree)/$(src)/install.sh $(KERNELRELEASE) \
|
$(CONFIG_SHELL) $(srctree)/$(src)/install.sh "$(KERNELRELEASE)" \
|
||||||
$(obj)/Image System.map "$(INSTALL_PATH)"
|
$(obj)/Image System.map "$(INSTALL_PATH)"
|
||||||
|
|
||||||
zinstall: $(obj)/zImage
|
zinstall:
|
||||||
$(CONFIG_SHELL) $(srctree)/$(src)/install.sh $(KERNELRELEASE) \
|
$(CONFIG_SHELL) $(srctree)/$(src)/install.sh "$(KERNELRELEASE)" \
|
||||||
$(obj)/zImage System.map "$(INSTALL_PATH)"
|
$(obj)/zImage System.map "$(INSTALL_PATH)"
|
||||||
|
|
||||||
uinstall: $(obj)/uImage
|
uinstall:
|
||||||
$(CONFIG_SHELL) $(srctree)/$(src)/install.sh $(KERNELRELEASE) \
|
$(CONFIG_SHELL) $(srctree)/$(src)/install.sh "$(KERNELRELEASE)" \
|
||||||
$(obj)/uImage System.map "$(INSTALL_PATH)"
|
$(obj)/uImage System.map "$(INSTALL_PATH)"
|
||||||
|
|
||||||
zi:
|
zi:
|
||||||
$(CONFIG_SHELL) $(srctree)/$(src)/install.sh $(KERNELRELEASE) \
|
$(CONFIG_SHELL) $(srctree)/$(src)/install.sh "$(KERNELRELEASE)" \
|
||||||
$(obj)/zImage System.map "$(INSTALL_PATH)"
|
$(obj)/zImage System.map "$(INSTALL_PATH)"
|
||||||
|
|
||||||
i:
|
i:
|
||||||
$(CONFIG_SHELL) $(srctree)/$(src)/install.sh $(KERNELRELEASE) \
|
$(CONFIG_SHELL) $(srctree)/$(src)/install.sh "$(KERNELRELEASE)" \
|
||||||
$(obj)/Image System.map "$(INSTALL_PATH)"
|
$(obj)/Image System.map "$(INSTALL_PATH)"
|
||||||
|
|
||||||
subdir- := bootp compressed dts
|
subdir- := bootp compressed dts
|
||||||
|
|
|
@ -41,6 +41,8 @@ dtb-$(CONFIG_ARCH_AT91) += sama5d33ek.dtb
|
||||||
dtb-$(CONFIG_ARCH_AT91) += sama5d34ek.dtb
|
dtb-$(CONFIG_ARCH_AT91) += sama5d34ek.dtb
|
||||||
dtb-$(CONFIG_ARCH_AT91) += sama5d35ek.dtb
|
dtb-$(CONFIG_ARCH_AT91) += sama5d35ek.dtb
|
||||||
|
|
||||||
|
dtb-$(CONFIG_ARCH_ATLAS6) += atlas6-evb.dtb
|
||||||
|
|
||||||
dtb-$(CONFIG_ARCH_BCM2835) += bcm2835-rpi-b.dtb
|
dtb-$(CONFIG_ARCH_BCM2835) += bcm2835-rpi-b.dtb
|
||||||
dtb-$(CONFIG_ARCH_BCM) += bcm11351-brt.dtb \
|
dtb-$(CONFIG_ARCH_BCM) += bcm11351-brt.dtb \
|
||||||
bcm28155-ap.dtb
|
bcm28155-ap.dtb
|
||||||
|
|
|
@ -27,6 +27,25 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
soc {
|
soc {
|
||||||
|
ranges = <MBUS_ID(0xf0, 0x01) 0 0xd0000000 0x100000
|
||||||
|
MBUS_ID(0x01, 0xe0) 0 0xfff00000 0x100000>;
|
||||||
|
|
||||||
|
pcie-controller {
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
/* Connected to Marvell SATA controller */
|
||||||
|
pcie@1,0 {
|
||||||
|
/* Port 0, Lane 0 */
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Connected to FL1009 USB 3.0 controller */
|
||||||
|
pcie@2,0 {
|
||||||
|
/* Port 1, Lane 0 */
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
internal-regs {
|
internal-regs {
|
||||||
serial@12000 {
|
serial@12000 {
|
||||||
clock-frequency = <200000000>;
|
clock-frequency = <200000000>;
|
||||||
|
@ -57,6 +76,11 @@
|
||||||
marvell,pins = "mpp56";
|
marvell,pins = "mpp56";
|
||||||
marvell,function = "gpio";
|
marvell,function = "gpio";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
poweroff: poweroff {
|
||||||
|
marvell,pins = "mpp8";
|
||||||
|
marvell,function = "gpio";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
mdio {
|
mdio {
|
||||||
|
@ -89,22 +113,6 @@
|
||||||
pwm_polarity = <0>;
|
pwm_polarity = <0>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
pcie-controller {
|
|
||||||
status = "okay";
|
|
||||||
|
|
||||||
/* Connected to Marvell SATA controller */
|
|
||||||
pcie@1,0 {
|
|
||||||
/* Port 0, Lane 0 */
|
|
||||||
status = "okay";
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Connected to FL1009 USB 3.0 controller */
|
|
||||||
pcie@2,0 {
|
|
||||||
/* Port 1, Lane 0 */
|
|
||||||
status = "okay";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -160,7 +168,7 @@
|
||||||
button@1 {
|
button@1 {
|
||||||
label = "Power Button";
|
label = "Power Button";
|
||||||
linux,code = <116>; /* KEY_POWER */
|
linux,code = <116>; /* KEY_POWER */
|
||||||
gpios = <&gpio1 30 1>;
|
gpios = <&gpio1 30 0>;
|
||||||
};
|
};
|
||||||
|
|
||||||
button@2 {
|
button@2 {
|
||||||
|
@ -176,4 +184,11 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
gpio_poweroff {
|
||||||
|
compatible = "gpio-poweroff";
|
||||||
|
pinctrl-0 = <&poweroff>;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
gpios = <&gpio0 8 1>;
|
||||||
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -70,6 +70,8 @@
|
||||||
|
|
||||||
timer@20300 {
|
timer@20300 {
|
||||||
compatible = "marvell,armada-xp-timer";
|
compatible = "marvell,armada-xp-timer";
|
||||||
|
clocks = <&coreclk 2>, <&refclk>;
|
||||||
|
clock-names = "nbclk", "fixed";
|
||||||
};
|
};
|
||||||
|
|
||||||
coreclk: mvebu-sar@18230 {
|
coreclk: mvebu-sar@18230 {
|
||||||
|
@ -169,4 +171,13 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
clocks {
|
||||||
|
/* 25 MHz reference crystal */
|
||||||
|
refclk: oscillator {
|
||||||
|
compatible = "fixed-clock";
|
||||||
|
#clock-cells = <0>;
|
||||||
|
clock-frequency = <25000000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -190,12 +190,12 @@
|
||||||
AT91_PIOA 8 AT91_PERIPH_A AT91_PINCTRL_NONE>; /* PA8 periph A */
|
AT91_PIOA 8 AT91_PERIPH_A AT91_PINCTRL_NONE>; /* PA8 periph A */
|
||||||
};
|
};
|
||||||
|
|
||||||
pinctrl_uart2_rts: uart2_rts-0 {
|
pinctrl_usart2_rts: usart2_rts-0 {
|
||||||
atmel,pins =
|
atmel,pins =
|
||||||
<AT91_PIOB 0 AT91_PERIPH_B AT91_PINCTRL_NONE>; /* PB0 periph B */
|
<AT91_PIOB 0 AT91_PERIPH_B AT91_PINCTRL_NONE>; /* PB0 periph B */
|
||||||
};
|
};
|
||||||
|
|
||||||
pinctrl_uart2_cts: uart2_cts-0 {
|
pinctrl_usart2_cts: usart2_cts-0 {
|
||||||
atmel,pins =
|
atmel,pins =
|
||||||
<AT91_PIOB 1 AT91_PERIPH_B AT91_PINCTRL_NONE>; /* PB1 periph B */
|
<AT91_PIOB 1 AT91_PERIPH_B AT91_PINCTRL_NONE>; /* PB1 periph B */
|
||||||
};
|
};
|
||||||
|
@ -556,6 +556,7 @@
|
||||||
interrupts = <12 IRQ_TYPE_LEVEL_HIGH 0>;
|
interrupts = <12 IRQ_TYPE_LEVEL_HIGH 0>;
|
||||||
dmas = <&dma0 1 AT91_DMA_CFG_PER_ID(0)>;
|
dmas = <&dma0 1 AT91_DMA_CFG_PER_ID(0)>;
|
||||||
dma-names = "rxtx";
|
dma-names = "rxtx";
|
||||||
|
pinctrl-names = "default";
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
@ -567,6 +568,7 @@
|
||||||
interrupts = <26 IRQ_TYPE_LEVEL_HIGH 0>;
|
interrupts = <26 IRQ_TYPE_LEVEL_HIGH 0>;
|
||||||
dmas = <&dma1 1 AT91_DMA_CFG_PER_ID(0)>;
|
dmas = <&dma1 1 AT91_DMA_CFG_PER_ID(0)>;
|
||||||
dma-names = "rxtx";
|
dma-names = "rxtx";
|
||||||
|
pinctrl-names = "default";
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
|
|
@ -181,6 +181,8 @@
|
||||||
interrupts = <17>;
|
interrupts = <17>;
|
||||||
fifosize = <128>;
|
fifosize = <128>;
|
||||||
clocks = <&clks 13>;
|
clocks = <&clks 13>;
|
||||||
|
sirf,uart-dma-rx-channel = <21>;
|
||||||
|
sirf,uart-dma-tx-channel = <2>;
|
||||||
};
|
};
|
||||||
|
|
||||||
uart1: uart@b0060000 {
|
uart1: uart@b0060000 {
|
||||||
|
@ -199,6 +201,8 @@
|
||||||
interrupts = <19>;
|
interrupts = <19>;
|
||||||
fifosize = <128>;
|
fifosize = <128>;
|
||||||
clocks = <&clks 15>;
|
clocks = <&clks 15>;
|
||||||
|
sirf,uart-dma-rx-channel = <6>;
|
||||||
|
sirf,uart-dma-tx-channel = <7>;
|
||||||
};
|
};
|
||||||
|
|
||||||
usp0: usp@b0080000 {
|
usp0: usp@b0080000 {
|
||||||
|
@ -206,7 +210,10 @@
|
||||||
compatible = "sirf,prima2-usp";
|
compatible = "sirf,prima2-usp";
|
||||||
reg = <0xb0080000 0x10000>;
|
reg = <0xb0080000 0x10000>;
|
||||||
interrupts = <20>;
|
interrupts = <20>;
|
||||||
|
fifosize = <128>;
|
||||||
clocks = <&clks 28>;
|
clocks = <&clks 28>;
|
||||||
|
sirf,usp-dma-rx-channel = <17>;
|
||||||
|
sirf,usp-dma-tx-channel = <18>;
|
||||||
};
|
};
|
||||||
|
|
||||||
usp1: usp@b0090000 {
|
usp1: usp@b0090000 {
|
||||||
|
@ -214,7 +221,10 @@
|
||||||
compatible = "sirf,prima2-usp";
|
compatible = "sirf,prima2-usp";
|
||||||
reg = <0xb0090000 0x10000>;
|
reg = <0xb0090000 0x10000>;
|
||||||
interrupts = <21>;
|
interrupts = <21>;
|
||||||
|
fifosize = <128>;
|
||||||
clocks = <&clks 29>;
|
clocks = <&clks 29>;
|
||||||
|
sirf,usp-dma-rx-channel = <14>;
|
||||||
|
sirf,usp-dma-tx-channel = <15>;
|
||||||
};
|
};
|
||||||
|
|
||||||
dmac0: dma-controller@b00b0000 {
|
dmac0: dma-controller@b00b0000 {
|
||||||
|
@ -237,6 +247,8 @@
|
||||||
compatible = "sirf,prima2-vip";
|
compatible = "sirf,prima2-vip";
|
||||||
reg = <0xb00C0000 0x10000>;
|
reg = <0xb00C0000 0x10000>;
|
||||||
clocks = <&clks 31>;
|
clocks = <&clks 31>;
|
||||||
|
interrupts = <14>;
|
||||||
|
sirf,vip-dma-rx-channel = <16>;
|
||||||
};
|
};
|
||||||
|
|
||||||
spi0: spi@b00d0000 {
|
spi0: spi@b00d0000 {
|
||||||
|
|
|
@ -96,6 +96,11 @@
|
||||||
<1 14 0xf08>,
|
<1 14 0xf08>,
|
||||||
<1 11 0xf08>,
|
<1 11 0xf08>,
|
||||||
<1 10 0xf08>;
|
<1 10 0xf08>;
|
||||||
|
/* Unfortunately we need this since some versions of U-Boot
|
||||||
|
* on Exynos don't set the CNTFRQ register, so we need the
|
||||||
|
* value from DT.
|
||||||
|
*/
|
||||||
|
clock-frequency = <24000000>;
|
||||||
};
|
};
|
||||||
|
|
||||||
mct@101C0000 {
|
mct@101C0000 {
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
cpu@0 {
|
cpu@0 {
|
||||||
device_type = "cpu";
|
device_type = "cpu";
|
||||||
compatible = "marvell,feroceon";
|
compatible = "marvell,feroceon";
|
||||||
|
reg = <0>;
|
||||||
clocks = <&core_clk 1>, <&core_clk 3>, <&gate_clk 11>;
|
clocks = <&core_clk 1>, <&core_clk 3>, <&gate_clk 11>;
|
||||||
clock-names = "cpu_clk", "ddrclk", "powersave";
|
clock-names = "cpu_clk", "ddrclk", "powersave";
|
||||||
};
|
};
|
||||||
|
@ -167,7 +168,7 @@
|
||||||
xor@60900 {
|
xor@60900 {
|
||||||
compatible = "marvell,orion-xor";
|
compatible = "marvell,orion-xor";
|
||||||
reg = <0x60900 0x100
|
reg = <0x60900 0x100
|
||||||
0xd0B00 0x100>;
|
0x60B00 0x100>;
|
||||||
status = "okay";
|
status = "okay";
|
||||||
clocks = <&gate_clk 16>;
|
clocks = <&gate_clk 16>;
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
model = "TI OMAP3 BeagleBoard xM";
|
model = "TI OMAP3 BeagleBoard xM";
|
||||||
compatible = "ti,omap3-beagle-xm", "ti,omap3-beagle", "ti,omap3";
|
compatible = "ti,omap3-beagle-xm", "ti,omap36xx", "ti,omap3";
|
||||||
|
|
||||||
cpus {
|
cpus {
|
||||||
cpu@0 {
|
cpu@0 {
|
||||||
|
|
|
@ -108,7 +108,7 @@
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
pinctrl-single,register-width = <16>;
|
pinctrl-single,register-width = <16>;
|
||||||
pinctrl-single,function-mask = <0x7f1f>;
|
pinctrl-single,function-mask = <0xff1f>;
|
||||||
};
|
};
|
||||||
|
|
||||||
omap3_pmx_wkup: pinmux@0x48002a00 {
|
omap3_pmx_wkup: pinmux@0x48002a00 {
|
||||||
|
@ -117,7 +117,7 @@
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
pinctrl-single,register-width = <16>;
|
pinctrl-single,register-width = <16>;
|
||||||
pinctrl-single,function-mask = <0x7f1f>;
|
pinctrl-single,function-mask = <0xff1f>;
|
||||||
};
|
};
|
||||||
|
|
||||||
gpio1: gpio@48310000 {
|
gpio1: gpio@48310000 {
|
||||||
|
|
|
@ -171,7 +171,8 @@
|
||||||
compatible = "simple-bus";
|
compatible = "simple-bus";
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
ranges = <0xb0000000 0xb0000000 0x180000>;
|
ranges = <0xb0000000 0xb0000000 0x180000>,
|
||||||
|
<0x56000000 0x56000000 0x1b00000>;
|
||||||
|
|
||||||
timer@b0020000 {
|
timer@b0020000 {
|
||||||
compatible = "sirf,prima2-tick";
|
compatible = "sirf,prima2-tick";
|
||||||
|
@ -196,25 +197,32 @@
|
||||||
uart0: uart@b0050000 {
|
uart0: uart@b0050000 {
|
||||||
cell-index = <0>;
|
cell-index = <0>;
|
||||||
compatible = "sirf,prima2-uart";
|
compatible = "sirf,prima2-uart";
|
||||||
reg = <0xb0050000 0x10000>;
|
reg = <0xb0050000 0x1000>;
|
||||||
interrupts = <17>;
|
interrupts = <17>;
|
||||||
|
fifosize = <128>;
|
||||||
clocks = <&clks 13>;
|
clocks = <&clks 13>;
|
||||||
|
sirf,uart-dma-rx-channel = <21>;
|
||||||
|
sirf,uart-dma-tx-channel = <2>;
|
||||||
};
|
};
|
||||||
|
|
||||||
uart1: uart@b0060000 {
|
uart1: uart@b0060000 {
|
||||||
cell-index = <1>;
|
cell-index = <1>;
|
||||||
compatible = "sirf,prima2-uart";
|
compatible = "sirf,prima2-uart";
|
||||||
reg = <0xb0060000 0x10000>;
|
reg = <0xb0060000 0x1000>;
|
||||||
interrupts = <18>;
|
interrupts = <18>;
|
||||||
|
fifosize = <32>;
|
||||||
clocks = <&clks 14>;
|
clocks = <&clks 14>;
|
||||||
};
|
};
|
||||||
|
|
||||||
uart2: uart@b0070000 {
|
uart2: uart@b0070000 {
|
||||||
cell-index = <2>;
|
cell-index = <2>;
|
||||||
compatible = "sirf,prima2-uart";
|
compatible = "sirf,prima2-uart";
|
||||||
reg = <0xb0070000 0x10000>;
|
reg = <0xb0070000 0x1000>;
|
||||||
interrupts = <19>;
|
interrupts = <19>;
|
||||||
|
fifosize = <128>;
|
||||||
clocks = <&clks 15>;
|
clocks = <&clks 15>;
|
||||||
|
sirf,uart-dma-rx-channel = <6>;
|
||||||
|
sirf,uart-dma-tx-channel = <7>;
|
||||||
};
|
};
|
||||||
|
|
||||||
usp0: usp@b0080000 {
|
usp0: usp@b0080000 {
|
||||||
|
@ -222,7 +230,10 @@
|
||||||
compatible = "sirf,prima2-usp";
|
compatible = "sirf,prima2-usp";
|
||||||
reg = <0xb0080000 0x10000>;
|
reg = <0xb0080000 0x10000>;
|
||||||
interrupts = <20>;
|
interrupts = <20>;
|
||||||
|
fifosize = <128>;
|
||||||
clocks = <&clks 28>;
|
clocks = <&clks 28>;
|
||||||
|
sirf,usp-dma-rx-channel = <17>;
|
||||||
|
sirf,usp-dma-tx-channel = <18>;
|
||||||
};
|
};
|
||||||
|
|
||||||
usp1: usp@b0090000 {
|
usp1: usp@b0090000 {
|
||||||
|
@ -230,7 +241,10 @@
|
||||||
compatible = "sirf,prima2-usp";
|
compatible = "sirf,prima2-usp";
|
||||||
reg = <0xb0090000 0x10000>;
|
reg = <0xb0090000 0x10000>;
|
||||||
interrupts = <21>;
|
interrupts = <21>;
|
||||||
|
fifosize = <128>;
|
||||||
clocks = <&clks 29>;
|
clocks = <&clks 29>;
|
||||||
|
sirf,usp-dma-rx-channel = <14>;
|
||||||
|
sirf,usp-dma-tx-channel = <15>;
|
||||||
};
|
};
|
||||||
|
|
||||||
usp2: usp@b00a0000 {
|
usp2: usp@b00a0000 {
|
||||||
|
@ -238,7 +252,10 @@
|
||||||
compatible = "sirf,prima2-usp";
|
compatible = "sirf,prima2-usp";
|
||||||
reg = <0xb00a0000 0x10000>;
|
reg = <0xb00a0000 0x10000>;
|
||||||
interrupts = <22>;
|
interrupts = <22>;
|
||||||
|
fifosize = <128>;
|
||||||
clocks = <&clks 30>;
|
clocks = <&clks 30>;
|
||||||
|
sirf,usp-dma-rx-channel = <10>;
|
||||||
|
sirf,usp-dma-tx-channel = <11>;
|
||||||
};
|
};
|
||||||
|
|
||||||
dmac0: dma-controller@b00b0000 {
|
dmac0: dma-controller@b00b0000 {
|
||||||
|
@ -261,6 +278,8 @@
|
||||||
compatible = "sirf,prima2-vip";
|
compatible = "sirf,prima2-vip";
|
||||||
reg = <0xb00C0000 0x10000>;
|
reg = <0xb00C0000 0x10000>;
|
||||||
clocks = <&clks 31>;
|
clocks = <&clks 31>;
|
||||||
|
interrupts = <14>;
|
||||||
|
sirf,vip-dma-rx-channel = <16>;
|
||||||
};
|
};
|
||||||
|
|
||||||
spi0: spi@b00d0000 {
|
spi0: spi@b00d0000 {
|
||||||
|
|
|
@ -193,7 +193,7 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
sdhi0: sdhi@ee100000 {
|
sdhi0: sdhi@ee100000 {
|
||||||
compatible = "renesas,r8a73a4-sdhi";
|
compatible = "renesas,sdhi-r8a73a4";
|
||||||
reg = <0 0xee100000 0 0x100>;
|
reg = <0 0xee100000 0 0x100>;
|
||||||
interrupt-parent = <&gic>;
|
interrupt-parent = <&gic>;
|
||||||
interrupts = <0 165 4>;
|
interrupts = <0 165 4>;
|
||||||
|
@ -202,7 +202,7 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
sdhi1: sdhi@ee120000 {
|
sdhi1: sdhi@ee120000 {
|
||||||
compatible = "renesas,r8a73a4-sdhi";
|
compatible = "renesas,sdhi-r8a73a4";
|
||||||
reg = <0 0xee120000 0 0x100>;
|
reg = <0 0xee120000 0 0x100>;
|
||||||
interrupt-parent = <&gic>;
|
interrupt-parent = <&gic>;
|
||||||
interrupts = <0 166 4>;
|
interrupts = <0 166 4>;
|
||||||
|
@ -211,7 +211,7 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
sdhi2: sdhi@ee140000 {
|
sdhi2: sdhi@ee140000 {
|
||||||
compatible = "renesas,r8a73a4-sdhi";
|
compatible = "renesas,sdhi-r8a73a4";
|
||||||
reg = <0 0xee140000 0 0x100>;
|
reg = <0 0xee140000 0 0x100>;
|
||||||
interrupt-parent = <&gic>;
|
interrupt-parent = <&gic>;
|
||||||
interrupts = <0 167 4>;
|
interrupts = <0 167 4>;
|
||||||
|
|
|
@ -96,6 +96,5 @@
|
||||||
pfc: pfc@fffc0000 {
|
pfc: pfc@fffc0000 {
|
||||||
compatible = "renesas,pfc-r8a7778";
|
compatible = "renesas,pfc-r8a7778";
|
||||||
reg = <0xfffc000 0x118>;
|
reg = <0xfffc000 0x118>;
|
||||||
#gpio-range-cells = <3>;
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -188,7 +188,6 @@
|
||||||
pfc: pfc@fffc0000 {
|
pfc: pfc@fffc0000 {
|
||||||
compatible = "renesas,pfc-r8a7779";
|
compatible = "renesas,pfc-r8a7779";
|
||||||
reg = <0xfffc0000 0x23c>;
|
reg = <0xfffc0000 0x23c>;
|
||||||
#gpio-range-cells = <3>;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
thermal@ffc48000 {
|
thermal@ffc48000 {
|
||||||
|
|
|
@ -148,11 +148,10 @@
|
||||||
pfc: pfc@e6060000 {
|
pfc: pfc@e6060000 {
|
||||||
compatible = "renesas,pfc-r8a7790";
|
compatible = "renesas,pfc-r8a7790";
|
||||||
reg = <0 0xe6060000 0 0x250>;
|
reg = <0 0xe6060000 0 0x250>;
|
||||||
#gpio-range-cells = <3>;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
sdhi0: sdhi@ee100000 {
|
sdhi0: sdhi@ee100000 {
|
||||||
compatible = "renesas,r8a7790-sdhi";
|
compatible = "renesas,sdhi-r8a7790";
|
||||||
reg = <0 0xee100000 0 0x100>;
|
reg = <0 0xee100000 0 0x100>;
|
||||||
interrupt-parent = <&gic>;
|
interrupt-parent = <&gic>;
|
||||||
interrupts = <0 165 4>;
|
interrupts = <0 165 4>;
|
||||||
|
@ -161,7 +160,7 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
sdhi1: sdhi@ee120000 {
|
sdhi1: sdhi@ee120000 {
|
||||||
compatible = "renesas,r8a7790-sdhi";
|
compatible = "renesas,sdhi-r8a7790";
|
||||||
reg = <0 0xee120000 0 0x100>;
|
reg = <0 0xee120000 0 0x100>;
|
||||||
interrupt-parent = <&gic>;
|
interrupt-parent = <&gic>;
|
||||||
interrupts = <0 166 4>;
|
interrupts = <0 166 4>;
|
||||||
|
@ -170,7 +169,7 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
sdhi2: sdhi@ee140000 {
|
sdhi2: sdhi@ee140000 {
|
||||||
compatible = "renesas,r8a7790-sdhi";
|
compatible = "renesas,sdhi-r8a7790";
|
||||||
reg = <0 0xee140000 0 0x100>;
|
reg = <0 0xee140000 0 0x100>;
|
||||||
interrupt-parent = <&gic>;
|
interrupt-parent = <&gic>;
|
||||||
interrupts = <0 167 4>;
|
interrupts = <0 167 4>;
|
||||||
|
@ -179,7 +178,7 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
sdhi3: sdhi@ee160000 {
|
sdhi3: sdhi@ee160000 {
|
||||||
compatible = "renesas,r8a7790-sdhi";
|
compatible = "renesas,sdhi-r8a7790";
|
||||||
reg = <0 0xee160000 0 0x100>;
|
reg = <0 0xee160000 0 0x100>;
|
||||||
interrupt-parent = <&gic>;
|
interrupt-parent = <&gic>;
|
||||||
interrupts = <0 168 4>;
|
interrupts = <0 168 4>;
|
||||||
|
|
|
@ -196,7 +196,7 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
sdhi0: sdhi@ee100000 {
|
sdhi0: sdhi@ee100000 {
|
||||||
compatible = "renesas,r8a7740-sdhi";
|
compatible = "renesas,sdhi-r8a7740";
|
||||||
reg = <0xee100000 0x100>;
|
reg = <0xee100000 0x100>;
|
||||||
interrupt-parent = <&gic>;
|
interrupt-parent = <&gic>;
|
||||||
interrupts = <0 83 4
|
interrupts = <0 83 4
|
||||||
|
@ -208,7 +208,7 @@
|
||||||
|
|
||||||
/* SDHI1 and SDHI2 have no CD pins, no need for CD IRQ */
|
/* SDHI1 and SDHI2 have no CD pins, no need for CD IRQ */
|
||||||
sdhi1: sdhi@ee120000 {
|
sdhi1: sdhi@ee120000 {
|
||||||
compatible = "renesas,r8a7740-sdhi";
|
compatible = "renesas,sdhi-r8a7740";
|
||||||
reg = <0xee120000 0x100>;
|
reg = <0xee120000 0x100>;
|
||||||
interrupt-parent = <&gic>;
|
interrupt-parent = <&gic>;
|
||||||
interrupts = <0 88 4
|
interrupts = <0 88 4
|
||||||
|
@ -219,7 +219,7 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
sdhi2: sdhi@ee140000 {
|
sdhi2: sdhi@ee140000 {
|
||||||
compatible = "renesas,r8a7740-sdhi";
|
compatible = "renesas,sdhi-r8a7740";
|
||||||
reg = <0xee140000 0x100>;
|
reg = <0xee140000 0x100>;
|
||||||
interrupt-parent = <&gic>;
|
interrupt-parent = <&gic>;
|
||||||
interrupts = <0 104 4
|
interrupts = <0 104 4
|
||||||
|
|
|
@ -20,6 +20,20 @@
|
||||||
# $4 - default install path (blank if root directory)
|
# $4 - default install path (blank if root directory)
|
||||||
#
|
#
|
||||||
|
|
||||||
|
verify () {
|
||||||
|
if [ ! -f "$1" ]; then
|
||||||
|
echo "" 1>&2
|
||||||
|
echo " *** Missing file: $1" 1>&2
|
||||||
|
echo ' *** You need to run "make" before "make install".' 1>&2
|
||||||
|
echo "" 1>&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Make sure the files actually exist
|
||||||
|
verify "$2"
|
||||||
|
verify "$3"
|
||||||
|
|
||||||
# User may have a custom install script
|
# User may have a custom install script
|
||||||
if [ -x ~/bin/${INSTALLKERNEL} ]; then exec ~/bin/${INSTALLKERNEL} "$@"; fi
|
if [ -x ~/bin/${INSTALLKERNEL} ]; then exec ~/bin/${INSTALLKERNEL} "$@"; fi
|
||||||
if [ -x /sbin/${INSTALLKERNEL} ]; then exec /sbin/${INSTALLKERNEL} "$@"; fi
|
if [ -x /sbin/${INSTALLKERNEL} ]; then exec /sbin/${INSTALLKERNEL} "$@"; fi
|
||||||
|
|
|
@ -269,6 +269,11 @@ static const struct edmacc_param dummy_paramset = {
|
||||||
.ccnt = 1,
|
.ccnt = 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const struct of_device_id edma_of_ids[] = {
|
||||||
|
{ .compatible = "ti,edma3", },
|
||||||
|
{}
|
||||||
|
};
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
static void map_dmach_queue(unsigned ctlr, unsigned ch_no,
|
static void map_dmach_queue(unsigned ctlr, unsigned ch_no,
|
||||||
|
@ -560,14 +565,38 @@ static int reserve_contiguous_slots(int ctlr, unsigned int id,
|
||||||
static int prepare_unused_channel_list(struct device *dev, void *data)
|
static int prepare_unused_channel_list(struct device *dev, void *data)
|
||||||
{
|
{
|
||||||
struct platform_device *pdev = to_platform_device(dev);
|
struct platform_device *pdev = to_platform_device(dev);
|
||||||
int i, ctlr;
|
int i, count, ctlr;
|
||||||
|
struct of_phandle_args dma_spec;
|
||||||
|
|
||||||
|
if (dev->of_node) {
|
||||||
|
count = of_property_count_strings(dev->of_node, "dma-names");
|
||||||
|
if (count < 0)
|
||||||
|
return 0;
|
||||||
|
for (i = 0; i < count; i++) {
|
||||||
|
if (of_parse_phandle_with_args(dev->of_node, "dmas",
|
||||||
|
"#dma-cells", i,
|
||||||
|
&dma_spec))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (!of_match_node(edma_of_ids, dma_spec.np)) {
|
||||||
|
of_node_put(dma_spec.np);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
clear_bit(EDMA_CHAN_SLOT(dma_spec.args[0]),
|
||||||
|
edma_cc[0]->edma_unused);
|
||||||
|
of_node_put(dma_spec.np);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* For non-OF case */
|
||||||
for (i = 0; i < pdev->num_resources; i++) {
|
for (i = 0; i < pdev->num_resources; i++) {
|
||||||
if ((pdev->resource[i].flags & IORESOURCE_DMA) &&
|
if ((pdev->resource[i].flags & IORESOURCE_DMA) &&
|
||||||
(int)pdev->resource[i].start >= 0) {
|
(int)pdev->resource[i].start >= 0) {
|
||||||
ctlr = EDMA_CTLR(pdev->resource[i].start);
|
ctlr = EDMA_CTLR(pdev->resource[i].start);
|
||||||
clear_bit(EDMA_CHAN_SLOT(pdev->resource[i].start),
|
clear_bit(EDMA_CHAN_SLOT(pdev->resource[i].start),
|
||||||
edma_cc[ctlr]->edma_unused);
|
edma_cc[ctlr]->edma_unused);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1762,11 +1791,6 @@ static int edma_probe(struct platform_device *pdev)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct of_device_id edma_of_ids[] = {
|
|
||||||
{ .compatible = "ti,edma3", },
|
|
||||||
{}
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct platform_driver edma_driver = {
|
static struct platform_driver edma_driver = {
|
||||||
.driver = {
|
.driver = {
|
||||||
.name = "edma",
|
.name = "edma",
|
||||||
|
|
|
@ -51,7 +51,8 @@ void mcpm_cpu_power_down(void)
|
||||||
{
|
{
|
||||||
phys_reset_t phys_reset;
|
phys_reset_t phys_reset;
|
||||||
|
|
||||||
BUG_ON(!platform_ops);
|
if (WARN_ON_ONCE(!platform_ops || !platform_ops->power_down))
|
||||||
|
return;
|
||||||
BUG_ON(!irqs_disabled());
|
BUG_ON(!irqs_disabled());
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -93,7 +94,8 @@ void mcpm_cpu_suspend(u64 expected_residency)
|
||||||
{
|
{
|
||||||
phys_reset_t phys_reset;
|
phys_reset_t phys_reset;
|
||||||
|
|
||||||
BUG_ON(!platform_ops);
|
if (WARN_ON_ONCE(!platform_ops || !platform_ops->suspend))
|
||||||
|
return;
|
||||||
BUG_ON(!irqs_disabled());
|
BUG_ON(!irqs_disabled());
|
||||||
|
|
||||||
/* Very similar to mcpm_cpu_power_down() */
|
/* Very similar to mcpm_cpu_power_down() */
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/string.h>
|
#include <linux/string.h>
|
||||||
#include <asm/mach/sharpsl_param.h>
|
#include <asm/mach/sharpsl_param.h>
|
||||||
|
#include <asm/memory.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Certain hardware parameters determined at the time of device manufacture,
|
* Certain hardware parameters determined at the time of device manufacture,
|
||||||
|
@ -25,8 +26,10 @@
|
||||||
*/
|
*/
|
||||||
#ifdef CONFIG_ARCH_SA1100
|
#ifdef CONFIG_ARCH_SA1100
|
||||||
#define PARAM_BASE 0xe8ffc000
|
#define PARAM_BASE 0xe8ffc000
|
||||||
|
#define param_start(x) (void *)(x)
|
||||||
#else
|
#else
|
||||||
#define PARAM_BASE 0xa0000a00
|
#define PARAM_BASE 0xa0000a00
|
||||||
|
#define param_start(x) __va(x)
|
||||||
#endif
|
#endif
|
||||||
#define MAGIC_CHG(a,b,c,d) ( ( d << 24 ) | ( c << 16 ) | ( b << 8 ) | a )
|
#define MAGIC_CHG(a,b,c,d) ( ( d << 24 ) | ( c << 16 ) | ( b << 8 ) | a )
|
||||||
|
|
||||||
|
@ -41,7 +44,7 @@ EXPORT_SYMBOL(sharpsl_param);
|
||||||
|
|
||||||
void sharpsl_save_param(void)
|
void sharpsl_save_param(void)
|
||||||
{
|
{
|
||||||
memcpy(&sharpsl_param, (void *)PARAM_BASE, sizeof(struct sharpsl_param_info));
|
memcpy(&sharpsl_param, param_start(PARAM_BASE), sizeof(struct sharpsl_param_info));
|
||||||
|
|
||||||
if (sharpsl_param.comadj_keyword != COMADJ_MAGIC)
|
if (sharpsl_param.comadj_keyword != COMADJ_MAGIC)
|
||||||
sharpsl_param.comadj=-1;
|
sharpsl_param.comadj=-1;
|
||||||
|
|
|
@ -135,6 +135,7 @@ CONFIG_MMC=y
|
||||||
CONFIG_MMC_ARMMMCI=y
|
CONFIG_MMC_ARMMMCI=y
|
||||||
CONFIG_MMC_SDHCI=y
|
CONFIG_MMC_SDHCI=y
|
||||||
CONFIG_MMC_SDHCI_PLTFM=y
|
CONFIG_MMC_SDHCI_PLTFM=y
|
||||||
|
CONFIG_MMC_SDHCI_ESDHC_IMX=y
|
||||||
CONFIG_MMC_SDHCI_TEGRA=y
|
CONFIG_MMC_SDHCI_TEGRA=y
|
||||||
CONFIG_MMC_SDHCI_SPEAR=y
|
CONFIG_MMC_SDHCI_SPEAR=y
|
||||||
CONFIG_MMC_OMAP=y
|
CONFIG_MMC_OMAP=y
|
||||||
|
|
|
@ -31,5 +31,4 @@ generic-y += termbits.h
|
||||||
generic-y += termios.h
|
generic-y += termios.h
|
||||||
generic-y += timex.h
|
generic-y += timex.h
|
||||||
generic-y += trace_clock.h
|
generic-y += trace_clock.h
|
||||||
generic-y += types.h
|
|
||||||
generic-y += unaligned.h
|
generic-y += unaligned.h
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
|
|
||||||
static __always_inline bool arch_static_branch(struct static_key *key)
|
static __always_inline bool arch_static_branch(struct static_key *key)
|
||||||
{
|
{
|
||||||
asm goto("1:\n\t"
|
asm_volatile_goto("1:\n\t"
|
||||||
JUMP_LABEL_NOP "\n\t"
|
JUMP_LABEL_NOP "\n\t"
|
||||||
".pushsection __jump_table, \"aw\"\n\t"
|
".pushsection __jump_table, \"aw\"\n\t"
|
||||||
".word 1b, %l[l_yes], %c0\n\t"
|
".word 1b, %l[l_yes], %c0\n\t"
|
||||||
|
|
|
@ -76,8 +76,11 @@ int mcpm_cpu_power_up(unsigned int cpu, unsigned int cluster);
|
||||||
*
|
*
|
||||||
* This must be called with interrupts disabled.
|
* This must be called with interrupts disabled.
|
||||||
*
|
*
|
||||||
* This does not return. Re-entry in the kernel is expected via
|
* On success this does not return. Re-entry in the kernel is expected
|
||||||
* mcpm_entry_point.
|
* via mcpm_entry_point.
|
||||||
|
*
|
||||||
|
* This will return if mcpm_platform_register() has not been called
|
||||||
|
* previously in which case the caller should take appropriate action.
|
||||||
*/
|
*/
|
||||||
void mcpm_cpu_power_down(void);
|
void mcpm_cpu_power_down(void);
|
||||||
|
|
||||||
|
@ -98,8 +101,11 @@ void mcpm_cpu_power_down(void);
|
||||||
*
|
*
|
||||||
* This must be called with interrupts disabled.
|
* This must be called with interrupts disabled.
|
||||||
*
|
*
|
||||||
* This does not return. Re-entry in the kernel is expected via
|
* On success this does not return. Re-entry in the kernel is expected
|
||||||
* mcpm_entry_point.
|
* via mcpm_entry_point.
|
||||||
|
*
|
||||||
|
* This will return if mcpm_platform_register() has not been called
|
||||||
|
* previously in which case the caller should take appropriate action.
|
||||||
*/
|
*/
|
||||||
void mcpm_cpu_suspend(u64 expected_residency);
|
void mcpm_cpu_suspend(u64 expected_residency);
|
||||||
|
|
||||||
|
|
|
@ -57,6 +57,9 @@ static inline void syscall_get_arguments(struct task_struct *task,
|
||||||
unsigned int i, unsigned int n,
|
unsigned int i, unsigned int n,
|
||||||
unsigned long *args)
|
unsigned long *args)
|
||||||
{
|
{
|
||||||
|
if (n == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
if (i + n > SYSCALL_MAX_ARGS) {
|
if (i + n > SYSCALL_MAX_ARGS) {
|
||||||
unsigned long *args_bad = args + SYSCALL_MAX_ARGS - i;
|
unsigned long *args_bad = args + SYSCALL_MAX_ARGS - i;
|
||||||
unsigned int n_bad = n + i - SYSCALL_MAX_ARGS;
|
unsigned int n_bad = n + i - SYSCALL_MAX_ARGS;
|
||||||
|
@ -81,6 +84,9 @@ static inline void syscall_set_arguments(struct task_struct *task,
|
||||||
unsigned int i, unsigned int n,
|
unsigned int i, unsigned int n,
|
||||||
const unsigned long *args)
|
const unsigned long *args)
|
||||||
{
|
{
|
||||||
|
if (n == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
if (i + n > SYSCALL_MAX_ARGS) {
|
if (i + n > SYSCALL_MAX_ARGS) {
|
||||||
pr_warning("%s called with max args %d, handling only %d\n",
|
pr_warning("%s called with max args %d, handling only %d\n",
|
||||||
__func__, i + n, SYSCALL_MAX_ARGS);
|
__func__, i + n, SYSCALL_MAX_ARGS);
|
||||||
|
|
|
@ -487,7 +487,26 @@ __fixup_smp:
|
||||||
mrc p15, 0, r0, c0, c0, 5 @ read MPIDR
|
mrc p15, 0, r0, c0, c0, 5 @ read MPIDR
|
||||||
and r0, r0, #0xc0000000 @ multiprocessing extensions and
|
and r0, r0, #0xc0000000 @ multiprocessing extensions and
|
||||||
teq r0, #0x80000000 @ not part of a uniprocessor system?
|
teq r0, #0x80000000 @ not part of a uniprocessor system?
|
||||||
moveq pc, lr @ yes, assume SMP
|
bne __fixup_smp_on_up @ no, assume UP
|
||||||
|
|
||||||
|
@ Core indicates it is SMP. Check for Aegis SOC where a single
|
||||||
|
@ Cortex-A9 CPU is present but SMP operations fault.
|
||||||
|
mov r4, #0x41000000
|
||||||
|
orr r4, r4, #0x0000c000
|
||||||
|
orr r4, r4, #0x00000090
|
||||||
|
teq r3, r4 @ Check for ARM Cortex-A9
|
||||||
|
movne pc, lr @ Not ARM Cortex-A9,
|
||||||
|
|
||||||
|
@ If a future SoC *does* use 0x0 as the PERIPH_BASE, then the
|
||||||
|
@ below address check will need to be #ifdef'd or equivalent
|
||||||
|
@ for the Aegis platform.
|
||||||
|
mrc p15, 4, r0, c15, c0 @ get SCU base address
|
||||||
|
teq r0, #0x0 @ '0' on actual UP A9 hardware
|
||||||
|
beq __fixup_smp_on_up @ So its an A9 UP
|
||||||
|
ldr r0, [r0, #4] @ read SCU Config
|
||||||
|
and r0, r0, #0x3 @ number of CPUs
|
||||||
|
teq r0, #0x0 @ is 1?
|
||||||
|
movne pc, lr
|
||||||
|
|
||||||
__fixup_smp_on_up:
|
__fixup_smp_on_up:
|
||||||
adr r0, 1f
|
adr r0, 1f
|
||||||
|
|
|
@ -93,7 +93,7 @@ static irqreturn_t at91rm9200_timer_interrupt(int irq, void *dev_id)
|
||||||
|
|
||||||
static struct irqaction at91rm9200_timer_irq = {
|
static struct irqaction at91rm9200_timer_irq = {
|
||||||
.name = "at91_tick",
|
.name = "at91_tick",
|
||||||
.flags = IRQF_SHARED | IRQF_DISABLED | IRQF_TIMER | IRQF_IRQPOLL,
|
.flags = IRQF_SHARED | IRQF_TIMER | IRQF_IRQPOLL,
|
||||||
.handler = at91rm9200_timer_interrupt,
|
.handler = at91rm9200_timer_interrupt,
|
||||||
.irq = NR_IRQS_LEGACY + AT91_ID_SYS,
|
.irq = NR_IRQS_LEGACY + AT91_ID_SYS,
|
||||||
};
|
};
|
||||||
|
|
|
@ -171,7 +171,7 @@ static irqreturn_t at91sam926x_pit_interrupt(int irq, void *dev_id)
|
||||||
|
|
||||||
static struct irqaction at91sam926x_pit_irq = {
|
static struct irqaction at91sam926x_pit_irq = {
|
||||||
.name = "at91_tick",
|
.name = "at91_tick",
|
||||||
.flags = IRQF_SHARED | IRQF_DISABLED | IRQF_TIMER | IRQF_IRQPOLL,
|
.flags = IRQF_SHARED | IRQF_TIMER | IRQF_IRQPOLL,
|
||||||
.handler = at91sam926x_pit_interrupt,
|
.handler = at91sam926x_pit_interrupt,
|
||||||
.irq = NR_IRQS_LEGACY + AT91_ID_SYS,
|
.irq = NR_IRQS_LEGACY + AT91_ID_SYS,
|
||||||
};
|
};
|
||||||
|
|
|
@ -16,11 +16,17 @@
|
||||||
#include "at91_rstc.h"
|
#include "at91_rstc.h"
|
||||||
.arm
|
.arm
|
||||||
|
|
||||||
|
/*
|
||||||
|
* at91_ramc_base is an array void*
|
||||||
|
* init at NULL if only one DDR controler is present in or DT
|
||||||
|
*/
|
||||||
.globl at91sam9g45_restart
|
.globl at91sam9g45_restart
|
||||||
|
|
||||||
at91sam9g45_restart:
|
at91sam9g45_restart:
|
||||||
ldr r5, =at91_ramc_base @ preload constants
|
ldr r5, =at91_ramc_base @ preload constants
|
||||||
ldr r0, [r5]
|
ldr r0, [r5]
|
||||||
|
ldr r5, [r5, #4] @ ddr1
|
||||||
|
cmp r5, #0
|
||||||
ldr r4, =at91_rstc_base
|
ldr r4, =at91_rstc_base
|
||||||
ldr r1, [r4]
|
ldr r1, [r4]
|
||||||
|
|
||||||
|
@ -30,6 +36,8 @@ at91sam9g45_restart:
|
||||||
|
|
||||||
.balign 32 @ align to cache line
|
.balign 32 @ align to cache line
|
||||||
|
|
||||||
|
strne r2, [r5, #AT91_DDRSDRC_RTR] @ disable DDR1 access
|
||||||
|
strne r3, [r5, #AT91_DDRSDRC_LPR] @ power down DDR1
|
||||||
str r2, [r0, #AT91_DDRSDRC_RTR] @ disable DDR0 access
|
str r2, [r0, #AT91_DDRSDRC_RTR] @ disable DDR0 access
|
||||||
str r3, [r0, #AT91_DDRSDRC_LPR] @ power down DDR0
|
str r3, [r0, #AT91_DDRSDRC_LPR] @ power down DDR0
|
||||||
str r4, [r1, #AT91_RSTC_CR] @ reset processor
|
str r4, [r1, #AT91_RSTC_CR] @ reset processor
|
||||||
|
|
|
@ -57,7 +57,7 @@ static irqreturn_t at91x40_timer_interrupt(int irq, void *dev_id)
|
||||||
|
|
||||||
static struct irqaction at91x40_timer_irq = {
|
static struct irqaction at91x40_timer_irq = {
|
||||||
.name = "at91_tick",
|
.name = "at91_tick",
|
||||||
.flags = IRQF_DISABLED | IRQF_TIMER,
|
.flags = IRQF_TIMER,
|
||||||
.handler = at91x40_timer_interrupt
|
.handler = at91x40_timer_interrupt
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -176,7 +176,7 @@ static struct at24_platform_data eeprom_info = {
|
||||||
.context = (void *)0x7f00,
|
.context = (void *)0x7f00,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct snd_platform_data dm365_evm_snd_data = {
|
static struct snd_platform_data dm365_evm_snd_data __maybe_unused = {
|
||||||
.asp_chan_q = EVENTQ_3,
|
.asp_chan_q = EVENTQ_3,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -15,8 +15,6 @@
|
||||||
|
|
||||||
#include <mach/hardware.h>
|
#include <mach/hardware.h>
|
||||||
|
|
||||||
#include <linux/platform_device.h>
|
|
||||||
|
|
||||||
#define DAVINCI_UART0_BASE (IO_PHYS + 0x20000)
|
#define DAVINCI_UART0_BASE (IO_PHYS + 0x20000)
|
||||||
#define DAVINCI_UART1_BASE (IO_PHYS + 0x20400)
|
#define DAVINCI_UART1_BASE (IO_PHYS + 0x20400)
|
||||||
#define DAVINCI_UART2_BASE (IO_PHYS + 0x20800)
|
#define DAVINCI_UART2_BASE (IO_PHYS + 0x20800)
|
||||||
|
@ -39,6 +37,8 @@
|
||||||
#define UART_DM646X_SCR_TX_WATERMARK 0x08
|
#define UART_DM646X_SCR_TX_WATERMARK 0x08
|
||||||
|
|
||||||
#ifndef __ASSEMBLY__
|
#ifndef __ASSEMBLY__
|
||||||
|
#include <linux/platform_device.h>
|
||||||
|
|
||||||
extern int davinci_serial_init(struct platform_device *);
|
extern int davinci_serial_init(struct platform_device *);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -1,2 +1,9 @@
|
||||||
/* Simple oneliner include to the PCIv3 early init */
|
/* Simple oneliner include to the PCIv3 early init */
|
||||||
|
#ifdef CONFIG_PCI
|
||||||
extern int pci_v3_early_init(void);
|
extern int pci_v3_early_init(void);
|
||||||
|
#else
|
||||||
|
static inline int pci_v3_early_init(void)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
|
@ -140,6 +140,7 @@ int __init coherency_init(void)
|
||||||
coherency_base = of_iomap(np, 0);
|
coherency_base = of_iomap(np, 0);
|
||||||
coherency_cpu_base = of_iomap(np, 1);
|
coherency_cpu_base = of_iomap(np, 1);
|
||||||
set_cpu_coherent(cpu_logical_map(smp_processor_id()), 0);
|
set_cpu_coherent(cpu_logical_map(smp_processor_id()), 0);
|
||||||
|
of_node_put(np);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -147,9 +148,14 @@ int __init coherency_init(void)
|
||||||
|
|
||||||
static int __init coherency_late_init(void)
|
static int __init coherency_late_init(void)
|
||||||
{
|
{
|
||||||
if (of_find_matching_node(NULL, of_coherency_table))
|
struct device_node *np;
|
||||||
|
|
||||||
|
np = of_find_matching_node(NULL, of_coherency_table);
|
||||||
|
if (np) {
|
||||||
bus_register_notifier(&platform_bus_type,
|
bus_register_notifier(&platform_bus_type,
|
||||||
&mvebu_hwcc_platform_nb);
|
&mvebu_hwcc_platform_nb);
|
||||||
|
of_node_put(np);
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -67,6 +67,7 @@ int __init armada_370_xp_pmsu_init(void)
|
||||||
pr_info("Initializing Power Management Service Unit\n");
|
pr_info("Initializing Power Management Service Unit\n");
|
||||||
pmsu_mp_base = of_iomap(np, 0);
|
pmsu_mp_base = of_iomap(np, 0);
|
||||||
pmsu_reset_base = of_iomap(np, 1);
|
pmsu_reset_base = of_iomap(np, 1);
|
||||||
|
of_node_put(np);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -98,6 +98,7 @@ static int __init mvebu_system_controller_init(void)
|
||||||
BUG_ON(!match);
|
BUG_ON(!match);
|
||||||
system_controller_base = of_iomap(np, 0);
|
system_controller_base = of_iomap(np, 0);
|
||||||
mvebu_sc = (struct mvebu_system_controller *)match->data;
|
mvebu_sc = (struct mvebu_system_controller *)match->data;
|
||||||
|
of_node_put(np);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -129,6 +129,24 @@ DT_MACHINE_START(OMAP3_DT, "Generic OMAP3 (Flattened Device Tree)")
|
||||||
.restart = omap3xxx_restart,
|
.restart = omap3xxx_restart,
|
||||||
MACHINE_END
|
MACHINE_END
|
||||||
|
|
||||||
|
static const char *omap36xx_boards_compat[] __initdata = {
|
||||||
|
"ti,omap36xx",
|
||||||
|
NULL,
|
||||||
|
};
|
||||||
|
|
||||||
|
DT_MACHINE_START(OMAP36XX_DT, "Generic OMAP36xx (Flattened Device Tree)")
|
||||||
|
.reserve = omap_reserve,
|
||||||
|
.map_io = omap3_map_io,
|
||||||
|
.init_early = omap3630_init_early,
|
||||||
|
.init_irq = omap_intc_of_init,
|
||||||
|
.handle_irq = omap3_intc_handle_irq,
|
||||||
|
.init_machine = omap_generic_init,
|
||||||
|
.init_late = omap3_init_late,
|
||||||
|
.init_time = omap3_sync32k_timer_init,
|
||||||
|
.dt_compat = omap36xx_boards_compat,
|
||||||
|
.restart = omap3xxx_restart,
|
||||||
|
MACHINE_END
|
||||||
|
|
||||||
static const char *omap3_gp_boards_compat[] __initdata = {
|
static const char *omap3_gp_boards_compat[] __initdata = {
|
||||||
"ti,omap3-beagle",
|
"ti,omap3-beagle",
|
||||||
"timll,omap3-devkit8000",
|
"timll,omap3-devkit8000",
|
||||||
|
|
|
@ -167,38 +167,47 @@ static struct lp55xx_led_config rx51_lp5523_led_config[] = {
|
||||||
.name = "lp5523:kb1",
|
.name = "lp5523:kb1",
|
||||||
.chan_nr = 0,
|
.chan_nr = 0,
|
||||||
.led_current = 50,
|
.led_current = 50,
|
||||||
|
.max_current = 100,
|
||||||
}, {
|
}, {
|
||||||
.name = "lp5523:kb2",
|
.name = "lp5523:kb2",
|
||||||
.chan_nr = 1,
|
.chan_nr = 1,
|
||||||
.led_current = 50,
|
.led_current = 50,
|
||||||
|
.max_current = 100,
|
||||||
}, {
|
}, {
|
||||||
.name = "lp5523:kb3",
|
.name = "lp5523:kb3",
|
||||||
.chan_nr = 2,
|
.chan_nr = 2,
|
||||||
.led_current = 50,
|
.led_current = 50,
|
||||||
|
.max_current = 100,
|
||||||
}, {
|
}, {
|
||||||
.name = "lp5523:kb4",
|
.name = "lp5523:kb4",
|
||||||
.chan_nr = 3,
|
.chan_nr = 3,
|
||||||
.led_current = 50,
|
.led_current = 50,
|
||||||
|
.max_current = 100,
|
||||||
}, {
|
}, {
|
||||||
.name = "lp5523:b",
|
.name = "lp5523:b",
|
||||||
.chan_nr = 4,
|
.chan_nr = 4,
|
||||||
.led_current = 50,
|
.led_current = 50,
|
||||||
|
.max_current = 100,
|
||||||
}, {
|
}, {
|
||||||
.name = "lp5523:g",
|
.name = "lp5523:g",
|
||||||
.chan_nr = 5,
|
.chan_nr = 5,
|
||||||
.led_current = 50,
|
.led_current = 50,
|
||||||
|
.max_current = 100,
|
||||||
}, {
|
}, {
|
||||||
.name = "lp5523:r",
|
.name = "lp5523:r",
|
||||||
.chan_nr = 6,
|
.chan_nr = 6,
|
||||||
.led_current = 50,
|
.led_current = 50,
|
||||||
|
.max_current = 100,
|
||||||
}, {
|
}, {
|
||||||
.name = "lp5523:kb5",
|
.name = "lp5523:kb5",
|
||||||
.chan_nr = 7,
|
.chan_nr = 7,
|
||||||
.led_current = 50,
|
.led_current = 50,
|
||||||
|
.max_current = 100,
|
||||||
}, {
|
}, {
|
||||||
.name = "lp5523:kb6",
|
.name = "lp5523:kb6",
|
||||||
.chan_nr = 8,
|
.chan_nr = 8,
|
||||||
.led_current = 50,
|
.led_current = 50,
|
||||||
|
.max_current = 100,
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -272,9 +272,19 @@ static int omap2_onenand_setup_async(void __iomem *onenand_base)
|
||||||
struct gpmc_timings t;
|
struct gpmc_timings t;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (gpmc_onenand_data->of_node)
|
if (gpmc_onenand_data->of_node) {
|
||||||
gpmc_read_settings_dt(gpmc_onenand_data->of_node,
|
gpmc_read_settings_dt(gpmc_onenand_data->of_node,
|
||||||
&onenand_async);
|
&onenand_async);
|
||||||
|
if (onenand_async.sync_read || onenand_async.sync_write) {
|
||||||
|
if (onenand_async.sync_write)
|
||||||
|
gpmc_onenand_data->flags |=
|
||||||
|
ONENAND_SYNC_READWRITE;
|
||||||
|
else
|
||||||
|
gpmc_onenand_data->flags |= ONENAND_SYNC_READ;
|
||||||
|
onenand_async.sync_read = false;
|
||||||
|
onenand_async.sync_write = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
omap2_onenand_set_async_mode(onenand_base);
|
omap2_onenand_set_async_mode(onenand_base);
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
#define OMAP_PULL_UP (1 << 4)
|
#define OMAP_PULL_UP (1 << 4)
|
||||||
#define OMAP_ALTELECTRICALSEL (1 << 5)
|
#define OMAP_ALTELECTRICALSEL (1 << 5)
|
||||||
|
|
||||||
/* 34xx specific mux bit defines */
|
/* omap3/4/5 specific mux bit defines */
|
||||||
#define OMAP_INPUT_EN (1 << 8)
|
#define OMAP_INPUT_EN (1 << 8)
|
||||||
#define OMAP_OFF_EN (1 << 9)
|
#define OMAP_OFF_EN (1 << 9)
|
||||||
#define OMAP_OFFOUT_EN (1 << 10)
|
#define OMAP_OFFOUT_EN (1 << 10)
|
||||||
|
@ -36,8 +36,6 @@
|
||||||
#define OMAP_OFF_PULL_EN (1 << 12)
|
#define OMAP_OFF_PULL_EN (1 << 12)
|
||||||
#define OMAP_OFF_PULL_UP (1 << 13)
|
#define OMAP_OFF_PULL_UP (1 << 13)
|
||||||
#define OMAP_WAKEUP_EN (1 << 14)
|
#define OMAP_WAKEUP_EN (1 << 14)
|
||||||
|
|
||||||
/* 44xx specific mux bit defines */
|
|
||||||
#define OMAP_WAKEUP_EVENT (1 << 15)
|
#define OMAP_WAKEUP_EVENT (1 << 15)
|
||||||
|
|
||||||
/* Active pin states */
|
/* Active pin states */
|
||||||
|
|
|
@ -628,7 +628,7 @@ void __init omap4_local_timer_init(void)
|
||||||
#endif /* CONFIG_HAVE_ARM_TWD */
|
#endif /* CONFIG_HAVE_ARM_TWD */
|
||||||
#endif /* CONFIG_ARCH_OMAP4 */
|
#endif /* CONFIG_ARCH_OMAP4 */
|
||||||
|
|
||||||
#ifdef CONFIG_SOC_OMAP5
|
#if defined(CONFIG_SOC_OMAP5) || defined(CONFIG_SOC_DRA7XX)
|
||||||
void __init omap5_realtime_timer_init(void)
|
void __init omap5_realtime_timer_init(void)
|
||||||
{
|
{
|
||||||
omap4_sync32k_timer_init();
|
omap4_sync32k_timer_init();
|
||||||
|
@ -636,7 +636,7 @@ void __init omap5_realtime_timer_init(void)
|
||||||
|
|
||||||
clocksource_of_init();
|
clocksource_of_init();
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_SOC_OMAP5 */
|
#endif /* CONFIG_SOC_OMAP5 || CONFIG_SOC_DRA7XX */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* omap_timer_init - build and register timer device with an
|
* omap_timer_init - build and register timer device with an
|
||||||
|
|
|
@ -1108,9 +1108,9 @@ static const struct pinctrl_map eva_pinctrl_map[] = {
|
||||||
PIN_MAP_MUX_GROUP_DEFAULT("asoc-simple-card.1", "pfc-r8a7740",
|
PIN_MAP_MUX_GROUP_DEFAULT("asoc-simple-card.1", "pfc-r8a7740",
|
||||||
"fsib_mclk_in", "fsib"),
|
"fsib_mclk_in", "fsib"),
|
||||||
/* GETHER */
|
/* GETHER */
|
||||||
PIN_MAP_MUX_GROUP_DEFAULT("sh-eth", "pfc-r8a7740",
|
PIN_MAP_MUX_GROUP_DEFAULT("r8a7740-gether", "pfc-r8a7740",
|
||||||
"gether_mii", "gether"),
|
"gether_mii", "gether"),
|
||||||
PIN_MAP_MUX_GROUP_DEFAULT("sh-eth", "pfc-r8a7740",
|
PIN_MAP_MUX_GROUP_DEFAULT("r8a7740-gether", "pfc-r8a7740",
|
||||||
"gether_int", "gether"),
|
"gether_int", "gether"),
|
||||||
/* HDMI */
|
/* HDMI */
|
||||||
PIN_MAP_MUX_GROUP_DEFAULT("sh-mobile-hdmi", "pfc-r8a7740",
|
PIN_MAP_MUX_GROUP_DEFAULT("sh-mobile-hdmi", "pfc-r8a7740",
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
#include <linux/pinctrl/machine.h>
|
#include <linux/pinctrl/machine.h>
|
||||||
#include <linux/platform_data/gpio-rcar.h>
|
#include <linux/platform_data/gpio-rcar.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
|
#include <linux/phy.h>
|
||||||
#include <linux/regulator/fixed.h>
|
#include <linux/regulator/fixed.h>
|
||||||
#include <linux/regulator/machine.h>
|
#include <linux/regulator/machine.h>
|
||||||
#include <linux/sh_eth.h>
|
#include <linux/sh_eth.h>
|
||||||
|
@ -155,6 +156,30 @@ static void __init lager_add_standard_devices(void)
|
||||||
ðer_pdata, sizeof(ether_pdata));
|
ðer_pdata, sizeof(ether_pdata));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Ether LEDs on the Lager board are named LINK and ACTIVE which corresponds
|
||||||
|
* to non-default 01 setting of the Micrel KSZ8041 PHY control register 1 bits
|
||||||
|
* 14-15. We have to set them back to 01 from the default 00 value each time
|
||||||
|
* the PHY is reset. It's also important because the PHY's LED0 signal is
|
||||||
|
* connected to SoC's ETH_LINK signal and in the PHY's default mode it will
|
||||||
|
* bounce on and off after each packet, which we apparently want to avoid.
|
||||||
|
*/
|
||||||
|
static int lager_ksz8041_fixup(struct phy_device *phydev)
|
||||||
|
{
|
||||||
|
u16 phyctrl1 = phy_read(phydev, 0x1e);
|
||||||
|
|
||||||
|
phyctrl1 &= ~0xc000;
|
||||||
|
phyctrl1 |= 0x4000;
|
||||||
|
return phy_write(phydev, 0x1e, phyctrl1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void __init lager_init(void)
|
||||||
|
{
|
||||||
|
lager_add_standard_devices();
|
||||||
|
|
||||||
|
phy_register_fixup_for_id("r8a7790-ether-ff:01", lager_ksz8041_fixup);
|
||||||
|
}
|
||||||
|
|
||||||
static const char *lager_boards_compat_dt[] __initdata = {
|
static const char *lager_boards_compat_dt[] __initdata = {
|
||||||
"renesas,lager",
|
"renesas,lager",
|
||||||
NULL,
|
NULL,
|
||||||
|
@ -163,6 +188,6 @@ static const char *lager_boards_compat_dt[] __initdata = {
|
||||||
DT_MACHINE_START(LAGER_DT, "lager")
|
DT_MACHINE_START(LAGER_DT, "lager")
|
||||||
.init_early = r8a7790_init_delay,
|
.init_early = r8a7790_init_delay,
|
||||||
.init_time = r8a7790_timer_init,
|
.init_time = r8a7790_timer_init,
|
||||||
.init_machine = lager_add_standard_devices,
|
.init_machine = lager_init,
|
||||||
.dt_compat = lager_boards_compat_dt,
|
.dt_compat = lager_boards_compat_dt,
|
||||||
MACHINE_END
|
MACHINE_END
|
||||||
|
|
|
@ -131,6 +131,16 @@ static void tc2_pm_down(u64 residency)
|
||||||
} else
|
} else
|
||||||
BUG();
|
BUG();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If the CPU is committed to power down, make sure
|
||||||
|
* the power controller will be in charge of waking it
|
||||||
|
* up upon IRQ, ie IRQ lines are cut from GIC CPU IF
|
||||||
|
* to the CPU by disabling the GIC CPU IF to prevent wfi
|
||||||
|
* from completing execution behind power controller back
|
||||||
|
*/
|
||||||
|
if (!skip_wfi)
|
||||||
|
gic_cpu_if_down();
|
||||||
|
|
||||||
if (last_man && __mcpm_outbound_enter_critical(cpu, cluster)) {
|
if (last_man && __mcpm_outbound_enter_critical(cpu, cluster)) {
|
||||||
arch_spin_unlock(&tc2_pm_lock);
|
arch_spin_unlock(&tc2_pm_lock);
|
||||||
|
|
||||||
|
@ -231,7 +241,6 @@ static void tc2_pm_suspend(u64 residency)
|
||||||
cpu = MPIDR_AFFINITY_LEVEL(mpidr, 0);
|
cpu = MPIDR_AFFINITY_LEVEL(mpidr, 0);
|
||||||
cluster = MPIDR_AFFINITY_LEVEL(mpidr, 1);
|
cluster = MPIDR_AFFINITY_LEVEL(mpidr, 1);
|
||||||
ve_spc_set_resume_addr(cluster, cpu, virt_to_phys(mcpm_entry_point));
|
ve_spc_set_resume_addr(cluster, cpu, virt_to_phys(mcpm_entry_point));
|
||||||
gic_cpu_if_down();
|
|
||||||
tc2_pm_down(residency);
|
tc2_pm_down(residency);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1232,7 +1232,8 @@ __iommu_create_mapping(struct device *dev, struct page **pages, size_t size)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
len = (j - i) << PAGE_SHIFT;
|
len = (j - i) << PAGE_SHIFT;
|
||||||
ret = iommu_map(mapping->domain, iova, phys, len, 0);
|
ret = iommu_map(mapping->domain, iova, phys, len,
|
||||||
|
IOMMU_READ|IOMMU_WRITE);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
goto fail;
|
goto fail;
|
||||||
iova += len;
|
iova += len;
|
||||||
|
@ -1431,6 +1432,27 @@ static int arm_iommu_get_sgtable(struct device *dev, struct sg_table *sgt,
|
||||||
GFP_KERNEL);
|
GFP_KERNEL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int __dma_direction_to_prot(enum dma_data_direction dir)
|
||||||
|
{
|
||||||
|
int prot;
|
||||||
|
|
||||||
|
switch (dir) {
|
||||||
|
case DMA_BIDIRECTIONAL:
|
||||||
|
prot = IOMMU_READ | IOMMU_WRITE;
|
||||||
|
break;
|
||||||
|
case DMA_TO_DEVICE:
|
||||||
|
prot = IOMMU_READ;
|
||||||
|
break;
|
||||||
|
case DMA_FROM_DEVICE:
|
||||||
|
prot = IOMMU_WRITE;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
prot = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return prot;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Map a part of the scatter-gather list into contiguous io address space
|
* Map a part of the scatter-gather list into contiguous io address space
|
||||||
*/
|
*/
|
||||||
|
@ -1444,6 +1466,7 @@ static int __map_sg_chunk(struct device *dev, struct scatterlist *sg,
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
unsigned int count;
|
unsigned int count;
|
||||||
struct scatterlist *s;
|
struct scatterlist *s;
|
||||||
|
int prot;
|
||||||
|
|
||||||
size = PAGE_ALIGN(size);
|
size = PAGE_ALIGN(size);
|
||||||
*handle = DMA_ERROR_CODE;
|
*handle = DMA_ERROR_CODE;
|
||||||
|
@ -1460,7 +1483,9 @@ static int __map_sg_chunk(struct device *dev, struct scatterlist *sg,
|
||||||
!dma_get_attr(DMA_ATTR_SKIP_CPU_SYNC, attrs))
|
!dma_get_attr(DMA_ATTR_SKIP_CPU_SYNC, attrs))
|
||||||
__dma_page_cpu_to_dev(sg_page(s), s->offset, s->length, dir);
|
__dma_page_cpu_to_dev(sg_page(s), s->offset, s->length, dir);
|
||||||
|
|
||||||
ret = iommu_map(mapping->domain, iova, phys, len, 0);
|
prot = __dma_direction_to_prot(dir);
|
||||||
|
|
||||||
|
ret = iommu_map(mapping->domain, iova, phys, len, prot);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
goto fail;
|
goto fail;
|
||||||
count += len >> PAGE_SHIFT;
|
count += len >> PAGE_SHIFT;
|
||||||
|
@ -1665,19 +1690,7 @@ static dma_addr_t arm_coherent_iommu_map_page(struct device *dev, struct page *p
|
||||||
if (dma_addr == DMA_ERROR_CODE)
|
if (dma_addr == DMA_ERROR_CODE)
|
||||||
return dma_addr;
|
return dma_addr;
|
||||||
|
|
||||||
switch (dir) {
|
prot = __dma_direction_to_prot(dir);
|
||||||
case DMA_BIDIRECTIONAL:
|
|
||||||
prot = IOMMU_READ | IOMMU_WRITE;
|
|
||||||
break;
|
|
||||||
case DMA_TO_DEVICE:
|
|
||||||
prot = IOMMU_READ;
|
|
||||||
break;
|
|
||||||
case DMA_FROM_DEVICE:
|
|
||||||
prot = IOMMU_WRITE;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
prot = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = iommu_map(mapping->domain, dma_addr, page_to_phys(page), len, prot);
|
ret = iommu_map(mapping->domain, dma_addr, page_to_phys(page), len, prot);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
|
|
|
@ -17,7 +17,6 @@
|
||||||
#include <linux/nodemask.h>
|
#include <linux/nodemask.h>
|
||||||
#include <linux/initrd.h>
|
#include <linux/initrd.h>
|
||||||
#include <linux/of_fdt.h>
|
#include <linux/of_fdt.h>
|
||||||
#include <linux/of_reserved_mem.h>
|
|
||||||
#include <linux/highmem.h>
|
#include <linux/highmem.h>
|
||||||
#include <linux/gfp.h>
|
#include <linux/gfp.h>
|
||||||
#include <linux/memblock.h>
|
#include <linux/memblock.h>
|
||||||
|
@ -379,8 +378,6 @@ void __init arm_memblock_init(struct meminfo *mi,
|
||||||
if (mdesc->reserve)
|
if (mdesc->reserve)
|
||||||
mdesc->reserve();
|
mdesc->reserve();
|
||||||
|
|
||||||
early_init_dt_scan_reserved_mem();
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* reserve memory for DMA contigouos allocations,
|
* reserve memory for DMA contigouos allocations,
|
||||||
* must come from DMA area inside low memory
|
* must come from DMA area inside low memory
|
||||||
|
|
|
@ -6,13 +6,6 @@ config FRAME_POINTER
|
||||||
bool
|
bool
|
||||||
default y
|
default y
|
||||||
|
|
||||||
config DEBUG_STACK_USAGE
|
|
||||||
bool "Enable stack utilization instrumentation"
|
|
||||||
depends on DEBUG_KERNEL
|
|
||||||
help
|
|
||||||
Enables the display of the minimum amount of free stack which each
|
|
||||||
task has ever had available in the sysrq-T output.
|
|
||||||
|
|
||||||
config EARLY_PRINTK
|
config EARLY_PRINTK
|
||||||
bool "Early printk support"
|
bool "Early printk support"
|
||||||
default y
|
default y
|
||||||
|
|
|
@ -42,7 +42,7 @@ CONFIG_IP_PNP_BOOTP=y
|
||||||
# CONFIG_WIRELESS is not set
|
# CONFIG_WIRELESS is not set
|
||||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||||
CONFIG_DEVTMPFS=y
|
CONFIG_DEVTMPFS=y
|
||||||
# CONFIG_BLK_DEV is not set
|
CONFIG_BLK_DEV=y
|
||||||
CONFIG_SCSI=y
|
CONFIG_SCSI=y
|
||||||
# CONFIG_SCSI_PROC_FS is not set
|
# CONFIG_SCSI_PROC_FS is not set
|
||||||
CONFIG_BLK_DEV_SD=y
|
CONFIG_BLK_DEV_SD=y
|
||||||
|
@ -72,6 +72,7 @@ CONFIG_LOGO=y
|
||||||
# CONFIG_IOMMU_SUPPORT is not set
|
# CONFIG_IOMMU_SUPPORT is not set
|
||||||
CONFIG_EXT2_FS=y
|
CONFIG_EXT2_FS=y
|
||||||
CONFIG_EXT3_FS=y
|
CONFIG_EXT3_FS=y
|
||||||
|
CONFIG_EXT4_FS=y
|
||||||
# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
|
# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
|
||||||
# CONFIG_EXT3_FS_XATTR is not set
|
# CONFIG_EXT3_FS_XATTR is not set
|
||||||
CONFIG_FUSE_FS=y
|
CONFIG_FUSE_FS=y
|
||||||
|
@ -90,3 +91,5 @@ CONFIG_DEBUG_KERNEL=y
|
||||||
CONFIG_DEBUG_INFO=y
|
CONFIG_DEBUG_INFO=y
|
||||||
# CONFIG_FTRACE is not set
|
# CONFIG_FTRACE is not set
|
||||||
CONFIG_ATOMIC64_SELFTEST=y
|
CONFIG_ATOMIC64_SELFTEST=y
|
||||||
|
CONFIG_VIRTIO_MMIO=y
|
||||||
|
CONFIG_VIRTIO_BLK=y
|
||||||
|
|
|
@ -166,9 +166,10 @@ do { \
|
||||||
|
|
||||||
#define get_user(x, ptr) \
|
#define get_user(x, ptr) \
|
||||||
({ \
|
({ \
|
||||||
|
__typeof__(*(ptr)) __user *__p = (ptr); \
|
||||||
might_fault(); \
|
might_fault(); \
|
||||||
access_ok(VERIFY_READ, (ptr), sizeof(*(ptr))) ? \
|
access_ok(VERIFY_READ, __p, sizeof(*__p)) ? \
|
||||||
__get_user((x), (ptr)) : \
|
__get_user((x), __p) : \
|
||||||
((x) = 0, -EFAULT); \
|
((x) = 0, -EFAULT); \
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -227,9 +228,10 @@ do { \
|
||||||
|
|
||||||
#define put_user(x, ptr) \
|
#define put_user(x, ptr) \
|
||||||
({ \
|
({ \
|
||||||
|
__typeof__(*(ptr)) __user *__p = (ptr); \
|
||||||
might_fault(); \
|
might_fault(); \
|
||||||
access_ok(VERIFY_WRITE, (ptr), sizeof(*(ptr))) ? \
|
access_ok(VERIFY_WRITE, __p, sizeof(*__p)) ? \
|
||||||
__put_user((x), (ptr)) : \
|
__put_user((x), __p) : \
|
||||||
-EFAULT; \
|
-EFAULT; \
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -80,8 +80,10 @@ void fpsimd_thread_switch(struct task_struct *next)
|
||||||
|
|
||||||
void fpsimd_flush_thread(void)
|
void fpsimd_flush_thread(void)
|
||||||
{
|
{
|
||||||
|
preempt_disable();
|
||||||
memset(¤t->thread.fpsimd_state, 0, sizeof(struct fpsimd_state));
|
memset(¤t->thread.fpsimd_state, 0, sizeof(struct fpsimd_state));
|
||||||
fpsimd_load_state(¤t->thread.fpsimd_state);
|
fpsimd_load_state(¤t->thread.fpsimd_state);
|
||||||
|
preempt_enable();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_KERNEL_MODE_NEON
|
#ifdef CONFIG_KERNEL_MODE_NEON
|
||||||
|
|
|
@ -35,7 +35,7 @@
|
||||||
*/
|
*/
|
||||||
ENTRY(__cpu_flush_user_tlb_range)
|
ENTRY(__cpu_flush_user_tlb_range)
|
||||||
vma_vm_mm x3, x2 // get vma->vm_mm
|
vma_vm_mm x3, x2 // get vma->vm_mm
|
||||||
mmid x3, x3 // get vm_mm->context.id
|
mmid w3, x3 // get vm_mm->context.id
|
||||||
dsb sy
|
dsb sy
|
||||||
lsr x0, x0, #12 // align address
|
lsr x0, x0, #12 // align address
|
||||||
lsr x1, x1, #12
|
lsr x1, x1, #12
|
||||||
|
|
|
@ -276,7 +276,7 @@ static struct platform_device mtx1_pci_host = {
|
||||||
.resource = alchemy_pci_host_res,
|
.resource = alchemy_pci_host_res,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct __initdata platform_device * mtx1_devs[] = {
|
static struct platform_device *mtx1_devs[] __initdata = {
|
||||||
&mtx1_pci_host,
|
&mtx1_pci_host,
|
||||||
&mtx1_gpio_leds,
|
&mtx1_gpio_leds,
|
||||||
&mtx1_wdt,
|
&mtx1_wdt,
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
|
|
||||||
static __always_inline bool arch_static_branch(struct static_key *key)
|
static __always_inline bool arch_static_branch(struct static_key *key)
|
||||||
{
|
{
|
||||||
asm goto("1:\tnop\n\t"
|
asm_volatile_goto("1:\tnop\n\t"
|
||||||
"nop\n\t"
|
"nop\n\t"
|
||||||
".pushsection __jump_table, \"aw\"\n\t"
|
".pushsection __jump_table, \"aw\"\n\t"
|
||||||
WORD_INSN " 1b, %l[l_yes], %0\n\t"
|
WORD_INSN " 1b, %l[l_yes], %0\n\t"
|
||||||
|
|
|
@ -73,7 +73,7 @@
|
||||||
3:
|
3:
|
||||||
|
|
||||||
#if defined(CONFIG_CC_STACKPROTECTOR) && !defined(CONFIG_SMP)
|
#if defined(CONFIG_CC_STACKPROTECTOR) && !defined(CONFIG_SMP)
|
||||||
PTR_L t8, __stack_chk_guard
|
PTR_LA t8, __stack_chk_guard
|
||||||
LONG_L t9, TASK_STACK_CANARY(a1)
|
LONG_L t9, TASK_STACK_CANARY(a1)
|
||||||
LONG_S t9, 0(t8)
|
LONG_S t9, 0(t8)
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -67,7 +67,7 @@ LEAF(resume)
|
||||||
1:
|
1:
|
||||||
|
|
||||||
#if defined(CONFIG_CC_STACKPROTECTOR) && !defined(CONFIG_SMP)
|
#if defined(CONFIG_CC_STACKPROTECTOR) && !defined(CONFIG_SMP)
|
||||||
PTR_L t8, __stack_chk_guard
|
PTR_LA t8, __stack_chk_guard
|
||||||
LONG_L t9, TASK_STACK_CANARY(a1)
|
LONG_L t9, TASK_STACK_CANARY(a1)
|
||||||
LONG_S t9, 0(t8)
|
LONG_S t9, 0(t8)
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -69,7 +69,7 @@
|
||||||
1:
|
1:
|
||||||
|
|
||||||
#if defined(CONFIG_CC_STACKPROTECTOR) && !defined(CONFIG_SMP)
|
#if defined(CONFIG_CC_STACKPROTECTOR) && !defined(CONFIG_SMP)
|
||||||
PTR_L t8, __stack_chk_guard
|
PTR_LA t8, __stack_chk_guard
|
||||||
LONG_L t9, TASK_STACK_CANARY(a1)
|
LONG_L t9, TASK_STACK_CANARY(a1)
|
||||||
LONG_S t9, 0(t8)
|
LONG_S t9, 0(t8)
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -609,6 +609,7 @@ static void r4k_dma_cache_wback_inv(unsigned long addr, unsigned long size)
|
||||||
r4k_blast_scache();
|
r4k_blast_scache();
|
||||||
else
|
else
|
||||||
blast_scache_range(addr, addr + size);
|
blast_scache_range(addr, addr + size);
|
||||||
|
preempt_enable();
|
||||||
__sync();
|
__sync();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -650,6 +651,7 @@ static void r4k_dma_cache_inv(unsigned long addr, unsigned long size)
|
||||||
*/
|
*/
|
||||||
blast_inv_scache_range(addr, addr + size);
|
blast_inv_scache_range(addr, addr + size);
|
||||||
}
|
}
|
||||||
|
preempt_enable();
|
||||||
__sync();
|
__sync();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,6 +40,8 @@ CONFIG_IP_NF_QUEUE=m
|
||||||
CONFIG_LLC2=m
|
CONFIG_LLC2=m
|
||||||
CONFIG_NET_PKTGEN=m
|
CONFIG_NET_PKTGEN=m
|
||||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||||
|
CONFIG_DEVTMPFS=y
|
||||||
|
CONFIG_DEVTMPFS_MOUNT=y
|
||||||
# CONFIG_STANDALONE is not set
|
# CONFIG_STANDALONE is not set
|
||||||
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
||||||
CONFIG_PARPORT=y
|
CONFIG_PARPORT=y
|
||||||
|
|
|
@ -79,6 +79,8 @@ CONFIG_IP_DCCP=m
|
||||||
CONFIG_LLC2=m
|
CONFIG_LLC2=m
|
||||||
CONFIG_NET_PKTGEN=m
|
CONFIG_NET_PKTGEN=m
|
||||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||||
|
CONFIG_DEVTMPFS=y
|
||||||
|
CONFIG_DEVTMPFS_MOUNT=y
|
||||||
# CONFIG_STANDALONE is not set
|
# CONFIG_STANDALONE is not set
|
||||||
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
||||||
CONFIG_BLK_DEV_UMEM=m
|
CONFIG_BLK_DEV_UMEM=m
|
||||||
|
|
|
@ -4,6 +4,7 @@ CONFIG_IKCONFIG=y
|
||||||
CONFIG_IKCONFIG_PROC=y
|
CONFIG_IKCONFIG_PROC=y
|
||||||
CONFIG_LOG_BUF_SHIFT=16
|
CONFIG_LOG_BUF_SHIFT=16
|
||||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||||
|
CONFIG_BLK_DEV_INITRD=y
|
||||||
CONFIG_SLAB=y
|
CONFIG_SLAB=y
|
||||||
CONFIG_MODULES=y
|
CONFIG_MODULES=y
|
||||||
CONFIG_MODVERSIONS=y
|
CONFIG_MODVERSIONS=y
|
||||||
|
@ -27,6 +28,8 @@ CONFIG_IP_PNP_BOOTP=y
|
||||||
# CONFIG_INET_LRO is not set
|
# CONFIG_INET_LRO is not set
|
||||||
CONFIG_IPV6=y
|
CONFIG_IPV6=y
|
||||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||||
|
CONFIG_DEVTMPFS=y
|
||||||
|
CONFIG_DEVTMPFS_MOUNT=y
|
||||||
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
||||||
CONFIG_PARPORT=y
|
CONFIG_PARPORT=y
|
||||||
CONFIG_PARPORT_PC=y
|
CONFIG_PARPORT_PC=y
|
||||||
|
|
|
@ -5,6 +5,7 @@ CONFIG_IKCONFIG=y
|
||||||
CONFIG_IKCONFIG_PROC=y
|
CONFIG_IKCONFIG_PROC=y
|
||||||
CONFIG_LOG_BUF_SHIFT=16
|
CONFIG_LOG_BUF_SHIFT=16
|
||||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||||
|
CONFIG_BLK_DEV_INITRD=y
|
||||||
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
|
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
|
||||||
CONFIG_EXPERT=y
|
CONFIG_EXPERT=y
|
||||||
CONFIG_KALLSYMS_ALL=y
|
CONFIG_KALLSYMS_ALL=y
|
||||||
|
@ -39,6 +40,8 @@ CONFIG_NETFILTER_DEBUG=y
|
||||||
CONFIG_IP_NF_QUEUE=m
|
CONFIG_IP_NF_QUEUE=m
|
||||||
CONFIG_NET_PKTGEN=m
|
CONFIG_NET_PKTGEN=m
|
||||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||||
|
CONFIG_DEVTMPFS=y
|
||||||
|
CONFIG_DEVTMPFS_MOUNT=y
|
||||||
# CONFIG_STANDALONE is not set
|
# CONFIG_STANDALONE is not set
|
||||||
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
||||||
CONFIG_BLK_DEV_UMEM=m
|
CONFIG_BLK_DEV_UMEM=m
|
||||||
|
|
|
@ -62,6 +62,8 @@ CONFIG_TIPC=m
|
||||||
CONFIG_LLC2=m
|
CONFIG_LLC2=m
|
||||||
CONFIG_DNS_RESOLVER=y
|
CONFIG_DNS_RESOLVER=y
|
||||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||||
|
CONFIG_DEVTMPFS=y
|
||||||
|
CONFIG_DEVTMPFS_MOUNT=y
|
||||||
# CONFIG_STANDALONE is not set
|
# CONFIG_STANDALONE is not set
|
||||||
CONFIG_PARPORT=y
|
CONFIG_PARPORT=y
|
||||||
CONFIG_PARPORT_PC=y
|
CONFIG_PARPORT_PC=y
|
||||||
|
|
|
@ -49,6 +49,8 @@ CONFIG_INET6_ESP=y
|
||||||
CONFIG_INET6_IPCOMP=y
|
CONFIG_INET6_IPCOMP=y
|
||||||
CONFIG_LLC2=m
|
CONFIG_LLC2=m
|
||||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||||
|
CONFIG_DEVTMPFS=y
|
||||||
|
CONFIG_DEVTMPFS_MOUNT=y
|
||||||
# CONFIG_STANDALONE is not set
|
# CONFIG_STANDALONE is not set
|
||||||
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
||||||
CONFIG_PARPORT=y
|
CONFIG_PARPORT=y
|
||||||
|
|
|
@ -6,7 +6,7 @@ struct pt_regs;
|
||||||
|
|
||||||
/* traps.c */
|
/* traps.c */
|
||||||
void parisc_terminate(char *msg, struct pt_regs *regs,
|
void parisc_terminate(char *msg, struct pt_regs *regs,
|
||||||
int code, unsigned long offset);
|
int code, unsigned long offset) __noreturn __cold;
|
||||||
|
|
||||||
/* mm/fault.c */
|
/* mm/fault.c */
|
||||||
void do_page_fault(struct pt_regs *regs, unsigned long code,
|
void do_page_fault(struct pt_regs *regs, unsigned long code,
|
||||||
|
|
|
@ -72,7 +72,6 @@ enum ipi_message_type {
|
||||||
IPI_NOP=0,
|
IPI_NOP=0,
|
||||||
IPI_RESCHEDULE=1,
|
IPI_RESCHEDULE=1,
|
||||||
IPI_CALL_FUNC,
|
IPI_CALL_FUNC,
|
||||||
IPI_CALL_FUNC_SINGLE,
|
|
||||||
IPI_CPU_START,
|
IPI_CPU_START,
|
||||||
IPI_CPU_STOP,
|
IPI_CPU_STOP,
|
||||||
IPI_CPU_TEST
|
IPI_CPU_TEST
|
||||||
|
@ -164,11 +163,6 @@ ipi_interrupt(int irq, void *dev_id)
|
||||||
generic_smp_call_function_interrupt();
|
generic_smp_call_function_interrupt();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case IPI_CALL_FUNC_SINGLE:
|
|
||||||
smp_debug(100, KERN_DEBUG "CPU%d IPI_CALL_FUNC_SINGLE\n", this_cpu);
|
|
||||||
generic_smp_call_function_single_interrupt();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case IPI_CPU_START:
|
case IPI_CPU_START:
|
||||||
smp_debug(100, KERN_DEBUG "CPU%d IPI_CPU_START\n", this_cpu);
|
smp_debug(100, KERN_DEBUG "CPU%d IPI_CPU_START\n", this_cpu);
|
||||||
break;
|
break;
|
||||||
|
@ -260,7 +254,7 @@ void arch_send_call_function_ipi_mask(const struct cpumask *mask)
|
||||||
|
|
||||||
void arch_send_call_function_single_ipi(int cpu)
|
void arch_send_call_function_single_ipi(int cpu)
|
||||||
{
|
{
|
||||||
send_IPI_single(cpu, IPI_CALL_FUNC_SINGLE);
|
send_IPI_single(cpu, IPI_CALL_FUNC);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -291,11 +291,6 @@ void die_if_kernel(char *str, struct pt_regs *regs, long err)
|
||||||
do_exit(SIGSEGV);
|
do_exit(SIGSEGV);
|
||||||
}
|
}
|
||||||
|
|
||||||
int syscall_ipi(int (*syscall) (struct pt_regs *), struct pt_regs *regs)
|
|
||||||
{
|
|
||||||
return syscall(regs);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* gdb uses break 4,8 */
|
/* gdb uses break 4,8 */
|
||||||
#define GDB_BREAK_INSN 0x10004
|
#define GDB_BREAK_INSN 0x10004
|
||||||
static void handle_gdb_break(struct pt_regs *regs, int wot)
|
static void handle_gdb_break(struct pt_regs *regs, int wot)
|
||||||
|
@ -805,14 +800,14 @@ void notrace handle_interruption(int code, struct pt_regs *regs)
|
||||||
else {
|
else {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The kernel should never fault on its own address space.
|
* The kernel should never fault on its own address space,
|
||||||
|
* unless pagefault_disable() was called before.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (fault_space == 0)
|
if (fault_space == 0 && !in_atomic())
|
||||||
{
|
{
|
||||||
pdc_chassis_send_status(PDC_CHASSIS_DIRECT_PANIC);
|
pdc_chassis_send_status(PDC_CHASSIS_DIRECT_PANIC);
|
||||||
parisc_terminate("Kernel Fault", regs, code, fault_address);
|
parisc_terminate("Kernel Fault", regs, code, fault_address);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -56,7 +56,7 @@
|
||||||
#ifdef __KERNEL__
|
#ifdef __KERNEL__
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/compiler.h>
|
#include <linux/compiler.h>
|
||||||
#include <asm/uaccess.h>
|
#include <linux/uaccess.h>
|
||||||
#define s_space "%%sr1"
|
#define s_space "%%sr1"
|
||||||
#define d_space "%%sr2"
|
#define d_space "%%sr2"
|
||||||
#else
|
#else
|
||||||
|
@ -524,4 +524,17 @@ EXPORT_SYMBOL(copy_to_user);
|
||||||
EXPORT_SYMBOL(copy_from_user);
|
EXPORT_SYMBOL(copy_from_user);
|
||||||
EXPORT_SYMBOL(copy_in_user);
|
EXPORT_SYMBOL(copy_in_user);
|
||||||
EXPORT_SYMBOL(memcpy);
|
EXPORT_SYMBOL(memcpy);
|
||||||
|
|
||||||
|
long probe_kernel_read(void *dst, const void *src, size_t size)
|
||||||
|
{
|
||||||
|
unsigned long addr = (unsigned long)src;
|
||||||
|
|
||||||
|
if (size < 0 || addr < PAGE_SIZE)
|
||||||
|
return -EFAULT;
|
||||||
|
|
||||||
|
/* check for I/O space F_EXTEND(0xfff00000) access as well? */
|
||||||
|
|
||||||
|
return __probe_kernel_read(dst, src, size);
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -171,20 +171,25 @@ void do_page_fault(struct pt_regs *regs, unsigned long code,
|
||||||
unsigned long address)
|
unsigned long address)
|
||||||
{
|
{
|
||||||
struct vm_area_struct *vma, *prev_vma;
|
struct vm_area_struct *vma, *prev_vma;
|
||||||
struct task_struct *tsk = current;
|
struct task_struct *tsk;
|
||||||
struct mm_struct *mm = tsk->mm;
|
struct mm_struct *mm;
|
||||||
unsigned long acc_type;
|
unsigned long acc_type;
|
||||||
int fault;
|
int fault;
|
||||||
unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
|
unsigned int flags;
|
||||||
|
|
||||||
if (in_atomic() || !mm)
|
if (in_atomic())
|
||||||
goto no_context;
|
goto no_context;
|
||||||
|
|
||||||
|
tsk = current;
|
||||||
|
mm = tsk->mm;
|
||||||
|
if (!mm)
|
||||||
|
goto no_context;
|
||||||
|
|
||||||
|
flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
|
||||||
if (user_mode(regs))
|
if (user_mode(regs))
|
||||||
flags |= FAULT_FLAG_USER;
|
flags |= FAULT_FLAG_USER;
|
||||||
|
|
||||||
acc_type = parisc_acctyp(code, regs->iir);
|
acc_type = parisc_acctyp(code, regs->iir);
|
||||||
|
|
||||||
if (acc_type & VM_WRITE)
|
if (acc_type & VM_WRITE)
|
||||||
flags |= FAULT_FLAG_WRITE;
|
flags |= FAULT_FLAG_WRITE;
|
||||||
retry:
|
retry:
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
|
|
||||||
static __always_inline bool arch_static_branch(struct static_key *key)
|
static __always_inline bool arch_static_branch(struct static_key *key)
|
||||||
{
|
{
|
||||||
asm goto("1:\n\t"
|
asm_volatile_goto("1:\n\t"
|
||||||
"nop\n\t"
|
"nop\n\t"
|
||||||
".pushsection __jump_table, \"aw\"\n\t"
|
".pushsection __jump_table, \"aw\"\n\t"
|
||||||
JUMP_ENTRY_TYPE "1b, %l[l_yes], %c0\n\t"
|
JUMP_ENTRY_TYPE "1b, %l[l_yes], %c0\n\t"
|
||||||
|
|
|
@ -661,7 +661,7 @@ struct iommu_table *iommu_init_table(struct iommu_table *tbl, int nid)
|
||||||
/* number of bytes needed for the bitmap */
|
/* number of bytes needed for the bitmap */
|
||||||
sz = BITS_TO_LONGS(tbl->it_size) * sizeof(unsigned long);
|
sz = BITS_TO_LONGS(tbl->it_size) * sizeof(unsigned long);
|
||||||
|
|
||||||
page = alloc_pages_node(nid, GFP_ATOMIC, get_order(sz));
|
page = alloc_pages_node(nid, GFP_KERNEL, get_order(sz));
|
||||||
if (!page)
|
if (!page)
|
||||||
panic("iommu_init_table: Can't allocate %ld bytes\n", sz);
|
panic("iommu_init_table: Can't allocate %ld bytes\n", sz);
|
||||||
tbl->it_map = page_address(page);
|
tbl->it_map = page_address(page);
|
||||||
|
|
|
@ -495,14 +495,15 @@ void __do_irq(struct pt_regs *regs)
|
||||||
void do_IRQ(struct pt_regs *regs)
|
void do_IRQ(struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
struct pt_regs *old_regs = set_irq_regs(regs);
|
struct pt_regs *old_regs = set_irq_regs(regs);
|
||||||
struct thread_info *curtp, *irqtp;
|
struct thread_info *curtp, *irqtp, *sirqtp;
|
||||||
|
|
||||||
/* Switch to the irq stack to handle this */
|
/* Switch to the irq stack to handle this */
|
||||||
curtp = current_thread_info();
|
curtp = current_thread_info();
|
||||||
irqtp = hardirq_ctx[raw_smp_processor_id()];
|
irqtp = hardirq_ctx[raw_smp_processor_id()];
|
||||||
|
sirqtp = softirq_ctx[raw_smp_processor_id()];
|
||||||
|
|
||||||
/* Already there ? */
|
/* Already there ? */
|
||||||
if (unlikely(curtp == irqtp)) {
|
if (unlikely(curtp == irqtp || curtp == sirqtp)) {
|
||||||
__do_irq(regs);
|
__do_irq(regs);
|
||||||
set_irq_regs(old_regs);
|
set_irq_regs(old_regs);
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
#include <asm/machdep.h>
|
#include <asm/machdep.h>
|
||||||
#include <asm/smp.h>
|
#include <asm/smp.h>
|
||||||
#include <asm/pmc.h>
|
#include <asm/pmc.h>
|
||||||
|
#include <asm/firmware.h>
|
||||||
|
|
||||||
#include "cacheinfo.h"
|
#include "cacheinfo.h"
|
||||||
|
|
||||||
|
@ -179,15 +180,25 @@ SYSFS_PMCSETUP(spurr, SPRN_SPURR);
|
||||||
SYSFS_PMCSETUP(dscr, SPRN_DSCR);
|
SYSFS_PMCSETUP(dscr, SPRN_DSCR);
|
||||||
SYSFS_PMCSETUP(pir, SPRN_PIR);
|
SYSFS_PMCSETUP(pir, SPRN_PIR);
|
||||||
|
|
||||||
|
/*
|
||||||
|
Lets only enable read for phyp resources and
|
||||||
|
enable write when needed with a separate function.
|
||||||
|
Lets be conservative and default to pseries.
|
||||||
|
*/
|
||||||
static DEVICE_ATTR(mmcra, 0600, show_mmcra, store_mmcra);
|
static DEVICE_ATTR(mmcra, 0600, show_mmcra, store_mmcra);
|
||||||
static DEVICE_ATTR(spurr, 0400, show_spurr, NULL);
|
static DEVICE_ATTR(spurr, 0400, show_spurr, NULL);
|
||||||
static DEVICE_ATTR(dscr, 0600, show_dscr, store_dscr);
|
static DEVICE_ATTR(dscr, 0600, show_dscr, store_dscr);
|
||||||
static DEVICE_ATTR(purr, 0600, show_purr, store_purr);
|
static DEVICE_ATTR(purr, 0400, show_purr, store_purr);
|
||||||
static DEVICE_ATTR(pir, 0400, show_pir, NULL);
|
static DEVICE_ATTR(pir, 0400, show_pir, NULL);
|
||||||
|
|
||||||
unsigned long dscr_default = 0;
|
unsigned long dscr_default = 0;
|
||||||
EXPORT_SYMBOL(dscr_default);
|
EXPORT_SYMBOL(dscr_default);
|
||||||
|
|
||||||
|
static void add_write_permission_dev_attr(struct device_attribute *attr)
|
||||||
|
{
|
||||||
|
attr->attr.mode |= 0200;
|
||||||
|
}
|
||||||
|
|
||||||
static ssize_t show_dscr_default(struct device *dev,
|
static ssize_t show_dscr_default(struct device *dev,
|
||||||
struct device_attribute *attr, char *buf)
|
struct device_attribute *attr, char *buf)
|
||||||
{
|
{
|
||||||
|
@ -394,8 +405,11 @@ static void register_cpu_online(unsigned int cpu)
|
||||||
if (cpu_has_feature(CPU_FTR_MMCRA))
|
if (cpu_has_feature(CPU_FTR_MMCRA))
|
||||||
device_create_file(s, &dev_attr_mmcra);
|
device_create_file(s, &dev_attr_mmcra);
|
||||||
|
|
||||||
if (cpu_has_feature(CPU_FTR_PURR))
|
if (cpu_has_feature(CPU_FTR_PURR)) {
|
||||||
|
if (!firmware_has_feature(FW_FEATURE_LPAR))
|
||||||
|
add_write_permission_dev_attr(&dev_attr_purr);
|
||||||
device_create_file(s, &dev_attr_purr);
|
device_create_file(s, &dev_attr_purr);
|
||||||
|
}
|
||||||
|
|
||||||
if (cpu_has_feature(CPU_FTR_SPURR))
|
if (cpu_has_feature(CPU_FTR_SPURR))
|
||||||
device_create_file(s, &dev_attr_spurr);
|
device_create_file(s, &dev_attr_spurr);
|
||||||
|
|
|
@ -79,6 +79,11 @@ _GLOBAL(tm_abort)
|
||||||
TABORT(R3)
|
TABORT(R3)
|
||||||
blr
|
blr
|
||||||
|
|
||||||
|
.section ".toc","aw"
|
||||||
|
DSCR_DEFAULT:
|
||||||
|
.tc dscr_default[TC],dscr_default
|
||||||
|
|
||||||
|
.section ".text"
|
||||||
|
|
||||||
/* void tm_reclaim(struct thread_struct *thread,
|
/* void tm_reclaim(struct thread_struct *thread,
|
||||||
* unsigned long orig_msr,
|
* unsigned long orig_msr,
|
||||||
|
@ -123,6 +128,7 @@ _GLOBAL(tm_reclaim)
|
||||||
mr r15, r14
|
mr r15, r14
|
||||||
ori r15, r15, MSR_FP
|
ori r15, r15, MSR_FP
|
||||||
li r16, MSR_RI
|
li r16, MSR_RI
|
||||||
|
ori r16, r16, MSR_EE /* IRQs hard off */
|
||||||
andc r15, r15, r16
|
andc r15, r15, r16
|
||||||
oris r15, r15, MSR_VEC@h
|
oris r15, r15, MSR_VEC@h
|
||||||
#ifdef CONFIG_VSX
|
#ifdef CONFIG_VSX
|
||||||
|
@ -187,11 +193,18 @@ dont_backup_fp:
|
||||||
std r1, PACATMSCRATCH(r13)
|
std r1, PACATMSCRATCH(r13)
|
||||||
ld r1, PACAR1(r13)
|
ld r1, PACAR1(r13)
|
||||||
|
|
||||||
|
/* Store the PPR in r11 and reset to decent value */
|
||||||
|
std r11, GPR11(r1) /* Temporary stash */
|
||||||
|
mfspr r11, SPRN_PPR
|
||||||
|
HMT_MEDIUM
|
||||||
|
|
||||||
/* Now get some more GPRS free */
|
/* Now get some more GPRS free */
|
||||||
std r7, GPR7(r1) /* Temporary stash */
|
std r7, GPR7(r1) /* Temporary stash */
|
||||||
std r12, GPR12(r1) /* '' '' '' */
|
std r12, GPR12(r1) /* '' '' '' */
|
||||||
ld r12, STACK_PARAM(0)(r1) /* Param 0, thread_struct * */
|
ld r12, STACK_PARAM(0)(r1) /* Param 0, thread_struct * */
|
||||||
|
|
||||||
|
std r11, THREAD_TM_PPR(r12) /* Store PPR and free r11 */
|
||||||
|
|
||||||
addi r7, r12, PT_CKPT_REGS /* Thread's ckpt_regs */
|
addi r7, r12, PT_CKPT_REGS /* Thread's ckpt_regs */
|
||||||
|
|
||||||
/* Make r7 look like an exception frame so that we
|
/* Make r7 look like an exception frame so that we
|
||||||
|
@ -203,15 +216,19 @@ dont_backup_fp:
|
||||||
SAVE_GPR(0, r7) /* user r0 */
|
SAVE_GPR(0, r7) /* user r0 */
|
||||||
SAVE_GPR(2, r7) /* user r2 */
|
SAVE_GPR(2, r7) /* user r2 */
|
||||||
SAVE_4GPRS(3, r7) /* user r3-r6 */
|
SAVE_4GPRS(3, r7) /* user r3-r6 */
|
||||||
SAVE_4GPRS(8, r7) /* user r8-r11 */
|
SAVE_GPR(8, r7) /* user r8 */
|
||||||
|
SAVE_GPR(9, r7) /* user r9 */
|
||||||
|
SAVE_GPR(10, r7) /* user r10 */
|
||||||
ld r3, PACATMSCRATCH(r13) /* user r1 */
|
ld r3, PACATMSCRATCH(r13) /* user r1 */
|
||||||
ld r4, GPR7(r1) /* user r7 */
|
ld r4, GPR7(r1) /* user r7 */
|
||||||
ld r5, GPR12(r1) /* user r12 */
|
ld r5, GPR11(r1) /* user r11 */
|
||||||
GET_SCRATCH0(6) /* user r13 */
|
ld r6, GPR12(r1) /* user r12 */
|
||||||
|
GET_SCRATCH0(8) /* user r13 */
|
||||||
std r3, GPR1(r7)
|
std r3, GPR1(r7)
|
||||||
std r4, GPR7(r7)
|
std r4, GPR7(r7)
|
||||||
std r5, GPR12(r7)
|
std r5, GPR11(r7)
|
||||||
std r6, GPR13(r7)
|
std r6, GPR12(r7)
|
||||||
|
std r8, GPR13(r7)
|
||||||
|
|
||||||
SAVE_NVGPRS(r7) /* user r14-r31 */
|
SAVE_NVGPRS(r7) /* user r14-r31 */
|
||||||
|
|
||||||
|
@ -234,14 +251,12 @@ dont_backup_fp:
|
||||||
std r6, _XER(r7)
|
std r6, _XER(r7)
|
||||||
|
|
||||||
|
|
||||||
/* ******************** TAR, PPR, DSCR ********** */
|
/* ******************** TAR, DSCR ********** */
|
||||||
mfspr r3, SPRN_TAR
|
mfspr r3, SPRN_TAR
|
||||||
mfspr r4, SPRN_PPR
|
mfspr r4, SPRN_DSCR
|
||||||
mfspr r5, SPRN_DSCR
|
|
||||||
|
|
||||||
std r3, THREAD_TM_TAR(r12)
|
std r3, THREAD_TM_TAR(r12)
|
||||||
std r4, THREAD_TM_PPR(r12)
|
std r4, THREAD_TM_DSCR(r12)
|
||||||
std r5, THREAD_TM_DSCR(r12)
|
|
||||||
|
|
||||||
/* MSR and flags: We don't change CRs, and we don't need to alter
|
/* MSR and flags: We don't change CRs, and we don't need to alter
|
||||||
* MSR.
|
* MSR.
|
||||||
|
@ -258,7 +273,7 @@ dont_backup_fp:
|
||||||
std r3, THREAD_TM_TFHAR(r12)
|
std r3, THREAD_TM_TFHAR(r12)
|
||||||
std r4, THREAD_TM_TFIAR(r12)
|
std r4, THREAD_TM_TFIAR(r12)
|
||||||
|
|
||||||
/* AMR and PPR are checkpointed too, but are unsupported by Linux. */
|
/* AMR is checkpointed too, but is unsupported by Linux. */
|
||||||
|
|
||||||
/* Restore original MSR/IRQ state & clear TM mode */
|
/* Restore original MSR/IRQ state & clear TM mode */
|
||||||
ld r14, TM_FRAME_L0(r1) /* Orig MSR */
|
ld r14, TM_FRAME_L0(r1) /* Orig MSR */
|
||||||
|
@ -274,6 +289,12 @@ dont_backup_fp:
|
||||||
mtcr r4
|
mtcr r4
|
||||||
mtlr r0
|
mtlr r0
|
||||||
ld r2, 40(r1)
|
ld r2, 40(r1)
|
||||||
|
|
||||||
|
/* Load system default DSCR */
|
||||||
|
ld r4, DSCR_DEFAULT@toc(r2)
|
||||||
|
ld r0, 0(r4)
|
||||||
|
mtspr SPRN_DSCR, r0
|
||||||
|
|
||||||
blr
|
blr
|
||||||
|
|
||||||
|
|
||||||
|
@ -358,25 +379,24 @@ dont_restore_fp:
|
||||||
|
|
||||||
restore_gprs:
|
restore_gprs:
|
||||||
|
|
||||||
/* ******************** TAR, PPR, DSCR ********** */
|
|
||||||
ld r4, THREAD_TM_TAR(r3)
|
|
||||||
ld r5, THREAD_TM_PPR(r3)
|
|
||||||
ld r6, THREAD_TM_DSCR(r3)
|
|
||||||
|
|
||||||
mtspr SPRN_TAR, r4
|
|
||||||
mtspr SPRN_PPR, r5
|
|
||||||
mtspr SPRN_DSCR, r6
|
|
||||||
|
|
||||||
/* ******************** CR,LR,CCR,MSR ********** */
|
/* ******************** CR,LR,CCR,MSR ********** */
|
||||||
ld r3, _CTR(r7)
|
ld r4, _CTR(r7)
|
||||||
ld r4, _LINK(r7)
|
ld r5, _LINK(r7)
|
||||||
ld r5, _CCR(r7)
|
ld r6, _CCR(r7)
|
||||||
ld r6, _XER(r7)
|
ld r8, _XER(r7)
|
||||||
|
|
||||||
mtctr r3
|
mtctr r4
|
||||||
mtlr r4
|
mtlr r5
|
||||||
mtcr r5
|
mtcr r6
|
||||||
mtxer r6
|
mtxer r8
|
||||||
|
|
||||||
|
/* ******************** TAR ******************** */
|
||||||
|
ld r4, THREAD_TM_TAR(r3)
|
||||||
|
mtspr SPRN_TAR, r4
|
||||||
|
|
||||||
|
/* Load up the PPR and DSCR in GPRs only at this stage */
|
||||||
|
ld r5, THREAD_TM_DSCR(r3)
|
||||||
|
ld r6, THREAD_TM_PPR(r3)
|
||||||
|
|
||||||
/* Clear the MSR RI since we are about to change R1. EE is already off
|
/* Clear the MSR RI since we are about to change R1. EE is already off
|
||||||
*/
|
*/
|
||||||
|
@ -384,19 +404,26 @@ restore_gprs:
|
||||||
mtmsrd r4, 1
|
mtmsrd r4, 1
|
||||||
|
|
||||||
REST_4GPRS(0, r7) /* GPR0-3 */
|
REST_4GPRS(0, r7) /* GPR0-3 */
|
||||||
REST_GPR(4, r7) /* GPR4-6 */
|
REST_GPR(4, r7) /* GPR4 */
|
||||||
REST_GPR(5, r7)
|
|
||||||
REST_GPR(6, r7)
|
|
||||||
REST_4GPRS(8, r7) /* GPR8-11 */
|
REST_4GPRS(8, r7) /* GPR8-11 */
|
||||||
REST_2GPRS(12, r7) /* GPR12-13 */
|
REST_2GPRS(12, r7) /* GPR12-13 */
|
||||||
|
|
||||||
REST_NVGPRS(r7) /* GPR14-31 */
|
REST_NVGPRS(r7) /* GPR14-31 */
|
||||||
|
|
||||||
ld r7, GPR7(r7) /* GPR7 */
|
/* Load up PPR and DSCR here so we don't run with user values for long
|
||||||
|
*/
|
||||||
|
mtspr SPRN_DSCR, r5
|
||||||
|
mtspr SPRN_PPR, r6
|
||||||
|
|
||||||
|
REST_GPR(5, r7) /* GPR5-7 */
|
||||||
|
REST_GPR(6, r7)
|
||||||
|
ld r7, GPR7(r7)
|
||||||
|
|
||||||
/* Commit register state as checkpointed state: */
|
/* Commit register state as checkpointed state: */
|
||||||
TRECHKPT
|
TRECHKPT
|
||||||
|
|
||||||
|
HMT_MEDIUM
|
||||||
|
|
||||||
/* Our transactional state has now changed.
|
/* Our transactional state has now changed.
|
||||||
*
|
*
|
||||||
* Now just get out of here. Transactional (current) state will be
|
* Now just get out of here. Transactional (current) state will be
|
||||||
|
@ -419,6 +446,12 @@ restore_gprs:
|
||||||
mtcr r4
|
mtcr r4
|
||||||
mtlr r0
|
mtlr r0
|
||||||
ld r2, 40(r1)
|
ld r2, 40(r1)
|
||||||
|
|
||||||
|
/* Load system default DSCR */
|
||||||
|
ld r4, DSCR_DEFAULT@toc(r2)
|
||||||
|
ld r0, 0(r4)
|
||||||
|
mtspr SPRN_DSCR, r0
|
||||||
|
|
||||||
blr
|
blr
|
||||||
|
|
||||||
/* ****************************************************************** */
|
/* ****************************************************************** */
|
||||||
|
|
|
@ -1530,11 +1530,15 @@ static ssize_t modalias_show(struct device *dev, struct device_attribute *attr,
|
||||||
const char *cp;
|
const char *cp;
|
||||||
|
|
||||||
dn = dev->of_node;
|
dn = dev->of_node;
|
||||||
if (!dn)
|
if (!dn) {
|
||||||
return -ENODEV;
|
strcat(buf, "\n");
|
||||||
|
return strlen(buf);
|
||||||
|
}
|
||||||
cp = of_get_property(dn, "compatible", NULL);
|
cp = of_get_property(dn, "compatible", NULL);
|
||||||
if (!cp)
|
if (!cp) {
|
||||||
return -ENODEV;
|
strcat(buf, "\n");
|
||||||
|
return strlen(buf);
|
||||||
|
}
|
||||||
|
|
||||||
return sprintf(buf, "vio:T%sS%s\n", vio_dev->type, cp);
|
return sprintf(buf, "vio:T%sS%s\n", vio_dev->type, cp);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1066,7 +1066,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_ARCH_206)
|
||||||
BEGIN_FTR_SECTION
|
BEGIN_FTR_SECTION
|
||||||
mfspr r8, SPRN_DSCR
|
mfspr r8, SPRN_DSCR
|
||||||
ld r7, HSTATE_DSCR(r13)
|
ld r7, HSTATE_DSCR(r13)
|
||||||
std r8, VCPU_DSCR(r7)
|
std r8, VCPU_DSCR(r9)
|
||||||
mtspr SPRN_DSCR, r7
|
mtspr SPRN_DSCR, r7
|
||||||
END_FTR_SECTION_IFSET(CPU_FTR_ARCH_206)
|
END_FTR_SECTION_IFSET(CPU_FTR_ARCH_206)
|
||||||
|
|
||||||
|
|
|
@ -332,6 +332,13 @@ static inline int kvmppc_e500_shadow_map(struct kvmppc_vcpu_e500 *vcpu_e500,
|
||||||
unsigned long hva;
|
unsigned long hva;
|
||||||
int pfnmap = 0;
|
int pfnmap = 0;
|
||||||
int tsize = BOOK3E_PAGESZ_4K;
|
int tsize = BOOK3E_PAGESZ_4K;
|
||||||
|
int ret = 0;
|
||||||
|
unsigned long mmu_seq;
|
||||||
|
struct kvm *kvm = vcpu_e500->vcpu.kvm;
|
||||||
|
|
||||||
|
/* used to check for invalidations in progress */
|
||||||
|
mmu_seq = kvm->mmu_notifier_seq;
|
||||||
|
smp_rmb();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Translate guest physical to true physical, acquiring
|
* Translate guest physical to true physical, acquiring
|
||||||
|
@ -449,6 +456,12 @@ static inline int kvmppc_e500_shadow_map(struct kvmppc_vcpu_e500 *vcpu_e500,
|
||||||
gvaddr &= ~((tsize_pages << PAGE_SHIFT) - 1);
|
gvaddr &= ~((tsize_pages << PAGE_SHIFT) - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
spin_lock(&kvm->mmu_lock);
|
||||||
|
if (mmu_notifier_retry(kvm, mmu_seq)) {
|
||||||
|
ret = -EAGAIN;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
kvmppc_e500_ref_setup(ref, gtlbe, pfn);
|
kvmppc_e500_ref_setup(ref, gtlbe, pfn);
|
||||||
|
|
||||||
kvmppc_e500_setup_stlbe(&vcpu_e500->vcpu, gtlbe, tsize,
|
kvmppc_e500_setup_stlbe(&vcpu_e500->vcpu, gtlbe, tsize,
|
||||||
|
@ -457,10 +470,13 @@ static inline int kvmppc_e500_shadow_map(struct kvmppc_vcpu_e500 *vcpu_e500,
|
||||||
/* Clear i-cache for new pages */
|
/* Clear i-cache for new pages */
|
||||||
kvmppc_mmu_flush_icache(pfn);
|
kvmppc_mmu_flush_icache(pfn);
|
||||||
|
|
||||||
|
out:
|
||||||
|
spin_unlock(&kvm->mmu_lock);
|
||||||
|
|
||||||
/* Drop refcount on page, so that mmu notifiers can clear it */
|
/* Drop refcount on page, so that mmu notifiers can clear it */
|
||||||
kvm_release_pfn_clean(pfn);
|
kvm_release_pfn_clean(pfn);
|
||||||
|
|
||||||
return 0;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* XXX only map the one-one case, for now use TLB0 */
|
/* XXX only map the one-one case, for now use TLB0 */
|
||||||
|
|
|
@ -226,19 +226,35 @@ _GLOBAL(csum_partial)
|
||||||
blr
|
blr
|
||||||
|
|
||||||
|
|
||||||
.macro source
|
.macro srcnr
|
||||||
100:
|
100:
|
||||||
.section __ex_table,"a"
|
.section __ex_table,"a"
|
||||||
.align 3
|
.align 3
|
||||||
.llong 100b,.Lsrc_error
|
.llong 100b,.Lsrc_error_nr
|
||||||
|
.previous
|
||||||
|
.endm
|
||||||
|
|
||||||
|
.macro source
|
||||||
|
150:
|
||||||
|
.section __ex_table,"a"
|
||||||
|
.align 3
|
||||||
|
.llong 150b,.Lsrc_error
|
||||||
|
.previous
|
||||||
|
.endm
|
||||||
|
|
||||||
|
.macro dstnr
|
||||||
|
200:
|
||||||
|
.section __ex_table,"a"
|
||||||
|
.align 3
|
||||||
|
.llong 200b,.Ldest_error_nr
|
||||||
.previous
|
.previous
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
.macro dest
|
.macro dest
|
||||||
200:
|
250:
|
||||||
.section __ex_table,"a"
|
.section __ex_table,"a"
|
||||||
.align 3
|
.align 3
|
||||||
.llong 200b,.Ldest_error
|
.llong 250b,.Ldest_error
|
||||||
.previous
|
.previous
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
|
@ -269,16 +285,16 @@ _GLOBAL(csum_partial_copy_generic)
|
||||||
rldicl. r6,r3,64-1,64-2 /* r6 = (r3 & 0x3) >> 1 */
|
rldicl. r6,r3,64-1,64-2 /* r6 = (r3 & 0x3) >> 1 */
|
||||||
beq .Lcopy_aligned
|
beq .Lcopy_aligned
|
||||||
|
|
||||||
li r7,4
|
li r9,4
|
||||||
sub r6,r7,r6
|
sub r6,r9,r6
|
||||||
mtctr r6
|
mtctr r6
|
||||||
|
|
||||||
1:
|
1:
|
||||||
source; lhz r6,0(r3) /* align to doubleword */
|
srcnr; lhz r6,0(r3) /* align to doubleword */
|
||||||
subi r5,r5,2
|
subi r5,r5,2
|
||||||
addi r3,r3,2
|
addi r3,r3,2
|
||||||
adde r0,r0,r6
|
adde r0,r0,r6
|
||||||
dest; sth r6,0(r4)
|
dstnr; sth r6,0(r4)
|
||||||
addi r4,r4,2
|
addi r4,r4,2
|
||||||
bdnz 1b
|
bdnz 1b
|
||||||
|
|
||||||
|
@ -392,10 +408,10 @@ dest; std r16,56(r4)
|
||||||
|
|
||||||
mtctr r6
|
mtctr r6
|
||||||
3:
|
3:
|
||||||
source; ld r6,0(r3)
|
srcnr; ld r6,0(r3)
|
||||||
addi r3,r3,8
|
addi r3,r3,8
|
||||||
adde r0,r0,r6
|
adde r0,r0,r6
|
||||||
dest; std r6,0(r4)
|
dstnr; std r6,0(r4)
|
||||||
addi r4,r4,8
|
addi r4,r4,8
|
||||||
bdnz 3b
|
bdnz 3b
|
||||||
|
|
||||||
|
@ -405,10 +421,10 @@ dest; std r6,0(r4)
|
||||||
srdi. r6,r5,2
|
srdi. r6,r5,2
|
||||||
beq .Lcopy_tail_halfword
|
beq .Lcopy_tail_halfword
|
||||||
|
|
||||||
source; lwz r6,0(r3)
|
srcnr; lwz r6,0(r3)
|
||||||
addi r3,r3,4
|
addi r3,r3,4
|
||||||
adde r0,r0,r6
|
adde r0,r0,r6
|
||||||
dest; stw r6,0(r4)
|
dstnr; stw r6,0(r4)
|
||||||
addi r4,r4,4
|
addi r4,r4,4
|
||||||
subi r5,r5,4
|
subi r5,r5,4
|
||||||
|
|
||||||
|
@ -416,10 +432,10 @@ dest; stw r6,0(r4)
|
||||||
srdi. r6,r5,1
|
srdi. r6,r5,1
|
||||||
beq .Lcopy_tail_byte
|
beq .Lcopy_tail_byte
|
||||||
|
|
||||||
source; lhz r6,0(r3)
|
srcnr; lhz r6,0(r3)
|
||||||
addi r3,r3,2
|
addi r3,r3,2
|
||||||
adde r0,r0,r6
|
adde r0,r0,r6
|
||||||
dest; sth r6,0(r4)
|
dstnr; sth r6,0(r4)
|
||||||
addi r4,r4,2
|
addi r4,r4,2
|
||||||
subi r5,r5,2
|
subi r5,r5,2
|
||||||
|
|
||||||
|
@ -427,10 +443,10 @@ dest; sth r6,0(r4)
|
||||||
andi. r6,r5,1
|
andi. r6,r5,1
|
||||||
beq .Lcopy_finish
|
beq .Lcopy_finish
|
||||||
|
|
||||||
source; lbz r6,0(r3)
|
srcnr; lbz r6,0(r3)
|
||||||
sldi r9,r6,8 /* Pad the byte out to 16 bits */
|
sldi r9,r6,8 /* Pad the byte out to 16 bits */
|
||||||
adde r0,r0,r9
|
adde r0,r0,r9
|
||||||
dest; stb r6,0(r4)
|
dstnr; stb r6,0(r4)
|
||||||
|
|
||||||
.Lcopy_finish:
|
.Lcopy_finish:
|
||||||
addze r0,r0 /* add in final carry */
|
addze r0,r0 /* add in final carry */
|
||||||
|
@ -440,6 +456,11 @@ dest; stb r6,0(r4)
|
||||||
blr
|
blr
|
||||||
|
|
||||||
.Lsrc_error:
|
.Lsrc_error:
|
||||||
|
ld r14,STK_REG(R14)(r1)
|
||||||
|
ld r15,STK_REG(R15)(r1)
|
||||||
|
ld r16,STK_REG(R16)(r1)
|
||||||
|
addi r1,r1,STACKFRAMESIZE
|
||||||
|
.Lsrc_error_nr:
|
||||||
cmpdi 0,r7,0
|
cmpdi 0,r7,0
|
||||||
beqlr
|
beqlr
|
||||||
li r6,-EFAULT
|
li r6,-EFAULT
|
||||||
|
@ -447,6 +468,11 @@ dest; stb r6,0(r4)
|
||||||
blr
|
blr
|
||||||
|
|
||||||
.Ldest_error:
|
.Ldest_error:
|
||||||
|
ld r14,STK_REG(R14)(r1)
|
||||||
|
ld r15,STK_REG(R15)(r1)
|
||||||
|
ld r16,STK_REG(R16)(r1)
|
||||||
|
addi r1,r1,STACKFRAMESIZE
|
||||||
|
.Ldest_error_nr:
|
||||||
cmpdi 0,r8,0
|
cmpdi 0,r8,0
|
||||||
beqlr
|
beqlr
|
||||||
li r6,-EFAULT
|
li r6,-EFAULT
|
||||||
|
|
|
@ -300,5 +300,9 @@ void vmemmap_free(unsigned long start, unsigned long end)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void register_page_bootmem_memmap(unsigned long section_nr,
|
||||||
|
struct page *start_page, unsigned long size)
|
||||||
|
{
|
||||||
|
}
|
||||||
#endif /* CONFIG_SPARSEMEM_VMEMMAP */
|
#endif /* CONFIG_SPARSEMEM_VMEMMAP */
|
||||||
|
|
||||||
|
|
|
@ -297,12 +297,21 @@ void __init paging_init(void)
|
||||||
}
|
}
|
||||||
#endif /* ! CONFIG_NEED_MULTIPLE_NODES */
|
#endif /* ! CONFIG_NEED_MULTIPLE_NODES */
|
||||||
|
|
||||||
|
static void __init register_page_bootmem_info(void)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for_each_online_node(i)
|
||||||
|
register_page_bootmem_info_node(NODE_DATA(i));
|
||||||
|
}
|
||||||
|
|
||||||
void __init mem_init(void)
|
void __init mem_init(void)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_SWIOTLB
|
#ifdef CONFIG_SWIOTLB
|
||||||
swiotlb_init(0);
|
swiotlb_init(0);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
register_page_bootmem_info();
|
||||||
high_memory = (void *) __va(max_low_pfn * PAGE_SIZE);
|
high_memory = (void *) __va(max_low_pfn * PAGE_SIZE);
|
||||||
set_max_mapnr(max_pfn);
|
set_max_mapnr(max_pfn);
|
||||||
free_all_bootmem();
|
free_all_bootmem();
|
||||||
|
|
|
@ -199,6 +199,7 @@
|
||||||
#define MMCR1_UNIT_SHIFT(pmc) (60 - (4 * ((pmc) - 1)))
|
#define MMCR1_UNIT_SHIFT(pmc) (60 - (4 * ((pmc) - 1)))
|
||||||
#define MMCR1_COMBINE_SHIFT(pmc) (35 - ((pmc) - 1))
|
#define MMCR1_COMBINE_SHIFT(pmc) (35 - ((pmc) - 1))
|
||||||
#define MMCR1_PMCSEL_SHIFT(pmc) (24 - (((pmc) - 1)) * 8)
|
#define MMCR1_PMCSEL_SHIFT(pmc) (24 - (((pmc) - 1)) * 8)
|
||||||
|
#define MMCR1_FAB_SHIFT 36
|
||||||
#define MMCR1_DC_QUAL_SHIFT 47
|
#define MMCR1_DC_QUAL_SHIFT 47
|
||||||
#define MMCR1_IC_QUAL_SHIFT 46
|
#define MMCR1_IC_QUAL_SHIFT 46
|
||||||
|
|
||||||
|
@ -388,8 +389,8 @@ static int power8_compute_mmcr(u64 event[], int n_ev,
|
||||||
* the threshold bits are used for the match value.
|
* the threshold bits are used for the match value.
|
||||||
*/
|
*/
|
||||||
if (event_is_fab_match(event[i])) {
|
if (event_is_fab_match(event[i])) {
|
||||||
mmcr1 |= (event[i] >> EVENT_THR_CTL_SHIFT) &
|
mmcr1 |= ((event[i] >> EVENT_THR_CTL_SHIFT) &
|
||||||
EVENT_THR_CTL_MASK;
|
EVENT_THR_CTL_MASK) << MMCR1_FAB_SHIFT;
|
||||||
} else {
|
} else {
|
||||||
val = (event[i] >> EVENT_THR_CTL_SHIFT) & EVENT_THR_CTL_MASK;
|
val = (event[i] >> EVENT_THR_CTL_SHIFT) & EVENT_THR_CTL_MASK;
|
||||||
mmcra |= val << MMCRA_THR_CTL_SHIFT;
|
mmcra |= val << MMCRA_THR_CTL_SHIFT;
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
|
|
||||||
static __always_inline bool arch_static_branch(struct static_key *key)
|
static __always_inline bool arch_static_branch(struct static_key *key)
|
||||||
{
|
{
|
||||||
asm goto("0: brcl 0,0\n"
|
asm_volatile_goto("0: brcl 0,0\n"
|
||||||
".pushsection __jump_table, \"aw\"\n"
|
".pushsection __jump_table, \"aw\"\n"
|
||||||
ASM_ALIGN "\n"
|
ASM_ALIGN "\n"
|
||||||
ASM_PTR " 0b, %l[label], %0\n"
|
ASM_PTR " 0b, %l[label], %0\n"
|
||||||
|
|
|
@ -748,7 +748,9 @@ static inline void pgste_set_key(pte_t *ptep, pgste_t pgste, pte_t entry)
|
||||||
|
|
||||||
static inline void pgste_set_pte(pte_t *ptep, pte_t entry)
|
static inline void pgste_set_pte(pte_t *ptep, pte_t entry)
|
||||||
{
|
{
|
||||||
if (!MACHINE_HAS_ESOP && (pte_val(entry) & _PAGE_WRITE)) {
|
if (!MACHINE_HAS_ESOP &&
|
||||||
|
(pte_val(entry) & _PAGE_PRESENT) &&
|
||||||
|
(pte_val(entry) & _PAGE_WRITE)) {
|
||||||
/*
|
/*
|
||||||
* Without enhanced suppression-on-protection force
|
* Without enhanced suppression-on-protection force
|
||||||
* the dirty bit on for all writable ptes.
|
* the dirty bit on for all writable ptes.
|
||||||
|
|
|
@ -71,30 +71,30 @@ static inline void local_tick_enable(unsigned long long comp)
|
||||||
|
|
||||||
typedef unsigned long long cycles_t;
|
typedef unsigned long long cycles_t;
|
||||||
|
|
||||||
static inline unsigned long long get_tod_clock(void)
|
|
||||||
{
|
|
||||||
unsigned long long clk;
|
|
||||||
|
|
||||||
#ifdef CONFIG_HAVE_MARCH_Z9_109_FEATURES
|
|
||||||
asm volatile(".insn s,0xb27c0000,%0" : "=Q" (clk) : : "cc");
|
|
||||||
#else
|
|
||||||
asm volatile("stck %0" : "=Q" (clk) : : "cc");
|
|
||||||
#endif
|
|
||||||
return clk;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void get_tod_clock_ext(char *clk)
|
static inline void get_tod_clock_ext(char *clk)
|
||||||
{
|
{
|
||||||
asm volatile("stcke %0" : "=Q" (*clk) : : "cc");
|
asm volatile("stcke %0" : "=Q" (*clk) : : "cc");
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline unsigned long long get_tod_clock_xt(void)
|
static inline unsigned long long get_tod_clock(void)
|
||||||
{
|
{
|
||||||
unsigned char clk[16];
|
unsigned char clk[16];
|
||||||
get_tod_clock_ext(clk);
|
get_tod_clock_ext(clk);
|
||||||
return *((unsigned long long *)&clk[1]);
|
return *((unsigned long long *)&clk[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline unsigned long long get_tod_clock_fast(void)
|
||||||
|
{
|
||||||
|
#ifdef CONFIG_HAVE_MARCH_Z9_109_FEATURES
|
||||||
|
unsigned long long clk;
|
||||||
|
|
||||||
|
asm volatile("stckf %0" : "=Q" (clk) : : "cc");
|
||||||
|
return clk;
|
||||||
|
#else
|
||||||
|
return get_tod_clock();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
static inline cycles_t get_cycles(void)
|
static inline cycles_t get_cycles(void)
|
||||||
{
|
{
|
||||||
return (cycles_t) get_tod_clock() >> 2;
|
return (cycles_t) get_tod_clock() >> 2;
|
||||||
|
@ -125,7 +125,7 @@ extern u64 sched_clock_base_cc;
|
||||||
*/
|
*/
|
||||||
static inline unsigned long long get_tod_clock_monotonic(void)
|
static inline unsigned long long get_tod_clock_monotonic(void)
|
||||||
{
|
{
|
||||||
return get_tod_clock_xt() - sched_clock_base_cc;
|
return get_tod_clock() - sched_clock_base_cc;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -99,7 +99,7 @@ int copy_siginfo_to_user32(compat_siginfo_t __user *to, siginfo_t *from)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return err;
|
return err ? -EFAULT : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int copy_siginfo_from_user32(siginfo_t *to, compat_siginfo_t __user *from)
|
int copy_siginfo_from_user32(siginfo_t *to, compat_siginfo_t __user *from)
|
||||||
|
@ -148,7 +148,7 @@ int copy_siginfo_from_user32(siginfo_t *to, compat_siginfo_t __user *from)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return err;
|
return err ? -EFAULT : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int save_sigregs32(struct pt_regs *regs, _sigregs32 __user *sregs)
|
static int save_sigregs32(struct pt_regs *regs, _sigregs32 __user *sregs)
|
||||||
|
|
|
@ -40,28 +40,26 @@ static inline void *load_real_addr(void *addr)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copy up to one page to vmalloc or real memory
|
* Copy real to virtual or real memory
|
||||||
*/
|
*/
|
||||||
static ssize_t copy_page_real(void *buf, void *src, size_t csize)
|
static int copy_from_realmem(void *dest, void *src, size_t count)
|
||||||
{
|
{
|
||||||
size_t size;
|
unsigned long size;
|
||||||
|
int rc;
|
||||||
|
|
||||||
if (is_vmalloc_addr(buf)) {
|
if (!count)
|
||||||
BUG_ON(csize >= PAGE_SIZE);
|
return 0;
|
||||||
/* If buf is not page aligned, copy first part */
|
if (!is_vmalloc_or_module_addr(dest))
|
||||||
size = min(roundup(__pa(buf), PAGE_SIZE) - __pa(buf), csize);
|
return memcpy_real(dest, src, count);
|
||||||
if (size) {
|
do {
|
||||||
if (memcpy_real(load_real_addr(buf), src, size))
|
size = min(count, PAGE_SIZE - (__pa(dest) & ~PAGE_MASK));
|
||||||
return -EFAULT;
|
if (memcpy_real(load_real_addr(dest), src, size))
|
||||||
buf += size;
|
return -EFAULT;
|
||||||
src += size;
|
count -= size;
|
||||||
}
|
dest += size;
|
||||||
/* Copy second part */
|
src += size;
|
||||||
size = csize - size;
|
} while (count);
|
||||||
return (size) ? memcpy_real(load_real_addr(buf), src, size) : 0;
|
return 0;
|
||||||
} else {
|
|
||||||
return memcpy_real(buf, src, csize);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -114,7 +112,7 @@ static ssize_t copy_oldmem_page_kdump(char *buf, size_t csize,
|
||||||
rc = copy_to_user_real((void __force __user *) buf,
|
rc = copy_to_user_real((void __force __user *) buf,
|
||||||
(void *) src, csize);
|
(void *) src, csize);
|
||||||
else
|
else
|
||||||
rc = copy_page_real(buf, (void *) src, csize);
|
rc = copy_from_realmem(buf, (void *) src, csize);
|
||||||
return (rc == 0) ? rc : csize;
|
return (rc == 0) ? rc : csize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -210,7 +208,7 @@ int copy_from_oldmem(void *dest, void *src, size_t count)
|
||||||
if (OLDMEM_BASE) {
|
if (OLDMEM_BASE) {
|
||||||
if ((unsigned long) src < OLDMEM_SIZE) {
|
if ((unsigned long) src < OLDMEM_SIZE) {
|
||||||
copied = min(count, OLDMEM_SIZE - (unsigned long) src);
|
copied = min(count, OLDMEM_SIZE - (unsigned long) src);
|
||||||
rc = memcpy_real(dest, src + OLDMEM_BASE, copied);
|
rc = copy_from_realmem(dest, src + OLDMEM_BASE, copied);
|
||||||
if (rc)
|
if (rc)
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
@ -223,7 +221,7 @@ int copy_from_oldmem(void *dest, void *src, size_t count)
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return memcpy_real(dest + copied, src + copied, count - copied);
|
return copy_from_realmem(dest + copied, src + copied, count - copied);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -867,7 +867,7 @@ static inline void
|
||||||
debug_finish_entry(debug_info_t * id, debug_entry_t* active, int level,
|
debug_finish_entry(debug_info_t * id, debug_entry_t* active, int level,
|
||||||
int exception)
|
int exception)
|
||||||
{
|
{
|
||||||
active->id.stck = get_tod_clock();
|
active->id.stck = get_tod_clock_fast();
|
||||||
active->id.fields.cpuid = smp_processor_id();
|
active->id.fields.cpuid = smp_processor_id();
|
||||||
active->caller = __builtin_return_address(0);
|
active->caller = __builtin_return_address(0);
|
||||||
active->id.fields.exception = exception;
|
active->id.fields.exception = exception;
|
||||||
|
|
|
@ -266,6 +266,7 @@ sysc_sigpending:
|
||||||
tm __TI_flags+3(%r12),_TIF_SYSCALL
|
tm __TI_flags+3(%r12),_TIF_SYSCALL
|
||||||
jno sysc_return
|
jno sysc_return
|
||||||
lm %r2,%r7,__PT_R2(%r11) # load svc arguments
|
lm %r2,%r7,__PT_R2(%r11) # load svc arguments
|
||||||
|
l %r10,__TI_sysc_table(%r12) # 31 bit system call table
|
||||||
xr %r8,%r8 # svc 0 returns -ENOSYS
|
xr %r8,%r8 # svc 0 returns -ENOSYS
|
||||||
clc __PT_INT_CODE+2(2,%r11),BASED(.Lnr_syscalls+2)
|
clc __PT_INT_CODE+2(2,%r11),BASED(.Lnr_syscalls+2)
|
||||||
jnl sysc_nr_ok # invalid svc number -> do svc 0
|
jnl sysc_nr_ok # invalid svc number -> do svc 0
|
||||||
|
|
|
@ -297,6 +297,7 @@ sysc_sigpending:
|
||||||
tm __TI_flags+7(%r12),_TIF_SYSCALL
|
tm __TI_flags+7(%r12),_TIF_SYSCALL
|
||||||
jno sysc_return
|
jno sysc_return
|
||||||
lmg %r2,%r7,__PT_R2(%r11) # load svc arguments
|
lmg %r2,%r7,__PT_R2(%r11) # load svc arguments
|
||||||
|
lg %r10,__TI_sysc_table(%r12) # address of system call table
|
||||||
lghi %r8,0 # svc 0 returns -ENOSYS
|
lghi %r8,0 # svc 0 returns -ENOSYS
|
||||||
llgh %r1,__PT_INT_CODE+2(%r11) # load new svc number
|
llgh %r1,__PT_INT_CODE+2(%r11) # load new svc number
|
||||||
cghi %r1,NR_syscalls
|
cghi %r1,NR_syscalls
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue