Merge branch 'mips-next-3.10' of git://git.linux-mips.org/pub/scm/john/linux-john into mips-for-linux-next

This commit is contained in:
Ralf Baechle 2013-05-08 01:27:46 +02:00
commit 9b3539e0e5
1267 changed files with 15334 additions and 7665 deletions

View File

@ -1510,6 +1510,14 @@ D: Natsemi ethernet
D: Cobalt Networks (x86) support D: Cobalt Networks (x86) support
D: This-and-That D: This-and-That
N: Mark M. Hoffman
E: mhoffman@lightlink.com
D: asb100, lm93 and smsc47b397 hardware monitoring drivers
D: hwmon subsystem core
D: hwmon subsystem maintainer
D: i2c-sis96x and i2c-stub SMBus drivers
S: USA
N: Dirk Hohndel N: Dirk Hohndel
E: hohndel@suse.de E: hohndel@suse.de
D: The XFree86[tm] Project D: The XFree86[tm] Project

View File

@ -227,7 +227,7 @@ X!Isound/sound_firmware.c
<chapter id="uart16x50"> <chapter id="uart16x50">
<title>16x50 UART Driver</title> <title>16x50 UART Driver</title>
!Edrivers/tty/serial/serial_core.c !Edrivers/tty/serial/serial_core.c
!Edrivers/tty/serial/8250/8250.c !Edrivers/tty/serial/8250/8250_core.c
</chapter> </chapter>
<chapter id="fbdev"> <chapter id="fbdev">

View File

@ -13,9 +13,6 @@ Required parent device properties:
4 = active high level-sensitive 4 = active high level-sensitive
8 = active low level-sensitive 8 = active low level-sensitive
Optional parent device properties:
- reg : contains the PRCMU mailbox address for the AB8500 i2c port
The AB8500 consists of a large and varied group of sub-devices: The AB8500 consists of a large and varied group of sub-devices:
Device IRQ Names Supply Names Description Device IRQ Names Supply Names Description
@ -86,9 +83,8 @@ Non-standard child device properties:
- stericsson,amic2-bias-vamic1 : Analoge Mic wishes to use a non-standard Vamic - stericsson,amic2-bias-vamic1 : Analoge Mic wishes to use a non-standard Vamic
- stericsson,earpeice-cmv : Earpeice voltage (only: 950 | 1100 | 1270 | 1580) - stericsson,earpeice-cmv : Earpeice voltage (only: 950 | 1100 | 1270 | 1580)
ab8500@5 { ab8500 {
compatible = "stericsson,ab8500"; compatible = "stericsson,ab8500";
reg = <5>; /* mailbox 5 is i2c */
interrupts = <0 40 0x4>; interrupts = <0 40 0x4>;
interrupt-controller; interrupt-controller;
#interrupt-cells = <2>; #interrupt-cells = <2>;

View File

@ -0,0 +1,17 @@
Ralink MIPS SoC device tree bindings
1. SoCs
Each device tree must specify a compatible value for the Ralink SoC
it uses in the compatible property of the root node. The compatible
value must be one of the following values:
ralink,rt2880-soc
ralink,rt3050-soc
ralink,rt3052-soc
ralink,rt3350-soc
ralink,rt3352-soc
ralink,rt3883-soc
ralink,rt5350-soc
ralink,mt7620a-soc
ralink,mt7620n-soc

View File

@ -11,6 +11,9 @@ Required properties:
- "nvidia,tegra20-uart" - "nvidia,tegra20-uart"
- "nxp,lpc3220-uart" - "nxp,lpc3220-uart"
- "ibm,qpace-nwp-serial" - "ibm,qpace-nwp-serial"
- "altr,16550-FIFO32"
- "altr,16550-FIFO64"
- "altr,16550-FIFO128"
- "serial" if the port type is unknown. - "serial" if the port type is unknown.
- reg : offset and length of the register set for the device. - reg : offset and length of the register set for the device.
- interrupts : should contain uart interrupt. - interrupts : should contain uart interrupt.

View File

@ -41,6 +41,7 @@ onnn ON Semiconductor Corp.
picochip Picochip Ltd picochip Picochip Ltd
powervr PowerVR (deprecated, use img) powervr PowerVR (deprecated, use img)
qcom Qualcomm, Inc. qcom Qualcomm, Inc.
ralink Mediatek/Ralink Technology Corp.
ramtron Ramtron International ramtron Ramtron International
realtek Realtek Semiconductor Corp. realtek Realtek Semiconductor Corp.
renesas Renesas Electronics Corporation renesas Renesas Electronics Corporation

View File

@ -23,7 +23,7 @@ Supported chips:
Datasheet: Publicly available at the Maxim website Datasheet: Publicly available at the Maxim website
http://www.maxim-ic.com/ http://www.maxim-ic.com/
* Microchip (TelCom) TCN75 * Microchip (TelCom) TCN75
Prefix: 'lm75' Prefix: 'tcn75'
Addresses scanned: none Addresses scanned: none
Datasheet: Publicly available at the Microchip website Datasheet: Publicly available at the Microchip website
http://www.microchip.com/ http://www.microchip.com/

View File

@ -5,7 +5,7 @@ Supported adapters:
Documentation: Documentation:
http://www.diolan.com/i2c/u2c12.html http://www.diolan.com/i2c/u2c12.html
Author: Guenter Roeck <guenter.roeck@ericsson.com> Author: Guenter Roeck <linux@roeck-us.net>
Description Description
----------- -----------

View File

@ -3,10 +3,26 @@ ALPS Touchpad Protocol
Introduction Introduction
------------ ------------
Currently the ALPS touchpad driver supports five protocol versions in use by
ALPS touchpads, called versions 1, 2, 3, 4 and 5.
Currently the ALPS touchpad driver supports four protocol versions in use by Since roughly mid-2010 several new ALPS touchpads have been released and
ALPS touchpads, called versions 1, 2, 3, and 4. Information about the various integrated into a variety of laptops and netbooks. These new touchpads
protocol versions is contained in the following sections. have enough behavior differences that the alps_model_data definition
table, describing the properties of the different versions, is no longer
adequate. The design choices were to re-define the alps_model_data
table, with the risk of regression testing existing devices, or isolate
the new devices outside of the alps_model_data table. The latter design
choice was made. The new touchpad signatures are named: "Rushmore",
"Pinnacle", and "Dolphin", which you will see in the alps.c code.
For the purposes of this document, this group of ALPS touchpads will
generically be called "new ALPS touchpads".
We experimented with probing the ACPI interface _HID (Hardware ID)/_CID
(Compatibility ID) definition as a way to uniquely identify the
different ALPS variants but there did not appear to be a 1:1 mapping.
In fact, it appeared to be an m:n mapping between the _HID and actual
hardware type.
Detection Detection
--------- ---------
@ -20,9 +36,13 @@ If the E6 report is successful, the touchpad model is identified using the "E7
report" sequence: E8-E7-E7-E7-E9. The response is the model signature and is report" sequence: E8-E7-E7-E7-E9. The response is the model signature and is
matched against known models in the alps_model_data_array. matched against known models in the alps_model_data_array.
With protocol versions 3 and 4, the E7 report model signature is always For older touchpads supporting protocol versions 3 and 4, the E7 report
73-02-64. To differentiate between these versions, the response from the model signature is always 73-02-64. To differentiate between these
"Enter Command Mode" sequence must be inspected as described below. versions, the response from the "Enter Command Mode" sequence must be
inspected as described below.
The new ALPS touchpads have an E7 signature of 73-03-50 or 73-03-0A but
seem to be better differentiated by the EC Command Mode response.
Command Mode Command Mode
------------ ------------
@ -47,6 +67,14 @@ address of the register being read, and the third contains the value of the
register. Registers are written by writing the value one nibble at a time register. Registers are written by writing the value one nibble at a time
using the same encoding used for addresses. using the same encoding used for addresses.
For the new ALPS touchpads, the EC command is used to enter command
mode. The response in the new ALPS touchpads is significantly different,
and more important in determining the behavior. This code has been
separated from the original alps_model_data table and put in the
alps_identify function. For example, there seem to be two hardware init
sequences for the "Dolphin" touchpads as determined by the second byte
of the EC response.
Packet Format Packet Format
------------- -------------
@ -187,3 +215,28 @@ There are several things worth noting here.
well. well.
So far no v4 devices with tracksticks have been encountered. So far no v4 devices with tracksticks have been encountered.
ALPS Absolute Mode - Protocol Version 5
---------------------------------------
This is basically Protocol Version 3 but with different logic for packet
decode. It uses the same alps_process_touchpad_packet_v3 call with a
specialized decode_fields function pointer to correctly interpret the
packets. This appears to only be used by the Dolphin devices.
For single-touch, the 6-byte packet format is:
byte 0: 1 1 0 0 1 0 0 0
byte 1: 0 x6 x5 x4 x3 x2 x1 x0
byte 2: 0 y6 y5 y4 y3 y2 y1 y0
byte 3: 0 M R L 1 m r l
byte 4: y10 y9 y8 y7 x10 x9 x8 x7
byte 5: 0 z6 z5 z4 z3 z2 z1 z0
For mt, the format is:
byte 0: 1 1 1 n3 1 n2 n1 x24
byte 1: 1 y7 y6 y5 y4 y3 y2 y1
byte 2: ? x2 x1 y12 y11 y10 y9 y8
byte 3: 0 x23 x22 x21 x20 x19 x18 x17
byte 4: 0 x9 x8 x7 x6 x5 x4 x3
byte 5: 0 x16 x15 x14 x13 x12 x11 x10

View File

@ -15,6 +15,13 @@ amemthresh - INTEGER
enabled and the variable is automatically set to 2, otherwise enabled and the variable is automatically set to 2, otherwise
the strategy is disabled and the variable is set to 1. the strategy is disabled and the variable is set to 1.
backup_only - BOOLEAN
0 - disabled (default)
not 0 - enabled
If set, disable the director function while the server is
in backup mode to avoid packet loops for DR/TUN methods.
conntrack - BOOLEAN conntrack - BOOLEAN
0 - disabled (default) 0 - disabled (default)
not 0 - enabled not 0 - enabled

View File

@ -105,6 +105,83 @@ Copyright (C) 1999-2000 Maxim Krasnyansky <max_mk@yahoo.com>
Proto [2 bytes] Proto [2 bytes]
Raw protocol(IP, IPv6, etc) frame. Raw protocol(IP, IPv6, etc) frame.
3.3 Multiqueue tuntap interface:
From version 3.8, Linux supports multiqueue tuntap which can uses multiple
file descriptors (queues) to parallelize packets sending or receiving. The
device allocation is the same as before, and if user wants to create multiple
queues, TUNSETIFF with the same device name must be called many times with
IFF_MULTI_QUEUE flag.
char *dev should be the name of the device, queues is the number of queues to
be created, fds is used to store and return the file descriptors (queues)
created to the caller. Each file descriptor were served as the interface of a
queue which could be accessed by userspace.
#include <linux/if.h>
#include <linux/if_tun.h>
int tun_alloc_mq(char *dev, int queues, int *fds)
{
struct ifreq ifr;
int fd, err, i;
if (!dev)
return -1;
memset(&ifr, 0, sizeof(ifr));
/* Flags: IFF_TUN - TUN device (no Ethernet headers)
* IFF_TAP - TAP device
*
* IFF_NO_PI - Do not provide packet information
* IFF_MULTI_QUEUE - Create a queue of multiqueue device
*/
ifr.ifr_flags = IFF_TAP | IFF_NO_PI | IFF_MULTI_QUEUE;
strcpy(ifr.ifr_name, dev);
for (i = 0; i < queues; i++) {
if ((fd = open("/dev/net/tun", O_RDWR)) < 0)
goto err;
err = ioctl(fd, TUNSETIFF, (void *)&ifr);
if (err) {
close(fd);
goto err;
}
fds[i] = fd;
}
return 0;
err:
for (--i; i >= 0; i--)
close(fds[i]);
return err;
}
A new ioctl(TUNSETQUEUE) were introduced to enable or disable a queue. When
calling it with IFF_DETACH_QUEUE flag, the queue were disabled. And when
calling it with IFF_ATTACH_QUEUE flag, the queue were enabled. The queue were
enabled by default after it was created through TUNSETIFF.
fd is the file descriptor (queue) that we want to enable or disable, when
enable is true we enable it, otherwise we disable it
#include <linux/if.h>
#include <linux/if_tun.h>
int tun_set_queue(int fd, int enable)
{
struct ifreq ifr;
memset(&ifr, 0, sizeof(ifr));
if (enable)
ifr.ifr_flags = IFF_ATTACH_QUEUE;
else
ifr.ifr_flags = IFF_DETACH_QUEUE;
return ioctl(fd, TUNSETQUEUE, (void *)&ifr);
}
Universal TUN/TAP device driver Frequently Asked Question. Universal TUN/TAP device driver Frequently Asked Question.
1. What platforms are supported by TUN/TAP driver ? 1. What platforms are supported by TUN/TAP driver ?

View File

@ -1,4 +1,4 @@
Copyright (c) 2003-2012 QLogic Corporation Copyright (c) 2003-2013 QLogic Corporation
QLogic Linux FC-FCoE Driver QLogic Linux FC-FCoE Driver
This program includes a device driver for Linux 3.x. This program includes a device driver for Linux 3.x.

View File

@ -890,9 +890,8 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
enable_msi - Enable Message Signaled Interrupt (MSI) (default = off) enable_msi - Enable Message Signaled Interrupt (MSI) (default = off)
power_save - Automatic power-saving timeout (in second, 0 = power_save - Automatic power-saving timeout (in second, 0 =
disable) disable)
power_save_controller - Support runtime D3 of HD-audio controller power_save_controller - Reset HD-audio controller in power-saving mode
(-1 = on for supported chip (default), false = off, (default = on)
true = force to on even for unsupported hardware)
align_buffer_size - Force rounding of buffer/period sizes to multiples align_buffer_size - Force rounding of buffer/period sizes to multiples
of 128 bytes. This is more efficient in terms of memory of 128 bytes. This is more efficient in terms of memory
access but isn't required by the HDA spec and prevents access but isn't required by the HDA spec and prevents
@ -912,7 +911,7 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
models depending on the codec chip. The list of available models models depending on the codec chip. The list of available models
is found in HD-Audio-Models.txt is found in HD-Audio-Models.txt
The model name "genric" is treated as a special case. When this The model name "generic" is treated as a special case. When this
model is given, the driver uses the generic codec parser without model is given, the driver uses the generic codec parser without
"codec-patch". It's sometimes good for testing and debugging. "codec-patch". It's sometimes good for testing and debugging.

View File

@ -285,7 +285,7 @@ sample data.
<H4> <H4>
7.2.4 Close Callback</H4> 7.2.4 Close Callback</H4>
The <TT>close</TT> callback is called when this device is closed by the The <TT>close</TT> callback is called when this device is closed by the
applicaion. If any private data was allocated in open callback, it must application. If any private data was allocated in open callback, it must
be released in the close callback. The deletion of ALSA port should be be released in the close callback. The deletion of ALSA port should be
done here, too. This callback must not be NULL. done here, too. This callback must not be NULL.
<H4> <H4>

View File

@ -1873,7 +1873,7 @@ feature:
status\input | 0 | 1 | else | status\input | 0 | 1 | else |
--------------+------------+------------+------------+ --------------+------------+------------+------------+
not allocated |(do nothing)| alloc+swap | EINVAL | not allocated |(do nothing)| alloc+swap |(do nothing)|
--------------+------------+------------+------------+ --------------+------------+------------+------------+
allocated | free | swap | clear | allocated | free | swap | clear |
--------------+------------+------------+------------+ --------------+------------+------------+------------+

View File

@ -1338,12 +1338,6 @@ S: Maintained
F: drivers/platform/x86/asus*.c F: drivers/platform/x86/asus*.c
F: drivers/platform/x86/eeepc*.c F: drivers/platform/x86/eeepc*.c
ASUS ASB100 HARDWARE MONITOR DRIVER
M: "Mark M. Hoffman" <mhoffman@lightlink.com>
L: lm-sensors@lm-sensors.org
S: Maintained
F: drivers/hwmon/asb100.c
ASYNCHRONOUS TRANSFERS/TRANSFORMS (IOAT) API ASYNCHRONOUS TRANSFERS/TRANSFORMS (IOAT) API
M: Dan Williams <djbw@fb.com> M: Dan Williams <djbw@fb.com>
W: http://sourceforge.net/projects/xscaleiop W: http://sourceforge.net/projects/xscaleiop
@ -1467,6 +1461,12 @@ F: drivers/dma/at_hdmac.c
F: drivers/dma/at_hdmac_regs.h F: drivers/dma/at_hdmac_regs.h
F: include/linux/platform_data/dma-atmel.h F: include/linux/platform_data/dma-atmel.h
ATMEL I2C DRIVER
M: Ludovic Desroches <ludovic.desroches@atmel.com>
L: linux-i2c@vger.kernel.org
S: Supported
F: drivers/i2c/busses/i2c-at91.c
ATMEL ISI DRIVER ATMEL ISI DRIVER
M: Josh Wu <josh.wu@atmel.com> M: Josh Wu <josh.wu@atmel.com>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
@ -2629,7 +2629,7 @@ F: include/uapi/drm/
INTEL DRM DRIVERS (excluding Poulsbo, Moorestown and derivative chipsets) INTEL DRM DRIVERS (excluding Poulsbo, Moorestown and derivative chipsets)
M: Daniel Vetter <daniel.vetter@ffwll.ch> M: Daniel Vetter <daniel.vetter@ffwll.ch>
L: intel-gfx@lists.freedesktop.org (subscribers-only) L: intel-gfx@lists.freedesktop.org
L: dri-devel@lists.freedesktop.org L: dri-devel@lists.freedesktop.org
T: git git://people.freedesktop.org/~danvet/drm-intel T: git git://people.freedesktop.org/~danvet/drm-intel
S: Supported S: Supported
@ -3242,6 +3242,12 @@ F: Documentation/firmware_class/
F: drivers/base/firmware*.c F: drivers/base/firmware*.c
F: include/linux/firmware.h F: include/linux/firmware.h
FLASHSYSTEM DRIVER (IBM FlashSystem 70/80 PCI SSD Flash Card)
M: Joshua Morris <josh.h.morris@us.ibm.com>
M: Philip Kelleher <pjk1939@linux.vnet.ibm.com>
S: Maintained
F: drivers/block/rsxx/
FLOPPY DRIVER FLOPPY DRIVER
M: Jiri Kosina <jkosina@suse.cz> M: Jiri Kosina <jkosina@suse.cz>
T: git git://git.kernel.org/pub/scm/linux/kernel/git/jikos/floppy.git T: git git://git.kernel.org/pub/scm/linux/kernel/git/jikos/floppy.git
@ -3851,7 +3857,7 @@ F: drivers/i2c/busses/i2c-ismt.c
F: Documentation/i2c/busses/i2c-ismt F: Documentation/i2c/busses/i2c-ismt
I2C/SMBUS STUB DRIVER I2C/SMBUS STUB DRIVER
M: "Mark M. Hoffman" <mhoffman@lightlink.com> M: Jean Delvare <khali@linux-fr.org>
L: linux-i2c@vger.kernel.org L: linux-i2c@vger.kernel.org
S: Maintained S: Maintained
F: drivers/i2c/i2c-stub.c F: drivers/i2c/i2c-stub.c
@ -4005,6 +4011,22 @@ M: Stanislaw Gruszka <stf_xl@wp.pl>
S: Maintained S: Maintained
F: drivers/usb/atm/ueagle-atm.c F: drivers/usb/atm/ueagle-atm.c
INA209 HARDWARE MONITOR DRIVER
M: Guenter Roeck <linux@roeck-us.net>
L: lm-sensors@lm-sensors.org
S: Maintained
F: Documentation/hwmon/ina209
F: Documentation/devicetree/bindings/i2c/ina209.txt
F: drivers/hwmon/ina209.c
INA2XX HARDWARE MONITOR DRIVER
M: Guenter Roeck <linux@roeck-us.net>
L: lm-sensors@lm-sensors.org
S: Maintained
F: Documentation/hwmon/ina2xx
F: drivers/hwmon/ina2xx.c
F: include/linux/platform_data/ina2xx.h
INDUSTRY PACK SUBSYSTEM (IPACK) INDUSTRY PACK SUBSYSTEM (IPACK)
M: Samuel Iglesias Gonsalvez <siglesias@igalia.com> M: Samuel Iglesias Gonsalvez <siglesias@igalia.com>
M: Jens Taprogge <jens.taprogge@taprogge.org> M: Jens Taprogge <jens.taprogge@taprogge.org>
@ -4919,6 +4941,12 @@ W: logfs.org
S: Maintained S: Maintained
F: fs/logfs/ F: fs/logfs/
LPC32XX MACHINE SUPPORT
M: Roland Stigge <stigge@antcom.de>
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
S: Maintained
F: arch/arm/mach-lpc32xx/
LSILOGIC MPT FUSION DRIVERS (FC/SAS/SPI) LSILOGIC MPT FUSION DRIVERS (FC/SAS/SPI)
M: Nagalakshmi Nandigama <Nagalakshmi.Nandigama@lsi.com> M: Nagalakshmi Nandigama <Nagalakshmi.Nandigama@lsi.com>
M: Sreekanth Reddy <Sreekanth.Reddy@lsi.com> M: Sreekanth Reddy <Sreekanth.Reddy@lsi.com>
@ -5043,9 +5071,8 @@ S: Maintained
F: drivers/net/ethernet/marvell/sk* F: drivers/net/ethernet/marvell/sk*
MARVELL LIBERTAS WIRELESS DRIVER MARVELL LIBERTAS WIRELESS DRIVER
M: Dan Williams <dcbw@redhat.com>
L: libertas-dev@lists.infradead.org L: libertas-dev@lists.infradead.org
S: Maintained S: Orphan
F: drivers/net/wireless/libertas/ F: drivers/net/wireless/libertas/
MARVELL MV643XX ETHERNET DRIVER MARVELL MV643XX ETHERNET DRIVER
@ -5098,6 +5125,15 @@ S: Maintained
F: Documentation/hwmon/max6650 F: Documentation/hwmon/max6650
F: drivers/hwmon/max6650.c F: drivers/hwmon/max6650.c
MAX6697 HARDWARE MONITOR DRIVER
M: Guenter Roeck <linux@roeck-us.net>
L: lm-sensors@lm-sensors.org
S: Maintained
F: Documentation/hwmon/max6697
F: Documentation/devicetree/bindings/i2c/max6697.txt
F: drivers/hwmon/max6697.c
F: include/linux/platform_data/max6697.h
MAXIRADIO FM RADIO RECEIVER DRIVER MAXIRADIO FM RADIO RECEIVER DRIVER
M: Hans Verkuil <hverkuil@xs4all.nl> M: Hans Verkuil <hverkuil@xs4all.nl>
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
@ -5538,6 +5574,7 @@ F: include/uapi/linux/if_*
F: include/uapi/linux/netdevice.h F: include/uapi/linux/netdevice.h
NETXEN (1/10) GbE SUPPORT NETXEN (1/10) GbE SUPPORT
M: Manish Chopra <manish.chopra@qlogic.com>
M: Sony Chacko <sony.chacko@qlogic.com> M: Sony Chacko <sony.chacko@qlogic.com>
M: Rajesh Borundia <rajesh.borundia@qlogic.com> M: Rajesh Borundia <rajesh.borundia@qlogic.com>
L: netdev@vger.kernel.org L: netdev@vger.kernel.org
@ -5622,6 +5659,14 @@ S: Maintained
F: drivers/video/riva/ F: drivers/video/riva/
F: drivers/video/nvidia/ F: drivers/video/nvidia/
NVM EXPRESS DRIVER
M: Matthew Wilcox <willy@linux.intel.com>
L: linux-nvme@lists.infradead.org
T: git git://git.infradead.org/users/willy/linux-nvme.git
S: Supported
F: drivers/block/nvme.c
F: include/linux/nvme.h
OMAP SUPPORT OMAP SUPPORT
M: Tony Lindgren <tony@atomide.com> M: Tony Lindgren <tony@atomide.com>
L: linux-omap@vger.kernel.org L: linux-omap@vger.kernel.org
@ -5650,7 +5695,7 @@ S: Maintained
F: arch/arm/*omap*/*clock* F: arch/arm/*omap*/*clock*
OMAP POWER MANAGEMENT SUPPORT OMAP POWER MANAGEMENT SUPPORT
M: Kevin Hilman <khilman@ti.com> M: Kevin Hilman <khilman@deeprootsystems.com>
L: linux-omap@vger.kernel.org L: linux-omap@vger.kernel.org
S: Maintained S: Maintained
F: arch/arm/*omap*/*pm* F: arch/arm/*omap*/*pm*
@ -5744,7 +5789,7 @@ F: arch/arm/*omap*/usb*
OMAP GPIO DRIVER OMAP GPIO DRIVER
M: Santosh Shilimkar <santosh.shilimkar@ti.com> M: Santosh Shilimkar <santosh.shilimkar@ti.com>
M: Kevin Hilman <khilman@ti.com> M: Kevin Hilman <khilman@deeprootsystems.com>
L: linux-omap@vger.kernel.org L: linux-omap@vger.kernel.org
S: Maintained S: Maintained
F: drivers/gpio/gpio-omap.c F: drivers/gpio/gpio-omap.c
@ -6176,7 +6221,7 @@ F: include/linux/power_supply.h
F: drivers/power/ F: drivers/power/
PNP SUPPORT PNP SUPPORT
M: Adam Belay <abelay@mit.edu> M: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
M: Bjorn Helgaas <bhelgaas@google.com> M: Bjorn Helgaas <bhelgaas@google.com>
S: Maintained S: Maintained
F: drivers/pnp/ F: drivers/pnp/
@ -6412,6 +6457,8 @@ F: Documentation/networking/LICENSE.qla3xxx
F: drivers/net/ethernet/qlogic/qla3xxx.* F: drivers/net/ethernet/qlogic/qla3xxx.*
QLOGIC QLCNIC (1/10)Gb ETHERNET DRIVER QLOGIC QLCNIC (1/10)Gb ETHERNET DRIVER
M: Rajesh Borundia <rajesh.borundia@qlogic.com>
M: Shahed Shaikh <shahed.shaikh@qlogic.com>
M: Jitendra Kalsaria <jitendra.kalsaria@qlogic.com> M: Jitendra Kalsaria <jitendra.kalsaria@qlogic.com>
M: Sony Chacko <sony.chacko@qlogic.com> M: Sony Chacko <sony.chacko@qlogic.com>
M: linux-driver@qlogic.com M: linux-driver@qlogic.com
@ -6516,12 +6563,6 @@ S: Maintained
F: Documentation/blockdev/ramdisk.txt F: Documentation/blockdev/ramdisk.txt
F: drivers/block/brd.c F: drivers/block/brd.c
RAMSAM DRIVER (IBM RamSan 70/80 PCI SSD Flash Card)
M: Joshua Morris <josh.h.morris@us.ibm.com>
M: Philip Kelleher <pjk1939@linux.vnet.ibm.com>
S: Maintained
F: drivers/block/rsxx/
RANDOM NUMBER DRIVER RANDOM NUMBER DRIVER
M: Theodore Ts'o" <tytso@mit.edu> M: Theodore Ts'o" <tytso@mit.edu>
S: Maintained S: Maintained
@ -6590,7 +6631,7 @@ S: Supported
F: fs/reiserfs/ F: fs/reiserfs/
REGISTER MAP ABSTRACTION REGISTER MAP ABSTRACTION
M: Mark Brown <broonie@opensource.wolfsonmicro.com> M: Mark Brown <broonie@kernel.org>
T: git git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regmap.git T: git git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regmap.git
S: Supported S: Supported
F: drivers/base/regmap/ F: drivers/base/regmap/
@ -6916,7 +6957,6 @@ F: drivers/scsi/st*
SCTP PROTOCOL SCTP PROTOCOL
M: Vlad Yasevich <vyasevich@gmail.com> M: Vlad Yasevich <vyasevich@gmail.com>
M: Sridhar Samudrala <sri@us.ibm.com>
M: Neil Horman <nhorman@tuxdriver.com> M: Neil Horman <nhorman@tuxdriver.com>
L: linux-sctp@vger.kernel.org L: linux-sctp@vger.kernel.org
W: http://lksctp.sourceforge.net W: http://lksctp.sourceforge.net
@ -7138,7 +7178,7 @@ F: arch/arm/mach-s3c2410/bast-irq.c
TI DAVINCI MACHINE SUPPORT TI DAVINCI MACHINE SUPPORT
M: Sekhar Nori <nsekhar@ti.com> M: Sekhar Nori <nsekhar@ti.com>
M: Kevin Hilman <khilman@ti.com> M: Kevin Hilman <khilman@deeprootsystems.com>
L: davinci-linux-open-source@linux.davincidsp.com (moderated for non-subscribers) L: davinci-linux-open-source@linux.davincidsp.com (moderated for non-subscribers)
T: git git://gitorious.org/linux-davinci/linux-davinci.git T: git git://gitorious.org/linux-davinci/linux-davinci.git
Q: http://patchwork.kernel.org/project/linux-davinci/list/ Q: http://patchwork.kernel.org/project/linux-davinci/list/
@ -7171,13 +7211,6 @@ L: netdev@vger.kernel.org
S: Maintained S: Maintained
F: drivers/net/ethernet/sis/sis900.* F: drivers/net/ethernet/sis/sis900.*
SIS 96X I2C/SMBUS DRIVER
M: "Mark M. Hoffman" <mhoffman@lightlink.com>
L: linux-i2c@vger.kernel.org
S: Maintained
F: Documentation/i2c/busses/i2c-sis96x
F: drivers/i2c/busses/i2c-sis96x.c
SIS FRAMEBUFFER DRIVER SIS FRAMEBUFFER DRIVER
M: Thomas Winischhofer <thomas@winischhofer.net> M: Thomas Winischhofer <thomas@winischhofer.net>
W: http://www.winischhofer.net/linuxsisvga.shtml W: http://www.winischhofer.net/linuxsisvga.shtml
@ -7255,7 +7288,7 @@ F: Documentation/hwmon/sch5627
F: drivers/hwmon/sch5627.c F: drivers/hwmon/sch5627.c
SMSC47B397 HARDWARE MONITOR DRIVER SMSC47B397 HARDWARE MONITOR DRIVER
M: "Mark M. Hoffman" <mhoffman@lightlink.com> M: Jean Delvare <khali@linux-fr.org>
L: lm-sensors@lm-sensors.org L: lm-sensors@lm-sensors.org
S: Maintained S: Maintained
F: Documentation/hwmon/smsc47b397 F: Documentation/hwmon/smsc47b397
@ -7346,7 +7379,7 @@ F: sound/
SOUND - SOC LAYER / DYNAMIC AUDIO POWER MANAGEMENT (ASoC) SOUND - SOC LAYER / DYNAMIC AUDIO POWER MANAGEMENT (ASoC)
M: Liam Girdwood <lgirdwood@gmail.com> M: Liam Girdwood <lgirdwood@gmail.com>
M: Mark Brown <broonie@opensource.wolfsonmicro.com> M: Mark Brown <broonie@kernel.org>
T: git git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git T: git git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git
L: alsa-devel@alsa-project.org (moderated for non-subscribers) L: alsa-devel@alsa-project.org (moderated for non-subscribers)
W: http://alsa-project.org/main/index.php/ASoC W: http://alsa-project.org/main/index.php/ASoC
@ -7435,7 +7468,7 @@ F: drivers/clk/spear/
SPI SUBSYSTEM SPI SUBSYSTEM
M: Grant Likely <grant.likely@secretlab.ca> M: Grant Likely <grant.likely@secretlab.ca>
M: Mark Brown <broonie@opensource.wolfsonmicro.com> M: Mark Brown <broonie@kernel.org>
L: spi-devel-general@lists.sourceforge.net L: spi-devel-general@lists.sourceforge.net
Q: http://patchwork.kernel.org/project/spi-devel-general/list/ Q: http://patchwork.kernel.org/project/spi-devel-general/list/
T: git git://git.secretlab.ca/git/linux-2.6.git T: git git://git.secretlab.ca/git/linux-2.6.git
@ -7678,9 +7711,10 @@ F: include/linux/swiotlb.h
SYNOPSYS ARC ARCHITECTURE SYNOPSYS ARC ARCHITECTURE
M: Vineet Gupta <vgupta@synopsys.com> M: Vineet Gupta <vgupta@synopsys.com>
L: linux-snps-arc@vger.kernel.org
S: Supported S: Supported
F: arch/arc/ F: arch/arc/
F: Documentation/devicetree/bindings/arc/
F: drivers/tty/serial/arc-uart.c
SYSV FILESYSTEM SYSV FILESYSTEM
M: Christoph Hellwig <hch@infradead.org> M: Christoph Hellwig <hch@infradead.org>
@ -8679,7 +8713,7 @@ F: drivers/scsi/vmw_pvscsi.h
VOLTAGE AND CURRENT REGULATOR FRAMEWORK VOLTAGE AND CURRENT REGULATOR FRAMEWORK
M: Liam Girdwood <lrg@ti.com> M: Liam Girdwood <lrg@ti.com>
M: Mark Brown <broonie@opensource.wolfsonmicro.com> M: Mark Brown <broonie@kernel.org>
W: http://opensource.wolfsonmicro.com/node/15 W: http://opensource.wolfsonmicro.com/node/15
W: http://www.slimlogic.co.uk/?p=48 W: http://www.slimlogic.co.uk/?p=48
T: git git://git.kernel.org/pub/scm/linux/kernel/git/lrg/regulator.git T: git git://git.kernel.org/pub/scm/linux/kernel/git/lrg/regulator.git

View File

@ -1,7 +1,7 @@
VERSION = 3 VERSION = 3
PATCHLEVEL = 9 PATCHLEVEL = 9
SUBLEVEL = 0 SUBLEVEL = 0
EXTRAVERSION = -rc2 EXTRAVERSION = -rc7
NAME = Unicycling Gorilla NAME = Unicycling Gorilla
# *DOCUMENTATION* # *DOCUMENTATION*

View File

@ -319,13 +319,6 @@ config ARCH_WANT_OLD_COMPAT_IPC
select ARCH_WANT_COMPAT_IPC_PARSE_VERSION select ARCH_WANT_COMPAT_IPC_PARSE_VERSION
bool bool
config HAVE_VIRT_TO_BUS
bool
help
An architecture should select this if it implements the
deprecated interface virt_to_bus(). All new architectures
should probably not select this.
config HAVE_ARCH_SECCOMP_FILTER config HAVE_ARCH_SECCOMP_FILTER
bool bool
help help

View File

@ -9,7 +9,7 @@ config ALPHA
select HAVE_PERF_EVENTS select HAVE_PERF_EVENTS
select HAVE_DMA_ATTRS select HAVE_DMA_ATTRS
select HAVE_GENERIC_HARDIRQS select HAVE_GENERIC_HARDIRQS
select HAVE_VIRT_TO_BUS select VIRT_TO_BUS
select GENERIC_IRQ_PROBE select GENERIC_IRQ_PROBE
select AUTO_IRQ_AFFINITY if SMP select AUTO_IRQ_AFFINITY if SMP
select GENERIC_IRQ_SHOW select GENERIC_IRQ_SHOW

View File

@ -12,7 +12,7 @@ NM := $(NM) -B
LDFLAGS_vmlinux := -static -N #-relax LDFLAGS_vmlinux := -static -N #-relax
CHECKFLAGS += -D__alpha__ -m64 CHECKFLAGS += -D__alpha__ -m64
cflags-y := -pipe -mno-fp-regs -ffixed-8 -msmall-data cflags-y := -pipe -mno-fp-regs -ffixed-8
cflags-y += $(call cc-option, -fno-jump-tables) cflags-y += $(call cc-option, -fno-jump-tables)
cpuflags-$(CONFIG_ALPHA_EV4) := -mcpu=ev4 cpuflags-$(CONFIG_ALPHA_EV4) := -mcpu=ev4

View File

@ -26,7 +26,7 @@
#define fd_disable_irq() disable_irq(FLOPPY_IRQ) #define fd_disable_irq() disable_irq(FLOPPY_IRQ)
#define fd_cacheflush(addr,size) /* nothing */ #define fd_cacheflush(addr,size) /* nothing */
#define fd_request_irq() request_irq(FLOPPY_IRQ, floppy_interrupt,\ #define fd_request_irq() request_irq(FLOPPY_IRQ, floppy_interrupt,\
IRQF_DISABLED, "floppy", NULL) 0, "floppy", NULL)
#define fd_free_irq() free_irq(FLOPPY_IRQ, NULL) #define fd_free_irq() free_irq(FLOPPY_IRQ, NULL)
#ifdef CONFIG_PCI #ifdef CONFIG_PCI

View File

@ -117,13 +117,6 @@ handle_irq(int irq)
return; return;
} }
/*
* From here we must proceed with IPL_MAX. Note that we do not
* explicitly enable interrupts afterwards - some MILO PALcode
* (namely LX164 one) seems to have severe problems with RTI
* at IPL 0.
*/
local_irq_disable();
irq_enter(); irq_enter();
generic_handle_irq_desc(irq, desc); generic_handle_irq_desc(irq, desc);
irq_exit(); irq_exit();

View File

@ -45,6 +45,14 @@ do_entInt(unsigned long type, unsigned long vector,
unsigned long la_ptr, struct pt_regs *regs) unsigned long la_ptr, struct pt_regs *regs)
{ {
struct pt_regs *old_regs; struct pt_regs *old_regs;
/*
* Disable interrupts during IRQ handling.
* Note that there is no matching local_irq_enable() due to
* severe problems with RTI at IPL0 and some MILO PALcode
* (namely LX164).
*/
local_irq_disable();
switch (type) { switch (type) {
case 0: case 0:
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
@ -62,7 +70,6 @@ do_entInt(unsigned long type, unsigned long vector,
{ {
long cpu; long cpu;
local_irq_disable();
smp_percpu_timer_interrupt(regs); smp_percpu_timer_interrupt(regs);
cpu = smp_processor_id(); cpu = smp_processor_id();
if (cpu != boot_cpuid) { if (cpu != boot_cpuid) {
@ -222,7 +229,6 @@ process_mcheck_info(unsigned long vector, unsigned long la_ptr,
struct irqaction timer_irqaction = { struct irqaction timer_irqaction = {
.handler = timer_interrupt, .handler = timer_interrupt,
.flags = IRQF_DISABLED,
.name = "timer", .name = "timer",
}; };

View File

@ -188,6 +188,10 @@ nautilus_machine_check(unsigned long vector, unsigned long la_ptr)
extern void free_reserved_mem(void *, void *); extern void free_reserved_mem(void *, void *);
extern void pcibios_claim_one_bus(struct pci_bus *); extern void pcibios_claim_one_bus(struct pci_bus *);
static struct resource irongate_io = {
.name = "Irongate PCI IO",
.flags = IORESOURCE_IO,
};
static struct resource irongate_mem = { static struct resource irongate_mem = {
.name = "Irongate PCI MEM", .name = "Irongate PCI MEM",
.flags = IORESOURCE_MEM, .flags = IORESOURCE_MEM,
@ -209,6 +213,7 @@ nautilus_init_pci(void)
irongate = pci_get_bus_and_slot(0, 0); irongate = pci_get_bus_and_slot(0, 0);
bus->self = irongate; bus->self = irongate;
bus->resource[0] = &irongate_io;
bus->resource[1] = &irongate_mem; bus->resource[1] = &irongate_mem;
pci_bus_size_bridges(bus); pci_bus_size_bridges(bus);

View File

@ -280,15 +280,15 @@ titan_late_init(void)
* all reported to the kernel as machine checks, so the handler * all reported to the kernel as machine checks, so the handler
* is a nop so it can be called to count the individual events. * is a nop so it can be called to count the individual events.
*/ */
titan_request_irq(63+16, titan_intr_nop, IRQF_DISABLED, titan_request_irq(63+16, titan_intr_nop, 0,
"CChip Error", NULL); "CChip Error", NULL);
titan_request_irq(62+16, titan_intr_nop, IRQF_DISABLED, titan_request_irq(62+16, titan_intr_nop, 0,
"PChip 0 H_Error", NULL); "PChip 0 H_Error", NULL);
titan_request_irq(61+16, titan_intr_nop, IRQF_DISABLED, titan_request_irq(61+16, titan_intr_nop, 0,
"PChip 1 H_Error", NULL); "PChip 1 H_Error", NULL);
titan_request_irq(60+16, titan_intr_nop, IRQF_DISABLED, titan_request_irq(60+16, titan_intr_nop, 0,
"PChip 0 C_Error", NULL); "PChip 0 C_Error", NULL);
titan_request_irq(59+16, titan_intr_nop, IRQF_DISABLED, titan_request_irq(59+16, titan_intr_nop, 0,
"PChip 1 C_Error", NULL); "PChip 1 C_Error", NULL);
/* /*
@ -348,9 +348,9 @@ privateer_init_pci(void)
* Hook a couple of extra err interrupts that the * Hook a couple of extra err interrupts that the
* common titan code won't. * common titan code won't.
*/ */
titan_request_irq(53+16, titan_intr_nop, IRQF_DISABLED, titan_request_irq(53+16, titan_intr_nop, 0,
"NMI", NULL); "NMI", NULL);
titan_request_irq(50+16, titan_intr_nop, IRQF_DISABLED, titan_request_irq(50+16, titan_intr_nop, 0,
"Temperature Warning", NULL); "Temperature Warning", NULL);
/* /*

View File

@ -126,7 +126,7 @@ dma_map_sg(struct device *dev, struct scatterlist *sg,
int i; int i;
for_each_sg(sg, s, nents, i) for_each_sg(sg, s, nents, i)
sg->dma_address = dma_map_page(dev, sg_page(s), s->offset, s->dma_address = dma_map_page(dev, sg_page(s), s->offset,
s->length, dir); s->length, dir);
return nents; return nents;

View File

@ -72,7 +72,4 @@ extern int elf_check_arch(const struct elf32_hdr *);
*/ */
#define ELF_PLATFORM (NULL) #define ELF_PLATFORM (NULL)
#define SET_PERSONALITY(ex) \
set_personality(PER_LINUX | (current->personality & (~PER_MASK)))
#endif #endif

View File

@ -415,7 +415,7 @@
*-------------------------------------------------------------*/ *-------------------------------------------------------------*/
.macro SAVE_ALL_EXCEPTION marker .macro SAVE_ALL_EXCEPTION marker
st \marker, [sp, 8] st \marker, [sp, 8] /* orig_r8 */
st r0, [sp, 4] /* orig_r0, needed only for sys calls */ st r0, [sp, 4] /* orig_r0, needed only for sys calls */
/* Restore r9 used to code the early prologue */ /* Restore r9 used to code the early prologue */

View File

@ -39,7 +39,7 @@ static inline long arch_local_irq_save(void)
" flag.nz %0 \n" " flag.nz %0 \n"
: "=r"(temp), "=r"(flags) : "=r"(temp), "=r"(flags)
: "n"((STATUS_E1_MASK | STATUS_E2_MASK)) : "n"((STATUS_E1_MASK | STATUS_E2_MASK))
: "cc"); : "memory", "cc");
return flags; return flags;
} }
@ -53,7 +53,8 @@ static inline void arch_local_irq_restore(unsigned long flags)
__asm__ __volatile__( __asm__ __volatile__(
" flag %0 \n" " flag %0 \n"
: :
: "r"(flags)); : "r"(flags)
: "memory");
} }
/* /*
@ -73,7 +74,8 @@ static inline void arch_local_irq_disable(void)
" and %0, %0, %1 \n" " and %0, %0, %1 \n"
" flag %0 \n" " flag %0 \n"
: "=&r"(temp) : "=&r"(temp)
: "n"(~(STATUS_E1_MASK | STATUS_E2_MASK))); : "n"(~(STATUS_E1_MASK | STATUS_E2_MASK))
: "memory");
} }
/* /*
@ -85,7 +87,9 @@ static inline long arch_local_save_flags(void)
__asm__ __volatile__( __asm__ __volatile__(
" lr %0, [status32] \n" " lr %0, [status32] \n"
: "=&r"(temp)); : "=&r"(temp)
:
: "memory");
return temp; return temp;
} }

View File

@ -13,7 +13,7 @@
#ifdef CONFIG_KGDB #ifdef CONFIG_KGDB
#include <asm/user.h> #include <asm/ptrace.h>
/* to ensure compatibility with Linux 2.6.35, we don't implement the get/set /* to ensure compatibility with Linux 2.6.35, we don't implement the get/set
* register API yet */ * register API yet */
@ -53,9 +53,7 @@ enum arc700_linux_regnums {
}; };
#else #else
static inline void kgdb_trap(struct pt_regs *regs, int param) #define kgdb_trap(regs, param)
{
}
#endif #endif
#endif /* __ARC_KGDB_H__ */ #endif /* __ARC_KGDB_H__ */

View File

@ -123,7 +123,7 @@ static inline long regs_return_value(struct pt_regs *regs)
#define orig_r8_IS_SCALL 0x0001 #define orig_r8_IS_SCALL 0x0001
#define orig_r8_IS_SCALL_RESTARTED 0x0002 #define orig_r8_IS_SCALL_RESTARTED 0x0002
#define orig_r8_IS_BRKPT 0x0004 #define orig_r8_IS_BRKPT 0x0004
#define orig_r8_IS_EXCPN 0x0004 #define orig_r8_IS_EXCPN 0x0008
#define orig_r8_IS_IRQ1 0x0010 #define orig_r8_IS_IRQ1 0x0010
#define orig_r8_IS_IRQ2 0x0020 #define orig_r8_IS_IRQ2 0x0020

View File

@ -16,8 +16,6 @@
#include <linux/types.h> #include <linux/types.h>
int sys_clone_wrapper(int, int, int, int, int); int sys_clone_wrapper(int, int, int, int, int);
int sys_fork_wrapper(void);
int sys_vfork_wrapper(void);
int sys_cacheflush(uint32_t, uint32_t uint32_t); int sys_cacheflush(uint32_t, uint32_t uint32_t);
int sys_arc_settls(void *); int sys_arc_settls(void *);
int sys_arc_gettls(void); int sys_arc_gettls(void);

View File

@ -28,14 +28,14 @@
*/ */
struct user_regs_struct { struct user_regs_struct {
struct scratch { struct {
long pad; long pad;
long bta, lp_start, lp_end, lp_count; long bta, lp_start, lp_end, lp_count;
long status32, ret, blink, fp, gp; long status32, ret, blink, fp, gp;
long r12, r11, r10, r9, r8, r7, r6, r5, r4, r3, r2, r1, r0; long r12, r11, r10, r9, r8, r7, r6, r5, r4, r3, r2, r1, r0;
long sp; long sp;
} scratch; } scratch;
struct callee { struct {
long pad; long pad;
long r25, r24, r23, r22, r21, r20; long r25, r24, r23, r22, r21, r20;
long r19, r18, r17, r16, r15, r14, r13; long r19, r18, r17, r16, r15, r14, r13;

View File

@ -452,7 +452,7 @@ tracesys:
; using ERET won't work since next-PC has already committed ; using ERET won't work since next-PC has already committed
lr r12, [efa] lr r12, [efa]
GET_CURR_TASK_FIELD_PTR TASK_THREAD, r11 GET_CURR_TASK_FIELD_PTR TASK_THREAD, r11
st r12, [r11, THREAD_FAULT_ADDR] st r12, [r11, THREAD_FAULT_ADDR] ; thread.fault_address
; PRE Sys Call Ptrace hook ; PRE Sys Call Ptrace hook
mov r0, sp ; pt_regs needed mov r0, sp ; pt_regs needed
@ -792,31 +792,6 @@ ARC_EXIT ret_from_fork
;################### Special Sys Call Wrappers ########################## ;################### Special Sys Call Wrappers ##########################
; TBD: call do_fork directly from here
ARC_ENTRY sys_fork_wrapper
SAVE_CALLEE_SAVED_USER
bl @sys_fork
DISCARD_CALLEE_SAVED_USER
GET_CURR_THR_INFO_FLAGS r10
btst r10, TIF_SYSCALL_TRACE
bnz tracesys_exit
b ret_from_system_call
ARC_EXIT sys_fork_wrapper
ARC_ENTRY sys_vfork_wrapper
SAVE_CALLEE_SAVED_USER
bl @sys_vfork
DISCARD_CALLEE_SAVED_USER
GET_CURR_THR_INFO_FLAGS r10
btst r10, TIF_SYSCALL_TRACE
bnz tracesys_exit
b ret_from_system_call
ARC_EXIT sys_vfork_wrapper
ARC_ENTRY sys_clone_wrapper ARC_ENTRY sys_clone_wrapper
SAVE_CALLEE_SAVED_USER SAVE_CALLEE_SAVED_USER
bl @sys_clone bl @sys_clone

View File

@ -9,6 +9,7 @@
*/ */
#include <linux/kgdb.h> #include <linux/kgdb.h>
#include <linux/sched.h>
#include <asm/disasm.h> #include <asm/disasm.h>
#include <asm/cacheflush.h> #include <asm/cacheflush.h>

View File

@ -232,10 +232,8 @@ char *arc_extn_mumbojumbo(int cpu_id, char *buf, int len)
n += scnprintf(buf + n, len - n, "\n"); n += scnprintf(buf + n, len - n, "\n");
#ifdef _ASM_GENERIC_UNISTD_H
n += scnprintf(buf + n, len - n, n += scnprintf(buf + n, len - n,
"OS ABI [v2]\t: asm-generic/{unistd,stat,fcntl}\n"); "OS ABI [v3]\t: no-legacy-syscalls\n");
#endif
return buf; return buf;
} }

View File

@ -6,8 +6,6 @@
#include <asm/syscalls.h> #include <asm/syscalls.h>
#define sys_clone sys_clone_wrapper #define sys_clone sys_clone_wrapper
#define sys_fork sys_fork_wrapper
#define sys_vfork sys_vfork_wrapper
#undef __SYSCALL #undef __SYSCALL
#define __SYSCALL(nr, call) [nr] = (call), #define __SYSCALL(nr, call) [nr] = (call),

View File

@ -49,7 +49,6 @@ config ARM
select HAVE_REGS_AND_STACK_ACCESS_API select HAVE_REGS_AND_STACK_ACCESS_API
select HAVE_SYSCALL_TRACEPOINTS select HAVE_SYSCALL_TRACEPOINTS
select HAVE_UID16 select HAVE_UID16
select HAVE_VIRT_TO_BUS
select KTIME_SCALAR select KTIME_SCALAR
select PERF_USE_VMALLOC select PERF_USE_VMALLOC
select RTC_LIB select RTC_LIB
@ -556,7 +555,6 @@ config ARCH_IXP4XX
config ARCH_DOVE config ARCH_DOVE
bool "Marvell Dove" bool "Marvell Dove"
select ARCH_REQUIRE_GPIOLIB select ARCH_REQUIRE_GPIOLIB
select COMMON_CLK_DOVE
select CPU_V7 select CPU_V7
select GENERIC_CLOCKEVENTS select GENERIC_CLOCKEVENTS
select MIGHT_HAVE_PCI select MIGHT_HAVE_PCI
@ -744,6 +742,7 @@ config ARCH_RPC
select NEED_MACH_IO_H select NEED_MACH_IO_H
select NEED_MACH_MEMORY_H select NEED_MACH_MEMORY_H
select NO_IOPORT select NO_IOPORT
select VIRT_TO_BUS
help help
On the Acorn Risc-PC, Linux can support the internal IDE disk and On the Acorn Risc-PC, Linux can support the internal IDE disk and
CD-ROM interface, serial and parallel port, and the floppy drive. CD-ROM interface, serial and parallel port, and the floppy drive.
@ -879,6 +878,7 @@ config ARCH_SHARK
select ISA_DMA select ISA_DMA
select NEED_MACH_MEMORY_H select NEED_MACH_MEMORY_H
select PCI select PCI
select VIRT_TO_BUS
select ZONE_DMA select ZONE_DMA
help help
Support for the StrongARM based Digital DNARD machine, also known Support for the StrongARM based Digital DNARD machine, also known
@ -1006,12 +1006,12 @@ config ARCH_MULTI_V4_V5
bool bool
config ARCH_MULTI_V6 config ARCH_MULTI_V6
bool "ARMv6 based platforms (ARM11, Scorpion, ...)" bool "ARMv6 based platforms (ARM11)"
select ARCH_MULTI_V6_V7 select ARCH_MULTI_V6_V7
select CPU_V6 select CPU_V6
config ARCH_MULTI_V7 config ARCH_MULTI_V7
bool "ARMv7 based platforms (Cortex-A, PJ4, Krait)" bool "ARMv7 based platforms (Cortex-A, PJ4, Scorpion, Krait)"
default y default y
select ARCH_MULTI_V6_V7 select ARCH_MULTI_V6_V7
select ARCH_VEXPRESS select ARCH_VEXPRESS
@ -1183,9 +1183,9 @@ config ARM_NR_BANKS
default 8 default 8
config IWMMXT config IWMMXT
bool "Enable iWMMXt support" bool "Enable iWMMXt support" if !CPU_PJ4
depends on CPU_XSCALE || CPU_XSC3 || CPU_MOHAWK || CPU_PJ4 depends on CPU_XSCALE || CPU_XSC3 || CPU_MOHAWK || CPU_PJ4
default y if PXA27x || PXA3xx || ARCH_MMP default y if PXA27x || PXA3xx || ARCH_MMP || CPU_PJ4
help help
Enable support for iWMMXt context switching at run time if Enable support for iWMMXt context switching at run time if
running on a CPU that supports it. running on a CPU that supports it.
@ -1439,6 +1439,16 @@ config ARM_ERRATA_775420
to deadlock. This workaround puts DSB before executing ISB if to deadlock. This workaround puts DSB before executing ISB if
an abort may occur on cache maintenance. an abort may occur on cache maintenance.
config ARM_ERRATA_798181
bool "ARM errata: TLBI/DSB failure on Cortex-A15"
depends on CPU_V7 && SMP
help
On Cortex-A15 (r0p0..r3p2) the TLBI*IS/DSB operations are not
adequately shooting down all use of the old entries. This
option enables the Linux kernel workaround for this erratum
which sends an IPI to the CPUs that are running the same ASID
as the one being invalidated.
endmenu endmenu
source "arch/arm/common/Kconfig" source "arch/arm/common/Kconfig"
@ -1462,10 +1472,6 @@ config ISA_DMA
bool bool
select ISA_DMA_API select ISA_DMA_API
config ARCH_NO_VIRT_TO_BUS
def_bool y
depends on !ARCH_RPC && !ARCH_NETWINDER && !ARCH_SHARK
# Select ISA DMA interface # Select ISA DMA interface
config ISA_DMA_API config ISA_DMA_API
bool bool
@ -1657,13 +1663,16 @@ config LOCAL_TIMERS
accounting to be spread across the timer interval, preventing a accounting to be spread across the timer interval, preventing a
"thundering herd" at every timer tick. "thundering herd" at every timer tick.
# The GPIO number here must be sorted by descending number. In case of
# a multiplatform kernel, we just want the highest value required by the
# selected platforms.
config ARCH_NR_GPIO config ARCH_NR_GPIO
int int
default 1024 if ARCH_SHMOBILE || ARCH_TEGRA default 1024 if ARCH_SHMOBILE || ARCH_TEGRA
default 355 if ARCH_U8500
default 264 if MACH_H4700
default 512 if SOC_OMAP5 default 512 if SOC_OMAP5
default 355 if ARCH_U8500
default 288 if ARCH_VT8500 || ARCH_SUNXI default 288 if ARCH_VT8500 || ARCH_SUNXI
default 264 if MACH_H4700
default 0 default 0
help help
Maximum number of GPIOs in the system. Maximum number of GPIOs in the system.
@ -1887,8 +1896,9 @@ config XEN_DOM0
config XEN config XEN
bool "Xen guest support on ARM (EXPERIMENTAL)" bool "Xen guest support on ARM (EXPERIMENTAL)"
depends on ARM && OF depends on ARM && AEABI && OF
depends on CPU_V7 && !CPU_V6 depends on CPU_V7 && !CPU_V6
depends on !GENERIC_ATOMIC64
help help
Say Y if you want to run Linux in a Virtual Machine on Xen on ARM. Say Y if you want to run Linux in a Virtual Machine on Xen on ARM.

View File

@ -492,9 +492,10 @@ config DEBUG_IMX_UART_PORT
DEBUG_IMX31_UART || \ DEBUG_IMX31_UART || \
DEBUG_IMX35_UART || \ DEBUG_IMX35_UART || \
DEBUG_IMX51_UART || \ DEBUG_IMX51_UART || \
DEBUG_IMX50_IMX53_UART || \ DEBUG_IMX53_UART || \
DEBUG_IMX6Q_UART DEBUG_IMX6Q_UART
default 1 default 1
depends on ARCH_MXC
help help
Choose UART port on which kernel low-level debug messages Choose UART port on which kernel low-level debug messages
should be output. should be output.

View File

@ -115,4 +115,4 @@ i:
$(CONFIG_SHELL) $(srctree)/$(src)/install.sh $(KERNELRELEASE) \ $(CONFIG_SHELL) $(srctree)/$(src)/install.sh $(KERNELRELEASE) \
$(obj)/Image System.map "$(INSTALL_PATH)" $(obj)/Image System.map "$(INSTALL_PATH)"
subdir- := bootp compressed subdir- := bootp compressed dts

View File

@ -54,7 +54,7 @@
}; };
mvsdio@d00d4000 { mvsdio@d00d4000 {
pinctrl-0 = <&sdio_pins2>; pinctrl-0 = <&sdio_pins3>;
pinctrl-names = "default"; pinctrl-names = "default";
status = "okay"; status = "okay";
/* /*

View File

@ -64,5 +64,13 @@
status = "okay"; status = "okay";
/* No CD or WP GPIOs */ /* No CD or WP GPIOs */
}; };
usb@d0050000 {
status = "okay";
};
usb@d0051000 {
status = "okay";
};
}; };
}; };

View File

@ -31,7 +31,6 @@
mpic: interrupt-controller@d0020000 { mpic: interrupt-controller@d0020000 {
compatible = "marvell,mpic"; compatible = "marvell,mpic";
#interrupt-cells = <1>; #interrupt-cells = <1>;
#address-cells = <1>;
#size-cells = <1>; #size-cells = <1>;
interrupt-controller; interrupt-controller;
}; };
@ -54,7 +53,7 @@
reg = <0xd0012000 0x100>; reg = <0xd0012000 0x100>;
reg-shift = <2>; reg-shift = <2>;
interrupts = <41>; interrupts = <41>;
reg-io-width = <4>; reg-io-width = <1>;
status = "disabled"; status = "disabled";
}; };
serial@d0012100 { serial@d0012100 {
@ -62,7 +61,7 @@
reg = <0xd0012100 0x100>; reg = <0xd0012100 0x100>;
reg-shift = <2>; reg-shift = <2>;
interrupts = <42>; interrupts = <42>;
reg-io-width = <4>; reg-io-width = <1>;
status = "disabled"; status = "disabled";
}; };

View File

@ -59,6 +59,12 @@
"mpp50", "mpp51", "mpp52"; "mpp50", "mpp51", "mpp52";
marvell,function = "sd0"; marvell,function = "sd0";
}; };
sdio_pins3: sdio-pins3 {
marvell,pins = "mpp48", "mpp49", "mpp50",
"mpp51", "mpp52", "mpp53";
marvell,function = "sd0";
};
}; };
gpio0: gpio@d0018100 { gpio0: gpio@d0018100 {

View File

@ -46,7 +46,7 @@
reg = <0xd0012200 0x100>; reg = <0xd0012200 0x100>;
reg-shift = <2>; reg-shift = <2>;
interrupts = <43>; interrupts = <43>;
reg-io-width = <4>; reg-io-width = <1>;
status = "disabled"; status = "disabled";
}; };
serial@d0012300 { serial@d0012300 {
@ -54,7 +54,7 @@
reg = <0xd0012300 0x100>; reg = <0xd0012300 0x100>;
reg-shift = <2>; reg-shift = <2>;
interrupts = <44>; interrupts = <44>;
reg-io-width = <4>; reg-io-width = <1>;
status = "disabled"; status = "disabled";
}; };

View File

@ -238,8 +238,32 @@
nand { nand {
pinctrl_nand: nand-0 { pinctrl_nand: nand-0 {
atmel,pins = atmel,pins =
<3 4 0x0 0x1 /* PD5 gpio RDY pin pull_up */ <3 0 0x1 0x0 /* PD0 periph A Read Enable */
3 5 0x0 0x1>; /* PD4 gpio enable pin pull_up */ 3 1 0x1 0x0 /* PD1 periph A Write Enable */
3 2 0x1 0x0 /* PD2 periph A Address Latch Enable */
3 3 0x1 0x0 /* PD3 periph A Command Latch Enable */
3 4 0x0 0x1 /* PD4 gpio Chip Enable pin pull_up */
3 5 0x0 0x1 /* PD5 gpio RDY/BUSY pin pull_up */
3 6 0x1 0x0 /* PD6 periph A Data bit 0 */
3 7 0x1 0x0 /* PD7 periph A Data bit 1 */
3 8 0x1 0x0 /* PD8 periph A Data bit 2 */
3 9 0x1 0x0 /* PD9 periph A Data bit 3 */
3 10 0x1 0x0 /* PD10 periph A Data bit 4 */
3 11 0x1 0x0 /* PD11 periph A Data bit 5 */
3 12 0x1 0x0 /* PD12 periph A Data bit 6 */
3 13 0x1 0x0>; /* PD13 periph A Data bit 7 */
};
pinctrl_nand_16bits: nand_16bits-0 {
atmel,pins =
<3 14 0x1 0x0 /* PD14 periph A Data bit 8 */
3 15 0x1 0x0 /* PD15 periph A Data bit 9 */
3 16 0x1 0x0 /* PD16 periph A Data bit 10 */
3 17 0x1 0x0 /* PD17 periph A Data bit 11 */
3 18 0x1 0x0 /* PD18 periph A Data bit 12 */
3 19 0x1 0x0 /* PD19 periph A Data bit 13 */
3 20 0x1 0x0 /* PD20 periph A Data bit 14 */
3 21 0x1 0x0>; /* PD21 periph A Data bit 15 */
}; };
}; };

View File

@ -105,7 +105,7 @@
compatible = "fixed-clock"; compatible = "fixed-clock";
reg = <1>; reg = <1>;
#clock-cells = <0>; #clock-cells = <0>;
clock-frequency = <150000000>; clock-frequency = <250000000>;
}; };
}; };
}; };

View File

@ -191,8 +191,8 @@
prcmu: prcmu@80157000 { prcmu: prcmu@80157000 {
compatible = "stericsson,db8500-prcmu"; compatible = "stericsson,db8500-prcmu";
reg = <0x80157000 0x1000>; reg = <0x80157000 0x1000>, <0x801b0000 0x8000>, <0x801b8000 0x1000>;
reg-names = "prcmu"; reg-names = "prcmu", "prcmu-tcpm", "prcmu-tcdm";
interrupts = <0 47 0x4>; interrupts = <0 47 0x4>;
#address-cells = <1>; #address-cells = <1>;
#size-cells = <1>; #size-cells = <1>;
@ -319,9 +319,8 @@
}; };
}; };
ab8500@5 { ab8500 {
compatible = "stericsson,ab8500"; compatible = "stericsson,ab8500";
reg = <5>; /* mailbox 5 is i2c */
interrupt-parent = <&intc>; interrupt-parent = <&intc>;
interrupts = <0 40 0x4>; interrupts = <0 40 0x4>;
interrupt-controller; interrupt-controller;

View File

@ -197,6 +197,11 @@
status = "disabled"; status = "disabled";
}; };
rtc@d8500 {
compatible = "marvell,orion-rtc";
reg = <0xd8500 0x20>;
};
crypto: crypto@30000 { crypto: crypto@30000 {
compatible = "marvell,orion-crypto"; compatible = "marvell,orion-crypto";
reg = <0x30000 0x10000>, reg = <0x30000 0x10000>,

View File

@ -275,18 +275,27 @@
compatible = "arm,pl330", "arm,primecell"; compatible = "arm,pl330", "arm,primecell";
reg = <0x12680000 0x1000>; reg = <0x12680000 0x1000>;
interrupts = <0 35 0>; interrupts = <0 35 0>;
#dma-cells = <1>;
#dma-channels = <8>;
#dma-requests = <32>;
}; };
pdma1: pdma@12690000 { pdma1: pdma@12690000 {
compatible = "arm,pl330", "arm,primecell"; compatible = "arm,pl330", "arm,primecell";
reg = <0x12690000 0x1000>; reg = <0x12690000 0x1000>;
interrupts = <0 36 0>; interrupts = <0 36 0>;
#dma-cells = <1>;
#dma-channels = <8>;
#dma-requests = <32>;
}; };
mdma1: mdma@12850000 { mdma1: mdma@12850000 {
compatible = "arm,pl330", "arm,primecell"; compatible = "arm,pl330", "arm,primecell";
reg = <0x12850000 0x1000>; reg = <0x12850000 0x1000>;
interrupts = <0 34 0>; interrupts = <0 34 0>;
#dma-cells = <1>;
#dma-channels = <8>;
#dma-requests = <1>;
}; };
}; };
}; };

View File

@ -142,12 +142,18 @@
compatible = "arm,pl330", "arm,primecell"; compatible = "arm,pl330", "arm,primecell";
reg = <0x120000 0x1000>; reg = <0x120000 0x1000>;
interrupts = <0 34 0>; interrupts = <0 34 0>;
#dma-cells = <1>;
#dma-channels = <8>;
#dma-requests = <32>;
}; };
pdma1: pdma@121B0000 { pdma1: pdma@121B0000 {
compatible = "arm,pl330", "arm,primecell"; compatible = "arm,pl330", "arm,primecell";
reg = <0x121000 0x1000>; reg = <0x121000 0x1000>;
interrupts = <0 35 0>; interrupts = <0 35 0>;
#dma-cells = <1>;
#dma-channels = <8>;
#dma-requests = <32>;
}; };
}; };

View File

@ -221,7 +221,7 @@
}; };
}; };
ab8500@5 { ab8500 {
ab8500-regulators { ab8500-regulators {
ab8500_ldo_aux1_reg: ab8500_ldo_aux1 { ab8500_ldo_aux1_reg: ab8500_ldo_aux1 {
regulator-name = "V-DISPLAY"; regulator-name = "V-DISPLAY";

View File

@ -158,7 +158,7 @@
}; };
}; };
ab8500@5 { ab8500 {
ab8500-regulators { ab8500-regulators {
ab8500_ldo_aux1_reg: ab8500_ldo_aux1 { ab8500_ldo_aux1_reg: ab8500_ldo_aux1 {
regulator-name = "V-DISPLAY"; regulator-name = "V-DISPLAY";

View File

@ -152,7 +152,6 @@
i2c0: i2c@80058000 { i2c0: i2c@80058000 {
pinctrl-names = "default"; pinctrl-names = "default";
pinctrl-0 = <&i2c0_pins_a>; pinctrl-0 = <&i2c0_pins_a>;
clock-frequency = <400000>;
status = "okay"; status = "okay";
sgtl5000: codec@0a { sgtl5000: codec@0a {

View File

@ -70,7 +70,6 @@
i2c0: i2c@80058000 { i2c0: i2c@80058000 {
pinctrl-names = "default"; pinctrl-names = "default";
pinctrl-0 = <&i2c0_pins_a>; pinctrl-0 = <&i2c0_pins_a>;
clock-frequency = <400000>;
status = "okay"; status = "okay";
rtc: rtc@51 { rtc: rtc@51 {

View File

@ -42,10 +42,9 @@
fsl,pins = <689 0x10000 /* DISP1_DRDY */ fsl,pins = <689 0x10000 /* DISP1_DRDY */
482 0x10000 /* DISP1_HSYNC */ 482 0x10000 /* DISP1_HSYNC */
489 0x10000 /* DISP1_VSYNC */ 489 0x10000 /* DISP1_VSYNC */
684 0x10000 /* DISP1_DAT_0 */
515 0x10000 /* DISP1_DAT_22 */ 515 0x10000 /* DISP1_DAT_22 */
523 0x10000 /* DISP1_DAT_23 */ 523 0x10000 /* DISP1_DAT_23 */
543 0x10000 /* DISP1_DAT_21 */ 545 0x10000 /* DISP1_DAT_21 */
553 0x10000 /* DISP1_DAT_20 */ 553 0x10000 /* DISP1_DAT_20 */
558 0x10000 /* DISP1_DAT_19 */ 558 0x10000 /* DISP1_DAT_19 */
564 0x10000 /* DISP1_DAT_18 */ 564 0x10000 /* DISP1_DAT_18 */

View File

@ -91,6 +91,7 @@
compatible = "arm,cortex-a9-twd-timer"; compatible = "arm,cortex-a9-twd-timer";
reg = <0x00a00600 0x20>; reg = <0x00a00600 0x20>;
interrupts = <1 13 0xf01>; interrupts = <1 13 0xf01>;
clocks = <&clks 15>;
}; };
L2: l2-cache@00a02000 { L2: l2-cache@00a02000 {

View File

@ -42,12 +42,10 @@
ocp@f1000000 { ocp@f1000000 {
serial@12000 { serial@12000 {
clock-frequency = <166666667>;
status = "okay"; status = "okay";
}; };
serial@12100 { serial@12100 {
clock-frequency = <166666667>;
status = "okay"; status = "okay";
}; };
}; };

View File

@ -50,7 +50,6 @@
}; };
}; };
serial@12000 { serial@12000 {
clock-frequency = <200000000>;
status = "okay"; status = "okay";
}; };
}; };

View File

@ -37,7 +37,6 @@
}; };
}; };
serial@12000 { serial@12000 {
clock-frequency = <200000000>;
status = "ok"; status = "ok";
}; };

View File

@ -38,7 +38,6 @@
}; };
}; };
serial@12000 { serial@12000 {
clock-frequency = <200000000>;
status = "ok"; status = "ok";
}; };

View File

@ -73,11 +73,11 @@
}; };
}; };
serial@12000 { serial@12000 {
clock-frequency = <200000000>;
status = "ok"; status = "ok";
}; };
nand@3000000 { nand@3000000 {
chip-delay = <40>;
status = "okay"; status = "okay";
partition@0 { partition@0 {

View File

@ -51,7 +51,6 @@
}; };
}; };
serial@12000 { serial@12000 {
clock-frequency = <200000000>;
status = "okay"; status = "okay";
}; };

View File

@ -78,7 +78,6 @@
}; };
}; };
serial@12000 { serial@12000 {
clock-frequency = <200000000>;
status = "ok"; status = "ok";
}; };

View File

@ -96,11 +96,11 @@
marvell,function = "gpio"; marvell,function = "gpio";
}; };
pmx_led_rebuild_brt_ctrl_1: pmx-led-rebuild-brt-ctrl-1 { pmx_led_rebuild_brt_ctrl_1: pmx-led-rebuild-brt-ctrl-1 {
marvell,pins = "mpp44"; marvell,pins = "mpp46";
marvell,function = "gpio"; marvell,function = "gpio";
}; };
pmx_led_rebuild_brt_ctrl_2: pmx-led-rebuild-brt-ctrl-2 { pmx_led_rebuild_brt_ctrl_2: pmx-led-rebuild-brt-ctrl-2 {
marvell,pins = "mpp45"; marvell,pins = "mpp47";
marvell,function = "gpio"; marvell,function = "gpio";
}; };
@ -115,7 +115,6 @@
}; };
serial@12000 { serial@12000 {
clock-frequency = <200000000>;
status = "ok"; status = "ok";
}; };
@ -158,14 +157,14 @@
gpios = <&gpio0 16 0>; gpios = <&gpio0 16 0>;
linux,default-trigger = "default-on"; linux,default-trigger = "default-on";
}; };
health_led1 { rebuild_led {
label = "status:white:rebuild_led";
gpios = <&gpio1 4 0>;
};
health_led {
label = "status:red:health_led"; label = "status:red:health_led";
gpios = <&gpio1 5 0>; gpios = <&gpio1 5 0>;
}; };
health_led2 {
label = "status:white:health_led";
gpios = <&gpio1 4 0>;
};
backup_led { backup_led {
label = "status:blue:backup_led"; label = "status:blue:backup_led";
gpios = <&gpio0 15 0>; gpios = <&gpio0 15 0>;

View File

@ -34,7 +34,6 @@
}; };
serial@12000 { serial@12000 {
clock-frequency = <200000000>;
status = "ok"; status = "ok";
}; };

View File

@ -13,7 +13,6 @@
ocp@f1000000 { ocp@f1000000 {
serial@12000 { serial@12000 {
clock-frequency = <166666667>;
status = "okay"; status = "okay";
}; };
}; };

View File

@ -13,7 +13,6 @@
ocp@f1000000 { ocp@f1000000 {
serial@12000 { serial@12000 {
clock-frequency = <200000000>;
status = "okay"; status = "okay";
}; };
}; };

View File

@ -90,7 +90,6 @@
}; };
serial@12000 { serial@12000 {
clock-frequency = <200000000>;
status = "ok"; status = "ok";
}; };

View File

@ -23,7 +23,6 @@
}; };
serial@12000 { serial@12000 {
clock-frequency = <166666667>;
status = "okay"; status = "okay";
}; };

View File

@ -117,7 +117,6 @@
}; };
serial@12000 { serial@12000 {
clock-frequency = <200000000>;
status = "ok"; status = "ok";
}; };

View File

@ -18,12 +18,10 @@
ocp@f1000000 { ocp@f1000000 {
serial@12000 { serial@12000 {
clock-frequency = <200000000>;
status = "ok"; status = "ok";
}; };
serial@12100 { serial@12100 {
clock-frequency = <200000000>;
status = "ok"; status = "ok";
}; };

View File

@ -108,7 +108,6 @@
}; };
serial@12000 { serial@12000 {
clock-frequency = <200000000>;
status = "ok"; status = "ok";
}; };

View File

@ -38,6 +38,7 @@
interrupt-controller; interrupt-controller;
#interrupt-cells = <2>; #interrupt-cells = <2>;
interrupts = <35>, <36>, <37>, <38>; interrupts = <35>, <36>, <37>, <38>;
clocks = <&gate_clk 7>;
}; };
gpio1: gpio@10140 { gpio1: gpio@10140 {
@ -49,6 +50,7 @@
interrupt-controller; interrupt-controller;
#interrupt-cells = <2>; #interrupt-cells = <2>;
interrupts = <39>, <40>, <41>; interrupts = <39>, <40>, <41>;
clocks = <&gate_clk 7>;
}; };
serial@12000 { serial@12000 {
@ -57,7 +59,6 @@
reg-shift = <2>; reg-shift = <2>;
interrupts = <33>; interrupts = <33>;
clocks = <&gate_clk 7>; clocks = <&gate_clk 7>;
/* set clock-frequency in board dts */
status = "disabled"; status = "disabled";
}; };
@ -67,7 +68,6 @@
reg-shift = <2>; reg-shift = <2>;
interrupts = <34>; interrupts = <34>;
clocks = <&gate_clk 7>; clocks = <&gate_clk 7>;
/* set clock-frequency in board dts */
status = "disabled"; status = "disabled";
}; };
@ -75,6 +75,7 @@
compatible = "marvell,kirkwood-rtc", "marvell,orion-rtc"; compatible = "marvell,kirkwood-rtc", "marvell,orion-rtc";
reg = <0x10300 0x20>; reg = <0x10300 0x20>;
interrupts = <53>; interrupts = <53>;
clocks = <&gate_clk 7>;
}; };
spi@10600 { spi@10600 {

View File

@ -11,7 +11,7 @@
/ { / {
model = "LaCie Ethernet Disk mini V2"; model = "LaCie Ethernet Disk mini V2";
compatible = "lacie,ethernet-disk-mini-v2", "marvell-orion5x-88f5182", "marvell,orion5x"; compatible = "lacie,ethernet-disk-mini-v2", "marvell,orion5x-88f5182", "marvell,orion5x";
memory { memory {
reg = <0x00000000 0x4000000>; /* 64 MB */ reg = <0x00000000 0x4000000>; /* 64 MB */

View File

@ -13,6 +13,9 @@
compatible = "marvell,orion5x"; compatible = "marvell,orion5x";
interrupt-parent = <&intc>; interrupt-parent = <&intc>;
aliases {
gpio0 = &gpio0;
};
intc: interrupt-controller { intc: interrupt-controller {
compatible = "marvell,orion-intc", "marvell,intc"; compatible = "marvell,orion-intc", "marvell,intc";
interrupt-controller; interrupt-controller;
@ -32,7 +35,9 @@
#gpio-cells = <2>; #gpio-cells = <2>;
gpio-controller; gpio-controller;
reg = <0x10100 0x40>; reg = <0x10100 0x40>;
ngpio = <32>; ngpios = <32>;
interrupt-controller;
#interrupt-cells = <2>;
interrupts = <6>, <7>, <8>, <9>; interrupts = <6>, <7>, <8>, <9>;
}; };
@ -91,7 +96,7 @@
reg = <0x90000 0x10000>, reg = <0x90000 0x10000>,
<0xf2200000 0x800>; <0xf2200000 0x800>;
reg-names = "regs", "sram"; reg-names = "regs", "sram";
interrupts = <22>; interrupts = <28>;
status = "okay"; status = "okay";
}; };
}; };

View File

@ -298,7 +298,7 @@
}; };
}; };
ab8500@5 { ab8500 {
ab8500-regulators { ab8500-regulators {
ab8500_ldo_aux1_reg: ab8500_ldo_aux1 { ab8500_ldo_aux1_reg: ab8500_ldo_aux1 {
regulator-name = "V-DISPLAY"; regulator-name = "V-DISPLAY";

View File

@ -75,6 +75,9 @@
compatible = "arm,pl330", "arm,primecell"; compatible = "arm,pl330", "arm,primecell";
reg = <0xffe01000 0x1000>; reg = <0xffe01000 0x1000>;
interrupts = <0 180 4>; interrupts = <0 180 4>;
#dma-cells = <1>;
#dma-channels = <8>;
#dma-requests = <32>;
}; };
}; };

View File

@ -118,6 +118,7 @@
compatible = "arm,cortex-a9-twd-timer"; compatible = "arm,cortex-a9-twd-timer";
reg = <0x50040600 0x20>; reg = <0x50040600 0x20>;
interrupts = <1 13 0x304>; interrupts = <1 13 0x304>;
clocks = <&tegra_car 132>;
}; };
intc: interrupt-controller { intc: interrupt-controller {
@ -384,7 +385,7 @@
spi@7000d800 { spi@7000d800 {
compatible = "nvidia,tegra20-slink"; compatible = "nvidia,tegra20-slink";
reg = <0x7000d480 0x200>; reg = <0x7000d800 0x200>;
interrupts = <0 83 0x04>; interrupts = <0 83 0x04>;
nvidia,dma-request-selector = <&apbdma 17>; nvidia,dma-request-selector = <&apbdma 17>;
#address-cells = <1>; #address-cells = <1>;

View File

@ -119,6 +119,7 @@
compatible = "arm,cortex-a9-twd-timer"; compatible = "arm,cortex-a9-twd-timer";
reg = <0x50040600 0x20>; reg = <0x50040600 0x20>;
interrupts = <1 13 0xf04>; interrupts = <1 13 0xf04>;
clocks = <&tegra_car 214>;
}; };
intc: interrupt-controller { intc: interrupt-controller {
@ -371,7 +372,7 @@
spi@7000d800 { spi@7000d800 {
compatible = "nvidia,tegra30-slink", "nvidia,tegra20-slink"; compatible = "nvidia,tegra30-slink", "nvidia,tegra20-slink";
reg = <0x7000d480 0x200>; reg = <0x7000d800 0x200>;
interrupts = <0 83 0x04>; interrupts = <0 83 0x04>;
nvidia,dma-request-selector = <&apbdma 17>; nvidia,dma-request-selector = <&apbdma 17>;
#address-cells = <1>; #address-cells = <1>;

View File

@ -116,6 +116,7 @@ CONFIG_SND_SOC=y
CONFIG_SND_MXS_SOC=y CONFIG_SND_MXS_SOC=y
CONFIG_SND_SOC_MXS_SGTL5000=y CONFIG_SND_SOC_MXS_SGTL5000=y
CONFIG_USB=y CONFIG_USB=y
CONFIG_USB_EHCI_HCD=y
CONFIG_USB_CHIPIDEA=y CONFIG_USB_CHIPIDEA=y
CONFIG_USB_CHIPIDEA_HOST=y CONFIG_USB_CHIPIDEA_HOST=y
CONFIG_USB_STORAGE=y CONFIG_USB_STORAGE=y

View File

@ -126,6 +126,8 @@ CONFIG_INPUT_MISC=y
CONFIG_INPUT_TWL4030_PWRBUTTON=y CONFIG_INPUT_TWL4030_PWRBUTTON=y
CONFIG_VT_HW_CONSOLE_BINDING=y CONFIG_VT_HW_CONSOLE_BINDING=y
# CONFIG_LEGACY_PTYS is not set # CONFIG_LEGACY_PTYS is not set
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_CONSOLE=y
CONFIG_SERIAL_8250_NR_UARTS=32 CONFIG_SERIAL_8250_NR_UARTS=32
CONFIG_SERIAL_8250_EXTENDED=y CONFIG_SERIAL_8250_EXTENDED=y
CONFIG_SERIAL_8250_MANY_PORTS=y CONFIG_SERIAL_8250_MANY_PORTS=y

View File

@ -24,7 +24,7 @@ extern struct arm_delay_ops {
void (*delay)(unsigned long); void (*delay)(unsigned long);
void (*const_udelay)(unsigned long); void (*const_udelay)(unsigned long);
void (*udelay)(unsigned long); void (*udelay)(unsigned long);
bool const_clock; unsigned long ticks_per_jiffy;
} arm_delay_ops; } arm_delay_ops;
#define __delay(n) arm_delay_ops.delay(n) #define __delay(n) arm_delay_ops.delay(n)

View File

@ -41,6 +41,13 @@ extern void kunmap_high(struct page *page);
#endif #endif
#endif #endif
/*
* Needed to be able to broadcast the TLB invalidation for kmap.
*/
#ifdef CONFIG_ARM_ERRATA_798181
#undef ARCH_NEEDS_KMAP_HIGH_GET
#endif
#ifdef ARCH_NEEDS_KMAP_HIGH_GET #ifdef ARCH_NEEDS_KMAP_HIGH_GET
extern void *kmap_high_get(struct page *page); extern void *kmap_high_get(struct page *page);
#else #else

View File

@ -27,6 +27,8 @@ void __check_vmalloc_seq(struct mm_struct *mm);
void check_and_switch_context(struct mm_struct *mm, struct task_struct *tsk); void check_and_switch_context(struct mm_struct *mm, struct task_struct *tsk);
#define init_new_context(tsk,mm) ({ atomic64_set(&mm->context.id, 0); 0; }) #define init_new_context(tsk,mm) ({ atomic64_set(&mm->context.id, 0); 0; })
DECLARE_PER_CPU(atomic64_t, active_asids);
#else /* !CONFIG_CPU_HAS_ASID */ #else /* !CONFIG_CPU_HAS_ASID */
#ifdef CONFIG_MMU #ifdef CONFIG_MMU

View File

@ -450,6 +450,21 @@ static inline void local_flush_bp_all(void)
isb(); isb();
} }
#ifdef CONFIG_ARM_ERRATA_798181
static inline void dummy_flush_tlb_a15_erratum(void)
{
/*
* Dummy TLBIMVAIS. Using the unmapped address 0 and ASID 0.
*/
asm("mcr p15, 0, %0, c8, c3, 1" : : "r" (0));
dsb();
}
#else
static inline void dummy_flush_tlb_a15_erratum(void)
{
}
#endif
/* /*
* flush_pmd_entry * flush_pmd_entry
* *

View File

@ -2,6 +2,7 @@
#define _ASM_ARM_XEN_EVENTS_H #define _ASM_ARM_XEN_EVENTS_H
#include <asm/ptrace.h> #include <asm/ptrace.h>
#include <asm/atomic.h>
enum ipi_vector { enum ipi_vector {
XEN_PLACEHOLDER_VECTOR, XEN_PLACEHOLDER_VECTOR,
@ -15,26 +16,8 @@ static inline int xen_irqs_disabled(struct pt_regs *regs)
return raw_irqs_disabled_flags(regs->ARM_cpsr); return raw_irqs_disabled_flags(regs->ARM_cpsr);
} }
/* #define xchg_xen_ulong(ptr, val) atomic64_xchg(container_of((ptr), \
* We cannot use xchg because it does not support 8-byte atomic64_t, \
* values. However it is safe to use {ldr,dtd}exd directly because all counter), (val))
* platforms which Xen can run on support those instructions.
*/
static inline xen_ulong_t xchg_xen_ulong(xen_ulong_t *ptr, xen_ulong_t val)
{
xen_ulong_t oldval;
unsigned int tmp;
wmb();
asm volatile("@ xchg_xen_ulong\n"
"1: ldrexd %0, %H0, [%3]\n"
" strexd %1, %2, %H2, [%3]\n"
" teq %1, #0\n"
" bne 1b"
: "=&r" (oldval), "=&r" (tmp)
: "r" (val), "r" (ptr)
: "memory", "cc");
return oldval;
}
#endif /* _ASM_ARM_XEN_EVENTS_H */ #endif /* _ASM_ARM_XEN_EVENTS_H */

View File

@ -276,7 +276,13 @@ ENDPROC(ftrace_graph_caller_old)
*/ */
.macro mcount_enter .macro mcount_enter
/*
* This pad compensates for the push {lr} at the call site. Note that we are
* unable to unwind through a function which does not otherwise save its lr.
*/
UNWIND(.pad #4)
stmdb sp!, {r0-r3, lr} stmdb sp!, {r0-r3, lr}
UNWIND(.save {r0-r3, lr})
.endm .endm
.macro mcount_get_lr reg .macro mcount_get_lr reg
@ -289,6 +295,7 @@ ENDPROC(ftrace_graph_caller_old)
.endm .endm
ENTRY(__gnu_mcount_nc) ENTRY(__gnu_mcount_nc)
UNWIND(.fnstart)
#ifdef CONFIG_DYNAMIC_FTRACE #ifdef CONFIG_DYNAMIC_FTRACE
mov ip, lr mov ip, lr
ldmia sp!, {lr} ldmia sp!, {lr}
@ -296,17 +303,22 @@ ENTRY(__gnu_mcount_nc)
#else #else
__mcount __mcount
#endif #endif
UNWIND(.fnend)
ENDPROC(__gnu_mcount_nc) ENDPROC(__gnu_mcount_nc)
#ifdef CONFIG_DYNAMIC_FTRACE #ifdef CONFIG_DYNAMIC_FTRACE
ENTRY(ftrace_caller) ENTRY(ftrace_caller)
UNWIND(.fnstart)
__ftrace_caller __ftrace_caller
UNWIND(.fnend)
ENDPROC(ftrace_caller) ENDPROC(ftrace_caller)
#endif #endif
#ifdef CONFIG_FUNCTION_GRAPH_TRACER #ifdef CONFIG_FUNCTION_GRAPH_TRACER
ENTRY(ftrace_graph_caller) ENTRY(ftrace_graph_caller)
UNWIND(.fnstart)
__ftrace_graph_caller __ftrace_graph_caller
UNWIND(.fnend)
ENDPROC(ftrace_graph_caller) ENDPROC(ftrace_graph_caller)
#endif #endif

View File

@ -267,7 +267,7 @@ __create_page_tables:
addne r6, r6, #1 << SECTION_SHIFT addne r6, r6, #1 << SECTION_SHIFT
strne r6, [r3] strne r6, [r3]
#if defined(CONFIG_LPAE) && defined(CONFIG_CPU_ENDIAN_BE8) #if defined(CONFIG_ARM_LPAE) && defined(CONFIG_CPU_ENDIAN_BE8)
sub r4, r4, #4 @ Fixup page table pointer sub r4, r4, #4 @ Fixup page table pointer
@ for 64-bit descriptors @ for 64-bit descriptors
#endif #endif

View File

@ -966,7 +966,7 @@ static void reset_ctrl_regs(void *unused)
} }
if (err) { if (err) {
pr_warning("CPU %d debug is powered down!\n", cpu); pr_warn_once("CPU %d debug is powered down!\n", cpu);
cpumask_or(&debug_err_mask, &debug_err_mask, cpumask_of(cpu)); cpumask_or(&debug_err_mask, &debug_err_mask, cpumask_of(cpu));
return; return;
} }
@ -987,7 +987,7 @@ clear_vcr:
isb(); isb();
if (cpumask_intersects(&debug_err_mask, cpumask_of(cpu))) { if (cpumask_intersects(&debug_err_mask, cpumask_of(cpu))) {
pr_warning("CPU %d failed to disable vector catch\n", cpu); pr_warn_once("CPU %d failed to disable vector catch\n", cpu);
return; return;
} }
@ -1007,7 +1007,7 @@ clear_vcr:
} }
if (cpumask_intersects(&debug_err_mask, cpumask_of(cpu))) { if (cpumask_intersects(&debug_err_mask, cpumask_of(cpu))) {
pr_warning("CPU %d failed to clear debug register pairs\n", cpu); pr_warn_once("CPU %d failed to clear debug register pairs\n", cpu);
return; return;
} }

View File

@ -353,6 +353,23 @@ void __init early_print(const char *str, ...)
printk("%s", buf); printk("%s", buf);
} }
static void __init cpuid_init_hwcaps(void)
{
unsigned int divide_instrs;
if (cpu_architecture() < CPU_ARCH_ARMv7)
return;
divide_instrs = (read_cpuid_ext(CPUID_EXT_ISAR0) & 0x0f000000) >> 24;
switch (divide_instrs) {
case 2:
elf_hwcap |= HWCAP_IDIVA;
case 1:
elf_hwcap |= HWCAP_IDIVT;
}
}
static void __init feat_v6_fixup(void) static void __init feat_v6_fixup(void)
{ {
int id = read_cpuid_id(); int id = read_cpuid_id();
@ -483,8 +500,11 @@ static void __init setup_processor(void)
snprintf(elf_platform, ELF_PLATFORM_SIZE, "%s%c", snprintf(elf_platform, ELF_PLATFORM_SIZE, "%s%c",
list->elf_name, ENDIANNESS); list->elf_name, ENDIANNESS);
elf_hwcap = list->elf_hwcap; elf_hwcap = list->elf_hwcap;
cpuid_init_hwcaps();
#ifndef CONFIG_ARM_THUMB #ifndef CONFIG_ARM_THUMB
elf_hwcap &= ~HWCAP_THUMB; elf_hwcap &= ~(HWCAP_THUMB | HWCAP_IDIVT);
#endif #endif
feat_v6_fixup(); feat_v6_fixup();
@ -524,7 +544,7 @@ int __init arm_add_memory(phys_addr_t start, phys_addr_t size)
size -= start & ~PAGE_MASK; size -= start & ~PAGE_MASK;
bank->start = PAGE_ALIGN(start); bank->start = PAGE_ALIGN(start);
#ifndef CONFIG_LPAE #ifndef CONFIG_ARM_LPAE
if (bank->start + size < bank->start) { if (bank->start + size < bank->start) {
printk(KERN_CRIT "Truncating memory at 0x%08llx to fit in " printk(KERN_CRIT "Truncating memory at 0x%08llx to fit in "
"32-bit physical address space\n", (long long)start); "32-bit physical address space\n", (long long)start);

View File

@ -480,7 +480,7 @@ static void __cpuinit broadcast_timer_setup(struct clock_event_device *evt)
evt->features = CLOCK_EVT_FEAT_ONESHOT | evt->features = CLOCK_EVT_FEAT_ONESHOT |
CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_PERIODIC |
CLOCK_EVT_FEAT_DUMMY; CLOCK_EVT_FEAT_DUMMY;
evt->rating = 400; evt->rating = 100;
evt->mult = 1; evt->mult = 1;
evt->set_mode = broadcast_timer_set_mode; evt->set_mode = broadcast_timer_set_mode;
@ -673,9 +673,6 @@ static int cpufreq_callback(struct notifier_block *nb,
if (freq->flags & CPUFREQ_CONST_LOOPS) if (freq->flags & CPUFREQ_CONST_LOOPS)
return NOTIFY_OK; return NOTIFY_OK;
if (arm_delay_ops.const_clock)
return NOTIFY_OK;
if (!per_cpu(l_p_j_ref, cpu)) { if (!per_cpu(l_p_j_ref, cpu)) {
per_cpu(l_p_j_ref, cpu) = per_cpu(l_p_j_ref, cpu) =
per_cpu(cpu_data, cpu).loops_per_jiffy; per_cpu(cpu_data, cpu).loops_per_jiffy;

View File

@ -12,6 +12,7 @@
#include <asm/smp_plat.h> #include <asm/smp_plat.h>
#include <asm/tlbflush.h> #include <asm/tlbflush.h>
#include <asm/mmu_context.h>
/**********************************************************************/ /**********************************************************************/
@ -69,12 +70,72 @@ static inline void ipi_flush_bp_all(void *ignored)
local_flush_bp_all(); local_flush_bp_all();
} }
#ifdef CONFIG_ARM_ERRATA_798181
static int erratum_a15_798181(void)
{
unsigned int midr = read_cpuid_id();
/* Cortex-A15 r0p0..r3p2 affected */
if ((midr & 0xff0ffff0) != 0x410fc0f0 || midr > 0x413fc0f2)
return 0;
return 1;
}
#else
static int erratum_a15_798181(void)
{
return 0;
}
#endif
static void ipi_flush_tlb_a15_erratum(void *arg)
{
dmb();
}
static void broadcast_tlb_a15_erratum(void)
{
if (!erratum_a15_798181())
return;
dummy_flush_tlb_a15_erratum();
smp_call_function_many(cpu_online_mask, ipi_flush_tlb_a15_erratum,
NULL, 1);
}
static void broadcast_tlb_mm_a15_erratum(struct mm_struct *mm)
{
int cpu;
cpumask_t mask = { CPU_BITS_NONE };
if (!erratum_a15_798181())
return;
dummy_flush_tlb_a15_erratum();
for_each_online_cpu(cpu) {
if (cpu == smp_processor_id())
continue;
/*
* We only need to send an IPI if the other CPUs are running
* the same ASID as the one being invalidated. There is no
* need for locking around the active_asids check since the
* switch_mm() function has at least one dmb() (as required by
* this workaround) in case a context switch happens on
* another CPU after the condition below.
*/
if (atomic64_read(&mm->context.id) ==
atomic64_read(&per_cpu(active_asids, cpu)))
cpumask_set_cpu(cpu, &mask);
}
smp_call_function_many(&mask, ipi_flush_tlb_a15_erratum, NULL, 1);
}
void flush_tlb_all(void) void flush_tlb_all(void)
{ {
if (tlb_ops_need_broadcast()) if (tlb_ops_need_broadcast())
on_each_cpu(ipi_flush_tlb_all, NULL, 1); on_each_cpu(ipi_flush_tlb_all, NULL, 1);
else else
local_flush_tlb_all(); local_flush_tlb_all();
broadcast_tlb_a15_erratum();
} }
void flush_tlb_mm(struct mm_struct *mm) void flush_tlb_mm(struct mm_struct *mm)
@ -83,6 +144,7 @@ void flush_tlb_mm(struct mm_struct *mm)
on_each_cpu_mask(mm_cpumask(mm), ipi_flush_tlb_mm, mm, 1); on_each_cpu_mask(mm_cpumask(mm), ipi_flush_tlb_mm, mm, 1);
else else
local_flush_tlb_mm(mm); local_flush_tlb_mm(mm);
broadcast_tlb_mm_a15_erratum(mm);
} }
void flush_tlb_page(struct vm_area_struct *vma, unsigned long uaddr) void flush_tlb_page(struct vm_area_struct *vma, unsigned long uaddr)
@ -95,6 +157,7 @@ void flush_tlb_page(struct vm_area_struct *vma, unsigned long uaddr)
&ta, 1); &ta, 1);
} else } else
local_flush_tlb_page(vma, uaddr); local_flush_tlb_page(vma, uaddr);
broadcast_tlb_mm_a15_erratum(vma->vm_mm);
} }
void flush_tlb_kernel_page(unsigned long kaddr) void flush_tlb_kernel_page(unsigned long kaddr)
@ -105,6 +168,7 @@ void flush_tlb_kernel_page(unsigned long kaddr)
on_each_cpu(ipi_flush_tlb_kernel_page, &ta, 1); on_each_cpu(ipi_flush_tlb_kernel_page, &ta, 1);
} else } else
local_flush_tlb_kernel_page(kaddr); local_flush_tlb_kernel_page(kaddr);
broadcast_tlb_a15_erratum();
} }
void flush_tlb_range(struct vm_area_struct *vma, void flush_tlb_range(struct vm_area_struct *vma,
@ -119,6 +183,7 @@ void flush_tlb_range(struct vm_area_struct *vma,
&ta, 1); &ta, 1);
} else } else
local_flush_tlb_range(vma, start, end); local_flush_tlb_range(vma, start, end);
broadcast_tlb_mm_a15_erratum(vma->vm_mm);
} }
void flush_tlb_kernel_range(unsigned long start, unsigned long end) void flush_tlb_kernel_range(unsigned long start, unsigned long end)
@ -130,6 +195,7 @@ void flush_tlb_kernel_range(unsigned long start, unsigned long end)
on_each_cpu(ipi_flush_tlb_kernel_range, &ta, 1); on_each_cpu(ipi_flush_tlb_kernel_range, &ta, 1);
} else } else
local_flush_tlb_kernel_range(start, end); local_flush_tlb_kernel_range(start, end);
broadcast_tlb_a15_erratum();
} }
void flush_bp_all(void) void flush_bp_all(void)

View File

@ -883,8 +883,7 @@ static bool vgic_queue_irq(struct kvm_vcpu *vcpu, u8 sgi_source_id, int irq)
lr, irq, vgic_cpu->vgic_lr[lr]); lr, irq, vgic_cpu->vgic_lr[lr]);
BUG_ON(!test_bit(lr, vgic_cpu->lr_used)); BUG_ON(!test_bit(lr, vgic_cpu->lr_used));
vgic_cpu->vgic_lr[lr] |= GICH_LR_PENDING_BIT; vgic_cpu->vgic_lr[lr] |= GICH_LR_PENDING_BIT;
return true;
goto out;
} }
/* Try to use another LR for this interrupt */ /* Try to use another LR for this interrupt */
@ -898,7 +897,6 @@ static bool vgic_queue_irq(struct kvm_vcpu *vcpu, u8 sgi_source_id, int irq)
vgic_cpu->vgic_irq_lr_map[irq] = lr; vgic_cpu->vgic_irq_lr_map[irq] = lr;
set_bit(lr, vgic_cpu->lr_used); set_bit(lr, vgic_cpu->lr_used);
out:
if (!vgic_irq_is_edge(vcpu, irq)) if (!vgic_irq_is_edge(vcpu, irq))
vgic_cpu->vgic_lr[lr] |= GICH_LR_EOI; vgic_cpu->vgic_lr[lr] |= GICH_LR_EOI;
@ -1018,21 +1016,6 @@ static bool vgic_process_maintenance(struct kvm_vcpu *vcpu)
kvm_debug("MISR = %08x\n", vgic_cpu->vgic_misr); kvm_debug("MISR = %08x\n", vgic_cpu->vgic_misr);
/*
* We do not need to take the distributor lock here, since the only
* action we perform is clearing the irq_active_bit for an EOIed
* level interrupt. There is a potential race with
* the queuing of an interrupt in __kvm_vgic_flush_hwstate(), where we
* check if the interrupt is already active. Two possibilities:
*
* - The queuing is occurring on the same vcpu: cannot happen,
* as we're already in the context of this vcpu, and
* executing the handler
* - The interrupt has been migrated to another vcpu, and we
* ignore this interrupt for this run. Big deal. It is still
* pending though, and will get considered when this vcpu
* exits.
*/
if (vgic_cpu->vgic_misr & GICH_MISR_EOI) { if (vgic_cpu->vgic_misr & GICH_MISR_EOI) {
/* /*
* Some level interrupts have been EOIed. Clear their * Some level interrupts have been EOIed. Clear their
@ -1054,6 +1037,13 @@ static bool vgic_process_maintenance(struct kvm_vcpu *vcpu)
} else { } else {
vgic_cpu_irq_clear(vcpu, irq); vgic_cpu_irq_clear(vcpu, irq);
} }
/*
* Despite being EOIed, the LR may not have
* been marked as empty.
*/
set_bit(lr, (unsigned long *)vgic_cpu->vgic_elrsr);
vgic_cpu->vgic_lr[lr] &= ~GICH_LR_ACTIVE_BIT;
} }
} }
@ -1064,9 +1054,8 @@ static bool vgic_process_maintenance(struct kvm_vcpu *vcpu)
} }
/* /*
* Sync back the VGIC state after a guest run. We do not really touch * Sync back the VGIC state after a guest run. The distributor lock is
* the distributor here (the irq_pending_on_cpu bit is safe to set), * needed so we don't get preempted in the middle of the state processing.
* so there is no need for taking its lock.
*/ */
static void __kvm_vgic_sync_hwstate(struct kvm_vcpu *vcpu) static void __kvm_vgic_sync_hwstate(struct kvm_vcpu *vcpu)
{ {
@ -1112,10 +1101,14 @@ void kvm_vgic_flush_hwstate(struct kvm_vcpu *vcpu)
void kvm_vgic_sync_hwstate(struct kvm_vcpu *vcpu) void kvm_vgic_sync_hwstate(struct kvm_vcpu *vcpu)
{ {
struct vgic_dist *dist = &vcpu->kvm->arch.vgic;
if (!irqchip_in_kernel(vcpu->kvm)) if (!irqchip_in_kernel(vcpu->kvm))
return; return;
spin_lock(&dist->lock);
__kvm_vgic_sync_hwstate(vcpu); __kvm_vgic_sync_hwstate(vcpu);
spin_unlock(&dist->lock);
} }
int kvm_vgic_vcpu_pending_irq(struct kvm_vcpu *vcpu) int kvm_vgic_vcpu_pending_irq(struct kvm_vcpu *vcpu)

View File

@ -58,7 +58,7 @@ static void __timer_delay(unsigned long cycles)
static void __timer_const_udelay(unsigned long xloops) static void __timer_const_udelay(unsigned long xloops)
{ {
unsigned long long loops = xloops; unsigned long long loops = xloops;
loops *= loops_per_jiffy; loops *= arm_delay_ops.ticks_per_jiffy;
__timer_delay(loops >> UDELAY_SHIFT); __timer_delay(loops >> UDELAY_SHIFT);
} }
@ -73,11 +73,13 @@ void __init register_current_timer_delay(const struct delay_timer *timer)
pr_info("Switching to timer-based delay loop\n"); pr_info("Switching to timer-based delay loop\n");
delay_timer = timer; delay_timer = timer;
lpj_fine = timer->freq / HZ; lpj_fine = timer->freq / HZ;
loops_per_jiffy = lpj_fine;
/* cpufreq may scale loops_per_jiffy, so keep a private copy */
arm_delay_ops.ticks_per_jiffy = lpj_fine;
arm_delay_ops.delay = __timer_delay; arm_delay_ops.delay = __timer_delay;
arm_delay_ops.const_udelay = __timer_const_udelay; arm_delay_ops.const_udelay = __timer_const_udelay;
arm_delay_ops.udelay = __timer_udelay; arm_delay_ops.udelay = __timer_udelay;
arm_delay_ops.const_clock = true;
delay_calibrated = true; delay_calibrated = true;
} else { } else {
pr_info("Ignoring duplicate/late registration of read_current_timer delay\n"); pr_info("Ignoring duplicate/late registration of read_current_timer delay\n");

View File

@ -14,31 +14,15 @@
.text .text
.align 5 .align 5
.word 0
1: subs r2, r2, #4 @ 1 do we have enough
blt 5f @ 1 bytes to align with?
cmp r3, #2 @ 1
strltb r1, [ip], #1 @ 1
strleb r1, [ip], #1 @ 1
strb r1, [ip], #1 @ 1
add r2, r2, r3 @ 1 (r2 = r2 - (4 - r3))
/*
* The pointer is now aligned and the length is adjusted. Try doing the
* memset again.
*/
ENTRY(memset) ENTRY(memset)
/* ands r3, r0, #3 @ 1 unaligned?
* Preserve the contents of r0 for the return value. mov ip, r0 @ preserve r0 as return value
*/ bne 6f @ 1
mov ip, r0
ands r3, ip, #3 @ 1 unaligned?
bne 1b @ 1
/* /*
* we know that the pointer in ip is aligned to a word boundary. * we know that the pointer in ip is aligned to a word boundary.
*/ */
orr r1, r1, r1, lsl #8 1: orr r1, r1, r1, lsl #8
orr r1, r1, r1, lsl #16 orr r1, r1, r1, lsl #16
mov r3, r1 mov r3, r1
cmp r2, #16 cmp r2, #16
@ -127,4 +111,13 @@ ENTRY(memset)
tst r2, #1 tst r2, #1
strneb r1, [ip], #1 strneb r1, [ip], #1
mov pc, lr mov pc, lr
6: subs r2, r2, #4 @ 1 do we have enough
blt 5b @ 1 bytes to align with?
cmp r3, #2 @ 1
strltb r1, [ip], #1 @ 1
strleb r1, [ip], #1 @ 1
strb r1, [ip], #1 @ 1
add r2, r2, r3 @ 1 (r2 = r2 - (4 - r3))
b 1b
ENDPROC(memset) ENDPROC(memset)

View File

@ -176,6 +176,7 @@ static struct w1_gpio_platform_data w1_gpio_pdata = {
/* If you choose to use a pin other than PB16 it needs to be 3.3V */ /* If you choose to use a pin other than PB16 it needs to be 3.3V */
.pin = AT91_PIN_PB16, .pin = AT91_PIN_PB16,
.is_open_drain = 1, .is_open_drain = 1,
.ext_pullup_enable_pin = -EINVAL,
}; };
static struct platform_device w1_device = { static struct platform_device w1_device = {

View File

@ -188,6 +188,7 @@ static struct spi_board_info portuxg20_spi_devices[] = {
static struct w1_gpio_platform_data w1_gpio_pdata = { static struct w1_gpio_platform_data w1_gpio_pdata = {
.pin = AT91_PIN_PA29, .pin = AT91_PIN_PA29,
.is_open_drain = 1, .is_open_drain = 1,
.ext_pullup_enable_pin = -EINVAL,
}; };
static struct platform_device w1_device = { static struct platform_device w1_device = {

View File

@ -209,6 +209,14 @@ extern int at91_get_gpio_value(unsigned pin);
extern void at91_gpio_suspend(void); extern void at91_gpio_suspend(void);
extern void at91_gpio_resume(void); extern void at91_gpio_resume(void);
#ifdef CONFIG_PINCTRL_AT91
extern void at91_pinctrl_gpio_suspend(void);
extern void at91_pinctrl_gpio_resume(void);
#else
static inline void at91_pinctrl_gpio_suspend(void) {}
static inline void at91_pinctrl_gpio_resume(void) {}
#endif
#endif /* __ASSEMBLY__ */ #endif /* __ASSEMBLY__ */
#endif #endif

View File

@ -92,23 +92,21 @@ static int at91_aic_set_wake(struct irq_data *d, unsigned value)
void at91_irq_suspend(void) void at91_irq_suspend(void)
{ {
int i = 0, bit; int bit = -1;
if (has_aic5()) { if (has_aic5()) {
/* disable enabled irqs */ /* disable enabled irqs */
while ((bit = find_next_bit(backups, n_irqs, i)) < n_irqs) { while ((bit = find_next_bit(backups, n_irqs, bit + 1)) < n_irqs) {
at91_aic_write(AT91_AIC5_SSR, at91_aic_write(AT91_AIC5_SSR,
bit & AT91_AIC5_INTSEL_MSK); bit & AT91_AIC5_INTSEL_MSK);
at91_aic_write(AT91_AIC5_IDCR, 1); at91_aic_write(AT91_AIC5_IDCR, 1);
i = bit;
} }
/* enable wakeup irqs */ /* enable wakeup irqs */
i = 0; bit = -1;
while ((bit = find_next_bit(wakeups, n_irqs, i)) < n_irqs) { while ((bit = find_next_bit(wakeups, n_irqs, bit + 1)) < n_irqs) {
at91_aic_write(AT91_AIC5_SSR, at91_aic_write(AT91_AIC5_SSR,
bit & AT91_AIC5_INTSEL_MSK); bit & AT91_AIC5_INTSEL_MSK);
at91_aic_write(AT91_AIC5_IECR, 1); at91_aic_write(AT91_AIC5_IECR, 1);
i = bit;
} }
} else { } else {
at91_aic_write(AT91_AIC_IDCR, *backups); at91_aic_write(AT91_AIC_IDCR, *backups);
@ -118,23 +116,21 @@ void at91_irq_suspend(void)
void at91_irq_resume(void) void at91_irq_resume(void)
{ {
int i = 0, bit; int bit = -1;
if (has_aic5()) { if (has_aic5()) {
/* disable wakeup irqs */ /* disable wakeup irqs */
while ((bit = find_next_bit(wakeups, n_irqs, i)) < n_irqs) { while ((bit = find_next_bit(wakeups, n_irqs, bit + 1)) < n_irqs) {
at91_aic_write(AT91_AIC5_SSR, at91_aic_write(AT91_AIC5_SSR,
bit & AT91_AIC5_INTSEL_MSK); bit & AT91_AIC5_INTSEL_MSK);
at91_aic_write(AT91_AIC5_IDCR, 1); at91_aic_write(AT91_AIC5_IDCR, 1);
i = bit;
} }
/* enable irqs disabled for suspend */ /* enable irqs disabled for suspend */
i = 0; bit = -1;
while ((bit = find_next_bit(backups, n_irqs, i)) < n_irqs) { while ((bit = find_next_bit(backups, n_irqs, bit + 1)) < n_irqs) {
at91_aic_write(AT91_AIC5_SSR, at91_aic_write(AT91_AIC5_SSR,
bit & AT91_AIC5_INTSEL_MSK); bit & AT91_AIC5_INTSEL_MSK);
at91_aic_write(AT91_AIC5_IECR, 1); at91_aic_write(AT91_AIC5_IECR, 1);
i = bit;
} }
} else { } else {
at91_aic_write(AT91_AIC_IDCR, *wakeups); at91_aic_write(AT91_AIC_IDCR, *wakeups);

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