Linux 4.17-rc4
-----BEGIN PGP SIGNATURE----- iQFSBAABCAA8FiEEq68RxlopcLEwq+PEeb4+QwBBGIYFAlrvwLAeHHRvcnZhbGRz QGxpbnV4LWZvdW5kYXRpb24ub3JnAAoJEHm+PkMAQRiGEX4H/iRAefubpMXptH55 ru/Mr7hsbKtKQOCmH3LuYP2SwSEHclX+kxHfiaIMsBN9iOGWpRJkZVLuOG0Vl0sZ d68I5UTEJHPY0FZqOvfXY1sLTfG9jlhQ/SyppVyuL+QbH+cecnWqvkMkwo2p99MJ 7OZ3wZjSObaJGXEoLUbZrEbTf8PsT8eT7MWMkmOJHO/J8rnnoDKaOiB5fBxhck0M xd/FdOYNZhqOfzIMUuLPWPE3THjfJuIQOYsTvEq0lcuAD2ZOesbV5hsGLC1AG6jd GaJJKy80mRvPXSLv7GTigBG9zZbs0mszDJeeh0FCjSlc3sjMDZn7A12N1c8AcQ52 rLmzSQ8= =Nmna -----END PGP SIGNATURE----- Merge tag 'v4.17-rc4' into patchwork Linux 4.17-rc4 * tag 'v4.17-rc4': (920 commits) Linux 4.17-rc4 KVM: x86: remove APIC Timer periodic/oneshot spikes genksyms: fix typo in parse.tab.{c,h} generation rules kbuild: replace hardcoded bison in cmd_bison_h with $(YACC) gcc-plugins: fix build condition of SANCOV plugin MAINTAINERS: Update Kbuild entry with a few paths Revert "usb: host: ehci: Use dma_pool_zalloc()" platform/x86: Kconfig: Fix dell-laptop dependency chain. platform/x86: asus-wireless: Fix NULL pointer dereference arm64: vgic-v2: Fix proxying of cpuif access KVM: arm/arm64: vgic_init: Cleanup reference to process_maintenance KVM: arm64: Fix order of vcpu_write_sys_reg() arguments MAINTAINERS & files: Canonize the e-mails I use at files media: imx-media-csi: Fix inconsistent IS_ERR and PTR_ERR tools: power/acpi, revert to LD = gcc bdi: Fix oops in wb_workfn() RDMA/cma: Do not query GID during QP state transition to RTR IB/mlx4: Fix integer overflow when calculating optimal MTT size IB/hfi1: Fix memory leak in exception path in get_irq_affinity() IB/{hfi1, rdmavt}: Fix memory leak in hfi1_alloc_devdata() upon failure ...
This commit is contained in:
commit
71db1cd7ff
|
@ -557,6 +557,14 @@ A: Although LLVM IR generation and optimization try to stay architecture
|
|||
pulls in some header files containing file scope host assembly codes.
|
||||
- You can add "-fno-jump-tables" to work around the switch table issue.
|
||||
|
||||
Otherwise, you can use bpf target.
|
||||
Otherwise, you can use bpf target. Additionally, you _must_ use bpf target
|
||||
when:
|
||||
|
||||
- Your program uses data structures with pointer or long / unsigned long
|
||||
types that interface with BPF helpers or context data structures. Access
|
||||
into these structures is verified by the BPF verifier and may result
|
||||
in verification failures if the native architecture is not aligned with
|
||||
the BPF architecture, e.g. 64-bit. An example of this is
|
||||
BPF_PROG_TYPE_SK_MSG require '-target bpf'
|
||||
|
||||
Happy BPF hacking!
|
||||
|
|
|
@ -136,6 +136,19 @@ Sorting
|
|||
.. kernel-doc:: lib/list_sort.c
|
||||
:export:
|
||||
|
||||
Text Searching
|
||||
--------------
|
||||
|
||||
.. kernel-doc:: lib/textsearch.c
|
||||
:doc: ts_intro
|
||||
|
||||
.. kernel-doc:: lib/textsearch.c
|
||||
:export:
|
||||
|
||||
.. kernel-doc:: include/linux/textsearch.h
|
||||
:functions: textsearch_find textsearch_next \
|
||||
textsearch_get_pattern textsearch_get_pattern_len
|
||||
|
||||
UUID/GUID
|
||||
---------
|
||||
|
||||
|
|
|
@ -4,6 +4,13 @@ Required properties:
|
|||
- compatible:
|
||||
atmel,maxtouch
|
||||
|
||||
The following compatibles have been used in various products but are
|
||||
deprecated:
|
||||
atmel,qt602240_ts
|
||||
atmel,atmel_mxt_ts
|
||||
atmel,atmel_mxt_tp
|
||||
atmel,mXT224
|
||||
|
||||
- reg: The I2C address of the device
|
||||
|
||||
- interrupts: The sink for the touchpad's IRQ output
|
||||
|
|
|
@ -21,7 +21,7 @@ Required properties:
|
|||
- interrupts : identifier to the device interrupt
|
||||
- clocks : a list of phandle + clock-specifier pairs, one for each
|
||||
entry in clock names.
|
||||
- clocks-names :
|
||||
- clock-names :
|
||||
* "xtal" for external xtal clock identifier
|
||||
* "pclk" for the bus core clock, either the clk81 clock or the gate clock
|
||||
* "baud" for the source of the baudrate generator, can be either the xtal
|
||||
|
|
|
@ -24,7 +24,7 @@ Required properties:
|
|||
- Must contain two elements for the extended variant of the IP
|
||||
(marvell,armada-3700-uart-ext): "uart-tx" and "uart-rx",
|
||||
respectively the UART TX interrupt and the UART RX interrupt. A
|
||||
corresponding interrupts-names property must be defined.
|
||||
corresponding interrupt-names property must be defined.
|
||||
- For backward compatibility reasons, a single element interrupts
|
||||
property is also supported for the standard variant of the IP,
|
||||
containing only the UART sum interrupt. This form is deprecated
|
||||
|
|
|
@ -17,6 +17,8 @@ Required properties:
|
|||
- "renesas,scifa-r8a7745" for R8A7745 (RZ/G1E) SCIFA compatible UART.
|
||||
- "renesas,scifb-r8a7745" for R8A7745 (RZ/G1E) SCIFB compatible UART.
|
||||
- "renesas,hscif-r8a7745" for R8A7745 (RZ/G1E) HSCIF compatible UART.
|
||||
- "renesas,scif-r8a77470" for R8A77470 (RZ/G1C) SCIF compatible UART.
|
||||
- "renesas,hscif-r8a77470" for R8A77470 (RZ/G1C) HSCIF compatible UART.
|
||||
- "renesas,scif-r8a7778" for R8A7778 (R-Car M1) SCIF compatible UART.
|
||||
- "renesas,scif-r8a7779" for R8A7779 (R-Car H1) SCIF compatible UART.
|
||||
- "renesas,scif-r8a7790" for R8A7790 (R-Car H2) SCIF compatible UART.
|
||||
|
|
|
@ -49,19 +49,6 @@ on the SoC (only first trip points defined in DT will be configured):
|
|||
- samsung,exynos5433-tmu: 8
|
||||
- samsung,exynos7-tmu: 8
|
||||
|
||||
Following properties are mandatory (depending on SoC):
|
||||
- samsung,tmu_gain: Gain value for internal TMU operation.
|
||||
- samsung,tmu_reference_voltage: Value of TMU IP block's reference voltage
|
||||
- samsung,tmu_noise_cancel_mode: Mode for noise cancellation
|
||||
- samsung,tmu_efuse_value: Default level of temperature - it is needed when
|
||||
in factory fusing produced wrong value
|
||||
- samsung,tmu_min_efuse_value: Minimum temperature fused value
|
||||
- samsung,tmu_max_efuse_value: Maximum temperature fused value
|
||||
- samsung,tmu_first_point_trim: First point trimming value
|
||||
- samsung,tmu_second_point_trim: Second point trimming value
|
||||
- samsung,tmu_default_temp_offset: Default temperature offset
|
||||
- samsung,tmu_cal_type: Callibration type
|
||||
|
||||
** Optional properties:
|
||||
|
||||
- vtmu-supply: This entry is optional and provides the regulator node supplying
|
||||
|
@ -78,7 +65,7 @@ Example 1):
|
|||
clocks = <&clock 383>;
|
||||
clock-names = "tmu_apbif";
|
||||
vtmu-supply = <&tmu_regulator_node>;
|
||||
#include "exynos4412-tmu-sensor-conf.dtsi"
|
||||
#thermal-sensor-cells = <0>;
|
||||
};
|
||||
|
||||
Example 2):
|
||||
|
@ -89,7 +76,7 @@ Example 2):
|
|||
interrupts = <0 58 0>;
|
||||
clocks = <&clock 21>;
|
||||
clock-names = "tmu_apbif";
|
||||
#include "exynos5440-tmu-sensor-conf.dtsi"
|
||||
#thermal-sensor-cells = <0>;
|
||||
};
|
||||
|
||||
Example 3): (In case of Exynos5420 "with misplaced TRIMINFO register")
|
||||
|
@ -99,7 +86,7 @@ Example 3): (In case of Exynos5420 "with misplaced TRIMINFO register")
|
|||
interrupts = <0 184 0>;
|
||||
clocks = <&clock 318>, <&clock 318>;
|
||||
clock-names = "tmu_apbif", "tmu_triminfo_apbif";
|
||||
#include "exynos4412-tmu-sensor-conf.dtsi"
|
||||
#thermal-sensor-cells = <0>;
|
||||
};
|
||||
|
||||
tmu_cpu3: tmu@1006c000 {
|
||||
|
@ -108,7 +95,7 @@ Example 3): (In case of Exynos5420 "with misplaced TRIMINFO register")
|
|||
interrupts = <0 185 0>;
|
||||
clocks = <&clock 318>, <&clock 319>;
|
||||
clock-names = "tmu_apbif", "tmu_triminfo_apbif";
|
||||
#include "exynos4412-tmu-sensor-conf.dtsi"
|
||||
#thermal-sensor-cells = <0>;
|
||||
};
|
||||
|
||||
tmu_gpu: tmu@100a0000 {
|
||||
|
@ -117,7 +104,7 @@ Example 3): (In case of Exynos5420 "with misplaced TRIMINFO register")
|
|||
interrupts = <0 215 0>;
|
||||
clocks = <&clock 319>, <&clock 318>;
|
||||
clock-names = "tmu_apbif", "tmu_triminfo_apbif";
|
||||
#include "exynos4412-tmu-sensor-conf.dtsi"
|
||||
#thermal-sensor-cells = <0>;
|
||||
};
|
||||
|
||||
Note: For multi-instance tmu each instance should have an alias correctly
|
||||
|
|
|
@ -55,8 +55,7 @@ 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 by the cooling-min-level and cooling-max-level
|
||||
properties) should be defined in a particular device's binding.
|
||||
should be defined in a particular device's binding.
|
||||
For more examples of cooling devices, refer to the example sections below.
|
||||
|
||||
Required properties:
|
||||
|
@ -69,15 +68,6 @@ 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
|
||||
|
@ -226,8 +216,6 @@ cpus {
|
|||
396000 950000
|
||||
198000 850000
|
||||
>;
|
||||
cooling-min-level = <0>;
|
||||
cooling-max-level = <3>;
|
||||
#cooling-cells = <2>; /* min followed by max */
|
||||
};
|
||||
...
|
||||
|
@ -241,8 +229,6 @@ cpus {
|
|||
*/
|
||||
fan0: fan@48 {
|
||||
...
|
||||
cooling-min-level = <0>;
|
||||
cooling-max-level = <9>;
|
||||
#cooling-cells = <2>; /* min followed by max */
|
||||
};
|
||||
};
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
Nuvoton NPCM7xx timer
|
||||
|
||||
Nuvoton NPCM7xx have three timer modules, each timer module provides five 24-bit
|
||||
timer counters.
|
||||
|
||||
Required properties:
|
||||
- compatible : "nuvoton,npcm750-timer" for Poleg NPCM750.
|
||||
- reg : Offset and length of the register set for the device.
|
||||
- interrupts : Contain the timer interrupt with flags for
|
||||
falling edge.
|
||||
- clocks : phandle of timer reference clock (usually a 25 MHz clock).
|
||||
|
||||
Example:
|
||||
|
||||
timer@f0008000 {
|
||||
compatible = "nuvoton,npcm750-timer";
|
||||
interrupts = <GIC_SPI 32 IRQ_TYPE_LEVEL_HIGH>;
|
||||
reg = <0xf0008000 0x50>;
|
||||
clocks = <&clk NPCM7XX_CLK_TIMER>;
|
||||
};
|
||||
|
|
@ -15,7 +15,7 @@ Required properties:
|
|||
- interrupts : Should be the clock event device interrupt.
|
||||
- clocks : The clocks provided by the SoC to drive the timer, must contain
|
||||
an entry for each entry in clock-names.
|
||||
- clock-names : Must include the following entries: "igp" and "per".
|
||||
- clock-names : Must include the following entries: "ipg" and "per".
|
||||
|
||||
Example:
|
||||
tpm5: tpm@40260000 {
|
||||
|
|
|
@ -28,7 +28,10 @@ Required properties:
|
|||
- interrupts: one XHCI interrupt should be described here.
|
||||
|
||||
Optional properties:
|
||||
- clocks: reference to a clock
|
||||
- clocks: reference to the clocks
|
||||
- clock-names: mandatory if there is a second clock, in this case
|
||||
the name must be "core" for the first clock and "reg" for the
|
||||
second one
|
||||
- usb2-lpm-disable: indicate if we don't want to enable USB2 HW LPM
|
||||
- usb3-lpm-capable: determines if platform is USB3 LPM capable
|
||||
- quirk-broken-port-ped: set if the controller has broken port disable mechanism
|
||||
|
|
|
@ -177,14 +177,14 @@ BUGS
|
|||
****
|
||||
|
||||
|
||||
Report bugs to Mauro Carvalho Chehab <mchehab@s-opensource.com>
|
||||
Report bugs to Mauro Carvalho Chehab <mchehab@kernel.org>
|
||||
|
||||
|
||||
COPYRIGHT
|
||||
*********
|
||||
|
||||
|
||||
Copyright (c) 2016 by Mauro Carvalho Chehab <mchehab@s-opensource.com>.
|
||||
Copyright (c) 2016 by Mauro Carvalho Chehab <mchehab+samsung@kernel.org>.
|
||||
|
||||
License GPLv2: GNU GPL version 2 <http://gnu.org/licenses/gpl.html>.
|
||||
|
||||
|
|
|
@ -17,17 +17,17 @@ an error is returned.
|
|||
|
||||
request_firmware
|
||||
----------------
|
||||
.. kernel-doc:: drivers/base/firmware_class.c
|
||||
.. kernel-doc:: drivers/base/firmware_loader/main.c
|
||||
:functions: request_firmware
|
||||
|
||||
request_firmware_direct
|
||||
-----------------------
|
||||
.. kernel-doc:: drivers/base/firmware_class.c
|
||||
.. kernel-doc:: drivers/base/firmware_loader/main.c
|
||||
:functions: request_firmware_direct
|
||||
|
||||
request_firmware_into_buf
|
||||
-------------------------
|
||||
.. kernel-doc:: drivers/base/firmware_class.c
|
||||
.. kernel-doc:: drivers/base/firmware_loader/main.c
|
||||
:functions: request_firmware_into_buf
|
||||
|
||||
Asynchronous firmware requests
|
||||
|
@ -41,7 +41,7 @@ in atomic contexts.
|
|||
|
||||
request_firmware_nowait
|
||||
-----------------------
|
||||
.. kernel-doc:: drivers/base/firmware_class.c
|
||||
.. kernel-doc:: drivers/base/firmware_loader/main.c
|
||||
:functions: request_firmware_nowait
|
||||
|
||||
Special optimizations on reboot
|
||||
|
@ -50,12 +50,12 @@ Special optimizations on reboot
|
|||
Some devices have an optimization in place to enable the firmware to be
|
||||
retained during system reboot. When such optimizations are used the driver
|
||||
author must ensure the firmware is still available on resume from suspend,
|
||||
this can be done with firmware_request_cache() insted of requesting for the
|
||||
firmare to be loaded.
|
||||
this can be done with firmware_request_cache() instead of requesting for the
|
||||
firmware to be loaded.
|
||||
|
||||
firmware_request_cache()
|
||||
-----------------------
|
||||
.. kernel-doc:: drivers/base/firmware_class.c
|
||||
------------------------
|
||||
.. kernel-doc:: drivers/base/firmware_loader/main.c
|
||||
:functions: firmware_request_cache
|
||||
|
||||
request firmware API expected driver use
|
||||
|
|
|
@ -28,7 +28,7 @@ Device Drivers Base
|
|||
.. kernel-doc:: drivers/base/node.c
|
||||
:internal:
|
||||
|
||||
.. kernel-doc:: drivers/base/firmware_class.c
|
||||
.. kernel-doc:: drivers/base/firmware_loader/main.c
|
||||
:export:
|
||||
|
||||
.. kernel-doc:: drivers/base/transport_class.c
|
||||
|
|
|
@ -210,7 +210,7 @@ If the connector is dual-role capable, there may also be a switch for the data
|
|||
role. USB Type-C Connector Class does not supply separate API for them. The
|
||||
port drivers can use USB Role Class API with those.
|
||||
|
||||
Illustration of the muxes behind a connector that supports an alternate mode:
|
||||
Illustration of the muxes behind a connector that supports an alternate mode::
|
||||
|
||||
------------------------
|
||||
| Connector |
|
||||
|
|
|
@ -9,8 +9,8 @@ i2c adapters present on your system at a given time. i2cdetect is part of
|
|||
the i2c-tools package.
|
||||
|
||||
I2C device files are character device files with major device number 89
|
||||
and a minor device number corresponding to the number assigned as
|
||||
explained above. They should be called "i2c-%d" (i2c-0, i2c-1, ...,
|
||||
and a minor device number corresponding to the number assigned as
|
||||
explained above. They should be called "i2c-%d" (i2c-0, i2c-1, ...,
|
||||
i2c-10, ...). All 256 minor device numbers are reserved for i2c.
|
||||
|
||||
|
||||
|
@ -23,11 +23,6 @@ First, you need to include these two headers:
|
|||
#include <linux/i2c-dev.h>
|
||||
#include <i2c/smbus.h>
|
||||
|
||||
(Please note that there are two files named "i2c-dev.h" out there. One is
|
||||
distributed with the Linux kernel and the other one is included in the
|
||||
source tree of i2c-tools. They used to be different in content but since 2012
|
||||
they're identical. You should use "linux/i2c-dev.h").
|
||||
|
||||
Now, you have to decide which adapter you want to access. You should
|
||||
inspect /sys/class/i2c-dev/ or run "i2cdetect -l" to decide this.
|
||||
Adapter numbers are assigned somewhat dynamically, so you can not
|
||||
|
@ -38,7 +33,7 @@ Next thing, open the device file, as follows:
|
|||
int file;
|
||||
int adapter_nr = 2; /* probably dynamically determined */
|
||||
char filename[20];
|
||||
|
||||
|
||||
snprintf(filename, 19, "/dev/i2c-%d", adapter_nr);
|
||||
file = open(filename, O_RDWR);
|
||||
if (file < 0) {
|
||||
|
@ -72,8 +67,10 @@ the device supports them. Both are illustrated below.
|
|||
/* res contains the read word */
|
||||
}
|
||||
|
||||
/* Using I2C Write, equivalent of
|
||||
i2c_smbus_write_word_data(file, reg, 0x6543) */
|
||||
/*
|
||||
* Using I2C Write, equivalent of
|
||||
* i2c_smbus_write_word_data(file, reg, 0x6543)
|
||||
*/
|
||||
buf[0] = reg;
|
||||
buf[1] = 0x43;
|
||||
buf[2] = 0x65;
|
||||
|
@ -140,14 +137,14 @@ ioctl(file, I2C_RDWR, struct i2c_rdwr_ioctl_data *msgset)
|
|||
set in each message, overriding the values set with the above ioctl's.
|
||||
|
||||
ioctl(file, I2C_SMBUS, struct i2c_smbus_ioctl_data *args)
|
||||
Not meant to be called directly; instead, use the access functions
|
||||
below.
|
||||
If possible, use the provided i2c_smbus_* methods described below instead
|
||||
of issuing direct ioctls.
|
||||
|
||||
You can do plain i2c transactions by using read(2) and write(2) calls.
|
||||
You do not need to pass the address byte; instead, set it through
|
||||
ioctl I2C_SLAVE before you try to access the device.
|
||||
|
||||
You can do SMBus level transactions (see documentation file smbus-protocol
|
||||
You can do SMBus level transactions (see documentation file smbus-protocol
|
||||
for details) through the following functions:
|
||||
__s32 i2c_smbus_write_quick(int file, __u8 value);
|
||||
__s32 i2c_smbus_read_byte(int file);
|
||||
|
@ -158,7 +155,7 @@ for details) through the following functions:
|
|||
__s32 i2c_smbus_write_word_data(int file, __u8 command, __u16 value);
|
||||
__s32 i2c_smbus_process_call(int file, __u8 command, __u16 value);
|
||||
__s32 i2c_smbus_read_block_data(int file, __u8 command, __u8 *values);
|
||||
__s32 i2c_smbus_write_block_data(int file, __u8 command, __u8 length,
|
||||
__s32 i2c_smbus_write_block_data(int file, __u8 command, __u8 length,
|
||||
__u8 *values);
|
||||
All these transactions return -1 on failure; you can read errno to see
|
||||
what happened. The 'write' transactions return 0 on success; the
|
||||
|
@ -166,10 +163,9 @@ what happened. The 'write' transactions return 0 on success; the
|
|||
returns the number of values read. The block buffers need not be longer
|
||||
than 32 bytes.
|
||||
|
||||
The above functions are all inline functions, that resolve to calls to
|
||||
the i2c_smbus_access function, that on its turn calls a specific ioctl
|
||||
with the data in a specific format. Read the source code if you
|
||||
want to know what happens behind the screens.
|
||||
The above functions are made available by linking against the libi2c library,
|
||||
which is provided by the i2c-tools project. See:
|
||||
https://git.kernel.org/pub/scm/utils/i2c-tools/i2c-tools.git/.
|
||||
|
||||
|
||||
Implementation details
|
||||
|
|
|
@ -217,7 +217,6 @@ Code Seq#(hex) Include File Comments
|
|||
'd' 02-40 pcmcia/ds.h conflict!
|
||||
'd' F0-FF linux/digi1.h
|
||||
'e' all linux/digi1.h conflict!
|
||||
'e' 00-1F drivers/net/irda/irtty-sir.h conflict!
|
||||
'f' 00-1F linux/ext2_fs.h conflict!
|
||||
'f' 00-1F linux/ext3_fs.h conflict!
|
||||
'f' 00-0F fs/jfs/jfs_dinode.h conflict!
|
||||
|
@ -247,7 +246,6 @@ Code Seq#(hex) Include File Comments
|
|||
'm' all linux/synclink.h conflict!
|
||||
'm' 00-19 drivers/message/fusion/mptctl.h conflict!
|
||||
'm' 00 drivers/scsi/megaraid/megaraid_ioctl.h conflict!
|
||||
'm' 00-1F net/irda/irmod.h conflict!
|
||||
'n' 00-7F linux/ncp_fs.h and fs/ncpfs/ioctl.c
|
||||
'n' 80-8F uapi/linux/nilfs2_api.h NILFS2
|
||||
'n' E0-FF linux/matroxfb.h matroxfb
|
||||
|
|
|
@ -34,9 +34,13 @@ meta-data and shadow-data:
|
|||
- data[] - storage for shadow data
|
||||
|
||||
It is important to note that the klp_shadow_alloc() and
|
||||
klp_shadow_get_or_alloc() calls, described below, store a *copy* of the
|
||||
data that the functions are provided. Callers should provide whatever
|
||||
mutual exclusion is required of the shadow data.
|
||||
klp_shadow_get_or_alloc() are zeroing the variable by default.
|
||||
They also allow to call a custom constructor function when a non-zero
|
||||
value is needed. Callers should provide whatever mutual exclusion
|
||||
is required.
|
||||
|
||||
Note that the constructor is called under klp_shadow_lock spinlock. It allows
|
||||
to do actions that can be done only once when a new variable is allocated.
|
||||
|
||||
* klp_shadow_get() - retrieve a shadow variable data pointer
|
||||
- search hashtable for <obj, id> pair
|
||||
|
@ -47,7 +51,7 @@ mutual exclusion is required of the shadow data.
|
|||
- WARN and return NULL
|
||||
- if <obj, id> doesn't already exist
|
||||
- allocate a new shadow variable
|
||||
- copy data into the new shadow variable
|
||||
- initialize the variable using a custom constructor and data when provided
|
||||
- add <obj, id> to the global hashtable
|
||||
|
||||
* klp_shadow_get_or_alloc() - get existing or alloc a new shadow variable
|
||||
|
@ -56,16 +60,20 @@ mutual exclusion is required of the shadow data.
|
|||
- return existing shadow variable
|
||||
- if <obj, id> doesn't already exist
|
||||
- allocate a new shadow variable
|
||||
- copy data into the new shadow variable
|
||||
- initialize the variable using a custom constructor and data when provided
|
||||
- add <obj, id> pair to the global hashtable
|
||||
|
||||
* klp_shadow_free() - detach and free a <obj, id> shadow variable
|
||||
- find and remove a <obj, id> reference from global hashtable
|
||||
- if found, free shadow variable
|
||||
- if found
|
||||
- call destructor function if defined
|
||||
- free shadow variable
|
||||
|
||||
* klp_shadow_free_all() - detach and free all <*, id> shadow variables
|
||||
- find and remove any <*, id> references from global hashtable
|
||||
- if found, free shadow variable
|
||||
- if found
|
||||
- call destructor function if defined
|
||||
- free shadow variable
|
||||
|
||||
|
||||
2. Use cases
|
||||
|
@ -107,7 +115,8 @@ struct sta_info *sta_info_alloc(struct ieee80211_sub_if_data *sdata,
|
|||
sta = kzalloc(sizeof(*sta) + hw->sta_data_size, gfp);
|
||||
|
||||
/* Attach a corresponding shadow variable, then initialize it */
|
||||
ps_lock = klp_shadow_alloc(sta, PS_LOCK, NULL, sizeof(*ps_lock), gfp);
|
||||
ps_lock = klp_shadow_alloc(sta, PS_LOCK, sizeof(*ps_lock), gfp,
|
||||
NULL, NULL);
|
||||
if (!ps_lock)
|
||||
goto shadow_fail;
|
||||
spin_lock_init(ps_lock);
|
||||
|
@ -131,7 +140,7 @@ variable:
|
|||
|
||||
void sta_info_free(struct ieee80211_local *local, struct sta_info *sta)
|
||||
{
|
||||
klp_shadow_free(sta, PS_LOCK);
|
||||
klp_shadow_free(sta, PS_LOCK, NULL);
|
||||
kfree(sta);
|
||||
...
|
||||
|
||||
|
@ -148,16 +157,24 @@ shadow variables to parents already in-flight.
|
|||
For commit 1d147bfa6429, a good spot to allocate a shadow spinlock is
|
||||
inside ieee80211_sta_ps_deliver_wakeup():
|
||||
|
||||
int ps_lock_shadow_ctor(void *obj, void *shadow_data, void *ctor_data)
|
||||
{
|
||||
spinlock_t *lock = shadow_data;
|
||||
|
||||
spin_lock_init(lock);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define PS_LOCK 1
|
||||
void ieee80211_sta_ps_deliver_wakeup(struct sta_info *sta)
|
||||
{
|
||||
DEFINE_SPINLOCK(ps_lock_fallback);
|
||||
spinlock_t *ps_lock;
|
||||
|
||||
/* sync with ieee80211_tx_h_unicast_ps_buf */
|
||||
ps_lock = klp_shadow_get_or_alloc(sta, PS_LOCK,
|
||||
&ps_lock_fallback, sizeof(ps_lock_fallback),
|
||||
GFP_ATOMIC);
|
||||
sizeof(*ps_lock), GFP_ATOMIC,
|
||||
ps_lock_shadow_ctor, NULL);
|
||||
|
||||
if (ps_lock)
|
||||
spin_lock(ps_lock);
|
||||
...
|
||||
|
|
|
@ -7,7 +7,7 @@ file: uapi/v4l/keytable.c
|
|||
|
||||
/* keytable.c - This program allows checking/replacing keys at IR
|
||||
|
||||
Copyright (C) 2006-2009 Mauro Carvalho Chehab <mchehab@infradead.org>
|
||||
Copyright (C) 2006-2009 Mauro Carvalho Chehab <mchehab@kernel.org>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
|
|
|
@ -6,7 +6,7 @@ file: media/v4l/v4l2grab.c
|
|||
.. code-block:: c
|
||||
|
||||
/* V4L2 video picture grabber
|
||||
Copyright (C) 2009 Mauro Carvalho Chehab <mchehab@infradead.org>
|
||||
Copyright (C) 2009 Mauro Carvalho Chehab <mchehab@kernel.org>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
|
|
|
@ -169,7 +169,7 @@ access to BPF code as well.
|
|||
BPF engine and instruction set
|
||||
------------------------------
|
||||
|
||||
Under tools/net/ there's a small helper tool called bpf_asm which can
|
||||
Under tools/bpf/ there's a small helper tool called bpf_asm which can
|
||||
be used to write low-level filters for example scenarios mentioned in the
|
||||
previous section. Asm-like syntax mentioned here has been implemented in
|
||||
bpf_asm and will be used for further explanations (instead of dealing with
|
||||
|
@ -359,7 +359,7 @@ $ ./bpf_asm -c foo
|
|||
In particular, as usage with xt_bpf or cls_bpf can result in more complex BPF
|
||||
filters that might not be obvious at first, it's good to test filters before
|
||||
attaching to a live system. For that purpose, there's a small tool called
|
||||
bpf_dbg under tools/net/ in the kernel source directory. This debugger allows
|
||||
bpf_dbg under tools/bpf/ in the kernel source directory. This debugger allows
|
||||
for testing BPF filters against given pcap files, single stepping through the
|
||||
BPF code on the pcap's packets and to do BPF machine register dumps.
|
||||
|
||||
|
@ -483,7 +483,7 @@ Example output from dmesg:
|
|||
[ 3389.935851] JIT code: 00000030: 00 e8 28 94 ff e0 83 f8 01 75 07 b8 ff ff 00 00
|
||||
[ 3389.935852] JIT code: 00000040: eb 02 31 c0 c9 c3
|
||||
|
||||
In the kernel source tree under tools/net/, there's bpf_jit_disasm for
|
||||
In the kernel source tree under tools/bpf/, there's bpf_jit_disasm for
|
||||
generating disassembly out of the kernel log's hexdump:
|
||||
|
||||
# ./bpf_jit_disasm
|
||||
|
|
|
@ -1390,26 +1390,26 @@ mld_qrv - INTEGER
|
|||
Default: 2 (as specified by RFC3810 9.1)
|
||||
Minimum: 1 (as specified by RFC6636 4.5)
|
||||
|
||||
max_dst_opts_cnt - INTEGER
|
||||
max_dst_opts_number - INTEGER
|
||||
Maximum number of non-padding TLVs allowed in a Destination
|
||||
options extension header. If this value is less than zero
|
||||
then unknown options are disallowed and the number of known
|
||||
TLVs allowed is the absolute value of this number.
|
||||
Default: 8
|
||||
|
||||
max_hbh_opts_cnt - INTEGER
|
||||
max_hbh_opts_number - INTEGER
|
||||
Maximum number of non-padding TLVs allowed in a Hop-by-Hop
|
||||
options extension header. If this value is less than zero
|
||||
then unknown options are disallowed and the number of known
|
||||
TLVs allowed is the absolute value of this number.
|
||||
Default: 8
|
||||
|
||||
max dst_opts_len - INTEGER
|
||||
max_dst_opts_length - INTEGER
|
||||
Maximum length allowed for a Destination options extension
|
||||
header.
|
||||
Default: INT_MAX (unlimited)
|
||||
|
||||
max hbh_opts_len - INTEGER
|
||||
max_hbh_length - INTEGER
|
||||
Maximum length allowed for a Hop-by-Hop options extension
|
||||
header.
|
||||
Default: INT_MAX (unlimited)
|
||||
|
@ -2126,18 +2126,3 @@ max_dgram_qlen - INTEGER
|
|||
|
||||
Default: 10
|
||||
|
||||
|
||||
UNDOCUMENTED:
|
||||
|
||||
/proc/sys/net/irda/*
|
||||
fast_poll_increase FIXME
|
||||
warn_noreply_time FIXME
|
||||
discovery_slots FIXME
|
||||
slot_timeout FIXME
|
||||
max_baud_rate FIXME
|
||||
discovery_timeout FIXME
|
||||
lap_keepalive_time FIXME
|
||||
max_noreply_time FIXME
|
||||
max_tx_data_size FIXME
|
||||
max_tx_window FIXME
|
||||
min_tx_turn_time FIXME
|
||||
|
|
|
@ -168,7 +168,7 @@ update on the CPUs, as discussed below:
|
|||
|
||||
[Please bear in mind that the kernel requests the microcode images from
|
||||
userspace, using the request_firmware() function defined in
|
||||
drivers/base/firmware_class.c]
|
||||
drivers/base/firmware_loader/main.c]
|
||||
|
||||
|
||||
a. When all the CPUs are identical:
|
||||
|
|
|
@ -157,8 +157,5 @@ memory management. See ``include/sound/sndmagic.h`` for complete list of them. M
|
|||
OSS sound drivers have their magic numbers constructed from the soundcard PCI
|
||||
ID - these are not listed here as well.
|
||||
|
||||
IrDA subsystem also uses large number of own magic numbers, see
|
||||
``include/net/irda/irda.h`` for a complete list of them.
|
||||
|
||||
HFS is another larger user of magic numbers - you can find them in
|
||||
``fs/hfs/hfs.h``.
|
||||
|
|
|
@ -387,11 +387,11 @@ tree for more details.
|
|||
|
||||
=head1 BUGS
|
||||
|
||||
Report bugs to Mauro Carvalho Chehab <mchehab@s-opensource.com>
|
||||
Report bugs to Mauro Carvalho Chehab <mchehab@kernel.org>
|
||||
|
||||
=head1 COPYRIGHT
|
||||
|
||||
Copyright (c) 2016 by Mauro Carvalho Chehab <mchehab@s-opensource.com>.
|
||||
Copyright (c) 2016 by Mauro Carvalho Chehab <mchehab+samsung@kernel.org>.
|
||||
|
||||
License GPLv2: GNU GPL version 2 <http://gnu.org/licenses/gpl.html>.
|
||||
|
||||
|
|
|
@ -461,9 +461,17 @@ of ftrace. Here is a list of some of the key files:
|
|||
and ticks at the same rate as the hardware clocksource.
|
||||
|
||||
boot:
|
||||
Same as mono. Used to be a separate clock which accounted
|
||||
for the time spent in suspend while CLOCK_MONOTONIC did
|
||||
not.
|
||||
This is the boot clock (CLOCK_BOOTTIME) and is based on the
|
||||
fast monotonic clock, but also accounts for time spent in
|
||||
suspend. Since the clock access is designed for use in
|
||||
tracing in the suspend path, some side effects are possible
|
||||
if clock is accessed after the suspend time is accounted before
|
||||
the fast mono clock is updated. In this case, the clock update
|
||||
appears to happen slightly sooner than it normally would have.
|
||||
Also on 32-bit systems, it's possible that the 64-bit boot offset
|
||||
sees a partial update. These effects are rare and post
|
||||
processing should be able to handle them. See comments in the
|
||||
ktime_get_boot_fast_ns() function for more information.
|
||||
|
||||
To set a clock, simply echo the clock name into this file::
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@ communicating in English you can also ask the Chinese maintainer for
|
|||
help. Contact the Chinese maintainer if this translation is outdated
|
||||
or if there is a problem with the translation.
|
||||
|
||||
Maintainer: Mauro Carvalho Chehab <mchehab@infradead.org>
|
||||
Maintainer: Mauro Carvalho Chehab <mchehab@kernel.org>
|
||||
Chinese maintainer: Fu Wei <tekkamanninja@gmail.com>
|
||||
---------------------------------------------------------------------
|
||||
Documentation/video4linux/v4l2-framework.txt 的中文翻译
|
||||
|
@ -14,7 +14,7 @@ Documentation/video4linux/v4l2-framework.txt 的中文翻译
|
|||
如果想评论或更新本文的内容,请直接联系原文档的维护者。如果你使用英文
|
||||
交流有困难的话,也可以向中文版维护者求助。如果本翻译更新不及时或者翻
|
||||
译存在问题,请联系中文版维护者。
|
||||
英文版维护者: Mauro Carvalho Chehab <mchehab@infradead.org>
|
||||
英文版维护者: Mauro Carvalho Chehab <mchehab@kernel.org>
|
||||
中文版维护者: 傅炜 Fu Wei <tekkamanninja@gmail.com>
|
||||
中文版翻译者: 傅炜 Fu Wei <tekkamanninja@gmail.com>
|
||||
中文版校译者: 傅炜 Fu Wei <tekkamanninja@gmail.com>
|
||||
|
|
|
@ -1960,6 +1960,9 @@ ARM 32-bit VFP control registers have the following id bit patterns:
|
|||
ARM 64-bit FP registers have the following id bit patterns:
|
||||
0x4030 0000 0012 0 <regno:12>
|
||||
|
||||
ARM firmware pseudo-registers have the following bit pattern:
|
||||
0x4030 0000 0014 <regno:16>
|
||||
|
||||
|
||||
arm64 registers are mapped using the lower 32 bits. The upper 16 of
|
||||
that is the register group type, or coprocessor number:
|
||||
|
@ -1976,6 +1979,9 @@ arm64 CCSIDR registers are demultiplexed by CSSELR value:
|
|||
arm64 system registers have the following id bit patterns:
|
||||
0x6030 0000 0013 <op0:2> <op1:3> <crn:4> <crm:4> <op2:3>
|
||||
|
||||
arm64 firmware pseudo-registers have the following bit pattern:
|
||||
0x6030 0000 0014 <regno:16>
|
||||
|
||||
|
||||
MIPS registers are mapped using the lower 32 bits. The upper 16 of that is
|
||||
the register group type:
|
||||
|
@ -2510,7 +2516,8 @@ Possible features:
|
|||
and execute guest code when KVM_RUN is called.
|
||||
- KVM_ARM_VCPU_EL1_32BIT: Starts the CPU in a 32bit mode.
|
||||
Depends on KVM_CAP_ARM_EL1_32BIT (arm64 only).
|
||||
- KVM_ARM_VCPU_PSCI_0_2: Emulate PSCI v0.2 for the CPU.
|
||||
- KVM_ARM_VCPU_PSCI_0_2: Emulate PSCI v0.2 (or a future revision
|
||||
backward compatible with v0.2) for the CPU.
|
||||
Depends on KVM_CAP_ARM_PSCI_0_2.
|
||||
- KVM_ARM_VCPU_PMU_V3: Emulate PMUv3 for the CPU.
|
||||
Depends on KVM_CAP_ARM_PMU_V3.
|
||||
|
|
|
@ -0,0 +1,30 @@
|
|||
KVM implements the PSCI (Power State Coordination Interface)
|
||||
specification in order to provide services such as CPU on/off, reset
|
||||
and power-off to the guest.
|
||||
|
||||
The PSCI specification is regularly updated to provide new features,
|
||||
and KVM implements these updates if they make sense from a virtualization
|
||||
point of view.
|
||||
|
||||
This means that a guest booted on two different versions of KVM can
|
||||
observe two different "firmware" revisions. This could cause issues if
|
||||
a given guest is tied to a particular PSCI revision (unlikely), or if
|
||||
a migration causes a different PSCI version to be exposed out of the
|
||||
blue to an unsuspecting guest.
|
||||
|
||||
In order to remedy this situation, KVM exposes a set of "firmware
|
||||
pseudo-registers" that can be manipulated using the GET/SET_ONE_REG
|
||||
interface. These registers can be saved/restored by userspace, and set
|
||||
to a convenient value if required.
|
||||
|
||||
The following register is defined:
|
||||
|
||||
* KVM_REG_ARM_PSCI_VERSION:
|
||||
|
||||
- Only valid if the vcpu has the KVM_ARM_VCPU_PSCI_0_2 feature set
|
||||
(and thus has already been initialized)
|
||||
- Returns the current PSCI version on GET_ONE_REG (defaulting to the
|
||||
highest PSCI version implemented by KVM and compatible with v0.2)
|
||||
- Allows any PSCI version implemented by KVM and compatible with
|
||||
v0.2 to be set with SET_ONE_REG
|
||||
- Affects the whole VM (even if the register view is per-vcpu)
|
92
MAINTAINERS
92
MAINTAINERS
|
@ -564,8 +564,9 @@ S: Maintained
|
|||
F: drivers/media/dvb-frontends/af9033*
|
||||
|
||||
AFFS FILE SYSTEM
|
||||
M: David Sterba <dsterba@suse.com>
|
||||
L: linux-fsdevel@vger.kernel.org
|
||||
S: Orphan
|
||||
S: Odd Fixes
|
||||
F: Documentation/filesystems/affs.txt
|
||||
F: fs/affs/
|
||||
|
||||
|
@ -905,6 +906,8 @@ ANDROID ION DRIVER
|
|||
M: Laura Abbott <labbott@redhat.com>
|
||||
M: Sumit Semwal <sumit.semwal@linaro.org>
|
||||
L: devel@driverdev.osuosl.org
|
||||
L: dri-devel@lists.freedesktop.org
|
||||
L: linaro-mm-sig@lists.linaro.org (moderated for non-subscribers)
|
||||
S: Supported
|
||||
F: drivers/staging/android/ion
|
||||
F: drivers/staging/android/uapi/ion.h
|
||||
|
@ -1208,7 +1211,6 @@ F: drivers/*/*alpine*
|
|||
ARM/ARTPEC MACHINE SUPPORT
|
||||
M: Jesper Nilsson <jesper.nilsson@axis.com>
|
||||
M: Lars Persson <lars.persson@axis.com>
|
||||
M: Niklas Cassel <niklas.cassel@axis.com>
|
||||
S: Maintained
|
||||
L: linux-arm-kernel@axis.com
|
||||
F: arch/arm/mach-artpec
|
||||
|
@ -1373,7 +1375,8 @@ F: arch/arm/mach-ebsa110/
|
|||
F: drivers/net/ethernet/amd/am79c961a.*
|
||||
|
||||
ARM/ENERGY MICRO (SILICON LABS) EFM32 SUPPORT
|
||||
M: Uwe Kleine-König <kernel@pengutronix.de>
|
||||
M: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
|
||||
R: Pengutronix Kernel Team <kernel@pengutronix.de>
|
||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||
S: Maintained
|
||||
N: efm32
|
||||
|
@ -1401,7 +1404,8 @@ F: arch/arm/mach-footbridge/
|
|||
|
||||
ARM/FREESCALE IMX / MXC ARM ARCHITECTURE
|
||||
M: Shawn Guo <shawnguo@kernel.org>
|
||||
M: Sascha Hauer <kernel@pengutronix.de>
|
||||
M: Sascha Hauer <s.hauer@pengutronix.de>
|
||||
R: Pengutronix Kernel Team <kernel@pengutronix.de>
|
||||
R: Fabio Estevam <fabio.estevam@nxp.com>
|
||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||
S: Maintained
|
||||
|
@ -1416,7 +1420,8 @@ F: include/soc/imx/
|
|||
|
||||
ARM/FREESCALE VYBRID ARM ARCHITECTURE
|
||||
M: Shawn Guo <shawnguo@kernel.org>
|
||||
M: Sascha Hauer <kernel@pengutronix.de>
|
||||
M: Sascha Hauer <s.hauer@pengutronix.de>
|
||||
R: Pengutronix Kernel Team <kernel@pengutronix.de>
|
||||
R: Stefan Agner <stefan@agner.ch>
|
||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||
S: Maintained
|
||||
|
@ -2549,7 +2554,6 @@ F: Documentation/devicetree/bindings/sound/axentia,*
|
|||
F: sound/soc/atmel/tse850-pcm5142.c
|
||||
|
||||
AZ6007 DVB DRIVER
|
||||
M: Mauro Carvalho Chehab <mchehab@s-opensource.com>
|
||||
M: Mauro Carvalho Chehab <mchehab@kernel.org>
|
||||
L: linux-media@vger.kernel.org
|
||||
W: https://linuxtv.org
|
||||
|
@ -2614,7 +2618,7 @@ S: Maintained
|
|||
F: drivers/net/hamradio/baycom*
|
||||
|
||||
BCACHE (BLOCK LAYER CACHE)
|
||||
M: Michael Lyle <mlyle@lyle.org>
|
||||
M: Coly Li <colyli@suse.de>
|
||||
M: Kent Overstreet <kent.overstreet@gmail.com>
|
||||
L: linux-bcache@vger.kernel.org
|
||||
W: http://bcache.evilpiepirate.org
|
||||
|
@ -3078,7 +3082,6 @@ F: include/linux/btrfs*
|
|||
F: include/uapi/linux/btrfs*
|
||||
|
||||
BTTV VIDEO4LINUX DRIVER
|
||||
M: Mauro Carvalho Chehab <mchehab@s-opensource.com>
|
||||
M: Mauro Carvalho Chehab <mchehab@kernel.org>
|
||||
L: linux-media@vger.kernel.org
|
||||
W: https://linuxtv.org
|
||||
|
@ -3807,7 +3810,6 @@ S: Maintained
|
|||
F: drivers/media/dvb-frontends/cx24120*
|
||||
|
||||
CX88 VIDEO4LINUX DRIVER
|
||||
M: Mauro Carvalho Chehab <mchehab@s-opensource.com>
|
||||
M: Mauro Carvalho Chehab <mchehab@kernel.org>
|
||||
L: linux-media@vger.kernel.org
|
||||
W: https://linuxtv.org
|
||||
|
@ -4245,6 +4247,9 @@ F: include/trace/events/fs_dax.h
|
|||
|
||||
DEVICE DIRECT ACCESS (DAX)
|
||||
M: Dan Williams <dan.j.williams@intel.com>
|
||||
M: Dave Jiang <dave.jiang@intel.com>
|
||||
M: Ross Zwisler <ross.zwisler@linux.intel.com>
|
||||
M: Vishal Verma <vishal.l.verma@intel.com>
|
||||
L: linux-nvdimm@lists.01.org
|
||||
S: Supported
|
||||
F: drivers/dax/
|
||||
|
@ -5045,7 +5050,6 @@ F: drivers/edac/thunderx_edac*
|
|||
|
||||
EDAC-CORE
|
||||
M: Borislav Petkov <bp@alien8.de>
|
||||
M: Mauro Carvalho Chehab <mchehab@s-opensource.com>
|
||||
M: Mauro Carvalho Chehab <mchehab@kernel.org>
|
||||
L: linux-edac@vger.kernel.org
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/bp/bp.git for-next
|
||||
|
@ -5074,7 +5078,6 @@ S: Maintained
|
|||
F: drivers/edac/fsl_ddr_edac.*
|
||||
|
||||
EDAC-GHES
|
||||
M: Mauro Carvalho Chehab <mchehab@s-opensource.com>
|
||||
M: Mauro Carvalho Chehab <mchehab@kernel.org>
|
||||
L: linux-edac@vger.kernel.org
|
||||
S: Maintained
|
||||
|
@ -5091,21 +5094,18 @@ S: Maintained
|
|||
F: drivers/edac/i5000_edac.c
|
||||
|
||||
EDAC-I5400
|
||||
M: Mauro Carvalho Chehab <mchehab@s-opensource.com>
|
||||
M: Mauro Carvalho Chehab <mchehab@kernel.org>
|
||||
L: linux-edac@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/edac/i5400_edac.c
|
||||
|
||||
EDAC-I7300
|
||||
M: Mauro Carvalho Chehab <mchehab@s-opensource.com>
|
||||
M: Mauro Carvalho Chehab <mchehab@kernel.org>
|
||||
L: linux-edac@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/edac/i7300_edac.c
|
||||
|
||||
EDAC-I7CORE
|
||||
M: Mauro Carvalho Chehab <mchehab@s-opensource.com>
|
||||
M: Mauro Carvalho Chehab <mchehab@kernel.org>
|
||||
L: linux-edac@vger.kernel.org
|
||||
S: Maintained
|
||||
|
@ -5155,7 +5155,6 @@ S: Maintained
|
|||
F: drivers/edac/r82600_edac.c
|
||||
|
||||
EDAC-SBRIDGE
|
||||
M: Mauro Carvalho Chehab <mchehab@s-opensource.com>
|
||||
M: Mauro Carvalho Chehab <mchehab@kernel.org>
|
||||
L: linux-edac@vger.kernel.org
|
||||
S: Maintained
|
||||
|
@ -5214,7 +5213,6 @@ S: Maintained
|
|||
F: drivers/net/ethernet/ibm/ehea/
|
||||
|
||||
EM28XX VIDEO4LINUX DRIVER
|
||||
M: Mauro Carvalho Chehab <mchehab@s-opensource.com>
|
||||
M: Mauro Carvalho Chehab <mchehab@kernel.org>
|
||||
L: linux-media@vger.kernel.org
|
||||
W: https://linuxtv.org
|
||||
|
@ -5652,7 +5650,8 @@ F: drivers/net/ethernet/freescale/fec.h
|
|||
F: Documentation/devicetree/bindings/net/fsl-fec.txt
|
||||
|
||||
FREESCALE IMX / MXC FRAMEBUFFER DRIVER
|
||||
M: Sascha Hauer <kernel@pengutronix.de>
|
||||
M: Sascha Hauer <s.hauer@pengutronix.de>
|
||||
R: Pengutronix Kernel Team <kernel@pengutronix.de>
|
||||
L: linux-fbdev@vger.kernel.org
|
||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||
S: Maintained
|
||||
|
@ -5784,6 +5783,14 @@ F: fs/crypto/
|
|||
F: include/linux/fscrypt*.h
|
||||
F: Documentation/filesystems/fscrypt.rst
|
||||
|
||||
FSNOTIFY: FILESYSTEM NOTIFICATION INFRASTRUCTURE
|
||||
M: Jan Kara <jack@suse.cz>
|
||||
R: Amir Goldstein <amir73il@gmail.com>
|
||||
L: linux-fsdevel@vger.kernel.org
|
||||
S: Maintained
|
||||
F: fs/notify/
|
||||
F: include/linux/fsnotify*.h
|
||||
|
||||
FUJITSU LAPTOP EXTRAS
|
||||
M: Jonathan Woithe <jwoithe@just42.net>
|
||||
L: platform-driver-x86@vger.kernel.org
|
||||
|
@ -6256,7 +6263,7 @@ S: Odd Fixes
|
|||
F: drivers/media/usb/hdpvr/
|
||||
|
||||
HEWLETT PACKARD ENTERPRISE ILO NMI WATCHDOG DRIVER
|
||||
M: Jimmy Vance <jimmy.vance@hpe.com>
|
||||
M: Jerry Hoemann <jerry.hoemann@hpe.com>
|
||||
S: Supported
|
||||
F: Documentation/watchdog/hpwdt.txt
|
||||
F: drivers/watchdog/hpwdt.c
|
||||
|
@ -7396,16 +7403,6 @@ S: Obsolete
|
|||
F: include/uapi/linux/ipx.h
|
||||
F: drivers/staging/ipx/
|
||||
|
||||
IRDA SUBSYSTEM
|
||||
M: Samuel Ortiz <samuel@sortiz.org>
|
||||
L: irda-users@lists.sourceforge.net (subscribers-only)
|
||||
L: netdev@vger.kernel.org
|
||||
W: http://irda.sourceforge.net/
|
||||
S: Obsolete
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/sameo/irda-2.6.git
|
||||
F: Documentation/networking/irda.txt
|
||||
F: drivers/staging/irda/
|
||||
|
||||
IRQ DOMAINS (IRQ NUMBER MAPPING LIBRARY)
|
||||
M: Marc Zyngier <marc.zyngier@arm.com>
|
||||
S: Maintained
|
||||
|
@ -7670,9 +7667,11 @@ L: linux-kbuild@vger.kernel.org
|
|||
S: Maintained
|
||||
F: Documentation/kbuild/
|
||||
F: Makefile
|
||||
F: scripts/Makefile.*
|
||||
F: scripts/Kbuild*
|
||||
F: scripts/Makefile*
|
||||
F: scripts/basic/
|
||||
F: scripts/mk*
|
||||
F: scripts/mod/
|
||||
F: scripts/package/
|
||||
|
||||
KERNEL JANITORS
|
||||
|
@ -7738,7 +7737,7 @@ F: arch/x86/include/asm/svm.h
|
|||
F: arch/x86/kvm/svm.c
|
||||
|
||||
KERNEL VIRTUAL MACHINE FOR ARM (KVM/arm)
|
||||
M: Christoffer Dall <christoffer.dall@linaro.org>
|
||||
M: Christoffer Dall <christoffer.dall@arm.com>
|
||||
M: Marc Zyngier <marc.zyngier@arm.com>
|
||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||
L: kvmarm@lists.cs.columbia.edu
|
||||
|
@ -7752,7 +7751,7 @@ F: virt/kvm/arm/
|
|||
F: include/kvm/arm_*
|
||||
|
||||
KERNEL VIRTUAL MACHINE FOR ARM64 (KVM/arm64)
|
||||
M: Christoffer Dall <christoffer.dall@linaro.org>
|
||||
M: Christoffer Dall <christoffer.dall@arm.com>
|
||||
M: Marc Zyngier <marc.zyngier@arm.com>
|
||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||
L: kvmarm@lists.cs.columbia.edu
|
||||
|
@ -8048,6 +8047,9 @@ F: tools/lib/lockdep/
|
|||
|
||||
LIBNVDIMM BLK: MMIO-APERTURE DRIVER
|
||||
M: Ross Zwisler <ross.zwisler@linux.intel.com>
|
||||
M: Dan Williams <dan.j.williams@intel.com>
|
||||
M: Vishal Verma <vishal.l.verma@intel.com>
|
||||
M: Dave Jiang <dave.jiang@intel.com>
|
||||
L: linux-nvdimm@lists.01.org
|
||||
Q: https://patchwork.kernel.org/project/linux-nvdimm/list/
|
||||
S: Supported
|
||||
|
@ -8056,6 +8058,9 @@ F: drivers/nvdimm/region_devs.c
|
|||
|
||||
LIBNVDIMM BTT: BLOCK TRANSLATION TABLE
|
||||
M: Vishal Verma <vishal.l.verma@intel.com>
|
||||
M: Dan Williams <dan.j.williams@intel.com>
|
||||
M: Ross Zwisler <ross.zwisler@linux.intel.com>
|
||||
M: Dave Jiang <dave.jiang@intel.com>
|
||||
L: linux-nvdimm@lists.01.org
|
||||
Q: https://patchwork.kernel.org/project/linux-nvdimm/list/
|
||||
S: Supported
|
||||
|
@ -8063,6 +8068,9 @@ F: drivers/nvdimm/btt*
|
|||
|
||||
LIBNVDIMM PMEM: PERSISTENT MEMORY DRIVER
|
||||
M: Ross Zwisler <ross.zwisler@linux.intel.com>
|
||||
M: Dan Williams <dan.j.williams@intel.com>
|
||||
M: Vishal Verma <vishal.l.verma@intel.com>
|
||||
M: Dave Jiang <dave.jiang@intel.com>
|
||||
L: linux-nvdimm@lists.01.org
|
||||
Q: https://patchwork.kernel.org/project/linux-nvdimm/list/
|
||||
S: Supported
|
||||
|
@ -8078,6 +8086,9 @@ F: Documentation/devicetree/bindings/pmem/pmem-region.txt
|
|||
|
||||
LIBNVDIMM: NON-VOLATILE MEMORY DEVICE SUBSYSTEM
|
||||
M: Dan Williams <dan.j.williams@intel.com>
|
||||
M: Ross Zwisler <ross.zwisler@linux.intel.com>
|
||||
M: Vishal Verma <vishal.l.verma@intel.com>
|
||||
M: Dave Jiang <dave.jiang@intel.com>
|
||||
L: linux-nvdimm@lists.01.org
|
||||
Q: https://patchwork.kernel.org/project/linux-nvdimm/list/
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm/nvdimm.git
|
||||
|
@ -8852,7 +8863,6 @@ F: Documentation/devicetree/bindings/media/nvidia,tegra-vde.txt
|
|||
F: drivers/staging/media/tegra-vde/
|
||||
|
||||
MEDIA INPUT INFRASTRUCTURE (V4L/DVB)
|
||||
M: Mauro Carvalho Chehab <mchehab@s-opensource.com>
|
||||
M: Mauro Carvalho Chehab <mchehab@kernel.org>
|
||||
P: LinuxTV.org Project
|
||||
L: linux-media@vger.kernel.org
|
||||
|
@ -9706,6 +9716,7 @@ W: https://fedorahosted.org/dropwatch/
|
|||
F: net/core/drop_monitor.c
|
||||
|
||||
NETWORKING DRIVERS
|
||||
M: "David S. Miller" <davem@davemloft.net>
|
||||
L: netdev@vger.kernel.org
|
||||
W: http://www.linuxfoundation.org/en/Net
|
||||
Q: http://patchwork.ozlabs.org/project/netdev/list/
|
||||
|
@ -9765,6 +9776,7 @@ F: include/uapi/linux/net_namespace.h
|
|||
F: tools/testing/selftests/net/
|
||||
F: lib/net_utils.c
|
||||
F: lib/random32.c
|
||||
F: Documentation/networking/
|
||||
|
||||
NETWORKING [IPSEC]
|
||||
M: Steffen Klassert <steffen.klassert@secunet.com>
|
||||
|
@ -10881,7 +10893,6 @@ F: drivers/pci/host/
|
|||
F: drivers/pci/dwc/
|
||||
|
||||
PCIE DRIVER FOR AXIS ARTPEC
|
||||
M: Niklas Cassel <niklas.cassel@axis.com>
|
||||
M: Jesper Nilsson <jesper.nilsson@axis.com>
|
||||
L: linux-arm-kernel@axis.com
|
||||
L: linux-pci@vger.kernel.org
|
||||
|
@ -12240,7 +12251,6 @@ S: Odd Fixes
|
|||
F: drivers/media/i2c/saa6588*
|
||||
|
||||
SAA7134 VIDEO4LINUX DRIVER
|
||||
M: Mauro Carvalho Chehab <mchehab@s-opensource.com>
|
||||
M: Mauro Carvalho Chehab <mchehab@kernel.org>
|
||||
L: linux-media@vger.kernel.org
|
||||
W: https://linuxtv.org
|
||||
|
@ -12479,6 +12489,7 @@ F: drivers/scsi/st_*.h
|
|||
SCTP PROTOCOL
|
||||
M: Vlad Yasevich <vyasevich@gmail.com>
|
||||
M: Neil Horman <nhorman@tuxdriver.com>
|
||||
M: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
|
||||
L: linux-sctp@vger.kernel.org
|
||||
W: http://lksctp.sourceforge.net
|
||||
S: Maintained
|
||||
|
@ -12744,7 +12755,6 @@ S: Maintained
|
|||
F: drivers/media/radio/si4713/radio-usb-si4713.c
|
||||
|
||||
SIANO DVB DRIVER
|
||||
M: Mauro Carvalho Chehab <mchehab@s-opensource.com>
|
||||
M: Mauro Carvalho Chehab <mchehab@kernel.org>
|
||||
L: linux-media@vger.kernel.org
|
||||
W: https://linuxtv.org
|
||||
|
@ -12816,7 +12826,8 @@ F: include/linux/siphash.h
|
|||
|
||||
SIOX
|
||||
M: Gavin Schenk <g.schenk@eckelmann.de>
|
||||
M: Uwe Kleine-König <kernel@pengutronix.de>
|
||||
M: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
|
||||
R: Pengutronix Kernel Team <kernel@pengutronix.de>
|
||||
S: Supported
|
||||
F: drivers/siox/*
|
||||
F: include/trace/events/siox.h
|
||||
|
@ -13734,7 +13745,6 @@ S: Maintained
|
|||
F: drivers/media/i2c/tda9840*
|
||||
|
||||
TEA5761 TUNER DRIVER
|
||||
M: Mauro Carvalho Chehab <mchehab@s-opensource.com>
|
||||
M: Mauro Carvalho Chehab <mchehab@kernel.org>
|
||||
L: linux-media@vger.kernel.org
|
||||
W: https://linuxtv.org
|
||||
|
@ -13743,7 +13753,6 @@ S: Odd fixes
|
|||
F: drivers/media/tuners/tea5761.*
|
||||
|
||||
TEA5767 TUNER DRIVER
|
||||
M: Mauro Carvalho Chehab <mchehab@s-opensource.com>
|
||||
M: Mauro Carvalho Chehab <mchehab@kernel.org>
|
||||
L: linux-media@vger.kernel.org
|
||||
W: https://linuxtv.org
|
||||
|
@ -13833,7 +13842,6 @@ S: Supported
|
|||
F: drivers/iommu/tegra*
|
||||
|
||||
TEGRA KBC DRIVER
|
||||
M: Rakesh Iyer <riyer@nvidia.com>
|
||||
M: Laxman Dewangan <ldewangan@nvidia.com>
|
||||
S: Supported
|
||||
F: drivers/input/keyboard/tegra-kbc.c
|
||||
|
@ -13936,7 +13944,7 @@ THUNDERBOLT DRIVER
|
|||
M: Andreas Noever <andreas.noever@gmail.com>
|
||||
M: Michael Jamet <michael.jamet@intel.com>
|
||||
M: Mika Westerberg <mika.westerberg@linux.intel.com>
|
||||
M: Yehezkel Bernat <yehezkel.bernat@intel.com>
|
||||
M: Yehezkel Bernat <YehezkelShB@gmail.com>
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/westeri/thunderbolt.git
|
||||
S: Maintained
|
||||
F: Documentation/admin-guide/thunderbolt.rst
|
||||
|
@ -13946,7 +13954,7 @@ F: include/linux/thunderbolt.h
|
|||
THUNDERBOLT NETWORK DRIVER
|
||||
M: Michael Jamet <michael.jamet@intel.com>
|
||||
M: Mika Westerberg <mika.westerberg@linux.intel.com>
|
||||
M: Yehezkel Bernat <yehezkel.bernat@intel.com>
|
||||
M: Yehezkel Bernat <YehezkelShB@gmail.com>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/net/thunderbolt.c
|
||||
|
@ -14160,7 +14168,6 @@ F: Documentation/networking/tlan.txt
|
|||
F: drivers/net/ethernet/ti/tlan.*
|
||||
|
||||
TM6000 VIDEO4LINUX DRIVER
|
||||
M: Mauro Carvalho Chehab <mchehab@s-opensource.com>
|
||||
M: Mauro Carvalho Chehab <mchehab@kernel.org>
|
||||
L: linux-media@vger.kernel.org
|
||||
W: https://linuxtv.org
|
||||
|
@ -15393,7 +15400,6 @@ S: Maintained
|
|||
F: arch/x86/entry/vdso/
|
||||
|
||||
XC2028/3028 TUNER DRIVER
|
||||
M: Mauro Carvalho Chehab <mchehab@s-opensource.com>
|
||||
M: Mauro Carvalho Chehab <mchehab@kernel.org>
|
||||
L: linux-media@vger.kernel.org
|
||||
W: https://linuxtv.org
|
||||
|
|
4
Makefile
4
Makefile
|
@ -2,8 +2,8 @@
|
|||
VERSION = 4
|
||||
PATCHLEVEL = 17
|
||||
SUBLEVEL = 0
|
||||
EXTRAVERSION = -rc1
|
||||
NAME = Fearless Coyote
|
||||
EXTRAVERSION = -rc4
|
||||
NAME = Merciless Moray
|
||||
|
||||
# *DOCUMENTATION*
|
||||
# To see a list of typical targets execute "make help"
|
||||
|
|
|
@ -134,37 +134,37 @@
|
|||
function = "gmii";
|
||||
groups = "gmii_gmac0_grp";
|
||||
};
|
||||
/* Settings come from OpenWRT */
|
||||
/* Settings come from OpenWRT, pins on SL3516 */
|
||||
conf0 {
|
||||
pins = "R8 GMAC0 RXDV", "U11 GMAC1 RXDV";
|
||||
pins = "V8 GMAC0 RXDV", "T10 GMAC1 RXDV";
|
||||
skew-delay = <0>;
|
||||
};
|
||||
conf1 {
|
||||
pins = "T8 GMAC0 RXC", "T11 GMAC1 RXC";
|
||||
pins = "Y7 GMAC0 RXC", "Y11 GMAC1 RXC";
|
||||
skew-delay = <15>;
|
||||
};
|
||||
conf2 {
|
||||
pins = "P8 GMAC0 TXEN", "V11 GMAC1 TXEN";
|
||||
pins = "T8 GMAC0 TXEN", "W11 GMAC1 TXEN";
|
||||
skew-delay = <7>;
|
||||
};
|
||||
conf3 {
|
||||
pins = "V7 GMAC0 TXC";
|
||||
pins = "U8 GMAC0 TXC";
|
||||
skew-delay = <11>;
|
||||
};
|
||||
conf4 {
|
||||
pins = "P10 GMAC1 TXC";
|
||||
pins = "V11 GMAC1 TXC";
|
||||
skew-delay = <10>;
|
||||
};
|
||||
conf5 {
|
||||
/* The data lines all have default skew */
|
||||
pins = "U8 GMAC0 RXD0", "V8 GMAC0 RXD1",
|
||||
"P9 GMAC0 RXD2", "R9 GMAC0 RXD3",
|
||||
"U7 GMAC0 TXD0", "T7 GMAC0 TXD1",
|
||||
"R7 GMAC0 TXD2", "P7 GMAC0 TXD3",
|
||||
"R11 GMAC1 RXD0", "P11 GMAC1 RXD1",
|
||||
"V12 GMAC1 RXD2", "U12 GMAC1 RXD3",
|
||||
"R10 GMAC1 TXD0", "T10 GMAC1 TXD1",
|
||||
"U10 GMAC1 TXD2", "V10 GMAC1 TXD3";
|
||||
pins = "W8 GMAC0 RXD0", "V9 GMAC0 RXD1",
|
||||
"Y8 GMAC0 RXD2", "U9 GMAC0 RXD3",
|
||||
"T7 GMAC0 TXD0", "U6 GMAC0 TXD1",
|
||||
"V7 GMAC0 TXD2", "U7 GMAC0 TXD3",
|
||||
"Y12 GMAC1 RXD0", "V12 GMAC1 RXD1",
|
||||
"T11 GMAC1 RXD2", "W12 GMAC1 RXD3",
|
||||
"U10 GMAC1 TXD0", "Y10 GMAC1 TXD1",
|
||||
"W10 GMAC1 TXD2", "T9 GMAC1 TXD3";
|
||||
skew-delay = <7>;
|
||||
};
|
||||
/* Set up drive strength on GMAC0 to 16 mA */
|
||||
|
|
|
@ -163,10 +163,10 @@
|
|||
|
||||
cm2: cm2@8000 {
|
||||
compatible = "ti,omap4-cm2", "simple-bus";
|
||||
reg = <0x8000 0x3000>;
|
||||
reg = <0x8000 0x2000>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges = <0 0x8000 0x3000>;
|
||||
ranges = <0 0x8000 0x2000>;
|
||||
|
||||
cm2_clocks: clocks {
|
||||
#address-cells = <1>;
|
||||
|
@ -250,11 +250,11 @@
|
|||
|
||||
prm: prm@6000 {
|
||||
compatible = "ti,omap4-prm";
|
||||
reg = <0x6000 0x3000>;
|
||||
reg = <0x6000 0x2000>;
|
||||
interrupts = <GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
ranges = <0 0x6000 0x3000>;
|
||||
ranges = <0 0x6000 0x2000>;
|
||||
|
||||
prm_clocks: clocks {
|
||||
#address-cells = <1>;
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
# CONFIG_LOCALVERSION_AUTO is not set
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_NO_HZ_IDLE=y
|
||||
CONFIG_HIGH_RES_TIMERS=y
|
||||
CONFIG_BSD_PROCESS_ACCT=y
|
||||
CONFIG_USER_NS=y
|
||||
CONFIG_RELAY=y
|
||||
|
@ -12,15 +13,21 @@ CONFIG_ARCH_GEMINI=y
|
|||
CONFIG_PCI=y
|
||||
CONFIG_PREEMPT=y
|
||||
CONFIG_AEABI=y
|
||||
CONFIG_HIGHMEM=y
|
||||
CONFIG_CMA=y
|
||||
CONFIG_CMDLINE="console=ttyS0,115200n8"
|
||||
CONFIG_KEXEC=y
|
||||
CONFIG_BINFMT_MISC=y
|
||||
CONFIG_PM=y
|
||||
CONFIG_NET=y
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_INET=y
|
||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||
CONFIG_DEVTMPFS=y
|
||||
CONFIG_MTD=y
|
||||
CONFIG_MTD_BLOCK=y
|
||||
CONFIG_MTD_CFI=y
|
||||
CONFIG_MTD_JEDECPROBE=y
|
||||
CONFIG_MTD_CFI_INTELEXT=y
|
||||
CONFIG_MTD_CFI_AMDSTD=y
|
||||
CONFIG_MTD_CFI_STAA=y
|
||||
|
@ -33,6 +40,11 @@ CONFIG_BLK_DEV_SD=y
|
|||
# CONFIG_SCSI_LOWLEVEL is not set
|
||||
CONFIG_ATA=y
|
||||
CONFIG_PATA_FTIDE010=y
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_GEMINI_ETHERNET=y
|
||||
CONFIG_MDIO_BITBANG=y
|
||||
CONFIG_MDIO_GPIO=y
|
||||
CONFIG_REALTEK_PHY=y
|
||||
CONFIG_INPUT_EVDEV=y
|
||||
CONFIG_KEYBOARD_GPIO=y
|
||||
# CONFIG_INPUT_MOUSE is not set
|
||||
|
@ -43,9 +55,19 @@ CONFIG_SERIAL_8250_NR_UARTS=1
|
|||
CONFIG_SERIAL_8250_RUNTIME_UARTS=1
|
||||
CONFIG_SERIAL_OF_PLATFORM=y
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
# CONFIG_HWMON is not set
|
||||
CONFIG_I2C_GPIO=y
|
||||
CONFIG_SPI=y
|
||||
CONFIG_SPI_GPIO=y
|
||||
CONFIG_SENSORS_GPIO_FAN=y
|
||||
CONFIG_SENSORS_LM75=y
|
||||
CONFIG_THERMAL=y
|
||||
CONFIG_WATCHDOG=y
|
||||
CONFIG_GEMINI_WATCHDOG=y
|
||||
CONFIG_REGULATOR=y
|
||||
CONFIG_REGULATOR_FIXED_VOLTAGE=y
|
||||
CONFIG_DRM=y
|
||||
CONFIG_DRM_PANEL_ILITEK_IL9322=y
|
||||
CONFIG_DRM_TVE200=y
|
||||
CONFIG_LOGO=y
|
||||
CONFIG_USB=y
|
||||
CONFIG_USB_MON=y
|
||||
CONFIG_USB_FOTG210_HCD=y
|
||||
|
@ -54,6 +76,7 @@ CONFIG_NEW_LEDS=y
|
|||
CONFIG_LEDS_CLASS=y
|
||||
CONFIG_LEDS_GPIO=y
|
||||
CONFIG_LEDS_TRIGGERS=y
|
||||
CONFIG_LEDS_TRIGGER_DISK=y
|
||||
CONFIG_LEDS_TRIGGER_HEARTBEAT=y
|
||||
CONFIG_RTC_CLASS=y
|
||||
CONFIG_DMADEVICES=y
|
||||
|
|
|
@ -57,6 +57,7 @@ CONFIG_MTD_M25P80=y
|
|||
CONFIG_MTD_NAND=y
|
||||
CONFIG_MTD_NAND_DENALI_DT=y
|
||||
CONFIG_MTD_SPI_NOR=y
|
||||
# CONFIG_MTD_SPI_NOR_USE_4K_SECTORS is not set
|
||||
CONFIG_SPI_CADENCE_QUADSPI=y
|
||||
CONFIG_OF_OVERLAY=y
|
||||
CONFIG_OF_CONFIGFS=y
|
||||
|
|
|
@ -77,6 +77,9 @@ struct kvm_arch {
|
|||
/* Interrupt controller */
|
||||
struct vgic_dist vgic;
|
||||
int max_vcpus;
|
||||
|
||||
/* Mandated version of PSCI */
|
||||
u32 psci_version;
|
||||
};
|
||||
|
||||
#define KVM_NR_MEM_OBJS 40
|
||||
|
|
|
@ -195,6 +195,12 @@ struct kvm_arch_memory_slot {
|
|||
#define KVM_REG_ARM_VFP_FPINST 0x1009
|
||||
#define KVM_REG_ARM_VFP_FPINST2 0x100A
|
||||
|
||||
/* KVM-as-firmware specific pseudo-registers */
|
||||
#define KVM_REG_ARM_FW (0x0014 << KVM_REG_ARM_COPROC_SHIFT)
|
||||
#define KVM_REG_ARM_FW_REG(r) (KVM_REG_ARM | KVM_REG_SIZE_U64 | \
|
||||
KVM_REG_ARM_FW | ((r) & 0xffff))
|
||||
#define KVM_REG_ARM_PSCI_VERSION KVM_REG_ARM_FW_REG(0)
|
||||
|
||||
/* Device Control API: ARM VGIC */
|
||||
#define KVM_DEV_ARM_VGIC_GRP_ADDR 0
|
||||
#define KVM_DEV_ARM_VGIC_GRP_DIST_REGS 1
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#include <linux/module.h>
|
||||
#include <linux/vmalloc.h>
|
||||
#include <linux/fs.h>
|
||||
#include <kvm/arm_psci.h>
|
||||
#include <asm/cputype.h>
|
||||
#include <linux/uaccess.h>
|
||||
#include <asm/kvm.h>
|
||||
|
@ -176,6 +177,7 @@ static unsigned long num_core_regs(void)
|
|||
unsigned long kvm_arm_num_regs(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
return num_core_regs() + kvm_arm_num_coproc_regs(vcpu)
|
||||
+ kvm_arm_get_fw_num_regs(vcpu)
|
||||
+ NUM_TIMER_REGS;
|
||||
}
|
||||
|
||||
|
@ -196,6 +198,11 @@ int kvm_arm_copy_reg_indices(struct kvm_vcpu *vcpu, u64 __user *uindices)
|
|||
uindices++;
|
||||
}
|
||||
|
||||
ret = kvm_arm_copy_fw_reg_indices(vcpu, uindices);
|
||||
if (ret)
|
||||
return ret;
|
||||
uindices += kvm_arm_get_fw_num_regs(vcpu);
|
||||
|
||||
ret = copy_timer_indices(vcpu, uindices);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
@ -214,6 +221,9 @@ int kvm_arm_get_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg)
|
|||
if ((reg->id & KVM_REG_ARM_COPROC_MASK) == KVM_REG_ARM_CORE)
|
||||
return get_core_reg(vcpu, reg);
|
||||
|
||||
if ((reg->id & KVM_REG_ARM_COPROC_MASK) == KVM_REG_ARM_FW)
|
||||
return kvm_arm_get_fw_reg(vcpu, reg);
|
||||
|
||||
if (is_timer_reg(reg->id))
|
||||
return get_timer_reg(vcpu, reg);
|
||||
|
||||
|
@ -230,6 +240,9 @@ int kvm_arm_set_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg)
|
|||
if ((reg->id & KVM_REG_ARM_COPROC_MASK) == KVM_REG_ARM_CORE)
|
||||
return set_core_reg(vcpu, reg);
|
||||
|
||||
if ((reg->id & KVM_REG_ARM_COPROC_MASK) == KVM_REG_ARM_FW)
|
||||
return kvm_arm_set_fw_reg(vcpu, reg);
|
||||
|
||||
if (is_timer_reg(reg->id))
|
||||
return set_timer_reg(vcpu, reg);
|
||||
|
||||
|
|
|
@ -243,8 +243,4 @@ arch/arm/mach-omap2/pm-asm-offsets.s: arch/arm/mach-omap2/pm-asm-offsets.c
|
|||
include/generated/ti-pm-asm-offsets.h: arch/arm/mach-omap2/pm-asm-offsets.s FORCE
|
||||
$(call filechk,offsets,__TI_PM_ASM_OFFSETS_H__)
|
||||
|
||||
# For rule to generate ti-emif-asm-offsets.h dependency
|
||||
include drivers/memory/Makefile.asm-offsets
|
||||
|
||||
arch/arm/mach-omap2/sleep33xx.o: include/generated/ti-pm-asm-offsets.h include/generated/ti-emif-asm-offsets.h
|
||||
arch/arm/mach-omap2/sleep43xx.o: include/generated/ti-pm-asm-offsets.h include/generated/ti-emif-asm-offsets.h
|
||||
$(obj)/sleep33xx.o $(obj)/sleep43xx.o: include/generated/ti-pm-asm-offsets.h
|
||||
|
|
|
@ -7,9 +7,12 @@
|
|||
|
||||
#include <linux/kbuild.h>
|
||||
#include <linux/platform_data/pm33xx.h>
|
||||
#include <linux/ti-emif-sram.h>
|
||||
|
||||
int main(void)
|
||||
{
|
||||
ti_emif_asm_offsets();
|
||||
|
||||
DEFINE(AMX3_PM_WFI_FLAGS_OFFSET,
|
||||
offsetof(struct am33xx_pm_sram_data, wfi_flags));
|
||||
DEFINE(AMX3_PM_L2_AUX_CTRL_VAL_OFFSET,
|
||||
|
|
|
@ -6,7 +6,6 @@
|
|||
* Dave Gerlach, Vaibhav Bedia
|
||||
*/
|
||||
|
||||
#include <generated/ti-emif-asm-offsets.h>
|
||||
#include <generated/ti-pm-asm-offsets.h>
|
||||
#include <linux/linkage.h>
|
||||
#include <linux/ti-emif-sram.h>
|
||||
|
|
|
@ -6,7 +6,6 @@
|
|||
* Dave Gerlach, Vaibhav Bedia
|
||||
*/
|
||||
|
||||
#include <generated/ti-emif-asm-offsets.h>
|
||||
#include <generated/ti-pm-asm-offsets.h>
|
||||
#include <linux/linkage.h>
|
||||
#include <linux/ti-emif-sram.h>
|
||||
|
|
|
@ -427,9 +427,9 @@ static struct gpiod_lookup_table jive_wm8750_gpiod_table = {
|
|||
.dev_id = "spi_gpio",
|
||||
.table = {
|
||||
GPIO_LOOKUP("GPIOB", 4,
|
||||
"gpio-sck", GPIO_ACTIVE_HIGH),
|
||||
"sck", GPIO_ACTIVE_HIGH),
|
||||
GPIO_LOOKUP("GPIOB", 9,
|
||||
"gpio-mosi", GPIO_ACTIVE_HIGH),
|
||||
"mosi", GPIO_ACTIVE_HIGH),
|
||||
GPIO_LOOKUP("GPIOH", 10,
|
||||
"cs", GPIO_ACTIVE_HIGH),
|
||||
{ },
|
||||
|
|
|
@ -56,7 +56,11 @@ KBUILD_AFLAGS += $(lseinstr) $(brokengasinst)
|
|||
KBUILD_CFLAGS += $(call cc-option,-mabi=lp64)
|
||||
KBUILD_AFLAGS += $(call cc-option,-mabi=lp64)
|
||||
|
||||
ifeq ($(cc-name),clang)
|
||||
KBUILD_CFLAGS += -DCONFIG_ARCH_SUPPORTS_INT128
|
||||
else
|
||||
KBUILD_CFLAGS += $(call cc-ifversion, -ge, 0500, -DCONFIG_ARCH_SUPPORTS_INT128)
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_CPU_BIG_ENDIAN), y)
|
||||
KBUILD_CPPFLAGS += -mbig-endian
|
||||
|
|
|
@ -212,3 +212,7 @@
|
|||
pinctrl-0 = <&uart_ao_a_pins>;
|
||||
pinctrl-names = "default";
|
||||
};
|
||||
|
||||
&usb0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
|
|
@ -271,3 +271,15 @@
|
|||
pinctrl-0 = <&uart_ao_a_pins>;
|
||||
pinctrl-names = "default";
|
||||
};
|
||||
|
||||
&usb0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usb2_phy0 {
|
||||
/*
|
||||
* even though the schematics don't show it:
|
||||
* HDMI_5V is also used as supply for the USB VBUS.
|
||||
*/
|
||||
phy-supply = <&hdmi_5v>;
|
||||
};
|
||||
|
|
|
@ -215,3 +215,7 @@
|
|||
pinctrl-0 = <&uart_ao_a_pins>;
|
||||
pinctrl-names = "default";
|
||||
};
|
||||
|
||||
&usb0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
|
|
@ -185,3 +185,7 @@
|
|||
pinctrl-0 = <&uart_ao_a_pins>;
|
||||
pinctrl-names = "default";
|
||||
};
|
||||
|
||||
&usb0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
|
|
@ -20,6 +20,67 @@
|
|||
no-map;
|
||||
};
|
||||
};
|
||||
|
||||
soc {
|
||||
usb0: usb@c9000000 {
|
||||
status = "disabled";
|
||||
compatible = "amlogic,meson-gxl-dwc3";
|
||||
#address-cells = <2>;
|
||||
#size-cells = <2>;
|
||||
ranges;
|
||||
|
||||
clocks = <&clkc CLKID_USB>;
|
||||
clock-names = "usb_general";
|
||||
resets = <&reset RESET_USB_OTG>;
|
||||
reset-names = "usb_otg";
|
||||
|
||||
dwc3: dwc3@c9000000 {
|
||||
compatible = "snps,dwc3";
|
||||
reg = <0x0 0xc9000000 0x0 0x100000>;
|
||||
interrupts = <GIC_SPI 30 IRQ_TYPE_LEVEL_HIGH>;
|
||||
dr_mode = "host";
|
||||
maximum-speed = "high-speed";
|
||||
snps,dis_u2_susphy_quirk;
|
||||
phys = <&usb3_phy>, <&usb2_phy0>, <&usb2_phy1>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&apb {
|
||||
usb2_phy0: phy@78000 {
|
||||
compatible = "amlogic,meson-gxl-usb2-phy";
|
||||
#phy-cells = <0>;
|
||||
reg = <0x0 0x78000 0x0 0x20>;
|
||||
clocks = <&clkc CLKID_USB>;
|
||||
clock-names = "phy";
|
||||
resets = <&reset RESET_USB_OTG>;
|
||||
reset-names = "phy";
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
usb2_phy1: phy@78020 {
|
||||
compatible = "amlogic,meson-gxl-usb2-phy";
|
||||
#phy-cells = <0>;
|
||||
reg = <0x0 0x78020 0x0 0x20>;
|
||||
clocks = <&clkc CLKID_USB>;
|
||||
clock-names = "phy";
|
||||
resets = <&reset RESET_USB_OTG>;
|
||||
reset-names = "phy";
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
usb3_phy: phy@78080 {
|
||||
compatible = "amlogic,meson-gxl-usb3-phy";
|
||||
#phy-cells = <0>;
|
||||
reg = <0x0 0x78080 0x0 0x20>;
|
||||
interrupts = <GIC_SPI 16 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clkc CLKID_USB>, <&clkc_AO CLKID_AO_CEC_32K>;
|
||||
clock-names = "phy", "peripheral";
|
||||
resets = <&reset RESET_USB_OTG>, <&reset RESET_USB_OTG>;
|
||||
reset-names = "phy", "peripheral";
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
|
||||
ðmac {
|
||||
|
|
|
@ -406,3 +406,7 @@
|
|||
status = "okay";
|
||||
vref-supply = <&vddio_ao18>;
|
||||
};
|
||||
|
||||
&usb0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
|
|
@ -80,6 +80,19 @@
|
|||
};
|
||||
};
|
||||
|
||||
&apb {
|
||||
usb2_phy2: phy@78040 {
|
||||
compatible = "amlogic,meson-gxl-usb2-phy";
|
||||
#phy-cells = <0>;
|
||||
reg = <0x0 0x78040 0x0 0x20>;
|
||||
clocks = <&clkc CLKID_USB>;
|
||||
clock-names = "phy";
|
||||
resets = <&reset RESET_USB_OTG>;
|
||||
reset-names = "phy";
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
|
||||
&clkc_AO {
|
||||
compatible = "amlogic,meson-gxm-aoclkc", "amlogic,meson-gx-aoclkc";
|
||||
};
|
||||
|
@ -100,3 +113,7 @@
|
|||
&hdmi_tx {
|
||||
compatible = "amlogic,meson-gxm-dw-hdmi", "amlogic,meson-gx-dw-hdmi";
|
||||
};
|
||||
|
||||
&dwc3 {
|
||||
phys = <&usb3_phy>, <&usb2_phy0>, <&usb2_phy1>, <&usb2_phy2>;
|
||||
};
|
||||
|
|
|
@ -56,8 +56,6 @@
|
|||
|
||||
gpio_keys {
|
||||
compatible = "gpio-keys";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
power-button {
|
||||
debounce_interval = <50>;
|
||||
|
|
|
@ -36,11 +36,11 @@
|
|||
#size-cells = <1>;
|
||||
ranges = <0x0 0x0 0x67d00000 0x00800000>;
|
||||
|
||||
sata0: ahci@210000 {
|
||||
sata0: ahci@0 {
|
||||
compatible = "brcm,iproc-ahci", "generic-ahci";
|
||||
reg = <0x00210000 0x1000>;
|
||||
reg = <0x00000000 0x1000>;
|
||||
reg-names = "ahci";
|
||||
interrupts = <GIC_SPI 339 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupts = <GIC_SPI 321 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
status = "disabled";
|
||||
|
@ -52,9 +52,9 @@
|
|||
};
|
||||
};
|
||||
|
||||
sata_phy0: sata_phy@212100 {
|
||||
sata_phy0: sata_phy@2100 {
|
||||
compatible = "brcm,iproc-sr-sata-phy";
|
||||
reg = <0x00212100 0x1000>;
|
||||
reg = <0x00002100 0x1000>;
|
||||
reg-names = "phy";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
@ -66,11 +66,11 @@
|
|||
};
|
||||
};
|
||||
|
||||
sata1: ahci@310000 {
|
||||
sata1: ahci@10000 {
|
||||
compatible = "brcm,iproc-ahci", "generic-ahci";
|
||||
reg = <0x00310000 0x1000>;
|
||||
reg = <0x00010000 0x1000>;
|
||||
reg-names = "ahci";
|
||||
interrupts = <GIC_SPI 347 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupts = <GIC_SPI 323 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
status = "disabled";
|
||||
|
@ -82,9 +82,9 @@
|
|||
};
|
||||
};
|
||||
|
||||
sata_phy1: sata_phy@312100 {
|
||||
sata_phy1: sata_phy@12100 {
|
||||
compatible = "brcm,iproc-sr-sata-phy";
|
||||
reg = <0x00312100 0x1000>;
|
||||
reg = <0x00012100 0x1000>;
|
||||
reg-names = "phy";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
@ -96,11 +96,11 @@
|
|||
};
|
||||
};
|
||||
|
||||
sata2: ahci@120000 {
|
||||
sata2: ahci@20000 {
|
||||
compatible = "brcm,iproc-ahci", "generic-ahci";
|
||||
reg = <0x00120000 0x1000>;
|
||||
reg = <0x00020000 0x1000>;
|
||||
reg-names = "ahci";
|
||||
interrupts = <GIC_SPI 333 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupts = <GIC_SPI 325 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
status = "disabled";
|
||||
|
@ -112,9 +112,9 @@
|
|||
};
|
||||
};
|
||||
|
||||
sata_phy2: sata_phy@122100 {
|
||||
sata_phy2: sata_phy@22100 {
|
||||
compatible = "brcm,iproc-sr-sata-phy";
|
||||
reg = <0x00122100 0x1000>;
|
||||
reg = <0x00022100 0x1000>;
|
||||
reg-names = "phy";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
@ -126,11 +126,11 @@
|
|||
};
|
||||
};
|
||||
|
||||
sata3: ahci@130000 {
|
||||
sata3: ahci@30000 {
|
||||
compatible = "brcm,iproc-ahci", "generic-ahci";
|
||||
reg = <0x00130000 0x1000>;
|
||||
reg = <0x00030000 0x1000>;
|
||||
reg-names = "ahci";
|
||||
interrupts = <GIC_SPI 335 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupts = <GIC_SPI 327 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
status = "disabled";
|
||||
|
@ -142,9 +142,9 @@
|
|||
};
|
||||
};
|
||||
|
||||
sata_phy3: sata_phy@132100 {
|
||||
sata_phy3: sata_phy@32100 {
|
||||
compatible = "brcm,iproc-sr-sata-phy";
|
||||
reg = <0x00132100 0x1000>;
|
||||
reg = <0x00032100 0x1000>;
|
||||
reg-names = "phy";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
@ -156,11 +156,11 @@
|
|||
};
|
||||
};
|
||||
|
||||
sata4: ahci@330000 {
|
||||
sata4: ahci@100000 {
|
||||
compatible = "brcm,iproc-ahci", "generic-ahci";
|
||||
reg = <0x00330000 0x1000>;
|
||||
reg = <0x00100000 0x1000>;
|
||||
reg-names = "ahci";
|
||||
interrupts = <GIC_SPI 351 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupts = <GIC_SPI 329 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
status = "disabled";
|
||||
|
@ -172,9 +172,9 @@
|
|||
};
|
||||
};
|
||||
|
||||
sata_phy4: sata_phy@332100 {
|
||||
sata_phy4: sata_phy@102100 {
|
||||
compatible = "brcm,iproc-sr-sata-phy";
|
||||
reg = <0x00332100 0x1000>;
|
||||
reg = <0x00102100 0x1000>;
|
||||
reg-names = "phy";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
@ -186,11 +186,11 @@
|
|||
};
|
||||
};
|
||||
|
||||
sata5: ahci@400000 {
|
||||
sata5: ahci@110000 {
|
||||
compatible = "brcm,iproc-ahci", "generic-ahci";
|
||||
reg = <0x00400000 0x1000>;
|
||||
reg = <0x00110000 0x1000>;
|
||||
reg-names = "ahci";
|
||||
interrupts = <GIC_SPI 353 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupts = <GIC_SPI 331 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
status = "disabled";
|
||||
|
@ -202,9 +202,9 @@
|
|||
};
|
||||
};
|
||||
|
||||
sata_phy5: sata_phy@402100 {
|
||||
sata_phy5: sata_phy@112100 {
|
||||
compatible = "brcm,iproc-sr-sata-phy";
|
||||
reg = <0x00402100 0x1000>;
|
||||
reg = <0x00112100 0x1000>;
|
||||
reg-names = "phy";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
@ -216,11 +216,11 @@
|
|||
};
|
||||
};
|
||||
|
||||
sata6: ahci@410000 {
|
||||
sata6: ahci@120000 {
|
||||
compatible = "brcm,iproc-ahci", "generic-ahci";
|
||||
reg = <0x00410000 0x1000>;
|
||||
reg = <0x00120000 0x1000>;
|
||||
reg-names = "ahci";
|
||||
interrupts = <GIC_SPI 355 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupts = <GIC_SPI 333 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
status = "disabled";
|
||||
|
@ -232,9 +232,9 @@
|
|||
};
|
||||
};
|
||||
|
||||
sata_phy6: sata_phy@412100 {
|
||||
sata_phy6: sata_phy@122100 {
|
||||
compatible = "brcm,iproc-sr-sata-phy";
|
||||
reg = <0x00412100 0x1000>;
|
||||
reg = <0x00122100 0x1000>;
|
||||
reg-names = "phy";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
@ -246,11 +246,11 @@
|
|||
};
|
||||
};
|
||||
|
||||
sata7: ahci@420000 {
|
||||
sata7: ahci@130000 {
|
||||
compatible = "brcm,iproc-ahci", "generic-ahci";
|
||||
reg = <0x00420000 0x1000>;
|
||||
reg = <0x00130000 0x1000>;
|
||||
reg-names = "ahci";
|
||||
interrupts = <GIC_SPI 357 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupts = <GIC_SPI 335 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
status = "disabled";
|
||||
|
@ -262,9 +262,9 @@
|
|||
};
|
||||
};
|
||||
|
||||
sata_phy7: sata_phy@422100 {
|
||||
sata_phy7: sata_phy@132100 {
|
||||
compatible = "brcm,iproc-sr-sata-phy";
|
||||
reg = <0x00422100 0x1000>;
|
||||
reg = <0x00132100 0x1000>;
|
||||
reg-names = "phy";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
|
|
@ -333,7 +333,7 @@ static inline void kvm_vcpu_set_be(struct kvm_vcpu *vcpu)
|
|||
} else {
|
||||
u64 sctlr = vcpu_read_sys_reg(vcpu, SCTLR_EL1);
|
||||
sctlr |= (1 << 25);
|
||||
vcpu_write_sys_reg(vcpu, SCTLR_EL1, sctlr);
|
||||
vcpu_write_sys_reg(vcpu, sctlr, SCTLR_EL1);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -75,6 +75,9 @@ struct kvm_arch {
|
|||
|
||||
/* Interrupt controller */
|
||||
struct vgic_dist vgic;
|
||||
|
||||
/* Mandated version of PSCI */
|
||||
u32 psci_version;
|
||||
};
|
||||
|
||||
#define KVM_NR_MEM_OBJS 40
|
||||
|
|
|
@ -39,7 +39,7 @@ struct mod_arch_specific {
|
|||
u64 module_emit_plt_entry(struct module *mod, void *loc, const Elf64_Rela *rela,
|
||||
Elf64_Sym *sym);
|
||||
|
||||
u64 module_emit_adrp_veneer(struct module *mod, void *loc, u64 val);
|
||||
u64 module_emit_veneer_for_adrp(struct module *mod, void *loc, u64 val);
|
||||
|
||||
#ifdef CONFIG_RANDOMIZE_BASE
|
||||
extern u64 module_alloc_base;
|
||||
|
|
|
@ -230,7 +230,7 @@ static inline void set_pte(pte_t *ptep, pte_t pte)
|
|||
}
|
||||
}
|
||||
|
||||
extern void __sync_icache_dcache(pte_t pteval, unsigned long addr);
|
||||
extern void __sync_icache_dcache(pte_t pteval);
|
||||
|
||||
/*
|
||||
* PTE bits configuration in the presence of hardware Dirty Bit Management
|
||||
|
@ -253,7 +253,7 @@ static inline void set_pte_at(struct mm_struct *mm, unsigned long addr,
|
|||
pte_t old_pte;
|
||||
|
||||
if (pte_present(pte) && pte_user_exec(pte) && !pte_special(pte))
|
||||
__sync_icache_dcache(pte, addr);
|
||||
__sync_icache_dcache(pte);
|
||||
|
||||
/*
|
||||
* If the existing pte is valid, check for potential race with
|
||||
|
|
|
@ -206,6 +206,12 @@ struct kvm_arch_memory_slot {
|
|||
#define KVM_REG_ARM_TIMER_CNT ARM64_SYS_REG(3, 3, 14, 3, 2)
|
||||
#define KVM_REG_ARM_TIMER_CVAL ARM64_SYS_REG(3, 3, 14, 0, 2)
|
||||
|
||||
/* KVM-as-firmware specific pseudo-registers */
|
||||
#define KVM_REG_ARM_FW (0x0014 << KVM_REG_ARM_COPROC_SHIFT)
|
||||
#define KVM_REG_ARM_FW_REG(r) (KVM_REG_ARM64 | KVM_REG_SIZE_U64 | \
|
||||
KVM_REG_ARM_FW | ((r) & 0xffff))
|
||||
#define KVM_REG_ARM_PSCI_VERSION KVM_REG_ARM_FW_REG(0)
|
||||
|
||||
/* Device Control API: ARM VGIC */
|
||||
#define KVM_DEV_ARM_VGIC_GRP_ADDR 0
|
||||
#define KVM_DEV_ARM_VGIC_GRP_DIST_REGS 1
|
||||
|
|
|
@ -868,6 +868,7 @@ static bool unmap_kernel_at_el0(const struct arm64_cpu_capabilities *entry,
|
|||
static const struct midr_range kpti_safe_list[] = {
|
||||
MIDR_ALL_VERSIONS(MIDR_CAVIUM_THUNDERX2),
|
||||
MIDR_ALL_VERSIONS(MIDR_BRCM_VULCAN),
|
||||
{ /* sentinel */ }
|
||||
};
|
||||
char const *str = "command line option";
|
||||
|
||||
|
|
|
@ -43,7 +43,7 @@ u64 module_emit_plt_entry(struct module *mod, void *loc, const Elf64_Rela *rela,
|
|||
}
|
||||
|
||||
#ifdef CONFIG_ARM64_ERRATUM_843419
|
||||
u64 module_emit_adrp_veneer(struct module *mod, void *loc, u64 val)
|
||||
u64 module_emit_veneer_for_adrp(struct module *mod, void *loc, u64 val)
|
||||
{
|
||||
struct mod_plt_sec *pltsec = !in_init(mod, loc) ? &mod->arch.core :
|
||||
&mod->arch.init;
|
||||
|
|
|
@ -215,7 +215,7 @@ static int reloc_insn_adrp(struct module *mod, __le32 *place, u64 val)
|
|||
insn &= ~BIT(31);
|
||||
} else {
|
||||
/* out of range for ADR -> emit a veneer */
|
||||
val = module_emit_adrp_veneer(mod, place, val & ~0xfff);
|
||||
val = module_emit_veneer_for_adrp(mod, place, val & ~0xfff);
|
||||
if (!val)
|
||||
return -ENOEXEC;
|
||||
insn = aarch64_insn_gen_branch_imm((u64)place, val,
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
#include <linux/sched/signal.h>
|
||||
#include <linux/sched/task_stack.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/nospec.h>
|
||||
#include <linux/smp.h>
|
||||
#include <linux/ptrace.h>
|
||||
#include <linux/user.h>
|
||||
|
@ -249,15 +250,20 @@ static struct perf_event *ptrace_hbp_get_event(unsigned int note_type,
|
|||
|
||||
switch (note_type) {
|
||||
case NT_ARM_HW_BREAK:
|
||||
if (idx < ARM_MAX_BRP)
|
||||
bp = tsk->thread.debug.hbp_break[idx];
|
||||
if (idx >= ARM_MAX_BRP)
|
||||
goto out;
|
||||
idx = array_index_nospec(idx, ARM_MAX_BRP);
|
||||
bp = tsk->thread.debug.hbp_break[idx];
|
||||
break;
|
||||
case NT_ARM_HW_WATCH:
|
||||
if (idx < ARM_MAX_WRP)
|
||||
bp = tsk->thread.debug.hbp_watch[idx];
|
||||
if (idx >= ARM_MAX_WRP)
|
||||
goto out;
|
||||
idx = array_index_nospec(idx, ARM_MAX_WRP);
|
||||
bp = tsk->thread.debug.hbp_watch[idx];
|
||||
break;
|
||||
}
|
||||
|
||||
out:
|
||||
return bp;
|
||||
}
|
||||
|
||||
|
@ -1458,9 +1464,7 @@ static int compat_ptrace_gethbpregs(struct task_struct *tsk, compat_long_t num,
|
|||
{
|
||||
int ret;
|
||||
u32 kdata;
|
||||
mm_segment_t old_fs = get_fs();
|
||||
|
||||
set_fs(KERNEL_DS);
|
||||
/* Watchpoint */
|
||||
if (num < 0) {
|
||||
ret = compat_ptrace_hbp_get(NT_ARM_HW_WATCH, tsk, num, &kdata);
|
||||
|
@ -1471,7 +1475,6 @@ static int compat_ptrace_gethbpregs(struct task_struct *tsk, compat_long_t num,
|
|||
} else {
|
||||
ret = compat_ptrace_hbp_get(NT_ARM_HW_BREAK, tsk, num, &kdata);
|
||||
}
|
||||
set_fs(old_fs);
|
||||
|
||||
if (!ret)
|
||||
ret = put_user(kdata, data);
|
||||
|
@ -1484,7 +1487,6 @@ static int compat_ptrace_sethbpregs(struct task_struct *tsk, compat_long_t num,
|
|||
{
|
||||
int ret;
|
||||
u32 kdata = 0;
|
||||
mm_segment_t old_fs = get_fs();
|
||||
|
||||
if (num == 0)
|
||||
return 0;
|
||||
|
@ -1493,12 +1495,10 @@ static int compat_ptrace_sethbpregs(struct task_struct *tsk, compat_long_t num,
|
|||
if (ret)
|
||||
return ret;
|
||||
|
||||
set_fs(KERNEL_DS);
|
||||
if (num < 0)
|
||||
ret = compat_ptrace_hbp_set(NT_ARM_HW_WATCH, tsk, num, &kdata);
|
||||
else
|
||||
ret = compat_ptrace_hbp_set(NT_ARM_HW_BREAK, tsk, num, &kdata);
|
||||
set_fs(old_fs);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -277,7 +277,8 @@ void arm64_skip_faulting_instruction(struct pt_regs *regs, unsigned long size)
|
|||
* If we were single stepping, we want to get the step exception after
|
||||
* we return from the trap.
|
||||
*/
|
||||
user_fastforward_single_step(current);
|
||||
if (user_mode(regs))
|
||||
user_fastforward_single_step(current);
|
||||
}
|
||||
|
||||
static LIST_HEAD(undef_hook);
|
||||
|
@ -366,7 +367,7 @@ void force_signal_inject(int signal, int code, unsigned long address)
|
|||
}
|
||||
|
||||
/* Force signals we don't understand to SIGKILL */
|
||||
if (WARN_ON(signal != SIGKILL ||
|
||||
if (WARN_ON(signal != SIGKILL &&
|
||||
siginfo_layout(signal, code) != SIL_FAULT)) {
|
||||
signal = SIGKILL;
|
||||
}
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
#include <linux/module.h>
|
||||
#include <linux/vmalloc.h>
|
||||
#include <linux/fs.h>
|
||||
#include <kvm/arm_psci.h>
|
||||
#include <asm/cputype.h>
|
||||
#include <linux/uaccess.h>
|
||||
#include <asm/kvm.h>
|
||||
|
@ -205,7 +206,7 @@ static int get_timer_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg)
|
|||
unsigned long kvm_arm_num_regs(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
return num_core_regs() + kvm_arm_num_sys_reg_descs(vcpu)
|
||||
+ NUM_TIMER_REGS;
|
||||
+ kvm_arm_get_fw_num_regs(vcpu) + NUM_TIMER_REGS;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -225,6 +226,11 @@ int kvm_arm_copy_reg_indices(struct kvm_vcpu *vcpu, u64 __user *uindices)
|
|||
uindices++;
|
||||
}
|
||||
|
||||
ret = kvm_arm_copy_fw_reg_indices(vcpu, uindices);
|
||||
if (ret)
|
||||
return ret;
|
||||
uindices += kvm_arm_get_fw_num_regs(vcpu);
|
||||
|
||||
ret = copy_timer_indices(vcpu, uindices);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
@ -243,6 +249,9 @@ int kvm_arm_get_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg)
|
|||
if ((reg->id & KVM_REG_ARM_COPROC_MASK) == KVM_REG_ARM_CORE)
|
||||
return get_core_reg(vcpu, reg);
|
||||
|
||||
if ((reg->id & KVM_REG_ARM_COPROC_MASK) == KVM_REG_ARM_FW)
|
||||
return kvm_arm_get_fw_reg(vcpu, reg);
|
||||
|
||||
if (is_timer_reg(reg->id))
|
||||
return get_timer_reg(vcpu, reg);
|
||||
|
||||
|
@ -259,6 +268,9 @@ int kvm_arm_set_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg)
|
|||
if ((reg->id & KVM_REG_ARM_COPROC_MASK) == KVM_REG_ARM_CORE)
|
||||
return set_core_reg(vcpu, reg);
|
||||
|
||||
if ((reg->id & KVM_REG_ARM_COPROC_MASK) == KVM_REG_ARM_FW)
|
||||
return kvm_arm_set_fw_reg(vcpu, reg);
|
||||
|
||||
if (is_timer_reg(reg->id))
|
||||
return set_timer_reg(vcpu, reg);
|
||||
|
||||
|
|
|
@ -18,11 +18,20 @@
|
|||
#include <linux/compiler.h>
|
||||
#include <linux/irqchip/arm-gic.h>
|
||||
#include <linux/kvm_host.h>
|
||||
#include <linux/swab.h>
|
||||
|
||||
#include <asm/kvm_emulate.h>
|
||||
#include <asm/kvm_hyp.h>
|
||||
#include <asm/kvm_mmu.h>
|
||||
|
||||
static bool __hyp_text __is_be(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
if (vcpu_mode_is_32bit(vcpu))
|
||||
return !!(read_sysreg_el2(spsr) & COMPAT_PSR_E_BIT);
|
||||
|
||||
return !!(read_sysreg(SCTLR_EL1) & SCTLR_ELx_EE);
|
||||
}
|
||||
|
||||
/*
|
||||
* __vgic_v2_perform_cpuif_access -- perform a GICV access on behalf of the
|
||||
* guest.
|
||||
|
@ -64,14 +73,19 @@ int __hyp_text __vgic_v2_perform_cpuif_access(struct kvm_vcpu *vcpu)
|
|||
addr += fault_ipa - vgic->vgic_cpu_base;
|
||||
|
||||
if (kvm_vcpu_dabt_iswrite(vcpu)) {
|
||||
u32 data = vcpu_data_guest_to_host(vcpu,
|
||||
vcpu_get_reg(vcpu, rd),
|
||||
sizeof(u32));
|
||||
u32 data = vcpu_get_reg(vcpu, rd);
|
||||
if (__is_be(vcpu)) {
|
||||
/* guest pre-swabbed data, undo this for writel() */
|
||||
data = swab32(data);
|
||||
}
|
||||
writel_relaxed(data, addr);
|
||||
} else {
|
||||
u32 data = readl_relaxed(addr);
|
||||
vcpu_set_reg(vcpu, rd, vcpu_data_host_to_guest(vcpu, data,
|
||||
sizeof(u32)));
|
||||
if (__is_be(vcpu)) {
|
||||
/* guest expects swabbed data */
|
||||
data = swab32(data);
|
||||
}
|
||||
vcpu_set_reg(vcpu, rd, data);
|
||||
}
|
||||
|
||||
return 1;
|
||||
|
|
|
@ -996,14 +996,12 @@ static u64 read_id_reg(struct sys_reg_desc const *r, bool raz)
|
|||
|
||||
if (id == SYS_ID_AA64PFR0_EL1) {
|
||||
if (val & (0xfUL << ID_AA64PFR0_SVE_SHIFT))
|
||||
pr_err_once("kvm [%i]: SVE unsupported for guests, suppressing\n",
|
||||
task_pid_nr(current));
|
||||
kvm_debug("SVE unsupported for guests, suppressing\n");
|
||||
|
||||
val &= ~(0xfUL << ID_AA64PFR0_SVE_SHIFT);
|
||||
} else if (id == SYS_ID_AA64MMFR1_EL1) {
|
||||
if (val & (0xfUL << ID_AA64MMFR1_LOR_SHIFT))
|
||||
pr_err_once("kvm [%i]: LORegions unsupported for guests, suppressing\n",
|
||||
task_pid_nr(current));
|
||||
kvm_debug("LORegions unsupported for guests, suppressing\n");
|
||||
|
||||
val &= ~(0xfUL << ID_AA64MMFR1_LOR_SHIFT);
|
||||
}
|
||||
|
|
|
@ -19,5 +19,9 @@ CFLAGS_atomic_ll_sc.o := -fcall-used-x0 -ffixed-x1 -ffixed-x2 \
|
|||
-fcall-saved-x13 -fcall-saved-x14 -fcall-saved-x15 \
|
||||
-fcall-saved-x18 -fomit-frame-pointer
|
||||
CFLAGS_REMOVE_atomic_ll_sc.o := -pg
|
||||
GCOV_PROFILE_atomic_ll_sc.o := n
|
||||
KASAN_SANITIZE_atomic_ll_sc.o := n
|
||||
KCOV_INSTRUMENT_atomic_ll_sc.o := n
|
||||
UBSAN_SANITIZE_atomic_ll_sc.o := n
|
||||
|
||||
lib-$(CONFIG_ARCH_HAS_UACCESS_FLUSHCACHE) += uaccess_flushcache.o
|
||||
|
|
|
@ -58,7 +58,7 @@ void copy_to_user_page(struct vm_area_struct *vma, struct page *page,
|
|||
flush_ptrace_access(vma, page, uaddr, dst, len);
|
||||
}
|
||||
|
||||
void __sync_icache_dcache(pte_t pte, unsigned long addr)
|
||||
void __sync_icache_dcache(pte_t pte)
|
||||
{
|
||||
struct page *page = pte_page(pte);
|
||||
|
||||
|
|
|
@ -204,7 +204,7 @@ void __init kasan_init(void)
|
|||
clear_pgds(KASAN_SHADOW_START, KASAN_SHADOW_END);
|
||||
|
||||
kasan_map_populate(kimg_shadow_start, kimg_shadow_end,
|
||||
pfn_to_nid(virt_to_pfn(lm_alias(_text))));
|
||||
early_pfn_to_nid(virt_to_pfn(lm_alias(_text))));
|
||||
|
||||
kasan_populate_zero_shadow((void *)KASAN_SHADOW_START,
|
||||
(void *)mod_shadow_start);
|
||||
|
@ -224,7 +224,7 @@ void __init kasan_init(void)
|
|||
|
||||
kasan_map_populate((unsigned long)kasan_mem_to_shadow(start),
|
||||
(unsigned long)kasan_mem_to_shadow(end),
|
||||
pfn_to_nid(virt_to_pfn(start)));
|
||||
early_pfn_to_nid(virt_to_pfn(start)));
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -216,6 +216,12 @@ static inline void memcpy_toio(volatile void __iomem *dst, const void *src,
|
|||
memcpy((void *) dst, src, count);
|
||||
}
|
||||
|
||||
static inline void memset_io(volatile void __iomem *addr, int value,
|
||||
size_t size)
|
||||
{
|
||||
memset((void __force *)addr, value, size);
|
||||
}
|
||||
|
||||
#define PCI_IO_ADDR (volatile void __iomem *)
|
||||
|
||||
/*
|
||||
|
|
|
@ -199,3 +199,4 @@ csum_partial_copy_nocheck(const void *src, void *dst, int len, __wsum sum)
|
|||
memcpy(dst, src, len);
|
||||
return csum_partial(dst, len, sum);
|
||||
}
|
||||
EXPORT_SYMBOL(csum_partial_copy_nocheck);
|
||||
|
|
|
@ -51,6 +51,8 @@
|
|||
ranges = <0x02000000 0 0x40000000
|
||||
0x40000000 0 0x40000000>;
|
||||
|
||||
bus-range = <0x00 0xff>;
|
||||
|
||||
interrupt-map-mask = <0 0 0 7>;
|
||||
interrupt-map = <0 0 0 1 &pci0_intc 1>,
|
||||
<0 0 0 2 &pci0_intc 2>,
|
||||
|
@ -79,6 +81,8 @@
|
|||
ranges = <0x02000000 0 0x20000000
|
||||
0x20000000 0 0x20000000>;
|
||||
|
||||
bus-range = <0x00 0xff>;
|
||||
|
||||
interrupt-map-mask = <0 0 0 7>;
|
||||
interrupt-map = <0 0 0 1 &pci1_intc 1>,
|
||||
<0 0 0 2 &pci1_intc 2>,
|
||||
|
@ -107,6 +111,8 @@
|
|||
ranges = <0x02000000 0 0x16000000
|
||||
0x16000000 0 0x100000>;
|
||||
|
||||
bus-range = <0x00 0xff>;
|
||||
|
||||
interrupt-map-mask = <0 0 0 7>;
|
||||
interrupt-map = <0 0 0 1 &pci2_intc 1>,
|
||||
<0 0 0 2 &pci2_intc 2>,
|
||||
|
|
|
@ -307,7 +307,7 @@ static inline void iounmap(const volatile void __iomem *addr)
|
|||
#if defined(CONFIG_CPU_CAVIUM_OCTEON) || defined(CONFIG_LOONGSON3_ENHANCEMENT)
|
||||
#define war_io_reorder_wmb() wmb()
|
||||
#else
|
||||
#define war_io_reorder_wmb() do { } while (0)
|
||||
#define war_io_reorder_wmb() barrier()
|
||||
#endif
|
||||
|
||||
#define __BUILD_MEMORY_SINGLE(pfx, bwlq, type, irq) \
|
||||
|
@ -377,6 +377,8 @@ static inline type pfx##read##bwlq(const volatile void __iomem *mem) \
|
|||
BUG(); \
|
||||
} \
|
||||
\
|
||||
/* prevent prefetching of coherent DMA data prematurely */ \
|
||||
rmb(); \
|
||||
return pfx##ioswab##bwlq(__mem, __val); \
|
||||
}
|
||||
|
||||
|
|
|
@ -654,6 +654,13 @@ __clear_user(void __user *addr, __kernel_size_t size)
|
|||
{
|
||||
__kernel_size_t res;
|
||||
|
||||
#ifdef CONFIG_CPU_MICROMIPS
|
||||
/* micromips memset / bzero also clobbers t7 & t8 */
|
||||
#define bzero_clobbers "$4", "$5", "$6", __UA_t0, __UA_t1, "$15", "$24", "$31"
|
||||
#else
|
||||
#define bzero_clobbers "$4", "$5", "$6", __UA_t0, __UA_t1, "$31"
|
||||
#endif /* CONFIG_CPU_MICROMIPS */
|
||||
|
||||
if (eva_kernel_access()) {
|
||||
__asm__ __volatile__(
|
||||
"move\t$4, %1\n\t"
|
||||
|
@ -663,7 +670,7 @@ __clear_user(void __user *addr, __kernel_size_t size)
|
|||
"move\t%0, $6"
|
||||
: "=r" (res)
|
||||
: "r" (addr), "r" (size)
|
||||
: "$4", "$5", "$6", __UA_t0, __UA_t1, "$31");
|
||||
: bzero_clobbers);
|
||||
} else {
|
||||
might_fault();
|
||||
__asm__ __volatile__(
|
||||
|
@ -674,7 +681,7 @@ __clear_user(void __user *addr, __kernel_size_t size)
|
|||
"move\t%0, $6"
|
||||
: "=r" (res)
|
||||
: "r" (addr), "r" (size)
|
||||
: "$4", "$5", "$6", __UA_t0, __UA_t1, "$31");
|
||||
: bzero_clobbers);
|
||||
}
|
||||
|
||||
return res;
|
||||
|
|
|
@ -219,7 +219,7 @@
|
|||
1: PTR_ADDIU a0, 1 /* fill bytewise */
|
||||
R10KCBARRIER(0(ra))
|
||||
bne t1, a0, 1b
|
||||
sb a1, -1(a0)
|
||||
EX(sb, a1, -1(a0), .Lsmall_fixup\@)
|
||||
|
||||
2: jr ra /* done */
|
||||
move a2, zero
|
||||
|
@ -252,13 +252,18 @@
|
|||
PTR_L t0, TI_TASK($28)
|
||||
andi a2, STORMASK
|
||||
LONG_L t0, THREAD_BUADDR(t0)
|
||||
LONG_ADDU a2, t1
|
||||
LONG_ADDU a2, a0
|
||||
jr ra
|
||||
LONG_SUBU a2, t0
|
||||
|
||||
.Llast_fixup\@:
|
||||
jr ra
|
||||
andi v1, a2, STORMASK
|
||||
nop
|
||||
|
||||
.Lsmall_fixup\@:
|
||||
PTR_SUBU a2, t1, a0
|
||||
jr ra
|
||||
PTR_ADDIU a2, 1
|
||||
|
||||
.endm
|
||||
|
||||
|
|
|
@ -123,6 +123,9 @@ INSTALL_TARGETS = zinstall install
|
|||
|
||||
PHONY += bzImage $(BOOT_TARGETS) $(INSTALL_TARGETS)
|
||||
|
||||
# Default kernel to build
|
||||
all: bzImage
|
||||
|
||||
zImage: vmlinuz
|
||||
Image: vmlinux
|
||||
|
||||
|
|
|
@ -23,7 +23,7 @@ obj-$(CONFIG_SMP) += smp.o
|
|||
obj-$(CONFIG_PA11) += pci-dma.o
|
||||
obj-$(CONFIG_PCI) += pci.o
|
||||
obj-$(CONFIG_MODULES) += module.o
|
||||
obj-$(CONFIG_64BIT) += binfmt_elf32.o sys_parisc32.o signal32.o
|
||||
obj-$(CONFIG_64BIT) += sys_parisc32.o signal32.o
|
||||
obj-$(CONFIG_STACKTRACE)+= stacktrace.o
|
||||
obj-$(CONFIG_AUDIT) += audit.o
|
||||
obj64-$(CONFIG_AUDIT) += compat_audit.o
|
||||
|
|
|
@ -448,7 +448,8 @@ static int match_by_id(struct device * dev, void * data)
|
|||
* Checks all the children of @parent for a matching @id. If none
|
||||
* found, it allocates a new device and returns it.
|
||||
*/
|
||||
static struct parisc_device * alloc_tree_node(struct device *parent, char id)
|
||||
static struct parisc_device * __init alloc_tree_node(
|
||||
struct device *parent, char id)
|
||||
{
|
||||
struct match_id_data d = {
|
||||
.id = id,
|
||||
|
@ -825,8 +826,8 @@ static void walk_lower_bus(struct parisc_device *dev)
|
|||
* devices which are not physically connected (such as extra serial &
|
||||
* keyboard ports). This problem is not yet solved.
|
||||
*/
|
||||
static void walk_native_bus(unsigned long io_io_low, unsigned long io_io_high,
|
||||
struct device *parent)
|
||||
static void __init walk_native_bus(unsigned long io_io_low,
|
||||
unsigned long io_io_high, struct device *parent)
|
||||
{
|
||||
int i, devices_found = 0;
|
||||
unsigned long hpa = io_io_low;
|
||||
|
|
|
@ -174,7 +174,7 @@ void pcibios_set_master(struct pci_dev *dev)
|
|||
* pcibios_init_bridge() initializes cache line and default latency
|
||||
* for pci controllers and pci-pci bridges
|
||||
*/
|
||||
void __init pcibios_init_bridge(struct pci_dev *dev)
|
||||
void __ref pcibios_init_bridge(struct pci_dev *dev)
|
||||
{
|
||||
unsigned short bridge_ctl, bridge_ctl_new;
|
||||
|
||||
|
|
|
@ -205,7 +205,7 @@ static int __init rtc_init(void)
|
|||
device_initcall(rtc_init);
|
||||
#endif
|
||||
|
||||
void read_persistent_clock(struct timespec *ts)
|
||||
void read_persistent_clock64(struct timespec64 *ts)
|
||||
{
|
||||
static struct pdc_tod tod_data;
|
||||
if (pdc_tod_read(&tod_data) == 0) {
|
||||
|
|
|
@ -837,6 +837,17 @@ void __init initialize_ivt(const void *iva)
|
|||
if (pdc_instr(&instr) == PDC_OK)
|
||||
ivap[0] = instr;
|
||||
|
||||
/*
|
||||
* Rules for the checksum of the HPMC handler:
|
||||
* 1. The IVA does not point to PDC/PDH space (ie: the OS has installed
|
||||
* its own IVA).
|
||||
* 2. The word at IVA + 32 is nonzero.
|
||||
* 3. If Length (IVA + 60) is not zero, then Length (IVA + 60) and
|
||||
* Address (IVA + 56) are word-aligned.
|
||||
* 4. The checksum of the 8 words starting at IVA + 32 plus the sum of
|
||||
* the Length/4 words starting at Address is zero.
|
||||
*/
|
||||
|
||||
/* Compute Checksum for HPMC handler */
|
||||
length = os_hpmc_size;
|
||||
ivap[7] = length;
|
||||
|
|
|
@ -516,7 +516,7 @@ static void __init map_pages(unsigned long start_vaddr,
|
|||
}
|
||||
}
|
||||
|
||||
void free_initmem(void)
|
||||
void __ref free_initmem(void)
|
||||
{
|
||||
unsigned long init_begin = (unsigned long)__init_begin;
|
||||
unsigned long init_end = (unsigned long)__init_end;
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
extern void powernv_set_nmmu_ptcr(unsigned long ptcr);
|
||||
extern struct npu_context *pnv_npu2_init_context(struct pci_dev *gpdev,
|
||||
unsigned long flags,
|
||||
struct npu_context *(*cb)(struct npu_context *, void *),
|
||||
void (*cb)(struct npu_context *, void *),
|
||||
void *priv);
|
||||
extern void pnv_npu2_destroy_context(struct npu_context *context,
|
||||
struct pci_dev *gpdev);
|
||||
|
|
|
@ -807,7 +807,8 @@ static void eeh_restore_bridge_bars(struct eeh_dev *edev)
|
|||
eeh_ops->write_config(pdn, 15*4, 4, edev->config_space[15]);
|
||||
|
||||
/* PCI Command: 0x4 */
|
||||
eeh_ops->write_config(pdn, PCI_COMMAND, 4, edev->config_space[1]);
|
||||
eeh_ops->write_config(pdn, PCI_COMMAND, 4, edev->config_space[1] |
|
||||
PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER);
|
||||
|
||||
/* Check the PCIe link is ready */
|
||||
eeh_bridge_check_link(edev);
|
||||
|
|
|
@ -553,12 +553,12 @@ ALT_FTR_SECTION_END_IFSET(CPU_FTR_ARCH_300)
|
|||
#ifdef CONFIG_KVM_BOOK3S_HV_POSSIBLE
|
||||
lbz r0,HSTATE_HWTHREAD_STATE(r13)
|
||||
cmpwi r0,KVM_HWTHREAD_IN_KERNEL
|
||||
beq 1f
|
||||
beq 0f
|
||||
li r0,KVM_HWTHREAD_IN_KERNEL
|
||||
stb r0,HSTATE_HWTHREAD_STATE(r13)
|
||||
/* Order setting hwthread_state vs. testing hwthread_req */
|
||||
sync
|
||||
lbz r0,HSTATE_HWTHREAD_REQ(r13)
|
||||
0: lbz r0,HSTATE_HWTHREAD_REQ(r13)
|
||||
cmpwi r0,0
|
||||
beq 1f
|
||||
b kvm_start_guest
|
||||
|
|
|
@ -441,7 +441,6 @@ static int mce_handle_ierror(struct pt_regs *regs,
|
|||
if (pfn != ULONG_MAX) {
|
||||
*phys_addr =
|
||||
(pfn << PAGE_SHIFT);
|
||||
handled = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -532,9 +531,7 @@ static int mce_handle_derror(struct pt_regs *regs,
|
|||
* kernel/exception-64s.h
|
||||
*/
|
||||
if (get_paca()->in_mce < MAX_MCE_DEPTH)
|
||||
if (!mce_find_instr_ea_and_pfn(regs, addr,
|
||||
phys_addr))
|
||||
handled = 1;
|
||||
mce_find_instr_ea_and_pfn(regs, addr, phys_addr);
|
||||
}
|
||||
found = 1;
|
||||
}
|
||||
|
@ -572,7 +569,7 @@ static long mce_handle_error(struct pt_regs *regs,
|
|||
const struct mce_ierror_table itable[])
|
||||
{
|
||||
struct mce_error_info mce_err = { 0 };
|
||||
uint64_t addr, phys_addr;
|
||||
uint64_t addr, phys_addr = ULONG_MAX;
|
||||
uint64_t srr1 = regs->msr;
|
||||
long handled;
|
||||
|
||||
|
|
|
@ -890,6 +890,17 @@ static void __ref init_fallback_flush(void)
|
|||
return;
|
||||
|
||||
l1d_size = ppc64_caches.l1d.size;
|
||||
|
||||
/*
|
||||
* If there is no d-cache-size property in the device tree, l1d_size
|
||||
* could be zero. That leads to the loop in the asm wrapping around to
|
||||
* 2^64-1, and then walking off the end of the fallback area and
|
||||
* eventually causing a page fault which is fatal. Just default to
|
||||
* something vaguely sane.
|
||||
*/
|
||||
if (!l1d_size)
|
||||
l1d_size = (64 * 1024);
|
||||
|
||||
limit = min(ppc64_bolted_size(), ppc64_rma_size);
|
||||
|
||||
/*
|
||||
|
|
|
@ -566,10 +566,35 @@ void crash_send_ipi(void (*crash_ipi_callback)(struct pt_regs *))
|
|||
#endif
|
||||
|
||||
#ifdef CONFIG_NMI_IPI
|
||||
static void stop_this_cpu(struct pt_regs *regs)
|
||||
#else
|
||||
static void nmi_stop_this_cpu(struct pt_regs *regs)
|
||||
{
|
||||
/*
|
||||
* This is a special case because it never returns, so the NMI IPI
|
||||
* handling would never mark it as done, which makes any later
|
||||
* smp_send_nmi_ipi() call spin forever. Mark it done now.
|
||||
*
|
||||
* IRQs are already hard disabled by the smp_handle_nmi_ipi.
|
||||
*/
|
||||
nmi_ipi_lock();
|
||||
nmi_ipi_busy_count--;
|
||||
nmi_ipi_unlock();
|
||||
|
||||
/* Remove this CPU */
|
||||
set_cpu_online(smp_processor_id(), false);
|
||||
|
||||
spin_begin();
|
||||
while (1)
|
||||
spin_cpu_relax();
|
||||
}
|
||||
|
||||
void smp_send_stop(void)
|
||||
{
|
||||
smp_send_nmi_ipi(NMI_IPI_ALL_OTHERS, nmi_stop_this_cpu, 1000000);
|
||||
}
|
||||
|
||||
#else /* CONFIG_NMI_IPI */
|
||||
|
||||
static void stop_this_cpu(void *dummy)
|
||||
#endif
|
||||
{
|
||||
/* Remove this CPU */
|
||||
set_cpu_online(smp_processor_id(), false);
|
||||
|
@ -582,12 +607,22 @@ static void stop_this_cpu(void *dummy)
|
|||
|
||||
void smp_send_stop(void)
|
||||
{
|
||||
#ifdef CONFIG_NMI_IPI
|
||||
smp_send_nmi_ipi(NMI_IPI_ALL_OTHERS, stop_this_cpu, 1000000);
|
||||
#else
|
||||
static bool stopped = false;
|
||||
|
||||
/*
|
||||
* Prevent waiting on csd lock from a previous smp_send_stop.
|
||||
* This is racy, but in general callers try to do the right
|
||||
* thing and only fire off one smp_send_stop (e.g., see
|
||||
* kernel/panic.c)
|
||||
*/
|
||||
if (stopped)
|
||||
return;
|
||||
|
||||
stopped = true;
|
||||
|
||||
smp_call_function(stop_this_cpu, NULL, 0);
|
||||
#endif
|
||||
}
|
||||
#endif /* CONFIG_NMI_IPI */
|
||||
|
||||
struct thread_info *current_set[NR_CPUS];
|
||||
|
||||
|
|
|
@ -305,6 +305,13 @@ void kvmppc_core_queue_fpunavail(struct kvm_vcpu *vcpu)
|
|||
kvmppc_booke_queue_irqprio(vcpu, BOOKE_IRQPRIO_FP_UNAVAIL);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_ALTIVEC
|
||||
void kvmppc_core_queue_vec_unavail(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
kvmppc_booke_queue_irqprio(vcpu, BOOKE_IRQPRIO_ALTIVEC_UNAVAIL);
|
||||
}
|
||||
#endif
|
||||
|
||||
void kvmppc_core_queue_dec(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
kvmppc_booke_queue_irqprio(vcpu, BOOKE_IRQPRIO_DECREMENTER);
|
||||
|
|
|
@ -55,7 +55,7 @@ static int patch_alt_instruction(unsigned int *src, unsigned int *dest,
|
|||
unsigned int *target = (unsigned int *)branch_target(src);
|
||||
|
||||
/* Branch within the section doesn't need translating */
|
||||
if (target < alt_start || target >= alt_end) {
|
||||
if (target < alt_start || target > alt_end) {
|
||||
instr = translate_branch(dest, src);
|
||||
if (!instr)
|
||||
return 1;
|
||||
|
|
|
@ -133,6 +133,7 @@ int __meminit arch_add_memory(int nid, u64 start, u64 size, struct vmem_altmap *
|
|||
start, start + size, rc);
|
||||
return -EFAULT;
|
||||
}
|
||||
flush_inval_dcache_range(start, start + size);
|
||||
|
||||
return __add_pages(nid, start_pfn, nr_pages, altmap, want_memblock);
|
||||
}
|
||||
|
@ -159,6 +160,7 @@ int __meminit arch_remove_memory(u64 start, u64 size, struct vmem_altmap *altmap
|
|||
|
||||
/* Remove htab bolted mappings for this section of memory */
|
||||
start = (unsigned long)__va(start);
|
||||
flush_inval_dcache_range(start, start + size);
|
||||
ret = remove_section_mapping(start, start + size);
|
||||
|
||||
/* Ensure all vmalloc mappings are flushed in case they also
|
||||
|
|
|
@ -1093,7 +1093,7 @@ static int show_spu_loadavg(struct seq_file *s, void *private)
|
|||
LOAD_INT(c), LOAD_FRAC(c),
|
||||
count_active_contexts(),
|
||||
atomic_read(&nr_spu_contexts),
|
||||
idr_get_cursor(&task_active_pid_ns(current)->idr));
|
||||
idr_get_cursor(&task_active_pid_ns(current)->idr) - 1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -82,19 +82,6 @@ static const struct file_operations memtrace_fops = {
|
|||
.open = simple_open,
|
||||
};
|
||||
|
||||
static void flush_memory_region(u64 base, u64 size)
|
||||
{
|
||||
unsigned long line_size = ppc64_caches.l1d.size;
|
||||
u64 end = base + size;
|
||||
u64 addr;
|
||||
|
||||
base = round_down(base, line_size);
|
||||
end = round_up(end, line_size);
|
||||
|
||||
for (addr = base; addr < end; addr += line_size)
|
||||
asm volatile("dcbf 0,%0" : "=r" (addr) :: "memory");
|
||||
}
|
||||
|
||||
static int check_memblock_online(struct memory_block *mem, void *arg)
|
||||
{
|
||||
if (mem->state != MEM_ONLINE)
|
||||
|
@ -132,10 +119,6 @@ static bool memtrace_offline_pages(u32 nid, u64 start_pfn, u64 nr_pages)
|
|||
walk_memory_range(start_pfn, end_pfn, (void *)MEM_OFFLINE,
|
||||
change_memblock_state);
|
||||
|
||||
/* RCU grace period? */
|
||||
flush_memory_region((u64)__va(start_pfn << PAGE_SHIFT),
|
||||
nr_pages << PAGE_SHIFT);
|
||||
|
||||
lock_device_hotplug();
|
||||
remove_memory(nid, start_pfn << PAGE_SHIFT, nr_pages << PAGE_SHIFT);
|
||||
unlock_device_hotplug();
|
||||
|
|
|
@ -33,6 +33,19 @@
|
|||
|
||||
#define npu_to_phb(x) container_of(x, struct pnv_phb, npu)
|
||||
|
||||
/*
|
||||
* spinlock to protect initialisation of an npu_context for a particular
|
||||
* mm_struct.
|
||||
*/
|
||||
static DEFINE_SPINLOCK(npu_context_lock);
|
||||
|
||||
/*
|
||||
* When an address shootdown range exceeds this threshold we invalidate the
|
||||
* entire TLB on the GPU for the given PID rather than each specific address in
|
||||
* the range.
|
||||
*/
|
||||
#define ATSD_THRESHOLD (2*1024*1024)
|
||||
|
||||
/*
|
||||
* Other types of TCE cache invalidation are not functional in the
|
||||
* hardware.
|
||||
|
@ -401,7 +414,7 @@ struct npu_context {
|
|||
bool nmmu_flush;
|
||||
|
||||
/* Callback to stop translation requests on a given GPU */
|
||||
struct npu_context *(*release_cb)(struct npu_context *, void *);
|
||||
void (*release_cb)(struct npu_context *context, void *priv);
|
||||
|
||||
/*
|
||||
* Private pointer passed to the above callback for usage by
|
||||
|
@ -671,11 +684,19 @@ static void pnv_npu2_mn_invalidate_range(struct mmu_notifier *mn,
|
|||
struct npu_context *npu_context = mn_to_npu_context(mn);
|
||||
unsigned long address;
|
||||
|
||||
for (address = start; address < end; address += PAGE_SIZE)
|
||||
mmio_invalidate(npu_context, 1, address, false);
|
||||
if (end - start > ATSD_THRESHOLD) {
|
||||
/*
|
||||
* Just invalidate the entire PID if the address range is too
|
||||
* large.
|
||||
*/
|
||||
mmio_invalidate(npu_context, 0, 0, true);
|
||||
} else {
|
||||
for (address = start; address < end; address += PAGE_SIZE)
|
||||
mmio_invalidate(npu_context, 1, address, false);
|
||||
|
||||
/* Do the flush only on the final addess == end */
|
||||
mmio_invalidate(npu_context, 1, address, true);
|
||||
/* Do the flush only on the final addess == end */
|
||||
mmio_invalidate(npu_context, 1, address, true);
|
||||
}
|
||||
}
|
||||
|
||||
static const struct mmu_notifier_ops nv_nmmu_notifier_ops = {
|
||||
|
@ -696,11 +717,12 @@ static const struct mmu_notifier_ops nv_nmmu_notifier_ops = {
|
|||
* Returns an error if there no contexts are currently available or a
|
||||
* npu_context which should be passed to pnv_npu2_handle_fault().
|
||||
*
|
||||
* mmap_sem must be held in write mode.
|
||||
* mmap_sem must be held in write mode and must not be called from interrupt
|
||||
* context.
|
||||
*/
|
||||
struct npu_context *pnv_npu2_init_context(struct pci_dev *gpdev,
|
||||
unsigned long flags,
|
||||
struct npu_context *(*cb)(struct npu_context *, void *),
|
||||
void (*cb)(struct npu_context *, void *),
|
||||
void *priv)
|
||||
{
|
||||
int rc;
|
||||
|
@ -743,7 +765,9 @@ struct npu_context *pnv_npu2_init_context(struct pci_dev *gpdev,
|
|||
/*
|
||||
* Setup the NPU context table for a particular GPU. These need to be
|
||||
* per-GPU as we need the tables to filter ATSDs when there are no
|
||||
* active contexts on a particular GPU.
|
||||
* active contexts on a particular GPU. It is safe for these to be
|
||||
* called concurrently with destroy as the OPAL call takes appropriate
|
||||
* locks and refcounts on init/destroy.
|
||||
*/
|
||||
rc = opal_npu_init_context(nphb->opal_id, mm->context.id, flags,
|
||||
PCI_DEVID(gpdev->bus->number, gpdev->devfn));
|
||||
|
@ -754,8 +778,29 @@ struct npu_context *pnv_npu2_init_context(struct pci_dev *gpdev,
|
|||
* We store the npu pci device so we can more easily get at the
|
||||
* associated npus.
|
||||
*/
|
||||
spin_lock(&npu_context_lock);
|
||||
npu_context = mm->context.npu_context;
|
||||
if (npu_context) {
|
||||
if (npu_context->release_cb != cb ||
|
||||
npu_context->priv != priv) {
|
||||
spin_unlock(&npu_context_lock);
|
||||
opal_npu_destroy_context(nphb->opal_id, mm->context.id,
|
||||
PCI_DEVID(gpdev->bus->number,
|
||||
gpdev->devfn));
|
||||
return ERR_PTR(-EINVAL);
|
||||
}
|
||||
|
||||
WARN_ON(!kref_get_unless_zero(&npu_context->kref));
|
||||
}
|
||||
spin_unlock(&npu_context_lock);
|
||||
|
||||
if (!npu_context) {
|
||||
/*
|
||||
* We can set up these fields without holding the
|
||||
* npu_context_lock as the npu_context hasn't been returned to
|
||||
* the caller meaning it can't be destroyed. Parallel allocation
|
||||
* is protected against by mmap_sem.
|
||||
*/
|
||||
rc = -ENOMEM;
|
||||
npu_context = kzalloc(sizeof(struct npu_context), GFP_KERNEL);
|
||||
if (npu_context) {
|
||||
|
@ -774,8 +819,6 @@ struct npu_context *pnv_npu2_init_context(struct pci_dev *gpdev,
|
|||
}
|
||||
|
||||
mm->context.npu_context = npu_context;
|
||||
} else {
|
||||
WARN_ON(!kref_get_unless_zero(&npu_context->kref));
|
||||
}
|
||||
|
||||
npu_context->release_cb = cb;
|
||||
|
@ -814,15 +857,16 @@ static void pnv_npu2_release_context(struct kref *kref)
|
|||
mm_context_remove_copro(npu_context->mm);
|
||||
|
||||
npu_context->mm->context.npu_context = NULL;
|
||||
mmu_notifier_unregister(&npu_context->mn,
|
||||
npu_context->mm);
|
||||
|
||||
kfree(npu_context);
|
||||
}
|
||||
|
||||
/*
|
||||
* Destroy a context on the given GPU. May free the npu_context if it is no
|
||||
* longer active on any GPUs. Must not be called from interrupt context.
|
||||
*/
|
||||
void pnv_npu2_destroy_context(struct npu_context *npu_context,
|
||||
struct pci_dev *gpdev)
|
||||
{
|
||||
int removed;
|
||||
struct pnv_phb *nphb;
|
||||
struct npu *npu;
|
||||
struct pci_dev *npdev = pnv_pci_get_npu_dev(gpdev, 0);
|
||||
|
@ -844,7 +888,21 @@ void pnv_npu2_destroy_context(struct npu_context *npu_context,
|
|||
WRITE_ONCE(npu_context->npdev[npu->index][nvlink_index], NULL);
|
||||
opal_npu_destroy_context(nphb->opal_id, npu_context->mm->context.id,
|
||||
PCI_DEVID(gpdev->bus->number, gpdev->devfn));
|
||||
kref_put(&npu_context->kref, pnv_npu2_release_context);
|
||||
spin_lock(&npu_context_lock);
|
||||
removed = kref_put(&npu_context->kref, pnv_npu2_release_context);
|
||||
spin_unlock(&npu_context_lock);
|
||||
|
||||
/*
|
||||
* We need to do this outside of pnv_npu2_release_context so that it is
|
||||
* outside the spinlock as mmu_notifier_destroy uses SRCU.
|
||||
*/
|
||||
if (removed) {
|
||||
mmu_notifier_unregister(&npu_context->mn,
|
||||
npu_context->mm);
|
||||
|
||||
kfree(npu_context);
|
||||
}
|
||||
|
||||
}
|
||||
EXPORT_SYMBOL(pnv_npu2_destroy_context);
|
||||
|
||||
|
|
|
@ -48,10 +48,12 @@ unsigned long __init opal_get_boot_time(void)
|
|||
|
||||
while (rc == OPAL_BUSY || rc == OPAL_BUSY_EVENT) {
|
||||
rc = opal_rtc_read(&__y_m_d, &__h_m_s_ms);
|
||||
if (rc == OPAL_BUSY_EVENT)
|
||||
if (rc == OPAL_BUSY_EVENT) {
|
||||
mdelay(OPAL_BUSY_DELAY_MS);
|
||||
opal_poll_events(NULL);
|
||||
else if (rc == OPAL_BUSY)
|
||||
mdelay(10);
|
||||
} else if (rc == OPAL_BUSY) {
|
||||
mdelay(OPAL_BUSY_DELAY_MS);
|
||||
}
|
||||
}
|
||||
if (rc != OPAL_SUCCESS)
|
||||
return 0;
|
||||
|
|
|
@ -389,6 +389,10 @@ static void xive_native_setup_cpu(unsigned int cpu, struct xive_cpu *xc)
|
|||
if (xive_pool_vps == XIVE_INVALID_VP)
|
||||
return;
|
||||
|
||||
/* Check if pool VP already active, if it is, pull it */
|
||||
if (in_be32(xive_tima + TM_QW2_HV_POOL + TM_WORD2) & TM_QW2W2_VP)
|
||||
in_be64(xive_tima + TM_SPC_PULL_POOL_CTX);
|
||||
|
||||
/* Enable the pool VP */
|
||||
vp = xive_pool_vps + cpu;
|
||||
pr_debug("CPU %d setting up pool VP 0x%x\n", cpu, vp);
|
||||
|
|
|
@ -11,6 +11,7 @@ config RISCV
|
|||
select ARCH_WANT_FRAME_POINTERS
|
||||
select CLONE_BACKWARDS
|
||||
select COMMON_CLK
|
||||
select DMA_DIRECT_OPS
|
||||
select GENERIC_CLOCKEVENTS
|
||||
select GENERIC_CPU_DEVICES
|
||||
select GENERIC_IRQ_SHOW
|
||||
|
@ -89,9 +90,6 @@ config PGTABLE_LEVELS
|
|||
config HAVE_KPROBES
|
||||
def_bool n
|
||||
|
||||
config DMA_DIRECT_OPS
|
||||
def_bool y
|
||||
|
||||
menu "Platform type"
|
||||
|
||||
choice
|
||||
|
|
|
@ -15,7 +15,6 @@ generic-y += fcntl.h
|
|||
generic-y += futex.h
|
||||
generic-y += hardirq.h
|
||||
generic-y += hash.h
|
||||
generic-y += handle_irq.h
|
||||
generic-y += hw_irq.h
|
||||
generic-y += ioctl.h
|
||||
generic-y += ioctls.h
|
||||
|
|
|
@ -52,7 +52,7 @@ $(obj)/%.so: $(obj)/%.so.dbg FORCE
|
|||
# Add -lgcc so rv32 gets static muldi3 and lshrdi3 definitions.
|
||||
# Make sure only to export the intended __vdso_xxx symbol offsets.
|
||||
quiet_cmd_vdsold = VDSOLD $@
|
||||
cmd_vdsold = $(CC) $(KCFLAGS) -nostdlib $(SYSCFLAGS_$(@F)) \
|
||||
cmd_vdsold = $(CC) $(KCFLAGS) $(call cc-option, -no-pie) -nostdlib $(SYSCFLAGS_$(@F)) \
|
||||
-Wl,-T,$(filter-out FORCE,$^) -o $@.tmp -lgcc && \
|
||||
$(CROSS_COMPILE)objcopy \
|
||||
$(patsubst %, -G __vdso_%, $(vdso-syms)) $@.tmp $@
|
||||
|
|
|
@ -8,3 +8,4 @@ obj-$(CONFIG_APPLDATA_BASE) += appldata/
|
|||
obj-y += net/
|
||||
obj-$(CONFIG_PCI) += pci/
|
||||
obj-$(CONFIG_NUMA) += numa/
|
||||
obj-$(CONFIG_ARCH_HAS_KEXEC_PURGATORY) += purgatory/
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue