Reapply "Merge tag 'android14-6.1.75_r00' into android14-6.1"
This reverts commit 6bad1052c2
, it is the
LTS merge that had to previously get reverted due to being merged too
early.
Cc: Todd Kjos <tkjos@google.com>
Change-Id: I31b7d660bd833cf022ac4870f6d01e723fda5182
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
parent
eb58741d26
commit
3ca4271578
@ -126,7 +126,7 @@ examples:
|
|||||||
- |
|
- |
|
||||||
#include <dt-bindings/interrupt-controller/arm-gic.h>
|
#include <dt-bindings/interrupt-controller/arm-gic.h>
|
||||||
|
|
||||||
gpio@e000a000 {
|
gpio@a0020000 {
|
||||||
compatible = "xlnx,xps-gpio-1.00.a";
|
compatible = "xlnx,xps-gpio-1.00.a";
|
||||||
reg = <0xa0020000 0x10000>;
|
reg = <0xa0020000 0x10000>;
|
||||||
#gpio-cells = <2>;
|
#gpio-cells = <2>;
|
||||||
|
@ -61,6 +61,9 @@ properties:
|
|||||||
- description: used for 1st data pipe from RDMA
|
- description: used for 1st data pipe from RDMA
|
||||||
- description: used for 2nd data pipe from RDMA
|
- description: used for 2nd data pipe from RDMA
|
||||||
|
|
||||||
|
'#dma-cells':
|
||||||
|
const: 1
|
||||||
|
|
||||||
required:
|
required:
|
||||||
- compatible
|
- compatible
|
||||||
- reg
|
- reg
|
||||||
@ -70,6 +73,7 @@ required:
|
|||||||
- clocks
|
- clocks
|
||||||
- iommus
|
- iommus
|
||||||
- mboxes
|
- mboxes
|
||||||
|
- '#dma-cells'
|
||||||
|
|
||||||
additionalProperties: false
|
additionalProperties: false
|
||||||
|
|
||||||
@ -80,16 +84,17 @@ examples:
|
|||||||
#include <dt-bindings/power/mt8183-power.h>
|
#include <dt-bindings/power/mt8183-power.h>
|
||||||
#include <dt-bindings/memory/mt8183-larb-port.h>
|
#include <dt-bindings/memory/mt8183-larb-port.h>
|
||||||
|
|
||||||
mdp3_rdma0: mdp3-rdma0@14001000 {
|
dma-controller@14001000 {
|
||||||
compatible = "mediatek,mt8183-mdp3-rdma";
|
compatible = "mediatek,mt8183-mdp3-rdma";
|
||||||
reg = <0x14001000 0x1000>;
|
reg = <0x14001000 0x1000>;
|
||||||
mediatek,gce-client-reg = <&gce SUBSYS_1400XXXX 0x1000 0x1000>;
|
mediatek,gce-client-reg = <&gce SUBSYS_1400XXXX 0x1000 0x1000>;
|
||||||
mediatek,gce-events = <CMDQ_EVENT_MDP_RDMA0_SOF>,
|
mediatek,gce-events = <CMDQ_EVENT_MDP_RDMA0_SOF>,
|
||||||
<CMDQ_EVENT_MDP_RDMA0_EOF>;
|
<CMDQ_EVENT_MDP_RDMA0_EOF>;
|
||||||
power-domains = <&spm MT8183_POWER_DOMAIN_DISP>;
|
power-domains = <&spm MT8183_POWER_DOMAIN_DISP>;
|
||||||
clocks = <&mmsys CLK_MM_MDP_RDMA0>,
|
clocks = <&mmsys CLK_MM_MDP_RDMA0>,
|
||||||
<&mmsys CLK_MM_MDP_RSZ1>;
|
<&mmsys CLK_MM_MDP_RSZ1>;
|
||||||
iommus = <&iommu>;
|
iommus = <&iommu>;
|
||||||
mboxes = <&gce 20 CMDQ_THR_PRIO_LOWEST>,
|
mboxes = <&gce 20 CMDQ_THR_PRIO_LOWEST>,
|
||||||
<&gce 21 CMDQ_THR_PRIO_LOWEST>;
|
<&gce 21 CMDQ_THR_PRIO_LOWEST>;
|
||||||
|
#dma-cells = <1>;
|
||||||
};
|
};
|
||||||
|
@ -50,6 +50,9 @@ properties:
|
|||||||
iommus:
|
iommus:
|
||||||
maxItems: 1
|
maxItems: 1
|
||||||
|
|
||||||
|
'#dma-cells':
|
||||||
|
const: 1
|
||||||
|
|
||||||
required:
|
required:
|
||||||
- compatible
|
- compatible
|
||||||
- reg
|
- reg
|
||||||
@ -58,6 +61,7 @@ required:
|
|||||||
- power-domains
|
- power-domains
|
||||||
- clocks
|
- clocks
|
||||||
- iommus
|
- iommus
|
||||||
|
- '#dma-cells'
|
||||||
|
|
||||||
additionalProperties: false
|
additionalProperties: false
|
||||||
|
|
||||||
@ -68,13 +72,14 @@ examples:
|
|||||||
#include <dt-bindings/power/mt8183-power.h>
|
#include <dt-bindings/power/mt8183-power.h>
|
||||||
#include <dt-bindings/memory/mt8183-larb-port.h>
|
#include <dt-bindings/memory/mt8183-larb-port.h>
|
||||||
|
|
||||||
mdp3_wrot0: mdp3-wrot0@14005000 {
|
dma-controller@14005000 {
|
||||||
compatible = "mediatek,mt8183-mdp3-wrot";
|
compatible = "mediatek,mt8183-mdp3-wrot";
|
||||||
reg = <0x14005000 0x1000>;
|
reg = <0x14005000 0x1000>;
|
||||||
mediatek,gce-client-reg = <&gce SUBSYS_1400XXXX 0x5000 0x1000>;
|
mediatek,gce-client-reg = <&gce SUBSYS_1400XXXX 0x5000 0x1000>;
|
||||||
mediatek,gce-events = <CMDQ_EVENT_MDP_WROT0_SOF>,
|
mediatek,gce-events = <CMDQ_EVENT_MDP_WROT0_SOF>,
|
||||||
<CMDQ_EVENT_MDP_WROT0_EOF>;
|
<CMDQ_EVENT_MDP_WROT0_EOF>;
|
||||||
power-domains = <&spm MT8183_POWER_DOMAIN_DISP>;
|
power-domains = <&spm MT8183_POWER_DOMAIN_DISP>;
|
||||||
clocks = <&mmsys CLK_MM_MDP_WROT0>;
|
clocks = <&mmsys CLK_MM_MDP_WROT0>;
|
||||||
iommus = <&iommu>;
|
iommus = <&iommu>;
|
||||||
|
#dma-cells = <1>;
|
||||||
};
|
};
|
||||||
|
@ -90,15 +90,16 @@ properties:
|
|||||||
description: connection point for input on the parallel interface
|
description: connection point for input on the parallel interface
|
||||||
|
|
||||||
properties:
|
properties:
|
||||||
bus-type:
|
|
||||||
enum: [5, 6]
|
|
||||||
|
|
||||||
endpoint:
|
endpoint:
|
||||||
$ref: video-interfaces.yaml#
|
$ref: video-interfaces.yaml#
|
||||||
unevaluatedProperties: false
|
unevaluatedProperties: false
|
||||||
|
|
||||||
required:
|
properties:
|
||||||
- bus-type
|
bus-type:
|
||||||
|
enum: [5, 6]
|
||||||
|
|
||||||
|
required:
|
||||||
|
- bus-type
|
||||||
|
|
||||||
anyOf:
|
anyOf:
|
||||||
- required:
|
- required:
|
||||||
|
@ -14,9 +14,11 @@ allOf:
|
|||||||
|
|
||||||
properties:
|
properties:
|
||||||
compatible:
|
compatible:
|
||||||
enum:
|
items:
|
||||||
- fsl,imx23-ocotp
|
- enum:
|
||||||
- fsl,imx28-ocotp
|
- fsl,imx23-ocotp
|
||||||
|
- fsl,imx28-ocotp
|
||||||
|
- const: fsl,ocotp
|
||||||
|
|
||||||
"#address-cells":
|
"#address-cells":
|
||||||
const: 1
|
const: 1
|
||||||
@ -40,7 +42,7 @@ additionalProperties: false
|
|||||||
examples:
|
examples:
|
||||||
- |
|
- |
|
||||||
ocotp: efuse@8002c000 {
|
ocotp: efuse@8002c000 {
|
||||||
compatible = "fsl,imx28-ocotp";
|
compatible = "fsl,imx28-ocotp", "fsl,ocotp";
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
reg = <0x8002c000 0x2000>;
|
reg = <0x8002c000 0x2000>;
|
||||||
|
@ -83,19 +83,9 @@ this to include other types of resources like doorbells.
|
|||||||
Client Drivers
|
Client Drivers
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
A client driver typically only has to conditionally change its DMA map
|
A client driver only has to use the mapping API :c:func:`dma_map_sg()`
|
||||||
routine to use the mapping function :c:func:`pci_p2pdma_map_sg()` instead
|
and :c:func:`dma_unmap_sg()` functions as usual, and the implementation
|
||||||
of the usual :c:func:`dma_map_sg()` function. Memory mapped in this
|
will do the right thing for the P2P capable memory.
|
||||||
way does not need to be unmapped.
|
|
||||||
|
|
||||||
The client may also, optionally, make use of
|
|
||||||
:c:func:`is_pci_p2pdma_page()` to determine when to use the P2P mapping
|
|
||||||
functions and when to use the regular mapping functions. In some
|
|
||||||
situations, it may be more appropriate to use a flag to indicate a
|
|
||||||
given request is P2P memory and map appropriately. It is important to
|
|
||||||
ensure that struct pages that back P2P memory stay out of code that
|
|
||||||
does not have support for them as other code may treat the pages as
|
|
||||||
regular memory which may not be appropriate.
|
|
||||||
|
|
||||||
|
|
||||||
Orchestrator Drivers
|
Orchestrator Drivers
|
||||||
|
@ -10845,6 +10845,8 @@ L: linux-kernel@vger.kernel.org
|
|||||||
S: Maintained
|
S: Maintained
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git irq/core
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git irq/core
|
||||||
F: kernel/irq/
|
F: kernel/irq/
|
||||||
|
F: include/linux/group_cpus.h
|
||||||
|
F: lib/group_cpus.c
|
||||||
|
|
||||||
IRQCHIP DRIVERS
|
IRQCHIP DRIVERS
|
||||||
M: Thomas Gleixner <tglx@linutronix.de>
|
M: Thomas Gleixner <tglx@linutronix.de>
|
||||||
|
2
Makefile
2
Makefile
@ -1,7 +1,7 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
VERSION = 6
|
VERSION = 6
|
||||||
PATCHLEVEL = 1
|
PATCHLEVEL = 1
|
||||||
SUBLEVEL = 68
|
SUBLEVEL = 75
|
||||||
EXTRAVERSION =
|
EXTRAVERSION =
|
||||||
NAME = Curry Ramen
|
NAME = Curry Ramen
|
||||||
|
|
||||||
|
@ -39134,6 +39134,10 @@ member {
|
|||||||
id: 0x230f36dc
|
id: 0x230f36dc
|
||||||
type_id: 0x0312ab60
|
type_id: 0x0312ab60
|
||||||
}
|
}
|
||||||
|
member {
|
||||||
|
id: 0x23531e28
|
||||||
|
type_id: 0x026208b2
|
||||||
|
}
|
||||||
member {
|
member {
|
||||||
id: 0x2380a48f
|
id: 0x2380a48f
|
||||||
type_id: 0x012ce22f
|
type_id: 0x012ce22f
|
||||||
@ -40048,6 +40052,11 @@ member {
|
|||||||
type_id: 0x5d86aa37
|
type_id: 0x5d86aa37
|
||||||
offset: 96
|
offset: 96
|
||||||
}
|
}
|
||||||
|
member {
|
||||||
|
id: 0x34aaae1a
|
||||||
|
type_id: 0x5d84d1ff
|
||||||
|
offset: 24
|
||||||
|
}
|
||||||
member {
|
member {
|
||||||
id: 0x34be27ed
|
id: 0x34be27ed
|
||||||
type_id: 0x5dd6efa4
|
type_id: 0x5dd6efa4
|
||||||
@ -51111,10 +51120,10 @@ member {
|
|||||||
offset: 160
|
offset: 160
|
||||||
}
|
}
|
||||||
member {
|
member {
|
||||||
id: 0xb2dd57f2
|
id: 0xb2dd5b41
|
||||||
name: "autoconf"
|
name: "autoconf"
|
||||||
type_id: 0xb3e7bac9
|
type_id: 0xb3e7bac9
|
||||||
offset: 30
|
offset: 6
|
||||||
bitsize: 1
|
bitsize: 1
|
||||||
}
|
}
|
||||||
member {
|
member {
|
||||||
@ -141062,10 +141071,10 @@ member {
|
|||||||
offset: 9920
|
offset: 9920
|
||||||
}
|
}
|
||||||
member {
|
member {
|
||||||
id: 0x7adb50ba
|
id: 0x7adb5caf
|
||||||
name: "onlink"
|
name: "onlink"
|
||||||
type_id: 0xb3e7bac9
|
type_id: 0xb3e7bac9
|
||||||
offset: 31
|
offset: 7
|
||||||
bitsize: 1
|
bitsize: 1
|
||||||
}
|
}
|
||||||
member {
|
member {
|
||||||
@ -164807,10 +164816,9 @@ member {
|
|||||||
offset: 1024
|
offset: 1024
|
||||||
}
|
}
|
||||||
member {
|
member {
|
||||||
id: 0x688b9047
|
id: 0x688b9626
|
||||||
name: "reserved"
|
name: "reserved"
|
||||||
type_id: 0xb3e7bac9
|
type_id: 0xb3e7bac9
|
||||||
offset: 24
|
|
||||||
bitsize: 6
|
bitsize: 6
|
||||||
}
|
}
|
||||||
member {
|
member {
|
||||||
@ -209482,6 +209490,16 @@ struct_union {
|
|||||||
member_id: 0x2d8a4e32
|
member_id: 0x2d8a4e32
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
struct_union {
|
||||||
|
id: 0x026208b2
|
||||||
|
kind: STRUCT
|
||||||
|
definition {
|
||||||
|
bytesize: 1
|
||||||
|
member_id: 0x688b9626
|
||||||
|
member_id: 0xb2dd5b41
|
||||||
|
member_id: 0x7adb5caf
|
||||||
|
}
|
||||||
|
}
|
||||||
struct_union {
|
struct_union {
|
||||||
id: 0x02c70092
|
id: 0x02c70092
|
||||||
kind: STRUCT
|
kind: STRUCT
|
||||||
@ -214638,6 +214656,15 @@ struct_union {
|
|||||||
member_id: 0x36752b74
|
member_id: 0x36752b74
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
struct_union {
|
||||||
|
id: 0x5d84d1ff
|
||||||
|
kind: UNION
|
||||||
|
definition {
|
||||||
|
bytesize: 1
|
||||||
|
member_id: 0x2ddb63e4
|
||||||
|
member_id: 0x23531e28
|
||||||
|
}
|
||||||
|
}
|
||||||
struct_union {
|
struct_union {
|
||||||
id: 0x5d86aa37
|
id: 0x5d86aa37
|
||||||
kind: UNION
|
kind: UNION
|
||||||
@ -249206,9 +249233,7 @@ struct_union {
|
|||||||
member_id: 0x5ce532c4
|
member_id: 0x5ce532c4
|
||||||
member_id: 0xb5de8e04
|
member_id: 0xb5de8e04
|
||||||
member_id: 0x2165da89
|
member_id: 0x2165da89
|
||||||
member_id: 0x688b9047
|
member_id: 0x34aaae1a
|
||||||
member_id: 0xb2dd57f2
|
|
||||||
member_id: 0x7adb50ba
|
|
||||||
member_id: 0xe91a1d71
|
member_id: 0xe91a1d71
|
||||||
member_id: 0xbada6e7d
|
member_id: 0xbada6e7d
|
||||||
member_id: 0x08cabd3c
|
member_id: 0x08cabd3c
|
||||||
|
@ -34,6 +34,9 @@ config ARCH_HAS_SUBPAGE_FAULTS
|
|||||||
config HOTPLUG_SMT
|
config HOTPLUG_SMT
|
||||||
bool
|
bool
|
||||||
|
|
||||||
|
config SMT_NUM_THREADS_DYNAMIC
|
||||||
|
bool
|
||||||
|
|
||||||
config GENERIC_ENTRY
|
config GENERIC_ENTRY
|
||||||
bool
|
bool
|
||||||
|
|
||||||
|
@ -61,7 +61,7 @@ struct rt_sigframe {
|
|||||||
unsigned int sigret_magic;
|
unsigned int sigret_magic;
|
||||||
};
|
};
|
||||||
|
|
||||||
static int save_arcv2_regs(struct sigcontext *mctx, struct pt_regs *regs)
|
static int save_arcv2_regs(struct sigcontext __user *mctx, struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
int err = 0;
|
int err = 0;
|
||||||
#ifndef CONFIG_ISA_ARCOMPACT
|
#ifndef CONFIG_ISA_ARCOMPACT
|
||||||
@ -74,12 +74,12 @@ static int save_arcv2_regs(struct sigcontext *mctx, struct pt_regs *regs)
|
|||||||
#else
|
#else
|
||||||
v2abi.r58 = v2abi.r59 = 0;
|
v2abi.r58 = v2abi.r59 = 0;
|
||||||
#endif
|
#endif
|
||||||
err = __copy_to_user(&mctx->v2abi, &v2abi, sizeof(v2abi));
|
err = __copy_to_user(&mctx->v2abi, (void const *)&v2abi, sizeof(v2abi));
|
||||||
#endif
|
#endif
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int restore_arcv2_regs(struct sigcontext *mctx, struct pt_regs *regs)
|
static int restore_arcv2_regs(struct sigcontext __user *mctx, struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
int err = 0;
|
int err = 0;
|
||||||
#ifndef CONFIG_ISA_ARCOMPACT
|
#ifndef CONFIG_ISA_ARCOMPACT
|
||||||
|
@ -349,6 +349,7 @@ usb: target-module@47400000 {
|
|||||||
<SYSC_IDLE_NO>,
|
<SYSC_IDLE_NO>,
|
||||||
<SYSC_IDLE_SMART>,
|
<SYSC_IDLE_SMART>,
|
||||||
<SYSC_IDLE_SMART_WKUP>;
|
<SYSC_IDLE_SMART_WKUP>;
|
||||||
|
ti,sysc-delay-us = <2>;
|
||||||
clocks = <&l3s_clkctrl AM3_L3S_USB_OTG_HS_CLKCTRL 0>;
|
clocks = <&l3s_clkctrl AM3_L3S_USB_OTG_HS_CLKCTRL 0>;
|
||||||
clock-names = "fck";
|
clock-names = "fck";
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
|
@ -144,7 +144,7 @@ ocp: ocp {
|
|||||||
|
|
||||||
l3-noc@44000000 {
|
l3-noc@44000000 {
|
||||||
compatible = "ti,dra7-l3-noc";
|
compatible = "ti,dra7-l3-noc";
|
||||||
reg = <0x44000000 0x1000>,
|
reg = <0x44000000 0x1000000>,
|
||||||
<0x45000000 0x1000>;
|
<0x45000000 0x1000>;
|
||||||
interrupts-extended = <&crossbar_mpu GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>,
|
interrupts-extended = <&crossbar_mpu GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
<&wakeupgen GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>;
|
<&wakeupgen GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
@ -750,7 +750,7 @@ pwrkey@1c {
|
|||||||
|
|
||||||
xoadc: xoadc@197 {
|
xoadc: xoadc@197 {
|
||||||
compatible = "qcom,pm8921-adc";
|
compatible = "qcom,pm8921-adc";
|
||||||
reg = <197>;
|
reg = <0x197>;
|
||||||
interrupts-extended = <&pmicintc 78 IRQ_TYPE_EDGE_RISING>;
|
interrupts-extended = <&pmicintc 78 IRQ_TYPE_EDGE_RISING>;
|
||||||
#address-cells = <2>;
|
#address-cells = <2>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
|
@ -401,7 +401,7 @@ restart@c264000 {
|
|||||||
reg = <0x0c264000 0x1000>;
|
reg = <0x0c264000 0x1000>;
|
||||||
};
|
};
|
||||||
|
|
||||||
spmi_bus: qcom,spmi@c440000 {
|
spmi_bus: spmi@c440000 {
|
||||||
compatible = "qcom,spmi-pmic-arb";
|
compatible = "qcom,spmi-pmic-arb";
|
||||||
reg = <0xc440000 0xd00>,
|
reg = <0xc440000 0xd00>,
|
||||||
<0xc600000 0x2000000>,
|
<0xc600000 0x2000000>,
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
|
|
||||||
/ {
|
/ {
|
||||||
model = "STMicroelectronics STM32MP157A-DK1 SCMI Discovery Board";
|
model = "STMicroelectronics STM32MP157A-DK1 SCMI Discovery Board";
|
||||||
compatible = "st,stm32mp157a-dk1-scmi", "st,stm32mp157a-dk1", "st,stm32mp157";
|
compatible = "st,stm32mp157a-dk1-scmi", "st,stm32mp157";
|
||||||
|
|
||||||
reserved-memory {
|
reserved-memory {
|
||||||
optee@de000000 {
|
optee@de000000 {
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
|
|
||||||
/ {
|
/ {
|
||||||
model = "STMicroelectronics STM32MP157C-DK2 SCMI Discovery Board";
|
model = "STMicroelectronics STM32MP157C-DK2 SCMI Discovery Board";
|
||||||
compatible = "st,stm32mp157c-dk2-scmi", "st,stm32mp157c-dk2", "st,stm32mp157";
|
compatible = "st,stm32mp157c-dk2-scmi", "st,stm32mp157";
|
||||||
|
|
||||||
reserved-memory {
|
reserved-memory {
|
||||||
optee@de000000 {
|
optee@de000000 {
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
|
|
||||||
/ {
|
/ {
|
||||||
model = "STMicroelectronics STM32MP157C-ED1 SCMI eval daughter";
|
model = "STMicroelectronics STM32MP157C-ED1 SCMI eval daughter";
|
||||||
compatible = "st,stm32mp157c-ed1-scmi", "st,stm32mp157c-ed1", "st,stm32mp157";
|
compatible = "st,stm32mp157c-ed1-scmi", "st,stm32mp157";
|
||||||
|
|
||||||
reserved-memory {
|
reserved-memory {
|
||||||
optee@fe000000 {
|
optee@fe000000 {
|
||||||
|
@ -11,8 +11,7 @@
|
|||||||
|
|
||||||
/ {
|
/ {
|
||||||
model = "STMicroelectronics STM32MP157C-EV1 SCMI eval daughter on eval mother";
|
model = "STMicroelectronics STM32MP157C-EV1 SCMI eval daughter on eval mother";
|
||||||
compatible = "st,stm32mp157c-ev1-scmi", "st,stm32mp157c-ev1", "st,stm32mp157c-ed1",
|
compatible = "st,stm32mp157c-ev1-scmi", "st,stm32mp157c-ed1", "st,stm32mp157";
|
||||||
"st,stm32mp157";
|
|
||||||
|
|
||||||
reserved-memory {
|
reserved-memory {
|
||||||
optee@fe000000 {
|
optee@fe000000 {
|
||||||
|
@ -4,12 +4,14 @@ menuconfig ARCH_DAVINCI
|
|||||||
bool "TI DaVinci"
|
bool "TI DaVinci"
|
||||||
depends on ARCH_MULTI_V5
|
depends on ARCH_MULTI_V5
|
||||||
depends on CPU_LITTLE_ENDIAN
|
depends on CPU_LITTLE_ENDIAN
|
||||||
|
select CPU_ARM926T
|
||||||
select DAVINCI_TIMER
|
select DAVINCI_TIMER
|
||||||
select ZONE_DMA
|
select ZONE_DMA
|
||||||
select PM_GENERIC_DOMAINS if PM
|
select PM_GENERIC_DOMAINS if PM
|
||||||
select PM_GENERIC_DOMAINS_OF if PM && OF
|
select PM_GENERIC_DOMAINS_OF if PM && OF
|
||||||
select REGMAP_MMIO
|
select REGMAP_MMIO
|
||||||
select RESET_CONTROLLER
|
select RESET_CONTROLLER
|
||||||
|
select PINCTRL
|
||||||
select PINCTRL_SINGLE
|
select PINCTRL_SINGLE
|
||||||
|
|
||||||
if ARCH_DAVINCI
|
if ARCH_DAVINCI
|
||||||
|
@ -793,11 +793,16 @@ void __init omap_soc_device_init(void)
|
|||||||
|
|
||||||
soc_dev_attr->machine = soc_name;
|
soc_dev_attr->machine = soc_name;
|
||||||
soc_dev_attr->family = omap_get_family();
|
soc_dev_attr->family = omap_get_family();
|
||||||
|
if (!soc_dev_attr->family) {
|
||||||
|
kfree(soc_dev_attr);
|
||||||
|
return;
|
||||||
|
}
|
||||||
soc_dev_attr->revision = soc_rev;
|
soc_dev_attr->revision = soc_rev;
|
||||||
soc_dev_attr->custom_attr_group = omap_soc_groups[0];
|
soc_dev_attr->custom_attr_group = omap_soc_groups[0];
|
||||||
|
|
||||||
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->family);
|
||||||
kfree(soc_dev_attr);
|
kfree(soc_dev_attr);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -804,16 +804,16 @@ static int __init sunxi_mc_smp_init(void)
|
|||||||
for (i = 0; i < ARRAY_SIZE(sunxi_mc_smp_data); i++) {
|
for (i = 0; i < ARRAY_SIZE(sunxi_mc_smp_data); i++) {
|
||||||
ret = of_property_match_string(node, "enable-method",
|
ret = of_property_match_string(node, "enable-method",
|
||||||
sunxi_mc_smp_data[i].enable_method);
|
sunxi_mc_smp_data[i].enable_method);
|
||||||
if (!ret)
|
if (ret >= 0)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
is_a83t = sunxi_mc_smp_data[i].is_a83t;
|
|
||||||
|
|
||||||
of_node_put(node);
|
of_node_put(node);
|
||||||
if (ret)
|
if (ret < 0)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
|
is_a83t = sunxi_mc_smp_data[i].is_a83t;
|
||||||
|
|
||||||
if (!sunxi_mc_smp_cpu_table_init())
|
if (!sunxi_mc_smp_cpu_table_init())
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
|
@ -171,7 +171,7 @@ ifndef KBUILD_MIXED_TREE
|
|||||||
all: $(notdir $(KBUILD_IMAGE))
|
all: $(notdir $(KBUILD_IMAGE))
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
vmlinuz.efi: Image
|
||||||
Image vmlinuz.efi: vmlinux
|
Image vmlinuz.efi: vmlinux
|
||||||
$(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
|
$(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
|
||||||
|
|
||||||
|
@ -1303,7 +1303,7 @@ gpu_3d: gpu@38000000 {
|
|||||||
assigned-clocks = <&clk IMX8MM_CLK_GPU3D_CORE>,
|
assigned-clocks = <&clk IMX8MM_CLK_GPU3D_CORE>,
|
||||||
<&clk IMX8MM_GPU_PLL_OUT>;
|
<&clk IMX8MM_GPU_PLL_OUT>;
|
||||||
assigned-clock-parents = <&clk IMX8MM_GPU_PLL_OUT>;
|
assigned-clock-parents = <&clk IMX8MM_GPU_PLL_OUT>;
|
||||||
assigned-clock-rates = <0>, <1000000000>;
|
assigned-clock-rates = <0>, <800000000>;
|
||||||
power-domains = <&pgc_gpu>;
|
power-domains = <&pgc_gpu>;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1318,7 +1318,7 @@ gpu_2d: gpu@38008000 {
|
|||||||
assigned-clocks = <&clk IMX8MM_CLK_GPU2D_CORE>,
|
assigned-clocks = <&clk IMX8MM_CLK_GPU2D_CORE>,
|
||||||
<&clk IMX8MM_GPU_PLL_OUT>;
|
<&clk IMX8MM_GPU_PLL_OUT>;
|
||||||
assigned-clock-parents = <&clk IMX8MM_GPU_PLL_OUT>;
|
assigned-clock-parents = <&clk IMX8MM_GPU_PLL_OUT>;
|
||||||
assigned-clock-rates = <0>, <1000000000>;
|
assigned-clock-rates = <0>, <800000000>;
|
||||||
power-domains = <&pgc_gpu>;
|
power-domains = <&pgc_gpu>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -25,9 +25,6 @@ pmic: pmic@0 {
|
|||||||
gpios = <&gpio28 0 0>;
|
gpios = <&gpio28 0 0>;
|
||||||
|
|
||||||
regulators {
|
regulators {
|
||||||
#address-cells = <1>;
|
|
||||||
#size-cells = <0>;
|
|
||||||
|
|
||||||
ldo3: ldo3 { /* HDMI */
|
ldo3: ldo3 { /* HDMI */
|
||||||
regulator-name = "ldo3";
|
regulator-name = "ldo3";
|
||||||
regulator-min-microvolt = <1500000>;
|
regulator-min-microvolt = <1500000>;
|
||||||
|
@ -130,7 +130,7 @@ rtc@6f {
|
|||||||
compatible = "microchip,mcp7940x";
|
compatible = "microchip,mcp7940x";
|
||||||
reg = <0x6f>;
|
reg = <0x6f>;
|
||||||
interrupt-parent = <&gpiosb>;
|
interrupt-parent = <&gpiosb>;
|
||||||
interrupts = <5 0>; /* GPIO2_5 */
|
interrupts = <5 IRQ_TYPE_EDGE_FALLING>; /* GPIO2_5 */
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1586,7 +1586,7 @@ mmsys: syscon@14000000 {
|
|||||||
mediatek,gce-client-reg = <&gce SUBSYS_1400XXXX 0 0x1000>;
|
mediatek,gce-client-reg = <&gce SUBSYS_1400XXXX 0 0x1000>;
|
||||||
};
|
};
|
||||||
|
|
||||||
mdp3-rdma0@14001000 {
|
dma-controller0@14001000 {
|
||||||
compatible = "mediatek,mt8183-mdp3-rdma";
|
compatible = "mediatek,mt8183-mdp3-rdma";
|
||||||
reg = <0 0x14001000 0 0x1000>;
|
reg = <0 0x14001000 0 0x1000>;
|
||||||
mediatek,gce-client-reg = <&gce SUBSYS_1400XXXX 0x1000 0x1000>;
|
mediatek,gce-client-reg = <&gce SUBSYS_1400XXXX 0x1000 0x1000>;
|
||||||
@ -1598,6 +1598,7 @@ mdp3-rdma0@14001000 {
|
|||||||
iommus = <&iommu M4U_PORT_MDP_RDMA0>;
|
iommus = <&iommu M4U_PORT_MDP_RDMA0>;
|
||||||
mboxes = <&gce 20 CMDQ_THR_PRIO_LOWEST 0>,
|
mboxes = <&gce 20 CMDQ_THR_PRIO_LOWEST 0>,
|
||||||
<&gce 21 CMDQ_THR_PRIO_LOWEST 0>;
|
<&gce 21 CMDQ_THR_PRIO_LOWEST 0>;
|
||||||
|
#dma-cells = <1>;
|
||||||
};
|
};
|
||||||
|
|
||||||
mdp3-rsz0@14003000 {
|
mdp3-rsz0@14003000 {
|
||||||
@ -1618,7 +1619,7 @@ mdp3-rsz1@14004000 {
|
|||||||
clocks = <&mmsys CLK_MM_MDP_RSZ1>;
|
clocks = <&mmsys CLK_MM_MDP_RSZ1>;
|
||||||
};
|
};
|
||||||
|
|
||||||
mdp3-wrot0@14005000 {
|
dma-controller@14005000 {
|
||||||
compatible = "mediatek,mt8183-mdp3-wrot";
|
compatible = "mediatek,mt8183-mdp3-wrot";
|
||||||
reg = <0 0x14005000 0 0x1000>;
|
reg = <0 0x14005000 0 0x1000>;
|
||||||
mediatek,gce-client-reg = <&gce SUBSYS_1400XXXX 0x5000 0x1000>;
|
mediatek,gce-client-reg = <&gce SUBSYS_1400XXXX 0x5000 0x1000>;
|
||||||
@ -1627,6 +1628,7 @@ mdp3-wrot0@14005000 {
|
|||||||
power-domains = <&spm MT8183_POWER_DOMAIN_DISP>;
|
power-domains = <&spm MT8183_POWER_DOMAIN_DISP>;
|
||||||
clocks = <&mmsys CLK_MM_MDP_WROT0>;
|
clocks = <&mmsys CLK_MM_MDP_WROT0>;
|
||||||
iommus = <&iommu M4U_PORT_MDP_WROT0>;
|
iommus = <&iommu M4U_PORT_MDP_WROT0>;
|
||||||
|
#dma-cells = <1>;
|
||||||
};
|
};
|
||||||
|
|
||||||
mdp3-wdma@14006000 {
|
mdp3-wdma@14006000 {
|
||||||
|
@ -146,7 +146,7 @@ reserved-memory {
|
|||||||
ranges;
|
ranges;
|
||||||
|
|
||||||
rpm_msg_ram: memory@60000 {
|
rpm_msg_ram: memory@60000 {
|
||||||
reg = <0x0 0x60000 0x0 0x6000>;
|
reg = <0x0 0x00060000 0x0 0x6000>;
|
||||||
no-map;
|
no-map;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -181,7 +181,7 @@ soc: soc {
|
|||||||
|
|
||||||
prng: qrng@e1000 {
|
prng: qrng@e1000 {
|
||||||
compatible = "qcom,prng-ee";
|
compatible = "qcom,prng-ee";
|
||||||
reg = <0x0 0xe3000 0x0 0x1000>;
|
reg = <0x0 0x000e3000 0x0 0x1000>;
|
||||||
clocks = <&gcc GCC_PRNG_AHB_CLK>;
|
clocks = <&gcc GCC_PRNG_AHB_CLK>;
|
||||||
clock-names = "core";
|
clock-names = "core";
|
||||||
};
|
};
|
||||||
@ -201,8 +201,8 @@ crypto: crypto@73a000 {
|
|||||||
compatible = "qcom,crypto-v5.1";
|
compatible = "qcom,crypto-v5.1";
|
||||||
reg = <0x0 0x0073a000 0x0 0x6000>;
|
reg = <0x0 0x0073a000 0x0 0x6000>;
|
||||||
clocks = <&gcc GCC_CRYPTO_AHB_CLK>,
|
clocks = <&gcc GCC_CRYPTO_AHB_CLK>,
|
||||||
<&gcc GCC_CRYPTO_AXI_CLK>,
|
<&gcc GCC_CRYPTO_AXI_CLK>,
|
||||||
<&gcc GCC_CRYPTO_CLK>;
|
<&gcc GCC_CRYPTO_CLK>;
|
||||||
clock-names = "iface", "bus", "core";
|
clock-names = "iface", "bus", "core";
|
||||||
dmas = <&cryptobam 2>, <&cryptobam 3>;
|
dmas = <&cryptobam 2>, <&cryptobam 3>;
|
||||||
dma-names = "rx", "tx";
|
dma-names = "rx", "tx";
|
||||||
@ -272,7 +272,7 @@ blsp1_uart3: serial@78b1000 {
|
|||||||
reg = <0x0 0x078b1000 0x0 0x200>;
|
reg = <0x0 0x078b1000 0x0 0x200>;
|
||||||
interrupts = <GIC_SPI 306 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 306 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&gcc GCC_BLSP1_UART3_APPS_CLK>,
|
clocks = <&gcc GCC_BLSP1_UART3_APPS_CLK>,
|
||||||
<&gcc GCC_BLSP1_AHB_CLK>;
|
<&gcc GCC_BLSP1_AHB_CLK>;
|
||||||
clock-names = "core", "iface";
|
clock-names = "core", "iface";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
@ -285,7 +285,7 @@ blsp1_spi1: spi@78b5000 {
|
|||||||
interrupts = <GIC_SPI 95 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 95 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
spi-max-frequency = <50000000>;
|
spi-max-frequency = <50000000>;
|
||||||
clocks = <&gcc GCC_BLSP1_QUP1_SPI_APPS_CLK>,
|
clocks = <&gcc GCC_BLSP1_QUP1_SPI_APPS_CLK>,
|
||||||
<&gcc GCC_BLSP1_AHB_CLK>;
|
<&gcc GCC_BLSP1_AHB_CLK>;
|
||||||
clock-names = "core", "iface";
|
clock-names = "core", "iface";
|
||||||
dmas = <&blsp_dma 12>, <&blsp_dma 13>;
|
dmas = <&blsp_dma 12>, <&blsp_dma 13>;
|
||||||
dma-names = "tx", "rx";
|
dma-names = "tx", "rx";
|
||||||
@ -300,7 +300,7 @@ blsp1_spi2: spi@78b6000 {
|
|||||||
interrupts = <GIC_SPI 96 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 96 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
spi-max-frequency = <50000000>;
|
spi-max-frequency = <50000000>;
|
||||||
clocks = <&gcc GCC_BLSP1_QUP2_SPI_APPS_CLK>,
|
clocks = <&gcc GCC_BLSP1_QUP2_SPI_APPS_CLK>,
|
||||||
<&gcc GCC_BLSP1_AHB_CLK>;
|
<&gcc GCC_BLSP1_AHB_CLK>;
|
||||||
clock-names = "core", "iface";
|
clock-names = "core", "iface";
|
||||||
dmas = <&blsp_dma 14>, <&blsp_dma 15>;
|
dmas = <&blsp_dma 14>, <&blsp_dma 15>;
|
||||||
dma-names = "tx", "rx";
|
dma-names = "tx", "rx";
|
||||||
@ -358,8 +358,8 @@ qpic_nand: nand@79b0000 {
|
|||||||
clock-names = "core", "aon";
|
clock-names = "core", "aon";
|
||||||
|
|
||||||
dmas = <&qpic_bam 0>,
|
dmas = <&qpic_bam 0>,
|
||||||
<&qpic_bam 1>,
|
<&qpic_bam 1>,
|
||||||
<&qpic_bam 2>;
|
<&qpic_bam 2>;
|
||||||
dma-names = "tx", "rx", "cmd";
|
dma-names = "tx", "rx", "cmd";
|
||||||
pinctrl-0 = <&qpic_pins>;
|
pinctrl-0 = <&qpic_pins>;
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
@ -372,10 +372,10 @@ intc: interrupt-controller@b000000 {
|
|||||||
#size-cells = <2>;
|
#size-cells = <2>;
|
||||||
interrupt-controller;
|
interrupt-controller;
|
||||||
#interrupt-cells = <0x3>;
|
#interrupt-cells = <0x3>;
|
||||||
reg = <0x0 0x0b000000 0x0 0x1000>, /*GICD*/
|
reg = <0x0 0x0b000000 0x0 0x1000>, /*GICD*/
|
||||||
<0x0 0x0b002000 0x0 0x1000>, /*GICC*/
|
<0x0 0x0b002000 0x0 0x1000>, /*GICC*/
|
||||||
<0x0 0x0b001000 0x0 0x1000>, /*GICH*/
|
<0x0 0x0b001000 0x0 0x1000>, /*GICH*/
|
||||||
<0x0 0x0b004000 0x0 0x1000>; /*GICV*/
|
<0x0 0x0b004000 0x0 0x1000>; /*GICV*/
|
||||||
interrupts = <GIC_PPI 9 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_PPI 9 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
ranges = <0 0 0 0xb00a000 0 0xffd>;
|
ranges = <0 0 0 0xb00a000 0 0xffd>;
|
||||||
|
|
||||||
@ -388,7 +388,7 @@ v2m@0 {
|
|||||||
|
|
||||||
pcie_phy: phy@84000 {
|
pcie_phy: phy@84000 {
|
||||||
compatible = "qcom,ipq6018-qmp-pcie-phy";
|
compatible = "qcom,ipq6018-qmp-pcie-phy";
|
||||||
reg = <0x0 0x84000 0x0 0x1bc>; /* Serdes PLL */
|
reg = <0x0 0x00084000 0x0 0x1bc>; /* Serdes PLL */
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
#address-cells = <2>;
|
#address-cells = <2>;
|
||||||
#size-cells = <2>;
|
#size-cells = <2>;
|
||||||
@ -404,9 +404,10 @@ pcie_phy: phy@84000 {
|
|||||||
"common";
|
"common";
|
||||||
|
|
||||||
pcie_phy0: phy@84200 {
|
pcie_phy0: phy@84200 {
|
||||||
reg = <0x0 0x84200 0x0 0x16c>, /* Serdes Tx */
|
reg = <0x0 0x00084200 0x0 0x16c>, /* Serdes Tx */
|
||||||
<0x0 0x84400 0x0 0x200>, /* Serdes Rx */
|
<0x0 0x00084400 0x0 0x200>, /* Serdes Rx */
|
||||||
<0x0 0x84800 0x0 0x4f4>; /* PCS: Lane0, COM, PCIE */
|
<0x0 0x00084800 0x0 0x1f0>, /* PCS: Lane0, COM, PCIE */
|
||||||
|
<0x0 0x00084c00 0x0 0xf4>; /* pcs_misc */
|
||||||
#phy-cells = <0>;
|
#phy-cells = <0>;
|
||||||
|
|
||||||
clocks = <&gcc GCC_PCIE0_PIPE_CLK>;
|
clocks = <&gcc GCC_PCIE0_PIPE_CLK>;
|
||||||
@ -628,7 +629,7 @@ mdio: mdio@90000 {
|
|||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
compatible = "qcom,ipq6018-mdio", "qcom,ipq4019-mdio";
|
compatible = "qcom,ipq6018-mdio", "qcom,ipq4019-mdio";
|
||||||
reg = <0x0 0x90000 0x0 0x64>;
|
reg = <0x0 0x00090000 0x0 0x64>;
|
||||||
clocks = <&gcc GCC_MDIO_AHB_CLK>;
|
clocks = <&gcc GCC_MDIO_AHB_CLK>;
|
||||||
clock-names = "gcc_mdio_ahb_clk";
|
clock-names = "gcc_mdio_ahb_clk";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
@ -636,7 +637,7 @@ mdio: mdio@90000 {
|
|||||||
|
|
||||||
qusb_phy_1: qusb@59000 {
|
qusb_phy_1: qusb@59000 {
|
||||||
compatible = "qcom,ipq6018-qusb2-phy";
|
compatible = "qcom,ipq6018-qusb2-phy";
|
||||||
reg = <0x0 0x059000 0x0 0x180>;
|
reg = <0x0 0x00059000 0x0 0x180>;
|
||||||
#phy-cells = <0>;
|
#phy-cells = <0>;
|
||||||
|
|
||||||
clocks = <&gcc GCC_USB1_PHY_CFG_AHB_CLK>,
|
clocks = <&gcc GCC_USB1_PHY_CFG_AHB_CLK>,
|
||||||
@ -668,23 +669,23 @@ usb2: usb@70f8800 {
|
|||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
|
||||||
dwc_1: usb@7000000 {
|
dwc_1: usb@7000000 {
|
||||||
compatible = "snps,dwc3";
|
compatible = "snps,dwc3";
|
||||||
reg = <0x0 0x7000000 0x0 0xcd00>;
|
reg = <0x0 0x07000000 0x0 0xcd00>;
|
||||||
interrupts = <GIC_SPI 99 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 99 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
phys = <&qusb_phy_1>;
|
phys = <&qusb_phy_1>;
|
||||||
phy-names = "usb2-phy";
|
phy-names = "usb2-phy";
|
||||||
tx-fifo-resize;
|
tx-fifo-resize;
|
||||||
snps,is-utmi-l1-suspend;
|
snps,is-utmi-l1-suspend;
|
||||||
snps,hird-threshold = /bits/ 8 <0x0>;
|
snps,hird-threshold = /bits/ 8 <0x0>;
|
||||||
snps,dis_u2_susphy_quirk;
|
snps,dis_u2_susphy_quirk;
|
||||||
snps,dis_u3_susphy_quirk;
|
snps,dis_u3_susphy_quirk;
|
||||||
dr_mode = "host";
|
dr_mode = "host";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
ssphy_0: ssphy@78000 {
|
ssphy_0: ssphy@78000 {
|
||||||
compatible = "qcom,ipq6018-qmp-usb3-phy";
|
compatible = "qcom,ipq6018-qmp-usb3-phy";
|
||||||
reg = <0x0 0x78000 0x0 0x1C4>;
|
reg = <0x0 0x00078000 0x0 0x1c4>;
|
||||||
#address-cells = <2>;
|
#address-cells = <2>;
|
||||||
#size-cells = <2>;
|
#size-cells = <2>;
|
||||||
ranges;
|
ranges;
|
||||||
@ -701,7 +702,7 @@ ssphy_0: ssphy@78000 {
|
|||||||
usb0_ssphy: phy@78200 {
|
usb0_ssphy: phy@78200 {
|
||||||
reg = <0x0 0x00078200 0x0 0x130>, /* Tx */
|
reg = <0x0 0x00078200 0x0 0x130>, /* Tx */
|
||||||
<0x0 0x00078400 0x0 0x200>, /* Rx */
|
<0x0 0x00078400 0x0 0x200>, /* Rx */
|
||||||
<0x0 0x00078800 0x0 0x1F8>, /* PCS */
|
<0x0 0x00078800 0x0 0x1f8>, /* PCS */
|
||||||
<0x0 0x00078600 0x0 0x044>; /* PCS misc */
|
<0x0 0x00078600 0x0 0x044>; /* PCS misc */
|
||||||
#phy-cells = <0>;
|
#phy-cells = <0>;
|
||||||
#clock-cells = <0>;
|
#clock-cells = <0>;
|
||||||
@ -713,7 +714,7 @@ usb0_ssphy: phy@78200 {
|
|||||||
|
|
||||||
qusb_phy_0: qusb@79000 {
|
qusb_phy_0: qusb@79000 {
|
||||||
compatible = "qcom,ipq6018-qusb2-phy";
|
compatible = "qcom,ipq6018-qusb2-phy";
|
||||||
reg = <0x0 0x079000 0x0 0x180>;
|
reg = <0x0 0x00079000 0x0 0x180>;
|
||||||
#phy-cells = <0>;
|
#phy-cells = <0>;
|
||||||
|
|
||||||
clocks = <&gcc GCC_USB0_PHY_CFG_AHB_CLK>,
|
clocks = <&gcc GCC_USB0_PHY_CFG_AHB_CLK>,
|
||||||
@ -726,7 +727,7 @@ qusb_phy_0: qusb@79000 {
|
|||||||
|
|
||||||
usb3: usb@8af8800 {
|
usb3: usb@8af8800 {
|
||||||
compatible = "qcom,ipq6018-dwc3", "qcom,dwc3";
|
compatible = "qcom,ipq6018-dwc3", "qcom,dwc3";
|
||||||
reg = <0x0 0x8AF8800 0x0 0x400>;
|
reg = <0x0 0x8af8800 0x0 0x400>;
|
||||||
#address-cells = <2>;
|
#address-cells = <2>;
|
||||||
#size-cells = <2>;
|
#size-cells = <2>;
|
||||||
ranges;
|
ranges;
|
||||||
@ -745,14 +746,14 @@ usb3: usb@8af8800 {
|
|||||||
<&gcc GCC_USB0_MOCK_UTMI_CLK>;
|
<&gcc GCC_USB0_MOCK_UTMI_CLK>;
|
||||||
assigned-clock-rates = <133330000>,
|
assigned-clock-rates = <133330000>,
|
||||||
<133330000>,
|
<133330000>,
|
||||||
<20000000>;
|
<24000000>;
|
||||||
|
|
||||||
resets = <&gcc GCC_USB0_BCR>;
|
resets = <&gcc GCC_USB0_BCR>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
|
||||||
dwc_0: usb@8a00000 {
|
dwc_0: usb@8a00000 {
|
||||||
compatible = "snps,dwc3";
|
compatible = "snps,dwc3";
|
||||||
reg = <0x0 0x8A00000 0x0 0xcd00>;
|
reg = <0x0 0x8a00000 0x0 0xcd00>;
|
||||||
interrupts = <GIC_SPI 140 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 140 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
phys = <&qusb_phy_0>, <&usb0_ssphy>;
|
phys = <&qusb_phy_0>, <&usb0_ssphy>;
|
||||||
phy-names = "usb2-phy", "usb3-phy";
|
phy-names = "usb2-phy", "usb3-phy";
|
||||||
|
@ -63,8 +63,8 @@ led-user4 {
|
|||||||
function = LED_FUNCTION_INDICATOR;
|
function = LED_FUNCTION_INDICATOR;
|
||||||
color = <LED_COLOR_ID_GREEN>;
|
color = <LED_COLOR_ID_GREEN>;
|
||||||
gpios = <&pm8150_gpios 10 GPIO_ACTIVE_HIGH>;
|
gpios = <&pm8150_gpios 10 GPIO_ACTIVE_HIGH>;
|
||||||
linux,default-trigger = "panic-indicator";
|
|
||||||
default-state = "off";
|
default-state = "off";
|
||||||
|
panic-indicator;
|
||||||
};
|
};
|
||||||
|
|
||||||
led-wlan {
|
led-wlan {
|
||||||
|
@ -3378,7 +3378,7 @@ watchdog@17c10000 {
|
|||||||
compatible = "qcom,apss-wdt-sc7180", "qcom,kpss-wdt";
|
compatible = "qcom,apss-wdt-sc7180", "qcom,kpss-wdt";
|
||||||
reg = <0 0x17c10000 0 0x1000>;
|
reg = <0 0x17c10000 0 0x1000>;
|
||||||
clocks = <&sleep_clk>;
|
clocks = <&sleep_clk>;
|
||||||
interrupts = <GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 0 IRQ_TYPE_EDGE_RISING>;
|
||||||
};
|
};
|
||||||
|
|
||||||
timer@17c20000{
|
timer@17c20000{
|
||||||
|
@ -56,6 +56,26 @@ mba_mem: memory@9c700000 {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
&lpass_aon {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&lpass_core {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&lpass_hm {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&lpasscc {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&pdc_reset {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
/* The PMIC PON code isn't compatible w/ how Chrome EC/BIOS handle things. */
|
/* The PMIC PON code isn't compatible w/ how Chrome EC/BIOS handle things. */
|
||||||
&pmk8350_pon {
|
&pmk8350_pon {
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
@ -93,6 +113,10 @@ &rmtfs_mem {
|
|||||||
reg = <0x0 0x9c900000 0x0 0x800000>;
|
reg = <0x0 0x9c900000 0x0 0x800000>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
&watchdog {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
&wifi {
|
&wifi {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
|
|
||||||
|
@ -888,6 +888,7 @@ sdhc_1: mmc@7c4000 {
|
|||||||
|
|
||||||
bus-width = <8>;
|
bus-width = <8>;
|
||||||
supports-cqe;
|
supports-cqe;
|
||||||
|
dma-coherent;
|
||||||
|
|
||||||
qcom,dll-config = <0x0007642c>;
|
qcom,dll-config = <0x0007642c>;
|
||||||
qcom,ddr-config = <0x80040868>;
|
qcom,ddr-config = <0x80040868>;
|
||||||
@ -2187,6 +2188,7 @@ lpasscc: lpasscc@3000000 {
|
|||||||
clocks = <&gcc GCC_CFG_NOC_LPASS_CLK>;
|
clocks = <&gcc GCC_CFG_NOC_LPASS_CLK>;
|
||||||
clock-names = "iface";
|
clock-names = "iface";
|
||||||
#clock-cells = <1>;
|
#clock-cells = <1>;
|
||||||
|
status = "reserved"; /* Owned by ADSP firmware */
|
||||||
};
|
};
|
||||||
|
|
||||||
lpass_rx_macro: codec@3200000 {
|
lpass_rx_macro: codec@3200000 {
|
||||||
@ -2339,6 +2341,7 @@ lpass_aon: clock-controller@3380000 {
|
|||||||
clock-names = "bi_tcxo", "bi_tcxo_ao", "iface";
|
clock-names = "bi_tcxo", "bi_tcxo_ao", "iface";
|
||||||
#clock-cells = <1>;
|
#clock-cells = <1>;
|
||||||
#power-domain-cells = <1>;
|
#power-domain-cells = <1>;
|
||||||
|
status = "reserved"; /* Owned by ADSP firmware */
|
||||||
};
|
};
|
||||||
|
|
||||||
lpass_core: clock-controller@3900000 {
|
lpass_core: clock-controller@3900000 {
|
||||||
@ -2349,6 +2352,7 @@ lpass_core: clock-controller@3900000 {
|
|||||||
power-domains = <&lpass_hm LPASS_CORE_CC_LPASS_CORE_HM_GDSC>;
|
power-domains = <&lpass_hm LPASS_CORE_CC_LPASS_CORE_HM_GDSC>;
|
||||||
#clock-cells = <1>;
|
#clock-cells = <1>;
|
||||||
#power-domain-cells = <1>;
|
#power-domain-cells = <1>;
|
||||||
|
status = "reserved"; /* Owned by ADSP firmware */
|
||||||
};
|
};
|
||||||
|
|
||||||
lpass_cpu: audio@3987000 {
|
lpass_cpu: audio@3987000 {
|
||||||
@ -2419,6 +2423,7 @@ lpass_hm: clock-controller@3c00000 {
|
|||||||
clock-names = "bi_tcxo";
|
clock-names = "bi_tcxo";
|
||||||
#clock-cells = <1>;
|
#clock-cells = <1>;
|
||||||
#power-domain-cells = <1>;
|
#power-domain-cells = <1>;
|
||||||
|
status = "reserved"; /* Owned by ADSP firmware */
|
||||||
};
|
};
|
||||||
|
|
||||||
lpass_ag_noc: interconnect@3c40000 {
|
lpass_ag_noc: interconnect@3c40000 {
|
||||||
@ -2529,7 +2534,8 @@ gpu: gpu@3d00000 {
|
|||||||
"cx_mem",
|
"cx_mem",
|
||||||
"cx_dbgc";
|
"cx_dbgc";
|
||||||
interrupts = <GIC_SPI 300 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 300 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
iommus = <&adreno_smmu 0 0x401>;
|
iommus = <&adreno_smmu 0 0x400>,
|
||||||
|
<&adreno_smmu 1 0x400>;
|
||||||
operating-points-v2 = <&gpu_opp_table>;
|
operating-points-v2 = <&gpu_opp_table>;
|
||||||
qcom,gmu = <&gmu>;
|
qcom,gmu = <&gmu>;
|
||||||
interconnects = <&gem_noc MASTER_GFX3D 0 &mc_virt SLAVE_EBI1 0>;
|
interconnects = <&gem_noc MASTER_GFX3D 0 &mc_virt SLAVE_EBI1 0>;
|
||||||
@ -2696,6 +2702,7 @@ adreno_smmu: iommu@3da0000 {
|
|||||||
"gpu_cc_hub_aon_clk";
|
"gpu_cc_hub_aon_clk";
|
||||||
|
|
||||||
power-domains = <&gpucc GPU_CC_CX_GDSC>;
|
power-domains = <&gpucc GPU_CC_CX_GDSC>;
|
||||||
|
dma-coherent;
|
||||||
};
|
};
|
||||||
|
|
||||||
remoteproc_mpss: remoteproc@4080000 {
|
remoteproc_mpss: remoteproc@4080000 {
|
||||||
@ -3265,6 +3272,7 @@ sdhc_2: mmc@8804000 {
|
|||||||
operating-points-v2 = <&sdhc2_opp_table>;
|
operating-points-v2 = <&sdhc2_opp_table>;
|
||||||
|
|
||||||
bus-width = <4>;
|
bus-width = <4>;
|
||||||
|
dma-coherent;
|
||||||
|
|
||||||
qcom,dll-config = <0x0007642c>;
|
qcom,dll-config = <0x0007642c>;
|
||||||
|
|
||||||
@ -3386,8 +3394,8 @@ usb_2: usb@8cf8800 {
|
|||||||
assigned-clock-rates = <19200000>, <200000000>;
|
assigned-clock-rates = <19200000>, <200000000>;
|
||||||
|
|
||||||
interrupts-extended = <&intc GIC_SPI 240 IRQ_TYPE_LEVEL_HIGH>,
|
interrupts-extended = <&intc GIC_SPI 240 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
<&pdc 12 IRQ_TYPE_EDGE_RISING>,
|
<&pdc 12 IRQ_TYPE_EDGE_BOTH>,
|
||||||
<&pdc 13 IRQ_TYPE_EDGE_RISING>;
|
<&pdc 13 IRQ_TYPE_EDGE_BOTH>;
|
||||||
interrupt-names = "hs_phy_irq",
|
interrupt-names = "hs_phy_irq",
|
||||||
"dp_hs_phy_irq",
|
"dp_hs_phy_irq",
|
||||||
"dm_hs_phy_irq";
|
"dm_hs_phy_irq";
|
||||||
@ -4195,6 +4203,7 @@ pdc_reset: reset-controller@b5e0000 {
|
|||||||
compatible = "qcom,sc7280-pdc-global";
|
compatible = "qcom,sc7280-pdc-global";
|
||||||
reg = <0 0x0b5e0000 0 0x20000>;
|
reg = <0 0x0b5e0000 0 0x20000>;
|
||||||
#reset-cells = <1>;
|
#reset-cells = <1>;
|
||||||
|
status = "reserved"; /* Owned by firmware */
|
||||||
};
|
};
|
||||||
|
|
||||||
tsens0: thermal-sensor@c263000 {
|
tsens0: thermal-sensor@c263000 {
|
||||||
@ -5186,11 +5195,12 @@ gic-its@17a40000 {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
watchdog@17c10000 {
|
watchdog: watchdog@17c10000 {
|
||||||
compatible = "qcom,apss-wdt-sc7280", "qcom,kpss-wdt";
|
compatible = "qcom,apss-wdt-sc7280", "qcom,kpss-wdt";
|
||||||
reg = <0 0x17c10000 0 0x1000>;
|
reg = <0 0x17c10000 0 0x1000>;
|
||||||
clocks = <&sleep_clk>;
|
clocks = <&sleep_clk>;
|
||||||
interrupts = <GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 0 IRQ_TYPE_EDGE_RISING>;
|
||||||
|
status = "reserved"; /* Owned by Gunyah hyp */
|
||||||
};
|
};
|
||||||
|
|
||||||
timer@17c20000 {
|
timer@17c20000 {
|
||||||
|
@ -1653,7 +1653,7 @@ watchdog@17c10000 {
|
|||||||
compatible = "qcom,apss-wdt-sc8280xp", "qcom,kpss-wdt";
|
compatible = "qcom,apss-wdt-sc8280xp", "qcom,kpss-wdt";
|
||||||
reg = <0 0x17c10000 0 0x1000>;
|
reg = <0 0x17c10000 0 0x1000>;
|
||||||
clocks = <&sleep_clk>;
|
clocks = <&sleep_clk>;
|
||||||
interrupts = <GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 0 IRQ_TYPE_EDGE_RISING>;
|
||||||
};
|
};
|
||||||
|
|
||||||
timer@17c20000 {
|
timer@17c20000 {
|
||||||
|
@ -150,15 +150,15 @@ &cpufreq_hw {
|
|||||||
};
|
};
|
||||||
|
|
||||||
&psci {
|
&psci {
|
||||||
/delete-node/ cpu0;
|
/delete-node/ power-domain-cpu0;
|
||||||
/delete-node/ cpu1;
|
/delete-node/ power-domain-cpu1;
|
||||||
/delete-node/ cpu2;
|
/delete-node/ power-domain-cpu2;
|
||||||
/delete-node/ cpu3;
|
/delete-node/ power-domain-cpu3;
|
||||||
/delete-node/ cpu4;
|
/delete-node/ power-domain-cpu4;
|
||||||
/delete-node/ cpu5;
|
/delete-node/ power-domain-cpu5;
|
||||||
/delete-node/ cpu6;
|
/delete-node/ power-domain-cpu6;
|
||||||
/delete-node/ cpu7;
|
/delete-node/ power-domain-cpu7;
|
||||||
/delete-node/ cpu-cluster0;
|
/delete-node/ power-domain-cluster;
|
||||||
};
|
};
|
||||||
|
|
||||||
&cpus {
|
&cpus {
|
||||||
@ -351,7 +351,9 @@ flash@0 {
|
|||||||
|
|
||||||
|
|
||||||
&apps_rsc {
|
&apps_rsc {
|
||||||
pm8998-rpmh-regulators {
|
/delete-property/ power-domains;
|
||||||
|
|
||||||
|
regulators-0 {
|
||||||
compatible = "qcom,pm8998-rpmh-regulators";
|
compatible = "qcom,pm8998-rpmh-regulators";
|
||||||
qcom,pmic-id = "a";
|
qcom,pmic-id = "a";
|
||||||
|
|
||||||
@ -633,7 +635,7 @@ src_pp1800_lvs2: lvs2 {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
pm8005-rpmh-regulators {
|
regulators-1 {
|
||||||
compatible = "qcom,pm8005-rpmh-regulators";
|
compatible = "qcom,pm8005-rpmh-regulators";
|
||||||
qcom,pmic-id = "c";
|
qcom,pmic-id = "c";
|
||||||
|
|
||||||
|
@ -66,8 +66,8 @@ led-0 {
|
|||||||
function = LED_FUNCTION_INDICATOR;
|
function = LED_FUNCTION_INDICATOR;
|
||||||
color = <LED_COLOR_ID_GREEN>;
|
color = <LED_COLOR_ID_GREEN>;
|
||||||
gpios = <&pm8998_gpio 13 GPIO_ACTIVE_HIGH>;
|
gpios = <&pm8998_gpio 13 GPIO_ACTIVE_HIGH>;
|
||||||
linux,default-trigger = "panic-indicator";
|
|
||||||
default-state = "off";
|
default-state = "off";
|
||||||
|
panic-indicator;
|
||||||
};
|
};
|
||||||
|
|
||||||
led-1 {
|
led-1 {
|
||||||
@ -271,7 +271,7 @@ &adsp_pas {
|
|||||||
};
|
};
|
||||||
|
|
||||||
&apps_rsc {
|
&apps_rsc {
|
||||||
pm8998-rpmh-regulators {
|
regulators-0 {
|
||||||
compatible = "qcom,pm8998-rpmh-regulators";
|
compatible = "qcom,pm8998-rpmh-regulators";
|
||||||
qcom,pmic-id = "a";
|
qcom,pmic-id = "a";
|
||||||
vdd-s1-supply = <&vph_pwr>;
|
vdd-s1-supply = <&vph_pwr>;
|
||||||
@ -396,7 +396,7 @@ vreg_lvs2a_1p8: lvs2 {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
pmi8998-rpmh-regulators {
|
regulators-1 {
|
||||||
compatible = "qcom,pmi8998-rpmh-regulators";
|
compatible = "qcom,pmi8998-rpmh-regulators";
|
||||||
qcom,pmic-id = "b";
|
qcom,pmic-id = "b";
|
||||||
|
|
||||||
|
@ -166,7 +166,7 @@ &adsp_pas {
|
|||||||
};
|
};
|
||||||
|
|
||||||
&apps_rsc {
|
&apps_rsc {
|
||||||
pm8998-rpmh-regulators {
|
regulators-0 {
|
||||||
compatible = "qcom,pm8998-rpmh-regulators";
|
compatible = "qcom,pm8998-rpmh-regulators";
|
||||||
qcom,pmic-id = "a";
|
qcom,pmic-id = "a";
|
||||||
|
|
||||||
@ -419,7 +419,7 @@ vreg_lvs2a_1p8: lvs2 {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
pmi8998-rpmh-regulators {
|
regulators-1 {
|
||||||
compatible = "qcom,pmi8998-rpmh-regulators";
|
compatible = "qcom,pmi8998-rpmh-regulators";
|
||||||
qcom,pmic-id = "b";
|
qcom,pmic-id = "b";
|
||||||
|
|
||||||
@ -433,7 +433,7 @@ vreg_bob: bob {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
pm8005-rpmh-regulators {
|
regulators-2 {
|
||||||
compatible = "qcom,pm8005-rpmh-regulators";
|
compatible = "qcom,pm8005-rpmh-regulators";
|
||||||
qcom,pmic-id = "c";
|
qcom,pmic-id = "c";
|
||||||
|
|
||||||
|
@ -117,7 +117,7 @@ &adsp_pas {
|
|||||||
};
|
};
|
||||||
|
|
||||||
&apps_rsc {
|
&apps_rsc {
|
||||||
pm8998-rpmh-regulators {
|
regulators-0 {
|
||||||
compatible = "qcom,pm8998-rpmh-regulators";
|
compatible = "qcom,pm8998-rpmh-regulators";
|
||||||
qcom,pmic-id = "a";
|
qcom,pmic-id = "a";
|
||||||
|
|
||||||
@ -382,7 +382,7 @@ vreg_lvs2a_1p8: lvs2 {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
pmi8998-rpmh-regulators {
|
regulators-1 {
|
||||||
compatible = "qcom,pmi8998-rpmh-regulators";
|
compatible = "qcom,pmi8998-rpmh-regulators";
|
||||||
qcom,pmic-id = "b";
|
qcom,pmic-id = "b";
|
||||||
|
|
||||||
@ -396,7 +396,7 @@ vreg_bob: bob {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
pm8005-rpmh-regulators {
|
regulators-2 {
|
||||||
compatible = "qcom,pm8005-rpmh-regulators";
|
compatible = "qcom,pm8005-rpmh-regulators";
|
||||||
qcom,pmic-id = "c";
|
qcom,pmic-id = "c";
|
||||||
|
|
||||||
|
@ -144,7 +144,7 @@ &adsp_pas {
|
|||||||
};
|
};
|
||||||
|
|
||||||
&apps_rsc {
|
&apps_rsc {
|
||||||
pm8998-rpmh-regulators {
|
regulators-0 {
|
||||||
compatible = "qcom,pm8998-rpmh-regulators";
|
compatible = "qcom,pm8998-rpmh-regulators";
|
||||||
qcom,pmic-id = "a";
|
qcom,pmic-id = "a";
|
||||||
|
|
||||||
@ -280,7 +280,7 @@ vreg_l28a_3p0: ldo28 {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
pmi8998-rpmh-regulators {
|
regulators-1 {
|
||||||
compatible = "qcom,pmi8998-rpmh-regulators";
|
compatible = "qcom,pmi8998-rpmh-regulators";
|
||||||
qcom,pmic-id = "b";
|
qcom,pmic-id = "b";
|
||||||
|
|
||||||
@ -294,7 +294,7 @@ vreg_bob: bob {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
pm8005-rpmh-regulators {
|
regulators-2 {
|
||||||
compatible = "qcom,pm8005-rpmh-regulators";
|
compatible = "qcom,pm8005-rpmh-regulators";
|
||||||
qcom,pmic-id = "c";
|
qcom,pmic-id = "c";
|
||||||
|
|
||||||
|
@ -110,7 +110,7 @@ &adsp_pas {
|
|||||||
};
|
};
|
||||||
|
|
||||||
&apps_rsc {
|
&apps_rsc {
|
||||||
pm8998-rpmh-regulators {
|
regulators-0 {
|
||||||
compatible = "qcom,pm8998-rpmh-regulators";
|
compatible = "qcom,pm8998-rpmh-regulators";
|
||||||
qcom,pmic-id = "a";
|
qcom,pmic-id = "a";
|
||||||
|
|
||||||
@ -375,7 +375,7 @@ vreg_lvs2a_1p8: lvs2 {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
pmi8998-rpmh-regulators {
|
regulators-1 {
|
||||||
compatible = "qcom,pmi8998-rpmh-regulators";
|
compatible = "qcom,pmi8998-rpmh-regulators";
|
||||||
qcom,pmic-id = "b";
|
qcom,pmic-id = "b";
|
||||||
|
|
||||||
@ -389,7 +389,7 @@ vreg_bob: bob {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
pm8005-rpmh-regulators {
|
regulators-2 {
|
||||||
compatible = "qcom,pm8005-rpmh-regulators";
|
compatible = "qcom,pm8005-rpmh-regulators";
|
||||||
qcom,pmic-id = "c";
|
qcom,pmic-id = "c";
|
||||||
|
|
||||||
|
@ -78,7 +78,7 @@ ramoops@ffc00000 {
|
|||||||
};
|
};
|
||||||
|
|
||||||
&apps_rsc {
|
&apps_rsc {
|
||||||
pm8998-rpmh-regulators {
|
regulators-0 {
|
||||||
compatible = "qcom,pm8998-rpmh-regulators";
|
compatible = "qcom,pm8998-rpmh-regulators";
|
||||||
qcom,pmic-id = "a";
|
qcom,pmic-id = "a";
|
||||||
|
|
||||||
@ -308,7 +308,7 @@ vreg_lvs2a_1p8: lvs2 {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
pmi8998-rpmh-regulators {
|
regulators-1 {
|
||||||
compatible = "qcom,pmi8998-rpmh-regulators";
|
compatible = "qcom,pmi8998-rpmh-regulators";
|
||||||
qcom,pmic-id = "b";
|
qcom,pmic-id = "b";
|
||||||
|
|
||||||
@ -319,7 +319,7 @@ src_vreg_bob: bob {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
pm8005-rpmh-regulators {
|
regulators-2 {
|
||||||
compatible = "qcom,pm8005-rpmh-regulators";
|
compatible = "qcom,pm8005-rpmh-regulators";
|
||||||
qcom,pmic-id = "c";
|
qcom,pmic-id = "c";
|
||||||
|
|
||||||
|
@ -125,7 +125,7 @@ &adsp_pas {
|
|||||||
};
|
};
|
||||||
|
|
||||||
&apps_rsc {
|
&apps_rsc {
|
||||||
pm8998-rpmh-regulators {
|
regulators-0 {
|
||||||
compatible = "qcom,pm8998-rpmh-regulators";
|
compatible = "qcom,pm8998-rpmh-regulators";
|
||||||
qcom,pmic-id = "a";
|
qcom,pmic-id = "a";
|
||||||
|
|
||||||
|
@ -143,7 +143,7 @@ vreg_s4a_1p8: vreg-s4a-1p8 {
|
|||||||
};
|
};
|
||||||
|
|
||||||
&apps_rsc {
|
&apps_rsc {
|
||||||
pm8998-rpmh-regulators {
|
regulators-0 {
|
||||||
compatible = "qcom,pm8998-rpmh-regulators";
|
compatible = "qcom,pm8998-rpmh-regulators";
|
||||||
qcom,pmic-id = "a";
|
qcom,pmic-id = "a";
|
||||||
|
|
||||||
@ -343,7 +343,7 @@ vreg_lvs2a_1p8: lvs2 {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
pmi8998-rpmh-regulators {
|
regulators-1 {
|
||||||
compatible = "qcom,pmi8998-rpmh-regulators";
|
compatible = "qcom,pmi8998-rpmh-regulators";
|
||||||
qcom,pmic-id = "b";
|
qcom,pmic-id = "b";
|
||||||
|
|
||||||
@ -355,7 +355,7 @@ vreg_bob: bob {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
pm8005-rpmh-regulators {
|
regulators-2 {
|
||||||
compatible = "qcom,pm8005-rpmh-regulators";
|
compatible = "qcom,pm8005-rpmh-regulators";
|
||||||
qcom,pmic-id = "c";
|
qcom,pmic-id = "c";
|
||||||
|
|
||||||
|
@ -5019,7 +5019,7 @@ watchdog@17980000 {
|
|||||||
compatible = "qcom,apss-wdt-sdm845", "qcom,kpss-wdt";
|
compatible = "qcom,apss-wdt-sdm845", "qcom,kpss-wdt";
|
||||||
reg = <0 0x17980000 0 0x1000>;
|
reg = <0 0x17980000 0 0x1000>;
|
||||||
clocks = <&sleep_clk>;
|
clocks = <&sleep_clk>;
|
||||||
interrupts = <GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 0 IRQ_TYPE_EDGE_RISING>;
|
||||||
};
|
};
|
||||||
|
|
||||||
apss_shared: mailbox@17990000 {
|
apss_shared: mailbox@17990000 {
|
||||||
|
@ -99,7 +99,7 @@ &adsp_pas {
|
|||||||
};
|
};
|
||||||
|
|
||||||
&apps_rsc {
|
&apps_rsc {
|
||||||
pm8998-rpmh-regulators {
|
regulators-0 {
|
||||||
compatible = "qcom,pm8998-rpmh-regulators";
|
compatible = "qcom,pm8998-rpmh-regulators";
|
||||||
qcom,pmic-id = "a";
|
qcom,pmic-id = "a";
|
||||||
|
|
||||||
|
@ -129,7 +129,7 @@ &adsp_pas {
|
|||||||
};
|
};
|
||||||
|
|
||||||
&apps_rsc {
|
&apps_rsc {
|
||||||
pm8998-rpmh-regulators {
|
regulators-0 {
|
||||||
compatible = "qcom,pm8998-rpmh-regulators";
|
compatible = "qcom,pm8998-rpmh-regulators";
|
||||||
qcom,pmic-id = "a";
|
qcom,pmic-id = "a";
|
||||||
|
|
||||||
|
@ -1462,7 +1462,7 @@ watchdog@17c10000 {
|
|||||||
compatible = "qcom,apss-wdt-sm6350", "qcom,kpss-wdt";
|
compatible = "qcom,apss-wdt-sm6350", "qcom,kpss-wdt";
|
||||||
reg = <0 0x17c10000 0 0x1000>;
|
reg = <0 0x17c10000 0 0x1000>;
|
||||||
clocks = <&sleep_clk>;
|
clocks = <&sleep_clk>;
|
||||||
interrupts = <GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 0 IRQ_TYPE_EDGE_RISING>;
|
||||||
};
|
};
|
||||||
|
|
||||||
timer@17c20000 {
|
timer@17c20000 {
|
||||||
|
@ -126,8 +126,6 @@ vdda_qrefs_0p875_5:
|
|||||||
vdda_sp_sensor:
|
vdda_sp_sensor:
|
||||||
vdda_ufs_2ln_core_1:
|
vdda_ufs_2ln_core_1:
|
||||||
vdda_ufs_2ln_core_2:
|
vdda_ufs_2ln_core_2:
|
||||||
vdda_usb_ss_dp_core_1:
|
|
||||||
vdda_usb_ss_dp_core_2:
|
|
||||||
vdda_qlink_lv:
|
vdda_qlink_lv:
|
||||||
vdda_qlink_lv_ck:
|
vdda_qlink_lv_ck:
|
||||||
vreg_l5a_0p875: ldo5 {
|
vreg_l5a_0p875: ldo5 {
|
||||||
@ -209,6 +207,12 @@ vreg_l17a_3p0: ldo17 {
|
|||||||
regulator-max-microvolt = <3008000>;
|
regulator-max-microvolt = <3008000>;
|
||||||
regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
|
regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
vreg_l18a_0p8: ldo18 {
|
||||||
|
regulator-min-microvolt = <880000>;
|
||||||
|
regulator-max-microvolt = <880000>;
|
||||||
|
regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
pm8150l-rpmh-regulators {
|
pm8150l-rpmh-regulators {
|
||||||
@ -439,13 +443,13 @@ &usb_2_hsphy {
|
|||||||
&usb_1_qmpphy {
|
&usb_1_qmpphy {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
vdda-phy-supply = <&vreg_l3c_1p2>;
|
vdda-phy-supply = <&vreg_l3c_1p2>;
|
||||||
vdda-pll-supply = <&vdda_usb_ss_dp_core_1>;
|
vdda-pll-supply = <&vreg_l18a_0p8>;
|
||||||
};
|
};
|
||||||
|
|
||||||
&usb_2_qmpphy {
|
&usb_2_qmpphy {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
vdda-phy-supply = <&vreg_l3c_1p2>;
|
vdda-phy-supply = <&vreg_l3c_1p2>;
|
||||||
vdda-pll-supply = <&vdda_usb_ss_dp_core_1>;
|
vdda-pll-supply = <&vreg_l5a_0p875>;
|
||||||
};
|
};
|
||||||
|
|
||||||
&usb_1 {
|
&usb_1 {
|
||||||
|
@ -3940,7 +3940,7 @@ watchdog@17c10000 {
|
|||||||
compatible = "qcom,apss-wdt-sm8150", "qcom,kpss-wdt";
|
compatible = "qcom,apss-wdt-sm8150", "qcom,kpss-wdt";
|
||||||
reg = <0 0x17c10000 0 0x1000>;
|
reg = <0 0x17c10000 0 0x1000>;
|
||||||
clocks = <&sleep_clk>;
|
clocks = <&sleep_clk>;
|
||||||
interrupts = <GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 0 IRQ_TYPE_EDGE_RISING>;
|
||||||
};
|
};
|
||||||
|
|
||||||
timer@17c20000 {
|
timer@17c20000 {
|
||||||
|
@ -4879,7 +4879,7 @@ watchdog@17c10000 {
|
|||||||
compatible = "qcom,apss-wdt-sm8250", "qcom,kpss-wdt";
|
compatible = "qcom,apss-wdt-sm8250", "qcom,kpss-wdt";
|
||||||
reg = <0 0x17c10000 0 0x1000>;
|
reg = <0 0x17c10000 0 0x1000>;
|
||||||
clocks = <&sleep_clk>;
|
clocks = <&sleep_clk>;
|
||||||
interrupts = <GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 0 IRQ_TYPE_EDGE_RISING>;
|
||||||
};
|
};
|
||||||
|
|
||||||
timer@17c20000 {
|
timer@17c20000 {
|
||||||
|
@ -903,9 +903,9 @@ spi19: spi@894000 {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
gpi_dma0: dma-controller@9800000 {
|
gpi_dma0: dma-controller@900000 {
|
||||||
compatible = "qcom,sm8350-gpi-dma", "qcom,sm6350-gpi-dma";
|
compatible = "qcom,sm8350-gpi-dma", "qcom,sm6350-gpi-dma";
|
||||||
reg = <0 0x09800000 0 0x60000>;
|
reg = <0 0x00900000 0 0x60000>;
|
||||||
interrupts = <GIC_SPI 244 IRQ_TYPE_LEVEL_HIGH>,
|
interrupts = <GIC_SPI 244 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
<GIC_SPI 245 IRQ_TYPE_LEVEL_HIGH>,
|
<GIC_SPI 245 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
<GIC_SPI 246 IRQ_TYPE_LEVEL_HIGH>,
|
<GIC_SPI 246 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
@ -125,6 +125,9 @@ &extalr_clk {
|
|||||||
};
|
};
|
||||||
|
|
||||||
&hscif0 {
|
&hscif0 {
|
||||||
|
pinctrl-0 = <&hscif0_pins>;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -510,8 +510,7 @@ wacky_spi_audio: spi2@0 {
|
|||||||
&pci_rootport {
|
&pci_rootport {
|
||||||
mvl_wifi: wifi@0,0 {
|
mvl_wifi: wifi@0,0 {
|
||||||
compatible = "pci1b4b,2b42";
|
compatible = "pci1b4b,2b42";
|
||||||
reg = <0x83010000 0x0 0x00000000 0x0 0x00100000
|
reg = <0x0000 0x0 0x0 0x0 0x0>;
|
||||||
0x83010000 0x0 0x00100000 0x0 0x00100000>;
|
|
||||||
interrupt-parent = <&gpio0>;
|
interrupt-parent = <&gpio0>;
|
||||||
interrupts = <8 IRQ_TYPE_LEVEL_LOW>;
|
interrupts = <8 IRQ_TYPE_LEVEL_LOW>;
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
|
@ -34,8 +34,8 @@ &mipi_panel {
|
|||||||
&pci_rootport {
|
&pci_rootport {
|
||||||
wifi@0,0 {
|
wifi@0,0 {
|
||||||
compatible = "qcom,ath10k";
|
compatible = "qcom,ath10k";
|
||||||
reg = <0x00010000 0x0 0x00000000 0x0 0x00000000>,
|
reg = <0x00000000 0x0 0x00000000 0x0 0x00000000>,
|
||||||
<0x03010010 0x0 0x00000000 0x0 0x00200000>;
|
<0x03000010 0x0 0x00000000 0x0 0x00200000>;
|
||||||
qcom,ath10k-calibration-variant = "GO_DUMO";
|
qcom,ath10k-calibration-variant = "GO_DUMO";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -489,6 +489,7 @@ pci_rootport: pcie@0,0 {
|
|||||||
#address-cells = <3>;
|
#address-cells = <3>;
|
||||||
#size-cells = <2>;
|
#size-cells = <2>;
|
||||||
ranges;
|
ranges;
|
||||||
|
device_type = "pci";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -958,7 +958,7 @@ pcie2x1: pcie@fe260000 {
|
|||||||
<GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>,
|
<GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
<GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>,
|
<GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
<GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>;
|
<GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
interrupt-names = "sys", "pmc", "msi", "legacy", "err";
|
interrupt-names = "sys", "pmc", "msg", "legacy", "err";
|
||||||
bus-range = <0x0 0xf>;
|
bus-range = <0x0 0xf>;
|
||||||
clocks = <&cru ACLK_PCIE20_MST>, <&cru ACLK_PCIE20_SLV>,
|
clocks = <&cru ACLK_PCIE20_MST>, <&cru ACLK_PCIE20_SLV>,
|
||||||
<&cru ACLK_PCIE20_DBI>, <&cru PCLK_PCIE20>,
|
<&cru ACLK_PCIE20_DBI>, <&cru PCLK_PCIE20>,
|
||||||
|
@ -245,7 +245,7 @@ main_gpio0: gpio@600000 {
|
|||||||
<193>, <194>, <195>;
|
<193>, <194>, <195>;
|
||||||
interrupt-controller;
|
interrupt-controller;
|
||||||
#interrupt-cells = <2>;
|
#interrupt-cells = <2>;
|
||||||
ti,ngpio = <87>;
|
ti,ngpio = <92>;
|
||||||
ti,davinci-gpio-unbanked = <0>;
|
ti,davinci-gpio-unbanked = <0>;
|
||||||
power-domains = <&k3_pds 77 TI_SCI_PD_EXCLUSIVE>;
|
power-domains = <&k3_pds 77 TI_SCI_PD_EXCLUSIVE>;
|
||||||
clocks = <&k3_clks 77 0>;
|
clocks = <&k3_clks 77 0>;
|
||||||
@ -263,7 +263,7 @@ main_gpio1: gpio@601000 {
|
|||||||
<183>, <184>, <185>;
|
<183>, <184>, <185>;
|
||||||
interrupt-controller;
|
interrupt-controller;
|
||||||
#interrupt-cells = <2>;
|
#interrupt-cells = <2>;
|
||||||
ti,ngpio = <88>;
|
ti,ngpio = <52>;
|
||||||
ti,davinci-gpio-unbanked = <0>;
|
ti,davinci-gpio-unbanked = <0>;
|
||||||
power-domains = <&k3_pds 78 TI_SCI_PD_EXCLUSIVE>;
|
power-domains = <&k3_pds 78 TI_SCI_PD_EXCLUSIVE>;
|
||||||
clocks = <&k3_clks 78 0>;
|
clocks = <&k3_clks 78 0>;
|
||||||
|
@ -856,7 +856,7 @@ dss: dss@4a00000 {
|
|||||||
assigned-clocks = <&k3_clks 67 2>;
|
assigned-clocks = <&k3_clks 67 2>;
|
||||||
assigned-clock-parents = <&k3_clks 67 5>;
|
assigned-clock-parents = <&k3_clks 67 5>;
|
||||||
|
|
||||||
interrupts = <GIC_SPI 166 IRQ_TYPE_EDGE_RISING>;
|
interrupts = <GIC_SPI 166 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
|
||||||
dma-coherent;
|
dma-coherent;
|
||||||
|
|
||||||
|
@ -826,6 +826,12 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)
|
|||||||
if (pte_hw_dirty(pte))
|
if (pte_hw_dirty(pte))
|
||||||
pte = pte_mkdirty(pte);
|
pte = pte_mkdirty(pte);
|
||||||
pte_val(pte) = (pte_val(pte) & ~mask) | (pgprot_val(newprot) & mask);
|
pte_val(pte) = (pte_val(pte) & ~mask) | (pgprot_val(newprot) & mask);
|
||||||
|
/*
|
||||||
|
* If we end up clearing hw dirtiness for a sw-dirty PTE, set hardware
|
||||||
|
* dirtiness again.
|
||||||
|
*/
|
||||||
|
if (pte_sw_dirty(pte))
|
||||||
|
pte = pte_mkdirty(pte);
|
||||||
return pte;
|
return pte;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -489,7 +489,7 @@ void kvm_arch_vcpu_destroy(struct kvm_vcpu *vcpu)
|
|||||||
|
|
||||||
kvm_timer_vcpu_terminate(vcpu);
|
kvm_timer_vcpu_terminate(vcpu);
|
||||||
kvm_pmu_vcpu_destroy(vcpu);
|
kvm_pmu_vcpu_destroy(vcpu);
|
||||||
|
kvm_vgic_vcpu_destroy(vcpu);
|
||||||
kvm_arm_vcpu_destroy(vcpu);
|
kvm_arm_vcpu_destroy(vcpu);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -368,7 +368,7 @@ static void kvm_vgic_dist_destroy(struct kvm *kvm)
|
|||||||
vgic_v4_teardown(kvm);
|
vgic_v4_teardown(kvm);
|
||||||
}
|
}
|
||||||
|
|
||||||
void kvm_vgic_vcpu_destroy(struct kvm_vcpu *vcpu)
|
static void __kvm_vgic_vcpu_destroy(struct kvm_vcpu *vcpu)
|
||||||
{
|
{
|
||||||
struct vgic_cpu *vgic_cpu = &vcpu->arch.vgic_cpu;
|
struct vgic_cpu *vgic_cpu = &vcpu->arch.vgic_cpu;
|
||||||
|
|
||||||
@ -379,29 +379,39 @@ void kvm_vgic_vcpu_destroy(struct kvm_vcpu *vcpu)
|
|||||||
vgic_flush_pending_lpis(vcpu);
|
vgic_flush_pending_lpis(vcpu);
|
||||||
|
|
||||||
INIT_LIST_HEAD(&vgic_cpu->ap_list_head);
|
INIT_LIST_HEAD(&vgic_cpu->ap_list_head);
|
||||||
vgic_cpu->rd_iodev.base_addr = VGIC_ADDR_UNDEF;
|
if (vcpu->kvm->arch.vgic.vgic_model == KVM_DEV_TYPE_ARM_VGIC_V3) {
|
||||||
|
vgic_unregister_redist_iodev(vcpu);
|
||||||
|
vgic_cpu->rd_iodev.base_addr = VGIC_ADDR_UNDEF;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __kvm_vgic_destroy(struct kvm *kvm)
|
void kvm_vgic_vcpu_destroy(struct kvm_vcpu *vcpu)
|
||||||
{
|
{
|
||||||
struct kvm_vcpu *vcpu;
|
struct kvm *kvm = vcpu->kvm;
|
||||||
unsigned long i;
|
|
||||||
|
|
||||||
lockdep_assert_held(&kvm->arch.config_lock);
|
mutex_lock(&kvm->slots_lock);
|
||||||
|
__kvm_vgic_vcpu_destroy(vcpu);
|
||||||
vgic_debug_destroy(kvm);
|
mutex_unlock(&kvm->slots_lock);
|
||||||
|
|
||||||
kvm_for_each_vcpu(i, vcpu, kvm)
|
|
||||||
kvm_vgic_vcpu_destroy(vcpu);
|
|
||||||
|
|
||||||
kvm_vgic_dist_destroy(kvm);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void kvm_vgic_destroy(struct kvm *kvm)
|
void kvm_vgic_destroy(struct kvm *kvm)
|
||||||
{
|
{
|
||||||
|
struct kvm_vcpu *vcpu;
|
||||||
|
unsigned long i;
|
||||||
|
|
||||||
|
mutex_lock(&kvm->slots_lock);
|
||||||
|
|
||||||
|
vgic_debug_destroy(kvm);
|
||||||
|
|
||||||
|
kvm_for_each_vcpu(i, vcpu, kvm)
|
||||||
|
__kvm_vgic_vcpu_destroy(vcpu);
|
||||||
|
|
||||||
mutex_lock(&kvm->arch.config_lock);
|
mutex_lock(&kvm->arch.config_lock);
|
||||||
__kvm_vgic_destroy(kvm);
|
|
||||||
|
kvm_vgic_dist_destroy(kvm);
|
||||||
|
|
||||||
mutex_unlock(&kvm->arch.config_lock);
|
mutex_unlock(&kvm->arch.config_lock);
|
||||||
|
mutex_unlock(&kvm->slots_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -469,25 +479,26 @@ int kvm_vgic_map_resources(struct kvm *kvm)
|
|||||||
type = VGIC_V3;
|
type = VGIC_V3;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ret) {
|
if (ret)
|
||||||
__kvm_vgic_destroy(kvm);
|
|
||||||
goto out;
|
goto out;
|
||||||
}
|
|
||||||
dist->ready = true;
|
dist->ready = true;
|
||||||
dist_base = dist->vgic_dist_base;
|
dist_base = dist->vgic_dist_base;
|
||||||
mutex_unlock(&kvm->arch.config_lock);
|
mutex_unlock(&kvm->arch.config_lock);
|
||||||
|
|
||||||
ret = vgic_register_dist_iodev(kvm, dist_base, type);
|
ret = vgic_register_dist_iodev(kvm, dist_base, type);
|
||||||
if (ret) {
|
if (ret)
|
||||||
kvm_err("Unable to register VGIC dist MMIO regions\n");
|
kvm_err("Unable to register VGIC dist MMIO regions\n");
|
||||||
kvm_vgic_destroy(kvm);
|
|
||||||
}
|
|
||||||
mutex_unlock(&kvm->slots_lock);
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
|
goto out_slots;
|
||||||
out:
|
out:
|
||||||
mutex_unlock(&kvm->arch.config_lock);
|
mutex_unlock(&kvm->arch.config_lock);
|
||||||
|
out_slots:
|
||||||
mutex_unlock(&kvm->slots_lock);
|
mutex_unlock(&kvm->slots_lock);
|
||||||
|
|
||||||
|
if (ret)
|
||||||
|
kvm_vgic_destroy(kvm);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -584,7 +584,11 @@ static struct vgic_irq *vgic_its_check_cache(struct kvm *kvm, phys_addr_t db,
|
|||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
raw_spin_lock_irqsave(&dist->lpi_list_lock, flags);
|
raw_spin_lock_irqsave(&dist->lpi_list_lock, flags);
|
||||||
|
|
||||||
irq = __vgic_its_check_cache(dist, db, devid, eventid);
|
irq = __vgic_its_check_cache(dist, db, devid, eventid);
|
||||||
|
if (irq)
|
||||||
|
vgic_get_irq_kref(irq);
|
||||||
|
|
||||||
raw_spin_unlock_irqrestore(&dist->lpi_list_lock, flags);
|
raw_spin_unlock_irqrestore(&dist->lpi_list_lock, flags);
|
||||||
|
|
||||||
return irq;
|
return irq;
|
||||||
@ -763,6 +767,7 @@ int vgic_its_inject_cached_translation(struct kvm *kvm, struct kvm_msi *msi)
|
|||||||
raw_spin_lock_irqsave(&irq->irq_lock, flags);
|
raw_spin_lock_irqsave(&irq->irq_lock, flags);
|
||||||
irq->pending_latch = true;
|
irq->pending_latch = true;
|
||||||
vgic_queue_irq_unlock(kvm, irq, flags);
|
vgic_queue_irq_unlock(kvm, irq, flags);
|
||||||
|
vgic_put_irq(kvm, irq);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -365,19 +365,26 @@ static int vgic_v3_uaccess_write_pending(struct kvm_vcpu *vcpu,
|
|||||||
struct vgic_irq *irq = vgic_get_irq(vcpu->kvm, vcpu, intid + i);
|
struct vgic_irq *irq = vgic_get_irq(vcpu->kvm, vcpu, intid + i);
|
||||||
|
|
||||||
raw_spin_lock_irqsave(&irq->irq_lock, flags);
|
raw_spin_lock_irqsave(&irq->irq_lock, flags);
|
||||||
if (test_bit(i, &val)) {
|
|
||||||
/*
|
/*
|
||||||
* pending_latch is set irrespective of irq type
|
* pending_latch is set irrespective of irq type
|
||||||
* (level or edge) to avoid dependency that VM should
|
* (level or edge) to avoid dependency that VM should
|
||||||
* restore irq config before pending info.
|
* restore irq config before pending info.
|
||||||
*/
|
*/
|
||||||
irq->pending_latch = true;
|
irq->pending_latch = test_bit(i, &val);
|
||||||
vgic_queue_irq_unlock(vcpu->kvm, irq, flags);
|
|
||||||
} else {
|
if (irq->hw && vgic_irq_is_sgi(irq->intid)) {
|
||||||
|
irq_set_irqchip_state(irq->host_irq,
|
||||||
|
IRQCHIP_STATE_PENDING,
|
||||||
|
irq->pending_latch);
|
||||||
irq->pending_latch = false;
|
irq->pending_latch = false;
|
||||||
raw_spin_unlock_irqrestore(&irq->irq_lock, flags);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (irq->pending_latch)
|
||||||
|
vgic_queue_irq_unlock(vcpu->kvm, irq, flags);
|
||||||
|
else
|
||||||
|
raw_spin_unlock_irqrestore(&irq->irq_lock, flags);
|
||||||
|
|
||||||
vgic_put_irq(vcpu->kvm, irq);
|
vgic_put_irq(vcpu->kvm, irq);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -820,7 +827,7 @@ int vgic_register_redist_iodev(struct kvm_vcpu *vcpu)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void vgic_unregister_redist_iodev(struct kvm_vcpu *vcpu)
|
void vgic_unregister_redist_iodev(struct kvm_vcpu *vcpu)
|
||||||
{
|
{
|
||||||
struct vgic_io_device *rd_dev = &vcpu->arch.vgic_cpu.rd_iodev;
|
struct vgic_io_device *rd_dev = &vcpu->arch.vgic_cpu.rd_iodev;
|
||||||
|
|
||||||
|
@ -239,6 +239,7 @@ int vgic_v3_lpi_sync_pending_status(struct kvm *kvm, struct vgic_irq *irq);
|
|||||||
int vgic_v3_save_pending_tables(struct kvm *kvm);
|
int vgic_v3_save_pending_tables(struct kvm *kvm);
|
||||||
int vgic_v3_set_redist_base(struct kvm *kvm, u32 index, u64 addr, u32 count);
|
int vgic_v3_set_redist_base(struct kvm *kvm, u32 index, u64 addr, u32 count);
|
||||||
int vgic_register_redist_iodev(struct kvm_vcpu *vcpu);
|
int vgic_register_redist_iodev(struct kvm_vcpu *vcpu);
|
||||||
|
void vgic_unregister_redist_iodev(struct kvm_vcpu *vcpu);
|
||||||
bool vgic_v3_check_base(struct kvm *kvm);
|
bool vgic_v3_check_base(struct kvm *kvm);
|
||||||
|
|
||||||
void vgic_v3_load(struct kvm_vcpu *vcpu);
|
void vgic_v3_load(struct kvm_vcpu *vcpu);
|
||||||
|
@ -43,5 +43,10 @@ static __always_inline bool arch_static_branch_jump(struct static_key *key,
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum jump_label_type;
|
||||||
|
void arch_jump_label_transform_static(struct jump_entry *entry,
|
||||||
|
enum jump_label_type type);
|
||||||
|
#define arch_jump_label_transform_static arch_jump_label_transform_static
|
||||||
|
|
||||||
#endif /* __ASSEMBLY__ */
|
#endif /* __ASSEMBLY__ */
|
||||||
#endif /* __ASM_CSKY_JUMP_LABEL_H */
|
#endif /* __ASM_CSKY_JUMP_LABEL_H */
|
||||||
|
@ -116,6 +116,8 @@ vdso_install:
|
|||||||
|
|
||||||
all: $(notdir $(KBUILD_IMAGE))
|
all: $(notdir $(KBUILD_IMAGE))
|
||||||
|
|
||||||
|
vmlinuz.efi: vmlinux.efi
|
||||||
|
|
||||||
vmlinux.elf vmlinux.efi vmlinuz.efi: vmlinux
|
vmlinux.elf vmlinux.efi vmlinuz.efi: vmlinux
|
||||||
$(Q)$(MAKE) $(build)=$(boot) $(bootvars-y) $(boot)/$@
|
$(Q)$(MAKE) $(build)=$(boot) $(bootvars-y) $(boot)/$@
|
||||||
|
|
||||||
|
@ -241,8 +241,6 @@ void loongarch_dump_regs64(u64 *uregs, const struct pt_regs *regs);
|
|||||||
do { \
|
do { \
|
||||||
current->thread.vdso = &vdso_info; \
|
current->thread.vdso = &vdso_info; \
|
||||||
\
|
\
|
||||||
loongarch_set_personality_fcsr(state); \
|
|
||||||
\
|
|
||||||
if (personality(current->personality) != PER_LINUX) \
|
if (personality(current->personality) != PER_LINUX) \
|
||||||
set_personality(PER_LINUX); \
|
set_personality(PER_LINUX); \
|
||||||
} while (0)
|
} while (0)
|
||||||
@ -259,7 +257,6 @@ do { \
|
|||||||
clear_thread_flag(TIF_32BIT_ADDR); \
|
clear_thread_flag(TIF_32BIT_ADDR); \
|
||||||
\
|
\
|
||||||
current->thread.vdso = &vdso_info; \
|
current->thread.vdso = &vdso_info; \
|
||||||
loongarch_set_personality_fcsr(state); \
|
|
||||||
\
|
\
|
||||||
p = personality(current->personality); \
|
p = personality(current->personality); \
|
||||||
if (p != PER_LINUX32 && p != PER_LINUX) \
|
if (p != PER_LINUX32 && p != PER_LINUX) \
|
||||||
@ -293,7 +290,7 @@ extern const char *__elf_platform;
|
|||||||
#define ELF_PLAT_INIT(_r, load_addr) do { \
|
#define ELF_PLAT_INIT(_r, load_addr) do { \
|
||||||
_r->regs[1] = _r->regs[2] = _r->regs[3] = _r->regs[4] = 0; \
|
_r->regs[1] = _r->regs[2] = _r->regs[3] = _r->regs[4] = 0; \
|
||||||
_r->regs[5] = _r->regs[6] = _r->regs[7] = _r->regs[8] = 0; \
|
_r->regs[5] = _r->regs[6] = _r->regs[7] = _r->regs[8] = 0; \
|
||||||
_r->regs[9] = _r->regs[10] = _r->regs[11] = _r->regs[12] = 0; \
|
_r->regs[9] = _r->regs[10] /* syscall n */ = _r->regs[12] = 0; \
|
||||||
_r->regs[13] = _r->regs[14] = _r->regs[15] = _r->regs[16] = 0; \
|
_r->regs[13] = _r->regs[14] = _r->regs[15] = _r->regs[16] = 0; \
|
||||||
_r->regs[17] = _r->regs[18] = _r->regs[19] = _r->regs[20] = 0; \
|
_r->regs[17] = _r->regs[18] = _r->regs[19] = _r->regs[20] = 0; \
|
||||||
_r->regs[21] = _r->regs[22] = _r->regs[23] = _r->regs[24] = 0; \
|
_r->regs[21] = _r->regs[22] = _r->regs[23] = _r->regs[24] = 0; \
|
||||||
@ -340,6 +337,4 @@ extern int arch_elf_pt_proc(void *ehdr, void *phdr, struct file *elf,
|
|||||||
extern int arch_check_elf(void *ehdr, bool has_interpreter, void *interp_ehdr,
|
extern int arch_check_elf(void *ehdr, bool has_interpreter, void *interp_ehdr,
|
||||||
struct arch_elf_state *state);
|
struct arch_elf_state *state);
|
||||||
|
|
||||||
extern void loongarch_set_personality_fcsr(struct arch_elf_state *state);
|
|
||||||
|
|
||||||
#endif /* _ASM_ELF_H */
|
#endif /* _ASM_ELF_H */
|
||||||
|
@ -23,8 +23,3 @@ int arch_check_elf(void *_ehdr, bool has_interpreter, void *_interp_ehdr,
|
|||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void loongarch_set_personality_fcsr(struct arch_elf_state *state)
|
|
||||||
{
|
|
||||||
current->thread.fpu.fcsr = boot_cpu_data.fpu_csr0;
|
|
||||||
}
|
|
||||||
|
@ -82,6 +82,7 @@ void start_thread(struct pt_regs *regs, unsigned long pc, unsigned long sp)
|
|||||||
euen = regs->csr_euen & ~(CSR_EUEN_FPEN);
|
euen = regs->csr_euen & ~(CSR_EUEN_FPEN);
|
||||||
regs->csr_euen = euen;
|
regs->csr_euen = euen;
|
||||||
lose_fpu(0);
|
lose_fpu(0);
|
||||||
|
current->thread.fpu.fcsr = boot_cpu_data.fpu_csr0;
|
||||||
|
|
||||||
clear_thread_flag(TIF_LSX_CTX_LIVE);
|
clear_thread_flag(TIF_LSX_CTX_LIVE);
|
||||||
clear_thread_flag(TIF_LASX_CTX_LIVE);
|
clear_thread_flag(TIF_LASX_CTX_LIVE);
|
||||||
|
@ -58,21 +58,6 @@ static int constant_set_state_oneshot(struct clock_event_device *evt)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int constant_set_state_oneshot_stopped(struct clock_event_device *evt)
|
|
||||||
{
|
|
||||||
unsigned long timer_config;
|
|
||||||
|
|
||||||
raw_spin_lock(&state_lock);
|
|
||||||
|
|
||||||
timer_config = csr_read64(LOONGARCH_CSR_TCFG);
|
|
||||||
timer_config &= ~CSR_TCFG_EN;
|
|
||||||
csr_write64(timer_config, LOONGARCH_CSR_TCFG);
|
|
||||||
|
|
||||||
raw_spin_unlock(&state_lock);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int constant_set_state_periodic(struct clock_event_device *evt)
|
static int constant_set_state_periodic(struct clock_event_device *evt)
|
||||||
{
|
{
|
||||||
unsigned long period;
|
unsigned long period;
|
||||||
@ -92,6 +77,16 @@ static int constant_set_state_periodic(struct clock_event_device *evt)
|
|||||||
|
|
||||||
static int constant_set_state_shutdown(struct clock_event_device *evt)
|
static int constant_set_state_shutdown(struct clock_event_device *evt)
|
||||||
{
|
{
|
||||||
|
unsigned long timer_config;
|
||||||
|
|
||||||
|
raw_spin_lock(&state_lock);
|
||||||
|
|
||||||
|
timer_config = csr_read64(LOONGARCH_CSR_TCFG);
|
||||||
|
timer_config &= ~CSR_TCFG_EN;
|
||||||
|
csr_write64(timer_config, LOONGARCH_CSR_TCFG);
|
||||||
|
|
||||||
|
raw_spin_unlock(&state_lock);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -156,7 +151,7 @@ int constant_clockevent_init(void)
|
|||||||
cd->rating = 320;
|
cd->rating = 320;
|
||||||
cd->cpumask = cpumask_of(cpu);
|
cd->cpumask = cpumask_of(cpu);
|
||||||
cd->set_state_oneshot = constant_set_state_oneshot;
|
cd->set_state_oneshot = constant_set_state_oneshot;
|
||||||
cd->set_state_oneshot_stopped = constant_set_state_oneshot_stopped;
|
cd->set_state_oneshot_stopped = constant_set_state_shutdown;
|
||||||
cd->set_state_periodic = constant_set_state_periodic;
|
cd->set_state_periodic = constant_set_state_periodic;
|
||||||
cd->set_state_shutdown = constant_set_state_shutdown;
|
cd->set_state_shutdown = constant_set_state_shutdown;
|
||||||
cd->set_next_event = constant_timer_next_event;
|
cd->set_next_event = constant_timer_next_event;
|
||||||
|
@ -402,7 +402,6 @@ static int build_insn(const struct bpf_insn *insn, struct jit_ctx *ctx, bool ext
|
|||||||
const u8 dst = regmap[insn->dst_reg];
|
const u8 dst = regmap[insn->dst_reg];
|
||||||
const s16 off = insn->off;
|
const s16 off = insn->off;
|
||||||
const s32 imm = insn->imm;
|
const s32 imm = insn->imm;
|
||||||
const u64 imm64 = (u64)(insn + 1)->imm << 32 | (u32)insn->imm;
|
|
||||||
const bool is32 = BPF_CLASS(insn->code) == BPF_ALU || BPF_CLASS(insn->code) == BPF_JMP32;
|
const bool is32 = BPF_CLASS(insn->code) == BPF_ALU || BPF_CLASS(insn->code) == BPF_JMP32;
|
||||||
|
|
||||||
switch (code) {
|
switch (code) {
|
||||||
@ -806,8 +805,12 @@ static int build_insn(const struct bpf_insn *insn, struct jit_ctx *ctx, bool ext
|
|||||||
|
|
||||||
/* dst = imm64 */
|
/* dst = imm64 */
|
||||||
case BPF_LD | BPF_IMM | BPF_DW:
|
case BPF_LD | BPF_IMM | BPF_DW:
|
||||||
|
{
|
||||||
|
const u64 imm64 = (u64)(insn + 1)->imm << 32 | (u32)insn->imm;
|
||||||
|
|
||||||
move_imm(ctx, dst, imm64, is32);
|
move_imm(ctx, dst, imm64, is32);
|
||||||
return 1;
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
/* dst = *(size *)(src + off) */
|
/* dst = *(size *)(src + off) */
|
||||||
case BPF_LDX | BPF_MEM | BPF_B:
|
case BPF_LDX | BPF_MEM | BPF_B:
|
||||||
|
@ -847,7 +847,7 @@ int __init db1200_dev_setup(void)
|
|||||||
i2c_register_board_info(0, db1200_i2c_devs,
|
i2c_register_board_info(0, db1200_i2c_devs,
|
||||||
ARRAY_SIZE(db1200_i2c_devs));
|
ARRAY_SIZE(db1200_i2c_devs));
|
||||||
spi_register_board_info(db1200_spi_devs,
|
spi_register_board_info(db1200_spi_devs,
|
||||||
ARRAY_SIZE(db1200_i2c_devs));
|
ARRAY_SIZE(db1200_spi_devs));
|
||||||
|
|
||||||
/* SWITCHES: S6.8 I2C/SPI selector (OFF=I2C ON=SPI)
|
/* SWITCHES: S6.8 I2C/SPI selector (OFF=I2C ON=SPI)
|
||||||
* S6.7 AC97/I2S selector (OFF=AC97 ON=I2S)
|
* S6.7 AC97/I2S selector (OFF=AC97 ON=I2S)
|
||||||
|
@ -589,7 +589,7 @@ int __init db1550_dev_setup(void)
|
|||||||
i2c_register_board_info(0, db1550_i2c_devs,
|
i2c_register_board_info(0, db1550_i2c_devs,
|
||||||
ARRAY_SIZE(db1550_i2c_devs));
|
ARRAY_SIZE(db1550_i2c_devs));
|
||||||
spi_register_board_info(db1550_spi_devs,
|
spi_register_board_info(db1550_spi_devs,
|
||||||
ARRAY_SIZE(db1550_i2c_devs));
|
ARRAY_SIZE(db1550_spi_devs));
|
||||||
|
|
||||||
c = clk_get(NULL, "psc0_intclk");
|
c = clk_get(NULL, "psc0_intclk");
|
||||||
if (!IS_ERR(c)) {
|
if (!IS_ERR(c)) {
|
||||||
|
@ -123,8 +123,7 @@ gmac@3,0 {
|
|||||||
compatible = "pci0014,7a03.0",
|
compatible = "pci0014,7a03.0",
|
||||||
"pci0014,7a03",
|
"pci0014,7a03",
|
||||||
"pciclass0c0320",
|
"pciclass0c0320",
|
||||||
"pciclass0c03",
|
"pciclass0c03";
|
||||||
"loongson, pci-gmac";
|
|
||||||
|
|
||||||
reg = <0x1800 0x0 0x0 0x0 0x0>;
|
reg = <0x1800 0x0 0x0 0x0 0x0>;
|
||||||
interrupts = <12 IRQ_TYPE_LEVEL_LOW>,
|
interrupts = <12 IRQ_TYPE_LEVEL_LOW>,
|
||||||
|
@ -186,8 +186,7 @@ gmac@3,0 {
|
|||||||
compatible = "pci0014,7a03.0",
|
compatible = "pci0014,7a03.0",
|
||||||
"pci0014,7a03",
|
"pci0014,7a03",
|
||||||
"pciclass020000",
|
"pciclass020000",
|
||||||
"pciclass0200",
|
"pciclass0200";
|
||||||
"loongson, pci-gmac";
|
|
||||||
|
|
||||||
reg = <0x1800 0x0 0x0 0x0 0x0>;
|
reg = <0x1800 0x0 0x0 0x0 0x0>;
|
||||||
interrupts = <12 IRQ_TYPE_LEVEL_HIGH>,
|
interrupts = <12 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/memblock.h>
|
#include <linux/memblock.h>
|
||||||
|
|
||||||
#define dmi_early_remap(x, l) ioremap_cache(x, l)
|
#define dmi_early_remap(x, l) ioremap(x, l)
|
||||||
#define dmi_early_unmap(x, l) iounmap(x)
|
#define dmi_early_unmap(x, l) iounmap(x)
|
||||||
#define dmi_remap(x, l) ioremap_cache(x, l)
|
#define dmi_remap(x, l) ioremap_cache(x, l)
|
||||||
#define dmi_unmap(x) iounmap(x)
|
#define dmi_unmap(x) iounmap(x)
|
||||||
|
@ -326,11 +326,11 @@ static void __init bootmem_init(void)
|
|||||||
panic("Incorrect memory mapping !!!");
|
panic("Incorrect memory mapping !!!");
|
||||||
|
|
||||||
if (max_pfn > PFN_DOWN(HIGHMEM_START)) {
|
if (max_pfn > PFN_DOWN(HIGHMEM_START)) {
|
||||||
|
max_low_pfn = PFN_DOWN(HIGHMEM_START);
|
||||||
#ifdef CONFIG_HIGHMEM
|
#ifdef CONFIG_HIGHMEM
|
||||||
highstart_pfn = PFN_DOWN(HIGHMEM_START);
|
highstart_pfn = max_low_pfn;
|
||||||
highend_pfn = max_pfn;
|
highend_pfn = max_pfn;
|
||||||
#else
|
#else
|
||||||
max_low_pfn = PFN_DOWN(HIGHMEM_START);
|
|
||||||
max_pfn = max_low_pfn;
|
max_pfn = max_low_pfn;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -333,10 +333,11 @@ early_initcall(mips_smp_ipi_init);
|
|||||||
*/
|
*/
|
||||||
asmlinkage void start_secondary(void)
|
asmlinkage void start_secondary(void)
|
||||||
{
|
{
|
||||||
unsigned int cpu;
|
unsigned int cpu = raw_smp_processor_id();
|
||||||
|
|
||||||
cpu_probe();
|
cpu_probe();
|
||||||
per_cpu_trap_init(false);
|
per_cpu_trap_init(false);
|
||||||
|
rcu_cpu_starting(cpu);
|
||||||
mips_clockevent_init();
|
mips_clockevent_init();
|
||||||
mp_ops->init_secondary();
|
mp_ops->init_secondary();
|
||||||
cpu_report();
|
cpu_report();
|
||||||
@ -348,7 +349,6 @@ asmlinkage void start_secondary(void)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
calibrate_delay();
|
calibrate_delay();
|
||||||
cpu = smp_processor_id();
|
|
||||||
cpu_data[cpu].udelay_val = loops_per_jiffy;
|
cpu_data[cpu].udelay_val = loops_per_jiffy;
|
||||||
|
|
||||||
set_cpu_sibling_map(cpu);
|
set_cpu_sibling_map(cpu);
|
||||||
|
@ -806,6 +806,7 @@ config THREAD_SHIFT
|
|||||||
int "Thread shift" if EXPERT
|
int "Thread shift" if EXPERT
|
||||||
range 13 15
|
range 13 15
|
||||||
default "15" if PPC_256K_PAGES
|
default "15" if PPC_256K_PAGES
|
||||||
|
default "15" if PPC_PSERIES || PPC_POWERNV
|
||||||
default "14" if PPC64
|
default "14" if PPC64
|
||||||
default "13"
|
default "13"
|
||||||
help
|
help
|
||||||
|
@ -42,18 +42,13 @@ machine-$(CONFIG_PPC64) += 64
|
|||||||
machine-$(CONFIG_CPU_LITTLE_ENDIAN) += le
|
machine-$(CONFIG_CPU_LITTLE_ENDIAN) += le
|
||||||
UTS_MACHINE := $(subst $(space),,$(machine-y))
|
UTS_MACHINE := $(subst $(space),,$(machine-y))
|
||||||
|
|
||||||
# XXX This needs to be before we override LD below
|
ifeq ($(CONFIG_PPC64)$(CONFIG_LD_IS_BFD),yy)
|
||||||
ifdef CONFIG_PPC32
|
|
||||||
KBUILD_LDFLAGS_MODULE += arch/powerpc/lib/crtsavres.o
|
|
||||||
else
|
|
||||||
ifeq ($(call ld-ifversion, -ge, 22500, y),y)
|
|
||||||
# Have the linker provide sfpr if possible.
|
# Have the linker provide sfpr if possible.
|
||||||
# There is a corresponding test in arch/powerpc/lib/Makefile
|
# There is a corresponding test in arch/powerpc/lib/Makefile
|
||||||
KBUILD_LDFLAGS_MODULE += --save-restore-funcs
|
KBUILD_LDFLAGS_MODULE += --save-restore-funcs
|
||||||
else
|
else
|
||||||
KBUILD_LDFLAGS_MODULE += arch/powerpc/lib/crtsavres.o
|
KBUILD_LDFLAGS_MODULE += arch/powerpc/lib/crtsavres.o
|
||||||
endif
|
endif
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef CONFIG_CPU_LITTLE_ENDIAN
|
ifdef CONFIG_CPU_LITTLE_ENDIAN
|
||||||
KBUILD_CFLAGS += -mlittle-endian
|
KBUILD_CFLAGS += -mlittle-endian
|
||||||
@ -391,17 +386,7 @@ endif
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
PHONY += checkbin
|
PHONY += checkbin
|
||||||
# Check toolchain versions:
|
|
||||||
# - gcc-4.6 is the minimum kernel-wide version so nothing required.
|
|
||||||
checkbin:
|
checkbin:
|
||||||
@if test "x${CONFIG_LD_IS_LLD}" != "xy" -a \
|
|
||||||
"x$(call ld-ifversion, -le, 22400, y)" = "xy" ; then \
|
|
||||||
echo -n '*** binutils 2.24 miscompiles weak symbols ' ; \
|
|
||||||
echo 'in some circumstances.' ; \
|
|
||||||
echo '*** binutils 2.23 do not define the TOC symbol ' ; \
|
|
||||||
echo -n '*** Please use a different binutils version.' ; \
|
|
||||||
false ; \
|
|
||||||
fi
|
|
||||||
@if test "x${CONFIG_FTRACE_MCOUNT_USE_RECORDMCOUNT}" = "xy" -a \
|
@if test "x${CONFIG_FTRACE_MCOUNT_USE_RECORDMCOUNT}" = "xy" -a \
|
||||||
"x${CONFIG_LD_IS_BFD}" = "xy" -a \
|
"x${CONFIG_LD_IS_BFD}" = "xy" -a \
|
||||||
"${CONFIG_LD_VERSION}" = "23700" ; then \
|
"${CONFIG_LD_VERSION}" = "23700" ; then \
|
||||||
|
@ -62,7 +62,7 @@
|
|||||||
.endif
|
.endif
|
||||||
|
|
||||||
/* Save previous stack pointer (r1) */
|
/* Save previous stack pointer (r1) */
|
||||||
addi r8, r1, SWITCH_FRAME_SIZE
|
addi r8, r1, SWITCH_FRAME_SIZE+STACK_FRAME_MIN_SIZE
|
||||||
PPC_STL r8, GPR1(r1)
|
PPC_STL r8, GPR1(r1)
|
||||||
|
|
||||||
.if \allregs == 1
|
.if \allregs == 1
|
||||||
@ -182,7 +182,7 @@ ftrace_no_trace:
|
|||||||
mflr r3
|
mflr r3
|
||||||
mtctr r3
|
mtctr r3
|
||||||
REST_GPR(3, r1)
|
REST_GPR(3, r1)
|
||||||
addi r1, r1, SWITCH_FRAME_SIZE
|
addi r1, r1, SWITCH_FRAME_SIZE+STACK_FRAME_MIN_SIZE
|
||||||
mtlr r0
|
mtlr r0
|
||||||
bctr
|
bctr
|
||||||
#endif
|
#endif
|
||||||
|
@ -42,8 +42,8 @@ obj-$(CONFIG_FUNCTION_ERROR_INJECTION) += error-inject.o
|
|||||||
# 64-bit linker creates .sfpr on demand for final link (vmlinux),
|
# 64-bit linker creates .sfpr on demand for final link (vmlinux),
|
||||||
# so it is only needed for modules, and only for older linkers which
|
# so it is only needed for modules, and only for older linkers which
|
||||||
# do not support --save-restore-funcs
|
# do not support --save-restore-funcs
|
||||||
ifeq ($(call ld-ifversion, -lt, 22500, y),y)
|
ifndef CONFIG_LD_IS_BFD
|
||||||
extra-$(CONFIG_PPC64) += crtsavres.o
|
always-$(CONFIG_PPC64) += crtsavres.o
|
||||||
endif
|
endif
|
||||||
|
|
||||||
obj-$(CONFIG_PPC_BOOK3S_64) += copyuser_power7.o copypage_power7.o \
|
obj-$(CONFIG_PPC_BOOK3S_64) += copyuser_power7.o copypage_power7.o \
|
||||||
|
@ -299,6 +299,8 @@ static int update_events_in_group(struct device_node *node, struct imc_pmu *pmu)
|
|||||||
attr_group->attrs = attrs;
|
attr_group->attrs = attrs;
|
||||||
do {
|
do {
|
||||||
ev_val_str = kasprintf(GFP_KERNEL, "event=0x%x", pmu->events[i].value);
|
ev_val_str = kasprintf(GFP_KERNEL, "event=0x%x", pmu->events[i].value);
|
||||||
|
if (!ev_val_str)
|
||||||
|
continue;
|
||||||
dev_str = device_str_attr_create(pmu->events[i].name, ev_val_str);
|
dev_str = device_str_attr_create(pmu->events[i].name, ev_val_str);
|
||||||
if (!dev_str)
|
if (!dev_str)
|
||||||
continue;
|
continue;
|
||||||
@ -306,6 +308,8 @@ static int update_events_in_group(struct device_node *node, struct imc_pmu *pmu)
|
|||||||
attrs[j++] = dev_str;
|
attrs[j++] = dev_str;
|
||||||
if (pmu->events[i].scale) {
|
if (pmu->events[i].scale) {
|
||||||
ev_scale_str = kasprintf(GFP_KERNEL, "%s.scale", pmu->events[i].name);
|
ev_scale_str = kasprintf(GFP_KERNEL, "%s.scale", pmu->events[i].name);
|
||||||
|
if (!ev_scale_str)
|
||||||
|
continue;
|
||||||
dev_str = device_str_attr_create(ev_scale_str, pmu->events[i].scale);
|
dev_str = device_str_attr_create(ev_scale_str, pmu->events[i].scale);
|
||||||
if (!dev_str)
|
if (!dev_str)
|
||||||
continue;
|
continue;
|
||||||
@ -315,6 +319,8 @@ static int update_events_in_group(struct device_node *node, struct imc_pmu *pmu)
|
|||||||
|
|
||||||
if (pmu->events[i].unit) {
|
if (pmu->events[i].unit) {
|
||||||
ev_unit_str = kasprintf(GFP_KERNEL, "%s.unit", pmu->events[i].name);
|
ev_unit_str = kasprintf(GFP_KERNEL, "%s.unit", pmu->events[i].name);
|
||||||
|
if (!ev_unit_str)
|
||||||
|
continue;
|
||||||
dev_str = device_str_attr_create(ev_unit_str, pmu->events[i].unit);
|
dev_str = device_str_attr_create(ev_unit_str, pmu->events[i].unit);
|
||||||
if (!dev_str)
|
if (!dev_str)
|
||||||
continue;
|
continue;
|
||||||
|
@ -173,6 +173,7 @@ config ISS4xx
|
|||||||
config CURRITUCK
|
config CURRITUCK
|
||||||
bool "IBM Currituck (476fpe) Support"
|
bool "IBM Currituck (476fpe) Support"
|
||||||
depends on PPC_47x
|
depends on PPC_47x
|
||||||
|
select I2C
|
||||||
select SWIOTLB
|
select SWIOTLB
|
||||||
select 476FPE
|
select 476FPE
|
||||||
select FORCE_PCI
|
select FORCE_PCI
|
||||||
|
@ -275,6 +275,8 @@ int __init opal_event_init(void)
|
|||||||
else
|
else
|
||||||
name = kasprintf(GFP_KERNEL, "opal");
|
name = kasprintf(GFP_KERNEL, "opal");
|
||||||
|
|
||||||
|
if (!name)
|
||||||
|
continue;
|
||||||
/* Install interrupt handler */
|
/* Install interrupt handler */
|
||||||
rc = request_irq(r->start, opal_interrupt, r->flags & IRQD_TRIGGER_MASK,
|
rc = request_irq(r->start, opal_interrupt, r->flags & IRQD_TRIGGER_MASK,
|
||||||
name, NULL);
|
name, NULL);
|
||||||
|
@ -196,6 +196,12 @@ void __init opal_powercap_init(void)
|
|||||||
|
|
||||||
j = 0;
|
j = 0;
|
||||||
pcaps[i].pg.name = kasprintf(GFP_KERNEL, "%pOFn", node);
|
pcaps[i].pg.name = kasprintf(GFP_KERNEL, "%pOFn", node);
|
||||||
|
if (!pcaps[i].pg.name) {
|
||||||
|
kfree(pcaps[i].pattrs);
|
||||||
|
kfree(pcaps[i].pg.attrs);
|
||||||
|
goto out_pcaps_pattrs;
|
||||||
|
}
|
||||||
|
|
||||||
if (has_min) {
|
if (has_min) {
|
||||||
powercap_add_attr(min, "powercap-min",
|
powercap_add_attr(min, "powercap-min",
|
||||||
&pcaps[i].pattrs[j]);
|
&pcaps[i].pattrs[j]);
|
||||||
|
@ -165,6 +165,11 @@ static int scom_debug_init_one(struct dentry *root, struct device_node *dn,
|
|||||||
ent->chip = chip;
|
ent->chip = chip;
|
||||||
snprintf(ent->name, 16, "%08x", chip);
|
snprintf(ent->name, 16, "%08x", chip);
|
||||||
ent->path.data = (void *)kasprintf(GFP_KERNEL, "%pOF", dn);
|
ent->path.data = (void *)kasprintf(GFP_KERNEL, "%pOF", dn);
|
||||||
|
if (!ent->path.data) {
|
||||||
|
kfree(ent);
|
||||||
|
return -ENOMEM;
|
||||||
|
}
|
||||||
|
|
||||||
ent->path.size = strlen((char *)ent->path.data);
|
ent->path.size = strlen((char *)ent->path.data);
|
||||||
|
|
||||||
dir = debugfs_create_dir(ent->name, root);
|
dir = debugfs_create_dir(ent->name, root);
|
||||||
|
@ -500,14 +500,15 @@ static int dlpar_memory_remove_by_index(u32 drc_index)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!lmb_found)
|
if (!lmb_found) {
|
||||||
|
pr_debug("Failed to look up LMB for drc index %x\n", drc_index);
|
||||||
rc = -EINVAL;
|
rc = -EINVAL;
|
||||||
|
} else if (rc) {
|
||||||
if (rc)
|
|
||||||
pr_debug("Failed to hot-remove memory at %llx\n",
|
pr_debug("Failed to hot-remove memory at %llx\n",
|
||||||
lmb->base_addr);
|
lmb->base_addr);
|
||||||
else
|
} else {
|
||||||
pr_debug("Memory at %llx was hot-removed\n", lmb->base_addr);
|
pr_debug("Memory at %llx was hot-removed\n", lmb->base_addr);
|
||||||
|
}
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,7 @@ extern char _start_kernel[];
|
|||||||
extern char __init_data_begin[], __init_data_end[];
|
extern char __init_data_begin[], __init_data_end[];
|
||||||
extern char __init_text_begin[], __init_text_end[];
|
extern char __init_text_begin[], __init_text_end[];
|
||||||
extern char __alt_start[], __alt_end[];
|
extern char __alt_start[], __alt_end[];
|
||||||
|
extern char __exittext_begin[], __exittext_end[];
|
||||||
|
|
||||||
static inline bool is_va_kernel_text(uintptr_t va)
|
static inline bool is_va_kernel_text(uintptr_t va)
|
||||||
{
|
{
|
||||||
|
@ -7,6 +7,6 @@
|
|||||||
#include <uapi/asm/ptrace.h>
|
#include <uapi/asm/ptrace.h>
|
||||||
|
|
||||||
asmlinkage __visible
|
asmlinkage __visible
|
||||||
void do_notify_resume(struct pt_regs *regs, unsigned long thread_info_flags);
|
void do_work_pending(struct pt_regs *regs, unsigned long thread_info_flags);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
add \reg, \reg, t0
|
add \reg, \reg, t0
|
||||||
.endm
|
.endm
|
||||||
.macro XIP_FIXUP_FLASH_OFFSET reg
|
.macro XIP_FIXUP_FLASH_OFFSET reg
|
||||||
la t1, __data_loc
|
la t0, __data_loc
|
||||||
REG_L t1, _xip_phys_offset
|
REG_L t1, _xip_phys_offset
|
||||||
sub \reg, \reg, t1
|
sub \reg, \reg, t1
|
||||||
add \reg, \reg, t0
|
add \reg, \reg, t0
|
||||||
|
@ -424,7 +424,8 @@ void *module_alloc(unsigned long size)
|
|||||||
{
|
{
|
||||||
return __vmalloc_node_range(size, 1, MODULES_VADDR,
|
return __vmalloc_node_range(size, 1, MODULES_VADDR,
|
||||||
MODULES_END, GFP_KERNEL,
|
MODULES_END, GFP_KERNEL,
|
||||||
PAGE_KERNEL, 0, NUMA_NO_NODE,
|
PAGE_KERNEL, VM_FLUSH_RESET_PERMS,
|
||||||
|
NUMA_NO_NODE,
|
||||||
__builtin_return_address(0));
|
__builtin_return_address(0));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
#include <asm/fixmap.h>
|
#include <asm/fixmap.h>
|
||||||
#include <asm/ftrace.h>
|
#include <asm/ftrace.h>
|
||||||
#include <asm/patch.h>
|
#include <asm/patch.h>
|
||||||
|
#include <asm/sections.h>
|
||||||
|
|
||||||
struct patch_insn {
|
struct patch_insn {
|
||||||
void *addr;
|
void *addr;
|
||||||
@ -23,6 +24,14 @@ struct patch_insn {
|
|||||||
int riscv_patch_in_stop_machine = false;
|
int riscv_patch_in_stop_machine = false;
|
||||||
|
|
||||||
#ifdef CONFIG_MMU
|
#ifdef CONFIG_MMU
|
||||||
|
|
||||||
|
static inline bool is_kernel_exittext(uintptr_t addr)
|
||||||
|
{
|
||||||
|
return system_state < SYSTEM_RUNNING &&
|
||||||
|
addr >= (uintptr_t)__exittext_begin &&
|
||||||
|
addr < (uintptr_t)__exittext_end;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The fix_to_virt(, idx) needs a const value (not a dynamic variable of
|
* The fix_to_virt(, idx) needs a const value (not a dynamic variable of
|
||||||
* reg-a0) or BUILD_BUG_ON failed with "idx >= __end_of_fixed_addresses".
|
* reg-a0) or BUILD_BUG_ON failed with "idx >= __end_of_fixed_addresses".
|
||||||
@ -33,7 +42,7 @@ static __always_inline void *patch_map(void *addr, const unsigned int fixmap)
|
|||||||
uintptr_t uintaddr = (uintptr_t) addr;
|
uintptr_t uintaddr = (uintptr_t) addr;
|
||||||
struct page *page;
|
struct page *page;
|
||||||
|
|
||||||
if (core_kernel_text(uintaddr))
|
if (core_kernel_text(uintaddr) || is_kernel_exittext(uintaddr))
|
||||||
page = phys_to_page(__pa_symbol(addr));
|
page = phys_to_page(__pa_symbol(addr));
|
||||||
else if (IS_ENABLED(CONFIG_STRICT_MODULE_RWX))
|
else if (IS_ENABLED(CONFIG_STRICT_MODULE_RWX))
|
||||||
page = vmalloc_to_page(addr);
|
page = vmalloc_to_page(addr);
|
||||||
|
@ -29,10 +29,12 @@ SECTIONS
|
|||||||
HEAD_TEXT_SECTION
|
HEAD_TEXT_SECTION
|
||||||
INIT_TEXT_SECTION(PAGE_SIZE)
|
INIT_TEXT_SECTION(PAGE_SIZE)
|
||||||
/* we have to discard exit text and such at runtime, not link time */
|
/* we have to discard exit text and such at runtime, not link time */
|
||||||
|
__exittext_begin = .;
|
||||||
.exit.text :
|
.exit.text :
|
||||||
{
|
{
|
||||||
EXIT_TEXT
|
EXIT_TEXT
|
||||||
}
|
}
|
||||||
|
__exittext_end = .;
|
||||||
|
|
||||||
.text : {
|
.text : {
|
||||||
_text = .;
|
_text = .;
|
||||||
|
@ -72,10 +72,12 @@ SECTIONS
|
|||||||
__soc_builtin_dtb_table_end = .;
|
__soc_builtin_dtb_table_end = .;
|
||||||
}
|
}
|
||||||
/* we have to discard exit text and such at runtime, not link time */
|
/* we have to discard exit text and such at runtime, not link time */
|
||||||
|
__exittext_begin = .;
|
||||||
.exit.text :
|
.exit.text :
|
||||||
{
|
{
|
||||||
EXIT_TEXT
|
EXIT_TEXT
|
||||||
}
|
}
|
||||||
|
__exittext_end = .;
|
||||||
|
|
||||||
__init_text_end = .;
|
__init_text_end = .;
|
||||||
. = ALIGN(SECTION_ALIGN);
|
. = ALIGN(SECTION_ALIGN);
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
#include <linux/pagewalk.h>
|
#include <linux/pagewalk.h>
|
||||||
#include <linux/pgtable.h>
|
#include <linux/pgtable.h>
|
||||||
|
#include <linux/vmalloc.h>
|
||||||
#include <asm/tlbflush.h>
|
#include <asm/tlbflush.h>
|
||||||
#include <asm/bitops.h>
|
#include <asm/bitops.h>
|
||||||
#include <asm/set_memory.h>
|
#include <asm/set_memory.h>
|
||||||
@ -25,19 +26,6 @@ static unsigned long set_pageattr_masks(unsigned long val, struct mm_walk *walk)
|
|||||||
return new_val;
|
return new_val;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int pageattr_pgd_entry(pgd_t *pgd, unsigned long addr,
|
|
||||||
unsigned long next, struct mm_walk *walk)
|
|
||||||
{
|
|
||||||
pgd_t val = READ_ONCE(*pgd);
|
|
||||||
|
|
||||||
if (pgd_leaf(val)) {
|
|
||||||
val = __pgd(set_pageattr_masks(pgd_val(val), walk));
|
|
||||||
set_pgd(pgd, val);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int pageattr_p4d_entry(p4d_t *p4d, unsigned long addr,
|
static int pageattr_p4d_entry(p4d_t *p4d, unsigned long addr,
|
||||||
unsigned long next, struct mm_walk *walk)
|
unsigned long next, struct mm_walk *walk)
|
||||||
{
|
{
|
||||||
@ -96,7 +84,6 @@ static int pageattr_pte_hole(unsigned long addr, unsigned long next,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static const struct mm_walk_ops pageattr_ops = {
|
static const struct mm_walk_ops pageattr_ops = {
|
||||||
.pgd_entry = pageattr_pgd_entry,
|
|
||||||
.p4d_entry = pageattr_p4d_entry,
|
.p4d_entry = pageattr_p4d_entry,
|
||||||
.pud_entry = pageattr_pud_entry,
|
.pud_entry = pageattr_pud_entry,
|
||||||
.pmd_entry = pageattr_pmd_entry,
|
.pmd_entry = pageattr_pmd_entry,
|
||||||
@ -105,12 +92,181 @@ static const struct mm_walk_ops pageattr_ops = {
|
|||||||
.walk_lock = PGWALK_RDLOCK,
|
.walk_lock = PGWALK_RDLOCK,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifdef CONFIG_64BIT
|
||||||
|
static int __split_linear_mapping_pmd(pud_t *pudp,
|
||||||
|
unsigned long vaddr, unsigned long end)
|
||||||
|
{
|
||||||
|
pmd_t *pmdp;
|
||||||
|
unsigned long next;
|
||||||
|
|
||||||
|
pmdp = pmd_offset(pudp, vaddr);
|
||||||
|
|
||||||
|
do {
|
||||||
|
next = pmd_addr_end(vaddr, end);
|
||||||
|
|
||||||
|
if (next - vaddr >= PMD_SIZE &&
|
||||||
|
vaddr <= (vaddr & PMD_MASK) && end >= next)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (pmd_leaf(*pmdp)) {
|
||||||
|
struct page *pte_page;
|
||||||
|
unsigned long pfn = _pmd_pfn(*pmdp);
|
||||||
|
pgprot_t prot = __pgprot(pmd_val(*pmdp) & ~_PAGE_PFN_MASK);
|
||||||
|
pte_t *ptep_new;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
pte_page = alloc_page(GFP_KERNEL);
|
||||||
|
if (!pte_page)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
ptep_new = (pte_t *)page_address(pte_page);
|
||||||
|
for (i = 0; i < PTRS_PER_PTE; ++i, ++ptep_new)
|
||||||
|
set_pte(ptep_new, pfn_pte(pfn + i, prot));
|
||||||
|
|
||||||
|
smp_wmb();
|
||||||
|
|
||||||
|
set_pmd(pmdp, pfn_pmd(page_to_pfn(pte_page), PAGE_TABLE));
|
||||||
|
}
|
||||||
|
} while (pmdp++, vaddr = next, vaddr != end);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int __split_linear_mapping_pud(p4d_t *p4dp,
|
||||||
|
unsigned long vaddr, unsigned long end)
|
||||||
|
{
|
||||||
|
pud_t *pudp;
|
||||||
|
unsigned long next;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
pudp = pud_offset(p4dp, vaddr);
|
||||||
|
|
||||||
|
do {
|
||||||
|
next = pud_addr_end(vaddr, end);
|
||||||
|
|
||||||
|
if (next - vaddr >= PUD_SIZE &&
|
||||||
|
vaddr <= (vaddr & PUD_MASK) && end >= next)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (pud_leaf(*pudp)) {
|
||||||
|
struct page *pmd_page;
|
||||||
|
unsigned long pfn = _pud_pfn(*pudp);
|
||||||
|
pgprot_t prot = __pgprot(pud_val(*pudp) & ~_PAGE_PFN_MASK);
|
||||||
|
pmd_t *pmdp_new;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
pmd_page = alloc_page(GFP_KERNEL);
|
||||||
|
if (!pmd_page)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
pmdp_new = (pmd_t *)page_address(pmd_page);
|
||||||
|
for (i = 0; i < PTRS_PER_PMD; ++i, ++pmdp_new)
|
||||||
|
set_pmd(pmdp_new,
|
||||||
|
pfn_pmd(pfn + ((i * PMD_SIZE) >> PAGE_SHIFT), prot));
|
||||||
|
|
||||||
|
smp_wmb();
|
||||||
|
|
||||||
|
set_pud(pudp, pfn_pud(page_to_pfn(pmd_page), PAGE_TABLE));
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = __split_linear_mapping_pmd(pudp, vaddr, next);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
} while (pudp++, vaddr = next, vaddr != end);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int __split_linear_mapping_p4d(pgd_t *pgdp,
|
||||||
|
unsigned long vaddr, unsigned long end)
|
||||||
|
{
|
||||||
|
p4d_t *p4dp;
|
||||||
|
unsigned long next;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
p4dp = p4d_offset(pgdp, vaddr);
|
||||||
|
|
||||||
|
do {
|
||||||
|
next = p4d_addr_end(vaddr, end);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If [vaddr; end] contains [vaddr & P4D_MASK; next], we don't
|
||||||
|
* need to split, we'll change the protections on the whole P4D.
|
||||||
|
*/
|
||||||
|
if (next - vaddr >= P4D_SIZE &&
|
||||||
|
vaddr <= (vaddr & P4D_MASK) && end >= next)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (p4d_leaf(*p4dp)) {
|
||||||
|
struct page *pud_page;
|
||||||
|
unsigned long pfn = _p4d_pfn(*p4dp);
|
||||||
|
pgprot_t prot = __pgprot(p4d_val(*p4dp) & ~_PAGE_PFN_MASK);
|
||||||
|
pud_t *pudp_new;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
pud_page = alloc_page(GFP_KERNEL);
|
||||||
|
if (!pud_page)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Fill the pud level with leaf puds that have the same
|
||||||
|
* protections as the leaf p4d.
|
||||||
|
*/
|
||||||
|
pudp_new = (pud_t *)page_address(pud_page);
|
||||||
|
for (i = 0; i < PTRS_PER_PUD; ++i, ++pudp_new)
|
||||||
|
set_pud(pudp_new,
|
||||||
|
pfn_pud(pfn + ((i * PUD_SIZE) >> PAGE_SHIFT), prot));
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Make sure the pud filling is not reordered with the
|
||||||
|
* p4d store which could result in seeing a partially
|
||||||
|
* filled pud level.
|
||||||
|
*/
|
||||||
|
smp_wmb();
|
||||||
|
|
||||||
|
set_p4d(p4dp, pfn_p4d(page_to_pfn(pud_page), PAGE_TABLE));
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = __split_linear_mapping_pud(p4dp, vaddr, next);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
} while (p4dp++, vaddr = next, vaddr != end);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int __split_linear_mapping_pgd(pgd_t *pgdp,
|
||||||
|
unsigned long vaddr,
|
||||||
|
unsigned long end)
|
||||||
|
{
|
||||||
|
unsigned long next;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
do {
|
||||||
|
next = pgd_addr_end(vaddr, end);
|
||||||
|
/* We never use PGD mappings for the linear mapping */
|
||||||
|
ret = __split_linear_mapping_p4d(pgdp, vaddr, next);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
} while (pgdp++, vaddr = next, vaddr != end);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int split_linear_mapping(unsigned long start, unsigned long end)
|
||||||
|
{
|
||||||
|
return __split_linear_mapping_pgd(pgd_offset_k(start), start, end);
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_64BIT */
|
||||||
|
|
||||||
static int __set_memory(unsigned long addr, int numpages, pgprot_t set_mask,
|
static int __set_memory(unsigned long addr, int numpages, pgprot_t set_mask,
|
||||||
pgprot_t clear_mask)
|
pgprot_t clear_mask)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
unsigned long start = addr;
|
unsigned long start = addr;
|
||||||
unsigned long end = start + PAGE_SIZE * numpages;
|
unsigned long end = start + PAGE_SIZE * numpages;
|
||||||
|
unsigned long __maybe_unused lm_start;
|
||||||
|
unsigned long __maybe_unused lm_end;
|
||||||
struct pageattr_masks masks = {
|
struct pageattr_masks masks = {
|
||||||
.set_mask = set_mask,
|
.set_mask = set_mask,
|
||||||
.clear_mask = clear_mask
|
.clear_mask = clear_mask
|
||||||
@ -120,11 +276,72 @@ static int __set_memory(unsigned long addr, int numpages, pgprot_t set_mask,
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
mmap_write_lock(&init_mm);
|
mmap_write_lock(&init_mm);
|
||||||
|
|
||||||
|
#ifdef CONFIG_64BIT
|
||||||
|
/*
|
||||||
|
* We are about to change the permissions of a kernel mapping, we must
|
||||||
|
* apply the same changes to its linear mapping alias, which may imply
|
||||||
|
* splitting a huge mapping.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (is_vmalloc_or_module_addr((void *)start)) {
|
||||||
|
struct vm_struct *area = NULL;
|
||||||
|
int i, page_start;
|
||||||
|
|
||||||
|
area = find_vm_area((void *)start);
|
||||||
|
page_start = (start - (unsigned long)area->addr) >> PAGE_SHIFT;
|
||||||
|
|
||||||
|
for (i = page_start; i < page_start + numpages; ++i) {
|
||||||
|
lm_start = (unsigned long)page_address(area->pages[i]);
|
||||||
|
lm_end = lm_start + PAGE_SIZE;
|
||||||
|
|
||||||
|
ret = split_linear_mapping(lm_start, lm_end);
|
||||||
|
if (ret)
|
||||||
|
goto unlock;
|
||||||
|
|
||||||
|
ret = walk_page_range_novma(&init_mm, lm_start, lm_end,
|
||||||
|
&pageattr_ops, NULL, &masks);
|
||||||
|
if (ret)
|
||||||
|
goto unlock;
|
||||||
|
}
|
||||||
|
} else if (is_kernel_mapping(start) || is_linear_mapping(start)) {
|
||||||
|
if (is_kernel_mapping(start)) {
|
||||||
|
lm_start = (unsigned long)lm_alias(start);
|
||||||
|
lm_end = (unsigned long)lm_alias(end);
|
||||||
|
} else {
|
||||||
|
lm_start = start;
|
||||||
|
lm_end = end;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = split_linear_mapping(lm_start, lm_end);
|
||||||
|
if (ret)
|
||||||
|
goto unlock;
|
||||||
|
|
||||||
|
ret = walk_page_range_novma(&init_mm, lm_start, lm_end,
|
||||||
|
&pageattr_ops, NULL, &masks);
|
||||||
|
if (ret)
|
||||||
|
goto unlock;
|
||||||
|
}
|
||||||
|
|
||||||
ret = walk_page_range_novma(&init_mm, start, end, &pageattr_ops, NULL,
|
ret = walk_page_range_novma(&init_mm, start, end, &pageattr_ops, NULL,
|
||||||
&masks);
|
&masks);
|
||||||
|
|
||||||
|
unlock:
|
||||||
|
mmap_write_unlock(&init_mm);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We can't use flush_tlb_kernel_range() here as we may have split a
|
||||||
|
* hugepage that is larger than that, so let's flush everything.
|
||||||
|
*/
|
||||||
|
flush_tlb_all();
|
||||||
|
#else
|
||||||
|
ret = walk_page_range_novma(&init_mm, start, end, &pageattr_ops, NULL,
|
||||||
|
&masks);
|
||||||
|
|
||||||
mmap_write_unlock(&init_mm);
|
mmap_write_unlock(&init_mm);
|
||||||
|
|
||||||
flush_tlb_kernel_range(start, end);
|
flush_tlb_kernel_range(start, end);
|
||||||
|
#endif
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -159,36 +376,14 @@ int set_memory_nx(unsigned long addr, int numpages)
|
|||||||
|
|
||||||
int set_direct_map_invalid_noflush(struct page *page)
|
int set_direct_map_invalid_noflush(struct page *page)
|
||||||
{
|
{
|
||||||
int ret;
|
return __set_memory((unsigned long)page_address(page), 1,
|
||||||
unsigned long start = (unsigned long)page_address(page);
|
__pgprot(0), __pgprot(_PAGE_PRESENT));
|
||||||
unsigned long end = start + PAGE_SIZE;
|
|
||||||
struct pageattr_masks masks = {
|
|
||||||
.set_mask = __pgprot(0),
|
|
||||||
.clear_mask = __pgprot(_PAGE_PRESENT)
|
|
||||||
};
|
|
||||||
|
|
||||||
mmap_read_lock(&init_mm);
|
|
||||||
ret = walk_page_range(&init_mm, start, end, &pageattr_ops, &masks);
|
|
||||||
mmap_read_unlock(&init_mm);
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int set_direct_map_default_noflush(struct page *page)
|
int set_direct_map_default_noflush(struct page *page)
|
||||||
{
|
{
|
||||||
int ret;
|
return __set_memory((unsigned long)page_address(page), 1,
|
||||||
unsigned long start = (unsigned long)page_address(page);
|
PAGE_KERNEL, __pgprot(_PAGE_EXEC));
|
||||||
unsigned long end = start + PAGE_SIZE;
|
|
||||||
struct pageattr_masks masks = {
|
|
||||||
.set_mask = PAGE_KERNEL,
|
|
||||||
.clear_mask = __pgprot(0)
|
|
||||||
};
|
|
||||||
|
|
||||||
mmap_read_lock(&init_mm);
|
|
||||||
ret = walk_page_range(&init_mm, start, end, &pageattr_ops, &masks);
|
|
||||||
mmap_read_unlock(&init_mm);
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_DEBUG_PAGEALLOC
|
#ifdef CONFIG_DEBUG_PAGEALLOC
|
||||||
|
@ -79,7 +79,7 @@ static inline int test_fp_ctl(u32 fpc)
|
|||||||
#define KERNEL_VXR_HIGH (KERNEL_VXR_V16V23|KERNEL_VXR_V24V31)
|
#define KERNEL_VXR_HIGH (KERNEL_VXR_V16V23|KERNEL_VXR_V24V31)
|
||||||
|
|
||||||
#define KERNEL_VXR (KERNEL_VXR_LOW|KERNEL_VXR_HIGH)
|
#define KERNEL_VXR (KERNEL_VXR_LOW|KERNEL_VXR_HIGH)
|
||||||
#define KERNEL_FPR (KERNEL_FPC|KERNEL_VXR_V0V7)
|
#define KERNEL_FPR (KERNEL_FPC|KERNEL_VXR_LOW)
|
||||||
|
|
||||||
struct kernel_fpu;
|
struct kernel_fpu;
|
||||||
|
|
||||||
|
@ -11,6 +11,8 @@
|
|||||||
/* I/O size constraints */
|
/* I/O size constraints */
|
||||||
#define ZPCI_MAX_READ_SIZE 8
|
#define ZPCI_MAX_READ_SIZE 8
|
||||||
#define ZPCI_MAX_WRITE_SIZE 128
|
#define ZPCI_MAX_WRITE_SIZE 128
|
||||||
|
#define ZPCI_BOUNDARY_SIZE (1 << 12)
|
||||||
|
#define ZPCI_BOUNDARY_MASK (ZPCI_BOUNDARY_SIZE - 1)
|
||||||
|
|
||||||
/* I/O Map */
|
/* I/O Map */
|
||||||
#define ZPCI_IOMAP_SHIFT 48
|
#define ZPCI_IOMAP_SHIFT 48
|
||||||
@ -125,16 +127,18 @@ static inline int zpci_read_single(void *dst, const volatile void __iomem *src,
|
|||||||
int zpci_write_block(volatile void __iomem *dst, const void *src,
|
int zpci_write_block(volatile void __iomem *dst, const void *src,
|
||||||
unsigned long len);
|
unsigned long len);
|
||||||
|
|
||||||
static inline u8 zpci_get_max_write_size(u64 src, u64 dst, int len, int max)
|
static inline int zpci_get_max_io_size(u64 src, u64 dst, int len, int max)
|
||||||
{
|
{
|
||||||
int count = len > max ? max : len, size = 1;
|
int offset = dst & ZPCI_BOUNDARY_MASK;
|
||||||
|
int size;
|
||||||
|
|
||||||
while (!(src & 0x1) && !(dst & 0x1) && ((size << 1) <= count)) {
|
size = min3(len, ZPCI_BOUNDARY_SIZE - offset, max);
|
||||||
dst = dst >> 1;
|
if (IS_ALIGNED(src, 8) && IS_ALIGNED(dst, 8) && IS_ALIGNED(size, 8))
|
||||||
src = src >> 1;
|
return size;
|
||||||
size = size << 1;
|
|
||||||
}
|
if (size >= 8)
|
||||||
return size;
|
return 8;
|
||||||
|
return rounddown_pow_of_two(size);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int zpci_memcpy_fromio(void *dst,
|
static inline int zpci_memcpy_fromio(void *dst,
|
||||||
@ -144,9 +148,9 @@ static inline int zpci_memcpy_fromio(void *dst,
|
|||||||
int size, rc = 0;
|
int size, rc = 0;
|
||||||
|
|
||||||
while (n > 0) {
|
while (n > 0) {
|
||||||
size = zpci_get_max_write_size((u64 __force) src,
|
size = zpci_get_max_io_size((u64 __force) src,
|
||||||
(u64) dst, n,
|
(u64) dst, n,
|
||||||
ZPCI_MAX_READ_SIZE);
|
ZPCI_MAX_READ_SIZE);
|
||||||
rc = zpci_read_single(dst, src, size);
|
rc = zpci_read_single(dst, src, size);
|
||||||
if (rc)
|
if (rc)
|
||||||
break;
|
break;
|
||||||
@ -166,9 +170,9 @@ static inline int zpci_memcpy_toio(volatile void __iomem *dst,
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
while (n > 0) {
|
while (n > 0) {
|
||||||
size = zpci_get_max_write_size((u64 __force) dst,
|
size = zpci_get_max_io_size((u64 __force) dst,
|
||||||
(u64) src, n,
|
(u64) src, n,
|
||||||
ZPCI_MAX_WRITE_SIZE);
|
ZPCI_MAX_WRITE_SIZE);
|
||||||
if (size > 8) /* main path */
|
if (size > 8) /* main path */
|
||||||
rc = zpci_write_block(dst, src, size);
|
rc = zpci_write_block(dst, src, size);
|
||||||
else
|
else
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
/*
|
/*
|
||||||
* Performance event support for s390x - CPU-measurement Counter Facility
|
* Performance event support for s390x - CPU-measurement Counter Facility
|
||||||
*
|
*
|
||||||
* Copyright IBM Corp. 2012, 2021
|
* Copyright IBM Corp. 2012, 2022
|
||||||
* Author(s): Hendrik Brueckner <brueckner@linux.ibm.com>
|
* Author(s): Hendrik Brueckner <brueckner@linux.ibm.com>
|
||||||
* Thomas Richter <tmricht@linux.ibm.com>
|
* Thomas Richter <tmricht@linux.ibm.com>
|
||||||
*/
|
*/
|
||||||
@ -434,6 +434,12 @@ static void cpumf_hw_inuse(void)
|
|||||||
mutex_unlock(&pmc_reserve_mutex);
|
mutex_unlock(&pmc_reserve_mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int is_userspace_event(u64 ev)
|
||||||
|
{
|
||||||
|
return cpumf_generic_events_user[PERF_COUNT_HW_CPU_CYCLES] == ev ||
|
||||||
|
cpumf_generic_events_user[PERF_COUNT_HW_INSTRUCTIONS] == ev;
|
||||||
|
}
|
||||||
|
|
||||||
static int __hw_perf_event_init(struct perf_event *event, unsigned int type)
|
static int __hw_perf_event_init(struct perf_event *event, unsigned int type)
|
||||||
{
|
{
|
||||||
struct perf_event_attr *attr = &event->attr;
|
struct perf_event_attr *attr = &event->attr;
|
||||||
@ -456,19 +462,26 @@ static int __hw_perf_event_init(struct perf_event *event, unsigned int type)
|
|||||||
if (is_sampling_event(event)) /* No sampling support */
|
if (is_sampling_event(event)) /* No sampling support */
|
||||||
return -ENOENT;
|
return -ENOENT;
|
||||||
ev = attr->config;
|
ev = attr->config;
|
||||||
/* Count user space (problem-state) only */
|
|
||||||
if (!attr->exclude_user && attr->exclude_kernel) {
|
if (!attr->exclude_user && attr->exclude_kernel) {
|
||||||
if (ev >= ARRAY_SIZE(cpumf_generic_events_user))
|
/*
|
||||||
return -EOPNOTSUPP;
|
* Count user space (problem-state) only
|
||||||
ev = cpumf_generic_events_user[ev];
|
* Handle events 32 and 33 as 0:u and 1:u
|
||||||
|
*/
|
||||||
/* No support for kernel space counters only */
|
if (!is_userspace_event(ev)) {
|
||||||
|
if (ev >= ARRAY_SIZE(cpumf_generic_events_user))
|
||||||
|
return -EOPNOTSUPP;
|
||||||
|
ev = cpumf_generic_events_user[ev];
|
||||||
|
}
|
||||||
} else if (!attr->exclude_kernel && attr->exclude_user) {
|
} else if (!attr->exclude_kernel && attr->exclude_user) {
|
||||||
|
/* No support for kernel space counters only */
|
||||||
return -EOPNOTSUPP;
|
return -EOPNOTSUPP;
|
||||||
} else { /* Count user and kernel space */
|
} else {
|
||||||
if (ev >= ARRAY_SIZE(cpumf_generic_events_basic))
|
/* Count user and kernel space, incl. events 32 + 33 */
|
||||||
return -EOPNOTSUPP;
|
if (!is_userspace_event(ev)) {
|
||||||
ev = cpumf_generic_events_basic[ev];
|
if (ev >= ARRAY_SIZE(cpumf_generic_events_basic))
|
||||||
|
return -EOPNOTSUPP;
|
||||||
|
ev = cpumf_generic_events_basic[ev];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
#include <linux/list.h>
|
#include <linux/list.h>
|
||||||
#include <linux/hugetlb.h>
|
#include <linux/hugetlb.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
|
#include <asm/page-states.h>
|
||||||
#include <asm/cacheflush.h>
|
#include <asm/cacheflush.h>
|
||||||
#include <asm/nospec-branch.h>
|
#include <asm/nospec-branch.h>
|
||||||
#include <asm/pgalloc.h>
|
#include <asm/pgalloc.h>
|
||||||
@ -44,8 +45,11 @@ void *vmem_crst_alloc(unsigned long val)
|
|||||||
unsigned long *table;
|
unsigned long *table;
|
||||||
|
|
||||||
table = vmem_alloc_pages(CRST_ALLOC_ORDER);
|
table = vmem_alloc_pages(CRST_ALLOC_ORDER);
|
||||||
if (table)
|
if (!table)
|
||||||
crst_table_init(table, val);
|
return NULL;
|
||||||
|
crst_table_init(table, val);
|
||||||
|
if (slab_is_available())
|
||||||
|
arch_set_page_dat(virt_to_page(table), CRST_ALLOC_ORDER);
|
||||||
return table;
|
return table;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -97,9 +97,9 @@ static inline int __memcpy_toio_inuser(void __iomem *dst,
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
while (n > 0) {
|
while (n > 0) {
|
||||||
size = zpci_get_max_write_size((u64 __force) dst,
|
size = zpci_get_max_io_size((u64 __force) dst,
|
||||||
(u64 __force) src, n,
|
(u64 __force) src, n,
|
||||||
ZPCI_MAX_WRITE_SIZE);
|
ZPCI_MAX_WRITE_SIZE);
|
||||||
if (size > 8) /* main path */
|
if (size > 8) /* main path */
|
||||||
rc = __pcistb_mio_inuser(dst, src, size, &status);
|
rc = __pcistb_mio_inuser(dst, src, size, &status);
|
||||||
else
|
else
|
||||||
@ -242,9 +242,9 @@ static inline int __memcpy_fromio_inuser(void __user *dst,
|
|||||||
u8 status;
|
u8 status;
|
||||||
|
|
||||||
while (n > 0) {
|
while (n > 0) {
|
||||||
size = zpci_get_max_write_size((u64 __force) src,
|
size = zpci_get_max_io_size((u64 __force) src,
|
||||||
(u64 __force) dst, n,
|
(u64 __force) dst, n,
|
||||||
ZPCI_MAX_READ_SIZE);
|
ZPCI_MAX_READ_SIZE);
|
||||||
rc = __pcilg_mio_inuser(dst, src, size, &status);
|
rc = __pcilg_mio_inuser(dst, src, size, &status);
|
||||||
if (rc)
|
if (rc)
|
||||||
break;
|
break;
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user