Merge branch 'linus' into x86/asm, to pick up recent fixes
Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
3
.mailmap
3
.mailmap
@@ -88,6 +88,7 @@ Kay Sievers <kay.sievers@vrfy.org>
|
|||||||
Kenneth W Chen <kenneth.w.chen@intel.com>
|
Kenneth W Chen <kenneth.w.chen@intel.com>
|
||||||
Konstantin Khlebnikov <koct9i@gmail.com> <k.khlebnikov@samsung.com>
|
Konstantin Khlebnikov <koct9i@gmail.com> <k.khlebnikov@samsung.com>
|
||||||
Koushik <raghavendra.koushik@neterion.com>
|
Koushik <raghavendra.koushik@neterion.com>
|
||||||
|
Krzysztof Kozlowski <krzk@kernel.org> <k.kozlowski@samsung.com>
|
||||||
Krzysztof Kozlowski <krzk@kernel.org> <k.kozlowski.k@gmail.com>
|
Krzysztof Kozlowski <krzk@kernel.org> <k.kozlowski.k@gmail.com>
|
||||||
Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
|
Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
|
||||||
Leonid I Ananiev <leonid.i.ananiev@intel.com>
|
Leonid I Ananiev <leonid.i.ananiev@intel.com>
|
||||||
@@ -158,6 +159,8 @@ Valdis Kletnieks <Valdis.Kletnieks@vt.edu>
|
|||||||
Viresh Kumar <vireshk@kernel.org> <viresh.kumar@st.com>
|
Viresh Kumar <vireshk@kernel.org> <viresh.kumar@st.com>
|
||||||
Viresh Kumar <vireshk@kernel.org> <viresh.linux@gmail.com>
|
Viresh Kumar <vireshk@kernel.org> <viresh.linux@gmail.com>
|
||||||
Viresh Kumar <vireshk@kernel.org> <viresh.kumar2@arm.com>
|
Viresh Kumar <vireshk@kernel.org> <viresh.kumar2@arm.com>
|
||||||
|
Vladimir Davydov <vdavydov.dev@gmail.com> <vdavydov@virtuozzo.com>
|
||||||
|
Vladimir Davydov <vdavydov.dev@gmail.com> <vdavydov@parallels.com>
|
||||||
Takashi YOSHII <takashi.yoshii.zj@renesas.com>
|
Takashi YOSHII <takashi.yoshii.zj@renesas.com>
|
||||||
Yusuke Goda <goda.yusuke@renesas.com>
|
Yusuke Goda <goda.yusuke@renesas.com>
|
||||||
Gustavo Padovan <gustavo@las.ic.unicamp.br>
|
Gustavo Padovan <gustavo@las.ic.unicamp.br>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
# Note: This documents additional properties of any device beyond what
|
# Note: This documents additional properties of any device beyond what
|
||||||
# is documented in Documentation/sysfs-rules.txt
|
# is documented in Documentation/sysfs-rules.txt
|
||||||
|
|
||||||
What: /sys/devices/*/of_path
|
What: /sys/devices/*/of_node
|
||||||
Date: February 2015
|
Date: February 2015
|
||||||
Contact: Device Tree mailing list <devicetree@vger.kernel.org>
|
Contact: Device Tree mailing list <devicetree@vger.kernel.org>
|
||||||
Description:
|
Description:
|
||||||
|
|||||||
@@ -94,14 +94,11 @@ has a requirements for a minimum number of vectors the driver can pass a
|
|||||||
min_vecs argument set to this limit, and the PCI core will return -ENOSPC
|
min_vecs argument set to this limit, and the PCI core will return -ENOSPC
|
||||||
if it can't meet the minimum number of vectors.
|
if it can't meet the minimum number of vectors.
|
||||||
|
|
||||||
The flags argument should normally be set to 0, but can be used to pass the
|
The flags argument is used to specify which type of interrupt can be used
|
||||||
PCI_IRQ_NOMSI and PCI_IRQ_NOMSIX flag in case a device claims to support
|
by the device and the driver (PCI_IRQ_LEGACY, PCI_IRQ_MSI, PCI_IRQ_MSIX).
|
||||||
MSI or MSI-X, but the support is broken, or to pass PCI_IRQ_NOLEGACY in
|
A convenient short-hand (PCI_IRQ_ALL_TYPES) is also available to ask for
|
||||||
case the device does not support legacy interrupt lines.
|
any possible kind of interrupt. If the PCI_IRQ_AFFINITY flag is set,
|
||||||
|
pci_alloc_irq_vectors() will spread the interrupts around the available CPUs.
|
||||||
By default this function will spread the interrupts around the available
|
|
||||||
CPUs, but this feature can be disabled by passing the PCI_IRQ_NOAFFINITY
|
|
||||||
flag.
|
|
||||||
|
|
||||||
To get the Linux IRQ numbers passed to request_irq() and free_irq() and the
|
To get the Linux IRQ numbers passed to request_irq() and free_irq() and the
|
||||||
vectors, use the following function:
|
vectors, use the following function:
|
||||||
@@ -131,7 +128,7 @@ larger than the number supported by the device it will automatically be
|
|||||||
capped to the supported limit, so there is no need to query the number of
|
capped to the supported limit, so there is no need to query the number of
|
||||||
vectors supported beforehand:
|
vectors supported beforehand:
|
||||||
|
|
||||||
nvec = pci_alloc_irq_vectors(pdev, 1, nvec, 0);
|
nvec = pci_alloc_irq_vectors(pdev, 1, nvec, PCI_IRQ_ALL_TYPES)
|
||||||
if (nvec < 0)
|
if (nvec < 0)
|
||||||
goto out_err;
|
goto out_err;
|
||||||
|
|
||||||
@@ -140,7 +137,7 @@ interrupts it can request a particular number of interrupts by passing that
|
|||||||
number to pci_alloc_irq_vectors() function as both 'min_vecs' and
|
number to pci_alloc_irq_vectors() function as both 'min_vecs' and
|
||||||
'max_vecs' parameters:
|
'max_vecs' parameters:
|
||||||
|
|
||||||
ret = pci_alloc_irq_vectors(pdev, nvec, nvec, 0);
|
ret = pci_alloc_irq_vectors(pdev, nvec, nvec, PCI_IRQ_ALL_TYPES);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
goto out_err;
|
goto out_err;
|
||||||
|
|
||||||
@@ -148,15 +145,14 @@ The most notorious example of the request type described above is enabling
|
|||||||
the single MSI mode for a device. It could be done by passing two 1s as
|
the single MSI mode for a device. It could be done by passing two 1s as
|
||||||
'min_vecs' and 'max_vecs':
|
'min_vecs' and 'max_vecs':
|
||||||
|
|
||||||
ret = pci_alloc_irq_vectors(pdev, 1, 1, 0);
|
ret = pci_alloc_irq_vectors(pdev, 1, 1, PCI_IRQ_ALL_TYPES);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
goto out_err;
|
goto out_err;
|
||||||
|
|
||||||
Some devices might not support using legacy line interrupts, in which case
|
Some devices might not support using legacy line interrupts, in which case
|
||||||
the PCI_IRQ_NOLEGACY flag can be used to fail the request if the platform
|
the driver can specify that only MSI or MSI-X is acceptable:
|
||||||
can't provide MSI or MSI-X interrupts:
|
|
||||||
|
|
||||||
nvec = pci_alloc_irq_vectors(pdev, 1, nvec, PCI_IRQ_NOLEGACY);
|
nvec = pci_alloc_irq_vectors(pdev, 1, nvec, PCI_IRQ_MSI | PCI_IRQ_MSIX);
|
||||||
if (nvec < 0)
|
if (nvec < 0)
|
||||||
goto out_err;
|
goto out_err;
|
||||||
|
|
||||||
|
|||||||
@@ -124,7 +124,6 @@ initialization with a pointer to a structure describing the driver
|
|||||||
|
|
||||||
The ID table is an array of struct pci_device_id entries ending with an
|
The ID table is an array of struct pci_device_id entries ending with an
|
||||||
all-zero entry. Definitions with static const are generally preferred.
|
all-zero entry. Definitions with static const are generally preferred.
|
||||||
Use of the deprecated macro DEFINE_PCI_DEVICE_TABLE should be avoided.
|
|
||||||
|
|
||||||
Each entry consists of:
|
Each entry consists of:
|
||||||
|
|
||||||
|
|||||||
@@ -18,13 +18,17 @@ and config2 fields of the perf_event_attr structure. The "events"
|
|||||||
directory provides configuration templates for all documented
|
directory provides configuration templates for all documented
|
||||||
events, that can be used with perf tool. For example "xp_valid_flit"
|
events, that can be used with perf tool. For example "xp_valid_flit"
|
||||||
is an equivalent of "type=0x8,event=0x4". Other parameters must be
|
is an equivalent of "type=0x8,event=0x4". Other parameters must be
|
||||||
explicitly specified. For events originating from device, "node"
|
explicitly specified.
|
||||||
defines its index. All crosspoint events require "xp" (index),
|
|
||||||
"port" (device port number) and "vc" (virtual channel ID) and
|
|
||||||
"dir" (direction). Watchpoints (special "event" value 0xfe) also
|
|
||||||
require comparator values ("cmp_l" and "cmp_h") and "mask", being
|
|
||||||
index of the comparator mask.
|
|
||||||
|
|
||||||
|
For events originating from device, "node" defines its index.
|
||||||
|
|
||||||
|
Crosspoint PMU events require "xp" (index), "bus" (bus number)
|
||||||
|
and "vc" (virtual channel ID).
|
||||||
|
|
||||||
|
Crosspoint watchpoint-based events (special "event" value 0xfe)
|
||||||
|
require "xp" and "vc" as as above plus "port" (device port index),
|
||||||
|
"dir" (transmit/receive direction), comparator values ("cmp_l"
|
||||||
|
and "cmp_h") and "mask", being index of the comparator mask.
|
||||||
Masks are defined separately from the event description
|
Masks are defined separately from the event description
|
||||||
(due to limited number of the config values) in the "cmp_mask"
|
(due to limited number of the config values) in the "cmp_mask"
|
||||||
directory, with first 8 configurable by user and additional
|
directory, with first 8 configurable by user and additional
|
||||||
|
|||||||
@@ -53,6 +53,7 @@ stable kernels.
|
|||||||
| ARM | Cortex-A57 | #832075 | ARM64_ERRATUM_832075 |
|
| ARM | Cortex-A57 | #832075 | ARM64_ERRATUM_832075 |
|
||||||
| ARM | Cortex-A57 | #852523 | N/A |
|
| ARM | Cortex-A57 | #852523 | N/A |
|
||||||
| ARM | Cortex-A57 | #834220 | ARM64_ERRATUM_834220 |
|
| ARM | Cortex-A57 | #834220 | ARM64_ERRATUM_834220 |
|
||||||
|
| ARM | Cortex-A72 | #853709 | N/A |
|
||||||
| ARM | MMU-500 | #841119,#826419 | N/A |
|
| ARM | MMU-500 | #841119,#826419 | N/A |
|
||||||
| | | | |
|
| | | | |
|
||||||
| Cavium | ThunderX ITS | #22375, #24313 | CAVIUM_ERRATUM_22375 |
|
| Cavium | ThunderX ITS | #22375, #24313 | CAVIUM_ERRATUM_22375 |
|
||||||
|
|||||||
@@ -103,7 +103,7 @@ Config Main Menu
|
|||||||
Power management options (ACPI, APM) --->
|
Power management options (ACPI, APM) --->
|
||||||
CPU Frequency scaling --->
|
CPU Frequency scaling --->
|
||||||
[*] CPU Frequency scaling
|
[*] CPU Frequency scaling
|
||||||
<*> CPU frequency translation statistics
|
[*] CPU frequency translation statistics
|
||||||
[*] CPU frequency translation statistics details
|
[*] CPU frequency translation statistics details
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -16,6 +16,11 @@ Required properties:
|
|||||||
- vref-supply: The regulator supply ADC reference voltage.
|
- vref-supply: The regulator supply ADC reference voltage.
|
||||||
- #io-channel-cells: Should be 1, see ../iio-bindings.txt
|
- #io-channel-cells: Should be 1, see ../iio-bindings.txt
|
||||||
|
|
||||||
|
Optional properties:
|
||||||
|
- resets: Must contain an entry for each entry in reset-names if need support
|
||||||
|
this option. See ../reset/reset.txt for details.
|
||||||
|
- reset-names: Must include the name "saradc-apb".
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
saradc: saradc@2006c000 {
|
saradc: saradc@2006c000 {
|
||||||
compatible = "rockchip,saradc";
|
compatible = "rockchip,saradc";
|
||||||
@@ -23,6 +28,8 @@ Example:
|
|||||||
interrupts = <GIC_SPI 26 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 26 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&cru SCLK_SARADC>, <&cru PCLK_SARADC>;
|
clocks = <&cru SCLK_SARADC>, <&cru PCLK_SARADC>;
|
||||||
clock-names = "saradc", "apb_pclk";
|
clock-names = "saradc", "apb_pclk";
|
||||||
|
resets = <&cru SRST_SARADC>;
|
||||||
|
reset-names = "saradc-apb";
|
||||||
#io-channel-cells = <1>;
|
#io-channel-cells = <1>;
|
||||||
vref-supply = <&vcc18>;
|
vref-supply = <&vcc18>;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -42,9 +42,6 @@ Optional properties:
|
|||||||
- auto-flow-control: one way to enable automatic flow control support. The
|
- auto-flow-control: one way to enable automatic flow control support. The
|
||||||
driver is allowed to detect support for the capability even without this
|
driver is allowed to detect support for the capability even without this
|
||||||
property.
|
property.
|
||||||
- {rts,cts,dtr,dsr,rng,dcd}-gpios: specify a GPIO for RTS/CTS/DTR/DSR/RI/DCD
|
|
||||||
line respectively. It will use specified GPIO instead of the peripheral
|
|
||||||
function pin for the UART feature. If unsure, don't specify this property.
|
|
||||||
|
|
||||||
Note:
|
Note:
|
||||||
* fsl,ns16550:
|
* fsl,ns16550:
|
||||||
@@ -66,19 +63,3 @@ Example:
|
|||||||
interrupts = <10>;
|
interrupts = <10>;
|
||||||
reg-shift = <2>;
|
reg-shift = <2>;
|
||||||
};
|
};
|
||||||
|
|
||||||
Example for OMAP UART using GPIO-based modem control signals:
|
|
||||||
|
|
||||||
uart4: serial@49042000 {
|
|
||||||
compatible = "ti,omap3-uart";
|
|
||||||
reg = <0x49042000 0x400>;
|
|
||||||
interrupts = <80>;
|
|
||||||
ti,hwmods = "uart4";
|
|
||||||
clock-frequency = <48000000>;
|
|
||||||
cts-gpios = <&gpio3 5 GPIO_ACTIVE_LOW>;
|
|
||||||
rts-gpios = <&gpio3 6 GPIO_ACTIVE_LOW>;
|
|
||||||
dtr-gpios = <&gpio1 12 GPIO_ACTIVE_LOW>;
|
|
||||||
dsr-gpios = <&gpio1 13 GPIO_ACTIVE_LOW>;
|
|
||||||
dcd-gpios = <&gpio1 14 GPIO_ACTIVE_LOW>;
|
|
||||||
rng-gpios = <&gpio1 15 GPIO_ACTIVE_LOW>;
|
|
||||||
};
|
|
||||||
|
|||||||
@@ -8,8 +8,6 @@ Required properties:
|
|||||||
- interrupts: Interrupt number for McPDM
|
- interrupts: Interrupt number for McPDM
|
||||||
- interrupt-parent: The parent interrupt controller
|
- interrupt-parent: The parent interrupt controller
|
||||||
- ti,hwmods: Name of the hwmod associated to the McPDM
|
- ti,hwmods: Name of the hwmod associated to the McPDM
|
||||||
- clocks: phandle for the pdmclk provider, likely <&twl6040>
|
|
||||||
- clock-names: Must be "pdmclk"
|
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
@@ -21,11 +19,3 @@ mcpdm: mcpdm@40132000 {
|
|||||||
interrupt-parent = <&gic>;
|
interrupt-parent = <&gic>;
|
||||||
ti,hwmods = "mcpdm";
|
ti,hwmods = "mcpdm";
|
||||||
};
|
};
|
||||||
|
|
||||||
In board DTS file the pdmclk needs to be added:
|
|
||||||
|
|
||||||
&mcpdm {
|
|
||||||
clocks = <&twl6040>;
|
|
||||||
clock-names = "pdmclk";
|
|
||||||
status = "okay";
|
|
||||||
};
|
|
||||||
|
|||||||
@@ -183,12 +183,10 @@ The copy_up operation essentially creates a new, identical file and
|
|||||||
moves it over to the old name. The new file may be on a different
|
moves it over to the old name. The new file may be on a different
|
||||||
filesystem, so both st_dev and st_ino of the file may change.
|
filesystem, so both st_dev and st_ino of the file may change.
|
||||||
|
|
||||||
Any open files referring to this inode will access the old data and
|
Any open files referring to this inode will access the old data.
|
||||||
metadata. Similarly any file locks obtained before copy_up will not
|
|
||||||
apply to the copied up file.
|
|
||||||
|
|
||||||
On a file opened with O_RDONLY fchmod(2), fchown(2), futimesat(2) and
|
Any file locks (and leases) obtained before copy_up will not apply
|
||||||
fsetxattr(2) will fail with EROFS.
|
to the copied up file.
|
||||||
|
|
||||||
If a file with multiple hard links is copied up, then this will
|
If a file with multiple hard links is copied up, then this will
|
||||||
"break" the link. Changes will not be propagated to other names
|
"break" the link. Changes will not be propagated to other names
|
||||||
|
|||||||
@@ -145,6 +145,11 @@ If you want to add slave support to the bus driver:
|
|||||||
|
|
||||||
* Catch the slave interrupts and send appropriate i2c_slave_events to the backend.
|
* Catch the slave interrupts and send appropriate i2c_slave_events to the backend.
|
||||||
|
|
||||||
|
Note that most hardware supports being master _and_ slave on the same bus. So,
|
||||||
|
if you extend a bus driver, please make sure that the driver supports that as
|
||||||
|
well. In almost all cases, slave support does not need to disable the master
|
||||||
|
functionality.
|
||||||
|
|
||||||
Check the i2c-rcar driver as an example.
|
Check the i2c-rcar driver as an example.
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -3032,6 +3032,10 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
|||||||
PAGE_SIZE is used as alignment.
|
PAGE_SIZE is used as alignment.
|
||||||
PCI-PCI bridge can be specified, if resource
|
PCI-PCI bridge can be specified, if resource
|
||||||
windows need to be expanded.
|
windows need to be expanded.
|
||||||
|
To specify the alignment for several
|
||||||
|
instances of a device, the PCI vendor,
|
||||||
|
device, subvendor, and subdevice may be
|
||||||
|
specified, e.g., 4096@pci:8086:9c22:103c:198f
|
||||||
ecrc= Enable/disable PCIe ECRC (transaction layer
|
ecrc= Enable/disable PCIe ECRC (transaction layer
|
||||||
end-to-end CRC checking).
|
end-to-end CRC checking).
|
||||||
bios: Use BIOS/firmware settings. This is the
|
bios: Use BIOS/firmware settings. This is the
|
||||||
|
|||||||
@@ -587,26 +587,6 @@ of DSA, would be the its port-based VLAN, used by the associated bridge device.
|
|||||||
TODO
|
TODO
|
||||||
====
|
====
|
||||||
|
|
||||||
The platform device problem
|
|
||||||
---------------------------
|
|
||||||
DSA is currently implemented as a platform device driver which is far from ideal
|
|
||||||
as was discussed in this thread:
|
|
||||||
|
|
||||||
http://permalink.gmane.org/gmane.linux.network/329848
|
|
||||||
|
|
||||||
This basically prevents the device driver model to be properly used and applied,
|
|
||||||
and support non-MDIO, non-MMIO Ethernet connected switches.
|
|
||||||
|
|
||||||
Another problem with the platform device driver approach is that it prevents the
|
|
||||||
use of a modular switch drivers build due to a circular dependency, illustrated
|
|
||||||
here:
|
|
||||||
|
|
||||||
http://comments.gmane.org/gmane.linux.network/345803
|
|
||||||
|
|
||||||
Attempts of reworking this has been done here:
|
|
||||||
|
|
||||||
https://lwn.net/Articles/643149/
|
|
||||||
|
|
||||||
Making SWITCHDEV and DSA converge towards an unified codebase
|
Making SWITCHDEV and DSA converge towards an unified codebase
|
||||||
-------------------------------------------------------------
|
-------------------------------------------------------------
|
||||||
|
|
||||||
|
|||||||
@@ -167,6 +167,8 @@ signal will be rolled back anyway.
|
|||||||
For signals taken in non-TM or suspended mode, we use the
|
For signals taken in non-TM or suspended mode, we use the
|
||||||
normal/non-checkpointed stack pointer.
|
normal/non-checkpointed stack pointer.
|
||||||
|
|
||||||
|
Any transaction initiated inside a sighandler and suspended on return
|
||||||
|
from the sighandler to the kernel will get reclaimed and discarded.
|
||||||
|
|
||||||
Failure cause codes used by kernel
|
Failure cause codes used by kernel
|
||||||
==================================
|
==================================
|
||||||
|
|||||||
@@ -80,6 +80,10 @@ functionality of their platform when planning to use this driver:
|
|||||||
|
|
||||||
III. Module parameters
|
III. Module parameters
|
||||||
|
|
||||||
|
- 'dma_timeout' - DMA transfer completion timeout (in msec, default value 3000).
|
||||||
|
This parameter set a maximum completion wait time for SYNC mode DMA
|
||||||
|
transfer requests and for RIO_WAIT_FOR_ASYNC ioctl requests.
|
||||||
|
|
||||||
- 'dbg_level' - This parameter allows to control amount of debug information
|
- 'dbg_level' - This parameter allows to control amount of debug information
|
||||||
generated by this device driver. This parameter is formed by set of
|
generated by this device driver. This parameter is formed by set of
|
||||||
bit masks that correspond to the specific functional blocks.
|
bit masks that correspond to the specific functional blocks.
|
||||||
|
|||||||
54
MAINTAINERS
54
MAINTAINERS
@@ -798,6 +798,7 @@ M: Laura Abbott <labbott@redhat.com>
|
|||||||
M: Sumit Semwal <sumit.semwal@linaro.org>
|
M: Sumit Semwal <sumit.semwal@linaro.org>
|
||||||
L: devel@driverdev.osuosl.org
|
L: devel@driverdev.osuosl.org
|
||||||
S: Supported
|
S: Supported
|
||||||
|
F: Documentation/devicetree/bindings/staging/ion/
|
||||||
F: drivers/staging/android/ion
|
F: drivers/staging/android/ion
|
||||||
F: drivers/staging/android/uapi/ion.h
|
F: drivers/staging/android/uapi/ion.h
|
||||||
F: drivers/staging/android/uapi/ion_test.h
|
F: drivers/staging/android/uapi/ion_test.h
|
||||||
@@ -881,6 +882,15 @@ S: Supported
|
|||||||
F: drivers/gpu/drm/arc/
|
F: drivers/gpu/drm/arc/
|
||||||
F: Documentation/devicetree/bindings/display/snps,arcpgu.txt
|
F: Documentation/devicetree/bindings/display/snps,arcpgu.txt
|
||||||
|
|
||||||
|
ARM ARCHITECTED TIMER DRIVER
|
||||||
|
M: Mark Rutland <mark.rutland@arm.com>
|
||||||
|
M: Marc Zyngier <marc.zyngier@arm.com>
|
||||||
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
|
S: Maintained
|
||||||
|
F: arch/arm/include/asm/arch_timer.h
|
||||||
|
F: arch/arm64/include/asm/arch_timer.h
|
||||||
|
F: drivers/clocksource/arm_arch_timer.c
|
||||||
|
|
||||||
ARM HDLCD DRM DRIVER
|
ARM HDLCD DRM DRIVER
|
||||||
M: Liviu Dudau <liviu.dudau@arm.com>
|
M: Liviu Dudau <liviu.dudau@arm.com>
|
||||||
S: Supported
|
S: Supported
|
||||||
@@ -1614,7 +1624,7 @@ N: rockchip
|
|||||||
|
|
||||||
ARM/SAMSUNG EXYNOS ARM ARCHITECTURES
|
ARM/SAMSUNG EXYNOS ARM ARCHITECTURES
|
||||||
M: Kukjin Kim <kgene@kernel.org>
|
M: Kukjin Kim <kgene@kernel.org>
|
||||||
M: Krzysztof Kozlowski <k.kozlowski@samsung.com>
|
M: Krzysztof Kozlowski <krzk@kernel.org>
|
||||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
L: linux-samsung-soc@vger.kernel.org (moderated for non-subscribers)
|
L: linux-samsung-soc@vger.kernel.org (moderated for non-subscribers)
|
||||||
S: Maintained
|
S: Maintained
|
||||||
@@ -1634,7 +1644,6 @@ F: drivers/*/*s3c64xx*
|
|||||||
F: drivers/*/*s5pv210*
|
F: drivers/*/*s5pv210*
|
||||||
F: drivers/memory/samsung/*
|
F: drivers/memory/samsung/*
|
||||||
F: drivers/soc/samsung/*
|
F: drivers/soc/samsung/*
|
||||||
F: drivers/spi/spi-s3c*
|
|
||||||
F: Documentation/arm/Samsung/
|
F: Documentation/arm/Samsung/
|
||||||
F: Documentation/devicetree/bindings/arm/samsung/
|
F: Documentation/devicetree/bindings/arm/samsung/
|
||||||
F: Documentation/devicetree/bindings/sram/samsung-sram.txt
|
F: Documentation/devicetree/bindings/sram/samsung-sram.txt
|
||||||
@@ -1822,6 +1831,7 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-stericsson.git
|
|||||||
ARM/UNIPHIER ARCHITECTURE
|
ARM/UNIPHIER ARCHITECTURE
|
||||||
M: Masahiro Yamada <yamada.masahiro@socionext.com>
|
M: Masahiro Yamada <yamada.masahiro@socionext.com>
|
||||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-uniphier.git
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: arch/arm/boot/dts/uniphier*
|
F: arch/arm/boot/dts/uniphier*
|
||||||
F: arch/arm/include/asm/hardware/cache-uniphier.h
|
F: arch/arm/include/asm/hardware/cache-uniphier.h
|
||||||
@@ -2475,7 +2485,7 @@ F: include/net/bluetooth/
|
|||||||
BONDING DRIVER
|
BONDING DRIVER
|
||||||
M: Jay Vosburgh <j.vosburgh@gmail.com>
|
M: Jay Vosburgh <j.vosburgh@gmail.com>
|
||||||
M: Veaceslav Falico <vfalico@gmail.com>
|
M: Veaceslav Falico <vfalico@gmail.com>
|
||||||
M: Andy Gospodarek <gospo@cumulusnetworks.com>
|
M: Andy Gospodarek <andy@greyhouse.net>
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
W: http://sourceforge.net/projects/bonding/
|
W: http://sourceforge.net/projects/bonding/
|
||||||
S: Supported
|
S: Supported
|
||||||
@@ -3238,7 +3248,7 @@ F: kernel/cpuset.c
|
|||||||
CONTROL GROUP - MEMORY RESOURCE CONTROLLER (MEMCG)
|
CONTROL GROUP - MEMORY RESOURCE CONTROLLER (MEMCG)
|
||||||
M: Johannes Weiner <hannes@cmpxchg.org>
|
M: Johannes Weiner <hannes@cmpxchg.org>
|
||||||
M: Michal Hocko <mhocko@kernel.org>
|
M: Michal Hocko <mhocko@kernel.org>
|
||||||
M: Vladimir Davydov <vdavydov@virtuozzo.com>
|
M: Vladimir Davydov <vdavydov.dev@gmail.com>
|
||||||
L: cgroups@vger.kernel.org
|
L: cgroups@vger.kernel.org
|
||||||
L: linux-mm@kvack.org
|
L: linux-mm@kvack.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
@@ -3259,7 +3269,7 @@ S: Maintained
|
|||||||
F: drivers/net/wan/cosa*
|
F: drivers/net/wan/cosa*
|
||||||
|
|
||||||
CPMAC ETHERNET DRIVER
|
CPMAC ETHERNET DRIVER
|
||||||
M: Florian Fainelli <florian@openwrt.org>
|
M: Florian Fainelli <f.fainelli@gmail.com>
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/net/ethernet/ti/cpmac.c
|
F: drivers/net/ethernet/ti/cpmac.c
|
||||||
@@ -7455,7 +7465,8 @@ F: Documentation/devicetree/bindings/sound/max9860.txt
|
|||||||
F: sound/soc/codecs/max9860.*
|
F: sound/soc/codecs/max9860.*
|
||||||
|
|
||||||
MAXIM MUIC CHARGER DRIVERS FOR EXYNOS BASED BOARDS
|
MAXIM MUIC CHARGER DRIVERS FOR EXYNOS BASED BOARDS
|
||||||
M: Krzysztof Kozlowski <k.kozlowski@samsung.com>
|
M: Krzysztof Kozlowski <krzk@kernel.org>
|
||||||
|
M: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
|
||||||
L: linux-pm@vger.kernel.org
|
L: linux-pm@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
F: drivers/power/max14577_charger.c
|
F: drivers/power/max14577_charger.c
|
||||||
@@ -7471,7 +7482,8 @@ F: include/dt-bindings/*/*max77802.h
|
|||||||
|
|
||||||
MAXIM PMIC AND MUIC DRIVERS FOR EXYNOS BASED BOARDS
|
MAXIM PMIC AND MUIC DRIVERS FOR EXYNOS BASED BOARDS
|
||||||
M: Chanwoo Choi <cw00.choi@samsung.com>
|
M: Chanwoo Choi <cw00.choi@samsung.com>
|
||||||
M: Krzysztof Kozlowski <k.kozlowski@samsung.com>
|
M: Krzysztof Kozlowski <krzk@kernel.org>
|
||||||
|
M: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
|
||||||
L: linux-kernel@vger.kernel.org
|
L: linux-kernel@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
F: drivers/*/max14577*.c
|
F: drivers/*/max14577*.c
|
||||||
@@ -7661,7 +7673,7 @@ L: linux-rdma@vger.kernel.org
|
|||||||
S: Supported
|
S: Supported
|
||||||
W: https://github.com/SoftRoCE/rxe-dev/wiki/rxe-dev:-Home
|
W: https://github.com/SoftRoCE/rxe-dev/wiki/rxe-dev:-Home
|
||||||
Q: http://patchwork.kernel.org/project/linux-rdma/list/
|
Q: http://patchwork.kernel.org/project/linux-rdma/list/
|
||||||
F: drivers/infiniband/hw/rxe/
|
F: drivers/infiniband/sw/rxe/
|
||||||
F: include/uapi/rdma/rdma_user_rxe.h
|
F: include/uapi/rdma/rdma_user_rxe.h
|
||||||
|
|
||||||
MEMBARRIER SUPPORT
|
MEMBARRIER SUPPORT
|
||||||
@@ -9237,7 +9249,7 @@ F: drivers/pinctrl/sh-pfc/
|
|||||||
|
|
||||||
PIN CONTROLLER - SAMSUNG
|
PIN CONTROLLER - SAMSUNG
|
||||||
M: Tomasz Figa <tomasz.figa@gmail.com>
|
M: Tomasz Figa <tomasz.figa@gmail.com>
|
||||||
M: Krzysztof Kozlowski <k.kozlowski@samsung.com>
|
M: Krzysztof Kozlowski <krzk@kernel.org>
|
||||||
M: Sylwester Nawrocki <s.nawrocki@samsung.com>
|
M: Sylwester Nawrocki <s.nawrocki@samsung.com>
|
||||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
L: linux-samsung-soc@vger.kernel.org (moderated for non-subscribers)
|
L: linux-samsung-soc@vger.kernel.org (moderated for non-subscribers)
|
||||||
@@ -10170,7 +10182,7 @@ S: Maintained
|
|||||||
F: drivers/platform/x86/samsung-laptop.c
|
F: drivers/platform/x86/samsung-laptop.c
|
||||||
|
|
||||||
SAMSUNG AUDIO (ASoC) DRIVERS
|
SAMSUNG AUDIO (ASoC) DRIVERS
|
||||||
M: Krzysztof Kozlowski <k.kozlowski@samsung.com>
|
M: Krzysztof Kozlowski <krzk@kernel.org>
|
||||||
M: Sangbeom Kim <sbkim73@samsung.com>
|
M: Sangbeom Kim <sbkim73@samsung.com>
|
||||||
M: Sylwester Nawrocki <s.nawrocki@samsung.com>
|
M: Sylwester Nawrocki <s.nawrocki@samsung.com>
|
||||||
L: alsa-devel@alsa-project.org (moderated for non-subscribers)
|
L: alsa-devel@alsa-project.org (moderated for non-subscribers)
|
||||||
@@ -10185,7 +10197,8 @@ F: drivers/video/fbdev/s3c-fb.c
|
|||||||
|
|
||||||
SAMSUNG MULTIFUNCTION PMIC DEVICE DRIVERS
|
SAMSUNG MULTIFUNCTION PMIC DEVICE DRIVERS
|
||||||
M: Sangbeom Kim <sbkim73@samsung.com>
|
M: Sangbeom Kim <sbkim73@samsung.com>
|
||||||
M: Krzysztof Kozlowski <k.kozlowski@samsung.com>
|
M: Krzysztof Kozlowski <krzk@kernel.org>
|
||||||
|
M: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
|
||||||
L: linux-kernel@vger.kernel.org
|
L: linux-kernel@vger.kernel.org
|
||||||
L: linux-samsung-soc@vger.kernel.org
|
L: linux-samsung-soc@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
@@ -10244,6 +10257,17 @@ S: Supported
|
|||||||
L: linux-samsung-soc@vger.kernel.org (moderated for non-subscribers)
|
L: linux-samsung-soc@vger.kernel.org (moderated for non-subscribers)
|
||||||
F: drivers/clk/samsung/
|
F: drivers/clk/samsung/
|
||||||
|
|
||||||
|
SAMSUNG SPI DRIVERS
|
||||||
|
M: Kukjin Kim <kgene@kernel.org>
|
||||||
|
M: Krzysztof Kozlowski <krzk@kernel.org>
|
||||||
|
M: Andi Shyti <andi.shyti@samsung.com>
|
||||||
|
L: linux-spi@vger.kernel.org
|
||||||
|
L: linux-samsung-soc@vger.kernel.org (moderated for non-subscribers)
|
||||||
|
S: Maintained
|
||||||
|
F: Documentation/devicetree/bindings/spi/spi-samsung.txt
|
||||||
|
F: drivers/spi/spi-s3c*
|
||||||
|
F: include/linux/platform_data/spi-s3c64xx.h
|
||||||
|
|
||||||
SAMSUNG SXGBE DRIVERS
|
SAMSUNG SXGBE DRIVERS
|
||||||
M: Byungho An <bh74.an@samsung.com>
|
M: Byungho An <bh74.an@samsung.com>
|
||||||
M: Girish K S <ks.giri@samsung.com>
|
M: Girish K S <ks.giri@samsung.com>
|
||||||
@@ -11223,12 +11247,8 @@ S: Odd Fixes
|
|||||||
F: drivers/staging/vt665?/
|
F: drivers/staging/vt665?/
|
||||||
|
|
||||||
STAGING - WILC1000 WIFI DRIVER
|
STAGING - WILC1000 WIFI DRIVER
|
||||||
M: Johnny Kim <johnny.kim@atmel.com>
|
M: Aditya Shankar <aditya.shankar@microchip.com>
|
||||||
M: Austin Shin <austin.shin@atmel.com>
|
M: Ganesh Krishna <ganesh.krishna@microchip.com>
|
||||||
M: Chris Park <chris.park@atmel.com>
|
|
||||||
M: Tony Cho <tony.cho@atmel.com>
|
|
||||||
M: Glen Lee <glen.lee@atmel.com>
|
|
||||||
M: Leo Kim <leo.kim@atmel.com>
|
|
||||||
L: linux-wireless@vger.kernel.org
|
L: linux-wireless@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
F: drivers/staging/wilc1000/
|
F: drivers/staging/wilc1000/
|
||||||
|
|||||||
2
Makefile
2
Makefile
@@ -1,7 +1,7 @@
|
|||||||
VERSION = 4
|
VERSION = 4
|
||||||
PATCHLEVEL = 8
|
PATCHLEVEL = 8
|
||||||
SUBLEVEL = 0
|
SUBLEVEL = 0
|
||||||
EXTRAVERSION = -rc3
|
EXTRAVERSION = -rc6
|
||||||
NAME = Psychotic Stoned Sheep
|
NAME = Psychotic Stoned Sheep
|
||||||
|
|
||||||
# *DOCUMENTATION*
|
# *DOCUMENTATION*
|
||||||
|
|||||||
11
arch/Kconfig
11
arch/Kconfig
@@ -336,17 +336,6 @@ config HAVE_ARCH_SECCOMP_FILTER
|
|||||||
results in the system call being skipped immediately.
|
results in the system call being skipped immediately.
|
||||||
- seccomp syscall wired up
|
- seccomp syscall wired up
|
||||||
|
|
||||||
For best performance, an arch should use seccomp_phase1 and
|
|
||||||
seccomp_phase2 directly. It should call seccomp_phase1 for all
|
|
||||||
syscalls if TIF_SECCOMP is set, but seccomp_phase1 does not
|
|
||||||
need to be called from a ptrace-safe context. It must then
|
|
||||||
call seccomp_phase2 if seccomp_phase1 returns anything other
|
|
||||||
than SECCOMP_PHASE1_OK or SECCOMP_PHASE1_SKIP.
|
|
||||||
|
|
||||||
As an additional optimization, an arch may provide seccomp_data
|
|
||||||
directly to seccomp_phase1; this avoids multiple calls
|
|
||||||
to the syscall_xyz helpers for every syscall.
|
|
||||||
|
|
||||||
config SECCOMP_FILTER
|
config SECCOMP_FILTER
|
||||||
def_bool y
|
def_bool y
|
||||||
depends on HAVE_ARCH_SECCOMP_FILTER && SECCOMP && NET
|
depends on HAVE_ARCH_SECCOMP_FILTER && SECCOMP && NET
|
||||||
|
|||||||
@@ -371,14 +371,6 @@ __copy_tofrom_user_nocheck(void *to, const void *from, long len)
|
|||||||
return __cu_len;
|
return __cu_len;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern inline long
|
|
||||||
__copy_tofrom_user(void *to, const void *from, long len, const void __user *validate)
|
|
||||||
{
|
|
||||||
if (__access_ok((unsigned long)validate, len, get_fs()))
|
|
||||||
len = __copy_tofrom_user_nocheck(to, from, len);
|
|
||||||
return len;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define __copy_to_user(to, from, n) \
|
#define __copy_to_user(to, from, n) \
|
||||||
({ \
|
({ \
|
||||||
__chk_user_ptr(to); \
|
__chk_user_ptr(to); \
|
||||||
@@ -393,17 +385,22 @@ __copy_tofrom_user(void *to, const void *from, long len, const void __user *vali
|
|||||||
#define __copy_to_user_inatomic __copy_to_user
|
#define __copy_to_user_inatomic __copy_to_user
|
||||||
#define __copy_from_user_inatomic __copy_from_user
|
#define __copy_from_user_inatomic __copy_from_user
|
||||||
|
|
||||||
|
|
||||||
extern inline long
|
extern inline long
|
||||||
copy_to_user(void __user *to, const void *from, long n)
|
copy_to_user(void __user *to, const void *from, long n)
|
||||||
{
|
{
|
||||||
return __copy_tofrom_user((__force void *)to, from, n, to);
|
if (likely(__access_ok((unsigned long)to, n, get_fs())))
|
||||||
|
n = __copy_tofrom_user_nocheck((__force void *)to, from, n);
|
||||||
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern inline long
|
extern inline long
|
||||||
copy_from_user(void *to, const void __user *from, long n)
|
copy_from_user(void *to, const void __user *from, long n)
|
||||||
{
|
{
|
||||||
return __copy_tofrom_user(to, (__force void *)from, n, from);
|
if (likely(__access_ok((unsigned long)from, n, get_fs())))
|
||||||
|
n = __copy_tofrom_user_nocheck(to, (__force void *)from, n);
|
||||||
|
else
|
||||||
|
memset(to, 0, n);
|
||||||
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern void __do_clear_user(void);
|
extern void __do_clear_user(void);
|
||||||
|
|||||||
@@ -142,7 +142,7 @@
|
|||||||
|
|
||||||
#ifdef CONFIG_ARC_CURR_IN_REG
|
#ifdef CONFIG_ARC_CURR_IN_REG
|
||||||
; Retrieve orig r25 and save it with rest of callee_regs
|
; Retrieve orig r25 and save it with rest of callee_regs
|
||||||
ld.as r12, [r12, PT_user_r25]
|
ld r12, [r12, PT_user_r25]
|
||||||
PUSH r12
|
PUSH r12
|
||||||
#else
|
#else
|
||||||
PUSH r25
|
PUSH r25
|
||||||
@@ -198,7 +198,7 @@
|
|||||||
|
|
||||||
; SP is back to start of pt_regs
|
; SP is back to start of pt_regs
|
||||||
#ifdef CONFIG_ARC_CURR_IN_REG
|
#ifdef CONFIG_ARC_CURR_IN_REG
|
||||||
st.as r12, [sp, PT_user_r25]
|
st r12, [sp, PT_user_r25]
|
||||||
#endif
|
#endif
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
|
|||||||
@@ -188,10 +188,10 @@ static inline int arch_irqs_disabled(void)
|
|||||||
.endm
|
.endm
|
||||||
|
|
||||||
.macro IRQ_ENABLE scratch
|
.macro IRQ_ENABLE scratch
|
||||||
|
TRACE_ASM_IRQ_ENABLE
|
||||||
lr \scratch, [status32]
|
lr \scratch, [status32]
|
||||||
or \scratch, \scratch, (STATUS_E1_MASK | STATUS_E2_MASK)
|
or \scratch, \scratch, (STATUS_E1_MASK | STATUS_E2_MASK)
|
||||||
flag \scratch
|
flag \scratch
|
||||||
TRACE_ASM_IRQ_ENABLE
|
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
#endif /* __ASSEMBLY__ */
|
#endif /* __ASSEMBLY__ */
|
||||||
|
|||||||
@@ -280,7 +280,7 @@ static inline void pmd_set(pmd_t *pmdp, pte_t *ptep)
|
|||||||
|
|
||||||
#define pte_page(pte) pfn_to_page(pte_pfn(pte))
|
#define pte_page(pte) pfn_to_page(pte_pfn(pte))
|
||||||
#define mk_pte(page, prot) pfn_pte(page_to_pfn(page), prot)
|
#define mk_pte(page, prot) pfn_pte(page_to_pfn(page), prot)
|
||||||
#define pfn_pte(pfn, prot) (__pte(((pte_t)(pfn) << PAGE_SHIFT) | pgprot_val(prot)))
|
#define pfn_pte(pfn, prot) __pte(((pfn) << PAGE_SHIFT) | pgprot_val(prot))
|
||||||
|
|
||||||
/* Don't use virt_to_pfn for macros below: could cause truncations for PAE40*/
|
/* Don't use virt_to_pfn for macros below: could cause truncations for PAE40*/
|
||||||
#define pte_pfn(pte) (pte_val(pte) >> PAGE_SHIFT)
|
#define pte_pfn(pte) (pte_val(pte) >> PAGE_SHIFT)
|
||||||
|
|||||||
@@ -83,7 +83,10 @@
|
|||||||
"2: ;nop\n" \
|
"2: ;nop\n" \
|
||||||
" .section .fixup, \"ax\"\n" \
|
" .section .fixup, \"ax\"\n" \
|
||||||
" .align 4\n" \
|
" .align 4\n" \
|
||||||
"3: mov %0, %3\n" \
|
"3: # return -EFAULT\n" \
|
||||||
|
" mov %0, %3\n" \
|
||||||
|
" # zero out dst ptr\n" \
|
||||||
|
" mov %1, 0\n" \
|
||||||
" j 2b\n" \
|
" j 2b\n" \
|
||||||
" .previous\n" \
|
" .previous\n" \
|
||||||
" .section __ex_table, \"a\"\n" \
|
" .section __ex_table, \"a\"\n" \
|
||||||
@@ -101,7 +104,11 @@
|
|||||||
"2: ;nop\n" \
|
"2: ;nop\n" \
|
||||||
" .section .fixup, \"ax\"\n" \
|
" .section .fixup, \"ax\"\n" \
|
||||||
" .align 4\n" \
|
" .align 4\n" \
|
||||||
"3: mov %0, %3\n" \
|
"3: # return -EFAULT\n" \
|
||||||
|
" mov %0, %3\n" \
|
||||||
|
" # zero out dst ptr\n" \
|
||||||
|
" mov %1, 0\n" \
|
||||||
|
" mov %R1, 0\n" \
|
||||||
" j 2b\n" \
|
" j 2b\n" \
|
||||||
" .previous\n" \
|
" .previous\n" \
|
||||||
" .section __ex_table, \"a\"\n" \
|
" .section __ex_table, \"a\"\n" \
|
||||||
|
|||||||
@@ -13,8 +13,15 @@
|
|||||||
|
|
||||||
/* Machine specific ELF Hdr flags */
|
/* Machine specific ELF Hdr flags */
|
||||||
#define EF_ARC_OSABI_MSK 0x00000f00
|
#define EF_ARC_OSABI_MSK 0x00000f00
|
||||||
#define EF_ARC_OSABI_ORIG 0x00000000 /* MUST be zero for back-compat */
|
|
||||||
#define EF_ARC_OSABI_CURRENT 0x00000300 /* v3 (no legacy syscalls) */
|
#define EF_ARC_OSABI_V3 0x00000300 /* v3 (no legacy syscalls) */
|
||||||
|
#define EF_ARC_OSABI_V4 0x00000400 /* v4 (64bit data any reg align) */
|
||||||
|
|
||||||
|
#if __GNUC__ < 6
|
||||||
|
#define EF_ARC_OSABI_CURRENT EF_ARC_OSABI_V3
|
||||||
|
#else
|
||||||
|
#define EF_ARC_OSABI_CURRENT EF_ARC_OSABI_V4
|
||||||
|
#endif
|
||||||
|
|
||||||
typedef unsigned long elf_greg_t;
|
typedef unsigned long elf_greg_t;
|
||||||
typedef unsigned long elf_fpregset_t;
|
typedef unsigned long elf_fpregset_t;
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ extern void __muldf3(void);
|
|||||||
extern void __divdf3(void);
|
extern void __divdf3(void);
|
||||||
extern void __floatunsidf(void);
|
extern void __floatunsidf(void);
|
||||||
extern void __floatunsisf(void);
|
extern void __floatunsisf(void);
|
||||||
|
extern void __udivdi3(void);
|
||||||
|
|
||||||
EXPORT_SYMBOL(__ashldi3);
|
EXPORT_SYMBOL(__ashldi3);
|
||||||
EXPORT_SYMBOL(__ashrdi3);
|
EXPORT_SYMBOL(__ashrdi3);
|
||||||
@@ -45,6 +46,7 @@ EXPORT_SYMBOL(__muldf3);
|
|||||||
EXPORT_SYMBOL(__divdf3);
|
EXPORT_SYMBOL(__divdf3);
|
||||||
EXPORT_SYMBOL(__floatunsidf);
|
EXPORT_SYMBOL(__floatunsidf);
|
||||||
EXPORT_SYMBOL(__floatunsisf);
|
EXPORT_SYMBOL(__floatunsisf);
|
||||||
|
EXPORT_SYMBOL(__udivdi3);
|
||||||
|
|
||||||
/* ARC optimised assembler routines */
|
/* ARC optimised assembler routines */
|
||||||
EXPORT_SYMBOL(memset);
|
EXPORT_SYMBOL(memset);
|
||||||
|
|||||||
@@ -199,7 +199,7 @@ int elf_check_arch(const struct elf32_hdr *x)
|
|||||||
}
|
}
|
||||||
|
|
||||||
eflags = x->e_flags;
|
eflags = x->e_flags;
|
||||||
if ((eflags & EF_ARC_OSABI_MSK) < EF_ARC_OSABI_CURRENT) {
|
if ((eflags & EF_ARC_OSABI_MSK) != EF_ARC_OSABI_CURRENT) {
|
||||||
pr_err("ABI mismatch - you need newer toolchain\n");
|
pr_err("ABI mismatch - you need newer toolchain\n");
|
||||||
force_sigsegv(SIGSEGV, current);
|
force_sigsegv(SIGSEGV, current);
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -291,8 +291,10 @@ static char *arc_extn_mumbojumbo(int cpu_id, char *buf, int len)
|
|||||||
cpu->dccm.base_addr, TO_KB(cpu->dccm.sz),
|
cpu->dccm.base_addr, TO_KB(cpu->dccm.sz),
|
||||||
cpu->iccm.base_addr, TO_KB(cpu->iccm.sz));
|
cpu->iccm.base_addr, TO_KB(cpu->iccm.sz));
|
||||||
|
|
||||||
n += scnprintf(buf + n, len - n,
|
n += scnprintf(buf + n, len - n, "OS ABI [v%d]\t: %s\n",
|
||||||
"OS ABI [v3]\t: no-legacy-syscalls\n");
|
EF_ARC_OSABI_CURRENT >> 8,
|
||||||
|
EF_ARC_OSABI_CURRENT == EF_ARC_OSABI_V3 ?
|
||||||
|
"no-legacy-syscalls" : "64-bit data any register aligned");
|
||||||
|
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -921,6 +921,15 @@ void arc_cache_init(void)
|
|||||||
|
|
||||||
printk(arc_cache_mumbojumbo(0, str, sizeof(str)));
|
printk(arc_cache_mumbojumbo(0, str, sizeof(str)));
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Only master CPU needs to execute rest of function:
|
||||||
|
* - Assume SMP so all cores will have same cache config so
|
||||||
|
* any geomtry checks will be same for all
|
||||||
|
* - IOC setup / dma callbacks only need to be setup once
|
||||||
|
*/
|
||||||
|
if (cpu)
|
||||||
|
return;
|
||||||
|
|
||||||
if (IS_ENABLED(CONFIG_ARC_HAS_ICACHE)) {
|
if (IS_ENABLED(CONFIG_ARC_HAS_ICACHE)) {
|
||||||
struct cpuinfo_arc_cache *ic = &cpuinfo_arc700[cpu].icache;
|
struct cpuinfo_arc_cache *ic = &cpuinfo_arc700[cpu].icache;
|
||||||
|
|
||||||
|
|||||||
@@ -61,6 +61,7 @@ void *kmap(struct page *page)
|
|||||||
|
|
||||||
return kmap_high(page);
|
return kmap_high(page);
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL(kmap);
|
||||||
|
|
||||||
void *kmap_atomic(struct page *page)
|
void *kmap_atomic(struct page *page)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -226,7 +226,7 @@
|
|||||||
|
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
elm_id = <&elm>;
|
ti,elm-id = <&elm>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -161,7 +161,7 @@
|
|||||||
|
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
elm_id = <&elm>;
|
ti,elm-id = <&elm>;
|
||||||
|
|
||||||
/* MTD partition table */
|
/* MTD partition table */
|
||||||
partition@0 {
|
partition@0 {
|
||||||
|
|||||||
@@ -197,7 +197,7 @@
|
|||||||
gpmc,wr-access-ns = <30>;
|
gpmc,wr-access-ns = <30>;
|
||||||
gpmc,wr-data-mux-bus-ns = <0>;
|
gpmc,wr-data-mux-bus-ns = <0>;
|
||||||
|
|
||||||
elm_id = <&elm>;
|
ti,elm-id = <&elm>;
|
||||||
|
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
|
|||||||
@@ -390,12 +390,12 @@
|
|||||||
|
|
||||||
port@0 {
|
port@0 {
|
||||||
reg = <0>;
|
reg = <0>;
|
||||||
label = "lan1";
|
label = "lan5";
|
||||||
};
|
};
|
||||||
|
|
||||||
port@1 {
|
port@1 {
|
||||||
reg = <1>;
|
reg = <1>;
|
||||||
label = "lan2";
|
label = "lan4";
|
||||||
};
|
};
|
||||||
|
|
||||||
port@2 {
|
port@2 {
|
||||||
@@ -405,12 +405,12 @@
|
|||||||
|
|
||||||
port@3 {
|
port@3 {
|
||||||
reg = <3>;
|
reg = <3>;
|
||||||
label = "lan4";
|
label = "lan2";
|
||||||
};
|
};
|
||||||
|
|
||||||
port@4 {
|
port@4 {
|
||||||
reg = <4>;
|
reg = <4>;
|
||||||
label = "lan5";
|
label = "lan1";
|
||||||
};
|
};
|
||||||
|
|
||||||
port@5 {
|
port@5 {
|
||||||
|
|||||||
@@ -447,14 +447,11 @@
|
|||||||
samsung,dw-mshc-ciu-div = <3>;
|
samsung,dw-mshc-ciu-div = <3>;
|
||||||
samsung,dw-mshc-sdr-timing = <0 4>;
|
samsung,dw-mshc-sdr-timing = <0 4>;
|
||||||
samsung,dw-mshc-ddr-timing = <0 2>;
|
samsung,dw-mshc-ddr-timing = <0 2>;
|
||||||
samsung,dw-mshc-hs400-timing = <0 2>;
|
|
||||||
samsung,read-strobe-delay = <90>;
|
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
pinctrl-0 = <&sd0_clk &sd0_cmd &sd0_bus1 &sd0_bus4 &sd0_bus8 &sd0_cd>;
|
pinctrl-0 = <&sd0_clk &sd0_cmd &sd0_bus1 &sd0_bus4 &sd0_bus8 &sd0_cd>;
|
||||||
bus-width = <8>;
|
bus-width = <8>;
|
||||||
cap-mmc-highspeed;
|
cap-mmc-highspeed;
|
||||||
mmc-hs200-1_8v;
|
mmc-hs200-1_8v;
|
||||||
mmc-hs400-1_8v;
|
|
||||||
vmmc-supply = <&ldo20_reg>;
|
vmmc-supply = <&ldo20_reg>;
|
||||||
vqmmc-supply = <&ldo11_reg>;
|
vqmmc-supply = <&ldo11_reg>;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -243,7 +243,7 @@
|
|||||||
clocks = <&clks IMX6QDL_CLK_SPDIF_GCLK>, <&clks IMX6QDL_CLK_OSC>,
|
clocks = <&clks IMX6QDL_CLK_SPDIF_GCLK>, <&clks IMX6QDL_CLK_OSC>,
|
||||||
<&clks IMX6QDL_CLK_SPDIF>, <&clks IMX6QDL_CLK_ASRC>,
|
<&clks IMX6QDL_CLK_SPDIF>, <&clks IMX6QDL_CLK_ASRC>,
|
||||||
<&clks IMX6QDL_CLK_DUMMY>, <&clks IMX6QDL_CLK_ESAI_EXTAL>,
|
<&clks IMX6QDL_CLK_DUMMY>, <&clks IMX6QDL_CLK_ESAI_EXTAL>,
|
||||||
<&clks IMX6QDL_CLK_IPG>, <&clks IMX6QDL_CLK_MLB>,
|
<&clks IMX6QDL_CLK_IPG>, <&clks IMX6QDL_CLK_DUMMY>,
|
||||||
<&clks IMX6QDL_CLK_DUMMY>, <&clks IMX6QDL_CLK_SPBA>;
|
<&clks IMX6QDL_CLK_DUMMY>, <&clks IMX6QDL_CLK_SPBA>;
|
||||||
clock-names = "core", "rxtx0",
|
clock-names = "core", "rxtx0",
|
||||||
"rxtx1", "rxtx2",
|
"rxtx1", "rxtx2",
|
||||||
|
|||||||
@@ -64,7 +64,7 @@
|
|||||||
cd-gpios = <&gpio7 11 GPIO_ACTIVE_LOW>;
|
cd-gpios = <&gpio7 11 GPIO_ACTIVE_LOW>;
|
||||||
no-1-8-v;
|
no-1-8-v;
|
||||||
keep-power-in-suspend;
|
keep-power-in-suspend;
|
||||||
enable-sdio-wakup;
|
wakeup-source;
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -131,7 +131,7 @@
|
|||||||
ti,y-min = /bits/ 16 <0>;
|
ti,y-min = /bits/ 16 <0>;
|
||||||
ti,y-max = /bits/ 16 <0>;
|
ti,y-max = /bits/ 16 <0>;
|
||||||
ti,pressure-max = /bits/ 16 <0>;
|
ti,pressure-max = /bits/ 16 <0>;
|
||||||
ti,x-plat-ohms = /bits/ 16 <400>;
|
ti,x-plate-ohms = /bits/ 16 <400>;
|
||||||
wakeup-source;
|
wakeup-source;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -113,7 +113,7 @@
|
|||||||
|
|
||||||
partition@e0000 {
|
partition@e0000 {
|
||||||
label = "u-boot environment";
|
label = "u-boot environment";
|
||||||
reg = <0xe0000 0x100000>;
|
reg = <0xe0000 0x20000>;
|
||||||
};
|
};
|
||||||
|
|
||||||
partition@100000 {
|
partition@100000 {
|
||||||
|
|||||||
@@ -116,6 +116,10 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
&pciec {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
&pcie0 {
|
&pcie0 {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -35,10 +35,15 @@
|
|||||||
ranges = <0 0 0x00000000 0x1000000>; /* CS0: 16MB for NAND */
|
ranges = <0 0 0x00000000 0x1000000>; /* CS0: 16MB for NAND */
|
||||||
|
|
||||||
nand@0,0 {
|
nand@0,0 {
|
||||||
linux,mtd-name = "micron,mt29f4g16abbda3w";
|
compatible = "ti,omap2-nand";
|
||||||
reg = <0 0 4>; /* CS0, offset 0, IO size 4 */
|
reg = <0 0 4>; /* CS0, offset 0, IO size 4 */
|
||||||
|
interrupt-parent = <&gpmc>;
|
||||||
|
interrupts = <0 IRQ_TYPE_NONE>, /* fifoevent */
|
||||||
|
<1 IRQ_TYPE_NONE>; /* termcount */
|
||||||
|
linux,mtd-name = "micron,mt29f4g16abbda3w";
|
||||||
nand-bus-width = <16>;
|
nand-bus-width = <16>;
|
||||||
ti,nand-ecc-opt = "bch8";
|
ti,nand-ecc-opt = "bch8";
|
||||||
|
rb-gpios = <&gpmc 0 GPIO_ACTIVE_HIGH>; /* gpmc_wait0 */
|
||||||
gpmc,sync-clk-ps = <0>;
|
gpmc,sync-clk-ps = <0>;
|
||||||
gpmc,cs-on-ns = <0>;
|
gpmc,cs-on-ns = <0>;
|
||||||
gpmc,cs-rd-off-ns = <44>;
|
gpmc,cs-rd-off-ns = <44>;
|
||||||
@@ -54,10 +59,6 @@
|
|||||||
gpmc,wr-access-ns = <40>;
|
gpmc,wr-access-ns = <40>;
|
||||||
gpmc,wr-data-mux-bus-ns = <0>;
|
gpmc,wr-data-mux-bus-ns = <0>;
|
||||||
gpmc,device-width = <2>;
|
gpmc,device-width = <2>;
|
||||||
|
|
||||||
gpmc,page-burst-access-ns = <5>;
|
|
||||||
gpmc,cycle2cycle-delay-ns = <50>;
|
|
||||||
|
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
|
|
||||||
|
|||||||
@@ -46,6 +46,7 @@
|
|||||||
linux,mtd-name = "micron,mt29f4g16abbda3w";
|
linux,mtd-name = "micron,mt29f4g16abbda3w";
|
||||||
nand-bus-width = <16>;
|
nand-bus-width = <16>;
|
||||||
ti,nand-ecc-opt = "bch8";
|
ti,nand-ecc-opt = "bch8";
|
||||||
|
rb-gpios = <&gpmc 0 GPIO_ACTIVE_HIGH>; /* gpmc_wait0 */
|
||||||
gpmc,sync-clk-ps = <0>;
|
gpmc,sync-clk-ps = <0>;
|
||||||
gpmc,cs-on-ns = <0>;
|
gpmc,cs-on-ns = <0>;
|
||||||
gpmc,cs-rd-off-ns = <44>;
|
gpmc,cs-rd-off-ns = <44>;
|
||||||
|
|||||||
@@ -223,7 +223,9 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
&gpmc {
|
&gpmc {
|
||||||
ranges = <0 0 0x00000000 0x20000000>;
|
ranges = <0 0 0x30000000 0x1000000>, /* CS0 */
|
||||||
|
<4 0 0x2b000000 0x1000000>, /* CS4 */
|
||||||
|
<5 0 0x2c000000 0x1000000>; /* CS5 */
|
||||||
|
|
||||||
nand@0,0 {
|
nand@0,0 {
|
||||||
compatible = "ti,omap2-nand";
|
compatible = "ti,omap2-nand";
|
||||||
|
|||||||
@@ -55,8 +55,6 @@
|
|||||||
#include "omap-gpmc-smsc9221.dtsi"
|
#include "omap-gpmc-smsc9221.dtsi"
|
||||||
|
|
||||||
&gpmc {
|
&gpmc {
|
||||||
ranges = <5 0 0x2c000000 0x1000000>; /* CS5 */
|
|
||||||
|
|
||||||
ethernet@gpmc {
|
ethernet@gpmc {
|
||||||
reg = <5 0 0xff>;
|
reg = <5 0 0xff>;
|
||||||
interrupt-parent = <&gpio6>;
|
interrupt-parent = <&gpio6>;
|
||||||
|
|||||||
@@ -27,8 +27,6 @@
|
|||||||
#include "omap-gpmc-smsc9221.dtsi"
|
#include "omap-gpmc-smsc9221.dtsi"
|
||||||
|
|
||||||
&gpmc {
|
&gpmc {
|
||||||
ranges = <5 0 0x2c000000 0x1000000>; /* CS5 */
|
|
||||||
|
|
||||||
ethernet@gpmc {
|
ethernet@gpmc {
|
||||||
reg = <5 0 0xff>;
|
reg = <5 0 0xff>;
|
||||||
interrupt-parent = <&gpio6>;
|
interrupt-parent = <&gpio6>;
|
||||||
|
|||||||
@@ -15,9 +15,6 @@
|
|||||||
#include "omap-gpmc-smsc9221.dtsi"
|
#include "omap-gpmc-smsc9221.dtsi"
|
||||||
|
|
||||||
&gpmc {
|
&gpmc {
|
||||||
ranges = <4 0 0x2b000000 0x1000000>, /* CS4 */
|
|
||||||
<5 0 0x2c000000 0x1000000>; /* CS5 */
|
|
||||||
|
|
||||||
smsc1: ethernet@gpmc {
|
smsc1: ethernet@gpmc {
|
||||||
reg = <5 0 0xff>;
|
reg = <5 0 0xff>;
|
||||||
interrupt-parent = <&gpio6>;
|
interrupt-parent = <&gpio6>;
|
||||||
|
|||||||
@@ -197,6 +197,8 @@
|
|||||||
clock-names = "saradc", "apb_pclk";
|
clock-names = "saradc", "apb_pclk";
|
||||||
interrupts = <GIC_SPI 21 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 21 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
#io-channel-cells = <1>;
|
#io-channel-cells = <1>;
|
||||||
|
resets = <&cru SRST_SARADC>;
|
||||||
|
reset-names = "saradc-apb";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -279,6 +279,8 @@
|
|||||||
#io-channel-cells = <1>;
|
#io-channel-cells = <1>;
|
||||||
clocks = <&cru SCLK_SARADC>, <&cru PCLK_SARADC>;
|
clocks = <&cru SCLK_SARADC>, <&cru PCLK_SARADC>;
|
||||||
clock-names = "saradc", "apb_pclk";
|
clock-names = "saradc", "apb_pclk";
|
||||||
|
resets = <&cru SRST_SARADC>;
|
||||||
|
reset-names = "saradc-apb";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -399,6 +399,8 @@
|
|||||||
#io-channel-cells = <1>;
|
#io-channel-cells = <1>;
|
||||||
clocks = <&cru SCLK_SARADC>, <&cru PCLK_SARADC>;
|
clocks = <&cru SCLK_SARADC>, <&cru PCLK_SARADC>;
|
||||||
clock-names = "saradc", "apb_pclk";
|
clock-names = "saradc", "apb_pclk";
|
||||||
|
resets = <&cru SRST_SARADC>;
|
||||||
|
reset-names = "saradc-apb";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -84,7 +84,7 @@
|
|||||||
trips {
|
trips {
|
||||||
cpu_alert0: cpu_alert0 {
|
cpu_alert0: cpu_alert0 {
|
||||||
/* milliCelsius */
|
/* milliCelsius */
|
||||||
temperature = <850000>;
|
temperature = <85000>;
|
||||||
hysteresis = <2000>;
|
hysteresis = <2000>;
|
||||||
type = "passive";
|
type = "passive";
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -897,7 +897,7 @@
|
|||||||
palmas: tps65913@58 {
|
palmas: tps65913@58 {
|
||||||
compatible = "ti,palmas";
|
compatible = "ti,palmas";
|
||||||
reg = <0x58>;
|
reg = <0x58>;
|
||||||
interrupts = <0 86 IRQ_TYPE_LEVEL_LOW>;
|
interrupts = <0 86 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
|
||||||
#interrupt-cells = <2>;
|
#interrupt-cells = <2>;
|
||||||
interrupt-controller;
|
interrupt-controller;
|
||||||
|
|||||||
@@ -802,7 +802,7 @@
|
|||||||
palmas: pmic@58 {
|
palmas: pmic@58 {
|
||||||
compatible = "ti,palmas";
|
compatible = "ti,palmas";
|
||||||
reg = <0x58>;
|
reg = <0x58>;
|
||||||
interrupts = <GIC_SPI 86 IRQ_TYPE_LEVEL_LOW>;
|
interrupts = <GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
|
||||||
#interrupt-cells = <2>;
|
#interrupt-cells = <2>;
|
||||||
interrupt-controller;
|
interrupt-controller;
|
||||||
|
|||||||
@@ -63,7 +63,7 @@
|
|||||||
palmas: pmic@58 {
|
palmas: pmic@58 {
|
||||||
compatible = "ti,palmas";
|
compatible = "ti,palmas";
|
||||||
reg = <0x58>;
|
reg = <0x58>;
|
||||||
interrupts = <GIC_SPI 86 IRQ_TYPE_LEVEL_LOW>;
|
interrupts = <GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
|
||||||
#interrupt-cells = <2>;
|
#interrupt-cells = <2>;
|
||||||
interrupt-controller;
|
interrupt-controller;
|
||||||
|
|||||||
@@ -1382,7 +1382,7 @@
|
|||||||
* Pin 41: BR_UART1_TXD
|
* Pin 41: BR_UART1_TXD
|
||||||
* Pin 44: BR_UART1_RXD
|
* Pin 44: BR_UART1_RXD
|
||||||
*/
|
*/
|
||||||
serial@0,70006000 {
|
serial@70006000 {
|
||||||
compatible = "nvidia,tegra124-hsuart", "nvidia,tegra30-hsuart";
|
compatible = "nvidia,tegra124-hsuart", "nvidia,tegra30-hsuart";
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
@@ -1394,7 +1394,7 @@
|
|||||||
* Pin 71: UART2_CTS_L
|
* Pin 71: UART2_CTS_L
|
||||||
* Pin 74: UART2_RTS_L
|
* Pin 74: UART2_RTS_L
|
||||||
*/
|
*/
|
||||||
serial@0,70006040 {
|
serial@70006040 {
|
||||||
compatible = "nvidia,tegra124-hsuart", "nvidia,tegra30-hsuart";
|
compatible = "nvidia,tegra124-hsuart", "nvidia,tegra30-hsuart";
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -142,6 +142,19 @@ ARM_BE8(orr r7, r7, #(1 << 25)) @ HSCTLR.EE
|
|||||||
and r7, #0x1f @ Preserve HPMN
|
and r7, #0x1f @ Preserve HPMN
|
||||||
mcr p15, 4, r7, c1, c1, 1 @ HDCR
|
mcr p15, 4, r7, c1, c1, 1 @ HDCR
|
||||||
|
|
||||||
|
@ Make sure NS-SVC is initialised appropriately
|
||||||
|
mrc p15, 0, r7, c1, c0, 0 @ SCTLR
|
||||||
|
orr r7, #(1 << 5) @ CP15 barriers enabled
|
||||||
|
bic r7, #(3 << 7) @ Clear SED/ITD for v8 (RES0 for v7)
|
||||||
|
bic r7, #(3 << 19) @ WXN and UWXN disabled
|
||||||
|
mcr p15, 0, r7, c1, c0, 0 @ SCTLR
|
||||||
|
|
||||||
|
mrc p15, 0, r7, c0, c0, 0 @ MIDR
|
||||||
|
mcr p15, 4, r7, c0, c0, 0 @ VPIDR
|
||||||
|
|
||||||
|
mrc p15, 0, r7, c0, c0, 5 @ MPIDR
|
||||||
|
mcr p15, 4, r7, c0, c0, 5 @ VMPIDR
|
||||||
|
|
||||||
#if !defined(ZIMAGE) && defined(CONFIG_ARM_ARCH_TIMER)
|
#if !defined(ZIMAGE) && defined(CONFIG_ARM_ARCH_TIMER)
|
||||||
@ make CNTP_* and CNTPCT accessible from PL1
|
@ make CNTP_* and CNTPCT accessible from PL1
|
||||||
mrc p15, 0, r7, c0, c1, 1 @ ID_PFR1
|
mrc p15, 0, r7, c0, c1, 1 @ ID_PFR1
|
||||||
|
|||||||
@@ -158,8 +158,6 @@ void kvm_arch_destroy_vm(struct kvm *kvm)
|
|||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
kvm_free_stage2_pgd(kvm);
|
|
||||||
|
|
||||||
for (i = 0; i < KVM_MAX_VCPUS; ++i) {
|
for (i = 0; i < KVM_MAX_VCPUS; ++i) {
|
||||||
if (kvm->vcpus[i]) {
|
if (kvm->vcpus[i]) {
|
||||||
kvm_arch_vcpu_free(kvm->vcpus[i]);
|
kvm_arch_vcpu_free(kvm->vcpus[i]);
|
||||||
|
|||||||
@@ -1309,7 +1309,7 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa,
|
|||||||
smp_rmb();
|
smp_rmb();
|
||||||
|
|
||||||
pfn = gfn_to_pfn_prot(kvm, gfn, write_fault, &writable);
|
pfn = gfn_to_pfn_prot(kvm, gfn, write_fault, &writable);
|
||||||
if (is_error_pfn(pfn))
|
if (is_error_noslot_pfn(pfn))
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
|
|
||||||
if (kvm_is_device_pfn(pfn)) {
|
if (kvm_is_device_pfn(pfn)) {
|
||||||
@@ -1714,7 +1714,8 @@ int kvm_mmu_init(void)
|
|||||||
kern_hyp_va(PAGE_OFFSET), kern_hyp_va(~0UL));
|
kern_hyp_va(PAGE_OFFSET), kern_hyp_va(~0UL));
|
||||||
|
|
||||||
if (hyp_idmap_start >= kern_hyp_va(PAGE_OFFSET) &&
|
if (hyp_idmap_start >= kern_hyp_va(PAGE_OFFSET) &&
|
||||||
hyp_idmap_start < kern_hyp_va(~0UL)) {
|
hyp_idmap_start < kern_hyp_va(~0UL) &&
|
||||||
|
hyp_idmap_start != (unsigned long)__hyp_idmap_text_start) {
|
||||||
/*
|
/*
|
||||||
* The idmap page is intersecting with the VA space,
|
* The idmap page is intersecting with the VA space,
|
||||||
* it is not safe to continue further.
|
* it is not safe to continue further.
|
||||||
@@ -1893,6 +1894,7 @@ void kvm_arch_memslots_updated(struct kvm *kvm, struct kvm_memslots *slots)
|
|||||||
|
|
||||||
void kvm_arch_flush_shadow_all(struct kvm *kvm)
|
void kvm_arch_flush_shadow_all(struct kvm *kvm)
|
||||||
{
|
{
|
||||||
|
kvm_free_stage2_pgd(kvm);
|
||||||
}
|
}
|
||||||
|
|
||||||
void kvm_arch_flush_shadow_memslot(struct kvm *kvm,
|
void kvm_arch_flush_shadow_memslot(struct kvm *kvm,
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ static void __init imx6ul_init_machine(void)
|
|||||||
if (parent == NULL)
|
if (parent == NULL)
|
||||||
pr_warn("failed to initialize soc device\n");
|
pr_warn("failed to initialize soc device\n");
|
||||||
|
|
||||||
|
of_platform_default_populate(NULL, NULL, parent);
|
||||||
imx6ul_enet_init();
|
imx6ul_enet_init();
|
||||||
imx_anatop_init();
|
imx_anatop_init();
|
||||||
imx6ul_pm_init();
|
imx6ul_pm_init();
|
||||||
|
|||||||
@@ -295,7 +295,7 @@ int imx6_set_lpm(enum mxc_cpu_pwr_mode mode)
|
|||||||
val &= ~BM_CLPCR_SBYOS;
|
val &= ~BM_CLPCR_SBYOS;
|
||||||
if (cpu_is_imx6sl())
|
if (cpu_is_imx6sl())
|
||||||
val |= BM_CLPCR_BYPASS_PMIC_READY;
|
val |= BM_CLPCR_BYPASS_PMIC_READY;
|
||||||
if (cpu_is_imx6sl() || cpu_is_imx6sx())
|
if (cpu_is_imx6sl() || cpu_is_imx6sx() || cpu_is_imx6ul())
|
||||||
val |= BM_CLPCR_BYP_MMDC_CH0_LPM_HS;
|
val |= BM_CLPCR_BYP_MMDC_CH0_LPM_HS;
|
||||||
else
|
else
|
||||||
val |= BM_CLPCR_BYP_MMDC_CH1_LPM_HS;
|
val |= BM_CLPCR_BYP_MMDC_CH1_LPM_HS;
|
||||||
@@ -310,7 +310,7 @@ int imx6_set_lpm(enum mxc_cpu_pwr_mode mode)
|
|||||||
val |= 0x3 << BP_CLPCR_STBY_COUNT;
|
val |= 0x3 << BP_CLPCR_STBY_COUNT;
|
||||||
val |= BM_CLPCR_VSTBY;
|
val |= BM_CLPCR_VSTBY;
|
||||||
val |= BM_CLPCR_SBYOS;
|
val |= BM_CLPCR_SBYOS;
|
||||||
if (cpu_is_imx6sl())
|
if (cpu_is_imx6sl() || cpu_is_imx6sx())
|
||||||
val |= BM_CLPCR_BYPASS_PMIC_READY;
|
val |= BM_CLPCR_BYPASS_PMIC_READY;
|
||||||
if (cpu_is_imx6sl() || cpu_is_imx6sx() || cpu_is_imx6ul())
|
if (cpu_is_imx6sl() || cpu_is_imx6sx() || cpu_is_imx6ul())
|
||||||
val |= BM_CLPCR_BYP_MMDC_CH0_LPM_HS;
|
val |= BM_CLPCR_BYP_MMDC_CH0_LPM_HS;
|
||||||
|
|||||||
@@ -220,9 +220,6 @@ static int am33xx_cm_wait_module_ready(u8 part, s16 inst, u16 clkctrl_offs,
|
|||||||
{
|
{
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
if (!clkctrl_offs)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
omap_test_timeout(_is_module_ready(inst, clkctrl_offs),
|
omap_test_timeout(_is_module_ready(inst, clkctrl_offs),
|
||||||
MAX_MODULE_READY_TIME, i);
|
MAX_MODULE_READY_TIME, i);
|
||||||
|
|
||||||
@@ -246,9 +243,6 @@ static int am33xx_cm_wait_module_idle(u8 part, s16 inst, u16 clkctrl_offs,
|
|||||||
{
|
{
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
if (!clkctrl_offs)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
omap_test_timeout((_clkctrl_idlest(inst, clkctrl_offs) ==
|
omap_test_timeout((_clkctrl_idlest(inst, clkctrl_offs) ==
|
||||||
CLKCTRL_IDLEST_DISABLED),
|
CLKCTRL_IDLEST_DISABLED),
|
||||||
MAX_MODULE_READY_TIME, i);
|
MAX_MODULE_READY_TIME, i);
|
||||||
|
|||||||
@@ -278,9 +278,6 @@ static int omap4_cminst_wait_module_ready(u8 part, s16 inst, u16 clkctrl_offs,
|
|||||||
{
|
{
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
if (!clkctrl_offs)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
omap_test_timeout(_is_module_ready(part, inst, clkctrl_offs),
|
omap_test_timeout(_is_module_ready(part, inst, clkctrl_offs),
|
||||||
MAX_MODULE_READY_TIME, i);
|
MAX_MODULE_READY_TIME, i);
|
||||||
|
|
||||||
@@ -304,9 +301,6 @@ static int omap4_cminst_wait_module_idle(u8 part, s16 inst, u16 clkctrl_offs,
|
|||||||
{
|
{
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
if (!clkctrl_offs)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
omap_test_timeout((_clkctrl_idlest(part, inst, clkctrl_offs) ==
|
omap_test_timeout((_clkctrl_idlest(part, inst, clkctrl_offs) ==
|
||||||
CLKCTRL_IDLEST_DISABLED),
|
CLKCTRL_IDLEST_DISABLED),
|
||||||
MAX_MODULE_DISABLE_TIME, i);
|
MAX_MODULE_DISABLE_TIME, i);
|
||||||
|
|||||||
@@ -1053,6 +1053,10 @@ static int _omap4_wait_target_disable(struct omap_hwmod *oh)
|
|||||||
if (oh->flags & HWMOD_NO_IDLEST)
|
if (oh->flags & HWMOD_NO_IDLEST)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
if (!oh->prcm.omap4.clkctrl_offs &&
|
||||||
|
!(oh->prcm.omap4.flags & HWMOD_OMAP4_ZERO_CLKCTRL_OFFSET))
|
||||||
|
return 0;
|
||||||
|
|
||||||
return omap_cm_wait_module_idle(oh->clkdm->prcm_partition,
|
return omap_cm_wait_module_idle(oh->clkdm->prcm_partition,
|
||||||
oh->clkdm->cm_inst,
|
oh->clkdm->cm_inst,
|
||||||
oh->prcm.omap4.clkctrl_offs, 0);
|
oh->prcm.omap4.clkctrl_offs, 0);
|
||||||
@@ -2971,6 +2975,10 @@ static int _omap4_wait_target_ready(struct omap_hwmod *oh)
|
|||||||
if (!_find_mpu_rt_port(oh))
|
if (!_find_mpu_rt_port(oh))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
if (!oh->prcm.omap4.clkctrl_offs &&
|
||||||
|
!(oh->prcm.omap4.flags & HWMOD_OMAP4_ZERO_CLKCTRL_OFFSET))
|
||||||
|
return 0;
|
||||||
|
|
||||||
/* XXX check module SIDLEMODE, hardreset status */
|
/* XXX check module SIDLEMODE, hardreset status */
|
||||||
|
|
||||||
return omap_cm_wait_module_ready(oh->clkdm->prcm_partition,
|
return omap_cm_wait_module_ready(oh->clkdm->prcm_partition,
|
||||||
|
|||||||
@@ -443,8 +443,12 @@ struct omap_hwmod_omap2_prcm {
|
|||||||
* HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT: Some IP blocks don't have a PRCM
|
* HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT: Some IP blocks don't have a PRCM
|
||||||
* module-level context loss register associated with them; this
|
* module-level context loss register associated with them; this
|
||||||
* flag bit should be set in those cases
|
* flag bit should be set in those cases
|
||||||
|
* HWMOD_OMAP4_ZERO_CLKCTRL_OFFSET: Some IP blocks have a valid CLKCTRL
|
||||||
|
* offset of zero; this flag bit should be set in those cases to
|
||||||
|
* distinguish from hwmods that have no clkctrl offset.
|
||||||
*/
|
*/
|
||||||
#define HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT (1 << 0)
|
#define HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT (1 << 0)
|
||||||
|
#define HWMOD_OMAP4_ZERO_CLKCTRL_OFFSET (1 << 1)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct omap_hwmod_omap4_prcm - OMAP4-specific PRCM data
|
* struct omap_hwmod_omap4_prcm - OMAP4-specific PRCM data
|
||||||
|
|||||||
@@ -29,6 +29,7 @@
|
|||||||
#define CLKCTRL(oh, clkctrl) ((oh).prcm.omap4.clkctrl_offs = (clkctrl))
|
#define CLKCTRL(oh, clkctrl) ((oh).prcm.omap4.clkctrl_offs = (clkctrl))
|
||||||
#define RSTCTRL(oh, rstctrl) ((oh).prcm.omap4.rstctrl_offs = (rstctrl))
|
#define RSTCTRL(oh, rstctrl) ((oh).prcm.omap4.rstctrl_offs = (rstctrl))
|
||||||
#define RSTST(oh, rstst) ((oh).prcm.omap4.rstst_offs = (rstst))
|
#define RSTST(oh, rstst) ((oh).prcm.omap4.rstst_offs = (rstst))
|
||||||
|
#define PRCM_FLAGS(oh, flag) ((oh).prcm.omap4.flags = (flag))
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 'l3' class
|
* 'l3' class
|
||||||
@@ -1296,6 +1297,7 @@ static void omap_hwmod_am33xx_clkctrl(void)
|
|||||||
CLKCTRL(am33xx_i2c1_hwmod, AM33XX_CM_WKUP_I2C0_CLKCTRL_OFFSET);
|
CLKCTRL(am33xx_i2c1_hwmod, AM33XX_CM_WKUP_I2C0_CLKCTRL_OFFSET);
|
||||||
CLKCTRL(am33xx_wd_timer1_hwmod, AM33XX_CM_WKUP_WDT1_CLKCTRL_OFFSET);
|
CLKCTRL(am33xx_wd_timer1_hwmod, AM33XX_CM_WKUP_WDT1_CLKCTRL_OFFSET);
|
||||||
CLKCTRL(am33xx_rtc_hwmod, AM33XX_CM_RTC_RTC_CLKCTRL_OFFSET);
|
CLKCTRL(am33xx_rtc_hwmod, AM33XX_CM_RTC_RTC_CLKCTRL_OFFSET);
|
||||||
|
PRCM_FLAGS(am33xx_rtc_hwmod, HWMOD_OMAP4_ZERO_CLKCTRL_OFFSET);
|
||||||
CLKCTRL(am33xx_mmc2_hwmod, AM33XX_CM_PER_MMC2_CLKCTRL_OFFSET);
|
CLKCTRL(am33xx_mmc2_hwmod, AM33XX_CM_PER_MMC2_CLKCTRL_OFFSET);
|
||||||
CLKCTRL(am33xx_gpmc_hwmod, AM33XX_CM_PER_GPMC_CLKCTRL_OFFSET);
|
CLKCTRL(am33xx_gpmc_hwmod, AM33XX_CM_PER_GPMC_CLKCTRL_OFFSET);
|
||||||
CLKCTRL(am33xx_l4_ls_hwmod, AM33XX_CM_PER_L4LS_CLKCTRL_OFFSET);
|
CLKCTRL(am33xx_l4_ls_hwmod, AM33XX_CM_PER_L4LS_CLKCTRL_OFFSET);
|
||||||
|
|||||||
@@ -722,8 +722,20 @@ static struct omap_hwmod omap3xxx_dss_dispc_hwmod = {
|
|||||||
* display serial interface controller
|
* display serial interface controller
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
static struct omap_hwmod_class_sysconfig omap3xxx_dsi_sysc = {
|
||||||
|
.rev_offs = 0x0000,
|
||||||
|
.sysc_offs = 0x0010,
|
||||||
|
.syss_offs = 0x0014,
|
||||||
|
.sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
|
||||||
|
SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
|
||||||
|
SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
|
||||||
|
.idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
|
||||||
|
.sysc_fields = &omap_hwmod_sysc_type1,
|
||||||
|
};
|
||||||
|
|
||||||
static struct omap_hwmod_class omap3xxx_dsi_hwmod_class = {
|
static struct omap_hwmod_class omap3xxx_dsi_hwmod_class = {
|
||||||
.name = "dsi",
|
.name = "dsi",
|
||||||
|
.sysc = &omap3xxx_dsi_sysc,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct omap_hwmod_irq_info omap3xxx_dsi1_irqs[] = {
|
static struct omap_hwmod_irq_info omap3xxx_dsi1_irqs[] = {
|
||||||
|
|||||||
@@ -83,7 +83,8 @@ static struct resource smc91x_resources[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static struct smc91x_platdata smc91x_platdata = {
|
static struct smc91x_platdata smc91x_platdata = {
|
||||||
.flags = SMC91X_USE_32BIT | SMC91X_USE_DMA | SMC91X_NOWAIT,
|
.flags = SMC91X_USE_8BIT | SMC91X_USE_16BIT | SMC91X_USE_32BIT |
|
||||||
|
SMC91X_USE_DMA | SMC91X_NOWAIT,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct platform_device smc91x_device = {
|
static struct platform_device smc91x_device = {
|
||||||
|
|||||||
@@ -120,7 +120,8 @@ static struct resource smc91x_resources[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static struct smc91x_platdata xcep_smc91x_info = {
|
static struct smc91x_platdata xcep_smc91x_info = {
|
||||||
.flags = SMC91X_USE_32BIT | SMC91X_NOWAIT | SMC91X_USE_DMA,
|
.flags = SMC91X_USE_8BIT | SMC91X_USE_16BIT | SMC91X_USE_32BIT |
|
||||||
|
SMC91X_NOWAIT | SMC91X_USE_DMA,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct platform_device smc91x_device = {
|
static struct platform_device smc91x_device = {
|
||||||
|
|||||||
@@ -93,7 +93,8 @@ static struct smsc911x_platform_config smsc911x_config = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static struct smc91x_platdata smc91x_platdata = {
|
static struct smc91x_platdata smc91x_platdata = {
|
||||||
.flags = SMC91X_USE_32BIT | SMC91X_NOWAIT,
|
.flags = SMC91X_USE_8BIT | SMC91X_USE_16BIT | SMC91X_USE_32BIT |
|
||||||
|
SMC91X_NOWAIT,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct platform_device realview_eth_device = {
|
static struct platform_device realview_eth_device = {
|
||||||
|
|||||||
@@ -125,6 +125,8 @@ static unsigned long clk_36864_get_rate(struct clk *clk)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static struct clkops clk_36864_ops = {
|
static struct clkops clk_36864_ops = {
|
||||||
|
.enable = clk_cpu_enable,
|
||||||
|
.disable = clk_cpu_disable,
|
||||||
.get_rate = clk_36864_get_rate,
|
.get_rate = clk_36864_get_rate,
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -140,9 +142,8 @@ static struct clk_lookup sa11xx_clkregs[] = {
|
|||||||
CLKDEV_INIT(NULL, "OSTIMER0", &clk_36864),
|
CLKDEV_INIT(NULL, "OSTIMER0", &clk_36864),
|
||||||
};
|
};
|
||||||
|
|
||||||
static int __init sa11xx_clk_init(void)
|
int __init sa11xx_clk_init(void)
|
||||||
{
|
{
|
||||||
clkdev_add_table(sa11xx_clkregs, ARRAY_SIZE(sa11xx_clkregs));
|
clkdev_add_table(sa11xx_clkregs, ARRAY_SIZE(sa11xx_clkregs));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
core_initcall(sa11xx_clk_init);
|
|
||||||
|
|||||||
@@ -34,6 +34,7 @@
|
|||||||
|
|
||||||
#include <mach/hardware.h>
|
#include <mach/hardware.h>
|
||||||
#include <mach/irqs.h>
|
#include <mach/irqs.h>
|
||||||
|
#include <mach/reset.h>
|
||||||
|
|
||||||
#include "generic.h"
|
#include "generic.h"
|
||||||
#include <clocksource/pxa.h>
|
#include <clocksource/pxa.h>
|
||||||
@@ -95,6 +96,8 @@ static void sa1100_power_off(void)
|
|||||||
|
|
||||||
void sa11x0_restart(enum reboot_mode mode, const char *cmd)
|
void sa11x0_restart(enum reboot_mode mode, const char *cmd)
|
||||||
{
|
{
|
||||||
|
clear_reset_status(RESET_STATUS_ALL);
|
||||||
|
|
||||||
if (mode == REBOOT_SOFT) {
|
if (mode == REBOOT_SOFT) {
|
||||||
/* Jump into ROM at address 0 */
|
/* Jump into ROM at address 0 */
|
||||||
soft_restart(0);
|
soft_restart(0);
|
||||||
@@ -388,6 +391,7 @@ void __init sa1100_init_irq(void)
|
|||||||
sa11x0_init_irq_nodt(IRQ_GPIO0_SC, irq_resource.start);
|
sa11x0_init_irq_nodt(IRQ_GPIO0_SC, irq_resource.start);
|
||||||
|
|
||||||
sa1100_init_gpio();
|
sa1100_init_gpio();
|
||||||
|
sa11xx_clk_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -44,3 +44,5 @@ int sa11x0_pm_init(void);
|
|||||||
#else
|
#else
|
||||||
static inline int sa11x0_pm_init(void) { return 0; }
|
static inline int sa11x0_pm_init(void) { return 0; }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
int sa11xx_clk_init(void);
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ static struct resource smc91x_resources[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static struct smc91x_platdata smc91x_platdata = {
|
static struct smc91x_platdata smc91x_platdata = {
|
||||||
.flags = SMC91X_USE_16BIT | SMC91X_NOWAIT,
|
.flags = SMC91X_USE_16BIT | SMC91X_USE_8BIT | SMC91X_NOWAIT,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct platform_device smc91x_device = {
|
static struct platform_device smc91x_device = {
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
#include <asm/hwcap.h>
|
#include <asm/hwcap.h>
|
||||||
#include <asm/pgtable-hwdef.h>
|
#include <asm/pgtable-hwdef.h>
|
||||||
#include <asm/pgtable.h>
|
#include <asm/pgtable.h>
|
||||||
|
#include <asm/memory.h>
|
||||||
|
|
||||||
#include "proc-macros.S"
|
#include "proc-macros.S"
|
||||||
|
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ DEFINE_PER_CPU(struct vcpu_info *, xen_vcpu);
|
|||||||
static struct vcpu_info __percpu *xen_vcpu_info;
|
static struct vcpu_info __percpu *xen_vcpu_info;
|
||||||
|
|
||||||
/* Linux <-> Xen vCPU id mapping */
|
/* Linux <-> Xen vCPU id mapping */
|
||||||
DEFINE_PER_CPU(int, xen_vcpu_id) = -1;
|
DEFINE_PER_CPU(uint32_t, xen_vcpu_id);
|
||||||
EXPORT_PER_CPU_SYMBOL(xen_vcpu_id);
|
EXPORT_PER_CPU_SYMBOL(xen_vcpu_id);
|
||||||
|
|
||||||
/* These are unused until we support booting "pre-ballooned" */
|
/* These are unused until we support booting "pre-ballooned" */
|
||||||
@@ -170,9 +170,6 @@ static int xen_starting_cpu(unsigned int cpu)
|
|||||||
pr_info("Xen: initializing cpu%d\n", cpu);
|
pr_info("Xen: initializing cpu%d\n", cpu);
|
||||||
vcpup = per_cpu_ptr(xen_vcpu_info, cpu);
|
vcpup = per_cpu_ptr(xen_vcpu_info, cpu);
|
||||||
|
|
||||||
/* Direct vCPU id mapping for ARM guests. */
|
|
||||||
per_cpu(xen_vcpu_id, cpu) = cpu;
|
|
||||||
|
|
||||||
info.mfn = virt_to_gfn(vcpup);
|
info.mfn = virt_to_gfn(vcpup);
|
||||||
info.offset = xen_offset_in_page(vcpup);
|
info.offset = xen_offset_in_page(vcpup);
|
||||||
|
|
||||||
@@ -330,6 +327,7 @@ static int __init xen_guest_init(void)
|
|||||||
{
|
{
|
||||||
struct xen_add_to_physmap xatp;
|
struct xen_add_to_physmap xatp;
|
||||||
struct shared_info *shared_info_page = NULL;
|
struct shared_info *shared_info_page = NULL;
|
||||||
|
int cpu;
|
||||||
|
|
||||||
if (!xen_domain())
|
if (!xen_domain())
|
||||||
return 0;
|
return 0;
|
||||||
@@ -380,7 +378,8 @@ static int __init xen_guest_init(void)
|
|||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
/* Direct vCPU id mapping for ARM guests. */
|
/* Direct vCPU id mapping for ARM guests. */
|
||||||
per_cpu(xen_vcpu_id, 0) = 0;
|
for_each_possible_cpu(cpu)
|
||||||
|
per_cpu(xen_vcpu_id, cpu) = cpu;
|
||||||
|
|
||||||
xen_auto_xlat_grant_frames.count = gnttab_max_grant_frames();
|
xen_auto_xlat_grant_frames.count = gnttab_max_grant_frames();
|
||||||
if (xen_xlate_map_ballooned_pages(&xen_auto_xlat_grant_frames.pfn,
|
if (xen_xlate_map_ballooned_pages(&xen_auto_xlat_grant_frames.pfn,
|
||||||
|
|||||||
@@ -270,6 +270,8 @@
|
|||||||
#io-channel-cells = <1>;
|
#io-channel-cells = <1>;
|
||||||
clocks = <&cru SCLK_SARADC>, <&cru PCLK_SARADC>;
|
clocks = <&cru SCLK_SARADC>, <&cru PCLK_SARADC>;
|
||||||
clock-names = "saradc", "apb_pclk";
|
clock-names = "saradc", "apb_pclk";
|
||||||
|
resets = <&cru SRST_SARADC>;
|
||||||
|
reset-names = "saradc-apb";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -199,19 +199,19 @@ static inline unsigned long __percpu_xchg(void *ptr, unsigned long val,
|
|||||||
#define _percpu_read(pcp) \
|
#define _percpu_read(pcp) \
|
||||||
({ \
|
({ \
|
||||||
typeof(pcp) __retval; \
|
typeof(pcp) __retval; \
|
||||||
preempt_disable(); \
|
preempt_disable_notrace(); \
|
||||||
__retval = (typeof(pcp))__percpu_read(raw_cpu_ptr(&(pcp)), \
|
__retval = (typeof(pcp))__percpu_read(raw_cpu_ptr(&(pcp)), \
|
||||||
sizeof(pcp)); \
|
sizeof(pcp)); \
|
||||||
preempt_enable(); \
|
preempt_enable_notrace(); \
|
||||||
__retval; \
|
__retval; \
|
||||||
})
|
})
|
||||||
|
|
||||||
#define _percpu_write(pcp, val) \
|
#define _percpu_write(pcp, val) \
|
||||||
do { \
|
do { \
|
||||||
preempt_disable(); \
|
preempt_disable_notrace(); \
|
||||||
__percpu_write(raw_cpu_ptr(&(pcp)), (unsigned long)(val), \
|
__percpu_write(raw_cpu_ptr(&(pcp)), (unsigned long)(val), \
|
||||||
sizeof(pcp)); \
|
sizeof(pcp)); \
|
||||||
preempt_enable(); \
|
preempt_enable_notrace(); \
|
||||||
} while(0) \
|
} while(0) \
|
||||||
|
|
||||||
#define _pcp_protect(operation, pcp, val) \
|
#define _pcp_protect(operation, pcp, val) \
|
||||||
|
|||||||
@@ -363,4 +363,14 @@ static inline int arch_read_trylock(arch_rwlock_t *rw)
|
|||||||
#define arch_read_relax(lock) cpu_relax()
|
#define arch_read_relax(lock) cpu_relax()
|
||||||
#define arch_write_relax(lock) cpu_relax()
|
#define arch_write_relax(lock) cpu_relax()
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Accesses appearing in program order before a spin_lock() operation
|
||||||
|
* can be reordered with accesses inside the critical section, by virtue
|
||||||
|
* of arch_spin_lock being constructed using acquire semantics.
|
||||||
|
*
|
||||||
|
* In cases where this is problematic (e.g. try_to_wake_up), an
|
||||||
|
* smp_mb__before_spinlock() can restore the required ordering.
|
||||||
|
*/
|
||||||
|
#define smp_mb__before_spinlock() smp_mb()
|
||||||
|
|
||||||
#endif /* __ASM_SPINLOCK_H */
|
#endif /* __ASM_SPINLOCK_H */
|
||||||
|
|||||||
@@ -757,6 +757,9 @@ ENTRY(__enable_mmu)
|
|||||||
isb
|
isb
|
||||||
bl __create_page_tables // recreate kernel mapping
|
bl __create_page_tables // recreate kernel mapping
|
||||||
|
|
||||||
|
tlbi vmalle1 // Remove any stale TLB entries
|
||||||
|
dsb nsh
|
||||||
|
|
||||||
msr sctlr_el1, x19 // re-enable the MMU
|
msr sctlr_el1, x19 // re-enable the MMU
|
||||||
isb
|
isb
|
||||||
ic iallu // flush instructions fetched
|
ic iallu // flush instructions fetched
|
||||||
|
|||||||
@@ -256,7 +256,7 @@ static int __hyp_text __guest_run(struct kvm_vcpu *vcpu)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* We must restore the 32-bit state before the sysregs, thanks
|
* We must restore the 32-bit state before the sysregs, thanks
|
||||||
* to Cortex-A57 erratum #852523.
|
* to erratum #852523 (Cortex-A57) or #853709 (Cortex-A72).
|
||||||
*/
|
*/
|
||||||
__sysreg32_restore_state(vcpu);
|
__sysreg32_restore_state(vcpu);
|
||||||
__sysreg_restore_guest_state(guest_ctxt);
|
__sysreg_restore_guest_state(guest_ctxt);
|
||||||
|
|||||||
@@ -823,14 +823,6 @@ static bool access_pmuserenr(struct kvm_vcpu *vcpu, struct sys_reg_params *p,
|
|||||||
* Architected system registers.
|
* Architected system registers.
|
||||||
* Important: Must be sorted ascending by Op0, Op1, CRn, CRm, Op2
|
* Important: Must be sorted ascending by Op0, Op1, CRn, CRm, Op2
|
||||||
*
|
*
|
||||||
* We could trap ID_DFR0 and tell the guest we don't support performance
|
|
||||||
* monitoring. Unfortunately the patch to make the kernel check ID_DFR0 was
|
|
||||||
* NAKed, so it will read the PMCR anyway.
|
|
||||||
*
|
|
||||||
* Therefore we tell the guest we have 0 counters. Unfortunately, we
|
|
||||||
* must always support PMCCNTR (the cycle counter): we just RAZ/WI for
|
|
||||||
* all PM registers, which doesn't crash the guest kernel at least.
|
|
||||||
*
|
|
||||||
* Debug handling: We do trap most, if not all debug related system
|
* Debug handling: We do trap most, if not all debug related system
|
||||||
* registers. The implementation is good enough to ensure that a guest
|
* registers. The implementation is good enough to ensure that a guest
|
||||||
* can use these with minimal performance degradation. The drawback is
|
* can use these with minimal performance degradation. The drawback is
|
||||||
@@ -1360,7 +1352,7 @@ static const struct sys_reg_desc cp15_regs[] = {
|
|||||||
{ Op1( 0), CRn(10), CRm( 3), Op2( 1), access_vm_reg, NULL, c10_AMAIR1 },
|
{ Op1( 0), CRn(10), CRm( 3), Op2( 1), access_vm_reg, NULL, c10_AMAIR1 },
|
||||||
|
|
||||||
/* ICC_SRE */
|
/* ICC_SRE */
|
||||||
{ Op1( 0), CRn(12), CRm(12), Op2( 5), trap_raz_wi },
|
{ Op1( 0), CRn(12), CRm(12), Op2( 5), access_gic_sre },
|
||||||
|
|
||||||
{ Op1( 0), CRn(13), CRm( 0), Op2( 1), access_vm_reg, NULL, c13_CID },
|
{ Op1( 0), CRn(13), CRm( 0), Op2( 1), access_vm_reg, NULL, c13_CID },
|
||||||
|
|
||||||
|
|||||||
@@ -100,7 +100,16 @@ ENTRY(cpu_do_resume)
|
|||||||
|
|
||||||
msr tcr_el1, x8
|
msr tcr_el1, x8
|
||||||
msr vbar_el1, x9
|
msr vbar_el1, x9
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __cpu_setup() cleared MDSCR_EL1.MDE and friends, before unmasking
|
||||||
|
* debug exceptions. By restoring MDSCR_EL1 here, we may take a debug
|
||||||
|
* exception. Mask them until local_dbg_restore() in cpu_suspend()
|
||||||
|
* resets them.
|
||||||
|
*/
|
||||||
|
disable_dbg
|
||||||
msr mdscr_el1, x10
|
msr mdscr_el1, x10
|
||||||
|
|
||||||
msr sctlr_el1, x12
|
msr sctlr_el1, x12
|
||||||
/*
|
/*
|
||||||
* Restore oslsr_el1 by writing oslar_el1
|
* Restore oslsr_el1 by writing oslar_el1
|
||||||
|
|||||||
@@ -74,7 +74,7 @@ extern __kernel_size_t __copy_user(void *to, const void *from,
|
|||||||
|
|
||||||
extern __kernel_size_t copy_to_user(void __user *to, const void *from,
|
extern __kernel_size_t copy_to_user(void __user *to, const void *from,
|
||||||
__kernel_size_t n);
|
__kernel_size_t n);
|
||||||
extern __kernel_size_t copy_from_user(void *to, const void __user *from,
|
extern __kernel_size_t ___copy_from_user(void *to, const void __user *from,
|
||||||
__kernel_size_t n);
|
__kernel_size_t n);
|
||||||
|
|
||||||
static inline __kernel_size_t __copy_to_user(void __user *to, const void *from,
|
static inline __kernel_size_t __copy_to_user(void __user *to, const void *from,
|
||||||
@@ -88,6 +88,15 @@ static inline __kernel_size_t __copy_from_user(void *to,
|
|||||||
{
|
{
|
||||||
return __copy_user(to, (const void __force *)from, n);
|
return __copy_user(to, (const void __force *)from, n);
|
||||||
}
|
}
|
||||||
|
static inline __kernel_size_t copy_from_user(void *to,
|
||||||
|
const void __user *from,
|
||||||
|
__kernel_size_t n)
|
||||||
|
{
|
||||||
|
size_t res = ___copy_from_user(to, from, n);
|
||||||
|
if (unlikely(res))
|
||||||
|
memset(to + (n - res), 0, res);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
#define __copy_to_user_inatomic __copy_to_user
|
#define __copy_to_user_inatomic __copy_to_user
|
||||||
#define __copy_from_user_inatomic __copy_from_user
|
#define __copy_from_user_inatomic __copy_from_user
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ EXPORT_SYMBOL(copy_page);
|
|||||||
/*
|
/*
|
||||||
* Userspace access stuff.
|
* Userspace access stuff.
|
||||||
*/
|
*/
|
||||||
EXPORT_SYMBOL(copy_from_user);
|
EXPORT_SYMBOL(___copy_from_user);
|
||||||
EXPORT_SYMBOL(copy_to_user);
|
EXPORT_SYMBOL(copy_to_user);
|
||||||
EXPORT_SYMBOL(__copy_user);
|
EXPORT_SYMBOL(__copy_user);
|
||||||
EXPORT_SYMBOL(strncpy_from_user);
|
EXPORT_SYMBOL(strncpy_from_user);
|
||||||
|
|||||||
@@ -25,11 +25,11 @@
|
|||||||
.align 1
|
.align 1
|
||||||
.global copy_from_user
|
.global copy_from_user
|
||||||
.type copy_from_user, @function
|
.type copy_from_user, @function
|
||||||
copy_from_user:
|
___copy_from_user:
|
||||||
branch_if_kernel r8, __copy_user
|
branch_if_kernel r8, __copy_user
|
||||||
ret_if_privileged r8, r11, r10, r10
|
ret_if_privileged r8, r11, r10, r10
|
||||||
rjmp __copy_user
|
rjmp __copy_user
|
||||||
.size copy_from_user, . - copy_from_user
|
.size ___copy_from_user, . - ___copy_from_user
|
||||||
|
|
||||||
.global copy_to_user
|
.global copy_to_user
|
||||||
.type copy_to_user, @function
|
.type copy_to_user, @function
|
||||||
|
|||||||
@@ -171,11 +171,12 @@ static inline int bad_user_access_length(void)
|
|||||||
static inline unsigned long __must_check
|
static inline unsigned long __must_check
|
||||||
copy_from_user(void *to, const void __user *from, unsigned long n)
|
copy_from_user(void *to, const void __user *from, unsigned long n)
|
||||||
{
|
{
|
||||||
if (access_ok(VERIFY_READ, from, n))
|
if (likely(access_ok(VERIFY_READ, from, n))) {
|
||||||
memcpy(to, (const void __force *)from, n);
|
memcpy(to, (const void __force *)from, n);
|
||||||
else
|
|
||||||
return n;
|
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
|
memset(to, 0, n);
|
||||||
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline unsigned long __must_check
|
static inline unsigned long __must_check
|
||||||
|
|||||||
@@ -146,7 +146,8 @@ static struct platform_device hitachi_fb_device = {
|
|||||||
#include <linux/smc91x.h>
|
#include <linux/smc91x.h>
|
||||||
|
|
||||||
static struct smc91x_platdata smc91x_info = {
|
static struct smc91x_platdata smc91x_info = {
|
||||||
.flags = SMC91X_USE_32BIT | SMC91X_NOWAIT,
|
.flags = SMC91X_USE_8BIT | SMC91X_USE_16BIT | SMC91X_USE_32BIT |
|
||||||
|
SMC91X_NOWAIT,
|
||||||
.leda = RPC_LED_100_10,
|
.leda = RPC_LED_100_10,
|
||||||
.ledb = RPC_LED_TX_RX,
|
.ledb = RPC_LED_TX_RX,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -134,7 +134,8 @@ static struct platform_device net2272_bfin_device = {
|
|||||||
#include <linux/smc91x.h>
|
#include <linux/smc91x.h>
|
||||||
|
|
||||||
static struct smc91x_platdata smc91x_info = {
|
static struct smc91x_platdata smc91x_info = {
|
||||||
.flags = SMC91X_USE_32BIT | SMC91X_NOWAIT,
|
.flags = SMC91X_USE_8BIT | SMC91X_USE_16BIT | SMC91X_USE_32BIT |
|
||||||
|
SMC91X_NOWAIT,
|
||||||
.leda = RPC_LED_100_10,
|
.leda = RPC_LED_100_10,
|
||||||
.ledb = RPC_LED_TX_RX,
|
.ledb = RPC_LED_TX_RX,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -194,30 +194,6 @@ extern unsigned long __copy_user(void __user *to, const void *from, unsigned lon
|
|||||||
extern unsigned long __copy_user_zeroing(void *to, const void __user *from, unsigned long n);
|
extern unsigned long __copy_user_zeroing(void *to, const void __user *from, unsigned long n);
|
||||||
extern unsigned long __do_clear_user(void __user *to, unsigned long n);
|
extern unsigned long __do_clear_user(void __user *to, unsigned long n);
|
||||||
|
|
||||||
static inline unsigned long
|
|
||||||
__generic_copy_to_user(void __user *to, const void *from, unsigned long n)
|
|
||||||
{
|
|
||||||
if (access_ok(VERIFY_WRITE, to, n))
|
|
||||||
return __copy_user(to, from, n);
|
|
||||||
return n;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline unsigned long
|
|
||||||
__generic_copy_from_user(void *to, const void __user *from, unsigned long n)
|
|
||||||
{
|
|
||||||
if (access_ok(VERIFY_READ, from, n))
|
|
||||||
return __copy_user_zeroing(to, from, n);
|
|
||||||
return n;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline unsigned long
|
|
||||||
__generic_clear_user(void __user *to, unsigned long n)
|
|
||||||
{
|
|
||||||
if (access_ok(VERIFY_WRITE, to, n))
|
|
||||||
return __do_clear_user(to, n);
|
|
||||||
return n;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline long
|
static inline long
|
||||||
__strncpy_from_user(char *dst, const char __user *src, long count)
|
__strncpy_from_user(char *dst, const char __user *src, long count)
|
||||||
{
|
{
|
||||||
@@ -282,7 +258,7 @@ __constant_copy_from_user(void *to, const void __user *from, unsigned long n)
|
|||||||
else if (n == 24)
|
else if (n == 24)
|
||||||
__asm_copy_from_user_24(to, from, ret);
|
__asm_copy_from_user_24(to, from, ret);
|
||||||
else
|
else
|
||||||
ret = __generic_copy_from_user(to, from, n);
|
ret = __copy_user_zeroing(to, from, n);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@@ -333,7 +309,7 @@ __constant_copy_to_user(void __user *to, const void *from, unsigned long n)
|
|||||||
else if (n == 24)
|
else if (n == 24)
|
||||||
__asm_copy_to_user_24(to, from, ret);
|
__asm_copy_to_user_24(to, from, ret);
|
||||||
else
|
else
|
||||||
ret = __generic_copy_to_user(to, from, n);
|
ret = __copy_user(to, from, n);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@@ -366,26 +342,43 @@ __constant_clear_user(void __user *to, unsigned long n)
|
|||||||
else if (n == 24)
|
else if (n == 24)
|
||||||
__asm_clear_24(to, ret);
|
__asm_clear_24(to, ret);
|
||||||
else
|
else
|
||||||
ret = __generic_clear_user(to, n);
|
ret = __do_clear_user(to, n);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#define clear_user(to, n) \
|
static inline size_t clear_user(void __user *to, size_t n)
|
||||||
(__builtin_constant_p(n) ? \
|
{
|
||||||
__constant_clear_user(to, n) : \
|
if (unlikely(!access_ok(VERIFY_WRITE, to, n)))
|
||||||
__generic_clear_user(to, n))
|
return n;
|
||||||
|
if (__builtin_constant_p(n))
|
||||||
|
return __constant_clear_user(to, n);
|
||||||
|
else
|
||||||
|
return __do_clear_user(to, n);
|
||||||
|
}
|
||||||
|
|
||||||
#define copy_from_user(to, from, n) \
|
static inline size_t copy_from_user(void *to, const void __user *from, size_t n)
|
||||||
(__builtin_constant_p(n) ? \
|
{
|
||||||
__constant_copy_from_user(to, from, n) : \
|
if (unlikely(!access_ok(VERIFY_READ, from, n))) {
|
||||||
__generic_copy_from_user(to, from, n))
|
memset(to, 0, n);
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
if (__builtin_constant_p(n))
|
||||||
|
return __constant_copy_from_user(to, from, n);
|
||||||
|
else
|
||||||
|
return __copy_user_zeroing(to, from, n);
|
||||||
|
}
|
||||||
|
|
||||||
#define copy_to_user(to, from, n) \
|
static inline size_t copy_to_user(void __user *to, const void *from, size_t n)
|
||||||
(__builtin_constant_p(n) ? \
|
{
|
||||||
__constant_copy_to_user(to, from, n) : \
|
if (unlikely(!access_ok(VERIFY_WRITE, to, n)))
|
||||||
__generic_copy_to_user(to, from, n))
|
return n;
|
||||||
|
if (__builtin_constant_p(n))
|
||||||
|
return __constant_copy_to_user(to, from, n);
|
||||||
|
else
|
||||||
|
return __copy_user(to, from, n);
|
||||||
|
}
|
||||||
|
|
||||||
/* We let the __ versions of copy_from/to_user inline, because they're often
|
/* We let the __ versions of copy_from/to_user inline, because they're often
|
||||||
* used in fast paths and have only a small space overhead.
|
* used in fast paths and have only a small space overhead.
|
||||||
|
|||||||
@@ -263,19 +263,25 @@ do { \
|
|||||||
extern long __memset_user(void *dst, unsigned long count);
|
extern long __memset_user(void *dst, unsigned long count);
|
||||||
extern long __memcpy_user(void *dst, const void *src, unsigned long count);
|
extern long __memcpy_user(void *dst, const void *src, unsigned long count);
|
||||||
|
|
||||||
#define clear_user(dst,count) __memset_user(____force(dst), (count))
|
#define __clear_user(dst,count) __memset_user(____force(dst), (count))
|
||||||
#define __copy_from_user_inatomic(to, from, n) __memcpy_user((to), ____force(from), (n))
|
#define __copy_from_user_inatomic(to, from, n) __memcpy_user((to), ____force(from), (n))
|
||||||
#define __copy_to_user_inatomic(to, from, n) __memcpy_user(____force(to), (from), (n))
|
#define __copy_to_user_inatomic(to, from, n) __memcpy_user(____force(to), (from), (n))
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
#define clear_user(dst,count) (memset(____force(dst), 0, (count)), 0)
|
#define __clear_user(dst,count) (memset(____force(dst), 0, (count)), 0)
|
||||||
#define __copy_from_user_inatomic(to, from, n) (memcpy((to), ____force(from), (n)), 0)
|
#define __copy_from_user_inatomic(to, from, n) (memcpy((to), ____force(from), (n)), 0)
|
||||||
#define __copy_to_user_inatomic(to, from, n) (memcpy(____force(to), (from), (n)), 0)
|
#define __copy_to_user_inatomic(to, from, n) (memcpy(____force(to), (from), (n)), 0)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define __clear_user clear_user
|
static inline unsigned long __must_check
|
||||||
|
clear_user(void __user *to, unsigned long n)
|
||||||
|
{
|
||||||
|
if (likely(__access_ok(to, n)))
|
||||||
|
n = __clear_user(to, n);
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
|
||||||
static inline unsigned long __must_check
|
static inline unsigned long __must_check
|
||||||
__copy_to_user(void __user *to, const void *from, unsigned long n)
|
__copy_to_user(void __user *to, const void *from, unsigned long n)
|
||||||
|
|||||||
@@ -103,7 +103,8 @@ static inline long hexagon_strncpy_from_user(char *dst, const char __user *src,
|
|||||||
{
|
{
|
||||||
long res = __strnlen_user(src, n);
|
long res = __strnlen_user(src, n);
|
||||||
|
|
||||||
/* return from strnlen can't be zero -- that would be rubbish. */
|
if (unlikely(!res))
|
||||||
|
return -EFAULT;
|
||||||
|
|
||||||
if (res > n) {
|
if (res > n) {
|
||||||
copy_from_user(dst, src, n);
|
copy_from_user(dst, src, n);
|
||||||
|
|||||||
@@ -241,7 +241,6 @@ extern unsigned long __must_check __copy_user (void __user *to, const void __use
|
|||||||
static inline unsigned long
|
static inline unsigned long
|
||||||
__copy_to_user (void __user *to, const void *from, unsigned long count)
|
__copy_to_user (void __user *to, const void *from, unsigned long count)
|
||||||
{
|
{
|
||||||
if (!__builtin_constant_p(count))
|
|
||||||
check_object_size(from, count, true);
|
check_object_size(from, count, true);
|
||||||
|
|
||||||
return __copy_user(to, (__force void __user *) from, count);
|
return __copy_user(to, (__force void __user *) from, count);
|
||||||
@@ -250,7 +249,6 @@ __copy_to_user (void __user *to, const void *from, unsigned long count)
|
|||||||
static inline unsigned long
|
static inline unsigned long
|
||||||
__copy_from_user (void *to, const void __user *from, unsigned long count)
|
__copy_from_user (void *to, const void __user *from, unsigned long count)
|
||||||
{
|
{
|
||||||
if (!__builtin_constant_p(count))
|
|
||||||
check_object_size(to, count, false);
|
check_object_size(to, count, false);
|
||||||
|
|
||||||
return __copy_user((__force void __user *) to, from, count);
|
return __copy_user((__force void __user *) to, from, count);
|
||||||
@@ -265,27 +263,22 @@ __copy_from_user (void *to, const void __user *from, unsigned long count)
|
|||||||
long __cu_len = (n); \
|
long __cu_len = (n); \
|
||||||
\
|
\
|
||||||
if (__access_ok(__cu_to, __cu_len, get_fs())) { \
|
if (__access_ok(__cu_to, __cu_len, get_fs())) { \
|
||||||
if (!__builtin_constant_p(n)) \
|
|
||||||
check_object_size(__cu_from, __cu_len, true); \
|
check_object_size(__cu_from, __cu_len, true); \
|
||||||
__cu_len = __copy_user(__cu_to, (__force void __user *) __cu_from, __cu_len); \
|
__cu_len = __copy_user(__cu_to, (__force void __user *) __cu_from, __cu_len); \
|
||||||
} \
|
} \
|
||||||
__cu_len; \
|
__cu_len; \
|
||||||
})
|
})
|
||||||
|
|
||||||
#define copy_from_user(to, from, n) \
|
static inline unsigned long
|
||||||
({ \
|
copy_from_user(void *to, const void __user *from, unsigned long n)
|
||||||
void *__cu_to = (to); \
|
{
|
||||||
const void __user *__cu_from = (from); \
|
check_object_size(to, n, false);
|
||||||
long __cu_len = (n); \
|
if (likely(__access_ok(from, n, get_fs())))
|
||||||
\
|
n = __copy_user((__force void __user *) to, from, n);
|
||||||
__chk_user_ptr(__cu_from); \
|
else
|
||||||
if (__access_ok(__cu_from, __cu_len, get_fs())) { \
|
memset(to, 0, n);
|
||||||
if (!__builtin_constant_p(n)) \
|
return n;
|
||||||
check_object_size(__cu_to, __cu_len, false); \
|
}
|
||||||
__cu_len = __copy_user((__force void __user *) __cu_to, __cu_from, __cu_len); \
|
|
||||||
} \
|
|
||||||
__cu_len; \
|
|
||||||
})
|
|
||||||
|
|
||||||
#define __copy_in_user(to, from, size) __copy_user((to), (from), (size))
|
#define __copy_in_user(to, from, size) __copy_user((to), (from), (size))
|
||||||
|
|
||||||
|
|||||||
@@ -219,7 +219,7 @@ extern int fixup_exception(struct pt_regs *regs);
|
|||||||
#define __get_user_nocheck(x, ptr, size) \
|
#define __get_user_nocheck(x, ptr, size) \
|
||||||
({ \
|
({ \
|
||||||
long __gu_err = 0; \
|
long __gu_err = 0; \
|
||||||
unsigned long __gu_val; \
|
unsigned long __gu_val = 0; \
|
||||||
might_fault(); \
|
might_fault(); \
|
||||||
__get_user_size(__gu_val, (ptr), (size), __gu_err); \
|
__get_user_size(__gu_val, (ptr), (size), __gu_err); \
|
||||||
(x) = (__force __typeof__(*(ptr)))__gu_val; \
|
(x) = (__force __typeof__(*(ptr)))__gu_val; \
|
||||||
|
|||||||
@@ -204,8 +204,9 @@ extern unsigned long __must_check __copy_user_zeroing(void *to,
|
|||||||
static inline unsigned long
|
static inline unsigned long
|
||||||
copy_from_user(void *to, const void __user *from, unsigned long n)
|
copy_from_user(void *to, const void __user *from, unsigned long n)
|
||||||
{
|
{
|
||||||
if (access_ok(VERIFY_READ, from, n))
|
if (likely(access_ok(VERIFY_READ, from, n)))
|
||||||
return __copy_user_zeroing(to, from, n);
|
return __copy_user_zeroing(to, from, n);
|
||||||
|
memset(to, 0, n);
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -227,7 +227,7 @@ extern long __user_bad(void);
|
|||||||
|
|
||||||
#define __get_user(x, ptr) \
|
#define __get_user(x, ptr) \
|
||||||
({ \
|
({ \
|
||||||
unsigned long __gu_val; \
|
unsigned long __gu_val = 0; \
|
||||||
/*unsigned long __gu_ptr = (unsigned long)(ptr);*/ \
|
/*unsigned long __gu_ptr = (unsigned long)(ptr);*/ \
|
||||||
long __gu_err; \
|
long __gu_err; \
|
||||||
switch (sizeof(*(ptr))) { \
|
switch (sizeof(*(ptr))) { \
|
||||||
@@ -373,10 +373,13 @@ extern long __user_bad(void);
|
|||||||
static inline long copy_from_user(void *to,
|
static inline long copy_from_user(void *to,
|
||||||
const void __user *from, unsigned long n)
|
const void __user *from, unsigned long n)
|
||||||
{
|
{
|
||||||
|
unsigned long res = n;
|
||||||
might_fault();
|
might_fault();
|
||||||
if (access_ok(VERIFY_READ, from, n))
|
if (likely(access_ok(VERIFY_READ, from, n)))
|
||||||
return __copy_from_user(to, from, n);
|
res = __copy_from_user(to, from, n);
|
||||||
return n;
|
if (unlikely(res))
|
||||||
|
memset(to + (n - res), 0, res);
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define __copy_to_user(to, from, n) \
|
#define __copy_to_user(to, from, n) \
|
||||||
|
|||||||
@@ -164,7 +164,7 @@ typedef struct { unsigned long pgprot; } pgprot_t;
|
|||||||
*/
|
*/
|
||||||
static inline unsigned long ___pa(unsigned long x)
|
static inline unsigned long ___pa(unsigned long x)
|
||||||
{
|
{
|
||||||
if (config_enabled(CONFIG_64BIT)) {
|
if (IS_ENABLED(CONFIG_64BIT)) {
|
||||||
/*
|
/*
|
||||||
* For MIPS64 the virtual address may either be in one of
|
* For MIPS64 the virtual address may either be in one of
|
||||||
* the compatibility segements ckseg0 or ckseg1, or it may
|
* the compatibility segements ckseg0 or ckseg1, or it may
|
||||||
@@ -173,7 +173,7 @@ static inline unsigned long ___pa(unsigned long x)
|
|||||||
return x < CKSEG0 ? XPHYSADDR(x) : CPHYSADDR(x);
|
return x < CKSEG0 ? XPHYSADDR(x) : CPHYSADDR(x);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!config_enabled(CONFIG_EVA)) {
|
if (!IS_ENABLED(CONFIG_EVA)) {
|
||||||
/*
|
/*
|
||||||
* We're using the standard MIPS32 legacy memory map, ie.
|
* We're using the standard MIPS32 legacy memory map, ie.
|
||||||
* the address x is going to be in kseg0 or kseg1. We can
|
* the address x is going to be in kseg0 or kseg1. We can
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/errno.h>
|
#include <linux/errno.h>
|
||||||
#include <linux/thread_info.h>
|
#include <linux/thread_info.h>
|
||||||
|
#include <linux/string.h>
|
||||||
#include <asm/asm-eva.h>
|
#include <asm/asm-eva.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -1170,6 +1171,8 @@ extern size_t __copy_in_user_eva(void *__to, const void *__from, size_t __n);
|
|||||||
__cu_len = __invoke_copy_from_user(__cu_to, \
|
__cu_len = __invoke_copy_from_user(__cu_to, \
|
||||||
__cu_from, \
|
__cu_from, \
|
||||||
__cu_len); \
|
__cu_len); \
|
||||||
|
} else { \
|
||||||
|
memset(__cu_to, 0, __cu_len); \
|
||||||
} \
|
} \
|
||||||
} \
|
} \
|
||||||
__cu_len; \
|
__cu_len; \
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ static int kvm_mips_map_page(struct kvm *kvm, gfn_t gfn)
|
|||||||
srcu_idx = srcu_read_lock(&kvm->srcu);
|
srcu_idx = srcu_read_lock(&kvm->srcu);
|
||||||
pfn = gfn_to_pfn(kvm, gfn);
|
pfn = gfn_to_pfn(kvm, gfn);
|
||||||
|
|
||||||
if (is_error_pfn(pfn)) {
|
if (is_error_noslot_pfn(pfn)) {
|
||||||
kvm_err("Couldn't get pfn for gfn %#llx!\n", gfn);
|
kvm_err("Couldn't get pfn for gfn %#llx!\n", gfn);
|
||||||
err = -EFAULT;
|
err = -EFAULT;
|
||||||
goto out;
|
goto out;
|
||||||
|
|||||||
@@ -166,6 +166,7 @@ struct __large_struct { unsigned long buf[100]; };
|
|||||||
"2:\n" \
|
"2:\n" \
|
||||||
" .section .fixup,\"ax\"\n" \
|
" .section .fixup,\"ax\"\n" \
|
||||||
"3:\n\t" \
|
"3:\n\t" \
|
||||||
|
" mov 0,%1\n" \
|
||||||
" mov %3,%0\n" \
|
" mov %3,%0\n" \
|
||||||
" jmp 2b\n" \
|
" jmp 2b\n" \
|
||||||
" .previous\n" \
|
" .previous\n" \
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
* as published by the Free Software Foundation; either version
|
* as published by the Free Software Foundation; either version
|
||||||
* 2 of the Licence, or (at your option) any later version.
|
* 2 of the Licence, or (at your option) any later version.
|
||||||
*/
|
*/
|
||||||
#include <asm/uaccess.h>
|
#include <linux/uaccess.h>
|
||||||
|
|
||||||
unsigned long
|
unsigned long
|
||||||
__generic_copy_to_user(void *to, const void *from, unsigned long n)
|
__generic_copy_to_user(void *to, const void *from, unsigned long n)
|
||||||
@@ -24,6 +24,8 @@ __generic_copy_from_user(void *to, const void *from, unsigned long n)
|
|||||||
{
|
{
|
||||||
if (access_ok(VERIFY_READ, from, n))
|
if (access_ok(VERIFY_READ, from, n))
|
||||||
__copy_user_zeroing(to, from, n);
|
__copy_user_zeroing(to, from, n);
|
||||||
|
else
|
||||||
|
memset(to, 0, n);
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -102,9 +102,12 @@ extern long __copy_to_user(void __user *to, const void *from, unsigned long n);
|
|||||||
static inline long copy_from_user(void *to, const void __user *from,
|
static inline long copy_from_user(void *to, const void __user *from,
|
||||||
unsigned long n)
|
unsigned long n)
|
||||||
{
|
{
|
||||||
if (!access_ok(VERIFY_READ, from, n))
|
unsigned long res = n;
|
||||||
return n;
|
if (access_ok(VERIFY_READ, from, n))
|
||||||
return __copy_from_user(to, from, n);
|
res = __copy_from_user(to, from, n);
|
||||||
|
if (unlikely(res))
|
||||||
|
memset(to + (n - res), 0, res);
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline long copy_to_user(void __user *to, const void *from,
|
static inline long copy_to_user(void __user *to, const void *from,
|
||||||
@@ -139,7 +142,7 @@ extern long strnlen_user(const char __user *s, long n);
|
|||||||
|
|
||||||
#define __get_user_unknown(val, size, ptr, err) do { \
|
#define __get_user_unknown(val, size, ptr, err) do { \
|
||||||
err = 0; \
|
err = 0; \
|
||||||
if (copy_from_user(&(val), ptr, size)) { \
|
if (__copy_from_user(&(val), ptr, size)) { \
|
||||||
err = -EFAULT; \
|
err = -EFAULT; \
|
||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
@@ -166,7 +169,7 @@ do { \
|
|||||||
({ \
|
({ \
|
||||||
long __gu_err = -EFAULT; \
|
long __gu_err = -EFAULT; \
|
||||||
const __typeof__(*(ptr)) __user *__gu_ptr = (ptr); \
|
const __typeof__(*(ptr)) __user *__gu_ptr = (ptr); \
|
||||||
unsigned long __gu_val; \
|
unsigned long __gu_val = 0; \
|
||||||
__get_user_common(__gu_val, sizeof(*(ptr)), __gu_ptr, __gu_err);\
|
__get_user_common(__gu_val, sizeof(*(ptr)), __gu_ptr, __gu_err);\
|
||||||
(x) = (__force __typeof__(x))__gu_val; \
|
(x) = (__force __typeof__(x))__gu_val; \
|
||||||
__gu_err; \
|
__gu_err; \
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user