mirror of https://gitee.com/openkylin/linux.git
Merge branch 'topic/firewire-update' into for-next
This commit is contained in:
commit
d8dfacf8b5
|
@ -57,6 +57,8 @@ used to route Message Signalled Interrupts (MSI) to the CPUs.
|
|||
These nodes must have the following properties:
|
||||
- compatible : Should at least contain "arm,gic-v3-its".
|
||||
- msi-controller : Boolean property. Identifies the node as an MSI controller
|
||||
- #msi-cells: Must be <1>. The single msi-cell is the DeviceID of the device
|
||||
which will generate the MSI.
|
||||
- reg: Specifies the base physical address and size of the ITS
|
||||
registers.
|
||||
|
||||
|
@ -83,6 +85,7 @@ Examples:
|
|||
gic-its@2c200000 {
|
||||
compatible = "arm,gic-v3-its";
|
||||
msi-controller;
|
||||
#msi-cells = <1>;
|
||||
reg = <0x0 0x2c200000 0 0x200000>;
|
||||
};
|
||||
};
|
||||
|
@ -107,12 +110,14 @@ Examples:
|
|||
gic-its@2c200000 {
|
||||
compatible = "arm,gic-v3-its";
|
||||
msi-controller;
|
||||
#msi-cells = <1>;
|
||||
reg = <0x0 0x2c200000 0 0x200000>;
|
||||
};
|
||||
|
||||
gic-its@2c400000 {
|
||||
compatible = "arm,gic-v3-its";
|
||||
msi-controller;
|
||||
#msi-cells = <1>;
|
||||
reg = <0x0 0x2c400000 0 0x200000>;
|
||||
};
|
||||
};
|
||||
|
|
|
@ -497,7 +497,7 @@ cpus {
|
|||
};
|
||||
|
||||
idle-states {
|
||||
entry-method = "arm,psci";
|
||||
entry-method = "psci";
|
||||
|
||||
CPU_RETENTION_0_0: cpu-retention-0-0 {
|
||||
compatible = "arm,idle-state";
|
||||
|
|
|
@ -16,7 +16,9 @@ properties, each containing a 'gpio-list':
|
|||
GPIO properties should be named "[<name>-]gpios", with <name> being the purpose
|
||||
of this GPIO for the device. While a non-existent <name> is considered valid
|
||||
for compatibility reasons (resolving to the "gpios" property), it is not allowed
|
||||
for new bindings.
|
||||
for new bindings. Also, GPIO properties named "[<name>-]gpio" are valid and old
|
||||
bindings use it, but are only supported for compatibility reasons and should not
|
||||
be used for newer bindings since it has been deprecated.
|
||||
|
||||
GPIO properties can contain one or more GPIO phandles, but only in exceptional
|
||||
cases should they contain more than one. If your device uses several GPIOs with
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
* Bosch BMA180 triaxial acceleration sensor
|
||||
* Bosch BMA180 / BMA250 triaxial acceleration sensor
|
||||
|
||||
http://omapworld.com/BMA180_111_1002839.pdf
|
||||
http://ae-bst.resource.bosch.com/media/products/dokumente/bma250/bst-bma250-ds002-05.pdf
|
||||
|
||||
Required properties:
|
||||
|
||||
- compatible : should be "bosch,bma180"
|
||||
- compatible : should be "bosch,bma180" or "bosch,bma250"
|
||||
- reg : the I2C address of the sensor
|
||||
|
||||
Optional properties:
|
||||
|
@ -13,6 +14,9 @@ Optional properties:
|
|||
|
||||
- interrupts : interrupt mapping for GPIO IRQ, it should by configured with
|
||||
flags IRQ_TYPE_LEVEL_HIGH | IRQ_TYPE_EDGE_RISING
|
||||
For the bma250 the first interrupt listed must be the one
|
||||
connected to the INT1 pin, the second (optional) interrupt
|
||||
listed must be the one connected to the INT2 pin.
|
||||
|
||||
Example:
|
||||
|
||||
|
|
|
@ -7,7 +7,8 @@ OHCI and EHCI controllers.
|
|||
|
||||
Required properties:
|
||||
- compatible: "renesas,pci-r8a7790" for the R8A7790 SoC;
|
||||
"renesas,pci-r8a7791" for the R8A7791 SoC.
|
||||
"renesas,pci-r8a7791" for the R8A7791 SoC;
|
||||
"renesas,pci-r8a7794" for the R8A7794 SoC.
|
||||
- reg: A list of physical regions to access the device: the first is
|
||||
the operational registers for the OHCI/EHCI controllers and the
|
||||
second is for the bridge configuration and control registers.
|
||||
|
|
|
@ -2,7 +2,12 @@ PBIAS internal regulator for SD card dual voltage i/o pads on OMAP SoCs.
|
|||
|
||||
Required properties:
|
||||
- compatible:
|
||||
- "ti,pbias-omap" for OMAP2, OMAP3, OMAP4, OMAP5, DRA7.
|
||||
- should be "ti,pbias-dra7" for DRA7
|
||||
- should be "ti,pbias-omap2" for OMAP2
|
||||
- should be "ti,pbias-omap3" for OMAP3
|
||||
- should be "ti,pbias-omap4" for OMAP4
|
||||
- should be "ti,pbias-omap5" for OMAP5
|
||||
- "ti,pbias-omap" is deprecated
|
||||
- reg: pbias register offset from syscon base and size of pbias register.
|
||||
- syscon : phandle of the system control module
|
||||
- regulator-name : should be
|
||||
|
|
|
@ -15,17 +15,18 @@ Required properties:
|
|||
- interrupts: Should contain spi interrupt
|
||||
|
||||
- clocks: phandles to input clocks.
|
||||
The first should be <&topckgen CLK_TOP_SPI_SEL>.
|
||||
The second should be one of the following.
|
||||
The first should be one of the following. It's PLL.
|
||||
- <&clk26m>: specify parent clock 26MHZ.
|
||||
- <&topckgen CLK_TOP_SYSPLL3_D2>: specify parent clock 109MHZ.
|
||||
It's the default one.
|
||||
- <&topckgen CLK_TOP_SYSPLL4_D2>: specify parent clock 78MHZ.
|
||||
- <&topckgen CLK_TOP_UNIVPLL2_D4>: specify parent clock 104MHZ.
|
||||
- <&topckgen CLK_TOP_UNIVPLL1_D8>: specify parent clock 78MHZ.
|
||||
The second should be <&topckgen CLK_TOP_SPI_SEL>. It's clock mux.
|
||||
The third is <&pericfg CLK_PERI_SPI0>. It's clock gate.
|
||||
|
||||
- clock-names: shall be "spi-clk" for the controller clock, and
|
||||
"parent-clk" for the parent clock.
|
||||
- clock-names: shall be "parent-clk" for the parent clock, "sel-clk" for the
|
||||
muxes clock, and "spi-clk" for the clock gate.
|
||||
|
||||
Optional properties:
|
||||
- mediatek,pad-select: specify which pins group(ck/mi/mo/cs) spi
|
||||
|
@ -44,8 +45,11 @@ spi: spi@1100a000 {
|
|||
#size-cells = <0>;
|
||||
reg = <0 0x1100a000 0 0x1000>;
|
||||
interrupts = <GIC_SPI 110 IRQ_TYPE_LEVEL_LOW>;
|
||||
clocks = <&topckgen CLK_TOP_SPI_SEL>, <&topckgen CLK_TOP_SYSPLL3_D2>;
|
||||
clock-names = "spi-clk", "parent-clk";
|
||||
clocks = <&topckgen CLK_TOP_SYSPLL3_D2>,
|
||||
<&topckgen CLK_TOP_SPI_SEL>,
|
||||
<&pericfg CLK_PERI_SPI0>;
|
||||
clock-names = "parent-clk", "sel-clk", "spi-clk";
|
||||
|
||||
mediatek,pad-select = <0>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
|
|
@ -55,19 +55,11 @@ of heat dissipation). For example a fan's cooling states correspond to
|
|||
the different fan speeds possible. Cooling states are referred to by
|
||||
single unsigned integers, where larger numbers mean greater heat
|
||||
dissipation. The precise set of cooling states associated with a device
|
||||
(as referred to be the cooling-min-state and cooling-max-state
|
||||
(as referred to by the cooling-min-level and cooling-max-level
|
||||
properties) should be defined in a particular device's binding.
|
||||
For more examples of cooling devices, refer to the example sections below.
|
||||
|
||||
Required properties:
|
||||
- cooling-min-state: An integer indicating the smallest
|
||||
Type: unsigned cooling state accepted. Typically 0.
|
||||
Size: one cell
|
||||
|
||||
- cooling-max-state: An integer indicating the largest
|
||||
Type: unsigned cooling state accepted.
|
||||
Size: one cell
|
||||
|
||||
- #cooling-cells: Used to provide cooling device specific information
|
||||
Type: unsigned while referring to it. Must be at least 2, in order
|
||||
Size: one cell to specify minimum and maximum cooling state used
|
||||
|
@ -77,6 +69,15 @@ Required properties:
|
|||
See Cooling device maps section below for more details
|
||||
on how consumers refer to cooling devices.
|
||||
|
||||
Optional properties:
|
||||
- cooling-min-level: An integer indicating the smallest
|
||||
Type: unsigned cooling state accepted. Typically 0.
|
||||
Size: one cell
|
||||
|
||||
- cooling-max-level: An integer indicating the largest
|
||||
Type: unsigned cooling state accepted.
|
||||
Size: one cell
|
||||
|
||||
* Trip points
|
||||
|
||||
The trip node is a node to describe a point in the temperature domain
|
||||
|
@ -225,8 +226,8 @@ cpus {
|
|||
396000 950000
|
||||
198000 850000
|
||||
>;
|
||||
cooling-min-state = <0>;
|
||||
cooling-max-state = <3>;
|
||||
cooling-min-level = <0>;
|
||||
cooling-max-level = <3>;
|
||||
#cooling-cells = <2>; /* min followed by max */
|
||||
};
|
||||
...
|
||||
|
@ -240,8 +241,8 @@ cpus {
|
|||
*/
|
||||
fan0: fan@0x48 {
|
||||
...
|
||||
cooling-min-state = <0>;
|
||||
cooling-max-state = <9>;
|
||||
cooling-min-level = <0>;
|
||||
cooling-max-level = <9>;
|
||||
#cooling-cells = <2>; /* min followed by max */
|
||||
};
|
||||
};
|
||||
|
|
|
@ -6,6 +6,7 @@ Required properties:
|
|||
"lsi,zevio-usb"
|
||||
"qcom,ci-hdrc"
|
||||
"chipidea,usb2"
|
||||
"xlnx,zynq-usb-2.20a"
|
||||
- reg: base address and length of the registers
|
||||
- interrupts: interrupt for the USB controller
|
||||
|
||||
|
|
|
@ -203,6 +203,7 @@ sitronix Sitronix Technology Corporation
|
|||
skyworks Skyworks Solutions, Inc.
|
||||
smsc Standard Microsystems Corporation
|
||||
snps Synopsys, Inc.
|
||||
socionext Socionext Inc.
|
||||
solidrun SolidRun
|
||||
solomon Solomon Systech Limited
|
||||
sony Sony Corporation
|
||||
|
|
|
@ -0,0 +1,96 @@
|
|||
Virtual Routing and Forwarding (VRF)
|
||||
====================================
|
||||
The VRF device combined with ip rules provides the ability to create virtual
|
||||
routing and forwarding domains (aka VRFs, VRF-lite to be specific) in the
|
||||
Linux network stack. One use case is the multi-tenancy problem where each
|
||||
tenant has their own unique routing tables and in the very least need
|
||||
different default gateways.
|
||||
|
||||
Processes can be "VRF aware" by binding a socket to the VRF device. Packets
|
||||
through the socket then use the routing table associated with the VRF
|
||||
device. An important feature of the VRF device implementation is that it
|
||||
impacts only Layer 3 and above so L2 tools (e.g., LLDP) are not affected
|
||||
(ie., they do not need to be run in each VRF). The design also allows
|
||||
the use of higher priority ip rules (Policy Based Routing, PBR) to take
|
||||
precedence over the VRF device rules directing specific traffic as desired.
|
||||
|
||||
In addition, VRF devices allow VRFs to be nested within namespaces. For
|
||||
example network namespaces provide separation of network interfaces at L1
|
||||
(Layer 1 separation), VLANs on the interfaces within a namespace provide
|
||||
L2 separation and then VRF devices provide L3 separation.
|
||||
|
||||
Design
|
||||
------
|
||||
A VRF device is created with an associated route table. Network interfaces
|
||||
are then enslaved to a VRF device:
|
||||
|
||||
+-----------------------------+
|
||||
| vrf-blue | ===> route table 10
|
||||
+-----------------------------+
|
||||
| | |
|
||||
+------+ +------+ +-------------+
|
||||
| eth1 | | eth2 | ... | bond1 |
|
||||
+------+ +------+ +-------------+
|
||||
| |
|
||||
+------+ +------+
|
||||
| eth8 | | eth9 |
|
||||
+------+ +------+
|
||||
|
||||
Packets received on an enslaved device and are switched to the VRF device
|
||||
using an rx_handler which gives the impression that packets flow through
|
||||
the VRF device. Similarly on egress routing rules are used to send packets
|
||||
to the VRF device driver before getting sent out the actual interface. This
|
||||
allows tcpdump on a VRF device to capture all packets into and out of the
|
||||
VRF as a whole.[1] Similiarly, netfilter [2] and tc rules can be applied
|
||||
using the VRF device to specify rules that apply to the VRF domain as a whole.
|
||||
|
||||
[1] Packets in the forwarded state do not flow through the device, so those
|
||||
packets are not seen by tcpdump. Will revisit this limitation in a
|
||||
future release.
|
||||
|
||||
[2] Iptables on ingress is limited to NF_INET_PRE_ROUTING only with skb->dev
|
||||
set to real ingress device and egress is limited to NF_INET_POST_ROUTING.
|
||||
Will revisit this limitation in a future release.
|
||||
|
||||
|
||||
Setup
|
||||
-----
|
||||
1. VRF device is created with an association to a FIB table.
|
||||
e.g, ip link add vrf-blue type vrf table 10
|
||||
ip link set dev vrf-blue up
|
||||
|
||||
2. Rules are added that send lookups to the associated FIB table when the
|
||||
iif or oif is the VRF device. e.g.,
|
||||
ip ru add oif vrf-blue table 10
|
||||
ip ru add iif vrf-blue table 10
|
||||
|
||||
Set the default route for the table (and hence default route for the VRF).
|
||||
e.g, ip route add table 10 prohibit default
|
||||
|
||||
3. Enslave L3 interfaces to a VRF device.
|
||||
e.g, ip link set dev eth1 master vrf-blue
|
||||
|
||||
Local and connected routes for enslaved devices are automatically moved to
|
||||
the table associated with VRF device. Any additional routes depending on
|
||||
the enslaved device will need to be reinserted following the enslavement.
|
||||
|
||||
4. Additional VRF routes are added to associated table.
|
||||
e.g., ip route add table 10 ...
|
||||
|
||||
|
||||
Applications
|
||||
------------
|
||||
Applications that are to work within a VRF need to bind their socket to the
|
||||
VRF device:
|
||||
|
||||
setsockopt(sd, SOL_SOCKET, SO_BINDTODEVICE, dev, strlen(dev)+1);
|
||||
|
||||
or to specify the output device using cmsg and IP_PKTINFO.
|
||||
|
||||
|
||||
Limitations
|
||||
-----------
|
||||
VRF device currently only works for IPv4. Support for IPv6 is under development.
|
||||
|
||||
Index of original ingress interface is not available via cmsg. Will address
|
||||
soon.
|
|
@ -54,13 +54,15 @@ default_qdisc
|
|||
--------------
|
||||
|
||||
The default queuing discipline to use for network devices. This allows
|
||||
overriding the default queue discipline of pfifo_fast with an
|
||||
alternative. Since the default queuing discipline is created with the
|
||||
no additional parameters so is best suited to queuing disciplines that
|
||||
work well without configuration like stochastic fair queue (sfq),
|
||||
CoDel (codel) or fair queue CoDel (fq_codel). Don't use queuing disciplines
|
||||
like Hierarchical Token Bucket or Deficit Round Robin which require setting
|
||||
up classes and bandwidths.
|
||||
overriding the default of pfifo_fast with an alternative. Since the default
|
||||
queuing discipline is created without additional parameters so is best suited
|
||||
to queuing disciplines that work well without configuration like stochastic
|
||||
fair queue (sfq), CoDel (codel) or fair queue CoDel (fq_codel). Don't use
|
||||
queuing disciplines like Hierarchical Token Bucket or Deficit Round Robin
|
||||
which require setting up classes and bandwidths. Note that physical multiqueue
|
||||
interfaces still use mq as root qdisc, which in turn uses this default for its
|
||||
leaves. Virtual devices (like e.g. lo or veth) ignore this setting and instead
|
||||
default to noqueue.
|
||||
Default: pfifo_fast
|
||||
|
||||
busy_read
|
||||
|
|
|
@ -4,7 +4,7 @@ Power allocator governor tunables
|
|||
Trip points
|
||||
-----------
|
||||
|
||||
The governor requires the following two passive trip points:
|
||||
The governor works optimally with the following two passive trip points:
|
||||
|
||||
1. "switch on" trip point: temperature above which the governor
|
||||
control loop starts operating. This is the first passive trip
|
||||
|
|
29
MAINTAINERS
29
MAINTAINERS
|
@ -615,9 +615,8 @@ F: Documentation/hwmon/fam15h_power
|
|||
F: drivers/hwmon/fam15h_power.c
|
||||
|
||||
AMD GEODE CS5536 USB DEVICE CONTROLLER DRIVER
|
||||
M: Thomas Dahlmann <dahlmann.thomas@arcor.de>
|
||||
L: linux-geode@lists.infradead.org (moderated for non-subscribers)
|
||||
S: Supported
|
||||
S: Orphan
|
||||
F: drivers/usb/gadget/udc/amd5536udc.*
|
||||
|
||||
AMD GEODE PROCESSOR/CHIPSET SUPPORT
|
||||
|
@ -808,6 +807,13 @@ S: Maintained
|
|||
F: drivers/video/fbdev/arcfb.c
|
||||
F: drivers/video/fbdev/core/fb_defio.c
|
||||
|
||||
ARCNET NETWORK LAYER
|
||||
M: Michael Grzeschik <m.grzeschik@pengutronix.de>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/net/arcnet/
|
||||
F: include/uapi/linux/if_arcnet.h
|
||||
|
||||
ARM MFM AND FLOPPY DRIVERS
|
||||
M: Ian Molton <spyro@f2s.com>
|
||||
S: Maintained
|
||||
|
@ -3394,7 +3400,6 @@ F: drivers/staging/dgnc/
|
|||
|
||||
DIGI EPCA PCI PRODUCTS
|
||||
M: Lidza Louina <lidza.louina@gmail.com>
|
||||
M: Mark Hounschell <markh@compro.net>
|
||||
M: Daeseok Youn <daeseok.youn@gmail.com>
|
||||
L: driverdev-devel@linuxdriverproject.org
|
||||
S: Maintained
|
||||
|
@ -8500,7 +8505,6 @@ F: Documentation/networking/LICENSE.qla3xxx
|
|||
F: drivers/net/ethernet/qlogic/qla3xxx.*
|
||||
|
||||
QLOGIC QLCNIC (1/10)Gb ETHERNET DRIVER
|
||||
M: Shahed Shaikh <shahed.shaikh@qlogic.com>
|
||||
M: Dept-GELinuxNICDev@qlogic.com
|
||||
L: netdev@vger.kernel.org
|
||||
S: Supported
|
||||
|
@ -9904,8 +9908,8 @@ F: drivers/staging/media/lirc/
|
|||
STAGING - LUSTRE PARALLEL FILESYSTEM
|
||||
M: Oleg Drokin <oleg.drokin@intel.com>
|
||||
M: Andreas Dilger <andreas.dilger@intel.com>
|
||||
L: HPDD-discuss@lists.01.org (moderated for non-subscribers)
|
||||
W: http://lustre.opensfs.org/
|
||||
L: lustre-devel@lists.lustre.org (moderated for non-subscribers)
|
||||
W: http://wiki.lustre.org/
|
||||
S: Maintained
|
||||
F: drivers/staging/lustre
|
||||
|
||||
|
@ -10338,6 +10342,16 @@ F: include/uapi/linux/thermal.h
|
|||
F: include/linux/cpu_cooling.h
|
||||
F: Documentation/devicetree/bindings/thermal/
|
||||
|
||||
THERMAL/CPU_COOLING
|
||||
M: Amit Daniel Kachhap <amit.kachhap@gmail.com>
|
||||
M: Viresh Kumar <viresh.kumar@linaro.org>
|
||||
M: Javi Merino <javi.merino@arm.com>
|
||||
L: linux-pm@vger.kernel.org
|
||||
S: Supported
|
||||
F: Documentation/thermal/cpu-cooling-api.txt
|
||||
F: drivers/thermal/cpu_cooling.c
|
||||
F: include/linux/cpu_cooling.h
|
||||
|
||||
THINGM BLINK(1) USB RGB LED DRIVER
|
||||
M: Vivien Didelot <vivien.didelot@savoirfairelinux.com>
|
||||
S: Maintained
|
||||
|
@ -11187,7 +11201,7 @@ F: drivers/vlynq/vlynq.c
|
|||
F: include/linux/vlynq.h
|
||||
|
||||
VME SUBSYSTEM
|
||||
M: Martyn Welch <martyn.welch@ge.com>
|
||||
M: Martyn Welch <martyn@welchs.me.uk>
|
||||
M: Manohar Vanga <manohar.vanga@gmail.com>
|
||||
M: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
L: devel@driverdev.osuosl.org
|
||||
|
@ -11252,6 +11266,7 @@ L: netdev@vger.kernel.org
|
|||
S: Maintained
|
||||
F: drivers/net/vrf.c
|
||||
F: include/net/vrf.h
|
||||
F: Documentation/networking/vrf.txt
|
||||
|
||||
VT1211 HARDWARE MONITOR DRIVER
|
||||
M: Juerg Haefliger <juergh@gmail.com>
|
||||
|
|
2
Makefile
2
Makefile
|
@ -1,7 +1,7 @@
|
|||
VERSION = 4
|
||||
PATCHLEVEL = 3
|
||||
SUBLEVEL = 0
|
||||
EXTRAVERSION = -rc2
|
||||
EXTRAVERSION = -rc3
|
||||
NAME = Hurr durr I'ma sheep
|
||||
|
||||
# *DOCUMENTATION*
|
||||
|
|
|
@ -242,7 +242,12 @@ pci_restore_srm_config(void)
|
|||
|
||||
void pcibios_fixup_bus(struct pci_bus *bus)
|
||||
{
|
||||
struct pci_dev *dev;
|
||||
struct pci_dev *dev = bus->self;
|
||||
|
||||
if (pci_has_flag(PCI_PROBE_ONLY) && dev &&
|
||||
(dev->class >> 8) == PCI_CLASS_BRIDGE_PCI) {
|
||||
pci_read_bridge_bases(bus);
|
||||
}
|
||||
|
||||
list_for_each_entry(dev, &bus->devices, bus_list) {
|
||||
pdev_save_srm_config(dev);
|
||||
|
|
|
@ -252,10 +252,10 @@ vio_reg: regulator@1 {
|
|||
};
|
||||
|
||||
vdd1_reg: regulator@2 {
|
||||
/* VDD_MPU voltage limits 0.95V - 1.26V with +/-4% tolerance */
|
||||
/* VDD_MPU voltage limits 0.95V - 1.325V with +/-4% tolerance */
|
||||
regulator-name = "vdd_mpu";
|
||||
regulator-min-microvolt = <912500>;
|
||||
regulator-max-microvolt = <1312500>;
|
||||
regulator-max-microvolt = <1378000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
|
|
|
@ -98,13 +98,6 @@ extcon_usb1: extcon_usb1 {
|
|||
pinctrl-0 = <&extcon_usb1_pins>;
|
||||
};
|
||||
|
||||
extcon_usb2: extcon_usb2 {
|
||||
compatible = "linux,extcon-usb-gpio";
|
||||
id-gpio = <&gpio7 24 GPIO_ACTIVE_HIGH>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&extcon_usb2_pins>;
|
||||
};
|
||||
|
||||
hdmi0: connector {
|
||||
compatible = "hdmi-connector";
|
||||
label = "hdmi";
|
||||
|
@ -326,12 +319,6 @@ extcon_usb1_pins: extcon_usb1_pins {
|
|||
>;
|
||||
};
|
||||
|
||||
extcon_usb2_pins: extcon_usb2_pins {
|
||||
pinctrl-single,pins = <
|
||||
0x3e8 (PIN_INPUT_PULLUP | MUX_MODE14) /* uart1_ctsn.gpio7_24 */
|
||||
>;
|
||||
};
|
||||
|
||||
tpd12s015_pins: pinmux_tpd12s015_pins {
|
||||
pinctrl-single,pins = <
|
||||
0x3b0 (PIN_OUTPUT | MUX_MODE14) /* gpio7_10 CT_CP_HPD */
|
||||
|
@ -432,7 +419,7 @@ ldo2_reg: ldo2 {
|
|||
};
|
||||
|
||||
ldo3_reg: ldo3 {
|
||||
/* VDDA_1V8_PHY */
|
||||
/* VDDA_1V8_PHYA */
|
||||
regulator-name = "ldo3";
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <1800000>;
|
||||
|
@ -440,6 +427,15 @@ ldo3_reg: ldo3 {
|
|||
regulator-boot-on;
|
||||
};
|
||||
|
||||
ldo4_reg: ldo4 {
|
||||
/* VDDA_1V8_PHYB */
|
||||
regulator-name = "ldo4";
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <1800000>;
|
||||
regulator-always-on;
|
||||
regulator-boot-on;
|
||||
};
|
||||
|
||||
ldo9_reg: ldo9 {
|
||||
/* VDD_RTC */
|
||||
regulator-name = "ldo9";
|
||||
|
@ -495,6 +491,14 @@ tps659038_gpio: tps659038_gpio {
|
|||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
};
|
||||
|
||||
extcon_usb2: tps659038_usb {
|
||||
compatible = "ti,palmas-usb-vid";
|
||||
ti,enable-vbus-detection;
|
||||
ti,enable-id-detection;
|
||||
id-gpios = <&gpio7 24 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
tmp102: tmp102@48 {
|
||||
|
@ -517,7 +521,8 @@ &i2c3 {
|
|||
mcp_rtc: rtc@6f {
|
||||
compatible = "microchip,mcp7941x";
|
||||
reg = <0x6f>;
|
||||
interrupts = <GIC_SPI 2 IRQ_TYPE_EDGE_RISING>; /* IRQ_SYS_1N */
|
||||
interrupts-extended = <&crossbar_mpu GIC_SPI 2 IRQ_TYPE_EDGE_RISING>,
|
||||
<&dra7_pmx_core 0x424>;
|
||||
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&mcp79410_pins_default>;
|
||||
|
@ -579,7 +584,6 @@ &mmc1 {
|
|||
pinctrl-0 = <&mmc1_pins_default>;
|
||||
|
||||
vmmc-supply = <&ldo1_reg>;
|
||||
vmmc_aux-supply = <&vdd_3v3>;
|
||||
bus-width = <4>;
|
||||
cd-gpios = <&gpio6 27 0>; /* gpio 219 */
|
||||
};
|
||||
|
@ -623,6 +627,14 @@ &omap_dwc3_2 {
|
|||
};
|
||||
|
||||
&usb2 {
|
||||
/*
|
||||
* Stand alone usage is peripheral only.
|
||||
* However, with some resistor modifications
|
||||
* this port can be used via expansion connectors
|
||||
* as "host" or "dual-role". If so, provide
|
||||
* the necessary dr_mode override in the expansion
|
||||
* board's DT.
|
||||
*/
|
||||
dr_mode = "peripheral";
|
||||
};
|
||||
|
||||
|
@ -681,7 +693,7 @@ &dss {
|
|||
|
||||
&hdmi {
|
||||
status = "ok";
|
||||
vdda-supply = <&ldo3_reg>;
|
||||
vdda-supply = <&ldo4_reg>;
|
||||
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&hdmi_pins>;
|
||||
|
|
|
@ -19,10 +19,10 @@ memory {
|
|||
|
||||
&cpsw_emac0 {
|
||||
phy_id = <&davinci_mdio>, <0>;
|
||||
phy-mode = "mii";
|
||||
phy-mode = "rgmii";
|
||||
};
|
||||
|
||||
&cpsw_emac1 {
|
||||
phy_id = <&davinci_mdio>, <1>;
|
||||
phy-mode = "mii";
|
||||
phy-mode = "rgmii";
|
||||
};
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
#include "dm814x.dtsi"
|
||||
|
||||
/ {
|
||||
model = "DM8148 EVM";
|
||||
model = "HP t410 Smart Zero Client";
|
||||
compatible = "hp,t410", "ti,dm8148";
|
||||
|
||||
memory {
|
||||
|
@ -19,10 +19,10 @@ memory {
|
|||
|
||||
&cpsw_emac0 {
|
||||
phy_id = <&davinci_mdio>, <0>;
|
||||
phy-mode = "mii";
|
||||
phy-mode = "rgmii";
|
||||
};
|
||||
|
||||
&cpsw_emac1 {
|
||||
phy_id = <&davinci_mdio>, <1>;
|
||||
phy-mode = "mii";
|
||||
phy-mode = "rgmii";
|
||||
};
|
||||
|
|
|
@ -181,9 +181,9 @@ timer3: timer@42000 {
|
|||
ti,hwmods = "timer3";
|
||||
};
|
||||
|
||||
control: control@160000 {
|
||||
control: control@140000 {
|
||||
compatible = "ti,dm814-scm", "simple-bus";
|
||||
reg = <0x160000 0x16d000>;
|
||||
reg = <0x140000 0x16d000>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges = <0 0x160000 0x16d000>;
|
||||
|
@ -321,9 +321,9 @@ cpsw_emac1: slave@4a100300 {
|
|||
mac-address = [ 00 00 00 00 00 00 ];
|
||||
};
|
||||
|
||||
phy_sel: cpsw-phy-sel@0x48160650 {
|
||||
phy_sel: cpsw-phy-sel@48140650 {
|
||||
compatible = "ti,am3352-cpsw-phy-sel";
|
||||
reg= <0x48160650 0x4>;
|
||||
reg= <0x48140650 0x4>;
|
||||
reg-names = "gmii-sel";
|
||||
};
|
||||
};
|
||||
|
|
|
@ -120,9 +120,10 @@ scm_conf: scm_conf@0 {
|
|||
reg = <0x0 0x1400>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges = <0 0x0 0x1400>;
|
||||
|
||||
pbias_regulator: pbias_regulator {
|
||||
compatible = "ti,pbias-omap";
|
||||
compatible = "ti,pbias-dra7", "ti,pbias-omap";
|
||||
reg = <0xe00 0x4>;
|
||||
syscon = <&scm_conf>;
|
||||
pbias_mmc_reg: pbias_mmc_omap5 {
|
||||
|
@ -1417,7 +1418,7 @@ crossbar_mpu: crossbar@4a002a48 {
|
|||
ti,irqs-safe-map = <0>;
|
||||
};
|
||||
|
||||
mac: ethernet@4a100000 {
|
||||
mac: ethernet@48484000 {
|
||||
compatible = "ti,dra7-cpsw","ti,cpsw";
|
||||
ti,hwmods = "gmac";
|
||||
clocks = <&dpll_gmac_ck>, <&gmac_gmii_ref_clk_div>;
|
||||
|
|
|
@ -56,6 +56,7 @@ scm_conf: scm_conf@270 {
|
|||
reg = <0x270 0x240>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges = <0 0x270 0x240>;
|
||||
|
||||
scm_clocks: clocks {
|
||||
#address-cells = <1>;
|
||||
|
@ -63,7 +64,7 @@ scm_clocks: clocks {
|
|||
};
|
||||
|
||||
pbias_regulator: pbias_regulator {
|
||||
compatible = "ti,pbias-omap";
|
||||
compatible = "ti,pbias-omap2", "ti,pbias-omap";
|
||||
reg = <0x230 0x4>;
|
||||
syscon = <&scm_conf>;
|
||||
pbias_mmc_reg: pbias_mmc_omap2430 {
|
||||
|
|
|
@ -202,7 +202,7 @@ uart3_pins: pinmux_uart3_pins {
|
|||
|
||||
tfp410_pins: pinmux_tfp410_pins {
|
||||
pinctrl-single,pins = <
|
||||
0x194 (PIN_OUTPUT | MUX_MODE4) /* hdq_sio.gpio_170 */
|
||||
0x196 (PIN_OUTPUT | MUX_MODE4) /* hdq_sio.gpio_170 */
|
||||
>;
|
||||
};
|
||||
|
||||
|
|
|
@ -78,12 +78,6 @@ mmc2_pins: pinmux_mmc2_pins {
|
|||
>;
|
||||
};
|
||||
|
||||
smsc9221_pins: pinmux_smsc9221_pins {
|
||||
pinctrl-single,pins = <
|
||||
0x1a2 (PIN_INPUT | MUX_MODE4) /* mcspi1_cs2.gpio_176 */
|
||||
>;
|
||||
};
|
||||
|
||||
i2c1_pins: pinmux_i2c1_pins {
|
||||
pinctrl-single,pins = <
|
||||
0x18a (PIN_INPUT | MUX_MODE0) /* i2c1_scl.i2c1_scl */
|
||||
|
|
|
@ -156,6 +156,12 @@ OMAP3_CORE1_IOPAD(0x2178, PIN_OUTPUT | MUX_MODE0) /* uart2_tx.uart2_tx */
|
|||
OMAP3_CORE1_IOPAD(0x217a, PIN_INPUT | MUX_MODE0) /* uart2_rx.uart2_rx */
|
||||
>;
|
||||
};
|
||||
|
||||
smsc9221_pins: pinmux_smsc9221_pins {
|
||||
pinctrl-single,pins = <
|
||||
OMAP3_CORE1_IOPAD(0x21d2, PIN_INPUT | MUX_MODE4) /* mcspi1_cs2.gpio_176 */
|
||||
>;
|
||||
};
|
||||
};
|
||||
|
||||
&omap3_pmx_core2 {
|
||||
|
|
|
@ -113,10 +113,22 @@ omap3_pmx_core: pinmux@30 {
|
|||
};
|
||||
|
||||
scm_conf: scm_conf@270 {
|
||||
compatible = "syscon";
|
||||
compatible = "syscon", "simple-bus";
|
||||
reg = <0x270 0x330>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges = <0 0x270 0x330>;
|
||||
|
||||
pbias_regulator: pbias_regulator {
|
||||
compatible = "ti,pbias-omap3", "ti,pbias-omap";
|
||||
reg = <0x2b0 0x4>;
|
||||
syscon = <&scm_conf>;
|
||||
pbias_mmc_reg: pbias_mmc_omap2430 {
|
||||
regulator-name = "pbias_mmc_omap2430";
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <3000000>;
|
||||
};
|
||||
};
|
||||
|
||||
scm_clocks: clocks {
|
||||
#address-cells = <1>;
|
||||
|
@ -202,17 +214,6 @@ sdma: dma-controller@48056000 {
|
|||
dma-requests = <96>;
|
||||
};
|
||||
|
||||
pbias_regulator: pbias_regulator {
|
||||
compatible = "ti,pbias-omap";
|
||||
reg = <0x2b0 0x4>;
|
||||
syscon = <&scm_conf>;
|
||||
pbias_mmc_reg: pbias_mmc_omap2430 {
|
||||
regulator-name = "pbias_mmc_omap2430";
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <3000000>;
|
||||
};
|
||||
};
|
||||
|
||||
gpio1: gpio@48310000 {
|
||||
compatible = "ti,omap3-gpio";
|
||||
reg = <0x48310000 0x200>;
|
||||
|
|
|
@ -196,9 +196,10 @@ omap4_padconf_global: omap4_padconf_global@5a0 {
|
|||
reg = <0x5a0 0x170>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges = <0 0x5a0 0x170>;
|
||||
|
||||
pbias_regulator: pbias_regulator {
|
||||
compatible = "ti,pbias-omap";
|
||||
compatible = "ti,pbias-omap4", "ti,pbias-omap";
|
||||
reg = <0x60 0x4>;
|
||||
syscon = <&omap4_padconf_global>;
|
||||
pbias_mmc_reg: pbias_mmc_omap4 {
|
||||
|
|
|
@ -174,8 +174,8 @@ i2c1_pins: pinmux_i2c1_pins {
|
|||
|
||||
i2c5_pins: pinmux_i2c5_pins {
|
||||
pinctrl-single,pins = <
|
||||
0x184 (PIN_INPUT | MUX_MODE0) /* i2c5_scl */
|
||||
0x186 (PIN_INPUT | MUX_MODE0) /* i2c5_sda */
|
||||
0x186 (PIN_INPUT | MUX_MODE0) /* i2c5_scl */
|
||||
0x188 (PIN_INPUT | MUX_MODE0) /* i2c5_sda */
|
||||
>;
|
||||
};
|
||||
|
||||
|
|
|
@ -185,9 +185,10 @@ omap5_padconf_global: omap5_padconf_global@5a0 {
|
|||
reg = <0x5a0 0xec>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges = <0 0x5a0 0xec>;
|
||||
|
||||
pbias_regulator: pbias_regulator {
|
||||
compatible = "ti,pbias-omap";
|
||||
compatible = "ti,pbias-omap5", "ti,pbias-omap";
|
||||
reg = <0x60 0x4>;
|
||||
syscon = <&omap5_padconf_global>;
|
||||
pbias_mmc_reg: pbias_mmc_omap5 {
|
||||
|
|
|
@ -158,6 +158,7 @@ &emmc {
|
|||
};
|
||||
|
||||
&hdmi {
|
||||
ddc-i2c-bus = <&i2c5>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
|
|
|
@ -103,7 +103,7 @@ sti-tvout@8d08000 {
|
|||
<&clk_s_d0_quadfs 0>,
|
||||
<&clk_s_d2_quadfs 0>,
|
||||
<&clk_s_d2_quadfs 0>;
|
||||
ranges;
|
||||
};
|
||||
|
||||
sti-hdmi@8d04000 {
|
||||
compatible = "st,stih407-hdmi";
|
||||
|
@ -129,7 +129,6 @@ sti-hdmi@8d04000 {
|
|||
reset-names = "hdmi";
|
||||
resets = <&softreset STIH407_HDMI_TX_PHY_SOFTRESET>;
|
||||
ddc = <&hdmiddc>;
|
||||
|
||||
};
|
||||
|
||||
sti-hda@8d02000 {
|
||||
|
@ -148,4 +147,3 @@ sti-hda@8d02000 {
|
|||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
@ -178,7 +178,7 @@ sti-tvout@8d08000 {
|
|||
<&clk_s_d0_quadfs 0>,
|
||||
<&clk_s_d2_quadfs 0>,
|
||||
<&clk_s_d2_quadfs 0>;
|
||||
ranges;
|
||||
};
|
||||
|
||||
sti-hdmi@8d04000 {
|
||||
compatible = "st,stih407-hdmi";
|
||||
|
@ -204,7 +204,6 @@ sti-hdmi@8d04000 {
|
|||
reset-names = "hdmi";
|
||||
resets = <&softreset STIH407_HDMI_TX_PHY_SOFTRESET>;
|
||||
ddc = <&hdmiddc>;
|
||||
|
||||
};
|
||||
|
||||
sti-hda@8d02000 {
|
||||
|
@ -221,7 +220,6 @@ sti-hda@8d02000 {
|
|||
<&clk_s_d2_quadfs 1>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
bdisp0:bdisp@9f10000 {
|
||||
compatible = "st,stih407-bdisp";
|
||||
|
|
|
@ -240,7 +240,8 @@ CONFIG_SSI_PROTOCOL=m
|
|||
CONFIG_PINCTRL_SINGLE=y
|
||||
CONFIG_DEBUG_GPIO=y
|
||||
CONFIG_GPIO_SYSFS=y
|
||||
CONFIG_GPIO_PCF857X=m
|
||||
CONFIG_GPIO_PCA953X=m
|
||||
CONFIG_GPIO_PCF857X=y
|
||||
CONFIG_GPIO_TWL4030=y
|
||||
CONFIG_GPIO_PALMAS=y
|
||||
CONFIG_W1=m
|
||||
|
@ -350,6 +351,8 @@ CONFIG_USB_MUSB_HDRC=m
|
|||
CONFIG_USB_MUSB_OMAP2PLUS=m
|
||||
CONFIG_USB_MUSB_AM35X=m
|
||||
CONFIG_USB_MUSB_DSPS=m
|
||||
CONFIG_USB_INVENTRA_DMA=y
|
||||
CONFIG_USB_TI_CPPI41_DMA=y
|
||||
CONFIG_USB_DWC3=m
|
||||
CONFIG_USB_TEST=m
|
||||
CONFIG_AM335X_PHY_USB=y
|
||||
|
|
|
@ -33,6 +33,7 @@
|
|||
#define KVM_PRIVATE_MEM_SLOTS 4
|
||||
#define KVM_COALESCED_MMIO_PAGE_OFFSET 1
|
||||
#define KVM_HAVE_ONE_REG
|
||||
#define KVM_HALT_POLL_NS_DEFAULT 500000
|
||||
|
||||
#define KVM_VCPU_MAX_FEATURES 2
|
||||
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
* This may need to be greater than __NR_last_syscall+1 in order to
|
||||
* account for the padding in the syscall table
|
||||
*/
|
||||
#define __NR_syscalls (388)
|
||||
#define __NR_syscalls (392)
|
||||
|
||||
/*
|
||||
* *NOTE*: This is a ghost syscall private to the kernel. Only the
|
||||
|
|
|
@ -414,6 +414,8 @@
|
|||
#define __NR_memfd_create (__NR_SYSCALL_BASE+385)
|
||||
#define __NR_bpf (__NR_SYSCALL_BASE+386)
|
||||
#define __NR_execveat (__NR_SYSCALL_BASE+387)
|
||||
#define __NR_userfaultfd (__NR_SYSCALL_BASE+388)
|
||||
#define __NR_membarrier (__NR_SYSCALL_BASE+389)
|
||||
|
||||
/*
|
||||
* The following SWIs are ARM private.
|
||||
|
|
|
@ -397,6 +397,8 @@
|
|||
/* 385 */ CALL(sys_memfd_create)
|
||||
CALL(sys_bpf)
|
||||
CALL(sys_execveat)
|
||||
CALL(sys_userfaultfd)
|
||||
CALL(sys_membarrier)
|
||||
#ifndef syscalls_counted
|
||||
.equ syscalls_padding, ((NR_syscalls + 3) & ~3) - NR_syscalls
|
||||
#define syscalls_counted
|
||||
|
|
|
@ -44,10 +44,11 @@ config SOC_OMAP5
|
|||
select ARM_CPU_SUSPEND if PM
|
||||
select ARM_GIC
|
||||
select HAVE_ARM_SCU if SMP
|
||||
select HAVE_ARM_TWD if SMP
|
||||
select HAVE_ARM_ARCH_TIMER
|
||||
select ARM_ERRATA_798181 if SMP
|
||||
select OMAP_INTERCONNECT
|
||||
select OMAP_INTERCONNECT_BARRIER
|
||||
select PM_OPP if PM
|
||||
|
||||
config SOC_AM33XX
|
||||
bool "TI AM33XX"
|
||||
|
@ -70,10 +71,13 @@ config SOC_DRA7XX
|
|||
select ARCH_OMAP2PLUS
|
||||
select ARM_CPU_SUSPEND if PM
|
||||
select ARM_GIC
|
||||
select HAVE_ARM_SCU if SMP
|
||||
select HAVE_ARM_ARCH_TIMER
|
||||
select IRQ_CROSSBAR
|
||||
select ARM_ERRATA_798181 if SMP
|
||||
select OMAP_INTERCONNECT
|
||||
select OMAP_INTERCONNECT_BARRIER
|
||||
select PM_OPP if PM
|
||||
|
||||
config ARCH_OMAP2PLUS
|
||||
bool
|
||||
|
|
|
@ -20,13 +20,6 @@
|
|||
|
||||
#include "common.h"
|
||||
|
||||
#if !(defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3))
|
||||
#define intc_of_init NULL
|
||||
#endif
|
||||
#ifndef CONFIG_ARCH_OMAP4
|
||||
#define gic_of_init NULL
|
||||
#endif
|
||||
|
||||
static const struct of_device_id omap_dt_match_table[] __initconst = {
|
||||
{ .compatible = "simple-bus", },
|
||||
{ .compatible = "ti,omap-infra", },
|
||||
|
|
|
@ -653,8 +653,12 @@ void __init dra7xxx_check_revision(void)
|
|||
omap_revision = DRA752_REV_ES1_0;
|
||||
break;
|
||||
case 1:
|
||||
default:
|
||||
omap_revision = DRA752_REV_ES1_1;
|
||||
break;
|
||||
case 2:
|
||||
default:
|
||||
omap_revision = DRA752_REV_ES2_0;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -674,7 +678,7 @@ void __init dra7xxx_check_revision(void)
|
|||
/* Unknown default to latest silicon rev as default*/
|
||||
pr_warn("%s: unknown idcode=0x%08x (hawkeye=0x%08x,rev=0x%x)\n",
|
||||
__func__, idcode, hawkeye, rev);
|
||||
omap_revision = DRA752_REV_ES1_1;
|
||||
omap_revision = DRA752_REV_ES2_0;
|
||||
}
|
||||
|
||||
sprintf(soc_name, "DRA%03x", omap_rev() >> 16);
|
||||
|
|
|
@ -676,6 +676,7 @@ void __init am43xx_init_early(void)
|
|||
void __init am43xx_init_late(void)
|
||||
{
|
||||
omap_common_late_init();
|
||||
omap2_clk_enable_autoidle_all();
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
@ -901,7 +901,8 @@ static int __init omap_device_late_idle(struct device *dev, void *data)
|
|||
if (od->hwmods[i]->flags & HWMOD_INIT_NO_IDLE)
|
||||
return 0;
|
||||
|
||||
if (od->_driver_status != BUS_NOTIFY_BOUND_DRIVER) {
|
||||
if (od->_driver_status != BUS_NOTIFY_BOUND_DRIVER &&
|
||||
od->_driver_status != BUS_NOTIFY_BIND_DRIVER) {
|
||||
if (od->_state == OMAP_DEVICE_STATE_ENABLED) {
|
||||
dev_warn(dev, "%s: enabled but no driver. Idling\n",
|
||||
__func__);
|
||||
|
|
|
@ -103,7 +103,8 @@ static inline void enable_omap3630_toggle_l2_on_restore(void) { }
|
|||
#define PM_OMAP4_ROM_SMP_BOOT_ERRATUM_GICD (1 << 0)
|
||||
#define PM_OMAP4_CPU_OSWR_DISABLE (1 << 1)
|
||||
|
||||
#if defined(CONFIG_PM) && defined(CONFIG_ARCH_OMAP4)
|
||||
#if defined(CONFIG_PM) && (defined(CONFIG_ARCH_OMAP4) ||\
|
||||
defined(CONFIG_SOC_OMAP5) || defined(CONFIG_SOC_DRA7XX))
|
||||
extern u16 pm44xx_errata;
|
||||
#define IS_PM44XX_ERRATUM(id) (pm44xx_errata & (id))
|
||||
#else
|
||||
|
|
|
@ -469,6 +469,8 @@ IS_OMAP_TYPE(3430, 0x3430)
|
|||
#define DRA7XX_CLASS 0x07000000
|
||||
#define DRA752_REV_ES1_0 (DRA7XX_CLASS | (0x52 << 16) | (0x10 << 8))
|
||||
#define DRA752_REV_ES1_1 (DRA7XX_CLASS | (0x52 << 16) | (0x11 << 8))
|
||||
#define DRA752_REV_ES2_0 (DRA7XX_CLASS | (0x52 << 16) | (0x20 << 8))
|
||||
#define DRA722_REV_ES1_0 (DRA7XX_CLASS | (0x22 << 16) | (0x10 << 8))
|
||||
#define DRA722_REV_ES1_0 (DRA7XX_CLASS | (0x22 << 16) | (0x10 << 8))
|
||||
|
||||
void omap2xxx_check_revision(void);
|
||||
|
|
|
@ -297,12 +297,8 @@ static int __init omap_dm_timer_init_one(struct omap_dm_timer *timer,
|
|||
if (IS_ERR(src))
|
||||
return PTR_ERR(src);
|
||||
|
||||
r = clk_set_parent(timer->fclk, src);
|
||||
if (r < 0) {
|
||||
pr_warn("%s: %s cannot set source\n", __func__, oh->name);
|
||||
clk_put(src);
|
||||
return r;
|
||||
}
|
||||
WARN(clk_set_parent(timer->fclk, src) < 0,
|
||||
"Cannot set timer parent clock, no PLL clock driver?");
|
||||
|
||||
clk_put(src);
|
||||
|
||||
|
|
|
@ -300,7 +300,7 @@ static void __init omap3_vc_init_pmic_signaling(struct voltagedomain *voltdm)
|
|||
|
||||
val = voltdm->read(OMAP3_PRM_POLCTRL_OFFSET);
|
||||
if (!(val & OMAP3430_PRM_POLCTRL_CLKREQ_POL) ||
|
||||
(val & OMAP3430_PRM_POLCTRL_CLKREQ_POL)) {
|
||||
(val & OMAP3430_PRM_POLCTRL_OFFMODE_POL)) {
|
||||
val |= OMAP3430_PRM_POLCTRL_CLKREQ_POL;
|
||||
val &= ~OMAP3430_PRM_POLCTRL_OFFMODE_POL;
|
||||
pr_debug("PM: fixing sys_clkreq and sys_off_mode polarity to 0x%x\n",
|
||||
|
|
|
@ -502,7 +502,7 @@ static void balloon3_irq_handler(struct irq_desc *desc)
|
|||
balloon3_irq_enabled;
|
||||
do {
|
||||
struct irq_data *d = irq_desc_get_irq_data(desc);
|
||||
struct irq_chip *chip = irq_data_get_chip(d);
|
||||
struct irq_chip *chip = irq_desc_get_chip(desc);
|
||||
unsigned int irq;
|
||||
|
||||
/* clear useless edge notification */
|
||||
|
|
|
@ -43,6 +43,13 @@
|
|||
* 0xf6200000..0xf6201000
|
||||
*/
|
||||
|
||||
/*
|
||||
* DFI Bus for NAND, PXA3xx only
|
||||
*/
|
||||
#define NAND_PHYS 0x43100000
|
||||
#define NAND_VIRT IOMEM(0xf6300000)
|
||||
#define NAND_SIZE 0x00100000
|
||||
|
||||
/*
|
||||
* Internal Memory Controller (PXA27x and later)
|
||||
*/
|
||||
|
|
|
@ -47,6 +47,13 @@ extern void __init pxa_dt_irq_init(int (*fn)(struct irq_data *, unsigned int));
|
|||
#define ISRAM_START 0x5c000000
|
||||
#define ISRAM_SIZE SZ_256K
|
||||
|
||||
/*
|
||||
* NAND NFC: DFI bus arbitration subset
|
||||
*/
|
||||
#define NDCR (*(volatile u32 __iomem*)(NAND_VIRT + 0))
|
||||
#define NDCR_ND_ARB_EN (1 << 12)
|
||||
#define NDCR_ND_ARB_CNTL (1 << 19)
|
||||
|
||||
static void __iomem *sram;
|
||||
static unsigned long wakeup_src;
|
||||
|
||||
|
@ -362,7 +369,12 @@ static struct map_desc pxa3xx_io_desc[] __initdata = {
|
|||
.pfn = __phys_to_pfn(PXA3XX_SMEMC_BASE),
|
||||
.length = SMEMC_SIZE,
|
||||
.type = MT_DEVICE
|
||||
}
|
||||
}, {
|
||||
.virtual = (unsigned long)NAND_VIRT,
|
||||
.pfn = __phys_to_pfn(NAND_PHYS),
|
||||
.length = NAND_SIZE,
|
||||
.type = MT_DEVICE
|
||||
},
|
||||
};
|
||||
|
||||
void __init pxa3xx_map_io(void)
|
||||
|
@ -419,6 +431,13 @@ static int __init pxa3xx_init(void)
|
|||
*/
|
||||
ASCR &= ~(ASCR_RDH | ASCR_D1S | ASCR_D2S | ASCR_D3S);
|
||||
|
||||
/*
|
||||
* Disable DFI bus arbitration, to prevent a system bus lock if
|
||||
* somebody disables the NAND clock (unused clock) while this
|
||||
* bit remains set.
|
||||
*/
|
||||
NDCR = (NDCR & ~NDCR_ND_ARB_EN) | NDCR_ND_ARB_CNTL;
|
||||
|
||||
if ((ret = pxa_init_dma(IRQ_DMA, 32)))
|
||||
return ret;
|
||||
|
||||
|
|
|
@ -365,15 +365,21 @@ do_alignment_ldrhstrh(unsigned long addr, unsigned long instr, struct pt_regs *r
|
|||
user:
|
||||
if (LDST_L_BIT(instr)) {
|
||||
unsigned long val;
|
||||
unsigned int __ua_flags = uaccess_save_and_enable();
|
||||
|
||||
get16t_unaligned_check(val, addr);
|
||||
uaccess_restore(__ua_flags);
|
||||
|
||||
/* signed half-word? */
|
||||
if (instr & 0x40)
|
||||
val = (signed long)((signed short) val);
|
||||
|
||||
regs->uregs[rd] = val;
|
||||
} else
|
||||
} else {
|
||||
unsigned int __ua_flags = uaccess_save_and_enable();
|
||||
put16t_unaligned_check(regs->uregs[rd], addr);
|
||||
uaccess_restore(__ua_flags);
|
||||
}
|
||||
|
||||
return TYPE_LDST;
|
||||
|
||||
|
@ -420,14 +426,21 @@ do_alignment_ldrdstrd(unsigned long addr, unsigned long instr,
|
|||
|
||||
user:
|
||||
if (load) {
|
||||
unsigned long val;
|
||||
unsigned long val, val2;
|
||||
unsigned int __ua_flags = uaccess_save_and_enable();
|
||||
|
||||
get32t_unaligned_check(val, addr);
|
||||
get32t_unaligned_check(val2, addr + 4);
|
||||
|
||||
uaccess_restore(__ua_flags);
|
||||
|
||||
regs->uregs[rd] = val;
|
||||
get32t_unaligned_check(val, addr + 4);
|
||||
regs->uregs[rd2] = val;
|
||||
regs->uregs[rd2] = val2;
|
||||
} else {
|
||||
unsigned int __ua_flags = uaccess_save_and_enable();
|
||||
put32t_unaligned_check(regs->uregs[rd], addr);
|
||||
put32t_unaligned_check(regs->uregs[rd2], addr + 4);
|
||||
uaccess_restore(__ua_flags);
|
||||
}
|
||||
|
||||
return TYPE_LDST;
|
||||
|
@ -458,10 +471,15 @@ do_alignment_ldrstr(unsigned long addr, unsigned long instr, struct pt_regs *reg
|
|||
trans:
|
||||
if (LDST_L_BIT(instr)) {
|
||||
unsigned int val;
|
||||
unsigned int __ua_flags = uaccess_save_and_enable();
|
||||
get32t_unaligned_check(val, addr);
|
||||
uaccess_restore(__ua_flags);
|
||||
regs->uregs[rd] = val;
|
||||
} else
|
||||
} else {
|
||||
unsigned int __ua_flags = uaccess_save_and_enable();
|
||||
put32t_unaligned_check(regs->uregs[rd], addr);
|
||||
uaccess_restore(__ua_flags);
|
||||
}
|
||||
return TYPE_LDST;
|
||||
|
||||
fault:
|
||||
|
@ -531,6 +549,7 @@ do_alignment_ldmstm(unsigned long addr, unsigned long instr, struct pt_regs *reg
|
|||
#endif
|
||||
|
||||
if (user_mode(regs)) {
|
||||
unsigned int __ua_flags = uaccess_save_and_enable();
|
||||
for (regbits = REGMASK_BITS(instr), rd = 0; regbits;
|
||||
regbits >>= 1, rd += 1)
|
||||
if (regbits & 1) {
|
||||
|
@ -542,6 +561,7 @@ do_alignment_ldmstm(unsigned long addr, unsigned long instr, struct pt_regs *reg
|
|||
put32t_unaligned_check(regs->uregs[rd], eaddr);
|
||||
eaddr += 4;
|
||||
}
|
||||
uaccess_restore(__ua_flags);
|
||||
} else {
|
||||
for (regbits = REGMASK_BITS(instr), rd = 0; regbits;
|
||||
regbits >>= 1, rd += 1)
|
||||
|
|
|
@ -107,7 +107,6 @@ static const struct of_device_id pxa_ssp_of_ids[] = {
|
|||
{ .compatible = "mvrl,pxa168-ssp", .data = (void *) PXA168_SSP },
|
||||
{ .compatible = "mrvl,pxa910-ssp", .data = (void *) PXA910_SSP },
|
||||
{ .compatible = "mrvl,ce4100-ssp", .data = (void *) CE4100_SSP },
|
||||
{ .compatible = "mrvl,lpss-ssp", .data = (void *) LPSS_SSP },
|
||||
{ },
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, pxa_ssp_of_ids);
|
||||
|
|
|
@ -81,7 +81,7 @@ cpu3: cpu@101 {
|
|||
};
|
||||
|
||||
idle-states {
|
||||
entry-method = "arm,psci";
|
||||
entry-method = "psci";
|
||||
|
||||
CPU_SLEEP_0: cpu-sleep-0 {
|
||||
compatible = "arm,idle-state";
|
||||
|
|
|
@ -106,7 +106,7 @@ core3 {
|
|||
};
|
||||
|
||||
idle-states {
|
||||
entry-method = "arm,psci";
|
||||
entry-method = "psci";
|
||||
|
||||
cpu_sleep: cpu-sleep-0 {
|
||||
compatible = "arm,idle-state";
|
||||
|
|
|
@ -33,6 +33,7 @@
|
|||
#define KVM_USER_MEM_SLOTS 32
|
||||
#define KVM_PRIVATE_MEM_SLOTS 4
|
||||
#define KVM_COALESCED_MMIO_PAGE_OFFSET 1
|
||||
#define KVM_HALT_POLL_NS_DEFAULT 500000
|
||||
|
||||
#include <kvm/arm_vgic.h>
|
||||
#include <kvm/arm_arch_timer.h>
|
||||
|
|
|
@ -294,6 +294,8 @@ void pcibios_fixup_bus(struct pci_bus *bus)
|
|||
printk("### PCIBIOS_FIXUP_BUS(%d)\n",bus->number);
|
||||
#endif
|
||||
|
||||
pci_read_bridge_bases(bus);
|
||||
|
||||
if (bus->number == 0) {
|
||||
struct pci_dev *dev;
|
||||
list_for_each_entry(dev, &bus->devices, bus_list) {
|
||||
|
|
|
@ -533,9 +533,10 @@ void pcibios_fixup_bus(struct pci_bus *b)
|
|||
{
|
||||
struct pci_dev *dev;
|
||||
|
||||
if (b->self)
|
||||
if (b->self) {
|
||||
pci_read_bridge_bases(b);
|
||||
pcibios_fixup_bridge_resources(b->self);
|
||||
|
||||
}
|
||||
list_for_each_entry(dev, &b->devices, bus_list)
|
||||
pcibios_fixup_device_resources(dev);
|
||||
platform_pci_fixup_bus(b);
|
||||
|
|
|
@ -863,7 +863,14 @@ void pcibios_setup_bus_devices(struct pci_bus *bus)
|
|||
|
||||
void pcibios_fixup_bus(struct pci_bus *bus)
|
||||
{
|
||||
/* Fixup the bus */
|
||||
/* When called from the generic PCI probe, read PCI<->PCI bridge
|
||||
* bases. This is -not- called when generating the PCI tree from
|
||||
* the OF device-tree.
|
||||
*/
|
||||
if (bus->self != NULL)
|
||||
pci_read_bridge_bases(bus);
|
||||
|
||||
/* Now fixup the bus bus */
|
||||
pcibios_setup_bus_self(bus);
|
||||
|
||||
/* Now fixup devices on that bus */
|
||||
|
|
|
@ -61,6 +61,7 @@
|
|||
#define KVM_PRIVATE_MEM_SLOTS 0
|
||||
|
||||
#define KVM_COALESCED_MMIO_PAGE_OFFSET 1
|
||||
#define KVM_HALT_POLL_NS_DEFAULT 500000
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -311,6 +311,12 @@ int pcibios_enable_device(struct pci_dev *dev, int mask)
|
|||
|
||||
void pcibios_fixup_bus(struct pci_bus *bus)
|
||||
{
|
||||
struct pci_dev *dev = bus->self;
|
||||
|
||||
if (pci_has_flag(PCI_PROBE_ONLY) && dev &&
|
||||
(dev->class >> 8) == PCI_CLASS_BRIDGE_PCI) {
|
||||
pci_read_bridge_bases(bus);
|
||||
}
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(PCIBIOS_MIN_IO);
|
||||
|
|
|
@ -324,6 +324,7 @@ void pcibios_fixup_bus(struct pci_bus *bus)
|
|||
struct pci_dev *dev;
|
||||
|
||||
if (bus->self) {
|
||||
pci_read_bridge_bases(bus);
|
||||
pcibios_fixup_bridge_resources(bus->self);
|
||||
}
|
||||
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
#ifdef CONFIG_KVM_MMIO
|
||||
#define KVM_COALESCED_MMIO_PAGE_OFFSET 1
|
||||
#endif
|
||||
#define KVM_HALT_POLL_NS_DEFAULT 500000
|
||||
|
||||
/* These values are internal and can be increased later */
|
||||
#define KVM_NR_IRQCHIPS 1
|
||||
|
|
|
@ -369,3 +369,4 @@ SYSCALL_SPU(bpf)
|
|||
COMPAT_SYS(execveat)
|
||||
PPC64ONLY(switch_endian)
|
||||
SYSCALL_SPU(userfaultfd)
|
||||
SYSCALL_SPU(membarrier)
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
#include <uapi/asm/unistd.h>
|
||||
|
||||
|
||||
#define __NR_syscalls 365
|
||||
#define __NR_syscalls 366
|
||||
|
||||
#define __NR__exit __NR_exit
|
||||
#define NR_syscalls __NR_syscalls
|
||||
|
|
|
@ -387,5 +387,6 @@
|
|||
#define __NR_execveat 362
|
||||
#define __NR_switch_endian 363
|
||||
#define __NR_userfaultfd 364
|
||||
#define __NR_membarrier 365
|
||||
|
||||
#endif /* _UAPI_ASM_POWERPC_UNISTD_H_ */
|
||||
|
|
|
@ -1032,7 +1032,13 @@ void pcibios_set_master(struct pci_dev *dev)
|
|||
|
||||
void pcibios_fixup_bus(struct pci_bus *bus)
|
||||
{
|
||||
/* Fixup the bus */
|
||||
/* When called from the generic PCI probe, read PCI<->PCI bridge
|
||||
* bases. This is -not- called when generating the PCI tree from
|
||||
* the OF device-tree.
|
||||
*/
|
||||
pci_read_bridge_bases(bus);
|
||||
|
||||
/* Now fixup the bus bus */
|
||||
pcibios_setup_bus_self(bus);
|
||||
|
||||
/* Now fixup devices on that bus */
|
||||
|
|
|
@ -829,12 +829,15 @@ int kvmppc_h_logical_ci_load(struct kvm_vcpu *vcpu)
|
|||
unsigned long size = kvmppc_get_gpr(vcpu, 4);
|
||||
unsigned long addr = kvmppc_get_gpr(vcpu, 5);
|
||||
u64 buf;
|
||||
int srcu_idx;
|
||||
int ret;
|
||||
|
||||
if (!is_power_of_2(size) || (size > sizeof(buf)))
|
||||
return H_TOO_HARD;
|
||||
|
||||
srcu_idx = srcu_read_lock(&vcpu->kvm->srcu);
|
||||
ret = kvm_io_bus_read(vcpu, KVM_MMIO_BUS, addr, size, &buf);
|
||||
srcu_read_unlock(&vcpu->kvm->srcu, srcu_idx);
|
||||
if (ret != 0)
|
||||
return H_TOO_HARD;
|
||||
|
||||
|
@ -869,6 +872,7 @@ int kvmppc_h_logical_ci_store(struct kvm_vcpu *vcpu)
|
|||
unsigned long addr = kvmppc_get_gpr(vcpu, 5);
|
||||
unsigned long val = kvmppc_get_gpr(vcpu, 6);
|
||||
u64 buf;
|
||||
int srcu_idx;
|
||||
int ret;
|
||||
|
||||
switch (size) {
|
||||
|
@ -892,7 +896,9 @@ int kvmppc_h_logical_ci_store(struct kvm_vcpu *vcpu)
|
|||
return H_TOO_HARD;
|
||||
}
|
||||
|
||||
srcu_idx = srcu_read_lock(&vcpu->kvm->srcu);
|
||||
ret = kvm_io_bus_write(vcpu, KVM_MMIO_BUS, addr, size, &buf);
|
||||
srcu_read_unlock(&vcpu->kvm->srcu, srcu_idx);
|
||||
if (ret != 0)
|
||||
return H_TOO_HARD;
|
||||
|
||||
|
|
|
@ -2692,9 +2692,13 @@ static int kvmppc_run_vcpu(struct kvm_run *kvm_run, struct kvm_vcpu *vcpu)
|
|||
|
||||
while (vcpu->arch.state == KVMPPC_VCPU_RUNNABLE &&
|
||||
(vc->vcore_state == VCORE_RUNNING ||
|
||||
vc->vcore_state == VCORE_EXITING))
|
||||
vc->vcore_state == VCORE_EXITING ||
|
||||
vc->vcore_state == VCORE_PIGGYBACK))
|
||||
kvmppc_wait_for_exec(vc, vcpu, TASK_UNINTERRUPTIBLE);
|
||||
|
||||
if (vc->vcore_state == VCORE_PREEMPT && vc->runner == NULL)
|
||||
kvmppc_vcore_end_preempt(vc);
|
||||
|
||||
if (vcpu->arch.state == KVMPPC_VCPU_RUNNABLE) {
|
||||
kvmppc_remove_runnable(vc, vcpu);
|
||||
vcpu->stat.signal_exits++;
|
||||
|
|
|
@ -1257,6 +1257,7 @@ mc_cont:
|
|||
bl kvmhv_accumulate_time
|
||||
#endif
|
||||
|
||||
mr r3, r12
|
||||
/* Increment exit count, poke other threads to exit */
|
||||
bl kvmhv_commence_exit
|
||||
nop
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
# CONFIG_SWAP is not set
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_HIGH_RES_TIMERS=y
|
||||
CONFIG_RCU_FAST_NO_HZ=y
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
||||
# CONFIG_COMPAT_BRK is not set
|
||||
|
@ -54,10 +53,6 @@ CONFIG_RAW_DRIVER=y
|
|||
# CONFIG_MONWRITER is not set
|
||||
# CONFIG_S390_VMUR is not set
|
||||
# CONFIG_HID is not set
|
||||
CONFIG_MEMSTICK=y
|
||||
CONFIG_MEMSTICK_DEBUG=y
|
||||
CONFIG_MEMSTICK_UNSAFE_RESUME=y
|
||||
CONFIG_MSPRO_BLOCK=y
|
||||
# CONFIG_IOMMU_SUPPORT is not set
|
||||
CONFIG_EXT2_FS=y
|
||||
CONFIG_EXT3_FS=y
|
||||
|
|
|
@ -35,6 +35,7 @@
|
|||
*/
|
||||
#define KVM_NR_IRQCHIPS 1
|
||||
#define KVM_IRQCHIP_NUM_PINS 4096
|
||||
#define KVM_HALT_POLL_NS_DEFAULT 0
|
||||
|
||||
#define SIGP_CTRL_C 0x80
|
||||
#define SIGP_CTRL_SCN_MASK 0x3f
|
||||
|
|
|
@ -8,28 +8,8 @@
|
|||
|
||||
#include <uapi/asm/unistd.h>
|
||||
|
||||
|
||||
#define __IGNORE_time
|
||||
|
||||
/* Ignore system calls that are also reachable via sys_socketcall */
|
||||
#define __IGNORE_recvmmsg
|
||||
#define __IGNORE_sendmmsg
|
||||
#define __IGNORE_socket
|
||||
#define __IGNORE_socketpair
|
||||
#define __IGNORE_bind
|
||||
#define __IGNORE_connect
|
||||
#define __IGNORE_listen
|
||||
#define __IGNORE_accept4
|
||||
#define __IGNORE_getsockopt
|
||||
#define __IGNORE_setsockopt
|
||||
#define __IGNORE_getsockname
|
||||
#define __IGNORE_getpeername
|
||||
#define __IGNORE_sendto
|
||||
#define __IGNORE_sendmsg
|
||||
#define __IGNORE_recvfrom
|
||||
#define __IGNORE_recvmsg
|
||||
#define __IGNORE_shutdown
|
||||
|
||||
#define __ARCH_WANT_OLD_READDIR
|
||||
#define __ARCH_WANT_SYS_ALARM
|
||||
#define __ARCH_WANT_SYS_GETHOSTNAME
|
||||
|
|
|
@ -290,7 +290,26 @@
|
|||
#define __NR_s390_pci_mmio_write 352
|
||||
#define __NR_s390_pci_mmio_read 353
|
||||
#define __NR_execveat 354
|
||||
#define NR_syscalls 355
|
||||
#define __NR_userfaultfd 355
|
||||
#define __NR_membarrier 356
|
||||
#define __NR_recvmmsg 357
|
||||
#define __NR_sendmmsg 358
|
||||
#define __NR_socket 359
|
||||
#define __NR_socketpair 360
|
||||
#define __NR_bind 361
|
||||
#define __NR_connect 362
|
||||
#define __NR_listen 363
|
||||
#define __NR_accept4 364
|
||||
#define __NR_getsockopt 365
|
||||
#define __NR_setsockopt 366
|
||||
#define __NR_getsockname 367
|
||||
#define __NR_getpeername 368
|
||||
#define __NR_sendto 369
|
||||
#define __NR_sendmsg 370
|
||||
#define __NR_recvfrom 371
|
||||
#define __NR_recvmsg 372
|
||||
#define __NR_shutdown 373
|
||||
#define NR_syscalls 374
|
||||
|
||||
/*
|
||||
* There are some system calls that are not present on 64 bit, some
|
||||
|
|
|
@ -48,6 +48,19 @@ typedef struct
|
|||
struct ucontext32 uc;
|
||||
} rt_sigframe32;
|
||||
|
||||
static inline void sigset_to_sigset32(unsigned long *set64,
|
||||
compat_sigset_word *set32)
|
||||
{
|
||||
set32[0] = (compat_sigset_word) set64[0];
|
||||
set32[1] = (compat_sigset_word)(set64[0] >> 32);
|
||||
}
|
||||
|
||||
static inline void sigset32_to_sigset(compat_sigset_word *set32,
|
||||
unsigned long *set64)
|
||||
{
|
||||
set64[0] = (unsigned long) set32[0] | ((unsigned long) set32[1] << 32);
|
||||
}
|
||||
|
||||
int copy_siginfo_to_user32(compat_siginfo_t __user *to, const siginfo_t *from)
|
||||
{
|
||||
int err;
|
||||
|
@ -281,10 +294,12 @@ COMPAT_SYSCALL_DEFINE0(sigreturn)
|
|||
{
|
||||
struct pt_regs *regs = task_pt_regs(current);
|
||||
sigframe32 __user *frame = (sigframe32 __user *)regs->gprs[15];
|
||||
compat_sigset_t cset;
|
||||
sigset_t set;
|
||||
|
||||
if (__copy_from_user(&set.sig, &frame->sc.oldmask, _SIGMASK_COPY_SIZE32))
|
||||
if (__copy_from_user(&cset.sig, &frame->sc.oldmask, _SIGMASK_COPY_SIZE32))
|
||||
goto badframe;
|
||||
sigset32_to_sigset(cset.sig, set.sig);
|
||||
set_current_blocked(&set);
|
||||
save_fpu_regs();
|
||||
if (restore_sigregs32(regs, &frame->sregs))
|
||||
|
@ -302,10 +317,12 @@ COMPAT_SYSCALL_DEFINE0(rt_sigreturn)
|
|||
{
|
||||
struct pt_regs *regs = task_pt_regs(current);
|
||||
rt_sigframe32 __user *frame = (rt_sigframe32 __user *)regs->gprs[15];
|
||||
compat_sigset_t cset;
|
||||
sigset_t set;
|
||||
|
||||
if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
|
||||
if (__copy_from_user(&cset, &frame->uc.uc_sigmask, sizeof(cset)))
|
||||
goto badframe;
|
||||
sigset32_to_sigset(cset.sig, set.sig);
|
||||
set_current_blocked(&set);
|
||||
if (compat_restore_altstack(&frame->uc.uc_stack))
|
||||
goto badframe;
|
||||
|
@ -377,7 +394,7 @@ static int setup_frame32(struct ksignal *ksig, sigset_t *set,
|
|||
return -EFAULT;
|
||||
|
||||
/* Create struct sigcontext32 on the signal stack */
|
||||
memcpy(&sc.oldmask, &set->sig, _SIGMASK_COPY_SIZE32);
|
||||
sigset_to_sigset32(set->sig, sc.oldmask);
|
||||
sc.sregs = (__u32)(unsigned long __force) &frame->sregs;
|
||||
if (__copy_to_user(&frame->sc, &sc, sizeof(frame->sc)))
|
||||
return -EFAULT;
|
||||
|
@ -438,6 +455,7 @@ static int setup_frame32(struct ksignal *ksig, sigset_t *set,
|
|||
static int setup_rt_frame32(struct ksignal *ksig, sigset_t *set,
|
||||
struct pt_regs *regs)
|
||||
{
|
||||
compat_sigset_t cset;
|
||||
rt_sigframe32 __user *frame;
|
||||
unsigned long restorer;
|
||||
size_t frame_size;
|
||||
|
@ -485,11 +503,12 @@ static int setup_rt_frame32(struct ksignal *ksig, sigset_t *set,
|
|||
store_sigregs();
|
||||
|
||||
/* Create ucontext on the signal stack. */
|
||||
sigset_to_sigset32(set->sig, cset.sig);
|
||||
if (__put_user(uc_flags, &frame->uc.uc_flags) ||
|
||||
__put_user(0, &frame->uc.uc_link) ||
|
||||
__compat_save_altstack(&frame->uc.uc_stack, regs->gprs[15]) ||
|
||||
save_sigregs32(regs, &frame->uc.uc_mcontext) ||
|
||||
__copy_to_user(&frame->uc.uc_sigmask, set, sizeof(*set)) ||
|
||||
__copy_to_user(&frame->uc.uc_sigmask, &cset, sizeof(cset)) ||
|
||||
save_sigregs_ext32(regs, &frame->uc.uc_mcontext_ext))
|
||||
return -EFAULT;
|
||||
|
||||
|
|
|
@ -53,14 +53,12 @@
|
|||
*/
|
||||
#define COMPAT_SYSCALL_WRAPx(x, name, ...) \
|
||||
asmlinkage long sys##name(__MAP(x,__SC_DECL,__VA_ARGS__)); \
|
||||
asmlinkage long compat_sys##name(__MAP(x,__SC_COMPAT_TYPE,__VA_ARGS__));\
|
||||
asmlinkage long compat_sys##name(__MAP(x,__SC_COMPAT_TYPE,__VA_ARGS__)) \
|
||||
asmlinkage long notrace compat_sys##name(__MAP(x,__SC_COMPAT_TYPE,__VA_ARGS__));\
|
||||
asmlinkage long notrace compat_sys##name(__MAP(x,__SC_COMPAT_TYPE,__VA_ARGS__)) \
|
||||
{ \
|
||||
return sys##name(__MAP(x,__SC_COMPAT_CAST,__VA_ARGS__)); \
|
||||
}
|
||||
|
||||
COMPAT_SYSCALL_WRAP1(exit, int, error_code);
|
||||
COMPAT_SYSCALL_WRAP1(close, unsigned int, fd);
|
||||
COMPAT_SYSCALL_WRAP2(creat, const char __user *, pathname, umode_t, mode);
|
||||
COMPAT_SYSCALL_WRAP2(link, const char __user *, oldname, const char __user *, newname);
|
||||
COMPAT_SYSCALL_WRAP1(unlink, const char __user *, pathname);
|
||||
|
@ -68,23 +66,16 @@ COMPAT_SYSCALL_WRAP1(chdir, const char __user *, filename);
|
|||
COMPAT_SYSCALL_WRAP3(mknod, const char __user *, filename, umode_t, mode, unsigned, dev);
|
||||
COMPAT_SYSCALL_WRAP2(chmod, const char __user *, filename, umode_t, mode);
|
||||
COMPAT_SYSCALL_WRAP1(oldumount, char __user *, name);
|
||||
COMPAT_SYSCALL_WRAP1(alarm, unsigned int, seconds);
|
||||
COMPAT_SYSCALL_WRAP2(access, const char __user *, filename, int, mode);
|
||||
COMPAT_SYSCALL_WRAP1(nice, int, increment);
|
||||
COMPAT_SYSCALL_WRAP2(kill, int, pid, int, sig);
|
||||
COMPAT_SYSCALL_WRAP2(rename, const char __user *, oldname, const char __user *, newname);
|
||||
COMPAT_SYSCALL_WRAP2(mkdir, const char __user *, pathname, umode_t, mode);
|
||||
COMPAT_SYSCALL_WRAP1(rmdir, const char __user *, pathname);
|
||||
COMPAT_SYSCALL_WRAP1(dup, unsigned int, fildes);
|
||||
COMPAT_SYSCALL_WRAP1(pipe, int __user *, fildes);
|
||||
COMPAT_SYSCALL_WRAP1(brk, unsigned long, brk);
|
||||
COMPAT_SYSCALL_WRAP2(signal, int, sig, __sighandler_t, handler);
|
||||
COMPAT_SYSCALL_WRAP1(acct, const char __user *, name);
|
||||
COMPAT_SYSCALL_WRAP2(umount, char __user *, name, int, flags);
|
||||
COMPAT_SYSCALL_WRAP2(setpgid, pid_t, pid, pid_t, pgid);
|
||||
COMPAT_SYSCALL_WRAP1(umask, int, mask);
|
||||
COMPAT_SYSCALL_WRAP1(chroot, const char __user *, filename);
|
||||
COMPAT_SYSCALL_WRAP2(dup2, unsigned int, oldfd, unsigned int, newfd);
|
||||
COMPAT_SYSCALL_WRAP3(sigsuspend, int, unused1, int, unused2, old_sigset_t, mask);
|
||||
COMPAT_SYSCALL_WRAP2(sethostname, char __user *, name, int, len);
|
||||
COMPAT_SYSCALL_WRAP2(symlink, const char __user *, old, const char __user *, new);
|
||||
|
@ -93,37 +84,23 @@ COMPAT_SYSCALL_WRAP1(uselib, const char __user *, library);
|
|||
COMPAT_SYSCALL_WRAP2(swapon, const char __user *, specialfile, int, swap_flags);
|
||||
COMPAT_SYSCALL_WRAP4(reboot, int, magic1, int, magic2, unsigned int, cmd, void __user *, arg);
|
||||
COMPAT_SYSCALL_WRAP2(munmap, unsigned long, addr, size_t, len);
|
||||
COMPAT_SYSCALL_WRAP2(fchmod, unsigned int, fd, umode_t, mode);
|
||||
COMPAT_SYSCALL_WRAP2(getpriority, int, which, int, who);
|
||||
COMPAT_SYSCALL_WRAP3(setpriority, int, which, int, who, int, niceval);
|
||||
COMPAT_SYSCALL_WRAP3(syslog, int, type, char __user *, buf, int, len);
|
||||
COMPAT_SYSCALL_WRAP1(swapoff, const char __user *, specialfile);
|
||||
COMPAT_SYSCALL_WRAP1(fsync, unsigned int, fd);
|
||||
COMPAT_SYSCALL_WRAP2(setdomainname, char __user *, name, int, len);
|
||||
COMPAT_SYSCALL_WRAP1(newuname, struct new_utsname __user *, name);
|
||||
COMPAT_SYSCALL_WRAP3(mprotect, unsigned long, start, size_t, len, unsigned long, prot);
|
||||
COMPAT_SYSCALL_WRAP3(init_module, void __user *, umod, unsigned long, len, const char __user *, uargs);
|
||||
COMPAT_SYSCALL_WRAP2(delete_module, const char __user *, name_user, unsigned int, flags);
|
||||
COMPAT_SYSCALL_WRAP4(quotactl, unsigned int, cmd, const char __user *, special, qid_t, id, void __user *, addr);
|
||||
COMPAT_SYSCALL_WRAP1(getpgid, pid_t, pid);
|
||||
COMPAT_SYSCALL_WRAP1(fchdir, unsigned int, fd);
|
||||
COMPAT_SYSCALL_WRAP2(bdflush, int, func, long, data);
|
||||
COMPAT_SYSCALL_WRAP3(sysfs, int, option, unsigned long, arg1, unsigned long, arg2);
|
||||
COMPAT_SYSCALL_WRAP1(s390_personality, unsigned int, personality);
|
||||
COMPAT_SYSCALL_WRAP5(llseek, unsigned int, fd, unsigned long, high, unsigned long, low, loff_t __user *, result, unsigned int, whence);
|
||||
COMPAT_SYSCALL_WRAP2(flock, unsigned int, fd, unsigned int, cmd);
|
||||
COMPAT_SYSCALL_WRAP3(msync, unsigned long, start, size_t, len, int, flags);
|
||||
COMPAT_SYSCALL_WRAP1(getsid, pid_t, pid);
|
||||
COMPAT_SYSCALL_WRAP1(fdatasync, unsigned int, fd);
|
||||
COMPAT_SYSCALL_WRAP2(mlock, unsigned long, start, size_t, len);
|
||||
COMPAT_SYSCALL_WRAP2(munlock, unsigned long, start, size_t, len);
|
||||
COMPAT_SYSCALL_WRAP1(mlockall, int, flags);
|
||||
COMPAT_SYSCALL_WRAP2(sched_setparam, pid_t, pid, struct sched_param __user *, param);
|
||||
COMPAT_SYSCALL_WRAP2(sched_getparam, pid_t, pid, struct sched_param __user *, param);
|
||||
COMPAT_SYSCALL_WRAP3(sched_setscheduler, pid_t, pid, int, policy, struct sched_param __user *, param);
|
||||
COMPAT_SYSCALL_WRAP1(sched_getscheduler, pid_t, pid);
|
||||
COMPAT_SYSCALL_WRAP1(sched_get_priority_max, int, policy);
|
||||
COMPAT_SYSCALL_WRAP1(sched_get_priority_min, int, policy);
|
||||
COMPAT_SYSCALL_WRAP5(mremap, unsigned long, addr, unsigned long, old_len, unsigned long, new_len, unsigned long, flags, unsigned long, new_addr);
|
||||
COMPAT_SYSCALL_WRAP3(poll, struct pollfd __user *, ufds, unsigned int, nfds, int, timeout);
|
||||
COMPAT_SYSCALL_WRAP5(prctl, int, option, unsigned long, arg2, unsigned long, arg3, unsigned long, arg4, unsigned long, arg5);
|
||||
|
@ -131,20 +108,11 @@ COMPAT_SYSCALL_WRAP2(getcwd, char __user *, buf, unsigned long, size);
|
|||
COMPAT_SYSCALL_WRAP2(capget, cap_user_header_t, header, cap_user_data_t, dataptr);
|
||||
COMPAT_SYSCALL_WRAP2(capset, cap_user_header_t, header, const cap_user_data_t, data);
|
||||
COMPAT_SYSCALL_WRAP3(lchown, const char __user *, filename, uid_t, user, gid_t, group);
|
||||
COMPAT_SYSCALL_WRAP2(setreuid, uid_t, ruid, uid_t, euid);
|
||||
COMPAT_SYSCALL_WRAP2(setregid, gid_t, rgid, gid_t, egid);
|
||||
COMPAT_SYSCALL_WRAP2(getgroups, int, gidsetsize, gid_t __user *, grouplist);
|
||||
COMPAT_SYSCALL_WRAP2(setgroups, int, gidsetsize, gid_t __user *, grouplist);
|
||||
COMPAT_SYSCALL_WRAP3(fchown, unsigned int, fd, uid_t, user, gid_t, group);
|
||||
COMPAT_SYSCALL_WRAP3(setresuid, uid_t, ruid, uid_t, euid, uid_t, suid);
|
||||
COMPAT_SYSCALL_WRAP3(getresuid, uid_t __user *, ruid, uid_t __user *, euid, uid_t __user *, suid);
|
||||
COMPAT_SYSCALL_WRAP3(setresgid, gid_t, rgid, gid_t, egid, gid_t, sgid);
|
||||
COMPAT_SYSCALL_WRAP3(getresgid, gid_t __user *, rgid, gid_t __user *, egid, gid_t __user *, sgid);
|
||||
COMPAT_SYSCALL_WRAP3(chown, const char __user *, filename, uid_t, user, gid_t, group);
|
||||
COMPAT_SYSCALL_WRAP1(setuid, uid_t, uid);
|
||||
COMPAT_SYSCALL_WRAP1(setgid, gid_t, gid);
|
||||
COMPAT_SYSCALL_WRAP1(setfsuid, uid_t, uid);
|
||||
COMPAT_SYSCALL_WRAP1(setfsgid, gid_t, gid);
|
||||
COMPAT_SYSCALL_WRAP2(pivot_root, const char __user *, new_root, const char __user *, put_old);
|
||||
COMPAT_SYSCALL_WRAP3(mincore, unsigned long, start, size_t, len, unsigned char __user *, vec);
|
||||
COMPAT_SYSCALL_WRAP3(madvise, unsigned long, start, size_t, len, int, behavior);
|
||||
|
@ -161,23 +129,16 @@ COMPAT_SYSCALL_WRAP3(flistxattr, int, fd, char __user *, list, size_t, size);
|
|||
COMPAT_SYSCALL_WRAP2(removexattr, const char __user *, path, const char __user *, name);
|
||||
COMPAT_SYSCALL_WRAP2(lremovexattr, const char __user *, path, const char __user *, name);
|
||||
COMPAT_SYSCALL_WRAP2(fremovexattr, int, fd, const char __user *, name);
|
||||
COMPAT_SYSCALL_WRAP1(exit_group, int, error_code);
|
||||
COMPAT_SYSCALL_WRAP1(set_tid_address, int __user *, tidptr);
|
||||
COMPAT_SYSCALL_WRAP1(epoll_create, int, size);
|
||||
COMPAT_SYSCALL_WRAP4(epoll_ctl, int, epfd, int, op, int, fd, struct epoll_event __user *, event);
|
||||
COMPAT_SYSCALL_WRAP4(epoll_wait, int, epfd, struct epoll_event __user *, events, int, maxevents, int, timeout);
|
||||
COMPAT_SYSCALL_WRAP1(timer_getoverrun, timer_t, timer_id);
|
||||
COMPAT_SYSCALL_WRAP1(timer_delete, compat_timer_t, compat_timer_id);
|
||||
COMPAT_SYSCALL_WRAP1(io_destroy, aio_context_t, ctx);
|
||||
COMPAT_SYSCALL_WRAP3(io_cancel, aio_context_t, ctx_id, struct iocb __user *, iocb, struct io_event __user *, result);
|
||||
COMPAT_SYSCALL_WRAP1(mq_unlink, const char __user *, name);
|
||||
COMPAT_SYSCALL_WRAP5(add_key, const char __user *, tp, const char __user *, dsc, const void __user *, pld, size_t, len, key_serial_t, id);
|
||||
COMPAT_SYSCALL_WRAP4(request_key, const char __user *, tp, const char __user *, dsc, const char __user *, info, key_serial_t, id);
|
||||
COMPAT_SYSCALL_WRAP5(remap_file_pages, unsigned long, start, unsigned long, size, unsigned long, prot, unsigned long, pgoff, unsigned long, flags);
|
||||
COMPAT_SYSCALL_WRAP3(ioprio_set, int, which, int, who, int, ioprio);
|
||||
COMPAT_SYSCALL_WRAP2(ioprio_get, int, which, int, who);
|
||||
COMPAT_SYSCALL_WRAP3(inotify_add_watch, int, fd, const char __user *, path, u32, mask);
|
||||
COMPAT_SYSCALL_WRAP2(inotify_rm_watch, int, fd, __s32, wd);
|
||||
COMPAT_SYSCALL_WRAP3(mkdirat, int, dfd, const char __user *, pathname, umode_t, mode);
|
||||
COMPAT_SYSCALL_WRAP4(mknodat, int, dfd, const char __user *, filename, umode_t, mode, unsigned, dev);
|
||||
COMPAT_SYSCALL_WRAP5(fchownat, int, dfd, const char __user *, filename, uid_t, user, gid_t, group, int, flag);
|
||||
|
@ -192,23 +153,11 @@ COMPAT_SYSCALL_WRAP1(unshare, unsigned long, unshare_flags);
|
|||
COMPAT_SYSCALL_WRAP6(splice, int, fd_in, loff_t __user *, off_in, int, fd_out, loff_t __user *, off_out, size_t, len, unsigned int, flags);
|
||||
COMPAT_SYSCALL_WRAP4(tee, int, fdin, int, fdout, size_t, len, unsigned int, flags);
|
||||
COMPAT_SYSCALL_WRAP3(getcpu, unsigned __user *, cpu, unsigned __user *, node, struct getcpu_cache __user *, cache);
|
||||
COMPAT_SYSCALL_WRAP1(eventfd, unsigned int, count);
|
||||
COMPAT_SYSCALL_WRAP2(timerfd_create, int, clockid, int, flags);
|
||||
COMPAT_SYSCALL_WRAP2(eventfd2, unsigned int, count, int, flags);
|
||||
COMPAT_SYSCALL_WRAP1(inotify_init1, int, flags);
|
||||
COMPAT_SYSCALL_WRAP2(pipe2, int __user *, fildes, int, flags);
|
||||
COMPAT_SYSCALL_WRAP3(dup3, unsigned int, oldfd, unsigned int, newfd, int, flags);
|
||||
COMPAT_SYSCALL_WRAP1(epoll_create1, int, flags);
|
||||
COMPAT_SYSCALL_WRAP2(tkill, int, pid, int, sig);
|
||||
COMPAT_SYSCALL_WRAP3(tgkill, int, tgid, int, pid, int, sig);
|
||||
COMPAT_SYSCALL_WRAP5(perf_event_open, struct perf_event_attr __user *, attr_uptr, pid_t, pid, int, cpu, int, group_fd, unsigned long, flags);
|
||||
COMPAT_SYSCALL_WRAP5(clone, unsigned long, newsp, unsigned long, clone_flags, int __user *, parent_tidptr, int __user *, child_tidptr, unsigned long, tls);
|
||||
COMPAT_SYSCALL_WRAP2(fanotify_init, unsigned int, flags, unsigned int, event_f_flags);
|
||||
COMPAT_SYSCALL_WRAP4(prlimit64, pid_t, pid, unsigned int, resource, const struct rlimit64 __user *, new_rlim, struct rlimit64 __user *, old_rlim);
|
||||
COMPAT_SYSCALL_WRAP5(name_to_handle_at, int, dfd, const char __user *, name, struct file_handle __user *, handle, int __user *, mnt_id, int, flag);
|
||||
COMPAT_SYSCALL_WRAP1(syncfs, int, fd);
|
||||
COMPAT_SYSCALL_WRAP2(setns, int, fd, int, nstype);
|
||||
COMPAT_SYSCALL_WRAP2(s390_runtime_instr, int, command, int, signum);
|
||||
COMPAT_SYSCALL_WRAP5(kcmp, pid_t, pid1, pid_t, pid2, int, type, unsigned long, idx1, unsigned long, idx2);
|
||||
COMPAT_SYSCALL_WRAP3(finit_module, int, fd, const char __user *, uargs, int, flags);
|
||||
COMPAT_SYSCALL_WRAP3(sched_setattr, pid_t, pid, struct sched_attr __user *, attr, unsigned int, flags);
|
||||
|
@ -220,3 +169,10 @@ COMPAT_SYSCALL_WRAP2(memfd_create, const char __user *, uname, unsigned int, fla
|
|||
COMPAT_SYSCALL_WRAP3(bpf, int, cmd, union bpf_attr *, attr, unsigned int, size);
|
||||
COMPAT_SYSCALL_WRAP3(s390_pci_mmio_write, const unsigned long, mmio_addr, const void __user *, user_buffer, const size_t, length);
|
||||
COMPAT_SYSCALL_WRAP3(s390_pci_mmio_read, const unsigned long, mmio_addr, void __user *, user_buffer, const size_t, length);
|
||||
COMPAT_SYSCALL_WRAP4(socketpair, int, family, int, type, int, protocol, int __user *, usockvec);
|
||||
COMPAT_SYSCALL_WRAP3(bind, int, fd, struct sockaddr __user *, umyaddr, int, addrlen);
|
||||
COMPAT_SYSCALL_WRAP3(connect, int, fd, struct sockaddr __user *, uservaddr, int, addrlen);
|
||||
COMPAT_SYSCALL_WRAP4(accept4, int, fd, struct sockaddr __user *, upeer_sockaddr, int __user *, upeer_addrlen, int, flags);
|
||||
COMPAT_SYSCALL_WRAP3(getsockname, int, fd, struct sockaddr __user *, usockaddr, int __user *, usockaddr_len);
|
||||
COMPAT_SYSCALL_WRAP3(getpeername, int, fd, struct sockaddr __user *, usockaddr, int __user *, usockaddr_len);
|
||||
COMPAT_SYSCALL_WRAP6(sendto, int, fd, void __user *, buff, size_t, len, unsigned int, flags, struct sockaddr __user *, addr, int, addr_len);
|
||||
|
|
|
@ -1191,6 +1191,7 @@ cleanup_critical:
|
|||
clg %r9,BASED(.Lcleanup_save_fpu_fpc_end)
|
||||
jhe 1f
|
||||
lg %r2,__LC_CURRENT
|
||||
aghi %r2,__TASK_thread
|
||||
0: # Store floating-point controls
|
||||
stfpc __THREAD_FPU_fpc(%r2)
|
||||
1: # Load register save area and check if VX is active
|
||||
|
@ -1252,6 +1253,7 @@ cleanup_critical:
|
|||
clg %r9,BASED(.Lcleanup_load_fpu_regs_vx_ctl)
|
||||
jhe 6f
|
||||
lg %r4,__LC_CURRENT
|
||||
aghi %r4,__TASK_thread
|
||||
lfpc __THREAD_FPU_fpc(%r4)
|
||||
tm __THREAD_FPU_flags+3(%r4),FPU_USE_VX # VX-enabled task ?
|
||||
lg %r4,__THREAD_FPU_regs(%r4) # %r4 <- reg save area
|
||||
|
|
|
@ -157,10 +157,14 @@ static int validate_ctr_auth(const struct hw_perf_event *hwc)
|
|||
|
||||
cpuhw = &get_cpu_var(cpu_hw_events);
|
||||
|
||||
/* check authorization for cpu counter sets */
|
||||
/* Check authorization for cpu counter sets.
|
||||
* If the particular CPU counter set is not authorized,
|
||||
* return with -ENOENT in order to fall back to other
|
||||
* PMUs that might suffice the event request.
|
||||
*/
|
||||
ctrs_state = cpumf_state_ctl[hwc->config_base];
|
||||
if (!(ctrs_state & cpuhw->info.auth_ctl))
|
||||
err = -EPERM;
|
||||
err = -ENOENT;
|
||||
|
||||
put_cpu_var(cpu_hw_events);
|
||||
return err;
|
||||
|
@ -536,7 +540,7 @@ static int cpumf_pmu_add(struct perf_event *event, int flags)
|
|||
*/
|
||||
if (!(cpuhw->flags & PERF_EVENT_TXN))
|
||||
if (validate_ctr_auth(&event->hw))
|
||||
return -EPERM;
|
||||
return -ENOENT;
|
||||
|
||||
ctr_set_enable(&cpuhw->state, event->hw.config_base);
|
||||
event->hw.state = PERF_HES_UPTODATE | PERF_HES_STOPPED;
|
||||
|
@ -611,7 +615,7 @@ static int cpumf_pmu_commit_txn(struct pmu *pmu)
|
|||
state = cpuhw->state & ~((1 << CPUMF_LCCTL_ENABLE_SHIFT) - 1);
|
||||
state >>= CPUMF_LCCTL_ENABLE_SHIFT;
|
||||
if ((state & cpuhw->info.auth_ctl) != state)
|
||||
return -EPERM;
|
||||
return -ENOENT;
|
||||
|
||||
cpuhw->flags &= ~PERF_EVENT_TXN;
|
||||
perf_pmu_enable(pmu);
|
||||
|
|
|
@ -30,6 +30,9 @@ ENTRY(swsusp_arch_suspend)
|
|||
aghi %r15,-STACK_FRAME_OVERHEAD
|
||||
stg %r1,__SF_BACKCHAIN(%r15)
|
||||
|
||||
/* Store FPU registers */
|
||||
brasl %r14,save_fpu_regs
|
||||
|
||||
/* Deactivate DAT */
|
||||
stnsm __SF_EMPTY(%r15),0xfb
|
||||
|
||||
|
@ -47,23 +50,6 @@ ENTRY(swsusp_arch_suspend)
|
|||
|
||||
/* Store registers */
|
||||
mvc 0x318(4,%r1),__SF_EMPTY(%r15) /* move prefix to lowcore */
|
||||
stfpc 0x31c(%r1) /* store fpu control */
|
||||
std 0,0x200(%r1) /* store f0 */
|
||||
std 1,0x208(%r1) /* store f1 */
|
||||
std 2,0x210(%r1) /* store f2 */
|
||||
std 3,0x218(%r1) /* store f3 */
|
||||
std 4,0x220(%r1) /* store f4 */
|
||||
std 5,0x228(%r1) /* store f5 */
|
||||
std 6,0x230(%r1) /* store f6 */
|
||||
std 7,0x238(%r1) /* store f7 */
|
||||
std 8,0x240(%r1) /* store f8 */
|
||||
std 9,0x248(%r1) /* store f9 */
|
||||
std 10,0x250(%r1) /* store f10 */
|
||||
std 11,0x258(%r1) /* store f11 */
|
||||
std 12,0x260(%r1) /* store f12 */
|
||||
std 13,0x268(%r1) /* store f13 */
|
||||
std 14,0x270(%r1) /* store f14 */
|
||||
std 15,0x278(%r1) /* store f15 */
|
||||
stam %a0,%a15,0x340(%r1) /* store access registers */
|
||||
stctg %c0,%c15,0x380(%r1) /* store control registers */
|
||||
stmg %r0,%r15,0x280(%r1) /* store general registers */
|
||||
|
@ -249,24 +235,6 @@ restore_registers:
|
|||
lctlg %c0,%c15,0x380(%r13) /* load control registers */
|
||||
lam %a0,%a15,0x340(%r13) /* load access registers */
|
||||
|
||||
lfpc 0x31c(%r13) /* load fpu control */
|
||||
ld 0,0x200(%r13) /* load f0 */
|
||||
ld 1,0x208(%r13) /* load f1 */
|
||||
ld 2,0x210(%r13) /* load f2 */
|
||||
ld 3,0x218(%r13) /* load f3 */
|
||||
ld 4,0x220(%r13) /* load f4 */
|
||||
ld 5,0x228(%r13) /* load f5 */
|
||||
ld 6,0x230(%r13) /* load f6 */
|
||||
ld 7,0x238(%r13) /* load f7 */
|
||||
ld 8,0x240(%r13) /* load f8 */
|
||||
ld 9,0x248(%r13) /* load f9 */
|
||||
ld 10,0x250(%r13) /* load f10 */
|
||||
ld 11,0x258(%r13) /* load f11 */
|
||||
ld 12,0x260(%r13) /* load f12 */
|
||||
ld 13,0x268(%r13) /* load f13 */
|
||||
ld 14,0x270(%r13) /* load f14 */
|
||||
ld 15,0x278(%r13) /* load f15 */
|
||||
|
||||
/* Load old stack */
|
||||
lg %r15,0x2f8(%r13)
|
||||
|
||||
|
|
|
@ -9,12 +9,12 @@
|
|||
#define NI_SYSCALL SYSCALL(sys_ni_syscall,sys_ni_syscall)
|
||||
|
||||
NI_SYSCALL /* 0 */
|
||||
SYSCALL(sys_exit,compat_sys_exit)
|
||||
SYSCALL(sys_exit,sys_exit)
|
||||
SYSCALL(sys_fork,sys_fork)
|
||||
SYSCALL(sys_read,compat_sys_s390_read)
|
||||
SYSCALL(sys_write,compat_sys_s390_write)
|
||||
SYSCALL(sys_open,compat_sys_open) /* 5 */
|
||||
SYSCALL(sys_close,compat_sys_close)
|
||||
SYSCALL(sys_close,sys_close)
|
||||
SYSCALL(sys_restart_syscall,sys_restart_syscall)
|
||||
SYSCALL(sys_creat,compat_sys_creat)
|
||||
SYSCALL(sys_link,compat_sys_link)
|
||||
|
@ -35,21 +35,21 @@ SYSCALL(sys_ni_syscall,compat_sys_s390_setuid16) /* old setuid16 syscall*/
|
|||
SYSCALL(sys_ni_syscall,compat_sys_s390_getuid16) /* old getuid16 syscall*/
|
||||
SYSCALL(sys_ni_syscall,compat_sys_stime) /* 25 old stime syscall */
|
||||
SYSCALL(sys_ptrace,compat_sys_ptrace)
|
||||
SYSCALL(sys_alarm,compat_sys_alarm)
|
||||
SYSCALL(sys_alarm,sys_alarm)
|
||||
NI_SYSCALL /* old fstat syscall */
|
||||
SYSCALL(sys_pause,sys_pause)
|
||||
SYSCALL(sys_utime,compat_sys_utime) /* 30 */
|
||||
NI_SYSCALL /* old stty syscall */
|
||||
NI_SYSCALL /* old gtty syscall */
|
||||
SYSCALL(sys_access,compat_sys_access)
|
||||
SYSCALL(sys_nice,compat_sys_nice)
|
||||
SYSCALL(sys_nice,sys_nice)
|
||||
NI_SYSCALL /* 35 old ftime syscall */
|
||||
SYSCALL(sys_sync,sys_sync)
|
||||
SYSCALL(sys_kill,compat_sys_kill)
|
||||
SYSCALL(sys_kill,sys_kill)
|
||||
SYSCALL(sys_rename,compat_sys_rename)
|
||||
SYSCALL(sys_mkdir,compat_sys_mkdir)
|
||||
SYSCALL(sys_rmdir,compat_sys_rmdir) /* 40 */
|
||||
SYSCALL(sys_dup,compat_sys_dup)
|
||||
SYSCALL(sys_dup,sys_dup)
|
||||
SYSCALL(sys_pipe,compat_sys_pipe)
|
||||
SYSCALL(sys_times,compat_sys_times)
|
||||
NI_SYSCALL /* old prof syscall */
|
||||
|
@ -65,13 +65,13 @@ NI_SYSCALL /* old lock syscall */
|
|||
SYSCALL(sys_ioctl,compat_sys_ioctl)
|
||||
SYSCALL(sys_fcntl,compat_sys_fcntl) /* 55 */
|
||||
NI_SYSCALL /* intel mpx syscall */
|
||||
SYSCALL(sys_setpgid,compat_sys_setpgid)
|
||||
SYSCALL(sys_setpgid,sys_setpgid)
|
||||
NI_SYSCALL /* old ulimit syscall */
|
||||
NI_SYSCALL /* old uname syscall */
|
||||
SYSCALL(sys_umask,compat_sys_umask) /* 60 */
|
||||
SYSCALL(sys_umask,sys_umask) /* 60 */
|
||||
SYSCALL(sys_chroot,compat_sys_chroot)
|
||||
SYSCALL(sys_ustat,compat_sys_ustat)
|
||||
SYSCALL(sys_dup2,compat_sys_dup2)
|
||||
SYSCALL(sys_dup2,sys_dup2)
|
||||
SYSCALL(sys_getppid,sys_getppid)
|
||||
SYSCALL(sys_getpgrp,sys_getpgrp) /* 65 */
|
||||
SYSCALL(sys_setsid,sys_setsid)
|
||||
|
@ -102,10 +102,10 @@ SYSCALL(sys_old_mmap,compat_sys_s390_old_mmap) /* 90 */
|
|||
SYSCALL(sys_munmap,compat_sys_munmap)
|
||||
SYSCALL(sys_truncate,compat_sys_truncate)
|
||||
SYSCALL(sys_ftruncate,compat_sys_ftruncate)
|
||||
SYSCALL(sys_fchmod,compat_sys_fchmod)
|
||||
SYSCALL(sys_fchmod,sys_fchmod)
|
||||
SYSCALL(sys_ni_syscall,compat_sys_s390_fchown16) /* 95 old fchown16 syscall*/
|
||||
SYSCALL(sys_getpriority,compat_sys_getpriority)
|
||||
SYSCALL(sys_setpriority,compat_sys_setpriority)
|
||||
SYSCALL(sys_getpriority,sys_getpriority)
|
||||
SYSCALL(sys_setpriority,sys_setpriority)
|
||||
NI_SYSCALL /* old profil syscall */
|
||||
SYSCALL(sys_statfs,compat_sys_statfs)
|
||||
SYSCALL(sys_fstatfs,compat_sys_fstatfs) /* 100 */
|
||||
|
@ -126,7 +126,7 @@ SYSCALL(sys_wait4,compat_sys_wait4)
|
|||
SYSCALL(sys_swapoff,compat_sys_swapoff) /* 115 */
|
||||
SYSCALL(sys_sysinfo,compat_sys_sysinfo)
|
||||
SYSCALL(sys_s390_ipc,compat_sys_s390_ipc)
|
||||
SYSCALL(sys_fsync,compat_sys_fsync)
|
||||
SYSCALL(sys_fsync,sys_fsync)
|
||||
SYSCALL(sys_sigreturn,compat_sys_sigreturn)
|
||||
SYSCALL(sys_clone,compat_sys_clone) /* 120 */
|
||||
SYSCALL(sys_setdomainname,compat_sys_setdomainname)
|
||||
|
@ -140,35 +140,35 @@ SYSCALL(sys_init_module,compat_sys_init_module)
|
|||
SYSCALL(sys_delete_module,compat_sys_delete_module)
|
||||
NI_SYSCALL /* 130: old get_kernel_syms */
|
||||
SYSCALL(sys_quotactl,compat_sys_quotactl)
|
||||
SYSCALL(sys_getpgid,compat_sys_getpgid)
|
||||
SYSCALL(sys_fchdir,compat_sys_fchdir)
|
||||
SYSCALL(sys_getpgid,sys_getpgid)
|
||||
SYSCALL(sys_fchdir,sys_fchdir)
|
||||
SYSCALL(sys_bdflush,compat_sys_bdflush)
|
||||
SYSCALL(sys_sysfs,compat_sys_sysfs) /* 135 */
|
||||
SYSCALL(sys_s390_personality,compat_sys_s390_personality)
|
||||
SYSCALL(sys_s390_personality,sys_s390_personality)
|
||||
NI_SYSCALL /* for afs_syscall */
|
||||
SYSCALL(sys_ni_syscall,compat_sys_s390_setfsuid16) /* old setfsuid16 syscall */
|
||||
SYSCALL(sys_ni_syscall,compat_sys_s390_setfsgid16) /* old setfsgid16 syscall */
|
||||
SYSCALL(sys_llseek,compat_sys_llseek) /* 140 */
|
||||
SYSCALL(sys_getdents,compat_sys_getdents)
|
||||
SYSCALL(sys_select,compat_sys_select)
|
||||
SYSCALL(sys_flock,compat_sys_flock)
|
||||
SYSCALL(sys_flock,sys_flock)
|
||||
SYSCALL(sys_msync,compat_sys_msync)
|
||||
SYSCALL(sys_readv,compat_sys_readv) /* 145 */
|
||||
SYSCALL(sys_writev,compat_sys_writev)
|
||||
SYSCALL(sys_getsid,compat_sys_getsid)
|
||||
SYSCALL(sys_fdatasync,compat_sys_fdatasync)
|
||||
SYSCALL(sys_getsid,sys_getsid)
|
||||
SYSCALL(sys_fdatasync,sys_fdatasync)
|
||||
SYSCALL(sys_sysctl,compat_sys_sysctl)
|
||||
SYSCALL(sys_mlock,compat_sys_mlock) /* 150 */
|
||||
SYSCALL(sys_munlock,compat_sys_munlock)
|
||||
SYSCALL(sys_mlockall,compat_sys_mlockall)
|
||||
SYSCALL(sys_mlockall,sys_mlockall)
|
||||
SYSCALL(sys_munlockall,sys_munlockall)
|
||||
SYSCALL(sys_sched_setparam,compat_sys_sched_setparam)
|
||||
SYSCALL(sys_sched_getparam,compat_sys_sched_getparam) /* 155 */
|
||||
SYSCALL(sys_sched_setscheduler,compat_sys_sched_setscheduler)
|
||||
SYSCALL(sys_sched_getscheduler,compat_sys_sched_getscheduler)
|
||||
SYSCALL(sys_sched_getscheduler,sys_sched_getscheduler)
|
||||
SYSCALL(sys_sched_yield,sys_sched_yield)
|
||||
SYSCALL(sys_sched_get_priority_max,compat_sys_sched_get_priority_max)
|
||||
SYSCALL(sys_sched_get_priority_min,compat_sys_sched_get_priority_min) /* 160 */
|
||||
SYSCALL(sys_sched_get_priority_max,sys_sched_get_priority_max)
|
||||
SYSCALL(sys_sched_get_priority_min,sys_sched_get_priority_min) /* 160 */
|
||||
SYSCALL(sys_sched_rr_get_interval,compat_sys_sched_rr_get_interval)
|
||||
SYSCALL(sys_nanosleep,compat_sys_nanosleep)
|
||||
SYSCALL(sys_mremap,compat_sys_mremap)
|
||||
|
@ -211,20 +211,20 @@ SYSCALL(sys_getuid,sys_getuid)
|
|||
SYSCALL(sys_getgid,sys_getgid) /* 200 */
|
||||
SYSCALL(sys_geteuid,sys_geteuid)
|
||||
SYSCALL(sys_getegid,sys_getegid)
|
||||
SYSCALL(sys_setreuid,compat_sys_setreuid)
|
||||
SYSCALL(sys_setregid,compat_sys_setregid)
|
||||
SYSCALL(sys_setreuid,sys_setreuid)
|
||||
SYSCALL(sys_setregid,sys_setregid)
|
||||
SYSCALL(sys_getgroups,compat_sys_getgroups) /* 205 */
|
||||
SYSCALL(sys_setgroups,compat_sys_setgroups)
|
||||
SYSCALL(sys_fchown,compat_sys_fchown)
|
||||
SYSCALL(sys_setresuid,compat_sys_setresuid)
|
||||
SYSCALL(sys_fchown,sys_fchown)
|
||||
SYSCALL(sys_setresuid,sys_setresuid)
|
||||
SYSCALL(sys_getresuid,compat_sys_getresuid)
|
||||
SYSCALL(sys_setresgid,compat_sys_setresgid) /* 210 */
|
||||
SYSCALL(sys_setresgid,sys_setresgid) /* 210 */
|
||||
SYSCALL(sys_getresgid,compat_sys_getresgid)
|
||||
SYSCALL(sys_chown,compat_sys_chown)
|
||||
SYSCALL(sys_setuid,compat_sys_setuid)
|
||||
SYSCALL(sys_setgid,compat_sys_setgid)
|
||||
SYSCALL(sys_setfsuid,compat_sys_setfsuid) /* 215 */
|
||||
SYSCALL(sys_setfsgid,compat_sys_setfsgid)
|
||||
SYSCALL(sys_setuid,sys_setuid)
|
||||
SYSCALL(sys_setgid,sys_setgid)
|
||||
SYSCALL(sys_setfsuid,sys_setfsuid) /* 215 */
|
||||
SYSCALL(sys_setfsgid,sys_setfsgid)
|
||||
SYSCALL(sys_pivot_root,compat_sys_pivot_root)
|
||||
SYSCALL(sys_mincore,compat_sys_mincore)
|
||||
SYSCALL(sys_madvise,compat_sys_madvise)
|
||||
|
@ -245,19 +245,19 @@ SYSCALL(sys_removexattr,compat_sys_removexattr)
|
|||
SYSCALL(sys_lremovexattr,compat_sys_lremovexattr)
|
||||
SYSCALL(sys_fremovexattr,compat_sys_fremovexattr) /* 235 */
|
||||
SYSCALL(sys_gettid,sys_gettid)
|
||||
SYSCALL(sys_tkill,compat_sys_tkill)
|
||||
SYSCALL(sys_tkill,sys_tkill)
|
||||
SYSCALL(sys_futex,compat_sys_futex)
|
||||
SYSCALL(sys_sched_setaffinity,compat_sys_sched_setaffinity)
|
||||
SYSCALL(sys_sched_getaffinity,compat_sys_sched_getaffinity) /* 240 */
|
||||
SYSCALL(sys_tgkill,compat_sys_tgkill)
|
||||
SYSCALL(sys_tgkill,sys_tgkill)
|
||||
NI_SYSCALL /* reserved for TUX */
|
||||
SYSCALL(sys_io_setup,compat_sys_io_setup)
|
||||
SYSCALL(sys_io_destroy,compat_sys_io_destroy)
|
||||
SYSCALL(sys_io_getevents,compat_sys_io_getevents) /* 245 */
|
||||
SYSCALL(sys_io_submit,compat_sys_io_submit)
|
||||
SYSCALL(sys_io_cancel,compat_sys_io_cancel)
|
||||
SYSCALL(sys_exit_group,compat_sys_exit_group)
|
||||
SYSCALL(sys_epoll_create,compat_sys_epoll_create)
|
||||
SYSCALL(sys_exit_group,sys_exit_group)
|
||||
SYSCALL(sys_epoll_create,sys_epoll_create)
|
||||
SYSCALL(sys_epoll_ctl,compat_sys_epoll_ctl) /* 250 */
|
||||
SYSCALL(sys_epoll_wait,compat_sys_epoll_wait)
|
||||
SYSCALL(sys_set_tid_address,compat_sys_set_tid_address)
|
||||
|
@ -265,8 +265,8 @@ SYSCALL(sys_fadvise64_64,compat_sys_s390_fadvise64)
|
|||
SYSCALL(sys_timer_create,compat_sys_timer_create)
|
||||
SYSCALL(sys_timer_settime,compat_sys_timer_settime) /* 255 */
|
||||
SYSCALL(sys_timer_gettime,compat_sys_timer_gettime)
|
||||
SYSCALL(sys_timer_getoverrun,compat_sys_timer_getoverrun)
|
||||
SYSCALL(sys_timer_delete,compat_sys_timer_delete)
|
||||
SYSCALL(sys_timer_getoverrun,sys_timer_getoverrun)
|
||||
SYSCALL(sys_timer_delete,sys_timer_delete)
|
||||
SYSCALL(sys_clock_settime,compat_sys_clock_settime)
|
||||
SYSCALL(sys_clock_gettime,compat_sys_clock_gettime) /* 260 */
|
||||
SYSCALL(sys_clock_getres,compat_sys_clock_getres)
|
||||
|
@ -290,11 +290,11 @@ SYSCALL(sys_add_key,compat_sys_add_key)
|
|||
SYSCALL(sys_request_key,compat_sys_request_key)
|
||||
SYSCALL(sys_keyctl,compat_sys_keyctl) /* 280 */
|
||||
SYSCALL(sys_waitid,compat_sys_waitid)
|
||||
SYSCALL(sys_ioprio_set,compat_sys_ioprio_set)
|
||||
SYSCALL(sys_ioprio_get,compat_sys_ioprio_get)
|
||||
SYSCALL(sys_ioprio_set,sys_ioprio_set)
|
||||
SYSCALL(sys_ioprio_get,sys_ioprio_get)
|
||||
SYSCALL(sys_inotify_init,sys_inotify_init)
|
||||
SYSCALL(sys_inotify_add_watch,compat_sys_inotify_add_watch) /* 285 */
|
||||
SYSCALL(sys_inotify_rm_watch,compat_sys_inotify_rm_watch)
|
||||
SYSCALL(sys_inotify_rm_watch,sys_inotify_rm_watch)
|
||||
SYSCALL(sys_migrate_pages,compat_sys_migrate_pages)
|
||||
SYSCALL(sys_openat,compat_sys_openat)
|
||||
SYSCALL(sys_mkdirat,compat_sys_mkdirat)
|
||||
|
@ -326,31 +326,31 @@ SYSCALL(sys_fallocate,compat_sys_s390_fallocate)
|
|||
SYSCALL(sys_utimensat,compat_sys_utimensat) /* 315 */
|
||||
SYSCALL(sys_signalfd,compat_sys_signalfd)
|
||||
NI_SYSCALL /* 317 old sys_timer_fd */
|
||||
SYSCALL(sys_eventfd,compat_sys_eventfd)
|
||||
SYSCALL(sys_timerfd_create,compat_sys_timerfd_create)
|
||||
SYSCALL(sys_eventfd,sys_eventfd)
|
||||
SYSCALL(sys_timerfd_create,sys_timerfd_create)
|
||||
SYSCALL(sys_timerfd_settime,compat_sys_timerfd_settime) /* 320 */
|
||||
SYSCALL(sys_timerfd_gettime,compat_sys_timerfd_gettime)
|
||||
SYSCALL(sys_signalfd4,compat_sys_signalfd4)
|
||||
SYSCALL(sys_eventfd2,compat_sys_eventfd2)
|
||||
SYSCALL(sys_inotify_init1,compat_sys_inotify_init1)
|
||||
SYSCALL(sys_eventfd2,sys_eventfd2)
|
||||
SYSCALL(sys_inotify_init1,sys_inotify_init1)
|
||||
SYSCALL(sys_pipe2,compat_sys_pipe2) /* 325 */
|
||||
SYSCALL(sys_dup3,compat_sys_dup3)
|
||||
SYSCALL(sys_epoll_create1,compat_sys_epoll_create1)
|
||||
SYSCALL(sys_dup3,sys_dup3)
|
||||
SYSCALL(sys_epoll_create1,sys_epoll_create1)
|
||||
SYSCALL(sys_preadv,compat_sys_preadv)
|
||||
SYSCALL(sys_pwritev,compat_sys_pwritev)
|
||||
SYSCALL(sys_rt_tgsigqueueinfo,compat_sys_rt_tgsigqueueinfo) /* 330 */
|
||||
SYSCALL(sys_perf_event_open,compat_sys_perf_event_open)
|
||||
SYSCALL(sys_fanotify_init,compat_sys_fanotify_init)
|
||||
SYSCALL(sys_fanotify_init,sys_fanotify_init)
|
||||
SYSCALL(sys_fanotify_mark,compat_sys_fanotify_mark)
|
||||
SYSCALL(sys_prlimit64,compat_sys_prlimit64)
|
||||
SYSCALL(sys_name_to_handle_at,compat_sys_name_to_handle_at) /* 335 */
|
||||
SYSCALL(sys_open_by_handle_at,compat_sys_open_by_handle_at)
|
||||
SYSCALL(sys_clock_adjtime,compat_sys_clock_adjtime)
|
||||
SYSCALL(sys_syncfs,compat_sys_syncfs)
|
||||
SYSCALL(sys_setns,compat_sys_setns)
|
||||
SYSCALL(sys_syncfs,sys_syncfs)
|
||||
SYSCALL(sys_setns,sys_setns)
|
||||
SYSCALL(sys_process_vm_readv,compat_sys_process_vm_readv) /* 340 */
|
||||
SYSCALL(sys_process_vm_writev,compat_sys_process_vm_writev)
|
||||
SYSCALL(sys_s390_runtime_instr,compat_sys_s390_runtime_instr)
|
||||
SYSCALL(sys_s390_runtime_instr,sys_s390_runtime_instr)
|
||||
SYSCALL(sys_kcmp,compat_sys_kcmp)
|
||||
SYSCALL(sys_finit_module,compat_sys_finit_module)
|
||||
SYSCALL(sys_sched_setattr,compat_sys_sched_setattr) /* 345 */
|
||||
|
@ -363,3 +363,22 @@ SYSCALL(sys_bpf,compat_sys_bpf)
|
|||
SYSCALL(sys_s390_pci_mmio_write,compat_sys_s390_pci_mmio_write)
|
||||
SYSCALL(sys_s390_pci_mmio_read,compat_sys_s390_pci_mmio_read)
|
||||
SYSCALL(sys_execveat,compat_sys_execveat)
|
||||
SYSCALL(sys_userfaultfd,sys_userfaultfd) /* 355 */
|
||||
SYSCALL(sys_membarrier,sys_membarrier)
|
||||
SYSCALL(sys_recvmmsg,compat_sys_recvmmsg)
|
||||
SYSCALL(sys_sendmmsg,compat_sys_sendmmsg)
|
||||
SYSCALL(sys_socket,sys_socket)
|
||||
SYSCALL(sys_socketpair,compat_sys_socketpair) /* 360 */
|
||||
SYSCALL(sys_bind,sys_bind)
|
||||
SYSCALL(sys_connect,sys_connect)
|
||||
SYSCALL(sys_listen,sys_listen)
|
||||
SYSCALL(sys_accept4,sys_accept4)
|
||||
SYSCALL(sys_getsockopt,compat_sys_getsockopt) /* 365 */
|
||||
SYSCALL(sys_setsockopt,compat_sys_setsockopt)
|
||||
SYSCALL(sys_getsockname,compat_sys_getsockname)
|
||||
SYSCALL(sys_getpeername,compat_sys_getpeername)
|
||||
SYSCALL(sys_sendto,compat_sys_sendto)
|
||||
SYSCALL(sys_sendmsg,compat_sys_sendmsg) /* 370 */
|
||||
SYSCALL(sys_recvfrom,compat_sys_recvfrom)
|
||||
SYSCALL(sys_recvmsg,compat_sys_recvmsg)
|
||||
SYSCALL(sys_shutdown,sys_shutdown)
|
||||
|
|
|
@ -89,17 +89,21 @@ static int do_account_vtime(struct task_struct *tsk, int hardirq_offset)
|
|||
if (smp_cpu_mtid &&
|
||||
time_after64(jiffies_64, __this_cpu_read(mt_scaling_jiffies))) {
|
||||
u64 cycles_new[32], *cycles_old;
|
||||
u64 delta, mult, div;
|
||||
u64 delta, fac, mult, div;
|
||||
|
||||
cycles_old = this_cpu_ptr(mt_cycles);
|
||||
if (stcctm5(smp_cpu_mtid + 1, cycles_new) < 2) {
|
||||
fac = 1;
|
||||
mult = div = 0;
|
||||
for (i = 0; i <= smp_cpu_mtid; i++) {
|
||||
delta = cycles_new[i] - cycles_old[i];
|
||||
mult += delta;
|
||||
div += (i + 1) * delta;
|
||||
div += delta;
|
||||
mult *= i + 1;
|
||||
mult += delta * fac;
|
||||
fac *= i + 1;
|
||||
}
|
||||
if (mult > 0) {
|
||||
div *= fac;
|
||||
if (div > 0) {
|
||||
/* Update scaling factor */
|
||||
__this_cpu_write(mt_scaling_mult, mult);
|
||||
__this_cpu_write(mt_scaling_div, div);
|
||||
|
|
|
@ -1128,7 +1128,18 @@ END(error_exit)
|
|||
|
||||
/* Runs on exception stack */
|
||||
ENTRY(nmi)
|
||||
/*
|
||||
* Fix up the exception frame if we're on Xen.
|
||||
* PARAVIRT_ADJUST_EXCEPTION_FRAME is guaranteed to push at most
|
||||
* one value to the stack on native, so it may clobber the rdx
|
||||
* scratch slot, but it won't clobber any of the important
|
||||
* slots past it.
|
||||
*
|
||||
* Xen is a different story, because the Xen frame itself overlaps
|
||||
* the "NMI executing" variable.
|
||||
*/
|
||||
PARAVIRT_ADJUST_EXCEPTION_FRAME
|
||||
|
||||
/*
|
||||
* We allow breakpoints in NMIs. If a breakpoint occurs, then
|
||||
* the iretq it performs will take us out of NMI context.
|
||||
|
@ -1179,9 +1190,12 @@ ENTRY(nmi)
|
|||
* we don't want to enable interrupts, because then we'll end
|
||||
* up in an awkward situation in which IRQs are on but NMIs
|
||||
* are off.
|
||||
*
|
||||
* We also must not push anything to the stack before switching
|
||||
* stacks lest we corrupt the "NMI executing" variable.
|
||||
*/
|
||||
|
||||
SWAPGS
|
||||
SWAPGS_UNSAFE_STACK
|
||||
cld
|
||||
movq %rsp, %rdx
|
||||
movq PER_CPU_VAR(cpu_current_top_of_stack), %rsp
|
||||
|
|
|
@ -86,6 +86,16 @@ extern u64 asmlinkage efi_call(void *fp, ...);
|
|||
extern void __iomem *__init efi_ioremap(unsigned long addr, unsigned long size,
|
||||
u32 type, u64 attribute);
|
||||
|
||||
/*
|
||||
* CONFIG_KASAN may redefine memset to __memset. __memset function is present
|
||||
* only in kernel binary. Since the EFI stub linked into a separate binary it
|
||||
* doesn't have __memset(). So we should use standard memset from
|
||||
* arch/x86/boot/compressed/string.c. The same applies to memcpy and memmove.
|
||||
*/
|
||||
#undef memcpy
|
||||
#undef memset
|
||||
#undef memmove
|
||||
|
||||
#endif /* CONFIG_X86_32 */
|
||||
|
||||
extern struct efi_scratch efi_scratch;
|
||||
|
|
|
@ -40,6 +40,7 @@
|
|||
|
||||
#define KVM_PIO_PAGE_OFFSET 1
|
||||
#define KVM_COALESCED_MMIO_PAGE_OFFSET 2
|
||||
#define KVM_HALT_POLL_NS_DEFAULT 500000
|
||||
|
||||
#define KVM_IRQCHIP_NUM_PINS KVM_IOAPIC_NUM_PINS
|
||||
|
||||
|
|
|
@ -331,6 +331,7 @@
|
|||
/* C1E active bits in int pending message */
|
||||
#define K8_INTP_C1E_ACTIVE_MASK 0x18000000
|
||||
#define MSR_K8_TSEG_ADDR 0xc0010112
|
||||
#define MSR_K8_TSEG_MASK 0xc0010113
|
||||
#define K8_MTRRFIXRANGE_DRAM_ENABLE 0x00040000 /* MtrrFixDramEn bit */
|
||||
#define K8_MTRRFIXRANGE_DRAM_MODIFY 0x00080000 /* MtrrFixDramModEn bit */
|
||||
#define K8_MTRR_RDMEM_WRMEM_MASK 0x18181818 /* Mask: RdMem|WrMem */
|
||||
|
|
|
@ -41,10 +41,18 @@
|
|||
#include <asm/timer.h>
|
||||
#include <asm/special_insns.h>
|
||||
|
||||
/* nop stub */
|
||||
void _paravirt_nop(void)
|
||||
{
|
||||
}
|
||||
/*
|
||||
* nop stub, which must not clobber anything *including the stack* to
|
||||
* avoid confusing the entry prologues.
|
||||
*/
|
||||
extern void _paravirt_nop(void);
|
||||
asm (".pushsection .entry.text, \"ax\"\n"
|
||||
".global _paravirt_nop\n"
|
||||
"_paravirt_nop:\n\t"
|
||||
"ret\n\t"
|
||||
".size _paravirt_nop, . - _paravirt_nop\n\t"
|
||||
".type _paravirt_nop, @function\n\t"
|
||||
".popsection");
|
||||
|
||||
/* identity function, which can be inlined */
|
||||
u32 _paravirt_ident_32(u32 x)
|
||||
|
|
|
@ -3322,7 +3322,7 @@ walk_shadow_page_get_mmio_spte(struct kvm_vcpu *vcpu, u64 addr, u64 *sptep)
|
|||
break;
|
||||
|
||||
reserved |= is_shadow_zero_bits_set(&vcpu->arch.mmu, spte,
|
||||
leaf);
|
||||
iterator.level);
|
||||
}
|
||||
|
||||
walk_shadow_page_lockless_end(vcpu);
|
||||
|
@ -3614,7 +3614,7 @@ static void
|
|||
__reset_rsvds_bits_mask(struct kvm_vcpu *vcpu,
|
||||
struct rsvd_bits_validate *rsvd_check,
|
||||
int maxphyaddr, int level, bool nx, bool gbpages,
|
||||
bool pse)
|
||||
bool pse, bool amd)
|
||||
{
|
||||
u64 exb_bit_rsvd = 0;
|
||||
u64 gbpages_bit_rsvd = 0;
|
||||
|
@ -3631,7 +3631,7 @@ __reset_rsvds_bits_mask(struct kvm_vcpu *vcpu,
|
|||
* Non-leaf PML4Es and PDPEs reserve bit 8 (which would be the G bit for
|
||||
* leaf entries) on AMD CPUs only.
|
||||
*/
|
||||
if (guest_cpuid_is_amd(vcpu))
|
||||
if (amd)
|
||||
nonleaf_bit8_rsvd = rsvd_bits(8, 8);
|
||||
|
||||
switch (level) {
|
||||
|
@ -3699,7 +3699,7 @@ static void reset_rsvds_bits_mask(struct kvm_vcpu *vcpu,
|
|||
__reset_rsvds_bits_mask(vcpu, &context->guest_rsvd_check,
|
||||
cpuid_maxphyaddr(vcpu), context->root_level,
|
||||
context->nx, guest_cpuid_has_gbpages(vcpu),
|
||||
is_pse(vcpu));
|
||||
is_pse(vcpu), guest_cpuid_is_amd(vcpu));
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -3749,13 +3749,24 @@ static void reset_rsvds_bits_mask_ept(struct kvm_vcpu *vcpu,
|
|||
void
|
||||
reset_shadow_zero_bits_mask(struct kvm_vcpu *vcpu, struct kvm_mmu *context)
|
||||
{
|
||||
/*
|
||||
* Passing "true" to the last argument is okay; it adds a check
|
||||
* on bit 8 of the SPTEs which KVM doesn't use anyway.
|
||||
*/
|
||||
__reset_rsvds_bits_mask(vcpu, &context->shadow_zero_check,
|
||||
boot_cpu_data.x86_phys_bits,
|
||||
context->shadow_root_level, context->nx,
|
||||
guest_cpuid_has_gbpages(vcpu), is_pse(vcpu));
|
||||
guest_cpuid_has_gbpages(vcpu), is_pse(vcpu),
|
||||
true);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(reset_shadow_zero_bits_mask);
|
||||
|
||||
static inline bool boot_cpu_is_amd(void)
|
||||
{
|
||||
WARN_ON_ONCE(!tdp_enabled);
|
||||
return shadow_x_mask == 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* the direct page table on host, use as much mmu features as
|
||||
* possible, however, kvm currently does not do execution-protection.
|
||||
|
@ -3764,11 +3775,11 @@ static void
|
|||
reset_tdp_shadow_zero_bits_mask(struct kvm_vcpu *vcpu,
|
||||
struct kvm_mmu *context)
|
||||
{
|
||||
if (guest_cpuid_is_amd(vcpu))
|
||||
if (boot_cpu_is_amd())
|
||||
__reset_rsvds_bits_mask(vcpu, &context->shadow_zero_check,
|
||||
boot_cpu_data.x86_phys_bits,
|
||||
context->shadow_root_level, false,
|
||||
cpu_has_gbpages, true);
|
||||
cpu_has_gbpages, true, true);
|
||||
else
|
||||
__reset_rsvds_bits_mask_ept(&context->shadow_zero_check,
|
||||
boot_cpu_data.x86_phys_bits,
|
||||
|
|
|
@ -202,6 +202,7 @@ module_param(npt, int, S_IRUGO);
|
|||
static int nested = true;
|
||||
module_param(nested, int, S_IRUGO);
|
||||
|
||||
static void svm_set_cr0(struct kvm_vcpu *vcpu, unsigned long cr0);
|
||||
static void svm_flush_tlb(struct kvm_vcpu *vcpu);
|
||||
static void svm_complete_interrupts(struct vcpu_svm *svm);
|
||||
|
||||
|
@ -1263,7 +1264,8 @@ static void init_vmcb(struct vcpu_svm *svm, bool init_event)
|
|||
* svm_set_cr0() sets PG and WP and clears NW and CD on save->cr0.
|
||||
* It also updates the guest-visible cr0 value.
|
||||
*/
|
||||
(void)kvm_set_cr0(&svm->vcpu, X86_CR0_NW | X86_CR0_CD | X86_CR0_ET);
|
||||
svm_set_cr0(&svm->vcpu, X86_CR0_NW | X86_CR0_CD | X86_CR0_ET);
|
||||
kvm_mmu_reset_context(&svm->vcpu);
|
||||
|
||||
save->cr4 = X86_CR4_PAE;
|
||||
/* rdx = ?? */
|
||||
|
|
|
@ -2190,6 +2190,8 @@ int kvm_get_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
|
|||
case MSR_IA32_LASTINTFROMIP:
|
||||
case MSR_IA32_LASTINTTOIP:
|
||||
case MSR_K8_SYSCFG:
|
||||
case MSR_K8_TSEG_ADDR:
|
||||
case MSR_K8_TSEG_MASK:
|
||||
case MSR_K7_HWCR:
|
||||
case MSR_VM_HSAVE_PA:
|
||||
case MSR_K8_INT_PENDING_MSG:
|
||||
|
|
|
@ -166,6 +166,7 @@ void pcibios_fixup_bus(struct pci_bus *b)
|
|||
{
|
||||
struct pci_dev *dev;
|
||||
|
||||
pci_read_bridge_bases(b);
|
||||
list_for_each_entry(dev, &b->devices, bus_list)
|
||||
pcibios_fixup_device_resources(dev);
|
||||
}
|
||||
|
|
|
@ -210,6 +210,10 @@ subsys_initcall(pcibios_init);
|
|||
|
||||
void pcibios_fixup_bus(struct pci_bus *bus)
|
||||
{
|
||||
if (bus->parent) {
|
||||
/* This is a subordinate bridge */
|
||||
pci_read_bridge_bases(bus);
|
||||
}
|
||||
}
|
||||
|
||||
void pcibios_set_master(struct pci_dev *dev)
|
||||
|
|
|
@ -1578,8 +1578,6 @@ he_stop(struct he_dev *he_dev)
|
|||
|
||||
kfree(he_dev->rbpl_virt);
|
||||
kfree(he_dev->rbpl_table);
|
||||
|
||||
if (he_dev->rbpl_pool)
|
||||
dma_pool_destroy(he_dev->rbpl_pool);
|
||||
|
||||
if (he_dev->rbrq_base)
|
||||
|
@ -1594,7 +1592,6 @@ he_stop(struct he_dev *he_dev)
|
|||
dma_free_coherent(&he_dev->pci_dev->dev, CONFIG_TBRQ_SIZE * sizeof(struct he_tbrq),
|
||||
he_dev->tpdrq_base, he_dev->tpdrq_phys);
|
||||
|
||||
if (he_dev->tpd_pool)
|
||||
dma_pool_destroy(he_dev->tpd_pool);
|
||||
|
||||
if (he_dev->pci_dev) {
|
||||
|
|
|
@ -805,7 +805,12 @@ static void solos_bh(unsigned long card_arg)
|
|||
continue;
|
||||
}
|
||||
|
||||
skb = alloc_skb(size + 1, GFP_ATOMIC);
|
||||
/* Use netdev_alloc_skb() because it adds NET_SKB_PAD of
|
||||
* headroom, and ensures we can route packets back out an
|
||||
* Ethernet interface (for example) without having to
|
||||
* reallocate. Adding NET_IP_ALIGN also ensures that both
|
||||
* PPPoATM and PPPoEoBR2684 packets end up aligned. */
|
||||
skb = netdev_alloc_skb_ip_align(NULL, size + 1);
|
||||
if (!skb) {
|
||||
if (net_ratelimit())
|
||||
dev_warn(&card->dev->dev, "Failed to allocate sk_buff for RX\n");
|
||||
|
@ -869,7 +874,10 @@ static void solos_bh(unsigned long card_arg)
|
|||
/* Allocate RX skbs for any ports which need them */
|
||||
if (card->using_dma && card->atmdev[port] &&
|
||||
!card->rx_skb[port]) {
|
||||
struct sk_buff *skb = alloc_skb(RX_DMA_SIZE, GFP_ATOMIC);
|
||||
/* Unlike the MMIO case (qv) we can't add NET_IP_ALIGN
|
||||
* here; the FPGA can only DMA to addresses which are
|
||||
* aligned to 4 bytes. */
|
||||
struct sk_buff *skb = dev_alloc_skb(RX_DMA_SIZE);
|
||||
if (skb) {
|
||||
SKB_CB(skb)->dma_addr =
|
||||
dma_map_single(&card->dev->dev, skb->data,
|
||||
|
|
|
@ -148,7 +148,11 @@ static void cache_shared_cpu_map_remove(unsigned int cpu)
|
|||
|
||||
if (sibling == cpu) /* skip itself */
|
||||
continue;
|
||||
|
||||
sib_cpu_ci = get_cpu_cacheinfo(sibling);
|
||||
if (!sib_cpu_ci->info_list)
|
||||
continue;
|
||||
|
||||
sib_leaf = sib_cpu_ci->info_list + index;
|
||||
cpumask_clear_cpu(cpu, &sib_leaf->shared_cpu_map);
|
||||
cpumask_clear_cpu(sibling, &this_leaf->shared_cpu_map);
|
||||
|
@ -159,6 +163,9 @@ static void cache_shared_cpu_map_remove(unsigned int cpu)
|
|||
|
||||
static void free_cache_attributes(unsigned int cpu)
|
||||
{
|
||||
if (!per_cpu_cacheinfo(cpu))
|
||||
return;
|
||||
|
||||
cache_shared_cpu_map_remove(cpu);
|
||||
|
||||
kfree(per_cpu_cacheinfo(cpu));
|
||||
|
@ -514,7 +521,6 @@ static int cacheinfo_cpu_callback(struct notifier_block *nfb,
|
|||
break;
|
||||
case CPU_DEAD:
|
||||
cache_remove_dev(cpu);
|
||||
if (per_cpu_cacheinfo(cpu))
|
||||
free_cache_attributes(cpu);
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -344,11 +344,12 @@ static int xgene_rng_probe(struct platform_device *pdev)
|
|||
if (IS_ERR(ctx->csr_base))
|
||||
return PTR_ERR(ctx->csr_base);
|
||||
|
||||
ctx->irq = platform_get_irq(pdev, 0);
|
||||
if (ctx->irq < 0) {
|
||||
rc = platform_get_irq(pdev, 0);
|
||||
if (rc < 0) {
|
||||
dev_err(&pdev->dev, "No IRQ resource\n");
|
||||
return ctx->irq;
|
||||
return rc;
|
||||
}
|
||||
ctx->irq = rc;
|
||||
|
||||
dev_dbg(&pdev->dev, "APM X-Gene RNG BASE %p ALARM IRQ %d",
|
||||
ctx->csr_base, ctx->irq);
|
||||
|
|
|
@ -687,6 +687,33 @@ static inline u32 mv_cesa_get_int_mask(struct mv_cesa_engine *engine)
|
|||
|
||||
int mv_cesa_queue_req(struct crypto_async_request *req);
|
||||
|
||||
/*
|
||||
* Helper function that indicates whether a crypto request needs to be
|
||||
* cleaned up or not after being enqueued using mv_cesa_queue_req().
|
||||
*/
|
||||
static inline int mv_cesa_req_needs_cleanup(struct crypto_async_request *req,
|
||||
int ret)
|
||||
{
|
||||
/*
|
||||
* The queue still had some space, the request was queued
|
||||
* normally, so there's no need to clean it up.
|
||||
*/
|
||||
if (ret == -EINPROGRESS)
|
||||
return false;
|
||||
|
||||
/*
|
||||
* The queue had not space left, but since the request is
|
||||
* flagged with CRYPTO_TFM_REQ_MAY_BACKLOG, it was added to
|
||||
* the backlog and will be processed later. There's no need to
|
||||
* clean it up.
|
||||
*/
|
||||
if (ret == -EBUSY && req->flags & CRYPTO_TFM_REQ_MAY_BACKLOG)
|
||||
return false;
|
||||
|
||||
/* Request wasn't queued, we need to clean it up */
|
||||
return true;
|
||||
}
|
||||
|
||||
/* TDMA functions */
|
||||
|
||||
static inline void mv_cesa_req_dma_iter_init(struct mv_cesa_dma_iter *iter,
|
||||
|
|
|
@ -189,7 +189,6 @@ static inline void mv_cesa_ablkcipher_prepare(struct crypto_async_request *req,
|
|||
{
|
||||
struct ablkcipher_request *ablkreq = ablkcipher_request_cast(req);
|
||||
struct mv_cesa_ablkcipher_req *creq = ablkcipher_request_ctx(ablkreq);
|
||||
|
||||
creq->req.base.engine = engine;
|
||||
|
||||
if (creq->req.base.type == CESA_DMA_REQ)
|
||||
|
@ -431,7 +430,7 @@ static int mv_cesa_des_op(struct ablkcipher_request *req,
|
|||
return ret;
|
||||
|
||||
ret = mv_cesa_queue_req(&req->base);
|
||||
if (ret && ret != -EINPROGRESS)
|
||||
if (mv_cesa_req_needs_cleanup(&req->base, ret))
|
||||
mv_cesa_ablkcipher_cleanup(req);
|
||||
|
||||
return ret;
|
||||
|
@ -551,7 +550,7 @@ static int mv_cesa_des3_op(struct ablkcipher_request *req,
|
|||
return ret;
|
||||
|
||||
ret = mv_cesa_queue_req(&req->base);
|
||||
if (ret && ret != -EINPROGRESS)
|
||||
if (mv_cesa_req_needs_cleanup(&req->base, ret))
|
||||
mv_cesa_ablkcipher_cleanup(req);
|
||||
|
||||
return ret;
|
||||
|
@ -693,7 +692,7 @@ static int mv_cesa_aes_op(struct ablkcipher_request *req,
|
|||
return ret;
|
||||
|
||||
ret = mv_cesa_queue_req(&req->base);
|
||||
if (ret && ret != -EINPROGRESS)
|
||||
if (mv_cesa_req_needs_cleanup(&req->base, ret))
|
||||
mv_cesa_ablkcipher_cleanup(req);
|
||||
|
||||
return ret;
|
||||
|
|
|
@ -739,10 +739,8 @@ static int mv_cesa_ahash_update(struct ahash_request *req)
|
|||
return 0;
|
||||
|
||||
ret = mv_cesa_queue_req(&req->base);
|
||||
if (ret && ret != -EINPROGRESS) {
|
||||
if (mv_cesa_req_needs_cleanup(&req->base, ret))
|
||||
mv_cesa_ahash_cleanup(req);
|
||||
return ret;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -766,7 +764,7 @@ static int mv_cesa_ahash_final(struct ahash_request *req)
|
|||
return 0;
|
||||
|
||||
ret = mv_cesa_queue_req(&req->base);
|
||||
if (ret && ret != -EINPROGRESS)
|
||||
if (mv_cesa_req_needs_cleanup(&req->base, ret))
|
||||
mv_cesa_ahash_cleanup(req);
|
||||
|
||||
return ret;
|
||||
|
@ -791,7 +789,7 @@ static int mv_cesa_ahash_finup(struct ahash_request *req)
|
|||
return 0;
|
||||
|
||||
ret = mv_cesa_queue_req(&req->base);
|
||||
if (ret && ret != -EINPROGRESS)
|
||||
if (mv_cesa_req_needs_cleanup(&req->base, ret))
|
||||
mv_cesa_ahash_cleanup(req);
|
||||
|
||||
return ret;
|
||||
|
|
|
@ -88,6 +88,9 @@ static void adf_dev_restore(struct adf_accel_dev *accel_dev)
|
|||
struct pci_dev *parent = pdev->bus->self;
|
||||
uint16_t bridge_ctl = 0;
|
||||
|
||||
if (accel_dev->is_vf)
|
||||
return;
|
||||
|
||||
dev_info(&GET_DEV(accel_dev), "Resetting device qat_dev%d\n",
|
||||
accel_dev->accel_id);
|
||||
|
||||
|
|
|
@ -159,7 +159,7 @@ static int find_cable_index_by_name(struct extcon_dev *edev, const char *name)
|
|||
static bool is_extcon_changed(u32 prev, u32 new, int idx, bool *attached)
|
||||
{
|
||||
if (((prev >> idx) & 0x1) != ((new >> idx) & 0x1)) {
|
||||
*attached = new ? true : false;
|
||||
*attached = ((new >> idx) & 0x1) ? true : false;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -139,6 +139,14 @@ config QCOM_SCM
|
|||
bool
|
||||
depends on ARM || ARM64
|
||||
|
||||
config QCOM_SCM_32
|
||||
def_bool y
|
||||
depends on QCOM_SCM && ARM
|
||||
|
||||
config QCOM_SCM_64
|
||||
def_bool y
|
||||
depends on QCOM_SCM && ARM64
|
||||
|
||||
source "drivers/firmware/broadcom/Kconfig"
|
||||
source "drivers/firmware/google/Kconfig"
|
||||
source "drivers/firmware/efi/Kconfig"
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue