Merge remote-tracking branch 'stable/linux-5.15.y' into rpi-5.15.y
This commit is contained in:
@@ -5,6 +5,9 @@ Contact: linux-mtd@lists.infradead.org
|
|||||||
Description: (RO) The JEDEC ID of the SPI NOR flash as reported by the
|
Description: (RO) The JEDEC ID of the SPI NOR flash as reported by the
|
||||||
flash device.
|
flash device.
|
||||||
|
|
||||||
|
The attribute is not present if the flash doesn't support
|
||||||
|
the "Read JEDEC ID" command (9Fh). This is the case for
|
||||||
|
non-JEDEC compliant flashes.
|
||||||
|
|
||||||
What: /sys/bus/spi/devices/.../spi-nor/manufacturer
|
What: /sys/bus/spi/devices/.../spi-nor/manufacturer
|
||||||
Date: April 2021
|
Date: April 2021
|
||||||
|
|||||||
@@ -14,9 +14,6 @@ description: |+
|
|||||||
This PCIe host controller is based on the Synopsys DesignWare PCIe IP
|
This PCIe host controller is based on the Synopsys DesignWare PCIe IP
|
||||||
and thus inherits all the common properties defined in snps,dw-pcie.yaml.
|
and thus inherits all the common properties defined in snps,dw-pcie.yaml.
|
||||||
|
|
||||||
allOf:
|
|
||||||
- $ref: /schemas/pci/snps,dw-pcie.yaml#
|
|
||||||
|
|
||||||
properties:
|
properties:
|
||||||
compatible:
|
compatible:
|
||||||
enum:
|
enum:
|
||||||
@@ -59,7 +56,7 @@ properties:
|
|||||||
- const: pcie
|
- const: pcie
|
||||||
- const: pcie_bus
|
- const: pcie_bus
|
||||||
- const: pcie_phy
|
- const: pcie_phy
|
||||||
- const: pcie_inbound_axi for imx6sx-pcie, pcie_aux for imx8mq-pcie
|
- enum: [ pcie_inbound_axi, pcie_aux ]
|
||||||
|
|
||||||
num-lanes:
|
num-lanes:
|
||||||
const: 1
|
const: 1
|
||||||
@@ -166,6 +163,47 @@ required:
|
|||||||
- clocks
|
- clocks
|
||||||
- clock-names
|
- clock-names
|
||||||
|
|
||||||
|
allOf:
|
||||||
|
- $ref: /schemas/pci/snps,dw-pcie.yaml#
|
||||||
|
- if:
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
contains:
|
||||||
|
const: fsl,imx6sx-pcie
|
||||||
|
then:
|
||||||
|
properties:
|
||||||
|
clock-names:
|
||||||
|
items:
|
||||||
|
- {}
|
||||||
|
- {}
|
||||||
|
- {}
|
||||||
|
- const: pcie_inbound_axi
|
||||||
|
- if:
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
contains:
|
||||||
|
const: fsl,imx8mq-pcie
|
||||||
|
then:
|
||||||
|
properties:
|
||||||
|
clock-names:
|
||||||
|
items:
|
||||||
|
- {}
|
||||||
|
- {}
|
||||||
|
- {}
|
||||||
|
- const: pcie_aux
|
||||||
|
- if:
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
not:
|
||||||
|
contains:
|
||||||
|
enum:
|
||||||
|
- fsl,imx6sx-pcie
|
||||||
|
- fsl,imx8mq-pcie
|
||||||
|
then:
|
||||||
|
properties:
|
||||||
|
clock-names:
|
||||||
|
maxItems: 3
|
||||||
|
|
||||||
unevaluatedProperties: false
|
unevaluatedProperties: false
|
||||||
|
|
||||||
examples:
|
examples:
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ properties:
|
|||||||
- const: mpu
|
- const: mpu
|
||||||
|
|
||||||
interrupts:
|
interrupts:
|
||||||
maxItems: 1
|
maxItems: 2
|
||||||
|
|
||||||
clocks:
|
clocks:
|
||||||
items:
|
items:
|
||||||
@@ -94,8 +94,9 @@ examples:
|
|||||||
#interrupt-cells = <1>;
|
#interrupt-cells = <1>;
|
||||||
ranges = <0x81000000 0 0x40000000 0 0x40000000 0 0x00010000>,
|
ranges = <0x81000000 0 0x40000000 0 0x40000000 0 0x00010000>,
|
||||||
<0x82000000 0 0x50000000 0 0x50000000 0 0x20000000>;
|
<0x82000000 0 0x50000000 0 0x50000000 0 0x20000000>;
|
||||||
interrupts = <GIC_SPI 215 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 211 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
interrupt-names = "intr";
|
<GIC_SPI 215 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
interrupt-names = "msi", "intr";
|
||||||
interrupt-map-mask = <0 0 0 7>;
|
interrupt-map-mask = <0 0 0 7>;
|
||||||
interrupt-map =
|
interrupt-map =
|
||||||
<0 0 0 1 &gic GIC_SPI 215 IRQ_TYPE_LEVEL_HIGH
|
<0 0 0 1 &gic GIC_SPI 215 IRQ_TYPE_LEVEL_HIGH
|
||||||
|
|||||||
@@ -109,7 +109,7 @@ audio-codec@1{
|
|||||||
reg = <1 0>;
|
reg = <1 0>;
|
||||||
interrupts = <&msmgpio 54 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <&msmgpio 54 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
interrupt-names = "intr2"
|
interrupt-names = "intr2"
|
||||||
reset-gpios = <&msmgpio 64 0>;
|
reset-gpios = <&msmgpio 64 GPIO_ACTIVE_LOW>;
|
||||||
slim-ifc-dev = <&wc9335_ifd>;
|
slim-ifc-dev = <&wc9335_ifd>;
|
||||||
clock-names = "mclk", "native";
|
clock-names = "mclk", "native";
|
||||||
clocks = <&rpmcc RPM_SMD_DIV_CLK1>,
|
clocks = <&rpmcc RPM_SMD_DIV_CLK1>,
|
||||||
|
|||||||
@@ -25,8 +25,8 @@ hardware, which may be as simple as a set of GPIO pins or as complex as
|
|||||||
a pair of FIFOs connected to dual DMA engines on the other side of the
|
a pair of FIFOs connected to dual DMA engines on the other side of the
|
||||||
SPI shift register (maximizing throughput). Such drivers bridge between
|
SPI shift register (maximizing throughput). Such drivers bridge between
|
||||||
whatever bus they sit on (often the platform bus) and SPI, and expose
|
whatever bus they sit on (often the platform bus) and SPI, and expose
|
||||||
the SPI side of their device as a :c:type:`struct spi_master
|
the SPI side of their device as a :c:type:`struct spi_controller
|
||||||
<spi_master>`. SPI devices are children of that master,
|
<spi_controller>`. SPI devices are children of that master,
|
||||||
represented as a :c:type:`struct spi_device <spi_device>` and
|
represented as a :c:type:`struct spi_device <spi_device>` and
|
||||||
manufactured from :c:type:`struct spi_board_info
|
manufactured from :c:type:`struct spi_board_info
|
||||||
<spi_board_info>` descriptors which are usually provided by
|
<spi_board_info>` descriptors which are usually provided by
|
||||||
|
|||||||
@@ -83,9 +83,7 @@ configuration of fault-injection capabilities.
|
|||||||
- /sys/kernel/debug/fail*/times:
|
- /sys/kernel/debug/fail*/times:
|
||||||
|
|
||||||
specifies how many times failures may happen at most. A value of -1
|
specifies how many times failures may happen at most. A value of -1
|
||||||
means "no limit". Note, though, that this file only accepts unsigned
|
means "no limit".
|
||||||
values. So, if you want to specify -1, you better use 'printf' instead
|
|
||||||
of 'echo', e.g.: $ printf %#x -1 > times
|
|
||||||
|
|
||||||
- /sys/kernel/debug/fail*/space:
|
- /sys/kernel/debug/fail*/space:
|
||||||
|
|
||||||
@@ -277,7 +275,7 @@ Application Examples
|
|||||||
echo Y > /sys/kernel/debug/$FAILTYPE/task-filter
|
echo Y > /sys/kernel/debug/$FAILTYPE/task-filter
|
||||||
echo 10 > /sys/kernel/debug/$FAILTYPE/probability
|
echo 10 > /sys/kernel/debug/$FAILTYPE/probability
|
||||||
echo 100 > /sys/kernel/debug/$FAILTYPE/interval
|
echo 100 > /sys/kernel/debug/$FAILTYPE/interval
|
||||||
printf %#x -1 > /sys/kernel/debug/$FAILTYPE/times
|
echo -1 > /sys/kernel/debug/$FAILTYPE/times
|
||||||
echo 0 > /sys/kernel/debug/$FAILTYPE/space
|
echo 0 > /sys/kernel/debug/$FAILTYPE/space
|
||||||
echo 2 > /sys/kernel/debug/$FAILTYPE/verbose
|
echo 2 > /sys/kernel/debug/$FAILTYPE/verbose
|
||||||
echo 1 > /sys/kernel/debug/$FAILTYPE/ignore-gfp-wait
|
echo 1 > /sys/kernel/debug/$FAILTYPE/ignore-gfp-wait
|
||||||
@@ -331,7 +329,7 @@ Application Examples
|
|||||||
echo N > /sys/kernel/debug/$FAILTYPE/task-filter
|
echo N > /sys/kernel/debug/$FAILTYPE/task-filter
|
||||||
echo 10 > /sys/kernel/debug/$FAILTYPE/probability
|
echo 10 > /sys/kernel/debug/$FAILTYPE/probability
|
||||||
echo 100 > /sys/kernel/debug/$FAILTYPE/interval
|
echo 100 > /sys/kernel/debug/$FAILTYPE/interval
|
||||||
printf %#x -1 > /sys/kernel/debug/$FAILTYPE/times
|
echo -1 > /sys/kernel/debug/$FAILTYPE/times
|
||||||
echo 0 > /sys/kernel/debug/$FAILTYPE/space
|
echo 0 > /sys/kernel/debug/$FAILTYPE/space
|
||||||
echo 2 > /sys/kernel/debug/$FAILTYPE/verbose
|
echo 2 > /sys/kernel/debug/$FAILTYPE/verbose
|
||||||
echo 1 > /sys/kernel/debug/$FAILTYPE/ignore-gfp-wait
|
echo 1 > /sys/kernel/debug/$FAILTYPE/ignore-gfp-wait
|
||||||
@@ -362,7 +360,7 @@ Application Examples
|
|||||||
echo N > /sys/kernel/debug/$FAILTYPE/task-filter
|
echo N > /sys/kernel/debug/$FAILTYPE/task-filter
|
||||||
echo 100 > /sys/kernel/debug/$FAILTYPE/probability
|
echo 100 > /sys/kernel/debug/$FAILTYPE/probability
|
||||||
echo 0 > /sys/kernel/debug/$FAILTYPE/interval
|
echo 0 > /sys/kernel/debug/$FAILTYPE/interval
|
||||||
printf %#x -1 > /sys/kernel/debug/$FAILTYPE/times
|
echo -1 > /sys/kernel/debug/$FAILTYPE/times
|
||||||
echo 0 > /sys/kernel/debug/$FAILTYPE/space
|
echo 0 > /sys/kernel/debug/$FAILTYPE/space
|
||||||
echo 1 > /sys/kernel/debug/$FAILTYPE/verbose
|
echo 1 > /sys/kernel/debug/$FAILTYPE/verbose
|
||||||
|
|
||||||
|
|||||||
@@ -70,6 +70,9 @@ Instead, the 2-factor form of the allocator should be used::
|
|||||||
|
|
||||||
foo = kmalloc_array(count, size, GFP_KERNEL);
|
foo = kmalloc_array(count, size, GFP_KERNEL);
|
||||||
|
|
||||||
|
Specifically, kmalloc() can be replaced with kmalloc_array(), and
|
||||||
|
kzalloc() can be replaced with kcalloc().
|
||||||
|
|
||||||
If no 2-factor form is available, the saturate-on-overflow helpers should
|
If no 2-factor form is available, the saturate-on-overflow helpers should
|
||||||
be used::
|
be used::
|
||||||
|
|
||||||
@@ -90,9 +93,20 @@ Instead, use the helper::
|
|||||||
array usage and switch to a `flexible array member
|
array usage and switch to a `flexible array member
|
||||||
<#zero-length-and-one-element-arrays>`_ instead.
|
<#zero-length-and-one-element-arrays>`_ instead.
|
||||||
|
|
||||||
See array_size(), array3_size(), and struct_size(),
|
For other calculations, please compose the use of the size_mul(),
|
||||||
for more details as well as the related check_add_overflow() and
|
size_add(), and size_sub() helpers. For example, in the case of::
|
||||||
check_mul_overflow() family of functions.
|
|
||||||
|
foo = krealloc(current_size + chunk_size * (count - 3), GFP_KERNEL);
|
||||||
|
|
||||||
|
Instead, use the helpers::
|
||||||
|
|
||||||
|
foo = krealloc(size_add(current_size,
|
||||||
|
size_mul(chunk_size,
|
||||||
|
size_sub(count, 3))), GFP_KERNEL);
|
||||||
|
|
||||||
|
For more details, also see array3_size() and flex_array_size(),
|
||||||
|
as well as the related check_mul_overflow(), check_add_overflow(),
|
||||||
|
check_sub_overflow(), and check_shl_overflow() family of functions.
|
||||||
|
|
||||||
simple_strtol(), simple_strtoll(), simple_strtoul(), simple_strtoull()
|
simple_strtol(), simple_strtoll(), simple_strtoul(), simple_strtoull()
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|||||||
@@ -7793,7 +7793,7 @@ F: Documentation/locking/*futex*
|
|||||||
F: include/asm-generic/futex.h
|
F: include/asm-generic/futex.h
|
||||||
F: include/linux/futex.h
|
F: include/linux/futex.h
|
||||||
F: include/uapi/linux/futex.h
|
F: include/uapi/linux/futex.h
|
||||||
F: kernel/futex.c
|
F: kernel/futex/*
|
||||||
F: tools/perf/bench/futex*
|
F: tools/perf/bench/futex*
|
||||||
F: tools/testing/selftests/futex/
|
F: tools/testing/selftests/futex/
|
||||||
|
|
||||||
|
|||||||
2
Makefile
2
Makefile
@@ -1,7 +1,7 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
VERSION = 5
|
VERSION = 5
|
||||||
PATCHLEVEL = 15
|
PATCHLEVEL = 15
|
||||||
SUBLEVEL = 84
|
SUBLEVEL = 87
|
||||||
EXTRAVERSION =
|
EXTRAVERSION =
|
||||||
NAME = Trick or Treat
|
NAME = Trick or Treat
|
||||||
|
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ register struct thread_info *__current_thread_info __asm__("$8");
|
|||||||
|
|
||||||
/* Work to do on interrupt/exception return. */
|
/* Work to do on interrupt/exception return. */
|
||||||
#define _TIF_WORK_MASK (_TIF_SIGPENDING | _TIF_NEED_RESCHED | \
|
#define _TIF_WORK_MASK (_TIF_SIGPENDING | _TIF_NEED_RESCHED | \
|
||||||
_TIF_NOTIFY_RESUME)
|
_TIF_NOTIFY_RESUME | _TIF_NOTIFY_SIGNAL)
|
||||||
|
|
||||||
/* Work to do on any return to userspace. */
|
/* Work to do on any return to userspace. */
|
||||||
#define _TIF_ALLWORK_MASK (_TIF_WORK_MASK \
|
#define _TIF_ALLWORK_MASK (_TIF_WORK_MASK \
|
||||||
|
|||||||
@@ -469,8 +469,10 @@ entSys:
|
|||||||
#ifdef CONFIG_AUDITSYSCALL
|
#ifdef CONFIG_AUDITSYSCALL
|
||||||
lda $6, _TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT
|
lda $6, _TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT
|
||||||
and $3, $6, $3
|
and $3, $6, $3
|
||||||
#endif
|
|
||||||
bne $3, strace
|
bne $3, strace
|
||||||
|
#else
|
||||||
|
blbs $3, strace /* check for SYSCALL_TRACE in disguise */
|
||||||
|
#endif
|
||||||
beq $4, 1f
|
beq $4, 1f
|
||||||
ldq $27, 0($5)
|
ldq $27, 0($5)
|
||||||
1: jsr $26, ($27), sys_ni_syscall
|
1: jsr $26, ($27), sys_ni_syscall
|
||||||
|
|||||||
@@ -74,7 +74,7 @@
|
|||||||
|
|
||||||
pcie2: pcie@2,0 {
|
pcie2: pcie@2,0 {
|
||||||
device_type = "pci";
|
device_type = "pci";
|
||||||
assigned-addresses = <0x82002800 0 0x80000 0 0x2000>;
|
assigned-addresses = <0x82001000 0 0x80000 0 0x2000>;
|
||||||
reg = <0x1000 0 0 0 0>;
|
reg = <0x1000 0 0 0 0>;
|
||||||
#address-cells = <3>;
|
#address-cells = <3>;
|
||||||
#size-cells = <2>;
|
#size-cells = <2>;
|
||||||
|
|||||||
@@ -582,7 +582,7 @@
|
|||||||
|
|
||||||
pcie1: pcie@2,0 {
|
pcie1: pcie@2,0 {
|
||||||
device_type = "pci";
|
device_type = "pci";
|
||||||
assigned-addresses = <0x82000800 0 0x44000 0 0x2000>;
|
assigned-addresses = <0x82001000 0 0x44000 0 0x2000>;
|
||||||
reg = <0x1000 0 0 0 0>;
|
reg = <0x1000 0 0 0 0>;
|
||||||
#address-cells = <3>;
|
#address-cells = <3>;
|
||||||
#size-cells = <2>;
|
#size-cells = <2>;
|
||||||
|
|||||||
@@ -79,7 +79,7 @@
|
|||||||
/* x1 port */
|
/* x1 port */
|
||||||
pcie@2,0 {
|
pcie@2,0 {
|
||||||
device_type = "pci";
|
device_type = "pci";
|
||||||
assigned-addresses = <0x82000800 0 0x40000 0 0x2000>;
|
assigned-addresses = <0x82001000 0 0x40000 0 0x2000>;
|
||||||
reg = <0x1000 0 0 0 0>;
|
reg = <0x1000 0 0 0 0>;
|
||||||
#address-cells = <3>;
|
#address-cells = <3>;
|
||||||
#size-cells = <2>;
|
#size-cells = <2>;
|
||||||
@@ -98,7 +98,7 @@
|
|||||||
/* x1 port */
|
/* x1 port */
|
||||||
pcie@3,0 {
|
pcie@3,0 {
|
||||||
device_type = "pci";
|
device_type = "pci";
|
||||||
assigned-addresses = <0x82000800 0 0x44000 0 0x2000>;
|
assigned-addresses = <0x82001800 0 0x44000 0 0x2000>;
|
||||||
reg = <0x1800 0 0 0 0>;
|
reg = <0x1800 0 0 0 0>;
|
||||||
#address-cells = <3>;
|
#address-cells = <3>;
|
||||||
#size-cells = <2>;
|
#size-cells = <2>;
|
||||||
|
|||||||
@@ -23,6 +23,12 @@
|
|||||||
stdout-path = &uart0;
|
stdout-path = &uart0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
aliases {
|
||||||
|
ethernet0 = ð0;
|
||||||
|
ethernet1 = ð1;
|
||||||
|
ethernet2 = ð2;
|
||||||
|
};
|
||||||
|
|
||||||
memory {
|
memory {
|
||||||
device_type = "memory";
|
device_type = "memory";
|
||||||
reg = <0x00000000 0x40000000>; /* 1024 MB */
|
reg = <0x00000000 0x40000000>; /* 1024 MB */
|
||||||
@@ -450,7 +456,17 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
/* port 6 is connected to eth0 */
|
ports@6 {
|
||||||
|
reg = <6>;
|
||||||
|
label = "cpu";
|
||||||
|
ethernet = <ð0>;
|
||||||
|
phy-mode = "rgmii-id";
|
||||||
|
|
||||||
|
fixed-link {
|
||||||
|
speed = <1000>;
|
||||||
|
full-duplex;
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -84,7 +84,7 @@
|
|||||||
/* x1 port */
|
/* x1 port */
|
||||||
pcie2: pcie@2,0 {
|
pcie2: pcie@2,0 {
|
||||||
device_type = "pci";
|
device_type = "pci";
|
||||||
assigned-addresses = <0x82000800 0 0x40000 0 0x2000>;
|
assigned-addresses = <0x82001000 0 0x40000 0 0x2000>;
|
||||||
reg = <0x1000 0 0 0 0>;
|
reg = <0x1000 0 0 0 0>;
|
||||||
#address-cells = <3>;
|
#address-cells = <3>;
|
||||||
#size-cells = <2>;
|
#size-cells = <2>;
|
||||||
@@ -103,7 +103,7 @@
|
|||||||
/* x1 port */
|
/* x1 port */
|
||||||
pcie3: pcie@3,0 {
|
pcie3: pcie@3,0 {
|
||||||
device_type = "pci";
|
device_type = "pci";
|
||||||
assigned-addresses = <0x82000800 0 0x44000 0 0x2000>;
|
assigned-addresses = <0x82001800 0 0x44000 0 0x2000>;
|
||||||
reg = <0x1800 0 0 0 0>;
|
reg = <0x1800 0 0 0 0>;
|
||||||
#address-cells = <3>;
|
#address-cells = <3>;
|
||||||
#size-cells = <2>;
|
#size-cells = <2>;
|
||||||
@@ -125,7 +125,7 @@
|
|||||||
*/
|
*/
|
||||||
pcie4: pcie@4,0 {
|
pcie4: pcie@4,0 {
|
||||||
device_type = "pci";
|
device_type = "pci";
|
||||||
assigned-addresses = <0x82000800 0 0x48000 0 0x2000>;
|
assigned-addresses = <0x82002000 0 0x48000 0 0x2000>;
|
||||||
reg = <0x2000 0 0 0 0>;
|
reg = <0x2000 0 0 0 0>;
|
||||||
#address-cells = <3>;
|
#address-cells = <3>;
|
||||||
#size-cells = <2>;
|
#size-cells = <2>;
|
||||||
|
|||||||
@@ -453,7 +453,7 @@
|
|||||||
/* x1 port */
|
/* x1 port */
|
||||||
pcie@2,0 {
|
pcie@2,0 {
|
||||||
device_type = "pci";
|
device_type = "pci";
|
||||||
assigned-addresses = <0x82000800 0 0x40000 0 0x2000>;
|
assigned-addresses = <0x82001000 0 0x40000 0 0x2000>;
|
||||||
reg = <0x1000 0 0 0 0>;
|
reg = <0x1000 0 0 0 0>;
|
||||||
#address-cells = <3>;
|
#address-cells = <3>;
|
||||||
#size-cells = <2>;
|
#size-cells = <2>;
|
||||||
@@ -472,7 +472,7 @@
|
|||||||
/* x1 port */
|
/* x1 port */
|
||||||
pcie@3,0 {
|
pcie@3,0 {
|
||||||
device_type = "pci";
|
device_type = "pci";
|
||||||
assigned-addresses = <0x82000800 0 0x44000 0 0x2000>;
|
assigned-addresses = <0x82001800 0 0x44000 0 0x2000>;
|
||||||
reg = <0x1800 0 0 0 0>;
|
reg = <0x1800 0 0 0 0>;
|
||||||
#address-cells = <3>;
|
#address-cells = <3>;
|
||||||
#size-cells = <2>;
|
#size-cells = <2>;
|
||||||
@@ -494,7 +494,7 @@
|
|||||||
*/
|
*/
|
||||||
pcie@4,0 {
|
pcie@4,0 {
|
||||||
device_type = "pci";
|
device_type = "pci";
|
||||||
assigned-addresses = <0x82000800 0 0x48000 0 0x2000>;
|
assigned-addresses = <0x82002000 0 0x48000 0 0x2000>;
|
||||||
reg = <0x2000 0 0 0 0>;
|
reg = <0x2000 0 0 0 0>;
|
||||||
#address-cells = <3>;
|
#address-cells = <3>;
|
||||||
#size-cells = <2>;
|
#size-cells = <2>;
|
||||||
|
|||||||
@@ -97,7 +97,7 @@
|
|||||||
|
|
||||||
pcie2: pcie@2,0 {
|
pcie2: pcie@2,0 {
|
||||||
device_type = "pci";
|
device_type = "pci";
|
||||||
assigned-addresses = <0x82000800 0 0x44000 0 0x2000>;
|
assigned-addresses = <0x82001000 0 0x44000 0 0x2000>;
|
||||||
reg = <0x1000 0 0 0 0>;
|
reg = <0x1000 0 0 0 0>;
|
||||||
#address-cells = <3>;
|
#address-cells = <3>;
|
||||||
#size-cells = <2>;
|
#size-cells = <2>;
|
||||||
@@ -115,7 +115,7 @@
|
|||||||
|
|
||||||
pcie3: pcie@3,0 {
|
pcie3: pcie@3,0 {
|
||||||
device_type = "pci";
|
device_type = "pci";
|
||||||
assigned-addresses = <0x82000800 0 0x48000 0 0x2000>;
|
assigned-addresses = <0x82001800 0 0x48000 0 0x2000>;
|
||||||
reg = <0x1800 0 0 0 0>;
|
reg = <0x1800 0 0 0 0>;
|
||||||
#address-cells = <3>;
|
#address-cells = <3>;
|
||||||
#size-cells = <2>;
|
#size-cells = <2>;
|
||||||
@@ -133,7 +133,7 @@
|
|||||||
|
|
||||||
pcie4: pcie@4,0 {
|
pcie4: pcie@4,0 {
|
||||||
device_type = "pci";
|
device_type = "pci";
|
||||||
assigned-addresses = <0x82000800 0 0x4c000 0 0x2000>;
|
assigned-addresses = <0x82002000 0 0x4c000 0 0x2000>;
|
||||||
reg = <0x2000 0 0 0 0>;
|
reg = <0x2000 0 0 0 0>;
|
||||||
#address-cells = <3>;
|
#address-cells = <3>;
|
||||||
#size-cells = <2>;
|
#size-cells = <2>;
|
||||||
@@ -151,7 +151,7 @@
|
|||||||
|
|
||||||
pcie5: pcie@5,0 {
|
pcie5: pcie@5,0 {
|
||||||
device_type = "pci";
|
device_type = "pci";
|
||||||
assigned-addresses = <0x82000800 0 0x80000 0 0x2000>;
|
assigned-addresses = <0x82002800 0 0x80000 0 0x2000>;
|
||||||
reg = <0x2800 0 0 0 0>;
|
reg = <0x2800 0 0 0 0>;
|
||||||
#address-cells = <3>;
|
#address-cells = <3>;
|
||||||
#size-cells = <2>;
|
#size-cells = <2>;
|
||||||
|
|||||||
@@ -112,7 +112,7 @@
|
|||||||
|
|
||||||
pcie2: pcie@2,0 {
|
pcie2: pcie@2,0 {
|
||||||
device_type = "pci";
|
device_type = "pci";
|
||||||
assigned-addresses = <0x82000800 0 0x44000 0 0x2000>;
|
assigned-addresses = <0x82001000 0 0x44000 0 0x2000>;
|
||||||
reg = <0x1000 0 0 0 0>;
|
reg = <0x1000 0 0 0 0>;
|
||||||
#address-cells = <3>;
|
#address-cells = <3>;
|
||||||
#size-cells = <2>;
|
#size-cells = <2>;
|
||||||
@@ -130,7 +130,7 @@
|
|||||||
|
|
||||||
pcie3: pcie@3,0 {
|
pcie3: pcie@3,0 {
|
||||||
device_type = "pci";
|
device_type = "pci";
|
||||||
assigned-addresses = <0x82000800 0 0x48000 0 0x2000>;
|
assigned-addresses = <0x82001800 0 0x48000 0 0x2000>;
|
||||||
reg = <0x1800 0 0 0 0>;
|
reg = <0x1800 0 0 0 0>;
|
||||||
#address-cells = <3>;
|
#address-cells = <3>;
|
||||||
#size-cells = <2>;
|
#size-cells = <2>;
|
||||||
@@ -148,7 +148,7 @@
|
|||||||
|
|
||||||
pcie4: pcie@4,0 {
|
pcie4: pcie@4,0 {
|
||||||
device_type = "pci";
|
device_type = "pci";
|
||||||
assigned-addresses = <0x82000800 0 0x4c000 0 0x2000>;
|
assigned-addresses = <0x82002000 0 0x4c000 0 0x2000>;
|
||||||
reg = <0x2000 0 0 0 0>;
|
reg = <0x2000 0 0 0 0>;
|
||||||
#address-cells = <3>;
|
#address-cells = <3>;
|
||||||
#size-cells = <2>;
|
#size-cells = <2>;
|
||||||
@@ -166,7 +166,7 @@
|
|||||||
|
|
||||||
pcie5: pcie@5,0 {
|
pcie5: pcie@5,0 {
|
||||||
device_type = "pci";
|
device_type = "pci";
|
||||||
assigned-addresses = <0x82000800 0 0x80000 0 0x2000>;
|
assigned-addresses = <0x82002800 0 0x80000 0 0x2000>;
|
||||||
reg = <0x2800 0 0 0 0>;
|
reg = <0x2800 0 0 0 0>;
|
||||||
#address-cells = <3>;
|
#address-cells = <3>;
|
||||||
#size-cells = <2>;
|
#size-cells = <2>;
|
||||||
@@ -184,7 +184,7 @@
|
|||||||
|
|
||||||
pcie6: pcie@6,0 {
|
pcie6: pcie@6,0 {
|
||||||
device_type = "pci";
|
device_type = "pci";
|
||||||
assigned-addresses = <0x82000800 0 0x84000 0 0x2000>;
|
assigned-addresses = <0x82003000 0 0x84000 0 0x2000>;
|
||||||
reg = <0x3000 0 0 0 0>;
|
reg = <0x3000 0 0 0 0>;
|
||||||
#address-cells = <3>;
|
#address-cells = <3>;
|
||||||
#size-cells = <2>;
|
#size-cells = <2>;
|
||||||
@@ -202,7 +202,7 @@
|
|||||||
|
|
||||||
pcie7: pcie@7,0 {
|
pcie7: pcie@7,0 {
|
||||||
device_type = "pci";
|
device_type = "pci";
|
||||||
assigned-addresses = <0x82000800 0 0x88000 0 0x2000>;
|
assigned-addresses = <0x82003800 0 0x88000 0 0x2000>;
|
||||||
reg = <0x3800 0 0 0 0>;
|
reg = <0x3800 0 0 0 0>;
|
||||||
#address-cells = <3>;
|
#address-cells = <3>;
|
||||||
#size-cells = <2>;
|
#size-cells = <2>;
|
||||||
@@ -220,7 +220,7 @@
|
|||||||
|
|
||||||
pcie8: pcie@8,0 {
|
pcie8: pcie@8,0 {
|
||||||
device_type = "pci";
|
device_type = "pci";
|
||||||
assigned-addresses = <0x82000800 0 0x8c000 0 0x2000>;
|
assigned-addresses = <0x82004000 0 0x8c000 0 0x2000>;
|
||||||
reg = <0x4000 0 0 0 0>;
|
reg = <0x4000 0 0 0 0>;
|
||||||
#address-cells = <3>;
|
#address-cells = <3>;
|
||||||
#size-cells = <2>;
|
#size-cells = <2>;
|
||||||
@@ -238,7 +238,7 @@
|
|||||||
|
|
||||||
pcie9: pcie@9,0 {
|
pcie9: pcie@9,0 {
|
||||||
device_type = "pci";
|
device_type = "pci";
|
||||||
assigned-addresses = <0x82000800 0 0x42000 0 0x2000>;
|
assigned-addresses = <0x82004800 0 0x42000 0 0x2000>;
|
||||||
reg = <0x4800 0 0 0 0>;
|
reg = <0x4800 0 0 0 0>;
|
||||||
#address-cells = <3>;
|
#address-cells = <3>;
|
||||||
#size-cells = <2>;
|
#size-cells = <2>;
|
||||||
|
|||||||
@@ -129,7 +129,7 @@
|
|||||||
pcie1: pcie@2 {
|
pcie1: pcie@2 {
|
||||||
device_type = "pci";
|
device_type = "pci";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
assigned-addresses = <0x82002800 0 0x80000 0 0x2000>;
|
assigned-addresses = <0x82001000 0 0x80000 0 0x2000>;
|
||||||
reg = <0x1000 0 0 0 0>;
|
reg = <0x1000 0 0 0 0>;
|
||||||
clocks = <&gate_clk 5>;
|
clocks = <&gate_clk 5>;
|
||||||
marvell,pcie-port = <1>;
|
marvell,pcie-port = <1>;
|
||||||
|
|||||||
@@ -366,7 +366,7 @@
|
|||||||
spi-max-frequency = <20000000>;
|
spi-max-frequency = <20000000>;
|
||||||
spi-rx-bus-width = <2>;
|
spi-rx-bus-width = <2>;
|
||||||
label = "bmc";
|
label = "bmc";
|
||||||
partitions@80000000 {
|
partitions {
|
||||||
compatible = "fixed-partitions";
|
compatible = "fixed-partitions";
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
|
|||||||
@@ -142,7 +142,7 @@
|
|||||||
reg = <0>;
|
reg = <0>;
|
||||||
spi-rx-bus-width = <2>;
|
spi-rx-bus-width = <2>;
|
||||||
|
|
||||||
partitions@80000000 {
|
partitions {
|
||||||
compatible = "fixed-partitions";
|
compatible = "fixed-partitions";
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
|
|||||||
@@ -388,7 +388,7 @@
|
|||||||
spi-max-frequency = <5000000>;
|
spi-max-frequency = <5000000>;
|
||||||
spi-rx-bus-width = <2>;
|
spi-rx-bus-width = <2>;
|
||||||
label = "bmc";
|
label = "bmc";
|
||||||
partitions@80000000 {
|
partitions {
|
||||||
compatible = "fixed-partitions";
|
compatible = "fixed-partitions";
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
@@ -422,7 +422,7 @@
|
|||||||
reg = <1>;
|
reg = <1>;
|
||||||
spi-max-frequency = <5000000>;
|
spi-max-frequency = <5000000>;
|
||||||
spi-rx-bus-width = <2>;
|
spi-rx-bus-width = <2>;
|
||||||
partitions@88000000 {
|
partitions {
|
||||||
compatible = "fixed-partitions";
|
compatible = "fixed-partitions";
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
@@ -447,7 +447,7 @@
|
|||||||
reg = <0>;
|
reg = <0>;
|
||||||
spi-max-frequency = <5000000>;
|
spi-max-frequency = <5000000>;
|
||||||
spi-rx-bus-width = <2>;
|
spi-rx-bus-width = <2>;
|
||||||
partitions@A0000000 {
|
partitions {
|
||||||
compatible = "fixed-partitions";
|
compatible = "fixed-partitions";
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
|
|||||||
@@ -74,7 +74,7 @@
|
|||||||
spi-rx-bus-width = <2>;
|
spi-rx-bus-width = <2>;
|
||||||
reg = <0>;
|
reg = <0>;
|
||||||
spi-max-frequency = <5000000>;
|
spi-max-frequency = <5000000>;
|
||||||
partitions@80000000 {
|
partitions {
|
||||||
compatible = "fixed-partitions";
|
compatible = "fixed-partitions";
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
@@ -135,7 +135,7 @@
|
|||||||
spi-rx-bus-width = <2>;
|
spi-rx-bus-width = <2>;
|
||||||
reg = <0>;
|
reg = <0>;
|
||||||
spi-max-frequency = <5000000>;
|
spi-max-frequency = <5000000>;
|
||||||
partitions@A0000000 {
|
partitions {
|
||||||
compatible = "fixed-partitions";
|
compatible = "fixed-partitions";
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
|
|||||||
@@ -107,7 +107,7 @@
|
|||||||
reg = <0>;
|
reg = <0>;
|
||||||
spi-rx-bus-width = <2>;
|
spi-rx-bus-width = <2>;
|
||||||
|
|
||||||
partitions@80000000 {
|
partitions {
|
||||||
compatible = "fixed-partitions";
|
compatible = "fixed-partitions";
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
@@ -146,7 +146,7 @@
|
|||||||
reg = <1>;
|
reg = <1>;
|
||||||
npcm,fiu-rx-bus-width = <2>;
|
npcm,fiu-rx-bus-width = <2>;
|
||||||
|
|
||||||
partitions@88000000 {
|
partitions {
|
||||||
compatible = "fixed-partitions";
|
compatible = "fixed-partitions";
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
@@ -173,7 +173,7 @@
|
|||||||
reg = <0>;
|
reg = <0>;
|
||||||
spi-rx-bus-width = <2>;
|
spi-rx-bus-width = <2>;
|
||||||
|
|
||||||
partitions@A0000000 {
|
partitions {
|
||||||
compatible = "fixed-partitions";
|
compatible = "fixed-partitions";
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
|
|||||||
@@ -1571,7 +1571,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
etb@1a01000 {
|
etb@1a01000 {
|
||||||
compatible = "coresight-etb10", "arm,primecell";
|
compatible = "arm,coresight-etb10", "arm,primecell";
|
||||||
reg = <0x1a01000 0x1000>;
|
reg = <0x1a01000 0x1000>;
|
||||||
|
|
||||||
clocks = <&rpmcc RPM_QDSS_CLK>;
|
clocks = <&rpmcc RPM_QDSS_CLK>;
|
||||||
|
|||||||
@@ -47,7 +47,7 @@
|
|||||||
compatible = "arm,pl110", "arm,primecell";
|
compatible = "arm,pl110", "arm,primecell";
|
||||||
reg = <0xfc200000 0x1000>;
|
reg = <0xfc200000 0x1000>;
|
||||||
interrupt-parent = <&vic1>;
|
interrupt-parent = <&vic1>;
|
||||||
interrupts = <12>;
|
interrupts = <13>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,6 @@
|
|||||||
/dts-v1/;
|
/dts-v1/;
|
||||||
|
|
||||||
#include "stm32mp157.dtsi"
|
#include "stm32mp157.dtsi"
|
||||||
#include "stm32mp15xc.dtsi"
|
|
||||||
#include "stm32mp15xx-dhcor-som.dtsi"
|
#include "stm32mp15xx-dhcor-som.dtsi"
|
||||||
#include "stm32mp15xx-dhcor-avenger96.dtsi"
|
#include "stm32mp15xx-dhcor-avenger96.dtsi"
|
||||||
|
|
||||||
|
|||||||
@@ -100,7 +100,7 @@
|
|||||||
regulator-min-microvolt = <3300000>;
|
regulator-min-microvolt = <3300000>;
|
||||||
regulator-max-microvolt = <3300000>;
|
regulator-max-microvolt = <3300000>;
|
||||||
|
|
||||||
gpios = <&gpioz 3 GPIO_ACTIVE_HIGH>;
|
gpio = <&gpioz 3 GPIO_ACTIVE_HIGH>;
|
||||||
enable-active-high;
|
enable-active-high;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -129,15 +129,16 @@ extern int vfp_restore_user_hwstate(struct user_vfp *,
|
|||||||
#define TIF_NEED_RESCHED 1 /* rescheduling necessary */
|
#define TIF_NEED_RESCHED 1 /* rescheduling necessary */
|
||||||
#define TIF_NOTIFY_RESUME 2 /* callback before returning to user */
|
#define TIF_NOTIFY_RESUME 2 /* callback before returning to user */
|
||||||
#define TIF_UPROBE 3 /* breakpointed or singlestepping */
|
#define TIF_UPROBE 3 /* breakpointed or singlestepping */
|
||||||
#define TIF_SYSCALL_TRACE 4 /* syscall trace active */
|
#define TIF_NOTIFY_SIGNAL 4 /* signal notifications exist */
|
||||||
#define TIF_SYSCALL_AUDIT 5 /* syscall auditing active */
|
|
||||||
#define TIF_SYSCALL_TRACEPOINT 6 /* syscall tracepoint instrumentation */
|
|
||||||
#define TIF_SECCOMP 7 /* seccomp syscall filtering active */
|
|
||||||
#define TIF_NOTIFY_SIGNAL 8 /* signal notifications exist */
|
|
||||||
|
|
||||||
#define TIF_USING_IWMMXT 17
|
#define TIF_USING_IWMMXT 17
|
||||||
#define TIF_MEMDIE 18 /* is terminating due to OOM killer */
|
#define TIF_MEMDIE 18 /* is terminating due to OOM killer */
|
||||||
#define TIF_RESTORE_SIGMASK 20
|
#define TIF_RESTORE_SIGMASK 19
|
||||||
|
#define TIF_SYSCALL_TRACE 20 /* syscall trace active */
|
||||||
|
#define TIF_SYSCALL_AUDIT 21 /* syscall auditing active */
|
||||||
|
#define TIF_SYSCALL_TRACEPOINT 22 /* syscall tracepoint instrumentation */
|
||||||
|
#define TIF_SECCOMP 23 /* seccomp syscall filtering active */
|
||||||
|
|
||||||
|
|
||||||
#define _TIF_SIGPENDING (1 << TIF_SIGPENDING)
|
#define _TIF_SIGPENDING (1 << TIF_SIGPENDING)
|
||||||
#define _TIF_NEED_RESCHED (1 << TIF_NEED_RESCHED)
|
#define _TIF_NEED_RESCHED (1 << TIF_NEED_RESCHED)
|
||||||
|
|||||||
@@ -43,18 +43,21 @@
|
|||||||
static void __iomem *mmp_timer_base = TIMERS_VIRT_BASE;
|
static void __iomem *mmp_timer_base = TIMERS_VIRT_BASE;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* FIXME: the timer needs some delay to stablize the counter capture
|
* Read the timer through the CVWR register. Delay is required after requesting
|
||||||
|
* a read. The CR register cannot be directly read due to metastability issues
|
||||||
|
* documented in the PXA168 software manual.
|
||||||
*/
|
*/
|
||||||
static inline uint32_t timer_read(void)
|
static inline uint32_t timer_read(void)
|
||||||
{
|
{
|
||||||
int delay = 100;
|
uint32_t val;
|
||||||
|
int delay = 3;
|
||||||
|
|
||||||
__raw_writel(1, mmp_timer_base + TMR_CVWR(1));
|
__raw_writel(1, mmp_timer_base + TMR_CVWR(1));
|
||||||
|
|
||||||
while (delay--)
|
while (delay--)
|
||||||
cpu_relax();
|
val = __raw_readl(mmp_timer_base + TMR_CVWR(1));
|
||||||
|
|
||||||
return __raw_readl(mmp_timer_base + TMR_CVWR(1));
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
static u64 notrace mmp_read_sched_clock(void)
|
static u64 notrace mmp_read_sched_clock(void)
|
||||||
|
|||||||
@@ -11,3 +11,9 @@ nwfpe-y += fpa11.o fpa11_cpdo.o fpa11_cpdt.o \
|
|||||||
entry.o
|
entry.o
|
||||||
|
|
||||||
nwfpe-$(CONFIG_FPE_NWFPE_XP) += extended_cpdo.o
|
nwfpe-$(CONFIG_FPE_NWFPE_XP) += extended_cpdo.o
|
||||||
|
|
||||||
|
# Try really hard to avoid generating calls to __aeabi_uldivmod() from
|
||||||
|
# float64_rem() due to loop elision.
|
||||||
|
ifdef CONFIG_CC_IS_CLANG
|
||||||
|
CFLAGS_softfloat.o += -mllvm -replexitval=never
|
||||||
|
endif
|
||||||
|
|||||||
@@ -125,9 +125,12 @@
|
|||||||
/delete-property/ mrvl,i2c-fast-mode;
|
/delete-property/ mrvl,i2c-fast-mode;
|
||||||
status = "okay";
|
status = "okay";
|
||||||
|
|
||||||
|
/* MCP7940MT-I/MNY RTC */
|
||||||
rtc@6f {
|
rtc@6f {
|
||||||
compatible = "microchip,mcp7940x";
|
compatible = "microchip,mcp7940x";
|
||||||
reg = <0x6f>;
|
reg = <0x6f>;
|
||||||
|
interrupt-parent = <&gpiosb>;
|
||||||
|
interrupts = <5 0>; /* GPIO2_5 */
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -26,14 +26,14 @@
|
|||||||
stdout-path = "serial0:921600n8";
|
stdout-path = "serial0:921600n8";
|
||||||
};
|
};
|
||||||
|
|
||||||
cpus_fixed_vproc0: fixedregulator@0 {
|
cpus_fixed_vproc0: regulator-vproc-buck0 {
|
||||||
compatible = "regulator-fixed";
|
compatible = "regulator-fixed";
|
||||||
regulator-name = "vproc_buck0";
|
regulator-name = "vproc_buck0";
|
||||||
regulator-min-microvolt = <1000000>;
|
regulator-min-microvolt = <1000000>;
|
||||||
regulator-max-microvolt = <1000000>;
|
regulator-max-microvolt = <1000000>;
|
||||||
};
|
};
|
||||||
|
|
||||||
cpus_fixed_vproc1: fixedregulator@1 {
|
cpus_fixed_vproc1: regulator-vproc-buck1 {
|
||||||
compatible = "regulator-fixed";
|
compatible = "regulator-fixed";
|
||||||
regulator-name = "vproc_buck1";
|
regulator-name = "vproc_buck1";
|
||||||
regulator-min-microvolt = <1000000>;
|
regulator-min-microvolt = <1000000>;
|
||||||
@@ -50,7 +50,7 @@
|
|||||||
id-gpio = <&pio 14 GPIO_ACTIVE_HIGH>;
|
id-gpio = <&pio 14 GPIO_ACTIVE_HIGH>;
|
||||||
};
|
};
|
||||||
|
|
||||||
usb_p0_vbus: regulator@2 {
|
usb_p0_vbus: regulator-usb-p0-vbus {
|
||||||
compatible = "regulator-fixed";
|
compatible = "regulator-fixed";
|
||||||
regulator-name = "p0_vbus";
|
regulator-name = "p0_vbus";
|
||||||
regulator-min-microvolt = <5000000>;
|
regulator-min-microvolt = <5000000>;
|
||||||
@@ -59,7 +59,7 @@
|
|||||||
enable-active-high;
|
enable-active-high;
|
||||||
};
|
};
|
||||||
|
|
||||||
usb_p1_vbus: regulator@3 {
|
usb_p1_vbus: regulator-usb-p1-vbus {
|
||||||
compatible = "regulator-fixed";
|
compatible = "regulator-fixed";
|
||||||
regulator-name = "p1_vbus";
|
regulator-name = "p1_vbus";
|
||||||
regulator-min-microvolt = <5000000>;
|
regulator-min-microvolt = <5000000>;
|
||||||
@@ -68,7 +68,7 @@
|
|||||||
enable-active-high;
|
enable-active-high;
|
||||||
};
|
};
|
||||||
|
|
||||||
usb_p2_vbus: regulator@4 {
|
usb_p2_vbus: regulator-usb-p2-vbus {
|
||||||
compatible = "regulator-fixed";
|
compatible = "regulator-fixed";
|
||||||
regulator-name = "p2_vbus";
|
regulator-name = "p2_vbus";
|
||||||
regulator-min-microvolt = <5000000>;
|
regulator-min-microvolt = <5000000>;
|
||||||
@@ -77,7 +77,7 @@
|
|||||||
enable-active-high;
|
enable-active-high;
|
||||||
};
|
};
|
||||||
|
|
||||||
usb_p3_vbus: regulator@5 {
|
usb_p3_vbus: regulator-usb-p3-vbus {
|
||||||
compatible = "regulator-fixed";
|
compatible = "regulator-fixed";
|
||||||
regulator-name = "p3_vbus";
|
regulator-name = "p3_vbus";
|
||||||
regulator-min-microvolt = <5000000>;
|
regulator-min-microvolt = <5000000>;
|
||||||
|
|||||||
@@ -160,70 +160,70 @@
|
|||||||
#clock-cells = <0>;
|
#clock-cells = <0>;
|
||||||
};
|
};
|
||||||
|
|
||||||
clk26m: oscillator@0 {
|
clk26m: oscillator-26m {
|
||||||
compatible = "fixed-clock";
|
compatible = "fixed-clock";
|
||||||
#clock-cells = <0>;
|
#clock-cells = <0>;
|
||||||
clock-frequency = <26000000>;
|
clock-frequency = <26000000>;
|
||||||
clock-output-names = "clk26m";
|
clock-output-names = "clk26m";
|
||||||
};
|
};
|
||||||
|
|
||||||
clk32k: oscillator@1 {
|
clk32k: oscillator-32k {
|
||||||
compatible = "fixed-clock";
|
compatible = "fixed-clock";
|
||||||
#clock-cells = <0>;
|
#clock-cells = <0>;
|
||||||
clock-frequency = <32768>;
|
clock-frequency = <32768>;
|
||||||
clock-output-names = "clk32k";
|
clock-output-names = "clk32k";
|
||||||
};
|
};
|
||||||
|
|
||||||
clkfpc: oscillator@2 {
|
clkfpc: oscillator-50m {
|
||||||
compatible = "fixed-clock";
|
compatible = "fixed-clock";
|
||||||
#clock-cells = <0>;
|
#clock-cells = <0>;
|
||||||
clock-frequency = <50000000>;
|
clock-frequency = <50000000>;
|
||||||
clock-output-names = "clkfpc";
|
clock-output-names = "clkfpc";
|
||||||
};
|
};
|
||||||
|
|
||||||
clkaud_ext_i_0: oscillator@3 {
|
clkaud_ext_i_0: oscillator-aud0 {
|
||||||
compatible = "fixed-clock";
|
compatible = "fixed-clock";
|
||||||
#clock-cells = <0>;
|
#clock-cells = <0>;
|
||||||
clock-frequency = <6500000>;
|
clock-frequency = <6500000>;
|
||||||
clock-output-names = "clkaud_ext_i_0";
|
clock-output-names = "clkaud_ext_i_0";
|
||||||
};
|
};
|
||||||
|
|
||||||
clkaud_ext_i_1: oscillator@4 {
|
clkaud_ext_i_1: oscillator-aud1 {
|
||||||
compatible = "fixed-clock";
|
compatible = "fixed-clock";
|
||||||
#clock-cells = <0>;
|
#clock-cells = <0>;
|
||||||
clock-frequency = <196608000>;
|
clock-frequency = <196608000>;
|
||||||
clock-output-names = "clkaud_ext_i_1";
|
clock-output-names = "clkaud_ext_i_1";
|
||||||
};
|
};
|
||||||
|
|
||||||
clkaud_ext_i_2: oscillator@5 {
|
clkaud_ext_i_2: oscillator-aud2 {
|
||||||
compatible = "fixed-clock";
|
compatible = "fixed-clock";
|
||||||
#clock-cells = <0>;
|
#clock-cells = <0>;
|
||||||
clock-frequency = <180633600>;
|
clock-frequency = <180633600>;
|
||||||
clock-output-names = "clkaud_ext_i_2";
|
clock-output-names = "clkaud_ext_i_2";
|
||||||
};
|
};
|
||||||
|
|
||||||
clki2si0_mck_i: oscillator@6 {
|
clki2si0_mck_i: oscillator-i2s0 {
|
||||||
compatible = "fixed-clock";
|
compatible = "fixed-clock";
|
||||||
#clock-cells = <0>;
|
#clock-cells = <0>;
|
||||||
clock-frequency = <30000000>;
|
clock-frequency = <30000000>;
|
||||||
clock-output-names = "clki2si0_mck_i";
|
clock-output-names = "clki2si0_mck_i";
|
||||||
};
|
};
|
||||||
|
|
||||||
clki2si1_mck_i: oscillator@7 {
|
clki2si1_mck_i: oscillator-i2s1 {
|
||||||
compatible = "fixed-clock";
|
compatible = "fixed-clock";
|
||||||
#clock-cells = <0>;
|
#clock-cells = <0>;
|
||||||
clock-frequency = <30000000>;
|
clock-frequency = <30000000>;
|
||||||
clock-output-names = "clki2si1_mck_i";
|
clock-output-names = "clki2si1_mck_i";
|
||||||
};
|
};
|
||||||
|
|
||||||
clki2si2_mck_i: oscillator@8 {
|
clki2si2_mck_i: oscillator-i2s2 {
|
||||||
compatible = "fixed-clock";
|
compatible = "fixed-clock";
|
||||||
#clock-cells = <0>;
|
#clock-cells = <0>;
|
||||||
clock-frequency = <30000000>;
|
clock-frequency = <30000000>;
|
||||||
clock-output-names = "clki2si2_mck_i";
|
clock-output-names = "clki2si2_mck_i";
|
||||||
};
|
};
|
||||||
|
|
||||||
clktdmin_mclk_i: oscillator@9 {
|
clktdmin_mclk_i: oscillator-mclk {
|
||||||
compatible = "fixed-clock";
|
compatible = "fixed-clock";
|
||||||
#clock-cells = <0>;
|
#clock-cells = <0>;
|
||||||
clock-frequency = <30000000>;
|
clock-frequency = <30000000>;
|
||||||
@@ -266,7 +266,7 @@
|
|||||||
reg = <0 0x10005000 0 0x1000>;
|
reg = <0 0x10005000 0 0x1000>;
|
||||||
};
|
};
|
||||||
|
|
||||||
pio: pinctrl@10005000 {
|
pio: pinctrl@1000b000 {
|
||||||
compatible = "mediatek,mt2712-pinctrl";
|
compatible = "mediatek,mt2712-pinctrl";
|
||||||
reg = <0 0x1000b000 0 0x1000>;
|
reg = <0 0x1000b000 0 0x1000>;
|
||||||
mediatek,pctl-regmap = <&syscfg_pctl_a>;
|
mediatek,pctl-regmap = <&syscfg_pctl_a>;
|
||||||
|
|||||||
@@ -88,14 +88,14 @@
|
|||||||
interrupts = <GIC_PPI 7 IRQ_TYPE_LEVEL_LOW 0>;
|
interrupts = <GIC_PPI 7 IRQ_TYPE_LEVEL_LOW 0>;
|
||||||
};
|
};
|
||||||
|
|
||||||
clk26m: oscillator@0 {
|
clk26m: oscillator-26m {
|
||||||
compatible = "fixed-clock";
|
compatible = "fixed-clock";
|
||||||
#clock-cells = <0>;
|
#clock-cells = <0>;
|
||||||
clock-frequency = <26000000>;
|
clock-frequency = <26000000>;
|
||||||
clock-output-names = "clk26m";
|
clock-output-names = "clk26m";
|
||||||
};
|
};
|
||||||
|
|
||||||
clk32k: oscillator@1 {
|
clk32k: oscillator-32k {
|
||||||
compatible = "fixed-clock";
|
compatible = "fixed-clock";
|
||||||
#clock-cells = <0>;
|
#clock-cells = <0>;
|
||||||
clock-frequency = <32768>;
|
clock-frequency = <32768>;
|
||||||
@@ -117,7 +117,7 @@
|
|||||||
compatible = "simple-bus";
|
compatible = "simple-bus";
|
||||||
ranges;
|
ranges;
|
||||||
|
|
||||||
gic: interrupt-controller@0c000000 {
|
gic: interrupt-controller@c000000 {
|
||||||
compatible = "arm,gic-v3";
|
compatible = "arm,gic-v3";
|
||||||
#interrupt-cells = <4>;
|
#interrupt-cells = <4>;
|
||||||
interrupt-parent = <&gic>;
|
interrupt-parent = <&gic>;
|
||||||
@@ -138,7 +138,7 @@
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
sysirq: intpol-controller@0c53a650 {
|
sysirq: intpol-controller@c53a650 {
|
||||||
compatible = "mediatek,mt6779-sysirq",
|
compatible = "mediatek,mt6779-sysirq",
|
||||||
"mediatek,mt6577-sysirq";
|
"mediatek,mt6577-sysirq";
|
||||||
interrupt-controller;
|
interrupt-controller;
|
||||||
|
|||||||
@@ -95,7 +95,7 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
clk26m: oscillator@0 {
|
clk26m: oscillator-26m {
|
||||||
compatible = "fixed-clock";
|
compatible = "fixed-clock";
|
||||||
#clock-cells = <0>;
|
#clock-cells = <0>;
|
||||||
clock-frequency = <26000000>;
|
clock-frequency = <26000000>;
|
||||||
|
|||||||
@@ -1212,7 +1212,7 @@
|
|||||||
<GIC_SPI 278 IRQ_TYPE_LEVEL_LOW>;
|
<GIC_SPI 278 IRQ_TYPE_LEVEL_LOW>;
|
||||||
interrupt-names = "job", "mmu", "gpu";
|
interrupt-names = "job", "mmu", "gpu";
|
||||||
|
|
||||||
clocks = <&topckgen CLK_TOP_MFGPLL_CK>;
|
clocks = <&mfgcfg CLK_MFG_BG3D>;
|
||||||
|
|
||||||
power-domains =
|
power-domains =
|
||||||
<&spm MT8183_POWER_DOMAIN_MFG_CORE0>,
|
<&spm MT8183_POWER_DOMAIN_MFG_CORE0>,
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
firmware {
|
firmware {
|
||||||
optee: optee@4fd00000 {
|
optee: optee {
|
||||||
compatible = "linaro,optee-tz";
|
compatible = "linaro,optee-tz";
|
||||||
method = "smc";
|
method = "smc";
|
||||||
};
|
};
|
||||||
@@ -210,7 +210,7 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
i2c0_pins_a: i2c0@0 {
|
i2c0_pins_a: i2c0 {
|
||||||
pins1 {
|
pins1 {
|
||||||
pinmux = <MT8516_PIN_58_SDA0__FUNC_SDA0_0>,
|
pinmux = <MT8516_PIN_58_SDA0__FUNC_SDA0_0>,
|
||||||
<MT8516_PIN_59_SCL0__FUNC_SCL0_0>;
|
<MT8516_PIN_59_SCL0__FUNC_SCL0_0>;
|
||||||
@@ -218,7 +218,7 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
i2c2_pins_a: i2c2@0 {
|
i2c2_pins_a: i2c2 {
|
||||||
pins1 {
|
pins1 {
|
||||||
pinmux = <MT8516_PIN_60_SDA2__FUNC_SDA2_0>,
|
pinmux = <MT8516_PIN_60_SDA2__FUNC_SDA2_0>,
|
||||||
<MT8516_PIN_61_SCL2__FUNC_SCL2_0>;
|
<MT8516_PIN_61_SCL2__FUNC_SCL2_0>;
|
||||||
|
|||||||
@@ -37,6 +37,8 @@
|
|||||||
|
|
||||||
&spi_0 {
|
&spi_0 {
|
||||||
cs-select = <0>;
|
cs-select = <0>;
|
||||||
|
pinctrl-0 = <&spi_0_pins>;
|
||||||
|
pinctrl-names = "default";
|
||||||
status = "okay";
|
status = "okay";
|
||||||
|
|
||||||
m25p80@0 {
|
m25p80@0 {
|
||||||
|
|||||||
@@ -401,7 +401,7 @@
|
|||||||
reset-names = "phy",
|
reset-names = "phy",
|
||||||
"common";
|
"common";
|
||||||
|
|
||||||
pcie_phy0: lane@84200 {
|
pcie_phy0: phy@84200 {
|
||||||
reg = <0x0 0x84200 0x0 0x16c>, /* Serdes Tx */
|
reg = <0x0 0x84200 0x0 0x16c>, /* Serdes Tx */
|
||||||
<0x0 0x84400 0x0 0x200>, /* Serdes Rx */
|
<0x0 0x84400 0x0 0x200>, /* Serdes Rx */
|
||||||
<0x0 0x84800 0x0 0x4f4>; /* PCS: Lane0, COM, PCIE */
|
<0x0 0x84800 0x0 0x4f4>; /* PCS: Lane0, COM, PCIE */
|
||||||
|
|||||||
@@ -106,7 +106,7 @@
|
|||||||
reset-names = "phy","common";
|
reset-names = "phy","common";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
|
||||||
usb1_ssphy: lane@58200 {
|
usb1_ssphy: phy@58200 {
|
||||||
reg = <0x00058200 0x130>, /* Tx */
|
reg = <0x00058200 0x130>, /* Tx */
|
||||||
<0x00058400 0x200>, /* Rx */
|
<0x00058400 0x200>, /* Rx */
|
||||||
<0x00058800 0x1f8>, /* PCS */
|
<0x00058800 0x1f8>, /* PCS */
|
||||||
@@ -149,7 +149,7 @@
|
|||||||
reset-names = "phy","common";
|
reset-names = "phy","common";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
|
||||||
usb0_ssphy: lane@78200 {
|
usb0_ssphy: phy@78200 {
|
||||||
reg = <0x00078200 0x130>, /* Tx */
|
reg = <0x00078200 0x130>, /* Tx */
|
||||||
<0x00078400 0x200>, /* Rx */
|
<0x00078400 0x200>, /* Rx */
|
||||||
<0x00078800 0x1f8>, /* PCS */
|
<0x00078800 0x1f8>, /* PCS */
|
||||||
|
|||||||
@@ -1307,7 +1307,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
mpss: remoteproc@4080000 {
|
mpss: remoteproc@4080000 {
|
||||||
compatible = "qcom,msm8916-mss-pil", "qcom,q6v5-pil";
|
compatible = "qcom,msm8916-mss-pil";
|
||||||
reg = <0x04080000 0x100>,
|
reg = <0x04080000 0x100>,
|
||||||
<0x04020000 0x040>;
|
<0x04020000 0x040>;
|
||||||
|
|
||||||
|
|||||||
@@ -142,82 +142,92 @@
|
|||||||
/* Nominal fmax for now */
|
/* Nominal fmax for now */
|
||||||
opp-307200000 {
|
opp-307200000 {
|
||||||
opp-hz = /bits/ 64 <307200000>;
|
opp-hz = /bits/ 64 <307200000>;
|
||||||
opp-supported-hw = <0x77>;
|
opp-supported-hw = <0x7>;
|
||||||
clock-latency-ns = <200000>;
|
clock-latency-ns = <200000>;
|
||||||
};
|
};
|
||||||
opp-422400000 {
|
opp-422400000 {
|
||||||
opp-hz = /bits/ 64 <422400000>;
|
opp-hz = /bits/ 64 <422400000>;
|
||||||
opp-supported-hw = <0x77>;
|
opp-supported-hw = <0x7>;
|
||||||
clock-latency-ns = <200000>;
|
clock-latency-ns = <200000>;
|
||||||
};
|
};
|
||||||
opp-480000000 {
|
opp-480000000 {
|
||||||
opp-hz = /bits/ 64 <480000000>;
|
opp-hz = /bits/ 64 <480000000>;
|
||||||
opp-supported-hw = <0x77>;
|
opp-supported-hw = <0x7>;
|
||||||
clock-latency-ns = <200000>;
|
clock-latency-ns = <200000>;
|
||||||
};
|
};
|
||||||
opp-556800000 {
|
opp-556800000 {
|
||||||
opp-hz = /bits/ 64 <556800000>;
|
opp-hz = /bits/ 64 <556800000>;
|
||||||
opp-supported-hw = <0x77>;
|
opp-supported-hw = <0x7>;
|
||||||
clock-latency-ns = <200000>;
|
clock-latency-ns = <200000>;
|
||||||
};
|
};
|
||||||
opp-652800000 {
|
opp-652800000 {
|
||||||
opp-hz = /bits/ 64 <652800000>;
|
opp-hz = /bits/ 64 <652800000>;
|
||||||
opp-supported-hw = <0x77>;
|
opp-supported-hw = <0x7>;
|
||||||
clock-latency-ns = <200000>;
|
clock-latency-ns = <200000>;
|
||||||
};
|
};
|
||||||
opp-729600000 {
|
opp-729600000 {
|
||||||
opp-hz = /bits/ 64 <729600000>;
|
opp-hz = /bits/ 64 <729600000>;
|
||||||
opp-supported-hw = <0x77>;
|
opp-supported-hw = <0x7>;
|
||||||
clock-latency-ns = <200000>;
|
clock-latency-ns = <200000>;
|
||||||
};
|
};
|
||||||
opp-844800000 {
|
opp-844800000 {
|
||||||
opp-hz = /bits/ 64 <844800000>;
|
opp-hz = /bits/ 64 <844800000>;
|
||||||
opp-supported-hw = <0x77>;
|
opp-supported-hw = <0x7>;
|
||||||
clock-latency-ns = <200000>;
|
clock-latency-ns = <200000>;
|
||||||
};
|
};
|
||||||
opp-960000000 {
|
opp-960000000 {
|
||||||
opp-hz = /bits/ 64 <960000000>;
|
opp-hz = /bits/ 64 <960000000>;
|
||||||
opp-supported-hw = <0x77>;
|
opp-supported-hw = <0x7>;
|
||||||
clock-latency-ns = <200000>;
|
clock-latency-ns = <200000>;
|
||||||
};
|
};
|
||||||
opp-1036800000 {
|
opp-1036800000 {
|
||||||
opp-hz = /bits/ 64 <1036800000>;
|
opp-hz = /bits/ 64 <1036800000>;
|
||||||
opp-supported-hw = <0x77>;
|
opp-supported-hw = <0x7>;
|
||||||
clock-latency-ns = <200000>;
|
clock-latency-ns = <200000>;
|
||||||
};
|
};
|
||||||
opp-1113600000 {
|
opp-1113600000 {
|
||||||
opp-hz = /bits/ 64 <1113600000>;
|
opp-hz = /bits/ 64 <1113600000>;
|
||||||
opp-supported-hw = <0x77>;
|
opp-supported-hw = <0x7>;
|
||||||
clock-latency-ns = <200000>;
|
clock-latency-ns = <200000>;
|
||||||
};
|
};
|
||||||
opp-1190400000 {
|
opp-1190400000 {
|
||||||
opp-hz = /bits/ 64 <1190400000>;
|
opp-hz = /bits/ 64 <1190400000>;
|
||||||
opp-supported-hw = <0x77>;
|
opp-supported-hw = <0x7>;
|
||||||
clock-latency-ns = <200000>;
|
clock-latency-ns = <200000>;
|
||||||
};
|
};
|
||||||
opp-1228800000 {
|
opp-1228800000 {
|
||||||
opp-hz = /bits/ 64 <1228800000>;
|
opp-hz = /bits/ 64 <1228800000>;
|
||||||
opp-supported-hw = <0x77>;
|
opp-supported-hw = <0x7>;
|
||||||
clock-latency-ns = <200000>;
|
clock-latency-ns = <200000>;
|
||||||
};
|
};
|
||||||
opp-1324800000 {
|
opp-1324800000 {
|
||||||
opp-hz = /bits/ 64 <1324800000>;
|
opp-hz = /bits/ 64 <1324800000>;
|
||||||
opp-supported-hw = <0x77>;
|
opp-supported-hw = <0x5>;
|
||||||
|
clock-latency-ns = <200000>;
|
||||||
|
};
|
||||||
|
opp-1363200000 {
|
||||||
|
opp-hz = /bits/ 64 <1363200000>;
|
||||||
|
opp-supported-hw = <0x2>;
|
||||||
clock-latency-ns = <200000>;
|
clock-latency-ns = <200000>;
|
||||||
};
|
};
|
||||||
opp-1401600000 {
|
opp-1401600000 {
|
||||||
opp-hz = /bits/ 64 <1401600000>;
|
opp-hz = /bits/ 64 <1401600000>;
|
||||||
opp-supported-hw = <0x77>;
|
opp-supported-hw = <0x5>;
|
||||||
clock-latency-ns = <200000>;
|
clock-latency-ns = <200000>;
|
||||||
};
|
};
|
||||||
opp-1478400000 {
|
opp-1478400000 {
|
||||||
opp-hz = /bits/ 64 <1478400000>;
|
opp-hz = /bits/ 64 <1478400000>;
|
||||||
opp-supported-hw = <0x77>;
|
opp-supported-hw = <0x1>;
|
||||||
|
clock-latency-ns = <200000>;
|
||||||
|
};
|
||||||
|
opp-1497600000 {
|
||||||
|
opp-hz = /bits/ 64 <1497600000>;
|
||||||
|
opp-supported-hw = <0x04>;
|
||||||
clock-latency-ns = <200000>;
|
clock-latency-ns = <200000>;
|
||||||
};
|
};
|
||||||
opp-1593600000 {
|
opp-1593600000 {
|
||||||
opp-hz = /bits/ 64 <1593600000>;
|
opp-hz = /bits/ 64 <1593600000>;
|
||||||
opp-supported-hw = <0x77>;
|
opp-supported-hw = <0x1>;
|
||||||
clock-latency-ns = <200000>;
|
clock-latency-ns = <200000>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@@ -230,127 +240,137 @@
|
|||||||
/* Nominal fmax for now */
|
/* Nominal fmax for now */
|
||||||
opp-307200000 {
|
opp-307200000 {
|
||||||
opp-hz = /bits/ 64 <307200000>;
|
opp-hz = /bits/ 64 <307200000>;
|
||||||
opp-supported-hw = <0x77>;
|
opp-supported-hw = <0x7>;
|
||||||
clock-latency-ns = <200000>;
|
clock-latency-ns = <200000>;
|
||||||
};
|
};
|
||||||
opp-403200000 {
|
opp-403200000 {
|
||||||
opp-hz = /bits/ 64 <403200000>;
|
opp-hz = /bits/ 64 <403200000>;
|
||||||
opp-supported-hw = <0x77>;
|
opp-supported-hw = <0x7>;
|
||||||
clock-latency-ns = <200000>;
|
clock-latency-ns = <200000>;
|
||||||
};
|
};
|
||||||
opp-480000000 {
|
opp-480000000 {
|
||||||
opp-hz = /bits/ 64 <480000000>;
|
opp-hz = /bits/ 64 <480000000>;
|
||||||
opp-supported-hw = <0x77>;
|
opp-supported-hw = <0x7>;
|
||||||
clock-latency-ns = <200000>;
|
clock-latency-ns = <200000>;
|
||||||
};
|
};
|
||||||
opp-556800000 {
|
opp-556800000 {
|
||||||
opp-hz = /bits/ 64 <556800000>;
|
opp-hz = /bits/ 64 <556800000>;
|
||||||
opp-supported-hw = <0x77>;
|
opp-supported-hw = <0x7>;
|
||||||
clock-latency-ns = <200000>;
|
clock-latency-ns = <200000>;
|
||||||
};
|
};
|
||||||
opp-652800000 {
|
opp-652800000 {
|
||||||
opp-hz = /bits/ 64 <652800000>;
|
opp-hz = /bits/ 64 <652800000>;
|
||||||
opp-supported-hw = <0x77>;
|
opp-supported-hw = <0x7>;
|
||||||
clock-latency-ns = <200000>;
|
clock-latency-ns = <200000>;
|
||||||
};
|
};
|
||||||
opp-729600000 {
|
opp-729600000 {
|
||||||
opp-hz = /bits/ 64 <729600000>;
|
opp-hz = /bits/ 64 <729600000>;
|
||||||
opp-supported-hw = <0x77>;
|
opp-supported-hw = <0x7>;
|
||||||
clock-latency-ns = <200000>;
|
clock-latency-ns = <200000>;
|
||||||
};
|
};
|
||||||
opp-806400000 {
|
opp-806400000 {
|
||||||
opp-hz = /bits/ 64 <806400000>;
|
opp-hz = /bits/ 64 <806400000>;
|
||||||
opp-supported-hw = <0x77>;
|
opp-supported-hw = <0x7>;
|
||||||
clock-latency-ns = <200000>;
|
clock-latency-ns = <200000>;
|
||||||
};
|
};
|
||||||
opp-883200000 {
|
opp-883200000 {
|
||||||
opp-hz = /bits/ 64 <883200000>;
|
opp-hz = /bits/ 64 <883200000>;
|
||||||
opp-supported-hw = <0x77>;
|
opp-supported-hw = <0x7>;
|
||||||
clock-latency-ns = <200000>;
|
clock-latency-ns = <200000>;
|
||||||
};
|
};
|
||||||
opp-940800000 {
|
opp-940800000 {
|
||||||
opp-hz = /bits/ 64 <940800000>;
|
opp-hz = /bits/ 64 <940800000>;
|
||||||
opp-supported-hw = <0x77>;
|
opp-supported-hw = <0x7>;
|
||||||
clock-latency-ns = <200000>;
|
clock-latency-ns = <200000>;
|
||||||
};
|
};
|
||||||
opp-1036800000 {
|
opp-1036800000 {
|
||||||
opp-hz = /bits/ 64 <1036800000>;
|
opp-hz = /bits/ 64 <1036800000>;
|
||||||
opp-supported-hw = <0x77>;
|
opp-supported-hw = <0x7>;
|
||||||
clock-latency-ns = <200000>;
|
clock-latency-ns = <200000>;
|
||||||
};
|
};
|
||||||
opp-1113600000 {
|
opp-1113600000 {
|
||||||
opp-hz = /bits/ 64 <1113600000>;
|
opp-hz = /bits/ 64 <1113600000>;
|
||||||
opp-supported-hw = <0x77>;
|
opp-supported-hw = <0x7>;
|
||||||
clock-latency-ns = <200000>;
|
clock-latency-ns = <200000>;
|
||||||
};
|
};
|
||||||
opp-1190400000 {
|
opp-1190400000 {
|
||||||
opp-hz = /bits/ 64 <1190400000>;
|
opp-hz = /bits/ 64 <1190400000>;
|
||||||
opp-supported-hw = <0x77>;
|
opp-supported-hw = <0x7>;
|
||||||
clock-latency-ns = <200000>;
|
clock-latency-ns = <200000>;
|
||||||
};
|
};
|
||||||
opp-1248000000 {
|
opp-1248000000 {
|
||||||
opp-hz = /bits/ 64 <1248000000>;
|
opp-hz = /bits/ 64 <1248000000>;
|
||||||
opp-supported-hw = <0x77>;
|
opp-supported-hw = <0x7>;
|
||||||
clock-latency-ns = <200000>;
|
clock-latency-ns = <200000>;
|
||||||
};
|
};
|
||||||
opp-1324800000 {
|
opp-1324800000 {
|
||||||
opp-hz = /bits/ 64 <1324800000>;
|
opp-hz = /bits/ 64 <1324800000>;
|
||||||
opp-supported-hw = <0x77>;
|
opp-supported-hw = <0x7>;
|
||||||
clock-latency-ns = <200000>;
|
clock-latency-ns = <200000>;
|
||||||
};
|
};
|
||||||
opp-1401600000 {
|
opp-1401600000 {
|
||||||
opp-hz = /bits/ 64 <1401600000>;
|
opp-hz = /bits/ 64 <1401600000>;
|
||||||
opp-supported-hw = <0x77>;
|
opp-supported-hw = <0x7>;
|
||||||
clock-latency-ns = <200000>;
|
clock-latency-ns = <200000>;
|
||||||
};
|
};
|
||||||
opp-1478400000 {
|
opp-1478400000 {
|
||||||
opp-hz = /bits/ 64 <1478400000>;
|
opp-hz = /bits/ 64 <1478400000>;
|
||||||
opp-supported-hw = <0x77>;
|
opp-supported-hw = <0x7>;
|
||||||
clock-latency-ns = <200000>;
|
clock-latency-ns = <200000>;
|
||||||
};
|
};
|
||||||
opp-1555200000 {
|
opp-1555200000 {
|
||||||
opp-hz = /bits/ 64 <1555200000>;
|
opp-hz = /bits/ 64 <1555200000>;
|
||||||
opp-supported-hw = <0x77>;
|
opp-supported-hw = <0x7>;
|
||||||
clock-latency-ns = <200000>;
|
clock-latency-ns = <200000>;
|
||||||
};
|
};
|
||||||
opp-1632000000 {
|
opp-1632000000 {
|
||||||
opp-hz = /bits/ 64 <1632000000>;
|
opp-hz = /bits/ 64 <1632000000>;
|
||||||
opp-supported-hw = <0x77>;
|
opp-supported-hw = <0x7>;
|
||||||
clock-latency-ns = <200000>;
|
clock-latency-ns = <200000>;
|
||||||
};
|
};
|
||||||
opp-1708800000 {
|
opp-1708800000 {
|
||||||
opp-hz = /bits/ 64 <1708800000>;
|
opp-hz = /bits/ 64 <1708800000>;
|
||||||
opp-supported-hw = <0x77>;
|
opp-supported-hw = <0x7>;
|
||||||
clock-latency-ns = <200000>;
|
clock-latency-ns = <200000>;
|
||||||
};
|
};
|
||||||
opp-1785600000 {
|
opp-1785600000 {
|
||||||
opp-hz = /bits/ 64 <1785600000>;
|
opp-hz = /bits/ 64 <1785600000>;
|
||||||
opp-supported-hw = <0x77>;
|
opp-supported-hw = <0x7>;
|
||||||
|
clock-latency-ns = <200000>;
|
||||||
|
};
|
||||||
|
opp-1804800000 {
|
||||||
|
opp-hz = /bits/ 64 <1804800000>;
|
||||||
|
opp-supported-hw = <0x6>;
|
||||||
clock-latency-ns = <200000>;
|
clock-latency-ns = <200000>;
|
||||||
};
|
};
|
||||||
opp-1824000000 {
|
opp-1824000000 {
|
||||||
opp-hz = /bits/ 64 <1824000000>;
|
opp-hz = /bits/ 64 <1824000000>;
|
||||||
opp-supported-hw = <0x77>;
|
opp-supported-hw = <0x1>;
|
||||||
|
clock-latency-ns = <200000>;
|
||||||
|
};
|
||||||
|
opp-1900800000 {
|
||||||
|
opp-hz = /bits/ 64 <1900800000>;
|
||||||
|
opp-supported-hw = <0x4>;
|
||||||
clock-latency-ns = <200000>;
|
clock-latency-ns = <200000>;
|
||||||
};
|
};
|
||||||
opp-1920000000 {
|
opp-1920000000 {
|
||||||
opp-hz = /bits/ 64 <1920000000>;
|
opp-hz = /bits/ 64 <1920000000>;
|
||||||
opp-supported-hw = <0x77>;
|
opp-supported-hw = <0x1>;
|
||||||
clock-latency-ns = <200000>;
|
clock-latency-ns = <200000>;
|
||||||
};
|
};
|
||||||
opp-1996800000 {
|
opp-1996800000 {
|
||||||
opp-hz = /bits/ 64 <1996800000>;
|
opp-hz = /bits/ 64 <1996800000>;
|
||||||
opp-supported-hw = <0x77>;
|
opp-supported-hw = <0x1>;
|
||||||
clock-latency-ns = <200000>;
|
clock-latency-ns = <200000>;
|
||||||
};
|
};
|
||||||
opp-2073600000 {
|
opp-2073600000 {
|
||||||
opp-hz = /bits/ 64 <2073600000>;
|
opp-hz = /bits/ 64 <2073600000>;
|
||||||
opp-supported-hw = <0x77>;
|
opp-supported-hw = <0x1>;
|
||||||
clock-latency-ns = <200000>;
|
clock-latency-ns = <200000>;
|
||||||
};
|
};
|
||||||
opp-2150400000 {
|
opp-2150400000 {
|
||||||
opp-hz = /bits/ 64 <2150400000>;
|
opp-hz = /bits/ 64 <2150400000>;
|
||||||
opp-supported-hw = <0x77>;
|
opp-supported-hw = <0x1>;
|
||||||
clock-latency-ns = <200000>;
|
clock-latency-ns = <200000>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@@ -598,7 +618,7 @@
|
|||||||
reset-names = "phy", "common", "cfg";
|
reset-names = "phy", "common", "cfg";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
|
||||||
pciephy_0: lane@35000 {
|
pciephy_0: phy@35000 {
|
||||||
reg = <0x00035000 0x130>,
|
reg = <0x00035000 0x130>,
|
||||||
<0x00035200 0x200>,
|
<0x00035200 0x200>,
|
||||||
<0x00035400 0x1dc>;
|
<0x00035400 0x1dc>;
|
||||||
@@ -611,7 +631,7 @@
|
|||||||
reset-names = "lane0";
|
reset-names = "lane0";
|
||||||
};
|
};
|
||||||
|
|
||||||
pciephy_1: lane@36000 {
|
pciephy_1: phy@36000 {
|
||||||
reg = <0x00036000 0x130>,
|
reg = <0x00036000 0x130>,
|
||||||
<0x00036200 0x200>,
|
<0x00036200 0x200>,
|
||||||
<0x00036400 0x1dc>;
|
<0x00036400 0x1dc>;
|
||||||
@@ -624,7 +644,7 @@
|
|||||||
reset-names = "lane1";
|
reset-names = "lane1";
|
||||||
};
|
};
|
||||||
|
|
||||||
pciephy_2: lane@37000 {
|
pciephy_2: phy@37000 {
|
||||||
reg = <0x00037000 0x130>,
|
reg = <0x00037000 0x130>,
|
||||||
<0x00037200 0x200>,
|
<0x00037200 0x200>,
|
||||||
<0x00037400 0x1dc>;
|
<0x00037400 0x1dc>;
|
||||||
@@ -975,17 +995,17 @@
|
|||||||
compatible ="operating-points-v2";
|
compatible ="operating-points-v2";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 624Mhz and 560Mhz are only available on speed
|
* 624Mhz is only available on speed bins 0 and 3.
|
||||||
* bin (1 << 0). All the rest are available on
|
* 560Mhz is only available on speed bins 0, 2 and 3.
|
||||||
* all bins of the hardware
|
* All the rest are available on all bins of the hardware.
|
||||||
*/
|
*/
|
||||||
opp-624000000 {
|
opp-624000000 {
|
||||||
opp-hz = /bits/ 64 <624000000>;
|
opp-hz = /bits/ 64 <624000000>;
|
||||||
opp-supported-hw = <0x01>;
|
opp-supported-hw = <0x09>;
|
||||||
};
|
};
|
||||||
opp-560000000 {
|
opp-560000000 {
|
||||||
opp-hz = /bits/ 64 <560000000>;
|
opp-hz = /bits/ 64 <560000000>;
|
||||||
opp-supported-hw = <0x01>;
|
opp-supported-hw = <0x0d>;
|
||||||
};
|
};
|
||||||
opp-510000000 {
|
opp-510000000 {
|
||||||
opp-hz = /bits/ 64 <510000000>;
|
opp-hz = /bits/ 64 <510000000>;
|
||||||
@@ -1743,7 +1763,7 @@
|
|||||||
reset-names = "ufsphy";
|
reset-names = "ufsphy";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
|
||||||
ufsphy_lane: lanes@627400 {
|
ufsphy_lane: phy@627400 {
|
||||||
reg = <0x627400 0x12c>,
|
reg = <0x627400 0x12c>,
|
||||||
<0x627600 0x200>,
|
<0x627600 0x200>,
|
||||||
<0x627c00 0x1b4>;
|
<0x627c00 0x1b4>;
|
||||||
@@ -2598,7 +2618,7 @@
|
|||||||
reset-names = "phy", "common";
|
reset-names = "phy", "common";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
|
||||||
ssusb_phy_0: lane@7410200 {
|
ssusb_phy_0: phy@7410200 {
|
||||||
reg = <0x07410200 0x200>,
|
reg = <0x07410200 0x200>,
|
||||||
<0x07410400 0x130>,
|
<0x07410400 0x130>,
|
||||||
<0x07410600 0x1a8>;
|
<0x07410600 0x1a8>;
|
||||||
|
|||||||
266
arch/arm64/boot/dts/qcom/msm8996pro.dtsi
Normal file
266
arch/arm64/boot/dts/qcom/msm8996pro.dtsi
Normal file
@@ -0,0 +1,266 @@
|
|||||||
|
// SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2022, Linaro Limited
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "msm8996.dtsi"
|
||||||
|
|
||||||
|
/ {
|
||||||
|
/delete-node/ opp-table-cluster0;
|
||||||
|
/delete-node/ opp-table-cluster1;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* On MSM8996 Pro the cpufreq driver shifts speed bins into the high
|
||||||
|
* nibble of supported hw, so speed bin 0 becomes 0x10, speed bin 1
|
||||||
|
* becomes 0x20, speed 2 becomes 0x40.
|
||||||
|
*/
|
||||||
|
|
||||||
|
cluster0_opp: opp-table-cluster0 {
|
||||||
|
compatible = "operating-points-v2-kryo-cpu";
|
||||||
|
nvmem-cells = <&speedbin_efuse>;
|
||||||
|
opp-shared;
|
||||||
|
|
||||||
|
opp-307200000 {
|
||||||
|
opp-hz = /bits/ 64 <307200000>;
|
||||||
|
opp-supported-hw = <0x70>;
|
||||||
|
clock-latency-ns = <200000>;
|
||||||
|
};
|
||||||
|
opp-384000000 {
|
||||||
|
opp-hz = /bits/ 64 <384000000>;
|
||||||
|
opp-supported-hw = <0x70>;
|
||||||
|
clock-latency-ns = <200000>;
|
||||||
|
};
|
||||||
|
opp-460800000 {
|
||||||
|
opp-hz = /bits/ 64 <460800000>;
|
||||||
|
opp-supported-hw = <0x70>;
|
||||||
|
clock-latency-ns = <200000>;
|
||||||
|
};
|
||||||
|
opp-537600000 {
|
||||||
|
opp-hz = /bits/ 64 <537600000>;
|
||||||
|
opp-supported-hw = <0x70>;
|
||||||
|
clock-latency-ns = <200000>;
|
||||||
|
};
|
||||||
|
opp-614400000 {
|
||||||
|
opp-hz = /bits/ 64 <614400000>;
|
||||||
|
opp-supported-hw = <0x70>;
|
||||||
|
clock-latency-ns = <200000>;
|
||||||
|
};
|
||||||
|
opp-691200000 {
|
||||||
|
opp-hz = /bits/ 64 <691200000>;
|
||||||
|
opp-supported-hw = <0x70>;
|
||||||
|
clock-latency-ns = <200000>;
|
||||||
|
};
|
||||||
|
opp-768000000 {
|
||||||
|
opp-hz = /bits/ 64 <768000000>;
|
||||||
|
opp-supported-hw = <0x70>;
|
||||||
|
clock-latency-ns = <200000>;
|
||||||
|
};
|
||||||
|
opp-844800000 {
|
||||||
|
opp-hz = /bits/ 64 <844800000>;
|
||||||
|
opp-supported-hw = <0x70>;
|
||||||
|
clock-latency-ns = <200000>;
|
||||||
|
};
|
||||||
|
opp-902400000 {
|
||||||
|
opp-hz = /bits/ 64 <902400000>;
|
||||||
|
opp-supported-hw = <0x70>;
|
||||||
|
clock-latency-ns = <200000>;
|
||||||
|
};
|
||||||
|
opp-979200000 {
|
||||||
|
opp-hz = /bits/ 64 <979200000>;
|
||||||
|
opp-supported-hw = <0x70>;
|
||||||
|
clock-latency-ns = <200000>;
|
||||||
|
};
|
||||||
|
opp-1056000000 {
|
||||||
|
opp-hz = /bits/ 64 <1056000000>;
|
||||||
|
opp-supported-hw = <0x70>;
|
||||||
|
clock-latency-ns = <200000>;
|
||||||
|
};
|
||||||
|
opp-1132800000 {
|
||||||
|
opp-hz = /bits/ 64 <1132800000>;
|
||||||
|
opp-supported-hw = <0x70>;
|
||||||
|
clock-latency-ns = <200000>;
|
||||||
|
};
|
||||||
|
opp-1209600000 {
|
||||||
|
opp-hz = /bits/ 64 <1209600000>;
|
||||||
|
opp-supported-hw = <0x70>;
|
||||||
|
clock-latency-ns = <200000>;
|
||||||
|
};
|
||||||
|
opp-1286400000 {
|
||||||
|
opp-hz = /bits/ 64 <1286400000>;
|
||||||
|
opp-supported-hw = <0x70>;
|
||||||
|
clock-latency-ns = <200000>;
|
||||||
|
};
|
||||||
|
opp-1363200000 {
|
||||||
|
opp-hz = /bits/ 64 <1363200000>;
|
||||||
|
opp-supported-hw = <0x70>;
|
||||||
|
clock-latency-ns = <200000>;
|
||||||
|
};
|
||||||
|
opp-1440000000 {
|
||||||
|
opp-hz = /bits/ 64 <1440000000>;
|
||||||
|
opp-supported-hw = <0x70>;
|
||||||
|
clock-latency-ns = <200000>;
|
||||||
|
};
|
||||||
|
opp-1516800000 {
|
||||||
|
opp-hz = /bits/ 64 <1516800000>;
|
||||||
|
opp-supported-hw = <0x70>;
|
||||||
|
clock-latency-ns = <200000>;
|
||||||
|
};
|
||||||
|
opp-1593600000 {
|
||||||
|
opp-hz = /bits/ 64 <1593600000>;
|
||||||
|
opp-supported-hw = <0x70>;
|
||||||
|
clock-latency-ns = <200000>;
|
||||||
|
};
|
||||||
|
opp-1996800000 {
|
||||||
|
opp-hz = /bits/ 64 <1996800000>;
|
||||||
|
opp-supported-hw = <0x20>;
|
||||||
|
clock-latency-ns = <200000>;
|
||||||
|
};
|
||||||
|
opp-2188800000 {
|
||||||
|
opp-hz = /bits/ 64 <2188800000>;
|
||||||
|
opp-supported-hw = <0x10>;
|
||||||
|
clock-latency-ns = <200000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
cluster1_opp: opp-table-cluster1 {
|
||||||
|
compatible = "operating-points-v2-kryo-cpu";
|
||||||
|
nvmem-cells = <&speedbin_efuse>;
|
||||||
|
opp-shared;
|
||||||
|
|
||||||
|
opp-307200000 {
|
||||||
|
opp-hz = /bits/ 64 <307200000>;
|
||||||
|
opp-supported-hw = <0x70>;
|
||||||
|
clock-latency-ns = <200000>;
|
||||||
|
};
|
||||||
|
opp-384000000 {
|
||||||
|
opp-hz = /bits/ 64 <384000000>;
|
||||||
|
opp-supported-hw = <0x70>;
|
||||||
|
clock-latency-ns = <200000>;
|
||||||
|
};
|
||||||
|
opp-460800000 {
|
||||||
|
opp-hz = /bits/ 64 <460800000>;
|
||||||
|
opp-supported-hw = <0x70>;
|
||||||
|
clock-latency-ns = <200000>;
|
||||||
|
};
|
||||||
|
opp-537600000 {
|
||||||
|
opp-hz = /bits/ 64 <537600000>;
|
||||||
|
opp-supported-hw = <0x70>;
|
||||||
|
clock-latency-ns = <200000>;
|
||||||
|
};
|
||||||
|
opp-614400000 {
|
||||||
|
opp-hz = /bits/ 64 <614400000>;
|
||||||
|
opp-supported-hw = <0x70>;
|
||||||
|
clock-latency-ns = <200000>;
|
||||||
|
};
|
||||||
|
opp-691200000 {
|
||||||
|
opp-hz = /bits/ 64 <691200000>;
|
||||||
|
opp-supported-hw = <0x70>;
|
||||||
|
clock-latency-ns = <200000>;
|
||||||
|
};
|
||||||
|
opp-748800000 {
|
||||||
|
opp-hz = /bits/ 64 <748800000>;
|
||||||
|
opp-supported-hw = <0x70>;
|
||||||
|
clock-latency-ns = <200000>;
|
||||||
|
};
|
||||||
|
opp-825600000 {
|
||||||
|
opp-hz = /bits/ 64 <825600000>;
|
||||||
|
opp-supported-hw = <0x70>;
|
||||||
|
clock-latency-ns = <200000>;
|
||||||
|
};
|
||||||
|
opp-902400000 {
|
||||||
|
opp-hz = /bits/ 64 <902400000>;
|
||||||
|
opp-supported-hw = <0x70>;
|
||||||
|
clock-latency-ns = <200000>;
|
||||||
|
};
|
||||||
|
opp-979200000 {
|
||||||
|
opp-hz = /bits/ 64 <979200000>;
|
||||||
|
opp-supported-hw = <0x70>;
|
||||||
|
clock-latency-ns = <200000>;
|
||||||
|
};
|
||||||
|
opp-1056000000 {
|
||||||
|
opp-hz = /bits/ 64 <1056000000>;
|
||||||
|
opp-supported-hw = <0x70>;
|
||||||
|
clock-latency-ns = <200000>;
|
||||||
|
};
|
||||||
|
opp-1132800000 {
|
||||||
|
opp-hz = /bits/ 64 <1132800000>;
|
||||||
|
opp-supported-hw = <0x70>;
|
||||||
|
clock-latency-ns = <200000>;
|
||||||
|
};
|
||||||
|
opp-1209600000 {
|
||||||
|
opp-hz = /bits/ 64 <1209600000>;
|
||||||
|
opp-supported-hw = <0x70>;
|
||||||
|
clock-latency-ns = <200000>;
|
||||||
|
};
|
||||||
|
opp-1286400000 {
|
||||||
|
opp-hz = /bits/ 64 <1286400000>;
|
||||||
|
opp-supported-hw = <0x70>;
|
||||||
|
clock-latency-ns = <200000>;
|
||||||
|
};
|
||||||
|
opp-1363200000 {
|
||||||
|
opp-hz = /bits/ 64 <1363200000>;
|
||||||
|
opp-supported-hw = <0x70>;
|
||||||
|
clock-latency-ns = <200000>;
|
||||||
|
};
|
||||||
|
opp-1440000000 {
|
||||||
|
opp-hz = /bits/ 64 <1440000000>;
|
||||||
|
opp-supported-hw = <0x70>;
|
||||||
|
clock-latency-ns = <200000>;
|
||||||
|
};
|
||||||
|
opp-1516800000 {
|
||||||
|
opp-hz = /bits/ 64 <1516800000>;
|
||||||
|
opp-supported-hw = <0x70>;
|
||||||
|
clock-latency-ns = <200000>;
|
||||||
|
};
|
||||||
|
opp-1593600000 {
|
||||||
|
opp-hz = /bits/ 64 <1593600000>;
|
||||||
|
opp-supported-hw = <0x70>;
|
||||||
|
clock-latency-ns = <200000>;
|
||||||
|
};
|
||||||
|
opp-1670400000 {
|
||||||
|
opp-hz = /bits/ 64 <1670400000>;
|
||||||
|
opp-supported-hw = <0x70>;
|
||||||
|
clock-latency-ns = <200000>;
|
||||||
|
};
|
||||||
|
opp-1747200000 {
|
||||||
|
opp-hz = /bits/ 64 <1747200000>;
|
||||||
|
opp-supported-hw = <0x70>;
|
||||||
|
clock-latency-ns = <200000>;
|
||||||
|
};
|
||||||
|
opp-1824000000 {
|
||||||
|
opp-hz = /bits/ 64 <1824000000>;
|
||||||
|
opp-supported-hw = <0x70>;
|
||||||
|
clock-latency-ns = <200000>;
|
||||||
|
};
|
||||||
|
opp-1900800000 {
|
||||||
|
opp-hz = /bits/ 64 <1900800000>;
|
||||||
|
opp-supported-hw = <0x70>;
|
||||||
|
clock-latency-ns = <200000>;
|
||||||
|
};
|
||||||
|
opp-1977600000 {
|
||||||
|
opp-hz = /bits/ 64 <1977600000>;
|
||||||
|
opp-supported-hw = <0x30>;
|
||||||
|
clock-latency-ns = <200000>;
|
||||||
|
};
|
||||||
|
opp-2054400000 {
|
||||||
|
opp-hz = /bits/ 64 <2054400000>;
|
||||||
|
opp-supported-hw = <0x30>;
|
||||||
|
clock-latency-ns = <200000>;
|
||||||
|
};
|
||||||
|
opp-2150400000 {
|
||||||
|
opp-hz = /bits/ 64 <2150400000>;
|
||||||
|
opp-supported-hw = <0x30>;
|
||||||
|
clock-latency-ns = <200000>;
|
||||||
|
};
|
||||||
|
opp-2246400000 {
|
||||||
|
opp-hz = /bits/ 64 <2246400000>;
|
||||||
|
opp-supported-hw = <0x10>;
|
||||||
|
clock-latency-ns = <200000>;
|
||||||
|
};
|
||||||
|
opp-2342400000 {
|
||||||
|
opp-hz = /bits/ 64 <2342400000>;
|
||||||
|
opp-supported-hw = <0x10>;
|
||||||
|
clock-latency-ns = <200000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
@@ -994,7 +994,7 @@
|
|||||||
vdda-phy-supply = <&vreg_l1a_0p875>;
|
vdda-phy-supply = <&vreg_l1a_0p875>;
|
||||||
vdda-pll-supply = <&vreg_l2a_1p2>;
|
vdda-pll-supply = <&vreg_l2a_1p2>;
|
||||||
|
|
||||||
pciephy: lane@1c06800 {
|
pciephy: phy@1c06800 {
|
||||||
reg = <0x01c06200 0x128>, <0x01c06400 0x1fc>, <0x01c06800 0x20c>;
|
reg = <0x01c06200 0x128>, <0x01c06400 0x1fc>, <0x01c06800 0x20c>;
|
||||||
#phy-cells = <0>;
|
#phy-cells = <0>;
|
||||||
|
|
||||||
@@ -1066,7 +1066,7 @@
|
|||||||
reset-names = "ufsphy";
|
reset-names = "ufsphy";
|
||||||
resets = <&ufshc 0>;
|
resets = <&ufshc 0>;
|
||||||
|
|
||||||
ufsphy_lanes: lanes@1da7400 {
|
ufsphy_lanes: phy@1da7400 {
|
||||||
reg = <0x01da7400 0x128>,
|
reg = <0x01da7400 0x128>,
|
||||||
<0x01da7600 0x1fc>,
|
<0x01da7600 0x1fc>,
|
||||||
<0x01da7c00 0x1dc>,
|
<0x01da7c00 0x1dc>,
|
||||||
@@ -1999,7 +1999,7 @@
|
|||||||
<&gcc GCC_USB3PHY_PHY_BCR>;
|
<&gcc GCC_USB3PHY_PHY_BCR>;
|
||||||
reset-names = "phy", "common";
|
reset-names = "phy", "common";
|
||||||
|
|
||||||
usb1_ssphy: lane@c010200 {
|
usb1_ssphy: phy@c010200 {
|
||||||
reg = <0xc010200 0x128>,
|
reg = <0xc010200 0x128>,
|
||||||
<0xc010400 0x200>,
|
<0xc010400 0x200>,
|
||||||
<0xc010c00 0x20c>,
|
<0xc010c00 0x20c>,
|
||||||
|
|||||||
@@ -152,7 +152,7 @@
|
|||||||
qcom,pre-scaling = <1 3>;
|
qcom,pre-scaling = <1 3>;
|
||||||
};
|
};
|
||||||
|
|
||||||
vcoin: vcoin@83 {
|
vcoin: vcoin@85 {
|
||||||
reg = <ADC5_VCOIN>;
|
reg = <ADC5_VCOIN>;
|
||||||
qcom,decimation = <1024>;
|
qcom,decimation = <1024>;
|
||||||
qcom,pre-scaling = <1 3>;
|
qcom,pre-scaling = <1 3>;
|
||||||
|
|||||||
@@ -768,7 +768,7 @@
|
|||||||
pins = "gpio17", "gpio18", "gpio19";
|
pins = "gpio17", "gpio18", "gpio19";
|
||||||
function = "gpio";
|
function = "gpio";
|
||||||
drive-strength = <2>;
|
drive-strength = <2>;
|
||||||
bias-no-pull;
|
bias-disable;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -1299,7 +1299,7 @@ ap_ts_i2c: &i2c14 {
|
|||||||
config {
|
config {
|
||||||
pins = "gpio126";
|
pins = "gpio126";
|
||||||
function = "gpio";
|
function = "gpio";
|
||||||
bias-no-pull;
|
bias-disable;
|
||||||
drive-strength = <2>;
|
drive-strength = <2>;
|
||||||
output-low;
|
output-low;
|
||||||
};
|
};
|
||||||
@@ -1309,7 +1309,7 @@ ap_ts_i2c: &i2c14 {
|
|||||||
config {
|
config {
|
||||||
pins = "gpio126";
|
pins = "gpio126";
|
||||||
function = "gpio";
|
function = "gpio";
|
||||||
bias-no-pull;
|
bias-disable;
|
||||||
drive-strength = <2>;
|
drive-strength = <2>;
|
||||||
output-high;
|
output-high;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1045,7 +1045,10 @@
|
|||||||
|
|
||||||
/* PINCTRL - additions to nodes defined in sdm845.dtsi */
|
/* PINCTRL - additions to nodes defined in sdm845.dtsi */
|
||||||
&qup_spi2_default {
|
&qup_spi2_default {
|
||||||
|
pinconf {
|
||||||
|
pins = "gpio27", "gpio28", "gpio29", "gpio30";
|
||||||
drive-strength = <16>;
|
drive-strength = <16>;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
&qup_uart3_default{
|
&qup_uart3_default{
|
||||||
|
|||||||
@@ -2064,7 +2064,7 @@
|
|||||||
|
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
|
||||||
pcie0_lane: lanes@1c06200 {
|
pcie0_lane: phy@1c06200 {
|
||||||
reg = <0 0x01c06200 0 0x128>,
|
reg = <0 0x01c06200 0 0x128>,
|
||||||
<0 0x01c06400 0 0x1fc>,
|
<0 0x01c06400 0 0x1fc>,
|
||||||
<0 0x01c06800 0 0x218>,
|
<0 0x01c06800 0 0x218>,
|
||||||
@@ -2174,7 +2174,7 @@
|
|||||||
|
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
|
||||||
pcie1_lane: lanes@1c06200 {
|
pcie1_lane: phy@1c06200 {
|
||||||
reg = <0 0x01c0a800 0 0x800>,
|
reg = <0 0x01c0a800 0 0x800>,
|
||||||
<0 0x01c0a800 0 0x800>,
|
<0 0x01c0a800 0 0x800>,
|
||||||
<0 0x01c0b800 0 0x400>;
|
<0 0x01c0b800 0 0x400>;
|
||||||
@@ -2302,7 +2302,7 @@
|
|||||||
reset-names = "ufsphy";
|
reset-names = "ufsphy";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
|
||||||
ufs_mem_phy_lanes: lanes@1d87400 {
|
ufs_mem_phy_lanes: phy@1d87400 {
|
||||||
reg = <0 0x01d87400 0 0x108>,
|
reg = <0 0x01d87400 0 0x108>,
|
||||||
<0 0x01d87600 0 0x1e0>,
|
<0 0x01d87600 0 0x1e0>,
|
||||||
<0 0x01d87c00 0 0x1dc>,
|
<0 0x01d87c00 0 0x1dc>,
|
||||||
@@ -3699,7 +3699,7 @@
|
|||||||
<&gcc GCC_USB3_PHY_PRIM_BCR>;
|
<&gcc GCC_USB3_PHY_PRIM_BCR>;
|
||||||
reset-names = "phy", "common";
|
reset-names = "phy", "common";
|
||||||
|
|
||||||
usb_1_ssphy: lanes@88e9200 {
|
usb_1_ssphy: phy@88e9200 {
|
||||||
reg = <0 0x088e9200 0 0x128>,
|
reg = <0 0x088e9200 0 0x128>,
|
||||||
<0 0x088e9400 0 0x200>,
|
<0 0x088e9400 0 0x200>,
|
||||||
<0 0x088e9c00 0 0x218>,
|
<0 0x088e9c00 0 0x218>,
|
||||||
@@ -3732,7 +3732,7 @@
|
|||||||
<&gcc GCC_USB3_PHY_SEC_BCR>;
|
<&gcc GCC_USB3_PHY_SEC_BCR>;
|
||||||
reset-names = "phy", "common";
|
reset-names = "phy", "common";
|
||||||
|
|
||||||
usb_2_ssphy: lane@88eb200 {
|
usb_2_ssphy: phy@88eb200 {
|
||||||
reg = <0 0x088eb200 0 0x128>,
|
reg = <0 0x088eb200 0 0x128>,
|
||||||
<0 0x088eb400 0 0x1fc>,
|
<0 0x088eb400 0 0x1fc>,
|
||||||
<0 0x088eb800 0 0x218>,
|
<0 0x088eb800 0 0x218>,
|
||||||
|
|||||||
@@ -475,8 +475,10 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
&qup_i2c12_default {
|
&qup_i2c12_default {
|
||||||
|
pinmux {
|
||||||
drive-strength = <2>;
|
drive-strength = <2>;
|
||||||
bias-disable;
|
bias-disable;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
&qup_uart6_default {
|
&qup_uart6_default {
|
||||||
|
|||||||
@@ -408,7 +408,7 @@
|
|||||||
sdhc_1: sdhci@4744000 {
|
sdhc_1: sdhci@4744000 {
|
||||||
compatible = "qcom,sm6125-sdhci", "qcom,sdhci-msm-v5";
|
compatible = "qcom,sm6125-sdhci", "qcom,sdhci-msm-v5";
|
||||||
reg = <0x04744000 0x1000>, <0x04745000 0x1000>;
|
reg = <0x04744000 0x1000>, <0x04745000 0x1000>;
|
||||||
reg-names = "hc", "core";
|
reg-names = "hc", "cqhci";
|
||||||
|
|
||||||
interrupts = <GIC_SPI 348 IRQ_TYPE_LEVEL_HIGH>,
|
interrupts = <GIC_SPI 348 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
<GIC_SPI 352 IRQ_TYPE_LEVEL_HIGH>;
|
<GIC_SPI 352 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
|||||||
@@ -1692,12 +1692,12 @@
|
|||||||
reset-names = "ufsphy";
|
reset-names = "ufsphy";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
|
||||||
ufs_mem_phy_lanes: lanes@1d87400 {
|
ufs_mem_phy_lanes: phy@1d87400 {
|
||||||
reg = <0 0x01d87400 0 0x108>,
|
reg = <0 0x01d87400 0 0x16c>,
|
||||||
<0 0x01d87600 0 0x1e0>,
|
<0 0x01d87600 0 0x200>,
|
||||||
<0 0x01d87c00 0 0x1dc>,
|
<0 0x01d87c00 0 0x200>,
|
||||||
<0 0x01d87800 0 0x108>,
|
<0 0x01d87800 0 0x16c>,
|
||||||
<0 0x01d87a00 0 0x1e0>;
|
<0 0x01d87a00 0 0x200>;
|
||||||
#phy-cells = <0>;
|
#phy-cells = <0>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@@ -3010,7 +3010,7 @@
|
|||||||
<&gcc GCC_USB3_PHY_PRIM_BCR>;
|
<&gcc GCC_USB3_PHY_PRIM_BCR>;
|
||||||
reset-names = "phy", "common";
|
reset-names = "phy", "common";
|
||||||
|
|
||||||
usb_1_ssphy: lanes@88e9200 {
|
usb_1_ssphy: phy@88e9200 {
|
||||||
reg = <0 0x088e9200 0 0x200>,
|
reg = <0 0x088e9200 0 0x200>,
|
||||||
<0 0x088e9400 0 0x200>,
|
<0 0x088e9400 0 0x200>,
|
||||||
<0 0x088e9c00 0 0x218>,
|
<0 0x088e9c00 0 0x218>,
|
||||||
@@ -3043,7 +3043,7 @@
|
|||||||
<&gcc GCC_USB3_PHY_SEC_BCR>;
|
<&gcc GCC_USB3_PHY_SEC_BCR>;
|
||||||
reset-names = "phy", "common";
|
reset-names = "phy", "common";
|
||||||
|
|
||||||
usb_2_ssphy: lane@88eb200 {
|
usb_2_ssphy: phy@88eb200 {
|
||||||
reg = <0 0x088eb200 0 0x200>,
|
reg = <0 0x088eb200 0 0x200>,
|
||||||
<0 0x088eb400 0 0x200>,
|
<0 0x088eb400 0 0x200>,
|
||||||
<0 0x088eb800 0 0x800>,
|
<0 0x088eb800 0 0x800>,
|
||||||
|
|||||||
@@ -591,7 +591,7 @@
|
|||||||
pins = "gpio39";
|
pins = "gpio39";
|
||||||
function = "gpio";
|
function = "gpio";
|
||||||
drive-strength = <2>;
|
drive-strength = <2>;
|
||||||
bias-disabled;
|
bias-disable;
|
||||||
input-enable;
|
input-enable;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -1463,7 +1463,7 @@
|
|||||||
|
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
|
||||||
pcie0_lane: lanes@1c06200 {
|
pcie0_lane: phy@1c06200 {
|
||||||
reg = <0 0x1c06200 0 0x170>, /* tx */
|
reg = <0 0x1c06200 0 0x170>, /* tx */
|
||||||
<0 0x1c06400 0 0x200>, /* rx */
|
<0 0x1c06400 0 0x200>, /* rx */
|
||||||
<0 0x1c06800 0 0x1f0>, /* pcs */
|
<0 0x1c06800 0 0x1f0>, /* pcs */
|
||||||
@@ -1569,7 +1569,7 @@
|
|||||||
|
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
|
||||||
pcie1_lane: lanes@1c0e200 {
|
pcie1_lane: phy@1c0e200 {
|
||||||
reg = <0 0x1c0e200 0 0x170>, /* tx0 */
|
reg = <0 0x1c0e200 0 0x170>, /* tx0 */
|
||||||
<0 0x1c0e400 0 0x200>, /* rx0 */
|
<0 0x1c0e400 0 0x200>, /* rx0 */
|
||||||
<0 0x1c0ea00 0 0x1f0>, /* pcs */
|
<0 0x1c0ea00 0 0x1f0>, /* pcs */
|
||||||
@@ -1677,7 +1677,7 @@
|
|||||||
|
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
|
||||||
pcie2_lane: lanes@1c16200 {
|
pcie2_lane: phy@1c16200 {
|
||||||
reg = <0 0x1c16200 0 0x170>, /* tx0 */
|
reg = <0 0x1c16200 0 0x170>, /* tx0 */
|
||||||
<0 0x1c16400 0 0x200>, /* rx0 */
|
<0 0x1c16400 0 0x200>, /* rx0 */
|
||||||
<0 0x1c16a00 0 0x1f0>, /* pcs */
|
<0 0x1c16a00 0 0x1f0>, /* pcs */
|
||||||
@@ -1756,12 +1756,12 @@
|
|||||||
reset-names = "ufsphy";
|
reset-names = "ufsphy";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
|
||||||
ufs_mem_phy_lanes: lanes@1d87400 {
|
ufs_mem_phy_lanes: phy@1d87400 {
|
||||||
reg = <0 0x01d87400 0 0x108>,
|
reg = <0 0x01d87400 0 0x16c>,
|
||||||
<0 0x01d87600 0 0x1e0>,
|
<0 0x01d87600 0 0x200>,
|
||||||
<0 0x01d87c00 0 0x1dc>,
|
<0 0x01d87c00 0 0x200>,
|
||||||
<0 0x01d87800 0 0x108>,
|
<0 0x01d87800 0 0x16c>,
|
||||||
<0 0x01d87a00 0 0x1e0>;
|
<0 0x01d87a00 0 0x200>;
|
||||||
#phy-cells = <0>;
|
#phy-cells = <0>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@@ -1933,7 +1933,7 @@
|
|||||||
pins = "gpio7";
|
pins = "gpio7";
|
||||||
function = "dmic1_data";
|
function = "dmic1_data";
|
||||||
drive-strength = <2>;
|
drive-strength = <2>;
|
||||||
pull-down;
|
bias-pull-down;
|
||||||
input-enable;
|
input-enable;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@@ -2306,15 +2306,11 @@
|
|||||||
dp_phy: dp-phy@88ea200 {
|
dp_phy: dp-phy@88ea200 {
|
||||||
reg = <0 0x088ea200 0 0x200>,
|
reg = <0 0x088ea200 0 0x200>,
|
||||||
<0 0x088ea400 0 0x200>,
|
<0 0x088ea400 0 0x200>,
|
||||||
<0 0x088eac00 0 0x400>,
|
<0 0x088eaa00 0 0x200>,
|
||||||
<0 0x088ea600 0 0x200>,
|
<0 0x088ea600 0 0x200>,
|
||||||
<0 0x088ea800 0 0x200>,
|
<0 0x088ea800 0 0x200>;
|
||||||
<0 0x088eaa00 0 0x100>;
|
|
||||||
#phy-cells = <0>;
|
#phy-cells = <0>;
|
||||||
#clock-cells = <1>;
|
#clock-cells = <1>;
|
||||||
clocks = <&gcc GCC_USB3_PRIM_PHY_PIPE_CLK>;
|
|
||||||
clock-names = "pipe0";
|
|
||||||
clock-output-names = "usb3_phy_pipe_clk_src";
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -2336,7 +2332,7 @@
|
|||||||
<&gcc GCC_USB3_PHY_SEC_BCR>;
|
<&gcc GCC_USB3_PHY_SEC_BCR>;
|
||||||
reset-names = "phy", "common";
|
reset-names = "phy", "common";
|
||||||
|
|
||||||
usb_2_ssphy: lanes@88eb200 {
|
usb_2_ssphy: phy@88eb200 {
|
||||||
reg = <0 0x088eb200 0 0x200>,
|
reg = <0 0x088eb200 0 0x200>,
|
||||||
<0 0x088eb400 0 0x200>,
|
<0 0x088eb400 0 0x200>,
|
||||||
<0 0x088eb800 0 0x800>;
|
<0 0x088eb800 0 0x800>;
|
||||||
|
|||||||
@@ -1123,12 +1123,12 @@
|
|||||||
reset-names = "ufsphy";
|
reset-names = "ufsphy";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
|
||||||
ufs_mem_phy_lanes: lanes@1d87400 {
|
ufs_mem_phy_lanes: phy@1d87400 {
|
||||||
reg = <0 0x01d87400 0 0x108>,
|
reg = <0 0x01d87400 0 0x188>,
|
||||||
<0 0x01d87600 0 0x1e0>,
|
<0 0x01d87600 0 0x200>,
|
||||||
<0 0x01d87c00 0 0x1dc>,
|
<0 0x01d87c00 0 0x200>,
|
||||||
<0 0x01d87800 0 0x108>,
|
<0 0x01d87800 0 0x188>,
|
||||||
<0 0x01d87a00 0 0x1e0>;
|
<0 0x01d87a00 0 0x200>;
|
||||||
#phy-cells = <0>;
|
#phy-cells = <0>;
|
||||||
#clock-cells = <0>;
|
#clock-cells = <0>;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -120,7 +120,6 @@
|
|||||||
dmas = <&main_udmap 0xc000>, <&main_udmap 0x4000>,
|
dmas = <&main_udmap 0xc000>, <&main_udmap 0x4000>,
|
||||||
<&main_udmap 0x4001>;
|
<&main_udmap 0x4001>;
|
||||||
dma-names = "tx", "rx1", "rx2";
|
dma-names = "tx", "rx1", "rx2";
|
||||||
dma-coherent;
|
|
||||||
|
|
||||||
rng: rng@4e10000 {
|
rng: rng@4e10000 {
|
||||||
compatible = "inside-secure,safexcel-eip76";
|
compatible = "inside-secure,safexcel-eip76";
|
||||||
|
|||||||
@@ -336,7 +336,6 @@
|
|||||||
dmas = <&main_udmap 0xc000>, <&main_udmap 0x4000>,
|
dmas = <&main_udmap 0xc000>, <&main_udmap 0x4000>,
|
||||||
<&main_udmap 0x4001>;
|
<&main_udmap 0x4001>;
|
||||||
dma-names = "tx", "rx1", "rx2";
|
dma-names = "tx", "rx1", "rx2";
|
||||||
dma-coherent;
|
|
||||||
|
|
||||||
rng: rng@4e10000 {
|
rng: rng@4e10000 {
|
||||||
compatible = "inside-secure,safexcel-eip76";
|
compatible = "inside-secure,safexcel-eip76";
|
||||||
|
|||||||
@@ -76,7 +76,7 @@ struct task_struct;
|
|||||||
|
|
||||||
struct step_hook {
|
struct step_hook {
|
||||||
struct list_head node;
|
struct list_head node;
|
||||||
int (*fn)(struct pt_regs *regs, unsigned int esr);
|
int (*fn)(struct pt_regs *regs, unsigned long esr);
|
||||||
};
|
};
|
||||||
|
|
||||||
void register_user_step_hook(struct step_hook *hook);
|
void register_user_step_hook(struct step_hook *hook);
|
||||||
@@ -87,7 +87,7 @@ void unregister_kernel_step_hook(struct step_hook *hook);
|
|||||||
|
|
||||||
struct break_hook {
|
struct break_hook {
|
||||||
struct list_head node;
|
struct list_head node;
|
||||||
int (*fn)(struct pt_regs *regs, unsigned int esr);
|
int (*fn)(struct pt_regs *regs, unsigned long esr);
|
||||||
u16 imm;
|
u16 imm;
|
||||||
u16 mask; /* These bits are ignored when comparing with imm */
|
u16 mask; /* These bits are ignored when comparing with imm */
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -324,14 +324,14 @@
|
|||||||
#ifndef __ASSEMBLY__
|
#ifndef __ASSEMBLY__
|
||||||
#include <asm/types.h>
|
#include <asm/types.h>
|
||||||
|
|
||||||
static inline bool esr_is_data_abort(u32 esr)
|
static inline bool esr_is_data_abort(unsigned long esr)
|
||||||
{
|
{
|
||||||
const u32 ec = ESR_ELx_EC(esr);
|
const unsigned long ec = ESR_ELx_EC(esr);
|
||||||
|
|
||||||
return ec == ESR_ELx_EC_DABT_LOW || ec == ESR_ELx_EC_DABT_CUR;
|
return ec == ESR_ELx_EC_DABT_LOW || ec == ESR_ELx_EC_DABT_CUR;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *esr_get_class_string(u32 esr);
|
const char *esr_get_class_string(unsigned long esr);
|
||||||
#endif /* __ASSEMBLY */
|
#endif /* __ASSEMBLY */
|
||||||
|
|
||||||
#endif /* __ASM_ESR_H */
|
#endif /* __ASM_ESR_H */
|
||||||
|
|||||||
@@ -19,9 +19,9 @@
|
|||||||
#define __exception_irq_entry __kprobes
|
#define __exception_irq_entry __kprobes
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static inline u32 disr_to_esr(u64 disr)
|
static inline unsigned long disr_to_esr(u64 disr)
|
||||||
{
|
{
|
||||||
unsigned int esr = ESR_ELx_EC_SERROR << ESR_ELx_EC_SHIFT;
|
unsigned long esr = ESR_ELx_EC_SERROR << ESR_ELx_EC_SHIFT;
|
||||||
|
|
||||||
if ((disr & DISR_EL1_IDS) == 0)
|
if ((disr & DISR_EL1_IDS) == 0)
|
||||||
esr |= (disr & DISR_EL1_ESR_MASK);
|
esr |= (disr & DISR_EL1_ESR_MASK);
|
||||||
@@ -57,23 +57,23 @@ asmlinkage void call_on_irq_stack(struct pt_regs *regs,
|
|||||||
void (*func)(struct pt_regs *));
|
void (*func)(struct pt_regs *));
|
||||||
asmlinkage void asm_exit_to_user_mode(struct pt_regs *regs);
|
asmlinkage void asm_exit_to_user_mode(struct pt_regs *regs);
|
||||||
|
|
||||||
void do_mem_abort(unsigned long far, unsigned int esr, struct pt_regs *regs);
|
void do_mem_abort(unsigned long far, unsigned long esr, struct pt_regs *regs);
|
||||||
void do_undefinstr(struct pt_regs *regs);
|
void do_undefinstr(struct pt_regs *regs);
|
||||||
void do_bti(struct pt_regs *regs);
|
void do_bti(struct pt_regs *regs);
|
||||||
void do_debug_exception(unsigned long addr_if_watchpoint, unsigned int esr,
|
void do_debug_exception(unsigned long addr_if_watchpoint, unsigned long esr,
|
||||||
struct pt_regs *regs);
|
struct pt_regs *regs);
|
||||||
void do_fpsimd_acc(unsigned int esr, struct pt_regs *regs);
|
void do_fpsimd_acc(unsigned long esr, struct pt_regs *regs);
|
||||||
void do_sve_acc(unsigned int esr, struct pt_regs *regs);
|
void do_sve_acc(unsigned long esr, struct pt_regs *regs);
|
||||||
void do_fpsimd_exc(unsigned int esr, struct pt_regs *regs);
|
void do_fpsimd_exc(unsigned long esr, struct pt_regs *regs);
|
||||||
void do_sysinstr(unsigned int esr, struct pt_regs *regs);
|
void do_sysinstr(unsigned long esr, struct pt_regs *regs);
|
||||||
void do_sp_pc_abort(unsigned long addr, unsigned int esr, struct pt_regs *regs);
|
void do_sp_pc_abort(unsigned long addr, unsigned long esr, struct pt_regs *regs);
|
||||||
void bad_el0_sync(struct pt_regs *regs, int reason, unsigned int esr);
|
void bad_el0_sync(struct pt_regs *regs, int reason, unsigned long esr);
|
||||||
void do_cp15instr(unsigned int esr, struct pt_regs *regs);
|
void do_cp15instr(unsigned long esr, struct pt_regs *regs);
|
||||||
void do_el0_svc(struct pt_regs *regs);
|
void do_el0_svc(struct pt_regs *regs);
|
||||||
void do_el0_svc_compat(struct pt_regs *regs);
|
void do_el0_svc_compat(struct pt_regs *regs);
|
||||||
void do_ptrauth_fault(struct pt_regs *regs, unsigned int esr);
|
void do_ptrauth_fault(struct pt_regs *regs, unsigned long esr);
|
||||||
void do_serror(struct pt_regs *regs, unsigned int esr);
|
void do_serror(struct pt_regs *regs, unsigned long esr);
|
||||||
void do_notify_resume(struct pt_regs *regs, unsigned long thread_flags);
|
void do_notify_resume(struct pt_regs *regs, unsigned long thread_flags);
|
||||||
|
|
||||||
void panic_bad_stack(struct pt_regs *regs, unsigned int esr, unsigned long far);
|
void panic_bad_stack(struct pt_regs *regs, unsigned long esr, unsigned long far);
|
||||||
#endif /* __ASM_EXCEPTION_H */
|
#endif /* __ASM_EXCEPTION_H */
|
||||||
|
|||||||
@@ -240,13 +240,13 @@ static inline void compat_start_thread(struct pt_regs *regs, unsigned long pc,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static inline bool is_ttbr0_addr(unsigned long addr)
|
static __always_inline bool is_ttbr0_addr(unsigned long addr)
|
||||||
{
|
{
|
||||||
/* entry assembly clears tags for TTBR0 addrs */
|
/* entry assembly clears tags for TTBR0 addrs */
|
||||||
return addr < TASK_SIZE;
|
return addr < TASK_SIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline bool is_ttbr1_addr(unsigned long addr)
|
static __always_inline bool is_ttbr1_addr(unsigned long addr)
|
||||||
{
|
{
|
||||||
/* TTBR1 addresses may have a tag if KASAN_SW_TAGS is in use */
|
/* TTBR1 addresses may have a tag if KASAN_SW_TAGS is in use */
|
||||||
return arch_kasan_reset_tag(addr) >= PAGE_OFFSET;
|
return arch_kasan_reset_tag(addr) >= PAGE_OFFSET;
|
||||||
|
|||||||
@@ -23,9 +23,9 @@ void die(const char *msg, struct pt_regs *regs, int err);
|
|||||||
struct siginfo;
|
struct siginfo;
|
||||||
void arm64_notify_die(const char *str, struct pt_regs *regs,
|
void arm64_notify_die(const char *str, struct pt_regs *regs,
|
||||||
int signo, int sicode, unsigned long far,
|
int signo, int sicode, unsigned long far,
|
||||||
int err);
|
unsigned long err);
|
||||||
|
|
||||||
void hook_debug_fault_code(int nr, int (*fn)(unsigned long, unsigned int,
|
void hook_debug_fault_code(int nr, int (*fn)(unsigned long, unsigned long,
|
||||||
struct pt_regs *),
|
struct pt_regs *),
|
||||||
int sig, int code, const char *name);
|
int sig, int code, const char *name);
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ struct undef_hook {
|
|||||||
|
|
||||||
void register_undef_hook(struct undef_hook *hook);
|
void register_undef_hook(struct undef_hook *hook);
|
||||||
void unregister_undef_hook(struct undef_hook *hook);
|
void unregister_undef_hook(struct undef_hook *hook);
|
||||||
void force_signal_inject(int signal, int code, unsigned long address, unsigned int err);
|
void force_signal_inject(int signal, int code, unsigned long address, unsigned long err);
|
||||||
void arm64_notify_segfault(unsigned long addr);
|
void arm64_notify_segfault(unsigned long addr);
|
||||||
void arm64_force_sig_fault(int signo, int code, unsigned long far, const char *str);
|
void arm64_force_sig_fault(int signo, int code, unsigned long far, const char *str);
|
||||||
void arm64_force_sig_mceerr(int code, unsigned long far, short lsb, const char *str);
|
void arm64_force_sig_mceerr(int code, unsigned long far, short lsb, const char *str);
|
||||||
@@ -57,7 +57,7 @@ static inline int in_entry_text(unsigned long ptr)
|
|||||||
* errors share the same encoding as an all-zeros encoding from a CPU that
|
* errors share the same encoding as an all-zeros encoding from a CPU that
|
||||||
* doesn't support RAS.
|
* doesn't support RAS.
|
||||||
*/
|
*/
|
||||||
static inline bool arm64_is_ras_serror(u32 esr)
|
static inline bool arm64_is_ras_serror(unsigned long esr)
|
||||||
{
|
{
|
||||||
WARN_ON(preemptible());
|
WARN_ON(preemptible());
|
||||||
|
|
||||||
@@ -77,9 +77,9 @@ static inline bool arm64_is_ras_serror(u32 esr)
|
|||||||
* We treat them as Uncontainable.
|
* We treat them as Uncontainable.
|
||||||
* Non-RAS SError's are reported as Uncontained/Uncategorized.
|
* Non-RAS SError's are reported as Uncontained/Uncategorized.
|
||||||
*/
|
*/
|
||||||
static inline u32 arm64_ras_serror_get_severity(u32 esr)
|
static inline unsigned long arm64_ras_serror_get_severity(unsigned long esr)
|
||||||
{
|
{
|
||||||
u32 aet = esr & ESR_ELx_AET;
|
unsigned long aet = esr & ESR_ELx_AET;
|
||||||
|
|
||||||
if (!arm64_is_ras_serror(esr)) {
|
if (!arm64_is_ras_serror(esr)) {
|
||||||
/* Not a RAS error, we can't interpret the ESR. */
|
/* Not a RAS error, we can't interpret the ESR. */
|
||||||
@@ -98,6 +98,6 @@ static inline u32 arm64_ras_serror_get_severity(u32 esr)
|
|||||||
return aet;
|
return aet;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool arm64_is_fatal_ras_serror(struct pt_regs *regs, unsigned int esr);
|
bool arm64_is_fatal_ras_serror(struct pt_regs *regs, unsigned long esr);
|
||||||
void __noreturn arm64_serror_panic(struct pt_regs *regs, u32 esr);
|
void __noreturn arm64_serror_panic(struct pt_regs *regs, unsigned long esr);
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -202,7 +202,7 @@ void unregister_kernel_step_hook(struct step_hook *hook)
|
|||||||
* So we call all the registered handlers, until the right handler is
|
* So we call all the registered handlers, until the right handler is
|
||||||
* found which returns zero.
|
* found which returns zero.
|
||||||
*/
|
*/
|
||||||
static int call_step_hook(struct pt_regs *regs, unsigned int esr)
|
static int call_step_hook(struct pt_regs *regs, unsigned long esr)
|
||||||
{
|
{
|
||||||
struct step_hook *hook;
|
struct step_hook *hook;
|
||||||
struct list_head *list;
|
struct list_head *list;
|
||||||
@@ -238,7 +238,7 @@ static void send_user_sigtrap(int si_code)
|
|||||||
"User debug trap");
|
"User debug trap");
|
||||||
}
|
}
|
||||||
|
|
||||||
static int single_step_handler(unsigned long unused, unsigned int esr,
|
static int single_step_handler(unsigned long unused, unsigned long esr,
|
||||||
struct pt_regs *regs)
|
struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
bool handler_found = false;
|
bool handler_found = false;
|
||||||
@@ -299,11 +299,11 @@ void unregister_kernel_break_hook(struct break_hook *hook)
|
|||||||
unregister_debug_hook(&hook->node);
|
unregister_debug_hook(&hook->node);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int call_break_hook(struct pt_regs *regs, unsigned int esr)
|
static int call_break_hook(struct pt_regs *regs, unsigned long esr)
|
||||||
{
|
{
|
||||||
struct break_hook *hook;
|
struct break_hook *hook;
|
||||||
struct list_head *list;
|
struct list_head *list;
|
||||||
int (*fn)(struct pt_regs *regs, unsigned int esr) = NULL;
|
int (*fn)(struct pt_regs *regs, unsigned long esr) = NULL;
|
||||||
|
|
||||||
list = user_mode(regs) ? &user_break_hook : &kernel_break_hook;
|
list = user_mode(regs) ? &user_break_hook : &kernel_break_hook;
|
||||||
|
|
||||||
@@ -312,7 +312,7 @@ static int call_break_hook(struct pt_regs *regs, unsigned int esr)
|
|||||||
* entirely not preemptible, and we can use rcu list safely here.
|
* entirely not preemptible, and we can use rcu list safely here.
|
||||||
*/
|
*/
|
||||||
list_for_each_entry_rcu(hook, list, node) {
|
list_for_each_entry_rcu(hook, list, node) {
|
||||||
unsigned int comment = esr & ESR_ELx_BRK64_ISS_COMMENT_MASK;
|
unsigned long comment = esr & ESR_ELx_BRK64_ISS_COMMENT_MASK;
|
||||||
|
|
||||||
if ((comment & ~hook->mask) == hook->imm)
|
if ((comment & ~hook->mask) == hook->imm)
|
||||||
fn = hook->fn;
|
fn = hook->fn;
|
||||||
@@ -322,7 +322,7 @@ static int call_break_hook(struct pt_regs *regs, unsigned int esr)
|
|||||||
}
|
}
|
||||||
NOKPROBE_SYMBOL(call_break_hook);
|
NOKPROBE_SYMBOL(call_break_hook);
|
||||||
|
|
||||||
static int brk_handler(unsigned long unused, unsigned int esr,
|
static int brk_handler(unsigned long unused, unsigned long esr,
|
||||||
struct pt_regs *regs)
|
struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
if (call_break_hook(regs, esr) == DBG_HOOK_HANDLED)
|
if (call_break_hook(regs, esr) == DBG_HOOK_HANDLED)
|
||||||
|
|||||||
@@ -273,13 +273,13 @@ extern void (*handle_arch_irq)(struct pt_regs *);
|
|||||||
extern void (*handle_arch_fiq)(struct pt_regs *);
|
extern void (*handle_arch_fiq)(struct pt_regs *);
|
||||||
|
|
||||||
static void noinstr __panic_unhandled(struct pt_regs *regs, const char *vector,
|
static void noinstr __panic_unhandled(struct pt_regs *regs, const char *vector,
|
||||||
unsigned int esr)
|
unsigned long esr)
|
||||||
{
|
{
|
||||||
arm64_enter_nmi(regs);
|
arm64_enter_nmi(regs);
|
||||||
|
|
||||||
console_verbose();
|
console_verbose();
|
||||||
|
|
||||||
pr_crit("Unhandled %s exception on CPU%d, ESR 0x%08x -- %s\n",
|
pr_crit("Unhandled %s exception on CPU%d, ESR 0x%016lx -- %s\n",
|
||||||
vector, smp_processor_id(), esr,
|
vector, smp_processor_id(), esr,
|
||||||
esr_get_class_string(esr));
|
esr_get_class_string(esr));
|
||||||
|
|
||||||
@@ -796,7 +796,7 @@ UNHANDLED(el0t, 32, error)
|
|||||||
#ifdef CONFIG_VMAP_STACK
|
#ifdef CONFIG_VMAP_STACK
|
||||||
asmlinkage void noinstr handle_bad_stack(struct pt_regs *regs)
|
asmlinkage void noinstr handle_bad_stack(struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
unsigned int esr = read_sysreg(esr_el1);
|
unsigned long esr = read_sysreg(esr_el1);
|
||||||
unsigned long far = read_sysreg(far_el1);
|
unsigned long far = read_sysreg(far_el1);
|
||||||
|
|
||||||
arm64_enter_nmi(regs);
|
arm64_enter_nmi(regs);
|
||||||
|
|||||||
@@ -930,7 +930,7 @@ void fpsimd_release_task(struct task_struct *dead_task)
|
|||||||
* would have disabled the SVE access trap for userspace during
|
* would have disabled the SVE access trap for userspace during
|
||||||
* ret_to_user, making an SVE access trap impossible in that case.
|
* ret_to_user, making an SVE access trap impossible in that case.
|
||||||
*/
|
*/
|
||||||
void do_sve_acc(unsigned int esr, struct pt_regs *regs)
|
void do_sve_acc(unsigned long esr, struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
/* Even if we chose not to use SVE, the hardware could still trap: */
|
/* Even if we chose not to use SVE, the hardware could still trap: */
|
||||||
if (unlikely(!system_supports_sve()) || WARN_ON(is_compat_task())) {
|
if (unlikely(!system_supports_sve()) || WARN_ON(is_compat_task())) {
|
||||||
@@ -972,7 +972,7 @@ void do_sve_acc(unsigned int esr, struct pt_regs *regs)
|
|||||||
/*
|
/*
|
||||||
* Trapped FP/ASIMD access.
|
* Trapped FP/ASIMD access.
|
||||||
*/
|
*/
|
||||||
void do_fpsimd_acc(unsigned int esr, struct pt_regs *regs)
|
void do_fpsimd_acc(unsigned long esr, struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
/* TODO: implement lazy context saving/restoring */
|
/* TODO: implement lazy context saving/restoring */
|
||||||
WARN_ON(1);
|
WARN_ON(1);
|
||||||
@@ -981,7 +981,7 @@ void do_fpsimd_acc(unsigned int esr, struct pt_regs *regs)
|
|||||||
/*
|
/*
|
||||||
* Raise a SIGFPE for the current process.
|
* Raise a SIGFPE for the current process.
|
||||||
*/
|
*/
|
||||||
void do_fpsimd_exc(unsigned int esr, struct pt_regs *regs)
|
void do_fpsimd_exc(unsigned long esr, struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
unsigned int si_code = FPE_FLTUNK;
|
unsigned int si_code = FPE_FLTUNK;
|
||||||
|
|
||||||
|
|||||||
@@ -617,7 +617,7 @@ NOKPROBE_SYMBOL(toggle_bp_registers);
|
|||||||
/*
|
/*
|
||||||
* Debug exception handlers.
|
* Debug exception handlers.
|
||||||
*/
|
*/
|
||||||
static int breakpoint_handler(unsigned long unused, unsigned int esr,
|
static int breakpoint_handler(unsigned long unused, unsigned long esr,
|
||||||
struct pt_regs *regs)
|
struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
int i, step = 0, *kernel_step;
|
int i, step = 0, *kernel_step;
|
||||||
@@ -751,7 +751,7 @@ static int watchpoint_report(struct perf_event *wp, unsigned long addr,
|
|||||||
return step;
|
return step;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int watchpoint_handler(unsigned long addr, unsigned int esr,
|
static int watchpoint_handler(unsigned long addr, unsigned long esr,
|
||||||
struct pt_regs *regs)
|
struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
int i, step = 0, *kernel_step, access, closest_match = 0;
|
int i, step = 0, *kernel_step, access, closest_match = 0;
|
||||||
|
|||||||
@@ -232,14 +232,14 @@ int kgdb_arch_handle_exception(int exception_vector, int signo,
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int kgdb_brk_fn(struct pt_regs *regs, unsigned int esr)
|
static int kgdb_brk_fn(struct pt_regs *regs, unsigned long esr)
|
||||||
{
|
{
|
||||||
kgdb_handle_exception(1, SIGTRAP, 0, regs);
|
kgdb_handle_exception(1, SIGTRAP, 0, regs);
|
||||||
return DBG_HOOK_HANDLED;
|
return DBG_HOOK_HANDLED;
|
||||||
}
|
}
|
||||||
NOKPROBE_SYMBOL(kgdb_brk_fn)
|
NOKPROBE_SYMBOL(kgdb_brk_fn)
|
||||||
|
|
||||||
static int kgdb_compiled_brk_fn(struct pt_regs *regs, unsigned int esr)
|
static int kgdb_compiled_brk_fn(struct pt_regs *regs, unsigned long esr)
|
||||||
{
|
{
|
||||||
compiled_break = 1;
|
compiled_break = 1;
|
||||||
kgdb_handle_exception(1, SIGTRAP, 0, regs);
|
kgdb_handle_exception(1, SIGTRAP, 0, regs);
|
||||||
@@ -248,7 +248,7 @@ static int kgdb_compiled_brk_fn(struct pt_regs *regs, unsigned int esr)
|
|||||||
}
|
}
|
||||||
NOKPROBE_SYMBOL(kgdb_compiled_brk_fn);
|
NOKPROBE_SYMBOL(kgdb_compiled_brk_fn);
|
||||||
|
|
||||||
static int kgdb_step_brk_fn(struct pt_regs *regs, unsigned int esr)
|
static int kgdb_step_brk_fn(struct pt_regs *regs, unsigned long esr)
|
||||||
{
|
{
|
||||||
if (!kgdb_single_step)
|
if (!kgdb_single_step)
|
||||||
return DBG_HOOK_ERROR;
|
return DBG_HOOK_ERROR;
|
||||||
|
|||||||
@@ -332,7 +332,7 @@ static void __kprobes kprobe_handler(struct pt_regs *regs)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int __kprobes
|
static int __kprobes
|
||||||
kprobe_breakpoint_ss_handler(struct pt_regs *regs, unsigned int esr)
|
kprobe_breakpoint_ss_handler(struct pt_regs *regs, unsigned long esr)
|
||||||
{
|
{
|
||||||
struct kprobe_ctlblk *kcb = get_kprobe_ctlblk();
|
struct kprobe_ctlblk *kcb = get_kprobe_ctlblk();
|
||||||
unsigned long addr = instruction_pointer(regs);
|
unsigned long addr = instruction_pointer(regs);
|
||||||
@@ -356,7 +356,7 @@ static struct break_hook kprobes_break_ss_hook = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static int __kprobes
|
static int __kprobes
|
||||||
kprobe_breakpoint_handler(struct pt_regs *regs, unsigned int esr)
|
kprobe_breakpoint_handler(struct pt_regs *regs, unsigned long esr)
|
||||||
{
|
{
|
||||||
kprobe_handler(regs);
|
kprobe_handler(regs);
|
||||||
return DBG_HOOK_HANDLED;
|
return DBG_HOOK_HANDLED;
|
||||||
|
|||||||
@@ -166,7 +166,7 @@ int arch_uprobe_exception_notify(struct notifier_block *self,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int uprobe_breakpoint_handler(struct pt_regs *regs,
|
static int uprobe_breakpoint_handler(struct pt_regs *regs,
|
||||||
unsigned int esr)
|
unsigned long esr)
|
||||||
{
|
{
|
||||||
if (uprobe_pre_sstep_notifier(regs))
|
if (uprobe_pre_sstep_notifier(regs))
|
||||||
return DBG_HOOK_HANDLED;
|
return DBG_HOOK_HANDLED;
|
||||||
@@ -175,7 +175,7 @@ static int uprobe_breakpoint_handler(struct pt_regs *regs,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int uprobe_single_step_handler(struct pt_regs *regs,
|
static int uprobe_single_step_handler(struct pt_regs *regs,
|
||||||
unsigned int esr)
|
unsigned long esr)
|
||||||
{
|
{
|
||||||
struct uprobe_task *utask = current->utask;
|
struct uprobe_task *utask = current->utask;
|
||||||
|
|
||||||
|
|||||||
@@ -243,7 +243,7 @@ static void arm64_show_signal(int signo, const char *str)
|
|||||||
static DEFINE_RATELIMIT_STATE(rs, DEFAULT_RATELIMIT_INTERVAL,
|
static DEFINE_RATELIMIT_STATE(rs, DEFAULT_RATELIMIT_INTERVAL,
|
||||||
DEFAULT_RATELIMIT_BURST);
|
DEFAULT_RATELIMIT_BURST);
|
||||||
struct task_struct *tsk = current;
|
struct task_struct *tsk = current;
|
||||||
unsigned int esr = tsk->thread.fault_code;
|
unsigned long esr = tsk->thread.fault_code;
|
||||||
struct pt_regs *regs = task_pt_regs(tsk);
|
struct pt_regs *regs = task_pt_regs(tsk);
|
||||||
|
|
||||||
/* Leave if the signal won't be shown */
|
/* Leave if the signal won't be shown */
|
||||||
@@ -254,7 +254,7 @@ static void arm64_show_signal(int signo, const char *str)
|
|||||||
|
|
||||||
pr_info("%s[%d]: unhandled exception: ", tsk->comm, task_pid_nr(tsk));
|
pr_info("%s[%d]: unhandled exception: ", tsk->comm, task_pid_nr(tsk));
|
||||||
if (esr)
|
if (esr)
|
||||||
pr_cont("%s, ESR 0x%08x, ", esr_get_class_string(esr), esr);
|
pr_cont("%s, ESR 0x%016lx, ", esr_get_class_string(esr), esr);
|
||||||
|
|
||||||
pr_cont("%s", str);
|
pr_cont("%s", str);
|
||||||
print_vma_addr(KERN_CONT " in ", regs->pc);
|
print_vma_addr(KERN_CONT " in ", regs->pc);
|
||||||
@@ -288,7 +288,7 @@ void arm64_force_sig_ptrace_errno_trap(int errno, unsigned long far,
|
|||||||
|
|
||||||
void arm64_notify_die(const char *str, struct pt_regs *regs,
|
void arm64_notify_die(const char *str, struct pt_regs *regs,
|
||||||
int signo, int sicode, unsigned long far,
|
int signo, int sicode, unsigned long far,
|
||||||
int err)
|
unsigned long err)
|
||||||
{
|
{
|
||||||
if (user_mode(regs)) {
|
if (user_mode(regs)) {
|
||||||
WARN_ON(regs != current_pt_regs());
|
WARN_ON(regs != current_pt_regs());
|
||||||
@@ -440,7 +440,7 @@ exit:
|
|||||||
return fn ? fn(regs, instr) : 1;
|
return fn ? fn(regs, instr) : 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void force_signal_inject(int signal, int code, unsigned long address, unsigned int err)
|
void force_signal_inject(int signal, int code, unsigned long address, unsigned long err)
|
||||||
{
|
{
|
||||||
const char *desc;
|
const char *desc;
|
||||||
struct pt_regs *regs = current_pt_regs();
|
struct pt_regs *regs = current_pt_regs();
|
||||||
@@ -507,7 +507,7 @@ void do_bti(struct pt_regs *regs)
|
|||||||
}
|
}
|
||||||
NOKPROBE_SYMBOL(do_bti);
|
NOKPROBE_SYMBOL(do_bti);
|
||||||
|
|
||||||
void do_ptrauth_fault(struct pt_regs *regs, unsigned int esr)
|
void do_ptrauth_fault(struct pt_regs *regs, unsigned long esr)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* Unexpected FPAC exception or pointer authentication failure in
|
* Unexpected FPAC exception or pointer authentication failure in
|
||||||
@@ -538,7 +538,7 @@ NOKPROBE_SYMBOL(do_ptrauth_fault);
|
|||||||
uaccess_ttbr0_disable(); \
|
uaccess_ttbr0_disable(); \
|
||||||
}
|
}
|
||||||
|
|
||||||
static void user_cache_maint_handler(unsigned int esr, struct pt_regs *regs)
|
static void user_cache_maint_handler(unsigned long esr, struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
unsigned long tagged_address, address;
|
unsigned long tagged_address, address;
|
||||||
int rt = ESR_ELx_SYS64_ISS_RT(esr);
|
int rt = ESR_ELx_SYS64_ISS_RT(esr);
|
||||||
@@ -578,7 +578,7 @@ static void user_cache_maint_handler(unsigned int esr, struct pt_regs *regs)
|
|||||||
arm64_skip_faulting_instruction(regs, AARCH64_INSN_SIZE);
|
arm64_skip_faulting_instruction(regs, AARCH64_INSN_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ctr_read_handler(unsigned int esr, struct pt_regs *regs)
|
static void ctr_read_handler(unsigned long esr, struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
int rt = ESR_ELx_SYS64_ISS_RT(esr);
|
int rt = ESR_ELx_SYS64_ISS_RT(esr);
|
||||||
unsigned long val = arm64_ftr_reg_user_value(&arm64_ftr_reg_ctrel0);
|
unsigned long val = arm64_ftr_reg_user_value(&arm64_ftr_reg_ctrel0);
|
||||||
@@ -597,7 +597,7 @@ static void ctr_read_handler(unsigned int esr, struct pt_regs *regs)
|
|||||||
arm64_skip_faulting_instruction(regs, AARCH64_INSN_SIZE);
|
arm64_skip_faulting_instruction(regs, AARCH64_INSN_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void cntvct_read_handler(unsigned int esr, struct pt_regs *regs)
|
static void cntvct_read_handler(unsigned long esr, struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
int rt = ESR_ELx_SYS64_ISS_RT(esr);
|
int rt = ESR_ELx_SYS64_ISS_RT(esr);
|
||||||
|
|
||||||
@@ -605,7 +605,7 @@ static void cntvct_read_handler(unsigned int esr, struct pt_regs *regs)
|
|||||||
arm64_skip_faulting_instruction(regs, AARCH64_INSN_SIZE);
|
arm64_skip_faulting_instruction(regs, AARCH64_INSN_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void cntfrq_read_handler(unsigned int esr, struct pt_regs *regs)
|
static void cntfrq_read_handler(unsigned long esr, struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
int rt = ESR_ELx_SYS64_ISS_RT(esr);
|
int rt = ESR_ELx_SYS64_ISS_RT(esr);
|
||||||
|
|
||||||
@@ -613,7 +613,7 @@ static void cntfrq_read_handler(unsigned int esr, struct pt_regs *regs)
|
|||||||
arm64_skip_faulting_instruction(regs, AARCH64_INSN_SIZE);
|
arm64_skip_faulting_instruction(regs, AARCH64_INSN_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void mrs_handler(unsigned int esr, struct pt_regs *regs)
|
static void mrs_handler(unsigned long esr, struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
u32 sysreg, rt;
|
u32 sysreg, rt;
|
||||||
|
|
||||||
@@ -624,15 +624,15 @@ static void mrs_handler(unsigned int esr, struct pt_regs *regs)
|
|||||||
force_signal_inject(SIGILL, ILL_ILLOPC, regs->pc, 0);
|
force_signal_inject(SIGILL, ILL_ILLOPC, regs->pc, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void wfi_handler(unsigned int esr, struct pt_regs *regs)
|
static void wfi_handler(unsigned long esr, struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
arm64_skip_faulting_instruction(regs, AARCH64_INSN_SIZE);
|
arm64_skip_faulting_instruction(regs, AARCH64_INSN_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct sys64_hook {
|
struct sys64_hook {
|
||||||
unsigned int esr_mask;
|
unsigned long esr_mask;
|
||||||
unsigned int esr_val;
|
unsigned long esr_val;
|
||||||
void (*handler)(unsigned int esr, struct pt_regs *regs);
|
void (*handler)(unsigned long esr, struct pt_regs *regs);
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct sys64_hook sys64_hooks[] = {
|
static const struct sys64_hook sys64_hooks[] = {
|
||||||
@@ -675,7 +675,7 @@ static const struct sys64_hook sys64_hooks[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
#ifdef CONFIG_COMPAT
|
#ifdef CONFIG_COMPAT
|
||||||
static bool cp15_cond_valid(unsigned int esr, struct pt_regs *regs)
|
static bool cp15_cond_valid(unsigned long esr, struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
int cond;
|
int cond;
|
||||||
|
|
||||||
@@ -695,7 +695,7 @@ static bool cp15_cond_valid(unsigned int esr, struct pt_regs *regs)
|
|||||||
return aarch32_opcode_cond_checks[cond](regs->pstate);
|
return aarch32_opcode_cond_checks[cond](regs->pstate);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void compat_cntfrq_read_handler(unsigned int esr, struct pt_regs *regs)
|
static void compat_cntfrq_read_handler(unsigned long esr, struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
int reg = (esr & ESR_ELx_CP15_32_ISS_RT_MASK) >> ESR_ELx_CP15_32_ISS_RT_SHIFT;
|
int reg = (esr & ESR_ELx_CP15_32_ISS_RT_MASK) >> ESR_ELx_CP15_32_ISS_RT_SHIFT;
|
||||||
|
|
||||||
@@ -712,7 +712,7 @@ static const struct sys64_hook cp15_32_hooks[] = {
|
|||||||
{},
|
{},
|
||||||
};
|
};
|
||||||
|
|
||||||
static void compat_cntvct_read_handler(unsigned int esr, struct pt_regs *regs)
|
static void compat_cntvct_read_handler(unsigned long esr, struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
int rt = (esr & ESR_ELx_CP15_64_ISS_RT_MASK) >> ESR_ELx_CP15_64_ISS_RT_SHIFT;
|
int rt = (esr & ESR_ELx_CP15_64_ISS_RT_MASK) >> ESR_ELx_CP15_64_ISS_RT_SHIFT;
|
||||||
int rt2 = (esr & ESR_ELx_CP15_64_ISS_RT2_MASK) >> ESR_ELx_CP15_64_ISS_RT2_SHIFT;
|
int rt2 = (esr & ESR_ELx_CP15_64_ISS_RT2_MASK) >> ESR_ELx_CP15_64_ISS_RT2_SHIFT;
|
||||||
@@ -732,7 +732,7 @@ static const struct sys64_hook cp15_64_hooks[] = {
|
|||||||
{},
|
{},
|
||||||
};
|
};
|
||||||
|
|
||||||
void do_cp15instr(unsigned int esr, struct pt_regs *regs)
|
void do_cp15instr(unsigned long esr, struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
const struct sys64_hook *hook, *hook_base;
|
const struct sys64_hook *hook, *hook_base;
|
||||||
|
|
||||||
@@ -773,7 +773,7 @@ void do_cp15instr(unsigned int esr, struct pt_regs *regs)
|
|||||||
NOKPROBE_SYMBOL(do_cp15instr);
|
NOKPROBE_SYMBOL(do_cp15instr);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void do_sysinstr(unsigned int esr, struct pt_regs *regs)
|
void do_sysinstr(unsigned long esr, struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
const struct sys64_hook *hook;
|
const struct sys64_hook *hook;
|
||||||
|
|
||||||
@@ -837,7 +837,7 @@ static const char *esr_class_str[] = {
|
|||||||
[ESR_ELx_EC_BRK64] = "BRK (AArch64)",
|
[ESR_ELx_EC_BRK64] = "BRK (AArch64)",
|
||||||
};
|
};
|
||||||
|
|
||||||
const char *esr_get_class_string(u32 esr)
|
const char *esr_get_class_string(unsigned long esr)
|
||||||
{
|
{
|
||||||
return esr_class_str[ESR_ELx_EC(esr)];
|
return esr_class_str[ESR_ELx_EC(esr)];
|
||||||
}
|
}
|
||||||
@@ -846,7 +846,7 @@ const char *esr_get_class_string(u32 esr)
|
|||||||
* bad_el0_sync handles unexpected, but potentially recoverable synchronous
|
* bad_el0_sync handles unexpected, but potentially recoverable synchronous
|
||||||
* exceptions taken from EL0.
|
* exceptions taken from EL0.
|
||||||
*/
|
*/
|
||||||
void bad_el0_sync(struct pt_regs *regs, int reason, unsigned int esr)
|
void bad_el0_sync(struct pt_regs *regs, int reason, unsigned long esr)
|
||||||
{
|
{
|
||||||
unsigned long pc = instruction_pointer(regs);
|
unsigned long pc = instruction_pointer(regs);
|
||||||
|
|
||||||
@@ -862,7 +862,7 @@ void bad_el0_sync(struct pt_regs *regs, int reason, unsigned int esr)
|
|||||||
DEFINE_PER_CPU(unsigned long [OVERFLOW_STACK_SIZE/sizeof(long)], overflow_stack)
|
DEFINE_PER_CPU(unsigned long [OVERFLOW_STACK_SIZE/sizeof(long)], overflow_stack)
|
||||||
__aligned(16);
|
__aligned(16);
|
||||||
|
|
||||||
void panic_bad_stack(struct pt_regs *regs, unsigned int esr, unsigned long far)
|
void panic_bad_stack(struct pt_regs *regs, unsigned long esr, unsigned long far)
|
||||||
{
|
{
|
||||||
unsigned long tsk_stk = (unsigned long)current->stack;
|
unsigned long tsk_stk = (unsigned long)current->stack;
|
||||||
unsigned long irq_stk = (unsigned long)this_cpu_read(irq_stack_ptr);
|
unsigned long irq_stk = (unsigned long)this_cpu_read(irq_stack_ptr);
|
||||||
@@ -871,7 +871,7 @@ void panic_bad_stack(struct pt_regs *regs, unsigned int esr, unsigned long far)
|
|||||||
console_verbose();
|
console_verbose();
|
||||||
pr_emerg("Insufficient stack space to handle exception!");
|
pr_emerg("Insufficient stack space to handle exception!");
|
||||||
|
|
||||||
pr_emerg("ESR: 0x%08x -- %s\n", esr, esr_get_class_string(esr));
|
pr_emerg("ESR: 0x%016lx -- %s\n", esr, esr_get_class_string(esr));
|
||||||
pr_emerg("FAR: 0x%016lx\n", far);
|
pr_emerg("FAR: 0x%016lx\n", far);
|
||||||
|
|
||||||
pr_emerg("Task stack: [0x%016lx..0x%016lx]\n",
|
pr_emerg("Task stack: [0x%016lx..0x%016lx]\n",
|
||||||
@@ -892,11 +892,11 @@ void panic_bad_stack(struct pt_regs *regs, unsigned int esr, unsigned long far)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void __noreturn arm64_serror_panic(struct pt_regs *regs, u32 esr)
|
void __noreturn arm64_serror_panic(struct pt_regs *regs, unsigned long esr)
|
||||||
{
|
{
|
||||||
console_verbose();
|
console_verbose();
|
||||||
|
|
||||||
pr_crit("SError Interrupt on CPU%d, code 0x%08x -- %s\n",
|
pr_crit("SError Interrupt on CPU%d, code 0x%016lx -- %s\n",
|
||||||
smp_processor_id(), esr, esr_get_class_string(esr));
|
smp_processor_id(), esr, esr_get_class_string(esr));
|
||||||
if (regs)
|
if (regs)
|
||||||
__show_regs(regs);
|
__show_regs(regs);
|
||||||
@@ -907,9 +907,9 @@ void __noreturn arm64_serror_panic(struct pt_regs *regs, u32 esr)
|
|||||||
unreachable();
|
unreachable();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool arm64_is_fatal_ras_serror(struct pt_regs *regs, unsigned int esr)
|
bool arm64_is_fatal_ras_serror(struct pt_regs *regs, unsigned long esr)
|
||||||
{
|
{
|
||||||
u32 aet = arm64_ras_serror_get_severity(esr);
|
unsigned long aet = arm64_ras_serror_get_severity(esr);
|
||||||
|
|
||||||
switch (aet) {
|
switch (aet) {
|
||||||
case ESR_ELx_AET_CE: /* corrected error */
|
case ESR_ELx_AET_CE: /* corrected error */
|
||||||
@@ -939,7 +939,7 @@ bool arm64_is_fatal_ras_serror(struct pt_regs *regs, unsigned int esr)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void do_serror(struct pt_regs *regs, unsigned int esr)
|
void do_serror(struct pt_regs *regs, unsigned long esr)
|
||||||
{
|
{
|
||||||
/* non-RAS errors are not containable */
|
/* non-RAS errors are not containable */
|
||||||
if (!arm64_is_ras_serror(esr) || arm64_is_fatal_ras_serror(regs, esr))
|
if (!arm64_is_ras_serror(esr) || arm64_is_fatal_ras_serror(regs, esr))
|
||||||
@@ -960,7 +960,7 @@ int is_valid_bugaddr(unsigned long addr)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int bug_handler(struct pt_regs *regs, unsigned int esr)
|
static int bug_handler(struct pt_regs *regs, unsigned long esr)
|
||||||
{
|
{
|
||||||
switch (report_bug(regs->pc, regs)) {
|
switch (report_bug(regs->pc, regs)) {
|
||||||
case BUG_TRAP_TYPE_BUG:
|
case BUG_TRAP_TYPE_BUG:
|
||||||
@@ -985,7 +985,7 @@ static struct break_hook bug_break_hook = {
|
|||||||
.imm = BUG_BRK_IMM,
|
.imm = BUG_BRK_IMM,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int reserved_fault_handler(struct pt_regs *regs, unsigned int esr)
|
static int reserved_fault_handler(struct pt_regs *regs, unsigned long esr)
|
||||||
{
|
{
|
||||||
pr_err("%s generated an invalid instruction at %pS!\n",
|
pr_err("%s generated an invalid instruction at %pS!\n",
|
||||||
"Kernel text patching",
|
"Kernel text patching",
|
||||||
@@ -1007,7 +1007,7 @@ static struct break_hook fault_break_hook = {
|
|||||||
#define KASAN_ESR_SIZE_MASK 0x0f
|
#define KASAN_ESR_SIZE_MASK 0x0f
|
||||||
#define KASAN_ESR_SIZE(esr) (1 << ((esr) & KASAN_ESR_SIZE_MASK))
|
#define KASAN_ESR_SIZE(esr) (1 << ((esr) & KASAN_ESR_SIZE_MASK))
|
||||||
|
|
||||||
static int kasan_handler(struct pt_regs *regs, unsigned int esr)
|
static int kasan_handler(struct pt_regs *regs, unsigned long esr)
|
||||||
{
|
{
|
||||||
bool recover = esr & KASAN_ESR_RECOVER;
|
bool recover = esr & KASAN_ESR_RECOVER;
|
||||||
bool write = esr & KASAN_ESR_WRITE;
|
bool write = esr & KASAN_ESR_WRITE;
|
||||||
@@ -1050,11 +1050,11 @@ static struct break_hook kasan_break_hook = {
|
|||||||
* Initial handler for AArch64 BRK exceptions
|
* Initial handler for AArch64 BRK exceptions
|
||||||
* This handler only used until debug_traps_init().
|
* This handler only used until debug_traps_init().
|
||||||
*/
|
*/
|
||||||
int __init early_brk64(unsigned long addr, unsigned int esr,
|
int __init early_brk64(unsigned long addr, unsigned long esr,
|
||||||
struct pt_regs *regs)
|
struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_KASAN_SW_TAGS
|
#ifdef CONFIG_KASAN_SW_TAGS
|
||||||
unsigned int comment = esr & ESR_ELx_BRK64_ISS_COMMENT_MASK;
|
unsigned long comment = esr & ESR_ELx_BRK64_ISS_COMMENT_MASK;
|
||||||
|
|
||||||
if ((comment & ~KASAN_BRK_MASK) == KASAN_BRK_IMM)
|
if ((comment & ~KASAN_BRK_MASK) == KASAN_BRK_IMM)
|
||||||
return kasan_handler(regs, esr) != DBG_HOOK_HANDLED;
|
return kasan_handler(regs, esr) != DBG_HOOK_HANDLED;
|
||||||
|
|||||||
@@ -43,7 +43,7 @@
|
|||||||
#include <asm/traps.h>
|
#include <asm/traps.h>
|
||||||
|
|
||||||
struct fault_info {
|
struct fault_info {
|
||||||
int (*fn)(unsigned long far, unsigned int esr,
|
int (*fn)(unsigned long far, unsigned long esr,
|
||||||
struct pt_regs *regs);
|
struct pt_regs *regs);
|
||||||
int sig;
|
int sig;
|
||||||
int code;
|
int code;
|
||||||
@@ -53,17 +53,17 @@ struct fault_info {
|
|||||||
static const struct fault_info fault_info[];
|
static const struct fault_info fault_info[];
|
||||||
static struct fault_info debug_fault_info[];
|
static struct fault_info debug_fault_info[];
|
||||||
|
|
||||||
static inline const struct fault_info *esr_to_fault_info(unsigned int esr)
|
static inline const struct fault_info *esr_to_fault_info(unsigned long esr)
|
||||||
{
|
{
|
||||||
return fault_info + (esr & ESR_ELx_FSC);
|
return fault_info + (esr & ESR_ELx_FSC);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline const struct fault_info *esr_to_debug_fault_info(unsigned int esr)
|
static inline const struct fault_info *esr_to_debug_fault_info(unsigned long esr)
|
||||||
{
|
{
|
||||||
return debug_fault_info + DBG_ESR_EVT(esr);
|
return debug_fault_info + DBG_ESR_EVT(esr);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void data_abort_decode(unsigned int esr)
|
static void data_abort_decode(unsigned long esr)
|
||||||
{
|
{
|
||||||
pr_alert("Data abort info:\n");
|
pr_alert("Data abort info:\n");
|
||||||
|
|
||||||
@@ -85,11 +85,11 @@ static void data_abort_decode(unsigned int esr)
|
|||||||
(esr & ESR_ELx_WNR) >> ESR_ELx_WNR_SHIFT);
|
(esr & ESR_ELx_WNR) >> ESR_ELx_WNR_SHIFT);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void mem_abort_decode(unsigned int esr)
|
static void mem_abort_decode(unsigned long esr)
|
||||||
{
|
{
|
||||||
pr_alert("Mem abort info:\n");
|
pr_alert("Mem abort info:\n");
|
||||||
|
|
||||||
pr_alert(" ESR = 0x%08x\n", esr);
|
pr_alert(" ESR = 0x%016lx\n", esr);
|
||||||
pr_alert(" EC = 0x%02lx: %s, IL = %u bits\n",
|
pr_alert(" EC = 0x%02lx: %s, IL = %u bits\n",
|
||||||
ESR_ELx_EC(esr), esr_get_class_string(esr),
|
ESR_ELx_EC(esr), esr_get_class_string(esr),
|
||||||
(esr & ESR_ELx_IL) ? 32 : 16);
|
(esr & ESR_ELx_IL) ? 32 : 16);
|
||||||
@@ -99,7 +99,7 @@ static void mem_abort_decode(unsigned int esr)
|
|||||||
pr_alert(" EA = %lu, S1PTW = %lu\n",
|
pr_alert(" EA = %lu, S1PTW = %lu\n",
|
||||||
(esr & ESR_ELx_EA) >> ESR_ELx_EA_SHIFT,
|
(esr & ESR_ELx_EA) >> ESR_ELx_EA_SHIFT,
|
||||||
(esr & ESR_ELx_S1PTW) >> ESR_ELx_S1PTW_SHIFT);
|
(esr & ESR_ELx_S1PTW) >> ESR_ELx_S1PTW_SHIFT);
|
||||||
pr_alert(" FSC = 0x%02x: %s\n", (esr & ESR_ELx_FSC),
|
pr_alert(" FSC = 0x%02lx: %s\n", (esr & ESR_ELx_FSC),
|
||||||
esr_to_fault_info(esr)->name);
|
esr_to_fault_info(esr)->name);
|
||||||
|
|
||||||
if (esr_is_data_abort(esr))
|
if (esr_is_data_abort(esr))
|
||||||
@@ -229,20 +229,20 @@ int ptep_set_access_flags(struct vm_area_struct *vma,
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool is_el1_instruction_abort(unsigned int esr)
|
static bool is_el1_instruction_abort(unsigned long esr)
|
||||||
{
|
{
|
||||||
return ESR_ELx_EC(esr) == ESR_ELx_EC_IABT_CUR;
|
return ESR_ELx_EC(esr) == ESR_ELx_EC_IABT_CUR;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool is_el1_data_abort(unsigned int esr)
|
static bool is_el1_data_abort(unsigned long esr)
|
||||||
{
|
{
|
||||||
return ESR_ELx_EC(esr) == ESR_ELx_EC_DABT_CUR;
|
return ESR_ELx_EC(esr) == ESR_ELx_EC_DABT_CUR;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline bool is_el1_permission_fault(unsigned long addr, unsigned int esr,
|
static inline bool is_el1_permission_fault(unsigned long addr, unsigned long esr,
|
||||||
struct pt_regs *regs)
|
struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
unsigned int fsc_type = esr & ESR_ELx_FSC_TYPE;
|
unsigned long fsc_type = esr & ESR_ELx_FSC_TYPE;
|
||||||
|
|
||||||
if (!is_el1_data_abort(esr) && !is_el1_instruction_abort(esr))
|
if (!is_el1_data_abort(esr) && !is_el1_instruction_abort(esr))
|
||||||
return false;
|
return false;
|
||||||
@@ -258,7 +258,7 @@ static inline bool is_el1_permission_fault(unsigned long addr, unsigned int esr,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static bool __kprobes is_spurious_el1_translation_fault(unsigned long addr,
|
static bool __kprobes is_spurious_el1_translation_fault(unsigned long addr,
|
||||||
unsigned int esr,
|
unsigned long esr,
|
||||||
struct pt_regs *regs)
|
struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
@@ -290,7 +290,7 @@ static bool __kprobes is_spurious_el1_translation_fault(unsigned long addr,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void die_kernel_fault(const char *msg, unsigned long addr,
|
static void die_kernel_fault(const char *msg, unsigned long addr,
|
||||||
unsigned int esr, struct pt_regs *regs)
|
unsigned long esr, struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
bust_spinlocks(1);
|
bust_spinlocks(1);
|
||||||
|
|
||||||
@@ -306,7 +306,7 @@ static void die_kernel_fault(const char *msg, unsigned long addr,
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_KASAN_HW_TAGS
|
#ifdef CONFIG_KASAN_HW_TAGS
|
||||||
static void report_tag_fault(unsigned long addr, unsigned int esr,
|
static void report_tag_fault(unsigned long addr, unsigned long esr,
|
||||||
struct pt_regs *regs)
|
struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
@@ -318,11 +318,11 @@ static void report_tag_fault(unsigned long addr, unsigned int esr,
|
|||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
/* Tag faults aren't enabled without CONFIG_KASAN_HW_TAGS. */
|
/* Tag faults aren't enabled without CONFIG_KASAN_HW_TAGS. */
|
||||||
static inline void report_tag_fault(unsigned long addr, unsigned int esr,
|
static inline void report_tag_fault(unsigned long addr, unsigned long esr,
|
||||||
struct pt_regs *regs) { }
|
struct pt_regs *regs) { }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void do_tag_recovery(unsigned long addr, unsigned int esr,
|
static void do_tag_recovery(unsigned long addr, unsigned long esr,
|
||||||
struct pt_regs *regs)
|
struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -337,9 +337,9 @@ static void do_tag_recovery(unsigned long addr, unsigned int esr,
|
|||||||
isb();
|
isb();
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool is_el1_mte_sync_tag_check_fault(unsigned int esr)
|
static bool is_el1_mte_sync_tag_check_fault(unsigned long esr)
|
||||||
{
|
{
|
||||||
unsigned int fsc = esr & ESR_ELx_FSC;
|
unsigned long fsc = esr & ESR_ELx_FSC;
|
||||||
|
|
||||||
if (!is_el1_data_abort(esr))
|
if (!is_el1_data_abort(esr))
|
||||||
return false;
|
return false;
|
||||||
@@ -350,7 +350,12 @@ static bool is_el1_mte_sync_tag_check_fault(unsigned int esr)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __do_kernel_fault(unsigned long addr, unsigned int esr,
|
static bool is_translation_fault(unsigned long esr)
|
||||||
|
{
|
||||||
|
return (esr & ESR_ELx_FSC_TYPE) == ESR_ELx_FSC_FAULT;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void __do_kernel_fault(unsigned long addr, unsigned long esr,
|
||||||
struct pt_regs *regs)
|
struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
const char *msg;
|
const char *msg;
|
||||||
@@ -382,7 +387,8 @@ static void __do_kernel_fault(unsigned long addr, unsigned int esr,
|
|||||||
} else if (addr < PAGE_SIZE) {
|
} else if (addr < PAGE_SIZE) {
|
||||||
msg = "NULL pointer dereference";
|
msg = "NULL pointer dereference";
|
||||||
} else {
|
} else {
|
||||||
if (kfence_handle_page_fault(addr, esr & ESR_ELx_WNR, regs))
|
if (is_translation_fault(esr) &&
|
||||||
|
kfence_handle_page_fault(addr, esr & ESR_ELx_WNR, regs))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
msg = "paging request";
|
msg = "paging request";
|
||||||
@@ -391,7 +397,7 @@ static void __do_kernel_fault(unsigned long addr, unsigned int esr,
|
|||||||
die_kernel_fault(msg, addr, esr, regs);
|
die_kernel_fault(msg, addr, esr, regs);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void set_thread_esr(unsigned long address, unsigned int esr)
|
static void set_thread_esr(unsigned long address, unsigned long esr)
|
||||||
{
|
{
|
||||||
current->thread.fault_address = address;
|
current->thread.fault_address = address;
|
||||||
|
|
||||||
@@ -439,7 +445,7 @@ static void set_thread_esr(unsigned long address, unsigned int esr)
|
|||||||
* exception level). Fail safe by not providing an ESR
|
* exception level). Fail safe by not providing an ESR
|
||||||
* context record at all.
|
* context record at all.
|
||||||
*/
|
*/
|
||||||
WARN(1, "ESR 0x%x is not DABT or IABT from EL0\n", esr);
|
WARN(1, "ESR 0x%lx is not DABT or IABT from EL0\n", esr);
|
||||||
esr = 0;
|
esr = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -448,7 +454,7 @@ static void set_thread_esr(unsigned long address, unsigned int esr)
|
|||||||
current->thread.fault_code = esr;
|
current->thread.fault_code = esr;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void do_bad_area(unsigned long far, unsigned int esr,
|
static void do_bad_area(unsigned long far, unsigned long esr,
|
||||||
struct pt_regs *regs)
|
struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
unsigned long addr = untagged_addr(far);
|
unsigned long addr = untagged_addr(far);
|
||||||
@@ -499,7 +505,7 @@ static vm_fault_t __do_page_fault(struct mm_struct *mm, unsigned long addr,
|
|||||||
return handle_mm_fault(vma, addr, mm_flags, regs);
|
return handle_mm_fault(vma, addr, mm_flags, regs);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool is_el0_instruction_abort(unsigned int esr)
|
static bool is_el0_instruction_abort(unsigned long esr)
|
||||||
{
|
{
|
||||||
return ESR_ELx_EC(esr) == ESR_ELx_EC_IABT_LOW;
|
return ESR_ELx_EC(esr) == ESR_ELx_EC_IABT_LOW;
|
||||||
}
|
}
|
||||||
@@ -508,12 +514,12 @@ static bool is_el0_instruction_abort(unsigned int esr)
|
|||||||
* Note: not valid for EL1 DC IVAC, but we never use that such that it
|
* Note: not valid for EL1 DC IVAC, but we never use that such that it
|
||||||
* should fault. EL0 cannot issue DC IVAC (undef).
|
* should fault. EL0 cannot issue DC IVAC (undef).
|
||||||
*/
|
*/
|
||||||
static bool is_write_abort(unsigned int esr)
|
static bool is_write_abort(unsigned long esr)
|
||||||
{
|
{
|
||||||
return (esr & ESR_ELx_WNR) && !(esr & ESR_ELx_CM);
|
return (esr & ESR_ELx_WNR) && !(esr & ESR_ELx_CM);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __kprobes do_page_fault(unsigned long far, unsigned int esr,
|
static int __kprobes do_page_fault(unsigned long far, unsigned long esr,
|
||||||
struct pt_regs *regs)
|
struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
const struct fault_info *inf;
|
const struct fault_info *inf;
|
||||||
@@ -671,7 +677,7 @@ no_context:
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int __kprobes do_translation_fault(unsigned long far,
|
static int __kprobes do_translation_fault(unsigned long far,
|
||||||
unsigned int esr,
|
unsigned long esr,
|
||||||
struct pt_regs *regs)
|
struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
unsigned long addr = untagged_addr(far);
|
unsigned long addr = untagged_addr(far);
|
||||||
@@ -683,19 +689,19 @@ static int __kprobes do_translation_fault(unsigned long far,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int do_alignment_fault(unsigned long far, unsigned int esr,
|
static int do_alignment_fault(unsigned long far, unsigned long esr,
|
||||||
struct pt_regs *regs)
|
struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
do_bad_area(far, esr, regs);
|
do_bad_area(far, esr, regs);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int do_bad(unsigned long far, unsigned int esr, struct pt_regs *regs)
|
static int do_bad(unsigned long far, unsigned long esr, struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
return 1; /* "fault" */
|
return 1; /* "fault" */
|
||||||
}
|
}
|
||||||
|
|
||||||
static int do_sea(unsigned long far, unsigned int esr, struct pt_regs *regs)
|
static int do_sea(unsigned long far, unsigned long esr, struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
const struct fault_info *inf;
|
const struct fault_info *inf;
|
||||||
unsigned long siaddr;
|
unsigned long siaddr;
|
||||||
@@ -725,7 +731,7 @@ static int do_sea(unsigned long far, unsigned int esr, struct pt_regs *regs)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int do_tag_check_fault(unsigned long far, unsigned int esr,
|
static int do_tag_check_fault(unsigned long far, unsigned long esr,
|
||||||
struct pt_regs *regs)
|
struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
@@ -805,7 +811,7 @@ static const struct fault_info fault_info[] = {
|
|||||||
{ do_bad, SIGKILL, SI_KERNEL, "unknown 63" },
|
{ do_bad, SIGKILL, SI_KERNEL, "unknown 63" },
|
||||||
};
|
};
|
||||||
|
|
||||||
void do_mem_abort(unsigned long far, unsigned int esr, struct pt_regs *regs)
|
void do_mem_abort(unsigned long far, unsigned long esr, struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
const struct fault_info *inf = esr_to_fault_info(esr);
|
const struct fault_info *inf = esr_to_fault_info(esr);
|
||||||
unsigned long addr = untagged_addr(far);
|
unsigned long addr = untagged_addr(far);
|
||||||
@@ -828,14 +834,14 @@ void do_mem_abort(unsigned long far, unsigned int esr, struct pt_regs *regs)
|
|||||||
}
|
}
|
||||||
NOKPROBE_SYMBOL(do_mem_abort);
|
NOKPROBE_SYMBOL(do_mem_abort);
|
||||||
|
|
||||||
void do_sp_pc_abort(unsigned long addr, unsigned int esr, struct pt_regs *regs)
|
void do_sp_pc_abort(unsigned long addr, unsigned long esr, struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
arm64_notify_die("SP/PC alignment exception", regs, SIGBUS, BUS_ADRALN,
|
arm64_notify_die("SP/PC alignment exception", regs, SIGBUS, BUS_ADRALN,
|
||||||
addr, esr);
|
addr, esr);
|
||||||
}
|
}
|
||||||
NOKPROBE_SYMBOL(do_sp_pc_abort);
|
NOKPROBE_SYMBOL(do_sp_pc_abort);
|
||||||
|
|
||||||
int __init early_brk64(unsigned long addr, unsigned int esr,
|
int __init early_brk64(unsigned long addr, unsigned long esr,
|
||||||
struct pt_regs *regs);
|
struct pt_regs *regs);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -855,7 +861,7 @@ static struct fault_info __refdata debug_fault_info[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
void __init hook_debug_fault_code(int nr,
|
void __init hook_debug_fault_code(int nr,
|
||||||
int (*fn)(unsigned long, unsigned int, struct pt_regs *),
|
int (*fn)(unsigned long, unsigned long, struct pt_regs *),
|
||||||
int sig, int code, const char *name)
|
int sig, int code, const char *name)
|
||||||
{
|
{
|
||||||
BUG_ON(nr < 0 || nr >= ARRAY_SIZE(debug_fault_info));
|
BUG_ON(nr < 0 || nr >= ARRAY_SIZE(debug_fault_info));
|
||||||
@@ -888,7 +894,7 @@ static void debug_exception_exit(struct pt_regs *regs)
|
|||||||
}
|
}
|
||||||
NOKPROBE_SYMBOL(debug_exception_exit);
|
NOKPROBE_SYMBOL(debug_exception_exit);
|
||||||
|
|
||||||
void do_debug_exception(unsigned long addr_if_watchpoint, unsigned int esr,
|
void do_debug_exception(unsigned long addr_if_watchpoint, unsigned long esr,
|
||||||
struct pt_regs *regs)
|
struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
const struct fault_info *inf = esr_to_debug_fault_info(esr);
|
const struct fault_info *inf = esr_to_debug_fault_info(esr);
|
||||||
|
|||||||
@@ -361,6 +361,8 @@ static struct clk clk_periph = {
|
|||||||
*/
|
*/
|
||||||
int clk_enable(struct clk *clk)
|
int clk_enable(struct clk *clk)
|
||||||
{
|
{
|
||||||
|
if (!clk)
|
||||||
|
return 0;
|
||||||
mutex_lock(&clocks_mutex);
|
mutex_lock(&clocks_mutex);
|
||||||
clk_enable_unlocked(clk);
|
clk_enable_unlocked(clk);
|
||||||
mutex_unlock(&clocks_mutex);
|
mutex_unlock(&clocks_mutex);
|
||||||
|
|||||||
@@ -211,7 +211,7 @@ union cvmx_helper_link_info __cvmx_helper_board_link_get(int ipd_port)
|
|||||||
{
|
{
|
||||||
union cvmx_helper_link_info result;
|
union cvmx_helper_link_info result;
|
||||||
|
|
||||||
WARN(!octeon_is_simulation(),
|
WARN_ONCE(!octeon_is_simulation(),
|
||||||
"Using deprecated link status - please update your DT");
|
"Using deprecated link status - please update your DT");
|
||||||
|
|
||||||
/* Unless we fix it later, all links are defaulted to down */
|
/* Unless we fix it later, all links are defaulted to down */
|
||||||
|
|||||||
@@ -1100,7 +1100,7 @@ union cvmx_helper_link_info cvmx_helper_link_get(int ipd_port)
|
|||||||
if (index == 0)
|
if (index == 0)
|
||||||
result = __cvmx_helper_rgmii_link_get(ipd_port);
|
result = __cvmx_helper_rgmii_link_get(ipd_port);
|
||||||
else {
|
else {
|
||||||
WARN(1, "Using deprecated link status - please update your DT");
|
WARN_ONCE(1, "Using deprecated link status - please update your DT");
|
||||||
result.s.full_duplex = 1;
|
result.s.full_duplex = 1;
|
||||||
result.s.link_up = 1;
|
result.s.link_up = 1;
|
||||||
result.s.speed = 1000;
|
result.s.speed = 1000;
|
||||||
|
|||||||
@@ -7,10 +7,12 @@
|
|||||||
#ifndef _MT7621_REGS_H_
|
#ifndef _MT7621_REGS_H_
|
||||||
#define _MT7621_REGS_H_
|
#define _MT7621_REGS_H_
|
||||||
|
|
||||||
|
#define IOMEM(x) ((void __iomem *)(KSEG1ADDR(x)))
|
||||||
|
|
||||||
#define MT7621_PALMBUS_BASE 0x1C000000
|
#define MT7621_PALMBUS_BASE 0x1C000000
|
||||||
#define MT7621_PALMBUS_SIZE 0x03FFFFFF
|
#define MT7621_PALMBUS_SIZE 0x03FFFFFF
|
||||||
|
|
||||||
#define MT7621_SYSC_BASE 0x1E000000
|
#define MT7621_SYSC_BASE IOMEM(0x1E000000)
|
||||||
|
|
||||||
#define SYSC_REG_CHIP_NAME0 0x00
|
#define SYSC_REG_CHIP_NAME0 0x00
|
||||||
#define SYSC_REG_CHIP_NAME1 0x04
|
#define SYSC_REG_CHIP_NAME1 0x04
|
||||||
|
|||||||
@@ -75,7 +75,6 @@ ATTRIBUTE_GROUPS(vpe);
|
|||||||
|
|
||||||
static void vpe_device_release(struct device *cd)
|
static void vpe_device_release(struct device *cd)
|
||||||
{
|
{
|
||||||
kfree(cd);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct class vpe_class = {
|
static struct class vpe_class = {
|
||||||
@@ -157,6 +156,7 @@ out_dev:
|
|||||||
device_del(&vpe_device);
|
device_del(&vpe_device);
|
||||||
|
|
||||||
out_class:
|
out_class:
|
||||||
|
put_device(&vpe_device);
|
||||||
class_unregister(&vpe_class);
|
class_unregister(&vpe_class);
|
||||||
|
|
||||||
out_chrdev:
|
out_chrdev:
|
||||||
@@ -169,7 +169,7 @@ void __exit vpe_module_exit(void)
|
|||||||
{
|
{
|
||||||
struct vpe *v, *n;
|
struct vpe *v, *n;
|
||||||
|
|
||||||
device_del(&vpe_device);
|
device_unregister(&vpe_device);
|
||||||
class_unregister(&vpe_class);
|
class_unregister(&vpe_class);
|
||||||
unregister_chrdev(major, VPE_MODULE_NAME);
|
unregister_chrdev(major, VPE_MODULE_NAME);
|
||||||
|
|
||||||
|
|||||||
@@ -313,7 +313,6 @@ ATTRIBUTE_GROUPS(vpe);
|
|||||||
|
|
||||||
static void vpe_device_release(struct device *cd)
|
static void vpe_device_release(struct device *cd)
|
||||||
{
|
{
|
||||||
kfree(cd);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct class vpe_class = {
|
static struct class vpe_class = {
|
||||||
@@ -497,6 +496,7 @@ out_dev:
|
|||||||
device_del(&vpe_device);
|
device_del(&vpe_device);
|
||||||
|
|
||||||
out_class:
|
out_class:
|
||||||
|
put_device(&vpe_device);
|
||||||
class_unregister(&vpe_class);
|
class_unregister(&vpe_class);
|
||||||
|
|
||||||
out_chrdev:
|
out_chrdev:
|
||||||
@@ -509,7 +509,7 @@ void __exit vpe_module_exit(void)
|
|||||||
{
|
{
|
||||||
struct vpe *v, *n;
|
struct vpe *v, *n;
|
||||||
|
|
||||||
device_del(&vpe_device);
|
device_unregister(&vpe_device);
|
||||||
class_unregister(&vpe_class);
|
class_unregister(&vpe_class);
|
||||||
unregister_chrdev(major, VPE_MODULE_NAME);
|
unregister_chrdev(major, VPE_MODULE_NAME);
|
||||||
|
|
||||||
|
|||||||
@@ -23,6 +23,7 @@
|
|||||||
#define MT7621_MEM_TEST_PATTERN 0xaa5555aa
|
#define MT7621_MEM_TEST_PATTERN 0xaa5555aa
|
||||||
|
|
||||||
static u32 detect_magic __initdata;
|
static u32 detect_magic __initdata;
|
||||||
|
static struct ralink_soc_info *soc_info_ptr;
|
||||||
|
|
||||||
phys_addr_t mips_cpc_default_phys_base(void)
|
phys_addr_t mips_cpc_default_phys_base(void)
|
||||||
{
|
{
|
||||||
@@ -66,41 +67,83 @@ void __init ralink_of_remap(void)
|
|||||||
panic("Failed to remap core resources");
|
panic("Failed to remap core resources");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void soc_dev_init(struct ralink_soc_info *soc_info, u32 rev)
|
static unsigned int __init mt7621_get_soc_name0(void)
|
||||||
|
{
|
||||||
|
return __raw_readl(MT7621_SYSC_BASE + SYSC_REG_CHIP_NAME0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static unsigned int __init mt7621_get_soc_name1(void)
|
||||||
|
{
|
||||||
|
return __raw_readl(MT7621_SYSC_BASE + SYSC_REG_CHIP_NAME1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool __init mt7621_soc_valid(void)
|
||||||
|
{
|
||||||
|
if (mt7621_get_soc_name0() == MT7621_CHIP_NAME0 &&
|
||||||
|
mt7621_get_soc_name1() == MT7621_CHIP_NAME1)
|
||||||
|
return true;
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const char __init *mt7621_get_soc_id(void)
|
||||||
|
{
|
||||||
|
if (mt7621_soc_valid())
|
||||||
|
return "MT7621";
|
||||||
|
else
|
||||||
|
return "invalid";
|
||||||
|
}
|
||||||
|
|
||||||
|
static unsigned int __init mt7621_get_soc_rev(void)
|
||||||
|
{
|
||||||
|
return __raw_readl(MT7621_SYSC_BASE + SYSC_REG_CHIP_REV);
|
||||||
|
}
|
||||||
|
|
||||||
|
static unsigned int __init mt7621_get_soc_ver(void)
|
||||||
|
{
|
||||||
|
return (mt7621_get_soc_rev() >> CHIP_REV_VER_SHIFT) & CHIP_REV_VER_MASK;
|
||||||
|
}
|
||||||
|
|
||||||
|
static unsigned int __init mt7621_get_soc_eco(void)
|
||||||
|
{
|
||||||
|
return (mt7621_get_soc_rev() & CHIP_REV_ECO_MASK);
|
||||||
|
}
|
||||||
|
|
||||||
|
static const char __init *mt7621_get_soc_revision(void)
|
||||||
|
{
|
||||||
|
if (mt7621_get_soc_rev() == 1 && mt7621_get_soc_eco() == 1)
|
||||||
|
return "E2";
|
||||||
|
else
|
||||||
|
return "E1";
|
||||||
|
}
|
||||||
|
|
||||||
|
static int __init mt7621_soc_dev_init(void)
|
||||||
{
|
{
|
||||||
struct soc_device *soc_dev;
|
struct soc_device *soc_dev;
|
||||||
struct soc_device_attribute *soc_dev_attr;
|
struct soc_device_attribute *soc_dev_attr;
|
||||||
|
|
||||||
soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL);
|
soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL);
|
||||||
if (!soc_dev_attr)
|
if (!soc_dev_attr)
|
||||||
return;
|
return -ENOMEM;
|
||||||
|
|
||||||
soc_dev_attr->soc_id = "mt7621";
|
soc_dev_attr->soc_id = "mt7621";
|
||||||
soc_dev_attr->family = "Ralink";
|
soc_dev_attr->family = "Ralink";
|
||||||
|
soc_dev_attr->revision = mt7621_get_soc_revision();
|
||||||
|
|
||||||
if (((rev >> CHIP_REV_VER_SHIFT) & CHIP_REV_VER_MASK) == 1 &&
|
soc_dev_attr->data = soc_info_ptr;
|
||||||
(rev & CHIP_REV_ECO_MASK) == 1)
|
|
||||||
soc_dev_attr->revision = "E2";
|
|
||||||
else
|
|
||||||
soc_dev_attr->revision = "E1";
|
|
||||||
|
|
||||||
soc_dev_attr->data = soc_info;
|
|
||||||
|
|
||||||
soc_dev = soc_device_register(soc_dev_attr);
|
soc_dev = soc_device_register(soc_dev_attr);
|
||||||
if (IS_ERR(soc_dev)) {
|
if (IS_ERR(soc_dev)) {
|
||||||
kfree(soc_dev_attr);
|
kfree(soc_dev_attr);
|
||||||
return;
|
return PTR_ERR(soc_dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
device_initcall(mt7621_soc_dev_init);
|
||||||
|
|
||||||
void __init prom_soc_init(struct ralink_soc_info *soc_info)
|
void __init prom_soc_init(struct ralink_soc_info *soc_info)
|
||||||
{
|
{
|
||||||
void __iomem *sysc = (void __iomem *) KSEG1ADDR(MT7621_SYSC_BASE);
|
|
||||||
unsigned char *name = NULL;
|
|
||||||
u32 n0;
|
|
||||||
u32 n1;
|
|
||||||
u32 rev;
|
|
||||||
|
|
||||||
/* Early detection of CMP support */
|
/* Early detection of CMP support */
|
||||||
mips_cm_probe();
|
mips_cm_probe();
|
||||||
mips_cpc_probe();
|
mips_cpc_probe();
|
||||||
@@ -123,27 +166,23 @@ void __init prom_soc_init(struct ralink_soc_info *soc_info)
|
|||||||
__sync();
|
__sync();
|
||||||
}
|
}
|
||||||
|
|
||||||
n0 = __raw_readl(sysc + SYSC_REG_CHIP_NAME0);
|
if (mt7621_soc_valid())
|
||||||
n1 = __raw_readl(sysc + SYSC_REG_CHIP_NAME1);
|
|
||||||
|
|
||||||
if (n0 == MT7621_CHIP_NAME0 && n1 == MT7621_CHIP_NAME1) {
|
|
||||||
name = "MT7621";
|
|
||||||
soc_info->compatible = "mediatek,mt7621-soc";
|
soc_info->compatible = "mediatek,mt7621-soc";
|
||||||
} else {
|
else
|
||||||
panic("mt7621: unknown SoC, n0:%08x n1:%08x\n", n0, n1);
|
panic("mt7621: unknown SoC, n0:%08x n1:%08x\n",
|
||||||
}
|
mt7621_get_soc_name0(),
|
||||||
|
mt7621_get_soc_name1());
|
||||||
ralink_soc = MT762X_SOC_MT7621AT;
|
ralink_soc = MT762X_SOC_MT7621AT;
|
||||||
rev = __raw_readl(sysc + SYSC_REG_CHIP_REV);
|
|
||||||
|
|
||||||
snprintf(soc_info->sys_type, RAMIPS_SYS_TYPE_LEN,
|
snprintf(soc_info->sys_type, RAMIPS_SYS_TYPE_LEN,
|
||||||
"MediaTek %s ver:%u eco:%u",
|
"MediaTek %s ver:%u eco:%u",
|
||||||
name,
|
mt7621_get_soc_id(),
|
||||||
(rev >> CHIP_REV_VER_SHIFT) & CHIP_REV_VER_MASK,
|
mt7621_get_soc_ver(),
|
||||||
(rev & CHIP_REV_ECO_MASK));
|
mt7621_get_soc_eco());
|
||||||
|
|
||||||
soc_info->mem_detect = mt7621_memory_detect;
|
soc_info->mem_detect = mt7621_memory_detect;
|
||||||
|
|
||||||
soc_dev_init(soc_info, rev);
|
soc_info_ptr = soc_info;
|
||||||
|
|
||||||
if (!register_cps_smp_ops())
|
if (!register_cps_smp_ops())
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -788,6 +788,7 @@ void __noreturn rtas_halt(void)
|
|||||||
|
|
||||||
/* Must be in the RMO region, so we place it here */
|
/* Must be in the RMO region, so we place it here */
|
||||||
static char rtas_os_term_buf[2048];
|
static char rtas_os_term_buf[2048];
|
||||||
|
static s32 ibm_os_term_token = RTAS_UNKNOWN_SERVICE;
|
||||||
|
|
||||||
void rtas_os_term(char *str)
|
void rtas_os_term(char *str)
|
||||||
{
|
{
|
||||||
@@ -799,16 +800,20 @@ void rtas_os_term(char *str)
|
|||||||
* this property may terminate the partition which we want to avoid
|
* this property may terminate the partition which we want to avoid
|
||||||
* since it interferes with panic_timeout.
|
* since it interferes with panic_timeout.
|
||||||
*/
|
*/
|
||||||
if (RTAS_UNKNOWN_SERVICE == rtas_token("ibm,os-term") ||
|
if (ibm_os_term_token == RTAS_UNKNOWN_SERVICE)
|
||||||
RTAS_UNKNOWN_SERVICE == rtas_token("ibm,extended-os-term"))
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
snprintf(rtas_os_term_buf, 2048, "OS panic: %s", str);
|
snprintf(rtas_os_term_buf, 2048, "OS panic: %s", str);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Keep calling as long as RTAS returns a "try again" status,
|
||||||
|
* but don't use rtas_busy_delay(), which potentially
|
||||||
|
* schedules.
|
||||||
|
*/
|
||||||
do {
|
do {
|
||||||
status = rtas_call(rtas_token("ibm,os-term"), 1, 1, NULL,
|
status = rtas_call(ibm_os_term_token, 1, 1, NULL,
|
||||||
__pa(rtas_os_term_buf));
|
__pa(rtas_os_term_buf));
|
||||||
} while (rtas_busy_delay(status));
|
} while (rtas_busy_delay_time(status));
|
||||||
|
|
||||||
if (status != 0)
|
if (status != 0)
|
||||||
printk(KERN_EMERG "ibm,os-term call failed %d\n", status);
|
printk(KERN_EMERG "ibm,os-term call failed %d\n", status);
|
||||||
@@ -1167,6 +1172,13 @@ void __init rtas_initialize(void)
|
|||||||
no_entry = of_property_read_u32(rtas.dev, "linux,rtas-entry", &entry);
|
no_entry = of_property_read_u32(rtas.dev, "linux,rtas-entry", &entry);
|
||||||
rtas.entry = no_entry ? rtas.base : entry;
|
rtas.entry = no_entry ? rtas.base : entry;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Discover these now to avoid device tree lookups in the
|
||||||
|
* panic path.
|
||||||
|
*/
|
||||||
|
if (of_property_read_bool(rtas.dev, "ibm,extended-os-term"))
|
||||||
|
ibm_os_term_token = rtas_token("ibm,os-term");
|
||||||
|
|
||||||
/* If RTAS was found, allocate the RMO buffer for it and look for
|
/* If RTAS was found, allocate the RMO buffer for it and look for
|
||||||
* the stop-self token if any
|
* the stop-self token if any
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -61,6 +61,7 @@ perf_callchain_kernel(struct perf_callchain_entry_ctx *entry, struct pt_regs *re
|
|||||||
next_sp = fp[0];
|
next_sp = fp[0];
|
||||||
|
|
||||||
if (next_sp == sp + STACK_INT_FRAME_SIZE &&
|
if (next_sp == sp + STACK_INT_FRAME_SIZE &&
|
||||||
|
validate_sp(sp, current, STACK_INT_FRAME_SIZE) &&
|
||||||
fp[STACK_FRAME_MARKER] == STACK_FRAME_REGS_MARKER) {
|
fp[STACK_FRAME_MARKER] == STACK_FRAME_REGS_MARKER) {
|
||||||
/*
|
/*
|
||||||
* This looks like an interrupt frame for an
|
* This looks like an interrupt frame for an
|
||||||
|
|||||||
@@ -79,6 +79,7 @@ REQUEST(__field(0, 8, partition_id)
|
|||||||
)
|
)
|
||||||
#include I(REQUEST_END)
|
#include I(REQUEST_END)
|
||||||
|
|
||||||
|
#ifdef ENABLE_EVENTS_COUNTERINFO_V6
|
||||||
/*
|
/*
|
||||||
* Not available for counter_info_version >= 0x8, use
|
* Not available for counter_info_version >= 0x8, use
|
||||||
* run_instruction_cycles_by_partition(0x100) instead.
|
* run_instruction_cycles_by_partition(0x100) instead.
|
||||||
@@ -92,6 +93,7 @@ REQUEST(__field(0, 8, partition_id)
|
|||||||
__count(0x10, 8, cycles)
|
__count(0x10, 8, cycles)
|
||||||
)
|
)
|
||||||
#include I(REQUEST_END)
|
#include I(REQUEST_END)
|
||||||
|
#endif
|
||||||
|
|
||||||
#define REQUEST_NAME system_performance_capabilities
|
#define REQUEST_NAME system_performance_capabilities
|
||||||
#define REQUEST_NUM 0x40
|
#define REQUEST_NUM 0x40
|
||||||
@@ -103,6 +105,7 @@ REQUEST(__field(0, 1, perf_collect_privileged)
|
|||||||
)
|
)
|
||||||
#include I(REQUEST_END)
|
#include I(REQUEST_END)
|
||||||
|
|
||||||
|
#ifdef ENABLE_EVENTS_COUNTERINFO_V6
|
||||||
#define REQUEST_NAME processor_bus_utilization_abc_links
|
#define REQUEST_NAME processor_bus_utilization_abc_links
|
||||||
#define REQUEST_NUM 0x50
|
#define REQUEST_NUM 0x50
|
||||||
#define REQUEST_IDX_KIND "hw_chip_id=?"
|
#define REQUEST_IDX_KIND "hw_chip_id=?"
|
||||||
@@ -194,6 +197,7 @@ REQUEST(__field(0, 4, phys_processor_idx)
|
|||||||
__count(0x28, 8, instructions_completed)
|
__count(0x28, 8, instructions_completed)
|
||||||
)
|
)
|
||||||
#include I(REQUEST_END)
|
#include I(REQUEST_END)
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Processor_core_power_mode (0x95) skipped, no counters */
|
/* Processor_core_power_mode (0x95) skipped, no counters */
|
||||||
/* Affinity_domain_information_by_virtual_processor (0xA0) skipped,
|
/* Affinity_domain_information_by_virtual_processor (0xA0) skipped,
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ static struct attribute_group format_group = {
|
|||||||
|
|
||||||
static struct attribute_group event_group = {
|
static struct attribute_group event_group = {
|
||||||
.name = "events",
|
.name = "events",
|
||||||
.attrs = hv_gpci_event_attrs,
|
/* .attrs is set in init */
|
||||||
};
|
};
|
||||||
|
|
||||||
#define HV_CAPS_ATTR(_name, _format) \
|
#define HV_CAPS_ATTR(_name, _format) \
|
||||||
@@ -330,6 +330,7 @@ static int hv_gpci_init(void)
|
|||||||
int r;
|
int r;
|
||||||
unsigned long hret;
|
unsigned long hret;
|
||||||
struct hv_perf_caps caps;
|
struct hv_perf_caps caps;
|
||||||
|
struct hv_gpci_request_buffer *arg;
|
||||||
|
|
||||||
hv_gpci_assert_offsets_correct();
|
hv_gpci_assert_offsets_correct();
|
||||||
|
|
||||||
@@ -353,6 +354,36 @@ static int hv_gpci_init(void)
|
|||||||
/* sampling not supported */
|
/* sampling not supported */
|
||||||
h_gpci_pmu.capabilities |= PERF_PMU_CAP_NO_INTERRUPT;
|
h_gpci_pmu.capabilities |= PERF_PMU_CAP_NO_INTERRUPT;
|
||||||
|
|
||||||
|
arg = (void *)get_cpu_var(hv_gpci_reqb);
|
||||||
|
memset(arg, 0, HGPCI_REQ_BUFFER_SIZE);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* hcall H_GET_PERF_COUNTER_INFO populates the output
|
||||||
|
* counter_info_version value based on the system hypervisor.
|
||||||
|
* Pass the counter request 0x10 corresponds to request type
|
||||||
|
* 'Dispatch_timebase_by_processor', to get the supported
|
||||||
|
* counter_info_version.
|
||||||
|
*/
|
||||||
|
arg->params.counter_request = cpu_to_be32(0x10);
|
||||||
|
|
||||||
|
r = plpar_hcall_norets(H_GET_PERF_COUNTER_INFO,
|
||||||
|
virt_to_phys(arg), HGPCI_REQ_BUFFER_SIZE);
|
||||||
|
if (r) {
|
||||||
|
pr_devel("hcall failed, can't get supported counter_info_version: 0x%x\n", r);
|
||||||
|
arg->params.counter_info_version_out = 0x8;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Use counter_info_version_out value to assign
|
||||||
|
* required hv-gpci event list.
|
||||||
|
*/
|
||||||
|
if (arg->params.counter_info_version_out >= 0x8)
|
||||||
|
event_group.attrs = hv_gpci_event_attrs;
|
||||||
|
else
|
||||||
|
event_group.attrs = hv_gpci_event_attrs_v6;
|
||||||
|
|
||||||
|
put_cpu_var(hv_gpci_reqb);
|
||||||
|
|
||||||
r = perf_pmu_register(&h_gpci_pmu, h_gpci_pmu.name, -1);
|
r = perf_pmu_register(&h_gpci_pmu, h_gpci_pmu.name, -1);
|
||||||
if (r)
|
if (r)
|
||||||
return r;
|
return r;
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ enum {
|
|||||||
#define REQUEST_FILE "../hv-gpci-requests.h"
|
#define REQUEST_FILE "../hv-gpci-requests.h"
|
||||||
#define NAME_LOWER hv_gpci
|
#define NAME_LOWER hv_gpci
|
||||||
#define NAME_UPPER HV_GPCI
|
#define NAME_UPPER HV_GPCI
|
||||||
|
#define ENABLE_EVENTS_COUNTERINFO_V6
|
||||||
#include "req-gen/perf.h"
|
#include "req-gen/perf.h"
|
||||||
#undef REQUEST_FILE
|
#undef REQUEST_FILE
|
||||||
#undef NAME_LOWER
|
#undef NAME_LOWER
|
||||||
|
|||||||
@@ -139,6 +139,26 @@ PMU_EVENT_ATTR_STRING( \
|
|||||||
#define REQUEST_(r_name, r_value, r_idx_1, r_fields) \
|
#define REQUEST_(r_name, r_value, r_idx_1, r_fields) \
|
||||||
r_fields
|
r_fields
|
||||||
|
|
||||||
|
/* Generate event list for platforms with counter_info_version 0x6 or below */
|
||||||
|
static __maybe_unused struct attribute *hv_gpci_event_attrs_v6[] = {
|
||||||
|
#include REQUEST_FILE
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Based on getPerfCountInfo v1.018 documentation, some of the hv-gpci
|
||||||
|
* events were deprecated for platform firmware that supports
|
||||||
|
* counter_info_version 0x8 or above.
|
||||||
|
* Those deprecated events are still part of platform firmware that
|
||||||
|
* support counter_info_version 0x6 and below. As per the getPerfCountInfo
|
||||||
|
* v1.018 documentation there is no counter_info_version 0x7.
|
||||||
|
* Undefining macro ENABLE_EVENTS_COUNTERINFO_V6, to disable the addition of
|
||||||
|
* deprecated events in "hv_gpci_event_attrs" attribute group, for platforms
|
||||||
|
* that supports counter_info_version 0x8 or above.
|
||||||
|
*/
|
||||||
|
#undef ENABLE_EVENTS_COUNTERINFO_V6
|
||||||
|
|
||||||
|
/* Generate event list for platforms with counter_info_version 0x8 or above*/
|
||||||
static __maybe_unused struct attribute *hv_gpci_event_attrs[] = {
|
static __maybe_unused struct attribute *hv_gpci_event_attrs[] = {
|
||||||
#include REQUEST_FILE
|
#include REQUEST_FILE
|
||||||
NULL
|
NULL
|
||||||
|
|||||||
@@ -530,6 +530,7 @@ static int mpc52xx_lpbfifo_probe(struct platform_device *op)
|
|||||||
err_bcom_rx_irq:
|
err_bcom_rx_irq:
|
||||||
bcom_gen_bd_rx_release(lpbfifo.bcom_rx_task);
|
bcom_gen_bd_rx_release(lpbfifo.bcom_rx_task);
|
||||||
err_bcom_rx:
|
err_bcom_rx:
|
||||||
|
free_irq(lpbfifo.irq, &lpbfifo);
|
||||||
err_irq:
|
err_irq:
|
||||||
iounmap(lpbfifo.regs);
|
iounmap(lpbfifo.regs);
|
||||||
lpbfifo.regs = NULL;
|
lpbfifo.regs = NULL;
|
||||||
|
|||||||
@@ -106,7 +106,7 @@ static int __init of_fsl_spi_probe(char *type, char *compatible, u32 sysclk,
|
|||||||
|
|
||||||
goto next;
|
goto next;
|
||||||
unreg:
|
unreg:
|
||||||
platform_device_del(pdev);
|
platform_device_put(pdev);
|
||||||
err:
|
err:
|
||||||
pr_err("%pOF: registration failed\n", np);
|
pr_err("%pOF: registration failed\n", np);
|
||||||
next:
|
next:
|
||||||
|
|||||||
@@ -845,18 +845,8 @@ static int __init eeh_pseries_init(void)
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Initialize error log lock and size */
|
/* Initialize error log size */
|
||||||
spin_lock_init(&slot_errbuf_lock);
|
eeh_error_buf_size = rtas_get_error_log_max();
|
||||||
eeh_error_buf_size = rtas_token("rtas-error-log-max");
|
|
||||||
if (eeh_error_buf_size == RTAS_UNKNOWN_SERVICE) {
|
|
||||||
pr_info("%s: unknown EEH error log size\n",
|
|
||||||
__func__);
|
|
||||||
eeh_error_buf_size = 1024;
|
|
||||||
} else if (eeh_error_buf_size > RTAS_ERROR_LOG_MAX) {
|
|
||||||
pr_info("%s: EEH error log size %d exceeds the maximal %d\n",
|
|
||||||
__func__, eeh_error_buf_size, RTAS_ERROR_LOG_MAX);
|
|
||||||
eeh_error_buf_size = RTAS_ERROR_LOG_MAX;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Set EEH probe mode */
|
/* Set EEH probe mode */
|
||||||
eeh_add_flag(EEH_PROBE_MODE_DEVTREE | EEH_ENABLE_IO_FOR_LOG);
|
eeh_add_flag(EEH_PROBE_MODE_DEVTREE | EEH_ENABLE_IO_FOR_LOG);
|
||||||
|
|||||||
@@ -437,6 +437,7 @@ static int xive_spapr_populate_irq_data(u32 hw_irq, struct xive_irq_data *data)
|
|||||||
|
|
||||||
data->trig_mmio = ioremap(data->trig_page, 1u << data->esb_shift);
|
data->trig_mmio = ioremap(data->trig_page, 1u << data->esb_shift);
|
||||||
if (!data->trig_mmio) {
|
if (!data->trig_mmio) {
|
||||||
|
iounmap(data->eoi_mmio);
|
||||||
pr_err("Failed to map trigger page for irq 0x%x\n", hw_irq);
|
pr_err("Failed to map trigger page for irq 0x%x\n", hw_irq);
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1528,9 +1528,9 @@ bpt_cmds(void)
|
|||||||
cmd = inchar();
|
cmd = inchar();
|
||||||
|
|
||||||
switch (cmd) {
|
switch (cmd) {
|
||||||
|
case 'd': { /* bd - hardware data breakpoint */
|
||||||
static const char badaddr[] = "Only kernel addresses are permitted for breakpoints\n";
|
static const char badaddr[] = "Only kernel addresses are permitted for breakpoints\n";
|
||||||
int mode;
|
int mode;
|
||||||
case 'd': /* bd - hardware data breakpoint */
|
|
||||||
if (xmon_is_ro) {
|
if (xmon_is_ro) {
|
||||||
printf(xmon_ro_msg);
|
printf(xmon_ro_msg);
|
||||||
break;
|
break;
|
||||||
@@ -1563,6 +1563,7 @@ bpt_cmds(void)
|
|||||||
|
|
||||||
force_enable_xmon();
|
force_enable_xmon();
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case 'i': /* bi - hardware instr breakpoint */
|
case 'i': /* bi - hardware instr breakpoint */
|
||||||
if (xmon_is_ro) {
|
if (xmon_is_ro) {
|
||||||
|
|||||||
@@ -5,4 +5,10 @@
|
|||||||
#include <asm-generic/hugetlb.h>
|
#include <asm-generic/hugetlb.h>
|
||||||
#include <asm/page.h>
|
#include <asm/page.h>
|
||||||
|
|
||||||
|
static inline void arch_clear_hugepage_flags(struct page *page)
|
||||||
|
{
|
||||||
|
clear_bit(PG_dcache_clean, &page->flags);
|
||||||
|
}
|
||||||
|
#define arch_clear_hugepage_flags arch_clear_hugepage_flags
|
||||||
|
|
||||||
#endif /* _ASM_RISCV_HUGETLB_H */
|
#endif /* _ASM_RISCV_HUGETLB_H */
|
||||||
|
|||||||
@@ -19,6 +19,8 @@ typedef struct {
|
|||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
/* A local icache flush is needed before user execution can resume. */
|
/* A local icache flush is needed before user execution can resume. */
|
||||||
cpumask_t icache_stale_mask;
|
cpumask_t icache_stale_mask;
|
||||||
|
/* A local tlb flush is needed before user execution can resume. */
|
||||||
|
cpumask_t tlb_stale_mask;
|
||||||
#endif
|
#endif
|
||||||
} mm_context_t;
|
} mm_context_t;
|
||||||
|
|
||||||
|
|||||||
@@ -386,7 +386,7 @@ static inline void update_mmu_cache(struct vm_area_struct *vma,
|
|||||||
* Relying on flush_tlb_fix_spurious_fault would suffice, but
|
* Relying on flush_tlb_fix_spurious_fault would suffice, but
|
||||||
* the extra traps reduce performance. So, eagerly SFENCE.VMA.
|
* the extra traps reduce performance. So, eagerly SFENCE.VMA.
|
||||||
*/
|
*/
|
||||||
local_flush_tlb_page(address);
|
flush_tlb_page(vma, address);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void update_mmu_cache_pmd(struct vm_area_struct *vma,
|
static inline void update_mmu_cache_pmd(struct vm_area_struct *vma,
|
||||||
|
|||||||
@@ -22,6 +22,24 @@ static inline void local_flush_tlb_page(unsigned long addr)
|
|||||||
{
|
{
|
||||||
ALT_FLUSH_TLB_PAGE(__asm__ __volatile__ ("sfence.vma %0" : : "r" (addr) : "memory"));
|
ALT_FLUSH_TLB_PAGE(__asm__ __volatile__ ("sfence.vma %0" : : "r" (addr) : "memory"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void local_flush_tlb_all_asid(unsigned long asid)
|
||||||
|
{
|
||||||
|
__asm__ __volatile__ ("sfence.vma x0, %0"
|
||||||
|
:
|
||||||
|
: "r" (asid)
|
||||||
|
: "memory");
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void local_flush_tlb_page_asid(unsigned long addr,
|
||||||
|
unsigned long asid)
|
||||||
|
{
|
||||||
|
__asm__ __volatile__ ("sfence.vma %0, %1"
|
||||||
|
:
|
||||||
|
: "r" (addr), "r" (asid)
|
||||||
|
: "memory");
|
||||||
|
}
|
||||||
|
|
||||||
#else /* CONFIG_MMU */
|
#else /* CONFIG_MMU */
|
||||||
#define local_flush_tlb_all() do { } while (0)
|
#define local_flush_tlb_all() do { } while (0)
|
||||||
#define local_flush_tlb_page(addr) do { } while (0)
|
#define local_flush_tlb_page(addr) do { } while (0)
|
||||||
|
|||||||
@@ -216,7 +216,7 @@ do { \
|
|||||||
might_fault(); \
|
might_fault(); \
|
||||||
access_ok(__p, sizeof(*__p)) ? \
|
access_ok(__p, sizeof(*__p)) ? \
|
||||||
__get_user((x), __p) : \
|
__get_user((x), __p) : \
|
||||||
((x) = 0, -EFAULT); \
|
((x) = (__force __typeof__(x))0, -EFAULT); \
|
||||||
})
|
})
|
||||||
|
|
||||||
#define __put_user_asm(insn, x, ptr, err) \
|
#define __put_user_asm(insn, x, ptr, err) \
|
||||||
|
|||||||
@@ -31,9 +31,9 @@ __RISCV_INSN_FUNCS(fence, 0x7f, 0x0f);
|
|||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
__RISCV_INSN_FUNCS(c_j, 0xe003, 0xa001);
|
__RISCV_INSN_FUNCS(c_j, 0xe003, 0xa001);
|
||||||
__RISCV_INSN_FUNCS(c_jr, 0xf007, 0x8002);
|
__RISCV_INSN_FUNCS(c_jr, 0xf07f, 0x8002);
|
||||||
__RISCV_INSN_FUNCS(c_jal, 0xe003, 0x2001);
|
__RISCV_INSN_FUNCS(c_jal, 0xe003, 0x2001);
|
||||||
__RISCV_INSN_FUNCS(c_jalr, 0xf007, 0x9002);
|
__RISCV_INSN_FUNCS(c_jalr, 0xf07f, 0x9002);
|
||||||
__RISCV_INSN_FUNCS(c_beqz, 0xe003, 0xc001);
|
__RISCV_INSN_FUNCS(c_beqz, 0xe003, 0xc001);
|
||||||
__RISCV_INSN_FUNCS(c_bnez, 0xe003, 0xe001);
|
__RISCV_INSN_FUNCS(c_bnez, 0xe003, 0xe001);
|
||||||
__RISCV_INSN_FUNCS(c_ebreak, 0xffff, 0x9002);
|
__RISCV_INSN_FUNCS(c_ebreak, 0xffff, 0x9002);
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ void notrace walk_stackframe(struct task_struct *task, struct pt_regs *regs,
|
|||||||
} else {
|
} else {
|
||||||
fp = frame->fp;
|
fp = frame->fp;
|
||||||
pc = ftrace_graph_ret_addr(current, NULL, frame->ra,
|
pc = ftrace_graph_ret_addr(current, NULL, frame->ra,
|
||||||
(unsigned long *)(fp - 8));
|
&frame->ra);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -211,7 +211,7 @@ static DEFINE_PER_CPU(unsigned long [OVERFLOW_STACK_SIZE/sizeof(long)],
|
|||||||
* shadow stack, handled_ kernel_ stack_ overflow(in kernel/entry.S) is used
|
* shadow stack, handled_ kernel_ stack_ overflow(in kernel/entry.S) is used
|
||||||
* to get per-cpu overflow stack(get_overflow_stack).
|
* to get per-cpu overflow stack(get_overflow_stack).
|
||||||
*/
|
*/
|
||||||
long shadow_stack[SHADOW_OVERFLOW_STACK_SIZE/sizeof(long)];
|
long shadow_stack[SHADOW_OVERFLOW_STACK_SIZE/sizeof(long)] __aligned(16);
|
||||||
asmlinkage unsigned long get_overflow_stack(void)
|
asmlinkage unsigned long get_overflow_stack(void)
|
||||||
{
|
{
|
||||||
return (unsigned long)this_cpu_ptr(overflow_stack) +
|
return (unsigned long)this_cpu_ptr(overflow_stack) +
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user