mirror of
https://github.com/torvalds/linux.git
synced 2024-11-28 07:01:32 +00:00
Linux 3.18-rc7
-----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQEcBAABAgAGBQJUe7l9AAoJEHm+PkMAQRiGkGcIAIryQ7NKn4IaxUtS807Lx4Ih obEnx7nNKZTXCZpD/7XQGHMMJyozMJR50PHZESJoHu4Luhv9h7EFRnyJ6MdqMlwn zla3zY0yRsHwPoJKcHbSE0CPHZz0WPQHj7IEbM+XJz2tMNJfbgTrezElmcCM4DRp c9ae+ggwZ2cyNYM0r2RSwSJ525WMh69f9dzSUE27fpvkllQgwqNs/jHYz8HNOEht FWcv5UhvzKjwJS3awULfOB3zH2QdFvVTrwAzd+kbV2Q6T6CaUoFRlhXeKUO6W2Jv pJM6oj8tMZUkdXEv7EQXT1kwEqC4DULTTTHs4tSF79O1ESmNfePiOwwBcwoM2nM= =kG1Y -----END PGP SIGNATURE----- Merge tag 'v3.18-rc7' into drm-next This fixes a bunch of conflicts prior to merging i915 tree. Linux 3.18-rc7 Conflicts: drivers/gpu/drm/exynos/exynos_drm_drv.c drivers/gpu/drm/i915/i915_drv.c drivers/gpu/drm/i915/intel_pm.c drivers/gpu/drm/tegra/dc.c
This commit is contained in:
commit
e8115e79aa
@ -3,8 +3,10 @@
|
|||||||
Required properties:
|
Required properties:
|
||||||
- compatible : should contain one of the following:
|
- compatible : should contain one of the following:
|
||||||
- "renesas,sata-r8a7779" for R-Car H1
|
- "renesas,sata-r8a7779" for R-Car H1
|
||||||
- "renesas,sata-r8a7790" for R-Car H2
|
- "renesas,sata-r8a7790-es1" for R-Car H2 ES1
|
||||||
- "renesas,sata-r8a7791" for R-Car M2
|
- "renesas,sata-r8a7790" for R-Car H2 other than ES1
|
||||||
|
- "renesas,sata-r8a7791" for R-Car M2-W
|
||||||
|
- "renesas,sata-r8a7793" for R-Car M2-N
|
||||||
- reg : address and length of the SATA registers;
|
- reg : address and length of the SATA registers;
|
||||||
- interrupts : must consist of one interrupt specifier.
|
- interrupts : must consist of one interrupt specifier.
|
||||||
|
|
||||||
|
@ -30,10 +30,6 @@ should only be used when a device has multiple interrupt parents.
|
|||||||
Example:
|
Example:
|
||||||
interrupts-extended = <&intc1 5 1>, <&intc2 1 0>;
|
interrupts-extended = <&intc1 5 1>, <&intc2 1 0>;
|
||||||
|
|
||||||
A device node may contain either "interrupts" or "interrupts-extended", but not
|
|
||||||
both. If both properties are present, then the operating system should log an
|
|
||||||
error and use only the data in "interrupts".
|
|
||||||
|
|
||||||
2) Interrupt controller nodes
|
2) Interrupt controller nodes
|
||||||
-----------------------------
|
-----------------------------
|
||||||
|
|
||||||
|
@ -7,3 +7,14 @@ And for the interrupt mapping part:
|
|||||||
|
|
||||||
Open Firmware Recommended Practice: Interrupt Mapping
|
Open Firmware Recommended Practice: Interrupt Mapping
|
||||||
http://www.openfirmware.org/1275/practice/imap/imap0_9d.pdf
|
http://www.openfirmware.org/1275/practice/imap/imap0_9d.pdf
|
||||||
|
|
||||||
|
Additionally to the properties specified in the above standards a host bridge
|
||||||
|
driver implementation may support the following properties:
|
||||||
|
|
||||||
|
- linux,pci-domain:
|
||||||
|
If present this property assigns a fixed PCI domain number to a host bridge,
|
||||||
|
otherwise an unstable (across boots) unique number will be assigned.
|
||||||
|
It is required to either not set this property at all or set it for all
|
||||||
|
host bridges in the system, otherwise potentially conflicting domain numbers
|
||||||
|
may be assigned to root buses behind different host bridges. The domain
|
||||||
|
number for each host bridge in the system must be unique.
|
||||||
|
@ -9,7 +9,7 @@ Please refer to pinctrl-bindings.txt in this directory for details of the
|
|||||||
common pinctrl bindings used by client devices, including the meaning of the
|
common pinctrl bindings used by client devices, including the meaning of the
|
||||||
phrase "pin configuration node".
|
phrase "pin configuration node".
|
||||||
|
|
||||||
TZ1090-PDC's pin configuration nodes act as a container for an abitrary number
|
TZ1090-PDC's pin configuration nodes act as a container for an arbitrary number
|
||||||
of subnodes. Each of these subnodes represents some desired configuration for a
|
of subnodes. Each of these subnodes represents some desired configuration for a
|
||||||
pin, a group, or a list of pins or groups. This configuration can include the
|
pin, a group, or a list of pins or groups. This configuration can include the
|
||||||
mux function to select on those pin(s)/group(s), and various pin configuration
|
mux function to select on those pin(s)/group(s), and various pin configuration
|
||||||
|
@ -9,7 +9,7 @@ Please refer to pinctrl-bindings.txt in this directory for details of the
|
|||||||
common pinctrl bindings used by client devices, including the meaning of the
|
common pinctrl bindings used by client devices, including the meaning of the
|
||||||
phrase "pin configuration node".
|
phrase "pin configuration node".
|
||||||
|
|
||||||
TZ1090's pin configuration nodes act as a container for an abitrary number of
|
TZ1090's pin configuration nodes act as a container for an arbitrary number of
|
||||||
subnodes. Each of these subnodes represents some desired configuration for a
|
subnodes. Each of these subnodes represents some desired configuration for a
|
||||||
pin, a group, or a list of pins or groups. This configuration can include the
|
pin, a group, or a list of pins or groups. This configuration can include the
|
||||||
mux function to select on those pin(s)/group(s), and various pin configuration
|
mux function to select on those pin(s)/group(s), and various pin configuration
|
||||||
|
@ -9,7 +9,7 @@ Please refer to pinctrl-bindings.txt in this directory for details of the
|
|||||||
common pinctrl bindings used by client devices, including the meaning of the
|
common pinctrl bindings used by client devices, including the meaning of the
|
||||||
phrase "pin configuration node".
|
phrase "pin configuration node".
|
||||||
|
|
||||||
Lantiq's pin configuration nodes act as a container for an abitrary number of
|
Lantiq's pin configuration nodes act as a container for an arbitrary number of
|
||||||
subnodes. Each of these subnodes represents some desired configuration for a
|
subnodes. Each of these subnodes represents some desired configuration for a
|
||||||
pin, a group, or a list of pins or groups. This configuration can include the
|
pin, a group, or a list of pins or groups. This configuration can include the
|
||||||
mux function to select on those group(s), and two pin configuration parameters:
|
mux function to select on those group(s), and two pin configuration parameters:
|
||||||
|
@ -9,7 +9,7 @@ Please refer to pinctrl-bindings.txt in this directory for details of the
|
|||||||
common pinctrl bindings used by client devices, including the meaning of the
|
common pinctrl bindings used by client devices, including the meaning of the
|
||||||
phrase "pin configuration node".
|
phrase "pin configuration node".
|
||||||
|
|
||||||
Lantiq's pin configuration nodes act as a container for an abitrary number of
|
Lantiq's pin configuration nodes act as a container for an arbitrary number of
|
||||||
subnodes. Each of these subnodes represents some desired configuration for a
|
subnodes. Each of these subnodes represents some desired configuration for a
|
||||||
pin, a group, or a list of pins or groups. This configuration can include the
|
pin, a group, or a list of pins or groups. This configuration can include the
|
||||||
mux function to select on those group(s), and two pin configuration parameters:
|
mux function to select on those group(s), and two pin configuration parameters:
|
||||||
|
@ -9,7 +9,7 @@ Please refer to pinctrl-bindings.txt in this directory for details of the
|
|||||||
common pinctrl bindings used by client devices, including the meaning of the
|
common pinctrl bindings used by client devices, including the meaning of the
|
||||||
phrase "pin configuration node".
|
phrase "pin configuration node".
|
||||||
|
|
||||||
Tegra's pin configuration nodes act as a container for an abitrary number of
|
Tegra's pin configuration nodes act as a container for an arbitrary number of
|
||||||
subnodes. Each of these subnodes represents some desired configuration for a
|
subnodes. Each of these subnodes represents some desired configuration for a
|
||||||
pin, a group, or a list of pins or groups. This configuration can include the
|
pin, a group, or a list of pins or groups. This configuration can include the
|
||||||
mux function to select on those pin(s)/group(s), and various pin configuration
|
mux function to select on those pin(s)/group(s), and various pin configuration
|
||||||
|
@ -13,7 +13,7 @@ Optional properties:
|
|||||||
Please refer to pinctrl-bindings.txt in this directory for details of the common
|
Please refer to pinctrl-bindings.txt in this directory for details of the common
|
||||||
pinctrl bindings used by client devices.
|
pinctrl bindings used by client devices.
|
||||||
|
|
||||||
SiRFprimaII's pinmux nodes act as a container for an abitrary number of subnodes.
|
SiRFprimaII's pinmux nodes act as a container for an arbitrary number of subnodes.
|
||||||
Each of these subnodes represents some desired configuration for a group of pins.
|
Each of these subnodes represents some desired configuration for a group of pins.
|
||||||
|
|
||||||
Required subnode-properties:
|
Required subnode-properties:
|
||||||
|
@ -32,7 +32,7 @@ Required properties:
|
|||||||
Please refer to pinctrl-bindings.txt in this directory for details of the common
|
Please refer to pinctrl-bindings.txt in this directory for details of the common
|
||||||
pinctrl bindings used by client devices.
|
pinctrl bindings used by client devices.
|
||||||
|
|
||||||
SPEAr's pinmux nodes act as a container for an abitrary number of subnodes. Each
|
SPEAr's pinmux nodes act as a container for an arbitrary number of subnodes. Each
|
||||||
of these subnodes represents muxing for a pin, a group, or a list of pins or
|
of these subnodes represents muxing for a pin, a group, or a list of pins or
|
||||||
groups.
|
groups.
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@ Please refer to pinctrl-bindings.txt in this directory for details of the
|
|||||||
common pinctrl bindings used by client devices, including the meaning of the
|
common pinctrl bindings used by client devices, including the meaning of the
|
||||||
phrase "pin configuration node".
|
phrase "pin configuration node".
|
||||||
|
|
||||||
Qualcomm's pin configuration nodes act as a container for an abitrary number of
|
Qualcomm's pin configuration nodes act as a container for an arbitrary number of
|
||||||
subnodes. Each of these subnodes represents some desired configuration for a
|
subnodes. Each of these subnodes represents some desired configuration for a
|
||||||
pin, a group, or a list of pins or groups. This configuration can include the
|
pin, a group, or a list of pins or groups. This configuration can include the
|
||||||
mux function to select on those pin(s)/group(s), and various pin configuration
|
mux function to select on those pin(s)/group(s), and various pin configuration
|
||||||
|
@ -47,7 +47,7 @@ Please refer to pinctrl-bindings.txt in this directory for details of the
|
|||||||
common pinctrl bindings used by client devices, including the meaning of the
|
common pinctrl bindings used by client devices, including the meaning of the
|
||||||
phrase "pin configuration node".
|
phrase "pin configuration node".
|
||||||
|
|
||||||
The pin configuration nodes act as a container for an abitrary number of
|
The pin configuration nodes act as a container for an arbitrary number of
|
||||||
subnodes. Each of these subnodes represents some desired configuration for a
|
subnodes. Each of these subnodes represents some desired configuration for a
|
||||||
pin, a group, or a list of pins or groups. This configuration can include the
|
pin, a group, or a list of pins or groups. This configuration can include the
|
||||||
mux function to select on those pin(s)/group(s), and various pin configuration
|
mux function to select on those pin(s)/group(s), and various pin configuration
|
||||||
|
@ -18,7 +18,7 @@ Please refer to pinctrl-bindings.txt in this directory for details of the
|
|||||||
common pinctrl bindings used by client devices, including the meaning of the
|
common pinctrl bindings used by client devices, including the meaning of the
|
||||||
phrase "pin configuration node".
|
phrase "pin configuration node".
|
||||||
|
|
||||||
Qualcomm's pin configuration nodes act as a container for an abitrary number of
|
Qualcomm's pin configuration nodes act as a container for an arbitrary number of
|
||||||
subnodes. Each of these subnodes represents some desired configuration for a
|
subnodes. Each of these subnodes represents some desired configuration for a
|
||||||
pin, a group, or a list of pins or groups. This configuration can include the
|
pin, a group, or a list of pins or groups. This configuration can include the
|
||||||
mux function to select on those pin(s)/group(s), and various pin configuration
|
mux function to select on those pin(s)/group(s), and various pin configuration
|
||||||
|
@ -47,7 +47,7 @@ Please refer to pinctrl-bindings.txt in this directory for details of the
|
|||||||
common pinctrl bindings used by client devices, including the meaning of the
|
common pinctrl bindings used by client devices, including the meaning of the
|
||||||
phrase "pin configuration node".
|
phrase "pin configuration node".
|
||||||
|
|
||||||
The pin configuration nodes act as a container for an abitrary number of
|
The pin configuration nodes act as a container for an arbitrary number of
|
||||||
subnodes. Each of these subnodes represents some desired configuration for a
|
subnodes. Each of these subnodes represents some desired configuration for a
|
||||||
pin, a group, or a list of pins or groups. This configuration can include the
|
pin, a group, or a list of pins or groups. This configuration can include the
|
||||||
mux function to select on those pin(s)/group(s), and various pin configuration
|
mux function to select on those pin(s)/group(s), and various pin configuration
|
||||||
|
@ -18,7 +18,7 @@ Please refer to pinctrl-bindings.txt in this directory for details of the
|
|||||||
common pinctrl bindings used by client devices, including the meaning of the
|
common pinctrl bindings used by client devices, including the meaning of the
|
||||||
phrase "pin configuration node".
|
phrase "pin configuration node".
|
||||||
|
|
||||||
Qualcomm's pin configuration nodes act as a container for an abitrary number of
|
Qualcomm's pin configuration nodes act as a container for an arbitrary number of
|
||||||
subnodes. Each of these subnodes represents some desired configuration for a
|
subnodes. Each of these subnodes represents some desired configuration for a
|
||||||
pin, a group, or a list of pins or groups. This configuration can include the
|
pin, a group, or a list of pins or groups. This configuration can include the
|
||||||
mux function to select on those pin(s)/group(s), and various pin configuration
|
mux function to select on those pin(s)/group(s), and various pin configuration
|
||||||
|
@ -34,6 +34,7 @@ chipidea Chipidea, Inc
|
|||||||
chrp Common Hardware Reference Platform
|
chrp Common Hardware Reference Platform
|
||||||
chunghwa Chunghwa Picture Tubes Ltd.
|
chunghwa Chunghwa Picture Tubes Ltd.
|
||||||
cirrus Cirrus Logic, Inc.
|
cirrus Cirrus Logic, Inc.
|
||||||
|
cnm Chips&Media, Inc.
|
||||||
cortina Cortina Systems, Inc.
|
cortina Cortina Systems, Inc.
|
||||||
crystalfontz Crystalfontz America, Inc.
|
crystalfontz Crystalfontz America, Inc.
|
||||||
dallas Maxim Integrated Products (formerly Dallas Semiconductor)
|
dallas Maxim Integrated Products (formerly Dallas Semiconductor)
|
||||||
@ -94,6 +95,7 @@ maxim Maxim Integrated Products
|
|||||||
mediatek MediaTek Inc.
|
mediatek MediaTek Inc.
|
||||||
micrel Micrel Inc.
|
micrel Micrel Inc.
|
||||||
microchip Microchip Technology Inc.
|
microchip Microchip Technology Inc.
|
||||||
|
micron Micron Technology Inc.
|
||||||
mitsubishi Mitsubishi Electric Corporation
|
mitsubishi Mitsubishi Electric Corporation
|
||||||
mosaixtech Mosaix Technologies, Inc.
|
mosaixtech Mosaix Technologies, Inc.
|
||||||
moxa Moxa
|
moxa Moxa
|
||||||
@ -129,6 +131,7 @@ renesas Renesas Electronics Corporation
|
|||||||
ricoh Ricoh Co. Ltd.
|
ricoh Ricoh Co. Ltd.
|
||||||
rockchip Fuzhou Rockchip Electronics Co., Ltd
|
rockchip Fuzhou Rockchip Electronics Co., Ltd
|
||||||
samsung Samsung Semiconductor
|
samsung Samsung Semiconductor
|
||||||
|
sandisk Sandisk Corporation
|
||||||
sbs Smart Battery System
|
sbs Smart Battery System
|
||||||
schindler Schindler
|
schindler Schindler
|
||||||
seagate Seagate Technology PLC
|
seagate Seagate Technology PLC
|
||||||
@ -140,7 +143,7 @@ silergy Silergy Corp.
|
|||||||
sirf SiRF Technology, Inc.
|
sirf SiRF Technology, Inc.
|
||||||
sitronix Sitronix Technology Corporation
|
sitronix Sitronix Technology Corporation
|
||||||
smsc Standard Microsystems Corporation
|
smsc Standard Microsystems Corporation
|
||||||
snps Synopsys, Inc.
|
snps Synopsys, Inc.
|
||||||
solidrun SolidRun
|
solidrun SolidRun
|
||||||
sony Sony Corporation
|
sony Sony Corporation
|
||||||
spansion Spansion Inc.
|
spansion Spansion Inc.
|
||||||
|
@ -64,7 +64,7 @@ is formed.
|
|||||||
At mount time, the two directories given as mount options "lowerdir" and
|
At mount time, the two directories given as mount options "lowerdir" and
|
||||||
"upperdir" are combined into a merged directory:
|
"upperdir" are combined into a merged directory:
|
||||||
|
|
||||||
mount -t overlayfs overlayfs -olowerdir=/lower,upperdir=/upper,\
|
mount -t overlay overlay -olowerdir=/lower,upperdir=/upper,\
|
||||||
workdir=/work /merged
|
workdir=/work /merged
|
||||||
|
|
||||||
The "workdir" needs to be an empty directory on the same filesystem
|
The "workdir" needs to be an empty directory on the same filesystem
|
||||||
|
@ -38,22 +38,38 @@ Contents
|
|||||||
7.2.1 Status packet
|
7.2.1 Status packet
|
||||||
7.2.2 Head packet
|
7.2.2 Head packet
|
||||||
7.2.3 Motion packet
|
7.2.3 Motion packet
|
||||||
|
8. Trackpoint (for Hardware version 3 and 4)
|
||||||
|
8.1 Registers
|
||||||
|
8.2 Native relative mode 6 byte packet format
|
||||||
|
8.2.1 Status Packet
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
1. Introduction
|
1. Introduction
|
||||||
~~~~~~~~~~~~
|
~~~~~~~~~~~~
|
||||||
|
|
||||||
Currently the Linux Elantech touchpad driver is aware of two different
|
Currently the Linux Elantech touchpad driver is aware of four different
|
||||||
hardware versions unimaginatively called version 1 and version 2. Version 1
|
hardware versions unimaginatively called version 1,version 2, version 3
|
||||||
is found in "older" laptops and uses 4 bytes per packet. Version 2 seems to
|
and version 4. Version 1 is found in "older" laptops and uses 4 bytes per
|
||||||
be introduced with the EeePC and uses 6 bytes per packet, and provides
|
packet. Version 2 seems to be introduced with the EeePC and uses 6 bytes
|
||||||
additional features such as position of two fingers, and width of the touch.
|
per packet, and provides additional features such as position of two fingers,
|
||||||
|
and width of the touch. Hardware version 3 uses 6 bytes per packet (and
|
||||||
|
for 2 fingers the concatenation of two 6 bytes packets) and allows tracking
|
||||||
|
of up to 3 fingers. Hardware version 4 uses 6 bytes per packet, and can
|
||||||
|
combine a status packet with multiple head or motion packets. Hardware version
|
||||||
|
4 allows tracking up to 5 fingers.
|
||||||
|
|
||||||
|
Some Hardware version 3 and version 4 also have a trackpoint which uses a
|
||||||
|
separate packet format. It is also 6 bytes per packet.
|
||||||
|
|
||||||
The driver tries to support both hardware versions and should be compatible
|
The driver tries to support both hardware versions and should be compatible
|
||||||
with the Xorg Synaptics touchpad driver and its graphical configuration
|
with the Xorg Synaptics touchpad driver and its graphical configuration
|
||||||
utilities.
|
utilities.
|
||||||
|
|
||||||
|
Note that a mouse button is also associated with either the touchpad or the
|
||||||
|
trackpoint when a trackpoint is available. Disabling the Touchpad in xorg
|
||||||
|
(TouchPadOff=0) will also disable the buttons associated with the touchpad.
|
||||||
|
|
||||||
Additionally the operation of the touchpad can be altered by adjusting the
|
Additionally the operation of the touchpad can be altered by adjusting the
|
||||||
contents of some of its internal registers. These registers are represented
|
contents of some of its internal registers. These registers are represented
|
||||||
by the driver as sysfs entries under /sys/bus/serio/drivers/psmouse/serio?
|
by the driver as sysfs entries under /sys/bus/serio/drivers/psmouse/serio?
|
||||||
@ -78,7 +94,7 @@ completeness sake.
|
|||||||
2. Extra knobs
|
2. Extra knobs
|
||||||
~~~~~~~~~~~
|
~~~~~~~~~~~
|
||||||
|
|
||||||
Currently the Linux Elantech touchpad driver provides two extra knobs under
|
Currently the Linux Elantech touchpad driver provides three extra knobs under
|
||||||
/sys/bus/serio/drivers/psmouse/serio? for the user.
|
/sys/bus/serio/drivers/psmouse/serio? for the user.
|
||||||
|
|
||||||
* debug
|
* debug
|
||||||
@ -112,6 +128,20 @@ Currently the Linux Elantech touchpad driver provides two extra knobs under
|
|||||||
data consistency checking can be done. For now checking is disabled by
|
data consistency checking can be done. For now checking is disabled by
|
||||||
default. Currently even turning it on will do nothing.
|
default. Currently even turning it on will do nothing.
|
||||||
|
|
||||||
|
* crc_enabled
|
||||||
|
|
||||||
|
Sets crc_enabled to 0/1. The name "crc_enabled" is the official name of
|
||||||
|
this integrity check, even though it is not an actual cyclic redundancy
|
||||||
|
check.
|
||||||
|
|
||||||
|
Depending on the state of crc_enabled, certain basic data integrity
|
||||||
|
verification is done by the driver on hardware version 3 and 4. The
|
||||||
|
driver will reject any packet that appears corrupted. Using this knob,
|
||||||
|
The state of crc_enabled can be altered with this knob.
|
||||||
|
|
||||||
|
Reading the crc_enabled value will show the active value. Echoing
|
||||||
|
"0" or "1" to this file will set the state to "0" or "1".
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
3. Differentiating hardware versions
|
3. Differentiating hardware versions
|
||||||
@ -746,3 +776,42 @@ byte 5:
|
|||||||
|
|
||||||
byte 0 ~ 2 for one finger
|
byte 0 ~ 2 for one finger
|
||||||
byte 3 ~ 5 for another
|
byte 3 ~ 5 for another
|
||||||
|
|
||||||
|
|
||||||
|
8. Trackpoint (for Hardware version 3 and 4)
|
||||||
|
=========================================
|
||||||
|
8.1 Registers
|
||||||
|
~~~~~~~~~
|
||||||
|
No special registers have been identified.
|
||||||
|
|
||||||
|
8.2 Native relative mode 6 byte packet format
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
8.2.1 Status Packet
|
||||||
|
~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
byte 0:
|
||||||
|
bit 7 6 5 4 3 2 1 0
|
||||||
|
0 0 sx sy 0 M R L
|
||||||
|
byte 1:
|
||||||
|
bit 7 6 5 4 3 2 1 0
|
||||||
|
~sx 0 0 0 0 0 0 0
|
||||||
|
byte 2:
|
||||||
|
bit 7 6 5 4 3 2 1 0
|
||||||
|
~sy 0 0 0 0 0 0 0
|
||||||
|
byte 3:
|
||||||
|
bit 7 6 5 4 3 2 1 0
|
||||||
|
0 0 ~sy ~sx 0 1 1 0
|
||||||
|
byte 4:
|
||||||
|
bit 7 6 5 4 3 2 1 0
|
||||||
|
x7 x6 x5 x4 x3 x2 x1 x0
|
||||||
|
byte 5:
|
||||||
|
bit 7 6 5 4 3 2 1 0
|
||||||
|
y7 y6 y5 y4 y3 y2 y1 y0
|
||||||
|
|
||||||
|
|
||||||
|
x and y are written in two's complement spread
|
||||||
|
over 9 bits with sx/sy the relative top bit and
|
||||||
|
x7..x0 and y7..y0 the lower bits.
|
||||||
|
~sx is the inverse of sx, ~sy is the inverse of sy.
|
||||||
|
The sign of y is opposite to what the input driver
|
||||||
|
expects for a relative movement
|
||||||
|
@ -56,6 +56,13 @@ ip_forward_use_pmtu - BOOLEAN
|
|||||||
0 - disabled
|
0 - disabled
|
||||||
1 - enabled
|
1 - enabled
|
||||||
|
|
||||||
|
fwmark_reflect - BOOLEAN
|
||||||
|
Controls the fwmark of kernel-generated IPv4 reply packets that are not
|
||||||
|
associated with a socket for example, TCP RSTs or ICMP echo replies).
|
||||||
|
If unset, these packets have a fwmark of zero. If set, they have the
|
||||||
|
fwmark of the packet they are replying to.
|
||||||
|
Default: 0
|
||||||
|
|
||||||
route/max_size - INTEGER
|
route/max_size - INTEGER
|
||||||
Maximum number of routes allowed in the kernel. Increase
|
Maximum number of routes allowed in the kernel. Increase
|
||||||
this when using large numbers of interfaces and/or routes.
|
this when using large numbers of interfaces and/or routes.
|
||||||
@ -1201,6 +1208,13 @@ conf/all/forwarding - BOOLEAN
|
|||||||
proxy_ndp - BOOLEAN
|
proxy_ndp - BOOLEAN
|
||||||
Do proxy ndp.
|
Do proxy ndp.
|
||||||
|
|
||||||
|
fwmark_reflect - BOOLEAN
|
||||||
|
Controls the fwmark of kernel-generated IPv6 reply packets that are not
|
||||||
|
associated with a socket for example, TCP RSTs or ICMPv6 echo replies).
|
||||||
|
If unset, these packets have a fwmark of zero. If set, they have the
|
||||||
|
fwmark of the packet they are replying to.
|
||||||
|
Default: 0
|
||||||
|
|
||||||
conf/interface/*:
|
conf/interface/*:
|
||||||
Change special settings per interface.
|
Change special settings per interface.
|
||||||
|
|
||||||
|
@ -136,7 +136,7 @@ SOF_TIMESTAMPING_OPT_ID:
|
|||||||
|
|
||||||
This option is implemented only for transmit timestamps. There, the
|
This option is implemented only for transmit timestamps. There, the
|
||||||
timestamp is always looped along with a struct sock_extended_err.
|
timestamp is always looped along with a struct sock_extended_err.
|
||||||
The option modifies field ee_info to pass an id that is unique
|
The option modifies field ee_data to pass an id that is unique
|
||||||
among all possibly concurrently outstanding timestamp requests for
|
among all possibly concurrently outstanding timestamp requests for
|
||||||
that socket. In practice, it is a monotonically increasing u32
|
that socket. In practice, it is a monotonically increasing u32
|
||||||
(that wraps).
|
(that wraps).
|
||||||
|
42
MAINTAINERS
42
MAINTAINERS
@ -2754,6 +2754,13 @@ W: http://www.chelsio.com
|
|||||||
S: Supported
|
S: Supported
|
||||||
F: drivers/net/ethernet/chelsio/cxgb3/
|
F: drivers/net/ethernet/chelsio/cxgb3/
|
||||||
|
|
||||||
|
CXGB3 ISCSI DRIVER (CXGB3I)
|
||||||
|
M: Karen Xie <kxie@chelsio.com>
|
||||||
|
L: linux-scsi@vger.kernel.org
|
||||||
|
W: http://www.chelsio.com
|
||||||
|
S: Supported
|
||||||
|
F: drivers/scsi/cxgbi/cxgb3i
|
||||||
|
|
||||||
CXGB3 IWARP RNIC DRIVER (IW_CXGB3)
|
CXGB3 IWARP RNIC DRIVER (IW_CXGB3)
|
||||||
M: Steve Wise <swise@chelsio.com>
|
M: Steve Wise <swise@chelsio.com>
|
||||||
L: linux-rdma@vger.kernel.org
|
L: linux-rdma@vger.kernel.org
|
||||||
@ -2768,6 +2775,13 @@ W: http://www.chelsio.com
|
|||||||
S: Supported
|
S: Supported
|
||||||
F: drivers/net/ethernet/chelsio/cxgb4/
|
F: drivers/net/ethernet/chelsio/cxgb4/
|
||||||
|
|
||||||
|
CXGB4 ISCSI DRIVER (CXGB4I)
|
||||||
|
M: Karen Xie <kxie@chelsio.com>
|
||||||
|
L: linux-scsi@vger.kernel.org
|
||||||
|
W: http://www.chelsio.com
|
||||||
|
S: Supported
|
||||||
|
F: drivers/scsi/cxgbi/cxgb4i
|
||||||
|
|
||||||
CXGB4 IWARP RNIC DRIVER (IW_CXGB4)
|
CXGB4 IWARP RNIC DRIVER (IW_CXGB4)
|
||||||
M: Steve Wise <swise@chelsio.com>
|
M: Steve Wise <swise@chelsio.com>
|
||||||
L: linux-rdma@vger.kernel.org
|
L: linux-rdma@vger.kernel.org
|
||||||
@ -4733,6 +4747,7 @@ L: linux-iio@vger.kernel.org
|
|||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/iio/
|
F: drivers/iio/
|
||||||
F: drivers/staging/iio/
|
F: drivers/staging/iio/
|
||||||
|
F: include/linux/iio/
|
||||||
|
|
||||||
IKANOS/ADI EAGLE ADSL USB DRIVER
|
IKANOS/ADI EAGLE ADSL USB DRIVER
|
||||||
M: Matthieu Castet <castet.matthieu@free.fr>
|
M: Matthieu Castet <castet.matthieu@free.fr>
|
||||||
@ -6613,6 +6628,23 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap.git
|
|||||||
S: Maintained
|
S: Maintained
|
||||||
F: arch/arm/*omap*/
|
F: arch/arm/*omap*/
|
||||||
F: drivers/i2c/busses/i2c-omap.c
|
F: drivers/i2c/busses/i2c-omap.c
|
||||||
|
F: drivers/irqchip/irq-omap-intc.c
|
||||||
|
F: drivers/mfd/*omap*.c
|
||||||
|
F: drivers/mfd/menelaus.c
|
||||||
|
F: drivers/mfd/palmas.c
|
||||||
|
F: drivers/mfd/tps65217.c
|
||||||
|
F: drivers/mfd/tps65218.c
|
||||||
|
F: drivers/mfd/tps65910.c
|
||||||
|
F: drivers/mfd/twl-core.[ch]
|
||||||
|
F: drivers/mfd/twl4030*.c
|
||||||
|
F: drivers/mfd/twl6030*.c
|
||||||
|
F: drivers/mfd/twl6040*.c
|
||||||
|
F: drivers/regulator/palmas-regulator*.c
|
||||||
|
F: drivers/regulator/pbias-regulator.c
|
||||||
|
F: drivers/regulator/tps65217-regulator.c
|
||||||
|
F: drivers/regulator/tps65218-regulator.c
|
||||||
|
F: drivers/regulator/tps65910-regulator.c
|
||||||
|
F: drivers/regulator/twl-regulator.c
|
||||||
F: include/linux/i2c-omap.h
|
F: include/linux/i2c-omap.h
|
||||||
|
|
||||||
OMAP DEVICE TREE SUPPORT
|
OMAP DEVICE TREE SUPPORT
|
||||||
@ -6623,6 +6655,9 @@ L: devicetree@vger.kernel.org
|
|||||||
S: Maintained
|
S: Maintained
|
||||||
F: arch/arm/boot/dts/*omap*
|
F: arch/arm/boot/dts/*omap*
|
||||||
F: arch/arm/boot/dts/*am3*
|
F: arch/arm/boot/dts/*am3*
|
||||||
|
F: arch/arm/boot/dts/*am4*
|
||||||
|
F: arch/arm/boot/dts/*am5*
|
||||||
|
F: arch/arm/boot/dts/*dra7*
|
||||||
|
|
||||||
OMAP CLOCK FRAMEWORK SUPPORT
|
OMAP CLOCK FRAMEWORK SUPPORT
|
||||||
M: Paul Walmsley <paul@pwsan.com>
|
M: Paul Walmsley <paul@pwsan.com>
|
||||||
@ -6870,11 +6905,12 @@ F: drivers/scsi/osd/
|
|||||||
F: include/scsi/osd_*
|
F: include/scsi/osd_*
|
||||||
F: fs/exofs/
|
F: fs/exofs/
|
||||||
|
|
||||||
OVERLAYFS FILESYSTEM
|
OVERLAY FILESYSTEM
|
||||||
M: Miklos Szeredi <miklos@szeredi.hu>
|
M: Miklos Szeredi <miklos@szeredi.hu>
|
||||||
L: linux-fsdevel@vger.kernel.org
|
L: linux-unionfs@vger.kernel.org
|
||||||
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/vfs.git
|
||||||
S: Supported
|
S: Supported
|
||||||
F: fs/overlayfs/*
|
F: fs/overlayfs/
|
||||||
F: Documentation/filesystems/overlayfs.txt
|
F: Documentation/filesystems/overlayfs.txt
|
||||||
|
|
||||||
P54 WIRELESS DRIVER
|
P54 WIRELESS DRIVER
|
||||||
|
7
Makefile
7
Makefile
@ -1,7 +1,7 @@
|
|||||||
VERSION = 3
|
VERSION = 3
|
||||||
PATCHLEVEL = 18
|
PATCHLEVEL = 18
|
||||||
SUBLEVEL = 0
|
SUBLEVEL = 0
|
||||||
EXTRAVERSION = -rc4
|
EXTRAVERSION = -rc7
|
||||||
NAME = Diseased Newt
|
NAME = Diseased Newt
|
||||||
|
|
||||||
# *DOCUMENTATION*
|
# *DOCUMENTATION*
|
||||||
@ -297,7 +297,7 @@ CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
|
|||||||
|
|
||||||
HOSTCC = gcc
|
HOSTCC = gcc
|
||||||
HOSTCXX = g++
|
HOSTCXX = g++
|
||||||
HOSTCFLAGS = -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer
|
HOSTCFLAGS = -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer -std=gnu89
|
||||||
HOSTCXXFLAGS = -O2
|
HOSTCXXFLAGS = -O2
|
||||||
|
|
||||||
ifeq ($(shell $(HOSTCC) -v 2>&1 | grep -c "clang version"), 1)
|
ifeq ($(shell $(HOSTCC) -v 2>&1 | grep -c "clang version"), 1)
|
||||||
@ -401,7 +401,8 @@ KBUILD_CPPFLAGS := -D__KERNEL__
|
|||||||
KBUILD_CFLAGS := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \
|
KBUILD_CFLAGS := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \
|
||||||
-fno-strict-aliasing -fno-common \
|
-fno-strict-aliasing -fno-common \
|
||||||
-Werror-implicit-function-declaration \
|
-Werror-implicit-function-declaration \
|
||||||
-Wno-format-security
|
-Wno-format-security \
|
||||||
|
-std=gnu89
|
||||||
|
|
||||||
KBUILD_AFLAGS_KERNEL :=
|
KBUILD_AFLAGS_KERNEL :=
|
||||||
KBUILD_CFLAGS_KERNEL :=
|
KBUILD_CFLAGS_KERNEL :=
|
||||||
|
@ -397,8 +397,7 @@ dtb_check_done:
|
|||||||
add sp, sp, r6
|
add sp, sp, r6
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
tst r4, #1
|
bl cache_clean_flush
|
||||||
bleq cache_clean_flush
|
|
||||||
|
|
||||||
adr r0, BSYM(restart)
|
adr r0, BSYM(restart)
|
||||||
add r0, r0, r6
|
add r0, r0, r6
|
||||||
@ -1047,6 +1046,8 @@ cache_clean_flush:
|
|||||||
b call_cache_fn
|
b call_cache_fn
|
||||||
|
|
||||||
__armv4_mpu_cache_flush:
|
__armv4_mpu_cache_flush:
|
||||||
|
tst r4, #1
|
||||||
|
movne pc, lr
|
||||||
mov r2, #1
|
mov r2, #1
|
||||||
mov r3, #0
|
mov r3, #0
|
||||||
mcr p15, 0, ip, c7, c6, 0 @ invalidate D cache
|
mcr p15, 0, ip, c7, c6, 0 @ invalidate D cache
|
||||||
@ -1064,6 +1065,8 @@ __armv4_mpu_cache_flush:
|
|||||||
mov pc, lr
|
mov pc, lr
|
||||||
|
|
||||||
__fa526_cache_flush:
|
__fa526_cache_flush:
|
||||||
|
tst r4, #1
|
||||||
|
movne pc, lr
|
||||||
mov r1, #0
|
mov r1, #0
|
||||||
mcr p15, 0, r1, c7, c14, 0 @ clean and invalidate D cache
|
mcr p15, 0, r1, c7, c14, 0 @ clean and invalidate D cache
|
||||||
mcr p15, 0, r1, c7, c5, 0 @ flush I cache
|
mcr p15, 0, r1, c7, c5, 0 @ flush I cache
|
||||||
@ -1072,13 +1075,16 @@ __fa526_cache_flush:
|
|||||||
|
|
||||||
__armv6_mmu_cache_flush:
|
__armv6_mmu_cache_flush:
|
||||||
mov r1, #0
|
mov r1, #0
|
||||||
mcr p15, 0, r1, c7, c14, 0 @ clean+invalidate D
|
tst r4, #1
|
||||||
|
mcreq p15, 0, r1, c7, c14, 0 @ clean+invalidate D
|
||||||
mcr p15, 0, r1, c7, c5, 0 @ invalidate I+BTB
|
mcr p15, 0, r1, c7, c5, 0 @ invalidate I+BTB
|
||||||
mcr p15, 0, r1, c7, c15, 0 @ clean+invalidate unified
|
mcreq p15, 0, r1, c7, c15, 0 @ clean+invalidate unified
|
||||||
mcr p15, 0, r1, c7, c10, 4 @ drain WB
|
mcr p15, 0, r1, c7, c10, 4 @ drain WB
|
||||||
mov pc, lr
|
mov pc, lr
|
||||||
|
|
||||||
__armv7_mmu_cache_flush:
|
__armv7_mmu_cache_flush:
|
||||||
|
tst r4, #1
|
||||||
|
bne iflush
|
||||||
mrc p15, 0, r10, c0, c1, 5 @ read ID_MMFR1
|
mrc p15, 0, r10, c0, c1, 5 @ read ID_MMFR1
|
||||||
tst r10, #0xf << 16 @ hierarchical cache (ARMv7)
|
tst r10, #0xf << 16 @ hierarchical cache (ARMv7)
|
||||||
mov r10, #0
|
mov r10, #0
|
||||||
@ -1139,6 +1145,8 @@ iflush:
|
|||||||
mov pc, lr
|
mov pc, lr
|
||||||
|
|
||||||
__armv5tej_mmu_cache_flush:
|
__armv5tej_mmu_cache_flush:
|
||||||
|
tst r4, #1
|
||||||
|
movne pc, lr
|
||||||
1: mrc p15, 0, r15, c7, c14, 3 @ test,clean,invalidate D cache
|
1: mrc p15, 0, r15, c7, c14, 3 @ test,clean,invalidate D cache
|
||||||
bne 1b
|
bne 1b
|
||||||
mcr p15, 0, r0, c7, c5, 0 @ flush I cache
|
mcr p15, 0, r0, c7, c5, 0 @ flush I cache
|
||||||
@ -1146,6 +1154,8 @@ __armv5tej_mmu_cache_flush:
|
|||||||
mov pc, lr
|
mov pc, lr
|
||||||
|
|
||||||
__armv4_mmu_cache_flush:
|
__armv4_mmu_cache_flush:
|
||||||
|
tst r4, #1
|
||||||
|
movne pc, lr
|
||||||
mov r2, #64*1024 @ default: 32K dcache size (*2)
|
mov r2, #64*1024 @ default: 32K dcache size (*2)
|
||||||
mov r11, #32 @ default: 32 byte line size
|
mov r11, #32 @ default: 32 byte line size
|
||||||
mrc p15, 0, r3, c0, c0, 1 @ read cache type
|
mrc p15, 0, r3, c0, c0, 1 @ read cache type
|
||||||
@ -1179,6 +1189,8 @@ no_cache_id:
|
|||||||
|
|
||||||
__armv3_mmu_cache_flush:
|
__armv3_mmu_cache_flush:
|
||||||
__armv3_mpu_cache_flush:
|
__armv3_mpu_cache_flush:
|
||||||
|
tst r4, #1
|
||||||
|
movne pc, lr
|
||||||
mov r1, #0
|
mov r1, #0
|
||||||
mcr p15, 0, r1, c7, c0, 0 @ invalidate whole cache v3
|
mcr p15, 0, r1, c7, c0, 0 @ invalidate whole cache v3
|
||||||
mov pc, lr
|
mov pc, lr
|
||||||
|
@ -489,7 +489,7 @@
|
|||||||
reg = <0x00060000 0x00020000>;
|
reg = <0x00060000 0x00020000>;
|
||||||
};
|
};
|
||||||
partition@4 {
|
partition@4 {
|
||||||
label = "NAND.u-boot-spl";
|
label = "NAND.u-boot-spl-os";
|
||||||
reg = <0x00080000 0x00040000>;
|
reg = <0x00080000 0x00040000>;
|
||||||
};
|
};
|
||||||
partition@5 {
|
partition@5 {
|
||||||
|
@ -291,8 +291,8 @@
|
|||||||
dcdc3: regulator-dcdc3 {
|
dcdc3: regulator-dcdc3 {
|
||||||
compatible = "ti,tps65218-dcdc3";
|
compatible = "ti,tps65218-dcdc3";
|
||||||
regulator-name = "vdcdc3";
|
regulator-name = "vdcdc3";
|
||||||
regulator-min-microvolt = <1350000>;
|
regulator-min-microvolt = <1500000>;
|
||||||
regulator-max-microvolt = <1350000>;
|
regulator-max-microvolt = <1500000>;
|
||||||
regulator-boot-on;
|
regulator-boot-on;
|
||||||
regulator-always-on;
|
regulator-always-on;
|
||||||
};
|
};
|
||||||
|
@ -363,8 +363,8 @@
|
|||||||
dcdc3: regulator-dcdc3 {
|
dcdc3: regulator-dcdc3 {
|
||||||
compatible = "ti,tps65218-dcdc3";
|
compatible = "ti,tps65218-dcdc3";
|
||||||
regulator-name = "vdds_ddr";
|
regulator-name = "vdds_ddr";
|
||||||
regulator-min-microvolt = <1350000>;
|
regulator-min-microvolt = <1500000>;
|
||||||
regulator-max-microvolt = <1350000>;
|
regulator-max-microvolt = <1500000>;
|
||||||
regulator-boot-on;
|
regulator-boot-on;
|
||||||
regulator-always-on;
|
regulator-always-on;
|
||||||
};
|
};
|
||||||
|
@ -358,8 +358,8 @@
|
|||||||
dcdc3: regulator-dcdc3 {
|
dcdc3: regulator-dcdc3 {
|
||||||
compatible = "ti,tps65218-dcdc3";
|
compatible = "ti,tps65218-dcdc3";
|
||||||
regulator-name = "vdcdc3";
|
regulator-name = "vdcdc3";
|
||||||
regulator-min-microvolt = <1350000>;
|
regulator-min-microvolt = <1500000>;
|
||||||
regulator-max-microvolt = <1350000>;
|
regulator-max-microvolt = <1500000>;
|
||||||
regulator-boot-on;
|
regulator-boot-on;
|
||||||
regulator-always-on;
|
regulator-always-on;
|
||||||
};
|
};
|
||||||
|
@ -624,4 +624,8 @@
|
|||||||
num-cs = <1>;
|
num-cs = <1>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
&usbdrd_dwc3 {
|
||||||
|
dr_mode = "host";
|
||||||
|
};
|
||||||
|
|
||||||
#include "cros-ec-keyboard.dtsi"
|
#include "cros-ec-keyboard.dtsi"
|
||||||
|
@ -555,7 +555,7 @@
|
|||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
ranges;
|
ranges;
|
||||||
|
|
||||||
dwc3 {
|
usbdrd_dwc3: dwc3 {
|
||||||
compatible = "synopsys,dwc3";
|
compatible = "synopsys,dwc3";
|
||||||
reg = <0x12000000 0x10000>;
|
reg = <0x12000000 0x10000>;
|
||||||
interrupts = <0 72 0>;
|
interrupts = <0 72 0>;
|
||||||
|
@ -433,7 +433,7 @@
|
|||||||
clocks = <&cpg_clocks R8A7740_CLK_S>,
|
clocks = <&cpg_clocks R8A7740_CLK_S>,
|
||||||
<&cpg_clocks R8A7740_CLK_S>, <&sub_clk>,
|
<&cpg_clocks R8A7740_CLK_S>, <&sub_clk>,
|
||||||
<&cpg_clocks R8A7740_CLK_B>,
|
<&cpg_clocks R8A7740_CLK_B>,
|
||||||
<&sub_clk>, <&sub_clk>,
|
<&cpg_clocks R8A7740_CLK_HPP>, <&sub_clk>,
|
||||||
<&cpg_clocks R8A7740_CLK_B>;
|
<&cpg_clocks R8A7740_CLK_B>;
|
||||||
#clock-cells = <1>;
|
#clock-cells = <1>;
|
||||||
renesas,clock-indices = <
|
renesas,clock-indices = <
|
||||||
|
@ -756,9 +756,9 @@
|
|||||||
#clock-cells = <0>;
|
#clock-cells = <0>;
|
||||||
clock-output-names = "sd2";
|
clock-output-names = "sd2";
|
||||||
};
|
};
|
||||||
sd3_clk: sd3_clk@e615007c {
|
sd3_clk: sd3_clk@e615026c {
|
||||||
compatible = "renesas,r8a7790-div6-clock", "renesas,cpg-div6-clock";
|
compatible = "renesas,r8a7790-div6-clock", "renesas,cpg-div6-clock";
|
||||||
reg = <0 0xe615007c 0 4>;
|
reg = <0 0xe615026c 0 4>;
|
||||||
clocks = <&pll1_div2_clk>;
|
clocks = <&pll1_div2_clk>;
|
||||||
#clock-cells = <0>;
|
#clock-cells = <0>;
|
||||||
clock-output-names = "sd3";
|
clock-output-names = "sd3";
|
||||||
|
@ -12,5 +12,5 @@
|
|||||||
#include "sama5d3_uart.dtsi"
|
#include "sama5d3_uart.dtsi"
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
compatible = "atmel,samad31", "atmel,sama5d3", "atmel,sama5";
|
compatible = "atmel,sama5d31", "atmel,sama5d3", "atmel,sama5";
|
||||||
};
|
};
|
||||||
|
@ -10,5 +10,5 @@
|
|||||||
#include "sama5d3_gmac.dtsi"
|
#include "sama5d3_gmac.dtsi"
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
compatible = "atmel,samad33", "atmel,sama5d3", "atmel,sama5";
|
compatible = "atmel,sama5d33", "atmel,sama5d3", "atmel,sama5";
|
||||||
};
|
};
|
||||||
|
@ -12,5 +12,5 @@
|
|||||||
#include "sama5d3_mci2.dtsi"
|
#include "sama5d3_mci2.dtsi"
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
compatible = "atmel,samad34", "atmel,sama5d3", "atmel,sama5";
|
compatible = "atmel,sama5d34", "atmel,sama5d3", "atmel,sama5";
|
||||||
};
|
};
|
||||||
|
@ -14,5 +14,5 @@
|
|||||||
#include "sama5d3_tcb1.dtsi"
|
#include "sama5d3_tcb1.dtsi"
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
compatible = "atmel,samad35", "atmel,sama5d3", "atmel,sama5";
|
compatible = "atmel,sama5d35", "atmel,sama5d3", "atmel,sama5";
|
||||||
};
|
};
|
||||||
|
@ -16,5 +16,5 @@
|
|||||||
#include "sama5d3_uart.dtsi"
|
#include "sama5d3_uart.dtsi"
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
compatible = "atmel,samad36", "atmel,sama5d3", "atmel,sama5";
|
compatible = "atmel,sama5d36", "atmel,sama5d3", "atmel,sama5";
|
||||||
};
|
};
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
compatible = "atmel,samad3xcm", "atmel,sama5d3", "atmel,sama5";
|
compatible = "atmel,sama5d3xcm", "atmel,sama5d3", "atmel,sama5";
|
||||||
|
|
||||||
chosen {
|
chosen {
|
||||||
bootargs = "console=ttyS0,115200 rootfstype=ubifs ubi.mtd=5 root=ubi0:rootfs";
|
bootargs = "console=ttyS0,115200 rootfstype=ubifs ubi.mtd=5 root=ubi0:rootfs";
|
||||||
|
@ -361,6 +361,10 @@
|
|||||||
clocks = <&ahb1_gates 6>;
|
clocks = <&ahb1_gates 6>;
|
||||||
resets = <&ahb1_rst 6>;
|
resets = <&ahb1_rst 6>;
|
||||||
#dma-cells = <1>;
|
#dma-cells = <1>;
|
||||||
|
|
||||||
|
/* DMA controller requires AHB1 clocked from PLL6 */
|
||||||
|
assigned-clocks = <&ahb1_mux>;
|
||||||
|
assigned-clock-parents = <&pll6>;
|
||||||
};
|
};
|
||||||
|
|
||||||
mmc0: mmc@01c0f000 {
|
mmc0: mmc@01c0f000 {
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
aliases {
|
aliases {
|
||||||
rtc0 = "/i2c@7000d000/tps65913@58";
|
rtc0 = "/i2c@7000d000/tps65913@58";
|
||||||
rtc1 = "/rtc@7000e000";
|
rtc1 = "/rtc@7000e000";
|
||||||
|
serial0 = &uartd;
|
||||||
};
|
};
|
||||||
|
|
||||||
memory {
|
memory {
|
||||||
|
@ -15,6 +15,10 @@
|
|||||||
linux,initrd-end = <0x82800000>;
|
linux,initrd-end = <0x82800000>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
aliases {
|
||||||
|
serial0 = &uartd;
|
||||||
|
};
|
||||||
|
|
||||||
firmware {
|
firmware {
|
||||||
trusted-foundations {
|
trusted-foundations {
|
||||||
compatible = "tlm,trusted-foundations";
|
compatible = "tlm,trusted-foundations";
|
||||||
@ -916,8 +920,6 @@
|
|||||||
regulator-name = "vddio-sdmmc3";
|
regulator-name = "vddio-sdmmc3";
|
||||||
regulator-min-microvolt = <1800000>;
|
regulator-min-microvolt = <1800000>;
|
||||||
regulator-max-microvolt = <3300000>;
|
regulator-max-microvolt = <3300000>;
|
||||||
regulator-always-on;
|
|
||||||
regulator-boot-on;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
ldousb {
|
ldousb {
|
||||||
@ -962,7 +964,7 @@
|
|||||||
sdhci@78000400 {
|
sdhci@78000400 {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
bus-width = <4>;
|
bus-width = <4>;
|
||||||
vmmc-supply = <&vddio_sdmmc3>;
|
vqmmc-supply = <&vddio_sdmmc3>;
|
||||||
cd-gpios = <&gpio TEGRA_GPIO(V, 2) GPIO_ACTIVE_LOW>;
|
cd-gpios = <&gpio TEGRA_GPIO(V, 2) GPIO_ACTIVE_LOW>;
|
||||||
power-gpios = <&gpio TEGRA_GPIO(H, 0) GPIO_ACTIVE_HIGH>;
|
power-gpios = <&gpio TEGRA_GPIO(H, 0) GPIO_ACTIVE_HIGH>;
|
||||||
};
|
};
|
||||||
@ -971,7 +973,6 @@
|
|||||||
sdhci@78000600 {
|
sdhci@78000600 {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
bus-width = <8>;
|
bus-width = <8>;
|
||||||
vmmc-supply = <&vdd_1v8>;
|
|
||||||
non-removable;
|
non-removable;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -15,6 +15,10 @@
|
|||||||
linux,initrd-end = <0x82800000>;
|
linux,initrd-end = <0x82800000>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
aliases {
|
||||||
|
serial0 = &uartd;
|
||||||
|
};
|
||||||
|
|
||||||
firmware {
|
firmware {
|
||||||
trusted-foundations {
|
trusted-foundations {
|
||||||
compatible = "tlm,trusted-foundations";
|
compatible = "tlm,trusted-foundations";
|
||||||
@ -240,7 +244,6 @@
|
|||||||
sdhci@78000600 {
|
sdhci@78000600 {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
bus-width = <8>;
|
bus-width = <8>;
|
||||||
vmmc-supply = <&vdd_1v8>;
|
|
||||||
non-removable;
|
non-removable;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -9,13 +9,6 @@
|
|||||||
compatible = "nvidia,tegra114";
|
compatible = "nvidia,tegra114";
|
||||||
interrupt-parent = <&gic>;
|
interrupt-parent = <&gic>;
|
||||||
|
|
||||||
aliases {
|
|
||||||
serial0 = &uarta;
|
|
||||||
serial1 = &uartb;
|
|
||||||
serial2 = &uartc;
|
|
||||||
serial3 = &uartd;
|
|
||||||
};
|
|
||||||
|
|
||||||
host1x@50000000 {
|
host1x@50000000 {
|
||||||
compatible = "nvidia,tegra114-host1x", "simple-bus";
|
compatible = "nvidia,tegra114-host1x", "simple-bus";
|
||||||
reg = <0x50000000 0x00028000>;
|
reg = <0x50000000 0x00028000>;
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
aliases {
|
aliases {
|
||||||
rtc0 = "/i2c@0,7000d000/pmic@40";
|
rtc0 = "/i2c@0,7000d000/pmic@40";
|
||||||
rtc1 = "/rtc@0,7000e000";
|
rtc1 = "/rtc@0,7000e000";
|
||||||
|
serial0 = &uartd;
|
||||||
};
|
};
|
||||||
|
|
||||||
memory {
|
memory {
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
aliases {
|
aliases {
|
||||||
rtc0 = "/i2c@0,7000d000/pmic@40";
|
rtc0 = "/i2c@0,7000d000/pmic@40";
|
||||||
rtc1 = "/rtc@0,7000e000";
|
rtc1 = "/rtc@0,7000e000";
|
||||||
|
serial0 = &uarta;
|
||||||
};
|
};
|
||||||
|
|
||||||
memory {
|
memory {
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
aliases {
|
aliases {
|
||||||
rtc0 = "/i2c@0,7000d000/pmic@40";
|
rtc0 = "/i2c@0,7000d000/pmic@40";
|
||||||
rtc1 = "/rtc@0,7000e000";
|
rtc1 = "/rtc@0,7000e000";
|
||||||
|
serial0 = &uarta;
|
||||||
};
|
};
|
||||||
|
|
||||||
memory {
|
memory {
|
||||||
|
@ -286,7 +286,7 @@
|
|||||||
* the APB DMA based serial driver, the comptible is
|
* the APB DMA based serial driver, the comptible is
|
||||||
* "nvidia,tegra124-hsuart", "nvidia,tegra30-hsuart".
|
* "nvidia,tegra124-hsuart", "nvidia,tegra30-hsuart".
|
||||||
*/
|
*/
|
||||||
serial@0,70006000 {
|
uarta: serial@0,70006000 {
|
||||||
compatible = "nvidia,tegra124-uart", "nvidia,tegra20-uart";
|
compatible = "nvidia,tegra124-uart", "nvidia,tegra20-uart";
|
||||||
reg = <0x0 0x70006000 0x0 0x40>;
|
reg = <0x0 0x70006000 0x0 0x40>;
|
||||||
reg-shift = <2>;
|
reg-shift = <2>;
|
||||||
@ -299,7 +299,7 @@
|
|||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
serial@0,70006040 {
|
uartb: serial@0,70006040 {
|
||||||
compatible = "nvidia,tegra124-uart", "nvidia,tegra20-uart";
|
compatible = "nvidia,tegra124-uart", "nvidia,tegra20-uart";
|
||||||
reg = <0x0 0x70006040 0x0 0x40>;
|
reg = <0x0 0x70006040 0x0 0x40>;
|
||||||
reg-shift = <2>;
|
reg-shift = <2>;
|
||||||
@ -312,7 +312,7 @@
|
|||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
serial@0,70006200 {
|
uartc: serial@0,70006200 {
|
||||||
compatible = "nvidia,tegra124-uart", "nvidia,tegra20-uart";
|
compatible = "nvidia,tegra124-uart", "nvidia,tegra20-uart";
|
||||||
reg = <0x0 0x70006200 0x0 0x40>;
|
reg = <0x0 0x70006200 0x0 0x40>;
|
||||||
reg-shift = <2>;
|
reg-shift = <2>;
|
||||||
@ -325,7 +325,7 @@
|
|||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
serial@0,70006300 {
|
uartd: serial@0,70006300 {
|
||||||
compatible = "nvidia,tegra124-uart", "nvidia,tegra20-uart";
|
compatible = "nvidia,tegra124-uart", "nvidia,tegra20-uart";
|
||||||
reg = <0x0 0x70006300 0x0 0x40>;
|
reg = <0x0 0x70006300 0x0 0x40>;
|
||||||
reg-shift = <2>;
|
reg-shift = <2>;
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
aliases {
|
aliases {
|
||||||
rtc0 = "/i2c@7000d000/tps6586x@34";
|
rtc0 = "/i2c@7000d000/tps6586x@34";
|
||||||
rtc1 = "/rtc@7000e000";
|
rtc1 = "/rtc@7000e000";
|
||||||
|
serial0 = &uartd;
|
||||||
};
|
};
|
||||||
|
|
||||||
memory {
|
memory {
|
||||||
|
@ -6,6 +6,11 @@
|
|||||||
model = "Toradex Colibri T20 512MB on Iris";
|
model = "Toradex Colibri T20 512MB on Iris";
|
||||||
compatible = "toradex,iris", "toradex,colibri_t20-512", "nvidia,tegra20";
|
compatible = "toradex,iris", "toradex,colibri_t20-512", "nvidia,tegra20";
|
||||||
|
|
||||||
|
aliases {
|
||||||
|
serial0 = &uarta;
|
||||||
|
serial1 = &uartd;
|
||||||
|
};
|
||||||
|
|
||||||
host1x@50000000 {
|
host1x@50000000 {
|
||||||
hdmi@54280000 {
|
hdmi@54280000 {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
|
@ -6,6 +6,10 @@
|
|||||||
model = "Avionic Design Medcom-Wide board";
|
model = "Avionic Design Medcom-Wide board";
|
||||||
compatible = "ad,medcom-wide", "ad,tamonten", "nvidia,tegra20";
|
compatible = "ad,medcom-wide", "ad,tamonten", "nvidia,tegra20";
|
||||||
|
|
||||||
|
aliases {
|
||||||
|
serial0 = &uartd;
|
||||||
|
};
|
||||||
|
|
||||||
pwm@7000a000 {
|
pwm@7000a000 {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
@ -10,6 +10,8 @@
|
|||||||
aliases {
|
aliases {
|
||||||
rtc0 = "/i2c@7000d000/tps6586x@34";
|
rtc0 = "/i2c@7000d000/tps6586x@34";
|
||||||
rtc1 = "/rtc@7000e000";
|
rtc1 = "/rtc@7000e000";
|
||||||
|
serial0 = &uarta;
|
||||||
|
serial1 = &uartc;
|
||||||
};
|
};
|
||||||
|
|
||||||
memory {
|
memory {
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
aliases {
|
aliases {
|
||||||
rtc0 = "/i2c@7000d000/tps6586x@34";
|
rtc0 = "/i2c@7000d000/tps6586x@34";
|
||||||
rtc1 = "/rtc@7000e000";
|
rtc1 = "/rtc@7000e000";
|
||||||
|
serial0 = &uartd;
|
||||||
};
|
};
|
||||||
|
|
||||||
memory {
|
memory {
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
aliases {
|
aliases {
|
||||||
rtc0 = "/i2c@7000d000/tps6586x@34";
|
rtc0 = "/i2c@7000d000/tps6586x@34";
|
||||||
rtc1 = "/rtc@7000e000";
|
rtc1 = "/rtc@7000e000";
|
||||||
|
serial0 = &uartd;
|
||||||
};
|
};
|
||||||
|
|
||||||
memory {
|
memory {
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
aliases {
|
aliases {
|
||||||
rtc0 = "/i2c@7000c500/rtc@56";
|
rtc0 = "/i2c@7000c500/rtc@56";
|
||||||
rtc1 = "/rtc@7000e000";
|
rtc1 = "/rtc@7000e000";
|
||||||
|
serial0 = &uarta;
|
||||||
};
|
};
|
||||||
|
|
||||||
memory {
|
memory {
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
aliases {
|
aliases {
|
||||||
rtc0 = "/i2c@7000d000/tps6586x@34";
|
rtc0 = "/i2c@7000d000/tps6586x@34";
|
||||||
rtc1 = "/rtc@7000e000";
|
rtc1 = "/rtc@7000e000";
|
||||||
|
serial0 = &uartd;
|
||||||
};
|
};
|
||||||
|
|
||||||
memory {
|
memory {
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
aliases {
|
aliases {
|
||||||
rtc0 = "/i2c@7000d000/max8907@3c";
|
rtc0 = "/i2c@7000d000/max8907@3c";
|
||||||
rtc1 = "/rtc@7000e000";
|
rtc1 = "/rtc@7000e000";
|
||||||
|
serial0 = &uarta;
|
||||||
};
|
};
|
||||||
|
|
||||||
memory {
|
memory {
|
||||||
|
@ -9,14 +9,6 @@
|
|||||||
compatible = "nvidia,tegra20";
|
compatible = "nvidia,tegra20";
|
||||||
interrupt-parent = <&intc>;
|
interrupt-parent = <&intc>;
|
||||||
|
|
||||||
aliases {
|
|
||||||
serial0 = &uarta;
|
|
||||||
serial1 = &uartb;
|
|
||||||
serial2 = &uartc;
|
|
||||||
serial3 = &uartd;
|
|
||||||
serial4 = &uarte;
|
|
||||||
};
|
|
||||||
|
|
||||||
host1x@50000000 {
|
host1x@50000000 {
|
||||||
compatible = "nvidia,tegra20-host1x", "simple-bus";
|
compatible = "nvidia,tegra20-host1x", "simple-bus";
|
||||||
reg = <0x50000000 0x00024000>;
|
reg = <0x50000000 0x00024000>;
|
||||||
|
@ -11,6 +11,10 @@
|
|||||||
rtc0 = "/i2c@7000c000/rtc@68";
|
rtc0 = "/i2c@7000c000/rtc@68";
|
||||||
rtc1 = "/i2c@7000d000/tps65911@2d";
|
rtc1 = "/i2c@7000d000/tps65911@2d";
|
||||||
rtc2 = "/rtc@7000e000";
|
rtc2 = "/rtc@7000e000";
|
||||||
|
serial0 = &uarta;
|
||||||
|
serial1 = &uartb;
|
||||||
|
serial2 = &uartc;
|
||||||
|
serial3 = &uartd;
|
||||||
};
|
};
|
||||||
|
|
||||||
pcie-controller@00003000 {
|
pcie-controller@00003000 {
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
aliases {
|
aliases {
|
||||||
rtc0 = "/i2c@7000d000/tps65911@2d";
|
rtc0 = "/i2c@7000d000/tps65911@2d";
|
||||||
rtc1 = "/rtc@7000e000";
|
rtc1 = "/rtc@7000e000";
|
||||||
|
serial0 = &uarta;
|
||||||
};
|
};
|
||||||
|
|
||||||
memory {
|
memory {
|
||||||
|
@ -30,6 +30,8 @@
|
|||||||
aliases {
|
aliases {
|
||||||
rtc0 = "/i2c@7000d000/tps65911@2d";
|
rtc0 = "/i2c@7000d000/tps65911@2d";
|
||||||
rtc1 = "/rtc@7000e000";
|
rtc1 = "/rtc@7000e000";
|
||||||
|
serial0 = &uarta;
|
||||||
|
serial1 = &uartc;
|
||||||
};
|
};
|
||||||
|
|
||||||
memory {
|
memory {
|
||||||
|
@ -10,6 +10,9 @@
|
|||||||
rtc0 = "/i2c@7000c000/rtc@68";
|
rtc0 = "/i2c@7000c000/rtc@68";
|
||||||
rtc1 = "/i2c@7000d000/tps65911@2d";
|
rtc1 = "/i2c@7000d000/tps65911@2d";
|
||||||
rtc2 = "/rtc@7000e000";
|
rtc2 = "/rtc@7000e000";
|
||||||
|
serial0 = &uarta;
|
||||||
|
serial1 = &uartb;
|
||||||
|
serial2 = &uartd;
|
||||||
};
|
};
|
||||||
|
|
||||||
host1x@50000000 {
|
host1x@50000000 {
|
||||||
|
@ -9,14 +9,6 @@
|
|||||||
compatible = "nvidia,tegra30";
|
compatible = "nvidia,tegra30";
|
||||||
interrupt-parent = <&intc>;
|
interrupt-parent = <&intc>;
|
||||||
|
|
||||||
aliases {
|
|
||||||
serial0 = &uarta;
|
|
||||||
serial1 = &uartb;
|
|
||||||
serial2 = &uartc;
|
|
||||||
serial3 = &uartd;
|
|
||||||
serial4 = &uarte;
|
|
||||||
};
|
|
||||||
|
|
||||||
pcie-controller@00003000 {
|
pcie-controller@00003000 {
|
||||||
compatible = "nvidia,tegra30-pcie";
|
compatible = "nvidia,tegra30-pcie";
|
||||||
device_type = "pci";
|
device_type = "pci";
|
||||||
|
@ -142,11 +142,13 @@ CONFIG_MMC_DW_IDMAC=y
|
|||||||
CONFIG_MMC_DW_EXYNOS=y
|
CONFIG_MMC_DW_EXYNOS=y
|
||||||
CONFIG_RTC_CLASS=y
|
CONFIG_RTC_CLASS=y
|
||||||
CONFIG_RTC_DRV_MAX77686=y
|
CONFIG_RTC_DRV_MAX77686=y
|
||||||
|
CONFIG_RTC_DRV_MAX77802=y
|
||||||
CONFIG_RTC_DRV_S5M=y
|
CONFIG_RTC_DRV_S5M=y
|
||||||
CONFIG_RTC_DRV_S3C=y
|
CONFIG_RTC_DRV_S3C=y
|
||||||
CONFIG_DMADEVICES=y
|
CONFIG_DMADEVICES=y
|
||||||
CONFIG_PL330_DMA=y
|
CONFIG_PL330_DMA=y
|
||||||
CONFIG_COMMON_CLK_MAX77686=y
|
CONFIG_COMMON_CLK_MAX77686=y
|
||||||
|
CONFIG_COMMON_CLK_MAX77802=y
|
||||||
CONFIG_COMMON_CLK_S2MPS11=y
|
CONFIG_COMMON_CLK_S2MPS11=y
|
||||||
CONFIG_EXYNOS_IOMMU=y
|
CONFIG_EXYNOS_IOMMU=y
|
||||||
CONFIG_IIO=y
|
CONFIG_IIO=y
|
||||||
|
@ -217,6 +217,7 @@ CONFIG_I2C_CADENCE=y
|
|||||||
CONFIG_I2C_DESIGNWARE_PLATFORM=y
|
CONFIG_I2C_DESIGNWARE_PLATFORM=y
|
||||||
CONFIG_I2C_EXYNOS5=y
|
CONFIG_I2C_EXYNOS5=y
|
||||||
CONFIG_I2C_MV64XXX=y
|
CONFIG_I2C_MV64XXX=y
|
||||||
|
CONFIG_I2C_S3C2410=y
|
||||||
CONFIG_I2C_SIRF=y
|
CONFIG_I2C_SIRF=y
|
||||||
CONFIG_I2C_TEGRA=y
|
CONFIG_I2C_TEGRA=y
|
||||||
CONFIG_I2C_ST=y
|
CONFIG_I2C_ST=y
|
||||||
|
@ -44,16 +44,6 @@ struct cpu_context_save {
|
|||||||
__u32 extra[2]; /* Xscale 'acc' register, etc */
|
__u32 extra[2]; /* Xscale 'acc' register, etc */
|
||||||
};
|
};
|
||||||
|
|
||||||
struct arm_restart_block {
|
|
||||||
union {
|
|
||||||
/* For user cache flushing */
|
|
||||||
struct {
|
|
||||||
unsigned long start;
|
|
||||||
unsigned long end;
|
|
||||||
} cache;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* low level task data that entry.S needs immediate access to.
|
* low level task data that entry.S needs immediate access to.
|
||||||
* __switch_to() assumes cpu_context follows immediately after cpu_domain.
|
* __switch_to() assumes cpu_context follows immediately after cpu_domain.
|
||||||
@ -79,7 +69,6 @@ struct thread_info {
|
|||||||
unsigned long thumbee_state; /* ThumbEE Handler Base register */
|
unsigned long thumbee_state; /* ThumbEE Handler Base register */
|
||||||
#endif
|
#endif
|
||||||
struct restart_block restart_block;
|
struct restart_block restart_block;
|
||||||
struct arm_restart_block arm_restart_block;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#define INIT_THREAD_INFO(tsk) \
|
#define INIT_THREAD_INFO(tsk) \
|
||||||
|
@ -533,8 +533,6 @@ static int bad_syscall(int n, struct pt_regs *regs)
|
|||||||
return regs->ARM_r0;
|
return regs->ARM_r0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static long do_cache_op_restart(struct restart_block *);
|
|
||||||
|
|
||||||
static inline int
|
static inline int
|
||||||
__do_cache_op(unsigned long start, unsigned long end)
|
__do_cache_op(unsigned long start, unsigned long end)
|
||||||
{
|
{
|
||||||
@ -543,24 +541,8 @@ __do_cache_op(unsigned long start, unsigned long end)
|
|||||||
do {
|
do {
|
||||||
unsigned long chunk = min(PAGE_SIZE, end - start);
|
unsigned long chunk = min(PAGE_SIZE, end - start);
|
||||||
|
|
||||||
if (signal_pending(current)) {
|
if (fatal_signal_pending(current))
|
||||||
struct thread_info *ti = current_thread_info();
|
return 0;
|
||||||
|
|
||||||
ti->restart_block = (struct restart_block) {
|
|
||||||
.fn = do_cache_op_restart,
|
|
||||||
};
|
|
||||||
|
|
||||||
ti->arm_restart_block = (struct arm_restart_block) {
|
|
||||||
{
|
|
||||||
.cache = {
|
|
||||||
.start = start,
|
|
||||||
.end = end,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
return -ERESTART_RESTARTBLOCK;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = flush_cache_user_range(start, start + chunk);
|
ret = flush_cache_user_range(start, start + chunk);
|
||||||
if (ret)
|
if (ret)
|
||||||
@ -573,15 +555,6 @@ __do_cache_op(unsigned long start, unsigned long end)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static long do_cache_op_restart(struct restart_block *unused)
|
|
||||||
{
|
|
||||||
struct arm_restart_block *restart_block;
|
|
||||||
|
|
||||||
restart_block = ¤t_thread_info()->arm_restart_block;
|
|
||||||
return __do_cache_op(restart_block->cache.start,
|
|
||||||
restart_block->cache.end);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline int
|
static inline int
|
||||||
do_cache_op(unsigned long start, unsigned long end, int flags)
|
do_cache_op(unsigned long start, unsigned long end, int flags)
|
||||||
{
|
{
|
||||||
|
@ -197,7 +197,8 @@ static void unmap_range(struct kvm *kvm, pgd_t *pgdp,
|
|||||||
pgd = pgdp + pgd_index(addr);
|
pgd = pgdp + pgd_index(addr);
|
||||||
do {
|
do {
|
||||||
next = kvm_pgd_addr_end(addr, end);
|
next = kvm_pgd_addr_end(addr, end);
|
||||||
unmap_puds(kvm, pgd, addr, next);
|
if (!pgd_none(*pgd))
|
||||||
|
unmap_puds(kvm, pgd, addr, next);
|
||||||
} while (pgd++, addr = next, addr != end);
|
} while (pgd++, addr = next, addr != end);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -834,6 +835,11 @@ static bool kvm_is_write_fault(struct kvm_vcpu *vcpu)
|
|||||||
return kvm_vcpu_dabt_iswrite(vcpu);
|
return kvm_vcpu_dabt_iswrite(vcpu);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool kvm_is_device_pfn(unsigned long pfn)
|
||||||
|
{
|
||||||
|
return !pfn_valid(pfn);
|
||||||
|
}
|
||||||
|
|
||||||
static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa,
|
static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa,
|
||||||
struct kvm_memory_slot *memslot, unsigned long hva,
|
struct kvm_memory_slot *memslot, unsigned long hva,
|
||||||
unsigned long fault_status)
|
unsigned long fault_status)
|
||||||
@ -904,7 +910,7 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa,
|
|||||||
if (is_error_pfn(pfn))
|
if (is_error_pfn(pfn))
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
|
|
||||||
if (kvm_is_mmio_pfn(pfn))
|
if (kvm_is_device_pfn(pfn))
|
||||||
mem_type = PAGE_S2_DEVICE;
|
mem_type = PAGE_S2_DEVICE;
|
||||||
|
|
||||||
spin_lock(&kvm->mmu_lock);
|
spin_lock(&kvm->mmu_lock);
|
||||||
|
@ -188,7 +188,7 @@ static void __init thermal_quirk(void)
|
|||||||
|
|
||||||
static void __init mvebu_dt_init(void)
|
static void __init mvebu_dt_init(void)
|
||||||
{
|
{
|
||||||
if (of_machine_is_compatible("plathome,openblocks-ax3-4"))
|
if (of_machine_is_compatible("marvell,armadaxp"))
|
||||||
i2c_quirk();
|
i2c_quirk();
|
||||||
if (of_machine_is_compatible("marvell,a375-db")) {
|
if (of_machine_is_compatible("marvell,a375-db")) {
|
||||||
external_abort_quirk();
|
external_abort_quirk();
|
||||||
|
@ -400,6 +400,8 @@ int __init coherency_init(void)
|
|||||||
type == COHERENCY_FABRIC_TYPE_ARMADA_380)
|
type == COHERENCY_FABRIC_TYPE_ARMADA_380)
|
||||||
armada_375_380_coherency_init(np);
|
armada_375_380_coherency_init(np);
|
||||||
|
|
||||||
|
of_node_put(np);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -451,7 +451,7 @@ enum {
|
|||||||
MSTP128, MSTP127, MSTP125,
|
MSTP128, MSTP127, MSTP125,
|
||||||
MSTP116, MSTP111, MSTP100, MSTP117,
|
MSTP116, MSTP111, MSTP100, MSTP117,
|
||||||
|
|
||||||
MSTP230,
|
MSTP230, MSTP229,
|
||||||
MSTP222,
|
MSTP222,
|
||||||
MSTP218, MSTP217, MSTP216, MSTP214,
|
MSTP218, MSTP217, MSTP216, MSTP214,
|
||||||
MSTP207, MSTP206, MSTP204, MSTP203, MSTP202, MSTP201, MSTP200,
|
MSTP207, MSTP206, MSTP204, MSTP203, MSTP202, MSTP201, MSTP200,
|
||||||
@ -470,11 +470,12 @@ static struct clk mstp_clks[MSTP_NR] = {
|
|||||||
[MSTP127] = SH_CLK_MSTP32(&div4_clks[DIV4_S], SMSTPCR1, 27, 0), /* CEU20 */
|
[MSTP127] = SH_CLK_MSTP32(&div4_clks[DIV4_S], SMSTPCR1, 27, 0), /* CEU20 */
|
||||||
[MSTP125] = SH_CLK_MSTP32(&div6_clks[DIV6_SUB], SMSTPCR1, 25, 0), /* TMU0 */
|
[MSTP125] = SH_CLK_MSTP32(&div6_clks[DIV6_SUB], SMSTPCR1, 25, 0), /* TMU0 */
|
||||||
[MSTP117] = SH_CLK_MSTP32(&div4_clks[DIV4_B], SMSTPCR1, 17, 0), /* LCDC1 */
|
[MSTP117] = SH_CLK_MSTP32(&div4_clks[DIV4_B], SMSTPCR1, 17, 0), /* LCDC1 */
|
||||||
[MSTP116] = SH_CLK_MSTP32(&div6_clks[DIV6_SUB], SMSTPCR1, 16, 0), /* IIC0 */
|
[MSTP116] = SH_CLK_MSTP32(&div4_clks[DIV4_HPP], SMSTPCR1, 16, 0), /* IIC0 */
|
||||||
[MSTP111] = SH_CLK_MSTP32(&div6_clks[DIV6_SUB], SMSTPCR1, 11, 0), /* TMU1 */
|
[MSTP111] = SH_CLK_MSTP32(&div6_clks[DIV6_SUB], SMSTPCR1, 11, 0), /* TMU1 */
|
||||||
[MSTP100] = SH_CLK_MSTP32(&div4_clks[DIV4_B], SMSTPCR1, 0, 0), /* LCDC0 */
|
[MSTP100] = SH_CLK_MSTP32(&div4_clks[DIV4_B], SMSTPCR1, 0, 0), /* LCDC0 */
|
||||||
|
|
||||||
[MSTP230] = SH_CLK_MSTP32(&div6_clks[DIV6_SUB], SMSTPCR2, 30, 0), /* SCIFA6 */
|
[MSTP230] = SH_CLK_MSTP32(&div6_clks[DIV6_SUB], SMSTPCR2, 30, 0), /* SCIFA6 */
|
||||||
|
[MSTP229] = SH_CLK_MSTP32(&div4_clks[DIV4_HP], SMSTPCR2, 29, 0), /* INTCA */
|
||||||
[MSTP222] = SH_CLK_MSTP32(&div6_clks[DIV6_SUB], SMSTPCR2, 22, 0), /* SCIFA7 */
|
[MSTP222] = SH_CLK_MSTP32(&div6_clks[DIV6_SUB], SMSTPCR2, 22, 0), /* SCIFA7 */
|
||||||
[MSTP218] = SH_CLK_MSTP32(&div4_clks[DIV4_HP], SMSTPCR2, 18, 0), /* DMAC1 */
|
[MSTP218] = SH_CLK_MSTP32(&div4_clks[DIV4_HP], SMSTPCR2, 18, 0), /* DMAC1 */
|
||||||
[MSTP217] = SH_CLK_MSTP32(&div4_clks[DIV4_HP], SMSTPCR2, 17, 0), /* DMAC2 */
|
[MSTP217] = SH_CLK_MSTP32(&div4_clks[DIV4_HP], SMSTPCR2, 17, 0), /* DMAC2 */
|
||||||
@ -571,6 +572,10 @@ static struct clk_lookup lookups[] = {
|
|||||||
CLKDEV_DEV_ID("sh-dma-engine.0", &mstp_clks[MSTP218]),
|
CLKDEV_DEV_ID("sh-dma-engine.0", &mstp_clks[MSTP218]),
|
||||||
CLKDEV_DEV_ID("sh-sci.7", &mstp_clks[MSTP222]),
|
CLKDEV_DEV_ID("sh-sci.7", &mstp_clks[MSTP222]),
|
||||||
CLKDEV_DEV_ID("e6cd0000.serial", &mstp_clks[MSTP222]),
|
CLKDEV_DEV_ID("e6cd0000.serial", &mstp_clks[MSTP222]),
|
||||||
|
CLKDEV_DEV_ID("renesas_intc_irqpin.0", &mstp_clks[MSTP229]),
|
||||||
|
CLKDEV_DEV_ID("renesas_intc_irqpin.1", &mstp_clks[MSTP229]),
|
||||||
|
CLKDEV_DEV_ID("renesas_intc_irqpin.2", &mstp_clks[MSTP229]),
|
||||||
|
CLKDEV_DEV_ID("renesas_intc_irqpin.3", &mstp_clks[MSTP229]),
|
||||||
CLKDEV_DEV_ID("sh-sci.6", &mstp_clks[MSTP230]),
|
CLKDEV_DEV_ID("sh-sci.6", &mstp_clks[MSTP230]),
|
||||||
CLKDEV_DEV_ID("e6cc0000.serial", &mstp_clks[MSTP230]),
|
CLKDEV_DEV_ID("e6cc0000.serial", &mstp_clks[MSTP230]),
|
||||||
|
|
||||||
|
@ -64,7 +64,7 @@
|
|||||||
|
|
||||||
#define SDCKCR 0xE6150074
|
#define SDCKCR 0xE6150074
|
||||||
#define SD2CKCR 0xE6150078
|
#define SD2CKCR 0xE6150078
|
||||||
#define SD3CKCR 0xE615007C
|
#define SD3CKCR 0xE615026C
|
||||||
#define MMC0CKCR 0xE6150240
|
#define MMC0CKCR 0xE6150240
|
||||||
#define MMC1CKCR 0xE6150244
|
#define MMC1CKCR 0xE6150244
|
||||||
#define SSPCKCR 0xE6150248
|
#define SSPCKCR 0xE6150248
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
#include <linux/of_platform.h>
|
#include <linux/of_platform.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/input.h>
|
#include <linux/input.h>
|
||||||
|
#include <linux/i2c/i2c-sh_mobile.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/serial_sci.h>
|
#include <linux/serial_sci.h>
|
||||||
#include <linux/sh_dma.h>
|
#include <linux/sh_dma.h>
|
||||||
@ -188,11 +189,18 @@ static struct resource i2c4_resources[] = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static struct i2c_sh_mobile_platform_data i2c_platform_data = {
|
||||||
|
.clks_per_count = 2,
|
||||||
|
};
|
||||||
|
|
||||||
static struct platform_device i2c0_device = {
|
static struct platform_device i2c0_device = {
|
||||||
.name = "i2c-sh_mobile",
|
.name = "i2c-sh_mobile",
|
||||||
.id = 0,
|
.id = 0,
|
||||||
.resource = i2c0_resources,
|
.resource = i2c0_resources,
|
||||||
.num_resources = ARRAY_SIZE(i2c0_resources),
|
.num_resources = ARRAY_SIZE(i2c0_resources),
|
||||||
|
.dev = {
|
||||||
|
.platform_data = &i2c_platform_data,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct platform_device i2c1_device = {
|
static struct platform_device i2c1_device = {
|
||||||
@ -200,6 +208,9 @@ static struct platform_device i2c1_device = {
|
|||||||
.id = 1,
|
.id = 1,
|
||||||
.resource = i2c1_resources,
|
.resource = i2c1_resources,
|
||||||
.num_resources = ARRAY_SIZE(i2c1_resources),
|
.num_resources = ARRAY_SIZE(i2c1_resources),
|
||||||
|
.dev = {
|
||||||
|
.platform_data = &i2c_platform_data,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct platform_device i2c2_device = {
|
static struct platform_device i2c2_device = {
|
||||||
@ -207,6 +218,9 @@ static struct platform_device i2c2_device = {
|
|||||||
.id = 2,
|
.id = 2,
|
||||||
.resource = i2c2_resources,
|
.resource = i2c2_resources,
|
||||||
.num_resources = ARRAY_SIZE(i2c2_resources),
|
.num_resources = ARRAY_SIZE(i2c2_resources),
|
||||||
|
.dev = {
|
||||||
|
.platform_data = &i2c_platform_data,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct platform_device i2c3_device = {
|
static struct platform_device i2c3_device = {
|
||||||
@ -214,6 +228,9 @@ static struct platform_device i2c3_device = {
|
|||||||
.id = 3,
|
.id = 3,
|
||||||
.resource = i2c3_resources,
|
.resource = i2c3_resources,
|
||||||
.num_resources = ARRAY_SIZE(i2c3_resources),
|
.num_resources = ARRAY_SIZE(i2c3_resources),
|
||||||
|
.dev = {
|
||||||
|
.platform_data = &i2c_platform_data,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct platform_device i2c4_device = {
|
static struct platform_device i2c4_device = {
|
||||||
@ -221,6 +238,9 @@ static struct platform_device i2c4_device = {
|
|||||||
.id = 4,
|
.id = 4,
|
||||||
.resource = i2c4_resources,
|
.resource = i2c4_resources,
|
||||||
.num_resources = ARRAY_SIZE(i2c4_resources),
|
.num_resources = ARRAY_SIZE(i2c4_resources),
|
||||||
|
.dev = {
|
||||||
|
.platform_data = &i2c_platform_data,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct sh_dmae_slave_config sh73a0_dmae_slaves[] = {
|
static const struct sh_dmae_slave_config sh73a0_dmae_slaves[] = {
|
||||||
|
@ -99,42 +99,42 @@ static inline void tegra_irq_write_mask(unsigned int irq, unsigned long reg)
|
|||||||
|
|
||||||
static void tegra_mask(struct irq_data *d)
|
static void tegra_mask(struct irq_data *d)
|
||||||
{
|
{
|
||||||
if (d->irq < FIRST_LEGACY_IRQ)
|
if (d->hwirq < FIRST_LEGACY_IRQ)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
tegra_irq_write_mask(d->irq, ICTLR_CPU_IER_CLR);
|
tegra_irq_write_mask(d->hwirq, ICTLR_CPU_IER_CLR);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void tegra_unmask(struct irq_data *d)
|
static void tegra_unmask(struct irq_data *d)
|
||||||
{
|
{
|
||||||
if (d->irq < FIRST_LEGACY_IRQ)
|
if (d->hwirq < FIRST_LEGACY_IRQ)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
tegra_irq_write_mask(d->irq, ICTLR_CPU_IER_SET);
|
tegra_irq_write_mask(d->hwirq, ICTLR_CPU_IER_SET);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void tegra_ack(struct irq_data *d)
|
static void tegra_ack(struct irq_data *d)
|
||||||
{
|
{
|
||||||
if (d->irq < FIRST_LEGACY_IRQ)
|
if (d->hwirq < FIRST_LEGACY_IRQ)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
tegra_irq_write_mask(d->irq, ICTLR_CPU_IEP_FIR_CLR);
|
tegra_irq_write_mask(d->hwirq, ICTLR_CPU_IEP_FIR_CLR);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void tegra_eoi(struct irq_data *d)
|
static void tegra_eoi(struct irq_data *d)
|
||||||
{
|
{
|
||||||
if (d->irq < FIRST_LEGACY_IRQ)
|
if (d->hwirq < FIRST_LEGACY_IRQ)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
tegra_irq_write_mask(d->irq, ICTLR_CPU_IEP_FIR_CLR);
|
tegra_irq_write_mask(d->hwirq, ICTLR_CPU_IEP_FIR_CLR);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int tegra_retrigger(struct irq_data *d)
|
static int tegra_retrigger(struct irq_data *d)
|
||||||
{
|
{
|
||||||
if (d->irq < FIRST_LEGACY_IRQ)
|
if (d->hwirq < FIRST_LEGACY_IRQ)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
tegra_irq_write_mask(d->irq, ICTLR_CPU_IEP_FIR_SET);
|
tegra_irq_write_mask(d->hwirq, ICTLR_CPU_IEP_FIR_SET);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -142,7 +142,7 @@ static int tegra_retrigger(struct irq_data *d)
|
|||||||
#ifdef CONFIG_PM_SLEEP
|
#ifdef CONFIG_PM_SLEEP
|
||||||
static int tegra_set_wake(struct irq_data *d, unsigned int enable)
|
static int tegra_set_wake(struct irq_data *d, unsigned int enable)
|
||||||
{
|
{
|
||||||
u32 irq = d->irq;
|
u32 irq = d->hwirq;
|
||||||
u32 index, mask;
|
u32 index, mask;
|
||||||
|
|
||||||
if (irq < FIRST_LEGACY_IRQ ||
|
if (irq < FIRST_LEGACY_IRQ ||
|
||||||
|
@ -798,6 +798,7 @@ config NEED_KUSER_HELPERS
|
|||||||
|
|
||||||
config KUSER_HELPERS
|
config KUSER_HELPERS
|
||||||
bool "Enable kuser helpers in vector page" if !NEED_KUSER_HELPERS
|
bool "Enable kuser helpers in vector page" if !NEED_KUSER_HELPERS
|
||||||
|
depends on MMU
|
||||||
default y
|
default y
|
||||||
help
|
help
|
||||||
Warning: disabling this option may break user programs.
|
Warning: disabling this option may break user programs.
|
||||||
|
@ -270,7 +270,6 @@ __v7_pj4b_setup:
|
|||||||
/* Auxiliary Debug Modes Control 1 Register */
|
/* Auxiliary Debug Modes Control 1 Register */
|
||||||
#define PJ4B_STATIC_BP (1 << 2) /* Enable Static BP */
|
#define PJ4B_STATIC_BP (1 << 2) /* Enable Static BP */
|
||||||
#define PJ4B_INTER_PARITY (1 << 8) /* Disable Internal Parity Handling */
|
#define PJ4B_INTER_PARITY (1 << 8) /* Disable Internal Parity Handling */
|
||||||
#define PJ4B_BCK_OFF_STREX (1 << 5) /* Enable the back off of STREX instr */
|
|
||||||
#define PJ4B_CLEAN_LINE (1 << 16) /* Disable data transfer for clean line */
|
#define PJ4B_CLEAN_LINE (1 << 16) /* Disable data transfer for clean line */
|
||||||
|
|
||||||
/* Auxiliary Debug Modes Control 2 Register */
|
/* Auxiliary Debug Modes Control 2 Register */
|
||||||
@ -293,7 +292,6 @@ __v7_pj4b_setup:
|
|||||||
/* Auxiliary Debug Modes Control 1 Register */
|
/* Auxiliary Debug Modes Control 1 Register */
|
||||||
mrc p15, 1, r0, c15, c1, 1
|
mrc p15, 1, r0, c15, c1, 1
|
||||||
orr r0, r0, #PJ4B_CLEAN_LINE
|
orr r0, r0, #PJ4B_CLEAN_LINE
|
||||||
orr r0, r0, #PJ4B_BCK_OFF_STREX
|
|
||||||
orr r0, r0, #PJ4B_INTER_PARITY
|
orr r0, r0, #PJ4B_INTER_PARITY
|
||||||
bic r0, r0, #PJ4B_STATIC_BP
|
bic r0, r0, #PJ4B_STATIC_BP
|
||||||
mcr p15, 1, r0, c15, c1, 1
|
mcr p15, 1, r0, c15, c1, 1
|
||||||
|
@ -535,7 +535,7 @@ ENTRY(cpu_xscale_do_suspend)
|
|||||||
mrc p15, 0, r5, c15, c1, 0 @ CP access reg
|
mrc p15, 0, r5, c15, c1, 0 @ CP access reg
|
||||||
mrc p15, 0, r6, c13, c0, 0 @ PID
|
mrc p15, 0, r6, c13, c0, 0 @ PID
|
||||||
mrc p15, 0, r7, c3, c0, 0 @ domain ID
|
mrc p15, 0, r7, c3, c0, 0 @ domain ID
|
||||||
mrc p15, 0, r8, c1, c1, 0 @ auxiliary control reg
|
mrc p15, 0, r8, c1, c0, 1 @ auxiliary control reg
|
||||||
mrc p15, 0, r9, c1, c0, 0 @ control reg
|
mrc p15, 0, r9, c1, c0, 0 @ control reg
|
||||||
bic r4, r4, #2 @ clear frequency change bit
|
bic r4, r4, #2 @ clear frequency change bit
|
||||||
stmia r0, {r4 - r9} @ store cp regs
|
stmia r0, {r4 - r9} @ store cp regs
|
||||||
@ -552,7 +552,7 @@ ENTRY(cpu_xscale_do_resume)
|
|||||||
mcr p15, 0, r6, c13, c0, 0 @ PID
|
mcr p15, 0, r6, c13, c0, 0 @ PID
|
||||||
mcr p15, 0, r7, c3, c0, 0 @ domain ID
|
mcr p15, 0, r7, c3, c0, 0 @ domain ID
|
||||||
mcr p15, 0, r1, c2, c0, 0 @ translation table base addr
|
mcr p15, 0, r1, c2, c0, 0 @ translation table base addr
|
||||||
mcr p15, 0, r8, c1, c1, 0 @ auxiliary control reg
|
mcr p15, 0, r8, c1, c0, 1 @ auxiliary control reg
|
||||||
mov r0, r9 @ control register
|
mov r0, r9 @ control register
|
||||||
b cpu_resume_mmu
|
b cpu_resume_mmu
|
||||||
ENDPROC(cpu_xscale_do_resume)
|
ENDPROC(cpu_xscale_do_resume)
|
||||||
|
@ -497,6 +497,34 @@ static void orion_gpio_dbg_show(struct seq_file *s, struct gpio_chip *chip)
|
|||||||
#define orion_gpio_dbg_show NULL
|
#define orion_gpio_dbg_show NULL
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static void orion_gpio_unmask_irq(struct irq_data *d)
|
||||||
|
{
|
||||||
|
struct irq_chip_generic *gc = irq_data_get_irq_chip_data(d);
|
||||||
|
struct irq_chip_type *ct = irq_data_get_chip_type(d);
|
||||||
|
u32 reg_val;
|
||||||
|
u32 mask = d->mask;
|
||||||
|
|
||||||
|
irq_gc_lock(gc);
|
||||||
|
reg_val = irq_reg_readl(gc->reg_base + ct->regs.mask);
|
||||||
|
reg_val |= mask;
|
||||||
|
irq_reg_writel(reg_val, gc->reg_base + ct->regs.mask);
|
||||||
|
irq_gc_unlock(gc);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void orion_gpio_mask_irq(struct irq_data *d)
|
||||||
|
{
|
||||||
|
struct irq_chip_generic *gc = irq_data_get_irq_chip_data(d);
|
||||||
|
struct irq_chip_type *ct = irq_data_get_chip_type(d);
|
||||||
|
u32 mask = d->mask;
|
||||||
|
u32 reg_val;
|
||||||
|
|
||||||
|
irq_gc_lock(gc);
|
||||||
|
reg_val = irq_reg_readl(gc->reg_base + ct->regs.mask);
|
||||||
|
reg_val &= ~mask;
|
||||||
|
irq_reg_writel(reg_val, gc->reg_base + ct->regs.mask);
|
||||||
|
irq_gc_unlock(gc);
|
||||||
|
}
|
||||||
|
|
||||||
void __init orion_gpio_init(struct device_node *np,
|
void __init orion_gpio_init(struct device_node *np,
|
||||||
int gpio_base, int ngpio,
|
int gpio_base, int ngpio,
|
||||||
void __iomem *base, int mask_offset,
|
void __iomem *base, int mask_offset,
|
||||||
@ -565,8 +593,8 @@ void __init orion_gpio_init(struct device_node *np,
|
|||||||
ct = gc->chip_types;
|
ct = gc->chip_types;
|
||||||
ct->regs.mask = ochip->mask_offset + GPIO_LEVEL_MASK_OFF;
|
ct->regs.mask = ochip->mask_offset + GPIO_LEVEL_MASK_OFF;
|
||||||
ct->type = IRQ_TYPE_LEVEL_HIGH | IRQ_TYPE_LEVEL_LOW;
|
ct->type = IRQ_TYPE_LEVEL_HIGH | IRQ_TYPE_LEVEL_LOW;
|
||||||
ct->chip.irq_mask = irq_gc_mask_clr_bit;
|
ct->chip.irq_mask = orion_gpio_mask_irq;
|
||||||
ct->chip.irq_unmask = irq_gc_mask_set_bit;
|
ct->chip.irq_unmask = orion_gpio_unmask_irq;
|
||||||
ct->chip.irq_set_type = gpio_irq_set_type;
|
ct->chip.irq_set_type = gpio_irq_set_type;
|
||||||
ct->chip.name = ochip->chip.label;
|
ct->chip.name = ochip->chip.label;
|
||||||
|
|
||||||
@ -575,8 +603,8 @@ void __init orion_gpio_init(struct device_node *np,
|
|||||||
ct->regs.ack = GPIO_EDGE_CAUSE_OFF;
|
ct->regs.ack = GPIO_EDGE_CAUSE_OFF;
|
||||||
ct->type = IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING;
|
ct->type = IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING;
|
||||||
ct->chip.irq_ack = irq_gc_ack_clr_bit;
|
ct->chip.irq_ack = irq_gc_ack_clr_bit;
|
||||||
ct->chip.irq_mask = irq_gc_mask_clr_bit;
|
ct->chip.irq_mask = orion_gpio_mask_irq;
|
||||||
ct->chip.irq_unmask = irq_gc_mask_set_bit;
|
ct->chip.irq_unmask = orion_gpio_unmask_irq;
|
||||||
ct->chip.irq_set_type = gpio_irq_set_type;
|
ct->chip.irq_set_type = gpio_irq_set_type;
|
||||||
ct->handler = handle_edge_irq;
|
ct->handler = handle_edge_irq;
|
||||||
ct->chip.name = ochip->chip.label;
|
ct->chip.name = ochip->chip.label;
|
||||||
|
@ -599,7 +599,7 @@
|
|||||||
compatible = "apm,xgene-enet";
|
compatible = "apm,xgene-enet";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
reg = <0x0 0x17020000 0x0 0xd100>,
|
reg = <0x0 0x17020000 0x0 0xd100>,
|
||||||
<0x0 0X17030000 0x0 0X400>,
|
<0x0 0X17030000 0x0 0Xc300>,
|
||||||
<0x0 0X10000000 0x0 0X200>;
|
<0x0 0X10000000 0x0 0X200>;
|
||||||
reg-names = "enet_csr", "ring_csr", "ring_cmd";
|
reg-names = "enet_csr", "ring_csr", "ring_cmd";
|
||||||
interrupts = <0x0 0x3c 0x4>;
|
interrupts = <0x0 0x3c 0x4>;
|
||||||
@ -624,9 +624,9 @@
|
|||||||
sgenet0: ethernet@1f210000 {
|
sgenet0: ethernet@1f210000 {
|
||||||
compatible = "apm,xgene-enet";
|
compatible = "apm,xgene-enet";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
reg = <0x0 0x1f210000 0x0 0x10000>,
|
reg = <0x0 0x1f210000 0x0 0xd100>,
|
||||||
<0x0 0x1f200000 0x0 0X10000>,
|
<0x0 0x1f200000 0x0 0Xc300>,
|
||||||
<0x0 0x1B000000 0x0 0X20000>;
|
<0x0 0x1B000000 0x0 0X200>;
|
||||||
reg-names = "enet_csr", "ring_csr", "ring_cmd";
|
reg-names = "enet_csr", "ring_csr", "ring_cmd";
|
||||||
interrupts = <0x0 0xA0 0x4>;
|
interrupts = <0x0 0xA0 0x4>;
|
||||||
dma-coherent;
|
dma-coherent;
|
||||||
@ -639,7 +639,7 @@
|
|||||||
compatible = "apm,xgene-enet";
|
compatible = "apm,xgene-enet";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
reg = <0x0 0x1f610000 0x0 0xd100>,
|
reg = <0x0 0x1f610000 0x0 0xd100>,
|
||||||
<0x0 0x1f600000 0x0 0X400>,
|
<0x0 0x1f600000 0x0 0Xc300>,
|
||||||
<0x0 0x18000000 0x0 0X200>;
|
<0x0 0x18000000 0x0 0X200>;
|
||||||
reg-names = "enet_csr", "ring_csr", "ring_cmd";
|
reg-names = "enet_csr", "ring_csr", "ring_cmd";
|
||||||
interrupts = <0x0 0x60 0x4>;
|
interrupts = <0x0 0x60 0x4>;
|
||||||
|
@ -142,7 +142,7 @@ static inline void *phys_to_virt(phys_addr_t x)
|
|||||||
* virt_to_page(k) convert a _valid_ virtual address to struct page *
|
* virt_to_page(k) convert a _valid_ virtual address to struct page *
|
||||||
* virt_addr_valid(k) indicates whether a virtual address is valid
|
* virt_addr_valid(k) indicates whether a virtual address is valid
|
||||||
*/
|
*/
|
||||||
#define ARCH_PFN_OFFSET PHYS_PFN_OFFSET
|
#define ARCH_PFN_OFFSET ((unsigned long)PHYS_PFN_OFFSET)
|
||||||
|
|
||||||
#define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT)
|
#define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT)
|
||||||
#define virt_addr_valid(kaddr) pfn_valid(__pa(kaddr) >> PAGE_SHIFT)
|
#define virt_addr_valid(kaddr) pfn_valid(__pa(kaddr) >> PAGE_SHIFT)
|
||||||
|
@ -54,18 +54,17 @@ ENTRY(efi_stub_entry)
|
|||||||
b.eq efi_load_fail
|
b.eq efi_load_fail
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* efi_entry() will have relocated the kernel image if necessary
|
* efi_entry() will have copied the kernel image if necessary and we
|
||||||
* and we return here with device tree address in x0 and the kernel
|
* return here with device tree address in x0 and the kernel entry
|
||||||
* entry point stored at *image_addr. Save those values in registers
|
* point stored at *image_addr. Save those values in registers which
|
||||||
* which are callee preserved.
|
* are callee preserved.
|
||||||
*/
|
*/
|
||||||
mov x20, x0 // DTB address
|
mov x20, x0 // DTB address
|
||||||
ldr x0, [sp, #16] // relocated _text address
|
ldr x0, [sp, #16] // relocated _text address
|
||||||
mov x21, x0
|
mov x21, x0
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Flush dcache covering current runtime addresses
|
* Calculate size of the kernel Image (same for original and copy).
|
||||||
* of kernel text/data. Then flush all of icache.
|
|
||||||
*/
|
*/
|
||||||
adrp x1, _text
|
adrp x1, _text
|
||||||
add x1, x1, #:lo12:_text
|
add x1, x1, #:lo12:_text
|
||||||
@ -73,9 +72,24 @@ ENTRY(efi_stub_entry)
|
|||||||
add x2, x2, #:lo12:_edata
|
add x2, x2, #:lo12:_edata
|
||||||
sub x1, x2, x1
|
sub x1, x2, x1
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Flush the copied Image to the PoC, and ensure it is not shadowed by
|
||||||
|
* stale icache entries from before relocation.
|
||||||
|
*/
|
||||||
bl __flush_dcache_area
|
bl __flush_dcache_area
|
||||||
ic ialluis
|
ic ialluis
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Ensure that the rest of this function (in the original Image) is
|
||||||
|
* visible when the caches are disabled. The I-cache can't have stale
|
||||||
|
* entries for the VA range of the current image, so no maintenance is
|
||||||
|
* necessary.
|
||||||
|
*/
|
||||||
|
adr x0, efi_stub_entry
|
||||||
|
adr x1, efi_stub_entry_end
|
||||||
|
sub x1, x1, x0
|
||||||
|
bl __flush_dcache_area
|
||||||
|
|
||||||
/* Turn off Dcache and MMU */
|
/* Turn off Dcache and MMU */
|
||||||
mrs x0, CurrentEL
|
mrs x0, CurrentEL
|
||||||
cmp x0, #CurrentEL_EL2
|
cmp x0, #CurrentEL_EL2
|
||||||
@ -105,4 +119,5 @@ efi_load_fail:
|
|||||||
ldp x29, x30, [sp], #32
|
ldp x29, x30, [sp], #32
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
efi_stub_entry_end:
|
||||||
ENDPROC(efi_stub_entry)
|
ENDPROC(efi_stub_entry)
|
||||||
|
@ -163,9 +163,10 @@ static int __kprobes aarch64_insn_patch_text_cb(void *arg)
|
|||||||
* which ends with "dsb; isb" pair guaranteeing global
|
* which ends with "dsb; isb" pair guaranteeing global
|
||||||
* visibility.
|
* visibility.
|
||||||
*/
|
*/
|
||||||
atomic_set(&pp->cpu_count, -1);
|
/* Notify other processors with an additional increment. */
|
||||||
|
atomic_inc(&pp->cpu_count);
|
||||||
} else {
|
} else {
|
||||||
while (atomic_read(&pp->cpu_count) != -1)
|
while (atomic_read(&pp->cpu_count) <= num_online_cpus())
|
||||||
cpu_relax();
|
cpu_relax();
|
||||||
isb();
|
isb();
|
||||||
}
|
}
|
||||||
|
@ -424,6 +424,11 @@ static const struct sys_reg_desc sys_reg_descs[] = {
|
|||||||
/* VBAR_EL1 */
|
/* VBAR_EL1 */
|
||||||
{ Op0(0b11), Op1(0b000), CRn(0b1100), CRm(0b0000), Op2(0b000),
|
{ Op0(0b11), Op1(0b000), CRn(0b1100), CRm(0b0000), Op2(0b000),
|
||||||
NULL, reset_val, VBAR_EL1, 0 },
|
NULL, reset_val, VBAR_EL1, 0 },
|
||||||
|
|
||||||
|
/* ICC_SRE_EL1 */
|
||||||
|
{ Op0(0b11), Op1(0b000), CRn(0b1100), CRm(0b1100), Op2(0b101),
|
||||||
|
trap_raz_wi },
|
||||||
|
|
||||||
/* CONTEXTIDR_EL1 */
|
/* CONTEXTIDR_EL1 */
|
||||||
{ Op0(0b11), Op1(0b000), CRn(0b1101), CRm(0b0000), Op2(0b001),
|
{ Op0(0b11), Op1(0b000), CRn(0b1101), CRm(0b0000), Op2(0b001),
|
||||||
access_vm_reg, reset_val, CONTEXTIDR_EL1, 0 },
|
access_vm_reg, reset_val, CONTEXTIDR_EL1, 0 },
|
||||||
@ -690,6 +695,10 @@ static const struct sys_reg_desc cp15_regs[] = {
|
|||||||
{ Op1( 0), CRn(10), CRm( 2), Op2( 1), access_vm_reg, NULL, c10_NMRR },
|
{ Op1( 0), CRn(10), CRm( 2), Op2( 1), access_vm_reg, NULL, c10_NMRR },
|
||||||
{ Op1( 0), CRn(10), CRm( 3), Op2( 0), access_vm_reg, NULL, c10_AMAIR0 },
|
{ Op1( 0), CRn(10), CRm( 3), Op2( 0), access_vm_reg, NULL, c10_AMAIR0 },
|
||||||
{ Op1( 0), CRn(10), CRm( 3), Op2( 1), access_vm_reg, NULL, c10_AMAIR1 },
|
{ Op1( 0), CRn(10), CRm( 3), Op2( 1), access_vm_reg, NULL, c10_AMAIR1 },
|
||||||
|
|
||||||
|
/* ICC_SRE */
|
||||||
|
{ Op1( 0), CRn(12), CRm(12), Op2( 5), trap_raz_wi },
|
||||||
|
|
||||||
{ Op1( 0), CRn(13), CRm( 0), Op2( 1), access_vm_reg, NULL, c13_CID },
|
{ Op1( 0), CRn(13), CRm( 0), Op2( 1), access_vm_reg, NULL, c13_CID },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -46,7 +46,7 @@ USER(9f, strh wzr, [x0], #2 )
|
|||||||
sub x1, x1, #2
|
sub x1, x1, #2
|
||||||
4: adds x1, x1, #1
|
4: adds x1, x1, #1
|
||||||
b.mi 5f
|
b.mi 5f
|
||||||
strb wzr, [x0]
|
USER(9f, strb wzr, [x0] )
|
||||||
5: mov x0, #0
|
5: mov x0, #0
|
||||||
ret
|
ret
|
||||||
ENDPROC(__clear_user)
|
ENDPROC(__clear_user)
|
||||||
|
@ -202,7 +202,7 @@ static void __init alloc_init_pmd(pud_t *pud, unsigned long addr,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void __init alloc_init_pud(pgd_t *pgd, unsigned long addr,
|
static void __init alloc_init_pud(pgd_t *pgd, unsigned long addr,
|
||||||
unsigned long end, unsigned long phys,
|
unsigned long end, phys_addr_t phys,
|
||||||
int map_io)
|
int map_io)
|
||||||
{
|
{
|
||||||
pud_t *pud;
|
pud_t *pud;
|
||||||
|
@ -1563,7 +1563,7 @@ int kvm_arch_prepare_memory_region(struct kvm *kvm,
|
|||||||
|
|
||||||
for (i = 0; i < npages; i++) {
|
for (i = 0; i < npages; i++) {
|
||||||
pfn = gfn_to_pfn(kvm, base_gfn + i);
|
pfn = gfn_to_pfn(kvm, base_gfn + i);
|
||||||
if (!kvm_is_mmio_pfn(pfn)) {
|
if (!kvm_is_reserved_pfn(pfn)) {
|
||||||
kvm_set_pmt_entry(kvm, base_gfn + i,
|
kvm_set_pmt_entry(kvm, base_gfn + i,
|
||||||
pfn << PAGE_SHIFT,
|
pfn << PAGE_SHIFT,
|
||||||
_PAGE_AR_RWX | _PAGE_MA_WB);
|
_PAGE_AR_RWX | _PAGE_MA_WB);
|
||||||
|
@ -2101,9 +2101,17 @@ config 64BIT_PHYS_ADDR
|
|||||||
config ARCH_PHYS_ADDR_T_64BIT
|
config ARCH_PHYS_ADDR_T_64BIT
|
||||||
def_bool 64BIT_PHYS_ADDR
|
def_bool 64BIT_PHYS_ADDR
|
||||||
|
|
||||||
|
choice
|
||||||
|
prompt "SmartMIPS or microMIPS ASE support"
|
||||||
|
|
||||||
|
config CPU_NEEDS_NO_SMARTMIPS_OR_MICROMIPS
|
||||||
|
bool "None"
|
||||||
|
help
|
||||||
|
Select this if you want neither microMIPS nor SmartMIPS support
|
||||||
|
|
||||||
config CPU_HAS_SMARTMIPS
|
config CPU_HAS_SMARTMIPS
|
||||||
depends on SYS_SUPPORTS_SMARTMIPS
|
depends on SYS_SUPPORTS_SMARTMIPS
|
||||||
bool "Support for the SmartMIPS ASE"
|
bool "SmartMIPS"
|
||||||
help
|
help
|
||||||
SmartMIPS is a extension of the MIPS32 architecture aimed at
|
SmartMIPS is a extension of the MIPS32 architecture aimed at
|
||||||
increased security at both hardware and software level for
|
increased security at both hardware and software level for
|
||||||
@ -2115,11 +2123,13 @@ config CPU_HAS_SMARTMIPS
|
|||||||
|
|
||||||
config CPU_MICROMIPS
|
config CPU_MICROMIPS
|
||||||
depends on SYS_SUPPORTS_MICROMIPS
|
depends on SYS_SUPPORTS_MICROMIPS
|
||||||
bool "Build kernel using microMIPS ISA"
|
bool "microMIPS"
|
||||||
help
|
help
|
||||||
When this option is enabled the kernel will be built using the
|
When this option is enabled the kernel will be built using the
|
||||||
microMIPS ISA
|
microMIPS ISA
|
||||||
|
|
||||||
|
endchoice
|
||||||
|
|
||||||
config CPU_HAS_MSA
|
config CPU_HAS_MSA
|
||||||
bool "Support for the MIPS SIMD Architecture (EXPERIMENTAL)"
|
bool "Support for the MIPS SIMD Architecture (EXPERIMENTAL)"
|
||||||
depends on CPU_SUPPORTS_MSA
|
depends on CPU_SUPPORTS_MSA
|
||||||
|
@ -20,9 +20,15 @@
|
|||||||
#define WORD_INSN ".word"
|
#define WORD_INSN ".word"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_CPU_MICROMIPS
|
||||||
|
#define NOP_INSN "nop32"
|
||||||
|
#else
|
||||||
|
#define NOP_INSN "nop"
|
||||||
|
#endif
|
||||||
|
|
||||||
static __always_inline bool arch_static_branch(struct static_key *key)
|
static __always_inline bool arch_static_branch(struct static_key *key)
|
||||||
{
|
{
|
||||||
asm_volatile_goto("1:\tnop\n\t"
|
asm_volatile_goto("1:\t" NOP_INSN "\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"
|
||||||
|
@ -41,10 +41,8 @@
|
|||||||
#define cpu_has_mcheck 0
|
#define cpu_has_mcheck 0
|
||||||
#define cpu_has_mdmx 0
|
#define cpu_has_mdmx 0
|
||||||
#define cpu_has_mips16 0
|
#define cpu_has_mips16 0
|
||||||
#define cpu_has_mips32r1 0
|
|
||||||
#define cpu_has_mips32r2 0
|
#define cpu_has_mips32r2 0
|
||||||
#define cpu_has_mips3d 0
|
#define cpu_has_mips3d 0
|
||||||
#define cpu_has_mips64r1 0
|
|
||||||
#define cpu_has_mips64r2 0
|
#define cpu_has_mips64r2 0
|
||||||
#define cpu_has_mipsmt 0
|
#define cpu_has_mipsmt 0
|
||||||
#define cpu_has_prefetch 0
|
#define cpu_has_prefetch 0
|
||||||
|
@ -661,6 +661,8 @@
|
|||||||
#define MIPS_CONF6_SYND (_ULCAST_(1) << 13)
|
#define MIPS_CONF6_SYND (_ULCAST_(1) << 13)
|
||||||
/* proAptiv FTLB on/off bit */
|
/* proAptiv FTLB on/off bit */
|
||||||
#define MIPS_CONF6_FTLBEN (_ULCAST_(1) << 15)
|
#define MIPS_CONF6_FTLBEN (_ULCAST_(1) << 15)
|
||||||
|
/* FTLB probability bits */
|
||||||
|
#define MIPS_CONF6_FTLBP_SHIFT (16)
|
||||||
|
|
||||||
#define MIPS_CONF7_WII (_ULCAST_(1) << 31)
|
#define MIPS_CONF7_WII (_ULCAST_(1) << 31)
|
||||||
|
|
||||||
|
@ -257,7 +257,11 @@ static inline void protected_flush_icache_line(unsigned long addr)
|
|||||||
*/
|
*/
|
||||||
static inline void protected_writeback_dcache_line(unsigned long addr)
|
static inline void protected_writeback_dcache_line(unsigned long addr)
|
||||||
{
|
{
|
||||||
|
#ifdef CONFIG_EVA
|
||||||
|
protected_cachee_op(Hit_Writeback_Inv_D, addr);
|
||||||
|
#else
|
||||||
protected_cache_op(Hit_Writeback_Inv_D, addr);
|
protected_cache_op(Hit_Writeback_Inv_D, addr);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void protected_writeback_scache_line(unsigned long addr)
|
static inline void protected_writeback_scache_line(unsigned long addr)
|
||||||
|
@ -301,7 +301,8 @@ do { \
|
|||||||
__get_kernel_common((x), size, __gu_ptr); \
|
__get_kernel_common((x), size, __gu_ptr); \
|
||||||
else \
|
else \
|
||||||
__get_user_common((x), size, __gu_ptr); \
|
__get_user_common((x), size, __gu_ptr); \
|
||||||
} \
|
} else \
|
||||||
|
(x) = 0; \
|
||||||
\
|
\
|
||||||
__gu_err; \
|
__gu_err; \
|
||||||
})
|
})
|
||||||
@ -316,6 +317,7 @@ do { \
|
|||||||
" .insn \n" \
|
" .insn \n" \
|
||||||
" .section .fixup,\"ax\" \n" \
|
" .section .fixup,\"ax\" \n" \
|
||||||
"3: li %0, %4 \n" \
|
"3: li %0, %4 \n" \
|
||||||
|
" move %1, $0 \n" \
|
||||||
" j 2b \n" \
|
" j 2b \n" \
|
||||||
" .previous \n" \
|
" .previous \n" \
|
||||||
" .section __ex_table,\"a\" \n" \
|
" .section __ex_table,\"a\" \n" \
|
||||||
@ -630,6 +632,7 @@ do { \
|
|||||||
" .insn \n" \
|
" .insn \n" \
|
||||||
" .section .fixup,\"ax\" \n" \
|
" .section .fixup,\"ax\" \n" \
|
||||||
"3: li %0, %4 \n" \
|
"3: li %0, %4 \n" \
|
||||||
|
" move %1, $0 \n" \
|
||||||
" j 2b \n" \
|
" j 2b \n" \
|
||||||
" .previous \n" \
|
" .previous \n" \
|
||||||
" .section __ex_table,\"a\" \n" \
|
" .section __ex_table,\"a\" \n" \
|
||||||
@ -773,10 +776,11 @@ extern void __put_user_unaligned_unknown(void);
|
|||||||
"jal\t" #destination "\n\t"
|
"jal\t" #destination "\n\t"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef CONFIG_CPU_DADDI_WORKAROUNDS
|
#if defined(CONFIG_CPU_DADDI_WORKAROUNDS) || (defined(CONFIG_EVA) && \
|
||||||
#define DADDI_SCRATCH "$0"
|
defined(CONFIG_CPU_HAS_PREFETCH))
|
||||||
#else
|
|
||||||
#define DADDI_SCRATCH "$3"
|
#define DADDI_SCRATCH "$3"
|
||||||
|
#else
|
||||||
|
#define DADDI_SCRATCH "$0"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern size_t __copy_user(void *__to, const void *__from, size_t __n);
|
extern size_t __copy_user(void *__to, const void *__from, size_t __n);
|
||||||
@ -1418,7 +1422,7 @@ static inline long __strnlen_user(const char __user *s, long n)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* strlen_user: - Get the size of a string in user space.
|
* strnlen_user: - Get the size of a string in user space.
|
||||||
* @str: The string to measure.
|
* @str: The string to measure.
|
||||||
*
|
*
|
||||||
* Context: User context only. This function may sleep.
|
* Context: User context only. This function may sleep.
|
||||||
@ -1427,9 +1431,7 @@ static inline long __strnlen_user(const char __user *s, long n)
|
|||||||
*
|
*
|
||||||
* Returns the size of the string INCLUDING the terminating NUL.
|
* Returns the size of the string INCLUDING the terminating NUL.
|
||||||
* On exception, returns 0.
|
* On exception, returns 0.
|
||||||
*
|
* If the string is too long, returns a value greater than @n.
|
||||||
* If there is a limit on the length of a valid string, you may wish to
|
|
||||||
* consider using strnlen_user() instead.
|
|
||||||
*/
|
*/
|
||||||
static inline long strnlen_user(const char __user *s, long n)
|
static inline long strnlen_user(const char __user *s, long n)
|
||||||
{
|
{
|
||||||
|
@ -1045,7 +1045,7 @@
|
|||||||
#define __NR_seccomp (__NR_Linux + 316)
|
#define __NR_seccomp (__NR_Linux + 316)
|
||||||
#define __NR_getrandom (__NR_Linux + 317)
|
#define __NR_getrandom (__NR_Linux + 317)
|
||||||
#define __NR_memfd_create (__NR_Linux + 318)
|
#define __NR_memfd_create (__NR_Linux + 318)
|
||||||
#define __NR_memfd_create (__NR_Linux + 319)
|
#define __NR_bpf (__NR_Linux + 319)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Offset of the last N32 flavoured syscall
|
* Offset of the last N32 flavoured syscall
|
||||||
|
@ -208,7 +208,6 @@ bmips_reset_nmi_vec_end:
|
|||||||
END(bmips_reset_nmi_vec)
|
END(bmips_reset_nmi_vec)
|
||||||
|
|
||||||
.set pop
|
.set pop
|
||||||
.previous
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* CPU1 warm restart vector (used for second and subsequent boots).
|
* CPU1 warm restart vector (used for second and subsequent boots).
|
||||||
@ -281,5 +280,3 @@ LEAF(bmips_enable_xks01)
|
|||||||
jr ra
|
jr ra
|
||||||
|
|
||||||
END(bmips_enable_xks01)
|
END(bmips_enable_xks01)
|
||||||
|
|
||||||
.previous
|
|
||||||
|
@ -229,6 +229,7 @@ LEAF(mips_cps_core_init)
|
|||||||
nop
|
nop
|
||||||
|
|
||||||
.set push
|
.set push
|
||||||
|
.set mips32r2
|
||||||
.set mt
|
.set mt
|
||||||
|
|
||||||
/* Only allow 1 TC per VPE to execute... */
|
/* Only allow 1 TC per VPE to execute... */
|
||||||
@ -345,6 +346,7 @@ LEAF(mips_cps_boot_vpes)
|
|||||||
nop
|
nop
|
||||||
|
|
||||||
.set push
|
.set push
|
||||||
|
.set mips32r2
|
||||||
.set mt
|
.set mt
|
||||||
|
|
||||||
1: /* Enter VPE configuration state */
|
1: /* Enter VPE configuration state */
|
||||||
|
@ -193,6 +193,32 @@ static void set_isa(struct cpuinfo_mips *c, unsigned int isa)
|
|||||||
static char unknown_isa[] = KERN_ERR \
|
static char unknown_isa[] = KERN_ERR \
|
||||||
"Unsupported ISA type, c0.config0: %d.";
|
"Unsupported ISA type, c0.config0: %d.";
|
||||||
|
|
||||||
|
static unsigned int calculate_ftlb_probability(struct cpuinfo_mips *c)
|
||||||
|
{
|
||||||
|
|
||||||
|
unsigned int probability = c->tlbsize / c->tlbsizevtlb;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 0 = All TLBWR instructions go to FTLB
|
||||||
|
* 1 = 15:1: For every 16 TBLWR instructions, 15 go to the
|
||||||
|
* FTLB and 1 goes to the VTLB.
|
||||||
|
* 2 = 7:1: As above with 7:1 ratio.
|
||||||
|
* 3 = 3:1: As above with 3:1 ratio.
|
||||||
|
*
|
||||||
|
* Use the linear midpoint as the probability threshold.
|
||||||
|
*/
|
||||||
|
if (probability >= 12)
|
||||||
|
return 1;
|
||||||
|
else if (probability >= 6)
|
||||||
|
return 2;
|
||||||
|
else
|
||||||
|
/*
|
||||||
|
* So FTLB is less than 4 times bigger than VTLB.
|
||||||
|
* A 3:1 ratio can still be useful though.
|
||||||
|
*/
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
|
||||||
static void set_ftlb_enable(struct cpuinfo_mips *c, int enable)
|
static void set_ftlb_enable(struct cpuinfo_mips *c, int enable)
|
||||||
{
|
{
|
||||||
unsigned int config6;
|
unsigned int config6;
|
||||||
@ -203,9 +229,14 @@ static void set_ftlb_enable(struct cpuinfo_mips *c, int enable)
|
|||||||
case CPU_P5600:
|
case CPU_P5600:
|
||||||
/* proAptiv & related cores use Config6 to enable the FTLB */
|
/* proAptiv & related cores use Config6 to enable the FTLB */
|
||||||
config6 = read_c0_config6();
|
config6 = read_c0_config6();
|
||||||
|
/* Clear the old probability value */
|
||||||
|
config6 &= ~(3 << MIPS_CONF6_FTLBP_SHIFT);
|
||||||
if (enable)
|
if (enable)
|
||||||
/* Enable FTLB */
|
/* Enable FTLB */
|
||||||
write_c0_config6(config6 | MIPS_CONF6_FTLBEN);
|
write_c0_config6(config6 |
|
||||||
|
(calculate_ftlb_probability(c)
|
||||||
|
<< MIPS_CONF6_FTLBP_SHIFT)
|
||||||
|
| MIPS_CONF6_FTLBEN);
|
||||||
else
|
else
|
||||||
/* Disable FTLB */
|
/* Disable FTLB */
|
||||||
write_c0_config6(config6 & ~MIPS_CONF6_FTLBEN);
|
write_c0_config6(config6 & ~MIPS_CONF6_FTLBEN);
|
||||||
@ -757,31 +788,34 @@ static inline void cpu_probe_legacy(struct cpuinfo_mips *c, unsigned int cpu)
|
|||||||
c->cputype = CPU_LOONGSON2;
|
c->cputype = CPU_LOONGSON2;
|
||||||
__cpu_name[cpu] = "ICT Loongson-2";
|
__cpu_name[cpu] = "ICT Loongson-2";
|
||||||
set_elf_platform(cpu, "loongson2e");
|
set_elf_platform(cpu, "loongson2e");
|
||||||
|
set_isa(c, MIPS_CPU_ISA_III);
|
||||||
break;
|
break;
|
||||||
case PRID_REV_LOONGSON2F:
|
case PRID_REV_LOONGSON2F:
|
||||||
c->cputype = CPU_LOONGSON2;
|
c->cputype = CPU_LOONGSON2;
|
||||||
__cpu_name[cpu] = "ICT Loongson-2";
|
__cpu_name[cpu] = "ICT Loongson-2";
|
||||||
set_elf_platform(cpu, "loongson2f");
|
set_elf_platform(cpu, "loongson2f");
|
||||||
|
set_isa(c, MIPS_CPU_ISA_III);
|
||||||
break;
|
break;
|
||||||
case PRID_REV_LOONGSON3A:
|
case PRID_REV_LOONGSON3A:
|
||||||
c->cputype = CPU_LOONGSON3;
|
c->cputype = CPU_LOONGSON3;
|
||||||
c->writecombine = _CACHE_UNCACHED_ACCELERATED;
|
|
||||||
__cpu_name[cpu] = "ICT Loongson-3";
|
__cpu_name[cpu] = "ICT Loongson-3";
|
||||||
set_elf_platform(cpu, "loongson3a");
|
set_elf_platform(cpu, "loongson3a");
|
||||||
|
set_isa(c, MIPS_CPU_ISA_M64R1);
|
||||||
break;
|
break;
|
||||||
case PRID_REV_LOONGSON3B_R1:
|
case PRID_REV_LOONGSON3B_R1:
|
||||||
case PRID_REV_LOONGSON3B_R2:
|
case PRID_REV_LOONGSON3B_R2:
|
||||||
c->cputype = CPU_LOONGSON3;
|
c->cputype = CPU_LOONGSON3;
|
||||||
__cpu_name[cpu] = "ICT Loongson-3";
|
__cpu_name[cpu] = "ICT Loongson-3";
|
||||||
set_elf_platform(cpu, "loongson3b");
|
set_elf_platform(cpu, "loongson3b");
|
||||||
|
set_isa(c, MIPS_CPU_ISA_M64R1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
set_isa(c, MIPS_CPU_ISA_III);
|
|
||||||
c->options = R4K_OPTS |
|
c->options = R4K_OPTS |
|
||||||
MIPS_CPU_FPU | MIPS_CPU_LLSC |
|
MIPS_CPU_FPU | MIPS_CPU_LLSC |
|
||||||
MIPS_CPU_32FPR;
|
MIPS_CPU_32FPR;
|
||||||
c->tlbsize = 64;
|
c->tlbsize = 64;
|
||||||
|
c->writecombine = _CACHE_UNCACHED_ACCELERATED;
|
||||||
break;
|
break;
|
||||||
case PRID_IMP_LOONGSON_32: /* Loongson-1 */
|
case PRID_IMP_LOONGSON_32: /* Loongson-1 */
|
||||||
decode_configs(c);
|
decode_configs(c);
|
||||||
|
@ -18,31 +18,53 @@
|
|||||||
|
|
||||||
#ifdef HAVE_JUMP_LABEL
|
#ifdef HAVE_JUMP_LABEL
|
||||||
|
|
||||||
#define J_RANGE_MASK ((1ul << 28) - 1)
|
/*
|
||||||
|
* Define parameters for the standard MIPS and the microMIPS jump
|
||||||
|
* instruction encoding respectively:
|
||||||
|
*
|
||||||
|
* - the ISA bit of the target, either 0 or 1 respectively,
|
||||||
|
*
|
||||||
|
* - the amount the jump target address is shifted right to fit in the
|
||||||
|
* immediate field of the machine instruction, either 2 or 1,
|
||||||
|
*
|
||||||
|
* - the mask determining the size of the jump region relative to the
|
||||||
|
* delay-slot instruction, either 256MB or 128MB,
|
||||||
|
*
|
||||||
|
* - the jump target alignment, either 4 or 2 bytes.
|
||||||
|
*/
|
||||||
|
#define J_ISA_BIT IS_ENABLED(CONFIG_CPU_MICROMIPS)
|
||||||
|
#define J_RANGE_SHIFT (2 - J_ISA_BIT)
|
||||||
|
#define J_RANGE_MASK ((1ul << (26 + J_RANGE_SHIFT)) - 1)
|
||||||
|
#define J_ALIGN_MASK ((1ul << J_RANGE_SHIFT) - 1)
|
||||||
|
|
||||||
void arch_jump_label_transform(struct jump_entry *e,
|
void arch_jump_label_transform(struct jump_entry *e,
|
||||||
enum jump_label_type type)
|
enum jump_label_type type)
|
||||||
{
|
{
|
||||||
|
union mips_instruction *insn_p;
|
||||||
union mips_instruction insn;
|
union mips_instruction insn;
|
||||||
union mips_instruction *insn_p =
|
|
||||||
(union mips_instruction *)(unsigned long)e->code;
|
|
||||||
|
|
||||||
/* Jump only works within a 256MB aligned region. */
|
insn_p = (union mips_instruction *)msk_isa16_mode(e->code);
|
||||||
BUG_ON((e->target & ~J_RANGE_MASK) != (e->code & ~J_RANGE_MASK));
|
|
||||||
|
|
||||||
/* Target must have 4 byte alignment. */
|
/* Jump only works within an aligned region its delay slot is in. */
|
||||||
BUG_ON((e->target & 3) != 0);
|
BUG_ON((e->target & ~J_RANGE_MASK) != ((e->code + 4) & ~J_RANGE_MASK));
|
||||||
|
|
||||||
|
/* Target must have the right alignment and ISA must be preserved. */
|
||||||
|
BUG_ON((e->target & J_ALIGN_MASK) != J_ISA_BIT);
|
||||||
|
|
||||||
if (type == JUMP_LABEL_ENABLE) {
|
if (type == JUMP_LABEL_ENABLE) {
|
||||||
insn.j_format.opcode = j_op;
|
insn.j_format.opcode = J_ISA_BIT ? mm_j32_op : j_op;
|
||||||
insn.j_format.target = (e->target & J_RANGE_MASK) >> 2;
|
insn.j_format.target = e->target >> J_RANGE_SHIFT;
|
||||||
} else {
|
} else {
|
||||||
insn.word = 0; /* nop */
|
insn.word = 0; /* nop */
|
||||||
}
|
}
|
||||||
|
|
||||||
get_online_cpus();
|
get_online_cpus();
|
||||||
mutex_lock(&text_mutex);
|
mutex_lock(&text_mutex);
|
||||||
*insn_p = insn;
|
if (IS_ENABLED(CONFIG_CPU_MICROMIPS)) {
|
||||||
|
insn_p->halfword[0] = insn.word >> 16;
|
||||||
|
insn_p->halfword[1] = insn.word;
|
||||||
|
} else
|
||||||
|
*insn_p = insn;
|
||||||
|
|
||||||
flush_icache_range((unsigned long)insn_p,
|
flush_icache_range((unsigned long)insn_p,
|
||||||
(unsigned long)insn_p + sizeof(*insn_p));
|
(unsigned long)insn_p + sizeof(*insn_p));
|
||||||
|
@ -94,12 +94,12 @@ int rtlx_open(int index, int can_sleep)
|
|||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
if (index >= RTLX_CHANNELS) {
|
if (index >= RTLX_CHANNELS) {
|
||||||
pr_debug(KERN_DEBUG "rtlx_open index out of range\n");
|
pr_debug("rtlx_open index out of range\n");
|
||||||
return -ENOSYS;
|
return -ENOSYS;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (atomic_inc_return(&channel_wqs[index].in_open) > 1) {
|
if (atomic_inc_return(&channel_wqs[index].in_open) > 1) {
|
||||||
pr_debug(KERN_DEBUG "rtlx_open channel %d already opened\n", index);
|
pr_debug("rtlx_open channel %d already opened\n", index);
|
||||||
ret = -EBUSY;
|
ret = -EBUSY;
|
||||||
goto out_fail;
|
goto out_fail;
|
||||||
}
|
}
|
||||||
|
@ -485,7 +485,7 @@ static void __init bootmem_init(void)
|
|||||||
* NOTE: historically plat_mem_setup did the entire platform initialization.
|
* NOTE: historically plat_mem_setup did the entire platform initialization.
|
||||||
* This was rather impractical because it meant plat_mem_setup had to
|
* This was rather impractical because it meant plat_mem_setup had to
|
||||||
* get away without any kind of memory allocator. To keep old code from
|
* get away without any kind of memory allocator. To keep old code from
|
||||||
* breaking plat_setup was just renamed to plat_setup and a second platform
|
* breaking plat_setup was just renamed to plat_mem_setup and a second platform
|
||||||
* initialization hook for anything else was introduced.
|
* initialization hook for anything else was introduced.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -493,7 +493,7 @@ static int usermem __initdata;
|
|||||||
|
|
||||||
static int __init early_parse_mem(char *p)
|
static int __init early_parse_mem(char *p)
|
||||||
{
|
{
|
||||||
unsigned long start, size;
|
phys_t start, size;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If a user specifies memory size, we
|
* If a user specifies memory size, we
|
||||||
|
@ -658,13 +658,13 @@ static int signal_setup(void)
|
|||||||
save_fp_context = _save_fp_context;
|
save_fp_context = _save_fp_context;
|
||||||
restore_fp_context = _restore_fp_context;
|
restore_fp_context = _restore_fp_context;
|
||||||
} else {
|
} else {
|
||||||
save_fp_context = copy_fp_from_sigcontext;
|
save_fp_context = copy_fp_to_sigcontext;
|
||||||
restore_fp_context = copy_fp_to_sigcontext;
|
restore_fp_context = copy_fp_from_sigcontext;
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_SMP */
|
#endif /* CONFIG_SMP */
|
||||||
#else
|
#else
|
||||||
save_fp_context = copy_fp_from_sigcontext;;
|
save_fp_context = copy_fp_to_sigcontext;
|
||||||
restore_fp_context = copy_fp_to_sigcontext;
|
restore_fp_context = copy_fp_from_sigcontext;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -503,6 +503,7 @@
|
|||||||
STOREB(t0, NBYTES-2(dst), .Ls_exc_p1\@)
|
STOREB(t0, NBYTES-2(dst), .Ls_exc_p1\@)
|
||||||
.Ldone\@:
|
.Ldone\@:
|
||||||
jr ra
|
jr ra
|
||||||
|
nop
|
||||||
.if __memcpy == 1
|
.if __memcpy == 1
|
||||||
END(memcpy)
|
END(memcpy)
|
||||||
.set __memcpy, 0
|
.set __memcpy, 0
|
||||||
|
@ -11,7 +11,8 @@ obj-$(CONFIG_PCI) += pci.o
|
|||||||
# Serial port support
|
# Serial port support
|
||||||
#
|
#
|
||||||
obj-$(CONFIG_EARLY_PRINTK) += early_printk.o
|
obj-$(CONFIG_EARLY_PRINTK) += early_printk.o
|
||||||
obj-$(CONFIG_SERIAL_8250) += serial.o
|
loongson-serial-$(CONFIG_SERIAL_8250) := serial.o
|
||||||
|
obj-y += $(loongson-serial-m) $(loongson-serial-y)
|
||||||
obj-$(CONFIG_LOONGSON_UART_BASE) += uart_base.o
|
obj-$(CONFIG_LOONGSON_UART_BASE) += uart_base.o
|
||||||
obj-$(CONFIG_LOONGSON_MC146818) += rtc.o
|
obj-$(CONFIG_LOONGSON_MC146818) += rtc.o
|
||||||
|
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user