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:
Dave Airlie 2014-12-02 10:58:33 +10:00
commit e8115e79aa
590 changed files with 5475 additions and 2568 deletions

View File

@ -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.

View File

@ -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
----------------------------- -----------------------------

View File

@ -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.

View File

@ -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

View File

@ -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

View File

@ -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:

View File

@ -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:

View File

@ -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

View File

@ -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:

View File

@ -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.

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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.

View File

@ -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

View File

@ -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

View File

@ -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.

View File

@ -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).

View File

@ -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

View File

@ -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 :=

View File

@ -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

View File

@ -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 {

View File

@ -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;
}; };

View File

@ -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;
}; };

View File

@ -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;
}; };

View File

@ -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"

View File

@ -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>;

View File

@ -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 = <

View File

@ -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";

View File

@ -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";
}; };

View File

@ -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";
}; };

View File

@ -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";
}; };

View File

@ -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";
}; };

View File

@ -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";
}; };

View File

@ -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";

View File

@ -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 {

View File

@ -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 {

View File

@ -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;
}; };

View File

@ -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;
}; };

View File

@ -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>;

View File

@ -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 {

View File

@ -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 {

View File

@ -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 {

View File

@ -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>;

View File

@ -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 {

View File

@ -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";

View File

@ -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";
}; };

View File

@ -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 {

View File

@ -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 {

View File

@ -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 {

View File

@ -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 {

View File

@ -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 {

View File

@ -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 {

View File

@ -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>;

View File

@ -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 {

View File

@ -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 {

View File

@ -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 {

View File

@ -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 {

View File

@ -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";

View File

@ -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

View File

@ -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

View File

@ -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) \

View File

@ -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 = &current_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)
{ {

View File

@ -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);

View File

@ -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();

View File

@ -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;
} }

View File

@ -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]),

View File

@ -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

View File

@ -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[] = {

View File

@ -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 ||

View File

@ -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.

View File

@ -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

View File

@ -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)

View File

@ -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;

View File

@ -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>;

View File

@ -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)

View File

@ -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)

View File

@ -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();
} }

View File

@ -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 },
}; };

View File

@ -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)

View File

@ -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;

View File

@ -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);

View File

@ -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

View File

@ -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"

View File

@ -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

View File

@ -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)

View File

@ -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)

View File

@ -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)
{ {

View File

@ -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

View File

@ -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

View File

@ -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 */

View File

@ -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);

View File

@ -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));

View File

@ -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;
} }

View File

@ -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

View File

@ -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;

View File

@ -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

View File

@ -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