Merge pull request #416 from zandrey/5.4-2.3.x-imx
Update 5.4-2.3.x-imx up to v5.4.141
This commit is contained in:
commit
a5b253b55d
|
@ -45,14 +45,24 @@ how the user addresses are used by the kernel:
|
|||
|
||||
1. User addresses not accessed by the kernel but used for address space
|
||||
management (e.g. ``mprotect()``, ``madvise()``). The use of valid
|
||||
tagged pointers in this context is allowed with the exception of
|
||||
``brk()``, ``mmap()`` and the ``new_address`` argument to
|
||||
``mremap()`` as these have the potential to alias with existing
|
||||
user addresses.
|
||||
tagged pointers in this context is allowed with these exceptions:
|
||||
|
||||
NOTE: This behaviour changed in v5.6 and so some earlier kernels may
|
||||
incorrectly accept valid tagged pointers for the ``brk()``,
|
||||
``mmap()`` and ``mremap()`` system calls.
|
||||
- ``brk()``, ``mmap()`` and the ``new_address`` argument to
|
||||
``mremap()`` as these have the potential to alias with existing
|
||||
user addresses.
|
||||
|
||||
NOTE: This behaviour changed in v5.6 and so some earlier kernels may
|
||||
incorrectly accept valid tagged pointers for the ``brk()``,
|
||||
``mmap()`` and ``mremap()`` system calls.
|
||||
|
||||
- The ``range.start``, ``start`` and ``dst`` arguments to the
|
||||
``UFFDIO_*`` ``ioctl()``s used on a file descriptor obtained from
|
||||
``userfaultfd()``, as fault addresses subsequently obtained by reading
|
||||
the file descriptor will be untagged, which may otherwise confuse
|
||||
tag-unaware programs.
|
||||
|
||||
NOTE: This behaviour changed in v5.14 and so some earlier kernels may
|
||||
incorrectly accept valid tagged pointers for this system call.
|
||||
|
||||
2. User addresses accessed by the kernel (e.g. ``write()``). This ABI
|
||||
relaxation is disabled by default and the application thread needs to
|
||||
|
|
|
@ -191,7 +191,7 @@ Documentation written by Tom Zanussi
|
|||
with the event, in nanoseconds. May be
|
||||
modified by .usecs to have timestamps
|
||||
interpreted as microseconds.
|
||||
cpu int the cpu on which the event occurred.
|
||||
common_cpu int the cpu on which the event occurred.
|
||||
====================== ==== =======================================
|
||||
|
||||
Extended error information
|
||||
|
|
|
@ -152,8 +152,8 @@ Shadow pages contain the following information:
|
|||
shadow pages) so role.quadrant takes values in the range 0..3. Each
|
||||
quadrant maps 1GB virtual address space.
|
||||
role.access:
|
||||
Inherited guest access permissions in the form uwx. Note execute
|
||||
permission is positive, not negative.
|
||||
Inherited guest access permissions from the parent ptes in the form uwx.
|
||||
Note execute permission is positive, not negative.
|
||||
role.invalid:
|
||||
The page is invalid and should not be used. It is a root page that is
|
||||
currently pinned (by a cpu hardware register pointing to it); once it is
|
||||
|
|
2
Makefile
2
Makefile
|
@ -1,7 +1,7 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
VERSION = 5
|
||||
PATCHLEVEL = 4
|
||||
SUBLEVEL = 134
|
||||
SUBLEVEL = 141
|
||||
EXTRAVERSION =
|
||||
NAME = Kleptomaniac Octopus
|
||||
|
||||
|
|
|
@ -585,7 +585,7 @@ void
|
|||
smp_send_stop(void)
|
||||
{
|
||||
cpumask_t to_whom;
|
||||
cpumask_copy(&to_whom, cpu_possible_mask);
|
||||
cpumask_copy(&to_whom, cpu_online_mask);
|
||||
cpumask_clear_cpu(smp_processor_id(), &to_whom);
|
||||
#ifdef DEBUG_IPI_MSG
|
||||
if (hard_smp_processor_id() != boot_cpu_id)
|
||||
|
|
|
@ -829,11 +829,14 @@
|
|||
status = "okay";
|
||||
};
|
||||
|
||||
&gpio5_target {
|
||||
ti,no-reset-on-init;
|
||||
};
|
||||
|
||||
&gpio5 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&display_mux_pins>;
|
||||
status = "okay";
|
||||
ti,no-reset-on-init;
|
||||
|
||||
p8 {
|
||||
/*
|
||||
|
|
|
@ -1611,7 +1611,7 @@
|
|||
compatible = "ti,am4372-d_can", "ti,am3352-d_can";
|
||||
reg = <0x0 0x2000>;
|
||||
clocks = <&dcan1_fck>;
|
||||
clock-name = "fck";
|
||||
clock-names = "fck";
|
||||
syscon-raminit = <&scm_conf 0x644 1>;
|
||||
interrupts = <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>;
|
||||
status = "disabled";
|
||||
|
@ -2077,7 +2077,7 @@
|
|||
};
|
||||
};
|
||||
|
||||
target-module@22000 { /* 0x48322000, ap 116 64.0 */
|
||||
gpio5_target: target-module@22000 { /* 0x48322000, ap 116 64.0 */
|
||||
compatible = "ti,sysc-omap2", "ti,sysc";
|
||||
ti,hwmods = "gpio6";
|
||||
reg = <0x22000 0x4>,
|
||||
|
|
|
@ -611,12 +611,11 @@
|
|||
>;
|
||||
};
|
||||
|
||||
&gpio3 {
|
||||
status = "okay";
|
||||
&gpio3_target {
|
||||
ti,no-reset-on-init;
|
||||
};
|
||||
|
||||
&gpio2 {
|
||||
&gpio2_target {
|
||||
status = "okay";
|
||||
ti,no-reset-on-init;
|
||||
};
|
||||
|
|
|
@ -460,7 +460,7 @@
|
|||
status = "disabled";
|
||||
};
|
||||
|
||||
nand: nand@18046000 {
|
||||
nand_controller: nand-controller@18046000 {
|
||||
compatible = "brcm,nand-iproc", "brcm,brcmnand-v6.1";
|
||||
reg = <0x18046000 0x600>, <0xf8105408 0x600>,
|
||||
<0x18046f00 0x20>;
|
||||
|
|
|
@ -179,7 +179,7 @@
|
|||
status = "disabled";
|
||||
};
|
||||
|
||||
nand: nand@26000 {
|
||||
nand_controller: nand-controller@26000 {
|
||||
compatible = "brcm,nand-iproc", "brcm,brcmnand-v6.1";
|
||||
reg = <0x26000 0x600>,
|
||||
<0x11b408 0x600>,
|
||||
|
|
|
@ -267,7 +267,7 @@
|
|||
dma-coherent;
|
||||
};
|
||||
|
||||
nand: nand@26000 {
|
||||
nand_controller: nand-controller@26000 {
|
||||
compatible = "brcm,nand-iproc", "brcm,brcmnand-v6.1";
|
||||
reg = <0x026000 0x600>,
|
||||
<0x11b408 0x600>,
|
||||
|
|
|
@ -203,7 +203,7 @@
|
|||
status = "disabled";
|
||||
};
|
||||
|
||||
nand: nand@2000 {
|
||||
nand_controller: nand-controller@2000 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
compatible = "brcm,nand-bcm63138", "brcm,brcmnand-v7.0", "brcm,brcmnand";
|
||||
|
|
|
@ -14,10 +14,10 @@
|
|||
};
|
||||
};
|
||||
|
||||
&nand {
|
||||
&nand_controller {
|
||||
status = "okay";
|
||||
|
||||
nandcs@1 {
|
||||
nand@1 {
|
||||
compatible = "brcm,nandcs";
|
||||
reg = <1>;
|
||||
nand-ecc-step-size = <512>;
|
||||
|
|
|
@ -148,7 +148,7 @@
|
|||
reg-names = "aon-ctrl", "aon-sram";
|
||||
};
|
||||
|
||||
nand: nand@3e2800 {
|
||||
nand_controller: nand-controller@3e2800 {
|
||||
status = "disabled";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
|
|
@ -82,8 +82,8 @@
|
|||
status = "okay";
|
||||
};
|
||||
|
||||
&nand {
|
||||
nandcs@1 {
|
||||
&nand_controller {
|
||||
nand@1 {
|
||||
compatible = "brcm,nandcs";
|
||||
reg = <0>;
|
||||
nand-on-flash-bbt;
|
||||
|
|
|
@ -60,8 +60,8 @@
|
|||
status = "okay";
|
||||
};
|
||||
|
||||
&nand {
|
||||
nandcs@1 {
|
||||
&nand_controller {
|
||||
nand@1 {
|
||||
compatible = "brcm,nandcs";
|
||||
reg = <0>;
|
||||
nand-on-flash-bbt;
|
||||
|
|
|
@ -68,8 +68,8 @@
|
|||
status = "okay";
|
||||
};
|
||||
|
||||
&nand {
|
||||
nandcs@1 {
|
||||
&nand_controller {
|
||||
nand@1 {
|
||||
compatible = "brcm,nandcs";
|
||||
reg = <0>;
|
||||
nand-on-flash-bbt;
|
||||
|
|
|
@ -70,8 +70,8 @@
|
|||
status = "okay";
|
||||
};
|
||||
|
||||
&nand {
|
||||
nandcs@0 {
|
||||
&nand_controller {
|
||||
nand@0 {
|
||||
compatible = "brcm,nandcs";
|
||||
reg = <0>;
|
||||
nand-on-flash-bbt;
|
||||
|
|
|
@ -70,8 +70,8 @@
|
|||
status = "okay";
|
||||
};
|
||||
|
||||
&nand {
|
||||
nandcs@0 {
|
||||
&nand_controller {
|
||||
nand@0 {
|
||||
compatible = "brcm,nandcs";
|
||||
reg = <0>;
|
||||
nand-on-flash-bbt;
|
||||
|
|
|
@ -86,8 +86,8 @@
|
|||
};
|
||||
};
|
||||
|
||||
&nand {
|
||||
nandcs@0 {
|
||||
&nand_controller {
|
||||
nand@0 {
|
||||
compatible = "brcm,nandcs";
|
||||
reg = <0>;
|
||||
nand-on-flash-bbt;
|
||||
|
|
|
@ -74,8 +74,8 @@
|
|||
status = "okay";
|
||||
};
|
||||
|
||||
&nand {
|
||||
nandcs@0 {
|
||||
&nand_controller {
|
||||
nand@0 {
|
||||
compatible = "brcm,nandcs";
|
||||
reg = <0>;
|
||||
nand-on-flash-bbt;
|
||||
|
|
|
@ -74,8 +74,8 @@
|
|||
status = "okay";
|
||||
};
|
||||
|
||||
&nand {
|
||||
nandcs@0 {
|
||||
&nand_controller {
|
||||
nand@0 {
|
||||
compatible = "brcm,nandcs";
|
||||
reg = <0>;
|
||||
nand-on-flash-bbt;
|
||||
|
|
|
@ -90,8 +90,8 @@
|
|||
status = "okay";
|
||||
};
|
||||
|
||||
&nand {
|
||||
nandcs@0 {
|
||||
&nand_controller {
|
||||
nand@0 {
|
||||
compatible = "brcm,nandcs";
|
||||
reg = <0>;
|
||||
nand-on-flash-bbt;
|
||||
|
|
|
@ -64,8 +64,8 @@
|
|||
status = "okay";
|
||||
};
|
||||
|
||||
&nand {
|
||||
nandcs@0 {
|
||||
&nand_controller {
|
||||
nand@0 {
|
||||
compatible = "brcm,nandcs";
|
||||
reg = <0>;
|
||||
nand-on-flash-bbt;
|
||||
|
|
|
@ -31,10 +31,10 @@
|
|||
status = "okay";
|
||||
};
|
||||
|
||||
&nand {
|
||||
&nand_controller {
|
||||
status = "okay";
|
||||
|
||||
nandcs@0 {
|
||||
nand@0 {
|
||||
compatible = "brcm,nandcs";
|
||||
reg = <0>;
|
||||
nand-ecc-strength = <4>;
|
||||
|
|
|
@ -74,8 +74,8 @@
|
|||
status = "okay";
|
||||
};
|
||||
|
||||
&nand {
|
||||
nandcs@0 {
|
||||
&nand_controller {
|
||||
nand@0 {
|
||||
compatible = "brcm,nandcs";
|
||||
reg = <0>;
|
||||
nand-on-flash-bbt;
|
||||
|
|
|
@ -1326,7 +1326,7 @@
|
|||
};
|
||||
};
|
||||
|
||||
target-module@55000 { /* 0x48055000, ap 13 0e.0 */
|
||||
gpio2_target: target-module@55000 { /* 0x48055000, ap 13 0e.0 */
|
||||
compatible = "ti,sysc-omap2", "ti,sysc";
|
||||
reg = <0x55000 0x4>,
|
||||
<0x55010 0x4>,
|
||||
|
@ -1359,7 +1359,7 @@
|
|||
};
|
||||
};
|
||||
|
||||
target-module@57000 { /* 0x48057000, ap 15 06.0 */
|
||||
gpio3_target: target-module@57000 { /* 0x48057000, ap 15 06.0 */
|
||||
compatible = "ti,sysc-omap2", "ti,sysc";
|
||||
reg = <0x57000 0x4>,
|
||||
<0x57010 0x4>,
|
||||
|
|
|
@ -140,7 +140,7 @@
|
|||
};
|
||||
};
|
||||
|
||||
mdio0: ethernet-phy {
|
||||
mdio0: mdio {
|
||||
compatible = "virtual,mdio-gpio";
|
||||
/* Uses MDC and MDIO */
|
||||
gpios = <&gpio0 22 GPIO_ACTIVE_HIGH>, /* MDC */
|
||||
|
|
|
@ -62,7 +62,7 @@
|
|||
};
|
||||
};
|
||||
|
||||
mdio0: ethernet-phy {
|
||||
mdio0: mdio {
|
||||
compatible = "virtual,mdio-gpio";
|
||||
gpios = <&gpio0 22 GPIO_ACTIVE_HIGH>, /* MDC */
|
||||
<&gpio0 21 GPIO_ACTIVE_HIGH>; /* MDIO */
|
||||
|
|
|
@ -56,7 +56,7 @@
|
|||
};
|
||||
};
|
||||
|
||||
mdio0: ethernet-phy {
|
||||
mdio0: mdio {
|
||||
compatible = "virtual,mdio-gpio";
|
||||
gpios = <&gpio0 22 GPIO_ACTIVE_HIGH>, /* MDC */
|
||||
<&gpio0 21 GPIO_ACTIVE_HIGH>; /* MDIO */
|
||||
|
|
|
@ -68,7 +68,7 @@
|
|||
};
|
||||
};
|
||||
|
||||
mdio0: ethernet-phy {
|
||||
mdio0: mdio {
|
||||
compatible = "virtual,mdio-gpio";
|
||||
gpios = <&gpio0 22 GPIO_ACTIVE_HIGH>, /* MDC */
|
||||
<&gpio0 21 GPIO_ACTIVE_HIGH>; /* MDIO */
|
||||
|
|
|
@ -67,7 +67,7 @@
|
|||
};
|
||||
};
|
||||
|
||||
mdio0: ethernet-phy {
|
||||
mdio0: mdio {
|
||||
compatible = "virtual,mdio-gpio";
|
||||
gpios = <&gpio0 22 GPIO_ACTIVE_HIGH>, /* MDC */
|
||||
<&gpio0 21 GPIO_ACTIVE_HIGH>; /* MDIO */
|
||||
|
|
|
@ -286,6 +286,7 @@
|
|||
clock-names = "PCLK", "PCICLK";
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pci_default_pins>;
|
||||
device_type = "pci";
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
#interrupt-cells = <1>;
|
||||
|
|
|
@ -388,13 +388,13 @@
|
|||
|
||||
pinctrl_power_button: powerbutgrp {
|
||||
fsl,pins = <
|
||||
MX53_PAD_SD2_DATA2__GPIO1_13 0x1e4
|
||||
MX53_PAD_SD2_DATA0__GPIO1_15 0x1e4
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_power_out: poweroutgrp {
|
||||
fsl,pins = <
|
||||
MX53_PAD_SD2_DATA0__GPIO1_15 0x1e4
|
||||
MX53_PAD_SD2_DATA2__GPIO1_13 0x1e4
|
||||
>;
|
||||
};
|
||||
|
||||
|
|
|
@ -315,8 +315,8 @@
|
|||
fsl,pins = <
|
||||
MX6QDL_PAD_EIM_D24__UART3_TX_DATA 0x1b0b1
|
||||
MX6QDL_PAD_EIM_D25__UART3_RX_DATA 0x1b0b1
|
||||
MX6QDL_PAD_EIM_D30__UART3_RTS_B 0x1b0b1
|
||||
MX6QDL_PAD_EIM_D31__UART3_CTS_B 0x1b0b1
|
||||
MX6QDL_PAD_EIM_D31__UART3_RTS_B 0x1b0b1
|
||||
MX6QDL_PAD_EIM_D30__UART3_CTS_B 0x1b0b1
|
||||
>;
|
||||
};
|
||||
|
||||
|
@ -403,6 +403,7 @@
|
|||
&uart3 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_uart3>;
|
||||
uart-has-rtscts;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
|
|
|
@ -54,7 +54,13 @@
|
|||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_microsom_enet_ar8035>;
|
||||
phy-mode = "rgmii-id";
|
||||
phy-reset-duration = <2>;
|
||||
|
||||
/*
|
||||
* The PHY seems to require a long-enough reset duration to avoid
|
||||
* some rare issues where the PHY gets stuck in an inconsistent and
|
||||
* non-functional state at boot-up. 10ms proved to be fine .
|
||||
*/
|
||||
phy-reset-duration = <10>;
|
||||
phy-reset-gpios = <&gpio4 15 GPIO_ACTIVE_LOW>;
|
||||
status = "okay";
|
||||
};
|
||||
|
|
|
@ -43,6 +43,7 @@
|
|||
assigned-clock-rates = <0>, <198000000>;
|
||||
cap-power-off-card;
|
||||
keep-power-in-suspend;
|
||||
max-frequency = <25000000>;
|
||||
mmc-pwrseq = <&wifi_pwrseq>;
|
||||
no-1-8-v;
|
||||
non-removable;
|
||||
|
|
|
@ -30,14 +30,6 @@
|
|||
regulator-max-microvolt = <5000000>;
|
||||
};
|
||||
|
||||
vdds_1v8_main: fixedregulator-vdds_1v8_main {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "vdds_1v8_main";
|
||||
vin-supply = <&smps7_reg>;
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <1800000>;
|
||||
};
|
||||
|
||||
vmmcsd_fixed: fixedregulator-mmcsd {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "vmmcsd_fixed";
|
||||
|
@ -487,6 +479,7 @@
|
|||
regulator-boot-on;
|
||||
};
|
||||
|
||||
vdds_1v8_main:
|
||||
smps7_reg: smps7 {
|
||||
/* VDDS_1v8_OMAP over VDDS_1v8_MAIN */
|
||||
regulator-name = "smps7";
|
||||
|
|
|
@ -390,7 +390,7 @@
|
|||
};
|
||||
};
|
||||
|
||||
sleep {
|
||||
suspend {
|
||||
global_pwroff: global-pwroff {
|
||||
rockchip,pins = <2 RK_PA7 1 &pcfg_pull_none>;
|
||||
};
|
||||
|
|
|
@ -761,7 +761,7 @@
|
|||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
pd_vio@RK3066_PD_VIO {
|
||||
power-domain@RK3066_PD_VIO {
|
||||
reg = <RK3066_PD_VIO>;
|
||||
clocks = <&cru ACLK_LCDC0>,
|
||||
<&cru ACLK_LCDC1>,
|
||||
|
@ -788,7 +788,7 @@
|
|||
<&qos_rga>;
|
||||
};
|
||||
|
||||
pd_video@RK3066_PD_VIDEO {
|
||||
power-domain@RK3066_PD_VIDEO {
|
||||
reg = <RK3066_PD_VIDEO>;
|
||||
clocks = <&cru ACLK_VDPU>,
|
||||
<&cru ACLK_VEPU>,
|
||||
|
@ -797,7 +797,7 @@
|
|||
pm_qos = <&qos_vpu>;
|
||||
};
|
||||
|
||||
pd_gpu@RK3066_PD_GPU {
|
||||
power-domain@RK3066_PD_GPU {
|
||||
reg = <RK3066_PD_GPU>;
|
||||
clocks = <&cru ACLK_GPU>;
|
||||
pm_qos = <&qos_gpu>;
|
||||
|
|
|
@ -150,16 +150,16 @@
|
|||
compatible = "rockchip,rk3188-timer", "rockchip,rk3288-timer";
|
||||
reg = <0x2000e000 0x20>;
|
||||
interrupts = <GIC_SPI 46 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&cru SCLK_TIMER3>, <&cru PCLK_TIMER3>;
|
||||
clock-names = "timer", "pclk";
|
||||
clocks = <&cru PCLK_TIMER3>, <&cru SCLK_TIMER3>;
|
||||
clock-names = "pclk", "timer";
|
||||
};
|
||||
|
||||
timer6: timer@200380a0 {
|
||||
compatible = "rockchip,rk3188-timer", "rockchip,rk3288-timer";
|
||||
reg = <0x200380a0 0x20>;
|
||||
interrupts = <GIC_SPI 64 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&cru SCLK_TIMER6>, <&cru PCLK_TIMER0>;
|
||||
clock-names = "timer", "pclk";
|
||||
clocks = <&cru PCLK_TIMER0>, <&cru SCLK_TIMER6>;
|
||||
clock-names = "pclk", "timer";
|
||||
};
|
||||
|
||||
i2s0: i2s@1011a000 {
|
||||
|
@ -701,7 +701,7 @@
|
|||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
pd_vio@RK3188_PD_VIO {
|
||||
power-domain@RK3188_PD_VIO {
|
||||
reg = <RK3188_PD_VIO>;
|
||||
clocks = <&cru ACLK_LCDC0>,
|
||||
<&cru ACLK_LCDC1>,
|
||||
|
@ -723,7 +723,7 @@
|
|||
<&qos_rga>;
|
||||
};
|
||||
|
||||
pd_video@RK3188_PD_VIDEO {
|
||||
power-domain@RK3188_PD_VIDEO {
|
||||
reg = <RK3188_PD_VIDEO>;
|
||||
clocks = <&cru ACLK_VDPU>,
|
||||
<&cru ACLK_VEPU>,
|
||||
|
@ -732,7 +732,7 @@
|
|||
pm_qos = <&qos_vpu>;
|
||||
};
|
||||
|
||||
pd_gpu@RK3188_PD_GPU {
|
||||
power-domain@RK3188_PD_GPU {
|
||||
reg = <RK3188_PD_GPU>;
|
||||
clocks = <&cru ACLK_GPU>;
|
||||
pm_qos = <&qos_gpu>;
|
||||
|
|
|
@ -570,10 +570,9 @@
|
|||
compatible = "rockchip,iommu";
|
||||
reg = <0x20020800 0x100>;
|
||||
interrupts = <GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupt-names = "vpu_mmu";
|
||||
clocks = <&cru ACLK_VPU>, <&cru HCLK_VPU>;
|
||||
clock-names = "aclk", "iface";
|
||||
iommu-cells = <0>;
|
||||
#iommu-cells = <0>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
|
@ -581,10 +580,9 @@
|
|||
compatible = "rockchip,iommu";
|
||||
reg = <0x20030480 0x40>, <0x200304c0 0x40>;
|
||||
interrupts = <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupt-names = "vdec_mmu";
|
||||
clocks = <&cru ACLK_RKVDEC>, <&cru HCLK_RKVDEC>;
|
||||
clock-names = "aclk", "iface";
|
||||
iommu-cells = <0>;
|
||||
#iommu-cells = <0>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
|
@ -614,7 +612,6 @@
|
|||
compatible = "rockchip,iommu";
|
||||
reg = <0x20053f00 0x100>;
|
||||
interrupts = <GIC_SPI 32 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupt-names = "vop_mmu";
|
||||
clocks = <&cru ACLK_VOP>, <&cru HCLK_VOP>;
|
||||
clock-names = "aclk", "iface";
|
||||
#iommu-cells = <0>;
|
||||
|
@ -625,10 +622,9 @@
|
|||
compatible = "rockchip,iommu";
|
||||
reg = <0x20070800 0x100>;
|
||||
interrupts = <GIC_SPI 31 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupt-names = "iep_mmu";
|
||||
clocks = <&cru ACLK_IEP>, <&cru HCLK_IEP>;
|
||||
clock-names = "aclk", "iface";
|
||||
iommu-cells = <0>;
|
||||
#iommu-cells = <0>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
|
|
|
@ -218,7 +218,7 @@
|
|||
flash0-supply = <&vcc_flash>;
|
||||
flash1-supply = <&vccio_pmu>;
|
||||
gpio30-supply = <&vccio_pmu>;
|
||||
gpio1830 = <&vcc_io>;
|
||||
gpio1830-supply = <&vcc_io>;
|
||||
lcdc-supply = <&vcc_io>;
|
||||
sdcard-supply = <&vccio_sd>;
|
||||
wifi-supply = <&vcc_18>;
|
||||
|
|
|
@ -357,10 +357,10 @@
|
|||
audio-supply = <&vcc_18>;
|
||||
bb-supply = <&vcc_io>;
|
||||
dvp-supply = <&vcc_io>;
|
||||
flash0-suuply = <&vcc_18>;
|
||||
flash0-supply = <&vcc_18>;
|
||||
flash1-supply = <&vcc_lan>;
|
||||
gpio30-supply = <&vcc_io>;
|
||||
gpio1830 = <&vcc_io>;
|
||||
gpio1830-supply = <&vcc_io>;
|
||||
lcdc-supply = <&vcc_io>;
|
||||
sdcard-supply = <&vccio_sd>;
|
||||
wifi-supply = <&vcc_18>;
|
||||
|
|
|
@ -238,8 +238,8 @@
|
|||
compatible = "rockchip,rk3288-timer";
|
||||
reg = <0x0 0xff810000 0x0 0x20>;
|
||||
interrupts = <GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&xin24m>, <&cru PCLK_TIMER>;
|
||||
clock-names = "timer", "pclk";
|
||||
clocks = <&cru PCLK_TIMER>, <&xin24m>;
|
||||
clock-names = "pclk", "timer";
|
||||
};
|
||||
|
||||
display-subsystem {
|
||||
|
@ -771,7 +771,7 @@
|
|||
* *_HDMI HDMI
|
||||
* *_MIPI_* MIPI
|
||||
*/
|
||||
pd_vio@RK3288_PD_VIO {
|
||||
power-domain@RK3288_PD_VIO {
|
||||
reg = <RK3288_PD_VIO>;
|
||||
clocks = <&cru ACLK_IEP>,
|
||||
<&cru ACLK_ISP>,
|
||||
|
@ -813,7 +813,7 @@
|
|||
* Note: The following 3 are HEVC(H.265) clocks,
|
||||
* and on the ACLK_HEVC_NIU (NOC).
|
||||
*/
|
||||
pd_hevc@RK3288_PD_HEVC {
|
||||
power-domain@RK3288_PD_HEVC {
|
||||
reg = <RK3288_PD_HEVC>;
|
||||
clocks = <&cru ACLK_HEVC>,
|
||||
<&cru SCLK_HEVC_CABAC>,
|
||||
|
@ -827,7 +827,7 @@
|
|||
* (video endecoder & decoder) clocks that on the
|
||||
* ACLK_VCODEC_NIU and HCLK_VCODEC_NIU (NOC).
|
||||
*/
|
||||
pd_video@RK3288_PD_VIDEO {
|
||||
power-domain@RK3288_PD_VIDEO {
|
||||
reg = <RK3288_PD_VIDEO>;
|
||||
clocks = <&cru ACLK_VCODEC>,
|
||||
<&cru HCLK_VCODEC>;
|
||||
|
@ -838,7 +838,7 @@
|
|||
* Note: ACLK_GPU is the GPU clock,
|
||||
* and on the ACLK_GPU_NIU (NOC).
|
||||
*/
|
||||
pd_gpu@RK3288_PD_GPU {
|
||||
power-domain@RK3288_PD_GPU {
|
||||
reg = <RK3288_PD_GPU>;
|
||||
clocks = <&cru ACLK_GPU>;
|
||||
pm_qos = <&qos_gpu_r>,
|
||||
|
@ -1575,7 +1575,7 @@
|
|||
drive-strength = <12>;
|
||||
};
|
||||
|
||||
sleep {
|
||||
suspend {
|
||||
global_pwroff: global-pwroff {
|
||||
rockchip,pins = <0 RK_PA0 1 &pcfg_pull_none>;
|
||||
};
|
||||
|
|
|
@ -112,17 +112,15 @@
|
|||
};
|
||||
};
|
||||
|
||||
gpio_keys {
|
||||
gpio-keys {
|
||||
compatible = "gpio-keys";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
autorepeat;
|
||||
button@0 {
|
||||
button-0 {
|
||||
label = "Wake up";
|
||||
linux,code = <KEY_WAKEUP>;
|
||||
gpios = <&gpioa 0 0>;
|
||||
};
|
||||
button@1 {
|
||||
button-1 {
|
||||
label = "Tamper";
|
||||
linux,code = <KEY_RESTART>;
|
||||
gpios = <&gpioc 13 0>;
|
||||
|
|
|
@ -81,12 +81,10 @@
|
|||
};
|
||||
};
|
||||
|
||||
gpio_keys {
|
||||
gpio-keys {
|
||||
compatible = "gpio-keys";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
autorepeat;
|
||||
button@0 {
|
||||
button-0 {
|
||||
label = "Wake up";
|
||||
linux,code = <KEY_WAKEUP>;
|
||||
gpios = <&gpioc 13 0>;
|
||||
|
|
|
@ -79,12 +79,10 @@
|
|||
};
|
||||
};
|
||||
|
||||
gpio_keys {
|
||||
gpio-keys {
|
||||
compatible = "gpio-keys";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
autorepeat;
|
||||
button@0 {
|
||||
button-0 {
|
||||
label = "User";
|
||||
linux,code = <KEY_HOME>;
|
||||
gpios = <&gpioa 0 0>;
|
||||
|
|
|
@ -283,8 +283,6 @@
|
|||
};
|
||||
|
||||
timers13: timers@40001c00 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
compatible = "st,stm32-timers";
|
||||
reg = <0x40001C00 0x400>;
|
||||
clocks = <&rcc 0 STM32F4_APB1_CLOCK(TIM13)>;
|
||||
|
@ -299,8 +297,6 @@
|
|||
};
|
||||
|
||||
timers14: timers@40002000 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
compatible = "st,stm32-timers";
|
||||
reg = <0x40002000 0x400>;
|
||||
clocks = <&rcc 0 STM32F4_APB1_CLOCK(TIM14)>;
|
||||
|
@ -623,8 +619,6 @@
|
|||
};
|
||||
|
||||
timers10: timers@40014400 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
compatible = "st,stm32-timers";
|
||||
reg = <0x40014400 0x400>;
|
||||
clocks = <&rcc 0 STM32F4_APB2_CLOCK(TIM10)>;
|
||||
|
@ -639,8 +633,6 @@
|
|||
};
|
||||
|
||||
timers11: timers@40014800 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
compatible = "st,stm32-timers";
|
||||
reg = <0x40014800 0x400>;
|
||||
clocks = <&rcc 0 STM32F4_APB2_CLOCK(TIM11)>;
|
||||
|
@ -696,7 +688,7 @@
|
|||
status = "disabled";
|
||||
};
|
||||
|
||||
rcc: rcc@40023810 {
|
||||
rcc: rcc@40023800 {
|
||||
#reset-cells = <1>;
|
||||
#clock-cells = <2>;
|
||||
compatible = "st,stm32f42xx-rcc", "st,stm32-rcc";
|
||||
|
|
|
@ -104,12 +104,10 @@
|
|||
};
|
||||
};
|
||||
|
||||
gpio_keys {
|
||||
gpio-keys {
|
||||
compatible = "gpio-keys";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
autorepeat;
|
||||
button@0 {
|
||||
button-0 {
|
||||
label = "User";
|
||||
linux,code = <KEY_WAKEUP>;
|
||||
gpios = <&gpioa 0 GPIO_ACTIVE_HIGH>;
|
||||
|
|
|
@ -265,8 +265,6 @@
|
|||
};
|
||||
|
||||
timers13: timers@40001c00 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
compatible = "st,stm32-timers";
|
||||
reg = <0x40001C00 0x400>;
|
||||
clocks = <&rcc 0 STM32F7_APB1_CLOCK(TIM13)>;
|
||||
|
@ -281,8 +279,6 @@
|
|||
};
|
||||
|
||||
timers14: timers@40002000 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
compatible = "st,stm32-timers";
|
||||
reg = <0x40002000 0x400>;
|
||||
clocks = <&rcc 0 STM32F7_APB1_CLOCK(TIM14)>;
|
||||
|
@ -366,9 +362,9 @@
|
|||
status = "disabled";
|
||||
};
|
||||
|
||||
i2c3: i2c@40005C00 {
|
||||
i2c3: i2c@40005c00 {
|
||||
compatible = "st,stm32f7-i2c";
|
||||
reg = <0x40005C00 0x400>;
|
||||
reg = <0x40005c00 0x400>;
|
||||
interrupts = <72>,
|
||||
<73>;
|
||||
resets = <&rcc STM32F7_APB1_RESET(I2C3)>;
|
||||
|
@ -533,8 +529,6 @@
|
|||
};
|
||||
|
||||
timers10: timers@40014400 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
compatible = "st,stm32-timers";
|
||||
reg = <0x40014400 0x400>;
|
||||
clocks = <&rcc 0 STM32F7_APB2_CLOCK(TIM10)>;
|
||||
|
@ -549,8 +543,6 @@
|
|||
};
|
||||
|
||||
timers11: timers@40014800 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
compatible = "st,stm32-timers";
|
||||
reg = <0x40014800 0x400>;
|
||||
clocks = <&rcc 0 STM32F7_APB2_CLOCK(TIM11)>;
|
||||
|
|
|
@ -75,12 +75,10 @@
|
|||
};
|
||||
};
|
||||
|
||||
gpio_keys {
|
||||
gpio-keys {
|
||||
compatible = "gpio-keys";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
autorepeat;
|
||||
button@0 {
|
||||
button-0 {
|
||||
label = "User";
|
||||
linux,code = <KEY_HOME>;
|
||||
gpios = <&gpioa 0 GPIO_ACTIVE_HIGH>;
|
||||
|
|
|
@ -438,8 +438,6 @@
|
|||
};
|
||||
|
||||
lptimer4: timer@58002c00 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
compatible = "st,stm32-lptimer";
|
||||
reg = <0x58002c00 0x400>;
|
||||
clocks = <&rcc LPTIM4_CK>;
|
||||
|
@ -454,8 +452,6 @@
|
|||
};
|
||||
|
||||
lptimer5: timer@58003000 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
compatible = "st,stm32-lptimer";
|
||||
reg = <0x58003000 0x400>;
|
||||
clocks = <&rcc LPTIM5_CK>;
|
||||
|
|
|
@ -1311,12 +1311,6 @@
|
|||
status = "disabled";
|
||||
};
|
||||
|
||||
stmmac_axi_config_0: stmmac-axi-config {
|
||||
snps,wr_osr_lmt = <0x7>;
|
||||
snps,rd_osr_lmt = <0x7>;
|
||||
snps,blen = <0 0 0 0 16 8 4>;
|
||||
};
|
||||
|
||||
ethernet0: ethernet@5800a000 {
|
||||
compatible = "st,stm32mp1-dwmac", "snps,dwmac-4.20a";
|
||||
reg = <0x5800a000 0x2000>;
|
||||
|
@ -1339,6 +1333,12 @@
|
|||
snps,axi-config = <&stmmac_axi_config_0>;
|
||||
snps,tso;
|
||||
status = "disabled";
|
||||
|
||||
stmmac_axi_config_0: stmmac-axi-config {
|
||||
snps,wr_osr_lmt = <0x7>;
|
||||
snps,rd_osr_lmt = <0x7>;
|
||||
snps,blen = <0 0 0 0 16 8 4>;
|
||||
};
|
||||
};
|
||||
|
||||
usbh_ohci: usbh-ohci@5800c000 {
|
||||
|
|
|
@ -195,16 +195,15 @@
|
|||
#size-cells = <1>;
|
||||
ranges;
|
||||
|
||||
vic: intc@10140000 {
|
||||
vic: interrupt-controller@10140000 {
|
||||
compatible = "arm,versatile-vic";
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <1>;
|
||||
reg = <0x10140000 0x1000>;
|
||||
clear-mask = <0xffffffff>;
|
||||
valid-mask = <0xffffffff>;
|
||||
};
|
||||
|
||||
sic: intc@10003000 {
|
||||
sic: interrupt-controller@10003000 {
|
||||
compatible = "arm,versatile-sic";
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <1>;
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
amba {
|
||||
/* The Versatile PB is using more SIC IRQ lines than the AB */
|
||||
sic: intc@10003000 {
|
||||
sic: interrupt-controller@10003000 {
|
||||
clear-mask = <0xffffffff>;
|
||||
/*
|
||||
* Valid interrupt lines mask according to
|
||||
|
|
|
@ -104,6 +104,7 @@ struct mmdc_pmu {
|
|||
struct perf_event *mmdc_events[MMDC_NUM_COUNTERS];
|
||||
struct hlist_node node;
|
||||
struct fsl_mmdc_devtype_data *devtype_data;
|
||||
struct clk *mmdc_ipg_clk;
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -463,11 +464,14 @@ static int imx_mmdc_remove(struct platform_device *pdev)
|
|||
|
||||
cpuhp_state_remove_instance_nocalls(cpuhp_mmdc_state, &pmu_mmdc->node);
|
||||
perf_pmu_unregister(&pmu_mmdc->pmu);
|
||||
iounmap(pmu_mmdc->mmdc_base);
|
||||
clk_disable_unprepare(pmu_mmdc->mmdc_ipg_clk);
|
||||
kfree(pmu_mmdc);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int imx_mmdc_perf_init(struct platform_device *pdev, void __iomem *mmdc_base)
|
||||
static int imx_mmdc_perf_init(struct platform_device *pdev, void __iomem *mmdc_base,
|
||||
struct clk *mmdc_ipg_clk)
|
||||
{
|
||||
struct mmdc_pmu *pmu_mmdc;
|
||||
char *name;
|
||||
|
@ -495,6 +499,7 @@ static int imx_mmdc_perf_init(struct platform_device *pdev, void __iomem *mmdc_b
|
|||
}
|
||||
|
||||
mmdc_num = mmdc_pmu_init(pmu_mmdc, mmdc_base, &pdev->dev);
|
||||
pmu_mmdc->mmdc_ipg_clk = mmdc_ipg_clk;
|
||||
if (mmdc_num == 0)
|
||||
name = "mmdc";
|
||||
else
|
||||
|
@ -530,7 +535,7 @@ pmu_free:
|
|||
|
||||
#else
|
||||
#define imx_mmdc_remove NULL
|
||||
#define imx_mmdc_perf_init(pdev, mmdc_base) 0
|
||||
#define imx_mmdc_perf_init(pdev, mmdc_base, mmdc_ipg_clk) 0
|
||||
#endif
|
||||
|
||||
static int imx_mmdc_probe(struct platform_device *pdev)
|
||||
|
@ -568,7 +573,13 @@ static int imx_mmdc_probe(struct platform_device *pdev)
|
|||
val &= ~(1 << BP_MMDC_MAPSR_PSD);
|
||||
writel_relaxed(val, reg);
|
||||
|
||||
return imx_mmdc_perf_init(pdev, mmdc_base);
|
||||
err = imx_mmdc_perf_init(pdev, mmdc_base, mmdc_ipg_clk);
|
||||
if (err) {
|
||||
iounmap(mmdc_base);
|
||||
clk_disable_unprepare(mmdc_ipg_clk);
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
int imx_mmdc_get_ddr_type(void)
|
||||
|
|
|
@ -28,11 +28,11 @@
|
|||
* ^
|
||||
* ^
|
||||
* imx53_suspend code
|
||||
* PM_INFO structure(imx53_suspend_info)
|
||||
* PM_INFO structure(imx5_cpu_suspend_info)
|
||||
* ======================== low address =======================
|
||||
*/
|
||||
|
||||
/* Offsets of members of struct imx53_suspend_info */
|
||||
/* Offsets of members of struct imx5_cpu_suspend_info */
|
||||
#define SUSPEND_INFO_MX53_M4IF_V_OFFSET 0x0
|
||||
#define SUSPEND_INFO_MX53_IOMUXC_V_OFFSET 0x4
|
||||
#define SUSPEND_INFO_MX53_IO_COUNT_OFFSET 0x8
|
||||
|
|
|
@ -537,13 +537,13 @@
|
|||
clocks {
|
||||
compatible = "arm,scpi-clocks";
|
||||
|
||||
scpi_dvfs: scpi-dvfs {
|
||||
scpi_dvfs: clocks-0 {
|
||||
compatible = "arm,scpi-dvfs-clocks";
|
||||
#clock-cells = <1>;
|
||||
clock-indices = <0>, <1>, <2>;
|
||||
clock-output-names = "atlclk", "aplclk","gpuclk";
|
||||
};
|
||||
scpi_clk: scpi-clk {
|
||||
scpi_clk: clocks-1 {
|
||||
compatible = "arm,scpi-variable-clocks";
|
||||
#clock-cells = <1>;
|
||||
clock-indices = <3>;
|
||||
|
@ -551,7 +551,7 @@
|
|||
};
|
||||
};
|
||||
|
||||
scpi_devpd: scpi-power-domains {
|
||||
scpi_devpd: power-controller {
|
||||
compatible = "arm,scpi-power-domains";
|
||||
num-domains = <2>;
|
||||
#power-domain-cells = <1>;
|
||||
|
|
|
@ -69,7 +69,7 @@
|
|||
};
|
||||
};
|
||||
|
||||
sysclk: clock-sysclk {
|
||||
sysclk: sysclk {
|
||||
compatible = "fixed-clock";
|
||||
#clock-cells = <0>;
|
||||
clock-frequency = <100000000>;
|
||||
|
|
|
@ -466,7 +466,6 @@
|
|||
clocks = <&clockgen 4 3>;
|
||||
clock-names = "dspi";
|
||||
spi-num-chipselects = <5>;
|
||||
bus-num = <0>;
|
||||
};
|
||||
|
||||
esdhc: esdhc@2140000 {
|
||||
|
|
|
@ -1446,6 +1446,14 @@
|
|||
<&src IMX8MQ_RESET_PCIE_CTRL_APPS_CLK_REQ>,
|
||||
<&src IMX8MQ_RESET_PCIE_CTRL_APPS_TURNOFF>;
|
||||
reset-names = "pciephy", "apps", "clkreq", "turnoff";
|
||||
assigned-clocks = <&clk IMX8MQ_CLK_PCIE1_CTRL>,
|
||||
<&clk IMX8MQ_CLK_PCIE1_PHY>,
|
||||
<&clk IMX8MQ_CLK_PCIE1_AUX>;
|
||||
assigned-clock-parents = <&clk IMX8MQ_SYS2_PLL_250M>,
|
||||
<&clk IMX8MQ_SYS2_PLL_100M>,
|
||||
<&clk IMX8MQ_SYS1_PLL_80M>;
|
||||
assigned-clock-rates = <250000000>, <100000000>,
|
||||
<10000000>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
|
@ -1494,6 +1502,14 @@
|
|||
<&src IMX8MQ_RESET_PCIE2_CTRL_APPS_EN>,
|
||||
<&src IMX8MQ_RESET_PCIE2_CTRL_APPS_TURNOFF>;
|
||||
reset-names = "pciephy", "apps", "turnoff";
|
||||
assigned-clocks = <&clk IMX8MQ_CLK_PCIE2_CTRL>,
|
||||
<&clk IMX8MQ_CLK_PCIE2_PHY>,
|
||||
<&clk IMX8MQ_CLK_PCIE2_AUX>;
|
||||
assigned-clock-parents = <&clk IMX8MQ_SYS2_PLL_250M>,
|
||||
<&clk IMX8MQ_SYS2_PLL_100M>,
|
||||
<&clk IMX8MQ_SYS1_PLL_80M>;
|
||||
assigned-clock-rates = <250000000>, <100000000>,
|
||||
<10000000>;
|
||||
num-ib-windows = <4>;
|
||||
num-ob-windows = <4>;
|
||||
status = "disabled";
|
||||
|
|
|
@ -106,12 +106,19 @@
|
|||
/* enabled by U-Boot if SFP module is present */
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
firmware {
|
||||
armada-3700-rwtm {
|
||||
compatible = "marvell,armada-3700-rwtm-firmware", "cznic,turris-mox-rwtm";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&i2c0 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&i2c1_pins>;
|
||||
clock-frequency = <100000>;
|
||||
/delete-property/ mrvl,i2c-fast-mode;
|
||||
status = "okay";
|
||||
|
||||
rtc@6f {
|
||||
|
|
|
@ -500,4 +500,12 @@
|
|||
};
|
||||
};
|
||||
};
|
||||
|
||||
firmware {
|
||||
armada-3700-rwtm {
|
||||
compatible = "marvell,armada-3700-rwtm-firmware";
|
||||
mboxes = <&rwtm 0>;
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
@ -213,20 +213,20 @@
|
|||
#size-cells = <0>;
|
||||
|
||||
/* These power domains are grouped by VD_LOGIC */
|
||||
pd_usb@PX30_PD_USB {
|
||||
power-domain@PX30_PD_USB {
|
||||
reg = <PX30_PD_USB>;
|
||||
clocks = <&cru HCLK_HOST>,
|
||||
<&cru HCLK_OTG>,
|
||||
<&cru SCLK_OTG_ADP>;
|
||||
pm_qos = <&qos_usb_host>, <&qos_usb_otg>;
|
||||
};
|
||||
pd_sdcard@PX30_PD_SDCARD {
|
||||
power-domain@PX30_PD_SDCARD {
|
||||
reg = <PX30_PD_SDCARD>;
|
||||
clocks = <&cru HCLK_SDMMC>,
|
||||
<&cru SCLK_SDMMC>;
|
||||
pm_qos = <&qos_sdmmc>;
|
||||
};
|
||||
pd_gmac@PX30_PD_GMAC {
|
||||
power-domain@PX30_PD_GMAC {
|
||||
reg = <PX30_PD_GMAC>;
|
||||
clocks = <&cru ACLK_GMAC>,
|
||||
<&cru PCLK_GMAC>,
|
||||
|
@ -234,7 +234,7 @@
|
|||
<&cru SCLK_GMAC_RX_TX>;
|
||||
pm_qos = <&qos_gmac>;
|
||||
};
|
||||
pd_mmc_nand@PX30_PD_MMC_NAND {
|
||||
power-domain@PX30_PD_MMC_NAND {
|
||||
reg = <PX30_PD_MMC_NAND>;
|
||||
clocks = <&cru HCLK_NANDC>,
|
||||
<&cru HCLK_EMMC>,
|
||||
|
@ -247,14 +247,14 @@
|
|||
pm_qos = <&qos_emmc>, <&qos_nand>,
|
||||
<&qos_sdio>, <&qos_sfc>;
|
||||
};
|
||||
pd_vpu@PX30_PD_VPU {
|
||||
power-domain@PX30_PD_VPU {
|
||||
reg = <PX30_PD_VPU>;
|
||||
clocks = <&cru ACLK_VPU>,
|
||||
<&cru HCLK_VPU>,
|
||||
<&cru SCLK_CORE_VPU>;
|
||||
pm_qos = <&qos_vpu>, <&qos_vpu_r128>;
|
||||
};
|
||||
pd_vo@PX30_PD_VO {
|
||||
power-domain@PX30_PD_VO {
|
||||
reg = <PX30_PD_VO>;
|
||||
clocks = <&cru ACLK_RGA>,
|
||||
<&cru ACLK_VOPB>,
|
||||
|
@ -270,7 +270,7 @@
|
|||
pm_qos = <&qos_rga_rd>, <&qos_rga_wr>,
|
||||
<&qos_vop_m0>, <&qos_vop_m1>;
|
||||
};
|
||||
pd_vi@PX30_PD_VI {
|
||||
power-domain@PX30_PD_VI {
|
||||
reg = <PX30_PD_VI>;
|
||||
clocks = <&cru ACLK_CIF>,
|
||||
<&cru ACLK_ISP>,
|
||||
|
@ -281,7 +281,7 @@
|
|||
<&qos_isp_wr>, <&qos_isp_m1>,
|
||||
<&qos_vip>;
|
||||
};
|
||||
pd_gpu@PX30_PD_GPU {
|
||||
power-domain@PX30_PD_GPU {
|
||||
reg = <PX30_PD_GPU>;
|
||||
clocks = <&cru SCLK_GPU>;
|
||||
pm_qos = <&qos_gpu>;
|
||||
|
|
|
@ -270,13 +270,13 @@
|
|||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
pd_hevc@RK3328_PD_HEVC {
|
||||
power-domain@RK3328_PD_HEVC {
|
||||
reg = <RK3328_PD_HEVC>;
|
||||
};
|
||||
pd_video@RK3328_PD_VIDEO {
|
||||
power-domain@RK3328_PD_VIDEO {
|
||||
reg = <RK3328_PD_VIDEO>;
|
||||
};
|
||||
pd_vpu@RK3328_PD_VPU {
|
||||
power-domain@RK3328_PD_VPU {
|
||||
reg = <RK3328_PD_VPU>;
|
||||
clocks = <&cru ACLK_VPU>, <&cru HCLK_VPU>;
|
||||
};
|
||||
|
|
|
@ -2317,7 +2317,7 @@
|
|||
};
|
||||
};
|
||||
|
||||
sleep {
|
||||
suspend {
|
||||
ap_pwroff: ap-pwroff {
|
||||
rockchip,pins = <1 RK_PA5 1 &pcfg_pull_none>;
|
||||
};
|
||||
|
|
|
@ -165,25 +165,6 @@ static inline void arch_timer_set_cntkctl(u32 cntkctl)
|
|||
isb();
|
||||
}
|
||||
|
||||
/*
|
||||
* Ensure that reads of the counter are treated the same as memory reads
|
||||
* for the purposes of ordering by subsequent memory barriers.
|
||||
*
|
||||
* This insanity brought to you by speculative system register reads,
|
||||
* out-of-order memory accesses, sequence locks and Thomas Gleixner.
|
||||
*
|
||||
* http://lists.infradead.org/pipermail/linux-arm-kernel/2019-February/631195.html
|
||||
*/
|
||||
#define arch_counter_enforce_ordering(val) do { \
|
||||
u64 tmp, _val = (val); \
|
||||
\
|
||||
asm volatile( \
|
||||
" eor %0, %1, %1\n" \
|
||||
" add %0, sp, %0\n" \
|
||||
" ldr xzr, [%0]" \
|
||||
: "=r" (tmp) : "r" (_val)); \
|
||||
} while (0)
|
||||
|
||||
static __always_inline u64 __arch_counter_get_cntpct_stable(void)
|
||||
{
|
||||
u64 cnt;
|
||||
|
@ -224,8 +205,6 @@ static __always_inline u64 __arch_counter_get_cntvct(void)
|
|||
return cnt;
|
||||
}
|
||||
|
||||
#undef arch_counter_enforce_ordering
|
||||
|
||||
static inline int arch_timer_arch_init(void)
|
||||
{
|
||||
return 0;
|
||||
|
|
|
@ -57,6 +57,25 @@ static inline unsigned long array_index_mask_nospec(unsigned long idx,
|
|||
return mask;
|
||||
}
|
||||
|
||||
/*
|
||||
* Ensure that reads of the counter are treated the same as memory reads
|
||||
* for the purposes of ordering by subsequent memory barriers.
|
||||
*
|
||||
* This insanity brought to you by speculative system register reads,
|
||||
* out-of-order memory accesses, sequence locks and Thomas Gleixner.
|
||||
*
|
||||
* http://lists.infradead.org/pipermail/linux-arm-kernel/2019-February/631195.html
|
||||
*/
|
||||
#define arch_counter_enforce_ordering(val) do { \
|
||||
u64 tmp, _val = (val); \
|
||||
\
|
||||
asm volatile( \
|
||||
" eor %0, %1, %1\n" \
|
||||
" add %0, sp, %0\n" \
|
||||
" ldr xzr, [%0]" \
|
||||
: "=r" (tmp) : "r" (_val)); \
|
||||
} while (0)
|
||||
|
||||
#define __smp_mb() dmb(ish)
|
||||
#define __smp_rmb() dmb(ishld)
|
||||
#define __smp_wmb() dmb(ishst)
|
||||
|
|
|
@ -299,7 +299,17 @@ static inline unsigned long kernel_stack_pointer(struct pt_regs *regs)
|
|||
|
||||
static inline unsigned long regs_return_value(struct pt_regs *regs)
|
||||
{
|
||||
return regs->regs[0];
|
||||
unsigned long val = regs->regs[0];
|
||||
|
||||
/*
|
||||
* Audit currently uses regs_return_value() instead of
|
||||
* syscall_get_return_value(). Apply the same sign-extension here until
|
||||
* audit is updated to use syscall_get_return_value().
|
||||
*/
|
||||
if (compat_user_mode(regs))
|
||||
val = sign_extend64(val, 31);
|
||||
|
||||
return val;
|
||||
}
|
||||
|
||||
static inline void regs_set_return_value(struct pt_regs *regs, unsigned long rc)
|
||||
|
|
|
@ -29,24 +29,25 @@ static inline void syscall_rollback(struct task_struct *task,
|
|||
regs->regs[0] = regs->orig_x0;
|
||||
}
|
||||
|
||||
static inline long syscall_get_return_value(struct task_struct *task,
|
||||
struct pt_regs *regs)
|
||||
{
|
||||
unsigned long val = regs->regs[0];
|
||||
|
||||
if (is_compat_thread(task_thread_info(task)))
|
||||
val = sign_extend64(val, 31);
|
||||
|
||||
return val;
|
||||
}
|
||||
|
||||
static inline long syscall_get_error(struct task_struct *task,
|
||||
struct pt_regs *regs)
|
||||
{
|
||||
unsigned long error = regs->regs[0];
|
||||
|
||||
if (is_compat_thread(task_thread_info(task)))
|
||||
error = sign_extend64(error, 31);
|
||||
unsigned long error = syscall_get_return_value(task, regs);
|
||||
|
||||
return IS_ERR_VALUE(error) ? error : 0;
|
||||
}
|
||||
|
||||
static inline long syscall_get_return_value(struct task_struct *task,
|
||||
struct pt_regs *regs)
|
||||
{
|
||||
return regs->regs[0];
|
||||
}
|
||||
|
||||
static inline void syscall_set_return_value(struct task_struct *task,
|
||||
struct pt_regs *regs,
|
||||
int error, long val)
|
||||
|
|
|
@ -85,11 +85,7 @@ static __always_inline u64 __arch_get_hw_counter(s32 clock_mode)
|
|||
*/
|
||||
isb();
|
||||
asm volatile("mrs %0, cntvct_el0" : "=r" (res) :: "memory");
|
||||
/*
|
||||
* This isb() is required to prevent that the seq lock is
|
||||
* speculated.#
|
||||
*/
|
||||
isb();
|
||||
arch_counter_enforce_ordering(res);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
|
|
@ -1868,7 +1868,7 @@ void syscall_trace_exit(struct pt_regs *regs)
|
|||
audit_syscall_exit(regs);
|
||||
|
||||
if (flags & _TIF_SYSCALL_TRACEPOINT)
|
||||
trace_sys_exit(regs, regs_return_value(regs));
|
||||
trace_sys_exit(regs, syscall_get_return_value(current, regs));
|
||||
|
||||
if (flags & (_TIF_SYSCALL_TRACE | _TIF_SINGLESTEP))
|
||||
tracehook_report_syscall(regs, PTRACE_SYSCALL_EXIT);
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
#include <asm/unistd.h>
|
||||
#include <asm/fpsimd.h>
|
||||
#include <asm/ptrace.h>
|
||||
#include <asm/syscall.h>
|
||||
#include <asm/signal32.h>
|
||||
#include <asm/traps.h>
|
||||
#include <asm/vdso.h>
|
||||
|
@ -868,7 +869,7 @@ static void do_signal(struct pt_regs *regs)
|
|||
retval == -ERESTART_RESTARTBLOCK ||
|
||||
(retval == -ERESTARTSYS &&
|
||||
!(ksig.ka.sa.sa_flags & SA_RESTART)))) {
|
||||
regs->regs[0] = -EINTR;
|
||||
syscall_set_return_value(current, regs, -EINTR, 0);
|
||||
regs->pc = continue_addr;
|
||||
}
|
||||
|
||||
|
|
|
@ -50,10 +50,7 @@ static void invoke_syscall(struct pt_regs *regs, unsigned int scno,
|
|||
ret = do_ni_syscall(regs, scno);
|
||||
}
|
||||
|
||||
if (is_compat_task())
|
||||
ret = lower_32_bits(ret);
|
||||
|
||||
regs->regs[0] = ret;
|
||||
syscall_set_return_value(current, regs, 0, ret);
|
||||
}
|
||||
|
||||
static inline bool has_syscall_work(unsigned long flags)
|
||||
|
@ -108,7 +105,7 @@ static void el0_svc_common(struct pt_regs *regs, int scno, int sc_nr,
|
|||
if (has_syscall_work(flags)) {
|
||||
/* set default errno for user-issued syscall(-1) */
|
||||
if (scno == NO_SYSCALL)
|
||||
regs->regs[0] = -ENOSYS;
|
||||
syscall_set_return_value(current, regs, -ENOSYS, 0);
|
||||
scno = syscall_trace_enter(regs);
|
||||
if (scno == NO_SYSCALL)
|
||||
goto trace_exit;
|
||||
|
|
|
@ -320,7 +320,7 @@ KBUILD_LDFLAGS += -m $(ld-emul)
|
|||
|
||||
ifdef CONFIG_MIPS
|
||||
CHECKFLAGS += $(shell $(CC) $(KBUILD_CFLAGS) -dM -E -x c /dev/null | \
|
||||
egrep -vw '__GNUC_(|MINOR_|PATCHLEVEL_)_' | \
|
||||
egrep -vw '__GNUC_(MINOR_|PATCHLEVEL_)?_' | \
|
||||
sed -e "s/^\#define /-D'/" -e "s/ /'='/" -e "s/$$/'/" -e 's/\$$/&&/g')
|
||||
endif
|
||||
|
||||
|
|
|
@ -62,15 +62,11 @@ do { \
|
|||
|
||||
static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long address)
|
||||
{
|
||||
pmd_t *pmd = NULL;
|
||||
struct page *pg;
|
||||
pmd_t *pmd;
|
||||
|
||||
pg = alloc_pages(GFP_KERNEL | __GFP_ACCOUNT, PMD_ORDER);
|
||||
if (pg) {
|
||||
pgtable_pmd_page_ctor(pg);
|
||||
pmd = (pmd_t *)page_address(pg);
|
||||
pmd = (pmd_t *) __get_free_pages(GFP_KERNEL, PMD_ORDER);
|
||||
if (pmd)
|
||||
pmd_init((unsigned long)pmd, (unsigned long)invalid_pte_table);
|
||||
}
|
||||
return pmd;
|
||||
}
|
||||
|
||||
|
|
|
@ -47,7 +47,8 @@ static struct plat_serial8250_port uart8250_data[] = {
|
|||
.mapbase = 0x1f000900, /* The CBUS UART */
|
||||
.irq = MIPS_CPU_IRQ_BASE + MIPSCPU_INT_MB2,
|
||||
.uartclk = 3686400, /* Twice the usual clk! */
|
||||
.iotype = UPIO_MEM32,
|
||||
.iotype = IS_ENABLED(CONFIG_CPU_BIG_ENDIAN) ?
|
||||
UPIO_MEM32BE : UPIO_MEM32,
|
||||
.flags = CBUS_UART_FLAGS,
|
||||
.regshift = 3,
|
||||
},
|
||||
|
|
|
@ -59,7 +59,7 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr,
|
|||
|
||||
vma = find_vma(mm, addr);
|
||||
if (TASK_SIZE - len >= addr &&
|
||||
(!vma || addr + len <= vma->vm_start))
|
||||
(!vma || addr + len <= vm_start_gap(vma)))
|
||||
return addr;
|
||||
}
|
||||
|
||||
|
|
|
@ -2306,8 +2306,10 @@ static struct kvm_vcpu *kvmppc_core_vcpu_create_hv(struct kvm *kvm,
|
|||
HFSCR_DSCR | HFSCR_VECVSX | HFSCR_FP;
|
||||
if (cpu_has_feature(CPU_FTR_HVMODE)) {
|
||||
vcpu->arch.hfscr &= mfspr(SPRN_HFSCR);
|
||||
#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
|
||||
if (cpu_has_feature(CPU_FTR_P9_TM_HV_ASSIST))
|
||||
vcpu->arch.hfscr |= HFSCR_TM;
|
||||
#endif
|
||||
}
|
||||
if (cpu_has_feature(CPU_FTR_TM_COMP))
|
||||
vcpu->arch.hfscr |= HFSCR_TM;
|
||||
|
|
|
@ -232,6 +232,9 @@ long kvmhv_enter_nested_guest(struct kvm_vcpu *vcpu)
|
|||
if (vcpu->kvm->arch.l1_ptcr == 0)
|
||||
return H_NOT_AVAILABLE;
|
||||
|
||||
if (MSR_TM_TRANSACTIONAL(vcpu->arch.shregs.msr))
|
||||
return H_BAD_MODE;
|
||||
|
||||
/* copy parameters in */
|
||||
hv_ptr = kvmppc_get_gpr(vcpu, 4);
|
||||
err = kvm_vcpu_read_guest(vcpu, hv_ptr, &l2_hv,
|
||||
|
@ -253,6 +256,23 @@ long kvmhv_enter_nested_guest(struct kvm_vcpu *vcpu)
|
|||
if (l2_hv.vcpu_token >= NR_CPUS)
|
||||
return H_PARAMETER;
|
||||
|
||||
/*
|
||||
* L1 must have set up a suspended state to enter the L2 in a
|
||||
* transactional state, and only in that case. These have to be
|
||||
* filtered out here to prevent causing a TM Bad Thing in the
|
||||
* host HRFID. We could synthesize a TM Bad Thing back to the L1
|
||||
* here but there doesn't seem like much point.
|
||||
*/
|
||||
if (MSR_TM_SUSPENDED(vcpu->arch.shregs.msr)) {
|
||||
if (!MSR_TM_ACTIVE(l2_regs.msr))
|
||||
return H_BAD_MODE;
|
||||
} else {
|
||||
if (l2_regs.msr & MSR_TS_MASK)
|
||||
return H_BAD_MODE;
|
||||
if (WARN_ON_ONCE(vcpu->arch.shregs.msr & MSR_TS_MASK))
|
||||
return H_BAD_MODE;
|
||||
}
|
||||
|
||||
/* translate lpid */
|
||||
l2 = kvmhv_get_nested(vcpu->kvm, l2_hv.lpid, true);
|
||||
if (!l2)
|
||||
|
|
|
@ -240,6 +240,17 @@ int kvmppc_rtas_hcall(struct kvm_vcpu *vcpu)
|
|||
* value so we can restore it on the way out.
|
||||
*/
|
||||
orig_rets = args.rets;
|
||||
if (be32_to_cpu(args.nargs) >= ARRAY_SIZE(args.args)) {
|
||||
/*
|
||||
* Don't overflow our args array: ensure there is room for
|
||||
* at least rets[0] (even if the call specifies 0 nret).
|
||||
*
|
||||
* Each handler must then check for the correct nargs and nret
|
||||
* values, but they may always return failure in rets[0].
|
||||
*/
|
||||
rc = -EINVAL;
|
||||
goto fail;
|
||||
}
|
||||
args.rets = &args.args[be32_to_cpu(args.nargs)];
|
||||
|
||||
mutex_lock(&vcpu->kvm->arch.rtas_token_lock);
|
||||
|
@ -267,9 +278,17 @@ int kvmppc_rtas_hcall(struct kvm_vcpu *vcpu)
|
|||
fail:
|
||||
/*
|
||||
* We only get here if the guest has called RTAS with a bogus
|
||||
* args pointer. That means we can't get to the args, and so we
|
||||
* can't fail the RTAS call. So fail right out to userspace,
|
||||
* which should kill the guest.
|
||||
* args pointer or nargs/nret values that would overflow the
|
||||
* array. That means we can't get to the args, and so we can't
|
||||
* fail the RTAS call. So fail right out to userspace, which
|
||||
* should kill the guest.
|
||||
*
|
||||
* SLOF should actually pass the hcall return value from the
|
||||
* rtas handler call in r3, so enter_rtas could be modified to
|
||||
* return a failure indication in r3 and we could return such
|
||||
* errors to the guest rather than failing to host userspace.
|
||||
* However old guests that don't test for failure could then
|
||||
* continue silently after errors, so for now we won't do this.
|
||||
*/
|
||||
return rc;
|
||||
}
|
||||
|
|
|
@ -2035,9 +2035,9 @@ long kvm_arch_vcpu_ioctl(struct file *filp,
|
|||
{
|
||||
struct kvm_enable_cap cap;
|
||||
r = -EFAULT;
|
||||
vcpu_load(vcpu);
|
||||
if (copy_from_user(&cap, argp, sizeof(cap)))
|
||||
goto out;
|
||||
vcpu_load(vcpu);
|
||||
r = kvm_vcpu_ioctl_enable_cap(vcpu, &cap);
|
||||
vcpu_put(vcpu);
|
||||
break;
|
||||
|
@ -2061,9 +2061,9 @@ long kvm_arch_vcpu_ioctl(struct file *filp,
|
|||
case KVM_DIRTY_TLB: {
|
||||
struct kvm_dirty_tlb dirty;
|
||||
r = -EFAULT;
|
||||
vcpu_load(vcpu);
|
||||
if (copy_from_user(&dirty, argp, sizeof(dirty)))
|
||||
goto out;
|
||||
vcpu_load(vcpu);
|
||||
r = kvm_vcpu_ioctl_dirty_tlb(vcpu, &dirty);
|
||||
vcpu_put(vcpu);
|
||||
break;
|
||||
|
|
|
@ -75,7 +75,7 @@
|
|||
#include "../../../../drivers/pci/pci.h"
|
||||
|
||||
DEFINE_STATIC_KEY_FALSE(shared_processor);
|
||||
EXPORT_SYMBOL_GPL(shared_processor);
|
||||
EXPORT_SYMBOL(shared_processor);
|
||||
|
||||
int CMO_PrPSP = -1;
|
||||
int CMO_SecPSP = -1;
|
||||
|
|
|
@ -9,16 +9,6 @@
|
|||
#include <asm/errno.h>
|
||||
#include <asm/sigp.h>
|
||||
|
||||
#ifdef CC_USING_EXPOLINE
|
||||
.pushsection .dma.text.__s390_indirect_jump_r14,"axG"
|
||||
__dma__s390_indirect_jump_r14:
|
||||
larl %r1,0f
|
||||
ex 0,0(%r1)
|
||||
j .
|
||||
0: br %r14
|
||||
.popsection
|
||||
#endif
|
||||
|
||||
.section .dma.text,"ax"
|
||||
/*
|
||||
* Simplified version of expoline thunk. The normal thunks can not be used here,
|
||||
|
@ -27,11 +17,10 @@ __dma__s390_indirect_jump_r14:
|
|||
* affects a few functions that are not performance-relevant.
|
||||
*/
|
||||
.macro BR_EX_DMA_r14
|
||||
#ifdef CC_USING_EXPOLINE
|
||||
jg __dma__s390_indirect_jump_r14
|
||||
#else
|
||||
br %r14
|
||||
#endif
|
||||
larl %r1,0f
|
||||
ex 0,0(%r1)
|
||||
j .
|
||||
0: br %r14
|
||||
.endm
|
||||
|
||||
/*
|
||||
|
|
|
@ -27,6 +27,7 @@ void ftrace_caller(void);
|
|||
|
||||
extern char ftrace_graph_caller_end;
|
||||
extern unsigned long ftrace_plt;
|
||||
extern void *ftrace_func;
|
||||
|
||||
struct dyn_arch_ftrace { };
|
||||
|
||||
|
|
|
@ -115,6 +115,103 @@ struct stack_frame {
|
|||
r2; \
|
||||
})
|
||||
|
||||
#define CALL_LARGS_0(...) \
|
||||
long dummy = 0
|
||||
#define CALL_LARGS_1(t1, a1) \
|
||||
long arg1 = (long)(t1)(a1)
|
||||
#define CALL_LARGS_2(t1, a1, t2, a2) \
|
||||
CALL_LARGS_1(t1, a1); \
|
||||
long arg2 = (long)(t2)(a2)
|
||||
#define CALL_LARGS_3(t1, a1, t2, a2, t3, a3) \
|
||||
CALL_LARGS_2(t1, a1, t2, a2); \
|
||||
long arg3 = (long)(t3)(a3)
|
||||
#define CALL_LARGS_4(t1, a1, t2, a2, t3, a3, t4, a4) \
|
||||
CALL_LARGS_3(t1, a1, t2, a2, t3, a3); \
|
||||
long arg4 = (long)(t4)(a4)
|
||||
#define CALL_LARGS_5(t1, a1, t2, a2, t3, a3, t4, a4, t5, a5) \
|
||||
CALL_LARGS_4(t1, a1, t2, a2, t3, a3, t4, a4); \
|
||||
long arg5 = (long)(t5)(a5)
|
||||
|
||||
#define CALL_REGS_0 \
|
||||
register long r2 asm("2") = dummy
|
||||
#define CALL_REGS_1 \
|
||||
register long r2 asm("2") = arg1
|
||||
#define CALL_REGS_2 \
|
||||
CALL_REGS_1; \
|
||||
register long r3 asm("3") = arg2
|
||||
#define CALL_REGS_3 \
|
||||
CALL_REGS_2; \
|
||||
register long r4 asm("4") = arg3
|
||||
#define CALL_REGS_4 \
|
||||
CALL_REGS_3; \
|
||||
register long r5 asm("5") = arg4
|
||||
#define CALL_REGS_5 \
|
||||
CALL_REGS_4; \
|
||||
register long r6 asm("6") = arg5
|
||||
|
||||
#define CALL_TYPECHECK_0(...)
|
||||
#define CALL_TYPECHECK_1(t, a, ...) \
|
||||
typecheck(t, a)
|
||||
#define CALL_TYPECHECK_2(t, a, ...) \
|
||||
CALL_TYPECHECK_1(__VA_ARGS__); \
|
||||
typecheck(t, a)
|
||||
#define CALL_TYPECHECK_3(t, a, ...) \
|
||||
CALL_TYPECHECK_2(__VA_ARGS__); \
|
||||
typecheck(t, a)
|
||||
#define CALL_TYPECHECK_4(t, a, ...) \
|
||||
CALL_TYPECHECK_3(__VA_ARGS__); \
|
||||
typecheck(t, a)
|
||||
#define CALL_TYPECHECK_5(t, a, ...) \
|
||||
CALL_TYPECHECK_4(__VA_ARGS__); \
|
||||
typecheck(t, a)
|
||||
|
||||
#define CALL_PARM_0(...) void
|
||||
#define CALL_PARM_1(t, a, ...) t
|
||||
#define CALL_PARM_2(t, a, ...) t, CALL_PARM_1(__VA_ARGS__)
|
||||
#define CALL_PARM_3(t, a, ...) t, CALL_PARM_2(__VA_ARGS__)
|
||||
#define CALL_PARM_4(t, a, ...) t, CALL_PARM_3(__VA_ARGS__)
|
||||
#define CALL_PARM_5(t, a, ...) t, CALL_PARM_4(__VA_ARGS__)
|
||||
#define CALL_PARM_6(t, a, ...) t, CALL_PARM_5(__VA_ARGS__)
|
||||
|
||||
/*
|
||||
* Use call_on_stack() to call a function switching to a specified
|
||||
* stack. Proper sign and zero extension of function arguments is
|
||||
* done. Usage:
|
||||
*
|
||||
* rc = call_on_stack(nr, stack, rettype, fn, t1, a1, t2, a2, ...)
|
||||
*
|
||||
* - nr specifies the number of function arguments of fn.
|
||||
* - stack specifies the stack to be used.
|
||||
* - fn is the function to be called.
|
||||
* - rettype is the return type of fn.
|
||||
* - t1, a1, ... are pairs, where t1 must match the type of the first
|
||||
* argument of fn, t2 the second, etc. a1 is the corresponding
|
||||
* first function argument (not name), etc.
|
||||
*/
|
||||
#define call_on_stack(nr, stack, rettype, fn, ...) \
|
||||
({ \
|
||||
rettype (*__fn)(CALL_PARM_##nr(__VA_ARGS__)) = fn; \
|
||||
unsigned long frame = current_frame_address(); \
|
||||
unsigned long __stack = stack; \
|
||||
unsigned long prev; \
|
||||
CALL_LARGS_##nr(__VA_ARGS__); \
|
||||
CALL_REGS_##nr; \
|
||||
\
|
||||
CALL_TYPECHECK_##nr(__VA_ARGS__); \
|
||||
asm volatile( \
|
||||
" lgr %[_prev],15\n" \
|
||||
" lg 15,%[_stack]\n" \
|
||||
" stg %[_frame],%[_bc](15)\n" \
|
||||
" brasl 14,%[_fn]\n" \
|
||||
" lgr 15,%[_prev]\n" \
|
||||
: [_prev] "=&d" (prev), CALL_FMT_##nr \
|
||||
: [_stack] "R" (__stack), \
|
||||
[_bc] "i" (offsetof(struct stack_frame, back_chain)), \
|
||||
[_frame] "d" (frame), \
|
||||
[_fn] "X" (__fn) : CALL_CLOBBER_##nr); \
|
||||
(rettype)r2; \
|
||||
})
|
||||
|
||||
#define CALL_ON_STACK_NORETURN(fn, stack) \
|
||||
({ \
|
||||
asm volatile( \
|
||||
|
|
|
@ -57,6 +57,7 @@
|
|||
* > brasl %r0,ftrace_caller # offset 0
|
||||
*/
|
||||
|
||||
void *ftrace_func __read_mostly = ftrace_stub;
|
||||
unsigned long ftrace_plt;
|
||||
|
||||
static inline void ftrace_generate_orig_insn(struct ftrace_insn *insn)
|
||||
|
@ -166,6 +167,7 @@ int ftrace_make_call(struct dyn_ftrace *rec, unsigned long addr)
|
|||
|
||||
int ftrace_update_ftrace_func(ftrace_func_t func)
|
||||
{
|
||||
ftrace_func = func;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -61,13 +61,13 @@ ENTRY(ftrace_caller)
|
|||
#ifdef CONFIG_HAVE_MARCH_Z196_FEATURES
|
||||
aghik %r2,%r0,-MCOUNT_INSN_SIZE
|
||||
lgrl %r4,function_trace_op
|
||||
lgrl %r1,ftrace_trace_function
|
||||
lgrl %r1,ftrace_func
|
||||
#else
|
||||
lgr %r2,%r0
|
||||
aghi %r2,-MCOUNT_INSN_SIZE
|
||||
larl %r4,function_trace_op
|
||||
lg %r4,0(%r4)
|
||||
larl %r1,ftrace_trace_function
|
||||
larl %r1,ftrace_func
|
||||
lg %r1,0(%r1)
|
||||
#endif
|
||||
lgr %r3,%r14
|
||||
|
|
|
@ -114,7 +114,7 @@ static inline void reg_set_seen(struct bpf_jit *jit, u32 b1)
|
|||
{
|
||||
u32 r1 = reg2hex[b1];
|
||||
|
||||
if (!jit->seen_reg[r1] && r1 >= 6 && r1 <= 15)
|
||||
if (r1 >= 6 && r1 <= 15 && !jit->seen_reg[r1])
|
||||
jit->seen_reg[r1] = 1;
|
||||
}
|
||||
|
||||
|
|
|
@ -852,9 +852,10 @@ void x86_pmu_stop(struct perf_event *event, int flags);
|
|||
|
||||
static inline void x86_pmu_disable_event(struct perf_event *event)
|
||||
{
|
||||
u64 disable_mask = __this_cpu_read(cpu_hw_events.perf_ctr_virt_mask);
|
||||
struct hw_perf_event *hwc = &event->hw;
|
||||
|
||||
wrmsrl(hwc->config_base, hwc->config);
|
||||
wrmsrl(hwc->config_base, hwc->config & ~disable_mask);
|
||||
}
|
||||
|
||||
void x86_pmu_enable_event(struct perf_event *event);
|
||||
|
|
|
@ -4,6 +4,8 @@
|
|||
|
||||
#include <asm/ldt.h>
|
||||
|
||||
struct task_struct;
|
||||
|
||||
/* misc architecture specific prototypes */
|
||||
|
||||
void syscall_init(void);
|
||||
|
|
|
@ -91,7 +91,7 @@ static unsigned long ioapic_read_indirect(struct kvm_ioapic *ioapic,
|
|||
static void rtc_irq_eoi_tracking_reset(struct kvm_ioapic *ioapic)
|
||||
{
|
||||
ioapic->rtc_status.pending_eoi = 0;
|
||||
bitmap_zero(ioapic->rtc_status.dest_map.map, KVM_MAX_VCPU_ID);
|
||||
bitmap_zero(ioapic->rtc_status.dest_map.map, KVM_MAX_VCPU_ID + 1);
|
||||
}
|
||||
|
||||
static void kvm_rtc_eoi_tracking_restore_all(struct kvm_ioapic *ioapic);
|
||||
|
|
|
@ -43,13 +43,13 @@ struct kvm_vcpu;
|
|||
|
||||
struct dest_map {
|
||||
/* vcpu bitmap where IRQ has been sent */
|
||||
DECLARE_BITMAP(map, KVM_MAX_VCPU_ID);
|
||||
DECLARE_BITMAP(map, KVM_MAX_VCPU_ID + 1);
|
||||
|
||||
/*
|
||||
* Vector sent to a given vcpu, only valid when
|
||||
* the vcpu's bit in map is set
|
||||
*/
|
||||
u8 vectors[KVM_MAX_VCPU_ID];
|
||||
u8 vectors[KVM_MAX_VCPU_ID + 1];
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -2143,7 +2143,7 @@ static int is_empty_shadow_page(u64 *spt)
|
|||
* aggregate version in order to make the slab shrinker
|
||||
* faster
|
||||
*/
|
||||
static inline void kvm_mod_used_mmu_pages(struct kvm *kvm, unsigned long nr)
|
||||
static inline void kvm_mod_used_mmu_pages(struct kvm *kvm, long nr)
|
||||
{
|
||||
kvm->arch.n_used_mmu_pages += nr;
|
||||
percpu_counter_add(&kvm_total_used_mmu_pages, nr);
|
||||
|
|
|
@ -90,8 +90,8 @@ struct guest_walker {
|
|||
gpa_t pte_gpa[PT_MAX_FULL_LEVELS];
|
||||
pt_element_t __user *ptep_user[PT_MAX_FULL_LEVELS];
|
||||
bool pte_writable[PT_MAX_FULL_LEVELS];
|
||||
unsigned pt_access;
|
||||
unsigned pte_access;
|
||||
unsigned int pt_access[PT_MAX_FULL_LEVELS];
|
||||
unsigned int pte_access;
|
||||
gfn_t gfn;
|
||||
struct x86_exception fault;
|
||||
};
|
||||
|
@ -406,13 +406,15 @@ retry_walk:
|
|||
}
|
||||
|
||||
walker->ptes[walker->level - 1] = pte;
|
||||
|
||||
/* Convert to ACC_*_MASK flags for struct guest_walker. */
|
||||
walker->pt_access[walker->level - 1] = FNAME(gpte_access)(pt_access ^ walk_nx_mask);
|
||||
} while (!is_last_gpte(mmu, walker->level, pte));
|
||||
|
||||
pte_pkey = FNAME(gpte_pkeys)(vcpu, pte);
|
||||
accessed_dirty = have_ad ? pte_access & PT_GUEST_ACCESSED_MASK : 0;
|
||||
|
||||
/* Convert to ACC_*_MASK flags for struct guest_walker. */
|
||||
walker->pt_access = FNAME(gpte_access)(pt_access ^ walk_nx_mask);
|
||||
walker->pte_access = FNAME(gpte_access)(pte_access ^ walk_nx_mask);
|
||||
errcode = permission_fault(vcpu, mmu, walker->pte_access, pte_pkey, access);
|
||||
if (unlikely(errcode))
|
||||
|
@ -451,7 +453,8 @@ retry_walk:
|
|||
}
|
||||
|
||||
pgprintk("%s: pte %llx pte_access %x pt_access %x\n",
|
||||
__func__, (u64)pte, walker->pte_access, walker->pt_access);
|
||||
__func__, (u64)pte, walker->pte_access,
|
||||
walker->pt_access[walker->level - 1]);
|
||||
return 1;
|
||||
|
||||
error:
|
||||
|
@ -620,7 +623,7 @@ static int FNAME(fetch)(struct kvm_vcpu *vcpu, gpa_t addr,
|
|||
{
|
||||
struct kvm_mmu_page *sp = NULL;
|
||||
struct kvm_shadow_walk_iterator it;
|
||||
unsigned direct_access, access = gw->pt_access;
|
||||
unsigned int direct_access, access;
|
||||
int top_level, ret;
|
||||
gfn_t gfn, base_gfn;
|
||||
|
||||
|
@ -652,6 +655,7 @@ static int FNAME(fetch)(struct kvm_vcpu *vcpu, gpa_t addr,
|
|||
sp = NULL;
|
||||
if (!is_shadow_present_pte(*it.sptep)) {
|
||||
table_gfn = gw->table_gfn[it.level - 2];
|
||||
access = gw->pt_access[it.level - 2];
|
||||
sp = kvm_mmu_get_page(vcpu, table_gfn, addr, it.level-1,
|
||||
false, access);
|
||||
}
|
||||
|
|
|
@ -1783,7 +1783,7 @@ static void __sev_asid_free(int asid)
|
|||
|
||||
for_each_possible_cpu(cpu) {
|
||||
sd = per_cpu(svm_data, cpu);
|
||||
sd->sev_vmcbs[pos] = NULL;
|
||||
sd->sev_vmcbs[asid] = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -475,8 +475,6 @@ static void kvm_multiple_exception(struct kvm_vcpu *vcpu,
|
|||
|
||||
if (!vcpu->arch.exception.pending && !vcpu->arch.exception.injected) {
|
||||
queue:
|
||||
if (has_error && !is_protmode(vcpu))
|
||||
has_error = false;
|
||||
if (reinject) {
|
||||
/*
|
||||
* On vmentry, vcpu->arch.exception.pending is only
|
||||
|
@ -3640,8 +3638,17 @@ static int kvm_cpu_accept_dm_intr(struct kvm_vcpu *vcpu)
|
|||
|
||||
static int kvm_vcpu_ready_for_interrupt_injection(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
return kvm_arch_interrupt_allowed(vcpu) &&
|
||||
kvm_cpu_accept_dm_intr(vcpu);
|
||||
/*
|
||||
* Do not cause an interrupt window exit if an exception
|
||||
* is pending or an event needs reinjection; userspace
|
||||
* might want to inject the interrupt manually using KVM_SET_REGS
|
||||
* or KVM_SET_SREGS. For that to work, we must be at an
|
||||
* instruction boundary and with no events half-injected.
|
||||
*/
|
||||
return (kvm_arch_interrupt_allowed(vcpu) &&
|
||||
kvm_cpu_accept_dm_intr(vcpu) &&
|
||||
!kvm_event_needs_reinjection(vcpu) &&
|
||||
!vcpu->arch.exception.pending);
|
||||
}
|
||||
|
||||
static int kvm_vcpu_ioctl_interrupt(struct kvm_vcpu *vcpu,
|
||||
|
@ -7592,6 +7599,13 @@ static void update_cr8_intercept(struct kvm_vcpu *vcpu)
|
|||
kvm_x86_ops->update_cr8_intercept(vcpu, tpr, max_irr);
|
||||
}
|
||||
|
||||
static void kvm_inject_exception(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
if (vcpu->arch.exception.error_code && !is_protmode(vcpu))
|
||||
vcpu->arch.exception.error_code = false;
|
||||
kvm_x86_ops->queue_exception(vcpu);
|
||||
}
|
||||
|
||||
static int inject_pending_event(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
int r;
|
||||
|
@ -7599,7 +7613,7 @@ static int inject_pending_event(struct kvm_vcpu *vcpu)
|
|||
/* try to reinject previous events if any */
|
||||
|
||||
if (vcpu->arch.exception.injected)
|
||||
kvm_x86_ops->queue_exception(vcpu);
|
||||
kvm_inject_exception(vcpu);
|
||||
/*
|
||||
* Do not inject an NMI or interrupt if there is a pending
|
||||
* exception. Exceptions and interrupts are recognized at
|
||||
|
@ -7665,7 +7679,7 @@ static int inject_pending_event(struct kvm_vcpu *vcpu)
|
|||
}
|
||||
}
|
||||
|
||||
kvm_x86_ops->queue_exception(vcpu);
|
||||
kvm_inject_exception(vcpu);
|
||||
}
|
||||
|
||||
/* Don't consider new event if we re-injected an event */
|
||||
|
|
|
@ -832,7 +832,11 @@ static ssize_t iolatency_set_limit(struct kernfs_open_file *of, char *buf,
|
|||
|
||||
enable = iolatency_set_min_lat_nsec(blkg, lat_val);
|
||||
if (enable) {
|
||||
WARN_ON_ONCE(!blk_get_queue(blkg->q));
|
||||
if (!blk_get_queue(blkg->q)) {
|
||||
ret = -ENODEV;
|
||||
goto out;
|
||||
}
|
||||
|
||||
blkg_get(blkg);
|
||||
}
|
||||
|
||||
|
|
|
@ -375,13 +375,6 @@ acpi_ns_repair_CID(struct acpi_evaluate_info *info,
|
|||
|
||||
(*element_ptr)->common.reference_count =
|
||||
original_ref_count;
|
||||
|
||||
/*
|
||||
* The original_element holds a reference from the package object
|
||||
* that represents _HID. Since a new element was created by _HID,
|
||||
* remove the reference from the _CID package.
|
||||
*/
|
||||
acpi_ut_remove_reference(original_element);
|
||||
}
|
||||
|
||||
element_ptr++;
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue