Linux 5.4-rc4
-----BEGIN PGP SIGNATURE----- iQFSBAABCAA8FiEEq68RxlopcLEwq+PEeb4+QwBBGIYFAl2su/AeHHRvcnZhbGRz QGxpbnV4LWZvdW5kYXRpb24ub3JnAAoJEHm+PkMAQRiGvm4H/1jkheCrvB/GJS69 wd18vizAg+eFmNCzxlGVhpQTKGymNRy+g6clnoli3cNJ3pSVKcYgVyB3oXaONIhp g/ANudnBjTdjqYgJzfLij5AGecrGwDpF3YL0kuKrCB63s2I/HwQGYy/aPrYY8emy gAYdaf1DGRu5/DIIB6soTo/TnpKoAyTE+XY5MaPSug++t/Flov19tlU40IZxXW94 bjTXbm0yklrsIx+LL5mYYGGnygSTCF66JjFg1qhDCBQaS2MZ21h1ZgaOtGZTwZcc WgEiqLC5S1Iyj96zir1t78RcVQ4RzgvDbhUOgIqUFsYAO2wOicvxyFE3Hj8rPOKd uGgVPRM= =xgZa -----END PGP SIGNATURE----- Merge tag 'v5.4-rc4' into docs-next I need to pick up the independent changes made to Documentation/core-api/memory-allocation.rst to be able to merge further work without creating a total mess.
This commit is contained in:
commit
822bbba0ca
4
CREDITS
4
CREDITS
|
@ -1637,6 +1637,10 @@ S: Panoramastrasse 18
|
||||||
S: D-69126 Heidelberg
|
S: D-69126 Heidelberg
|
||||||
S: Germany
|
S: Germany
|
||||||
|
|
||||||
|
N: Simon Horman
|
||||||
|
M: horms@verge.net.au
|
||||||
|
D: Renesas ARM/ARM64 SoC maintainer
|
||||||
|
|
||||||
N: Christopher Horn
|
N: Christopher Horn
|
||||||
E: chorn@warwick.net
|
E: chorn@warwick.net
|
||||||
D: Miscellaneous sysctl hacks
|
D: Miscellaneous sysctl hacks
|
||||||
|
|
|
@ -615,8 +615,8 @@ on an IO device and is an example of this type.
|
||||||
Protections
|
Protections
|
||||||
-----------
|
-----------
|
||||||
|
|
||||||
A cgroup is protected to be allocated upto the configured amount of
|
A cgroup is protected upto the configured amount of the resource
|
||||||
the resource if the usages of all its ancestors are under their
|
as long as the usages of all its ancestors are under their
|
||||||
protected levels. Protections can be hard guarantees or best effort
|
protected levels. Protections can be hard guarantees or best effort
|
||||||
soft boundaries. Protections can also be over-committed in which case
|
soft boundaries. Protections can also be over-committed in which case
|
||||||
only upto the amount available to the parent is protected among
|
only upto the amount available to the parent is protected among
|
||||||
|
@ -1096,7 +1096,10 @@ PAGE_SIZE multiple when read back.
|
||||||
is within its effective min boundary, the cgroup's memory
|
is within its effective min boundary, the cgroup's memory
|
||||||
won't be reclaimed under any conditions. If there is no
|
won't be reclaimed under any conditions. If there is no
|
||||||
unprotected reclaimable memory available, OOM killer
|
unprotected reclaimable memory available, OOM killer
|
||||||
is invoked.
|
is invoked. Above the effective min boundary (or
|
||||||
|
effective low boundary if it is higher), pages are reclaimed
|
||||||
|
proportionally to the overage, reducing reclaim pressure for
|
||||||
|
smaller overages.
|
||||||
|
|
||||||
Effective min boundary is limited by memory.min values of
|
Effective min boundary is limited by memory.min values of
|
||||||
all ancestor cgroups. If there is memory.min overcommitment
|
all ancestor cgroups. If there is memory.min overcommitment
|
||||||
|
@ -1119,6 +1122,10 @@ PAGE_SIZE multiple when read back.
|
||||||
cgroup is within its effective low boundary, the cgroup's
|
cgroup is within its effective low boundary, the cgroup's
|
||||||
memory won't be reclaimed unless there is no reclaimable
|
memory won't be reclaimed unless there is no reclaimable
|
||||||
memory available in unprotected cgroups.
|
memory available in unprotected cgroups.
|
||||||
|
Above the effective low boundary (or
|
||||||
|
effective min boundary if it is higher), pages are reclaimed
|
||||||
|
proportionally to the overage, reducing reclaim pressure for
|
||||||
|
smaller overages.
|
||||||
|
|
||||||
Effective low boundary is limited by memory.low values of
|
Effective low boundary is limited by memory.low values of
|
||||||
all ancestor cgroups. If there is memory.low overcommitment
|
all ancestor cgroups. If there is memory.low overcommitment
|
||||||
|
@ -2482,8 +2489,10 @@ system performance due to overreclaim, to the point where the feature
|
||||||
becomes self-defeating.
|
becomes self-defeating.
|
||||||
|
|
||||||
The memory.low boundary on the other hand is a top-down allocated
|
The memory.low boundary on the other hand is a top-down allocated
|
||||||
reserve. A cgroup enjoys reclaim protection when it's within its low,
|
reserve. A cgroup enjoys reclaim protection when it's within its
|
||||||
which makes delegation of subtrees possible.
|
effective low, which makes delegation of subtrees possible. It also
|
||||||
|
enjoys having reclaim pressure proportional to its overage when
|
||||||
|
above its effective low.
|
||||||
|
|
||||||
The original high boundary, the hard limit, is defined as a strict
|
The original high boundary, the hard limit, is defined as a strict
|
||||||
limit that can not budge, even if the OOM killer has to be called.
|
limit that can not budge, even if the OOM killer has to be called.
|
||||||
|
|
|
@ -5304,6 +5304,10 @@
|
||||||
the unplug protocol
|
the unplug protocol
|
||||||
never -- do not unplug even if version check succeeds
|
never -- do not unplug even if version check succeeds
|
||||||
|
|
||||||
|
xen_legacy_crash [X86,XEN]
|
||||||
|
Crash from Xen panic notifier, without executing late
|
||||||
|
panic() code such as dumping handler.
|
||||||
|
|
||||||
xen_nopvspin [X86,XEN]
|
xen_nopvspin [X86,XEN]
|
||||||
Disables the ticketlock slowpath using Xen PV
|
Disables the ticketlock slowpath using Xen PV
|
||||||
optimizations.
|
optimizations.
|
||||||
|
|
|
@ -154,11 +154,18 @@ return virtual addresses to userspace from a 48-bit range.
|
||||||
|
|
||||||
Software can "opt-in" to receiving VAs from a 52-bit space by
|
Software can "opt-in" to receiving VAs from a 52-bit space by
|
||||||
specifying an mmap hint parameter that is larger than 48-bit.
|
specifying an mmap hint parameter that is larger than 48-bit.
|
||||||
|
|
||||||
For example:
|
For example:
|
||||||
maybe_high_address = mmap(~0UL, size, prot, flags,...);
|
|
||||||
|
.. code-block:: c
|
||||||
|
|
||||||
|
maybe_high_address = mmap(~0UL, size, prot, flags,...);
|
||||||
|
|
||||||
It is also possible to build a debug kernel that returns addresses
|
It is also possible to build a debug kernel that returns addresses
|
||||||
from a 52-bit space by enabling the following kernel config options:
|
from a 52-bit space by enabling the following kernel config options:
|
||||||
|
|
||||||
|
.. code-block:: sh
|
||||||
|
|
||||||
CONFIG_EXPERT=y && CONFIG_ARM64_FORCE_52BIT=y
|
CONFIG_EXPERT=y && CONFIG_ARM64_FORCE_52BIT=y
|
||||||
|
|
||||||
Note that this option is only intended for debugging applications
|
Note that this option is only intended for debugging applications
|
||||||
|
|
|
@ -107,6 +107,8 @@ stable kernels.
|
||||||
+----------------+-----------------+-----------------+-----------------------------+
|
+----------------+-----------------+-----------------+-----------------------------+
|
||||||
| Cavium | ThunderX2 SMMUv3| #126 | N/A |
|
| Cavium | ThunderX2 SMMUv3| #126 | N/A |
|
||||||
+----------------+-----------------+-----------------+-----------------------------+
|
+----------------+-----------------+-----------------+-----------------------------+
|
||||||
|
| Cavium | ThunderX2 Core | #219 | CAVIUM_TX2_ERRATUM_219 |
|
||||||
|
+----------------+-----------------+-----------------+-----------------------------+
|
||||||
+----------------+-----------------+-----------------+-----------------------------+
|
+----------------+-----------------+-----------------+-----------------------------+
|
||||||
| Freescale/NXP | LS2080A/LS1043A | A-008585 | FSL_ERRATUM_A008585 |
|
| Freescale/NXP | LS2080A/LS1043A | A-008585 | FSL_ERRATUM_A008585 |
|
||||||
+----------------+-----------------+-----------------+-----------------------------+
|
+----------------+-----------------+-----------------+-----------------------------+
|
||||||
|
|
|
@ -38,6 +38,7 @@ Core utilities
|
||||||
protection-keys
|
protection-keys
|
||||||
../RCU/index
|
../RCU/index
|
||||||
gcc-plugins
|
gcc-plugins
|
||||||
|
symbol-namespaces
|
||||||
|
|
||||||
|
|
||||||
Interfaces for kernel debugging
|
Interfaces for kernel debugging
|
||||||
|
|
|
@ -98,6 +98,10 @@ limited. The actual limit depends on the hardware and the kernel
|
||||||
configuration, but it is a good practice to use `kmalloc` for objects
|
configuration, but it is a good practice to use `kmalloc` for objects
|
||||||
smaller than page size.
|
smaller than page size.
|
||||||
|
|
||||||
|
The address of a chunk allocated with `kmalloc` is aligned to at least
|
||||||
|
ARCH_KMALLOC_MINALIGN bytes. For sizes which are a power of two, the
|
||||||
|
alignment is also guaranteed to be at least the respective size.
|
||||||
|
|
||||||
For large allocations you can use :c:func:`vmalloc` and
|
For large allocations you can use :c:func:`vmalloc` and
|
||||||
:c:func:`vzalloc`, or directly request pages from the page
|
:c:func:`vzalloc`, or directly request pages from the page
|
||||||
allocator. The memory allocated by `vmalloc` and related functions is
|
allocator. The memory allocated by `vmalloc` and related functions is
|
||||||
|
|
|
@ -41,6 +41,9 @@ smaller binary while the latter is 1.1 - 2 times faster.
|
||||||
Both KASAN modes work with both SLUB and SLAB memory allocators.
|
Both KASAN modes work with both SLUB and SLAB memory allocators.
|
||||||
For better bug detection and nicer reporting, enable CONFIG_STACKTRACE.
|
For better bug detection and nicer reporting, enable CONFIG_STACKTRACE.
|
||||||
|
|
||||||
|
To augment reports with last allocation and freeing stack of the physical page,
|
||||||
|
it is recommended to enable also CONFIG_PAGE_OWNER and boot with page_owner=on.
|
||||||
|
|
||||||
To disable instrumentation for specific files or directories, add a line
|
To disable instrumentation for specific files or directories, add a line
|
||||||
similar to the following to the respective kernel Makefile:
|
similar to the following to the respective kernel Makefile:
|
||||||
|
|
||||||
|
|
|
@ -89,6 +89,22 @@ To build, save output files in a separate directory with KBUILD_OUTPUT ::
|
||||||
|
|
||||||
$ export KBUILD_OUTPUT=/tmp/kselftest; make TARGETS="size timers" kselftest
|
$ export KBUILD_OUTPUT=/tmp/kselftest; make TARGETS="size timers" kselftest
|
||||||
|
|
||||||
|
Additionally you can use the "SKIP_TARGETS" variable on the make command
|
||||||
|
line to specify one or more targets to exclude from the TARGETS list.
|
||||||
|
|
||||||
|
To run all tests but a single subsystem::
|
||||||
|
|
||||||
|
$ make -C tools/testing/selftests SKIP_TARGETS=ptrace run_tests
|
||||||
|
|
||||||
|
You can specify multiple tests to skip::
|
||||||
|
|
||||||
|
$ make SKIP_TARGETS="size timers" kselftest
|
||||||
|
|
||||||
|
You can also specify a restricted list of tests to run together with a
|
||||||
|
dedicated skiplist::
|
||||||
|
|
||||||
|
$ make TARGETS="bpf breakpoints size timers" SKIP_TARGETS=bpf kselftest
|
||||||
|
|
||||||
See the top-level tools/testing/selftests/Makefile for the list of all
|
See the top-level tools/testing/selftests/Makefile for the list of all
|
||||||
possible targets.
|
possible targets.
|
||||||
|
|
||||||
|
|
|
@ -85,4 +85,5 @@ examples:
|
||||||
<&pd IMX_SC_R_DSP_RAM>;
|
<&pd IMX_SC_R_DSP_RAM>;
|
||||||
mbox-names = "txdb0", "txdb1", "rxdb0", "rxdb1";
|
mbox-names = "txdb0", "txdb1", "rxdb0", "rxdb1";
|
||||||
mboxes = <&lsio_mu13 2 0>, <&lsio_mu13 2 1>, <&lsio_mu13 3 0>, <&lsio_mu13 3 1>;
|
mboxes = <&lsio_mu13 2 0>, <&lsio_mu13 2 1>, <&lsio_mu13 3 0>, <&lsio_mu13 3 1>;
|
||||||
|
memory-region = <&dsp_reserved>;
|
||||||
};
|
};
|
||||||
|
|
|
@ -43,13 +43,9 @@ properties:
|
||||||
|
|
||||||
dvdd-supply:
|
dvdd-supply:
|
||||||
description: DVdd voltage supply
|
description: DVdd voltage supply
|
||||||
items:
|
|
||||||
- const: dvdd
|
|
||||||
|
|
||||||
avdd-supply:
|
avdd-supply:
|
||||||
description: AVdd voltage supply
|
description: AVdd voltage supply
|
||||||
items:
|
|
||||||
- const: avdd
|
|
||||||
|
|
||||||
adi,rejection-60-Hz-enable:
|
adi,rejection-60-Hz-enable:
|
||||||
description: |
|
description: |
|
||||||
|
@ -99,6 +95,9 @@ required:
|
||||||
examples:
|
examples:
|
||||||
- |
|
- |
|
||||||
spi0 {
|
spi0 {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
adc@0 {
|
adc@0 {
|
||||||
compatible = "adi,ad7192";
|
compatible = "adi,ad7192";
|
||||||
reg = <0>;
|
reg = <0>;
|
||||||
|
|
|
@ -1,8 +1,11 @@
|
||||||
* Advanced Interrupt Controller (AIC)
|
* Advanced Interrupt Controller (AIC)
|
||||||
|
|
||||||
Required properties:
|
Required properties:
|
||||||
- compatible: Should be "atmel,<chip>-aic"
|
- compatible: Should be:
|
||||||
<chip> can be "at91rm9200", "sama5d2", "sama5d3" or "sama5d4"
|
- "atmel,<chip>-aic" where <chip> can be "at91rm9200", "sama5d2",
|
||||||
|
"sama5d3" or "sama5d4"
|
||||||
|
- "microchip,<chip>-aic" where <chip> can be "sam9x60"
|
||||||
|
|
||||||
- interrupt-controller: Identifies the node as an interrupt controller.
|
- interrupt-controller: Identifies the node as an interrupt controller.
|
||||||
- #interrupt-cells: The number of cells to define the interrupts. It should be 3.
|
- #interrupt-cells: The number of cells to define the interrupts. It should be 3.
|
||||||
The first cell is the IRQ number (aka "Peripheral IDentifier" on datasheet).
|
The first cell is the IRQ number (aka "Peripheral IDentifier" on datasheet).
|
||||||
|
|
|
@ -73,7 +73,6 @@ properties:
|
||||||
- rc-genius-tvgo-a11mce
|
- rc-genius-tvgo-a11mce
|
||||||
- rc-gotview7135
|
- rc-gotview7135
|
||||||
- rc-hauppauge
|
- rc-hauppauge
|
||||||
- rc-hauppauge
|
|
||||||
- rc-hisi-poplar
|
- rc-hisi-poplar
|
||||||
- rc-hisi-tv-demo
|
- rc-hisi-tv-demo
|
||||||
- rc-imon-mce
|
- rc-imon-mce
|
||||||
|
|
|
@ -37,7 +37,7 @@ properties:
|
||||||
- description: exclusive PHY reset line
|
- description: exclusive PHY reset line
|
||||||
- description: shared reset line between the PCIe PHY and PCIe controller
|
- description: shared reset line between the PCIe PHY and PCIe controller
|
||||||
|
|
||||||
resets-names:
|
reset-names:
|
||||||
items:
|
items:
|
||||||
- const: phy
|
- const: phy
|
||||||
- const: pcie
|
- const: pcie
|
||||||
|
|
|
@ -26,6 +26,8 @@ Required properties:
|
||||||
- "renesas,hscif-r8a77470" for R8A77470 (RZ/G1C) HSCIF compatible UART.
|
- "renesas,hscif-r8a77470" for R8A77470 (RZ/G1C) HSCIF compatible UART.
|
||||||
- "renesas,scif-r8a774a1" for R8A774A1 (RZ/G2M) SCIF compatible UART.
|
- "renesas,scif-r8a774a1" for R8A774A1 (RZ/G2M) SCIF compatible UART.
|
||||||
- "renesas,hscif-r8a774a1" for R8A774A1 (RZ/G2M) HSCIF compatible UART.
|
- "renesas,hscif-r8a774a1" for R8A774A1 (RZ/G2M) HSCIF compatible UART.
|
||||||
|
- "renesas,scif-r8a774b1" for R8A774B1 (RZ/G2N) SCIF compatible UART.
|
||||||
|
- "renesas,hscif-r8a774b1" for R8A774B1 (RZ/G2N) HSCIF compatible UART.
|
||||||
- "renesas,scif-r8a774c0" for R8A774C0 (RZ/G2E) SCIF compatible UART.
|
- "renesas,scif-r8a774c0" for R8A774C0 (RZ/G2E) SCIF compatible UART.
|
||||||
- "renesas,hscif-r8a774c0" for R8A774C0 (RZ/G2E) HSCIF compatible UART.
|
- "renesas,hscif-r8a774c0" for R8A774C0 (RZ/G2E) HSCIF compatible UART.
|
||||||
- "renesas,scif-r8a7778" for R8A7778 (R-Car M1) SCIF compatible UART.
|
- "renesas,scif-r8a7778" for R8A7778 (R-Car M1) SCIF compatible UART.
|
||||||
|
|
|
@ -63,7 +63,11 @@ properties:
|
||||||
description:
|
description:
|
||||||
Set this flag to force EHCI reset after resume.
|
Set this flag to force EHCI reset after resume.
|
||||||
|
|
||||||
phys: true
|
phys:
|
||||||
|
description: PHY specifier for the USB PHY
|
||||||
|
|
||||||
|
phy-names:
|
||||||
|
const: usb
|
||||||
|
|
||||||
required:
|
required:
|
||||||
- compatible
|
- compatible
|
||||||
|
@ -89,6 +93,7 @@ examples:
|
||||||
interrupts = <39>;
|
interrupts = <39>;
|
||||||
clocks = <&ahb_gates 1>;
|
clocks = <&ahb_gates 1>;
|
||||||
phys = <&usbphy 1>;
|
phys = <&usbphy 1>;
|
||||||
|
phy-names = "usb";
|
||||||
};
|
};
|
||||||
|
|
||||||
...
|
...
|
||||||
|
|
|
@ -67,7 +67,11 @@ properties:
|
||||||
description:
|
description:
|
||||||
Overrides the detected port count
|
Overrides the detected port count
|
||||||
|
|
||||||
phys: true
|
phys:
|
||||||
|
description: PHY specifier for the USB PHY
|
||||||
|
|
||||||
|
phy-names:
|
||||||
|
const: usb
|
||||||
|
|
||||||
required:
|
required:
|
||||||
- compatible
|
- compatible
|
||||||
|
@ -84,6 +88,7 @@ examples:
|
||||||
interrupts = <64>;
|
interrupts = <64>;
|
||||||
clocks = <&usb_clk 6>, <&ahb_gates 2>;
|
clocks = <&usb_clk 6>, <&ahb_gates 2>;
|
||||||
phys = <&usbphy 1>;
|
phys = <&usbphy 1>;
|
||||||
|
phy-names = "usb";
|
||||||
};
|
};
|
||||||
|
|
||||||
...
|
...
|
||||||
|
|
|
@ -33,7 +33,7 @@ Required properties:
|
||||||
"dma_ck": dma_bus clock for data transfer by DMA,
|
"dma_ck": dma_bus clock for data transfer by DMA,
|
||||||
"xhci_ck": controller clock
|
"xhci_ck": controller clock
|
||||||
|
|
||||||
- phys : see usb-hcd.txt in the current directory
|
- phys : see usb-hcd.yaml in the current directory
|
||||||
|
|
||||||
Optional properties:
|
Optional properties:
|
||||||
- wakeup-source : enable USB remote wakeup;
|
- wakeup-source : enable USB remote wakeup;
|
||||||
|
@ -53,7 +53,7 @@ Optional properties:
|
||||||
See: Documentation/devicetree/bindings/pinctrl/pinctrl-bindings.txt
|
See: Documentation/devicetree/bindings/pinctrl/pinctrl-bindings.txt
|
||||||
- imod-interval-ns: default interrupt moderation interval is 5000ns
|
- imod-interval-ns: default interrupt moderation interval is 5000ns
|
||||||
|
|
||||||
additionally the properties from usb-hcd.txt (in the current directory) are
|
additionally the properties from usb-hcd.yaml (in the current directory) are
|
||||||
supported.
|
supported.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
|
@ -17,7 +17,7 @@ Required properties:
|
||||||
- clock-names : must contain "sys_ck" for clock of controller,
|
- clock-names : must contain "sys_ck" for clock of controller,
|
||||||
the following clocks are optional:
|
the following clocks are optional:
|
||||||
"ref_ck", "mcu_ck" and "dma_ck";
|
"ref_ck", "mcu_ck" and "dma_ck";
|
||||||
- phys : see usb-hcd.txt in the current directory
|
- phys : see usb-hcd.yaml in the current directory
|
||||||
- dr_mode : should be one of "host", "peripheral" or "otg",
|
- dr_mode : should be one of "host", "peripheral" or "otg",
|
||||||
refer to usb/generic.txt
|
refer to usb/generic.txt
|
||||||
|
|
||||||
|
@ -60,7 +60,7 @@ Optional properties:
|
||||||
- mediatek,u3p-dis-msk : mask to disable u3ports, bit0 for u3port0,
|
- mediatek,u3p-dis-msk : mask to disable u3ports, bit0 for u3port0,
|
||||||
bit1 for u3port1, ... etc;
|
bit1 for u3port1, ... etc;
|
||||||
|
|
||||||
additionally the properties from usb-hcd.txt (in the current directory) are
|
additionally the properties from usb-hcd.yaml (in the current directory) are
|
||||||
supported.
|
supported.
|
||||||
|
|
||||||
Sub-nodes:
|
Sub-nodes:
|
||||||
|
|
|
@ -18,8 +18,13 @@ properties:
|
||||||
description:
|
description:
|
||||||
List of all the USB PHYs on this HCD
|
List of all the USB PHYs on this HCD
|
||||||
|
|
||||||
|
phy-names:
|
||||||
|
description:
|
||||||
|
Name specifier for the USB PHY
|
||||||
|
|
||||||
examples:
|
examples:
|
||||||
- |
|
- |
|
||||||
usb {
|
usb {
|
||||||
phys = <&usb2_phy1>, <&usb3_phy1>;
|
phys = <&usb2_phy1>, <&usb3_phy1>;
|
||||||
|
phy-names = "usb";
|
||||||
};
|
};
|
||||||
|
|
|
@ -6,7 +6,7 @@ Required properties:
|
||||||
- reg : Should contain 1 register ranges(address and length)
|
- reg : Should contain 1 register ranges(address and length)
|
||||||
- interrupts : UHCI controller interrupt
|
- interrupts : UHCI controller interrupt
|
||||||
|
|
||||||
additionally the properties from usb-hcd.txt (in the current directory) are
|
additionally the properties from usb-hcd.yaml (in the current directory) are
|
||||||
supported.
|
supported.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
|
@ -41,9 +41,9 @@ Optional properties:
|
||||||
- usb3-lpm-capable: determines if platform is USB3 LPM capable
|
- usb3-lpm-capable: determines if platform is USB3 LPM capable
|
||||||
- quirk-broken-port-ped: set if the controller has broken port disable mechanism
|
- quirk-broken-port-ped: set if the controller has broken port disable mechanism
|
||||||
- imod-interval-ns: default interrupt moderation interval is 5000ns
|
- imod-interval-ns: default interrupt moderation interval is 5000ns
|
||||||
- phys : see usb-hcd.txt in the current directory
|
- phys : see usb-hcd.yaml in the current directory
|
||||||
|
|
||||||
additionally the properties from usb-hcd.txt (in the current directory) are
|
additionally the properties from usb-hcd.yaml (in the current directory) are
|
||||||
supported.
|
supported.
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,7 @@ Linux Hardware Monitoring
|
||||||
|
|
||||||
hwmon-kernel-api
|
hwmon-kernel-api
|
||||||
pmbus-core
|
pmbus-core
|
||||||
|
inspur-ipsps1
|
||||||
submitting-patches
|
submitting-patches
|
||||||
sysfs-interface
|
sysfs-interface
|
||||||
userspace-tools
|
userspace-tools
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
Kernel driver inspur-ipsps1
|
Kernel driver inspur-ipsps1
|
||||||
=======================
|
===========================
|
||||||
|
|
||||||
Supported chips:
|
Supported chips:
|
||||||
|
|
||||||
|
|
|
@ -21,10 +21,17 @@ Supported chips:
|
||||||
|
|
||||||
* AMD Family 14h processors: "Brazos" (C/E/G/Z-Series)
|
* AMD Family 14h processors: "Brazos" (C/E/G/Z-Series)
|
||||||
|
|
||||||
* AMD Family 15h processors: "Bulldozer" (FX-Series), "Trinity", "Kaveri", "Carrizo"
|
* AMD Family 15h processors: "Bulldozer" (FX-Series), "Trinity", "Kaveri",
|
||||||
|
"Carrizo", "Stoney Ridge", "Bristol Ridge"
|
||||||
|
|
||||||
* AMD Family 16h processors: "Kabini", "Mullins"
|
* AMD Family 16h processors: "Kabini", "Mullins"
|
||||||
|
|
||||||
|
* AMD Family 17h processors: "Zen", "Zen 2"
|
||||||
|
|
||||||
|
* AMD Family 18h processors: "Hygon Dhyana"
|
||||||
|
|
||||||
|
* AMD Family 19h processors: "Zen 3"
|
||||||
|
|
||||||
Prefix: 'k10temp'
|
Prefix: 'k10temp'
|
||||||
|
|
||||||
Addresses scanned: PCI space
|
Addresses scanned: PCI space
|
||||||
|
@ -110,3 +117,12 @@ The maximum value for Tctl is available in the file temp1_max.
|
||||||
If the BIOS has enabled hardware temperature control, the threshold at
|
If the BIOS has enabled hardware temperature control, the threshold at
|
||||||
which the processor will throttle itself to avoid damage is available in
|
which the processor will throttle itself to avoid damage is available in
|
||||||
temp1_crit and temp1_crit_hyst.
|
temp1_crit and temp1_crit_hyst.
|
||||||
|
|
||||||
|
On some AMD CPUs, there is a difference between the die temperature (Tdie) and
|
||||||
|
the reported temperature (Tctl). Tdie is the real measured temperature, and
|
||||||
|
Tctl is used for fan control. While Tctl is always available as temp1_input,
|
||||||
|
the driver exports Tdie temperature as temp2_input for those CPUs which support
|
||||||
|
it.
|
||||||
|
|
||||||
|
Models from 17h family report relative temperature, the driver aims to
|
||||||
|
compensate and report the real temperature.
|
||||||
|
|
|
@ -954,11 +954,6 @@ When kbuild executes, the following steps are followed (roughly):
|
||||||
|
|
||||||
From commandline LDFLAGS_MODULE shall be used (see kbuild.txt).
|
From commandline LDFLAGS_MODULE shall be used (see kbuild.txt).
|
||||||
|
|
||||||
KBUILD_ARFLAGS Options for $(AR) when creating archives
|
|
||||||
|
|
||||||
$(KBUILD_ARFLAGS) set by the top level Makefile to "D" (deterministic
|
|
||||||
mode) if this option is supported by $(AR).
|
|
||||||
|
|
||||||
KBUILD_LDS
|
KBUILD_LDS
|
||||||
|
|
||||||
The linker script with full path. Assigned by the top-level Makefile.
|
The linker script with full path. Assigned by the top-level Makefile.
|
||||||
|
|
|
@ -498,10 +498,11 @@ build.
|
||||||
will be written containing all exported symbols that were not
|
will be written containing all exported symbols that were not
|
||||||
defined in the kernel.
|
defined in the kernel.
|
||||||
|
|
||||||
--- 6.3 Symbols From Another External Module
|
6.3 Symbols From Another External Module
|
||||||
|
----------------------------------------
|
||||||
|
|
||||||
Sometimes, an external module uses exported symbols from
|
Sometimes, an external module uses exported symbols from
|
||||||
another external module. kbuild needs to have full knowledge of
|
another external module. Kbuild needs to have full knowledge of
|
||||||
all symbols to avoid spitting out warnings about undefined
|
all symbols to avoid spitting out warnings about undefined
|
||||||
symbols. Three solutions exist for this situation.
|
symbols. Three solutions exist for this situation.
|
||||||
|
|
||||||
|
@ -521,7 +522,7 @@ build.
|
||||||
The top-level kbuild file would then look like::
|
The top-level kbuild file would then look like::
|
||||||
|
|
||||||
#./Kbuild (or ./Makefile):
|
#./Kbuild (or ./Makefile):
|
||||||
obj-y := foo/ bar/
|
obj-m := foo/ bar/
|
||||||
|
|
||||||
And executing::
|
And executing::
|
||||||
|
|
||||||
|
|
|
@ -16,16 +16,21 @@ the kernel may be unreproducible, and how to avoid them.
|
||||||
Timestamps
|
Timestamps
|
||||||
----------
|
----------
|
||||||
|
|
||||||
The kernel embeds a timestamp in two places:
|
The kernel embeds timestamps in three places:
|
||||||
|
|
||||||
* The version string exposed by ``uname()`` and included in
|
* The version string exposed by ``uname()`` and included in
|
||||||
``/proc/version``
|
``/proc/version``
|
||||||
|
|
||||||
* File timestamps in the embedded initramfs
|
* File timestamps in the embedded initramfs
|
||||||
|
|
||||||
By default the timestamp is the current time. This must be overridden
|
* If enabled via ``CONFIG_IKHEADERS``, file timestamps of kernel
|
||||||
using the `KBUILD_BUILD_TIMESTAMP`_ variable. If you are building
|
headers embedded in the kernel or respective module,
|
||||||
from a git commit, you could use its commit date.
|
exposed via ``/sys/kernel/kheaders.tar.xz``
|
||||||
|
|
||||||
|
By default the timestamp is the current time and in the case of
|
||||||
|
``kheaders`` the various files' modification times. This must
|
||||||
|
be overridden using the `KBUILD_BUILD_TIMESTAMP`_ variable.
|
||||||
|
If you are building from a git commit, you could use its commit date.
|
||||||
|
|
||||||
The kernel does *not* use the ``__DATE__`` and ``__TIME__`` macros,
|
The kernel does *not* use the ``__DATE__`` and ``__TIME__`` macros,
|
||||||
and enables warnings if they are used. If you incorporate external
|
and enables warnings if they are used. If you incorporate external
|
||||||
|
|
|
@ -23,6 +23,7 @@ Contents:
|
||||||
intel/ice
|
intel/ice
|
||||||
google/gve
|
google/gve
|
||||||
mellanox/mlx5
|
mellanox/mlx5
|
||||||
|
netronome/nfp
|
||||||
pensando/ionic
|
pensando/ionic
|
||||||
|
|
||||||
.. only:: subproject and html
|
.. only:: subproject and html
|
||||||
|
|
|
@ -36,8 +36,10 @@ Support
|
||||||
=======
|
=======
|
||||||
For general Linux networking support, please use the netdev mailing
|
For general Linux networking support, please use the netdev mailing
|
||||||
list, which is monitored by Pensando personnel::
|
list, which is monitored by Pensando personnel::
|
||||||
|
|
||||||
netdev@vger.kernel.org
|
netdev@vger.kernel.org
|
||||||
|
|
||||||
For more specific support needs, please use the Pensando driver support
|
For more specific support needs, please use the Pensando driver support
|
||||||
email::
|
email::
|
||||||
drivers@pensando.io
|
|
||||||
|
drivers@pensando.io
|
||||||
|
|
|
@ -272,7 +272,7 @@ supported flags are:
|
||||||
* MSG_DONTWAIT, i.e. non-blocking operation.
|
* MSG_DONTWAIT, i.e. non-blocking operation.
|
||||||
|
|
||||||
recvmsg(2)
|
recvmsg(2)
|
||||||
^^^^^^^^^
|
^^^^^^^^^^
|
||||||
|
|
||||||
In most cases recvmsg(2) is needed if you want to extract more information than
|
In most cases recvmsg(2) is needed if you want to extract more information than
|
||||||
recvfrom(2) can provide. For example package priority and timestamp. The
|
recvfrom(2) can provide. For example package priority and timestamp. The
|
||||||
|
|
|
@ -92,16 +92,16 @@ under some conditions.
|
||||||
Part III: Registering a Network Device to DIM
|
Part III: Registering a Network Device to DIM
|
||||||
==============================================
|
==============================================
|
||||||
|
|
||||||
Net DIM API exposes the main function net_dim(struct net_dim *dim,
|
Net DIM API exposes the main function net_dim(struct dim *dim,
|
||||||
struct net_dim_sample end_sample). This function is the entry point to the Net
|
struct dim_sample end_sample). This function is the entry point to the Net
|
||||||
DIM algorithm and has to be called every time the driver would like to check if
|
DIM algorithm and has to be called every time the driver would like to check if
|
||||||
it should change interrupt moderation parameters. The driver should provide two
|
it should change interrupt moderation parameters. The driver should provide two
|
||||||
data structures: struct net_dim and struct net_dim_sample. Struct net_dim
|
data structures: struct dim and struct dim_sample. Struct dim
|
||||||
describes the state of DIM for a specific object (RX queue, TX queue,
|
describes the state of DIM for a specific object (RX queue, TX queue,
|
||||||
other queues, etc.). This includes the current selected profile, previous data
|
other queues, etc.). This includes the current selected profile, previous data
|
||||||
samples, the callback function provided by the driver and more.
|
samples, the callback function provided by the driver and more.
|
||||||
Struct net_dim_sample describes a data sample, which will be compared to the
|
Struct dim_sample describes a data sample, which will be compared to the
|
||||||
data sample stored in struct net_dim in order to decide on the algorithm's next
|
data sample stored in struct dim in order to decide on the algorithm's next
|
||||||
step. The sample should include bytes, packets and interrupts, measured by
|
step. The sample should include bytes, packets and interrupts, measured by
|
||||||
the driver.
|
the driver.
|
||||||
|
|
||||||
|
@ -110,9 +110,9 @@ main net_dim() function. The recommended method is to call net_dim() on each
|
||||||
interrupt. Since Net DIM has a built-in moderation and it might decide to skip
|
interrupt. Since Net DIM has a built-in moderation and it might decide to skip
|
||||||
iterations under certain conditions, there is no need to moderate the net_dim()
|
iterations under certain conditions, there is no need to moderate the net_dim()
|
||||||
calls as well. As mentioned above, the driver needs to provide an object of type
|
calls as well. As mentioned above, the driver needs to provide an object of type
|
||||||
struct net_dim to the net_dim() function call. It is advised for each entity
|
struct dim to the net_dim() function call. It is advised for each entity
|
||||||
using Net DIM to hold a struct net_dim as part of its data structure and use it
|
using Net DIM to hold a struct dim as part of its data structure and use it
|
||||||
as the main Net DIM API object. The struct net_dim_sample should hold the latest
|
as the main Net DIM API object. The struct dim_sample should hold the latest
|
||||||
bytes, packets and interrupts count. No need to perform any calculations, just
|
bytes, packets and interrupts count. No need to perform any calculations, just
|
||||||
include the raw data.
|
include the raw data.
|
||||||
|
|
||||||
|
@ -132,19 +132,19 @@ usage is not complete but it should make the outline of the usage clear.
|
||||||
|
|
||||||
my_driver.c:
|
my_driver.c:
|
||||||
|
|
||||||
#include <linux/net_dim.h>
|
#include <linux/dim.h>
|
||||||
|
|
||||||
/* Callback for net DIM to schedule on a decision to change moderation */
|
/* Callback for net DIM to schedule on a decision to change moderation */
|
||||||
void my_driver_do_dim_work(struct work_struct *work)
|
void my_driver_do_dim_work(struct work_struct *work)
|
||||||
{
|
{
|
||||||
/* Get struct net_dim from struct work_struct */
|
/* Get struct dim from struct work_struct */
|
||||||
struct net_dim *dim = container_of(work, struct net_dim,
|
struct dim *dim = container_of(work, struct dim,
|
||||||
work);
|
work);
|
||||||
/* Do interrupt moderation related stuff */
|
/* Do interrupt moderation related stuff */
|
||||||
...
|
...
|
||||||
|
|
||||||
/* Signal net DIM work is done and it should move to next iteration */
|
/* Signal net DIM work is done and it should move to next iteration */
|
||||||
dim->state = NET_DIM_START_MEASURE;
|
dim->state = DIM_START_MEASURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* My driver's interrupt handler */
|
/* My driver's interrupt handler */
|
||||||
|
@ -152,13 +152,13 @@ int my_driver_handle_interrupt(struct my_driver_entity *my_entity, ...)
|
||||||
{
|
{
|
||||||
...
|
...
|
||||||
/* A struct to hold current measured data */
|
/* A struct to hold current measured data */
|
||||||
struct net_dim_sample dim_sample;
|
struct dim_sample dim_sample;
|
||||||
...
|
...
|
||||||
/* Initiate data sample struct with current data */
|
/* Initiate data sample struct with current data */
|
||||||
net_dim_sample(my_entity->events,
|
dim_update_sample(my_entity->events,
|
||||||
my_entity->packets,
|
my_entity->packets,
|
||||||
my_entity->bytes,
|
my_entity->bytes,
|
||||||
&dim_sample);
|
&dim_sample);
|
||||||
/* Call net DIM */
|
/* Call net DIM */
|
||||||
net_dim(&my_entity->dim, dim_sample);
|
net_dim(&my_entity->dim, dim_sample);
|
||||||
...
|
...
|
||||||
|
|
|
@ -56,7 +56,7 @@ instead of ``double-indenting`` the ``case`` labels. E.g.:
|
||||||
case 'K':
|
case 'K':
|
||||||
case 'k':
|
case 'k':
|
||||||
mem <<= 10;
|
mem <<= 10;
|
||||||
/* fall through */
|
fallthrough;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -122,14 +122,27 @@ memory adjacent to the stack (when built without `CONFIG_VMAP_STACK=y`)
|
||||||
|
|
||||||
Implicit switch case fall-through
|
Implicit switch case fall-through
|
||||||
---------------------------------
|
---------------------------------
|
||||||
The C language allows switch cases to "fall through" when
|
The C language allows switch cases to "fall-through" when a "break" statement
|
||||||
a "break" statement is missing at the end of a case. This,
|
is missing at the end of a case. This, however, introduces ambiguity in the
|
||||||
however, introduces ambiguity in the code, as it's not always
|
code, as it's not always clear if the missing break is intentional or a bug.
|
||||||
clear if the missing break is intentional or a bug. As there
|
|
||||||
have been a long list of flaws `due to missing "break" statements
|
As there have been a long list of flaws `due to missing "break" statements
|
||||||
<https://cwe.mitre.org/data/definitions/484.html>`_, we no longer allow
|
<https://cwe.mitre.org/data/definitions/484.html>`_, we no longer allow
|
||||||
"implicit fall-through". In order to identify an intentional fall-through
|
"implicit fall-through".
|
||||||
case, we have adopted the marking used by static analyzers: a comment
|
|
||||||
saying `/* Fall through */`. Once the C++17 `__attribute__((fallthrough))`
|
In order to identify intentional fall-through cases, we have adopted a
|
||||||
is more widely handled by C compilers, static analyzers, and IDEs, we can
|
pseudo-keyword macro 'fallthrough' which expands to gcc's extension
|
||||||
switch to using that instead.
|
__attribute__((__fallthrough__)). `Statement Attributes
|
||||||
|
<https://gcc.gnu.org/onlinedocs/gcc/Statement-Attributes.html>`_
|
||||||
|
|
||||||
|
When the C17/C18 [[fallthrough]] syntax is more commonly supported by
|
||||||
|
C compilers, static analyzers, and IDEs, we can switch to using that syntax
|
||||||
|
for the macro pseudo-keyword.
|
||||||
|
|
||||||
|
All switch/case blocks must end in one of:
|
||||||
|
|
||||||
|
break;
|
||||||
|
fallthrough;
|
||||||
|
continue;
|
||||||
|
goto <label>;
|
||||||
|
return [expression];
|
||||||
|
|
|
@ -1,109 +0,0 @@
|
||||||
============
|
|
||||||
Diamonds Rio
|
|
||||||
============
|
|
||||||
|
|
||||||
Copyright (C) 1999, 2000 Bruce Tenison
|
|
||||||
|
|
||||||
Portions Copyright (C) 1999, 2000 David Nelson
|
|
||||||
|
|
||||||
Thanks to David Nelson for guidance and the usage of the scanner.txt
|
|
||||||
and scanner.c files to model our driver and this informative file.
|
|
||||||
|
|
||||||
Mar. 2, 2000
|
|
||||||
|
|
||||||
Changes
|
|
||||||
=======
|
|
||||||
|
|
||||||
- Initial Revision
|
|
||||||
|
|
||||||
|
|
||||||
Overview
|
|
||||||
========
|
|
||||||
|
|
||||||
This README will address issues regarding how to configure the kernel
|
|
||||||
to access a RIO 500 mp3 player.
|
|
||||||
Before I explain how to use this to access the Rio500 please be warned:
|
|
||||||
|
|
||||||
.. warning::
|
|
||||||
|
|
||||||
Please note that this software is still under development. The authors
|
|
||||||
are in no way responsible for any damage that may occur, no matter how
|
|
||||||
inconsequential.
|
|
||||||
|
|
||||||
It seems that the Rio has a problem when sending .mp3 with low batteries.
|
|
||||||
I suggest when the batteries are low and you want to transfer stuff that you
|
|
||||||
replace it with a fresh one. In my case, what happened is I lost two 16kb
|
|
||||||
blocks (they are no longer usable to store information to it). But I don't
|
|
||||||
know if that's normal or not; it could simply be a problem with the flash
|
|
||||||
memory.
|
|
||||||
|
|
||||||
In an extreme case, I left my Rio playing overnight and the batteries wore
|
|
||||||
down to nothing and appear to have corrupted the flash memory. My RIO
|
|
||||||
needed to be replaced as a result. Diamond tech support is aware of the
|
|
||||||
problem. Do NOT allow your batteries to wear down to nothing before
|
|
||||||
changing them. It appears RIO 500 firmware does not handle low battery
|
|
||||||
power well at all.
|
|
||||||
|
|
||||||
On systems with OHCI controllers, the kernel OHCI code appears to have
|
|
||||||
power on problems with some chipsets. If you are having problems
|
|
||||||
connecting to your RIO 500, try turning it on first and then plugging it
|
|
||||||
into the USB cable.
|
|
||||||
|
|
||||||
Contact Information
|
|
||||||
-------------------
|
|
||||||
|
|
||||||
The main page for the project is hosted at sourceforge.net in the following
|
|
||||||
URL: <http://rio500.sourceforge.net>. You can also go to the project's
|
|
||||||
sourceforge home page at: <http://sourceforge.net/projects/rio500/>.
|
|
||||||
There is also a mailing list: rio500-users@lists.sourceforge.net
|
|
||||||
|
|
||||||
Authors
|
|
||||||
-------
|
|
||||||
|
|
||||||
Most of the code was written by Cesar Miquel <miquel@df.uba.ar>. Keith
|
|
||||||
Clayton <kclayton@jps.net> is incharge of the PPC port and making sure
|
|
||||||
things work there. Bruce Tenison <btenison@dibbs.net> is adding support
|
|
||||||
for .fon files and also does testing. The program will mostly sure be
|
|
||||||
re-written and Pete Ikusz along with the rest will re-design it. I would
|
|
||||||
also like to thank Tri Nguyen <tmn_3022000@hotmail.com> who provided use
|
|
||||||
with some important information regarding the communication with the Rio.
|
|
||||||
|
|
||||||
Additional Information and userspace tools
|
|
||||||
|
|
||||||
http://rio500.sourceforge.net/
|
|
||||||
|
|
||||||
|
|
||||||
Requirements
|
|
||||||
============
|
|
||||||
|
|
||||||
A host with a USB port running a Linux kernel with RIO 500 support enabled.
|
|
||||||
|
|
||||||
The driver is a module called rio500, which should be automatically loaded
|
|
||||||
as you plug in your device. If that fails you can manually load it with
|
|
||||||
|
|
||||||
modprobe rio500
|
|
||||||
|
|
||||||
Udev should automatically create a device node as soon as plug in your device.
|
|
||||||
If that fails, you can manually add a device for the USB rio500::
|
|
||||||
|
|
||||||
mknod /dev/usb/rio500 c 180 64
|
|
||||||
|
|
||||||
In that case, set appropriate permissions for /dev/usb/rio500 (don't forget
|
|
||||||
about group and world permissions). Both read and write permissions are
|
|
||||||
required for proper operation.
|
|
||||||
|
|
||||||
That's it. The Rio500 Utils at: http://rio500.sourceforge.net should
|
|
||||||
be able to access the rio500.
|
|
||||||
|
|
||||||
Limits
|
|
||||||
======
|
|
||||||
|
|
||||||
You can use only a single rio500 device at a time with your computer.
|
|
||||||
|
|
||||||
Bugs
|
|
||||||
====
|
|
||||||
|
|
||||||
If you encounter any problems feel free to drop me an email.
|
|
||||||
|
|
||||||
Bruce Tenison
|
|
||||||
btenison@dibbs.net
|
|
28
MAINTAINERS
28
MAINTAINERS
|
@ -2167,12 +2167,10 @@ F: arch/arm64/boot/dts/realtek/
|
||||||
F: Documentation/devicetree/bindings/arm/realtek.yaml
|
F: Documentation/devicetree/bindings/arm/realtek.yaml
|
||||||
|
|
||||||
ARM/RENESAS ARM64 ARCHITECTURE
|
ARM/RENESAS ARM64 ARCHITECTURE
|
||||||
M: Simon Horman <horms@verge.net.au>
|
|
||||||
M: Geert Uytterhoeven <geert+renesas@glider.be>
|
M: Geert Uytterhoeven <geert+renesas@glider.be>
|
||||||
M: Magnus Damm <magnus.damm@gmail.com>
|
M: Magnus Damm <magnus.damm@gmail.com>
|
||||||
L: linux-renesas-soc@vger.kernel.org
|
L: linux-renesas-soc@vger.kernel.org
|
||||||
Q: http://patchwork.kernel.org/project/linux-renesas-soc/list/
|
Q: http://patchwork.kernel.org/project/linux-renesas-soc/list/
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/horms/renesas.git next
|
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-devel.git next
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-devel.git next
|
||||||
S: Supported
|
S: Supported
|
||||||
F: arch/arm64/boot/dts/renesas/
|
F: arch/arm64/boot/dts/renesas/
|
||||||
|
@ -2284,12 +2282,10 @@ S: Maintained
|
||||||
F: drivers/media/platform/s5p-mfc/
|
F: drivers/media/platform/s5p-mfc/
|
||||||
|
|
||||||
ARM/SHMOBILE ARM ARCHITECTURE
|
ARM/SHMOBILE ARM ARCHITECTURE
|
||||||
M: Simon Horman <horms@verge.net.au>
|
|
||||||
M: Geert Uytterhoeven <geert+renesas@glider.be>
|
M: Geert Uytterhoeven <geert+renesas@glider.be>
|
||||||
M: Magnus Damm <magnus.damm@gmail.com>
|
M: Magnus Damm <magnus.damm@gmail.com>
|
||||||
L: linux-renesas-soc@vger.kernel.org
|
L: linux-renesas-soc@vger.kernel.org
|
||||||
Q: http://patchwork.kernel.org/project/linux-renesas-soc/list/
|
Q: http://patchwork.kernel.org/project/linux-renesas-soc/list/
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/horms/renesas.git next
|
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-devel.git next
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-devel.git next
|
||||||
S: Supported
|
S: Supported
|
||||||
F: arch/arm/boot/dts/emev2*
|
F: arch/arm/boot/dts/emev2*
|
||||||
|
@ -6114,7 +6110,10 @@ M: Gao Xiang <gaoxiang25@huawei.com>
|
||||||
M: Chao Yu <yuchao0@huawei.com>
|
M: Chao Yu <yuchao0@huawei.com>
|
||||||
L: linux-erofs@lists.ozlabs.org
|
L: linux-erofs@lists.ozlabs.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs.git
|
||||||
|
F: Documentation/filesystems/erofs.txt
|
||||||
F: fs/erofs/
|
F: fs/erofs/
|
||||||
|
F: include/trace/events/erofs.h
|
||||||
|
|
||||||
ERRSEQ ERROR TRACKING INFRASTRUCTURE
|
ERRSEQ ERROR TRACKING INFRASTRUCTURE
|
||||||
M: Jeff Layton <jlayton@kernel.org>
|
M: Jeff Layton <jlayton@kernel.org>
|
||||||
|
@ -9077,6 +9076,7 @@ F: security/keys/
|
||||||
KGDB / KDB /debug_core
|
KGDB / KDB /debug_core
|
||||||
M: Jason Wessel <jason.wessel@windriver.com>
|
M: Jason Wessel <jason.wessel@windriver.com>
|
||||||
M: Daniel Thompson <daniel.thompson@linaro.org>
|
M: Daniel Thompson <daniel.thompson@linaro.org>
|
||||||
|
R: Douglas Anderson <dianders@chromium.org>
|
||||||
W: http://kgdb.wiki.kernel.org/
|
W: http://kgdb.wiki.kernel.org/
|
||||||
L: kgdb-bugreport@lists.sourceforge.net
|
L: kgdb-bugreport@lists.sourceforge.net
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/jwessel/kgdb.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/jwessel/kgdb.git
|
||||||
|
@ -9124,7 +9124,7 @@ F: drivers/auxdisplay/ks0108.c
|
||||||
F: include/linux/ks0108.h
|
F: include/linux/ks0108.h
|
||||||
|
|
||||||
L3MDEV
|
L3MDEV
|
||||||
M: David Ahern <dsa@cumulusnetworks.com>
|
M: David Ahern <dsahern@kernel.org>
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: net/l3mdev
|
F: net/l3mdev
|
||||||
|
@ -9185,6 +9185,7 @@ M: Pavel Machek <pavel@ucw.cz>
|
||||||
R: Dan Murphy <dmurphy@ti.com>
|
R: Dan Murphy <dmurphy@ti.com>
|
||||||
L: linux-leds@vger.kernel.org
|
L: linux-leds@vger.kernel.org
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/j.anaszewski/linux-leds.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/j.anaszewski/linux-leds.git
|
||||||
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/pavel/linux-leds.git
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: Documentation/devicetree/bindings/leds/
|
F: Documentation/devicetree/bindings/leds/
|
||||||
F: drivers/leds/
|
F: drivers/leds/
|
||||||
|
@ -10256,7 +10257,7 @@ MEDIATEK ETHERNET DRIVER
|
||||||
M: Felix Fietkau <nbd@openwrt.org>
|
M: Felix Fietkau <nbd@openwrt.org>
|
||||||
M: John Crispin <john@phrozen.org>
|
M: John Crispin <john@phrozen.org>
|
||||||
M: Sean Wang <sean.wang@mediatek.com>
|
M: Sean Wang <sean.wang@mediatek.com>
|
||||||
M: Nelson Chang <nelson.chang@mediatek.com>
|
M: Mark Lee <Mark-MC.Lee@mediatek.com>
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/net/ethernet/mediatek/
|
F: drivers/net/ethernet/mediatek/
|
||||||
|
@ -11545,6 +11546,7 @@ NSDEPS
|
||||||
M: Matthias Maennich <maennich@google.com>
|
M: Matthias Maennich <maennich@google.com>
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: scripts/nsdeps
|
F: scripts/nsdeps
|
||||||
|
F: Documentation/core-api/symbol-namespaces.rst
|
||||||
|
|
||||||
NTB AMD DRIVER
|
NTB AMD DRIVER
|
||||||
M: Shyam Sundar S K <Shyam-sundar.S-k@amd.com>
|
M: Shyam Sundar S K <Shyam-sundar.S-k@amd.com>
|
||||||
|
@ -12312,12 +12314,15 @@ F: arch/parisc/
|
||||||
F: Documentation/parisc/
|
F: Documentation/parisc/
|
||||||
F: drivers/parisc/
|
F: drivers/parisc/
|
||||||
F: drivers/char/agp/parisc-agp.c
|
F: drivers/char/agp/parisc-agp.c
|
||||||
|
F: drivers/input/misc/hp_sdc_rtc.c
|
||||||
F: drivers/input/serio/gscps2.c
|
F: drivers/input/serio/gscps2.c
|
||||||
|
F: drivers/input/serio/hp_sdc*
|
||||||
F: drivers/parport/parport_gsc.*
|
F: drivers/parport/parport_gsc.*
|
||||||
F: drivers/tty/serial/8250/8250_gsc.c
|
F: drivers/tty/serial/8250/8250_gsc.c
|
||||||
F: drivers/video/fbdev/sti*
|
F: drivers/video/fbdev/sti*
|
||||||
F: drivers/video/console/sti*
|
F: drivers/video/console/sti*
|
||||||
F: drivers/video/logo/logo_parisc*
|
F: drivers/video/logo/logo_parisc*
|
||||||
|
F: include/linux/hp_sdc.h
|
||||||
|
|
||||||
PARMAN
|
PARMAN
|
||||||
M: Jiri Pirko <jiri@mellanox.com>
|
M: Jiri Pirko <jiri@mellanox.com>
|
||||||
|
@ -13361,7 +13366,7 @@ S: Maintained
|
||||||
F: drivers/scsi/qla1280.[ch]
|
F: drivers/scsi/qla1280.[ch]
|
||||||
|
|
||||||
QLOGIC QLA2XXX FC-SCSI DRIVER
|
QLOGIC QLA2XXX FC-SCSI DRIVER
|
||||||
M: qla2xxx-upstream@qlogic.com
|
M: hmadhani@marvell.com
|
||||||
L: linux-scsi@vger.kernel.org
|
L: linux-scsi@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
F: Documentation/scsi/LICENSE.qla2xxx
|
F: Documentation/scsi/LICENSE.qla2xxx
|
||||||
|
@ -16764,13 +16769,6 @@ W: http://www.linux-usb.org/usbnet
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/net/usb/dm9601.c
|
F: drivers/net/usb/dm9601.c
|
||||||
|
|
||||||
USB DIAMOND RIO500 DRIVER
|
|
||||||
M: Cesar Miquel <miquel@df.uba.ar>
|
|
||||||
L: rio500-users@lists.sourceforge.net
|
|
||||||
W: http://rio500.sourceforge.net
|
|
||||||
S: Maintained
|
|
||||||
F: drivers/usb/misc/rio500*
|
|
||||||
|
|
||||||
USB EHCI DRIVER
|
USB EHCI DRIVER
|
||||||
M: Alan Stern <stern@rowland.harvard.edu>
|
M: Alan Stern <stern@rowland.harvard.edu>
|
||||||
L: linux-usb@vger.kernel.org
|
L: linux-usb@vger.kernel.org
|
||||||
|
@ -17437,7 +17435,7 @@ F: include/linux/regulator/
|
||||||
K: regulator_get_optional
|
K: regulator_get_optional
|
||||||
|
|
||||||
VRF
|
VRF
|
||||||
M: David Ahern <dsa@cumulusnetworks.com>
|
M: David Ahern <dsahern@kernel.org>
|
||||||
M: Shrijeet Mukherjee <shrijeet@gmail.com>
|
M: Shrijeet Mukherjee <shrijeet@gmail.com>
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
|
37
Makefile
37
Makefile
|
@ -2,8 +2,8 @@
|
||||||
VERSION = 5
|
VERSION = 5
|
||||||
PATCHLEVEL = 4
|
PATCHLEVEL = 4
|
||||||
SUBLEVEL = 0
|
SUBLEVEL = 0
|
||||||
EXTRAVERSION = -rc1
|
EXTRAVERSION = -rc4
|
||||||
NAME = Bobtail Squid
|
NAME = Nesting Opossum
|
||||||
|
|
||||||
# *DOCUMENTATION*
|
# *DOCUMENTATION*
|
||||||
# To see a list of typical targets execute "make help"
|
# To see a list of typical targets execute "make help"
|
||||||
|
@ -206,24 +206,8 @@ ifndef KBUILD_CHECKSRC
|
||||||
KBUILD_CHECKSRC = 0
|
KBUILD_CHECKSRC = 0
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Use make M=dir to specify directory of external module to build
|
# Use make M=dir or set the environment variable KBUILD_EXTMOD to specify the
|
||||||
# Old syntax make ... SUBDIRS=$PWD is still supported
|
# directory of external module to build. Setting M= takes precedence.
|
||||||
# Setting the environment variable KBUILD_EXTMOD take precedence
|
|
||||||
ifdef SUBDIRS
|
|
||||||
$(warning ================= WARNING ================)
|
|
||||||
$(warning 'SUBDIRS' will be removed after Linux 5.3)
|
|
||||||
$(warning )
|
|
||||||
$(warning If you are building an individual subdirectory)
|
|
||||||
$(warning in the kernel tree, you can do like this:)
|
|
||||||
$(warning $$ make path/to/dir/you/want/to/build/)
|
|
||||||
$(warning (Do not forget the trailing slash))
|
|
||||||
$(warning )
|
|
||||||
$(warning If you are building an external module,)
|
|
||||||
$(warning Please use 'M=' or 'KBUILD_EXTMOD' instead)
|
|
||||||
$(warning ==========================================)
|
|
||||||
KBUILD_EXTMOD ?= $(SUBDIRS)
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ("$(origin M)", "command line")
|
ifeq ("$(origin M)", "command line")
|
||||||
KBUILD_EXTMOD := $(M)
|
KBUILD_EXTMOD := $(M)
|
||||||
endif
|
endif
|
||||||
|
@ -498,7 +482,6 @@ export CFLAGS_KASAN CFLAGS_KASAN_NOSANITIZE CFLAGS_UBSAN
|
||||||
export KBUILD_AFLAGS AFLAGS_KERNEL AFLAGS_MODULE
|
export KBUILD_AFLAGS AFLAGS_KERNEL AFLAGS_MODULE
|
||||||
export KBUILD_AFLAGS_MODULE KBUILD_CFLAGS_MODULE KBUILD_LDFLAGS_MODULE
|
export KBUILD_AFLAGS_MODULE KBUILD_CFLAGS_MODULE KBUILD_LDFLAGS_MODULE
|
||||||
export KBUILD_AFLAGS_KERNEL KBUILD_CFLAGS_KERNEL
|
export KBUILD_AFLAGS_KERNEL KBUILD_CFLAGS_KERNEL
|
||||||
export KBUILD_ARFLAGS
|
|
||||||
|
|
||||||
# Files to ignore in find ... statements
|
# Files to ignore in find ... statements
|
||||||
|
|
||||||
|
@ -616,7 +599,7 @@ endif
|
||||||
# in addition to whatever we do anyway.
|
# in addition to whatever we do anyway.
|
||||||
# Just "make" or "make all" shall build modules as well
|
# Just "make" or "make all" shall build modules as well
|
||||||
|
|
||||||
ifneq ($(filter all _all modules,$(MAKECMDGOALS)),)
|
ifneq ($(filter all _all modules nsdeps,$(MAKECMDGOALS)),)
|
||||||
KBUILD_MODULES := 1
|
KBUILD_MODULES := 1
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
@ -914,9 +897,6 @@ ifdef CONFIG_RETPOLINE
|
||||||
KBUILD_CFLAGS += $(call cc-option,-fcf-protection=none)
|
KBUILD_CFLAGS += $(call cc-option,-fcf-protection=none)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# use the deterministic mode of AR if available
|
|
||||||
KBUILD_ARFLAGS := $(call ar-option,D)
|
|
||||||
|
|
||||||
include scripts/Makefile.kasan
|
include scripts/Makefile.kasan
|
||||||
include scripts/Makefile.extrawarn
|
include scripts/Makefile.extrawarn
|
||||||
include scripts/Makefile.ubsan
|
include scripts/Makefile.ubsan
|
||||||
|
@ -1057,7 +1037,7 @@ export KBUILD_VMLINUX_OBJS := $(head-y) $(init-y) $(core-y) $(libs-y2) \
|
||||||
export KBUILD_VMLINUX_LIBS := $(libs-y1)
|
export KBUILD_VMLINUX_LIBS := $(libs-y1)
|
||||||
export KBUILD_LDS := arch/$(SRCARCH)/kernel/vmlinux.lds
|
export KBUILD_LDS := arch/$(SRCARCH)/kernel/vmlinux.lds
|
||||||
export LDFLAGS_vmlinux
|
export LDFLAGS_vmlinux
|
||||||
# used by scripts/package/Makefile
|
# used by scripts/Makefile.package
|
||||||
export KBUILD_ALLDIRS := $(sort $(filter-out arch/%,$(vmlinux-alldirs)) LICENSES arch include scripts tools)
|
export KBUILD_ALLDIRS := $(sort $(filter-out arch/%,$(vmlinux-alldirs)) LICENSES arch include scripts tools)
|
||||||
|
|
||||||
vmlinux-deps := $(KBUILD_LDS) $(KBUILD_VMLINUX_OBJS) $(KBUILD_VMLINUX_LIBS)
|
vmlinux-deps := $(KBUILD_LDS) $(KBUILD_VMLINUX_OBJS) $(KBUILD_VMLINUX_LIBS)
|
||||||
|
@ -1237,9 +1217,8 @@ PHONY += kselftest
|
||||||
kselftest:
|
kselftest:
|
||||||
$(Q)$(MAKE) -C $(srctree)/tools/testing/selftests run_tests
|
$(Q)$(MAKE) -C $(srctree)/tools/testing/selftests run_tests
|
||||||
|
|
||||||
PHONY += kselftest-clean
|
kselftest-%: FORCE
|
||||||
kselftest-clean:
|
$(Q)$(MAKE) -C $(srctree)/tools/testing/selftests $*
|
||||||
$(Q)$(MAKE) -C $(srctree)/tools/testing/selftests clean
|
|
||||||
|
|
||||||
PHONY += kselftest-merge
|
PHONY += kselftest-merge
|
||||||
kselftest-merge:
|
kselftest-merge:
|
||||||
|
|
|
@ -432,7 +432,7 @@
|
||||||
pinctrl-0 = <&mmc0_pins_default>;
|
pinctrl-0 = <&mmc0_pins_default>;
|
||||||
};
|
};
|
||||||
|
|
||||||
&gpio0 {
|
&gpio0_target {
|
||||||
/* Do not idle the GPIO used for holding the VTT regulator */
|
/* Do not idle the GPIO used for holding the VTT regulator */
|
||||||
ti,no-reset-on-init;
|
ti,no-reset-on-init;
|
||||||
ti,no-idle-on-init;
|
ti,no-idle-on-init;
|
||||||
|
|
|
@ -127,7 +127,7 @@
|
||||||
ranges = <0x0 0x5000 0x1000>;
|
ranges = <0x0 0x5000 0x1000>;
|
||||||
};
|
};
|
||||||
|
|
||||||
target-module@7000 { /* 0x44e07000, ap 14 20.0 */
|
gpio0_target: target-module@7000 { /* 0x44e07000, ap 14 20.0 */
|
||||||
compatible = "ti,sysc-omap2", "ti,sysc";
|
compatible = "ti,sysc-omap2", "ti,sysc";
|
||||||
ti,hwmods = "gpio1";
|
ti,hwmods = "gpio1";
|
||||||
reg = <0x7000 0x4>,
|
reg = <0x7000 0x4>,
|
||||||
|
@ -2038,7 +2038,9 @@
|
||||||
reg = <0xe000 0x4>,
|
reg = <0xe000 0x4>,
|
||||||
<0xe054 0x4>;
|
<0xe054 0x4>;
|
||||||
reg-names = "rev", "sysc";
|
reg-names = "rev", "sysc";
|
||||||
ti,sysc-midle ;
|
ti,sysc-midle = <SYSC_IDLE_FORCE>,
|
||||||
|
<SYSC_IDLE_NO>,
|
||||||
|
<SYSC_IDLE_SMART>;
|
||||||
ti,sysc-sidle = <SYSC_IDLE_FORCE>,
|
ti,sysc-sidle = <SYSC_IDLE_FORCE>,
|
||||||
<SYSC_IDLE_NO>,
|
<SYSC_IDLE_NO>,
|
||||||
<SYSC_IDLE_SMART>;
|
<SYSC_IDLE_SMART>;
|
||||||
|
|
|
@ -337,6 +337,8 @@
|
||||||
ti,hwmods = "dss_dispc";
|
ti,hwmods = "dss_dispc";
|
||||||
clocks = <&disp_clk>;
|
clocks = <&disp_clk>;
|
||||||
clock-names = "fck";
|
clock-names = "fck";
|
||||||
|
|
||||||
|
max-memory-bandwidth = <230000000>;
|
||||||
};
|
};
|
||||||
|
|
||||||
rfbi: rfbi@4832a800 {
|
rfbi: rfbi@4832a800 {
|
||||||
|
|
|
@ -2732,7 +2732,7 @@
|
||||||
interrupt-names = "tx", "rx";
|
interrupt-names = "tx", "rx";
|
||||||
dmas = <&edma_xbar 129 1>, <&edma_xbar 128 1>;
|
dmas = <&edma_xbar 129 1>, <&edma_xbar 128 1>;
|
||||||
dma-names = "tx", "rx";
|
dma-names = "tx", "rx";
|
||||||
clocks = <&ipu_clkctrl DRA7_IPU_MCASP1_CLKCTRL 22>,
|
clocks = <&ipu_clkctrl DRA7_IPU_MCASP1_CLKCTRL 0>,
|
||||||
<&ipu_clkctrl DRA7_IPU_MCASP1_CLKCTRL 24>,
|
<&ipu_clkctrl DRA7_IPU_MCASP1_CLKCTRL 24>,
|
||||||
<&ipu_clkctrl DRA7_IPU_MCASP1_CLKCTRL 28>;
|
<&ipu_clkctrl DRA7_IPU_MCASP1_CLKCTRL 28>;
|
||||||
clock-names = "fck", "ahclkx", "ahclkr";
|
clock-names = "fck", "ahclkx", "ahclkr";
|
||||||
|
@ -2768,8 +2768,8 @@
|
||||||
interrupt-names = "tx", "rx";
|
interrupt-names = "tx", "rx";
|
||||||
dmas = <&edma_xbar 131 1>, <&edma_xbar 130 1>;
|
dmas = <&edma_xbar 131 1>, <&edma_xbar 130 1>;
|
||||||
dma-names = "tx", "rx";
|
dma-names = "tx", "rx";
|
||||||
clocks = <&l4per2_clkctrl DRA7_L4PER2_MCASP2_CLKCTRL 22>,
|
clocks = <&l4per2_clkctrl DRA7_L4PER2_MCASP2_CLKCTRL 0>,
|
||||||
<&l4per2_clkctrl DRA7_L4PER2_MCASP2_CLKCTRL 24>,
|
<&ipu_clkctrl DRA7_IPU_MCASP1_CLKCTRL 24>,
|
||||||
<&l4per2_clkctrl DRA7_L4PER2_MCASP2_CLKCTRL 28>;
|
<&l4per2_clkctrl DRA7_L4PER2_MCASP2_CLKCTRL 28>;
|
||||||
clock-names = "fck", "ahclkx", "ahclkr";
|
clock-names = "fck", "ahclkx", "ahclkr";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
@ -2786,9 +2786,8 @@
|
||||||
<SYSC_IDLE_SMART>;
|
<SYSC_IDLE_SMART>;
|
||||||
/* Domains (P, C): l4per_pwrdm, l4per2_clkdm */
|
/* Domains (P, C): l4per_pwrdm, l4per2_clkdm */
|
||||||
clocks = <&l4per2_clkctrl DRA7_L4PER2_MCASP3_CLKCTRL 0>,
|
clocks = <&l4per2_clkctrl DRA7_L4PER2_MCASP3_CLKCTRL 0>,
|
||||||
<&l4per2_clkctrl DRA7_L4PER2_MCASP3_CLKCTRL 24>,
|
<&l4per2_clkctrl DRA7_L4PER2_MCASP3_CLKCTRL 24>;
|
||||||
<&l4per2_clkctrl DRA7_L4PER2_MCASP3_CLKCTRL 28>;
|
clock-names = "fck", "ahclkx";
|
||||||
clock-names = "fck", "ahclkx", "ahclkr";
|
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
ranges = <0x0 0x68000 0x2000>,
|
ranges = <0x0 0x68000 0x2000>,
|
||||||
|
@ -2804,7 +2803,7 @@
|
||||||
interrupt-names = "tx", "rx";
|
interrupt-names = "tx", "rx";
|
||||||
dmas = <&edma_xbar 133 1>, <&edma_xbar 132 1>;
|
dmas = <&edma_xbar 133 1>, <&edma_xbar 132 1>;
|
||||||
dma-names = "tx", "rx";
|
dma-names = "tx", "rx";
|
||||||
clocks = <&l4per2_clkctrl DRA7_L4PER2_MCASP3_CLKCTRL 22>,
|
clocks = <&l4per2_clkctrl DRA7_L4PER2_MCASP3_CLKCTRL 0>,
|
||||||
<&l4per2_clkctrl DRA7_L4PER2_MCASP3_CLKCTRL 24>;
|
<&l4per2_clkctrl DRA7_L4PER2_MCASP3_CLKCTRL 24>;
|
||||||
clock-names = "fck", "ahclkx";
|
clock-names = "fck", "ahclkx";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
@ -2821,9 +2820,8 @@
|
||||||
<SYSC_IDLE_SMART>;
|
<SYSC_IDLE_SMART>;
|
||||||
/* Domains (P, C): l4per_pwrdm, l4per2_clkdm */
|
/* Domains (P, C): l4per_pwrdm, l4per2_clkdm */
|
||||||
clocks = <&l4per2_clkctrl DRA7_L4PER2_MCASP4_CLKCTRL 0>,
|
clocks = <&l4per2_clkctrl DRA7_L4PER2_MCASP4_CLKCTRL 0>,
|
||||||
<&l4per2_clkctrl DRA7_L4PER2_MCASP4_CLKCTRL 24>,
|
<&l4per2_clkctrl DRA7_L4PER2_MCASP4_CLKCTRL 24>;
|
||||||
<&l4per2_clkctrl DRA7_L4PER2_MCASP4_CLKCTRL 28>;
|
clock-names = "fck", "ahclkx";
|
||||||
clock-names = "fck", "ahclkx", "ahclkr";
|
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
ranges = <0x0 0x6c000 0x2000>,
|
ranges = <0x0 0x6c000 0x2000>,
|
||||||
|
@ -2839,7 +2837,7 @@
|
||||||
interrupt-names = "tx", "rx";
|
interrupt-names = "tx", "rx";
|
||||||
dmas = <&edma_xbar 135 1>, <&edma_xbar 134 1>;
|
dmas = <&edma_xbar 135 1>, <&edma_xbar 134 1>;
|
||||||
dma-names = "tx", "rx";
|
dma-names = "tx", "rx";
|
||||||
clocks = <&l4per2_clkctrl DRA7_L4PER2_MCASP4_CLKCTRL 22>,
|
clocks = <&l4per2_clkctrl DRA7_L4PER2_MCASP4_CLKCTRL 0>,
|
||||||
<&l4per2_clkctrl DRA7_L4PER2_MCASP4_CLKCTRL 24>;
|
<&l4per2_clkctrl DRA7_L4PER2_MCASP4_CLKCTRL 24>;
|
||||||
clock-names = "fck", "ahclkx";
|
clock-names = "fck", "ahclkx";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
@ -2856,9 +2854,8 @@
|
||||||
<SYSC_IDLE_SMART>;
|
<SYSC_IDLE_SMART>;
|
||||||
/* Domains (P, C): l4per_pwrdm, l4per2_clkdm */
|
/* Domains (P, C): l4per_pwrdm, l4per2_clkdm */
|
||||||
clocks = <&l4per2_clkctrl DRA7_L4PER2_MCASP5_CLKCTRL 0>,
|
clocks = <&l4per2_clkctrl DRA7_L4PER2_MCASP5_CLKCTRL 0>,
|
||||||
<&l4per2_clkctrl DRA7_L4PER2_MCASP5_CLKCTRL 24>,
|
<&l4per2_clkctrl DRA7_L4PER2_MCASP5_CLKCTRL 24>;
|
||||||
<&l4per2_clkctrl DRA7_L4PER2_MCASP5_CLKCTRL 28>;
|
clock-names = "fck", "ahclkx";
|
||||||
clock-names = "fck", "ahclkx", "ahclkr";
|
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
ranges = <0x0 0x70000 0x2000>,
|
ranges = <0x0 0x70000 0x2000>,
|
||||||
|
@ -2874,7 +2871,7 @@
|
||||||
interrupt-names = "tx", "rx";
|
interrupt-names = "tx", "rx";
|
||||||
dmas = <&edma_xbar 137 1>, <&edma_xbar 136 1>;
|
dmas = <&edma_xbar 137 1>, <&edma_xbar 136 1>;
|
||||||
dma-names = "tx", "rx";
|
dma-names = "tx", "rx";
|
||||||
clocks = <&l4per2_clkctrl DRA7_L4PER2_MCASP5_CLKCTRL 22>,
|
clocks = <&l4per2_clkctrl DRA7_L4PER2_MCASP5_CLKCTRL 0>,
|
||||||
<&l4per2_clkctrl DRA7_L4PER2_MCASP5_CLKCTRL 24>;
|
<&l4per2_clkctrl DRA7_L4PER2_MCASP5_CLKCTRL 24>;
|
||||||
clock-names = "fck", "ahclkx";
|
clock-names = "fck", "ahclkx";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
@ -2891,9 +2888,8 @@
|
||||||
<SYSC_IDLE_SMART>;
|
<SYSC_IDLE_SMART>;
|
||||||
/* Domains (P, C): l4per_pwrdm, l4per2_clkdm */
|
/* Domains (P, C): l4per_pwrdm, l4per2_clkdm */
|
||||||
clocks = <&l4per2_clkctrl DRA7_L4PER2_MCASP6_CLKCTRL 0>,
|
clocks = <&l4per2_clkctrl DRA7_L4PER2_MCASP6_CLKCTRL 0>,
|
||||||
<&l4per2_clkctrl DRA7_L4PER2_MCASP6_CLKCTRL 24>,
|
<&l4per2_clkctrl DRA7_L4PER2_MCASP6_CLKCTRL 24>;
|
||||||
<&l4per2_clkctrl DRA7_L4PER2_MCASP6_CLKCTRL 28>;
|
clock-names = "fck", "ahclkx";
|
||||||
clock-names = "fck", "ahclkx", "ahclkr";
|
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
ranges = <0x0 0x74000 0x2000>,
|
ranges = <0x0 0x74000 0x2000>,
|
||||||
|
@ -2909,7 +2905,7 @@
|
||||||
interrupt-names = "tx", "rx";
|
interrupt-names = "tx", "rx";
|
||||||
dmas = <&edma_xbar 139 1>, <&edma_xbar 138 1>;
|
dmas = <&edma_xbar 139 1>, <&edma_xbar 138 1>;
|
||||||
dma-names = "tx", "rx";
|
dma-names = "tx", "rx";
|
||||||
clocks = <&l4per2_clkctrl DRA7_L4PER2_MCASP6_CLKCTRL 22>,
|
clocks = <&l4per2_clkctrl DRA7_L4PER2_MCASP6_CLKCTRL 0>,
|
||||||
<&l4per2_clkctrl DRA7_L4PER2_MCASP6_CLKCTRL 24>;
|
<&l4per2_clkctrl DRA7_L4PER2_MCASP6_CLKCTRL 24>;
|
||||||
clock-names = "fck", "ahclkx";
|
clock-names = "fck", "ahclkx";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
@ -2926,9 +2922,8 @@
|
||||||
<SYSC_IDLE_SMART>;
|
<SYSC_IDLE_SMART>;
|
||||||
/* Domains (P, C): l4per_pwrdm, l4per2_clkdm */
|
/* Domains (P, C): l4per_pwrdm, l4per2_clkdm */
|
||||||
clocks = <&l4per2_clkctrl DRA7_L4PER2_MCASP7_CLKCTRL 0>,
|
clocks = <&l4per2_clkctrl DRA7_L4PER2_MCASP7_CLKCTRL 0>,
|
||||||
<&l4per2_clkctrl DRA7_L4PER2_MCASP7_CLKCTRL 24>,
|
<&l4per2_clkctrl DRA7_L4PER2_MCASP7_CLKCTRL 24>;
|
||||||
<&l4per2_clkctrl DRA7_L4PER2_MCASP7_CLKCTRL 28>;
|
clock-names = "fck", "ahclkx";
|
||||||
clock-names = "fck", "ahclkx", "ahclkr";
|
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
ranges = <0x0 0x78000 0x2000>,
|
ranges = <0x0 0x78000 0x2000>,
|
||||||
|
@ -2944,7 +2939,7 @@
|
||||||
interrupt-names = "tx", "rx";
|
interrupt-names = "tx", "rx";
|
||||||
dmas = <&edma_xbar 141 1>, <&edma_xbar 140 1>;
|
dmas = <&edma_xbar 141 1>, <&edma_xbar 140 1>;
|
||||||
dma-names = "tx", "rx";
|
dma-names = "tx", "rx";
|
||||||
clocks = <&l4per2_clkctrl DRA7_L4PER2_MCASP7_CLKCTRL 22>,
|
clocks = <&l4per2_clkctrl DRA7_L4PER2_MCASP7_CLKCTRL 0>,
|
||||||
<&l4per2_clkctrl DRA7_L4PER2_MCASP7_CLKCTRL 24>;
|
<&l4per2_clkctrl DRA7_L4PER2_MCASP7_CLKCTRL 24>;
|
||||||
clock-names = "fck", "ahclkx";
|
clock-names = "fck", "ahclkx";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
@ -2961,9 +2956,8 @@
|
||||||
<SYSC_IDLE_SMART>;
|
<SYSC_IDLE_SMART>;
|
||||||
/* Domains (P, C): l4per_pwrdm, l4per2_clkdm */
|
/* Domains (P, C): l4per_pwrdm, l4per2_clkdm */
|
||||||
clocks = <&l4per2_clkctrl DRA7_L4PER2_MCASP8_CLKCTRL 0>,
|
clocks = <&l4per2_clkctrl DRA7_L4PER2_MCASP8_CLKCTRL 0>,
|
||||||
<&l4per2_clkctrl DRA7_L4PER2_MCASP8_CLKCTRL 24>,
|
<&l4per2_clkctrl DRA7_L4PER2_MCASP8_CLKCTRL 24>;
|
||||||
<&l4per2_clkctrl DRA7_L4PER2_MCASP8_CLKCTRL 28>;
|
clock-names = "fck", "ahclkx";
|
||||||
clock-names = "fck", "ahclkx", "ahclkr";
|
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
ranges = <0x0 0x7c000 0x2000>,
|
ranges = <0x0 0x7c000 0x2000>,
|
||||||
|
@ -2979,7 +2973,7 @@
|
||||||
interrupt-names = "tx", "rx";
|
interrupt-names = "tx", "rx";
|
||||||
dmas = <&edma_xbar 143 1>, <&edma_xbar 142 1>;
|
dmas = <&edma_xbar 143 1>, <&edma_xbar 142 1>;
|
||||||
dma-names = "tx", "rx";
|
dma-names = "tx", "rx";
|
||||||
clocks = <&l4per2_clkctrl DRA7_L4PER2_MCASP8_CLKCTRL 22>,
|
clocks = <&l4per2_clkctrl DRA7_L4PER2_MCASP8_CLKCTRL 0>,
|
||||||
<&l4per2_clkctrl DRA7_L4PER2_MCASP8_CLKCTRL 24>;
|
<&l4per2_clkctrl DRA7_L4PER2_MCASP8_CLKCTRL 24>;
|
||||||
clock-names = "fck", "ahclkx";
|
clock-names = "fck", "ahclkx";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
|
|
@ -66,9 +66,21 @@
|
||||||
pinctrl-1 = <&ephy_leds_pins>;
|
pinctrl-1 = <&ephy_leds_pins>;
|
||||||
status = "okay";
|
status = "okay";
|
||||||
|
|
||||||
|
gmac0: mac@0 {
|
||||||
|
compatible = "mediatek,eth-mac";
|
||||||
|
reg = <0>;
|
||||||
|
phy-mode = "2500base-x";
|
||||||
|
fixed-link {
|
||||||
|
speed = <2500>;
|
||||||
|
full-duplex;
|
||||||
|
pause;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
gmac1: mac@1 {
|
gmac1: mac@1 {
|
||||||
compatible = "mediatek,eth-mac";
|
compatible = "mediatek,eth-mac";
|
||||||
reg = <1>;
|
reg = <1>;
|
||||||
|
phy-mode = "gmii";
|
||||||
phy-handle = <&phy0>;
|
phy-handle = <&phy0>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -78,7 +90,6 @@
|
||||||
|
|
||||||
phy0: ethernet-phy@0 {
|
phy0: ethernet-phy@0 {
|
||||||
reg = <0>;
|
reg = <0>;
|
||||||
phy-mode = "gmii";
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -468,14 +468,12 @@
|
||||||
compatible = "mediatek,mt7629-sgmiisys", "syscon";
|
compatible = "mediatek,mt7629-sgmiisys", "syscon";
|
||||||
reg = <0x1b128000 0x3000>;
|
reg = <0x1b128000 0x3000>;
|
||||||
#clock-cells = <1>;
|
#clock-cells = <1>;
|
||||||
mediatek,physpeed = "2500";
|
|
||||||
};
|
};
|
||||||
|
|
||||||
sgmiisys1: syscon@1b130000 {
|
sgmiisys1: syscon@1b130000 {
|
||||||
compatible = "mediatek,mt7629-sgmiisys", "syscon";
|
compatible = "mediatek,mt7629-sgmiisys", "syscon";
|
||||||
reg = <0x1b130000 0x3000>;
|
reg = <0x1b130000 0x3000>;
|
||||||
#clock-cells = <1>;
|
#clock-cells = <1>;
|
||||||
mediatek,physpeed = "2500";
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -124,6 +124,7 @@
|
||||||
spi-max-frequency = <100000>;
|
spi-max-frequency = <100000>;
|
||||||
spi-cpol;
|
spi-cpol;
|
||||||
spi-cpha;
|
spi-cpha;
|
||||||
|
spi-cs-high;
|
||||||
|
|
||||||
backlight= <&backlight>;
|
backlight= <&backlight>;
|
||||||
label = "lcd";
|
label = "lcd";
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
#include <dt-bindings/mfd/dbx500-prcmu.h>
|
#include <dt-bindings/mfd/dbx500-prcmu.h>
|
||||||
#include <dt-bindings/arm/ux500_pm_domains.h>
|
#include <dt-bindings/arm/ux500_pm_domains.h>
|
||||||
#include <dt-bindings/gpio/gpio.h>
|
#include <dt-bindings/gpio/gpio.h>
|
||||||
|
#include <dt-bindings/thermal/thermal.h>
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
|
@ -59,8 +60,12 @@
|
||||||
* cooling.
|
* cooling.
|
||||||
*/
|
*/
|
||||||
cpu_thermal: cpu-thermal {
|
cpu_thermal: cpu-thermal {
|
||||||
polling-delay-passive = <0>;
|
polling-delay-passive = <250>;
|
||||||
polling-delay = <1000>;
|
/*
|
||||||
|
* This sensor fires interrupts to update the thermal
|
||||||
|
* zone, so no polling is needed.
|
||||||
|
*/
|
||||||
|
polling-delay = <0>;
|
||||||
|
|
||||||
thermal-sensors = <&thermal>;
|
thermal-sensors = <&thermal>;
|
||||||
|
|
||||||
|
@ -79,7 +84,7 @@
|
||||||
|
|
||||||
cooling-maps {
|
cooling-maps {
|
||||||
trip = <&cpu_alert>;
|
trip = <&cpu_alert>;
|
||||||
cooling-device = <&CPU0 0 2>;
|
cooling-device = <&CPU0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
|
||||||
contribution = <100>;
|
contribution = <100>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -520,6 +520,7 @@
|
||||||
interrupts = <39>;
|
interrupts = <39>;
|
||||||
clocks = <&ccu CLK_AHB_EHCI0>;
|
clocks = <&ccu CLK_AHB_EHCI0>;
|
||||||
phys = <&usbphy 1>;
|
phys = <&usbphy 1>;
|
||||||
|
phy-names = "usb";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -529,6 +530,7 @@
|
||||||
interrupts = <64>;
|
interrupts = <64>;
|
||||||
clocks = <&ccu CLK_USB_OHCI0>, <&ccu CLK_AHB_OHCI0>;
|
clocks = <&ccu CLK_USB_OHCI0>, <&ccu CLK_AHB_OHCI0>;
|
||||||
phys = <&usbphy 1>;
|
phys = <&usbphy 1>;
|
||||||
|
phy-names = "usb";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -608,6 +610,7 @@
|
||||||
interrupts = <40>;
|
interrupts = <40>;
|
||||||
clocks = <&ccu CLK_AHB_EHCI1>;
|
clocks = <&ccu CLK_AHB_EHCI1>;
|
||||||
phys = <&usbphy 2>;
|
phys = <&usbphy 2>;
|
||||||
|
phy-names = "usb";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -617,6 +620,7 @@
|
||||||
interrupts = <65>;
|
interrupts = <65>;
|
||||||
clocks = <&ccu CLK_USB_OHCI1>, <&ccu CLK_AHB_OHCI1>;
|
clocks = <&ccu CLK_USB_OHCI1>, <&ccu CLK_AHB_OHCI1>;
|
||||||
phys = <&usbphy 2>;
|
phys = <&usbphy 2>;
|
||||||
|
phy-names = "usb";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -391,6 +391,7 @@
|
||||||
interrupts = <39>;
|
interrupts = <39>;
|
||||||
clocks = <&ccu CLK_AHB_EHCI>;
|
clocks = <&ccu CLK_AHB_EHCI>;
|
||||||
phys = <&usbphy 1>;
|
phys = <&usbphy 1>;
|
||||||
|
phy-names = "usb";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -400,6 +401,7 @@
|
||||||
interrupts = <40>;
|
interrupts = <40>;
|
||||||
clocks = <&ccu CLK_USB_OHCI>, <&ccu CLK_AHB_OHCI>;
|
clocks = <&ccu CLK_USB_OHCI>, <&ccu CLK_AHB_OHCI>;
|
||||||
phys = <&usbphy 1>;
|
phys = <&usbphy 1>;
|
||||||
|
phy-names = "usb";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -545,6 +545,7 @@
|
||||||
clocks = <&ccu CLK_AHB1_EHCI0>;
|
clocks = <&ccu CLK_AHB1_EHCI0>;
|
||||||
resets = <&ccu RST_AHB1_EHCI0>;
|
resets = <&ccu RST_AHB1_EHCI0>;
|
||||||
phys = <&usbphy 1>;
|
phys = <&usbphy 1>;
|
||||||
|
phy-names = "usb";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -555,6 +556,7 @@
|
||||||
clocks = <&ccu CLK_AHB1_OHCI0>, <&ccu CLK_USB_OHCI0>;
|
clocks = <&ccu CLK_AHB1_OHCI0>, <&ccu CLK_USB_OHCI0>;
|
||||||
resets = <&ccu RST_AHB1_OHCI0>;
|
resets = <&ccu RST_AHB1_OHCI0>;
|
||||||
phys = <&usbphy 1>;
|
phys = <&usbphy 1>;
|
||||||
|
phy-names = "usb";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -565,6 +567,7 @@
|
||||||
clocks = <&ccu CLK_AHB1_EHCI1>;
|
clocks = <&ccu CLK_AHB1_EHCI1>;
|
||||||
resets = <&ccu RST_AHB1_EHCI1>;
|
resets = <&ccu RST_AHB1_EHCI1>;
|
||||||
phys = <&usbphy 2>;
|
phys = <&usbphy 2>;
|
||||||
|
phy-names = "usb";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -575,6 +578,7 @@
|
||||||
clocks = <&ccu CLK_AHB1_OHCI1>, <&ccu CLK_USB_OHCI1>;
|
clocks = <&ccu CLK_AHB1_OHCI1>, <&ccu CLK_USB_OHCI1>;
|
||||||
resets = <&ccu RST_AHB1_OHCI1>;
|
resets = <&ccu RST_AHB1_OHCI1>;
|
||||||
phys = <&usbphy 2>;
|
phys = <&usbphy 2>;
|
||||||
|
phy-names = "usb";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -623,6 +623,7 @@
|
||||||
interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&ccu CLK_AHB_EHCI0>;
|
clocks = <&ccu CLK_AHB_EHCI0>;
|
||||||
phys = <&usbphy 1>;
|
phys = <&usbphy 1>;
|
||||||
|
phy-names = "usb";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -632,6 +633,7 @@
|
||||||
interrupts = <GIC_SPI 64 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 64 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&ccu CLK_USB_OHCI0>, <&ccu CLK_AHB_OHCI0>;
|
clocks = <&ccu CLK_USB_OHCI0>, <&ccu CLK_AHB_OHCI0>;
|
||||||
phys = <&usbphy 1>;
|
phys = <&usbphy 1>;
|
||||||
|
phy-names = "usb";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -714,6 +716,7 @@
|
||||||
interrupts = <GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&ccu CLK_AHB_EHCI1>;
|
clocks = <&ccu CLK_AHB_EHCI1>;
|
||||||
phys = <&usbphy 2>;
|
phys = <&usbphy 2>;
|
||||||
|
phy-names = "usb";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -723,6 +726,7 @@
|
||||||
interrupts = <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&ccu CLK_USB_OHCI1>, <&ccu CLK_AHB_OHCI1>;
|
clocks = <&ccu CLK_USB_OHCI1>, <&ccu CLK_AHB_OHCI1>;
|
||||||
phys = <&usbphy 2>;
|
phys = <&usbphy 2>;
|
||||||
|
phy-names = "usb";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -307,6 +307,7 @@
|
||||||
clocks = <&ccu CLK_BUS_EHCI>;
|
clocks = <&ccu CLK_BUS_EHCI>;
|
||||||
resets = <&ccu RST_BUS_EHCI>;
|
resets = <&ccu RST_BUS_EHCI>;
|
||||||
phys = <&usbphy 1>;
|
phys = <&usbphy 1>;
|
||||||
|
phy-names = "usb";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -317,6 +318,7 @@
|
||||||
clocks = <&ccu CLK_BUS_OHCI>, <&ccu CLK_USB_OHCI>;
|
clocks = <&ccu CLK_BUS_OHCI>, <&ccu CLK_USB_OHCI>;
|
||||||
resets = <&ccu RST_BUS_OHCI>;
|
resets = <&ccu RST_BUS_OHCI>;
|
||||||
phys = <&usbphy 1>;
|
phys = <&usbphy 1>;
|
||||||
|
phy-names = "usb";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -632,6 +632,7 @@
|
||||||
clocks = <&ccu CLK_BUS_EHCI0>;
|
clocks = <&ccu CLK_BUS_EHCI0>;
|
||||||
resets = <&ccu RST_BUS_EHCI0>;
|
resets = <&ccu RST_BUS_EHCI0>;
|
||||||
phys = <&usbphy 1>;
|
phys = <&usbphy 1>;
|
||||||
|
phy-names = "usb";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -643,6 +644,7 @@
|
||||||
clocks = <&ccu CLK_BUS_OHCI0>, <&ccu CLK_USB_OHCI0>;
|
clocks = <&ccu CLK_BUS_OHCI0>, <&ccu CLK_USB_OHCI0>;
|
||||||
resets = <&ccu RST_BUS_OHCI0>;
|
resets = <&ccu RST_BUS_OHCI0>;
|
||||||
phys = <&usbphy 1>;
|
phys = <&usbphy 1>;
|
||||||
|
phy-names = "usb";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -654,6 +656,7 @@
|
||||||
clocks = <&ccu CLK_BUS_EHCI1>;
|
clocks = <&ccu CLK_BUS_EHCI1>;
|
||||||
resets = <&ccu RST_BUS_EHCI1>;
|
resets = <&ccu RST_BUS_EHCI1>;
|
||||||
phys = <&usbphy 2>;
|
phys = <&usbphy 2>;
|
||||||
|
phy-names = "usb";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -273,6 +273,7 @@
|
||||||
clocks = <&ccu CLK_BUS_EHCI1>;
|
clocks = <&ccu CLK_BUS_EHCI1>;
|
||||||
resets = <&ccu RST_BUS_EHCI1>;
|
resets = <&ccu RST_BUS_EHCI1>;
|
||||||
phys = <&usbphy 1>;
|
phys = <&usbphy 1>;
|
||||||
|
phy-names = "usb";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -284,6 +285,7 @@
|
||||||
<&ccu CLK_USB_OHCI1>;
|
<&ccu CLK_USB_OHCI1>;
|
||||||
resets = <&ccu RST_BUS_OHCI1>;
|
resets = <&ccu RST_BUS_OHCI1>;
|
||||||
phys = <&usbphy 1>;
|
phys = <&usbphy 1>;
|
||||||
|
phy-names = "usb";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -294,6 +296,7 @@
|
||||||
clocks = <&ccu CLK_BUS_EHCI2>;
|
clocks = <&ccu CLK_BUS_EHCI2>;
|
||||||
resets = <&ccu RST_BUS_EHCI2>;
|
resets = <&ccu RST_BUS_EHCI2>;
|
||||||
phys = <&usbphy 2>;
|
phys = <&usbphy 2>;
|
||||||
|
phy-names = "usb";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -305,6 +308,7 @@
|
||||||
<&ccu CLK_USB_OHCI2>;
|
<&ccu CLK_USB_OHCI2>;
|
||||||
resets = <&ccu RST_BUS_OHCI2>;
|
resets = <&ccu RST_BUS_OHCI2>;
|
||||||
phys = <&usbphy 2>;
|
phys = <&usbphy 2>;
|
||||||
|
phy-names = "usb";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -346,6 +346,7 @@
|
||||||
clocks = <&usb_clocks CLK_BUS_HCI0>;
|
clocks = <&usb_clocks CLK_BUS_HCI0>;
|
||||||
resets = <&usb_clocks RST_USB0_HCI>;
|
resets = <&usb_clocks RST_USB0_HCI>;
|
||||||
phys = <&usbphy1>;
|
phys = <&usbphy1>;
|
||||||
|
phy-names = "usb";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -357,6 +358,7 @@
|
||||||
<&usb_clocks CLK_USB_OHCI0>;
|
<&usb_clocks CLK_USB_OHCI0>;
|
||||||
resets = <&usb_clocks RST_USB0_HCI>;
|
resets = <&usb_clocks RST_USB0_HCI>;
|
||||||
phys = <&usbphy1>;
|
phys = <&usbphy1>;
|
||||||
|
phy-names = "usb";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -378,6 +380,7 @@
|
||||||
clocks = <&usb_clocks CLK_BUS_HCI1>;
|
clocks = <&usb_clocks CLK_BUS_HCI1>;
|
||||||
resets = <&usb_clocks RST_USB1_HCI>;
|
resets = <&usb_clocks RST_USB1_HCI>;
|
||||||
phys = <&usbphy2>;
|
phys = <&usbphy2>;
|
||||||
|
phy-names = "usb";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -407,6 +410,7 @@
|
||||||
clocks = <&usb_clocks CLK_BUS_HCI2>;
|
clocks = <&usb_clocks CLK_BUS_HCI2>;
|
||||||
resets = <&usb_clocks RST_USB2_HCI>;
|
resets = <&usb_clocks RST_USB2_HCI>;
|
||||||
phys = <&usbphy3>;
|
phys = <&usbphy3>;
|
||||||
|
phy-names = "usb";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -418,6 +422,7 @@
|
||||||
<&usb_clocks CLK_USB_OHCI2>;
|
<&usb_clocks CLK_USB_OHCI2>;
|
||||||
resets = <&usb_clocks RST_USB2_HCI>;
|
resets = <&usb_clocks RST_USB2_HCI>;
|
||||||
phys = <&usbphy3>;
|
phys = <&usbphy3>;
|
||||||
|
phy-names = "usb";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -304,6 +304,7 @@
|
||||||
clocks = <&ccu CLK_BUS_EHCI1>, <&ccu CLK_BUS_OHCI1>;
|
clocks = <&ccu CLK_BUS_EHCI1>, <&ccu CLK_BUS_OHCI1>;
|
||||||
resets = <&ccu RST_BUS_EHCI1>, <&ccu RST_BUS_OHCI1>;
|
resets = <&ccu RST_BUS_EHCI1>, <&ccu RST_BUS_OHCI1>;
|
||||||
phys = <&usbphy 1>;
|
phys = <&usbphy 1>;
|
||||||
|
phy-names = "usb";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -315,6 +316,7 @@
|
||||||
<&ccu CLK_USB_OHCI1>;
|
<&ccu CLK_USB_OHCI1>;
|
||||||
resets = <&ccu RST_BUS_EHCI1>, <&ccu RST_BUS_OHCI1>;
|
resets = <&ccu RST_BUS_EHCI1>, <&ccu RST_BUS_OHCI1>;
|
||||||
phys = <&usbphy 1>;
|
phys = <&usbphy 1>;
|
||||||
|
phy-names = "usb";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -325,6 +327,7 @@
|
||||||
clocks = <&ccu CLK_BUS_EHCI2>, <&ccu CLK_BUS_OHCI2>;
|
clocks = <&ccu CLK_BUS_EHCI2>, <&ccu CLK_BUS_OHCI2>;
|
||||||
resets = <&ccu RST_BUS_EHCI2>, <&ccu RST_BUS_OHCI2>;
|
resets = <&ccu RST_BUS_EHCI2>, <&ccu RST_BUS_OHCI2>;
|
||||||
phys = <&usbphy 2>;
|
phys = <&usbphy 2>;
|
||||||
|
phy-names = "usb";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -336,6 +339,7 @@
|
||||||
<&ccu CLK_USB_OHCI2>;
|
<&ccu CLK_USB_OHCI2>;
|
||||||
resets = <&ccu RST_BUS_EHCI2>, <&ccu RST_BUS_OHCI2>;
|
resets = <&ccu RST_BUS_EHCI2>, <&ccu RST_BUS_OHCI2>;
|
||||||
phys = <&usbphy 2>;
|
phys = <&usbphy 2>;
|
||||||
|
phy-names = "usb";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -346,6 +350,7 @@
|
||||||
clocks = <&ccu CLK_BUS_EHCI3>, <&ccu CLK_BUS_OHCI3>;
|
clocks = <&ccu CLK_BUS_EHCI3>, <&ccu CLK_BUS_OHCI3>;
|
||||||
resets = <&ccu RST_BUS_EHCI3>, <&ccu RST_BUS_OHCI3>;
|
resets = <&ccu RST_BUS_EHCI3>, <&ccu RST_BUS_OHCI3>;
|
||||||
phys = <&usbphy 3>;
|
phys = <&usbphy 3>;
|
||||||
|
phy-names = "usb";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -357,6 +362,7 @@
|
||||||
<&ccu CLK_USB_OHCI3>;
|
<&ccu CLK_USB_OHCI3>;
|
||||||
resets = <&ccu RST_BUS_EHCI3>, <&ccu RST_BUS_OHCI3>;
|
resets = <&ccu RST_BUS_EHCI3>, <&ccu RST_BUS_OHCI3>;
|
||||||
phys = <&usbphy 3>;
|
phys = <&usbphy 3>;
|
||||||
|
phy-names = "usb";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -91,7 +91,6 @@ CONFIG_USB_SERIAL_PL2303=m
|
||||||
CONFIG_USB_SERIAL_CYBERJACK=m
|
CONFIG_USB_SERIAL_CYBERJACK=m
|
||||||
CONFIG_USB_SERIAL_XIRCOM=m
|
CONFIG_USB_SERIAL_XIRCOM=m
|
||||||
CONFIG_USB_SERIAL_OMNINET=m
|
CONFIG_USB_SERIAL_OMNINET=m
|
||||||
CONFIG_USB_RIO500=m
|
|
||||||
CONFIG_EXT2_FS=m
|
CONFIG_EXT2_FS=m
|
||||||
CONFIG_EXT3_FS=m
|
CONFIG_EXT3_FS=m
|
||||||
CONFIG_MSDOS_FS=y
|
CONFIG_MSDOS_FS=y
|
||||||
|
|
|
@ -195,7 +195,6 @@ CONFIG_USB_SERIAL_XIRCOM=m
|
||||||
CONFIG_USB_SERIAL_OMNINET=m
|
CONFIG_USB_SERIAL_OMNINET=m
|
||||||
CONFIG_USB_EMI62=m
|
CONFIG_USB_EMI62=m
|
||||||
CONFIG_USB_EMI26=m
|
CONFIG_USB_EMI26=m
|
||||||
CONFIG_USB_RIO500=m
|
|
||||||
CONFIG_USB_LEGOTOWER=m
|
CONFIG_USB_LEGOTOWER=m
|
||||||
CONFIG_USB_LCD=m
|
CONFIG_USB_LCD=m
|
||||||
CONFIG_USB_CYTHERM=m
|
CONFIG_USB_CYTHERM=m
|
||||||
|
|
|
@ -228,7 +228,7 @@ CONFIG_RTC_DRV_OMAP=m
|
||||||
CONFIG_DMADEVICES=y
|
CONFIG_DMADEVICES=y
|
||||||
CONFIG_TI_EDMA=y
|
CONFIG_TI_EDMA=y
|
||||||
CONFIG_COMMON_CLK_PWM=m
|
CONFIG_COMMON_CLK_PWM=m
|
||||||
CONFIG_REMOTEPROC=m
|
CONFIG_REMOTEPROC=y
|
||||||
CONFIG_DA8XX_REMOTEPROC=m
|
CONFIG_DA8XX_REMOTEPROC=m
|
||||||
CONFIG_MEMORY=y
|
CONFIG_MEMORY=y
|
||||||
CONFIG_TI_AEMIF=m
|
CONFIG_TI_AEMIF=m
|
||||||
|
|
|
@ -415,7 +415,7 @@ CONFIG_SPI_SH_MSIOF=m
|
||||||
CONFIG_SPI_SH_HSPI=y
|
CONFIG_SPI_SH_HSPI=y
|
||||||
CONFIG_SPI_SIRF=y
|
CONFIG_SPI_SIRF=y
|
||||||
CONFIG_SPI_STM32=m
|
CONFIG_SPI_STM32=m
|
||||||
CONFIG_SPI_STM32_QSPI=m
|
CONFIG_SPI_STM32_QSPI=y
|
||||||
CONFIG_SPI_SUN4I=y
|
CONFIG_SPI_SUN4I=y
|
||||||
CONFIG_SPI_SUN6I=y
|
CONFIG_SPI_SUN6I=y
|
||||||
CONFIG_SPI_TEGRA114=y
|
CONFIG_SPI_TEGRA114=y
|
||||||
|
@ -933,7 +933,7 @@ CONFIG_BCM2835_MBOX=y
|
||||||
CONFIG_ROCKCHIP_IOMMU=y
|
CONFIG_ROCKCHIP_IOMMU=y
|
||||||
CONFIG_TEGRA_IOMMU_GART=y
|
CONFIG_TEGRA_IOMMU_GART=y
|
||||||
CONFIG_TEGRA_IOMMU_SMMU=y
|
CONFIG_TEGRA_IOMMU_SMMU=y
|
||||||
CONFIG_REMOTEPROC=m
|
CONFIG_REMOTEPROC=y
|
||||||
CONFIG_ST_REMOTEPROC=m
|
CONFIG_ST_REMOTEPROC=m
|
||||||
CONFIG_RPMSG_VIRTIO=m
|
CONFIG_RPMSG_VIRTIO=m
|
||||||
CONFIG_ASPEED_LPC_CTRL=m
|
CONFIG_ASPEED_LPC_CTRL=m
|
||||||
|
|
|
@ -364,6 +364,7 @@ CONFIG_DRM_OMAP_PANEL_TPO_TD043MTEA1=m
|
||||||
CONFIG_DRM_OMAP_PANEL_NEC_NL8048HL11=m
|
CONFIG_DRM_OMAP_PANEL_NEC_NL8048HL11=m
|
||||||
CONFIG_DRM_TILCDC=m
|
CONFIG_DRM_TILCDC=m
|
||||||
CONFIG_DRM_PANEL_SIMPLE=m
|
CONFIG_DRM_PANEL_SIMPLE=m
|
||||||
|
CONFIG_DRM_TI_TFP410=m
|
||||||
CONFIG_FB=y
|
CONFIG_FB=y
|
||||||
CONFIG_FIRMWARE_EDID=y
|
CONFIG_FIRMWARE_EDID=y
|
||||||
CONFIG_FB_MODE_HELPERS=y
|
CONFIG_FB_MODE_HELPERS=y
|
||||||
|
@ -423,6 +424,7 @@ CONFIG_USB_SERIAL_GENERIC=y
|
||||||
CONFIG_USB_SERIAL_SIMPLE=m
|
CONFIG_USB_SERIAL_SIMPLE=m
|
||||||
CONFIG_USB_SERIAL_FTDI_SIO=m
|
CONFIG_USB_SERIAL_FTDI_SIO=m
|
||||||
CONFIG_USB_SERIAL_PL2303=m
|
CONFIG_USB_SERIAL_PL2303=m
|
||||||
|
CONFIG_USB_SERIAL_OPTION=m
|
||||||
CONFIG_USB_TEST=m
|
CONFIG_USB_TEST=m
|
||||||
CONFIG_NOP_USB_XCEIV=m
|
CONFIG_NOP_USB_XCEIV=m
|
||||||
CONFIG_AM335X_PHY_USB=m
|
CONFIG_AM335X_PHY_USB=m
|
||||||
|
@ -460,6 +462,7 @@ CONFIG_MMC_SDHCI_OMAP=y
|
||||||
CONFIG_NEW_LEDS=y
|
CONFIG_NEW_LEDS=y
|
||||||
CONFIG_LEDS_CLASS=m
|
CONFIG_LEDS_CLASS=m
|
||||||
CONFIG_LEDS_CPCAP=m
|
CONFIG_LEDS_CPCAP=m
|
||||||
|
CONFIG_LEDS_LM3532=m
|
||||||
CONFIG_LEDS_GPIO=m
|
CONFIG_LEDS_GPIO=m
|
||||||
CONFIG_LEDS_PCA963X=m
|
CONFIG_LEDS_PCA963X=m
|
||||||
CONFIG_LEDS_PWM=m
|
CONFIG_LEDS_PWM=m
|
||||||
|
@ -481,7 +484,7 @@ CONFIG_RTC_DRV_OMAP=m
|
||||||
CONFIG_RTC_DRV_CPCAP=m
|
CONFIG_RTC_DRV_CPCAP=m
|
||||||
CONFIG_DMADEVICES=y
|
CONFIG_DMADEVICES=y
|
||||||
CONFIG_OMAP_IOMMU=y
|
CONFIG_OMAP_IOMMU=y
|
||||||
CONFIG_REMOTEPROC=m
|
CONFIG_REMOTEPROC=y
|
||||||
CONFIG_OMAP_REMOTEPROC=m
|
CONFIG_OMAP_REMOTEPROC=m
|
||||||
CONFIG_WKUP_M3_RPROC=m
|
CONFIG_WKUP_M3_RPROC=m
|
||||||
CONFIG_SOC_TI=y
|
CONFIG_SOC_TI=y
|
||||||
|
|
|
@ -581,7 +581,6 @@ CONFIG_USB_SERIAL_XIRCOM=m
|
||||||
CONFIG_USB_SERIAL_OMNINET=m
|
CONFIG_USB_SERIAL_OMNINET=m
|
||||||
CONFIG_USB_EMI62=m
|
CONFIG_USB_EMI62=m
|
||||||
CONFIG_USB_EMI26=m
|
CONFIG_USB_EMI26=m
|
||||||
CONFIG_USB_RIO500=m
|
|
||||||
CONFIG_USB_LEGOTOWER=m
|
CONFIG_USB_LEGOTOWER=m
|
||||||
CONFIG_USB_LCD=m
|
CONFIG_USB_LCD=m
|
||||||
CONFIG_USB_CYTHERM=m
|
CONFIG_USB_CYTHERM=m
|
||||||
|
|
|
@ -327,7 +327,6 @@ CONFIG_USB_EMI62=m
|
||||||
CONFIG_USB_EMI26=m
|
CONFIG_USB_EMI26=m
|
||||||
CONFIG_USB_ADUTUX=m
|
CONFIG_USB_ADUTUX=m
|
||||||
CONFIG_USB_SEVSEG=m
|
CONFIG_USB_SEVSEG=m
|
||||||
CONFIG_USB_RIO500=m
|
|
||||||
CONFIG_USB_LEGOTOWER=m
|
CONFIG_USB_LEGOTOWER=m
|
||||||
CONFIG_USB_LCD=m
|
CONFIG_USB_LCD=m
|
||||||
CONFIG_USB_CYPRESS_CY7C63=m
|
CONFIG_USB_CYPRESS_CY7C63=m
|
||||||
|
|
|
@ -189,7 +189,6 @@ CONFIG_USB_SERIAL_XIRCOM=m
|
||||||
CONFIG_USB_SERIAL_OMNINET=m
|
CONFIG_USB_SERIAL_OMNINET=m
|
||||||
CONFIG_USB_EMI62=m
|
CONFIG_USB_EMI62=m
|
||||||
CONFIG_USB_EMI26=m
|
CONFIG_USB_EMI26=m
|
||||||
CONFIG_USB_RIO500=m
|
|
||||||
CONFIG_USB_LEGOTOWER=m
|
CONFIG_USB_LEGOTOWER=m
|
||||||
CONFIG_USB_LCD=m
|
CONFIG_USB_LCD=m
|
||||||
CONFIG_USB_CYTHERM=m
|
CONFIG_USB_CYTHERM=m
|
||||||
|
|
|
@ -98,6 +98,7 @@ config CRYPTO_AES_ARM_CE
|
||||||
tristate "Accelerated AES using ARMv8 Crypto Extensions"
|
tristate "Accelerated AES using ARMv8 Crypto Extensions"
|
||||||
depends on KERNEL_MODE_NEON
|
depends on KERNEL_MODE_NEON
|
||||||
select CRYPTO_BLKCIPHER
|
select CRYPTO_BLKCIPHER
|
||||||
|
select CRYPTO_LIB_AES
|
||||||
select CRYPTO_SIMD
|
select CRYPTO_SIMD
|
||||||
help
|
help
|
||||||
Use an implementation of AES in CBC, CTR and XTS modes that uses
|
Use an implementation of AES in CBC, CTR and XTS modes that uses
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
#include <asm/assembler.h>
|
#include <asm/assembler.h>
|
||||||
|
|
||||||
.text
|
.text
|
||||||
|
.arch armv8-a
|
||||||
.fpu crypto-neon-fp-armv8
|
.fpu crypto-neon-fp-armv8
|
||||||
.align 3
|
.align 3
|
||||||
|
|
||||||
|
|
|
@ -1,6 +0,0 @@
|
||||||
#ifndef _ASM_XEN_OPS_H
|
|
||||||
#define _ASM_XEN_OPS_H
|
|
||||||
|
|
||||||
void xen_efi_runtime_setup(void);
|
|
||||||
|
|
||||||
#endif /* _ASM_XEN_OPS_H */
|
|
|
@ -763,7 +763,8 @@ static struct omap_hwmod_class_sysconfig am33xx_timer_sysc = {
|
||||||
.rev_offs = 0x0000,
|
.rev_offs = 0x0000,
|
||||||
.sysc_offs = 0x0010,
|
.sysc_offs = 0x0010,
|
||||||
.syss_offs = 0x0014,
|
.syss_offs = 0x0014,
|
||||||
.sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
|
.sysc_flags = SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
|
||||||
|
SYSC_HAS_RESET_STATUS,
|
||||||
.idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
|
.idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
|
||||||
SIDLE_SMART_WKUP),
|
SIDLE_SMART_WKUP),
|
||||||
.sysc_fields = &omap_hwmod_sysc_type2,
|
.sysc_fields = &omap_hwmod_sysc_type2,
|
||||||
|
|
|
@ -231,8 +231,9 @@ static struct omap_hwmod am33xx_control_hwmod = {
|
||||||
static struct omap_hwmod_class_sysconfig lcdc_sysc = {
|
static struct omap_hwmod_class_sysconfig lcdc_sysc = {
|
||||||
.rev_offs = 0x0,
|
.rev_offs = 0x0,
|
||||||
.sysc_offs = 0x54,
|
.sysc_offs = 0x54,
|
||||||
.sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_MIDLEMODE),
|
.sysc_flags = SYSC_HAS_SIDLEMODE | SYSC_HAS_MIDLEMODE,
|
||||||
.idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
|
.idlemodes = SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
|
||||||
|
MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART,
|
||||||
.sysc_fields = &omap_hwmod_sysc_type2,
|
.sysc_fields = &omap_hwmod_sysc_type2,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -74,83 +74,6 @@ int omap_pm_clkdms_setup(struct clockdomain *clkdm, void *unused)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* This API is to be called during init to set the various voltage
|
|
||||||
* domains to the voltage as per the opp table. Typically we boot up
|
|
||||||
* at the nominal voltage. So this function finds out the rate of
|
|
||||||
* the clock associated with the voltage domain, finds out the correct
|
|
||||||
* opp entry and sets the voltage domain to the voltage specified
|
|
||||||
* in the opp entry
|
|
||||||
*/
|
|
||||||
static int __init omap2_set_init_voltage(char *vdd_name, char *clk_name,
|
|
||||||
const char *oh_name)
|
|
||||||
{
|
|
||||||
struct voltagedomain *voltdm;
|
|
||||||
struct clk *clk;
|
|
||||||
struct dev_pm_opp *opp;
|
|
||||||
unsigned long freq, bootup_volt;
|
|
||||||
struct device *dev;
|
|
||||||
|
|
||||||
if (!vdd_name || !clk_name || !oh_name) {
|
|
||||||
pr_err("%s: invalid parameters\n", __func__);
|
|
||||||
goto exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!strncmp(oh_name, "mpu", 3))
|
|
||||||
/*
|
|
||||||
* All current OMAPs share voltage rail and clock
|
|
||||||
* source, so CPU0 is used to represent the MPU-SS.
|
|
||||||
*/
|
|
||||||
dev = get_cpu_device(0);
|
|
||||||
else
|
|
||||||
dev = omap_device_get_by_hwmod_name(oh_name);
|
|
||||||
|
|
||||||
if (IS_ERR(dev)) {
|
|
||||||
pr_err("%s: Unable to get dev pointer for hwmod %s\n",
|
|
||||||
__func__, oh_name);
|
|
||||||
goto exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
voltdm = voltdm_lookup(vdd_name);
|
|
||||||
if (!voltdm) {
|
|
||||||
pr_err("%s: unable to get vdd pointer for vdd_%s\n",
|
|
||||||
__func__, vdd_name);
|
|
||||||
goto exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
clk = clk_get(NULL, clk_name);
|
|
||||||
if (IS_ERR(clk)) {
|
|
||||||
pr_err("%s: unable to get clk %s\n", __func__, clk_name);
|
|
||||||
goto exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
freq = clk_get_rate(clk);
|
|
||||||
clk_put(clk);
|
|
||||||
|
|
||||||
opp = dev_pm_opp_find_freq_ceil(dev, &freq);
|
|
||||||
if (IS_ERR(opp)) {
|
|
||||||
pr_err("%s: unable to find boot up OPP for vdd_%s\n",
|
|
||||||
__func__, vdd_name);
|
|
||||||
goto exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
bootup_volt = dev_pm_opp_get_voltage(opp);
|
|
||||||
dev_pm_opp_put(opp);
|
|
||||||
|
|
||||||
if (!bootup_volt) {
|
|
||||||
pr_err("%s: unable to find voltage corresponding to the bootup OPP for vdd_%s\n",
|
|
||||||
__func__, vdd_name);
|
|
||||||
goto exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
voltdm_scale(voltdm, bootup_volt);
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
exit:
|
|
||||||
pr_err("%s: unable to set vdd_%s\n", __func__, vdd_name);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef CONFIG_SUSPEND
|
#ifdef CONFIG_SUSPEND
|
||||||
static int omap_pm_enter(suspend_state_t suspend_state)
|
static int omap_pm_enter(suspend_state_t suspend_state)
|
||||||
{
|
{
|
||||||
|
@ -208,25 +131,6 @@ void omap_common_suspend_init(void *pm_suspend)
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_SUSPEND */
|
#endif /* CONFIG_SUSPEND */
|
||||||
|
|
||||||
static void __init omap3_init_voltages(void)
|
|
||||||
{
|
|
||||||
if (!soc_is_omap34xx())
|
|
||||||
return;
|
|
||||||
|
|
||||||
omap2_set_init_voltage("mpu_iva", "dpll1_ck", "mpu");
|
|
||||||
omap2_set_init_voltage("core", "l3_ick", "l3_main");
|
|
||||||
}
|
|
||||||
|
|
||||||
static void __init omap4_init_voltages(void)
|
|
||||||
{
|
|
||||||
if (!soc_is_omap44xx())
|
|
||||||
return;
|
|
||||||
|
|
||||||
omap2_set_init_voltage("mpu", "dpll_mpu_ck", "mpu");
|
|
||||||
omap2_set_init_voltage("core", "l3_div_ck", "l3_main_1");
|
|
||||||
omap2_set_init_voltage("iva", "dpll_iva_m5x2_ck", "iva");
|
|
||||||
}
|
|
||||||
|
|
||||||
int __maybe_unused omap_pm_nop_init(void)
|
int __maybe_unused omap_pm_nop_init(void)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -246,10 +150,6 @@ int __init omap2_common_pm_late_init(void)
|
||||||
omap4_twl_init();
|
omap4_twl_init();
|
||||||
omap_voltage_late_init();
|
omap_voltage_late_init();
|
||||||
|
|
||||||
/* Initialize the voltages */
|
|
||||||
omap3_init_voltages();
|
|
||||||
omap4_init_voltages();
|
|
||||||
|
|
||||||
/* Smartreflex device init */
|
/* Smartreflex device init */
|
||||||
omap_devinit_smartreflex();
|
omap_devinit_smartreflex();
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,2 @@
|
||||||
# SPDX-License-Identifier: GPL-2.0-only
|
# SPDX-License-Identifier: GPL-2.0-only
|
||||||
obj-y := enlighten.o hypercall.o grant-table.o p2m.o mm.o
|
obj-y := enlighten.o hypercall.o grant-table.o p2m.o mm.o
|
||||||
obj-$(CONFIG_XEN_EFI) += efi.o
|
|
||||||
|
|
|
@ -1,28 +0,0 @@
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
||||||
/*
|
|
||||||
* Copyright (c) 2015, Linaro Limited, Shannon Zhao
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <linux/efi.h>
|
|
||||||
#include <xen/xen-ops.h>
|
|
||||||
#include <asm/xen/xen-ops.h>
|
|
||||||
|
|
||||||
/* Set XEN EFI runtime services function pointers. Other fields of struct efi,
|
|
||||||
* e.g. efi.systab, will be set like normal EFI.
|
|
||||||
*/
|
|
||||||
void __init xen_efi_runtime_setup(void)
|
|
||||||
{
|
|
||||||
efi.get_time = xen_efi_get_time;
|
|
||||||
efi.set_time = xen_efi_set_time;
|
|
||||||
efi.get_wakeup_time = xen_efi_get_wakeup_time;
|
|
||||||
efi.set_wakeup_time = xen_efi_set_wakeup_time;
|
|
||||||
efi.get_variable = xen_efi_get_variable;
|
|
||||||
efi.get_next_variable = xen_efi_get_next_variable;
|
|
||||||
efi.set_variable = xen_efi_set_variable;
|
|
||||||
efi.query_variable_info = xen_efi_query_variable_info;
|
|
||||||
efi.update_capsule = xen_efi_update_capsule;
|
|
||||||
efi.query_capsule_caps = xen_efi_query_capsule_caps;
|
|
||||||
efi.get_next_high_mono_count = xen_efi_get_next_high_mono_count;
|
|
||||||
efi.reset_system = xen_efi_reset_system;
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL_GPL(xen_efi_runtime_setup);
|
|
|
@ -15,7 +15,6 @@
|
||||||
#include <xen/xen-ops.h>
|
#include <xen/xen-ops.h>
|
||||||
#include <asm/xen/hypervisor.h>
|
#include <asm/xen/hypervisor.h>
|
||||||
#include <asm/xen/hypercall.h>
|
#include <asm/xen/hypercall.h>
|
||||||
#include <asm/xen/xen-ops.h>
|
|
||||||
#include <asm/system_misc.h>
|
#include <asm/system_misc.h>
|
||||||
#include <asm/efi.h>
|
#include <asm/efi.h>
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
|
@ -437,7 +436,7 @@ EXPORT_SYMBOL_GPL(HYPERVISOR_memory_op);
|
||||||
EXPORT_SYMBOL_GPL(HYPERVISOR_physdev_op);
|
EXPORT_SYMBOL_GPL(HYPERVISOR_physdev_op);
|
||||||
EXPORT_SYMBOL_GPL(HYPERVISOR_vcpu_op);
|
EXPORT_SYMBOL_GPL(HYPERVISOR_vcpu_op);
|
||||||
EXPORT_SYMBOL_GPL(HYPERVISOR_tmem_op);
|
EXPORT_SYMBOL_GPL(HYPERVISOR_tmem_op);
|
||||||
EXPORT_SYMBOL_GPL(HYPERVISOR_platform_op);
|
EXPORT_SYMBOL_GPL(HYPERVISOR_platform_op_raw);
|
||||||
EXPORT_SYMBOL_GPL(HYPERVISOR_multicall);
|
EXPORT_SYMBOL_GPL(HYPERVISOR_multicall);
|
||||||
EXPORT_SYMBOL_GPL(HYPERVISOR_vm_assist);
|
EXPORT_SYMBOL_GPL(HYPERVISOR_vm_assist);
|
||||||
EXPORT_SYMBOL_GPL(HYPERVISOR_dm_op);
|
EXPORT_SYMBOL_GPL(HYPERVISOR_dm_op);
|
||||||
|
|
|
@ -28,7 +28,10 @@ unsigned long xen_get_swiotlb_free_pages(unsigned int order)
|
||||||
|
|
||||||
for_each_memblock(memory, reg) {
|
for_each_memblock(memory, reg) {
|
||||||
if (reg->base < (phys_addr_t)0xffffffff) {
|
if (reg->base < (phys_addr_t)0xffffffff) {
|
||||||
flags |= __GFP_DMA;
|
if (IS_ENABLED(CONFIG_ZONE_DMA32))
|
||||||
|
flags |= __GFP_DMA32;
|
||||||
|
else
|
||||||
|
flags |= __GFP_DMA;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -110,7 +110,6 @@ config ARM64
|
||||||
select GENERIC_STRNLEN_USER
|
select GENERIC_STRNLEN_USER
|
||||||
select GENERIC_TIME_VSYSCALL
|
select GENERIC_TIME_VSYSCALL
|
||||||
select GENERIC_GETTIMEOFDAY
|
select GENERIC_GETTIMEOFDAY
|
||||||
select GENERIC_COMPAT_VDSO if (!CPU_BIG_ENDIAN && COMPAT)
|
|
||||||
select HANDLE_DOMAIN_IRQ
|
select HANDLE_DOMAIN_IRQ
|
||||||
select HARDIRQS_SW_RESEND
|
select HARDIRQS_SW_RESEND
|
||||||
select HAVE_PCI
|
select HAVE_PCI
|
||||||
|
@ -617,6 +616,23 @@ config CAVIUM_ERRATUM_30115
|
||||||
|
|
||||||
If unsure, say Y.
|
If unsure, say Y.
|
||||||
|
|
||||||
|
config CAVIUM_TX2_ERRATUM_219
|
||||||
|
bool "Cavium ThunderX2 erratum 219: PRFM between TTBR change and ISB fails"
|
||||||
|
default y
|
||||||
|
help
|
||||||
|
On Cavium ThunderX2, a load, store or prefetch instruction between a
|
||||||
|
TTBR update and the corresponding context synchronizing operation can
|
||||||
|
cause a spurious Data Abort to be delivered to any hardware thread in
|
||||||
|
the CPU core.
|
||||||
|
|
||||||
|
Work around the issue by avoiding the problematic code sequence and
|
||||||
|
trapping KVM guest TTBRx_EL1 writes to EL2 when SMT is enabled. The
|
||||||
|
trap handler performs the corresponding register access, skips the
|
||||||
|
instruction and ensures context synchronization by virtue of the
|
||||||
|
exception return.
|
||||||
|
|
||||||
|
If unsure, say Y.
|
||||||
|
|
||||||
config QCOM_FALKOR_ERRATUM_1003
|
config QCOM_FALKOR_ERRATUM_1003
|
||||||
bool "Falkor E1003: Incorrect translation due to ASID change"
|
bool "Falkor E1003: Incorrect translation due to ASID change"
|
||||||
default y
|
default y
|
||||||
|
@ -1159,7 +1175,7 @@ menuconfig COMPAT
|
||||||
if COMPAT
|
if COMPAT
|
||||||
|
|
||||||
config KUSER_HELPERS
|
config KUSER_HELPERS
|
||||||
bool "Enable kuser helpers page for 32 bit applications"
|
bool "Enable kuser helpers page for 32-bit applications"
|
||||||
default y
|
default y
|
||||||
help
|
help
|
||||||
Warning: disabling this option may break 32-bit user programs.
|
Warning: disabling this option may break 32-bit user programs.
|
||||||
|
@ -1185,6 +1201,18 @@ config KUSER_HELPERS
|
||||||
Say N here only if you are absolutely certain that you do not
|
Say N here only if you are absolutely certain that you do not
|
||||||
need these helpers; otherwise, the safe option is to say Y.
|
need these helpers; otherwise, the safe option is to say Y.
|
||||||
|
|
||||||
|
config COMPAT_VDSO
|
||||||
|
bool "Enable vDSO for 32-bit applications"
|
||||||
|
depends on !CPU_BIG_ENDIAN && "$(CROSS_COMPILE_COMPAT)" != ""
|
||||||
|
select GENERIC_COMPAT_VDSO
|
||||||
|
default y
|
||||||
|
help
|
||||||
|
Place in the process address space of 32-bit applications an
|
||||||
|
ELF shared object providing fast implementations of gettimeofday
|
||||||
|
and clock_gettime.
|
||||||
|
|
||||||
|
You must have a 32-bit build of glibc 2.22 or later for programs
|
||||||
|
to seamlessly take advantage of this.
|
||||||
|
|
||||||
menuconfig ARMV8_DEPRECATED
|
menuconfig ARMV8_DEPRECATED
|
||||||
bool "Emulate deprecated/obsolete ARMv8 instructions"
|
bool "Emulate deprecated/obsolete ARMv8 instructions"
|
||||||
|
|
|
@ -53,22 +53,6 @@ $(warning Detected assembler with broken .inst; disassembly will be unreliable)
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(CONFIG_GENERIC_COMPAT_VDSO), y)
|
|
||||||
CROSS_COMPILE_COMPAT ?= $(CONFIG_CROSS_COMPILE_COMPAT_VDSO:"%"=%)
|
|
||||||
|
|
||||||
ifeq ($(CONFIG_CC_IS_CLANG), y)
|
|
||||||
$(warning CROSS_COMPILE_COMPAT is clang, the compat vDSO will not be built)
|
|
||||||
else ifeq ($(strip $(CROSS_COMPILE_COMPAT)),)
|
|
||||||
$(warning CROSS_COMPILE_COMPAT not defined or empty, the compat vDSO will not be built)
|
|
||||||
else ifeq ($(shell which $(CROSS_COMPILE_COMPAT)gcc 2> /dev/null),)
|
|
||||||
$(error $(CROSS_COMPILE_COMPAT)gcc not found, check CROSS_COMPILE_COMPAT)
|
|
||||||
else
|
|
||||||
export CROSS_COMPILE_COMPAT
|
|
||||||
export CONFIG_COMPAT_VDSO := y
|
|
||||||
compat_vdso := -DCONFIG_COMPAT_VDSO=1
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
KBUILD_CFLAGS += -mgeneral-regs-only $(lseinstr) $(brokengasinst) \
|
KBUILD_CFLAGS += -mgeneral-regs-only $(lseinstr) $(brokengasinst) \
|
||||||
$(compat_vdso) $(cc_has_k_constraint)
|
$(compat_vdso) $(cc_has_k_constraint)
|
||||||
KBUILD_CFLAGS += -fno-asynchronous-unwind-tables
|
KBUILD_CFLAGS += -fno-asynchronous-unwind-tables
|
||||||
|
|
|
@ -104,6 +104,7 @@
|
||||||
|
|
||||||
&ehci0 {
|
&ehci0 {
|
||||||
phys = <&usbphy 0>;
|
phys = <&usbphy 0>;
|
||||||
|
phy-names = "usb";
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -150,6 +151,7 @@
|
||||||
|
|
||||||
&ohci0 {
|
&ohci0 {
|
||||||
phys = <&usbphy 0>;
|
phys = <&usbphy 0>;
|
||||||
|
phy-names = "usb";
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -553,6 +553,7 @@
|
||||||
resets = <&ccu RST_BUS_OHCI1>,
|
resets = <&ccu RST_BUS_OHCI1>,
|
||||||
<&ccu RST_BUS_EHCI1>;
|
<&ccu RST_BUS_EHCI1>;
|
||||||
phys = <&usbphy 1>;
|
phys = <&usbphy 1>;
|
||||||
|
phy-names = "usb";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -564,6 +565,7 @@
|
||||||
<&ccu CLK_USB_OHCI1>;
|
<&ccu CLK_USB_OHCI1>;
|
||||||
resets = <&ccu RST_BUS_OHCI1>;
|
resets = <&ccu RST_BUS_OHCI1>;
|
||||||
phys = <&usbphy 1>;
|
phys = <&usbphy 1>;
|
||||||
|
phy-names = "usb";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -547,6 +547,7 @@
|
||||||
resets = <&ccu RST_BUS_OHCI3>,
|
resets = <&ccu RST_BUS_OHCI3>,
|
||||||
<&ccu RST_BUS_EHCI3>;
|
<&ccu RST_BUS_EHCI3>;
|
||||||
phys = <&usb2phy 3>;
|
phys = <&usb2phy 3>;
|
||||||
|
phy-names = "usb";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -558,6 +559,7 @@
|
||||||
<&ccu CLK_USB_OHCI3>;
|
<&ccu CLK_USB_OHCI3>;
|
||||||
resets = <&ccu RST_BUS_OHCI3>;
|
resets = <&ccu RST_BUS_OHCI3>;
|
||||||
phys = <&usb2phy 3>;
|
phys = <&usb2phy 3>;
|
||||||
|
phy-names = "usb";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -723,7 +723,7 @@ CONFIG_TEGRA_IOMMU_SMMU=y
|
||||||
CONFIG_ARM_SMMU=y
|
CONFIG_ARM_SMMU=y
|
||||||
CONFIG_ARM_SMMU_V3=y
|
CONFIG_ARM_SMMU_V3=y
|
||||||
CONFIG_QCOM_IOMMU=y
|
CONFIG_QCOM_IOMMU=y
|
||||||
CONFIG_REMOTEPROC=m
|
CONFIG_REMOTEPROC=y
|
||||||
CONFIG_QCOM_Q6V5_MSS=m
|
CONFIG_QCOM_Q6V5_MSS=m
|
||||||
CONFIG_QCOM_Q6V5_PAS=m
|
CONFIG_QCOM_Q6V5_PAS=m
|
||||||
CONFIG_QCOM_SYSMON=m
|
CONFIG_QCOM_SYSMON=m
|
||||||
|
|
|
@ -78,10 +78,9 @@ alternative_else_nop_endif
|
||||||
/*
|
/*
|
||||||
* Remove the address tag from a virtual address, if present.
|
* Remove the address tag from a virtual address, if present.
|
||||||
*/
|
*/
|
||||||
.macro clear_address_tag, dst, addr
|
.macro untagged_addr, dst, addr
|
||||||
tst \addr, #(1 << 55)
|
sbfx \dst, \addr, #0, #56
|
||||||
bic \dst, \addr, #(0xff << 56)
|
and \dst, \dst, \addr
|
||||||
csel \dst, \dst, \addr, eq
|
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -321,7 +321,8 @@ static inline s64 __lse_atomic64_dec_if_positive(atomic64_t *v)
|
||||||
}
|
}
|
||||||
|
|
||||||
#define __CMPXCHG_CASE(w, sfx, name, sz, mb, cl...) \
|
#define __CMPXCHG_CASE(w, sfx, name, sz, mb, cl...) \
|
||||||
static inline u##sz __lse__cmpxchg_case_##name##sz(volatile void *ptr, \
|
static __always_inline u##sz \
|
||||||
|
__lse__cmpxchg_case_##name##sz(volatile void *ptr, \
|
||||||
u##sz old, \
|
u##sz old, \
|
||||||
u##sz new) \
|
u##sz new) \
|
||||||
{ \
|
{ \
|
||||||
|
@ -362,7 +363,8 @@ __CMPXCHG_CASE(x, , mb_, 64, al, "memory")
|
||||||
#undef __CMPXCHG_CASE
|
#undef __CMPXCHG_CASE
|
||||||
|
|
||||||
#define __CMPXCHG_DBL(name, mb, cl...) \
|
#define __CMPXCHG_DBL(name, mb, cl...) \
|
||||||
static inline long __lse__cmpxchg_double##name(unsigned long old1, \
|
static __always_inline long \
|
||||||
|
__lse__cmpxchg_double##name(unsigned long old1, \
|
||||||
unsigned long old2, \
|
unsigned long old2, \
|
||||||
unsigned long new1, \
|
unsigned long new1, \
|
||||||
unsigned long new2, \
|
unsigned long new2, \
|
||||||
|
|
|
@ -52,7 +52,9 @@
|
||||||
#define ARM64_HAS_IRQ_PRIO_MASKING 42
|
#define ARM64_HAS_IRQ_PRIO_MASKING 42
|
||||||
#define ARM64_HAS_DCPODP 43
|
#define ARM64_HAS_DCPODP 43
|
||||||
#define ARM64_WORKAROUND_1463225 44
|
#define ARM64_WORKAROUND_1463225 44
|
||||||
|
#define ARM64_WORKAROUND_CAVIUM_TX2_219_TVM 45
|
||||||
|
#define ARM64_WORKAROUND_CAVIUM_TX2_219_PRFM 46
|
||||||
|
|
||||||
#define ARM64_NCAPS 45
|
#define ARM64_NCAPS 47
|
||||||
|
|
||||||
#endif /* __ASM_CPUCAPS_H */
|
#endif /* __ASM_CPUCAPS_H */
|
||||||
|
|
|
@ -47,30 +47,6 @@
|
||||||
#define read_sysreg_el2(r) read_sysreg_elx(r, _EL2, _EL1)
|
#define read_sysreg_el2(r) read_sysreg_elx(r, _EL2, _EL1)
|
||||||
#define write_sysreg_el2(v,r) write_sysreg_elx(v, r, _EL2, _EL1)
|
#define write_sysreg_el2(v,r) write_sysreg_elx(v, r, _EL2, _EL1)
|
||||||
|
|
||||||
/**
|
|
||||||
* hyp_alternate_select - Generates patchable code sequences that are
|
|
||||||
* used to switch between two implementations of a function, depending
|
|
||||||
* on the availability of a feature.
|
|
||||||
*
|
|
||||||
* @fname: a symbol name that will be defined as a function returning a
|
|
||||||
* function pointer whose type will match @orig and @alt
|
|
||||||
* @orig: A pointer to the default function, as returned by @fname when
|
|
||||||
* @cond doesn't hold
|
|
||||||
* @alt: A pointer to the alternate function, as returned by @fname
|
|
||||||
* when @cond holds
|
|
||||||
* @cond: a CPU feature (as described in asm/cpufeature.h)
|
|
||||||
*/
|
|
||||||
#define hyp_alternate_select(fname, orig, alt, cond) \
|
|
||||||
typeof(orig) * __hyp_text fname(void) \
|
|
||||||
{ \
|
|
||||||
typeof(alt) *val = orig; \
|
|
||||||
asm volatile(ALTERNATIVE("nop \n", \
|
|
||||||
"mov %0, %1 \n", \
|
|
||||||
cond) \
|
|
||||||
: "+r" (val) : "r" (alt)); \
|
|
||||||
return val; \
|
|
||||||
}
|
|
||||||
|
|
||||||
int __vgic_v2_perform_cpuif_access(struct kvm_vcpu *vcpu);
|
int __vgic_v2_perform_cpuif_access(struct kvm_vcpu *vcpu);
|
||||||
|
|
||||||
void __vgic_v3_save_state(struct kvm_vcpu *vcpu);
|
void __vgic_v3_save_state(struct kvm_vcpu *vcpu);
|
||||||
|
|
|
@ -215,12 +215,18 @@ static inline unsigned long kaslr_offset(void)
|
||||||
* up with a tagged userland pointer. Clear the tag to get a sane pointer to
|
* up with a tagged userland pointer. Clear the tag to get a sane pointer to
|
||||||
* pass on to access_ok(), for instance.
|
* pass on to access_ok(), for instance.
|
||||||
*/
|
*/
|
||||||
#define untagged_addr(addr) \
|
#define __untagged_addr(addr) \
|
||||||
((__force __typeof__(addr))sign_extend64((__force u64)(addr), 55))
|
((__force __typeof__(addr))sign_extend64((__force u64)(addr), 55))
|
||||||
|
|
||||||
|
#define untagged_addr(addr) ({ \
|
||||||
|
u64 __addr = (__force u64)addr; \
|
||||||
|
__addr &= __untagged_addr(__addr); \
|
||||||
|
(__force __typeof__(addr))__addr; \
|
||||||
|
})
|
||||||
|
|
||||||
#ifdef CONFIG_KASAN_SW_TAGS
|
#ifdef CONFIG_KASAN_SW_TAGS
|
||||||
#define __tag_shifted(tag) ((u64)(tag) << 56)
|
#define __tag_shifted(tag) ((u64)(tag) << 56)
|
||||||
#define __tag_reset(addr) untagged_addr(addr)
|
#define __tag_reset(addr) __untagged_addr(addr)
|
||||||
#define __tag_get(addr) (__u8)((u64)(addr) >> 56)
|
#define __tag_get(addr) (__u8)((u64)(addr) >> 56)
|
||||||
#else
|
#else
|
||||||
#define __tag_shifted(tag) 0UL
|
#define __tag_shifted(tag) 0UL
|
||||||
|
|
|
@ -876,9 +876,6 @@ static inline void update_mmu_cache(struct vm_area_struct *vma,
|
||||||
|
|
||||||
#define update_mmu_cache_pmd(vma, address, pmd) do { } while (0)
|
#define update_mmu_cache_pmd(vma, address, pmd) do { } while (0)
|
||||||
|
|
||||||
#define kc_vaddr_to_offset(v) ((v) & ~PAGE_END)
|
|
||||||
#define kc_offset_to_vaddr(o) ((o) | PAGE_END)
|
|
||||||
|
|
||||||
#ifdef CONFIG_ARM64_PA_BITS_52
|
#ifdef CONFIG_ARM64_PA_BITS_52
|
||||||
#define phys_to_ttbr(addr) (((addr) | ((addr) >> 46)) & TTBR_BADDR_MASK_52)
|
#define phys_to_ttbr(addr) (((addr) | ((addr) >> 46)) & TTBR_BADDR_MASK_52)
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -212,7 +212,7 @@
|
||||||
#define SYS_FAR_EL1 sys_reg(3, 0, 6, 0, 0)
|
#define SYS_FAR_EL1 sys_reg(3, 0, 6, 0, 0)
|
||||||
#define SYS_PAR_EL1 sys_reg(3, 0, 7, 4, 0)
|
#define SYS_PAR_EL1 sys_reg(3, 0, 7, 4, 0)
|
||||||
|
|
||||||
#define SYS_PAR_EL1_F BIT(1)
|
#define SYS_PAR_EL1_F BIT(0)
|
||||||
#define SYS_PAR_EL1_FST GENMASK(6, 1)
|
#define SYS_PAR_EL1_FST GENMASK(6, 1)
|
||||||
|
|
||||||
/*** Statistical Profiling Extension ***/
|
/*** Statistical Profiling Extension ***/
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
|
|
||||||
#define dmb(option) __asm__ __volatile__ ("dmb " #option : : : "memory")
|
#define dmb(option) __asm__ __volatile__ ("dmb " #option : : : "memory")
|
||||||
|
|
||||||
#if __LINUX_ARM_ARCH__ >= 8
|
#if __LINUX_ARM_ARCH__ >= 8 && defined(CONFIG_AS_DMB_ISHLD)
|
||||||
#define aarch32_smp_mb() dmb(ish)
|
#define aarch32_smp_mb() dmb(ish)
|
||||||
#define aarch32_smp_rmb() dmb(ishld)
|
#define aarch32_smp_rmb() dmb(ishld)
|
||||||
#define aarch32_smp_wmb() dmb(ishst)
|
#define aarch32_smp_wmb() dmb(ishst)
|
||||||
|
|
|
@ -1,33 +0,0 @@
|
||||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
||||||
/*
|
|
||||||
* Copyright (C) 2012 ARM Limited
|
|
||||||
*/
|
|
||||||
#ifndef __ASM_VDSO_DATAPAGE_H
|
|
||||||
#define __ASM_VDSO_DATAPAGE_H
|
|
||||||
|
|
||||||
#ifndef __ASSEMBLY__
|
|
||||||
|
|
||||||
struct vdso_data {
|
|
||||||
__u64 cs_cycle_last; /* Timebase at clocksource init */
|
|
||||||
__u64 raw_time_sec; /* Raw time */
|
|
||||||
__u64 raw_time_nsec;
|
|
||||||
__u64 xtime_clock_sec; /* Kernel time */
|
|
||||||
__u64 xtime_clock_nsec;
|
|
||||||
__u64 xtime_coarse_sec; /* Coarse time */
|
|
||||||
__u64 xtime_coarse_nsec;
|
|
||||||
__u64 wtm_clock_sec; /* Wall to monotonic time */
|
|
||||||
__u64 wtm_clock_nsec;
|
|
||||||
__u32 tb_seq_count; /* Timebase sequence counter */
|
|
||||||
/* cs_* members must be adjacent and in this order (ldp accesses) */
|
|
||||||
__u32 cs_mono_mult; /* NTP-adjusted clocksource multiplier */
|
|
||||||
__u32 cs_shift; /* Clocksource shift (mono = raw) */
|
|
||||||
__u32 cs_raw_mult; /* Raw clocksource multiplier */
|
|
||||||
__u32 tz_minuteswest; /* Whacky timezone stuff */
|
|
||||||
__u32 tz_dsttime;
|
|
||||||
__u32 use_syscall;
|
|
||||||
__u32 hrtimer_res;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* !__ASSEMBLY__ */
|
|
||||||
|
|
||||||
#endif /* __ASM_VDSO_DATAPAGE_H */
|
|
|
@ -1,7 +0,0 @@
|
||||||
/* SPDX-License-Identifier: GPL-2.0 */
|
|
||||||
#ifndef _ASM_XEN_OPS_H
|
|
||||||
#define _ASM_XEN_OPS_H
|
|
||||||
|
|
||||||
void xen_efi_runtime_setup(void);
|
|
||||||
|
|
||||||
#endif /* _ASM_XEN_OPS_H */
|
|
|
@ -174,6 +174,9 @@ static void __init register_insn_emulation(struct insn_emulation_ops *ops)
|
||||||
struct insn_emulation *insn;
|
struct insn_emulation *insn;
|
||||||
|
|
||||||
insn = kzalloc(sizeof(*insn), GFP_KERNEL);
|
insn = kzalloc(sizeof(*insn), GFP_KERNEL);
|
||||||
|
if (!insn)
|
||||||
|
return;
|
||||||
|
|
||||||
insn->ops = ops;
|
insn->ops = ops;
|
||||||
insn->min = INSN_UNDEF;
|
insn->min = INSN_UNDEF;
|
||||||
|
|
||||||
|
@ -233,6 +236,8 @@ static void __init register_insn_emulation_sysctl(void)
|
||||||
|
|
||||||
insns_sysctl = kcalloc(nr_insn_emulated + 1, sizeof(*sysctl),
|
insns_sysctl = kcalloc(nr_insn_emulated + 1, sizeof(*sysctl),
|
||||||
GFP_KERNEL);
|
GFP_KERNEL);
|
||||||
|
if (!insns_sysctl)
|
||||||
|
return;
|
||||||
|
|
||||||
raw_spin_lock_irqsave(&insn_emulation_lock, flags);
|
raw_spin_lock_irqsave(&insn_emulation_lock, flags);
|
||||||
list_for_each_entry(insn, &insn_emulation, node) {
|
list_for_each_entry(insn, &insn_emulation, node) {
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
#include <asm/cpu.h>
|
#include <asm/cpu.h>
|
||||||
#include <asm/cputype.h>
|
#include <asm/cputype.h>
|
||||||
#include <asm/cpufeature.h>
|
#include <asm/cpufeature.h>
|
||||||
|
#include <asm/smp_plat.h>
|
||||||
|
|
||||||
static bool __maybe_unused
|
static bool __maybe_unused
|
||||||
is_affected_midr_range(const struct arm64_cpu_capabilities *entry, int scope)
|
is_affected_midr_range(const struct arm64_cpu_capabilities *entry, int scope)
|
||||||
|
@ -128,8 +129,8 @@ static void install_bp_hardening_cb(bp_hardening_cb_t fn,
|
||||||
int cpu, slot = -1;
|
int cpu, slot = -1;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* enable_smccc_arch_workaround_1() passes NULL for the hyp_vecs
|
* detect_harden_bp_fw() passes NULL for the hyp_vecs start/end if
|
||||||
* start/end if we're a guest. Skip the hyp-vectors work.
|
* we're a guest. Skip the hyp-vectors work.
|
||||||
*/
|
*/
|
||||||
if (!hyp_vecs_start) {
|
if (!hyp_vecs_start) {
|
||||||
__this_cpu_write(bp_hardening_data.fn, fn);
|
__this_cpu_write(bp_hardening_data.fn, fn);
|
||||||
|
@ -623,6 +624,30 @@ check_branch_predictor(const struct arm64_cpu_capabilities *entry, int scope)
|
||||||
return (need_wa > 0);
|
return (need_wa > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const __maybe_unused struct midr_range tx2_family_cpus[] = {
|
||||||
|
MIDR_ALL_VERSIONS(MIDR_BRCM_VULCAN),
|
||||||
|
MIDR_ALL_VERSIONS(MIDR_CAVIUM_THUNDERX2),
|
||||||
|
{},
|
||||||
|
};
|
||||||
|
|
||||||
|
static bool __maybe_unused
|
||||||
|
needs_tx2_tvm_workaround(const struct arm64_cpu_capabilities *entry,
|
||||||
|
int scope)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (!is_affected_midr_range_list(entry, scope) ||
|
||||||
|
!is_hyp_mode_available())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
for_each_possible_cpu(i) {
|
||||||
|
if (MPIDR_AFFINITY_LEVEL(cpu_logical_map(i), 0) != 0)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_HARDEN_EL2_VECTORS
|
#ifdef CONFIG_HARDEN_EL2_VECTORS
|
||||||
|
|
||||||
static const struct midr_range arm64_harden_el2_vectors[] = {
|
static const struct midr_range arm64_harden_el2_vectors[] = {
|
||||||
|
@ -851,6 +876,19 @@ const struct arm64_cpu_capabilities arm64_errata[] = {
|
||||||
.type = ARM64_CPUCAP_LOCAL_CPU_ERRATUM,
|
.type = ARM64_CPUCAP_LOCAL_CPU_ERRATUM,
|
||||||
.matches = has_cortex_a76_erratum_1463225,
|
.matches = has_cortex_a76_erratum_1463225,
|
||||||
},
|
},
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_CAVIUM_TX2_ERRATUM_219
|
||||||
|
{
|
||||||
|
.desc = "Cavium ThunderX2 erratum 219 (KVM guest sysreg trapping)",
|
||||||
|
.capability = ARM64_WORKAROUND_CAVIUM_TX2_219_TVM,
|
||||||
|
ERRATA_MIDR_RANGE_LIST(tx2_family_cpus),
|
||||||
|
.matches = needs_tx2_tvm_workaround,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.desc = "Cavium ThunderX2 erratum 219 (PRFM removal)",
|
||||||
|
.capability = ARM64_WORKAROUND_CAVIUM_TX2_219_PRFM,
|
||||||
|
ERRATA_MIDR_RANGE_LIST(tx2_family_cpus),
|
||||||
|
},
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
|
@ -136,6 +136,7 @@ static const struct arm64_ftr_bits ftr_id_aa64isar0[] = {
|
||||||
|
|
||||||
static const struct arm64_ftr_bits ftr_id_aa64isar1[] = {
|
static const struct arm64_ftr_bits ftr_id_aa64isar1[] = {
|
||||||
ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_SB_SHIFT, 4, 0),
|
ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_SB_SHIFT, 4, 0),
|
||||||
|
ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_FRINTTS_SHIFT, 4, 0),
|
||||||
ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_PTR_AUTH),
|
ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_PTR_AUTH),
|
||||||
FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_GPI_SHIFT, 4, 0),
|
FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_GPI_SHIFT, 4, 0),
|
||||||
ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_PTR_AUTH),
|
ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_PTR_AUTH),
|
||||||
|
@ -175,11 +176,16 @@ static const struct arm64_ftr_bits ftr_id_aa64pfr1[] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct arm64_ftr_bits ftr_id_aa64zfr0[] = {
|
static const struct arm64_ftr_bits ftr_id_aa64zfr0[] = {
|
||||||
ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_SM4_SHIFT, 4, 0),
|
ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_SVE),
|
||||||
ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_SHA3_SHIFT, 4, 0),
|
FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_SM4_SHIFT, 4, 0),
|
||||||
ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_BITPERM_SHIFT, 4, 0),
|
ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_SVE),
|
||||||
ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_AES_SHIFT, 4, 0),
|
FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_SHA3_SHIFT, 4, 0),
|
||||||
ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_SVEVER_SHIFT, 4, 0),
|
ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_SVE),
|
||||||
|
FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_BITPERM_SHIFT, 4, 0),
|
||||||
|
ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_SVE),
|
||||||
|
FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_AES_SHIFT, 4, 0),
|
||||||
|
ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_SVE),
|
||||||
|
FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_SVEVER_SHIFT, 4, 0),
|
||||||
ARM64_FTR_END,
|
ARM64_FTR_END,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -604,7 +604,7 @@ el1_da:
|
||||||
*/
|
*/
|
||||||
mrs x3, far_el1
|
mrs x3, far_el1
|
||||||
inherit_daif pstate=x23, tmp=x2
|
inherit_daif pstate=x23, tmp=x2
|
||||||
clear_address_tag x0, x3
|
untagged_addr x0, x3
|
||||||
mov x2, sp // struct pt_regs
|
mov x2, sp // struct pt_regs
|
||||||
bl do_mem_abort
|
bl do_mem_abort
|
||||||
|
|
||||||
|
@ -680,7 +680,7 @@ alternative_if ARM64_HAS_IRQ_PRIO_MASKING
|
||||||
orr x24, x24, x0
|
orr x24, x24, x0
|
||||||
alternative_else_nop_endif
|
alternative_else_nop_endif
|
||||||
cbnz x24, 1f // preempt count != 0 || NMI return path
|
cbnz x24, 1f // preempt count != 0 || NMI return path
|
||||||
bl preempt_schedule_irq // irq en/disable is done inside
|
bl arm64_preempt_schedule_irq // irq en/disable is done inside
|
||||||
1:
|
1:
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -775,6 +775,7 @@ el0_sync_compat:
|
||||||
b.ge el0_dbg
|
b.ge el0_dbg
|
||||||
b el0_inv
|
b el0_inv
|
||||||
el0_svc_compat:
|
el0_svc_compat:
|
||||||
|
gic_prio_kentry_setup tmp=x1
|
||||||
mov x0, sp
|
mov x0, sp
|
||||||
bl el0_svc_compat_handler
|
bl el0_svc_compat_handler
|
||||||
b ret_to_user
|
b ret_to_user
|
||||||
|
@ -807,7 +808,7 @@ el0_da:
|
||||||
mrs x26, far_el1
|
mrs x26, far_el1
|
||||||
ct_user_exit_irqoff
|
ct_user_exit_irqoff
|
||||||
enable_daif
|
enable_daif
|
||||||
clear_address_tag x0, x26
|
untagged_addr x0, x26
|
||||||
mov x1, x25
|
mov x1, x25
|
||||||
mov x2, sp
|
mov x2, sp
|
||||||
bl do_mem_abort
|
bl do_mem_abort
|
||||||
|
@ -1070,7 +1071,9 @@ alternative_insn isb, nop, ARM64_WORKAROUND_QCOM_FALKOR_E1003
|
||||||
#else
|
#else
|
||||||
ldr x30, =vectors
|
ldr x30, =vectors
|
||||||
#endif
|
#endif
|
||||||
|
alternative_if_not ARM64_WORKAROUND_CAVIUM_TX2_219_PRFM
|
||||||
prfm plil1strm, [x30, #(1b - tramp_vectors)]
|
prfm plil1strm, [x30, #(1b - tramp_vectors)]
|
||||||
|
alternative_else_nop_endif
|
||||||
msr vbar_el1, x30
|
msr vbar_el1, x30
|
||||||
add x30, x30, #(1b - tramp_vectors)
|
add x30, x30, #(1b - tramp_vectors)
|
||||||
isb
|
isb
|
||||||
|
|
|
@ -121,10 +121,16 @@ int ftrace_make_call(struct dyn_ftrace *rec, unsigned long addr)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Ensure updated trampoline is visible to instruction
|
* Ensure updated trampoline is visible to instruction
|
||||||
* fetch before we patch in the branch.
|
* fetch before we patch in the branch. Although the
|
||||||
|
* architecture doesn't require an IPI in this case,
|
||||||
|
* Neoverse-N1 erratum #1542419 does require one
|
||||||
|
* if the TLB maintenance in module_enable_ro() is
|
||||||
|
* skipped due to rodata_enabled. It doesn't seem worth
|
||||||
|
* it to make it conditional given that this is
|
||||||
|
* certainly not a fast-path.
|
||||||
*/
|
*/
|
||||||
__flush_icache_range((unsigned long)&dst[0],
|
flush_icache_range((unsigned long)&dst[0],
|
||||||
(unsigned long)&dst[1]);
|
(unsigned long)&dst[1]);
|
||||||
}
|
}
|
||||||
addr = (unsigned long)dst;
|
addr = (unsigned long)dst;
|
||||||
#else /* CONFIG_ARM64_MODULE_PLTS */
|
#else /* CONFIG_ARM64_MODULE_PLTS */
|
||||||
|
|
|
@ -201,6 +201,7 @@ static int create_safe_exec_page(void *src_start, size_t length,
|
||||||
gfp_t mask)
|
gfp_t mask)
|
||||||
{
|
{
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
|
pgd_t *trans_pgd;
|
||||||
pgd_t *pgdp;
|
pgd_t *pgdp;
|
||||||
pud_t *pudp;
|
pud_t *pudp;
|
||||||
pmd_t *pmdp;
|
pmd_t *pmdp;
|
||||||
|
@ -215,7 +216,13 @@ static int create_safe_exec_page(void *src_start, size_t length,
|
||||||
memcpy((void *)dst, src_start, length);
|
memcpy((void *)dst, src_start, length);
|
||||||
__flush_icache_range(dst, dst + length);
|
__flush_icache_range(dst, dst + length);
|
||||||
|
|
||||||
pgdp = pgd_offset_raw(allocator(mask), dst_addr);
|
trans_pgd = allocator(mask);
|
||||||
|
if (!trans_pgd) {
|
||||||
|
rc = -ENOMEM;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
pgdp = pgd_offset_raw(trans_pgd, dst_addr);
|
||||||
if (pgd_none(READ_ONCE(*pgdp))) {
|
if (pgd_none(READ_ONCE(*pgdp))) {
|
||||||
pudp = allocator(mask);
|
pudp = allocator(mask);
|
||||||
if (!pudp) {
|
if (!pudp) {
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
#include <linux/sched/task.h>
|
#include <linux/sched/task.h>
|
||||||
#include <linux/sched/task_stack.h>
|
#include <linux/sched/task_stack.h>
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
|
#include <linux/lockdep.h>
|
||||||
#include <linux/mm.h>
|
#include <linux/mm.h>
|
||||||
#include <linux/stddef.h>
|
#include <linux/stddef.h>
|
||||||
#include <linux/sysctl.h>
|
#include <linux/sysctl.h>
|
||||||
|
@ -44,6 +45,7 @@
|
||||||
#include <asm/alternative.h>
|
#include <asm/alternative.h>
|
||||||
#include <asm/arch_gicv3.h>
|
#include <asm/arch_gicv3.h>
|
||||||
#include <asm/compat.h>
|
#include <asm/compat.h>
|
||||||
|
#include <asm/cpufeature.h>
|
||||||
#include <asm/cacheflush.h>
|
#include <asm/cacheflush.h>
|
||||||
#include <asm/exec.h>
|
#include <asm/exec.h>
|
||||||
#include <asm/fpsimd.h>
|
#include <asm/fpsimd.h>
|
||||||
|
@ -332,22 +334,27 @@ void arch_release_task_struct(struct task_struct *tsk)
|
||||||
fpsimd_release_task(tsk);
|
fpsimd_release_task(tsk);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* src and dst may temporarily have aliased sve_state after task_struct
|
|
||||||
* is copied. We cannot fix this properly here, because src may have
|
|
||||||
* live SVE state and dst's thread_info may not exist yet, so tweaking
|
|
||||||
* either src's or dst's TIF_SVE is not safe.
|
|
||||||
*
|
|
||||||
* The unaliasing is done in copy_thread() instead. This works because
|
|
||||||
* dst is not schedulable or traceable until both of these functions
|
|
||||||
* have been called.
|
|
||||||
*/
|
|
||||||
int arch_dup_task_struct(struct task_struct *dst, struct task_struct *src)
|
int arch_dup_task_struct(struct task_struct *dst, struct task_struct *src)
|
||||||
{
|
{
|
||||||
if (current->mm)
|
if (current->mm)
|
||||||
fpsimd_preserve_current_state();
|
fpsimd_preserve_current_state();
|
||||||
*dst = *src;
|
*dst = *src;
|
||||||
|
|
||||||
|
/* We rely on the above assignment to initialize dst's thread_flags: */
|
||||||
|
BUILD_BUG_ON(!IS_ENABLED(CONFIG_THREAD_INFO_IN_TASK));
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Detach src's sve_state (if any) from dst so that it does not
|
||||||
|
* get erroneously used or freed prematurely. dst's sve_state
|
||||||
|
* will be allocated on demand later on if dst uses SVE.
|
||||||
|
* For consistency, also clear TIF_SVE here: this could be done
|
||||||
|
* later in copy_process(), but to avoid tripping up future
|
||||||
|
* maintainers it is best not to leave TIF_SVE and sve_state in
|
||||||
|
* an inconsistent state, even temporarily.
|
||||||
|
*/
|
||||||
|
dst->thread.sve_state = NULL;
|
||||||
|
clear_tsk_thread_flag(dst, TIF_SVE);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -360,13 +367,6 @@ int copy_thread(unsigned long clone_flags, unsigned long stack_start,
|
||||||
|
|
||||||
memset(&p->thread.cpu_context, 0, sizeof(struct cpu_context));
|
memset(&p->thread.cpu_context, 0, sizeof(struct cpu_context));
|
||||||
|
|
||||||
/*
|
|
||||||
* Unalias p->thread.sve_state (if any) from the parent task
|
|
||||||
* and disable discard SVE state for p:
|
|
||||||
*/
|
|
||||||
clear_tsk_thread_flag(p, TIF_SVE);
|
|
||||||
p->thread.sve_state = NULL;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* In case p was allocated the same task_struct pointer as some
|
* In case p was allocated the same task_struct pointer as some
|
||||||
* other recently-exited task, make sure p is disassociated from
|
* other recently-exited task, make sure p is disassociated from
|
||||||
|
@ -633,3 +633,19 @@ static int __init tagged_addr_init(void)
|
||||||
|
|
||||||
core_initcall(tagged_addr_init);
|
core_initcall(tagged_addr_init);
|
||||||
#endif /* CONFIG_ARM64_TAGGED_ADDR_ABI */
|
#endif /* CONFIG_ARM64_TAGGED_ADDR_ABI */
|
||||||
|
|
||||||
|
asmlinkage void __sched arm64_preempt_schedule_irq(void)
|
||||||
|
{
|
||||||
|
lockdep_assert_irqs_disabled();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Preempting a task from an IRQ means we leave copies of PSTATE
|
||||||
|
* on the stack. cpufeature's enable calls may modify PSTATE, but
|
||||||
|
* resuming one of these preempted tasks would undo those changes.
|
||||||
|
*
|
||||||
|
* Only allow a task to be preempted once cpufeatures have been
|
||||||
|
* enabled.
|
||||||
|
*/
|
||||||
|
if (static_branch_likely(&arm64_const_caps_ready))
|
||||||
|
preempt_schedule_irq();
|
||||||
|
}
|
||||||
|
|
|
@ -8,15 +8,21 @@
|
||||||
ARCH_REL_TYPE_ABS := R_ARM_JUMP_SLOT|R_ARM_GLOB_DAT|R_ARM_ABS32
|
ARCH_REL_TYPE_ABS := R_ARM_JUMP_SLOT|R_ARM_GLOB_DAT|R_ARM_ABS32
|
||||||
include $(srctree)/lib/vdso/Makefile
|
include $(srctree)/lib/vdso/Makefile
|
||||||
|
|
||||||
COMPATCC := $(CROSS_COMPILE_COMPAT)gcc
|
# Same as cc-*option, but using CC_COMPAT instead of CC
|
||||||
|
ifeq ($(CONFIG_CC_IS_CLANG), y)
|
||||||
|
CC_COMPAT ?= $(CC)
|
||||||
|
else
|
||||||
|
CC_COMPAT ?= $(CROSS_COMPILE_COMPAT)gcc
|
||||||
|
endif
|
||||||
|
|
||||||
# Same as cc-*option, but using COMPATCC instead of CC
|
|
||||||
cc32-option = $(call try-run,\
|
cc32-option = $(call try-run,\
|
||||||
$(COMPATCC) $(1) -c -x c /dev/null -o "$$TMP",$(1),$(2))
|
$(CC_COMPAT) $(1) -c -x c /dev/null -o "$$TMP",$(1),$(2))
|
||||||
cc32-disable-warning = $(call try-run,\
|
cc32-disable-warning = $(call try-run,\
|
||||||
$(COMPATCC) -W$(strip $(1)) -c -x c /dev/null -o "$$TMP",-Wno-$(strip $(1)))
|
$(CC_COMPAT) -W$(strip $(1)) -c -x c /dev/null -o "$$TMP",-Wno-$(strip $(1)))
|
||||||
cc32-ldoption = $(call try-run,\
|
cc32-ldoption = $(call try-run,\
|
||||||
$(COMPATCC) $(1) -nostdlib -x c /dev/null -o "$$TMP",$(1),$(2))
|
$(CC_COMPAT) $(1) -nostdlib -x c /dev/null -o "$$TMP",$(1),$(2))
|
||||||
|
cc32-as-instr = $(call try-run,\
|
||||||
|
printf "%b\n" "$(1)" | $(CC_COMPAT) $(VDSO_AFLAGS) -c -x assembler -o "$$TMP" -,$(2),$(3))
|
||||||
|
|
||||||
# We cannot use the global flags to compile the vDSO files, the main reason
|
# We cannot use the global flags to compile the vDSO files, the main reason
|
||||||
# being that the 32-bit compiler may be older than the main (64-bit) compiler
|
# being that the 32-bit compiler may be older than the main (64-bit) compiler
|
||||||
|
@ -25,22 +31,21 @@ cc32-ldoption = $(call try-run,\
|
||||||
# arm64 one.
|
# arm64 one.
|
||||||
# As a result we set our own flags here.
|
# As a result we set our own flags here.
|
||||||
|
|
||||||
# From top-level Makefile
|
# KBUILD_CPPFLAGS and NOSTDINC_FLAGS from top-level Makefile
|
||||||
# NOSTDINC_FLAGS
|
VDSO_CPPFLAGS := -D__KERNEL__ -nostdinc -isystem $(shell $(CC_COMPAT) -print-file-name=include)
|
||||||
VDSO_CPPFLAGS := -nostdinc -isystem $(shell $(COMPATCC) -print-file-name=include)
|
|
||||||
VDSO_CPPFLAGS += $(LINUXINCLUDE)
|
VDSO_CPPFLAGS += $(LINUXINCLUDE)
|
||||||
VDSO_CPPFLAGS += $(KBUILD_CPPFLAGS)
|
|
||||||
|
|
||||||
# Common C and assembly flags
|
# Common C and assembly flags
|
||||||
# From top-level Makefile
|
# From top-level Makefile
|
||||||
VDSO_CAFLAGS := $(VDSO_CPPFLAGS)
|
VDSO_CAFLAGS := $(VDSO_CPPFLAGS)
|
||||||
|
ifneq ($(shell $(CC_COMPAT) --version 2>&1 | head -n 1 | grep clang),)
|
||||||
|
VDSO_CAFLAGS += --target=$(notdir $(CROSS_COMPILE_COMPAT:%-=%))
|
||||||
|
endif
|
||||||
|
|
||||||
VDSO_CAFLAGS += $(call cc32-option,-fno-PIE)
|
VDSO_CAFLAGS += $(call cc32-option,-fno-PIE)
|
||||||
ifdef CONFIG_DEBUG_INFO
|
ifdef CONFIG_DEBUG_INFO
|
||||||
VDSO_CAFLAGS += -g
|
VDSO_CAFLAGS += -g
|
||||||
endif
|
endif
|
||||||
ifeq ($(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-goto.sh $(COMPATCC)), y)
|
|
||||||
VDSO_CAFLAGS += -DCC_HAVE_ASM_GOTO
|
|
||||||
endif
|
|
||||||
|
|
||||||
# From arm Makefile
|
# From arm Makefile
|
||||||
VDSO_CAFLAGS += $(call cc32-option,-fno-dwarf2-cfi-asm)
|
VDSO_CAFLAGS += $(call cc32-option,-fno-dwarf2-cfi-asm)
|
||||||
|
@ -55,6 +60,7 @@ endif
|
||||||
VDSO_CAFLAGS += -fPIC -fno-builtin -fno-stack-protector
|
VDSO_CAFLAGS += -fPIC -fno-builtin -fno-stack-protector
|
||||||
VDSO_CAFLAGS += -DDISABLE_BRANCH_PROFILING
|
VDSO_CAFLAGS += -DDISABLE_BRANCH_PROFILING
|
||||||
|
|
||||||
|
|
||||||
# Try to compile for ARMv8. If the compiler is too old and doesn't support it,
|
# Try to compile for ARMv8. If the compiler is too old and doesn't support it,
|
||||||
# fall back to v7. There is no easy way to check for what architecture the code
|
# fall back to v7. There is no easy way to check for what architecture the code
|
||||||
# is being compiled, so define a macro specifying that (see arch/arm/Makefile).
|
# is being compiled, so define a macro specifying that (see arch/arm/Makefile).
|
||||||
|
@ -91,6 +97,12 @@ VDSO_CFLAGS += -Wno-int-to-pointer-cast
|
||||||
VDSO_AFLAGS := $(VDSO_CAFLAGS)
|
VDSO_AFLAGS := $(VDSO_CAFLAGS)
|
||||||
VDSO_AFLAGS += -D__ASSEMBLY__
|
VDSO_AFLAGS += -D__ASSEMBLY__
|
||||||
|
|
||||||
|
# Check for binutils support for dmb ishld
|
||||||
|
dmbinstr := $(call cc32-as-instr,dmb ishld,-DCONFIG_AS_DMB_ISHLD=1)
|
||||||
|
|
||||||
|
VDSO_CFLAGS += $(dmbinstr)
|
||||||
|
VDSO_AFLAGS += $(dmbinstr)
|
||||||
|
|
||||||
VDSO_LDFLAGS := $(VDSO_CPPFLAGS)
|
VDSO_LDFLAGS := $(VDSO_CPPFLAGS)
|
||||||
# From arm vDSO Makefile
|
# From arm vDSO Makefile
|
||||||
VDSO_LDFLAGS += -Wl,-Bsymbolic -Wl,--no-undefined -Wl,-soname=linux-vdso.so.1
|
VDSO_LDFLAGS += -Wl,-Bsymbolic -Wl,--no-undefined -Wl,-soname=linux-vdso.so.1
|
||||||
|
@ -159,14 +171,14 @@ quiet_cmd_vdsold_and_vdso_check = LD32 $@
|
||||||
cmd_vdsold_and_vdso_check = $(cmd_vdsold); $(cmd_vdso_check)
|
cmd_vdsold_and_vdso_check = $(cmd_vdsold); $(cmd_vdso_check)
|
||||||
|
|
||||||
quiet_cmd_vdsold = LD32 $@
|
quiet_cmd_vdsold = LD32 $@
|
||||||
cmd_vdsold = $(COMPATCC) -Wp,-MD,$(depfile) $(VDSO_LDFLAGS) \
|
cmd_vdsold = $(CC_COMPAT) -Wp,-MD,$(depfile) $(VDSO_LDFLAGS) \
|
||||||
-Wl,-T $(filter %.lds,$^) $(filter %.o,$^) -o $@
|
-Wl,-T $(filter %.lds,$^) $(filter %.o,$^) -o $@
|
||||||
quiet_cmd_vdsocc = CC32 $@
|
quiet_cmd_vdsocc = CC32 $@
|
||||||
cmd_vdsocc = $(COMPATCC) -Wp,-MD,$(depfile) $(VDSO_CFLAGS) -c -o $@ $<
|
cmd_vdsocc = $(CC_COMPAT) -Wp,-MD,$(depfile) $(VDSO_CFLAGS) -c -o $@ $<
|
||||||
quiet_cmd_vdsocc_gettimeofday = CC32 $@
|
quiet_cmd_vdsocc_gettimeofday = CC32 $@
|
||||||
cmd_vdsocc_gettimeofday = $(COMPATCC) -Wp,-MD,$(depfile) $(VDSO_CFLAGS) $(VDSO_CFLAGS_gettimeofday_o) -c -o $@ $<
|
cmd_vdsocc_gettimeofday = $(CC_COMPAT) -Wp,-MD,$(depfile) $(VDSO_CFLAGS) $(VDSO_CFLAGS_gettimeofday_o) -c -o $@ $<
|
||||||
quiet_cmd_vdsoas = AS32 $@
|
quiet_cmd_vdsoas = AS32 $@
|
||||||
cmd_vdsoas = $(COMPATCC) -Wp,-MD,$(depfile) $(VDSO_AFLAGS) -c -o $@ $<
|
cmd_vdsoas = $(CC_COMPAT) -Wp,-MD,$(depfile) $(VDSO_AFLAGS) -c -o $@ $<
|
||||||
|
|
||||||
quiet_cmd_vdsomunge = MUNGE $@
|
quiet_cmd_vdsomunge = MUNGE $@
|
||||||
cmd_vdsomunge = $(obj)/$(munge) $< $@
|
cmd_vdsomunge = $(obj)/$(munge) $< $@
|
||||||
|
|
|
@ -124,6 +124,9 @@ static void __hyp_text __activate_traps(struct kvm_vcpu *vcpu)
|
||||||
{
|
{
|
||||||
u64 hcr = vcpu->arch.hcr_el2;
|
u64 hcr = vcpu->arch.hcr_el2;
|
||||||
|
|
||||||
|
if (cpus_have_const_cap(ARM64_WORKAROUND_CAVIUM_TX2_219_TVM))
|
||||||
|
hcr |= HCR_TVM;
|
||||||
|
|
||||||
write_sysreg(hcr, hcr_el2);
|
write_sysreg(hcr, hcr_el2);
|
||||||
|
|
||||||
if (cpus_have_const_cap(ARM64_HAS_RAS_EXTN) && (hcr & HCR_VSE))
|
if (cpus_have_const_cap(ARM64_HAS_RAS_EXTN) && (hcr & HCR_VSE))
|
||||||
|
@ -174,8 +177,10 @@ static void __hyp_text __deactivate_traps(struct kvm_vcpu *vcpu)
|
||||||
* the crucial bit is "On taking a vSError interrupt,
|
* the crucial bit is "On taking a vSError interrupt,
|
||||||
* HCR_EL2.VSE is cleared to 0."
|
* HCR_EL2.VSE is cleared to 0."
|
||||||
*/
|
*/
|
||||||
if (vcpu->arch.hcr_el2 & HCR_VSE)
|
if (vcpu->arch.hcr_el2 & HCR_VSE) {
|
||||||
vcpu->arch.hcr_el2 = read_sysreg(hcr_el2);
|
vcpu->arch.hcr_el2 &= ~HCR_VSE;
|
||||||
|
vcpu->arch.hcr_el2 |= read_sysreg(hcr_el2) & HCR_VSE;
|
||||||
|
}
|
||||||
|
|
||||||
if (has_vhe())
|
if (has_vhe())
|
||||||
deactivate_traps_vhe();
|
deactivate_traps_vhe();
|
||||||
|
@ -229,20 +234,6 @@ static void __hyp_text __hyp_vgic_restore_state(struct kvm_vcpu *vcpu)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool __hyp_text __true_value(void)
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool __hyp_text __false_value(void)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
static hyp_alternate_select(__check_arm_834220,
|
|
||||||
__false_value, __true_value,
|
|
||||||
ARM64_WORKAROUND_834220);
|
|
||||||
|
|
||||||
static bool __hyp_text __translate_far_to_hpfar(u64 far, u64 *hpfar)
|
static bool __hyp_text __translate_far_to_hpfar(u64 far, u64 *hpfar)
|
||||||
{
|
{
|
||||||
u64 par, tmp;
|
u64 par, tmp;
|
||||||
|
@ -298,7 +289,8 @@ static bool __hyp_text __populate_fault_info(struct kvm_vcpu *vcpu)
|
||||||
* resolve the IPA using the AT instruction.
|
* resolve the IPA using the AT instruction.
|
||||||
*/
|
*/
|
||||||
if (!(esr & ESR_ELx_S1PTW) &&
|
if (!(esr & ESR_ELx_S1PTW) &&
|
||||||
(__check_arm_834220()() || (esr & ESR_ELx_FSC_TYPE) == FSC_PERM)) {
|
(cpus_have_const_cap(ARM64_WORKAROUND_834220) ||
|
||||||
|
(esr & ESR_ELx_FSC_TYPE) == FSC_PERM)) {
|
||||||
if (!__translate_far_to_hpfar(far, &hpfar))
|
if (!__translate_far_to_hpfar(far, &hpfar))
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
|
@ -393,6 +385,61 @@ static bool __hyp_text __hyp_handle_fpsimd(struct kvm_vcpu *vcpu)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool __hyp_text handle_tx2_tvm(struct kvm_vcpu *vcpu)
|
||||||
|
{
|
||||||
|
u32 sysreg = esr_sys64_to_sysreg(kvm_vcpu_get_hsr(vcpu));
|
||||||
|
int rt = kvm_vcpu_sys_get_rt(vcpu);
|
||||||
|
u64 val = vcpu_get_reg(vcpu, rt);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The normal sysreg handling code expects to see the traps,
|
||||||
|
* let's not do anything here.
|
||||||
|
*/
|
||||||
|
if (vcpu->arch.hcr_el2 & HCR_TVM)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
switch (sysreg) {
|
||||||
|
case SYS_SCTLR_EL1:
|
||||||
|
write_sysreg_el1(val, SYS_SCTLR);
|
||||||
|
break;
|
||||||
|
case SYS_TTBR0_EL1:
|
||||||
|
write_sysreg_el1(val, SYS_TTBR0);
|
||||||
|
break;
|
||||||
|
case SYS_TTBR1_EL1:
|
||||||
|
write_sysreg_el1(val, SYS_TTBR1);
|
||||||
|
break;
|
||||||
|
case SYS_TCR_EL1:
|
||||||
|
write_sysreg_el1(val, SYS_TCR);
|
||||||
|
break;
|
||||||
|
case SYS_ESR_EL1:
|
||||||
|
write_sysreg_el1(val, SYS_ESR);
|
||||||
|
break;
|
||||||
|
case SYS_FAR_EL1:
|
||||||
|
write_sysreg_el1(val, SYS_FAR);
|
||||||
|
break;
|
||||||
|
case SYS_AFSR0_EL1:
|
||||||
|
write_sysreg_el1(val, SYS_AFSR0);
|
||||||
|
break;
|
||||||
|
case SYS_AFSR1_EL1:
|
||||||
|
write_sysreg_el1(val, SYS_AFSR1);
|
||||||
|
break;
|
||||||
|
case SYS_MAIR_EL1:
|
||||||
|
write_sysreg_el1(val, SYS_MAIR);
|
||||||
|
break;
|
||||||
|
case SYS_AMAIR_EL1:
|
||||||
|
write_sysreg_el1(val, SYS_AMAIR);
|
||||||
|
break;
|
||||||
|
case SYS_CONTEXTIDR_EL1:
|
||||||
|
write_sysreg_el1(val, SYS_CONTEXTIDR);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
__kvm_skip_instr(vcpu);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Return true when we were able to fixup the guest exit and should return to
|
* Return true when we were able to fixup the guest exit and should return to
|
||||||
* the guest, false when we should restore the host state and return to the
|
* the guest, false when we should restore the host state and return to the
|
||||||
|
@ -412,6 +459,11 @@ static bool __hyp_text fixup_guest_exit(struct kvm_vcpu *vcpu, u64 *exit_code)
|
||||||
if (*exit_code != ARM_EXCEPTION_TRAP)
|
if (*exit_code != ARM_EXCEPTION_TRAP)
|
||||||
goto exit;
|
goto exit;
|
||||||
|
|
||||||
|
if (cpus_have_const_cap(ARM64_WORKAROUND_CAVIUM_TX2_219_TVM) &&
|
||||||
|
kvm_vcpu_trap_get_class(vcpu) == ESR_ELx_EC_SYS64 &&
|
||||||
|
handle_tx2_tvm(vcpu))
|
||||||
|
return true;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We trap the first access to the FP/SIMD to save the host context
|
* We trap the first access to the FP/SIMD to save the host context
|
||||||
* and restore the guest context lazily.
|
* and restore the guest context lazily.
|
||||||
|
|
|
@ -67,10 +67,14 @@ static void __hyp_text __tlb_switch_to_guest_nvhe(struct kvm *kvm,
|
||||||
isb();
|
isb();
|
||||||
}
|
}
|
||||||
|
|
||||||
static hyp_alternate_select(__tlb_switch_to_guest,
|
static void __hyp_text __tlb_switch_to_guest(struct kvm *kvm,
|
||||||
__tlb_switch_to_guest_nvhe,
|
struct tlb_inv_context *cxt)
|
||||||
__tlb_switch_to_guest_vhe,
|
{
|
||||||
ARM64_HAS_VIRT_HOST_EXTN);
|
if (has_vhe())
|
||||||
|
__tlb_switch_to_guest_vhe(kvm, cxt);
|
||||||
|
else
|
||||||
|
__tlb_switch_to_guest_nvhe(kvm, cxt);
|
||||||
|
}
|
||||||
|
|
||||||
static void __hyp_text __tlb_switch_to_host_vhe(struct kvm *kvm,
|
static void __hyp_text __tlb_switch_to_host_vhe(struct kvm *kvm,
|
||||||
struct tlb_inv_context *cxt)
|
struct tlb_inv_context *cxt)
|
||||||
|
@ -98,10 +102,14 @@ static void __hyp_text __tlb_switch_to_host_nvhe(struct kvm *kvm,
|
||||||
write_sysreg(0, vttbr_el2);
|
write_sysreg(0, vttbr_el2);
|
||||||
}
|
}
|
||||||
|
|
||||||
static hyp_alternate_select(__tlb_switch_to_host,
|
static void __hyp_text __tlb_switch_to_host(struct kvm *kvm,
|
||||||
__tlb_switch_to_host_nvhe,
|
struct tlb_inv_context *cxt)
|
||||||
__tlb_switch_to_host_vhe,
|
{
|
||||||
ARM64_HAS_VIRT_HOST_EXTN);
|
if (has_vhe())
|
||||||
|
__tlb_switch_to_host_vhe(kvm, cxt);
|
||||||
|
else
|
||||||
|
__tlb_switch_to_host_nvhe(kvm, cxt);
|
||||||
|
}
|
||||||
|
|
||||||
void __hyp_text __kvm_tlb_flush_vmid_ipa(struct kvm *kvm, phys_addr_t ipa)
|
void __hyp_text __kvm_tlb_flush_vmid_ipa(struct kvm *kvm, phys_addr_t ipa)
|
||||||
{
|
{
|
||||||
|
@ -111,7 +119,7 @@ void __hyp_text __kvm_tlb_flush_vmid_ipa(struct kvm *kvm, phys_addr_t ipa)
|
||||||
|
|
||||||
/* Switch to requested VMID */
|
/* Switch to requested VMID */
|
||||||
kvm = kern_hyp_va(kvm);
|
kvm = kern_hyp_va(kvm);
|
||||||
__tlb_switch_to_guest()(kvm, &cxt);
|
__tlb_switch_to_guest(kvm, &cxt);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We could do so much better if we had the VA as well.
|
* We could do so much better if we had the VA as well.
|
||||||
|
@ -154,7 +162,7 @@ void __hyp_text __kvm_tlb_flush_vmid_ipa(struct kvm *kvm, phys_addr_t ipa)
|
||||||
if (!has_vhe() && icache_is_vpipt())
|
if (!has_vhe() && icache_is_vpipt())
|
||||||
__flush_icache_all();
|
__flush_icache_all();
|
||||||
|
|
||||||
__tlb_switch_to_host()(kvm, &cxt);
|
__tlb_switch_to_host(kvm, &cxt);
|
||||||
}
|
}
|
||||||
|
|
||||||
void __hyp_text __kvm_tlb_flush_vmid(struct kvm *kvm)
|
void __hyp_text __kvm_tlb_flush_vmid(struct kvm *kvm)
|
||||||
|
@ -165,13 +173,13 @@ void __hyp_text __kvm_tlb_flush_vmid(struct kvm *kvm)
|
||||||
|
|
||||||
/* Switch to requested VMID */
|
/* Switch to requested VMID */
|
||||||
kvm = kern_hyp_va(kvm);
|
kvm = kern_hyp_va(kvm);
|
||||||
__tlb_switch_to_guest()(kvm, &cxt);
|
__tlb_switch_to_guest(kvm, &cxt);
|
||||||
|
|
||||||
__tlbi(vmalls12e1is);
|
__tlbi(vmalls12e1is);
|
||||||
dsb(ish);
|
dsb(ish);
|
||||||
isb();
|
isb();
|
||||||
|
|
||||||
__tlb_switch_to_host()(kvm, &cxt);
|
__tlb_switch_to_host(kvm, &cxt);
|
||||||
}
|
}
|
||||||
|
|
||||||
void __hyp_text __kvm_tlb_flush_local_vmid(struct kvm_vcpu *vcpu)
|
void __hyp_text __kvm_tlb_flush_local_vmid(struct kvm_vcpu *vcpu)
|
||||||
|
@ -180,13 +188,13 @@ void __hyp_text __kvm_tlb_flush_local_vmid(struct kvm_vcpu *vcpu)
|
||||||
struct tlb_inv_context cxt;
|
struct tlb_inv_context cxt;
|
||||||
|
|
||||||
/* Switch to requested VMID */
|
/* Switch to requested VMID */
|
||||||
__tlb_switch_to_guest()(kvm, &cxt);
|
__tlb_switch_to_guest(kvm, &cxt);
|
||||||
|
|
||||||
__tlbi(vmalle1);
|
__tlbi(vmalle1);
|
||||||
dsb(nsh);
|
dsb(nsh);
|
||||||
isb();
|
isb();
|
||||||
|
|
||||||
__tlb_switch_to_host()(kvm, &cxt);
|
__tlb_switch_to_host(kvm, &cxt);
|
||||||
}
|
}
|
||||||
|
|
||||||
void __hyp_text __kvm_flush_vm_context(void)
|
void __hyp_text __kvm_flush_vm_context(void)
|
||||||
|
|
|
@ -113,6 +113,15 @@ static inline bool is_ttbr1_addr(unsigned long addr)
|
||||||
return arch_kasan_reset_tag(addr) >= PAGE_OFFSET;
|
return arch_kasan_reset_tag(addr) >= PAGE_OFFSET;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline unsigned long mm_to_pgd_phys(struct mm_struct *mm)
|
||||||
|
{
|
||||||
|
/* Either init_pg_dir or swapper_pg_dir */
|
||||||
|
if (mm == &init_mm)
|
||||||
|
return __pa_symbol(mm->pgd);
|
||||||
|
|
||||||
|
return (unsigned long)virt_to_phys(mm->pgd);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Dump out the page tables associated with 'addr' in the currently active mm.
|
* Dump out the page tables associated with 'addr' in the currently active mm.
|
||||||
*/
|
*/
|
||||||
|
@ -141,7 +150,7 @@ static void show_pte(unsigned long addr)
|
||||||
|
|
||||||
pr_alert("%s pgtable: %luk pages, %llu-bit VAs, pgdp=%016lx\n",
|
pr_alert("%s pgtable: %luk pages, %llu-bit VAs, pgdp=%016lx\n",
|
||||||
mm == &init_mm ? "swapper" : "user", PAGE_SIZE / SZ_1K,
|
mm == &init_mm ? "swapper" : "user", PAGE_SIZE / SZ_1K,
|
||||||
vabits_actual, (unsigned long)virt_to_phys(mm->pgd));
|
vabits_actual, mm_to_pgd_phys(mm));
|
||||||
pgdp = pgd_offset(mm, addr);
|
pgdp = pgd_offset(mm, addr);
|
||||||
pgd = READ_ONCE(*pgdp);
|
pgd = READ_ONCE(*pgdp);
|
||||||
pr_alert("[%016lx] pgd=%016llx", addr, pgd_val(pgd));
|
pr_alert("[%016lx] pgd=%016llx", addr, pgd_val(pgd));
|
||||||
|
@ -259,14 +268,18 @@ static bool __kprobes is_spurious_el1_translation_fault(unsigned long addr,
|
||||||
par = read_sysreg(par_el1);
|
par = read_sysreg(par_el1);
|
||||||
local_irq_restore(flags);
|
local_irq_restore(flags);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If we now have a valid translation, treat the translation fault as
|
||||||
|
* spurious.
|
||||||
|
*/
|
||||||
if (!(par & SYS_PAR_EL1_F))
|
if (!(par & SYS_PAR_EL1_F))
|
||||||
return false;
|
return true;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If we got a different type of fault from the AT instruction,
|
* If we got a different type of fault from the AT instruction,
|
||||||
* treat the translation fault as spurious.
|
* treat the translation fault as spurious.
|
||||||
*/
|
*/
|
||||||
dfsc = FIELD_PREP(SYS_PAR_EL1_FST, par);
|
dfsc = FIELD_GET(SYS_PAR_EL1_FST, par);
|
||||||
return (dfsc & ESR_ELx_FSC_TYPE) != ESR_ELx_FSC_FAULT;
|
return (dfsc & ESR_ELx_FSC_TYPE) != ESR_ELx_FSC_FAULT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue