Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net

Several cases of overlapping changes, except the packet scheduler
conflicts which deal with the addition of the free list parameter
to qdisc_enqueue().

Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
David S. Miller 2016-06-30 05:03:36 -04:00
commit ee58b57100
725 changed files with 7052 additions and 4289 deletions

View File

@ -21,6 +21,7 @@ Andrey Ryabinin <ryabinin.a.a@gmail.com> <a.ryabinin@samsung.com>
Andrew Morton <akpm@linux-foundation.org> Andrew Morton <akpm@linux-foundation.org>
Andrew Vasquez <andrew.vasquez@qlogic.com> Andrew Vasquez <andrew.vasquez@qlogic.com>
Andy Adamson <andros@citi.umich.edu> Andy Adamson <andros@citi.umich.edu>
Antoine Tenart <antoine.tenart@free-electrons.com>
Antonio Ospite <ao2@ao2.it> <ao2@amarulasolutions.com> Antonio Ospite <ao2@ao2.it> <ao2@amarulasolutions.com>
Archit Taneja <archit@ti.com> Archit Taneja <archit@ti.com>
Arnaud Patard <arnaud.patard@rtp-net.org> Arnaud Patard <arnaud.patard@rtp-net.org>
@ -30,6 +31,9 @@ Axel Lin <axel.lin@gmail.com>
Ben Gardner <bgardner@wabtec.com> Ben Gardner <bgardner@wabtec.com>
Ben M Cahill <ben.m.cahill@intel.com> Ben M Cahill <ben.m.cahill@intel.com>
Björn Steinbrink <B.Steinbrink@gmx.de> Björn Steinbrink <B.Steinbrink@gmx.de>
Boris Brezillon <boris.brezillon@free-electrons.com>
Boris Brezillon <boris.brezillon@free-electrons.com> <b.brezillon.dev@gmail.com>
Boris Brezillon <boris.brezillon@free-electrons.com> <b.brezillon@overkiz.com>
Brian Avery <b.avery@hp.com> Brian Avery <b.avery@hp.com>
Brian King <brking@us.ibm.com> Brian King <brking@us.ibm.com>
Christoph Hellwig <hch@lst.de> Christoph Hellwig <hch@lst.de>
@ -89,6 +93,7 @@ Leonid I Ananiev <leonid.i.ananiev@intel.com>
Linas Vepstas <linas@austin.ibm.com> Linas Vepstas <linas@austin.ibm.com>
Mark Brown <broonie@sirena.org.uk> Mark Brown <broonie@sirena.org.uk>
Matthieu CASTET <castet.matthieu@free.fr> Matthieu CASTET <castet.matthieu@free.fr>
Mauro Carvalho Chehab <mchehab@kernel.org> <maurochehab@gmail.com> <mchehab@infradead.org> <mchehab@redhat.com> <m.chehab@samsung.com> <mchehab@osg.samsung.com> <mchehab@s-opensource.com>
Mayuresh Janorkar <mayur@ti.com> Mayuresh Janorkar <mayur@ti.com>
Michael Buesch <m@bues.ch> Michael Buesch <m@bues.ch>
Michel Dänzer <michel@tungstengraphics.com> Michel Dänzer <michel@tungstengraphics.com>
@ -122,6 +127,7 @@ Santosh Shilimkar <santosh.shilimkar@oracle.org>
Sascha Hauer <s.hauer@pengutronix.de> Sascha Hauer <s.hauer@pengutronix.de>
S.Çağlar Onur <caglar@pardus.org.tr> S.Çağlar Onur <caglar@pardus.org.tr>
Shiraz Hashim <shiraz.linux.kernel@gmail.com> <shiraz.hashim@st.com> Shiraz Hashim <shiraz.linux.kernel@gmail.com> <shiraz.hashim@st.com>
Shuah Khan <shuah@kernel.org> <shuahkhan@gmail.com> <shuah.khan@hp.com> <shuahkh@osg.samsung.com> <shuah.kh@samsung.com>
Simon Kelley <simon@thekelleys.org.uk> Simon Kelley <simon@thekelleys.org.uk>
Stéphane Witzmann <stephane.witzmann@ubpmes.univ-bpclermont.fr> Stéphane Witzmann <stephane.witzmann@ubpmes.univ-bpclermont.fr>
Stephen Hemminger <shemminger@osdl.org> Stephen Hemminger <shemminger@osdl.org>

View File

@ -649,6 +649,7 @@ D: Configure, Menuconfig, xconfig
N: Mauro Carvalho Chehab N: Mauro Carvalho Chehab
E: m.chehab@samsung.org E: m.chehab@samsung.org
E: mchehab@osg.samsung.com
E: mchehab@infradead.org E: mchehab@infradead.org
D: Media subsystem (V4L/DVB) drivers and core D: Media subsystem (V4L/DVB) drivers and core
D: EDAC drivers and EDAC 3.0 core rework D: EDAC drivers and EDAC 3.0 core rework

View File

@ -1,6 +1,6 @@
What: /config/usb-gadget/gadget/functions/uvc.name What: /config/usb-gadget/gadget/functions/uvc.name
Date: Dec 2014 Date: Dec 2014
KernelVersion: 3.20 KernelVersion: 4.0
Description: UVC function directory Description: UVC function directory
streaming_maxburst - 0..15 (ss only) streaming_maxburst - 0..15 (ss only)
@ -9,37 +9,37 @@ Description: UVC function directory
What: /config/usb-gadget/gadget/functions/uvc.name/control What: /config/usb-gadget/gadget/functions/uvc.name/control
Date: Dec 2014 Date: Dec 2014
KernelVersion: 3.20 KernelVersion: 4.0
Description: Control descriptors Description: Control descriptors
What: /config/usb-gadget/gadget/functions/uvc.name/control/class What: /config/usb-gadget/gadget/functions/uvc.name/control/class
Date: Dec 2014 Date: Dec 2014
KernelVersion: 3.20 KernelVersion: 4.0
Description: Class descriptors Description: Class descriptors
What: /config/usb-gadget/gadget/functions/uvc.name/control/class/ss What: /config/usb-gadget/gadget/functions/uvc.name/control/class/ss
Date: Dec 2014 Date: Dec 2014
KernelVersion: 3.20 KernelVersion: 4.0
Description: Super speed control class descriptors Description: Super speed control class descriptors
What: /config/usb-gadget/gadget/functions/uvc.name/control/class/fs What: /config/usb-gadget/gadget/functions/uvc.name/control/class/fs
Date: Dec 2014 Date: Dec 2014
KernelVersion: 3.20 KernelVersion: 4.0
Description: Full speed control class descriptors Description: Full speed control class descriptors
What: /config/usb-gadget/gadget/functions/uvc.name/control/terminal What: /config/usb-gadget/gadget/functions/uvc.name/control/terminal
Date: Dec 2014 Date: Dec 2014
KernelVersion: 3.20 KernelVersion: 4.0
Description: Terminal descriptors Description: Terminal descriptors
What: /config/usb-gadget/gadget/functions/uvc.name/control/terminal/output What: /config/usb-gadget/gadget/functions/uvc.name/control/terminal/output
Date: Dec 2014 Date: Dec 2014
KernelVersion: 3.20 KernelVersion: 4.0
Description: Output terminal descriptors Description: Output terminal descriptors
What: /config/usb-gadget/gadget/functions/uvc.name/control/terminal/output/default What: /config/usb-gadget/gadget/functions/uvc.name/control/terminal/output/default
Date: Dec 2014 Date: Dec 2014
KernelVersion: 3.20 KernelVersion: 4.0
Description: Default output terminal descriptors Description: Default output terminal descriptors
All attributes read only: All attributes read only:
@ -53,12 +53,12 @@ Description: Default output terminal descriptors
What: /config/usb-gadget/gadget/functions/uvc.name/control/terminal/camera What: /config/usb-gadget/gadget/functions/uvc.name/control/terminal/camera
Date: Dec 2014 Date: Dec 2014
KernelVersion: 3.20 KernelVersion: 4.0
Description: Camera terminal descriptors Description: Camera terminal descriptors
What: /config/usb-gadget/gadget/functions/uvc.name/control/terminal/camera/default What: /config/usb-gadget/gadget/functions/uvc.name/control/terminal/camera/default
Date: Dec 2014 Date: Dec 2014
KernelVersion: 3.20 KernelVersion: 4.0
Description: Default camera terminal descriptors Description: Default camera terminal descriptors
All attributes read only: All attributes read only:
@ -75,12 +75,12 @@ Description: Default camera terminal descriptors
What: /config/usb-gadget/gadget/functions/uvc.name/control/processing What: /config/usb-gadget/gadget/functions/uvc.name/control/processing
Date: Dec 2014 Date: Dec 2014
KernelVersion: 3.20 KernelVersion: 4.0
Description: Processing unit descriptors Description: Processing unit descriptors
What: /config/usb-gadget/gadget/functions/uvc.name/control/processing/default What: /config/usb-gadget/gadget/functions/uvc.name/control/processing/default
Date: Dec 2014 Date: Dec 2014
KernelVersion: 3.20 KernelVersion: 4.0
Description: Default processing unit descriptors Description: Default processing unit descriptors
All attributes read only: All attributes read only:
@ -94,49 +94,49 @@ Description: Default processing unit descriptors
What: /config/usb-gadget/gadget/functions/uvc.name/control/header What: /config/usb-gadget/gadget/functions/uvc.name/control/header
Date: Dec 2014 Date: Dec 2014
KernelVersion: 3.20 KernelVersion: 4.0
Description: Control header descriptors Description: Control header descriptors
What: /config/usb-gadget/gadget/functions/uvc.name/control/header/name What: /config/usb-gadget/gadget/functions/uvc.name/control/header/name
Date: Dec 2014 Date: Dec 2014
KernelVersion: 3.20 KernelVersion: 4.0
Description: Specific control header descriptors Description: Specific control header descriptors
dwClockFrequency dwClockFrequency
bcdUVC bcdUVC
What: /config/usb-gadget/gadget/functions/uvc.name/streaming What: /config/usb-gadget/gadget/functions/uvc.name/streaming
Date: Dec 2014 Date: Dec 2014
KernelVersion: 3.20 KernelVersion: 4.0
Description: Streaming descriptors Description: Streaming descriptors
What: /config/usb-gadget/gadget/functions/uvc.name/streaming/class What: /config/usb-gadget/gadget/functions/uvc.name/streaming/class
Date: Dec 2014 Date: Dec 2014
KernelVersion: 3.20 KernelVersion: 4.0
Description: Streaming class descriptors Description: Streaming class descriptors
What: /config/usb-gadget/gadget/functions/uvc.name/streaming/class/ss What: /config/usb-gadget/gadget/functions/uvc.name/streaming/class/ss
Date: Dec 2014 Date: Dec 2014
KernelVersion: 3.20 KernelVersion: 4.0
Description: Super speed streaming class descriptors Description: Super speed streaming class descriptors
What: /config/usb-gadget/gadget/functions/uvc.name/streaming/class/hs What: /config/usb-gadget/gadget/functions/uvc.name/streaming/class/hs
Date: Dec 2014 Date: Dec 2014
KernelVersion: 3.20 KernelVersion: 4.0
Description: High speed streaming class descriptors Description: High speed streaming class descriptors
What: /config/usb-gadget/gadget/functions/uvc.name/streaming/class/fs What: /config/usb-gadget/gadget/functions/uvc.name/streaming/class/fs
Date: Dec 2014 Date: Dec 2014
KernelVersion: 3.20 KernelVersion: 4.0
Description: Full speed streaming class descriptors Description: Full speed streaming class descriptors
What: /config/usb-gadget/gadget/functions/uvc.name/streaming/color_matching What: /config/usb-gadget/gadget/functions/uvc.name/streaming/color_matching
Date: Dec 2014 Date: Dec 2014
KernelVersion: 3.20 KernelVersion: 4.0
Description: Color matching descriptors Description: Color matching descriptors
What: /config/usb-gadget/gadget/functions/uvc.name/streaming/color_matching/default What: /config/usb-gadget/gadget/functions/uvc.name/streaming/color_matching/default
Date: Dec 2014 Date: Dec 2014
KernelVersion: 3.20 KernelVersion: 4.0
Description: Default color matching descriptors Description: Default color matching descriptors
All attributes read only: All attributes read only:
@ -150,12 +150,12 @@ Description: Default color matching descriptors
What: /config/usb-gadget/gadget/functions/uvc.name/streaming/mjpeg What: /config/usb-gadget/gadget/functions/uvc.name/streaming/mjpeg
Date: Dec 2014 Date: Dec 2014
KernelVersion: 3.20 KernelVersion: 4.0
Description: MJPEG format descriptors Description: MJPEG format descriptors
What: /config/usb-gadget/gadget/functions/uvc.name/streaming/mjpeg/name What: /config/usb-gadget/gadget/functions/uvc.name/streaming/mjpeg/name
Date: Dec 2014 Date: Dec 2014
KernelVersion: 3.20 KernelVersion: 4.0
Description: Specific MJPEG format descriptors Description: Specific MJPEG format descriptors
All attributes read only, All attributes read only,
@ -174,7 +174,7 @@ Description: Specific MJPEG format descriptors
What: /config/usb-gadget/gadget/functions/uvc.name/streaming/mjpeg/name/name What: /config/usb-gadget/gadget/functions/uvc.name/streaming/mjpeg/name/name
Date: Dec 2014 Date: Dec 2014
KernelVersion: 3.20 KernelVersion: 4.0
Description: Specific MJPEG frame descriptors Description: Specific MJPEG frame descriptors
dwFrameInterval - indicates how frame interval can be dwFrameInterval - indicates how frame interval can be
@ -196,12 +196,12 @@ Description: Specific MJPEG frame descriptors
What: /config/usb-gadget/gadget/functions/uvc.name/streaming/uncompressed What: /config/usb-gadget/gadget/functions/uvc.name/streaming/uncompressed
Date: Dec 2014 Date: Dec 2014
KernelVersion: 3.20 KernelVersion: 4.0
Description: Uncompressed format descriptors Description: Uncompressed format descriptors
What: /config/usb-gadget/gadget/functions/uvc.name/streaming/uncompressed/name What: /config/usb-gadget/gadget/functions/uvc.name/streaming/uncompressed/name
Date: Dec 2014 Date: Dec 2014
KernelVersion: 3.20 KernelVersion: 4.0
Description: Specific uncompressed format descriptors Description: Specific uncompressed format descriptors
bmaControls - this format's data for bmaControls in bmaControls - this format's data for bmaControls in
@ -221,7 +221,7 @@ Description: Specific uncompressed format descriptors
What: /config/usb-gadget/gadget/functions/uvc.name/streaming/uncompressed/name/name What: /config/usb-gadget/gadget/functions/uvc.name/streaming/uncompressed/name/name
Date: Dec 2014 Date: Dec 2014
KernelVersion: 3.20 KernelVersion: 4.0
Description: Specific uncompressed frame descriptors Description: Specific uncompressed frame descriptors
dwFrameInterval - indicates how frame interval can be dwFrameInterval - indicates how frame interval can be
@ -243,12 +243,12 @@ Description: Specific uncompressed frame descriptors
What: /config/usb-gadget/gadget/functions/uvc.name/streaming/header What: /config/usb-gadget/gadget/functions/uvc.name/streaming/header
Date: Dec 2014 Date: Dec 2014
KernelVersion: 3.20 KernelVersion: 4.0
Description: Streaming header descriptors Description: Streaming header descriptors
What: /config/usb-gadget/gadget/functions/uvc.name/streaming/header/name What: /config/usb-gadget/gadget/functions/uvc.name/streaming/header/name
Date: Dec 2014 Date: Dec 2014
KernelVersion: 3.20 KernelVersion: 4.0
Description: Specific streaming header descriptors Description: Specific streaming header descriptors
All attributes read only: All attributes read only:

View File

@ -1,4 +1,4 @@
What /sys/bus/iio/devices/iio:deviceX/in_proximity_raw What /sys/bus/iio/devices/iio:deviceX/in_proximity_input
Date: March 2014 Date: March 2014
KernelVersion: 3.15 KernelVersion: 3.15
Contact: Matt Ranostay <mranostay@gmail.com> Contact: Matt Ranostay <mranostay@gmail.com>

View File

@ -7,6 +7,7 @@ Required properties:
- "ti,ina220" for ina220 - "ti,ina220" for ina220
- "ti,ina226" for ina226 - "ti,ina226" for ina226
- "ti,ina230" for ina230 - "ti,ina230" for ina230
- "ti,ina231" for ina231
- reg: I2C address - reg: I2C address
Optional properties: Optional properties:

View File

@ -44,8 +44,8 @@ Required properties:
- our-claim-gpio: The GPIO that we use to claim the bus. - our-claim-gpio: The GPIO that we use to claim the bus.
- their-claim-gpios: The GPIOs that the other sides use to claim the bus. - their-claim-gpios: The GPIOs that the other sides use to claim the bus.
Note that some implementations may only support a single other master. Note that some implementations may only support a single other master.
- Standard I2C mux properties. See mux.txt in this directory. - Standard I2C mux properties. See i2c-mux.txt in this directory.
- Single I2C child bus node at reg 0. See mux.txt in this directory. - Single I2C child bus node at reg 0. See i2c-mux.txt in this directory.
Optional properties: Optional properties:
- slew-delay-us: microseconds to wait for a GPIO to go high. Default is 10 us. - slew-delay-us: microseconds to wait for a GPIO to go high. Default is 10 us.

View File

@ -27,7 +27,8 @@ Required properties:
- i2c-bus-name: The name of this bus. Also needed as pinctrl-name for the I2C - i2c-bus-name: The name of this bus. Also needed as pinctrl-name for the I2C
parents. parents.
Furthermore, I2C mux properties and child nodes. See mux.txt in this directory. Furthermore, I2C mux properties and child nodes. See i2c-mux.txt in this
directory.
Example: Example:

View File

@ -22,8 +22,8 @@ Required properties:
- i2c-parent: The phandle of the I2C bus that this multiplexer's master-side - i2c-parent: The phandle of the I2C bus that this multiplexer's master-side
port is connected to. port is connected to.
- mux-gpios: list of gpios used to control the muxer - mux-gpios: list of gpios used to control the muxer
* Standard I2C mux properties. See mux.txt in this directory. * Standard I2C mux properties. See i2c-mux.txt in this directory.
* I2C child bus nodes. See mux.txt in this directory. * I2C child bus nodes. See i2c-mux.txt in this directory.
Optional properties: Optional properties:
- idle-state: value to set the muxer to when idle. When no value is - idle-state: value to set the muxer to when idle. When no value is
@ -33,7 +33,7 @@ For each i2c child node, an I2C child bus will be created. They will
be numbered based on their order in the device tree. be numbered based on their order in the device tree.
Whenever an access is made to a device on a child bus, the value set Whenever an access is made to a device on a child bus, the value set
in the revelant node's reg property will be output using the list of in the relevant node's reg property will be output using the list of
GPIOs, the first in the list holding the least-significant value. GPIOs, the first in the list holding the least-significant value.
If an idle state is defined, using the idle-state (optional) property, If an idle state is defined, using the idle-state (optional) property,

View File

@ -28,9 +28,9 @@ Also required are:
* Standard pinctrl properties that specify the pin mux state for each child * Standard pinctrl properties that specify the pin mux state for each child
bus. See ../pinctrl/pinctrl-bindings.txt. bus. See ../pinctrl/pinctrl-bindings.txt.
* Standard I2C mux properties. See mux.txt in this directory. * Standard I2C mux properties. See i2c-mux.txt in this directory.
* I2C child bus nodes. See mux.txt in this directory. * I2C child bus nodes. See i2c-mux.txt in this directory.
For each named state defined in the pinctrl-names property, an I2C child bus For each named state defined in the pinctrl-names property, an I2C child bus
will be created. I2C child bus numbers are assigned based on the index into will be created. I2C child bus numbers are assigned based on the index into

View File

@ -7,8 +7,8 @@ Required properties:
- compatible: i2c-mux-reg - compatible: i2c-mux-reg
- i2c-parent: The phandle of the I2C bus that this multiplexer's master-side - i2c-parent: The phandle of the I2C bus that this multiplexer's master-side
port is connected to. port is connected to.
* Standard I2C mux properties. See mux.txt in this directory. * Standard I2C mux properties. See i2c-mux.txt in this directory.
* I2C child bus nodes. See mux.txt in this directory. * I2C child bus nodes. See i2c-mux.txt in this directory.
Optional properties: Optional properties:
- reg: this pair of <offset size> specifies the register to control the mux. - reg: this pair of <offset size> specifies the register to control the mux.
@ -24,7 +24,7 @@ Optional properties:
given, it defaults to the last value used. given, it defaults to the last value used.
Whenever an access is made to a device on a child bus, the value set Whenever an access is made to a device on a child bus, the value set
in the revelant node's reg property will be output to the register. in the relevant node's reg property will be output to the register.
If an idle state is defined, using the idle-state (optional) property, If an idle state is defined, using the idle-state (optional) property,
whenever an access is not being made to a device on a child bus, the whenever an access is not being made to a device on a child bus, the

View File

@ -13,10 +13,10 @@ Optional properties:
initialization. This is an array of 28 values(u8). initialization. This is an array of 28 values(u8).
- marvell,wakeup-pin: It represents wakeup pin number of the bluetooth chip. - marvell,wakeup-pin: It represents wakeup pin number of the bluetooth chip.
firmware will use the pin to wakeup host system. firmware will use the pin to wakeup host system (u16).
- marvell,wakeup-gap-ms: wakeup gap represents wakeup latency of the host - marvell,wakeup-gap-ms: wakeup gap represents wakeup latency of the host
platform. The value will be configured to firmware. This platform. The value will be configured to firmware. This
is needed to work chip's sleep feature as expected. is needed to work chip's sleep feature as expected (u16).
- interrupt-parent: phandle of the parent interrupt controller - interrupt-parent: phandle of the parent interrupt controller
- interrupts : interrupt pin number to the cpu. Driver will request an irq based - interrupts : interrupt pin number to the cpu. Driver will request an irq based
on this interrupt number. During system suspend, the irq will be on this interrupt number. During system suspend, the irq will be
@ -50,7 +50,7 @@ calibration data is also available in below example.
0x37 0x01 0x1c 0x00 0xff 0xff 0xff 0xff 0x01 0x7f 0x04 0x02 0x37 0x01 0x1c 0x00 0xff 0xff 0xff 0xff 0x01 0x7f 0x04 0x02
0x00 0x00 0xba 0xce 0xc0 0xc6 0x2d 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xba 0xce 0xc0 0xc6 0x2d 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0xf0 0x00>; 0x00 0x00 0xf0 0x00>;
marvell,wakeup-pin = <0x0d>; marvell,wakeup-pin = /bits/ 16 <0x0d>;
marvell,wakeup-gap-ms = <0x64>; marvell,wakeup-gap-ms = /bits/ 16 <0x64>;
}; };
}; };

View File

@ -255,6 +255,7 @@ synology Synology, Inc.
SUNW Sun Microsystems, Inc SUNW Sun Microsystems, Inc
tbs TBS Technologies tbs TBS Technologies
tcl Toby Churchill Ltd. tcl Toby Churchill Ltd.
technexion TechNexion
technologic Technologic Systems technologic Technologic Systems
thine THine Electronics, Inc. thine THine Electronics, Inc.
ti Texas Instruments ti Texas Instruments
@ -269,6 +270,7 @@ tronsmart Tronsmart
truly Truly Semiconductors Limited truly Truly Semiconductors Limited
tyan Tyan Computer Corporation tyan Tyan Computer Corporation
upisemi uPI Semiconductor Corp. upisemi uPI Semiconductor Corp.
uniwest United Western Technologies Corp (UniWest)
urt United Radiant Technology Corporation urt United Radiant Technology Corporation
usi Universal Scientific Industrial Co., Ltd. usi Universal Scientific Industrial Co., Ltd.
v3 V3 Semiconductor v3 V3 Semiconductor

View File

@ -74,8 +74,8 @@ blink_set() function (see <linux/leds.h>). To set an LED to blinking,
however, it is better to use the API function led_blink_set(), as it however, it is better to use the API function led_blink_set(), as it
will check and implement software fallback if necessary. will check and implement software fallback if necessary.
To turn off blinking again, use the API function led_brightness_set() To turn off blinking, use the API function led_brightness_set()
as that will not just set the LED brightness but also stop any software with brightness value LED_OFF, which should stop any software
timers that may have been required for blinking. timers that may have been required for blinking.
The blink_set() function should choose a user friendly blinking value The blink_set() function should choose a user friendly blinking value

View File

@ -263,19 +263,23 @@ scmd->allowed.
3. scmd recovered 3. scmd recovered
ACTION: scsi_eh_finish_cmd() is invoked to EH-finish scmd ACTION: scsi_eh_finish_cmd() is invoked to EH-finish scmd
- shost->host_failed--
- clear scmd->eh_eflags - clear scmd->eh_eflags
- scsi_setup_cmd_retry() - scsi_setup_cmd_retry()
- move from local eh_work_q to local eh_done_q - move from local eh_work_q to local eh_done_q
LOCKING: none LOCKING: none
CONCURRENCY: at most one thread per separate eh_work_q to
keep queue manipulation lockless
4. EH completes 4. EH completes
ACTION: scsi_eh_flush_done_q() retries scmds or notifies upper ACTION: scsi_eh_flush_done_q() retries scmds or notifies upper
layer of failure. layer of failure. May be called concurrently but must have
a no more than one thread per separate eh_work_q to
manipulate the queue locklessly
- scmd is removed from eh_done_q and scmd->eh_entry is cleared - scmd is removed from eh_done_q and scmd->eh_entry is cleared
- if retry is necessary, scmd is requeued using - if retry is necessary, scmd is requeued using
scsi_queue_insert() scsi_queue_insert()
- otherwise, scsi_finish_command() is invoked for scmd - otherwise, scsi_finish_command() is invoked for scmd
- zero shost->host_failed
LOCKING: queue or finish function performs appropriate locking LOCKING: queue or finish function performs appropriate locking

View File

@ -595,6 +595,10 @@ S: Odd Fixes
L: linux-alpha@vger.kernel.org L: linux-alpha@vger.kernel.org
F: arch/alpha/ F: arch/alpha/
ALPS PS/2 TOUCHPAD DRIVER
R: Pali Rohár <pali.rohar@gmail.com>
F: drivers/input/mouse/alps.*
ALTERA MAILBOX DRIVER ALTERA MAILBOX DRIVER
M: Ley Foon Tan <lftan@altera.com> M: Ley Foon Tan <lftan@altera.com>
L: nios2-dev@lists.rocketboards.org (moderated for non-subscribers) L: nios2-dev@lists.rocketboards.org (moderated for non-subscribers)
@ -1159,6 +1163,7 @@ F: arch/arm/mach-footbridge/
ARM/FREESCALE IMX / MXC ARM ARCHITECTURE ARM/FREESCALE IMX / MXC ARM ARCHITECTURE
M: Shawn Guo <shawnguo@kernel.org> M: Shawn Guo <shawnguo@kernel.org>
M: Sascha Hauer <kernel@pengutronix.de> M: Sascha Hauer <kernel@pengutronix.de>
R: Fabio Estevam <fabio.estevam@nxp.com>
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
S: Maintained S: Maintained
T: git git://git.kernel.org/pub/scm/linux/kernel/git/shawnguo/linux.git T: git git://git.kernel.org/pub/scm/linux/kernel/git/shawnguo/linux.git
@ -2242,7 +2247,8 @@ F: include/net/ax25.h
F: net/ax25/ F: net/ax25/
AZ6007 DVB DRIVER AZ6007 DVB DRIVER
M: Mauro Carvalho Chehab <mchehab@osg.samsung.com> M: Mauro Carvalho Chehab <mchehab@s-opensource.com>
M: Mauro Carvalho Chehab <mchehab@kernel.org>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: https://linuxtv.org W: https://linuxtv.org
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
@ -2716,7 +2722,8 @@ F: Documentation/filesystems/btrfs.txt
F: fs/btrfs/ F: fs/btrfs/
BTTV VIDEO4LINUX DRIVER BTTV VIDEO4LINUX DRIVER
M: Mauro Carvalho Chehab <mchehab@osg.samsung.com> M: Mauro Carvalho Chehab <mchehab@s-opensource.com>
M: Mauro Carvalho Chehab <mchehab@kernel.org>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: https://linuxtv.org W: https://linuxtv.org
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
@ -2780,9 +2787,9 @@ F: include/net/caif/
F: net/caif/ F: net/caif/
CALGARY x86-64 IOMMU CALGARY x86-64 IOMMU
M: Muli Ben-Yehuda <muli@il.ibm.com> M: Muli Ben-Yehuda <mulix@mulix.org>
M: "Jon D. Mason" <jdmason@kudzu.us> M: Jon Mason <jdmason@kudzu.us>
L: discuss@x86-64.org L: iommu@lists.linux-foundation.org
S: Maintained S: Maintained
F: arch/x86/kernel/pci-calgary_64.c F: arch/x86/kernel/pci-calgary_64.c
F: arch/x86/kernel/tce_64.c F: arch/x86/kernel/tce_64.c
@ -3352,7 +3359,8 @@ S: Maintained
F: drivers/media/dvb-frontends/cx24120* F: drivers/media/dvb-frontends/cx24120*
CX88 VIDEO4LINUX DRIVER CX88 VIDEO4LINUX DRIVER
M: Mauro Carvalho Chehab <mchehab@osg.samsung.com> M: Mauro Carvalho Chehab <mchehab@s-opensource.com>
M: Mauro Carvalho Chehab <mchehab@kernel.org>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: https://linuxtv.org W: https://linuxtv.org
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
@ -3782,6 +3790,7 @@ Q: https://patchwork.kernel.org/project/linux-dmaengine/list/
S: Maintained S: Maintained
F: drivers/dma/ F: drivers/dma/
F: include/linux/dmaengine.h F: include/linux/dmaengine.h
F: Documentation/devicetree/bindings/dma/
F: Documentation/dmaengine/ F: Documentation/dmaengine/
T: git git://git.infradead.org/users/vkoul/slave-dma.git T: git git://git.infradead.org/users/vkoul/slave-dma.git
@ -4299,7 +4308,8 @@ F: fs/ecryptfs/
EDAC-CORE EDAC-CORE
M: Doug Thompson <dougthompson@xmission.com> M: Doug Thompson <dougthompson@xmission.com>
M: Borislav Petkov <bp@alien8.de> M: Borislav Petkov <bp@alien8.de>
M: Mauro Carvalho Chehab <mchehab@osg.samsung.com> M: Mauro Carvalho Chehab <mchehab@s-opensource.com>
M: Mauro Carvalho Chehab <mchehab@kernel.org>
L: linux-edac@vger.kernel.org L: linux-edac@vger.kernel.org
T: git git://git.kernel.org/pub/scm/linux/kernel/git/bp/bp.git for-next T: git git://git.kernel.org/pub/scm/linux/kernel/git/bp/bp.git for-next
T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-edac.git linux_next T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-edac.git linux_next
@ -4344,7 +4354,8 @@ S: Maintained
F: drivers/edac/e7xxx_edac.c F: drivers/edac/e7xxx_edac.c
EDAC-GHES EDAC-GHES
M: Mauro Carvalho Chehab <mchehab@osg.samsung.com> M: Mauro Carvalho Chehab <mchehab@s-opensource.com>
M: Mauro Carvalho Chehab <mchehab@kernel.org>
L: linux-edac@vger.kernel.org L: linux-edac@vger.kernel.org
S: Maintained S: Maintained
F: drivers/edac/ghes_edac.c F: drivers/edac/ghes_edac.c
@ -4368,19 +4379,22 @@ S: Maintained
F: drivers/edac/i5000_edac.c F: drivers/edac/i5000_edac.c
EDAC-I5400 EDAC-I5400
M: Mauro Carvalho Chehab <mchehab@osg.samsung.com> M: Mauro Carvalho Chehab <mchehab@s-opensource.com>
M: Mauro Carvalho Chehab <mchehab@kernel.org>
L: linux-edac@vger.kernel.org L: linux-edac@vger.kernel.org
S: Maintained S: Maintained
F: drivers/edac/i5400_edac.c F: drivers/edac/i5400_edac.c
EDAC-I7300 EDAC-I7300
M: Mauro Carvalho Chehab <mchehab@osg.samsung.com> M: Mauro Carvalho Chehab <mchehab@s-opensource.com>
M: Mauro Carvalho Chehab <mchehab@kernel.org>
L: linux-edac@vger.kernel.org L: linux-edac@vger.kernel.org
S: Maintained S: Maintained
F: drivers/edac/i7300_edac.c F: drivers/edac/i7300_edac.c
EDAC-I7CORE EDAC-I7CORE
M: Mauro Carvalho Chehab <mchehab@osg.samsung.com> M: Mauro Carvalho Chehab <mchehab@s-opensource.com>
M: Mauro Carvalho Chehab <mchehab@kernel.org>
L: linux-edac@vger.kernel.org L: linux-edac@vger.kernel.org
S: Maintained S: Maintained
F: drivers/edac/i7core_edac.c F: drivers/edac/i7core_edac.c
@ -4417,7 +4431,8 @@ S: Maintained
F: drivers/edac/r82600_edac.c F: drivers/edac/r82600_edac.c
EDAC-SBRIDGE EDAC-SBRIDGE
M: Mauro Carvalho Chehab <mchehab@osg.samsung.com> M: Mauro Carvalho Chehab <mchehab@s-opensource.com>
M: Mauro Carvalho Chehab <mchehab@kernel.org>
L: linux-edac@vger.kernel.org L: linux-edac@vger.kernel.org
S: Maintained S: Maintained
F: drivers/edac/sb_edac.c F: drivers/edac/sb_edac.c
@ -4476,7 +4491,8 @@ S: Maintained
F: drivers/net/ethernet/ibm/ehea/ F: drivers/net/ethernet/ibm/ehea/
EM28XX VIDEO4LINUX DRIVER EM28XX VIDEO4LINUX DRIVER
M: Mauro Carvalho Chehab <mchehab@osg.samsung.com> M: Mauro Carvalho Chehab <mchehab@s-opensource.com>
M: Mauro Carvalho Chehab <mchehab@kernel.org>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: https://linuxtv.org W: https://linuxtv.org
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
@ -6502,6 +6518,7 @@ F: include/uapi/linux/sunrpc/
KERNEL SELFTEST FRAMEWORK KERNEL SELFTEST FRAMEWORK
M: Shuah Khan <shuahkh@osg.samsung.com> M: Shuah Khan <shuahkh@osg.samsung.com>
M: Shuah Khan <shuah@kernel.org>
L: linux-kselftest@vger.kernel.org L: linux-kselftest@vger.kernel.org
T: git git://git.kernel.org/pub/scm/shuah/linux-kselftest T: git git://git.kernel.org/pub/scm/shuah/linux-kselftest
S: Maintained S: Maintained
@ -7374,7 +7391,8 @@ S: Supported
F: drivers/media/pci/netup_unidvb/* F: drivers/media/pci/netup_unidvb/*
MEDIA INPUT INFRASTRUCTURE (V4L/DVB) MEDIA INPUT INFRASTRUCTURE (V4L/DVB)
M: Mauro Carvalho Chehab <mchehab@osg.samsung.com> M: Mauro Carvalho Chehab <mchehab@s-opensource.com>
M: Mauro Carvalho Chehab <mchehab@kernel.org>
P: LinuxTV.org Project P: LinuxTV.org Project
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: https://linuxtv.org W: https://linuxtv.org
@ -7422,7 +7440,7 @@ F: drivers/scsi/megaraid.*
F: drivers/scsi/megaraid/ F: drivers/scsi/megaraid/
MELLANOX ETHERNET DRIVER (mlx4_en) MELLANOX ETHERNET DRIVER (mlx4_en)
M: Eugenia Emantayev <eugenia@mellanox.com> M: Tariq Toukan <tariqt@mellanox.com>
L: netdev@vger.kernel.org L: netdev@vger.kernel.org
S: Supported S: Supported
W: http://www.mellanox.com W: http://www.mellanox.com
@ -8423,10 +8441,9 @@ F: drivers/i2c/busses/i2c-ocores.c
OPEN FIRMWARE AND FLATTENED DEVICE TREE OPEN FIRMWARE AND FLATTENED DEVICE TREE
M: Rob Herring <robh+dt@kernel.org> M: Rob Herring <robh+dt@kernel.org>
M: Frank Rowand <frowand.list@gmail.com> M: Frank Rowand <frowand.list@gmail.com>
M: Grant Likely <grant.likely@linaro.org>
L: devicetree@vger.kernel.org L: devicetree@vger.kernel.org
W: http://www.devicetree.org/ W: http://www.devicetree.org/
T: git git://git.kernel.org/pub/scm/linux/kernel/git/glikely/linux.git T: git git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git
S: Maintained S: Maintained
F: drivers/of/ F: drivers/of/
F: include/linux/of*.h F: include/linux/of*.h
@ -8434,12 +8451,10 @@ F: scripts/dtc/
OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS
M: Rob Herring <robh+dt@kernel.org> M: Rob Herring <robh+dt@kernel.org>
M: Pawel Moll <pawel.moll@arm.com>
M: Mark Rutland <mark.rutland@arm.com> M: Mark Rutland <mark.rutland@arm.com>
M: Ian Campbell <ijc+devicetree@hellion.org.uk>
M: Kumar Gala <galak@codeaurora.org>
L: devicetree@vger.kernel.org L: devicetree@vger.kernel.org
T: git git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git T: git git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git
Q: http://patchwork.ozlabs.org/project/devicetree-bindings/list/
S: Maintained S: Maintained
F: Documentation/devicetree/ F: Documentation/devicetree/
F: arch/*/boot/dts/ F: arch/*/boot/dts/
@ -8964,6 +8979,7 @@ L: linux-gpio@vger.kernel.org
T: git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl.git T: git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl.git
S: Maintained S: Maintained
F: Documentation/devicetree/bindings/pinctrl/ F: Documentation/devicetree/bindings/pinctrl/
F: Documentation/pinctrl.txt
F: drivers/pinctrl/ F: drivers/pinctrl/
F: include/linux/pinctrl/ F: include/linux/pinctrl/
@ -9871,7 +9887,8 @@ S: Odd Fixes
F: drivers/media/i2c/saa6588* F: drivers/media/i2c/saa6588*
SAA7134 VIDEO4LINUX DRIVER SAA7134 VIDEO4LINUX DRIVER
M: Mauro Carvalho Chehab <mchehab@osg.samsung.com> M: Mauro Carvalho Chehab <mchehab@s-opensource.com>
M: Mauro Carvalho Chehab <mchehab@kernel.org>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: https://linuxtv.org W: https://linuxtv.org
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
@ -10389,7 +10406,8 @@ S: Maintained
F: drivers/media/radio/si4713/radio-usb-si4713.c F: drivers/media/radio/si4713/radio-usb-si4713.c
SIANO DVB DRIVER SIANO DVB DRIVER
M: Mauro Carvalho Chehab <mchehab@osg.samsung.com> M: Mauro Carvalho Chehab <mchehab@s-opensource.com>
M: Mauro Carvalho Chehab <mchehab@kernel.org>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: https://linuxtv.org W: https://linuxtv.org
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
@ -11155,7 +11173,8 @@ S: Maintained
F: drivers/media/i2c/tda9840* F: drivers/media/i2c/tda9840*
TEA5761 TUNER DRIVER TEA5761 TUNER DRIVER
M: Mauro Carvalho Chehab <mchehab@osg.samsung.com> M: Mauro Carvalho Chehab <mchehab@s-opensource.com>
M: Mauro Carvalho Chehab <mchehab@kernel.org>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: https://linuxtv.org W: https://linuxtv.org
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
@ -11163,7 +11182,8 @@ S: Odd fixes
F: drivers/media/tuners/tea5761.* F: drivers/media/tuners/tea5761.*
TEA5767 TUNER DRIVER TEA5767 TUNER DRIVER
M: Mauro Carvalho Chehab <mchehab@osg.samsung.com> M: Mauro Carvalho Chehab <mchehab@s-opensource.com>
M: Mauro Carvalho Chehab <mchehab@kernel.org>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: https://linuxtv.org W: https://linuxtv.org
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
@ -11550,7 +11570,8 @@ F: include/linux/shmem_fs.h
F: mm/shmem.c F: mm/shmem.c
TM6000 VIDEO4LINUX DRIVER TM6000 VIDEO4LINUX DRIVER
M: Mauro Carvalho Chehab <mchehab@osg.samsung.com> M: Mauro Carvalho Chehab <mchehab@s-opensource.com>
M: Mauro Carvalho Chehab <mchehab@kernel.org>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: https://linuxtv.org W: https://linuxtv.org
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git
@ -11904,7 +11925,8 @@ F: drivers/usb/common/usb-otg-fsm.c
USB OVER IP DRIVER USB OVER IP DRIVER
M: Valentina Manea <valentina.manea.m@gmail.com> M: Valentina Manea <valentina.manea.m@gmail.com>
M: Shuah Khan <shuah.kh@samsung.com> M: Shuah Khan <shuahkh@osg.samsung.com>
M: Shuah Khan <shuah@kernel.org>
L: linux-usb@vger.kernel.org L: linux-usb@vger.kernel.org
S: Maintained S: Maintained
F: Documentation/usb/usbip_protocol.txt F: Documentation/usb/usbip_protocol.txt
@ -11975,6 +11997,7 @@ L: linux-usb@vger.kernel.org
W: http://www.linux-usb.org W: http://www.linux-usb.org
T: git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git T: git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git
S: Supported S: Supported
F: Documentation/devicetree/bindings/usb/
F: Documentation/usb/ F: Documentation/usb/
F: drivers/usb/ F: drivers/usb/
F: include/linux/usb.h F: include/linux/usb.h
@ -12148,6 +12171,7 @@ VIRTIO CORE, NET AND BLOCK DRIVERS
M: "Michael S. Tsirkin" <mst@redhat.com> M: "Michael S. Tsirkin" <mst@redhat.com>
L: virtualization@lists.linux-foundation.org L: virtualization@lists.linux-foundation.org
S: Maintained S: Maintained
F: Documentation/devicetree/bindings/virtio/
F: drivers/virtio/ F: drivers/virtio/
F: tools/virtio/ F: tools/virtio/
F: drivers/net/virtio_net.c F: drivers/net/virtio_net.c
@ -12536,7 +12560,8 @@ S: Maintained
F: arch/x86/entry/vdso/ F: arch/x86/entry/vdso/
XC2028/3028 TUNER DRIVER XC2028/3028 TUNER DRIVER
M: Mauro Carvalho Chehab <mchehab@osg.samsung.com> M: Mauro Carvalho Chehab <mchehab@s-opensource.com>
M: Mauro Carvalho Chehab <mchehab@kernel.org>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
W: https://linuxtv.org W: https://linuxtv.org
T: git git://linuxtv.org/media_tree.git T: git git://linuxtv.org/media_tree.git

View File

@ -1,7 +1,7 @@
VERSION = 4 VERSION = 4
PATCHLEVEL = 7 PATCHLEVEL = 7
SUBLEVEL = 0 SUBLEVEL = 0
EXTRAVERSION = -rc2 EXTRAVERSION = -rc5
NAME = Psychotic Stoned Sheep NAME = Psychotic Stoned Sheep
# *DOCUMENTATION* # *DOCUMENTATION*
@ -363,11 +363,13 @@ CHECK = sparse
CHECKFLAGS := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ \ CHECKFLAGS := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ \
-Wbitwise -Wno-return-void $(CF) -Wbitwise -Wno-return-void $(CF)
NOSTDINC_FLAGS =
CFLAGS_MODULE = CFLAGS_MODULE =
AFLAGS_MODULE = AFLAGS_MODULE =
LDFLAGS_MODULE = LDFLAGS_MODULE =
CFLAGS_KERNEL = CFLAGS_KERNEL =
AFLAGS_KERNEL = AFLAGS_KERNEL =
LDFLAGS_vmlinux =
CFLAGS_GCOV = -fprofile-arcs -ftest-coverage -fno-tree-loop-im -Wno-maybe-uninitialized CFLAGS_GCOV = -fprofile-arcs -ftest-coverage -fno-tree-loop-im -Wno-maybe-uninitialized
CFLAGS_KCOV = -fsanitize-coverage=trace-pc CFLAGS_KCOV = -fsanitize-coverage=trace-pc

View File

@ -226,8 +226,8 @@ config ARCH_INIT_TASK
config ARCH_TASK_STRUCT_ALLOCATOR config ARCH_TASK_STRUCT_ALLOCATOR
bool bool
# Select if arch has its private alloc_thread_info() function # Select if arch has its private alloc_thread_stack() function
config ARCH_THREAD_INFO_ALLOCATOR config ARCH_THREAD_STACK_ALLOCATOR
bool bool
# Select if arch wants to size task_struct dynamically via arch_task_struct_size: # Select if arch wants to size task_struct dynamically via arch_task_struct_size:
@ -606,6 +606,9 @@ config HAVE_ARCH_HASH
file which provides platform-specific implementations of some file which provides platform-specific implementations of some
functions in <linux/hash.h> or fs/namei.c. functions in <linux/hash.h> or fs/namei.c.
config ISA_BUS_API
def_bool ISA
# #
# ABI hall of shame # ABI hall of shame
# #

View File

@ -40,7 +40,7 @@ pgd_free(struct mm_struct *mm, pgd_t *pgd)
static inline pmd_t * static inline pmd_t *
pmd_alloc_one(struct mm_struct *mm, unsigned long address) pmd_alloc_one(struct mm_struct *mm, unsigned long address)
{ {
pmd_t *ret = (pmd_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO); pmd_t *ret = (pmd_t *)__get_free_page(GFP_KERNEL|__GFP_ZERO);
return ret; return ret;
} }
@ -53,7 +53,7 @@ pmd_free(struct mm_struct *mm, pmd_t *pmd)
static inline pte_t * static inline pte_t *
pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address) pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address)
{ {
pte_t *pte = (pte_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO); pte_t *pte = (pte_t *)__get_free_page(GFP_KERNEL|__GFP_ZERO);
return pte; return pte;
} }

View File

@ -95,7 +95,7 @@ static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm,
{ {
pte_t *pte; pte_t *pte;
pte = (pte_t *) __get_free_pages(GFP_KERNEL | __GFP_REPEAT | __GFP_ZERO, pte = (pte_t *) __get_free_pages(GFP_KERNEL | __GFP_ZERO,
__get_order_pte()); __get_order_pte());
return pte; return pte;
@ -107,7 +107,7 @@ pte_alloc_one(struct mm_struct *mm, unsigned long address)
pgtable_t pte_pg; pgtable_t pte_pg;
struct page *page; struct page *page;
pte_pg = (pgtable_t)__get_free_pages(GFP_KERNEL | __GFP_REPEAT, __get_order_pte()); pte_pg = (pgtable_t)__get_free_pages(GFP_KERNEL, __get_order_pte());
if (!pte_pg) if (!pte_pg)
return 0; return 0;
memzero((void *)pte_pg, PTRS_PER_PTE * sizeof(pte_t)); memzero((void *)pte_pg, PTRS_PER_PTE * sizeof(pte_t));

View File

@ -741,6 +741,7 @@ dtb-$(CONFIG_MACH_SUN7I) += \
sun7i-a20-olimex-som-evb.dtb \ sun7i-a20-olimex-som-evb.dtb \
sun7i-a20-olinuxino-lime.dtb \ sun7i-a20-olinuxino-lime.dtb \
sun7i-a20-olinuxino-lime2.dtb \ sun7i-a20-olinuxino-lime2.dtb \
sun7i-a20-olinuxino-lime2-emmc.dtb \
sun7i-a20-olinuxino-micro.dtb \ sun7i-a20-olinuxino-micro.dtb \
sun7i-a20-orangepi.dtb \ sun7i-a20-orangepi.dtb \
sun7i-a20-orangepi-mini.dtb \ sun7i-a20-orangepi-mini.dtb \

View File

@ -418,7 +418,7 @@ &i2c0 {
status = "okay"; status = "okay";
pinctrl-names = "default"; pinctrl-names = "default";
pinctrl-0 = <&i2c0_pins>; pinctrl-0 = <&i2c0_pins>;
clock-frequency = <400000>; clock-frequency = <100000>;
tps@24 { tps@24 {
compatible = "ti,tps65218"; compatible = "ti,tps65218";

View File

@ -60,10 +60,26 @@ tps659038: tps659038@58 {
tps659038_pmic { tps659038_pmic {
compatible = "ti,tps659038-pmic"; compatible = "ti,tps659038-pmic";
smps12-in-supply = <&vmain>;
smps3-in-supply = <&vmain>;
smps45-in-supply = <&vmain>;
smps6-in-supply = <&vmain>;
smps7-in-supply = <&vmain>;
smps8-in-supply = <&vmain>;
smps9-in-supply = <&vmain>;
ldo1-in-supply = <&vmain>;
ldo2-in-supply = <&vmain>;
ldo3-in-supply = <&vmain>;
ldo4-in-supply = <&vmain>;
ldo9-in-supply = <&vmain>;
ldoln-in-supply = <&vmain>;
ldousb-in-supply = <&vmain>;
ldortc-in-supply = <&vmain>;
regulators { regulators {
smps12_reg: smps12 { smps12_reg: smps12 {
/* VDD_MPU */ /* VDD_MPU */
vin-supply = <&vmain>;
regulator-name = "smps12"; regulator-name = "smps12";
regulator-min-microvolt = <850000>; regulator-min-microvolt = <850000>;
regulator-max-microvolt = <1250000>; regulator-max-microvolt = <1250000>;
@ -73,7 +89,6 @@ smps12_reg: smps12 {
smps3_reg: smps3 { smps3_reg: smps3 {
/* VDD_DDR EMIF1 EMIF2 */ /* VDD_DDR EMIF1 EMIF2 */
vin-supply = <&vmain>;
regulator-name = "smps3"; regulator-name = "smps3";
regulator-min-microvolt = <1350000>; regulator-min-microvolt = <1350000>;
regulator-max-microvolt = <1350000>; regulator-max-microvolt = <1350000>;
@ -84,7 +99,6 @@ smps3_reg: smps3 {
smps45_reg: smps45 { smps45_reg: smps45 {
/* VDD_DSPEVE on AM572 */ /* VDD_DSPEVE on AM572 */
/* VDD_IVA + VDD_DSP on AM571 */ /* VDD_IVA + VDD_DSP on AM571 */
vin-supply = <&vmain>;
regulator-name = "smps45"; regulator-name = "smps45";
regulator-min-microvolt = <850000>; regulator-min-microvolt = <850000>;
regulator-max-microvolt = <1250000>; regulator-max-microvolt = <1250000>;
@ -94,7 +108,6 @@ smps45_reg: smps45 {
smps6_reg: smps6 { smps6_reg: smps6 {
/* VDD_GPU */ /* VDD_GPU */
vin-supply = <&vmain>;
regulator-name = "smps6"; regulator-name = "smps6";
regulator-min-microvolt = <850000>; regulator-min-microvolt = <850000>;
regulator-max-microvolt = <1250000>; regulator-max-microvolt = <1250000>;
@ -104,7 +117,6 @@ smps6_reg: smps6 {
smps7_reg: smps7 { smps7_reg: smps7 {
/* VDD_CORE */ /* VDD_CORE */
vin-supply = <&vmain>;
regulator-name = "smps7"; regulator-name = "smps7";
regulator-min-microvolt = <850000>; regulator-min-microvolt = <850000>;
regulator-max-microvolt = <1150000>; regulator-max-microvolt = <1150000>;
@ -115,13 +127,11 @@ smps7_reg: smps7 {
smps8_reg: smps8 { smps8_reg: smps8 {
/* 5728 - VDD_IVAHD */ /* 5728 - VDD_IVAHD */
/* 5718 - N.C. test point */ /* 5718 - N.C. test point */
vin-supply = <&vmain>;
regulator-name = "smps8"; regulator-name = "smps8";
}; };
smps9_reg: smps9 { smps9_reg: smps9 {
/* VDD_3_3D */ /* VDD_3_3D */
vin-supply = <&vmain>;
regulator-name = "smps9"; regulator-name = "smps9";
regulator-min-microvolt = <3300000>; regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>; regulator-max-microvolt = <3300000>;
@ -132,7 +142,6 @@ smps9_reg: smps9 {
ldo1_reg: ldo1 { ldo1_reg: ldo1 {
/* VDDSHV8 - VSDMMC */ /* VDDSHV8 - VSDMMC */
/* NOTE: on rev 1.3a, data supply */ /* NOTE: on rev 1.3a, data supply */
vin-supply = <&vmain>;
regulator-name = "ldo1"; regulator-name = "ldo1";
regulator-min-microvolt = <1800000>; regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <3300000>; regulator-max-microvolt = <3300000>;
@ -142,7 +151,6 @@ ldo1_reg: ldo1 {
ldo2_reg: ldo2 { ldo2_reg: ldo2 {
/* VDDSH18V */ /* VDDSH18V */
vin-supply = <&vmain>;
regulator-name = "ldo2"; regulator-name = "ldo2";
regulator-min-microvolt = <1800000>; regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>; regulator-max-microvolt = <1800000>;
@ -152,7 +160,6 @@ ldo2_reg: ldo2 {
ldo3_reg: ldo3 { ldo3_reg: ldo3 {
/* R1.3a 572x V1_8PHY_LDO3: USB, SATA */ /* R1.3a 572x V1_8PHY_LDO3: USB, SATA */
vin-supply = <&vmain>;
regulator-name = "ldo3"; regulator-name = "ldo3";
regulator-min-microvolt = <1800000>; regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>; regulator-max-microvolt = <1800000>;
@ -162,7 +169,6 @@ ldo3_reg: ldo3 {
ldo4_reg: ldo4 { ldo4_reg: ldo4 {
/* R1.3a 572x V1_8PHY_LDO4: PCIE, HDMI*/ /* R1.3a 572x V1_8PHY_LDO4: PCIE, HDMI*/
vin-supply = <&vmain>;
regulator-name = "ldo4"; regulator-name = "ldo4";
regulator-min-microvolt = <1800000>; regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>; regulator-max-microvolt = <1800000>;
@ -174,7 +180,6 @@ ldo4_reg: ldo4 {
ldo9_reg: ldo9 { ldo9_reg: ldo9 {
/* VDD_RTC */ /* VDD_RTC */
vin-supply = <&vmain>;
regulator-name = "ldo9"; regulator-name = "ldo9";
regulator-min-microvolt = <840000>; regulator-min-microvolt = <840000>;
regulator-max-microvolt = <1160000>; regulator-max-microvolt = <1160000>;
@ -184,7 +189,6 @@ ldo9_reg: ldo9 {
ldoln_reg: ldoln { ldoln_reg: ldoln {
/* VDDA_1V8_PLL */ /* VDDA_1V8_PLL */
vin-supply = <&vmain>;
regulator-name = "ldoln"; regulator-name = "ldoln";
regulator-min-microvolt = <1800000>; regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>; regulator-max-microvolt = <1800000>;
@ -194,7 +198,6 @@ ldoln_reg: ldoln {
ldousb_reg: ldousb { ldousb_reg: ldousb {
/* VDDA_3V_USB: VDDA_USBHS33 */ /* VDDA_3V_USB: VDDA_USBHS33 */
vin-supply = <&vmain>;
regulator-name = "ldousb"; regulator-name = "ldousb";
regulator-min-microvolt = <3300000>; regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>; regulator-max-microvolt = <3300000>;
@ -204,7 +207,6 @@ ldousb_reg: ldousb {
ldortc_reg: ldortc { ldortc_reg: ldortc {
/* VDDA_RTC */ /* VDDA_RTC */
vin-supply = <&vmain>;
regulator-name = "ldortc"; regulator-name = "ldortc";
regulator-min-microvolt = <1800000>; regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>; regulator-max-microvolt = <1800000>;

View File

@ -93,6 +93,10 @@ partition@0x780000 {
}; };
}; };
&mmc1 {
status = "disabled";
};
&mmc2 { &mmc2 {
pinctrl-names = "default"; pinctrl-names = "default";
pinctrl-0 = <&sd1_pins>; pinctrl-0 = <&sd1_pins>;
@ -101,6 +105,10 @@ &mmc2 {
cd-gpios = <&gpio2 6 GPIO_ACTIVE_LOW>; cd-gpios = <&gpio2 6 GPIO_ACTIVE_LOW>;
}; };
&mmc3 {
status = "disabled";
};
&pincntl { &pincntl {
sd1_pins: pinmux_sd1_pins { sd1_pins: pinmux_sd1_pins {
pinctrl-single,pins = < pinctrl-single,pins = <

View File

@ -45,6 +45,14 @@ &cpsw_emac1 {
phy-mode = "rgmii"; phy-mode = "rgmii";
}; };
&mmc1 {
status = "disabled";
};
&mmc2 {
status = "disabled";
};
&mmc3 { &mmc3 {
pinctrl-names = "default"; pinctrl-names = "default";
pinctrl-0 = <&sd2_pins>; pinctrl-0 = <&sd2_pins>;
@ -53,6 +61,7 @@ &mmc3 {
dmas = <&edma_xbar 8 0 1 /* use SDTXEVT1 instead of MCASP0TX */ dmas = <&edma_xbar 8 0 1 /* use SDTXEVT1 instead of MCASP0TX */
&edma_xbar 9 0 2>; /* use SDRXEVT1 instead of MCASP0RX */ &edma_xbar 9 0 2>; /* use SDRXEVT1 instead of MCASP0RX */
dma-names = "tx", "rx"; dma-names = "tx", "rx";
non-removable;
}; };
&pincntl { &pincntl {

View File

@ -1451,6 +1451,8 @@ gpmc: gpmc@50000000 {
ti,hwmods = "gpmc"; ti,hwmods = "gpmc";
reg = <0x50000000 0x37c>; /* device IO registers */ reg = <0x50000000 0x37c>; /* device IO registers */
interrupts = <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>; interrupts = <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>;
dmas = <&edma_xbar 4 0>;
dma-names = "rxtx";
gpmc,num-cs = <8>; gpmc,num-cs = <8>;
gpmc,num-waitpins = <2>; gpmc,num-waitpins = <2>;
#address-cells = <2>; #address-cells = <2>;

View File

@ -107,8 +107,8 @@ &dss {
reg = <0x58000000 0x80>, reg = <0x58000000 0x80>,
<0x58004054 0x4>, <0x58004054 0x4>,
<0x58004300 0x20>, <0x58004300 0x20>,
<0x58005054 0x4>, <0x58009054 0x4>,
<0x58005300 0x20>; <0x58009300 0x20>;
reg-names = "dss", "pll1_clkctrl", "pll1", reg-names = "dss", "pll1_clkctrl", "pll1",
"pll2_clkctrl", "pll2"; "pll2_clkctrl", "pll2";

View File

@ -242,7 +242,7 @@ &dp {
hpd-gpios = <&gpx0 7 GPIO_ACTIVE_HIGH>; hpd-gpios = <&gpx0 7 GPIO_ACTIVE_HIGH>;
ports { ports {
port0 { port {
dp_out: endpoint { dp_out: endpoint {
remote-endpoint = <&bridge_in>; remote-endpoint = <&bridge_in>;
}; };
@ -485,13 +485,20 @@ ptn3460: lvds-bridge@20 {
edid-emulation = <5>; edid-emulation = <5>;
ports { ports {
port0 { #address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
bridge_out: endpoint { bridge_out: endpoint {
remote-endpoint = <&panel_in>; remote-endpoint = <&panel_in>;
}; };
}; };
port1 { port@1 {
reg = <1>;
bridge_in: endpoint { bridge_in: endpoint {
remote-endpoint = <&dp_out>; remote-endpoint = <&dp_out>;
}; };

View File

@ -163,7 +163,7 @@ &dp {
hpd-gpios = <&gpx2 6 GPIO_ACTIVE_HIGH>; hpd-gpios = <&gpx2 6 GPIO_ACTIVE_HIGH>;
ports { ports {
port0 { port {
dp_out: endpoint { dp_out: endpoint {
remote-endpoint = <&bridge_in>; remote-endpoint = <&bridge_in>;
}; };
@ -631,13 +631,20 @@ ps8625: lvds-bridge@48 {
use-external-pwm; use-external-pwm;
ports { ports {
port0 { #address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
bridge_out: endpoint { bridge_out: endpoint {
remote-endpoint = <&panel_in>; remote-endpoint = <&panel_in>;
}; };
}; };
port1 { port@1 {
reg = <1>;
bridge_in: endpoint { bridge_in: endpoint {
remote-endpoint = <&dp_out>; remote-endpoint = <&dp_out>;
}; };

View File

@ -85,7 +85,7 @@ mmc2_pins: pinmux_mmc2_pins {
OMAP3_CORE1_IOPAD(0x2158, PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_clk.sdmmc2_clk */ OMAP3_CORE1_IOPAD(0x2158, PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_clk.sdmmc2_clk */
OMAP3_CORE1_IOPAD(0x215a, PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_cmd.sdmmc2_cmd */ OMAP3_CORE1_IOPAD(0x215a, PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_cmd.sdmmc2_cmd */
OMAP3_CORE1_IOPAD(0x215c, PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_dat0.sdmmc2_dat0 */ OMAP3_CORE1_IOPAD(0x215c, PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_dat0.sdmmc2_dat0 */
OMAP3_CORE1_IOPAD(0x215e, WAKEUP_EN | PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_dat1.sdmmc2_dat1 */ OMAP3_CORE1_IOPAD(0x215e, PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_dat1.sdmmc2_dat1 */
OMAP3_CORE1_IOPAD(0x2160, PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_dat2.sdmmc2_dat2 */ OMAP3_CORE1_IOPAD(0x2160, PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_dat2.sdmmc2_dat2 */
OMAP3_CORE1_IOPAD(0x2162, PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_dat3.sdmmc2_dat3 */ OMAP3_CORE1_IOPAD(0x2162, PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_dat3.sdmmc2_dat3 */
>; >;

View File

@ -188,6 +188,7 @@ &mmc1 {
vmmc-supply = <&vmmc1>; vmmc-supply = <&vmmc1>;
vmmc_aux-supply = <&vsim>; vmmc_aux-supply = <&vsim>;
bus-width = <4>; bus-width = <4>;
cd-gpios = <&twl_gpio 0 GPIO_ACTIVE_LOW>;
}; };
&mmc3 { &mmc3 {

View File

@ -194,6 +194,12 @@ OMAP3630_CORE2_IOPAD(0x25f6, PIN_OUTPUT | MUX_MODE4) /* etk_d13.gpio_27 */
OMAP3630_CORE2_IOPAD(0x25f8, PIN_OUTPUT | MUX_MODE4) /* etk_d14.gpio_28 */ OMAP3630_CORE2_IOPAD(0x25f8, PIN_OUTPUT | MUX_MODE4) /* etk_d14.gpio_28 */
>; >;
}; };
mmc1_wp_pins: pinmux_mmc1_cd_pins {
pinctrl-single,pins = <
OMAP3630_CORE2_IOPAD(0x25fa, PIN_INPUT | MUX_MODE4) /* etk_d15.gpio_29 */
>;
};
}; };
&i2c3 { &i2c3 {
@ -250,3 +256,8 @@ dpi_out: endpoint {
}; };
}; };
}; };
&mmc1 {
pinctrl-0 = <&mmc1_pins &mmc1_wp_pins>;
wp-gpios = <&gpio1 29 GPIO_ACTIVE_LOW>; /* gpio_29 */
};

View File

@ -288,7 +288,7 @@ ssi_pins: pinmux_ssi {
pinctrl-single,pins = < pinctrl-single,pins = <
OMAP3_CORE1_IOPAD(0x2180, PIN_INPUT_PULLUP | MUX_MODE1) /* ssi1_rdy_tx */ OMAP3_CORE1_IOPAD(0x2180, PIN_INPUT_PULLUP | MUX_MODE1) /* ssi1_rdy_tx */
OMAP3_CORE1_IOPAD(0x217e, PIN_OUTPUT | MUX_MODE1) /* ssi1_flag_tx */ OMAP3_CORE1_IOPAD(0x217e, PIN_OUTPUT | MUX_MODE1) /* ssi1_flag_tx */
OMAP3_CORE1_IOPAD(0x2182, PIN_INPUT | WAKEUP_EN | MUX_MODE4) /* ssi1_wake_tx (cawake) */ OMAP3_CORE1_IOPAD(0x2182, PIN_INPUT | MUX_MODE4) /* ssi1_wake_tx (cawake) */
OMAP3_CORE1_IOPAD(0x217c, PIN_OUTPUT | MUX_MODE1) /* ssi1_dat_tx */ OMAP3_CORE1_IOPAD(0x217c, PIN_OUTPUT | MUX_MODE1) /* ssi1_dat_tx */
OMAP3_CORE1_IOPAD(0x2184, PIN_INPUT | MUX_MODE1) /* ssi1_dat_rx */ OMAP3_CORE1_IOPAD(0x2184, PIN_INPUT | MUX_MODE1) /* ssi1_dat_rx */
OMAP3_CORE1_IOPAD(0x2186, PIN_INPUT | MUX_MODE1) /* ssi1_flag_rx */ OMAP3_CORE1_IOPAD(0x2186, PIN_INPUT | MUX_MODE1) /* ssi1_flag_rx */
@ -300,7 +300,7 @@ OMAP3_CORE1_IOPAD(0x218a, PIN_OUTPUT | MUX_MODE1) /* ssi1_wake */
modem_pins: pinmux_modem { modem_pins: pinmux_modem {
pinctrl-single,pins = < pinctrl-single,pins = <
OMAP3_CORE1_IOPAD(0x20dc, PIN_OUTPUT | MUX_MODE4) /* gpio 70 => cmt_apeslpx */ OMAP3_CORE1_IOPAD(0x20dc, PIN_OUTPUT | MUX_MODE4) /* gpio 70 => cmt_apeslpx */
OMAP3_CORE1_IOPAD(0x20e0, PIN_INPUT | WAKEUP_EN | MUX_MODE4) /* gpio 72 => ape_rst_rq */ OMAP3_CORE1_IOPAD(0x20e0, PIN_INPUT | MUX_MODE4) /* gpio 72 => ape_rst_rq */
OMAP3_CORE1_IOPAD(0x20e2, PIN_OUTPUT | MUX_MODE4) /* gpio 73 => cmt_rst_rq */ OMAP3_CORE1_IOPAD(0x20e2, PIN_OUTPUT | MUX_MODE4) /* gpio 73 => cmt_rst_rq */
OMAP3_CORE1_IOPAD(0x20e4, PIN_OUTPUT | MUX_MODE4) /* gpio 74 => cmt_en */ OMAP3_CORE1_IOPAD(0x20e4, PIN_OUTPUT | MUX_MODE4) /* gpio 74 => cmt_en */
OMAP3_CORE1_IOPAD(0x20e6, PIN_OUTPUT | MUX_MODE4) /* gpio 75 => cmt_rst */ OMAP3_CORE1_IOPAD(0x20e6, PIN_OUTPUT | MUX_MODE4) /* gpio 75 => cmt_rst */

View File

@ -97,7 +97,7 @@ ssi_pins: pinmux_ssi_pins {
OMAP3_CORE1_IOPAD(0x217c, PIN_OUTPUT | MUX_MODE1) /* ssi1_dat_tx */ OMAP3_CORE1_IOPAD(0x217c, PIN_OUTPUT | MUX_MODE1) /* ssi1_dat_tx */
OMAP3_CORE1_IOPAD(0x217e, PIN_OUTPUT | MUX_MODE1) /* ssi1_flag_tx */ OMAP3_CORE1_IOPAD(0x217e, PIN_OUTPUT | MUX_MODE1) /* ssi1_flag_tx */
OMAP3_CORE1_IOPAD(0x2180, PIN_INPUT_PULLUP | MUX_MODE1) /* ssi1_rdy_tx */ OMAP3_CORE1_IOPAD(0x2180, PIN_INPUT_PULLUP | MUX_MODE1) /* ssi1_rdy_tx */
OMAP3_CORE1_IOPAD(0x2182, PIN_INPUT | WAKEUP_EN | MUX_MODE4) /* ssi1_wake_tx (cawake) */ OMAP3_CORE1_IOPAD(0x2182, PIN_INPUT | MUX_MODE4) /* ssi1_wake_tx (cawake) */
OMAP3_CORE1_IOPAD(0x2184, PIN_INPUT | MUX_MODE1) /* ssi1_dat_rx */ OMAP3_CORE1_IOPAD(0x2184, PIN_INPUT | MUX_MODE1) /* ssi1_dat_rx */
OMAP3_CORE1_IOPAD(0x2186, PIN_INPUT | MUX_MODE1) /* ssi1_flag_rx */ OMAP3_CORE1_IOPAD(0x2186, PIN_INPUT | MUX_MODE1) /* ssi1_flag_rx */
OMAP3_CORE1_IOPAD(0x2188, PIN_OUTPUT | MUX_MODE1) /* ssi1_rdy_rx */ OMAP3_CORE1_IOPAD(0x2188, PIN_OUTPUT | MUX_MODE1) /* ssi1_rdy_rx */
@ -110,7 +110,7 @@ ssi_pins_idle: pinmux_ssi_pins_idle {
OMAP3_CORE1_IOPAD(0x217c, PIN_OUTPUT | MUX_MODE7) /* ssi1_dat_tx */ OMAP3_CORE1_IOPAD(0x217c, PIN_OUTPUT | MUX_MODE7) /* ssi1_dat_tx */
OMAP3_CORE1_IOPAD(0x217e, PIN_OUTPUT | MUX_MODE7) /* ssi1_flag_tx */ OMAP3_CORE1_IOPAD(0x217e, PIN_OUTPUT | MUX_MODE7) /* ssi1_flag_tx */
OMAP3_CORE1_IOPAD(0x2180, PIN_INPUT_PULLDOWN | MUX_MODE7) /* ssi1_rdy_tx */ OMAP3_CORE1_IOPAD(0x2180, PIN_INPUT_PULLDOWN | MUX_MODE7) /* ssi1_rdy_tx */
OMAP3_CORE1_IOPAD(0x2182, PIN_INPUT | WAKEUP_EN | MUX_MODE4) /* ssi1_wake_tx (cawake) */ OMAP3_CORE1_IOPAD(0x2182, PIN_INPUT | MUX_MODE4) /* ssi1_wake_tx (cawake) */
OMAP3_CORE1_IOPAD(0x2184, PIN_INPUT | MUX_MODE7) /* ssi1_dat_rx */ OMAP3_CORE1_IOPAD(0x2184, PIN_INPUT | MUX_MODE7) /* ssi1_dat_rx */
OMAP3_CORE1_IOPAD(0x2186, PIN_INPUT | MUX_MODE7) /* ssi1_flag_rx */ OMAP3_CORE1_IOPAD(0x2186, PIN_INPUT | MUX_MODE7) /* ssi1_flag_rx */
OMAP3_CORE1_IOPAD(0x2188, PIN_OUTPUT | MUX_MODE4) /* ssi1_rdy_rx */ OMAP3_CORE1_IOPAD(0x2188, PIN_OUTPUT | MUX_MODE4) /* ssi1_rdy_rx */
@ -120,7 +120,7 @@ OMAP3_CORE1_IOPAD(0x218a, PIN_OUTPUT | MUX_MODE7) /* ssi1_wake */
modem_pins1: pinmux_modem_core1_pins { modem_pins1: pinmux_modem_core1_pins {
pinctrl-single,pins = < pinctrl-single,pins = <
OMAP3_CORE1_IOPAD(0x207a, PIN_INPUT | WAKEUP_EN | MUX_MODE4) /* gpio_34 (ape_rst_rq) */ OMAP3_CORE1_IOPAD(0x207a, PIN_INPUT | MUX_MODE4) /* gpio_34 (ape_rst_rq) */
OMAP3_CORE1_IOPAD(0x2100, PIN_OUTPUT | MUX_MODE4) /* gpio_88 (cmt_rst_rq) */ OMAP3_CORE1_IOPAD(0x2100, PIN_OUTPUT | MUX_MODE4) /* gpio_88 (cmt_rst_rq) */
OMAP3_CORE1_IOPAD(0x210a, PIN_OUTPUT | MUX_MODE4) /* gpio_93 (cmt_apeslpx) */ OMAP3_CORE1_IOPAD(0x210a, PIN_OUTPUT | MUX_MODE4) /* gpio_93 (cmt_apeslpx) */
>; >;

View File

@ -98,7 +98,7 @@ uart2_pins: pinmux_uart2_pins {
pinctrl-single,pins = < pinctrl-single,pins = <
OMAP3_CORE1_IOPAD(0x2174, PIN_INPUT_PULLUP | MUX_MODE0) /* uart2_cts.uart2_cts */ OMAP3_CORE1_IOPAD(0x2174, PIN_INPUT_PULLUP | MUX_MODE0) /* uart2_cts.uart2_cts */
OMAP3_CORE1_IOPAD(0x2176, PIN_OUTPUT | MUX_MODE0) /* uart2_rts.uart2_rts */ OMAP3_CORE1_IOPAD(0x2176, PIN_OUTPUT | MUX_MODE0) /* uart2_rts.uart2_rts */
OMAP3_CORE1_IOPAD(0x217a, WAKEUP_EN | PIN_INPUT | MUX_MODE0) /* uart2_rx.uart2_rx */ OMAP3_CORE1_IOPAD(0x217a, PIN_INPUT | MUX_MODE0) /* uart2_rx.uart2_rx */
OMAP3_CORE1_IOPAD(0x2178, PIN_OUTPUT | MUX_MODE0) /* uart2_tx.uart2_tx */ OMAP3_CORE1_IOPAD(0x2178, PIN_OUTPUT | MUX_MODE0) /* uart2_tx.uart2_tx */
>; >;
}; };
@ -107,7 +107,7 @@ uart3_pins: pinmux_uart3_pins {
pinctrl-single,pins = < pinctrl-single,pins = <
OMAP3_CORE1_IOPAD(0x219a, PIN_INPUT_PULLDOWN | MUX_MODE0) /* uart3_cts_rctx.uart3_cts_rctx */ OMAP3_CORE1_IOPAD(0x219a, PIN_INPUT_PULLDOWN | MUX_MODE0) /* uart3_cts_rctx.uart3_cts_rctx */
OMAP3_CORE1_IOPAD(0x219c, PIN_OUTPUT | MUX_MODE0) /* uart3_rts_sd.uart3_rts_sd */ OMAP3_CORE1_IOPAD(0x219c, PIN_OUTPUT | MUX_MODE0) /* uart3_rts_sd.uart3_rts_sd */
OMAP3_CORE1_IOPAD(0x219e, WAKEUP_EN | PIN_INPUT | MUX_MODE0) /* uart3_rx_irrx.uart3_rx_irrx */ OMAP3_CORE1_IOPAD(0x219e, PIN_INPUT | MUX_MODE0) /* uart3_rx_irrx.uart3_rx_irrx */
OMAP3_CORE1_IOPAD(0x21a0, PIN_OUTPUT | MUX_MODE0) /* uart3_tx_irtx.uart3_tx_irtx */ OMAP3_CORE1_IOPAD(0x21a0, PIN_OUTPUT | MUX_MODE0) /* uart3_tx_irtx.uart3_tx_irtx */
>; >;
}; };
@ -125,7 +125,7 @@ mmc3_2_pins: pinmux_mmc3_2_pins {
pinctrl-single,pins = < pinctrl-single,pins = <
OMAP3630_CORE2_IOPAD(0x25d8, PIN_INPUT_PULLUP | MUX_MODE2) /* etk_clk.sdmmc3_clk */ OMAP3630_CORE2_IOPAD(0x25d8, PIN_INPUT_PULLUP | MUX_MODE2) /* etk_clk.sdmmc3_clk */
OMAP3630_CORE2_IOPAD(0x25e4, PIN_INPUT_PULLUP | MUX_MODE2) /* etk_d4.sdmmc3_dat0 */ OMAP3630_CORE2_IOPAD(0x25e4, PIN_INPUT_PULLUP | MUX_MODE2) /* etk_d4.sdmmc3_dat0 */
OMAP3630_CORE2_IOPAD(0x25e6, WAKEUP_EN | PIN_INPUT_PULLUP | MUX_MODE2) /* etk_d5.sdmmc3_dat1 */ OMAP3630_CORE2_IOPAD(0x25e6, PIN_INPUT_PULLUP | MUX_MODE2) /* etk_d5.sdmmc3_dat1 */
OMAP3630_CORE2_IOPAD(0x25e8, PIN_INPUT_PULLUP | MUX_MODE2) /* etk_d6.sdmmc3_dat2 */ OMAP3630_CORE2_IOPAD(0x25e8, PIN_INPUT_PULLUP | MUX_MODE2) /* etk_d6.sdmmc3_dat2 */
OMAP3630_CORE2_IOPAD(0x25e2, PIN_INPUT_PULLUP | MUX_MODE2) /* etk_d3.sdmmc3_dat3 */ OMAP3630_CORE2_IOPAD(0x25e2, PIN_INPUT_PULLUP | MUX_MODE2) /* etk_d3.sdmmc3_dat3 */
>; >;

View File

@ -14,6 +14,29 @@ aliases {
display0 = &hdmi0; display0 = &hdmi0;
}; };
vmain: fixedregulator-vmain {
compatible = "regulator-fixed";
regulator-name = "vmain";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
};
vsys_cobra: fixedregulator-vsys_cobra {
compatible = "regulator-fixed";
regulator-name = "vsys_cobra";
vin-supply = <&vmain>;
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
};
vdds_1v8_main: fixedregulator-vdds_1v8_main {
compatible = "regulator-fixed";
regulator-name = "vdds_1v8_main";
vin-supply = <&smps7_reg>;
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
};
vmmcsd_fixed: fixedregulator-mmcsd { vmmcsd_fixed: fixedregulator-mmcsd {
compatible = "regulator-fixed"; compatible = "regulator-fixed";
regulator-name = "vmmcsd_fixed"; regulator-name = "vmmcsd_fixed";
@ -309,7 +332,7 @@ OMAP5_IOPAD(0x05a, PIN_OUTPUT | MUX_MODE0) /* fref_clk1_out, USB hub clk */
wlcore_irq_pin: pinmux_wlcore_irq_pin { wlcore_irq_pin: pinmux_wlcore_irq_pin {
pinctrl-single,pins = < pinctrl-single,pins = <
OMAP5_IOPAD(0x40, WAKEUP_EN | PIN_INPUT_PULLUP | MUX_MODE6) /* llia_wakereqin.gpio1_wk14 */ OMAP5_IOPAD(0x40, PIN_INPUT_PULLUP | MUX_MODE6) /* llia_wakereqin.gpio1_wk14 */
>; >;
}; };
}; };
@ -409,6 +432,26 @@ palmas_pmic {
ti,ldo6-vibrator; ti,ldo6-vibrator;
smps123-in-supply = <&vsys_cobra>;
smps45-in-supply = <&vsys_cobra>;
smps6-in-supply = <&vsys_cobra>;
smps7-in-supply = <&vsys_cobra>;
smps8-in-supply = <&vsys_cobra>;
smps9-in-supply = <&vsys_cobra>;
smps10_out2-in-supply = <&vsys_cobra>;
smps10_out1-in-supply = <&vsys_cobra>;
ldo1-in-supply = <&vsys_cobra>;
ldo2-in-supply = <&vsys_cobra>;
ldo3-in-supply = <&vdds_1v8_main>;
ldo4-in-supply = <&vdds_1v8_main>;
ldo5-in-supply = <&vsys_cobra>;
ldo6-in-supply = <&vdds_1v8_main>;
ldo7-in-supply = <&vsys_cobra>;
ldo8-in-supply = <&vsys_cobra>;
ldo9-in-supply = <&vmmcsd_fixed>;
ldoln-in-supply = <&vsys_cobra>;
ldousb-in-supply = <&vsys_cobra>;
regulators { regulators {
smps123_reg: smps123 { smps123_reg: smps123 {
/* VDD_OPP_MPU */ /* VDD_OPP_MPU */
@ -600,7 +643,8 @@ twl6040: twl@4b {
pinctrl-0 = <&twl6040_pins>; pinctrl-0 = <&twl6040_pins>;
interrupts = <GIC_SPI 119 IRQ_TYPE_NONE>; /* IRQ_SYS_2N cascaded to gic */ interrupts = <GIC_SPI 119 IRQ_TYPE_NONE>; /* IRQ_SYS_2N cascaded to gic */
ti,audpwron-gpio = <&gpio5 13 GPIO_ACTIVE_HIGH>; /* gpio line 141 */
/* audpwron gpio defined in the board specific dts */
vio-supply = <&smps7_reg>; vio-supply = <&smps7_reg>;
v2v1-supply = <&smps9_reg>; v2v1-supply = <&smps9_reg>;

View File

@ -35,6 +35,22 @@ tca6416: tca6416@21 {
}; };
}; };
/* LDO4 is VPP1 - ball AD9 */
&ldo4_reg {
regulator-min-microvolt = <2000000>;
regulator-max-microvolt = <2000000>;
};
/*
* LDO7 is used for HDMI: VDDA_DSIPORTA - ball AA33, VDDA_DSIPORTC - ball AE33,
* VDDA_HDMI - ball AN25
*/
&ldo7_reg {
status = "okay";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
};
&omap5_pmx_core { &omap5_pmx_core {
i2c4_pins: pinmux_i2c4_pins { i2c4_pins: pinmux_i2c4_pins {
pinctrl-single,pins = < pinctrl-single,pins = <
@ -52,3 +68,13 @@ &tpd12s015 {
<&gpio7 3 0>; /* 195, SDA */ <&gpio7 3 0>; /* 195, SDA */
}; };
&twl6040 {
ti,audpwron-gpio = <&gpio5 16 GPIO_ACTIVE_HIGH>; /* gpio line 144 */
};
&twl6040_pins {
pinctrl-single,pins = <
OMAP5_IOPAD(0x1c4, PIN_OUTPUT | MUX_MODE6) /* mcspi1_somi.gpio5_144 */
OMAP5_IOPAD(0x1ca, PIN_OUTPUT | MUX_MODE6) /* perslimbus2_clock.gpio5_145 */
>;
};

View File

@ -51,3 +51,13 @@ &tpd12s015 {
<&gpio9 1 GPIO_ACTIVE_HIGH>, /* TCA6424A P00, LS OE */ <&gpio9 1 GPIO_ACTIVE_HIGH>, /* TCA6424A P00, LS OE */
<&gpio7 1 GPIO_ACTIVE_HIGH>; /* GPIO 193, HPD */ <&gpio7 1 GPIO_ACTIVE_HIGH>; /* GPIO 193, HPD */
}; };
&twl6040 {
ti,audpwron-gpio = <&gpio5 13 GPIO_ACTIVE_HIGH>; /* gpio line 141 */
};
&twl6040_pins {
pinctrl-single,pins = <
OMAP5_IOPAD(0x1be, PIN_OUTPUT | MUX_MODE6) /* mcspi1_somi.gpio5_141 */
>;
};

View File

@ -136,6 +136,7 @@ regulator-usb-nrst {
&gmac1 { &gmac1 {
status = "okay"; status = "okay";
phy-mode = "rgmii"; phy-mode = "rgmii";
phy-handle = <&phy1>;
snps,reset-gpio = <&porta 0 GPIO_ACTIVE_LOW>; snps,reset-gpio = <&porta 0 GPIO_ACTIVE_LOW>;
snps,reset-active-low; snps,reset-active-low;

View File

@ -24,18 +24,21 @@ gp0_reserved: rproc@40000000 {
compatible = "shared-dma-pool"; compatible = "shared-dma-pool";
reg = <0x40000000 0x01000000>; reg = <0x40000000 0x01000000>;
no-map; no-map;
status = "disabled";
}; };
gp1_reserved: rproc@41000000 { gp1_reserved: rproc@41000000 {
compatible = "shared-dma-pool"; compatible = "shared-dma-pool";
reg = <0x41000000 0x01000000>; reg = <0x41000000 0x01000000>;
no-map; no-map;
status = "disabled";
}; };
audio_reserved: rproc@42000000 { audio_reserved: rproc@42000000 {
compatible = "shared-dma-pool"; compatible = "shared-dma-pool";
reg = <0x42000000 0x01000000>; reg = <0x42000000 0x01000000>;
no-map; no-map;
status = "disabled";
}; };
dmu_reserved: rproc@43000000 { dmu_reserved: rproc@43000000 {

View File

@ -176,8 +176,6 @@ &reg_aldo3 {
}; };
&reg_dc1sw { &reg_dc1sw {
regulator-min-microvolt = <3000000>;
regulator-max-microvolt = <3000000>;
regulator-name = "vcc-lcd"; regulator-name = "vcc-lcd";
}; };

View File

@ -135,8 +135,6 @@ &reg_aldo3 {
&reg_dc1sw { &reg_dc1sw {
regulator-name = "vcc-lcd-usb2"; regulator-name = "vcc-lcd-usb2";
regulator-min-microvolt = <3000000>;
regulator-max-microvolt = <3000000>;
}; };
&reg_dc5ldo { &reg_dc5ldo {

View File

@ -82,6 +82,7 @@ CONFIG_TOUCHSCREEN_MMS114=y
CONFIG_INPUT_MISC=y CONFIG_INPUT_MISC=y
CONFIG_INPUT_MAX77693_HAPTIC=y CONFIG_INPUT_MAX77693_HAPTIC=y
CONFIG_INPUT_MAX8997_HAPTIC=y CONFIG_INPUT_MAX8997_HAPTIC=y
CONFIG_KEYBOARD_SAMSUNG=y
CONFIG_SERIAL_8250=y CONFIG_SERIAL_8250=y
CONFIG_SERIAL_SAMSUNG=y CONFIG_SERIAL_SAMSUNG=y
CONFIG_SERIAL_SAMSUNG_CONSOLE=y CONFIG_SERIAL_SAMSUNG_CONSOLE=y

View File

@ -264,6 +264,7 @@ CONFIG_KEYBOARD_TEGRA=y
CONFIG_KEYBOARD_SPEAR=y CONFIG_KEYBOARD_SPEAR=y
CONFIG_KEYBOARD_ST_KEYSCAN=y CONFIG_KEYBOARD_ST_KEYSCAN=y
CONFIG_KEYBOARD_CROS_EC=m CONFIG_KEYBOARD_CROS_EC=m
CONFIG_KEYBOARD_SAMSUNG=m
CONFIG_MOUSE_PS2_ELANTECH=y CONFIG_MOUSE_PS2_ELANTECH=y
CONFIG_MOUSE_CYAPA=m CONFIG_MOUSE_CYAPA=m
CONFIG_MOUSE_ELAN_I2C=y CONFIG_MOUSE_ELAN_I2C=y

View File

@ -29,7 +29,7 @@
static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long addr) static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long addr)
{ {
return (pmd_t *)get_zeroed_page(GFP_KERNEL | __GFP_REPEAT); return (pmd_t *)get_zeroed_page(GFP_KERNEL);
} }
static inline void pmd_free(struct mm_struct *mm, pmd_t *pmd) static inline void pmd_free(struct mm_struct *mm, pmd_t *pmd)

View File

@ -193,6 +193,7 @@ static inline pmd_t *pmd_offset(pud_t *pud, unsigned long addr)
#define pmd_large(pmd) (pmd_val(pmd) & 2) #define pmd_large(pmd) (pmd_val(pmd) & 2)
#define pmd_bad(pmd) (pmd_val(pmd) & 2) #define pmd_bad(pmd) (pmd_val(pmd) & 2)
#define pmd_present(pmd) (pmd_val(pmd))
#define copy_pmd(pmdpd,pmdps) \ #define copy_pmd(pmdpd,pmdps) \
do { \ do { \

View File

@ -211,6 +211,7 @@ static inline pmd_t *pmd_offset(pud_t *pud, unsigned long addr)
: !!(pmd_val(pmd) & (val))) : !!(pmd_val(pmd) & (val)))
#define pmd_isclear(pmd, val) (!(pmd_val(pmd) & (val))) #define pmd_isclear(pmd, val) (!(pmd_val(pmd) & (val)))
#define pmd_present(pmd) (pmd_isset((pmd), L_PMD_SECT_VALID))
#define pmd_young(pmd) (pmd_isset((pmd), PMD_SECT_AF)) #define pmd_young(pmd) (pmd_isset((pmd), PMD_SECT_AF))
#define pte_special(pte) (pte_isset((pte), L_PTE_SPECIAL)) #define pte_special(pte) (pte_isset((pte), L_PTE_SPECIAL))
static inline pte_t pte_mkspecial(pte_t pte) static inline pte_t pte_mkspecial(pte_t pte)
@ -249,10 +250,10 @@ PMD_BIT_FUNC(mkyoung, |= PMD_SECT_AF);
#define pfn_pmd(pfn,prot) (__pmd(((phys_addr_t)(pfn) << PAGE_SHIFT) | pgprot_val(prot))) #define pfn_pmd(pfn,prot) (__pmd(((phys_addr_t)(pfn) << PAGE_SHIFT) | pgprot_val(prot)))
#define mk_pmd(page,prot) pfn_pmd(page_to_pfn(page),prot) #define mk_pmd(page,prot) pfn_pmd(page_to_pfn(page),prot)
/* represent a notpresent pmd by zero, this is used by pmdp_invalidate */ /* represent a notpresent pmd by faulting entry, this is used by pmdp_invalidate */
static inline pmd_t pmd_mknotpresent(pmd_t pmd) static inline pmd_t pmd_mknotpresent(pmd_t pmd)
{ {
return __pmd(0); return __pmd(pmd_val(pmd) & ~L_PMD_SECT_VALID);
} }
static inline pmd_t pmd_modify(pmd_t pmd, pgprot_t newprot) static inline pmd_t pmd_modify(pmd_t pmd, pgprot_t newprot)

View File

@ -182,7 +182,6 @@ extern pgd_t swapper_pg_dir[PTRS_PER_PGD];
#define pgd_offset_k(addr) pgd_offset(&init_mm, addr) #define pgd_offset_k(addr) pgd_offset(&init_mm, addr)
#define pmd_none(pmd) (!pmd_val(pmd)) #define pmd_none(pmd) (!pmd_val(pmd))
#define pmd_present(pmd) (pmd_val(pmd))
static inline pte_t *pmd_page_vaddr(pmd_t pmd) static inline pte_t *pmd_page_vaddr(pmd_t pmd)
{ {

View File

@ -486,7 +486,7 @@ static const char *ipi_types[NR_IPI] __tracepoint_string = {
static void smp_cross_call(const struct cpumask *target, unsigned int ipinr) static void smp_cross_call(const struct cpumask *target, unsigned int ipinr)
{ {
trace_ipi_raise(target, ipi_types[ipinr]); trace_ipi_raise_rcuidle(target, ipi_types[ipinr]);
__smp_cross_call(target, ipinr); __smp_cross_call(target, ipinr);
} }

View File

@ -61,7 +61,6 @@ config ARCH_EXYNOS4
select CLKSRC_SAMSUNG_PWM if CPU_EXYNOS4210 select CLKSRC_SAMSUNG_PWM if CPU_EXYNOS4210
select CPU_EXYNOS4210 select CPU_EXYNOS4210
select GIC_NON_BANKED select GIC_NON_BANKED
select KEYBOARD_SAMSUNG if INPUT_KEYBOARD
select MIGHT_HAVE_CACHE_L2X0 select MIGHT_HAVE_CACHE_L2X0
help help
Samsung EXYNOS4 (Cortex-A9) SoC based systems Samsung EXYNOS4 (Cortex-A9) SoC based systems

View File

@ -46,7 +46,7 @@ static int ksz8081_phy_fixup(struct phy_device *dev)
static void __init imx6ul_enet_phy_init(void) static void __init imx6ul_enet_phy_init(void)
{ {
if (IS_BUILTIN(CONFIG_PHYLIB)) if (IS_BUILTIN(CONFIG_PHYLIB))
phy_register_fixup_for_uid(PHY_ID_KSZ8081, 0xffffffff, phy_register_fixup_for_uid(PHY_ID_KSZ8081, MICREL_PHY_ID_MASK,
ksz8081_phy_fixup); ksz8081_phy_fixup);
} }

View File

@ -43,8 +43,8 @@
#define OTHERS_MASK (MODEM_IRQ_MASK | HOOK_SWITCH_MASK) #define OTHERS_MASK (MODEM_IRQ_MASK | HOOK_SWITCH_MASK)
/* IRQ handler register bitmasks */ /* IRQ handler register bitmasks */
#define DEFERRED_FIQ_MASK (0x1 << (INT_DEFERRED_FIQ % IH2_BASE)) #define DEFERRED_FIQ_MASK OMAP_IRQ_BIT(INT_DEFERRED_FIQ)
#define GPIO_BANK1_MASK (0x1 << INT_GPIO_BANK1) #define GPIO_BANK1_MASK OMAP_IRQ_BIT(INT_GPIO_BANK1)
/* Driver buffer byte offsets */ /* Driver buffer byte offsets */
#define BUF_MASK (FIQ_MASK * 4) #define BUF_MASK (FIQ_MASK * 4)
@ -110,7 +110,7 @@ ENTRY(qwerty_fiqin_start)
mov r8, #2 @ reset FIQ agreement mov r8, #2 @ reset FIQ agreement
str r8, [r12, #IRQ_CONTROL_REG_OFFSET] str r8, [r12, #IRQ_CONTROL_REG_OFFSET]
cmp r10, #INT_GPIO_BANK1 @ is it GPIO bank interrupt? cmp r10, #(INT_GPIO_BANK1 - NR_IRQS_LEGACY) @ is it GPIO interrupt?
beq gpio @ yes - process it beq gpio @ yes - process it
mov r8, #1 mov r8, #1

View File

@ -109,7 +109,8 @@ void __init ams_delta_init_fiq(void)
* Since no set_type() method is provided by OMAP irq chip, * Since no set_type() method is provided by OMAP irq chip,
* switch to edge triggered interrupt type manually. * switch to edge triggered interrupt type manually.
*/ */
offset = IRQ_ILR0_REG_OFFSET + INT_DEFERRED_FIQ * 0x4; offset = IRQ_ILR0_REG_OFFSET +
((INT_DEFERRED_FIQ - NR_IRQS_LEGACY) & 0x1f) * 0x4;
val = omap_readl(DEFERRED_FIQ_IH_BASE + offset) & ~(1 << 1); val = omap_readl(DEFERRED_FIQ_IH_BASE + offset) & ~(1 << 1);
omap_writel(val, DEFERRED_FIQ_IH_BASE + offset); omap_writel(val, DEFERRED_FIQ_IH_BASE + offset);
@ -149,7 +150,7 @@ void __init ams_delta_init_fiq(void)
/* /*
* Redirect GPIO interrupts to FIQ * Redirect GPIO interrupts to FIQ
*/ */
offset = IRQ_ILR0_REG_OFFSET + INT_GPIO_BANK1 * 0x4; offset = IRQ_ILR0_REG_OFFSET + (INT_GPIO_BANK1 - NR_IRQS_LEGACY) * 0x4;
val = omap_readl(OMAP_IH1_BASE + offset) | 1; val = omap_readl(OMAP_IH1_BASE + offset) | 1;
omap_writel(val, OMAP_IH1_BASE + offset); omap_writel(val, OMAP_IH1_BASE + offset);
} }

View File

@ -14,6 +14,8 @@
#ifndef __AMS_DELTA_FIQ_H #ifndef __AMS_DELTA_FIQ_H
#define __AMS_DELTA_FIQ_H #define __AMS_DELTA_FIQ_H
#include <mach/irqs.h>
/* /*
* Interrupt number used for passing control from FIQ to IRQ. * Interrupt number used for passing control from FIQ to IRQ.
* IRQ12, described as reserved, has been selected. * IRQ12, described as reserved, has been selected.

View File

@ -17,6 +17,7 @@ config ARCH_OMAP3
select PM_OPP if PM select PM_OPP if PM
select PM if CPU_IDLE select PM if CPU_IDLE
select SOC_HAS_OMAP2_SDRC select SOC_HAS_OMAP2_SDRC
select ARM_ERRATA_430973
config ARCH_OMAP4 config ARCH_OMAP4
bool "TI OMAP4" bool "TI OMAP4"
@ -36,6 +37,7 @@ config ARCH_OMAP4
select PM if CPU_IDLE select PM if CPU_IDLE
select ARM_ERRATA_754322 select ARM_ERRATA_754322
select ARM_ERRATA_775420 select ARM_ERRATA_775420
select OMAP_INTERCONNECT
config SOC_OMAP5 config SOC_OMAP5
bool "TI OMAP5" bool "TI OMAP5"
@ -67,6 +69,8 @@ config SOC_AM43XX
select HAVE_ARM_SCU select HAVE_ARM_SCU
select GENERIC_CLOCKEVENTS_BROADCAST select GENERIC_CLOCKEVENTS_BROADCAST
select HAVE_ARM_TWD select HAVE_ARM_TWD
select ARM_ERRATA_754322
select ARM_ERRATA_775420
config SOC_DRA7XX config SOC_DRA7XX
bool "TI DRA7XX" bool "TI DRA7XX"
@ -240,4 +244,12 @@ endmenu
endif endif
config OMAP5_ERRATA_801819
bool "Errata 801819: An eviction from L1 data cache might stall indefinitely"
depends on SOC_OMAP5 || SOC_DRA7XX
help
A livelock can occur in the L2 cache arbitration that might prevent
a snoop from completing. Under certain conditions this can cause the
system to deadlock.
endmenu endmenu

View File

@ -46,6 +46,7 @@
#define OMAP5_DRA7_MON_SET_CNTFRQ_INDEX 0x109 #define OMAP5_DRA7_MON_SET_CNTFRQ_INDEX 0x109
#define OMAP5_MON_AMBA_IF_INDEX 0x108 #define OMAP5_MON_AMBA_IF_INDEX 0x108
#define OMAP5_DRA7_MON_SET_ACR_INDEX 0x107
/* Secure PPA(Primary Protected Application) APIs */ /* Secure PPA(Primary Protected Application) APIs */
#define OMAP4_PPA_L2_POR_INDEX 0x23 #define OMAP4_PPA_L2_POR_INDEX 0x23

View File

@ -50,6 +50,39 @@ void __iomem *omap4_get_scu_base(void)
return scu_base; return scu_base;
} }
#ifdef CONFIG_OMAP5_ERRATA_801819
void omap5_erratum_workaround_801819(void)
{
u32 acr, revidr;
u32 acr_mask;
/* REVIDR[3] indicates erratum fix available on silicon */
asm volatile ("mrc p15, 0, %0, c0, c0, 6" : "=r" (revidr));
if (revidr & (0x1 << 3))
return;
asm volatile ("mrc p15, 0, %0, c1, c0, 1" : "=r" (acr));
/*
* BIT(27) - Disables streaming. All write-allocate lines allocate in
* the L1 or L2 cache.
* BIT(25) - Disables streaming. All write-allocate lines allocate in
* the L1 cache.
*/
acr_mask = (0x3 << 25) | (0x3 << 27);
/* do we already have it done.. if yes, skip expensive smc */
if ((acr & acr_mask) == acr_mask)
return;
acr |= acr_mask;
omap_smc1(OMAP5_DRA7_MON_SET_ACR_INDEX, acr);
pr_debug("%s: ARM erratum workaround 801819 applied on CPU%d\n",
__func__, smp_processor_id());
}
#else
static inline void omap5_erratum_workaround_801819(void) { }
#endif
static void omap4_secondary_init(unsigned int cpu) static void omap4_secondary_init(unsigned int cpu)
{ {
/* /*
@ -64,12 +97,15 @@ static void omap4_secondary_init(unsigned int cpu)
omap_secure_dispatcher(OMAP4_PPA_CPU_ACTRL_SMP_INDEX, omap_secure_dispatcher(OMAP4_PPA_CPU_ACTRL_SMP_INDEX,
4, 0, 0, 0, 0, 0); 4, 0, 0, 0, 0, 0);
/* if (soc_is_omap54xx() || soc_is_dra7xx()) {
* Configure the CNTFRQ register for the secondary cpu's which /*
* indicates the frequency of the cpu local timers. * Configure the CNTFRQ register for the secondary cpu's which
*/ * indicates the frequency of the cpu local timers.
if (soc_is_omap54xx() || soc_is_dra7xx()) */
set_cntfreq(); set_cntfreq();
/* Configure ACR to disable streaming WA for 801819 */
omap5_erratum_workaround_801819();
}
/* /*
* Synchronise with the boot thread. * Synchronise with the boot thread.
@ -218,6 +254,8 @@ static void __init omap4_smp_prepare_cpus(unsigned int max_cpus)
if (cpu_is_omap446x()) if (cpu_is_omap446x())
startup_addr = omap4460_secondary_startup; startup_addr = omap4460_secondary_startup;
if (soc_is_dra74x() || soc_is_omap54xx())
omap5_erratum_workaround_801819();
/* /*
* Write the address of secondary startup routine into the * Write the address of secondary startup routine into the

View File

@ -186,8 +186,9 @@ static int _pwrdm_state_switch(struct powerdomain *pwrdm, int flag)
trace_state = (PWRDM_TRACE_STATES_FLAG | trace_state = (PWRDM_TRACE_STATES_FLAG |
((next & OMAP_POWERSTATE_MASK) << 8) | ((next & OMAP_POWERSTATE_MASK) << 8) |
((prev & OMAP_POWERSTATE_MASK) << 0)); ((prev & OMAP_POWERSTATE_MASK) << 0));
trace_power_domain_target(pwrdm->name, trace_state, trace_power_domain_target_rcuidle(pwrdm->name,
smp_processor_id()); trace_state,
smp_processor_id());
} }
break; break;
default: default:
@ -523,8 +524,8 @@ int pwrdm_set_next_pwrst(struct powerdomain *pwrdm, u8 pwrst)
if (arch_pwrdm && arch_pwrdm->pwrdm_set_next_pwrst) { if (arch_pwrdm && arch_pwrdm->pwrdm_set_next_pwrst) {
/* Trace the pwrdm desired target state */ /* Trace the pwrdm desired target state */
trace_power_domain_target(pwrdm->name, pwrst, trace_power_domain_target_rcuidle(pwrdm->name, pwrst,
smp_processor_id()); smp_processor_id());
/* Program the pwrdm desired target state */ /* Program the pwrdm desired target state */
ret = arch_pwrdm->pwrdm_set_next_pwrst(pwrdm, pwrst); ret = arch_pwrdm->pwrdm_set_next_pwrst(pwrdm, pwrst);
} }

View File

@ -36,14 +36,7 @@ static struct powerdomain iva_7xx_pwrdm = {
.prcm_offs = DRA7XX_PRM_IVA_INST, .prcm_offs = DRA7XX_PRM_IVA_INST,
.prcm_partition = DRA7XX_PRM_PARTITION, .prcm_partition = DRA7XX_PRM_PARTITION,
.pwrsts = PWRSTS_OFF_ON, .pwrsts = PWRSTS_OFF_ON,
.pwrsts_logic_ret = PWRSTS_OFF,
.banks = 4, .banks = 4,
.pwrsts_mem_ret = {
[0] = PWRSTS_OFF_RET, /* hwa_mem */
[1] = PWRSTS_OFF_RET, /* sl2_mem */
[2] = PWRSTS_OFF_RET, /* tcm1_mem */
[3] = PWRSTS_OFF_RET, /* tcm2_mem */
},
.pwrsts_mem_on = { .pwrsts_mem_on = {
[0] = PWRSTS_ON, /* hwa_mem */ [0] = PWRSTS_ON, /* hwa_mem */
[1] = PWRSTS_ON, /* sl2_mem */ [1] = PWRSTS_ON, /* sl2_mem */
@ -76,12 +69,7 @@ static struct powerdomain ipu_7xx_pwrdm = {
.prcm_offs = DRA7XX_PRM_IPU_INST, .prcm_offs = DRA7XX_PRM_IPU_INST,
.prcm_partition = DRA7XX_PRM_PARTITION, .prcm_partition = DRA7XX_PRM_PARTITION,
.pwrsts = PWRSTS_OFF_ON, .pwrsts = PWRSTS_OFF_ON,
.pwrsts_logic_ret = PWRSTS_OFF,
.banks = 2, .banks = 2,
.pwrsts_mem_ret = {
[0] = PWRSTS_OFF_RET, /* aessmem */
[1] = PWRSTS_OFF_RET, /* periphmem */
},
.pwrsts_mem_on = { .pwrsts_mem_on = {
[0] = PWRSTS_ON, /* aessmem */ [0] = PWRSTS_ON, /* aessmem */
[1] = PWRSTS_ON, /* periphmem */ [1] = PWRSTS_ON, /* periphmem */
@ -95,11 +83,7 @@ static struct powerdomain dss_7xx_pwrdm = {
.prcm_offs = DRA7XX_PRM_DSS_INST, .prcm_offs = DRA7XX_PRM_DSS_INST,
.prcm_partition = DRA7XX_PRM_PARTITION, .prcm_partition = DRA7XX_PRM_PARTITION,
.pwrsts = PWRSTS_OFF_ON, .pwrsts = PWRSTS_OFF_ON,
.pwrsts_logic_ret = PWRSTS_OFF,
.banks = 1, .banks = 1,
.pwrsts_mem_ret = {
[0] = PWRSTS_OFF_RET, /* dss_mem */
},
.pwrsts_mem_on = { .pwrsts_mem_on = {
[0] = PWRSTS_ON, /* dss_mem */ [0] = PWRSTS_ON, /* dss_mem */
}, },
@ -111,13 +95,8 @@ static struct powerdomain l4per_7xx_pwrdm = {
.name = "l4per_pwrdm", .name = "l4per_pwrdm",
.prcm_offs = DRA7XX_PRM_L4PER_INST, .prcm_offs = DRA7XX_PRM_L4PER_INST,
.prcm_partition = DRA7XX_PRM_PARTITION, .prcm_partition = DRA7XX_PRM_PARTITION,
.pwrsts = PWRSTS_RET_ON, .pwrsts = PWRSTS_ON,
.pwrsts_logic_ret = PWRSTS_RET,
.banks = 2, .banks = 2,
.pwrsts_mem_ret = {
[0] = PWRSTS_OFF_RET, /* nonretained_bank */
[1] = PWRSTS_OFF_RET, /* retained_bank */
},
.pwrsts_mem_on = { .pwrsts_mem_on = {
[0] = PWRSTS_ON, /* nonretained_bank */ [0] = PWRSTS_ON, /* nonretained_bank */
[1] = PWRSTS_ON, /* retained_bank */ [1] = PWRSTS_ON, /* retained_bank */
@ -132,9 +111,6 @@ static struct powerdomain gpu_7xx_pwrdm = {
.prcm_partition = DRA7XX_PRM_PARTITION, .prcm_partition = DRA7XX_PRM_PARTITION,
.pwrsts = PWRSTS_OFF_ON, .pwrsts = PWRSTS_OFF_ON,
.banks = 1, .banks = 1,
.pwrsts_mem_ret = {
[0] = PWRSTS_OFF_RET, /* gpu_mem */
},
.pwrsts_mem_on = { .pwrsts_mem_on = {
[0] = PWRSTS_ON, /* gpu_mem */ [0] = PWRSTS_ON, /* gpu_mem */
}, },
@ -148,8 +124,6 @@ static struct powerdomain wkupaon_7xx_pwrdm = {
.prcm_partition = DRA7XX_PRM_PARTITION, .prcm_partition = DRA7XX_PRM_PARTITION,
.pwrsts = PWRSTS_ON, .pwrsts = PWRSTS_ON,
.banks = 1, .banks = 1,
.pwrsts_mem_ret = {
},
.pwrsts_mem_on = { .pwrsts_mem_on = {
[0] = PWRSTS_ON, /* wkup_bank */ [0] = PWRSTS_ON, /* wkup_bank */
}, },
@ -161,15 +135,7 @@ static struct powerdomain core_7xx_pwrdm = {
.prcm_offs = DRA7XX_PRM_CORE_INST, .prcm_offs = DRA7XX_PRM_CORE_INST,
.prcm_partition = DRA7XX_PRM_PARTITION, .prcm_partition = DRA7XX_PRM_PARTITION,
.pwrsts = PWRSTS_ON, .pwrsts = PWRSTS_ON,
.pwrsts_logic_ret = PWRSTS_RET,
.banks = 5, .banks = 5,
.pwrsts_mem_ret = {
[0] = PWRSTS_OFF_RET, /* core_nret_bank */
[1] = PWRSTS_OFF_RET, /* core_ocmram */
[2] = PWRSTS_OFF_RET, /* core_other_bank */
[3] = PWRSTS_OFF_RET, /* ipu_l2ram */
[4] = PWRSTS_OFF_RET, /* ipu_unicache */
},
.pwrsts_mem_on = { .pwrsts_mem_on = {
[0] = PWRSTS_ON, /* core_nret_bank */ [0] = PWRSTS_ON, /* core_nret_bank */
[1] = PWRSTS_ON, /* core_ocmram */ [1] = PWRSTS_ON, /* core_ocmram */
@ -226,11 +192,7 @@ static struct powerdomain vpe_7xx_pwrdm = {
.prcm_offs = DRA7XX_PRM_VPE_INST, .prcm_offs = DRA7XX_PRM_VPE_INST,
.prcm_partition = DRA7XX_PRM_PARTITION, .prcm_partition = DRA7XX_PRM_PARTITION,
.pwrsts = PWRSTS_OFF_ON, .pwrsts = PWRSTS_OFF_ON,
.pwrsts_logic_ret = PWRSTS_OFF,
.banks = 1, .banks = 1,
.pwrsts_mem_ret = {
[0] = PWRSTS_OFF_RET, /* vpe_bank */
},
.pwrsts_mem_on = { .pwrsts_mem_on = {
[0] = PWRSTS_ON, /* vpe_bank */ [0] = PWRSTS_ON, /* vpe_bank */
}, },
@ -260,14 +222,8 @@ static struct powerdomain l3init_7xx_pwrdm = {
.name = "l3init_pwrdm", .name = "l3init_pwrdm",
.prcm_offs = DRA7XX_PRM_L3INIT_INST, .prcm_offs = DRA7XX_PRM_L3INIT_INST,
.prcm_partition = DRA7XX_PRM_PARTITION, .prcm_partition = DRA7XX_PRM_PARTITION,
.pwrsts = PWRSTS_RET_ON, .pwrsts = PWRSTS_ON,
.pwrsts_logic_ret = PWRSTS_RET,
.banks = 3, .banks = 3,
.pwrsts_mem_ret = {
[0] = PWRSTS_OFF_RET, /* gmac_bank */
[1] = PWRSTS_OFF_RET, /* l3init_bank1 */
[2] = PWRSTS_OFF_RET, /* l3init_bank2 */
},
.pwrsts_mem_on = { .pwrsts_mem_on = {
[0] = PWRSTS_ON, /* gmac_bank */ [0] = PWRSTS_ON, /* gmac_bank */
[1] = PWRSTS_ON, /* l3init_bank1 */ [1] = PWRSTS_ON, /* l3init_bank1 */
@ -283,9 +239,6 @@ static struct powerdomain eve3_7xx_pwrdm = {
.prcm_partition = DRA7XX_PRM_PARTITION, .prcm_partition = DRA7XX_PRM_PARTITION,
.pwrsts = PWRSTS_OFF_ON, .pwrsts = PWRSTS_OFF_ON,
.banks = 1, .banks = 1,
.pwrsts_mem_ret = {
[0] = PWRSTS_OFF_RET, /* eve3_bank */
},
.pwrsts_mem_on = { .pwrsts_mem_on = {
[0] = PWRSTS_ON, /* eve3_bank */ [0] = PWRSTS_ON, /* eve3_bank */
}, },
@ -299,9 +252,6 @@ static struct powerdomain emu_7xx_pwrdm = {
.prcm_partition = DRA7XX_PRM_PARTITION, .prcm_partition = DRA7XX_PRM_PARTITION,
.pwrsts = PWRSTS_OFF_ON, .pwrsts = PWRSTS_OFF_ON,
.banks = 1, .banks = 1,
.pwrsts_mem_ret = {
[0] = PWRSTS_OFF_RET, /* emu_bank */
},
.pwrsts_mem_on = { .pwrsts_mem_on = {
[0] = PWRSTS_ON, /* emu_bank */ [0] = PWRSTS_ON, /* emu_bank */
}, },
@ -314,11 +264,6 @@ static struct powerdomain dsp2_7xx_pwrdm = {
.prcm_partition = DRA7XX_PRM_PARTITION, .prcm_partition = DRA7XX_PRM_PARTITION,
.pwrsts = PWRSTS_OFF_ON, .pwrsts = PWRSTS_OFF_ON,
.banks = 3, .banks = 3,
.pwrsts_mem_ret = {
[0] = PWRSTS_OFF_RET, /* dsp2_edma */
[1] = PWRSTS_OFF_RET, /* dsp2_l1 */
[2] = PWRSTS_OFF_RET, /* dsp2_l2 */
},
.pwrsts_mem_on = { .pwrsts_mem_on = {
[0] = PWRSTS_ON, /* dsp2_edma */ [0] = PWRSTS_ON, /* dsp2_edma */
[1] = PWRSTS_ON, /* dsp2_l1 */ [1] = PWRSTS_ON, /* dsp2_l1 */
@ -334,11 +279,6 @@ static struct powerdomain dsp1_7xx_pwrdm = {
.prcm_partition = DRA7XX_PRM_PARTITION, .prcm_partition = DRA7XX_PRM_PARTITION,
.pwrsts = PWRSTS_OFF_ON, .pwrsts = PWRSTS_OFF_ON,
.banks = 3, .banks = 3,
.pwrsts_mem_ret = {
[0] = PWRSTS_OFF_RET, /* dsp1_edma */
[1] = PWRSTS_OFF_RET, /* dsp1_l1 */
[2] = PWRSTS_OFF_RET, /* dsp1_l2 */
},
.pwrsts_mem_on = { .pwrsts_mem_on = {
[0] = PWRSTS_ON, /* dsp1_edma */ [0] = PWRSTS_ON, /* dsp1_edma */
[1] = PWRSTS_ON, /* dsp1_l1 */ [1] = PWRSTS_ON, /* dsp1_l1 */
@ -354,9 +294,6 @@ static struct powerdomain cam_7xx_pwrdm = {
.prcm_partition = DRA7XX_PRM_PARTITION, .prcm_partition = DRA7XX_PRM_PARTITION,
.pwrsts = PWRSTS_OFF_ON, .pwrsts = PWRSTS_OFF_ON,
.banks = 1, .banks = 1,
.pwrsts_mem_ret = {
[0] = PWRSTS_OFF_RET, /* vip_bank */
},
.pwrsts_mem_on = { .pwrsts_mem_on = {
[0] = PWRSTS_ON, /* vip_bank */ [0] = PWRSTS_ON, /* vip_bank */
}, },
@ -370,9 +307,6 @@ static struct powerdomain eve4_7xx_pwrdm = {
.prcm_partition = DRA7XX_PRM_PARTITION, .prcm_partition = DRA7XX_PRM_PARTITION,
.pwrsts = PWRSTS_OFF_ON, .pwrsts = PWRSTS_OFF_ON,
.banks = 1, .banks = 1,
.pwrsts_mem_ret = {
[0] = PWRSTS_OFF_RET, /* eve4_bank */
},
.pwrsts_mem_on = { .pwrsts_mem_on = {
[0] = PWRSTS_ON, /* eve4_bank */ [0] = PWRSTS_ON, /* eve4_bank */
}, },
@ -386,9 +320,6 @@ static struct powerdomain eve2_7xx_pwrdm = {
.prcm_partition = DRA7XX_PRM_PARTITION, .prcm_partition = DRA7XX_PRM_PARTITION,
.pwrsts = PWRSTS_OFF_ON, .pwrsts = PWRSTS_OFF_ON,
.banks = 1, .banks = 1,
.pwrsts_mem_ret = {
[0] = PWRSTS_OFF_RET, /* eve2_bank */
},
.pwrsts_mem_on = { .pwrsts_mem_on = {
[0] = PWRSTS_ON, /* eve2_bank */ [0] = PWRSTS_ON, /* eve2_bank */
}, },
@ -402,9 +333,6 @@ static struct powerdomain eve1_7xx_pwrdm = {
.prcm_partition = DRA7XX_PRM_PARTITION, .prcm_partition = DRA7XX_PRM_PARTITION,
.pwrsts = PWRSTS_OFF_ON, .pwrsts = PWRSTS_OFF_ON,
.banks = 1, .banks = 1,
.pwrsts_mem_ret = {
[0] = PWRSTS_OFF_RET, /* eve1_bank */
},
.pwrsts_mem_on = { .pwrsts_mem_on = {
[0] = PWRSTS_ON, /* eve1_bank */ [0] = PWRSTS_ON, /* eve1_bank */
}, },

View File

@ -496,8 +496,7 @@ void __init omap_init_time(void)
__omap_sync32k_timer_init(1, "timer_32k_ck", "ti,timer-alwon", __omap_sync32k_timer_init(1, "timer_32k_ck", "ti,timer-alwon",
2, "timer_sys_ck", NULL, false); 2, "timer_sys_ck", NULL, false);
if (of_have_populated_dt()) clocksource_probe();
clocksource_probe();
} }
#if defined(CONFIG_ARCH_OMAP3) || defined(CONFIG_SOC_AM43XX) #if defined(CONFIG_ARCH_OMAP3) || defined(CONFIG_SOC_AM43XX)
@ -505,6 +504,8 @@ void __init omap3_secure_sync32k_timer_init(void)
{ {
__omap_sync32k_timer_init(12, "secure_32k_fck", "ti,timer-secure", __omap_sync32k_timer_init(12, "secure_32k_fck", "ti,timer-secure",
2, "timer_sys_ck", NULL, false); 2, "timer_sys_ck", NULL, false);
clocksource_probe();
} }
#endif /* CONFIG_ARCH_OMAP3 */ #endif /* CONFIG_ARCH_OMAP3 */
@ -513,6 +514,8 @@ void __init omap3_gptimer_timer_init(void)
{ {
__omap_sync32k_timer_init(2, "timer_sys_ck", NULL, __omap_sync32k_timer_init(2, "timer_sys_ck", NULL,
1, "timer_sys_ck", "ti,timer-alwon", true); 1, "timer_sys_ck", "ti,timer-alwon", true);
clocksource_probe();
} }
#endif #endif

View File

@ -68,7 +68,7 @@
#include <linux/platform_data/asoc-s3c.h> #include <linux/platform_data/asoc-s3c.h>
#include <linux/platform_data/spi-s3c64xx.h> #include <linux/platform_data/spi-s3c64xx.h>
static u64 samsung_device_dma_mask = DMA_BIT_MASK(32); #define samsung_device_dma_mask (*((u64[]) { DMA_BIT_MASK(32) }))
/* AC97 */ /* AC97 */
#ifdef CONFIG_CPU_S3C2440 #ifdef CONFIG_CPU_S3C2440

View File

@ -95,7 +95,7 @@ boot := arch/arm64/boot
Image: vmlinux Image: vmlinux
$(Q)$(MAKE) $(build)=$(boot) $(boot)/$@ $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
Image.%: vmlinux Image.%: Image
$(Q)$(MAKE) $(build)=$(boot) $(boot)/$@ $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
zinstall install: zinstall install:

View File

@ -125,7 +125,7 @@ amba {
#size-cells = <1>; #size-cells = <1>;
#interrupts-cells = <3>; #interrupts-cells = <3>;
compatible = "arm,amba-bus"; compatible = "simple-bus";
interrupt-parent = <&gic>; interrupt-parent = <&gic>;
ranges; ranges;

View File

@ -163,7 +163,7 @@ xin24m: xin24m {
}; };
amba { amba {
compatible = "arm,amba-bus"; compatible = "simple-bus";
#address-cells = <2>; #address-cells = <2>;
#size-cells = <2>; #size-cells = <2>;
ranges; ranges;

View File

@ -38,25 +38,54 @@ extern int kgdb_fault_expected;
#endif /* !__ASSEMBLY__ */ #endif /* !__ASSEMBLY__ */
/* /*
* gdb is expecting the following registers layout. * gdb remote procotol (well most versions of it) expects the following
* register layout.
* *
* General purpose regs: * General purpose regs:
* r0-r30: 64 bit * r0-r30: 64 bit
* sp,pc : 64 bit * sp,pc : 64 bit
* pstate : 64 bit * pstate : 32 bit
* Total: 34 * Total: 33 + 1
* FPU regs: * FPU regs:
* f0-f31: 128 bit * f0-f31: 128 bit
* Total: 32
* Extra regs
* fpsr & fpcr: 32 bit * fpsr & fpcr: 32 bit
* Total: 2 * Total: 32 + 2
* *
* To expand a little on the "most versions of it"... when the gdb remote
* protocol for AArch64 was developed it depended on a statement in the
* Architecture Reference Manual that claimed "SPSR_ELx is a 32-bit register".
* and, as a result, allocated only 32-bits for the PSTATE in the remote
* protocol. In fact this statement is still present in ARM DDI 0487A.i.
*
* Unfortunately "is a 32-bit register" has a very special meaning for
* system registers. It means that "the upper bits, bits[63:32], are
* RES0.". RES0 is heavily used in the ARM architecture documents as a
* way to leave space for future architecture changes. So to translate a
* little for people who don't spend their spare time reading ARM architecture
* manuals, what "is a 32-bit register" actually means in this context is
* "is a 64-bit register but one with no meaning allocated to any of the
* upper 32-bits... *yet*".
*
* Perhaps then we should not be surprised that this has led to some
* confusion. Specifically a patch, influenced by the above translation,
* that extended PSTATE to 64-bit was accepted into gdb-7.7 but the patch
* was reverted in gdb-7.8.1 and all later releases, when this was
* discovered to be an undocumented protocol change.
*
* So... it is *not* wrong for us to only allocate 32-bits to PSTATE
* here even though the kernel itself allocates 64-bits for the same
* state. That is because this bit of code tells the kernel how the gdb
* remote protocol (well most versions of it) describes the register state.
*
* Note that if you are using one of the versions of gdb that supports
* the gdb-7.7 version of the protocol you cannot use kgdb directly
* without providing a custom register description (gdb can load new
* protocol descriptions at runtime).
*/ */
#define _GP_REGS 34 #define _GP_REGS 33
#define _FP_REGS 32 #define _FP_REGS 32
#define _EXTRA_REGS 2 #define _EXTRA_REGS 3
/* /*
* general purpose registers size in bytes. * general purpose registers size in bytes.
* pstate is only 4 bytes. subtract 4 bytes * pstate is only 4 bytes. subtract 4 bytes

View File

@ -26,7 +26,7 @@
#define check_pgt_cache() do { } while (0) #define check_pgt_cache() do { } while (0)
#define PGALLOC_GFP (GFP_KERNEL | __GFP_NOTRACK | __GFP_REPEAT | __GFP_ZERO) #define PGALLOC_GFP (GFP_KERNEL | __GFP_NOTRACK | __GFP_ZERO)
#define PGD_SIZE (PTRS_PER_PGD * sizeof(pgd_t)) #define PGD_SIZE (PTRS_PER_PGD * sizeof(pgd_t))
#if CONFIG_PGTABLE_LEVELS > 2 #if CONFIG_PGTABLE_LEVELS > 2

View File

@ -124,6 +124,18 @@ static inline void cpu_panic_kernel(void)
cpu_park_loop(); cpu_park_loop();
} }
/*
* If a secondary CPU enters the kernel but fails to come online,
* (e.g. due to mismatched features), and cannot exit the kernel,
* we increment cpus_stuck_in_kernel and leave the CPU in a
* quiesecent loop within the kernel text. The memory containing
* this loop must not be re-used for anything else as the 'stuck'
* core is executing it.
*
* This function is used to inhibit features like kexec and hibernate.
*/
bool cpus_are_stuck_in_kernel(void);
#endif /* ifndef __ASSEMBLY__ */ #endif /* ifndef __ASSEMBLY__ */
#endif /* ifndef __ASM_SMP_H */ #endif /* ifndef __ASM_SMP_H */

View File

@ -30,22 +30,53 @@ static inline void arch_spin_unlock_wait(arch_spinlock_t *lock)
{ {
unsigned int tmp; unsigned int tmp;
arch_spinlock_t lockval; arch_spinlock_t lockval;
u32 owner;
/*
* Ensure prior spin_lock operations to other locks have completed
* on this CPU before we test whether "lock" is locked.
*/
smp_mb();
owner = READ_ONCE(lock->owner) << 16;
asm volatile( asm volatile(
" sevl\n" " sevl\n"
"1: wfe\n" "1: wfe\n"
"2: ldaxr %w0, %2\n" "2: ldaxr %w0, %2\n"
/* Is the lock free? */
" eor %w1, %w0, %w0, ror #16\n" " eor %w1, %w0, %w0, ror #16\n"
" cbnz %w1, 1b\n" " cbz %w1, 3f\n"
/* Lock taken -- has there been a subsequent unlock->lock transition? */
" eor %w1, %w3, %w0, lsl #16\n"
" cbz %w1, 1b\n"
/*
* The owner has been updated, so there was an unlock->lock
* transition that we missed. That means we can rely on the
* store-release of the unlock operation paired with the
* load-acquire of the lock operation to publish any of our
* previous stores to the new lock owner and therefore don't
* need to bother with the writeback below.
*/
" b 4f\n"
"3:\n"
/*
* Serialise against any concurrent lockers by writing back the
* unlocked lock value
*/
ARM64_LSE_ATOMIC_INSN( ARM64_LSE_ATOMIC_INSN(
/* LL/SC */ /* LL/SC */
" stxr %w1, %w0, %2\n" " stxr %w1, %w0, %2\n"
" cbnz %w1, 2b\n", /* Serialise against any concurrent lockers */
/* LSE atomics */
" nop\n" " nop\n"
" nop\n") " nop\n",
/* LSE atomics */
" mov %w1, %w0\n"
" cas %w0, %w0, %2\n"
" eor %w1, %w1, %w0\n")
/* Somebody else wrote to the lock, GOTO 10 and reload the value */
" cbnz %w1, 2b\n"
"4:"
: "=&r" (lockval), "=&r" (tmp), "+Q" (*lock) : "=&r" (lockval), "=&r" (tmp), "+Q" (*lock)
: : "r" (owner)
: "memory"); : "memory");
} }
@ -148,6 +179,7 @@ static inline int arch_spin_value_unlocked(arch_spinlock_t lock)
static inline int arch_spin_is_locked(arch_spinlock_t *lock) static inline int arch_spin_is_locked(arch_spinlock_t *lock)
{ {
smp_mb(); /* See arch_spin_unlock_wait */
return !arch_spin_value_unlocked(READ_ONCE(*lock)); return !arch_spin_value_unlocked(READ_ONCE(*lock));
} }

View File

@ -33,6 +33,7 @@
#include <asm/pgtable.h> #include <asm/pgtable.h>
#include <asm/pgtable-hwdef.h> #include <asm/pgtable-hwdef.h>
#include <asm/sections.h> #include <asm/sections.h>
#include <asm/smp.h>
#include <asm/suspend.h> #include <asm/suspend.h>
#include <asm/virt.h> #include <asm/virt.h>
@ -236,6 +237,11 @@ int swsusp_arch_suspend(void)
unsigned long flags; unsigned long flags;
struct sleep_stack_data state; struct sleep_stack_data state;
if (cpus_are_stuck_in_kernel()) {
pr_err("Can't hibernate: no mechanism to offline secondary CPUs.\n");
return -EBUSY;
}
local_dbg_save(flags); local_dbg_save(flags);
if (__cpu_suspend_enter(&state)) { if (__cpu_suspend_enter(&state)) {

View File

@ -58,7 +58,17 @@ struct dbg_reg_def_t dbg_reg_def[DBG_MAX_REG_NUM] = {
{ "x30", 8, offsetof(struct pt_regs, regs[30])}, { "x30", 8, offsetof(struct pt_regs, regs[30])},
{ "sp", 8, offsetof(struct pt_regs, sp)}, { "sp", 8, offsetof(struct pt_regs, sp)},
{ "pc", 8, offsetof(struct pt_regs, pc)}, { "pc", 8, offsetof(struct pt_regs, pc)},
{ "pstate", 8, offsetof(struct pt_regs, pstate)}, /*
* struct pt_regs thinks PSTATE is 64-bits wide but gdb remote
* protocol disagrees. Therefore we must extract only the lower
* 32-bits. Look for the big comment in asm/kgdb.h for more
* detail.
*/
{ "pstate", 4, offsetof(struct pt_regs, pstate)
#ifdef CONFIG_CPU_BIG_ENDIAN
+ 4
#endif
},
{ "v0", 16, -1 }, { "v0", 16, -1 },
{ "v1", 16, -1 }, { "v1", 16, -1 },
{ "v2", 16, -1 }, { "v2", 16, -1 },
@ -128,6 +138,8 @@ sleeping_thread_to_gdb_regs(unsigned long *gdb_regs, struct task_struct *task)
memset((char *)gdb_regs, 0, NUMREGBYTES); memset((char *)gdb_regs, 0, NUMREGBYTES);
thread_regs = task_pt_regs(task); thread_regs = task_pt_regs(task);
memcpy((void *)gdb_regs, (void *)thread_regs->regs, GP_REG_BYTES); memcpy((void *)gdb_regs, (void *)thread_regs->regs, GP_REG_BYTES);
/* Special case for PSTATE (check comments in asm/kgdb.h for details) */
dbg_get_reg(33, gdb_regs + GP_REG_BYTES, thread_regs);
} }
void kgdb_arch_set_pc(struct pt_regs *regs, unsigned long pc) void kgdb_arch_set_pc(struct pt_regs *regs, unsigned long pc)

View File

@ -909,3 +909,21 @@ int setup_profiling_timer(unsigned int multiplier)
{ {
return -EINVAL; return -EINVAL;
} }
static bool have_cpu_die(void)
{
#ifdef CONFIG_HOTPLUG_CPU
int any_cpu = raw_smp_processor_id();
if (cpu_ops[any_cpu]->cpu_die)
return true;
#endif
return false;
}
bool cpus_are_stuck_in_kernel(void)
{
bool smp_spin_tables = (num_possible_cpus() > 1 && !have_cpu_die());
return !!cpus_stuck_in_kernel || smp_spin_tables;
}

View File

@ -64,8 +64,7 @@ static void dump_mem(const char *lvl, const char *str, unsigned long bottom,
/* /*
* We need to switch to kernel mode so that we can use __get_user * We need to switch to kernel mode so that we can use __get_user
* to safely read from kernel space. Note that we now dump the * to safely read from kernel space.
* code first, just in case the backtrace kills us.
*/ */
fs = get_fs(); fs = get_fs();
set_fs(KERNEL_DS); set_fs(KERNEL_DS);
@ -111,21 +110,12 @@ static void dump_backtrace_entry(unsigned long where)
print_ip_sym(where); print_ip_sym(where);
} }
static void dump_instr(const char *lvl, struct pt_regs *regs) static void __dump_instr(const char *lvl, struct pt_regs *regs)
{ {
unsigned long addr = instruction_pointer(regs); unsigned long addr = instruction_pointer(regs);
mm_segment_t fs;
char str[sizeof("00000000 ") * 5 + 2 + 1], *p = str; char str[sizeof("00000000 ") * 5 + 2 + 1], *p = str;
int i; int i;
/*
* We need to switch to kernel mode so that we can use __get_user
* to safely read from kernel space. Note that we now dump the
* code first, just in case the backtrace kills us.
*/
fs = get_fs();
set_fs(KERNEL_DS);
for (i = -4; i < 1; i++) { for (i = -4; i < 1; i++) {
unsigned int val, bad; unsigned int val, bad;
@ -139,8 +129,18 @@ static void dump_instr(const char *lvl, struct pt_regs *regs)
} }
} }
printk("%sCode: %s\n", lvl, str); printk("%sCode: %s\n", lvl, str);
}
set_fs(fs); static void dump_instr(const char *lvl, struct pt_regs *regs)
{
if (!user_mode(regs)) {
mm_segment_t fs = get_fs();
set_fs(KERNEL_DS);
__dump_instr(lvl, regs);
set_fs(fs);
} else {
__dump_instr(lvl, regs);
}
} }
static void dump_backtrace(struct pt_regs *regs, struct task_struct *tsk) static void dump_backtrace(struct pt_regs *regs, struct task_struct *tsk)

View File

@ -179,7 +179,7 @@ static u64 new_context(struct mm_struct *mm, unsigned int cpu)
&asid_generation); &asid_generation);
flush_context(cpu); flush_context(cpu);
/* We have at least 1 ASID per CPU, so this will always succeed */ /* We have more ASIDs than CPUs, so this will always succeed */
asid = find_next_zero_bit(asid_map, NUM_USER_ASIDS, 1); asid = find_next_zero_bit(asid_map, NUM_USER_ASIDS, 1);
set_asid: set_asid:
@ -227,8 +227,11 @@ void check_and_switch_context(struct mm_struct *mm, unsigned int cpu)
static int asids_init(void) static int asids_init(void)
{ {
asid_bits = get_cpu_asid_bits(); asid_bits = get_cpu_asid_bits();
/* If we end up with more CPUs than ASIDs, expect things to crash */ /*
WARN_ON(NUM_USER_ASIDS < num_possible_cpus()); * Expect allocation after rollover to fail if we don't have at least
* one more ASID than CPUs. ASID #0 is reserved for init_mm.
*/
WARN_ON(NUM_USER_ASIDS - 1 <= num_possible_cpus());
atomic64_set(&asid_generation, ASID_FIRST_VERSION); atomic64_set(&asid_generation, ASID_FIRST_VERSION);
asid_map = kzalloc(BITS_TO_LONGS(NUM_USER_ASIDS) * sizeof(*asid_map), asid_map = kzalloc(BITS_TO_LONGS(NUM_USER_ASIDS) * sizeof(*asid_map),
GFP_KERNEL); GFP_KERNEL);

View File

@ -109,7 +109,7 @@ int ptep_set_access_flags(struct vm_area_struct *vma,
* PTE_RDONLY is cleared by default in the asm below, so set it in * PTE_RDONLY is cleared by default in the asm below, so set it in
* back if necessary (read-only or clean PTE). * back if necessary (read-only or clean PTE).
*/ */
if (!pte_write(entry) || !dirty) if (!pte_write(entry) || !pte_sw_dirty(entry))
pte_val(entry) |= PTE_RDONLY; pte_val(entry) |= PTE_RDONLY;
/* /*
@ -441,7 +441,7 @@ static int do_bad(unsigned long addr, unsigned int esr, struct pt_regs *regs)
return 1; return 1;
} }
static struct fault_info { static const struct fault_info {
int (*fn)(unsigned long addr, unsigned int esr, struct pt_regs *regs); int (*fn)(unsigned long addr, unsigned int esr, struct pt_regs *regs);
int sig; int sig;
int code; int code;

View File

@ -71,10 +71,6 @@ void __sync_icache_dcache(pte_t pte, unsigned long addr)
{ {
struct page *page = pte_page(pte); struct page *page = pte_page(pte);
/* no flushing needed for anonymous pages */
if (!page_mapping(page))
return;
if (!test_and_set_bit(PG_dcache_clean, &page->flags)) if (!test_and_set_bit(PG_dcache_clean, &page->flags))
sync_icache_aliases(page_address(page), sync_icache_aliases(page_address(page),
PAGE_SIZE << compound_order(page)); PAGE_SIZE << compound_order(page));

View File

@ -43,7 +43,7 @@ static inline void pgd_ctor(void *x)
*/ */
static inline pgd_t *pgd_alloc(struct mm_struct *mm) static inline pgd_t *pgd_alloc(struct mm_struct *mm)
{ {
return quicklist_alloc(QUICK_PGD, GFP_KERNEL | __GFP_REPEAT, pgd_ctor); return quicklist_alloc(QUICK_PGD, GFP_KERNEL, pgd_ctor);
} }
static inline void pgd_free(struct mm_struct *mm, pgd_t *pgd) static inline void pgd_free(struct mm_struct *mm, pgd_t *pgd)
@ -54,7 +54,7 @@ static inline void pgd_free(struct mm_struct *mm, pgd_t *pgd)
static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm,
unsigned long address) unsigned long address)
{ {
return quicklist_alloc(QUICK_PT, GFP_KERNEL | __GFP_REPEAT, NULL); return quicklist_alloc(QUICK_PT, GFP_KERNEL, NULL);
} }
static inline pgtable_t pte_alloc_one(struct mm_struct *mm, static inline pgtable_t pte_alloc_one(struct mm_struct *mm,
@ -63,7 +63,7 @@ static inline pgtable_t pte_alloc_one(struct mm_struct *mm,
struct page *page; struct page *page;
void *pg; void *pg;
pg = quicklist_alloc(QUICK_PT, GFP_KERNEL | __GFP_REPEAT, NULL); pg = quicklist_alloc(QUICK_PT, GFP_KERNEL, NULL);
if (!pg) if (!pg)
return NULL; return NULL;

View File

@ -24,14 +24,14 @@ static inline void pgd_free(struct mm_struct *mm, pgd_t *pgd)
static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address) static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address)
{ {
pte_t *pte = (pte_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO); pte_t *pte = (pte_t *)__get_free_page(GFP_KERNEL|__GFP_ZERO);
return pte; return pte;
} }
static inline pgtable_t pte_alloc_one(struct mm_struct *mm, unsigned long address) static inline pgtable_t pte_alloc_one(struct mm_struct *mm, unsigned long address)
{ {
struct page *pte; struct page *pte;
pte = alloc_pages(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO, 0); pte = alloc_pages(GFP_KERNEL|__GFP_ZERO, 0);
if (!pte) if (!pte)
return NULL; return NULL;
if (!pgtable_page_ctor(pte)) { if (!pgtable_page_ctor(pte)) {

View File

@ -22,7 +22,7 @@ pgd_t swapper_pg_dir[PTRS_PER_PGD] __attribute__((aligned(PAGE_SIZE)));
pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address) pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address)
{ {
pte_t *pte = (pte_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT); pte_t *pte = (pte_t *)__get_free_page(GFP_KERNEL);
if (pte) if (pte)
clear_page(pte); clear_page(pte);
return pte; return pte;
@ -33,9 +33,9 @@ pgtable_t pte_alloc_one(struct mm_struct *mm, unsigned long address)
struct page *page; struct page *page;
#ifdef CONFIG_HIGHPTE #ifdef CONFIG_HIGHPTE
page = alloc_pages(GFP_KERNEL|__GFP_HIGHMEM|__GFP_REPEAT, 0); page = alloc_pages(GFP_KERNEL|__GFP_HIGHMEM, 0);
#else #else
page = alloc_pages(GFP_KERNEL|__GFP_REPEAT, 0); page = alloc_pages(GFP_KERNEL, 0);
#endif #endif
if (!page) if (!page)
return NULL; return NULL;

View File

@ -64,7 +64,7 @@ static inline struct page *pte_alloc_one(struct mm_struct *mm,
{ {
struct page *pte; struct page *pte;
pte = alloc_page(GFP_KERNEL | __GFP_REPEAT | __GFP_ZERO); pte = alloc_page(GFP_KERNEL | __GFP_ZERO);
if (!pte) if (!pte)
return NULL; return NULL;
if (!pgtable_page_ctor(pte)) { if (!pgtable_page_ctor(pte)) {
@ -78,7 +78,7 @@ static inline struct page *pte_alloc_one(struct mm_struct *mm,
static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm,
unsigned long address) unsigned long address)
{ {
gfp_t flags = GFP_KERNEL | __GFP_REPEAT | __GFP_ZERO; gfp_t flags = GFP_KERNEL | __GFP_ZERO;
return (pte_t *) __get_free_page(flags); return (pte_t *) __get_free_page(flags);
} }

View File

@ -45,7 +45,7 @@ config IA64
select GENERIC_SMP_IDLE_THREAD select GENERIC_SMP_IDLE_THREAD
select ARCH_INIT_TASK select ARCH_INIT_TASK
select ARCH_TASK_STRUCT_ALLOCATOR select ARCH_TASK_STRUCT_ALLOCATOR
select ARCH_THREAD_INFO_ALLOCATOR select ARCH_THREAD_STACK_ALLOCATOR
select ARCH_CLOCKSOURCE_DATA select ARCH_CLOCKSOURCE_DATA
select GENERIC_TIME_VSYSCALL_OLD select GENERIC_TIME_VSYSCALL_OLD
select SYSCTL_ARCH_UNALIGN_NO_WARN select SYSCTL_ARCH_UNALIGN_NO_WARN

View File

@ -48,15 +48,15 @@ struct thread_info {
#ifndef ASM_OFFSETS_C #ifndef ASM_OFFSETS_C
/* how to get the thread information struct from C */ /* how to get the thread information struct from C */
#define current_thread_info() ((struct thread_info *) ((char *) current + IA64_TASK_SIZE)) #define current_thread_info() ((struct thread_info *) ((char *) current + IA64_TASK_SIZE))
#define alloc_thread_info_node(tsk, node) \ #define alloc_thread_stack_node(tsk, node) \
((struct thread_info *) ((char *) (tsk) + IA64_TASK_SIZE)) ((unsigned long *) ((char *) (tsk) + IA64_TASK_SIZE))
#define task_thread_info(tsk) ((struct thread_info *) ((char *) (tsk) + IA64_TASK_SIZE)) #define task_thread_info(tsk) ((struct thread_info *) ((char *) (tsk) + IA64_TASK_SIZE))
#else #else
#define current_thread_info() ((struct thread_info *) 0) #define current_thread_info() ((struct thread_info *) 0)
#define alloc_thread_info_node(tsk, node) ((struct thread_info *) 0) #define alloc_thread_stack_node(tsk, node) ((unsigned long *) 0)
#define task_thread_info(tsk) ((struct thread_info *) 0) #define task_thread_info(tsk) ((struct thread_info *) 0)
#endif #endif
#define free_thread_info(ti) /* nothing */ #define free_thread_stack(ti) /* nothing */
#define task_stack_page(tsk) ((void *)(tsk)) #define task_stack_page(tsk) ((void *)(tsk))
#define __HAVE_THREAD_FUNCTIONS #define __HAVE_THREAD_FUNCTIONS

View File

@ -26,6 +26,7 @@ static struct sighand_struct init_sighand = INIT_SIGHAND(init_sighand);
* handled. This is done by having a special ".data..init_task" section... * handled. This is done by having a special ".data..init_task" section...
*/ */
#define init_thread_info init_task_mem.s.thread_info #define init_thread_info init_task_mem.s.thread_info
#define init_stack init_task_mem.stack
union { union {
struct { struct {

View File

@ -14,7 +14,7 @@ extern const char bad_pmd_string[];
extern inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, extern inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm,
unsigned long address) unsigned long address)
{ {
unsigned long page = __get_free_page(GFP_DMA|__GFP_REPEAT); unsigned long page = __get_free_page(GFP_DMA);
if (!page) if (!page)
return NULL; return NULL;
@ -51,7 +51,7 @@ static inline void __pte_free_tlb(struct mmu_gather *tlb, pgtable_t page,
static inline struct page *pte_alloc_one(struct mm_struct *mm, static inline struct page *pte_alloc_one(struct mm_struct *mm,
unsigned long address) unsigned long address)
{ {
struct page *page = alloc_pages(GFP_DMA|__GFP_REPEAT, 0); struct page *page = alloc_pages(GFP_DMA, 0);
pte_t *pte; pte_t *pte;
if (!page) if (!page)

View File

@ -11,7 +11,7 @@ static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long ad
{ {
pte_t *pte; pte_t *pte;
pte = (pte_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO); pte = (pte_t *)__get_free_page(GFP_KERNEL|__GFP_ZERO);
if (pte) { if (pte) {
__flush_page_to_ram(pte); __flush_page_to_ram(pte);
flush_tlb_kernel_page(pte); flush_tlb_kernel_page(pte);
@ -32,7 +32,7 @@ static inline pgtable_t pte_alloc_one(struct mm_struct *mm, unsigned long addres
struct page *page; struct page *page;
pte_t *pte; pte_t *pte;
page = alloc_pages(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO, 0); page = alloc_pages(GFP_KERNEL|__GFP_ZERO, 0);
if(!page) if(!page)
return NULL; return NULL;
if (!pgtable_page_ctor(page)) { if (!pgtable_page_ctor(page)) {

View File

@ -37,7 +37,7 @@ do { \
static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm,
unsigned long address) unsigned long address)
{ {
unsigned long page = __get_free_page(GFP_KERNEL|__GFP_REPEAT); unsigned long page = __get_free_page(GFP_KERNEL);
if (!page) if (!page)
return NULL; return NULL;
@ -49,7 +49,7 @@ static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm,
static inline pgtable_t pte_alloc_one(struct mm_struct *mm, static inline pgtable_t pte_alloc_one(struct mm_struct *mm,
unsigned long address) unsigned long address)
{ {
struct page *page = alloc_pages(GFP_KERNEL|__GFP_REPEAT, 0); struct page *page = alloc_pages(GFP_KERNEL, 0);
if (page == NULL) if (page == NULL)
return NULL; return NULL;

View File

@ -42,8 +42,7 @@ static inline void pgd_free(struct mm_struct *mm, pgd_t *pgd)
static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm,
unsigned long address) unsigned long address)
{ {
pte_t *pte = (pte_t *)__get_free_page(GFP_KERNEL | __GFP_REPEAT | pte_t *pte = (pte_t *)__get_free_page(GFP_KERNEL | __GFP_ZERO);
__GFP_ZERO);
return pte; return pte;
} }
@ -51,7 +50,7 @@ static inline pgtable_t pte_alloc_one(struct mm_struct *mm,
unsigned long address) unsigned long address)
{ {
struct page *pte; struct page *pte;
pte = alloc_pages(GFP_KERNEL | __GFP_REPEAT | __GFP_ZERO, 0); pte = alloc_pages(GFP_KERNEL | __GFP_ZERO, 0);
if (!pte) if (!pte)
return NULL; return NULL;
if (!pgtable_page_ctor(pte)) { if (!pgtable_page_ctor(pte)) {

View File

@ -116,9 +116,9 @@ static inline struct page *pte_alloc_one(struct mm_struct *mm,
struct page *ptepage; struct page *ptepage;
#ifdef CONFIG_HIGHPTE #ifdef CONFIG_HIGHPTE
int flags = GFP_KERNEL | __GFP_HIGHMEM | __GFP_REPEAT; int flags = GFP_KERNEL | __GFP_HIGHMEM;
#else #else
int flags = GFP_KERNEL | __GFP_REPEAT; int flags = GFP_KERNEL;
#endif #endif
ptepage = alloc_pages(flags, 0); ptepage = alloc_pages(flags, 0);

View File

@ -239,8 +239,7 @@ __init_refok pte_t *pte_alloc_one_kernel(struct mm_struct *mm,
{ {
pte_t *pte; pte_t *pte;
if (mem_init_done) { if (mem_init_done) {
pte = (pte_t *)__get_free_page(GFP_KERNEL | pte = (pte_t *)__get_free_page(GFP_KERNEL | __GFP_ZERO);
__GFP_REPEAT | __GFP_ZERO);
} else { } else {
pte = (pte_t *)early_get_page(); pte = (pte_t *)early_get_page();
if (pte) if (pte)

View File

@ -74,7 +74,7 @@
#define KVM_GUEST_KUSEG 0x00000000UL #define KVM_GUEST_KUSEG 0x00000000UL
#define KVM_GUEST_KSEG0 0x40000000UL #define KVM_GUEST_KSEG0 0x40000000UL
#define KVM_GUEST_KSEG23 0x60000000UL #define KVM_GUEST_KSEG23 0x60000000UL
#define KVM_GUEST_KSEGX(a) ((_ACAST32_(a)) & 0x60000000) #define KVM_GUEST_KSEGX(a) ((_ACAST32_(a)) & 0xe0000000)
#define KVM_GUEST_CPHYSADDR(a) ((_ACAST32_(a)) & 0x1fffffff) #define KVM_GUEST_CPHYSADDR(a) ((_ACAST32_(a)) & 0x1fffffff)
#define KVM_GUEST_CKSEG0ADDR(a) (KVM_GUEST_CPHYSADDR(a) | KVM_GUEST_KSEG0) #define KVM_GUEST_CKSEG0ADDR(a) (KVM_GUEST_CPHYSADDR(a) | KVM_GUEST_KSEG0)
@ -338,6 +338,7 @@ struct kvm_mips_tlb {
#define KVM_MIPS_GUEST_TLB_SIZE 64 #define KVM_MIPS_GUEST_TLB_SIZE 64
struct kvm_vcpu_arch { struct kvm_vcpu_arch {
void *host_ebase, *guest_ebase; void *host_ebase, *guest_ebase;
int (*vcpu_run)(struct kvm_run *run, struct kvm_vcpu *vcpu);
unsigned long host_stack; unsigned long host_stack;
unsigned long host_gp; unsigned long host_gp;

View File

@ -69,7 +69,7 @@ static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm,
{ {
pte_t *pte; pte_t *pte;
pte = (pte_t *) __get_free_pages(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO, PTE_ORDER); pte = (pte_t *) __get_free_pages(GFP_KERNEL|__GFP_ZERO, PTE_ORDER);
return pte; return pte;
} }
@ -79,7 +79,7 @@ static inline struct page *pte_alloc_one(struct mm_struct *mm,
{ {
struct page *pte; struct page *pte;
pte = alloc_pages(GFP_KERNEL | __GFP_REPEAT, PTE_ORDER); pte = alloc_pages(GFP_KERNEL, PTE_ORDER);
if (!pte) if (!pte)
return NULL; return NULL;
clear_highpage(pte); clear_highpage(pte);
@ -113,7 +113,7 @@ static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long address)
{ {
pmd_t *pmd; pmd_t *pmd;
pmd = (pmd_t *) __get_free_pages(GFP_KERNEL|__GFP_REPEAT, PMD_ORDER); pmd = (pmd_t *) __get_free_pages(GFP_KERNEL, PMD_ORDER);
if (pmd) if (pmd)
pmd_init((unsigned long)pmd, (unsigned long)invalid_pte_table); pmd_init((unsigned long)pmd, (unsigned long)invalid_pte_table);
return pmd; return pmd;

View File

@ -1636,6 +1636,7 @@ enum emulation_result kvm_mips_emulate_cache(uint32_t inst, uint32_t *opc,
if (index < 0) { if (index < 0) {
vcpu->arch.host_cp0_entryhi = (va & VPN2_MASK); vcpu->arch.host_cp0_entryhi = (va & VPN2_MASK);
vcpu->arch.host_cp0_badvaddr = va; vcpu->arch.host_cp0_badvaddr = va;
vcpu->arch.pc = curr_pc;
er = kvm_mips_emulate_tlbmiss_ld(cause, NULL, run, er = kvm_mips_emulate_tlbmiss_ld(cause, NULL, run,
vcpu); vcpu);
preempt_enable(); preempt_enable();
@ -1647,6 +1648,8 @@ enum emulation_result kvm_mips_emulate_cache(uint32_t inst, uint32_t *opc,
* invalid exception to the guest * invalid exception to the guest
*/ */
if (!TLB_IS_VALID(*tlb, va)) { if (!TLB_IS_VALID(*tlb, va)) {
vcpu->arch.host_cp0_badvaddr = va;
vcpu->arch.pc = curr_pc;
er = kvm_mips_emulate_tlbinv_ld(cause, NULL, er = kvm_mips_emulate_tlbinv_ld(cause, NULL,
run, vcpu); run, vcpu);
preempt_enable(); preempt_enable();
@ -1666,7 +1669,7 @@ enum emulation_result kvm_mips_emulate_cache(uint32_t inst, uint32_t *opc,
cache, op, base, arch->gprs[base], offset); cache, op, base, arch->gprs[base], offset);
er = EMULATE_FAIL; er = EMULATE_FAIL;
preempt_enable(); preempt_enable();
goto dont_update_pc; goto done;
} }
@ -1694,16 +1697,20 @@ enum emulation_result kvm_mips_emulate_cache(uint32_t inst, uint32_t *opc,
kvm_err("NO-OP CACHE (cache: %#x, op: %#x, base[%d]: %#lx, offset: %#x\n", kvm_err("NO-OP CACHE (cache: %#x, op: %#x, base[%d]: %#lx, offset: %#x\n",
cache, op, base, arch->gprs[base], offset); cache, op, base, arch->gprs[base], offset);
er = EMULATE_FAIL; er = EMULATE_FAIL;
preempt_enable();
goto dont_update_pc;
} }
preempt_enable(); preempt_enable();
done:
/* Rollback PC only if emulation was unsuccessful */
if (er == EMULATE_FAIL)
vcpu->arch.pc = curr_pc;
dont_update_pc: dont_update_pc:
/* Rollback PC */ /*
vcpu->arch.pc = curr_pc; * This is for exceptions whose emulation updates the PC, so do not
done: * overwrite the PC under any circumstances
*/
return er; return er;
} }

View File

@ -28,6 +28,7 @@
#define MIPS_EXC_MAX 12 #define MIPS_EXC_MAX 12
/* XXXSL More to follow */ /* XXXSL More to follow */
extern char __kvm_mips_vcpu_run_end[];
extern char mips32_exception[], mips32_exceptionEnd[]; extern char mips32_exception[], mips32_exceptionEnd[];
extern char mips32_GuestException[], mips32_GuestExceptionEnd[]; extern char mips32_GuestException[], mips32_GuestExceptionEnd[];

View File

@ -202,6 +202,7 @@ FEXPORT(__kvm_mips_load_k0k1)
/* Jump to guest */ /* Jump to guest */
eret eret
EXPORT(__kvm_mips_vcpu_run_end)
VECTOR(MIPSX(exception), unknown) VECTOR(MIPSX(exception), unknown)
/* Find out what mode we came from and jump to the proper handler. */ /* Find out what mode we came from and jump to the proper handler. */

View File

@ -315,6 +315,15 @@ struct kvm_vcpu *kvm_arch_vcpu_create(struct kvm *kvm, unsigned int id)
memcpy(gebase + offset, mips32_GuestException, memcpy(gebase + offset, mips32_GuestException,
mips32_GuestExceptionEnd - mips32_GuestException); mips32_GuestExceptionEnd - mips32_GuestException);
#ifdef MODULE
offset += mips32_GuestExceptionEnd - mips32_GuestException;
memcpy(gebase + offset, (char *)__kvm_mips_vcpu_run,
__kvm_mips_vcpu_run_end - (char *)__kvm_mips_vcpu_run);
vcpu->arch.vcpu_run = gebase + offset;
#else
vcpu->arch.vcpu_run = __kvm_mips_vcpu_run;
#endif
/* Invalidate the icache for these ranges */ /* Invalidate the icache for these ranges */
local_flush_icache_range((unsigned long)gebase, local_flush_icache_range((unsigned long)gebase,
(unsigned long)gebase + ALIGN(size, PAGE_SIZE)); (unsigned long)gebase + ALIGN(size, PAGE_SIZE));
@ -404,7 +413,7 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *run)
/* Disable hardware page table walking while in guest */ /* Disable hardware page table walking while in guest */
htw_stop(); htw_stop();
r = __kvm_mips_vcpu_run(run, vcpu); r = vcpu->arch.vcpu_run(run, vcpu);
/* Re-enable HTW before enabling interrupts */ /* Re-enable HTW before enabling interrupts */
htw_start(); htw_start();

View File

@ -115,7 +115,7 @@ static inline unsigned long current_stack_pointer(void)
} }
#ifndef CONFIG_KGDB #ifndef CONFIG_KGDB
void arch_release_thread_info(struct thread_info *ti); void arch_release_thread_stack(unsigned long *stack);
#endif #endif
#define get_thread_info(ti) get_task_struct((ti)->task) #define get_thread_info(ti) get_task_struct((ti)->task)
#define put_thread_info(ti) put_task_struct((ti)->task) #define put_thread_info(ti) put_task_struct((ti)->task)

View File

@ -397,8 +397,9 @@ static bool kgdb_arch_undo_singlestep(struct pt_regs *regs)
* single-step state is cleared. At this point the breakpoints should have * single-step state is cleared. At this point the breakpoints should have
* been removed by __switch_to(). * been removed by __switch_to().
*/ */
void arch_release_thread_info(struct thread_info *ti) void arch_release_thread_stack(unsigned long *stack)
{ {
struct thread_info *ti = (void *)stack;
if (kgdb_sstep_thread == ti) { if (kgdb_sstep_thread == ti) {
kgdb_sstep_thread = NULL; kgdb_sstep_thread = NULL;

View File

@ -63,7 +63,7 @@ void set_pmd_pfn(unsigned long vaddr, unsigned long pfn, pgprot_t flags)
pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address) pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address)
{ {
pte_t *pte = (pte_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT); pte_t *pte = (pte_t *)__get_free_page(GFP_KERNEL);
if (pte) if (pte)
clear_page(pte); clear_page(pte);
return pte; return pte;
@ -74,9 +74,9 @@ struct page *pte_alloc_one(struct mm_struct *mm, unsigned long address)
struct page *pte; struct page *pte;
#ifdef CONFIG_HIGHPTE #ifdef CONFIG_HIGHPTE
pte = alloc_pages(GFP_KERNEL|__GFP_HIGHMEM|__GFP_REPEAT, 0); pte = alloc_pages(GFP_KERNEL|__GFP_HIGHMEM, 0);
#else #else
pte = alloc_pages(GFP_KERNEL|__GFP_REPEAT, 0); pte = alloc_pages(GFP_KERNEL, 0);
#endif #endif
if (!pte) if (!pte)
return NULL; return NULL;

View File

@ -42,8 +42,7 @@ static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm,
{ {
pte_t *pte; pte_t *pte;
pte = (pte_t *) __get_free_pages(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO, pte = (pte_t *) __get_free_pages(GFP_KERNEL|__GFP_ZERO, PTE_ORDER);
PTE_ORDER);
return pte; return pte;
} }
@ -53,7 +52,7 @@ static inline pgtable_t pte_alloc_one(struct mm_struct *mm,
{ {
struct page *pte; struct page *pte;
pte = alloc_pages(GFP_KERNEL | __GFP_REPEAT, PTE_ORDER); pte = alloc_pages(GFP_KERNEL, PTE_ORDER);
if (pte) { if (pte) {
if (!pgtable_page_ctor(pte)) { if (!pgtable_page_ctor(pte)) {
__free_page(pte); __free_page(pte);

View File

@ -77,7 +77,7 @@ static inline struct page *pte_alloc_one(struct mm_struct *mm,
unsigned long address) unsigned long address)
{ {
struct page *pte; struct page *pte;
pte = alloc_pages(GFP_KERNEL|__GFP_REPEAT, 0); pte = alloc_pages(GFP_KERNEL, 0);
if (!pte) if (!pte)
return NULL; return NULL;
clear_page(page_address(pte)); clear_page(page_address(pte));

View File

@ -122,7 +122,7 @@ pte_t __init_refok *pte_alloc_one_kernel(struct mm_struct *mm,
pte_t *pte; pte_t *pte;
if (likely(mem_init_done)) { if (likely(mem_init_done)) {
pte = (pte_t *) __get_free_page(GFP_KERNEL | __GFP_REPEAT); pte = (pte_t *) __get_free_page(GFP_KERNEL);
} else { } else {
pte = (pte_t *) alloc_bootmem_low_pages(PAGE_SIZE); pte = (pte_t *) alloc_bootmem_low_pages(PAGE_SIZE);
#if 0 #if 0

View File

@ -63,8 +63,7 @@ static inline void pgd_populate(struct mm_struct *mm, pgd_t *pgd, pmd_t *pmd)
static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long address) static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long address)
{ {
pmd_t *pmd = (pmd_t *)__get_free_pages(GFP_KERNEL|__GFP_REPEAT, pmd_t *pmd = (pmd_t *)__get_free_pages(GFP_KERNEL, PMD_ORDER);
PMD_ORDER);
if (pmd) if (pmd)
memset(pmd, 0, PAGE_SIZE<<PMD_ORDER); memset(pmd, 0, PAGE_SIZE<<PMD_ORDER);
return pmd; return pmd;
@ -124,7 +123,7 @@ pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmd, pte_t *pte)
static inline pgtable_t static inline pgtable_t
pte_alloc_one(struct mm_struct *mm, unsigned long address) pte_alloc_one(struct mm_struct *mm, unsigned long address)
{ {
struct page *page = alloc_page(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO); struct page *page = alloc_page(GFP_KERNEL|__GFP_ZERO);
if (!page) if (!page)
return NULL; return NULL;
if (!pgtable_page_ctor(page)) { if (!pgtable_page_ctor(page)) {
@ -137,7 +136,7 @@ pte_alloc_one(struct mm_struct *mm, unsigned long address)
static inline pte_t * static inline pte_t *
pte_alloc_one_kernel(struct mm_struct *mm, unsigned long addr) pte_alloc_one_kernel(struct mm_struct *mm, unsigned long addr)
{ {
pte_t *pte = (pte_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO); pte_t *pte = (pte_t *)__get_free_page(GFP_KERNEL|__GFP_ZERO);
return pte; return pte;
} }

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