Merge da7df496b8 ("perf trace: Avoid garbage when not printing a syscall's arguments") into android16-6.12
Steps on the way to 6.12.2 Resolves merge conflicts in: fs/fuse/fuse_i.h Change-Id: If765bb10099fb7efad53a0a4bcda888cd571ac97 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
@@ -249,7 +249,7 @@ ticks this GP)" indicates that this CPU has not taken any scheduling-clock
|
||||
interrupts during the current stalled grace period.
|
||||
|
||||
The "idle=" portion of the message prints the dyntick-idle state.
|
||||
The hex number before the first "/" is the low-order 12 bits of the
|
||||
The hex number before the first "/" is the low-order 16 bits of the
|
||||
dynticks counter, which will have an even-numbered value if the CPU
|
||||
is in dyntick-idle mode and an odd-numbered value otherwise. The hex
|
||||
number between the two "/"s is the value of the nesting, which will be
|
||||
|
||||
@@ -47,6 +47,8 @@ The list of possible return codes:
|
||||
-ENOMEM zram was not able to allocate enough memory to fulfil your
|
||||
needs.
|
||||
-EINVAL invalid input has been provided.
|
||||
-EAGAIN re-try operation later (e.g. when attempting to run recompress
|
||||
and writeback simultaneously).
|
||||
======== =============================================================
|
||||
|
||||
If you use 'echo', the returned value is set by the 'echo' utility,
|
||||
|
||||
+35
-3
@@ -39,11 +39,11 @@ properties:
|
||||
|
||||
reg:
|
||||
minItems: 2
|
||||
maxItems: 9
|
||||
maxItems: 10
|
||||
|
||||
reg-names:
|
||||
minItems: 2
|
||||
maxItems: 9
|
||||
maxItems: 10
|
||||
|
||||
interrupts:
|
||||
maxItems: 1
|
||||
@@ -134,7 +134,6 @@ allOf:
|
||||
- qcom,qdu1000-llcc
|
||||
- qcom,sc8180x-llcc
|
||||
- qcom,sc8280xp-llcc
|
||||
- qcom,x1e80100-llcc
|
||||
then:
|
||||
properties:
|
||||
reg:
|
||||
@@ -160,6 +159,39 @@ allOf:
|
||||
- const: llcc7_base
|
||||
- const: llcc_broadcast_base
|
||||
|
||||
- if:
|
||||
properties:
|
||||
compatible:
|
||||
contains:
|
||||
enum:
|
||||
- qcom,x1e80100-llcc
|
||||
then:
|
||||
properties:
|
||||
reg:
|
||||
items:
|
||||
- description: LLCC0 base register region
|
||||
- description: LLCC1 base register region
|
||||
- description: LLCC2 base register region
|
||||
- description: LLCC3 base register region
|
||||
- description: LLCC4 base register region
|
||||
- description: LLCC5 base register region
|
||||
- description: LLCC6 base register region
|
||||
- description: LLCC7 base register region
|
||||
- description: LLCC broadcast base register region
|
||||
- description: LLCC broadcast AND register region
|
||||
reg-names:
|
||||
items:
|
||||
- const: llcc0_base
|
||||
- const: llcc1_base
|
||||
- const: llcc2_base
|
||||
- const: llcc3_base
|
||||
- const: llcc4_base
|
||||
- const: llcc5_base
|
||||
- const: llcc6_base
|
||||
- const: llcc7_base
|
||||
- const: llcc_broadcast_base
|
||||
- const: llcc_broadcast_and_base
|
||||
|
||||
- if:
|
||||
properties:
|
||||
compatible:
|
||||
|
||||
@@ -26,9 +26,21 @@ properties:
|
||||
description:
|
||||
Specifies the reference clock(s) from which the output frequency is
|
||||
derived. This must either reference one clock if only the first clock
|
||||
input is connected or two if both clock inputs are connected.
|
||||
minItems: 1
|
||||
maxItems: 2
|
||||
input is connected or two if both clock inputs are connected. The last
|
||||
clock is the AXI bus clock that needs to be enabled so we can access the
|
||||
core registers.
|
||||
minItems: 2
|
||||
maxItems: 3
|
||||
|
||||
clock-names:
|
||||
oneOf:
|
||||
- items:
|
||||
- const: clkin1
|
||||
- const: s_axi_aclk
|
||||
- items:
|
||||
- const: clkin1
|
||||
- const: clkin2
|
||||
- const: s_axi_aclk
|
||||
|
||||
'#clock-cells':
|
||||
const: 0
|
||||
@@ -40,6 +52,7 @@ required:
|
||||
- compatible
|
||||
- reg
|
||||
- clocks
|
||||
- clock-names
|
||||
- '#clock-cells'
|
||||
|
||||
additionalProperties: false
|
||||
@@ -50,5 +63,6 @@ examples:
|
||||
compatible = "adi,axi-clkgen-2.00.a";
|
||||
#clock-cells = <0>;
|
||||
reg = <0xff000000 0x1000>;
|
||||
clocks = <&osc 1>;
|
||||
clocks = <&osc 1>, <&clkc 15>;
|
||||
clock-names = "clkin1", "s_axi_aclk";
|
||||
};
|
||||
|
||||
@@ -149,7 +149,7 @@ allOf:
|
||||
then:
|
||||
properties:
|
||||
clocks:
|
||||
minItems: 4
|
||||
minItems: 6
|
||||
|
||||
clock-names:
|
||||
items:
|
||||
@@ -178,7 +178,7 @@ allOf:
|
||||
then:
|
||||
properties:
|
||||
clocks:
|
||||
minItems: 4
|
||||
minItems: 6
|
||||
|
||||
clock-names:
|
||||
items:
|
||||
@@ -207,6 +207,7 @@ allOf:
|
||||
properties:
|
||||
clocks:
|
||||
minItems: 4
|
||||
maxItems: 4
|
||||
|
||||
clock-names:
|
||||
items:
|
||||
|
||||
@@ -23,8 +23,8 @@ properties:
|
||||
Indicates how many data pins are used to transmit two channels of PDM
|
||||
signal. 0 means two wires, 1 means one wire. Default value is 0.
|
||||
enum:
|
||||
- 0 # one wire
|
||||
- 1 # two wires
|
||||
- 0 # two wires
|
||||
- 1 # one wire
|
||||
|
||||
mediatek,mic-type-0:
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
@@ -53,9 +53,9 @@ additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
mt6359codec: mt6359codec {
|
||||
mediatek,dmic-mode = <0>;
|
||||
mediatek,mic-type-0 = <2>;
|
||||
mt6359codec: audio-codec {
|
||||
mediatek,dmic-mode = <0>;
|
||||
mediatek,mic-type-0 = <2>;
|
||||
};
|
||||
|
||||
...
|
||||
|
||||
@@ -1013,6 +1013,8 @@ patternProperties:
|
||||
description: Shanghai Neardi Technology Co., Ltd.
|
||||
"^nec,.*":
|
||||
description: NEC LCD Technologies, Ltd.
|
||||
"^neofidelity,.*":
|
||||
description: Neofidelity Inc.
|
||||
"^neonode,.*":
|
||||
description: Neonode Inc.
|
||||
"^netgear,.*":
|
||||
|
||||
@@ -153,7 +153,7 @@ Use seqcount_latch_t when the write side sections cannot be protected
|
||||
from interruption by readers. This is typically the case when the read
|
||||
side can be invoked from NMI handlers.
|
||||
|
||||
Check `raw_write_seqcount_latch()` for more information.
|
||||
Check `write_seqcount_latch()` for more information.
|
||||
|
||||
|
||||
.. _seqlock_t:
|
||||
|
||||
+1
-2
@@ -25390,8 +25390,7 @@ F: include/xen/arm/swiotlb-xen.h
|
||||
F: include/xen/swiotlb-xen.h
|
||||
|
||||
XFS FILESYSTEM
|
||||
M: Carlos Maiolino <cem@kernel.org>
|
||||
R: Darrick J. Wong <djwong@kernel.org>
|
||||
M: Darrick J. Wong <djwong@kernel.org>
|
||||
L: linux-xfs@vger.kernel.org
|
||||
S: Supported
|
||||
W: http://xfs.org/
|
||||
|
||||
@@ -62,7 +62,7 @@ const struct machine_desc * __init setup_machine_fdt(void *dt)
|
||||
const struct machine_desc *mdesc;
|
||||
unsigned long dt_root;
|
||||
|
||||
if (!early_init_dt_scan(dt))
|
||||
if (!early_init_dt_scan(dt, __pa(dt)))
|
||||
return NULL;
|
||||
|
||||
mdesc = of_flat_dt_match_machine(NULL, arch_get_next_mach);
|
||||
|
||||
@@ -280,8 +280,8 @@
|
||||
|
||||
reg_dcdc5: dcdc5 {
|
||||
regulator-always-on;
|
||||
regulator-min-microvolt = <1425000>;
|
||||
regulator-max-microvolt = <1575000>;
|
||||
regulator-min-microvolt = <1450000>;
|
||||
regulator-max-microvolt = <1550000>;
|
||||
regulator-name = "vcc-dram";
|
||||
};
|
||||
|
||||
|
||||
@@ -186,6 +186,7 @@
|
||||
dma-names = "tx", "rx";
|
||||
clocks = <&pmc PMC_TYPE_PERIPHERAL 13>;
|
||||
clock-names = "usart";
|
||||
atmel,usart-mode = <AT91_USART_MODE_SERIAL>;
|
||||
atmel,use-dma-rx;
|
||||
atmel,use-dma-tx;
|
||||
atmel,fifo-size = <16>;
|
||||
@@ -388,6 +389,7 @@
|
||||
dma-names = "tx", "rx";
|
||||
clocks = <&pmc PMC_TYPE_PERIPHERAL 32>;
|
||||
clock-names = "usart";
|
||||
atmel,usart-mode = <AT91_USART_MODE_SERIAL>;
|
||||
atmel,use-dma-rx;
|
||||
atmel,use-dma-tx;
|
||||
atmel,fifo-size = <16>;
|
||||
@@ -439,6 +441,7 @@
|
||||
dma-names = "tx", "rx";
|
||||
clocks = <&pmc PMC_TYPE_PERIPHERAL 33>;
|
||||
clock-names = "usart";
|
||||
atmel,usart-mode = <AT91_USART_MODE_SERIAL>;
|
||||
atmel,use-dma-rx;
|
||||
atmel,use-dma-tx;
|
||||
atmel,fifo-size = <16>;
|
||||
@@ -598,6 +601,7 @@
|
||||
dma-names = "tx", "rx";
|
||||
clocks = <&pmc PMC_TYPE_PERIPHERAL 9>;
|
||||
clock-names = "usart";
|
||||
atmel,usart-mode = <AT91_USART_MODE_SERIAL>;
|
||||
atmel,use-dma-rx;
|
||||
atmel,use-dma-tx;
|
||||
atmel,fifo-size = <16>;
|
||||
@@ -649,6 +653,7 @@
|
||||
dma-names = "tx", "rx";
|
||||
clocks = <&pmc PMC_TYPE_PERIPHERAL 10>;
|
||||
clock-names = "usart";
|
||||
atmel,usart-mode = <AT91_USART_MODE_SERIAL>;
|
||||
atmel,use-dma-rx;
|
||||
atmel,use-dma-tx;
|
||||
atmel,fifo-size = <16>;
|
||||
@@ -700,6 +705,7 @@
|
||||
dma-names = "tx", "rx";
|
||||
clocks = <&pmc PMC_TYPE_PERIPHERAL 11>;
|
||||
clock-names = "usart";
|
||||
atmel,usart-mode = <AT91_USART_MODE_SERIAL>;
|
||||
atmel,use-dma-rx;
|
||||
atmel,use-dma-tx;
|
||||
atmel,fifo-size = <16>;
|
||||
@@ -751,6 +757,7 @@
|
||||
dma-names = "tx", "rx";
|
||||
clocks = <&pmc PMC_TYPE_PERIPHERAL 5>;
|
||||
clock-names = "usart";
|
||||
atmel,usart-mode = <AT91_USART_MODE_SERIAL>;
|
||||
atmel,use-dma-rx;
|
||||
atmel,use-dma-tx;
|
||||
atmel,fifo-size = <16>;
|
||||
@@ -821,6 +828,7 @@
|
||||
dma-names = "tx", "rx";
|
||||
clocks = <&pmc PMC_TYPE_PERIPHERAL 6>;
|
||||
clock-names = "usart";
|
||||
atmel,usart-mode = <AT91_USART_MODE_SERIAL>;
|
||||
atmel,use-dma-rx;
|
||||
atmel,use-dma-tx;
|
||||
atmel,fifo-size = <16>;
|
||||
@@ -891,6 +899,7 @@
|
||||
dma-names = "tx", "rx";
|
||||
clocks = <&pmc PMC_TYPE_PERIPHERAL 7>;
|
||||
clock-names = "usart";
|
||||
atmel,usart-mode = <AT91_USART_MODE_SERIAL>;
|
||||
atmel,use-dma-rx;
|
||||
atmel,use-dma-tx;
|
||||
atmel,fifo-size = <16>;
|
||||
@@ -961,6 +970,7 @@
|
||||
dma-names = "tx", "rx";
|
||||
clocks = <&pmc PMC_TYPE_PERIPHERAL 8>;
|
||||
clock-names = "usart";
|
||||
atmel,usart-mode = <AT91_USART_MODE_SERIAL>;
|
||||
atmel,use-dma-rx;
|
||||
atmel,use-dma-tx;
|
||||
atmel,fifo-size = <16>;
|
||||
@@ -1086,6 +1096,7 @@
|
||||
dma-names = "tx", "rx";
|
||||
clocks = <&pmc PMC_TYPE_PERIPHERAL 15>;
|
||||
clock-names = "usart";
|
||||
atmel,usart-mode = <AT91_USART_MODE_SERIAL>;
|
||||
atmel,use-dma-rx;
|
||||
atmel,use-dma-tx;
|
||||
atmel,fifo-size = <16>;
|
||||
@@ -1137,6 +1148,7 @@
|
||||
dma-names = "tx", "rx";
|
||||
clocks = <&pmc PMC_TYPE_PERIPHERAL 16>;
|
||||
clock-names = "usart";
|
||||
atmel,usart-mode = <AT91_USART_MODE_SERIAL>;
|
||||
atmel,use-dma-rx;
|
||||
atmel,use-dma-tx;
|
||||
atmel,fifo-size = <16>;
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
|
||||
partition@4000000 {
|
||||
label = "user1";
|
||||
reg = <0x04000000 0x40000000>;
|
||||
reg = <0x04000000 0x04000000>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
@@ -200,7 +200,7 @@ const struct machine_desc * __init setup_machine_fdt(void *dt_virt)
|
||||
|
||||
mdesc_best = &__mach_desc_GENERIC_DT;
|
||||
|
||||
if (!dt_virt || !early_init_dt_verify(dt_virt))
|
||||
if (!dt_virt || !early_init_dt_verify(dt_virt, __pa(dt_virt)))
|
||||
return NULL;
|
||||
|
||||
mdesc = of_flat_dt_match_machine(mdesc_best, arch_get_next_mach);
|
||||
|
||||
@@ -29,12 +29,37 @@
|
||||
};
|
||||
};
|
||||
|
||||
/*
|
||||
* rst_usb_hub_hog and sel_usb_hub_hog have property 'output-high',
|
||||
* dt overlay don't support /delete-property/. Both 'output-low' and
|
||||
* 'output-high' will be exist under hog nodes if overlay file set
|
||||
* 'output-low'. Workaround is disable these hog and create new hog with
|
||||
* 'output-low'.
|
||||
*/
|
||||
|
||||
&rst_usb_hub_hog {
|
||||
output-low;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
&expander0 {
|
||||
rst-usb-low-hub-hog {
|
||||
gpio-hog;
|
||||
gpios = <13 0>;
|
||||
output-low;
|
||||
line-name = "RST_USB_HUB#";
|
||||
};
|
||||
};
|
||||
|
||||
&sel_usb_hub_hog {
|
||||
output-low;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
&gpio2 {
|
||||
sel-usb-low-hub-hog {
|
||||
gpio-hog;
|
||||
gpios = <1 GPIO_ACTIVE_HIGH>;
|
||||
output-low;
|
||||
};
|
||||
};
|
||||
|
||||
&usbotg1 {
|
||||
|
||||
@@ -15,12 +15,12 @@
|
||||
#io-channel-cells = <1>;
|
||||
};
|
||||
|
||||
mt6358codec: mt6358codec {
|
||||
mt6358codec: audio-codec {
|
||||
compatible = "mediatek,mt6358-sound";
|
||||
mediatek,dmic-mode = <0>; /* two-wires */
|
||||
};
|
||||
|
||||
mt6358regulator: mt6358regulator {
|
||||
mt6358regulator: regulators {
|
||||
compatible = "mediatek,mt6358-regulator";
|
||||
|
||||
mt6358_vdram1_reg: buck_vdram1 {
|
||||
|
||||
@@ -49,6 +49,14 @@
|
||||
interrupts-extended = <&pio 117 IRQ_TYPE_LEVEL_LOW>;
|
||||
reg = <0x2c>;
|
||||
hid-descr-addr = <0x0020>;
|
||||
/*
|
||||
* The trackpad needs a post-power-on delay of 100ms,
|
||||
* but at time of writing, the power supply for it on
|
||||
* this board is always on. The delay is therefore not
|
||||
* added to avoid impacting the readiness of the
|
||||
* trackpad.
|
||||
*/
|
||||
vdd-supply = <&mt6397_vgp6_reg>;
|
||||
wakeup-source;
|
||||
};
|
||||
};
|
||||
|
||||
@@ -30,3 +30,6 @@
|
||||
};
|
||||
};
|
||||
|
||||
&i2c2 {
|
||||
i2c-scl-internal-delay-ns = <4100>;
|
||||
};
|
||||
|
||||
@@ -18,6 +18,8 @@
|
||||
};
|
||||
|
||||
&i2c2 {
|
||||
i2c-scl-internal-delay-ns = <25000>;
|
||||
|
||||
trackpad@2c {
|
||||
compatible = "hid-over-i2c";
|
||||
reg = <0x2c>;
|
||||
|
||||
@@ -30,3 +30,6 @@
|
||||
qcom,ath10k-calibration-variant = "GO_DAMU";
|
||||
};
|
||||
|
||||
&i2c2 {
|
||||
i2c-scl-internal-delay-ns = <20000>;
|
||||
};
|
||||
|
||||
@@ -25,3 +25,6 @@
|
||||
};
|
||||
};
|
||||
|
||||
&i2c2 {
|
||||
i2c-scl-internal-delay-ns = <21500>;
|
||||
};
|
||||
|
||||
@@ -8,28 +8,32 @@
|
||||
#include <arm/cros-ec-keyboard.dtsi>
|
||||
|
||||
/ {
|
||||
pp1200_mipibrdg: pp1200-mipibrdg {
|
||||
pp1000_mipibrdg: pp1000-mipibrdg {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "pp1200_mipibrdg";
|
||||
regulator-name = "pp1000_mipibrdg";
|
||||
regulator-min-microvolt = <1000000>;
|
||||
regulator-max-microvolt = <1000000>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pp1200_mipibrdg_en>;
|
||||
pinctrl-0 = <&pp1000_mipibrdg_en>;
|
||||
|
||||
enable-active-high;
|
||||
regulator-boot-on;
|
||||
|
||||
gpio = <&pio 54 GPIO_ACTIVE_HIGH>;
|
||||
vin-supply = <&pp1800_alw>;
|
||||
};
|
||||
|
||||
pp1800_mipibrdg: pp1800-mipibrdg {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "pp1800_mipibrdg";
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pp1800_lcd_en>;
|
||||
pinctrl-0 = <&pp1800_mipibrdg_en>;
|
||||
|
||||
enable-active-high;
|
||||
regulator-boot-on;
|
||||
|
||||
gpio = <&pio 36 GPIO_ACTIVE_HIGH>;
|
||||
vin-supply = <&pp1800_alw>;
|
||||
};
|
||||
|
||||
pp3300_panel: pp3300-panel {
|
||||
@@ -44,18 +48,20 @@
|
||||
regulator-boot-on;
|
||||
|
||||
gpio = <&pio 35 GPIO_ACTIVE_HIGH>;
|
||||
vin-supply = <&pp3300_alw>;
|
||||
};
|
||||
|
||||
vddio_mipibrdg: vddio-mipibrdg {
|
||||
pp3300_mipibrdg: pp3300-mipibrdg {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "vddio_mipibrdg";
|
||||
regulator-name = "pp3300_mipibrdg";
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&vddio_mipibrdg_en>;
|
||||
pinctrl-0 = <&pp3300_mipibrdg_en>;
|
||||
|
||||
enable-active-high;
|
||||
regulator-boot-on;
|
||||
|
||||
gpio = <&pio 37 GPIO_ACTIVE_HIGH>;
|
||||
vin-supply = <&pp3300_alw>;
|
||||
};
|
||||
|
||||
volume_buttons: volume-buttons {
|
||||
@@ -146,9 +152,9 @@
|
||||
pinctrl-0 = <&anx7625_pins>;
|
||||
enable-gpios = <&pio 45 GPIO_ACTIVE_HIGH>;
|
||||
reset-gpios = <&pio 73 GPIO_ACTIVE_HIGH>;
|
||||
vdd10-supply = <&pp1200_mipibrdg>;
|
||||
vdd10-supply = <&pp1000_mipibrdg>;
|
||||
vdd18-supply = <&pp1800_mipibrdg>;
|
||||
vdd33-supply = <&vddio_mipibrdg>;
|
||||
vdd33-supply = <&pp3300_mipibrdg>;
|
||||
|
||||
ports {
|
||||
#address-cells = <1>;
|
||||
@@ -391,14 +397,14 @@
|
||||
"",
|
||||
"";
|
||||
|
||||
pp1200_mipibrdg_en: pp1200-mipibrdg-en {
|
||||
pp1000_mipibrdg_en: pp1000-mipibrdg-en {
|
||||
pins1 {
|
||||
pinmux = <PINMUX_GPIO54__FUNC_GPIO54>;
|
||||
output-low;
|
||||
};
|
||||
};
|
||||
|
||||
pp1800_lcd_en: pp1800-lcd-en {
|
||||
pp1800_mipibrdg_en: pp1800-mipibrdg-en {
|
||||
pins1 {
|
||||
pinmux = <PINMUX_GPIO36__FUNC_GPIO36>;
|
||||
output-low;
|
||||
@@ -460,7 +466,7 @@
|
||||
};
|
||||
};
|
||||
|
||||
vddio_mipibrdg_en: vddio-mipibrdg-en {
|
||||
pp3300_mipibrdg_en: pp3300-mipibrdg-en {
|
||||
pins1 {
|
||||
pinmux = <PINMUX_GPIO37__FUNC_GPIO37>;
|
||||
output-low;
|
||||
|
||||
@@ -92,9 +92,9 @@
|
||||
clock-frequency = <400000>;
|
||||
vbus-supply = <&mt6358_vcn18_reg>;
|
||||
|
||||
eeprom@54 {
|
||||
eeprom@50 {
|
||||
compatible = "atmel,24c32";
|
||||
reg = <0x54>;
|
||||
reg = <0x50>;
|
||||
pagesize = <32>;
|
||||
vcc-supply = <&mt6358_vcn18_reg>;
|
||||
};
|
||||
|
||||
@@ -79,9 +79,9 @@
|
||||
clock-frequency = <400000>;
|
||||
vbus-supply = <&mt6358_vcn18_reg>;
|
||||
|
||||
eeprom@54 {
|
||||
eeprom@50 {
|
||||
compatible = "atmel,24c64";
|
||||
reg = <0x54>;
|
||||
reg = <0x50>;
|
||||
pagesize = <32>;
|
||||
vcc-supply = <&mt6358_vcn18_reg>;
|
||||
};
|
||||
|
||||
@@ -88,9 +88,9 @@
|
||||
clock-frequency = <400000>;
|
||||
vbus-supply = <&mt6358_vcn18_reg>;
|
||||
|
||||
eeprom@54 {
|
||||
eeprom@50 {
|
||||
compatible = "atmel,24c32";
|
||||
reg = <0x54>;
|
||||
reg = <0x50>;
|
||||
pagesize = <32>;
|
||||
vcc-supply = <&mt6358_vcn18_reg>;
|
||||
};
|
||||
|
||||
@@ -290,6 +290,11 @@
|
||||
};
|
||||
};
|
||||
|
||||
&dpi0 {
|
||||
/* TODO Re-enable after DP to Type-C port muxing can be described */
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
&gic {
|
||||
mediatek,broken-save-restore-fw;
|
||||
};
|
||||
|
||||
@@ -1845,6 +1845,10 @@
|
||||
<&mmsys CLK_MM_DPI_MM>,
|
||||
<&apmixedsys CLK_APMIXED_TVDPLL>;
|
||||
clock-names = "pixel", "engine", "pll";
|
||||
|
||||
port {
|
||||
dpi_out: endpoint { };
|
||||
};
|
||||
};
|
||||
|
||||
mutex: mutex@14016000 {
|
||||
|
||||
@@ -956,9 +956,9 @@
|
||||
#size-cells = <0>;
|
||||
#power-domain-cells = <1>;
|
||||
|
||||
power-domain@MT8188_POWER_DOMAIN_MFG1 {
|
||||
mfg1: power-domain@MT8188_POWER_DOMAIN_MFG1 {
|
||||
reg = <MT8188_POWER_DOMAIN_MFG1>;
|
||||
clocks = <&topckgen CLK_APMIXED_MFGPLL>,
|
||||
clocks = <&apmixedsys CLK_APMIXED_MFGPLL>,
|
||||
<&topckgen CLK_TOP_MFG_CORE_TMP>;
|
||||
clock-names = "mfg", "alt";
|
||||
mediatek,infracfg = <&infracfg_ao>;
|
||||
@@ -1689,7 +1689,6 @@
|
||||
<&clk26m>;
|
||||
clock-names = "ref", "da_ref";
|
||||
#phy-cells = <1>;
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@@ -438,7 +438,7 @@
|
||||
/* Realtek RT5682i or RT5682s, sharing the same configuration */
|
||||
reg = <0x1a>;
|
||||
interrupts-extended = <&pio 89 IRQ_TYPE_EDGE_BOTH>;
|
||||
#sound-dai-cells = <0>;
|
||||
#sound-dai-cells = <1>;
|
||||
realtek,jd-src = <1>;
|
||||
|
||||
AVDD-supply = <&mt6359_vio18_ldo_reg>;
|
||||
@@ -1181,7 +1181,7 @@
|
||||
link-name = "ETDM1_OUT_BE";
|
||||
mediatek,clk-provider = "cpu";
|
||||
codec {
|
||||
sound-dai = <&audio_codec>;
|
||||
sound-dai = <&audio_codec 0>;
|
||||
};
|
||||
};
|
||||
|
||||
@@ -1189,7 +1189,7 @@
|
||||
link-name = "ETDM2_IN_BE";
|
||||
mediatek,clk-provider = "cpu";
|
||||
codec {
|
||||
sound-dai = <&audio_codec>;
|
||||
sound-dai = <&audio_codec 0>;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@@ -487,7 +487,7 @@
|
||||
};
|
||||
|
||||
infracfg_ao: syscon@10001000 {
|
||||
compatible = "mediatek,mt8195-infracfg_ao", "syscon", "simple-mfd";
|
||||
compatible = "mediatek,mt8195-infracfg_ao", "syscon";
|
||||
reg = <0 0x10001000 0 0x1000>;
|
||||
#clock-cells = <1>;
|
||||
#reset-cells = <1>;
|
||||
@@ -3331,11 +3331,9 @@
|
||||
mutex1: mutex@1c101000 {
|
||||
compatible = "mediatek,mt8195-disp-mutex";
|
||||
reg = <0 0x1c101000 0 0x1000>;
|
||||
reg-names = "vdo1_mutex";
|
||||
interrupts = <GIC_SPI 494 IRQ_TYPE_LEVEL_HIGH 0>;
|
||||
power-domains = <&spm MT8195_POWER_DOMAIN_VDOSYS1>;
|
||||
clocks = <&vdosys1 CLK_VDO1_DISP_MUTEX>;
|
||||
clock-names = "vdo1_mutex";
|
||||
mediatek,gce-client-reg = <&gce0 SUBSYS_1c10XXXX 0x1000 0x1000>;
|
||||
mediatek,gce-events = <CMDQ_EVENT_VDO1_STREAM_DONE_ENG_0>;
|
||||
};
|
||||
|
||||
@@ -187,7 +187,7 @@
|
||||
compatible = "snps,dwmac-mdio";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
eth_phy0: eth-phy0@1 {
|
||||
eth_phy0: ethernet-phy@1 {
|
||||
compatible = "ethernet-phy-id001c.c916";
|
||||
reg = <0x1>;
|
||||
};
|
||||
|
||||
@@ -351,7 +351,7 @@
|
||||
#size-cells = <0>;
|
||||
|
||||
wifi@1 {
|
||||
compatible = "brcm,bcm4354-fmac";
|
||||
compatible = "brcm,bcm4354-fmac", "brcm,bcm4329-fmac";
|
||||
reg = <1>;
|
||||
interrupt-parent = <&gpio>;
|
||||
interrupts = <TEGRA_GPIO(H, 2) IRQ_TYPE_LEVEL_HIGH>;
|
||||
|
||||
@@ -707,7 +707,7 @@
|
||||
};
|
||||
|
||||
&remoteproc_mpss {
|
||||
firmware-name = "qcom/qcs6490/modem.mdt";
|
||||
firmware-name = "qcom/qcs6490/modem.mbn";
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
|
||||
@@ -3889,7 +3889,7 @@
|
||||
};
|
||||
|
||||
cpufreq_hw: cpufreq@18323000 {
|
||||
compatible = "qcom,cpufreq-hw";
|
||||
compatible = "qcom,sc8180x-cpufreq-hw", "qcom,cpufreq-hw";
|
||||
reg = <0 0x18323000 0 0x1400>, <0 0x18325800 0 0x1400>;
|
||||
reg-names = "freq-domain0", "freq-domain1";
|
||||
|
||||
|
||||
@@ -104,7 +104,7 @@
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "vreg_l10a_1p8";
|
||||
regulator-min-microvolt = <1804000>;
|
||||
regulator-max-microvolt = <1896000>;
|
||||
regulator-max-microvolt = <1804000>;
|
||||
regulator-always-on;
|
||||
regulator-boot-on;
|
||||
};
|
||||
|
||||
@@ -1376,43 +1376,43 @@
|
||||
opp-850000000 {
|
||||
opp-hz = /bits/ 64 <850000000>;
|
||||
opp-level = <RPMH_REGULATOR_LEVEL_TURBO_L1>;
|
||||
opp-supported-hw = <0x02>;
|
||||
opp-supported-hw = <0x03>;
|
||||
};
|
||||
|
||||
opp-800000000 {
|
||||
opp-hz = /bits/ 64 <800000000>;
|
||||
opp-level = <RPMH_REGULATOR_LEVEL_TURBO>;
|
||||
opp-supported-hw = <0x04>;
|
||||
opp-supported-hw = <0x07>;
|
||||
};
|
||||
|
||||
opp-650000000 {
|
||||
opp-hz = /bits/ 64 <650000000>;
|
||||
opp-level = <RPMH_REGULATOR_LEVEL_NOM_L1>;
|
||||
opp-supported-hw = <0x08>;
|
||||
opp-supported-hw = <0x0f>;
|
||||
};
|
||||
|
||||
opp-565000000 {
|
||||
opp-hz = /bits/ 64 <565000000>;
|
||||
opp-level = <RPMH_REGULATOR_LEVEL_NOM>;
|
||||
opp-supported-hw = <0x10>;
|
||||
opp-supported-hw = <0x1f>;
|
||||
};
|
||||
|
||||
opp-430000000 {
|
||||
opp-hz = /bits/ 64 <430000000>;
|
||||
opp-level = <RPMH_REGULATOR_LEVEL_SVS_L1>;
|
||||
opp-supported-hw = <0xff>;
|
||||
opp-supported-hw = <0x1f>;
|
||||
};
|
||||
|
||||
opp-355000000 {
|
||||
opp-hz = /bits/ 64 <355000000>;
|
||||
opp-level = <RPMH_REGULATOR_LEVEL_SVS>;
|
||||
opp-supported-hw = <0xff>;
|
||||
opp-supported-hw = <0x1f>;
|
||||
};
|
||||
|
||||
opp-253000000 {
|
||||
opp-hz = /bits/ 64 <253000000>;
|
||||
opp-level = <RPMH_REGULATOR_LEVEL_LOW_SVS>;
|
||||
opp-supported-hw = <0xff>;
|
||||
opp-supported-hw = <0x1f>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
@@ -594,8 +594,6 @@
|
||||
vdda-phy-supply = <&vreg_l3e_1p2>;
|
||||
vdda-pll-supply = <&vreg_l1j_0p8>;
|
||||
|
||||
orientation-switch;
|
||||
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
@@ -628,8 +626,6 @@
|
||||
vdda-phy-supply = <&vreg_l3e_1p2>;
|
||||
vdda-pll-supply = <&vreg_l2d_0p9>;
|
||||
|
||||
orientation-switch;
|
||||
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
|
||||
@@ -898,8 +898,6 @@
|
||||
vdda-phy-supply = <&vreg_l3e_1p2>;
|
||||
vdda-pll-supply = <&vreg_l1j_0p8>;
|
||||
|
||||
orientation-switch;
|
||||
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
@@ -932,8 +930,6 @@
|
||||
vdda-phy-supply = <&vreg_l3e_1p2>;
|
||||
vdda-pll-supply = <&vreg_l2d_0p9>;
|
||||
|
||||
orientation-switch;
|
||||
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
|
||||
@@ -279,8 +279,8 @@
|
||||
idle-state-name = "ret";
|
||||
arm,psci-suspend-param = <0x00000004>;
|
||||
entry-latency-us = <180>;
|
||||
exit-latency-us = <320>;
|
||||
min-residency-us = <1000>;
|
||||
exit-latency-us = <500>;
|
||||
min-residency-us = <600>;
|
||||
};
|
||||
};
|
||||
|
||||
@@ -299,7 +299,7 @@
|
||||
idle-state-name = "ret-pll-off";
|
||||
arm,psci-suspend-param = <0x01000054>;
|
||||
entry-latency-us = <2200>;
|
||||
exit-latency-us = <2500>;
|
||||
exit-latency-us = <4000>;
|
||||
min-residency-us = <7000>;
|
||||
};
|
||||
};
|
||||
@@ -5752,7 +5752,7 @@
|
||||
intc: interrupt-controller@17000000 {
|
||||
compatible = "arm,gic-v3";
|
||||
reg = <0 0x17000000 0 0x10000>, /* GICD */
|
||||
<0 0x17080000 0 0x480000>; /* GICR * 12 */
|
||||
<0 0x17080000 0 0x300000>; /* GICR * 12 */
|
||||
|
||||
interrupts = <GIC_PPI 9 IRQ_TYPE_LEVEL_HIGH>;
|
||||
|
||||
|
||||
@@ -69,9 +69,6 @@
|
||||
|
||||
status = "okay";
|
||||
|
||||
/* Single DAI */
|
||||
#sound-dai-cells = <0>;
|
||||
|
||||
rsnd_port: port {
|
||||
rsnd_endpoint: endpoint {
|
||||
remote-endpoint = <&dw_hdmi0_snd_in>;
|
||||
|
||||
@@ -84,9 +84,6 @@
|
||||
pinctrl-names = "default";
|
||||
status = "okay";
|
||||
|
||||
/* Single DAI */
|
||||
#sound-dai-cells = <0>;
|
||||
|
||||
/* audio_clkout0/1/2/3 */
|
||||
#clock-cells = <1>;
|
||||
clock-frequency = <12288000 11289600>;
|
||||
|
||||
@@ -49,7 +49,6 @@
|
||||
|
||||
vcc3v3_eth: vcc3v3-eth-regulator {
|
||||
compatible = "regulator-fixed";
|
||||
enable-active-low;
|
||||
gpio = <&gpio0 RK_PC0 GPIO_ACTIVE_LOW>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&vcc3v3_eth_enn>;
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
|
||||
sound {
|
||||
compatible = "audio-graph-card";
|
||||
label = "rockchip,es8388-codec";
|
||||
label = "rockchip,es8388";
|
||||
widgets = "Microphone", "Mic Jack",
|
||||
"Headphone", "Headphones";
|
||||
routing = "LINPUT2", "Mic Jack",
|
||||
|
||||
@@ -71,7 +71,6 @@
|
||||
|
||||
vcc_3v3_sd_s0: vcc-3v3-sd-s0-regulator {
|
||||
compatible = "regulator-fixed";
|
||||
enable-active-low;
|
||||
gpios = <&gpio4 RK_PB5 GPIO_ACTIVE_LOW>;
|
||||
regulator-name = "vcc_3v3_sd_s0";
|
||||
regulator-boot-on;
|
||||
|
||||
@@ -433,8 +433,6 @@
|
||||
0 0 0 0
|
||||
0 0 0 0
|
||||
>;
|
||||
tx-num-evt = <32>;
|
||||
rx-num-evt = <32>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
|
||||
@@ -254,7 +254,7 @@
|
||||
};
|
||||
};
|
||||
|
||||
&main_pmx1 {
|
||||
&main_pmx2 {
|
||||
main_usbss0_pins_default: main-usbss0-default-pins {
|
||||
pinctrl-single,pins = <
|
||||
J721E_IOPAD(0x04, PIN_OUTPUT, 0) /* (T4) USB0_DRVVBUS */
|
||||
|
||||
@@ -426,10 +426,28 @@
|
||||
pinctrl-single,function-mask = <0xffffffff>;
|
||||
};
|
||||
|
||||
main_pmx1: pinctrl@11c11c {
|
||||
main_pmx1: pinctrl@11c110 {
|
||||
compatible = "ti,j7200-padconf", "pinctrl-single";
|
||||
/* Proxy 0 addressing */
|
||||
reg = <0x00 0x11c11c 0x00 0xc>;
|
||||
reg = <0x00 0x11c110 0x00 0x004>;
|
||||
#pinctrl-cells = <1>;
|
||||
pinctrl-single,register-width = <32>;
|
||||
pinctrl-single,function-mask = <0xffffffff>;
|
||||
};
|
||||
|
||||
main_pmx2: pinctrl@11c11c {
|
||||
compatible = "ti,j7200-padconf", "pinctrl-single";
|
||||
/* Proxy 0 addressing */
|
||||
reg = <0x00 0x11c11c 0x00 0x00c>;
|
||||
#pinctrl-cells = <1>;
|
||||
pinctrl-single,register-width = <32>;
|
||||
pinctrl-single,function-mask = <0xffffffff>;
|
||||
};
|
||||
|
||||
main_pmx3: pinctrl@11c164 {
|
||||
compatible = "ti,j7200-padconf", "pinctrl-single";
|
||||
/* Proxy 0 addressing */
|
||||
reg = <0x00 0x11c164 0x00 0x008>;
|
||||
#pinctrl-cells = <1>;
|
||||
pinctrl-single,register-width = <32>;
|
||||
pinctrl-single,function-mask = <0xffffffff>;
|
||||
@@ -1145,7 +1163,7 @@
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
power-domains = <&k3_pds 266 TI_SCI_PD_EXCLUSIVE>;
|
||||
clocks = <&k3_clks 266 1>;
|
||||
clocks = <&k3_clks 266 4>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@@ -1156,7 +1174,7 @@
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
power-domains = <&k3_pds 267 TI_SCI_PD_EXCLUSIVE>;
|
||||
clocks = <&k3_clks 267 1>;
|
||||
clocks = <&k3_clks 267 4>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@@ -1167,7 +1185,7 @@
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
power-domains = <&k3_pds 268 TI_SCI_PD_EXCLUSIVE>;
|
||||
clocks = <&k3_clks 268 1>;
|
||||
clocks = <&k3_clks 268 4>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@@ -1178,7 +1196,7 @@
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
power-domains = <&k3_pds 269 TI_SCI_PD_EXCLUSIVE>;
|
||||
clocks = <&k3_clks 269 1>;
|
||||
clocks = <&k3_clks 269 4>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@@ -1189,7 +1207,7 @@
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
power-domains = <&k3_pds 270 TI_SCI_PD_EXCLUSIVE>;
|
||||
clocks = <&k3_clks 270 1>;
|
||||
clocks = <&k3_clks 270 2>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@@ -1200,7 +1218,7 @@
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
power-domains = <&k3_pds 271 TI_SCI_PD_EXCLUSIVE>;
|
||||
clocks = <&k3_clks 271 1>;
|
||||
clocks = <&k3_clks 271 4>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@@ -1211,7 +1229,7 @@
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
power-domains = <&k3_pds 272 TI_SCI_PD_EXCLUSIVE>;
|
||||
clocks = <&k3_clks 272 1>;
|
||||
clocks = <&k3_clks 272 4>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@@ -1222,7 +1240,7 @@
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
power-domains = <&k3_pds 273 TI_SCI_PD_EXCLUSIVE>;
|
||||
clocks = <&k3_clks 273 1>;
|
||||
clocks = <&k3_clks 273 4>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
|
||||
@@ -494,7 +494,7 @@
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
power-domains = <&k3_pds 274 TI_SCI_PD_EXCLUSIVE>;
|
||||
clocks = <&k3_clks 274 0>;
|
||||
clocks = <&k3_clks 274 4>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@@ -505,7 +505,7 @@
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
power-domains = <&k3_pds 275 TI_SCI_PD_EXCLUSIVE>;
|
||||
clocks = <&k3_clks 275 0>;
|
||||
clocks = <&k3_clks 275 4>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@@ -516,7 +516,7 @@
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
power-domains = <&k3_pds 276 TI_SCI_PD_EXCLUSIVE>;
|
||||
clocks = <&k3_clks 276 0>;
|
||||
clocks = <&k3_clks 276 2>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
|
||||
@@ -654,7 +654,7 @@
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
power-domains = <&k3_pds 274 TI_SCI_PD_EXCLUSIVE>;
|
||||
clocks = <&k3_clks 274 0>;
|
||||
clocks = <&k3_clks 274 1>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@@ -665,7 +665,7 @@
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
power-domains = <&k3_pds 275 TI_SCI_PD_EXCLUSIVE>;
|
||||
clocks = <&k3_clks 275 0>;
|
||||
clocks = <&k3_clks 275 1>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@@ -676,7 +676,7 @@
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
power-domains = <&k3_pds 276 TI_SCI_PD_EXCLUSIVE>;
|
||||
clocks = <&k3_clks 276 0>;
|
||||
clocks = <&k3_clks 276 1>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
|
||||
@@ -1708,7 +1708,7 @@
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
power-domains = <&k3_pds 339 TI_SCI_PD_EXCLUSIVE>;
|
||||
clocks = <&k3_clks 339 1>;
|
||||
clocks = <&k3_clks 339 2>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@@ -1719,7 +1719,7 @@
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
power-domains = <&k3_pds 340 TI_SCI_PD_EXCLUSIVE>;
|
||||
clocks = <&k3_clks 340 1>;
|
||||
clocks = <&k3_clks 340 2>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@@ -1730,7 +1730,7 @@
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
power-domains = <&k3_pds 341 TI_SCI_PD_EXCLUSIVE>;
|
||||
clocks = <&k3_clks 341 1>;
|
||||
clocks = <&k3_clks 341 2>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@@ -1741,7 +1741,7 @@
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
power-domains = <&k3_pds 342 TI_SCI_PD_EXCLUSIVE>;
|
||||
clocks = <&k3_clks 342 1>;
|
||||
clocks = <&k3_clks 342 2>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@@ -1752,7 +1752,7 @@
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
power-domains = <&k3_pds 343 TI_SCI_PD_EXCLUSIVE>;
|
||||
clocks = <&k3_clks 343 1>;
|
||||
clocks = <&k3_clks 343 2>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@@ -1763,7 +1763,7 @@
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
power-domains = <&k3_pds 344 TI_SCI_PD_EXCLUSIVE>;
|
||||
clocks = <&k3_clks 344 1>;
|
||||
clocks = <&k3_clks 344 2>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@@ -1774,7 +1774,7 @@
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
power-domains = <&k3_pds 345 TI_SCI_PD_EXCLUSIVE>;
|
||||
clocks = <&k3_clks 345 1>;
|
||||
clocks = <&k3_clks 345 2>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@@ -1785,7 +1785,7 @@
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
power-domains = <&k3_pds 346 TI_SCI_PD_EXCLUSIVE>;
|
||||
clocks = <&k3_clks 346 1>;
|
||||
clocks = <&k3_clks 346 2>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
|
||||
@@ -425,7 +425,7 @@
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
power-domains = <&k3_pds 347 TI_SCI_PD_EXCLUSIVE>;
|
||||
clocks = <&k3_clks 347 0>;
|
||||
clocks = <&k3_clks 347 2>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@@ -436,7 +436,7 @@
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
power-domains = <&k3_pds 348 TI_SCI_PD_EXCLUSIVE>;
|
||||
clocks = <&k3_clks 348 0>;
|
||||
clocks = <&k3_clks 348 2>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@@ -447,7 +447,7 @@
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
power-domains = <&k3_pds 349 TI_SCI_PD_EXCLUSIVE>;
|
||||
clocks = <&k3_clks 349 0>;
|
||||
clocks = <&k3_clks 349 2>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
|
||||
@@ -353,6 +353,7 @@ __AARCH64_INSN_FUNCS(ldrsw_lit, 0xFF000000, 0x98000000)
|
||||
__AARCH64_INSN_FUNCS(exclusive, 0x3F800000, 0x08000000)
|
||||
__AARCH64_INSN_FUNCS(load_ex, 0x3F400000, 0x08400000)
|
||||
__AARCH64_INSN_FUNCS(store_ex, 0x3F400000, 0x08000000)
|
||||
__AARCH64_INSN_FUNCS(mops, 0x3B200C00, 0x19000400)
|
||||
__AARCH64_INSN_FUNCS(stp, 0x7FC00000, 0x29000000)
|
||||
__AARCH64_INSN_FUNCS(ldp, 0x7FC00000, 0x29400000)
|
||||
__AARCH64_INSN_FUNCS(stp_post, 0x7FC00000, 0x28800000)
|
||||
|
||||
@@ -228,6 +228,7 @@ static const struct arm64_ftr_bits ftr_id_aa64isar0[] = {
|
||||
};
|
||||
|
||||
static const struct arm64_ftr_bits ftr_id_aa64isar1[] = {
|
||||
ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_EL1_XS_SHIFT, 4, 0),
|
||||
ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_EL1_I8MM_SHIFT, 4, 0),
|
||||
ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_EL1_DGH_SHIFT, 4, 0),
|
||||
ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_EL1_BF16_SHIFT, 4, 0),
|
||||
|
||||
@@ -58,10 +58,13 @@ static bool __kprobes aarch64_insn_is_steppable(u32 insn)
|
||||
* Instructions which load PC relative literals are not going to work
|
||||
* when executed from an XOL slot. Instructions doing an exclusive
|
||||
* load/store are not going to complete successfully when single-step
|
||||
* exception handling happens in the middle of the sequence.
|
||||
* exception handling happens in the middle of the sequence. Memory
|
||||
* copy/set instructions require that all three instructions be placed
|
||||
* consecutively in memory.
|
||||
*/
|
||||
if (aarch64_insn_uses_literal(insn) ||
|
||||
aarch64_insn_is_exclusive(insn))
|
||||
aarch64_insn_is_exclusive(insn) ||
|
||||
aarch64_insn_is_mops(insn))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
|
||||
@@ -175,7 +175,11 @@ static void __init setup_machine_fdt(phys_addr_t dt_phys)
|
||||
if (dt_virt)
|
||||
memblock_reserve(dt_phys, size);
|
||||
|
||||
if (!dt_virt || !early_init_dt_scan(dt_virt)) {
|
||||
/*
|
||||
* dt_virt is a fixmap address, hence __pa(dt_virt) can't be used.
|
||||
* Pass dt_phys directly.
|
||||
*/
|
||||
if (!early_init_dt_scan(dt_virt, dt_phys)) {
|
||||
pr_crit("\n"
|
||||
"Error: invalid device tree blob at physical address %pa (virtual address 0x%px)\n"
|
||||
"The dtb must be 8-byte aligned and must not exceed 2 MB in size\n"
|
||||
|
||||
@@ -320,6 +320,9 @@ SECTIONS
|
||||
__initdata_end = .;
|
||||
__init_end = .;
|
||||
|
||||
.data.rel.ro : { *(.data.rel.ro) }
|
||||
ASSERT(SIZEOF(.data.rel.ro) == 0, "Unexpected RELRO detected!")
|
||||
|
||||
_data = .;
|
||||
_sdata = .;
|
||||
RW_DATA(L1_CACHE_BYTES, PAGE_SIZE, THREAD_ALIGN)
|
||||
@@ -378,9 +381,6 @@ SECTIONS
|
||||
*(.plt) *(.plt.*) *(.iplt) *(.igot .igot.plt)
|
||||
}
|
||||
ASSERT(SIZEOF(.plt) == 0, "Unexpected run-time procedure linkages detected!")
|
||||
|
||||
.data.rel.ro : { *(.data.rel.ro) }
|
||||
ASSERT(SIZEOF(.data.rel.ro) == 0, "Unexpected RELRO detected!")
|
||||
}
|
||||
|
||||
#include "image-vars.h"
|
||||
|
||||
@@ -2094,6 +2094,12 @@ static void restore_args(struct jit_ctx *ctx, int args_off, int nregs)
|
||||
}
|
||||
}
|
||||
|
||||
static bool is_struct_ops_tramp(const struct bpf_tramp_links *fentry_links)
|
||||
{
|
||||
return fentry_links->nr_links == 1 &&
|
||||
fentry_links->links[0]->link.type == BPF_LINK_TYPE_STRUCT_OPS;
|
||||
}
|
||||
|
||||
/* Based on the x86's implementation of arch_prepare_bpf_trampoline().
|
||||
*
|
||||
* bpf prog and function entry before bpf trampoline hooked:
|
||||
@@ -2123,6 +2129,7 @@ static int prepare_trampoline(struct jit_ctx *ctx, struct bpf_tramp_image *im,
|
||||
struct bpf_tramp_links *fmod_ret = &tlinks[BPF_TRAMP_MODIFY_RETURN];
|
||||
bool save_ret;
|
||||
__le32 **branches = NULL;
|
||||
bool is_struct_ops = is_struct_ops_tramp(fentry);
|
||||
|
||||
/* trampoline stack layout:
|
||||
* [ parent ip ]
|
||||
@@ -2191,11 +2198,14 @@ static int prepare_trampoline(struct jit_ctx *ctx, struct bpf_tramp_image *im,
|
||||
*/
|
||||
emit_bti(A64_BTI_JC, ctx);
|
||||
|
||||
/* frame for parent function */
|
||||
emit(A64_PUSH(A64_FP, A64_R(9), A64_SP), ctx);
|
||||
emit(A64_MOV(1, A64_FP, A64_SP), ctx);
|
||||
/* x9 is not set for struct_ops */
|
||||
if (!is_struct_ops) {
|
||||
/* frame for parent function */
|
||||
emit(A64_PUSH(A64_FP, A64_R(9), A64_SP), ctx);
|
||||
emit(A64_MOV(1, A64_FP, A64_SP), ctx);
|
||||
}
|
||||
|
||||
/* frame for patched function */
|
||||
/* frame for patched function for tracing, or caller for struct_ops */
|
||||
emit(A64_PUSH(A64_FP, A64_LR, A64_SP), ctx);
|
||||
emit(A64_MOV(1, A64_FP, A64_SP), ctx);
|
||||
|
||||
@@ -2289,19 +2299,24 @@ static int prepare_trampoline(struct jit_ctx *ctx, struct bpf_tramp_image *im,
|
||||
/* reset SP */
|
||||
emit(A64_MOV(1, A64_SP, A64_FP), ctx);
|
||||
|
||||
/* pop frames */
|
||||
emit(A64_POP(A64_FP, A64_LR, A64_SP), ctx);
|
||||
emit(A64_POP(A64_FP, A64_R(9), A64_SP), ctx);
|
||||
|
||||
if (flags & BPF_TRAMP_F_SKIP_FRAME) {
|
||||
/* skip patched function, return to parent */
|
||||
emit(A64_MOV(1, A64_LR, A64_R(9)), ctx);
|
||||
emit(A64_RET(A64_R(9)), ctx);
|
||||
if (is_struct_ops) {
|
||||
emit(A64_POP(A64_FP, A64_LR, A64_SP), ctx);
|
||||
emit(A64_RET(A64_LR), ctx);
|
||||
} else {
|
||||
/* return to patched function */
|
||||
emit(A64_MOV(1, A64_R(10), A64_LR), ctx);
|
||||
emit(A64_MOV(1, A64_LR, A64_R(9)), ctx);
|
||||
emit(A64_RET(A64_R(10)), ctx);
|
||||
/* pop frames */
|
||||
emit(A64_POP(A64_FP, A64_LR, A64_SP), ctx);
|
||||
emit(A64_POP(A64_FP, A64_R(9), A64_SP), ctx);
|
||||
|
||||
if (flags & BPF_TRAMP_F_SKIP_FRAME) {
|
||||
/* skip patched function, return to parent */
|
||||
emit(A64_MOV(1, A64_LR, A64_R(9)), ctx);
|
||||
emit(A64_RET(A64_R(9)), ctx);
|
||||
} else {
|
||||
/* return to patched function */
|
||||
emit(A64_MOV(1, A64_R(10), A64_LR), ctx);
|
||||
emit(A64_MOV(1, A64_LR, A64_R(9)), ctx);
|
||||
emit(A64_RET(A64_R(10)), ctx);
|
||||
}
|
||||
}
|
||||
|
||||
kfree(branches);
|
||||
|
||||
@@ -112,9 +112,9 @@ asmlinkage __visible void __init csky_start(unsigned int unused,
|
||||
pre_trap_init();
|
||||
|
||||
if (dtb_start == NULL)
|
||||
early_init_dt_scan(__dtb_start);
|
||||
early_init_dt_scan(__dtb_start, __pa(dtb_start));
|
||||
else
|
||||
early_init_dt_scan(dtb_start);
|
||||
early_init_dt_scan(dtb_start, __pa(dtb_start));
|
||||
|
||||
start_kernel();
|
||||
|
||||
|
||||
@@ -291,7 +291,7 @@ static void __init fdt_setup(void)
|
||||
if (!fdt_pointer || fdt_check_header(fdt_pointer))
|
||||
return;
|
||||
|
||||
early_init_dt_scan(fdt_pointer);
|
||||
early_init_dt_scan(fdt_pointer, __pa(fdt_pointer));
|
||||
early_init_fdt_reserve_self();
|
||||
|
||||
max_low_pfn = PFN_PHYS(memblock_end_of_DRAM());
|
||||
|
||||
@@ -93,7 +93,7 @@ static struct platform_device mcf_uart = {
|
||||
.dev.platform_data = mcf_uart_platform_data,
|
||||
};
|
||||
|
||||
#if IS_ENABLED(CONFIG_FEC)
|
||||
#ifdef MCFFEC_BASE0
|
||||
|
||||
#ifdef CONFIG_M5441x
|
||||
#define FEC_NAME "enet-fec"
|
||||
@@ -145,6 +145,7 @@ static struct platform_device mcf_fec0 = {
|
||||
.platform_data = FEC_PDATA,
|
||||
}
|
||||
};
|
||||
#endif /* MCFFEC_BASE0 */
|
||||
|
||||
#ifdef MCFFEC_BASE1
|
||||
static struct resource mcf_fec1_resources[] = {
|
||||
@@ -182,7 +183,6 @@ static struct platform_device mcf_fec1 = {
|
||||
}
|
||||
};
|
||||
#endif /* MCFFEC_BASE1 */
|
||||
#endif /* CONFIG_FEC */
|
||||
|
||||
#if IS_ENABLED(CONFIG_SPI_COLDFIRE_QSPI)
|
||||
/*
|
||||
@@ -624,12 +624,12 @@ static struct platform_device mcf_flexcan0 = {
|
||||
|
||||
static struct platform_device *mcf_devices[] __initdata = {
|
||||
&mcf_uart,
|
||||
#if IS_ENABLED(CONFIG_FEC)
|
||||
#ifdef MCFFEC_BASE0
|
||||
&mcf_fec0,
|
||||
#endif
|
||||
#ifdef MCFFEC_BASE1
|
||||
&mcf_fec1,
|
||||
#endif
|
||||
#endif
|
||||
#if IS_ENABLED(CONFIG_SPI_COLDFIRE_QSPI)
|
||||
&mcf_qspi,
|
||||
#endif
|
||||
|
||||
@@ -136,7 +136,7 @@ static inline void gpio_free(unsigned gpio)
|
||||
* read-modify-write as well as those controlled by the EPORT and GPIO modules.
|
||||
*/
|
||||
#define MCFGPIO_SCR_START 40
|
||||
#elif defined(CONFIGM5441x)
|
||||
#elif defined(CONFIG_M5441x)
|
||||
/* The m5441x EPORT doesn't have its own GPIO port, uses PORT C */
|
||||
#define MCFGPIO_SCR_START 0
|
||||
#else
|
||||
|
||||
@@ -93,8 +93,8 @@ struct pcc_regs {
|
||||
#define M147_SCC_B_ADDR 0xfffe3000
|
||||
#define M147_SCC_PCLK 5000000
|
||||
|
||||
#define MVME147_IRQ_SCSI_PORT (IRQ_USER+0x45)
|
||||
#define MVME147_IRQ_SCSI_DMA (IRQ_USER+0x46)
|
||||
#define MVME147_IRQ_SCSI_PORT (IRQ_USER + 5)
|
||||
#define MVME147_IRQ_SCSI_DMA (IRQ_USER + 6)
|
||||
|
||||
/* SCC interrupts, for MVME147 */
|
||||
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
#include <asm/setup.h>
|
||||
|
||||
|
||||
#include "../mvme147/mvme147.h"
|
||||
#include "../mvme16x/mvme16x.h"
|
||||
|
||||
asmlinkage void __init debug_cons_nputs(const char *s, unsigned n);
|
||||
@@ -22,7 +23,9 @@ static void __ref debug_cons_write(struct console *c,
|
||||
{
|
||||
#if !(defined(CONFIG_SUN3) || defined(CONFIG_M68000) || \
|
||||
defined(CONFIG_COLDFIRE))
|
||||
if (MACH_IS_MVME16x)
|
||||
if (MACH_IS_MVME147)
|
||||
mvme147_scc_write(c, s, n);
|
||||
else if (MACH_IS_MVME16x)
|
||||
mvme16x_cons_write(c, s, n);
|
||||
else
|
||||
debug_cons_nputs(s, n);
|
||||
|
||||
@@ -32,6 +32,7 @@
|
||||
#include <asm/mvme147hw.h>
|
||||
#include <asm/config.h>
|
||||
|
||||
#include "mvme147.h"
|
||||
|
||||
static void mvme147_get_model(char *model);
|
||||
extern void mvme147_sched_init(void);
|
||||
@@ -185,3 +186,32 @@ int mvme147_hwclk(int op, struct rtc_time *t)
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void scc_delay(void)
|
||||
{
|
||||
__asm__ __volatile__ ("nop; nop;");
|
||||
}
|
||||
|
||||
static void scc_write(char ch)
|
||||
{
|
||||
do {
|
||||
scc_delay();
|
||||
} while (!(in_8(M147_SCC_A_ADDR) & BIT(2)));
|
||||
scc_delay();
|
||||
out_8(M147_SCC_A_ADDR, 8);
|
||||
scc_delay();
|
||||
out_8(M147_SCC_A_ADDR, ch);
|
||||
}
|
||||
|
||||
void mvme147_scc_write(struct console *co, const char *str, unsigned int count)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
local_irq_save(flags);
|
||||
while (count--) {
|
||||
if (*str == '\n')
|
||||
scc_write('\r');
|
||||
scc_write(*str++);
|
||||
}
|
||||
local_irq_restore(flags);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
|
||||
struct console;
|
||||
|
||||
/* config.c */
|
||||
void mvme147_scc_write(struct console *co, const char *str, unsigned int count);
|
||||
@@ -16,6 +16,7 @@
|
||||
#include <asm/page.h>
|
||||
#include <linux/ftrace.h>
|
||||
#include <linux/uaccess.h>
|
||||
#include <asm/xilinx_mb_manager.h>
|
||||
|
||||
#ifdef CONFIG_FUNCTION_TRACER
|
||||
extern void _mcount(void);
|
||||
@@ -46,3 +47,12 @@ extern void __udivsi3(void);
|
||||
EXPORT_SYMBOL(__udivsi3);
|
||||
extern void __umodsi3(void);
|
||||
EXPORT_SYMBOL(__umodsi3);
|
||||
|
||||
#ifdef CONFIG_MB_MANAGER
|
||||
extern void xmb_manager_register(uintptr_t phys_baseaddr, u32 cr_val,
|
||||
void (*callback)(void *data),
|
||||
void *priv, void (*reset_callback)(void *data));
|
||||
EXPORT_SYMBOL(xmb_manager_register);
|
||||
extern asmlinkage void xmb_inject_err(void);
|
||||
EXPORT_SYMBOL(xmb_inject_err);
|
||||
#endif
|
||||
|
||||
@@ -18,7 +18,7 @@ void __init early_init_devtree(void *params)
|
||||
{
|
||||
pr_debug(" -> early_init_devtree(%p)\n", params);
|
||||
|
||||
early_init_dt_scan(params);
|
||||
early_init_dt_scan(params, __pa(params));
|
||||
if (!strlen(boot_command_line))
|
||||
strscpy(boot_command_line, cmd_line, COMMAND_LINE_SIZE);
|
||||
|
||||
|
||||
@@ -97,7 +97,7 @@ do { \
|
||||
} \
|
||||
} while (0)
|
||||
#else
|
||||
# define __sanitize_fcr31(next)
|
||||
# define __sanitize_fcr31(next) do { (void) (next); } while (0)
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
||||
@@ -41,7 +41,7 @@ char *mips_get_machine_name(void)
|
||||
|
||||
void __init __dt_setup_arch(void *bph)
|
||||
{
|
||||
if (!early_init_dt_scan(bph))
|
||||
if (!early_init_dt_scan(bph, __pa(bph)))
|
||||
return;
|
||||
|
||||
mips_set_machine_name(of_flat_dt_get_machine_name());
|
||||
|
||||
@@ -337,7 +337,7 @@ void *__init relocate_kernel(void)
|
||||
#if defined(CONFIG_USE_OF)
|
||||
/* Deal with the device tree */
|
||||
fdt = plat_get_fdt();
|
||||
early_init_dt_scan(fdt);
|
||||
early_init_dt_scan(fdt, __pa(fdt));
|
||||
if (boot_command_line[0]) {
|
||||
/* Boot command line was passed in device tree */
|
||||
strscpy(arcs_cmdline, boot_command_line, COMMAND_LINE_SIZE);
|
||||
|
||||
@@ -27,7 +27,7 @@ void __init early_init_devtree(void *params)
|
||||
if (be32_to_cpup((__be32 *)CONFIG_NIOS2_DTB_PHYS_ADDR) ==
|
||||
OF_DT_HEADER) {
|
||||
params = (void *)CONFIG_NIOS2_DTB_PHYS_ADDR;
|
||||
early_init_dt_scan(params);
|
||||
early_init_dt_scan(params, __pa(params));
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
@@ -37,5 +37,5 @@ void __init early_init_devtree(void *params)
|
||||
params = (void *)__dtb_start;
|
||||
#endif
|
||||
|
||||
early_init_dt_scan(params);
|
||||
early_init_dt_scan(params, __pa(params));
|
||||
}
|
||||
|
||||
@@ -65,6 +65,9 @@ config STACKTRACE_SUPPORT
|
||||
config LOCKDEP_SUPPORT
|
||||
def_bool y
|
||||
|
||||
config FIX_EARLYCON_MEM
|
||||
def_bool y
|
||||
|
||||
menu "Processor type and features"
|
||||
|
||||
choice
|
||||
|
||||
@@ -26,29 +26,18 @@
|
||||
#include <linux/bug.h>
|
||||
#include <asm/page.h>
|
||||
|
||||
/*
|
||||
* On OpenRISC we use these special fixed_addresses for doing ioremap
|
||||
* early in the boot process before memory initialization is complete.
|
||||
* This is used, in particular, by the early serial console code.
|
||||
*
|
||||
* It's not really 'fixmap', per se, but fits loosely into the same
|
||||
* paradigm.
|
||||
*/
|
||||
enum fixed_addresses {
|
||||
/*
|
||||
* FIX_IOREMAP entries are useful for mapping physical address
|
||||
* space before ioremap() is useable, e.g. really early in boot
|
||||
* before kmalloc() is working.
|
||||
*/
|
||||
#define FIX_N_IOREMAPS 32
|
||||
FIX_IOREMAP_BEGIN,
|
||||
FIX_IOREMAP_END = FIX_IOREMAP_BEGIN + FIX_N_IOREMAPS - 1,
|
||||
FIX_EARLYCON_MEM_BASE,
|
||||
__end_of_fixed_addresses
|
||||
};
|
||||
|
||||
#define FIXADDR_SIZE (__end_of_fixed_addresses << PAGE_SHIFT)
|
||||
/* FIXADDR_BOTTOM might be a better name here... */
|
||||
#define FIXADDR_START (FIXADDR_TOP - FIXADDR_SIZE)
|
||||
#define FIXMAP_PAGE_IO PAGE_KERNEL_NOCACHE
|
||||
|
||||
extern void __set_fixmap(enum fixed_addresses idx,
|
||||
phys_addr_t phys, pgprot_t flags);
|
||||
|
||||
#include <asm-generic/fixmap.h>
|
||||
|
||||
|
||||
@@ -22,6 +22,6 @@
|
||||
|
||||
void __init early_init_devtree(void *params)
|
||||
{
|
||||
early_init_dt_scan(params);
|
||||
early_init_dt_scan(params, __pa(params));
|
||||
memblock_allow_resize();
|
||||
}
|
||||
|
||||
@@ -207,6 +207,43 @@ void __init mem_init(void)
|
||||
return;
|
||||
}
|
||||
|
||||
static int __init map_page(unsigned long va, phys_addr_t pa, pgprot_t prot)
|
||||
{
|
||||
p4d_t *p4d;
|
||||
pud_t *pud;
|
||||
pmd_t *pmd;
|
||||
pte_t *pte;
|
||||
|
||||
p4d = p4d_offset(pgd_offset_k(va), va);
|
||||
pud = pud_offset(p4d, va);
|
||||
pmd = pmd_offset(pud, va);
|
||||
pte = pte_alloc_kernel(pmd, va);
|
||||
|
||||
if (pte == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
if (pgprot_val(prot))
|
||||
set_pte_at(&init_mm, va, pte, pfn_pte(pa >> PAGE_SHIFT, prot));
|
||||
else
|
||||
pte_clear(&init_mm, va, pte);
|
||||
|
||||
local_flush_tlb_page(NULL, va);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void __init __set_fixmap(enum fixed_addresses idx,
|
||||
phys_addr_t phys, pgprot_t prot)
|
||||
{
|
||||
unsigned long address = __fix_to_virt(idx);
|
||||
|
||||
if (idx >= __end_of_fixed_addresses) {
|
||||
BUG();
|
||||
return;
|
||||
}
|
||||
|
||||
map_page(address, phys, prot);
|
||||
}
|
||||
|
||||
static const pgprot_t protection_map[16] = {
|
||||
[VM_NONE] = PAGE_NONE,
|
||||
[VM_READ] = PAGE_READONLY_X,
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
#ifndef _ASM_POWERPC_DTL_H
|
||||
#define _ASM_POWERPC_DTL_H
|
||||
|
||||
#include <linux/rwsem.h>
|
||||
#include <asm/lppaca.h>
|
||||
#include <linux/spinlock_types.h>
|
||||
|
||||
/*
|
||||
* Layout of entries in the hypervisor's dispatch trace log buffer.
|
||||
@@ -35,7 +35,7 @@ struct dtl_entry {
|
||||
#define DTL_LOG_ALL (DTL_LOG_CEDE | DTL_LOG_PREEMPT | DTL_LOG_FAULT)
|
||||
|
||||
extern struct kmem_cache *dtl_cache;
|
||||
extern rwlock_t dtl_access_lock;
|
||||
extern struct rw_semaphore dtl_access_lock;
|
||||
|
||||
extern void register_dtl_buffer(int cpu);
|
||||
extern void alloc_dtl_buffers(unsigned long *time_limit);
|
||||
|
||||
@@ -19,6 +19,7 @@ extern int is_fadump_active(void);
|
||||
extern int should_fadump_crash(void);
|
||||
extern void crash_fadump(struct pt_regs *, const char *);
|
||||
extern void fadump_cleanup(void);
|
||||
void fadump_setup_param_area(void);
|
||||
extern void fadump_append_bootargs(void);
|
||||
|
||||
#else /* CONFIG_FA_DUMP */
|
||||
@@ -26,6 +27,7 @@ static inline int is_fadump_active(void) { return 0; }
|
||||
static inline int should_fadump_crash(void) { return 0; }
|
||||
static inline void crash_fadump(struct pt_regs *regs, const char *str) { }
|
||||
static inline void fadump_cleanup(void) { }
|
||||
static inline void fadump_setup_param_area(void) { }
|
||||
static inline void fadump_append_bootargs(void) { }
|
||||
#endif /* !CONFIG_FA_DUMP */
|
||||
|
||||
@@ -34,4 +36,11 @@ extern int early_init_dt_scan_fw_dump(unsigned long node, const char *uname,
|
||||
int depth, void *data);
|
||||
extern int fadump_reserve_mem(void);
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_FA_DUMP) && defined(CONFIG_CMA)
|
||||
void fadump_cma_init(void);
|
||||
#else
|
||||
static inline void fadump_cma_init(void) { }
|
||||
#endif
|
||||
|
||||
#endif /* _ASM_POWERPC_FADUMP_H */
|
||||
|
||||
@@ -684,8 +684,8 @@ int kvmhv_nestedv2_set_ptbl_entry(unsigned long lpid, u64 dw0, u64 dw1);
|
||||
int kvmhv_nestedv2_parse_output(struct kvm_vcpu *vcpu);
|
||||
int kvmhv_nestedv2_set_vpa(struct kvm_vcpu *vcpu, unsigned long vpa);
|
||||
|
||||
int kmvhv_counters_tracepoint_regfunc(void);
|
||||
void kmvhv_counters_tracepoint_unregfunc(void);
|
||||
int kvmhv_counters_tracepoint_regfunc(void);
|
||||
void kvmhv_counters_tracepoint_unregfunc(void);
|
||||
int kvmhv_get_l2_counters_status(void);
|
||||
void kvmhv_set_l2_counters_status(int cpu, bool status);
|
||||
|
||||
|
||||
@@ -173,9 +173,4 @@ int emulate_step(struct pt_regs *regs, ppc_inst_t instr);
|
||||
*/
|
||||
extern int emulate_loadstore(struct pt_regs *regs, struct instruction_op *op);
|
||||
|
||||
extern void emulate_vsx_load(struct instruction_op *op, union vsx_reg *reg,
|
||||
const void *mem, bool cross_endian);
|
||||
extern void emulate_vsx_store(struct instruction_op *op,
|
||||
const union vsx_reg *reg, void *mem,
|
||||
bool cross_endian);
|
||||
extern int emulate_dcbz(unsigned long ea, struct pt_regs *regs);
|
||||
|
||||
@@ -25,6 +25,7 @@ int vdso_getcpu_init(void);
|
||||
#ifdef __VDSO64__
|
||||
#define V_FUNCTION_BEGIN(name) \
|
||||
.globl name; \
|
||||
.type name,@function; \
|
||||
name: \
|
||||
|
||||
#define V_FUNCTION_END(name) \
|
||||
|
||||
@@ -867,7 +867,7 @@ bool __init dt_cpu_ftrs_init(void *fdt)
|
||||
using_dt_cpu_ftrs = false;
|
||||
|
||||
/* Setup and verify the FDT, if it fails we just bail */
|
||||
if (!early_init_dt_verify(fdt))
|
||||
if (!early_init_dt_verify(fdt, __pa(fdt)))
|
||||
return false;
|
||||
|
||||
if (!of_scan_flat_dt(fdt_find_cpu_features, NULL))
|
||||
|
||||
@@ -78,27 +78,23 @@ static struct cma *fadump_cma;
|
||||
* But for some reason even if it fails we still have the memory reservation
|
||||
* with us and we can still continue doing fadump.
|
||||
*/
|
||||
static int __init fadump_cma_init(void)
|
||||
void __init fadump_cma_init(void)
|
||||
{
|
||||
unsigned long long base, size;
|
||||
int rc;
|
||||
|
||||
if (!fw_dump.fadump_enabled)
|
||||
return 0;
|
||||
|
||||
if (!fw_dump.fadump_supported || !fw_dump.fadump_enabled ||
|
||||
fw_dump.dump_active)
|
||||
return;
|
||||
/*
|
||||
* Do not use CMA if user has provided fadump=nocma kernel parameter.
|
||||
* Return 1 to continue with fadump old behaviour.
|
||||
*/
|
||||
if (fw_dump.nocma)
|
||||
return 1;
|
||||
if (fw_dump.nocma || !fw_dump.boot_memory_size)
|
||||
return;
|
||||
|
||||
base = fw_dump.reserve_dump_area_start;
|
||||
size = fw_dump.boot_memory_size;
|
||||
|
||||
if (!size)
|
||||
return 0;
|
||||
|
||||
rc = cma_init_reserved_mem(base, size, 0, "fadump_cma", &fadump_cma);
|
||||
if (rc) {
|
||||
pr_err("Failed to init cma area for firmware-assisted dump,%d\n", rc);
|
||||
@@ -108,7 +104,7 @@ static int __init fadump_cma_init(void)
|
||||
* blocked from production system usage. Hence return 1,
|
||||
* so that we can continue with fadump.
|
||||
*/
|
||||
return 1;
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -125,10 +121,7 @@ static int __init fadump_cma_init(void)
|
||||
cma_get_size(fadump_cma),
|
||||
(unsigned long)cma_get_base(fadump_cma) >> 20,
|
||||
fw_dump.reserve_dump_area_size);
|
||||
return 1;
|
||||
}
|
||||
#else
|
||||
static int __init fadump_cma_init(void) { return 1; }
|
||||
#endif /* CONFIG_CMA */
|
||||
|
||||
/*
|
||||
@@ -143,7 +136,7 @@ void __init fadump_append_bootargs(void)
|
||||
if (!fw_dump.dump_active || !fw_dump.param_area_supported || !fw_dump.param_area)
|
||||
return;
|
||||
|
||||
if (fw_dump.param_area >= fw_dump.boot_mem_top) {
|
||||
if (fw_dump.param_area < fw_dump.boot_mem_top) {
|
||||
if (memblock_reserve(fw_dump.param_area, COMMAND_LINE_SIZE)) {
|
||||
pr_warn("WARNING: Can't use additional parameters area!\n");
|
||||
fw_dump.param_area = 0;
|
||||
@@ -637,8 +630,6 @@ int __init fadump_reserve_mem(void)
|
||||
|
||||
pr_info("Reserved %lldMB of memory at %#016llx (System RAM: %lldMB)\n",
|
||||
(size >> 20), base, (memblock_phys_mem_size() >> 20));
|
||||
|
||||
ret = fadump_cma_init();
|
||||
}
|
||||
|
||||
return ret;
|
||||
@@ -1586,6 +1577,12 @@ static void __init fadump_init_files(void)
|
||||
return;
|
||||
}
|
||||
|
||||
if (fw_dump.param_area) {
|
||||
rc = sysfs_create_file(fadump_kobj, &bootargs_append_attr.attr);
|
||||
if (rc)
|
||||
pr_err("unable to create bootargs_append sysfs file (%d)\n", rc);
|
||||
}
|
||||
|
||||
debugfs_create_file("fadump_region", 0444, arch_debugfs_dir, NULL,
|
||||
&fadump_region_fops);
|
||||
|
||||
@@ -1740,7 +1737,7 @@ err_out:
|
||||
* Reserve memory to store additional parameters to be passed
|
||||
* for fadump/capture kernel.
|
||||
*/
|
||||
static void __init fadump_setup_param_area(void)
|
||||
void __init fadump_setup_param_area(void)
|
||||
{
|
||||
phys_addr_t range_start, range_end;
|
||||
|
||||
@@ -1748,7 +1745,7 @@ static void __init fadump_setup_param_area(void)
|
||||
return;
|
||||
|
||||
/* This memory can't be used by PFW or bootloader as it is shared across kernels */
|
||||
if (radix_enabled()) {
|
||||
if (early_radix_enabled()) {
|
||||
/*
|
||||
* Anywhere in the upper half should be good enough as all memory
|
||||
* is accessible in real mode.
|
||||
@@ -1776,12 +1773,12 @@ static void __init fadump_setup_param_area(void)
|
||||
COMMAND_LINE_SIZE,
|
||||
range_start,
|
||||
range_end);
|
||||
if (!fw_dump.param_area || sysfs_create_file(fadump_kobj, &bootargs_append_attr.attr)) {
|
||||
if (!fw_dump.param_area) {
|
||||
pr_warn("WARNING: Could not setup area to pass additional parameters!\n");
|
||||
return;
|
||||
}
|
||||
|
||||
memset(phys_to_virt(fw_dump.param_area), 0, COMMAND_LINE_SIZE);
|
||||
memset((void *)fw_dump.param_area, 0, COMMAND_LINE_SIZE);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1807,7 +1804,6 @@ int __init setup_fadump(void)
|
||||
}
|
||||
/* Initialize the kernel dump memory structure and register with f/w */
|
||||
else if (fw_dump.reserve_dump_area_size) {
|
||||
fadump_setup_param_area();
|
||||
fw_dump.ops->fadump_init_mem_struct(&fw_dump);
|
||||
register_fadump();
|
||||
}
|
||||
|
||||
@@ -791,7 +791,7 @@ void __init early_init_devtree(void *params)
|
||||
DBG(" -> early_init_devtree(%px)\n", params);
|
||||
|
||||
/* Too early to BUG_ON(), do it by hand */
|
||||
if (!early_init_dt_verify(params))
|
||||
if (!early_init_dt_verify(params, __pa(params)))
|
||||
panic("BUG: Failed verifying flat device tree, bad version?");
|
||||
|
||||
of_scan_flat_dt(early_init_dt_scan_model, NULL);
|
||||
@@ -908,6 +908,9 @@ void __init early_init_devtree(void *params)
|
||||
|
||||
mmu_early_init_devtree();
|
||||
|
||||
/* Setup param area for passing additional parameters to fadump capture kernel. */
|
||||
fadump_setup_param_area();
|
||||
|
||||
#ifdef CONFIG_PPC_POWERNV
|
||||
/* Scan and build the list of machine check recoverable ranges */
|
||||
of_scan_flat_dt(early_init_dt_scan_recoverable_ranges, NULL);
|
||||
|
||||
@@ -997,9 +997,11 @@ void __init setup_arch(char **cmdline_p)
|
||||
initmem_init();
|
||||
|
||||
/*
|
||||
* Reserve large chunks of memory for use by CMA for KVM and hugetlb. These must
|
||||
* be called after initmem_init(), so that pageblock_order is initialised.
|
||||
* Reserve large chunks of memory for use by CMA for fadump, KVM and
|
||||
* hugetlb. These must be called after initmem_init(), so that
|
||||
* pageblock_order is initialised.
|
||||
*/
|
||||
fadump_cma_init();
|
||||
kvm_cma_reserve();
|
||||
gigantic_hugetlb_cma_reserve();
|
||||
|
||||
|
||||
@@ -736,13 +736,18 @@ int setup_purgatory_ppc64(struct kimage *image, const void *slave_code,
|
||||
if (dn) {
|
||||
u64 val;
|
||||
|
||||
of_property_read_u64(dn, "opal-base-address", &val);
|
||||
ret = of_property_read_u64(dn, "opal-base-address", &val);
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
ret = kexec_purgatory_get_set_symbol(image, "opal_base", &val,
|
||||
sizeof(val), false);
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
of_property_read_u64(dn, "opal-entry-address", &val);
|
||||
ret = of_property_read_u64(dn, "opal-entry-address", &val);
|
||||
if (ret)
|
||||
goto out;
|
||||
ret = kexec_purgatory_get_set_symbol(image, "opal_entry", &val,
|
||||
sizeof(val), false);
|
||||
}
|
||||
|
||||
@@ -4154,7 +4154,7 @@ void kvmhv_set_l2_counters_status(int cpu, bool status)
|
||||
lppaca_of(cpu).l2_counters_enable = 0;
|
||||
}
|
||||
|
||||
int kmvhv_counters_tracepoint_regfunc(void)
|
||||
int kvmhv_counters_tracepoint_regfunc(void)
|
||||
{
|
||||
int cpu;
|
||||
|
||||
@@ -4164,7 +4164,7 @@ int kmvhv_counters_tracepoint_regfunc(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
void kmvhv_counters_tracepoint_unregfunc(void)
|
||||
void kvmhv_counters_tracepoint_unregfunc(void)
|
||||
{
|
||||
int cpu;
|
||||
|
||||
@@ -4309,6 +4309,15 @@ static int kvmhv_vcpu_entry_p9_nested(struct kvm_vcpu *vcpu, u64 time_limit, uns
|
||||
}
|
||||
hvregs.hdec_expiry = time_limit;
|
||||
|
||||
/*
|
||||
* hvregs has the doorbell status, so zero it here which
|
||||
* enables us to receive doorbells when H_ENTER_NESTED is
|
||||
* in progress for this vCPU
|
||||
*/
|
||||
|
||||
if (vcpu->arch.doorbell_request)
|
||||
vcpu->arch.doorbell_request = 0;
|
||||
|
||||
/*
|
||||
* When setting DEC, we must always deal with irq_work_raise
|
||||
* via NMI vs setting DEC. The problem occurs right as we
|
||||
@@ -4912,7 +4921,6 @@ int kvmhv_run_single_vcpu(struct kvm_vcpu *vcpu, u64 time_limit,
|
||||
lpcr &= ~LPCR_MER;
|
||||
}
|
||||
} else if (vcpu->arch.pending_exceptions ||
|
||||
vcpu->arch.doorbell_request ||
|
||||
xive_interrupt_pending(vcpu)) {
|
||||
vcpu->arch.ret = RESUME_HOST;
|
||||
goto out;
|
||||
|
||||
@@ -32,7 +32,7 @@ void kvmhv_save_hv_regs(struct kvm_vcpu *vcpu, struct hv_guest_state *hr)
|
||||
struct kvmppc_vcore *vc = vcpu->arch.vcore;
|
||||
|
||||
hr->pcr = vc->pcr | PCR_MASK;
|
||||
hr->dpdes = vc->dpdes;
|
||||
hr->dpdes = vcpu->arch.doorbell_request;
|
||||
hr->hfscr = vcpu->arch.hfscr;
|
||||
hr->tb_offset = vc->tb_offset;
|
||||
hr->dawr0 = vcpu->arch.dawr0;
|
||||
@@ -105,7 +105,7 @@ static void save_hv_return_state(struct kvm_vcpu *vcpu,
|
||||
{
|
||||
struct kvmppc_vcore *vc = vcpu->arch.vcore;
|
||||
|
||||
hr->dpdes = vc->dpdes;
|
||||
hr->dpdes = vcpu->arch.doorbell_request;
|
||||
hr->purr = vcpu->arch.purr;
|
||||
hr->spurr = vcpu->arch.spurr;
|
||||
hr->ic = vcpu->arch.ic;
|
||||
@@ -143,7 +143,7 @@ static void restore_hv_regs(struct kvm_vcpu *vcpu, const struct hv_guest_state *
|
||||
struct kvmppc_vcore *vc = vcpu->arch.vcore;
|
||||
|
||||
vc->pcr = hr->pcr | PCR_MASK;
|
||||
vc->dpdes = hr->dpdes;
|
||||
vcpu->arch.doorbell_request = hr->dpdes;
|
||||
vcpu->arch.hfscr = hr->hfscr;
|
||||
vcpu->arch.dawr0 = hr->dawr0;
|
||||
vcpu->arch.dawrx0 = hr->dawrx0;
|
||||
@@ -170,7 +170,13 @@ void kvmhv_restore_hv_return_state(struct kvm_vcpu *vcpu,
|
||||
{
|
||||
struct kvmppc_vcore *vc = vcpu->arch.vcore;
|
||||
|
||||
vc->dpdes = hr->dpdes;
|
||||
/*
|
||||
* This L2 vCPU might have received a doorbell while H_ENTER_NESTED was being handled.
|
||||
* Make sure we preserve the doorbell if it was either:
|
||||
* a) Sent after H_ENTER_NESTED was called on this vCPU (arch.doorbell_request would be 1)
|
||||
* b) Doorbell was not handled and L2 exited for some other reason (hr->dpdes would be 1)
|
||||
*/
|
||||
vcpu->arch.doorbell_request = vcpu->arch.doorbell_request | hr->dpdes;
|
||||
vcpu->arch.hfscr = hr->hfscr;
|
||||
vcpu->arch.purr = hr->purr;
|
||||
vcpu->arch.spurr = hr->spurr;
|
||||
|
||||
@@ -538,7 +538,7 @@ TRACE_EVENT_FN_COND(kvmppc_vcpu_stats,
|
||||
TP_printk("VCPU %d: l1_to_l2_cs_time=%llu ns l2_to_l1_cs_time=%llu ns l2_runtime=%llu ns",
|
||||
__entry->vcpu_id, __entry->l1_to_l2_cs,
|
||||
__entry->l2_to_l1_cs, __entry->l2_runtime),
|
||||
kmvhv_counters_tracepoint_regfunc, kmvhv_counters_tracepoint_unregfunc
|
||||
kvmhv_counters_tracepoint_regfunc, kvmhv_counters_tracepoint_unregfunc
|
||||
);
|
||||
#endif
|
||||
#endif /* _TRACE_KVM_HV_H */
|
||||
|
||||
@@ -780,8 +780,8 @@ static nokprobe_inline int emulate_stq(struct pt_regs *regs, unsigned long ea,
|
||||
#endif /* __powerpc64 */
|
||||
|
||||
#ifdef CONFIG_VSX
|
||||
void emulate_vsx_load(struct instruction_op *op, union vsx_reg *reg,
|
||||
const void *mem, bool rev)
|
||||
static nokprobe_inline void emulate_vsx_load(struct instruction_op *op, union vsx_reg *reg,
|
||||
const void *mem, bool rev)
|
||||
{
|
||||
int size, read_size;
|
||||
int i, j;
|
||||
@@ -863,11 +863,9 @@ void emulate_vsx_load(struct instruction_op *op, union vsx_reg *reg,
|
||||
break;
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(emulate_vsx_load);
|
||||
NOKPROBE_SYMBOL(emulate_vsx_load);
|
||||
|
||||
void emulate_vsx_store(struct instruction_op *op, const union vsx_reg *reg,
|
||||
void *mem, bool rev)
|
||||
static nokprobe_inline void emulate_vsx_store(struct instruction_op *op, const union vsx_reg *reg,
|
||||
void *mem, bool rev)
|
||||
{
|
||||
int size, write_size;
|
||||
int i, j;
|
||||
@@ -955,8 +953,6 @@ void emulate_vsx_store(struct instruction_op *op, const union vsx_reg *reg,
|
||||
break;
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(emulate_vsx_store);
|
||||
NOKPROBE_SYMBOL(emulate_vsx_store);
|
||||
|
||||
static nokprobe_inline int do_vsx_load(struct instruction_op *op,
|
||||
unsigned long ea, struct pt_regs *regs,
|
||||
|
||||
@@ -439,10 +439,16 @@ static int ___do_page_fault(struct pt_regs *regs, unsigned long address,
|
||||
/*
|
||||
* The kernel should never take an execute fault nor should it
|
||||
* take a page fault to a kernel address or a page fault to a user
|
||||
* address outside of dedicated places
|
||||
* address outside of dedicated places.
|
||||
*
|
||||
* Rather than kfence directly reporting false negatives, search whether
|
||||
* the NIP belongs to the fixup table for cases where fault could come
|
||||
* from functions like copy_from_kernel_nofault().
|
||||
*/
|
||||
if (unlikely(!is_user && bad_kernel_fault(regs, error_code, address, is_write))) {
|
||||
if (kfence_handle_page_fault(address, is_write, regs))
|
||||
if (is_kfence_address((void *)address) &&
|
||||
!search_exception_tables(instruction_pointer(regs)) &&
|
||||
kfence_handle_page_fault(address, is_write, regs))
|
||||
return 0;
|
||||
|
||||
return SIGSEGV;
|
||||
|
||||
@@ -191,7 +191,7 @@ static int dtl_enable(struct dtl *dtl)
|
||||
return -EBUSY;
|
||||
|
||||
/* ensure there are no other conflicting dtl users */
|
||||
if (!read_trylock(&dtl_access_lock))
|
||||
if (!down_read_trylock(&dtl_access_lock))
|
||||
return -EBUSY;
|
||||
|
||||
n_entries = dtl_buf_entries;
|
||||
@@ -199,7 +199,7 @@ static int dtl_enable(struct dtl *dtl)
|
||||
if (!buf) {
|
||||
printk(KERN_WARNING "%s: buffer alloc failed for cpu %d\n",
|
||||
__func__, dtl->cpu);
|
||||
read_unlock(&dtl_access_lock);
|
||||
up_read(&dtl_access_lock);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
@@ -217,7 +217,7 @@ static int dtl_enable(struct dtl *dtl)
|
||||
spin_unlock(&dtl->lock);
|
||||
|
||||
if (rc) {
|
||||
read_unlock(&dtl_access_lock);
|
||||
up_read(&dtl_access_lock);
|
||||
kmem_cache_free(dtl_cache, buf);
|
||||
}
|
||||
|
||||
@@ -232,7 +232,7 @@ static void dtl_disable(struct dtl *dtl)
|
||||
dtl->buf = NULL;
|
||||
dtl->buf_entries = 0;
|
||||
spin_unlock(&dtl->lock);
|
||||
read_unlock(&dtl_access_lock);
|
||||
up_read(&dtl_access_lock);
|
||||
}
|
||||
|
||||
/* file interface */
|
||||
|
||||
@@ -169,7 +169,7 @@ struct vcpu_dispatch_data {
|
||||
*/
|
||||
#define NR_CPUS_H NR_CPUS
|
||||
|
||||
DEFINE_RWLOCK(dtl_access_lock);
|
||||
DECLARE_RWSEM(dtl_access_lock);
|
||||
static DEFINE_PER_CPU(struct vcpu_dispatch_data, vcpu_disp_data);
|
||||
static DEFINE_PER_CPU(u64, dtl_entry_ridx);
|
||||
static DEFINE_PER_CPU(struct dtl_worker, dtl_workers);
|
||||
@@ -463,7 +463,7 @@ static int dtl_worker_enable(unsigned long *time_limit)
|
||||
{
|
||||
int rc = 0, state;
|
||||
|
||||
if (!write_trylock(&dtl_access_lock)) {
|
||||
if (!down_write_trylock(&dtl_access_lock)) {
|
||||
rc = -EBUSY;
|
||||
goto out;
|
||||
}
|
||||
@@ -479,7 +479,7 @@ static int dtl_worker_enable(unsigned long *time_limit)
|
||||
pr_err("vcpudispatch_stats: unable to setup workqueue for DTL processing\n");
|
||||
free_dtl_buffers(time_limit);
|
||||
reset_global_dtl_mask();
|
||||
write_unlock(&dtl_access_lock);
|
||||
up_write(&dtl_access_lock);
|
||||
rc = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
@@ -494,7 +494,7 @@ static void dtl_worker_disable(unsigned long *time_limit)
|
||||
cpuhp_remove_state(dtl_worker_state);
|
||||
free_dtl_buffers(time_limit);
|
||||
reset_global_dtl_mask();
|
||||
write_unlock(&dtl_access_lock);
|
||||
up_write(&dtl_access_lock);
|
||||
}
|
||||
|
||||
static ssize_t vcpudispatch_stats_write(struct file *file, const char __user *p,
|
||||
|
||||
@@ -683,7 +683,7 @@ void __init plpks_early_init_devtree(void)
|
||||
out:
|
||||
fdt_nop_property(fdt, chosen_node, "ibm,plpks-pw");
|
||||
// Since we've cleared the password, we must update the FDT checksum
|
||||
early_init_dt_verify(fdt);
|
||||
early_init_dt_verify(fdt, __pa(fdt));
|
||||
}
|
||||
|
||||
static __init int pseries_plpks_init(void)
|
||||
|
||||
@@ -227,7 +227,7 @@ static void __init init_resources(void)
|
||||
static void __init parse_dtb(void)
|
||||
{
|
||||
/* Early scan of device tree from init memory */
|
||||
if (early_init_dt_scan(dtb_early_va)) {
|
||||
if (early_init_dt_scan(dtb_early_va, __pa(dtb_early_va))) {
|
||||
const char *name = of_flat_dt_get_machine_name();
|
||||
|
||||
if (name) {
|
||||
|
||||
@@ -143,7 +143,7 @@ static void aplic_write_pending(struct aplic *aplic, u32 irq, bool pending)
|
||||
if (sm == APLIC_SOURCECFG_SM_LEVEL_HIGH ||
|
||||
sm == APLIC_SOURCECFG_SM_LEVEL_LOW) {
|
||||
if (!pending)
|
||||
goto skip_write_pending;
|
||||
goto noskip_write_pending;
|
||||
if ((irqd->state & APLIC_IRQ_STATE_INPUT) &&
|
||||
sm == APLIC_SOURCECFG_SM_LEVEL_LOW)
|
||||
goto skip_write_pending;
|
||||
@@ -152,6 +152,7 @@ static void aplic_write_pending(struct aplic *aplic, u32 irq, bool pending)
|
||||
goto skip_write_pending;
|
||||
}
|
||||
|
||||
noskip_write_pending:
|
||||
if (pending)
|
||||
irqd->state |= APLIC_IRQ_STATE_PENDING;
|
||||
else
|
||||
|
||||
@@ -486,19 +486,22 @@ void kvm_riscv_vcpu_sbi_init(struct kvm_vcpu *vcpu)
|
||||
struct kvm_vcpu_sbi_context *scontext = &vcpu->arch.sbi_context;
|
||||
const struct kvm_riscv_sbi_extension_entry *entry;
|
||||
const struct kvm_vcpu_sbi_extension *ext;
|
||||
int i;
|
||||
int idx, i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(sbi_ext); i++) {
|
||||
entry = &sbi_ext[i];
|
||||
ext = entry->ext_ptr;
|
||||
idx = entry->ext_idx;
|
||||
|
||||
if (idx < 0 || idx >= ARRAY_SIZE(scontext->ext_status))
|
||||
continue;
|
||||
|
||||
if (ext->probe && !ext->probe(vcpu)) {
|
||||
scontext->ext_status[entry->ext_idx] =
|
||||
KVM_RISCV_SBI_EXT_STATUS_UNAVAILABLE;
|
||||
scontext->ext_status[idx] = KVM_RISCV_SBI_EXT_STATUS_UNAVAILABLE;
|
||||
continue;
|
||||
}
|
||||
|
||||
scontext->ext_status[entry->ext_idx] = ext->default_disabled ?
|
||||
scontext->ext_status[idx] = ext->default_disabled ?
|
||||
KVM_RISCV_SBI_EXT_STATUS_DISABLED :
|
||||
KVM_RISCV_SBI_EXT_STATUS_ENABLED;
|
||||
}
|
||||
|
||||
@@ -88,7 +88,7 @@ static __always_inline bool test_facility(unsigned long nr)
|
||||
return __test_facility(nr, &stfle_fac_list);
|
||||
}
|
||||
|
||||
static inline unsigned long __stfle_asm(u64 *stfle_fac_list, int size)
|
||||
static inline unsigned long __stfle_asm(u64 *fac_list, int size)
|
||||
{
|
||||
unsigned long reg0 = size - 1;
|
||||
|
||||
@@ -96,7 +96,7 @@ static inline unsigned long __stfle_asm(u64 *stfle_fac_list, int size)
|
||||
" lgr 0,%[reg0]\n"
|
||||
" .insn s,0xb2b00000,%[list]\n" /* stfle */
|
||||
" lgr %[reg0],0\n"
|
||||
: [reg0] "+&d" (reg0), [list] "+Q" (*stfle_fac_list)
|
||||
: [reg0] "+&d" (reg0), [list] "+Q" (*fac_list)
|
||||
:
|
||||
: "memory", "cc", "0");
|
||||
return reg0;
|
||||
@@ -104,10 +104,10 @@ static inline unsigned long __stfle_asm(u64 *stfle_fac_list, int size)
|
||||
|
||||
/**
|
||||
* stfle - Store facility list extended
|
||||
* @stfle_fac_list: array where facility list can be stored
|
||||
* @fac_list: array where facility list can be stored
|
||||
* @size: size of passed in array in double words
|
||||
*/
|
||||
static inline void __stfle(u64 *stfle_fac_list, int size)
|
||||
static inline void __stfle(u64 *fac_list, int size)
|
||||
{
|
||||
unsigned long nr;
|
||||
u32 stfl_fac_list;
|
||||
@@ -116,20 +116,20 @@ static inline void __stfle(u64 *stfle_fac_list, int size)
|
||||
" stfl 0(0)\n"
|
||||
: "=m" (get_lowcore()->stfl_fac_list));
|
||||
stfl_fac_list = get_lowcore()->stfl_fac_list;
|
||||
memcpy(stfle_fac_list, &stfl_fac_list, 4);
|
||||
memcpy(fac_list, &stfl_fac_list, 4);
|
||||
nr = 4; /* bytes stored by stfl */
|
||||
if (stfl_fac_list & 0x01000000) {
|
||||
/* More facility bits available with stfle */
|
||||
nr = __stfle_asm(stfle_fac_list, size);
|
||||
nr = __stfle_asm(fac_list, size);
|
||||
nr = min_t(unsigned long, (nr + 1) * 8, size * 8);
|
||||
}
|
||||
memset((char *) stfle_fac_list + nr, 0, size * 8 - nr);
|
||||
memset((char *)fac_list + nr, 0, size * 8 - nr);
|
||||
}
|
||||
|
||||
static inline void stfle(u64 *stfle_fac_list, int size)
|
||||
static inline void stfle(u64 *fac_list, int size)
|
||||
{
|
||||
preempt_disable();
|
||||
__stfle(stfle_fac_list, size);
|
||||
__stfle(fac_list, size);
|
||||
preempt_enable();
|
||||
}
|
||||
|
||||
|
||||
@@ -96,7 +96,6 @@ struct zpci_bar_struct {
|
||||
u8 size; /* order 2 exponent */
|
||||
};
|
||||
|
||||
struct s390_domain;
|
||||
struct kvm_zdev;
|
||||
|
||||
#define ZPCI_FUNCTIONS_PER_BUS 256
|
||||
@@ -181,9 +180,10 @@ struct zpci_dev {
|
||||
struct dentry *debugfs_dev;
|
||||
|
||||
/* IOMMU and passthrough */
|
||||
struct s390_domain *s390_domain; /* s390 IOMMU domain data */
|
||||
struct iommu_domain *s390_domain; /* attached IOMMU domain */
|
||||
struct kvm_zdev *kzdev;
|
||||
struct mutex kzdev_lock;
|
||||
spinlock_t dom_lock; /* protect s390_domain change */
|
||||
};
|
||||
|
||||
static inline bool zdev_enabled(struct zpci_dev *zdev)
|
||||
|
||||
@@ -62,5 +62,6 @@ __SET_MEMORY_FUNC(set_memory_4k, SET_MEMORY_4K)
|
||||
|
||||
int set_direct_map_invalid_noflush(struct page *page);
|
||||
int set_direct_map_default_noflush(struct page *page);
|
||||
bool kernel_page_present(struct page *page);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -759,7 +759,6 @@ static int __hw_perf_event_init(struct perf_event *event)
|
||||
reserve_pmc_hardware();
|
||||
refcount_set(&num_events, 1);
|
||||
}
|
||||
mutex_unlock(&pmc_reserve_mutex);
|
||||
event->destroy = hw_perf_event_destroy;
|
||||
|
||||
/* Access per-CPU sampling information (query sampling info) */
|
||||
@@ -848,6 +847,7 @@ static int __hw_perf_event_init(struct perf_event *event)
|
||||
if (is_default_overflow_handler(event))
|
||||
event->overflow_handler = cpumsf_output_event_pid;
|
||||
out:
|
||||
mutex_unlock(&pmc_reserve_mutex);
|
||||
return err;
|
||||
}
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user