mirror of
https://github.com/torvalds/linux.git
synced 2026-05-12 16:18:45 +02:00
spi: controller registration fixes
Johan Hovold <johan@kernel.org> says: This series fixes a few issues related to controller registration found through inspection.
This commit is contained in:
commit
29a80e6c3a
6
.mailmap
6
.mailmap
|
|
@ -219,6 +219,7 @@ Daniele Alessandrelli <daniele.alessandrelli@gmail.com> <daniele.alessandrelli@i
|
|||
Danilo Krummrich <dakr@kernel.org> <dakr@redhat.com>
|
||||
David Brownell <david-b@pacbell.net>
|
||||
David Collins <quic_collinsd@quicinc.com> <collinsd@codeaurora.org>
|
||||
David Gow <david@davidgow.net> <davidgow@google.com>
|
||||
David Heidelberg <david@ixit.cz> <d.okias@gmail.com>
|
||||
David Hildenbrand <david@kernel.org> <david@redhat.com>
|
||||
David Rheinsberg <david@readahead.eu> <dh.herrmann@gmail.com>
|
||||
|
|
@ -353,6 +354,7 @@ Jarkko Sakkinen <jarkko@kernel.org> <jarkko.sakkinen@opinsys.com>
|
|||
Jason Gunthorpe <jgg@ziepe.ca> <jgg@mellanox.com>
|
||||
Jason Gunthorpe <jgg@ziepe.ca> <jgg@nvidia.com>
|
||||
Jason Gunthorpe <jgg@ziepe.ca> <jgunthorpe@obsidianresearch.com>
|
||||
Jason Xing <kerneljasonxing@gmail.com> <kernelxing@tencent.com>
|
||||
<javier@osg.samsung.com> <javier.martinez@collabora.co.uk>
|
||||
Javi Merino <javi.merino@kernel.org> <javi.merino@arm.com>
|
||||
Jayachandran C <c.jayachandran@gmail.com> <jayachandranc@netlogicmicro.com>
|
||||
|
|
@ -401,6 +403,7 @@ Jiri Slaby <jirislaby@kernel.org> <xslaby@fi.muni.cz>
|
|||
Jisheng Zhang <jszhang@kernel.org> <jszhang@marvell.com>
|
||||
Jisheng Zhang <jszhang@kernel.org> <Jisheng.Zhang@synaptics.com>
|
||||
Jishnu Prakash <quic_jprakash@quicinc.com> <jprakash@codeaurora.org>
|
||||
Joe Damato <joe@dama.to> <jdamato@fastly.com>
|
||||
Joel Granados <joel.granados@kernel.org> <j.granados@samsung.com>
|
||||
Johan Hovold <johan@kernel.org> <jhovold@gmail.com>
|
||||
Johan Hovold <johan@kernel.org> <johan@hovoldconsulting.com>
|
||||
|
|
@ -495,7 +498,8 @@ Lior David <quic_liord@quicinc.com> <liord@codeaurora.org>
|
|||
Loic Poulain <loic.poulain@oss.qualcomm.com> <loic.poulain@linaro.org>
|
||||
Loic Poulain <loic.poulain@oss.qualcomm.com> <loic.poulain@intel.com>
|
||||
Lorenzo Pieralisi <lpieralisi@kernel.org> <lorenzo.pieralisi@arm.com>
|
||||
Lorenzo Stoakes <lorenzo.stoakes@oracle.com> <lstoakes@gmail.com>
|
||||
Lorenzo Stoakes <ljs@kernel.org> <lstoakes@gmail.com>
|
||||
Lorenzo Stoakes <ljs@kernel.org> <lorenzo.stoakes@oracle.com>
|
||||
Luca Ceresoli <luca.ceresoli@bootlin.com> <luca@lucaceresoli.net>
|
||||
Luca Weiss <luca@lucaweiss.eu> <luca@z3ntu.xyz>
|
||||
Lucas De Marchi <demarchi@kernel.org> <lucas.demarchi@intel.com>
|
||||
|
|
|
|||
8
CREDITS
8
CREDITS
|
|
@ -1242,6 +1242,10 @@ N: Veaceslav Falico
|
|||
E: vfalico@gmail.com
|
||||
D: Co-maintainer and co-author of the network bonding driver.
|
||||
|
||||
N: Thomas Falcon
|
||||
E: tlfalcon@linux.ibm.com
|
||||
D: Initial author of the IBM ibmvnic network driver
|
||||
|
||||
N: János Farkas
|
||||
E: chexum@shadow.banki.hu
|
||||
D: romfs, various (mostly networking) fixes
|
||||
|
|
@ -2415,6 +2419,10 @@ S: Am Muehlenweg 38
|
|||
S: D53424 Remagen
|
||||
S: Germany
|
||||
|
||||
N: Jonathan Lemon
|
||||
E: jonathan.lemon@gmail.com
|
||||
D: OpenCompute PTP clock driver (ptp_ocp)
|
||||
|
||||
N: Colin Leroy
|
||||
E: colin@colino.net
|
||||
W: http://www.geekounet.org/
|
||||
|
|
|
|||
|
|
@ -151,11 +151,11 @@ Description:
|
|||
The algorithm_params file is write-only and is used to setup
|
||||
compression algorithm parameters.
|
||||
|
||||
What: /sys/block/zram<id>/writeback_compressed
|
||||
What: /sys/block/zram<id>/compressed_writeback
|
||||
Date: Decemeber 2025
|
||||
Contact: Richard Chang <richardycc@google.com>
|
||||
Description:
|
||||
The writeback_compressed device atrribute toggles compressed
|
||||
The compressed_writeback device atrribute toggles compressed
|
||||
writeback feature.
|
||||
|
||||
What: /sys/block/zram<id>/writeback_batch_size
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
What: /sys/bus/platform/devices/INOU0000:XX/fn_lock_toggle_enable
|
||||
What: /sys/bus/platform/devices/INOU0000:XX/fn_lock
|
||||
Date: November 2025
|
||||
KernelVersion: 6.19
|
||||
Contact: Armin Wolf <W_Armin@gmx.de>
|
||||
|
|
@ -8,15 +8,15 @@ Description:
|
|||
|
||||
Reading this file returns the current enable status of the FN lock functionality.
|
||||
|
||||
What: /sys/bus/platform/devices/INOU0000:XX/super_key_toggle_enable
|
||||
What: /sys/bus/platform/devices/INOU0000:XX/super_key_enable
|
||||
Date: November 2025
|
||||
KernelVersion: 6.19
|
||||
Contact: Armin Wolf <W_Armin@gmx.de>
|
||||
Description:
|
||||
Allows userspace applications to enable/disable the super key functionality
|
||||
of the integrated keyboard by writing "1"/"0" into this file.
|
||||
Allows userspace applications to enable/disable the super key of the integrated
|
||||
keyboard by writing "1"/"0" into this file.
|
||||
|
||||
Reading this file returns the current enable status of the super key functionality.
|
||||
Reading this file returns the current enable status of the super key.
|
||||
|
||||
What: /sys/bus/platform/devices/INOU0000:XX/touchpad_toggle_enable
|
||||
Date: November 2025
|
||||
|
|
|
|||
|
|
@ -216,7 +216,7 @@ writeback_limit WO specifies the maximum amount of write IO zram
|
|||
writeback_limit_enable RW show and set writeback_limit feature
|
||||
writeback_batch_size RW show and set maximum number of in-flight
|
||||
writeback operations
|
||||
writeback_compressed RW show and set compressed writeback feature
|
||||
compressed_writeback RW show and set compressed writeback feature
|
||||
comp_algorithm RW show and change the compression algorithm
|
||||
algorithm_params WO setup compression algorithm parameters
|
||||
compact WO trigger memory compaction
|
||||
|
|
@ -439,11 +439,11 @@ budget in next setting is user's job.
|
|||
By default zram stores written back pages in decompressed (raw) form, which
|
||||
means that writeback operation involves decompression of the page before
|
||||
writing it to the backing device. This behavior can be changed by enabling
|
||||
`writeback_compressed` feature, which causes zram to write compressed pages
|
||||
`compressed_writeback` feature, which causes zram to write compressed pages
|
||||
to the backing device, thus avoiding decompression overhead. To enable
|
||||
this feature, execute::
|
||||
|
||||
$ echo yes > /sys/block/zramX/writeback_compressed
|
||||
$ echo yes > /sys/block/zramX/compressed_writeback
|
||||
|
||||
Note that this feature should be configured before the `zramX` device is
|
||||
initialized.
|
||||
|
|
|
|||
|
|
@ -74,6 +74,7 @@
|
|||
TPM TPM drivers are enabled.
|
||||
UMS USB Mass Storage support is enabled.
|
||||
USB USB support is enabled.
|
||||
NVME NVMe support is enabled
|
||||
USBHID USB Human Interface Device support is enabled.
|
||||
V4L Video For Linux support is enabled.
|
||||
VGA The VGA console has been enabled.
|
||||
|
|
@ -4787,6 +4788,18 @@ Kernel parameters
|
|||
This can be set from sysctl after boot.
|
||||
See Documentation/admin-guide/sysctl/vm.rst for details.
|
||||
|
||||
nvme.quirks= [NVME] A list of quirk entries to augment the built-in
|
||||
nvme quirk list. List entries are separated by a
|
||||
'-' character.
|
||||
Each entry has the form VendorID:ProductID:quirk_names.
|
||||
The IDs are 4-digits hex numbers and quirk_names is a
|
||||
list of quirk names separated by commas. A quirk name
|
||||
can be prefixed by '^', meaning that the specified
|
||||
quirk must be disabled.
|
||||
|
||||
Example:
|
||||
nvme.quirks=7710:2267:bogus_nid,^identify_cns-9900:7711:broken_msi
|
||||
|
||||
ohci1394_dma=early [HW,EARLY] enable debugging via the ohci1394 driver.
|
||||
See Documentation/core-api/debugging-via-ohci1394.rst for more
|
||||
info.
|
||||
|
|
@ -8183,6 +8196,9 @@ Kernel parameters
|
|||
p = USB_QUIRK_SHORT_SET_ADDRESS_REQ_TIMEOUT
|
||||
(Reduce timeout of the SET_ADDRESS
|
||||
request from 5000 ms to 500 ms);
|
||||
q = USB_QUIRK_FORCE_ONE_CONFIG (Device
|
||||
claims zero configurations,
|
||||
forcing to 1);
|
||||
Example: quirks=0781:5580:bk,0a5c:5834:gij
|
||||
|
||||
usbhid.mousepoll=
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ Keyboard settings
|
|||
|
||||
The ``uniwill-laptop`` driver allows the user to enable/disable:
|
||||
|
||||
- the FN and super key lock functionality of the integrated keyboard
|
||||
- the FN lock and super key of the integrated keyboard
|
||||
- the touchpad toggle functionality of the integrated touchpad
|
||||
|
||||
See Documentation/ABI/testing/sysfs-driver-uniwill-laptop for details.
|
||||
|
|
|
|||
|
|
@ -253,7 +253,6 @@ allOf:
|
|||
enum:
|
||||
# these platforms support 2 streams MST on some interfaces,
|
||||
# others are SST only
|
||||
- qcom,glymur-dp
|
||||
- qcom,sc8280xp-dp
|
||||
- qcom,x1e80100-dp
|
||||
then:
|
||||
|
|
@ -310,6 +309,26 @@ allOf:
|
|||
minItems: 6
|
||||
maxItems: 8
|
||||
|
||||
- if:
|
||||
properties:
|
||||
compatible:
|
||||
contains:
|
||||
enum:
|
||||
# these platforms support 2 streams MST on some interfaces,
|
||||
# others are SST only, but all controllers have 4 ports
|
||||
- qcom,glymur-dp
|
||||
then:
|
||||
properties:
|
||||
reg:
|
||||
minItems: 9
|
||||
maxItems: 9
|
||||
clocks:
|
||||
minItems: 5
|
||||
maxItems: 6
|
||||
clocks-names:
|
||||
minItems: 5
|
||||
maxItems: 6
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
examples:
|
||||
|
|
|
|||
|
|
@ -176,13 +176,17 @@ examples:
|
|||
};
|
||||
};
|
||||
|
||||
displayport-controller@ae90000 {
|
||||
displayport-controller@af54000 {
|
||||
compatible = "qcom,glymur-dp";
|
||||
reg = <0xae90000 0x200>,
|
||||
<0xae90200 0x200>,
|
||||
<0xae90400 0x600>,
|
||||
<0xae91000 0x400>,
|
||||
<0xae91400 0x400>;
|
||||
reg = <0xaf54000 0x200>,
|
||||
<0xaf54200 0x200>,
|
||||
<0xaf55000 0xc00>,
|
||||
<0xaf56000 0x400>,
|
||||
<0xaf57000 0x400>,
|
||||
<0xaf58000 0x400>,
|
||||
<0xaf59000 0x400>,
|
||||
<0xaf5a000 0x600>,
|
||||
<0xaf5b000 0x600>;
|
||||
|
||||
interrupt-parent = <&mdss>;
|
||||
interrupts = <12>;
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ maintainers:
|
|||
- Krzysztof Kozlowski <krzk@kernel.org>
|
||||
|
||||
description:
|
||||
SM8650 MSM Mobile Display Subsystem(MDSS), which encapsulates sub-blocks like
|
||||
SM8750 MSM Mobile Display Subsystem(MDSS), which encapsulates sub-blocks like
|
||||
DPU display controller, DSI and DP interfaces etc.
|
||||
|
||||
$ref: /schemas/display/msm/mdss-common.yaml#
|
||||
|
|
|
|||
|
|
@ -16,7 +16,6 @@ description: |
|
|||
properties:
|
||||
compatible:
|
||||
enum:
|
||||
- kontron,sa67mcu-hwmon
|
||||
- kontron,sl28cpld-fan
|
||||
|
||||
reg:
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ $schema: http://devicetree.org/meta-schemas/core.yaml#
|
|||
title: Synopsys DesignWare APB I2C Controller
|
||||
|
||||
maintainers:
|
||||
- Jarkko Nikula <jarkko.nikula@linux.intel.com>
|
||||
- Mika Westerberg <mika.westerberg@linux.intel.com>
|
||||
|
||||
allOf:
|
||||
- $ref: /schemas/i2c/i2c-controller.yaml#
|
||||
|
|
|
|||
|
|
@ -87,6 +87,7 @@ required:
|
|||
|
||||
allOf:
|
||||
- $ref: can-controller.yaml#
|
||||
- $ref: /schemas/memory-controllers/mc-peripheral-props.yaml
|
||||
- if:
|
||||
properties:
|
||||
compatible:
|
||||
|
|
|
|||
|
|
@ -0,0 +1,93 @@
|
|||
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/powerpc/fsl/fsl,mpc83xx.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Freescale PowerQUICC II Pro (MPC83xx) platforms
|
||||
|
||||
maintainers:
|
||||
- J. Neuschäfer <j.ne@posteo.net>
|
||||
|
||||
properties:
|
||||
$nodename:
|
||||
const: '/'
|
||||
compatible:
|
||||
oneOf:
|
||||
- description: MPC83xx Reference Design Boards
|
||||
items:
|
||||
- enum:
|
||||
- fsl,mpc8308rdb
|
||||
- fsl,mpc8315erdb
|
||||
- fsl,mpc8360rdk
|
||||
- fsl,mpc8377rdb
|
||||
- fsl,mpc8377wlan
|
||||
- fsl,mpc8378rdb
|
||||
- fsl,mpc8379rdb
|
||||
|
||||
- description: MPC8313E Reference Design Board
|
||||
items:
|
||||
- const: MPC8313ERDB
|
||||
- const: MPC831xRDB
|
||||
- const: MPC83xxRDB
|
||||
|
||||
- description: MPC8323E Reference Design Board
|
||||
items:
|
||||
- const: MPC8323ERDB
|
||||
- const: MPC832xRDB
|
||||
- const: MPC83xxRDB
|
||||
|
||||
- description: MPC8349E-mITX(-GP) Reference Design Platform
|
||||
items:
|
||||
- enum:
|
||||
- MPC8349EMITX
|
||||
- MPC8349EMITXGP
|
||||
- const: MPC834xMITX
|
||||
- const: MPC83xxMITX
|
||||
|
||||
- description: Keymile KMETER1 board
|
||||
const: keymile,KMETER1
|
||||
|
||||
- description: MPC8308 P1M board
|
||||
const: denx,mpc8308_p1m
|
||||
|
||||
patternProperties:
|
||||
"^soc@.*$":
|
||||
type: object
|
||||
properties:
|
||||
compatible:
|
||||
oneOf:
|
||||
- items:
|
||||
- enum:
|
||||
- fsl,mpc8315-immr
|
||||
- fsl,mpc8308-immr
|
||||
- const: simple-bus
|
||||
- items:
|
||||
- const: fsl,mpc8360-immr
|
||||
- const: fsl,immr
|
||||
- const: fsl,soc
|
||||
- const: simple-bus
|
||||
- const: simple-bus
|
||||
|
||||
additionalProperties: true
|
||||
|
||||
examples:
|
||||
- |
|
||||
/ {
|
||||
compatible = "fsl,mpc8315erdb";
|
||||
model = "MPC8315E-RDB";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
soc@e0000000 {
|
||||
compatible = "fsl,mpc8315-immr", "simple-bus";
|
||||
reg = <0xe0000000 0x00000200>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
device_type = "soc";
|
||||
ranges = <0 0xe0000000 0x00100000>;
|
||||
bus-frequency = <0>;
|
||||
};
|
||||
};
|
||||
|
||||
...
|
||||
|
|
@ -23,6 +23,7 @@ properties:
|
|||
enum:
|
||||
- nvidia,tegra210-audio-graph-card
|
||||
- nvidia,tegra186-audio-graph-card
|
||||
- nvidia,tegra238-audio-graph-card
|
||||
- nvidia,tegra264-audio-graph-card
|
||||
|
||||
clocks:
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ properties:
|
|||
- renesas,r9a07g044-ssi # RZ/G2{L,LC}
|
||||
- renesas,r9a07g054-ssi # RZ/V2L
|
||||
- renesas,r9a08g045-ssi # RZ/G3S
|
||||
- renesas,r9a08g046-ssi # RZ/G3L
|
||||
- const: renesas,rz-ssi
|
||||
|
||||
reg:
|
||||
|
|
|
|||
|
|
@ -6,9 +6,6 @@ $schema: http://devicetree.org/meta-schemas/core.yaml#
|
|||
|
||||
title: Allwinner A31 SPI Controller
|
||||
|
||||
allOf:
|
||||
- $ref: spi-controller.yaml
|
||||
|
||||
maintainers:
|
||||
- Chen-Yu Tsai <wens@csie.org>
|
||||
- Maxime Ripard <mripard@kernel.org>
|
||||
|
|
@ -82,11 +79,11 @@ patternProperties:
|
|||
|
||||
spi-rx-bus-width:
|
||||
items:
|
||||
- const: 1
|
||||
enum: [0, 1, 2, 4]
|
||||
|
||||
spi-tx-bus-width:
|
||||
items:
|
||||
- const: 1
|
||||
enum: [0, 1, 2, 4]
|
||||
|
||||
required:
|
||||
- compatible
|
||||
|
|
@ -95,6 +92,28 @@ required:
|
|||
- clocks
|
||||
- clock-names
|
||||
|
||||
allOf:
|
||||
- $ref: spi-controller.yaml
|
||||
- if:
|
||||
not:
|
||||
properties:
|
||||
compatible:
|
||||
contains:
|
||||
enum:
|
||||
- allwinner,sun50i-r329-spi
|
||||
- allwinner,sun55i-a523-spi
|
||||
then:
|
||||
patternProperties:
|
||||
"^.*@[0-9a-f]+":
|
||||
properties:
|
||||
spi-rx-bus-width:
|
||||
items:
|
||||
enum: [0, 1]
|
||||
|
||||
spi-tx-bus-width:
|
||||
items:
|
||||
enum: [0, 1]
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
examples:
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@ Supported chips:
|
|||
- https://ww1.microchip.com/downloads/en/DeviceDoc/EMC1438%20DS%20Rev.%201.0%20(04-29-10).pdf
|
||||
|
||||
Author:
|
||||
Kalhan Trisal <kalhan.trisal@intel.com
|
||||
Kalhan Trisal <kalhan.trisal@intel.com>
|
||||
|
||||
|
||||
Description
|
||||
|
|
|
|||
|
|
@ -220,7 +220,6 @@ Hardware Monitoring Kernel Drivers
|
|||
q54sj108a2
|
||||
qnap-mcu-hwmon
|
||||
raspberrypi-hwmon
|
||||
sa67
|
||||
sbrmi
|
||||
sbtsi_temp
|
||||
sch5627
|
||||
|
|
|
|||
|
|
@ -1,41 +0,0 @@
|
|||
.. SPDX-License-Identifier: GPL-2.0-only
|
||||
|
||||
Kernel driver sa67mcu
|
||||
=====================
|
||||
|
||||
Supported chips:
|
||||
|
||||
* Kontron sa67mcu
|
||||
|
||||
Prefix: 'sa67mcu'
|
||||
|
||||
Datasheet: not available
|
||||
|
||||
Authors: Michael Walle <mwalle@kernel.org>
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
The sa67mcu is a board management controller which also exposes a hardware
|
||||
monitoring controller.
|
||||
|
||||
The controller has two voltage and one temperature sensor. The values are
|
||||
hold in two 8 bit registers to form one 16 bit value. Reading the lower byte
|
||||
will also capture the high byte to make the access atomic. The unit of the
|
||||
volatge sensors are 1mV and the unit of the temperature sensor is 0.1degC.
|
||||
|
||||
Sysfs entries
|
||||
-------------
|
||||
|
||||
The following attributes are supported.
|
||||
|
||||
======================= ========================================================
|
||||
in0_label "VDDIN"
|
||||
in0_input Measured VDDIN voltage.
|
||||
|
||||
in1_label "VDD_RTC"
|
||||
in1_input Measured VDD_RTC voltage.
|
||||
|
||||
temp1_input MCU temperature. Roughly the board temperature.
|
||||
======================= ========================================================
|
||||
|
||||
|
|
@ -152,7 +152,7 @@ operations:
|
|||
- compound-ops
|
||||
-
|
||||
name: threads-set
|
||||
doc: set the number of running threads
|
||||
doc: set the maximum number of running threads
|
||||
attribute-set: server
|
||||
flags: [admin-perm]
|
||||
do:
|
||||
|
|
@ -165,7 +165,7 @@ operations:
|
|||
- min-threads
|
||||
-
|
||||
name: threads-get
|
||||
doc: get the number of running threads
|
||||
doc: get the maximum number of running threads
|
||||
attribute-set: server
|
||||
do:
|
||||
reply:
|
||||
|
|
|
|||
|
|
@ -43,7 +43,6 @@ options should be enabled to use sched_ext:
|
|||
CONFIG_DEBUG_INFO_BTF=y
|
||||
CONFIG_BPF_JIT_ALWAYS_ON=y
|
||||
CONFIG_BPF_JIT_DEFAULT_ON=y
|
||||
CONFIG_PAHOLE_HAS_BTF_TAG=y
|
||||
|
||||
sched_ext is used only when the BPF scheduler is loaded and running.
|
||||
|
||||
|
|
@ -58,7 +57,8 @@ in ``ops->flags``, all ``SCHED_NORMAL``, ``SCHED_BATCH``, ``SCHED_IDLE``, and
|
|||
However, when the BPF scheduler is loaded and ``SCX_OPS_SWITCH_PARTIAL`` is
|
||||
set in ``ops->flags``, only tasks with the ``SCHED_EXT`` policy are scheduled
|
||||
by sched_ext, while tasks with ``SCHED_NORMAL``, ``SCHED_BATCH`` and
|
||||
``SCHED_IDLE`` policies are scheduled by the fair-class scheduler.
|
||||
``SCHED_IDLE`` policies are scheduled by the fair-class scheduler which has
|
||||
higher sched_class precedence than ``SCHED_EXT``.
|
||||
|
||||
Terminating the sched_ext scheduler program, triggering `SysRq-S`, or
|
||||
detection of any internal error including stalled runnable tasks aborts the
|
||||
|
|
@ -345,6 +345,8 @@ Where to Look
|
|||
The functions prefixed with ``scx_bpf_`` can be called from the BPF
|
||||
scheduler.
|
||||
|
||||
* ``kernel/sched/ext_idle.c`` contains the built-in idle CPU selection policy.
|
||||
|
||||
* ``tools/sched_ext/`` hosts example BPF scheduler implementations.
|
||||
|
||||
* ``scx_simple[.bpf].c``: Minimal global FIFO scheduler example using a
|
||||
|
|
@ -353,13 +355,35 @@ Where to Look
|
|||
* ``scx_qmap[.bpf].c``: A multi-level FIFO scheduler supporting five
|
||||
levels of priority implemented with ``BPF_MAP_TYPE_QUEUE``.
|
||||
|
||||
* ``scx_central[.bpf].c``: A central FIFO scheduler where all scheduling
|
||||
decisions are made on one CPU, demonstrating ``LOCAL_ON`` dispatching,
|
||||
tickless operation, and kthread preemption.
|
||||
|
||||
* ``scx_cpu0[.bpf].c``: A scheduler that queues all tasks to a shared DSQ
|
||||
and only dispatches them on CPU0 in FIFO order. Useful for testing bypass
|
||||
behavior.
|
||||
|
||||
* ``scx_flatcg[.bpf].c``: A flattened cgroup hierarchy scheduler
|
||||
implementing hierarchical weight-based cgroup CPU control by compounding
|
||||
each cgroup's share at every level into a single flat scheduling layer.
|
||||
|
||||
* ``scx_pair[.bpf].c``: A core-scheduling example that always makes
|
||||
sibling CPU pairs execute tasks from the same CPU cgroup.
|
||||
|
||||
* ``scx_sdt[.bpf].c``: A variation of ``scx_simple`` demonstrating BPF
|
||||
arena memory management for per-task data.
|
||||
|
||||
* ``scx_userland[.bpf].c``: A minimal scheduler demonstrating user space
|
||||
scheduling. Tasks with CPU affinity are direct-dispatched in FIFO order;
|
||||
all others are scheduled in user space by a simple vruntime scheduler.
|
||||
|
||||
ABI Instability
|
||||
===============
|
||||
|
||||
The APIs provided by sched_ext to BPF schedulers programs have no stability
|
||||
guarantees. This includes the ops table callbacks and constants defined in
|
||||
``include/linux/sched/ext.h``, as well as the ``scx_bpf_`` kfuncs defined in
|
||||
``kernel/sched/ext.c``.
|
||||
``kernel/sched/ext.c`` and ``kernel/sched/ext_idle.c``.
|
||||
|
||||
While we will attempt to provide a relatively stable API surface when
|
||||
possible, they are subject to change without warning between kernel
|
||||
|
|
|
|||
|
|
@ -2372,6 +2372,10 @@ quirk_flags
|
|||
audible volume
|
||||
* bit 25: ``mixer_capture_min_mute``
|
||||
Similar to bit 24 but for capture streams
|
||||
* bit 26: ``skip_iface_setup``
|
||||
Skip the probe-time interface setup (usb_set_interface,
|
||||
init_pitch, init_sample_rate); redundant with
|
||||
snd_usb_endpoint_prepare() at stream-open time
|
||||
|
||||
This module supports multiple devices, autoprobe and hotplugging.
|
||||
|
||||
|
|
|
|||
|
|
@ -8435,115 +8435,123 @@ KVM_CHECK_EXTENSION.
|
|||
|
||||
The valid bits in cap.args[0] are:
|
||||
|
||||
=================================== ============================================
|
||||
KVM_X86_QUIRK_LINT0_REENABLED By default, the reset value for the LVT
|
||||
LINT0 register is 0x700 (APIC_MODE_EXTINT).
|
||||
When this quirk is disabled, the reset value
|
||||
is 0x10000 (APIC_LVT_MASKED).
|
||||
======================================== ================================================
|
||||
KVM_X86_QUIRK_LINT0_REENABLED By default, the reset value for the LVT
|
||||
LINT0 register is 0x700 (APIC_MODE_EXTINT).
|
||||
When this quirk is disabled, the reset value
|
||||
is 0x10000 (APIC_LVT_MASKED).
|
||||
|
||||
KVM_X86_QUIRK_CD_NW_CLEARED By default, KVM clears CR0.CD and CR0.NW on
|
||||
AMD CPUs to workaround buggy guest firmware
|
||||
that runs in perpetuity with CR0.CD, i.e.
|
||||
with caches in "no fill" mode.
|
||||
KVM_X86_QUIRK_CD_NW_CLEARED By default, KVM clears CR0.CD and CR0.NW on
|
||||
AMD CPUs to workaround buggy guest firmware
|
||||
that runs in perpetuity with CR0.CD, i.e.
|
||||
with caches in "no fill" mode.
|
||||
|
||||
When this quirk is disabled, KVM does not
|
||||
change the value of CR0.CD and CR0.NW.
|
||||
When this quirk is disabled, KVM does not
|
||||
change the value of CR0.CD and CR0.NW.
|
||||
|
||||
KVM_X86_QUIRK_LAPIC_MMIO_HOLE By default, the MMIO LAPIC interface is
|
||||
available even when configured for x2APIC
|
||||
mode. When this quirk is disabled, KVM
|
||||
disables the MMIO LAPIC interface if the
|
||||
LAPIC is in x2APIC mode.
|
||||
KVM_X86_QUIRK_LAPIC_MMIO_HOLE By default, the MMIO LAPIC interface is
|
||||
available even when configured for x2APIC
|
||||
mode. When this quirk is disabled, KVM
|
||||
disables the MMIO LAPIC interface if the
|
||||
LAPIC is in x2APIC mode.
|
||||
|
||||
KVM_X86_QUIRK_OUT_7E_INC_RIP By default, KVM pre-increments %rip before
|
||||
exiting to userspace for an OUT instruction
|
||||
to port 0x7e. When this quirk is disabled,
|
||||
KVM does not pre-increment %rip before
|
||||
exiting to userspace.
|
||||
KVM_X86_QUIRK_OUT_7E_INC_RIP By default, KVM pre-increments %rip before
|
||||
exiting to userspace for an OUT instruction
|
||||
to port 0x7e. When this quirk is disabled,
|
||||
KVM does not pre-increment %rip before
|
||||
exiting to userspace.
|
||||
|
||||
KVM_X86_QUIRK_MISC_ENABLE_NO_MWAIT When this quirk is disabled, KVM sets
|
||||
CPUID.01H:ECX[bit 3] (MONITOR/MWAIT) if
|
||||
IA32_MISC_ENABLE[bit 18] (MWAIT) is set.
|
||||
Additionally, when this quirk is disabled,
|
||||
KVM clears CPUID.01H:ECX[bit 3] if
|
||||
IA32_MISC_ENABLE[bit 18] is cleared.
|
||||
KVM_X86_QUIRK_MISC_ENABLE_NO_MWAIT When this quirk is disabled, KVM sets
|
||||
CPUID.01H:ECX[bit 3] (MONITOR/MWAIT) if
|
||||
IA32_MISC_ENABLE[bit 18] (MWAIT) is set.
|
||||
Additionally, when this quirk is disabled,
|
||||
KVM clears CPUID.01H:ECX[bit 3] if
|
||||
IA32_MISC_ENABLE[bit 18] is cleared.
|
||||
|
||||
KVM_X86_QUIRK_FIX_HYPERCALL_INSN By default, KVM rewrites guest
|
||||
VMMCALL/VMCALL instructions to match the
|
||||
vendor's hypercall instruction for the
|
||||
system. When this quirk is disabled, KVM
|
||||
will no longer rewrite invalid guest
|
||||
hypercall instructions. Executing the
|
||||
incorrect hypercall instruction will
|
||||
generate a #UD within the guest.
|
||||
KVM_X86_QUIRK_FIX_HYPERCALL_INSN By default, KVM rewrites guest
|
||||
VMMCALL/VMCALL instructions to match the
|
||||
vendor's hypercall instruction for the
|
||||
system. When this quirk is disabled, KVM
|
||||
will no longer rewrite invalid guest
|
||||
hypercall instructions. Executing the
|
||||
incorrect hypercall instruction will
|
||||
generate a #UD within the guest.
|
||||
|
||||
KVM_X86_QUIRK_MWAIT_NEVER_UD_FAULTS By default, KVM emulates MONITOR/MWAIT (if
|
||||
they are intercepted) as NOPs regardless of
|
||||
whether or not MONITOR/MWAIT are supported
|
||||
according to guest CPUID. When this quirk
|
||||
is disabled and KVM_X86_DISABLE_EXITS_MWAIT
|
||||
is not set (MONITOR/MWAIT are intercepted),
|
||||
KVM will inject a #UD on MONITOR/MWAIT if
|
||||
they're unsupported per guest CPUID. Note,
|
||||
KVM will modify MONITOR/MWAIT support in
|
||||
guest CPUID on writes to MISC_ENABLE if
|
||||
KVM_X86_QUIRK_MISC_ENABLE_NO_MWAIT is
|
||||
disabled.
|
||||
KVM_X86_QUIRK_MWAIT_NEVER_UD_FAULTS By default, KVM emulates MONITOR/MWAIT (if
|
||||
they are intercepted) as NOPs regardless of
|
||||
whether or not MONITOR/MWAIT are supported
|
||||
according to guest CPUID. When this quirk
|
||||
is disabled and KVM_X86_DISABLE_EXITS_MWAIT
|
||||
is not set (MONITOR/MWAIT are intercepted),
|
||||
KVM will inject a #UD on MONITOR/MWAIT if
|
||||
they're unsupported per guest CPUID. Note,
|
||||
KVM will modify MONITOR/MWAIT support in
|
||||
guest CPUID on writes to MISC_ENABLE if
|
||||
KVM_X86_QUIRK_MISC_ENABLE_NO_MWAIT is
|
||||
disabled.
|
||||
|
||||
KVM_X86_QUIRK_SLOT_ZAP_ALL By default, for KVM_X86_DEFAULT_VM VMs, KVM
|
||||
invalidates all SPTEs in all memslots and
|
||||
address spaces when a memslot is deleted or
|
||||
moved. When this quirk is disabled (or the
|
||||
VM type isn't KVM_X86_DEFAULT_VM), KVM only
|
||||
ensures the backing memory of the deleted
|
||||
or moved memslot isn't reachable, i.e KVM
|
||||
_may_ invalidate only SPTEs related to the
|
||||
memslot.
|
||||
KVM_X86_QUIRK_SLOT_ZAP_ALL By default, for KVM_X86_DEFAULT_VM VMs, KVM
|
||||
invalidates all SPTEs in all memslots and
|
||||
address spaces when a memslot is deleted or
|
||||
moved. When this quirk is disabled (or the
|
||||
VM type isn't KVM_X86_DEFAULT_VM), KVM only
|
||||
ensures the backing memory of the deleted
|
||||
or moved memslot isn't reachable, i.e KVM
|
||||
_may_ invalidate only SPTEs related to the
|
||||
memslot.
|
||||
|
||||
KVM_X86_QUIRK_STUFF_FEATURE_MSRS By default, at vCPU creation, KVM sets the
|
||||
vCPU's MSR_IA32_PERF_CAPABILITIES (0x345),
|
||||
MSR_IA32_ARCH_CAPABILITIES (0x10a),
|
||||
MSR_PLATFORM_INFO (0xce), and all VMX MSRs
|
||||
(0x480..0x492) to the maximal capabilities
|
||||
supported by KVM. KVM also sets
|
||||
MSR_IA32_UCODE_REV (0x8b) to an arbitrary
|
||||
value (which is different for Intel vs.
|
||||
AMD). Lastly, when guest CPUID is set (by
|
||||
userspace), KVM modifies select VMX MSR
|
||||
fields to force consistency between guest
|
||||
CPUID and L2's effective ISA. When this
|
||||
quirk is disabled, KVM zeroes the vCPU's MSR
|
||||
values (with two exceptions, see below),
|
||||
i.e. treats the feature MSRs like CPUID
|
||||
leaves and gives userspace full control of
|
||||
the vCPU model definition. This quirk does
|
||||
not affect VMX MSRs CR0/CR4_FIXED1 (0x487
|
||||
and 0x489), as KVM does now allow them to
|
||||
be set by userspace (KVM sets them based on
|
||||
guest CPUID, for safety purposes).
|
||||
KVM_X86_QUIRK_STUFF_FEATURE_MSRS By default, at vCPU creation, KVM sets the
|
||||
vCPU's MSR_IA32_PERF_CAPABILITIES (0x345),
|
||||
MSR_IA32_ARCH_CAPABILITIES (0x10a),
|
||||
MSR_PLATFORM_INFO (0xce), and all VMX MSRs
|
||||
(0x480..0x492) to the maximal capabilities
|
||||
supported by KVM. KVM also sets
|
||||
MSR_IA32_UCODE_REV (0x8b) to an arbitrary
|
||||
value (which is different for Intel vs.
|
||||
AMD). Lastly, when guest CPUID is set (by
|
||||
userspace), KVM modifies select VMX MSR
|
||||
fields to force consistency between guest
|
||||
CPUID and L2's effective ISA. When this
|
||||
quirk is disabled, KVM zeroes the vCPU's MSR
|
||||
values (with two exceptions, see below),
|
||||
i.e. treats the feature MSRs like CPUID
|
||||
leaves and gives userspace full control of
|
||||
the vCPU model definition. This quirk does
|
||||
not affect VMX MSRs CR0/CR4_FIXED1 (0x487
|
||||
and 0x489), as KVM does now allow them to
|
||||
be set by userspace (KVM sets them based on
|
||||
guest CPUID, for safety purposes).
|
||||
|
||||
KVM_X86_QUIRK_IGNORE_GUEST_PAT By default, on Intel platforms, KVM ignores
|
||||
guest PAT and forces the effective memory
|
||||
type to WB in EPT. The quirk is not available
|
||||
on Intel platforms which are incapable of
|
||||
safely honoring guest PAT (i.e., without CPU
|
||||
self-snoop, KVM always ignores guest PAT and
|
||||
forces effective memory type to WB). It is
|
||||
also ignored on AMD platforms or, on Intel,
|
||||
when a VM has non-coherent DMA devices
|
||||
assigned; KVM always honors guest PAT in
|
||||
such case. The quirk is needed to avoid
|
||||
slowdowns on certain Intel Xeon platforms
|
||||
(e.g. ICX, SPR) where self-snoop feature is
|
||||
supported but UC is slow enough to cause
|
||||
issues with some older guests that use
|
||||
UC instead of WC to map the video RAM.
|
||||
Userspace can disable the quirk to honor
|
||||
guest PAT if it knows that there is no such
|
||||
guest software, for example if it does not
|
||||
expose a bochs graphics device (which is
|
||||
known to have had a buggy driver).
|
||||
=================================== ============================================
|
||||
KVM_X86_QUIRK_IGNORE_GUEST_PAT By default, on Intel platforms, KVM ignores
|
||||
guest PAT and forces the effective memory
|
||||
type to WB in EPT. The quirk is not available
|
||||
on Intel platforms which are incapable of
|
||||
safely honoring guest PAT (i.e., without CPU
|
||||
self-snoop, KVM always ignores guest PAT and
|
||||
forces effective memory type to WB). It is
|
||||
also ignored on AMD platforms or, on Intel,
|
||||
when a VM has non-coherent DMA devices
|
||||
assigned; KVM always honors guest PAT in
|
||||
such case. The quirk is needed to avoid
|
||||
slowdowns on certain Intel Xeon platforms
|
||||
(e.g. ICX, SPR) where self-snoop feature is
|
||||
supported but UC is slow enough to cause
|
||||
issues with some older guests that use
|
||||
UC instead of WC to map the video RAM.
|
||||
Userspace can disable the quirk to honor
|
||||
guest PAT if it knows that there is no such
|
||||
guest software, for example if it does not
|
||||
expose a bochs graphics device (which is
|
||||
known to have had a buggy driver).
|
||||
|
||||
KVM_X86_QUIRK_VMCS12_ALLOW_FREEZE_IN_SMM By default, KVM relaxes the consistency
|
||||
check for GUEST_IA32_DEBUGCTL in vmcs12
|
||||
to allow FREEZE_IN_SMM to be set. When
|
||||
this quirk is disabled, KVM requires this
|
||||
bit to be cleared. Note that the vmcs02
|
||||
bit is still completely controlled by the
|
||||
host, regardless of the quirk setting.
|
||||
======================================== ================================================
|
||||
|
||||
7.32 KVM_CAP_MAX_VCPU_ID
|
||||
------------------------
|
||||
|
|
|
|||
|
|
@ -17,6 +17,8 @@ The acquisition orders for mutexes are as follows:
|
|||
|
||||
- kvm->lock is taken outside kvm->slots_lock and kvm->irq_lock
|
||||
|
||||
- vcpu->mutex is taken outside kvm->slots_lock and kvm->slots_arch_lock
|
||||
|
||||
- kvm->slots_lock is taken outside kvm->irq_lock, though acquiring
|
||||
them together is quite rare.
|
||||
|
||||
|
|
|
|||
77
MAINTAINERS
77
MAINTAINERS
|
|
@ -993,10 +993,8 @@ F: Documentation/devicetree/bindings/thermal/amazon,al-thermal.yaml
|
|||
F: drivers/thermal/thermal_mmio.c
|
||||
|
||||
AMAZON ETHERNET DRIVERS
|
||||
M: Shay Agroskin <shayagr@amazon.com>
|
||||
M: Arthur Kiyanovski <akiyano@amazon.com>
|
||||
R: David Arinzon <darinzon@amazon.com>
|
||||
R: Saeed Bishara <saeedb@amazon.com>
|
||||
M: David Arinzon <darinzon@amazon.com>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
F: Documentation/networking/device_drivers/ethernet/amazon/ena.rst
|
||||
|
|
@ -4617,7 +4615,6 @@ F: drivers/bluetooth/
|
|||
|
||||
BLUETOOTH SUBSYSTEM
|
||||
M: Marcel Holtmann <marcel@holtmann.org>
|
||||
M: Johan Hedberg <johan.hedberg@gmail.com>
|
||||
M: Luiz Augusto von Dentz <luiz.dentz@gmail.com>
|
||||
L: linux-bluetooth@vger.kernel.org
|
||||
S: Supported
|
||||
|
|
@ -8629,9 +8626,8 @@ F: drivers/gpu/drm/lima/
|
|||
F: include/uapi/drm/lima_drm.h
|
||||
|
||||
DRM DRIVERS FOR LOONGSON
|
||||
M: Sui Jingfeng <suijingfeng@loongson.cn>
|
||||
L: dri-devel@lists.freedesktop.org
|
||||
S: Supported
|
||||
S: Orphan
|
||||
T: git https://gitlab.freedesktop.org/drm/misc/kernel.git
|
||||
F: drivers/gpu/drm/loongson/
|
||||
|
||||
|
|
@ -10171,8 +10167,8 @@ F: drivers/i2c/busses/i2c-cpm.c
|
|||
|
||||
FREESCALE IMX / MXC FEC DRIVER
|
||||
M: Wei Fang <wei.fang@nxp.com>
|
||||
R: Frank Li <frank.li@nxp.com>
|
||||
R: Shenwei Wang <shenwei.wang@nxp.com>
|
||||
R: Clark Wang <xiaoning.wang@nxp.com>
|
||||
L: imx@lists.linux.dev
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
|
|
@ -10484,7 +10480,7 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace.git
|
|||
F: Documentation/trace/ftrace*
|
||||
F: arch/*/*/*/*ftrace*
|
||||
F: arch/*/*/*ftrace*
|
||||
F: include/*/ftrace.h
|
||||
F: include/*/*ftrace*
|
||||
F: kernel/trace/fgraph.c
|
||||
F: kernel/trace/ftrace*
|
||||
F: samples/ftrace
|
||||
|
|
@ -12216,7 +12212,6 @@ IBM Power SRIOV Virtual NIC Device Driver
|
|||
M: Haren Myneni <haren@linux.ibm.com>
|
||||
M: Rick Lindsley <ricklind@linux.ibm.com>
|
||||
R: Nick Child <nnac123@linux.ibm.com>
|
||||
R: Thomas Falcon <tlfalcon@linux.ibm.com>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/net/ethernet/ibm/ibmvnic.*
|
||||
|
|
@ -13942,7 +13937,7 @@ F: fs/smb/server/
|
|||
|
||||
KERNEL UNIT TESTING FRAMEWORK (KUnit)
|
||||
M: Brendan Higgins <brendan.higgins@linux.dev>
|
||||
M: David Gow <davidgow@google.com>
|
||||
M: David Gow <david@davidgow.net>
|
||||
R: Rae Moar <raemoar63@gmail.com>
|
||||
L: linux-kselftest@vger.kernel.org
|
||||
L: kunit-dev@googlegroups.com
|
||||
|
|
@ -14762,7 +14757,7 @@ F: drivers/misc/lis3lv02d/
|
|||
F: drivers/platform/x86/hp/hp_accel.c
|
||||
|
||||
LIST KUNIT TEST
|
||||
M: David Gow <davidgow@google.com>
|
||||
M: David Gow <david@davidgow.net>
|
||||
L: linux-kselftest@vger.kernel.org
|
||||
L: kunit-dev@googlegroups.com
|
||||
S: Maintained
|
||||
|
|
@ -15375,10 +15370,8 @@ F: drivers/crypto/marvell/
|
|||
F: include/linux/soc/marvell/octeontx2/
|
||||
|
||||
MARVELL GIGABIT ETHERNET DRIVERS (skge/sky2)
|
||||
M: Mirko Lindner <mlindner@marvell.com>
|
||||
M: Stephen Hemminger <stephen@networkplumber.org>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Odd fixes
|
||||
S: Orphan
|
||||
F: drivers/net/ethernet/marvell/sk*
|
||||
|
||||
MARVELL LIBERTAS WIRELESS DRIVER
|
||||
|
|
@ -15475,7 +15468,6 @@ MARVELL OCTEONTX2 RVU ADMIN FUNCTION DRIVER
|
|||
M: Sunil Goutham <sgoutham@marvell.com>
|
||||
M: Linu Cherian <lcherian@marvell.com>
|
||||
M: Geetha sowjanya <gakula@marvell.com>
|
||||
M: Jerin Jacob <jerinj@marvell.com>
|
||||
M: hariprasad <hkelam@marvell.com>
|
||||
M: Subbaraya Sundeep <sbhatta@marvell.com>
|
||||
L: netdev@vger.kernel.org
|
||||
|
|
@ -15490,7 +15482,7 @@ S: Supported
|
|||
F: drivers/perf/marvell_pem_pmu.c
|
||||
|
||||
MARVELL PRESTERA ETHERNET SWITCH DRIVER
|
||||
M: Taras Chornyi <taras.chornyi@plvision.eu>
|
||||
M: Elad Nachman <enachman@marvell.com>
|
||||
S: Supported
|
||||
W: https://github.com/Marvell-switching/switchdev-prestera
|
||||
F: drivers/net/ethernet/marvell/prestera/
|
||||
|
|
@ -16164,7 +16156,6 @@ F: drivers/dma/mediatek/
|
|||
|
||||
MEDIATEK ETHERNET DRIVER
|
||||
M: Felix Fietkau <nbd@nbd.name>
|
||||
M: Sean Wang <sean.wang@mediatek.com>
|
||||
M: Lorenzo Bianconi <lorenzo@kernel.org>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
|
|
@ -16357,8 +16348,6 @@ F: include/soc/mediatek/smi.h
|
|||
MEDIATEK SWITCH DRIVER
|
||||
M: Chester A. Unal <chester.a.unal@arinc9.com>
|
||||
M: Daniel Golle <daniel@makrotopia.org>
|
||||
M: DENG Qingfang <dqfext@gmail.com>
|
||||
M: Sean Wang <sean.wang@mediatek.com>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/net/dsa/mt7530-mdio.c
|
||||
|
|
@ -16368,7 +16357,6 @@ F: net/dsa/tag_mtk.c
|
|||
|
||||
MEDIATEK T7XX 5G WWAN MODEM DRIVER
|
||||
M: Chandrashekar Devegowda <chandrashekar.devegowda@intel.com>
|
||||
R: Chiranjeevi Rapolu <chiranjeevi.rapolu@linux.intel.com>
|
||||
R: Liu Haijun <haijun.liu@mediatek.com>
|
||||
R: Ricardo Martinez <ricardo.martinez@linux.intel.com>
|
||||
L: netdev@vger.kernel.org
|
||||
|
|
@ -16653,7 +16641,7 @@ F: mm/balloon.c
|
|||
MEMORY MANAGEMENT - CORE
|
||||
M: Andrew Morton <akpm@linux-foundation.org>
|
||||
M: David Hildenbrand <david@kernel.org>
|
||||
R: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
|
||||
R: Lorenzo Stoakes <ljs@kernel.org>
|
||||
R: Liam R. Howlett <Liam.Howlett@oracle.com>
|
||||
R: Vlastimil Babka <vbabka@kernel.org>
|
||||
R: Mike Rapoport <rppt@kernel.org>
|
||||
|
|
@ -16783,7 +16771,7 @@ F: mm/workingset.c
|
|||
MEMORY MANAGEMENT - MISC
|
||||
M: Andrew Morton <akpm@linux-foundation.org>
|
||||
M: David Hildenbrand <david@kernel.org>
|
||||
R: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
|
||||
R: Lorenzo Stoakes <ljs@kernel.org>
|
||||
R: Liam R. Howlett <Liam.Howlett@oracle.com>
|
||||
R: Vlastimil Babka <vbabka@kernel.org>
|
||||
R: Mike Rapoport <rppt@kernel.org>
|
||||
|
|
@ -16874,7 +16862,7 @@ R: David Hildenbrand <david@kernel.org>
|
|||
R: Michal Hocko <mhocko@kernel.org>
|
||||
R: Qi Zheng <zhengqi.arch@bytedance.com>
|
||||
R: Shakeel Butt <shakeel.butt@linux.dev>
|
||||
R: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
|
||||
R: Lorenzo Stoakes <ljs@kernel.org>
|
||||
L: linux-mm@kvack.org
|
||||
S: Maintained
|
||||
F: mm/vmscan.c
|
||||
|
|
@ -16883,7 +16871,7 @@ F: mm/workingset.c
|
|||
MEMORY MANAGEMENT - RMAP (REVERSE MAPPING)
|
||||
M: Andrew Morton <akpm@linux-foundation.org>
|
||||
M: David Hildenbrand <david@kernel.org>
|
||||
M: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
|
||||
M: Lorenzo Stoakes <ljs@kernel.org>
|
||||
R: Rik van Riel <riel@surriel.com>
|
||||
R: Liam R. Howlett <Liam.Howlett@oracle.com>
|
||||
R: Vlastimil Babka <vbabka@kernel.org>
|
||||
|
|
@ -16928,7 +16916,7 @@ F: mm/swapfile.c
|
|||
MEMORY MANAGEMENT - THP (TRANSPARENT HUGE PAGE)
|
||||
M: Andrew Morton <akpm@linux-foundation.org>
|
||||
M: David Hildenbrand <david@kernel.org>
|
||||
M: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
|
||||
M: Lorenzo Stoakes <ljs@kernel.org>
|
||||
R: Zi Yan <ziy@nvidia.com>
|
||||
R: Baolin Wang <baolin.wang@linux.alibaba.com>
|
||||
R: Liam R. Howlett <Liam.Howlett@oracle.com>
|
||||
|
|
@ -16968,7 +16956,7 @@ F: tools/testing/selftests/mm/uffd-*.[ch]
|
|||
|
||||
MEMORY MANAGEMENT - RUST
|
||||
M: Alice Ryhl <aliceryhl@google.com>
|
||||
R: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
|
||||
R: Lorenzo Stoakes <ljs@kernel.org>
|
||||
R: Liam R. Howlett <Liam.Howlett@oracle.com>
|
||||
L: linux-mm@kvack.org
|
||||
L: rust-for-linux@vger.kernel.org
|
||||
|
|
@ -16984,7 +16972,7 @@ F: rust/kernel/page.rs
|
|||
MEMORY MAPPING
|
||||
M: Andrew Morton <akpm@linux-foundation.org>
|
||||
M: Liam R. Howlett <Liam.Howlett@oracle.com>
|
||||
M: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
|
||||
M: Lorenzo Stoakes <ljs@kernel.org>
|
||||
R: Vlastimil Babka <vbabka@kernel.org>
|
||||
R: Jann Horn <jannh@google.com>
|
||||
R: Pedro Falcato <pfalcato@suse.de>
|
||||
|
|
@ -17014,7 +17002,7 @@ MEMORY MAPPING - LOCKING
|
|||
M: Andrew Morton <akpm@linux-foundation.org>
|
||||
M: Suren Baghdasaryan <surenb@google.com>
|
||||
M: Liam R. Howlett <Liam.Howlett@oracle.com>
|
||||
M: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
|
||||
M: Lorenzo Stoakes <ljs@kernel.org>
|
||||
R: Vlastimil Babka <vbabka@kernel.org>
|
||||
R: Shakeel Butt <shakeel.butt@linux.dev>
|
||||
L: linux-mm@kvack.org
|
||||
|
|
@ -17029,7 +17017,7 @@ F: mm/mmap_lock.c
|
|||
MEMORY MAPPING - MADVISE (MEMORY ADVICE)
|
||||
M: Andrew Morton <akpm@linux-foundation.org>
|
||||
M: Liam R. Howlett <Liam.Howlett@oracle.com>
|
||||
M: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
|
||||
M: Lorenzo Stoakes <ljs@kernel.org>
|
||||
M: David Hildenbrand <david@kernel.org>
|
||||
R: Vlastimil Babka <vbabka@kernel.org>
|
||||
R: Jann Horn <jannh@google.com>
|
||||
|
|
@ -19226,8 +19214,6 @@ F: tools/objtool/
|
|||
|
||||
OCELOT ETHERNET SWITCH DRIVER
|
||||
M: Vladimir Oltean <vladimir.oltean@nxp.com>
|
||||
M: Claudiu Manoil <claudiu.manoil@nxp.com>
|
||||
M: Alexandre Belloni <alexandre.belloni@bootlin.com>
|
||||
M: UNGLinuxDriver@microchip.com
|
||||
L: netdev@vger.kernel.org
|
||||
S: Supported
|
||||
|
|
@ -19813,7 +19799,6 @@ F: arch/*/boot/dts/
|
|||
F: include/dt-bindings/
|
||||
|
||||
OPENCOMPUTE PTP CLOCK DRIVER
|
||||
M: Jonathan Lemon <jonathan.lemon@gmail.com>
|
||||
M: Vadim Fedorenko <vadim.fedorenko@linux.dev>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
|
|
@ -20121,9 +20106,8 @@ F: Documentation/devicetree/bindings/pci/marvell,armada-3700-pcie.yaml
|
|||
F: drivers/pci/controller/pci-aardvark.c
|
||||
|
||||
PCI DRIVER FOR ALTERA PCIE IP
|
||||
M: Joyce Ooi <joyce.ooi@intel.com>
|
||||
L: linux-pci@vger.kernel.org
|
||||
S: Supported
|
||||
S: Orphan
|
||||
F: Documentation/devicetree/bindings/pci/altr,pcie-root-port.yaml
|
||||
F: drivers/pci/controller/pcie-altera.c
|
||||
|
||||
|
|
@ -20368,9 +20352,8 @@ S: Supported
|
|||
F: Documentation/PCI/pci-error-recovery.rst
|
||||
|
||||
PCI MSI DRIVER FOR ALTERA MSI IP
|
||||
M: Joyce Ooi <joyce.ooi@intel.com>
|
||||
L: linux-pci@vger.kernel.org
|
||||
S: Supported
|
||||
S: Orphan
|
||||
F: Documentation/devicetree/bindings/interrupt-controller/altr,msi-controller.yaml
|
||||
F: drivers/pci/controller/pcie-altera-msi.c
|
||||
|
||||
|
|
@ -21457,9 +21440,8 @@ S: Supported
|
|||
F: drivers/scsi/qedi/
|
||||
|
||||
QLOGIC QL4xxx ETHERNET DRIVER
|
||||
M: Manish Chopra <manishc@marvell.com>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
S: Orphan
|
||||
F: drivers/net/ethernet/qlogic/qed/
|
||||
F: drivers/net/ethernet/qlogic/qede/
|
||||
F: include/linux/qed/
|
||||
|
|
@ -21954,7 +21936,7 @@ F: drivers/media/radio/radio-tea5777.c
|
|||
|
||||
RADOS BLOCK DEVICE (RBD)
|
||||
M: Ilya Dryomov <idryomov@gmail.com>
|
||||
R: Dongsheng Yang <dongsheng.yang@easystack.cn>
|
||||
R: Dongsheng Yang <dongsheng.yang@linux.dev>
|
||||
L: ceph-devel@vger.kernel.org
|
||||
S: Supported
|
||||
W: http://ceph.com/
|
||||
|
|
@ -22283,6 +22265,16 @@ L: linux-wireless@vger.kernel.org
|
|||
S: Orphan
|
||||
F: drivers/net/wireless/rsi/
|
||||
|
||||
RELAY
|
||||
M: Andrew Morton <akpm@linux-foundation.org>
|
||||
M: Jens Axboe <axboe@kernel.dk>
|
||||
M: Jason Xing <kernelxing@tencent.com>
|
||||
L: linux-kernel@vger.kernel.org
|
||||
S: Maintained
|
||||
F: Documentation/filesystems/relay.rst
|
||||
F: include/linux/relay.h
|
||||
F: kernel/relay.c
|
||||
|
||||
REGISTER MAP ABSTRACTION
|
||||
M: Mark Brown <broonie@kernel.org>
|
||||
L: linux-kernel@vger.kernel.org
|
||||
|
|
@ -23172,7 +23164,7 @@ K: \b(?i:rust)\b
|
|||
|
||||
RUST [ALLOC]
|
||||
M: Danilo Krummrich <dakr@kernel.org>
|
||||
R: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
|
||||
R: Lorenzo Stoakes <ljs@kernel.org>
|
||||
R: Vlastimil Babka <vbabka@kernel.org>
|
||||
R: Liam R. Howlett <Liam.Howlett@oracle.com>
|
||||
R: Uladzislau Rezki <urezki@gmail.com>
|
||||
|
|
@ -24336,7 +24328,6 @@ F: Documentation/devicetree/bindings/interrupt-controller/kontron,sl28cpld-intc.
|
|||
F: Documentation/devicetree/bindings/pwm/kontron,sl28cpld-pwm.yaml
|
||||
F: Documentation/devicetree/bindings/watchdog/kontron,sl28cpld-wdt.yaml
|
||||
F: drivers/gpio/gpio-sl28cpld.c
|
||||
F: drivers/hwmon/sa67mcu-hwmon.c
|
||||
F: drivers/hwmon/sl28cpld-hwmon.c
|
||||
F: drivers/irqchip/irq-sl28cpld.c
|
||||
F: drivers/pwm/pwm-sl28cpld.c
|
||||
|
|
@ -24350,11 +24341,12 @@ F: drivers/nvmem/layouts/sl28vpd.c
|
|||
|
||||
SLAB ALLOCATOR
|
||||
M: Vlastimil Babka <vbabka@kernel.org>
|
||||
M: Harry Yoo <harry.yoo@oracle.com>
|
||||
M: Andrew Morton <akpm@linux-foundation.org>
|
||||
R: Hao Li <hao.li@linux.dev>
|
||||
R: Christoph Lameter <cl@gentwo.org>
|
||||
R: David Rientjes <rientjes@google.com>
|
||||
R: Roman Gushchin <roman.gushchin@linux.dev>
|
||||
R: Harry Yoo <harry.yoo@oracle.com>
|
||||
L: linux-mm@kvack.org
|
||||
S: Maintained
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/vbabka/slab.git
|
||||
|
|
@ -25765,6 +25757,7 @@ F: include/net/pkt_cls.h
|
|||
F: include/net/pkt_sched.h
|
||||
F: include/net/sch_priv.h
|
||||
F: include/net/tc_act/
|
||||
F: include/net/tc_wrapper.h
|
||||
F: include/uapi/linux/pkt_cls.h
|
||||
F: include/uapi/linux/pkt_sched.h
|
||||
F: include/uapi/linux/tc_act/
|
||||
|
|
|
|||
14
Makefile
14
Makefile
|
|
@ -2,7 +2,7 @@
|
|||
VERSION = 7
|
||||
PATCHLEVEL = 0
|
||||
SUBLEVEL = 0
|
||||
EXTRAVERSION = -rc2
|
||||
EXTRAVERSION = -rc4
|
||||
NAME = Baby Opossum Posse
|
||||
|
||||
# *DOCUMENTATION*
|
||||
|
|
@ -476,6 +476,7 @@ KBUILD_USERLDFLAGS := $(USERLDFLAGS)
|
|||
export rust_common_flags := --edition=2021 \
|
||||
-Zbinary_dep_depinfo=y \
|
||||
-Astable_features \
|
||||
-Aunused_features \
|
||||
-Dnon_ascii_idents \
|
||||
-Dunsafe_op_in_unsafe_fn \
|
||||
-Wmissing_docs \
|
||||
|
|
@ -1113,6 +1114,9 @@ KBUILD_CFLAGS += -fno-builtin-wcslen
|
|||
# change __FILE__ to the relative path to the source directory
|
||||
ifdef building_out_of_srctree
|
||||
KBUILD_CPPFLAGS += -fmacro-prefix-map=$(srcroot)/=
|
||||
ifeq ($(call rustc-option-yn, --remap-path-scope=macro),y)
|
||||
KBUILD_RUSTFLAGS += --remap-path-prefix=$(srcroot)/= --remap-path-scope=macro
|
||||
endif
|
||||
endif
|
||||
|
||||
# include additional Makefiles when needed
|
||||
|
|
@ -1497,13 +1501,13 @@ ifneq ($(wildcard $(resolve_btfids_O)),)
|
|||
$(Q)$(MAKE) -sC $(srctree)/tools/bpf/resolve_btfids O=$(resolve_btfids_O) clean
|
||||
endif
|
||||
|
||||
PHONY += objtool_clean
|
||||
PHONY += objtool_clean objtool_mrproper
|
||||
|
||||
objtool_O = $(abspath $(objtree))/tools/objtool
|
||||
|
||||
objtool_clean:
|
||||
objtool_clean objtool_mrproper:
|
||||
ifneq ($(wildcard $(objtool_O)),)
|
||||
$(Q)$(MAKE) -sC $(abs_srctree)/tools/objtool O=$(objtool_O) srctree=$(abs_srctree) clean
|
||||
$(Q)$(MAKE) -sC $(abs_srctree)/tools/objtool O=$(objtool_O) srctree=$(abs_srctree) $(patsubst objtool_%,%,$@)
|
||||
endif
|
||||
|
||||
tools/: FORCE
|
||||
|
|
@ -1686,7 +1690,7 @@ PHONY += $(mrproper-dirs) mrproper
|
|||
$(mrproper-dirs):
|
||||
$(Q)$(MAKE) $(clean)=$(patsubst _mrproper_%,%,$@)
|
||||
|
||||
mrproper: clean $(mrproper-dirs)
|
||||
mrproper: clean objtool_mrproper $(mrproper-dirs)
|
||||
$(call cmd,rmfiles)
|
||||
@find . $(RCS_FIND_IGNORE) \
|
||||
\( -name '*.rmeta' \) \
|
||||
|
|
|
|||
|
|
@ -71,6 +71,7 @@ SECTIONS
|
|||
|
||||
STABS_DEBUG
|
||||
DWARF_DEBUG
|
||||
MODINFO
|
||||
ELF_DETAILS
|
||||
|
||||
DISCARDS
|
||||
|
|
|
|||
|
|
@ -123,6 +123,7 @@ SECTIONS
|
|||
_end = . ;
|
||||
|
||||
STABS_DEBUG
|
||||
MODINFO
|
||||
ELF_DETAILS
|
||||
DISCARDS
|
||||
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ SECTIONS
|
|||
COMMON_DISCARDS
|
||||
*(.ARM.exidx*)
|
||||
*(.ARM.extab*)
|
||||
*(.modinfo)
|
||||
*(.note.*)
|
||||
*(.rel.*)
|
||||
*(.printk_index)
|
||||
|
|
|
|||
|
|
@ -154,6 +154,7 @@ SECTIONS
|
|||
|
||||
STABS_DEBUG
|
||||
DWARF_DEBUG
|
||||
MODINFO
|
||||
ARM_DETAILS
|
||||
|
||||
ARM_ASSERTS
|
||||
|
|
|
|||
|
|
@ -153,6 +153,7 @@ SECTIONS
|
|||
|
||||
STABS_DEBUG
|
||||
DWARF_DEBUG
|
||||
MODINFO
|
||||
ARM_DETAILS
|
||||
|
||||
ARM_ASSERTS
|
||||
|
|
|
|||
|
|
@ -91,8 +91,9 @@ __XCHG_GEN(_mb)
|
|||
#define __xchg_wrapper(sfx, ptr, x) \
|
||||
({ \
|
||||
__typeof__(*(ptr)) __ret; \
|
||||
__ret = (__typeof__(*(ptr))) \
|
||||
__arch_xchg##sfx((unsigned long)(x), (ptr), sizeof(*(ptr))); \
|
||||
__ret = (__force __typeof__(*(ptr))) \
|
||||
__arch_xchg##sfx((__force unsigned long)(x), (ptr), \
|
||||
sizeof(*(ptr))); \
|
||||
__ret; \
|
||||
})
|
||||
|
||||
|
|
@ -175,9 +176,10 @@ __CMPXCHG_GEN(_mb)
|
|||
#define __cmpxchg_wrapper(sfx, ptr, o, n) \
|
||||
({ \
|
||||
__typeof__(*(ptr)) __ret; \
|
||||
__ret = (__typeof__(*(ptr))) \
|
||||
__cmpxchg##sfx((ptr), (unsigned long)(o), \
|
||||
(unsigned long)(n), sizeof(*(ptr))); \
|
||||
__ret = (__force __typeof__(*(ptr))) \
|
||||
__cmpxchg##sfx((ptr), (__force unsigned long)(o), \
|
||||
(__force unsigned long)(n), \
|
||||
sizeof(*(ptr))); \
|
||||
__ret; \
|
||||
})
|
||||
|
||||
|
|
|
|||
|
|
@ -784,6 +784,9 @@ struct kvm_host_data {
|
|||
/* Number of debug breakpoints/watchpoints for this CPU (minus 1) */
|
||||
unsigned int debug_brps;
|
||||
unsigned int debug_wrps;
|
||||
|
||||
/* Last vgic_irq part of the AP list recorded in an LR */
|
||||
struct vgic_irq *last_lr_irq;
|
||||
};
|
||||
|
||||
struct kvm_host_psci_config {
|
||||
|
|
|
|||
|
|
@ -50,11 +50,11 @@
|
|||
|
||||
#define _PAGE_DEFAULT (_PROT_DEFAULT | PTE_ATTRINDX(MT_NORMAL))
|
||||
|
||||
#define _PAGE_KERNEL (PROT_NORMAL)
|
||||
#define _PAGE_KERNEL_RO ((PROT_NORMAL & ~PTE_WRITE) | PTE_RDONLY)
|
||||
#define _PAGE_KERNEL_ROX ((PROT_NORMAL & ~(PTE_WRITE | PTE_PXN)) | PTE_RDONLY)
|
||||
#define _PAGE_KERNEL_EXEC (PROT_NORMAL & ~PTE_PXN)
|
||||
#define _PAGE_KERNEL_EXEC_CONT ((PROT_NORMAL & ~PTE_PXN) | PTE_CONT)
|
||||
#define _PAGE_KERNEL (PROT_NORMAL | PTE_DIRTY)
|
||||
#define _PAGE_KERNEL_RO ((PROT_NORMAL & ~PTE_WRITE) | PTE_RDONLY | PTE_DIRTY)
|
||||
#define _PAGE_KERNEL_ROX ((PROT_NORMAL & ~(PTE_WRITE | PTE_PXN)) | PTE_RDONLY | PTE_DIRTY)
|
||||
#define _PAGE_KERNEL_EXEC ((PROT_NORMAL & ~PTE_PXN) | PTE_DIRTY)
|
||||
#define _PAGE_KERNEL_EXEC_CONT ((PROT_NORMAL & ~PTE_PXN) | PTE_CONT | PTE_DIRTY)
|
||||
|
||||
#define _PAGE_SHARED (_PAGE_DEFAULT | PTE_USER | PTE_RDONLY | PTE_NG | PTE_PXN | PTE_UXN | PTE_WRITE)
|
||||
#define _PAGE_SHARED_EXEC (_PAGE_DEFAULT | PTE_USER | PTE_RDONLY | PTE_NG | PTE_PXN | PTE_WRITE)
|
||||
|
|
|
|||
|
|
@ -2,6 +2,10 @@
|
|||
#ifndef _ASM_RUNTIME_CONST_H
|
||||
#define _ASM_RUNTIME_CONST_H
|
||||
|
||||
#ifdef MODULE
|
||||
#error "Cannot use runtime-const infrastructure from modules"
|
||||
#endif
|
||||
|
||||
#include <asm/cacheflush.h>
|
||||
|
||||
/* Sigh. You can still run arm64 in BE mode */
|
||||
|
|
|
|||
|
|
@ -2345,6 +2345,15 @@ static bool can_trap_icv_dir_el1(const struct arm64_cpu_capabilities *entry,
|
|||
!is_midr_in_range_list(has_vgic_v3))
|
||||
return false;
|
||||
|
||||
/*
|
||||
* pKVM prevents late onlining of CPUs. This means that whatever
|
||||
* state the capability is in after deprivilege cannot be affected
|
||||
* by a new CPU booting -- this is garanteed to be a CPU we have
|
||||
* already seen, and the cap is therefore unchanged.
|
||||
*/
|
||||
if (system_capabilities_finalized() && is_protected_kvm_enabled())
|
||||
return cpus_have_final_cap(ARM64_HAS_ICH_HCR_EL2_TDIR);
|
||||
|
||||
if (is_kernel_in_hyp_mode())
|
||||
res.a1 = read_sysreg_s(SYS_ICH_VTR_EL2);
|
||||
else
|
||||
|
|
|
|||
|
|
@ -349,6 +349,7 @@ SECTIONS
|
|||
|
||||
STABS_DEBUG
|
||||
DWARF_DEBUG
|
||||
MODINFO
|
||||
ELF_DETAILS
|
||||
|
||||
HEAD_SYMBOLS
|
||||
|
|
|
|||
|
|
@ -1504,8 +1504,6 @@ int __kvm_at_s1e2(struct kvm_vcpu *vcpu, u32 op, u64 vaddr)
|
|||
fail = true;
|
||||
}
|
||||
|
||||
isb();
|
||||
|
||||
if (!fail)
|
||||
par = read_sysreg_par();
|
||||
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@
|
|||
|
||||
#include "trace.h"
|
||||
|
||||
const struct _kvm_stats_desc kvm_vm_stats_desc[] = {
|
||||
const struct kvm_stats_desc kvm_vm_stats_desc[] = {
|
||||
KVM_GENERIC_VM_STATS()
|
||||
};
|
||||
|
||||
|
|
@ -42,7 +42,7 @@ const struct kvm_stats_header kvm_vm_stats_header = {
|
|||
sizeof(kvm_vm_stats_desc),
|
||||
};
|
||||
|
||||
const struct _kvm_stats_desc kvm_vcpu_stats_desc[] = {
|
||||
const struct kvm_stats_desc kvm_vcpu_stats_desc[] = {
|
||||
KVM_GENERIC_VCPU_STATS(),
|
||||
STATS_DESC_COUNTER(VCPU, hvc_exit_stat),
|
||||
STATS_DESC_COUNTER(VCPU, wfe_exit_stat),
|
||||
|
|
|
|||
|
|
@ -518,7 +518,7 @@ static int host_stage2_adjust_range(u64 addr, struct kvm_mem_range *range)
|
|||
granule = kvm_granule_size(level);
|
||||
cur.start = ALIGN_DOWN(addr, granule);
|
||||
cur.end = cur.start + granule;
|
||||
if (!range_included(&cur, range))
|
||||
if (!range_included(&cur, range) && level < KVM_PGTABLE_LAST_LEVEL)
|
||||
continue;
|
||||
*range = cur;
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -1751,6 +1751,7 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa,
|
|||
|
||||
force_pte = (max_map_size == PAGE_SIZE);
|
||||
vma_pagesize = min_t(long, vma_pagesize, max_map_size);
|
||||
vma_shift = __ffs(vma_pagesize);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -1837,10 +1838,8 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa,
|
|||
if (exec_fault && s2_force_noncacheable)
|
||||
ret = -ENOEXEC;
|
||||
|
||||
if (ret) {
|
||||
kvm_release_page_unused(page);
|
||||
return ret;
|
||||
}
|
||||
if (ret)
|
||||
goto out_put_page;
|
||||
|
||||
/*
|
||||
* Guest performs atomic/exclusive operations on memory with unsupported
|
||||
|
|
@ -1850,7 +1849,8 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa,
|
|||
*/
|
||||
if (esr_fsc_is_excl_atomic_fault(kvm_vcpu_get_esr(vcpu))) {
|
||||
kvm_inject_dabt_excl_atomic(vcpu, kvm_vcpu_get_hfar(vcpu));
|
||||
return 1;
|
||||
ret = 1;
|
||||
goto out_put_page;
|
||||
}
|
||||
|
||||
if (nested)
|
||||
|
|
@ -1936,6 +1936,10 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa,
|
|||
mark_page_dirty_in_slot(kvm, memslot, gfn);
|
||||
|
||||
return ret != -EAGAIN ? ret : 0;
|
||||
|
||||
out_put_page:
|
||||
kvm_release_page_unused(page);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Resolve the access fault by making the page young again. */
|
||||
|
|
|
|||
|
|
@ -152,31 +152,31 @@ static int get_ia_size(struct s2_walk_info *wi)
|
|||
return 64 - wi->t0sz;
|
||||
}
|
||||
|
||||
static int check_base_s2_limits(struct s2_walk_info *wi,
|
||||
static int check_base_s2_limits(struct kvm_vcpu *vcpu, struct s2_walk_info *wi,
|
||||
int level, int input_size, int stride)
|
||||
{
|
||||
int start_size, ia_size;
|
||||
int start_size, pa_max;
|
||||
|
||||
ia_size = get_ia_size(wi);
|
||||
pa_max = kvm_get_pa_bits(vcpu->kvm);
|
||||
|
||||
/* Check translation limits */
|
||||
switch (BIT(wi->pgshift)) {
|
||||
case SZ_64K:
|
||||
if (level == 0 || (level == 1 && ia_size <= 42))
|
||||
if (level == 0 || (level == 1 && pa_max <= 42))
|
||||
return -EFAULT;
|
||||
break;
|
||||
case SZ_16K:
|
||||
if (level == 0 || (level == 1 && ia_size <= 40))
|
||||
if (level == 0 || (level == 1 && pa_max <= 40))
|
||||
return -EFAULT;
|
||||
break;
|
||||
case SZ_4K:
|
||||
if (level < 0 || (level == 0 && ia_size <= 42))
|
||||
if (level < 0 || (level == 0 && pa_max <= 42))
|
||||
return -EFAULT;
|
||||
break;
|
||||
}
|
||||
|
||||
/* Check input size limits */
|
||||
if (input_size > ia_size)
|
||||
if (input_size > pa_max)
|
||||
return -EFAULT;
|
||||
|
||||
/* Check number of entries in starting level table */
|
||||
|
|
@ -269,16 +269,19 @@ static int walk_nested_s2_pgd(struct kvm_vcpu *vcpu, phys_addr_t ipa,
|
|||
if (input_size > 48 || input_size < 25)
|
||||
return -EFAULT;
|
||||
|
||||
ret = check_base_s2_limits(wi, level, input_size, stride);
|
||||
if (WARN_ON(ret))
|
||||
ret = check_base_s2_limits(vcpu, wi, level, input_size, stride);
|
||||
if (WARN_ON(ret)) {
|
||||
out->esr = compute_fsc(0, ESR_ELx_FSC_FAULT);
|
||||
return ret;
|
||||
}
|
||||
|
||||
base_lower_bound = 3 + input_size - ((3 - level) * stride +
|
||||
wi->pgshift);
|
||||
base_addr = wi->baddr & GENMASK_ULL(47, base_lower_bound);
|
||||
|
||||
if (check_output_size(wi, base_addr)) {
|
||||
out->esr = compute_fsc(level, ESR_ELx_FSC_ADDRSZ);
|
||||
/* R_BFHQH */
|
||||
out->esr = compute_fsc(0, ESR_ELx_FSC_ADDRSZ);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
@ -293,8 +296,10 @@ static int walk_nested_s2_pgd(struct kvm_vcpu *vcpu, phys_addr_t ipa,
|
|||
|
||||
paddr = base_addr | index;
|
||||
ret = read_guest_s2_desc(vcpu, paddr, &desc, wi);
|
||||
if (ret < 0)
|
||||
if (ret < 0) {
|
||||
out->esr = ESR_ELx_FSC_SEA_TTW(level);
|
||||
return ret;
|
||||
}
|
||||
|
||||
new_desc = desc;
|
||||
|
||||
|
|
|
|||
|
|
@ -143,23 +143,6 @@ int kvm_vgic_create(struct kvm *kvm, u32 type)
|
|||
kvm->arch.vgic.in_kernel = true;
|
||||
kvm->arch.vgic.vgic_model = type;
|
||||
kvm->arch.vgic.implementation_rev = KVM_VGIC_IMP_REV_LATEST;
|
||||
|
||||
kvm_for_each_vcpu(i, vcpu, kvm) {
|
||||
ret = vgic_allocate_private_irqs_locked(vcpu, type);
|
||||
if (ret)
|
||||
break;
|
||||
}
|
||||
|
||||
if (ret) {
|
||||
kvm_for_each_vcpu(i, vcpu, kvm) {
|
||||
struct vgic_cpu *vgic_cpu = &vcpu->arch.vgic_cpu;
|
||||
kfree(vgic_cpu->private_irqs);
|
||||
vgic_cpu->private_irqs = NULL;
|
||||
}
|
||||
|
||||
goto out_unlock;
|
||||
}
|
||||
|
||||
kvm->arch.vgic.vgic_dist_base = VGIC_ADDR_UNDEF;
|
||||
|
||||
aa64pfr0 = kvm_read_vm_id_reg(kvm, SYS_ID_AA64PFR0_EL1) & ~ID_AA64PFR0_EL1_GIC;
|
||||
|
|
@ -176,6 +159,23 @@ int kvm_vgic_create(struct kvm *kvm, u32 type)
|
|||
kvm_set_vm_id_reg(kvm, SYS_ID_AA64PFR0_EL1, aa64pfr0);
|
||||
kvm_set_vm_id_reg(kvm, SYS_ID_PFR1_EL1, pfr1);
|
||||
|
||||
kvm_for_each_vcpu(i, vcpu, kvm) {
|
||||
ret = vgic_allocate_private_irqs_locked(vcpu, type);
|
||||
if (ret)
|
||||
break;
|
||||
}
|
||||
|
||||
if (ret) {
|
||||
kvm_for_each_vcpu(i, vcpu, kvm) {
|
||||
struct vgic_cpu *vgic_cpu = &vcpu->arch.vgic_cpu;
|
||||
kfree(vgic_cpu->private_irqs);
|
||||
vgic_cpu->private_irqs = NULL;
|
||||
}
|
||||
|
||||
kvm->arch.vgic.vgic_model = 0;
|
||||
goto out_unlock;
|
||||
}
|
||||
|
||||
if (type == KVM_DEV_TYPE_ARM_VGIC_V3)
|
||||
kvm->arch.vgic.nassgicap = system_supports_direct_sgis();
|
||||
|
||||
|
|
|
|||
|
|
@ -115,7 +115,7 @@ void vgic_v2_fold_lr_state(struct kvm_vcpu *vcpu)
|
|||
struct vgic_cpu *vgic_cpu = &vcpu->arch.vgic_cpu;
|
||||
struct vgic_v2_cpu_if *cpuif = &vgic_cpu->vgic_v2;
|
||||
u32 eoicount = FIELD_GET(GICH_HCR_EOICOUNT, cpuif->vgic_hcr);
|
||||
struct vgic_irq *irq;
|
||||
struct vgic_irq *irq = *host_data_ptr(last_lr_irq);
|
||||
|
||||
DEBUG_SPINLOCK_BUG_ON(!irqs_disabled());
|
||||
|
||||
|
|
@ -123,7 +123,7 @@ void vgic_v2_fold_lr_state(struct kvm_vcpu *vcpu)
|
|||
vgic_v2_fold_lr(vcpu, cpuif->vgic_lr[lr]);
|
||||
|
||||
/* See the GICv3 equivalent for the EOIcount handling rationale */
|
||||
list_for_each_entry(irq, &vgic_cpu->ap_list_head, ap_list) {
|
||||
list_for_each_entry_continue(irq, &vgic_cpu->ap_list_head, ap_list) {
|
||||
u32 lr;
|
||||
|
||||
if (!eoicount) {
|
||||
|
|
|
|||
|
|
@ -148,7 +148,7 @@ void vgic_v3_fold_lr_state(struct kvm_vcpu *vcpu)
|
|||
struct vgic_cpu *vgic_cpu = &vcpu->arch.vgic_cpu;
|
||||
struct vgic_v3_cpu_if *cpuif = &vgic_cpu->vgic_v3;
|
||||
u32 eoicount = FIELD_GET(ICH_HCR_EL2_EOIcount, cpuif->vgic_hcr);
|
||||
struct vgic_irq *irq;
|
||||
struct vgic_irq *irq = *host_data_ptr(last_lr_irq);
|
||||
|
||||
DEBUG_SPINLOCK_BUG_ON(!irqs_disabled());
|
||||
|
||||
|
|
@ -158,12 +158,12 @@ void vgic_v3_fold_lr_state(struct kvm_vcpu *vcpu)
|
|||
/*
|
||||
* EOIMode=0: use EOIcount to emulate deactivation. We are
|
||||
* guaranteed to deactivate in reverse order of the activation, so
|
||||
* just pick one active interrupt after the other in the ap_list,
|
||||
* and replay the deactivation as if the CPU was doing it. We also
|
||||
* rely on priority drop to have taken place, and the list to be
|
||||
* sorted by priority.
|
||||
* just pick one active interrupt after the other in the tail part
|
||||
* of the ap_list, past the LRs, and replay the deactivation as if
|
||||
* the CPU was doing it. We also rely on priority drop to have taken
|
||||
* place, and the list to be sorted by priority.
|
||||
*/
|
||||
list_for_each_entry(irq, &vgic_cpu->ap_list_head, ap_list) {
|
||||
list_for_each_entry_continue(irq, &vgic_cpu->ap_list_head, ap_list) {
|
||||
u64 lr;
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -814,6 +814,9 @@ static void vgic_prune_ap_list(struct kvm_vcpu *vcpu)
|
|||
|
||||
static inline void vgic_fold_lr_state(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
if (!*host_data_ptr(last_lr_irq))
|
||||
return;
|
||||
|
||||
if (kvm_vgic_global_state.type == VGIC_V2)
|
||||
vgic_v2_fold_lr_state(vcpu);
|
||||
else
|
||||
|
|
@ -960,10 +963,13 @@ static void vgic_flush_lr_state(struct kvm_vcpu *vcpu)
|
|||
if (irqs_outside_lrs(&als))
|
||||
vgic_sort_ap_list(vcpu);
|
||||
|
||||
*host_data_ptr(last_lr_irq) = NULL;
|
||||
|
||||
list_for_each_entry(irq, &vgic_cpu->ap_list_head, ap_list) {
|
||||
scoped_guard(raw_spinlock, &irq->irq_lock) {
|
||||
if (likely(vgic_target_oracle(irq) == vcpu)) {
|
||||
vgic_populate_lr(vcpu, irq, count++);
|
||||
*host_data_ptr(last_lr_irq) = irq;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -599,6 +599,27 @@ void contpte_clear_young_dirty_ptes(struct vm_area_struct *vma,
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(contpte_clear_young_dirty_ptes);
|
||||
|
||||
static bool contpte_all_subptes_match_access_flags(pte_t *ptep, pte_t entry)
|
||||
{
|
||||
pte_t *cont_ptep = contpte_align_down(ptep);
|
||||
/*
|
||||
* PFNs differ per sub-PTE. Match only bits consumed by
|
||||
* __ptep_set_access_flags(): AF, DIRTY and write permission.
|
||||
*/
|
||||
const pteval_t cmp_mask = PTE_RDONLY | PTE_AF | PTE_WRITE | PTE_DIRTY;
|
||||
pteval_t entry_cmp = pte_val(entry) & cmp_mask;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < CONT_PTES; i++) {
|
||||
pteval_t pte_cmp = pte_val(__ptep_get(cont_ptep + i)) & cmp_mask;
|
||||
|
||||
if (pte_cmp != entry_cmp)
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int contpte_ptep_set_access_flags(struct vm_area_struct *vma,
|
||||
unsigned long addr, pte_t *ptep,
|
||||
pte_t entry, int dirty)
|
||||
|
|
@ -608,13 +629,37 @@ int contpte_ptep_set_access_flags(struct vm_area_struct *vma,
|
|||
int i;
|
||||
|
||||
/*
|
||||
* Gather the access/dirty bits for the contiguous range. If nothing has
|
||||
* changed, its a noop.
|
||||
* Check whether all sub-PTEs in the CONT block already match the
|
||||
* requested access flags/write permission, using raw per-PTE values
|
||||
* rather than the gathered ptep_get() view.
|
||||
*
|
||||
* __ptep_set_access_flags() can update AF, dirty and write
|
||||
* permission, but only to make the mapping more permissive.
|
||||
*
|
||||
* ptep_get() gathers AF/dirty state across the whole CONT block,
|
||||
* which is correct for a CPU with FEAT_HAFDBS. But page-table
|
||||
* walkers that evaluate each descriptor individually (e.g. a CPU
|
||||
* without DBM support, or an SMMU without HTTU, or with HA/HD
|
||||
* disabled in CD.TCR) can keep faulting on the target sub-PTE if
|
||||
* only a sibling has been updated. Gathering can therefore cause
|
||||
* false no-ops when only a sibling has been updated:
|
||||
* - write faults: target still has PTE_RDONLY (needs PTE_RDONLY cleared)
|
||||
* - read faults: target still lacks PTE_AF
|
||||
*
|
||||
* Per Arm ARM (DDI 0487) D8.7.1, any sub-PTE in a CONT range may
|
||||
* become the effective cached translation, so all entries must have
|
||||
* consistent attributes. Check the full CONT block before returning
|
||||
* no-op, and when any sub-PTE mismatches, proceed to update the whole
|
||||
* range.
|
||||
*/
|
||||
orig_pte = pte_mknoncont(ptep_get(ptep));
|
||||
if (pte_val(orig_pte) == pte_val(entry))
|
||||
if (contpte_all_subptes_match_access_flags(ptep, entry))
|
||||
return 0;
|
||||
|
||||
/*
|
||||
* Use raw target pte (not gathered) for write-bit unfold decision.
|
||||
*/
|
||||
orig_pte = pte_mknoncont(__ptep_get(ptep));
|
||||
|
||||
/*
|
||||
* We can fix up access/dirty bits without having to unfold the contig
|
||||
* range. But if the write bit is changing, we must unfold.
|
||||
|
|
|
|||
|
|
@ -109,6 +109,7 @@ SECTIONS
|
|||
|
||||
STABS_DEBUG
|
||||
DWARF_DEBUG
|
||||
MODINFO
|
||||
ELF_DETAILS
|
||||
|
||||
DISCARDS
|
||||
|
|
|
|||
|
|
@ -62,6 +62,7 @@ SECTIONS
|
|||
|
||||
STABS_DEBUG
|
||||
DWARF_DEBUG
|
||||
MODINFO
|
||||
ELF_DETAILS
|
||||
.hexagon.attributes 0 : { *(.hexagon.attributes) }
|
||||
|
||||
|
|
|
|||
|
|
@ -147,6 +147,7 @@ SECTIONS
|
|||
|
||||
STABS_DEBUG
|
||||
DWARF_DEBUG
|
||||
MODINFO
|
||||
ELF_DETAILS
|
||||
|
||||
#ifdef CONFIG_EFI_STUB
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@
|
|||
#define CREATE_TRACE_POINTS
|
||||
#include "trace.h"
|
||||
|
||||
const struct _kvm_stats_desc kvm_vcpu_stats_desc[] = {
|
||||
const struct kvm_stats_desc kvm_vcpu_stats_desc[] = {
|
||||
KVM_GENERIC_VCPU_STATS(),
|
||||
STATS_DESC_COUNTER(VCPU, int_exits),
|
||||
STATS_DESC_COUNTER(VCPU, idle_exits),
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
#include <asm/kvm_eiointc.h>
|
||||
#include <asm/kvm_pch_pic.h>
|
||||
|
||||
const struct _kvm_stats_desc kvm_vm_stats_desc[] = {
|
||||
const struct kvm_stats_desc kvm_vm_stats_desc[] = {
|
||||
KVM_GENERIC_VM_STATS(),
|
||||
STATS_DESC_ICOUNTER(VM, pages),
|
||||
STATS_DESC_ICOUNTER(VM, hugepages),
|
||||
|
|
|
|||
|
|
@ -85,6 +85,7 @@ SECTIONS {
|
|||
_end = .;
|
||||
|
||||
STABS_DEBUG
|
||||
MODINFO
|
||||
ELF_DETAILS
|
||||
|
||||
/* Sections to be discarded */
|
||||
|
|
|
|||
|
|
@ -58,6 +58,7 @@ SECTIONS
|
|||
_end = . ;
|
||||
|
||||
STABS_DEBUG
|
||||
MODINFO
|
||||
ELF_DETAILS
|
||||
|
||||
/* Sections to be discarded */
|
||||
|
|
|
|||
|
|
@ -51,6 +51,7 @@ __init_begin = .;
|
|||
_end = . ;
|
||||
|
||||
STABS_DEBUG
|
||||
MODINFO
|
||||
ELF_DETAILS
|
||||
|
||||
/* Sections to be discarded */
|
||||
|
|
|
|||
|
|
@ -217,6 +217,7 @@ SECTIONS
|
|||
|
||||
STABS_DEBUG
|
||||
DWARF_DEBUG
|
||||
MODINFO
|
||||
ELF_DETAILS
|
||||
|
||||
/* These must appear regardless of . */
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@
|
|||
#define VECTORSPACING 0x100 /* for EI/VI mode */
|
||||
#endif
|
||||
|
||||
const struct _kvm_stats_desc kvm_vm_stats_desc[] = {
|
||||
const struct kvm_stats_desc kvm_vm_stats_desc[] = {
|
||||
KVM_GENERIC_VM_STATS()
|
||||
};
|
||||
|
||||
|
|
@ -51,7 +51,7 @@ const struct kvm_stats_header kvm_vm_stats_header = {
|
|||
sizeof(kvm_vm_stats_desc),
|
||||
};
|
||||
|
||||
const struct _kvm_stats_desc kvm_vcpu_stats_desc[] = {
|
||||
const struct kvm_stats_desc kvm_vcpu_stats_desc[] = {
|
||||
KVM_GENERIC_VCPU_STATS(),
|
||||
STATS_DESC_COUNTER(VCPU, wait_exits),
|
||||
STATS_DESC_COUNTER(VCPU, cache_exits),
|
||||
|
|
|
|||
|
|
@ -57,6 +57,7 @@ SECTIONS
|
|||
|
||||
STABS_DEBUG
|
||||
DWARF_DEBUG
|
||||
MODINFO
|
||||
ELF_DETAILS
|
||||
|
||||
DISCARDS
|
||||
|
|
|
|||
|
|
@ -101,6 +101,7 @@ SECTIONS
|
|||
/* Throw in the debugging sections */
|
||||
STABS_DEBUG
|
||||
DWARF_DEBUG
|
||||
MODINFO
|
||||
ELF_DETAILS
|
||||
|
||||
/* Sections to be discarded -- must be last */
|
||||
|
|
|
|||
|
|
@ -90,6 +90,7 @@ SECTIONS
|
|||
/* Sections to be discarded */
|
||||
DISCARDS
|
||||
/DISCARD/ : {
|
||||
*(.modinfo)
|
||||
#ifdef CONFIG_64BIT
|
||||
/* temporary hack until binutils is fixed to not emit these
|
||||
* for static binaries
|
||||
|
|
|
|||
|
|
@ -85,7 +85,7 @@ extern void __update_cache(pte_t pte);
|
|||
printk("%s:%d: bad pgd %08lx.\n", __FILE__, __LINE__, (unsigned long)pgd_val(e))
|
||||
|
||||
/* This is the size of the initially mapped kernel memory */
|
||||
#if defined(CONFIG_64BIT)
|
||||
#if defined(CONFIG_64BIT) || defined(CONFIG_KALLSYMS)
|
||||
#define KERNEL_INITIAL_ORDER 26 /* 1<<26 = 64MB */
|
||||
#else
|
||||
#define KERNEL_INITIAL_ORDER 25 /* 1<<25 = 32MB */
|
||||
|
|
|
|||
|
|
@ -56,6 +56,7 @@ ENTRY(parisc_kernel_start)
|
|||
|
||||
.import __bss_start,data
|
||||
.import __bss_stop,data
|
||||
.import __end,data
|
||||
|
||||
load32 PA(__bss_start),%r3
|
||||
load32 PA(__bss_stop),%r4
|
||||
|
|
@ -149,7 +150,11 @@ $cpu_ok:
|
|||
* everything ... it will get remapped correctly later */
|
||||
ldo 0+_PAGE_KERNEL_RWX(%r0),%r3 /* Hardwired 0 phys addr start */
|
||||
load32 (1<<(KERNEL_INITIAL_ORDER-PAGE_SHIFT)),%r11 /* PFN count */
|
||||
load32 PA(pg0),%r1
|
||||
load32 PA(_end),%r1
|
||||
SHRREG %r1,PAGE_SHIFT,%r1 /* %r1 is PFN count for _end symbol */
|
||||
cmpb,<<,n %r11,%r1,1f
|
||||
copy %r1,%r11 /* %r1 PFN count smaller than %r11 */
|
||||
1: load32 PA(pg0),%r1
|
||||
|
||||
$pgt_fill_loop:
|
||||
STREGM %r3,ASM_PTE_ENTRY_SIZE(%r1)
|
||||
|
|
|
|||
|
|
@ -120,14 +120,6 @@ void __init setup_arch(char **cmdline_p)
|
|||
#endif
|
||||
printk(KERN_CONT ".\n");
|
||||
|
||||
/*
|
||||
* Check if initial kernel page mappings are sufficient.
|
||||
* panic early if not, else we may access kernel functions
|
||||
* and variables which can't be reached.
|
||||
*/
|
||||
if (__pa((unsigned long) &_end) >= KERNEL_INITIAL_SIZE)
|
||||
panic("KERNEL_INITIAL_ORDER too small!");
|
||||
|
||||
#ifdef CONFIG_64BIT
|
||||
if(parisc_narrow_firmware) {
|
||||
printk(KERN_INFO "Kernel is using PDC in 32-bit mode.\n");
|
||||
|
|
@ -279,6 +271,18 @@ void __init start_parisc(void)
|
|||
int ret, cpunum;
|
||||
struct pdc_coproc_cfg coproc_cfg;
|
||||
|
||||
/*
|
||||
* Check if initial kernel page mapping is sufficient.
|
||||
* Print warning if not, because we may access kernel functions and
|
||||
* variables which can't be reached yet through the initial mappings.
|
||||
* Note that the panic() and printk() functions are not functional
|
||||
* yet, so we need to use direct iodc() firmware calls instead.
|
||||
*/
|
||||
const char warn1[] = "CRITICAL: Kernel may crash because "
|
||||
"KERNEL_INITIAL_ORDER is too small.\n";
|
||||
if (__pa((unsigned long) &_end) >= KERNEL_INITIAL_SIZE)
|
||||
pdc_iodc_print(warn1, sizeof(warn1) - 1);
|
||||
|
||||
/* check QEMU/SeaBIOS marker in PAGE0 */
|
||||
running_on_qemu = (memcmp(&PAGE0->pad0, "SeaBIOS", 8) == 0);
|
||||
|
||||
|
|
|
|||
|
|
@ -165,6 +165,7 @@ SECTIONS
|
|||
_end = . ;
|
||||
|
||||
STABS_DEBUG
|
||||
MODINFO
|
||||
ELF_DETAILS
|
||||
.note 0 : { *(.note) }
|
||||
|
||||
|
|
|
|||
|
|
@ -573,8 +573,8 @@ config ARCH_USING_PATCHABLE_FUNCTION_ENTRY
|
|||
depends on FUNCTION_TRACER && (PPC32 || PPC64_ELF_ABI_V2)
|
||||
depends on $(cc-option,-fpatchable-function-entry=2)
|
||||
def_bool y if PPC32
|
||||
def_bool $(success,$(srctree)/arch/powerpc/tools/gcc-check-fpatchable-function-entry.sh $(CC) -mlittle-endian) if PPC64 && CPU_LITTLE_ENDIAN
|
||||
def_bool $(success,$(srctree)/arch/powerpc/tools/gcc-check-fpatchable-function-entry.sh $(CC) -mbig-endian) if PPC64 && CPU_BIG_ENDIAN
|
||||
def_bool $(success,$(srctree)/arch/powerpc/tools/check-fpatchable-function-entry.sh $(CC) $(CLANG_FLAGS) -mlittle-endian) if PPC64 && CPU_LITTLE_ENDIAN
|
||||
def_bool $(success,$(srctree)/arch/powerpc/tools/check-fpatchable-function-entry.sh $(CC) -mbig-endian) if PPC64 && CPU_BIG_ENDIAN
|
||||
|
||||
config PPC_FTRACE_OUT_OF_LINE
|
||||
def_bool PPC64 && ARCH_USING_PATCHABLE_FUNCTION_ENTRY
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ PowerPC,8347@0 {
|
|||
};
|
||||
};
|
||||
|
||||
memory {
|
||||
memory@0 {
|
||||
device_type = "memory";
|
||||
reg = <0x00000000 0x8000000>; // 128MB at 0
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,156 +0,0 @@
|
|||
/* T4240 Interlaken LAC Portal device tree stub with 24 portals.
|
||||
*
|
||||
* Copyright 2012 Freescale Semiconductor Inc.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of Freescale Semiconductor nor the
|
||||
* names of its contributors may be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
*
|
||||
* ALTERNATIVELY, this software may be distributed under the terms of the
|
||||
* GNU General Public License ("GPL") as published by the Free Software
|
||||
* Foundation, either version 2 of that License or (at your option) any
|
||||
* later version.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor "AS IS" AND ANY
|
||||
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY
|
||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#address-cells = <0x1>;
|
||||
#size-cells = <0x1>;
|
||||
compatible = "fsl,interlaken-lac-portals";
|
||||
|
||||
lportal0: lac-portal@0 {
|
||||
compatible = "fsl,interlaken-lac-portal-v1.0";
|
||||
reg = <0x0 0x1000>;
|
||||
};
|
||||
|
||||
lportal1: lac-portal@1000 {
|
||||
compatible = "fsl,interlaken-lac-portal-v1.0";
|
||||
reg = <0x1000 0x1000>;
|
||||
};
|
||||
|
||||
lportal2: lac-portal@2000 {
|
||||
compatible = "fsl,interlaken-lac-portal-v1.0";
|
||||
reg = <0x2000 0x1000>;
|
||||
};
|
||||
|
||||
lportal3: lac-portal@3000 {
|
||||
compatible = "fsl,interlaken-lac-portal-v1.0";
|
||||
reg = <0x3000 0x1000>;
|
||||
};
|
||||
|
||||
lportal4: lac-portal@4000 {
|
||||
compatible = "fsl,interlaken-lac-portal-v1.0";
|
||||
reg = <0x4000 0x1000>;
|
||||
};
|
||||
|
||||
lportal5: lac-portal@5000 {
|
||||
compatible = "fsl,interlaken-lac-portal-v1.0";
|
||||
reg = <0x5000 0x1000>;
|
||||
};
|
||||
|
||||
lportal6: lac-portal@6000 {
|
||||
compatible = "fsl,interlaken-lac-portal-v1.0";
|
||||
reg = <0x6000 0x1000>;
|
||||
};
|
||||
|
||||
lportal7: lac-portal@7000 {
|
||||
compatible = "fsl,interlaken-lac-portal-v1.0";
|
||||
reg = <0x7000 0x1000>;
|
||||
};
|
||||
|
||||
lportal8: lac-portal@8000 {
|
||||
compatible = "fsl,interlaken-lac-portal-v1.0";
|
||||
reg = <0x8000 0x1000>;
|
||||
};
|
||||
|
||||
lportal9: lac-portal@9000 {
|
||||
compatible = "fsl,interlaken-lac-portal-v1.0";
|
||||
reg = <0x9000 0x1000>;
|
||||
};
|
||||
|
||||
lportal10: lac-portal@A000 {
|
||||
compatible = "fsl,interlaken-lac-portal-v1.0";
|
||||
reg = <0xA000 0x1000>;
|
||||
};
|
||||
|
||||
lportal11: lac-portal@B000 {
|
||||
compatible = "fsl,interlaken-lac-portal-v1.0";
|
||||
reg = <0xB000 0x1000>;
|
||||
};
|
||||
|
||||
lportal12: lac-portal@C000 {
|
||||
compatible = "fsl,interlaken-lac-portal-v1.0";
|
||||
reg = <0xC000 0x1000>;
|
||||
};
|
||||
|
||||
lportal13: lac-portal@D000 {
|
||||
compatible = "fsl,interlaken-lac-portal-v1.0";
|
||||
reg = <0xD000 0x1000>;
|
||||
};
|
||||
|
||||
lportal14: lac-portal@E000 {
|
||||
compatible = "fsl,interlaken-lac-portal-v1.0";
|
||||
reg = <0xE000 0x1000>;
|
||||
};
|
||||
|
||||
lportal15: lac-portal@F000 {
|
||||
compatible = "fsl,interlaken-lac-portal-v1.0";
|
||||
reg = <0xF000 0x1000>;
|
||||
};
|
||||
|
||||
lportal16: lac-portal@10000 {
|
||||
compatible = "fsl,interlaken-lac-portal-v1.0";
|
||||
reg = <0x10000 0x1000>;
|
||||
};
|
||||
|
||||
lportal17: lac-portal@11000 {
|
||||
compatible = "fsl,interlaken-lac-portal-v1.0";
|
||||
reg = <0x11000 0x1000>;
|
||||
};
|
||||
|
||||
lportal18: lac-portal@1200 {
|
||||
compatible = "fsl,interlaken-lac-portal-v1.0";
|
||||
reg = <0x12000 0x1000>;
|
||||
};
|
||||
|
||||
lportal19: lac-portal@13000 {
|
||||
compatible = "fsl,interlaken-lac-portal-v1.0";
|
||||
reg = <0x13000 0x1000>;
|
||||
};
|
||||
|
||||
lportal20: lac-portal@14000 {
|
||||
compatible = "fsl,interlaken-lac-portal-v1.0";
|
||||
reg = <0x14000 0x1000>;
|
||||
};
|
||||
|
||||
lportal21: lac-portal@15000 {
|
||||
compatible = "fsl,interlaken-lac-portal-v1.0";
|
||||
reg = <0x15000 0x1000>;
|
||||
};
|
||||
|
||||
lportal22: lac-portal@16000 {
|
||||
compatible = "fsl,interlaken-lac-portal-v1.0";
|
||||
reg = <0x16000 0x1000>;
|
||||
};
|
||||
|
||||
lportal23: lac-portal@17000 {
|
||||
compatible = "fsl,interlaken-lac-portal-v1.0";
|
||||
reg = <0x17000 0x1000>;
|
||||
};
|
||||
|
|
@ -1,45 +0,0 @@
|
|||
/*
|
||||
* T4 Interlaken Look-aside Controller (LAC) device tree stub
|
||||
*
|
||||
* Copyright 2012 Freescale Semiconductor Inc.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of Freescale Semiconductor nor the
|
||||
* names of its contributors may be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
*
|
||||
* ALTERNATIVELY, this software may be distributed under the terms of the
|
||||
* GNU General Public License ("GPL") as published by the Free Software
|
||||
* Foundation, either version 2 of that License or (at your option) any
|
||||
* later version.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor "AS IS" AND ANY
|
||||
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY
|
||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
lac: lac@229000 {
|
||||
compatible = "fsl,interlaken-lac";
|
||||
reg = <0x229000 0x1000>;
|
||||
interrupts = <16 2 1 18>;
|
||||
};
|
||||
|
||||
lac-hv@228000 {
|
||||
compatible = "fsl,interlaken-lac-hv";
|
||||
reg = <0x228000 0x1000>;
|
||||
fsl,non-hv-node = <&lac>;
|
||||
};
|
||||
|
|
@ -1,43 +0,0 @@
|
|||
/*
|
||||
* PQ3 MPIC Message (Group B) device tree stub [ controller @ offset 0x42400 ]
|
||||
*
|
||||
* Copyright 2012 Freescale Semiconductor Inc.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of Freescale Semiconductor nor the
|
||||
* names of its contributors may be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
*
|
||||
* ALTERNATIVELY, this software may be distributed under the terms of the
|
||||
* GNU General Public License ("GPL") as published by the Free Software
|
||||
* Foundation, either version 2 of that License or (at your option) any
|
||||
* later version.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY
|
||||
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY
|
||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
message@42400 {
|
||||
compatible = "fsl,mpic-v3.1-msgr";
|
||||
reg = <0x42400 0x200>;
|
||||
interrupts = <
|
||||
0xb4 2 0 0
|
||||
0xb5 2 0 0
|
||||
0xb6 2 0 0
|
||||
0xb7 2 0 0>;
|
||||
};
|
||||
|
|
@ -1,80 +0,0 @@
|
|||
/*
|
||||
* QorIQ FMan v3 1g port #1 device tree stub [ controller @ offset 0x400000 ]
|
||||
*
|
||||
* Copyright 2012 - 2015 Freescale Semiconductor Inc.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of Freescale Semiconductor nor the
|
||||
* names of its contributors may be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
*
|
||||
* ALTERNATIVELY, this software may be distributed under the terms of the
|
||||
* GNU General Public License ("GPL") as published by the Free Software
|
||||
* Foundation, either version 2 of that License or (at your option) any
|
||||
* later version.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY
|
||||
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY
|
||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
fman@400000 {
|
||||
fman0_rx_0x09: port@89000 {
|
||||
cell-index = <0x9>;
|
||||
compatible = "fsl,fman-v3-port-rx";
|
||||
reg = <0x89000 0x1000>;
|
||||
fsl,fman-10g-port;
|
||||
fsl,fman-best-effort-port;
|
||||
};
|
||||
|
||||
fman0_tx_0x29: port@a9000 {
|
||||
cell-index = <0x29>;
|
||||
compatible = "fsl,fman-v3-port-tx";
|
||||
reg = <0xa9000 0x1000>;
|
||||
fsl,fman-10g-port;
|
||||
fsl,fman-best-effort-port;
|
||||
};
|
||||
|
||||
ethernet@e2000 {
|
||||
cell-index = <1>;
|
||||
compatible = "fsl,fman-memac";
|
||||
reg = <0xe2000 0x1000>;
|
||||
fsl,fman-ports = <&fman0_rx_0x09 &fman0_tx_0x29>;
|
||||
ptp-timer = <&ptp_timer0>;
|
||||
pcsphy-handle = <&pcsphy1>, <&qsgmiia_pcs1>;
|
||||
pcs-handle-names = "sgmii", "qsgmii";
|
||||
};
|
||||
|
||||
mdio@e1000 {
|
||||
qsgmiia_pcs1: ethernet-pcs@1 {
|
||||
compatible = "fsl,lynx-pcs";
|
||||
reg = <1>;
|
||||
};
|
||||
};
|
||||
|
||||
mdio@e3000 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio";
|
||||
reg = <0xe3000 0x1000>;
|
||||
fsl,erratum-a011043; /* must ignore read errors */
|
||||
|
||||
pcsphy1: ethernet-phy@0 {
|
||||
reg = <0x0>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
@ -37,7 +37,7 @@ PowerPC,8308@0 {
|
|||
};
|
||||
};
|
||||
|
||||
memory {
|
||||
memory@0 {
|
||||
device_type = "memory";
|
||||
reg = <0x00000000 0x08000000>; // 128MB at 0
|
||||
};
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ PowerPC,8308@0 {
|
|||
};
|
||||
};
|
||||
|
||||
memory {
|
||||
memory@0 {
|
||||
device_type = "memory";
|
||||
reg = <0x00000000 0x08000000>; // 128MB at 0
|
||||
};
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@
|
|||
*/
|
||||
|
||||
/dts-v1/;
|
||||
#include <dt-bindings/interrupt-controller/irq.h>
|
||||
|
||||
/ {
|
||||
model = "MPC8313ERDB";
|
||||
|
|
@ -38,7 +39,7 @@ PowerPC,8313@0 {
|
|||
};
|
||||
};
|
||||
|
||||
memory {
|
||||
memory@0 {
|
||||
device_type = "memory";
|
||||
reg = <0x00000000 0x08000000>; // 128MB at 0
|
||||
};
|
||||
|
|
@ -48,7 +49,7 @@ localbus@e0005000 {
|
|||
#size-cells = <1>;
|
||||
compatible = "fsl,mpc8313-elbc", "fsl,elbc", "simple-bus";
|
||||
reg = <0xe0005000 0x1000>;
|
||||
interrupts = <77 0x8>;
|
||||
interrupts = <77 IRQ_TYPE_LEVEL_LOW>;
|
||||
interrupt-parent = <&ipic>;
|
||||
|
||||
// CS0 and CS1 are swapped when
|
||||
|
|
@ -118,7 +119,7 @@ i2c@3000 {
|
|||
cell-index = <0>;
|
||||
compatible = "fsl-i2c";
|
||||
reg = <0x3000 0x100>;
|
||||
interrupts = <14 0x8>;
|
||||
interrupts = <14 IRQ_TYPE_LEVEL_LOW>;
|
||||
interrupt-parent = <&ipic>;
|
||||
dfsrr;
|
||||
rtc@68 {
|
||||
|
|
@ -131,7 +132,7 @@ crypto@30000 {
|
|||
compatible = "fsl,sec2.2", "fsl,sec2.1",
|
||||
"fsl,sec2.0";
|
||||
reg = <0x30000 0x10000>;
|
||||
interrupts = <11 0x8>;
|
||||
interrupts = <11 IRQ_TYPE_LEVEL_LOW>;
|
||||
interrupt-parent = <&ipic>;
|
||||
fsl,num-channels = <1>;
|
||||
fsl,channel-fifo-len = <24>;
|
||||
|
|
@ -146,7 +147,7 @@ i2c@3100 {
|
|||
cell-index = <1>;
|
||||
compatible = "fsl-i2c";
|
||||
reg = <0x3100 0x100>;
|
||||
interrupts = <15 0x8>;
|
||||
interrupts = <15 IRQ_TYPE_LEVEL_LOW>;
|
||||
interrupt-parent = <&ipic>;
|
||||
dfsrr;
|
||||
};
|
||||
|
|
@ -155,7 +156,7 @@ spi@7000 {
|
|||
cell-index = <0>;
|
||||
compatible = "fsl,spi";
|
||||
reg = <0x7000 0x1000>;
|
||||
interrupts = <16 0x8>;
|
||||
interrupts = <16 IRQ_TYPE_LEVEL_LOW>;
|
||||
interrupt-parent = <&ipic>;
|
||||
mode = "cpu";
|
||||
};
|
||||
|
|
@ -167,7 +168,7 @@ usb@23000 {
|
|||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
interrupt-parent = <&ipic>;
|
||||
interrupts = <38 0x8>;
|
||||
interrupts = <38 IRQ_TYPE_LEVEL_LOW>;
|
||||
phy_type = "utmi_wide";
|
||||
sleep = <&pmc 0x00300000>;
|
||||
};
|
||||
|
|
@ -175,7 +176,8 @@ usb@23000 {
|
|||
ptp_clock@24E00 {
|
||||
compatible = "fsl,etsec-ptp";
|
||||
reg = <0x24E00 0xB0>;
|
||||
interrupts = <12 0x8 13 0x8>;
|
||||
interrupts = <12 IRQ_TYPE_LEVEL_LOW>,
|
||||
<13 IRQ_TYPE_LEVEL_LOW>;
|
||||
interrupt-parent = < &ipic >;
|
||||
fsl,tclk-period = <10>;
|
||||
fsl,tmr-prsc = <100>;
|
||||
|
|
@ -197,7 +199,9 @@ enet0: ethernet@24000 {
|
|||
compatible = "gianfar";
|
||||
reg = <0x24000 0x1000>;
|
||||
local-mac-address = [ 00 00 00 00 00 00 ];
|
||||
interrupts = <37 0x8 36 0x8 35 0x8>;
|
||||
interrupts = <37 IRQ_TYPE_LEVEL_LOW>,
|
||||
<36 IRQ_TYPE_LEVEL_LOW>,
|
||||
<35 IRQ_TYPE_LEVEL_LOW>;
|
||||
interrupt-parent = <&ipic>;
|
||||
tbi-handle = < &tbi0 >;
|
||||
/* Vitesse 7385 isn't on the MDIO bus */
|
||||
|
|
@ -211,7 +215,7 @@ mdio@520 {
|
|||
reg = <0x520 0x20>;
|
||||
phy4: ethernet-phy@4 {
|
||||
interrupt-parent = <&ipic>;
|
||||
interrupts = <20 0x8>;
|
||||
interrupts = <20 IRQ_TYPE_LEVEL_LOW>;
|
||||
reg = <0x4>;
|
||||
};
|
||||
tbi0: tbi-phy@11 {
|
||||
|
|
@ -231,7 +235,9 @@ enet1: ethernet@25000 {
|
|||
reg = <0x25000 0x1000>;
|
||||
ranges = <0x0 0x25000 0x1000>;
|
||||
local-mac-address = [ 00 00 00 00 00 00 ];
|
||||
interrupts = <34 0x8 33 0x8 32 0x8>;
|
||||
interrupts = <34 IRQ_TYPE_LEVEL_LOW>,
|
||||
<33 IRQ_TYPE_LEVEL_LOW>,
|
||||
<32 IRQ_TYPE_LEVEL_LOW>;
|
||||
interrupt-parent = <&ipic>;
|
||||
tbi-handle = < &tbi1 >;
|
||||
phy-handle = < &phy4 >;
|
||||
|
|
@ -259,7 +265,7 @@ serial0: serial@4500 {
|
|||
compatible = "fsl,ns16550", "ns16550";
|
||||
reg = <0x4500 0x100>;
|
||||
clock-frequency = <0>;
|
||||
interrupts = <9 0x8>;
|
||||
interrupts = <9 IRQ_TYPE_LEVEL_LOW>;
|
||||
interrupt-parent = <&ipic>;
|
||||
};
|
||||
|
||||
|
|
@ -269,15 +275,12 @@ serial1: serial@4600 {
|
|||
compatible = "fsl,ns16550", "ns16550";
|
||||
reg = <0x4600 0x100>;
|
||||
clock-frequency = <0>;
|
||||
interrupts = <10 0x8>;
|
||||
interrupts = <10 IRQ_TYPE_LEVEL_LOW>;
|
||||
interrupt-parent = <&ipic>;
|
||||
};
|
||||
|
||||
/* IPIC
|
||||
* interrupts cell = <intr #, sense>
|
||||
* sense values match linux IORESOURCE_IRQ_* defines:
|
||||
* sense == 8: Level, low assertion
|
||||
* sense == 2: Edge, high-to-low change
|
||||
* interrupts cell = <intr #, type>
|
||||
*/
|
||||
ipic: pic@700 {
|
||||
interrupt-controller;
|
||||
|
|
@ -290,7 +293,7 @@ ipic: pic@700 {
|
|||
pmc: power@b00 {
|
||||
compatible = "fsl,mpc8313-pmc", "fsl,mpc8349-pmc";
|
||||
reg = <0xb00 0x100 0xa00 0x100>;
|
||||
interrupts = <80 8>;
|
||||
interrupts = <80 IRQ_TYPE_LEVEL_LOW>;
|
||||
interrupt-parent = <&ipic>;
|
||||
fsl,mpc8313-wakeup-timer = <>m1>;
|
||||
|
||||
|
|
@ -306,14 +309,20 @@ pmc: power@b00 {
|
|||
gtm1: timer@500 {
|
||||
compatible = "fsl,mpc8313-gtm", "fsl,gtm";
|
||||
reg = <0x500 0x100>;
|
||||
interrupts = <90 8 78 8 84 8 72 8>;
|
||||
interrupts = <90 IRQ_TYPE_LEVEL_LOW>,
|
||||
<78 IRQ_TYPE_LEVEL_LOW>,
|
||||
<84 IRQ_TYPE_LEVEL_LOW>,
|
||||
<72 IRQ_TYPE_LEVEL_LOW>;
|
||||
interrupt-parent = <&ipic>;
|
||||
};
|
||||
|
||||
timer@600 {
|
||||
compatible = "fsl,mpc8313-gtm", "fsl,gtm";
|
||||
reg = <0x600 0x100>;
|
||||
interrupts = <91 8 79 8 85 8 73 8>;
|
||||
interrupts = <91 IRQ_TYPE_LEVEL_LOW>,
|
||||
<79 IRQ_TYPE_LEVEL_LOW>,
|
||||
<85 IRQ_TYPE_LEVEL_LOW>,
|
||||
<73 IRQ_TYPE_LEVEL_LOW>;
|
||||
interrupt-parent = <&ipic>;
|
||||
};
|
||||
};
|
||||
|
|
@ -341,7 +350,7 @@ pci0: pci@e0008500 {
|
|||
0x7800 0x0 0x0 0x3 &ipic 17 0x8
|
||||
0x7800 0x0 0x0 0x4 &ipic 18 0x8>;
|
||||
interrupt-parent = <&ipic>;
|
||||
interrupts = <66 0x8>;
|
||||
interrupts = <66 IRQ_TYPE_LEVEL_LOW>;
|
||||
bus-range = <0x0 0x0>;
|
||||
ranges = <0x02000000 0x0 0x90000000 0x90000000 0x0 0x10000000
|
||||
0x42000000 0x0 0x80000000 0x80000000 0x0 0x10000000
|
||||
|
|
@ -363,14 +372,14 @@ dma@82a8 {
|
|||
reg = <0xe00082a8 4>;
|
||||
ranges = <0 0xe0008100 0x1a8>;
|
||||
interrupt-parent = <&ipic>;
|
||||
interrupts = <71 8>;
|
||||
interrupts = <71 IRQ_TYPE_LEVEL_LOW>;
|
||||
|
||||
dma-channel@0 {
|
||||
compatible = "fsl,mpc8313-dma-channel",
|
||||
"fsl,elo-dma-channel";
|
||||
reg = <0 0x28>;
|
||||
interrupt-parent = <&ipic>;
|
||||
interrupts = <71 8>;
|
||||
interrupts = <71 IRQ_TYPE_LEVEL_LOW>;
|
||||
cell-index = <0>;
|
||||
};
|
||||
|
||||
|
|
@ -379,7 +388,7 @@ dma-channel@80 {
|
|||
"fsl,elo-dma-channel";
|
||||
reg = <0x80 0x28>;
|
||||
interrupt-parent = <&ipic>;
|
||||
interrupts = <71 8>;
|
||||
interrupts = <71 IRQ_TYPE_LEVEL_LOW>;
|
||||
cell-index = <1>;
|
||||
};
|
||||
|
||||
|
|
@ -388,7 +397,7 @@ dma-channel@100 {
|
|||
"fsl,elo-dma-channel";
|
||||
reg = <0x100 0x28>;
|
||||
interrupt-parent = <&ipic>;
|
||||
interrupts = <71 8>;
|
||||
interrupts = <71 IRQ_TYPE_LEVEL_LOW>;
|
||||
cell-index = <2>;
|
||||
};
|
||||
|
||||
|
|
@ -397,7 +406,7 @@ dma-channel@180 {
|
|||
"fsl,elo-dma-channel";
|
||||
reg = <0x180 0x28>;
|
||||
interrupt-parent = <&ipic>;
|
||||
interrupts = <71 8>;
|
||||
interrupts = <71 IRQ_TYPE_LEVEL_LOW>;
|
||||
cell-index = <3>;
|
||||
};
|
||||
};
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ PowerPC,8315@0 {
|
|||
};
|
||||
};
|
||||
|
||||
memory {
|
||||
memory@0 {
|
||||
device_type = "memory";
|
||||
reg = <0x00000000 0x08000000>; // 128MB at 0
|
||||
};
|
||||
|
|
@ -50,7 +50,7 @@ localbus@e0005000 {
|
|||
#size-cells = <1>;
|
||||
compatible = "fsl,mpc8315-elbc", "fsl,elbc", "simple-bus";
|
||||
reg = <0xe0005000 0x1000>;
|
||||
interrupts = <77 0x8>;
|
||||
interrupts = <77 IRQ_TYPE_LEVEL_LOW>;
|
||||
interrupt-parent = <&ipic>;
|
||||
|
||||
// CS0 and CS1 are swapped when
|
||||
|
|
@ -112,7 +112,7 @@ i2c@3000 {
|
|||
cell-index = <0>;
|
||||
compatible = "fsl-i2c";
|
||||
reg = <0x3000 0x100>;
|
||||
interrupts = <14 0x8>;
|
||||
interrupts = <14 IRQ_TYPE_LEVEL_LOW>;
|
||||
interrupt-parent = <&ipic>;
|
||||
dfsrr;
|
||||
rtc@68 {
|
||||
|
|
@ -133,8 +133,10 @@ spi@7000 {
|
|||
cell-index = <0>;
|
||||
compatible = "fsl,spi";
|
||||
reg = <0x7000 0x1000>;
|
||||
interrupts = <16 0x8>;
|
||||
interrupts = <16 IRQ_TYPE_LEVEL_LOW>;
|
||||
interrupt-parent = <&ipic>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
mode = "cpu";
|
||||
};
|
||||
|
||||
|
|
@ -145,35 +147,35 @@ dma@82a8 {
|
|||
reg = <0x82a8 4>;
|
||||
ranges = <0 0x8100 0x1a8>;
|
||||
interrupt-parent = <&ipic>;
|
||||
interrupts = <71 8>;
|
||||
interrupts = <71 IRQ_TYPE_LEVEL_LOW>;
|
||||
cell-index = <0>;
|
||||
dma-channel@0 {
|
||||
compatible = "fsl,mpc8315-dma-channel", "fsl,elo-dma-channel";
|
||||
reg = <0 0x80>;
|
||||
cell-index = <0>;
|
||||
interrupt-parent = <&ipic>;
|
||||
interrupts = <71 8>;
|
||||
interrupts = <71 IRQ_TYPE_LEVEL_LOW>;
|
||||
};
|
||||
dma-channel@80 {
|
||||
compatible = "fsl,mpc8315-dma-channel", "fsl,elo-dma-channel";
|
||||
reg = <0x80 0x80>;
|
||||
cell-index = <1>;
|
||||
interrupt-parent = <&ipic>;
|
||||
interrupts = <71 8>;
|
||||
interrupts = <71 IRQ_TYPE_LEVEL_LOW>;
|
||||
};
|
||||
dma-channel@100 {
|
||||
compatible = "fsl,mpc8315-dma-channel", "fsl,elo-dma-channel";
|
||||
reg = <0x100 0x80>;
|
||||
cell-index = <2>;
|
||||
interrupt-parent = <&ipic>;
|
||||
interrupts = <71 8>;
|
||||
interrupts = <71 IRQ_TYPE_LEVEL_LOW>;
|
||||
};
|
||||
dma-channel@180 {
|
||||
compatible = "fsl,mpc8315-dma-channel", "fsl,elo-dma-channel";
|
||||
reg = <0x180 0x28>;
|
||||
cell-index = <3>;
|
||||
interrupt-parent = <&ipic>;
|
||||
interrupts = <71 8>;
|
||||
interrupts = <71 IRQ_TYPE_LEVEL_LOW>;
|
||||
};
|
||||
};
|
||||
|
||||
|
|
@ -183,7 +185,7 @@ usb@23000 {
|
|||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
interrupt-parent = <&ipic>;
|
||||
interrupts = <38 0x8>;
|
||||
interrupts = <38 IRQ_TYPE_LEVEL_LOW>;
|
||||
phy_type = "utmi";
|
||||
};
|
||||
|
||||
|
|
@ -197,7 +199,9 @@ enet0: ethernet@24000 {
|
|||
reg = <0x24000 0x1000>;
|
||||
ranges = <0x0 0x24000 0x1000>;
|
||||
local-mac-address = [ 00 00 00 00 00 00 ];
|
||||
interrupts = <32 0x8 33 0x8 34 0x8>;
|
||||
interrupts = <32 IRQ_TYPE_LEVEL_LOW>,
|
||||
<33 IRQ_TYPE_LEVEL_LOW>,
|
||||
<34 IRQ_TYPE_LEVEL_LOW>;
|
||||
interrupt-parent = <&ipic>;
|
||||
tbi-handle = <&tbi0>;
|
||||
phy-handle = < &phy0 >;
|
||||
|
|
@ -238,7 +242,9 @@ enet1: ethernet@25000 {
|
|||
reg = <0x25000 0x1000>;
|
||||
ranges = <0x0 0x25000 0x1000>;
|
||||
local-mac-address = [ 00 00 00 00 00 00 ];
|
||||
interrupts = <35 0x8 36 0x8 37 0x8>;
|
||||
interrupts = <35 IRQ_TYPE_LEVEL_LOW>,
|
||||
<36 IRQ_TYPE_LEVEL_LOW>,
|
||||
<37 IRQ_TYPE_LEVEL_LOW>;
|
||||
interrupt-parent = <&ipic>;
|
||||
tbi-handle = <&tbi1>;
|
||||
phy-handle = < &phy1 >;
|
||||
|
|
@ -263,7 +269,7 @@ serial0: serial@4500 {
|
|||
compatible = "fsl,ns16550", "ns16550";
|
||||
reg = <0x4500 0x100>;
|
||||
clock-frequency = <133333333>;
|
||||
interrupts = <9 0x8>;
|
||||
interrupts = <9 IRQ_TYPE_LEVEL_LOW>;
|
||||
interrupt-parent = <&ipic>;
|
||||
};
|
||||
|
||||
|
|
@ -273,7 +279,7 @@ serial1: serial@4600 {
|
|||
compatible = "fsl,ns16550", "ns16550";
|
||||
reg = <0x4600 0x100>;
|
||||
clock-frequency = <133333333>;
|
||||
interrupts = <10 0x8>;
|
||||
interrupts = <10 IRQ_TYPE_LEVEL_LOW>;
|
||||
interrupt-parent = <&ipic>;
|
||||
};
|
||||
|
||||
|
|
@ -282,7 +288,7 @@ crypto@30000 {
|
|||
"fsl,sec2.4", "fsl,sec2.2", "fsl,sec2.1",
|
||||
"fsl,sec2.0";
|
||||
reg = <0x30000 0x10000>;
|
||||
interrupts = <11 0x8>;
|
||||
interrupts = <11 IRQ_TYPE_LEVEL_LOW>;
|
||||
interrupt-parent = <&ipic>;
|
||||
fsl,num-channels = <4>;
|
||||
fsl,channel-fifo-len = <24>;
|
||||
|
|
@ -294,7 +300,7 @@ sata@18000 {
|
|||
compatible = "fsl,mpc8315-sata", "fsl,pq-sata";
|
||||
reg = <0x18000 0x1000>;
|
||||
cell-index = <1>;
|
||||
interrupts = <44 0x8>;
|
||||
interrupts = <44 IRQ_TYPE_LEVEL_LOW>;
|
||||
interrupt-parent = <&ipic>;
|
||||
};
|
||||
|
||||
|
|
@ -302,14 +308,17 @@ sata@19000 {
|
|||
compatible = "fsl,mpc8315-sata", "fsl,pq-sata";
|
||||
reg = <0x19000 0x1000>;
|
||||
cell-index = <2>;
|
||||
interrupts = <45 0x8>;
|
||||
interrupts = <45 IRQ_TYPE_LEVEL_LOW>;
|
||||
interrupt-parent = <&ipic>;
|
||||
};
|
||||
|
||||
gtm1: timer@500 {
|
||||
compatible = "fsl,mpc8315-gtm", "fsl,gtm";
|
||||
reg = <0x500 0x100>;
|
||||
interrupts = <90 8 78 8 84 8 72 8>;
|
||||
interrupts = <90 IRQ_TYPE_LEVEL_LOW>,
|
||||
<78 IRQ_TYPE_LEVEL_LOW>,
|
||||
<84 IRQ_TYPE_LEVEL_LOW>,
|
||||
<72 IRQ_TYPE_LEVEL_LOW>;
|
||||
interrupt-parent = <&ipic>;
|
||||
clock-frequency = <133333333>;
|
||||
};
|
||||
|
|
@ -317,16 +326,16 @@ gtm1: timer@500 {
|
|||
timer@600 {
|
||||
compatible = "fsl,mpc8315-gtm", "fsl,gtm";
|
||||
reg = <0x600 0x100>;
|
||||
interrupts = <91 8 79 8 85 8 73 8>;
|
||||
interrupts = <91 IRQ_TYPE_LEVEL_LOW>,
|
||||
<79 IRQ_TYPE_LEVEL_LOW>,
|
||||
<85 IRQ_TYPE_LEVEL_LOW>,
|
||||
<73 IRQ_TYPE_LEVEL_LOW>;
|
||||
interrupt-parent = <&ipic>;
|
||||
clock-frequency = <133333333>;
|
||||
};
|
||||
|
||||
/* IPIC
|
||||
* interrupts cell = <intr #, sense>
|
||||
* sense values match linux IORESOURCE_IRQ_* defines:
|
||||
* sense == 8: Level, low assertion
|
||||
* sense == 2: Edge, high-to-low change
|
||||
* interrupts cell = <intr #, type>
|
||||
*/
|
||||
ipic: interrupt-controller@700 {
|
||||
interrupt-controller;
|
||||
|
|
@ -340,14 +349,14 @@ ipic-msi@7c0 {
|
|||
compatible = "fsl,ipic-msi";
|
||||
reg = <0x7c0 0x40>;
|
||||
msi-available-ranges = <0 0x100>;
|
||||
interrupts = <0x43 0x8
|
||||
0x4 0x8
|
||||
0x51 0x8
|
||||
0x52 0x8
|
||||
0x56 0x8
|
||||
0x57 0x8
|
||||
0x58 0x8
|
||||
0x59 0x8>;
|
||||
interrupts = <0x43 IRQ_TYPE_LEVEL_LOW
|
||||
0x4 IRQ_TYPE_LEVEL_LOW
|
||||
0x51 IRQ_TYPE_LEVEL_LOW
|
||||
0x52 IRQ_TYPE_LEVEL_LOW
|
||||
0x56 IRQ_TYPE_LEVEL_LOW
|
||||
0x57 IRQ_TYPE_LEVEL_LOW
|
||||
0x58 IRQ_TYPE_LEVEL_LOW
|
||||
0x59 IRQ_TYPE_LEVEL_LOW>;
|
||||
interrupt-parent = < &ipic >;
|
||||
};
|
||||
|
||||
|
|
@ -355,7 +364,7 @@ pmc: power@b00 {
|
|||
compatible = "fsl,mpc8315-pmc", "fsl,mpc8313-pmc",
|
||||
"fsl,mpc8349-pmc";
|
||||
reg = <0xb00 0x100 0xa00 0x100>;
|
||||
interrupts = <80 8>;
|
||||
interrupts = <80 IRQ_TYPE_LEVEL_LOW>;
|
||||
interrupt-parent = <&ipic>;
|
||||
fsl,mpc8313-wakeup-timer = <>m1>;
|
||||
};
|
||||
|
|
@ -374,24 +383,24 @@ pci0: pci@e0008500 {
|
|||
interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
|
||||
interrupt-map = <
|
||||
/* IDSEL 0x0E -mini PCI */
|
||||
0x7000 0x0 0x0 0x1 &ipic 18 0x8
|
||||
0x7000 0x0 0x0 0x2 &ipic 18 0x8
|
||||
0x7000 0x0 0x0 0x3 &ipic 18 0x8
|
||||
0x7000 0x0 0x0 0x4 &ipic 18 0x8
|
||||
0x7000 0x0 0x0 0x1 &ipic 18 IRQ_TYPE_LEVEL_LOW
|
||||
0x7000 0x0 0x0 0x2 &ipic 18 IRQ_TYPE_LEVEL_LOW
|
||||
0x7000 0x0 0x0 0x3 &ipic 18 IRQ_TYPE_LEVEL_LOW
|
||||
0x7000 0x0 0x0 0x4 &ipic 18 IRQ_TYPE_LEVEL_LOW
|
||||
|
||||
/* IDSEL 0x0F -mini PCI */
|
||||
0x7800 0x0 0x0 0x1 &ipic 17 0x8
|
||||
0x7800 0x0 0x0 0x2 &ipic 17 0x8
|
||||
0x7800 0x0 0x0 0x3 &ipic 17 0x8
|
||||
0x7800 0x0 0x0 0x4 &ipic 17 0x8
|
||||
0x7800 0x0 0x0 0x1 &ipic 17 IRQ_TYPE_LEVEL_LOW
|
||||
0x7800 0x0 0x0 0x2 &ipic 17 IRQ_TYPE_LEVEL_LOW
|
||||
0x7800 0x0 0x0 0x3 &ipic 17 IRQ_TYPE_LEVEL_LOW
|
||||
0x7800 0x0 0x0 0x4 &ipic 17 IRQ_TYPE_LEVEL_LOW
|
||||
|
||||
/* IDSEL 0x10 - PCI slot */
|
||||
0x8000 0x0 0x0 0x1 &ipic 48 0x8
|
||||
0x8000 0x0 0x0 0x2 &ipic 17 0x8
|
||||
0x8000 0x0 0x0 0x3 &ipic 48 0x8
|
||||
0x8000 0x0 0x0 0x4 &ipic 17 0x8>;
|
||||
0x8000 0x0 0x0 0x1 &ipic 48 IRQ_TYPE_LEVEL_LOW
|
||||
0x8000 0x0 0x0 0x2 &ipic 17 IRQ_TYPE_LEVEL_LOW
|
||||
0x8000 0x0 0x0 0x3 &ipic 48 IRQ_TYPE_LEVEL_LOW
|
||||
0x8000 0x0 0x0 0x4 &ipic 17 IRQ_TYPE_LEVEL_LOW>;
|
||||
interrupt-parent = <&ipic>;
|
||||
interrupts = <66 0x8>;
|
||||
interrupts = <66 IRQ_TYPE_LEVEL_LOW>;
|
||||
bus-range = <0x0 0x0>;
|
||||
ranges = <0x02000000 0 0x90000000 0x90000000 0 0x10000000
|
||||
0x42000000 0 0x80000000 0x80000000 0 0x10000000
|
||||
|
|
@ -417,10 +426,10 @@ pci1: pcie@e0009000 {
|
|||
0x01000000 0 0x00000000 0xb1000000 0 0x00800000>;
|
||||
bus-range = <0 255>;
|
||||
interrupt-map-mask = <0xf800 0 0 7>;
|
||||
interrupt-map = <0 0 0 1 &ipic 1 8
|
||||
0 0 0 2 &ipic 1 8
|
||||
0 0 0 3 &ipic 1 8
|
||||
0 0 0 4 &ipic 1 8>;
|
||||
interrupt-map = <0 0 0 1 &ipic 1 IRQ_TYPE_LEVEL_LOW
|
||||
0 0 0 2 &ipic 1 IRQ_TYPE_LEVEL_LOW
|
||||
0 0 0 3 &ipic 1 IRQ_TYPE_LEVEL_LOW
|
||||
0 0 0 4 &ipic 1 IRQ_TYPE_LEVEL_LOW>;
|
||||
clock-frequency = <0>;
|
||||
|
||||
pcie@0 {
|
||||
|
|
@ -448,10 +457,10 @@ pci2: pcie@e000a000 {
|
|||
0x01000000 0 0x00000000 0xd1000000 0 0x00800000>;
|
||||
bus-range = <0 255>;
|
||||
interrupt-map-mask = <0xf800 0 0 7>;
|
||||
interrupt-map = <0 0 0 1 &ipic 2 8
|
||||
0 0 0 2 &ipic 2 8
|
||||
0 0 0 3 &ipic 2 8
|
||||
0 0 0 4 &ipic 2 8>;
|
||||
interrupt-map = <0 0 0 1 &ipic 2 IRQ_TYPE_LEVEL_LOW
|
||||
0 0 0 2 &ipic 2 IRQ_TYPE_LEVEL_LOW
|
||||
0 0 0 3 &ipic 2 IRQ_TYPE_LEVEL_LOW
|
||||
0 0 0 4 &ipic 2 IRQ_TYPE_LEVEL_LOW>;
|
||||
clock-frequency = <0>;
|
||||
|
||||
pcie@0 {
|
||||
|
|
@ -471,12 +480,12 @@ pcie@0 {
|
|||
leds {
|
||||
compatible = "gpio-leds";
|
||||
|
||||
pwr {
|
||||
led-pwr {
|
||||
gpios = <&mcu_pio 0 0>;
|
||||
default-state = "on";
|
||||
};
|
||||
|
||||
hdd {
|
||||
led-hdd {
|
||||
gpios = <&mcu_pio 1 0>;
|
||||
linux,default-trigger = "disk-activity";
|
||||
};
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ PowerPC,8323@0 {
|
|||
};
|
||||
};
|
||||
|
||||
memory {
|
||||
memory@0 {
|
||||
device_type = "memory";
|
||||
reg = <0x00000000 0x04000000>;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ PowerPC,8349@0 {
|
|||
};
|
||||
};
|
||||
|
||||
memory {
|
||||
memory@0 {
|
||||
device_type = "memory";
|
||||
reg = <0x00000000 0x10000000>;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ PowerPC,8349@0 {
|
|||
};
|
||||
};
|
||||
|
||||
memory {
|
||||
memory@0 {
|
||||
device_type = "memory";
|
||||
reg = <0x00000000 0x10000000>;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ PowerPC,8377@0 {
|
|||
};
|
||||
};
|
||||
|
||||
memory {
|
||||
memory@0 {
|
||||
device_type = "memory";
|
||||
reg = <0x00000000 0x10000000>; // 256MB at 0
|
||||
};
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ PowerPC,8377@0 {
|
|||
};
|
||||
};
|
||||
|
||||
memory {
|
||||
memory@0 {
|
||||
device_type = "memory";
|
||||
reg = <0x00000000 0x20000000>; // 512MB at 0
|
||||
};
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ PowerPC,8378@0 {
|
|||
};
|
||||
};
|
||||
|
||||
memory {
|
||||
memory@0 {
|
||||
device_type = "memory";
|
||||
reg = <0x00000000 0x10000000>; // 256MB at 0
|
||||
};
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ PowerPC,8379@0 {
|
|||
};
|
||||
};
|
||||
|
||||
memory {
|
||||
memory@0 {
|
||||
device_type = "memory";
|
||||
reg = <0x00000000 0x10000000>; // 256MB at 0
|
||||
};
|
||||
|
|
|
|||
|
|
@ -120,10 +120,8 @@
|
|||
|
||||
#if defined(CONFIG_44x)
|
||||
#include <asm/nohash/32/pte-44x.h>
|
||||
#elif defined(CONFIG_PPC_85xx) && defined(CONFIG_PTE_64BIT)
|
||||
#include <asm/nohash/pte-e500.h>
|
||||
#elif defined(CONFIG_PPC_85xx)
|
||||
#include <asm/nohash/32/pte-85xx.h>
|
||||
#include <asm/nohash/pte-e500.h>
|
||||
#elif defined(CONFIG_PPC_8xx)
|
||||
#include <asm/nohash/32/pte-8xx.h>
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -1,59 +0,0 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
#ifndef _ASM_POWERPC_NOHASH_32_PTE_85xx_H
|
||||
#define _ASM_POWERPC_NOHASH_32_PTE_85xx_H
|
||||
#ifdef __KERNEL__
|
||||
|
||||
/* PTE bit definitions for Freescale BookE SW loaded TLB MMU based
|
||||
* processors
|
||||
*
|
||||
MMU Assist Register 3:
|
||||
|
||||
32 33 34 35 36 ... 50 51 52 53 54 55 56 57 58 59 60 61 62 63
|
||||
RPN...................... 0 0 U0 U1 U2 U3 UX SX UW SW UR SR
|
||||
|
||||
- PRESENT *must* be in the bottom two bits because swap PTEs use
|
||||
the top 30 bits.
|
||||
|
||||
*/
|
||||
|
||||
/* Definitions for FSL Book-E Cores */
|
||||
#define _PAGE_READ 0x00001 /* H: Read permission (SR) */
|
||||
#define _PAGE_PRESENT 0x00002 /* S: PTE contains a translation */
|
||||
#define _PAGE_WRITE 0x00004 /* S: Write permission (SW) */
|
||||
#define _PAGE_DIRTY 0x00008 /* S: Page dirty */
|
||||
#define _PAGE_EXEC 0x00010 /* H: SX permission */
|
||||
#define _PAGE_ACCESSED 0x00020 /* S: Page referenced */
|
||||
|
||||
#define _PAGE_ENDIAN 0x00040 /* H: E bit */
|
||||
#define _PAGE_GUARDED 0x00080 /* H: G bit */
|
||||
#define _PAGE_COHERENT 0x00100 /* H: M bit */
|
||||
#define _PAGE_NO_CACHE 0x00200 /* H: I bit */
|
||||
#define _PAGE_WRITETHRU 0x00400 /* H: W bit */
|
||||
#define _PAGE_SPECIAL 0x00800 /* S: Special page */
|
||||
|
||||
#define _PMD_PRESENT 0
|
||||
#define _PMD_PRESENT_MASK (PAGE_MASK)
|
||||
#define _PMD_BAD (~PAGE_MASK)
|
||||
#define _PMD_USER 0
|
||||
|
||||
#define _PTE_NONE_MASK 0
|
||||
|
||||
#define PTE_WIMGE_SHIFT (6)
|
||||
|
||||
/*
|
||||
* We define 2 sets of base prot bits, one for basic pages (ie,
|
||||
* cacheable kernel and user pages) and one for non cacheable
|
||||
* pages. We always set _PAGE_COHERENT when SMP is enabled or
|
||||
* the processor might need it for DMA coherency.
|
||||
*/
|
||||
#define _PAGE_BASE_NC (_PAGE_PRESENT | _PAGE_ACCESSED)
|
||||
#if defined(CONFIG_SMP) || defined(CONFIG_PPC_E500MC)
|
||||
#define _PAGE_BASE (_PAGE_BASE_NC | _PAGE_COHERENT)
|
||||
#else
|
||||
#define _PAGE_BASE (_PAGE_BASE_NC)
|
||||
#endif
|
||||
|
||||
#include <asm/pgtable-masks.h>
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* _ASM_POWERPC_NOHASH_32_PTE_FSL_85xx_H */
|
||||
|
|
@ -49,7 +49,7 @@ static inline unsigned long pud_val(pud_t x)
|
|||
#endif /* CONFIG_PPC64 */
|
||||
|
||||
/* PGD level */
|
||||
#if defined(CONFIG_PPC_85xx) && defined(CONFIG_PTE_64BIT)
|
||||
#if defined(CONFIG_PPC_85xx)
|
||||
typedef struct { unsigned long long pgd; } pgd_t;
|
||||
|
||||
static inline unsigned long long pgd_val(pgd_t x)
|
||||
|
|
|
|||
|
|
@ -15,6 +15,9 @@
|
|||
#define TASK_SIZE_MAX TASK_SIZE_USER64
|
||||
#endif
|
||||
|
||||
/* Threshold above which VMX copy path is used */
|
||||
#define VMX_COPY_THRESHOLD 3328
|
||||
|
||||
#include <asm-generic/access_ok.h>
|
||||
|
||||
/*
|
||||
|
|
@ -255,7 +258,7 @@ __gus_failed: \
|
|||
".section .fixup,\"ax\"\n" \
|
||||
"4: li %0,%3\n" \
|
||||
" li %1,0\n" \
|
||||
" li %1+1,0\n" \
|
||||
" li %L1,0\n" \
|
||||
" b 3b\n" \
|
||||
".previous\n" \
|
||||
EX_TABLE(1b, 4b) \
|
||||
|
|
@ -326,40 +329,62 @@ do { \
|
|||
extern unsigned long __copy_tofrom_user(void __user *to,
|
||||
const void __user *from, unsigned long size);
|
||||
|
||||
#ifdef __powerpc64__
|
||||
unsigned long __copy_tofrom_user_base(void __user *to,
|
||||
const void __user *from, unsigned long size);
|
||||
|
||||
unsigned long __copy_tofrom_user_power7_vmx(void __user *to,
|
||||
const void __user *from, unsigned long size);
|
||||
|
||||
static __always_inline bool will_use_vmx(unsigned long n)
|
||||
{
|
||||
return IS_ENABLED(CONFIG_ALTIVEC) && cpu_has_feature(CPU_FTR_VMX_COPY) &&
|
||||
n > VMX_COPY_THRESHOLD;
|
||||
}
|
||||
|
||||
static __always_inline unsigned long
|
||||
raw_copy_tofrom_user(void __user *to, const void __user *from,
|
||||
unsigned long n, unsigned long dir)
|
||||
{
|
||||
unsigned long ret;
|
||||
|
||||
if (will_use_vmx(n) && enter_vmx_usercopy()) {
|
||||
allow_user_access(to, dir);
|
||||
ret = __copy_tofrom_user_power7_vmx(to, from, n);
|
||||
prevent_user_access(dir);
|
||||
exit_vmx_usercopy();
|
||||
|
||||
if (unlikely(ret)) {
|
||||
allow_user_access(to, dir);
|
||||
ret = __copy_tofrom_user_base(to, from, n);
|
||||
prevent_user_access(dir);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
allow_user_access(to, dir);
|
||||
ret = __copy_tofrom_user(to, from, n);
|
||||
prevent_user_access(dir);
|
||||
return ret;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PPC64
|
||||
static inline unsigned long
|
||||
raw_copy_in_user(void __user *to, const void __user *from, unsigned long n)
|
||||
{
|
||||
unsigned long ret;
|
||||
|
||||
barrier_nospec();
|
||||
allow_user_access(to, KUAP_READ_WRITE);
|
||||
ret = __copy_tofrom_user(to, from, n);
|
||||
prevent_user_access(KUAP_READ_WRITE);
|
||||
return ret;
|
||||
return raw_copy_tofrom_user(to, from, n, KUAP_READ_WRITE);
|
||||
}
|
||||
#endif /* __powerpc64__ */
|
||||
#endif /* CONFIG_PPC64 */
|
||||
|
||||
static inline unsigned long raw_copy_from_user(void *to,
|
||||
const void __user *from, unsigned long n)
|
||||
static inline unsigned long raw_copy_from_user(void *to, const void __user *from, unsigned long n)
|
||||
{
|
||||
unsigned long ret;
|
||||
|
||||
allow_user_access(NULL, KUAP_READ);
|
||||
ret = __copy_tofrom_user((__force void __user *)to, from, n);
|
||||
prevent_user_access(KUAP_READ);
|
||||
return ret;
|
||||
return raw_copy_tofrom_user((__force void __user *)to, from, n, KUAP_READ);
|
||||
}
|
||||
|
||||
static inline unsigned long
|
||||
raw_copy_to_user(void __user *to, const void *from, unsigned long n)
|
||||
{
|
||||
unsigned long ret;
|
||||
|
||||
allow_user_access(to, KUAP_WRITE);
|
||||
ret = __copy_tofrom_user(to, (__force const void __user *)from, n);
|
||||
prevent_user_access(KUAP_WRITE);
|
||||
return ret;
|
||||
return raw_copy_tofrom_user(to, (__force const void __user *)from, n, KUAP_WRITE);
|
||||
}
|
||||
|
||||
unsigned long __arch_clear_user(void __user *addr, unsigned long size);
|
||||
|
|
|
|||
|
|
@ -305,7 +305,6 @@ set_ivor:
|
|||
* r12 is pointer to the pte
|
||||
* r10 is the pshift from the PGD, if we're a hugepage
|
||||
*/
|
||||
#ifdef CONFIG_PTE_64BIT
|
||||
#ifdef CONFIG_HUGETLB_PAGE
|
||||
#define FIND_PTE \
|
||||
rlwinm r12, r13, 14, 18, 28; /* Compute pgdir/pmd offset */ \
|
||||
|
|
@ -329,15 +328,6 @@ set_ivor:
|
|||
rlwimi r12, r13, 23, 20, 28; /* Compute pte address */ \
|
||||
lwz r11, 4(r12); /* Get pte entry */
|
||||
#endif /* HUGEPAGE */
|
||||
#else /* !PTE_64BIT */
|
||||
#define FIND_PTE \
|
||||
rlwimi r11, r13, 12, 20, 29; /* Create L1 (pgdir/pmd) address */ \
|
||||
lwz r11, 0(r11); /* Get L1 entry */ \
|
||||
rlwinm. r12, r11, 0, 0, 19; /* Extract L2 (pte) base address */ \
|
||||
beq 2f; /* Bail if no table */ \
|
||||
rlwimi r12, r13, 22, 20, 29; /* Compute PTE address */ \
|
||||
lwz r11, 0(r12); /* Get Linux PTE */
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Interrupt vector entry code
|
||||
|
|
@ -473,21 +463,15 @@ END_BTB_FLUSH_SECTION
|
|||
4:
|
||||
FIND_PTE
|
||||
|
||||
#ifdef CONFIG_PTE_64BIT
|
||||
li r13,_PAGE_PRESENT|_PAGE_BAP_SR
|
||||
oris r13,r13,_PAGE_ACCESSED@h
|
||||
#else
|
||||
li r13,_PAGE_PRESENT|_PAGE_READ|_PAGE_ACCESSED
|
||||
#endif
|
||||
andc. r13,r13,r11 /* Check permission */
|
||||
|
||||
#ifdef CONFIG_PTE_64BIT
|
||||
#ifdef CONFIG_SMP
|
||||
subf r13,r11,r12 /* create false data dep */
|
||||
lwzx r13,r11,r13 /* Get upper pte bits */
|
||||
#else
|
||||
lwz r13,0(r12) /* Get upper pte bits */
|
||||
#endif
|
||||
#endif
|
||||
|
||||
bne 2f /* Bail if permission/valid mismatch */
|
||||
|
|
@ -552,12 +536,8 @@ END_BTB_FLUSH_SECTION
|
|||
|
||||
FIND_PTE
|
||||
/* Make up the required permissions for kernel code */
|
||||
#ifdef CONFIG_PTE_64BIT
|
||||
li r13,_PAGE_PRESENT | _PAGE_BAP_SX
|
||||
oris r13,r13,_PAGE_ACCESSED@h
|
||||
#else
|
||||
li r13,_PAGE_PRESENT | _PAGE_ACCESSED | _PAGE_EXEC
|
||||
#endif
|
||||
b 4f
|
||||
|
||||
/* Get the PGD for the current thread */
|
||||
|
|
@ -573,23 +553,17 @@ END_BTB_FLUSH_SECTION
|
|||
|
||||
FIND_PTE
|
||||
/* Make up the required permissions for user code */
|
||||
#ifdef CONFIG_PTE_64BIT
|
||||
li r13,_PAGE_PRESENT | _PAGE_BAP_UX
|
||||
oris r13,r13,_PAGE_ACCESSED@h
|
||||
#else
|
||||
li r13,_PAGE_PRESENT | _PAGE_ACCESSED | _PAGE_EXEC
|
||||
#endif
|
||||
|
||||
4:
|
||||
andc. r13,r13,r11 /* Check permission */
|
||||
|
||||
#ifdef CONFIG_PTE_64BIT
|
||||
#ifdef CONFIG_SMP
|
||||
subf r13,r11,r12 /* create false data dep */
|
||||
lwzx r13,r11,r13 /* Get upper pte bits */
|
||||
#else
|
||||
lwz r13,0(r12) /* Get upper pte bits */
|
||||
#endif
|
||||
#endif
|
||||
|
||||
bne 2f /* Bail if permission mismatch */
|
||||
|
|
@ -683,7 +657,7 @@ interrupt_end:
|
|||
* r10 - tsize encoding (if HUGETLB_PAGE) or available to use
|
||||
* r11 - TLB (info from Linux PTE)
|
||||
* r12 - available to use
|
||||
* r13 - upper bits of PTE (if PTE_64BIT) or available to use
|
||||
* r13 - upper bits of PTE
|
||||
* CR5 - results of addr >= PAGE_OFFSET
|
||||
* MAS0, MAS1 - loaded with proper value when we get here
|
||||
* MAS2, MAS3 - will need additional info from Linux PTE
|
||||
|
|
@ -751,7 +725,6 @@ finish_tlb_load:
|
|||
* here we (properly should) assume have the appropriate value.
|
||||
*/
|
||||
finish_tlb_load_cont:
|
||||
#ifdef CONFIG_PTE_64BIT
|
||||
rlwinm r12, r11, 32-2, 26, 31 /* Move in perm bits */
|
||||
andi. r10, r11, _PAGE_DIRTY
|
||||
bne 1f
|
||||
|
|
@ -764,26 +737,9 @@ BEGIN_MMU_FTR_SECTION
|
|||
srwi r10, r13, 12 /* grab RPN[12:31] */
|
||||
mtspr SPRN_MAS7, r10
|
||||
END_MMU_FTR_SECTION_IFSET(MMU_FTR_BIG_PHYS)
|
||||
#else
|
||||
li r10, (_PAGE_EXEC | _PAGE_READ)
|
||||
mr r13, r11
|
||||
rlwimi r10, r11, 31, 29, 29 /* extract _PAGE_DIRTY into SW */
|
||||
and r12, r11, r10
|
||||
mcrf cr0, cr5 /* Test for user page */
|
||||
slwi r10, r12, 1
|
||||
or r10, r10, r12
|
||||
rlwinm r10, r10, 0, ~_PAGE_EXEC /* Clear SX on user pages */
|
||||
isellt r12, r10, r12
|
||||
rlwimi r13, r12, 0, 20, 31 /* Get RPN from PTE, merge w/ perms */
|
||||
mtspr SPRN_MAS3, r13
|
||||
#endif
|
||||
|
||||
mfspr r12, SPRN_MAS2
|
||||
#ifdef CONFIG_PTE_64BIT
|
||||
rlwimi r12, r11, 32-19, 27, 31 /* extract WIMGE from pte */
|
||||
#else
|
||||
rlwimi r12, r11, 26, 27, 31 /* extract WIMGE from pte */
|
||||
#endif
|
||||
#ifdef CONFIG_HUGETLB_PAGE
|
||||
beq 6, 3f /* don't mask if page isn't huge */
|
||||
li r13, 1
|
||||
|
|
|
|||
|
|
@ -1159,7 +1159,7 @@ spapr_tce_platform_iommu_attach_dev(struct iommu_domain *platform_domain,
|
|||
struct device *dev,
|
||||
struct iommu_domain *old)
|
||||
{
|
||||
struct iommu_domain *domain = iommu_get_domain_for_dev(dev);
|
||||
struct iommu_domain *domain = iommu_driver_get_domain_for_dev(dev);
|
||||
struct iommu_table_group *table_group;
|
||||
struct iommu_group *grp;
|
||||
|
||||
|
|
|
|||
|
|
@ -212,6 +212,13 @@ struct pci_dev *of_create_pci_dev(struct device_node *node,
|
|||
dev->error_state = pci_channel_io_normal;
|
||||
dev->dma_mask = 0xffffffff;
|
||||
|
||||
/*
|
||||
* Assume 64-bit addresses for MSI initially. Will be changed to 32-bit
|
||||
* if MSI (rather than MSI-X) capability does not have
|
||||
* PCI_MSI_FLAGS_64BIT. Can also be overridden by driver.
|
||||
*/
|
||||
dev->msi_addr_mask = DMA_BIT_MASK(64);
|
||||
|
||||
/* Early fixups, before probing the BARs */
|
||||
pci_fixup_device(pci_fixup_early, dev);
|
||||
|
||||
|
|
|
|||
|
|
@ -2893,7 +2893,8 @@ static void __init fixup_device_tree_pmac(void)
|
|||
for (node = 0; prom_next_node(&node); ) {
|
||||
type[0] = '\0';
|
||||
prom_getprop(node, "device_type", type, sizeof(type));
|
||||
if (prom_strcmp(type, "escc") && prom_strcmp(type, "i2s"))
|
||||
if (prom_strcmp(type, "escc") && prom_strcmp(type, "i2s") &&
|
||||
prom_strcmp(type, "media-bay"))
|
||||
continue;
|
||||
|
||||
if (prom_getproplen(node, "#size-cells") != PROM_ERROR)
|
||||
|
|
|
|||
|
|
@ -35,7 +35,6 @@
|
|||
#include <linux/of_irq.h>
|
||||
#include <linux/hugetlb.h>
|
||||
#include <linux/pgtable.h>
|
||||
#include <asm/kexec.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/paca.h>
|
||||
#include <asm/processor.h>
|
||||
|
|
@ -995,15 +994,6 @@ void __init setup_arch(char **cmdline_p)
|
|||
|
||||
initmem_init();
|
||||
|
||||
/*
|
||||
* Reserve large chunks of memory for use by CMA for kdump, fadump, KVM and
|
||||
* hugetlb. These must be called after initmem_init(), so that
|
||||
* pageblock_order is initialised.
|
||||
*/
|
||||
fadump_cma_init();
|
||||
kdump_cma_reserve();
|
||||
kvm_cma_reserve();
|
||||
|
||||
early_memtest(min_low_pfn << PAGE_SHIFT, max_low_pfn << PAGE_SHIFT);
|
||||
|
||||
if (ppc_md.setup_arch)
|
||||
|
|
|
|||
|
|
@ -37,11 +37,29 @@ unsigned long ftrace_call_adjust(unsigned long addr)
|
|||
if (addr >= (unsigned long)__exittext_begin && addr < (unsigned long)__exittext_end)
|
||||
return 0;
|
||||
|
||||
if (IS_ENABLED(CONFIG_ARCH_USING_PATCHABLE_FUNCTION_ENTRY) &&
|
||||
!IS_ENABLED(CONFIG_PPC_FTRACE_OUT_OF_LINE)) {
|
||||
addr += MCOUNT_INSN_SIZE;
|
||||
if (IS_ENABLED(CONFIG_DYNAMIC_FTRACE_WITH_CALL_OPS))
|
||||
if (IS_ENABLED(CONFIG_ARCH_USING_PATCHABLE_FUNCTION_ENTRY)) {
|
||||
if (!IS_ENABLED(CONFIG_PPC_FTRACE_OUT_OF_LINE)) {
|
||||
addr += MCOUNT_INSN_SIZE;
|
||||
if (IS_ENABLED(CONFIG_DYNAMIC_FTRACE_WITH_CALL_OPS))
|
||||
addr += MCOUNT_INSN_SIZE;
|
||||
} else if (IS_ENABLED(CONFIG_CC_IS_CLANG) && IS_ENABLED(CONFIG_PPC64)) {
|
||||
/*
|
||||
* addr points to global entry point though the NOP was emitted at local
|
||||
* entry point due to https://github.com/llvm/llvm-project/issues/163706
|
||||
* Handle that here with ppc_function_entry() for kernel symbols while
|
||||
* adjusting module addresses in the else case, by looking for the below
|
||||
* module global entry point sequence:
|
||||
* ld r2, -8(r12)
|
||||
* add r2, r2, r12
|
||||
*/
|
||||
if (is_kernel_text(addr) || is_kernel_inittext(addr))
|
||||
addr = ppc_function_entry((void *)addr);
|
||||
else if ((ppc_inst_val(ppc_inst_read((u32 *)addr)) ==
|
||||
PPC_RAW_LD(_R2, _R12, -8)) &&
|
||||
(ppc_inst_val(ppc_inst_read((u32 *)(addr+4))) ==
|
||||
PPC_RAW_ADD(_R2, _R2, _R12)))
|
||||
addr += 8;
|
||||
}
|
||||
}
|
||||
|
||||
return addr;
|
||||
|
|
|
|||
|
|
@ -397,6 +397,7 @@ SECTIONS
|
|||
_end = . ;
|
||||
|
||||
DWARF_DEBUG
|
||||
MODINFO
|
||||
ELF_DETAILS
|
||||
|
||||
DISCARDS
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@
|
|||
#include <asm/firmware.h>
|
||||
|
||||
#define cpu_to_be_ulong __PASTE(cpu_to_be, BITS_PER_LONG)
|
||||
#define __be_word __PASTE(__be, BITS_PER_LONG)
|
||||
|
||||
#ifdef CONFIG_CRASH_DUMP
|
||||
void machine_crash_shutdown(struct pt_regs *regs)
|
||||
|
|
@ -146,25 +147,25 @@ int __init overlaps_crashkernel(unsigned long start, unsigned long size)
|
|||
}
|
||||
|
||||
/* Values we need to export to the second kernel via the device tree. */
|
||||
static phys_addr_t crashk_base;
|
||||
static phys_addr_t crashk_size;
|
||||
static unsigned long long mem_limit;
|
||||
static __be_word crashk_base;
|
||||
static __be_word crashk_size;
|
||||
static __be_word mem_limit;
|
||||
|
||||
static struct property crashk_base_prop = {
|
||||
.name = "linux,crashkernel-base",
|
||||
.length = sizeof(phys_addr_t),
|
||||
.length = sizeof(__be_word),
|
||||
.value = &crashk_base
|
||||
};
|
||||
|
||||
static struct property crashk_size_prop = {
|
||||
.name = "linux,crashkernel-size",
|
||||
.length = sizeof(phys_addr_t),
|
||||
.length = sizeof(__be_word),
|
||||
.value = &crashk_size,
|
||||
};
|
||||
|
||||
static struct property memory_limit_prop = {
|
||||
.name = "linux,memory-limit",
|
||||
.length = sizeof(unsigned long long),
|
||||
.length = sizeof(__be_word),
|
||||
.value = &mem_limit,
|
||||
};
|
||||
|
||||
|
|
@ -193,11 +194,11 @@ static void __init export_crashk_values(struct device_node *node)
|
|||
}
|
||||
#endif /* CONFIG_CRASH_RESERVE */
|
||||
|
||||
static phys_addr_t kernel_end;
|
||||
static __be_word kernel_end;
|
||||
|
||||
static struct property kernel_end_prop = {
|
||||
.name = "linux,kernel-end",
|
||||
.length = sizeof(phys_addr_t),
|
||||
.length = sizeof(__be_word),
|
||||
.value = &kernel_end,
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -450,6 +450,11 @@ static int load_elfcorehdr_segment(struct kimage *image, struct kexec_buf *kbuf)
|
|||
kbuf->buffer = headers;
|
||||
kbuf->mem = KEXEC_BUF_MEM_UNKNOWN;
|
||||
kbuf->bufsz = headers_sz;
|
||||
|
||||
/*
|
||||
* Account for extra space required to accommodate additional memory
|
||||
* ranges in elfcorehdr due to memory hotplug events.
|
||||
*/
|
||||
kbuf->memsz = headers_sz + kdump_extra_elfcorehdr_size(cmem);
|
||||
kbuf->top_down = false;
|
||||
|
||||
|
|
@ -460,7 +465,14 @@ static int load_elfcorehdr_segment(struct kimage *image, struct kexec_buf *kbuf)
|
|||
}
|
||||
|
||||
image->elf_load_addr = kbuf->mem;
|
||||
image->elf_headers_sz = headers_sz;
|
||||
|
||||
/*
|
||||
* If CONFIG_CRASH_HOTPLUG is enabled, the elfcorehdr kexec segment
|
||||
* memsz can be larger than bufsz. Always initialize elf_headers_sz
|
||||
* with memsz. This ensures the correct size is reserved for elfcorehdr
|
||||
* memory in the FDT prepared for kdump.
|
||||
*/
|
||||
image->elf_headers_sz = kbuf->memsz;
|
||||
image->elf_headers = headers;
|
||||
out:
|
||||
kfree(cmem);
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@
|
|||
|
||||
/* #define EXIT_DEBUG */
|
||||
|
||||
const struct _kvm_stats_desc kvm_vm_stats_desc[] = {
|
||||
const struct kvm_stats_desc kvm_vm_stats_desc[] = {
|
||||
KVM_GENERIC_VM_STATS(),
|
||||
STATS_DESC_ICOUNTER(VM, num_2M_pages),
|
||||
STATS_DESC_ICOUNTER(VM, num_1G_pages)
|
||||
|
|
@ -53,7 +53,7 @@ const struct kvm_stats_header kvm_vm_stats_header = {
|
|||
sizeof(kvm_vm_stats_desc),
|
||||
};
|
||||
|
||||
const struct _kvm_stats_desc kvm_vcpu_stats_desc[] = {
|
||||
const struct kvm_stats_desc kvm_vcpu_stats_desc[] = {
|
||||
KVM_GENERIC_VCPU_STATS(),
|
||||
STATS_DESC_COUNTER(VCPU, sum_exits),
|
||||
STATS_DESC_COUNTER(VCPU, mmio_exits),
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
|
||||
unsigned long kvmppc_booke_handlers;
|
||||
|
||||
const struct _kvm_stats_desc kvm_vm_stats_desc[] = {
|
||||
const struct kvm_stats_desc kvm_vm_stats_desc[] = {
|
||||
KVM_GENERIC_VM_STATS(),
|
||||
STATS_DESC_ICOUNTER(VM, num_2M_pages),
|
||||
STATS_DESC_ICOUNTER(VM, num_1G_pages)
|
||||
|
|
@ -51,7 +51,7 @@ const struct kvm_stats_header kvm_vm_stats_header = {
|
|||
sizeof(kvm_vm_stats_desc),
|
||||
};
|
||||
|
||||
const struct _kvm_stats_desc kvm_vcpu_stats_desc[] = {
|
||||
const struct kvm_stats_desc kvm_vcpu_stats_desc[] = {
|
||||
KVM_GENERIC_VCPU_STATS(),
|
||||
STATS_DESC_COUNTER(VCPU, sum_exits),
|
||||
STATS_DESC_COUNTER(VCPU, mmio_exits),
|
||||
|
|
|
|||
|
|
@ -39,15 +39,11 @@ enum vcpu_ftr {
|
|||
/* bits [6-5] MAS2_X1 and MAS2_X0 and [4-0] bits for WIMGE */
|
||||
#define E500_TLB_MAS2_ATTR (0x7f)
|
||||
|
||||
struct tlbe_ref {
|
||||
struct tlbe_priv {
|
||||
kvm_pfn_t pfn; /* valid only for TLB0, except briefly */
|
||||
unsigned int flags; /* E500_TLB_* */
|
||||
};
|
||||
|
||||
struct tlbe_priv {
|
||||
struct tlbe_ref ref;
|
||||
};
|
||||
|
||||
#ifdef CONFIG_KVM_E500V2
|
||||
struct vcpu_id_table;
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -920,12 +920,12 @@ int kvmppc_e500_tlb_init(struct kvmppc_vcpu_e500 *vcpu_e500)
|
|||
vcpu_e500->gtlb_offset[0] = 0;
|
||||
vcpu_e500->gtlb_offset[1] = KVM_E500_TLB0_SIZE;
|
||||
|
||||
vcpu_e500->gtlb_priv[0] = kzalloc_objs(struct tlbe_ref,
|
||||
vcpu_e500->gtlb_priv[0] = kzalloc_objs(struct tlbe_priv,
|
||||
vcpu_e500->gtlb_params[0].entries);
|
||||
if (!vcpu_e500->gtlb_priv[0])
|
||||
goto free_vcpu;
|
||||
|
||||
vcpu_e500->gtlb_priv[1] = kzalloc_objs(struct tlbe_ref,
|
||||
vcpu_e500->gtlb_priv[1] = kzalloc_objs(struct tlbe_priv,
|
||||
vcpu_e500->gtlb_params[1].entries);
|
||||
if (!vcpu_e500->gtlb_priv[1])
|
||||
goto free_vcpu;
|
||||
|
|
|
|||
|
|
@ -189,16 +189,16 @@ void inval_gtlbe_on_host(struct kvmppc_vcpu_e500 *vcpu_e500, int tlbsel,
|
|||
{
|
||||
struct kvm_book3e_206_tlb_entry *gtlbe =
|
||||
get_entry(vcpu_e500, tlbsel, esel);
|
||||
struct tlbe_ref *ref = &vcpu_e500->gtlb_priv[tlbsel][esel].ref;
|
||||
struct tlbe_priv *tlbe = &vcpu_e500->gtlb_priv[tlbsel][esel];
|
||||
|
||||
/* Don't bother with unmapped entries */
|
||||
if (!(ref->flags & E500_TLB_VALID)) {
|
||||
WARN(ref->flags & (E500_TLB_BITMAP | E500_TLB_TLB0),
|
||||
"%s: flags %x\n", __func__, ref->flags);
|
||||
if (!(tlbe->flags & E500_TLB_VALID)) {
|
||||
WARN(tlbe->flags & (E500_TLB_BITMAP | E500_TLB_TLB0),
|
||||
"%s: flags %x\n", __func__, tlbe->flags);
|
||||
WARN_ON(tlbsel == 1 && vcpu_e500->g2h_tlb1_map[esel]);
|
||||
}
|
||||
|
||||
if (tlbsel == 1 && ref->flags & E500_TLB_BITMAP) {
|
||||
if (tlbsel == 1 && tlbe->flags & E500_TLB_BITMAP) {
|
||||
u64 tmp = vcpu_e500->g2h_tlb1_map[esel];
|
||||
int hw_tlb_indx;
|
||||
unsigned long flags;
|
||||
|
|
@ -216,28 +216,28 @@ void inval_gtlbe_on_host(struct kvmppc_vcpu_e500 *vcpu_e500, int tlbsel,
|
|||
}
|
||||
mb();
|
||||
vcpu_e500->g2h_tlb1_map[esel] = 0;
|
||||
ref->flags &= ~(E500_TLB_BITMAP | E500_TLB_VALID);
|
||||
tlbe->flags &= ~(E500_TLB_BITMAP | E500_TLB_VALID);
|
||||
local_irq_restore(flags);
|
||||
}
|
||||
|
||||
if (tlbsel == 1 && ref->flags & E500_TLB_TLB0) {
|
||||
if (tlbsel == 1 && tlbe->flags & E500_TLB_TLB0) {
|
||||
/*
|
||||
* TLB1 entry is backed by 4k pages. This should happen
|
||||
* rarely and is not worth optimizing. Invalidate everything.
|
||||
*/
|
||||
kvmppc_e500_tlbil_all(vcpu_e500);
|
||||
ref->flags &= ~(E500_TLB_TLB0 | E500_TLB_VALID);
|
||||
tlbe->flags &= ~(E500_TLB_TLB0 | E500_TLB_VALID);
|
||||
}
|
||||
|
||||
/*
|
||||
* If TLB entry is still valid then it's a TLB0 entry, and thus
|
||||
* backed by at most one host tlbe per shadow pid
|
||||
*/
|
||||
if (ref->flags & E500_TLB_VALID)
|
||||
if (tlbe->flags & E500_TLB_VALID)
|
||||
kvmppc_e500_tlbil_one(vcpu_e500, gtlbe);
|
||||
|
||||
/* Mark the TLB as not backed by the host anymore */
|
||||
ref->flags = 0;
|
||||
tlbe->flags = 0;
|
||||
}
|
||||
|
||||
static inline int tlbe_is_writable(struct kvm_book3e_206_tlb_entry *tlbe)
|
||||
|
|
@ -245,26 +245,26 @@ static inline int tlbe_is_writable(struct kvm_book3e_206_tlb_entry *tlbe)
|
|||
return tlbe->mas7_3 & (MAS3_SW|MAS3_UW);
|
||||
}
|
||||
|
||||
static inline void kvmppc_e500_ref_setup(struct tlbe_ref *ref,
|
||||
struct kvm_book3e_206_tlb_entry *gtlbe,
|
||||
kvm_pfn_t pfn, unsigned int wimg,
|
||||
bool writable)
|
||||
static inline void kvmppc_e500_tlbe_setup(struct tlbe_priv *tlbe,
|
||||
struct kvm_book3e_206_tlb_entry *gtlbe,
|
||||
kvm_pfn_t pfn, unsigned int wimg,
|
||||
bool writable)
|
||||
{
|
||||
ref->pfn = pfn;
|
||||
ref->flags = E500_TLB_VALID;
|
||||
tlbe->pfn = pfn;
|
||||
tlbe->flags = E500_TLB_VALID;
|
||||
if (writable)
|
||||
ref->flags |= E500_TLB_WRITABLE;
|
||||
tlbe->flags |= E500_TLB_WRITABLE;
|
||||
|
||||
/* Use guest supplied MAS2_G and MAS2_E */
|
||||
ref->flags |= (gtlbe->mas2 & MAS2_ATTRIB_MASK) | wimg;
|
||||
tlbe->flags |= (gtlbe->mas2 & MAS2_ATTRIB_MASK) | wimg;
|
||||
}
|
||||
|
||||
static inline void kvmppc_e500_ref_release(struct tlbe_ref *ref)
|
||||
static inline void kvmppc_e500_tlbe_release(struct tlbe_priv *tlbe)
|
||||
{
|
||||
if (ref->flags & E500_TLB_VALID) {
|
||||
if (tlbe->flags & E500_TLB_VALID) {
|
||||
/* FIXME: don't log bogus pfn for TLB1 */
|
||||
trace_kvm_booke206_ref_release(ref->pfn, ref->flags);
|
||||
ref->flags = 0;
|
||||
trace_kvm_booke206_ref_release(tlbe->pfn, tlbe->flags);
|
||||
tlbe->flags = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -284,11 +284,8 @@ static void clear_tlb_privs(struct kvmppc_vcpu_e500 *vcpu_e500)
|
|||
int i;
|
||||
|
||||
for (tlbsel = 0; tlbsel <= 1; tlbsel++) {
|
||||
for (i = 0; i < vcpu_e500->gtlb_params[tlbsel].entries; i++) {
|
||||
struct tlbe_ref *ref =
|
||||
&vcpu_e500->gtlb_priv[tlbsel][i].ref;
|
||||
kvmppc_e500_ref_release(ref);
|
||||
}
|
||||
for (i = 0; i < vcpu_e500->gtlb_params[tlbsel].entries; i++)
|
||||
kvmppc_e500_tlbe_release(&vcpu_e500->gtlb_priv[tlbsel][i]);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -304,18 +301,18 @@ void kvmppc_core_flush_tlb(struct kvm_vcpu *vcpu)
|
|||
static void kvmppc_e500_setup_stlbe(
|
||||
struct kvm_vcpu *vcpu,
|
||||
struct kvm_book3e_206_tlb_entry *gtlbe,
|
||||
int tsize, struct tlbe_ref *ref, u64 gvaddr,
|
||||
int tsize, struct tlbe_priv *tlbe, u64 gvaddr,
|
||||
struct kvm_book3e_206_tlb_entry *stlbe)
|
||||
{
|
||||
kvm_pfn_t pfn = ref->pfn;
|
||||
kvm_pfn_t pfn = tlbe->pfn;
|
||||
u32 pr = vcpu->arch.shared->msr & MSR_PR;
|
||||
bool writable = !!(ref->flags & E500_TLB_WRITABLE);
|
||||
bool writable = !!(tlbe->flags & E500_TLB_WRITABLE);
|
||||
|
||||
BUG_ON(!(ref->flags & E500_TLB_VALID));
|
||||
BUG_ON(!(tlbe->flags & E500_TLB_VALID));
|
||||
|
||||
/* Force IPROT=0 for all guest mappings. */
|
||||
stlbe->mas1 = MAS1_TSIZE(tsize) | get_tlb_sts(gtlbe) | MAS1_VALID;
|
||||
stlbe->mas2 = (gvaddr & MAS2_EPN) | (ref->flags & E500_TLB_MAS2_ATTR);
|
||||
stlbe->mas2 = (gvaddr & MAS2_EPN) | (tlbe->flags & E500_TLB_MAS2_ATTR);
|
||||
stlbe->mas7_3 = ((u64)pfn << PAGE_SHIFT) |
|
||||
e500_shadow_mas3_attrib(gtlbe->mas7_3, writable, pr);
|
||||
}
|
||||
|
|
@ -323,7 +320,7 @@ static void kvmppc_e500_setup_stlbe(
|
|||
static inline int kvmppc_e500_shadow_map(struct kvmppc_vcpu_e500 *vcpu_e500,
|
||||
u64 gvaddr, gfn_t gfn, struct kvm_book3e_206_tlb_entry *gtlbe,
|
||||
int tlbsel, struct kvm_book3e_206_tlb_entry *stlbe,
|
||||
struct tlbe_ref *ref)
|
||||
struct tlbe_priv *tlbe)
|
||||
{
|
||||
struct kvm_memory_slot *slot;
|
||||
unsigned int psize;
|
||||
|
|
@ -455,9 +452,9 @@ static inline int kvmppc_e500_shadow_map(struct kvmppc_vcpu_e500 *vcpu_e500,
|
|||
}
|
||||
}
|
||||
|
||||
kvmppc_e500_ref_setup(ref, gtlbe, pfn, wimg, writable);
|
||||
kvmppc_e500_tlbe_setup(tlbe, gtlbe, pfn, wimg, writable);
|
||||
kvmppc_e500_setup_stlbe(&vcpu_e500->vcpu, gtlbe, tsize,
|
||||
ref, gvaddr, stlbe);
|
||||
tlbe, gvaddr, stlbe);
|
||||
writable = tlbe_is_writable(stlbe);
|
||||
|
||||
/* Clear i-cache for new pages */
|
||||
|
|
@ -474,17 +471,17 @@ static int kvmppc_e500_tlb0_map(struct kvmppc_vcpu_e500 *vcpu_e500, int esel,
|
|||
struct kvm_book3e_206_tlb_entry *stlbe)
|
||||
{
|
||||
struct kvm_book3e_206_tlb_entry *gtlbe;
|
||||
struct tlbe_ref *ref;
|
||||
struct tlbe_priv *tlbe;
|
||||
int stlbsel = 0;
|
||||
int sesel = 0;
|
||||
int r;
|
||||
|
||||
gtlbe = get_entry(vcpu_e500, 0, esel);
|
||||
ref = &vcpu_e500->gtlb_priv[0][esel].ref;
|
||||
tlbe = &vcpu_e500->gtlb_priv[0][esel];
|
||||
|
||||
r = kvmppc_e500_shadow_map(vcpu_e500, get_tlb_eaddr(gtlbe),
|
||||
get_tlb_raddr(gtlbe) >> PAGE_SHIFT,
|
||||
gtlbe, 0, stlbe, ref);
|
||||
gtlbe, 0, stlbe, tlbe);
|
||||
if (r)
|
||||
return r;
|
||||
|
||||
|
|
@ -494,7 +491,7 @@ static int kvmppc_e500_tlb0_map(struct kvmppc_vcpu_e500 *vcpu_e500, int esel,
|
|||
}
|
||||
|
||||
static int kvmppc_e500_tlb1_map_tlb1(struct kvmppc_vcpu_e500 *vcpu_e500,
|
||||
struct tlbe_ref *ref,
|
||||
struct tlbe_priv *tlbe,
|
||||
int esel)
|
||||
{
|
||||
unsigned int sesel = vcpu_e500->host_tlb1_nv++;
|
||||
|
|
@ -507,10 +504,10 @@ static int kvmppc_e500_tlb1_map_tlb1(struct kvmppc_vcpu_e500 *vcpu_e500,
|
|||
vcpu_e500->g2h_tlb1_map[idx] &= ~(1ULL << sesel);
|
||||
}
|
||||
|
||||
vcpu_e500->gtlb_priv[1][esel].ref.flags |= E500_TLB_BITMAP;
|
||||
vcpu_e500->gtlb_priv[1][esel].flags |= E500_TLB_BITMAP;
|
||||
vcpu_e500->g2h_tlb1_map[esel] |= (u64)1 << sesel;
|
||||
vcpu_e500->h2g_tlb1_rmap[sesel] = esel + 1;
|
||||
WARN_ON(!(ref->flags & E500_TLB_VALID));
|
||||
WARN_ON(!(tlbe->flags & E500_TLB_VALID));
|
||||
|
||||
return sesel;
|
||||
}
|
||||
|
|
@ -522,24 +519,24 @@ static int kvmppc_e500_tlb1_map(struct kvmppc_vcpu_e500 *vcpu_e500,
|
|||
u64 gvaddr, gfn_t gfn, struct kvm_book3e_206_tlb_entry *gtlbe,
|
||||
struct kvm_book3e_206_tlb_entry *stlbe, int esel)
|
||||
{
|
||||
struct tlbe_ref *ref = &vcpu_e500->gtlb_priv[1][esel].ref;
|
||||
struct tlbe_priv *tlbe = &vcpu_e500->gtlb_priv[1][esel];
|
||||
int sesel;
|
||||
int r;
|
||||
|
||||
r = kvmppc_e500_shadow_map(vcpu_e500, gvaddr, gfn, gtlbe, 1, stlbe,
|
||||
ref);
|
||||
tlbe);
|
||||
if (r)
|
||||
return r;
|
||||
|
||||
/* Use TLB0 when we can only map a page with 4k */
|
||||
if (get_tlb_tsize(stlbe) == BOOK3E_PAGESZ_4K) {
|
||||
vcpu_e500->gtlb_priv[1][esel].ref.flags |= E500_TLB_TLB0;
|
||||
vcpu_e500->gtlb_priv[1][esel].flags |= E500_TLB_TLB0;
|
||||
write_stlbe(vcpu_e500, gtlbe, stlbe, 0, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Otherwise map into TLB1 */
|
||||
sesel = kvmppc_e500_tlb1_map_tlb1(vcpu_e500, ref, esel);
|
||||
sesel = kvmppc_e500_tlb1_map_tlb1(vcpu_e500, tlbe, esel);
|
||||
write_stlbe(vcpu_e500, gtlbe, stlbe, 1, sesel);
|
||||
|
||||
return 0;
|
||||
|
|
@ -561,11 +558,11 @@ void kvmppc_mmu_map(struct kvm_vcpu *vcpu, u64 eaddr, gpa_t gpaddr,
|
|||
priv = &vcpu_e500->gtlb_priv[tlbsel][esel];
|
||||
|
||||
/* Triggers after clear_tlb_privs or on initial mapping */
|
||||
if (!(priv->ref.flags & E500_TLB_VALID)) {
|
||||
if (!(priv->flags & E500_TLB_VALID)) {
|
||||
kvmppc_e500_tlb0_map(vcpu_e500, esel, &stlbe);
|
||||
} else {
|
||||
kvmppc_e500_setup_stlbe(vcpu, gtlbe, BOOK3E_PAGESZ_4K,
|
||||
&priv->ref, eaddr, &stlbe);
|
||||
priv, eaddr, &stlbe);
|
||||
write_stlbe(vcpu_e500, gtlbe, &stlbe, 0, 0);
|
||||
}
|
||||
break;
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user