Linux 5.17-rc4
-----BEGIN PGP SIGNATURE----- iQFSBAABCAA8FiEEq68RxlopcLEwq+PEeb4+QwBBGIYFAmIJZmoeHHRvcnZhbGRz QGxpbnV4LWZvdW5kYXRpb24ub3JnAAoJEHm+PkMAQRiGZdoH/04d8zUhM3Fd3ACB V/ONtOXmkfP2mEJSjb7cXTN1EM2SlOBdSnSsEw09FtGhjHABjOnLho4J5ixk9TH8 zNMNI3EMksM2T9KadHwxv8Vvp1LTrWRzMbws8tOCPA0RkOpikJfClC8CzRAyidJ3 cAbbDH/Jl1GnVZ8bpKmv2auYt+kNVGb0cwJ2W8phCwwkL7sLky5tgYeaGiJEXbJf Tfi/3qtFdmYjD8wtYnCfzjnB7suG5nF7rGEnxCIxNi+IA4DieUv2c1KchuoaBfT9 df364VjKaGT3j+GB07ksQ/8mkwWiRXsCzOXAyMZSZaWjdMD4aAhCTJak5j7/TvGC wtgHPww= =/CMW -----END PGP SIGNATURE----- Merge 5.17-rc4 into tty-next We need the tty/serial fixes in here as well. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
commit
802d00bd77
3
.mailmap
3
.mailmap
@ -80,6 +80,9 @@ Chris Chiu <chris.chiu@canonical.com> <chiu@endlessos.org>
|
|||||||
Christian Borntraeger <borntraeger@linux.ibm.com> <borntraeger@de.ibm.com>
|
Christian Borntraeger <borntraeger@linux.ibm.com> <borntraeger@de.ibm.com>
|
||||||
Christian Borntraeger <borntraeger@linux.ibm.com> <cborntra@de.ibm.com>
|
Christian Borntraeger <borntraeger@linux.ibm.com> <cborntra@de.ibm.com>
|
||||||
Christian Borntraeger <borntraeger@linux.ibm.com> <borntrae@de.ibm.com>
|
Christian Borntraeger <borntraeger@linux.ibm.com> <borntrae@de.ibm.com>
|
||||||
|
Christian Brauner <brauner@kernel.org> <christian@brauner.io>
|
||||||
|
Christian Brauner <brauner@kernel.org> <christian.brauner@canonical.com>
|
||||||
|
Christian Brauner <brauner@kernel.org> <christian.brauner@ubuntu.com>
|
||||||
Christophe Ricard <christophe.ricard@gmail.com>
|
Christophe Ricard <christophe.ricard@gmail.com>
|
||||||
Christoph Hellwig <hch@lst.de>
|
Christoph Hellwig <hch@lst.de>
|
||||||
Colin Ian King <colin.king@intel.com> <colin.king@canonical.com>
|
Colin Ian King <colin.king@intel.com> <colin.king@canonical.com>
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
What: /sys/bus/platform/drivers/aspeed-uart-routing/*/uart*
|
What: /sys/bus/platform/drivers/aspeed-uart-routing/\*/uart\*
|
||||||
Date: September 2021
|
Date: September 2021
|
||||||
Contact: Oskar Senft <osk@google.com>
|
Contact: Oskar Senft <osk@google.com>
|
||||||
Chia-Wei Wang <chiawei_wang@aspeedtech.com>
|
Chia-Wei Wang <chiawei_wang@aspeedtech.com>
|
||||||
@ -9,7 +9,7 @@ Description: Selects the RX source of the UARTx device.
|
|||||||
depends on the selected file.
|
depends on the selected file.
|
||||||
|
|
||||||
e.g.
|
e.g.
|
||||||
cat /sys/bus/platform/drivers/aspeed-uart-routing/*.uart_routing/uart1
|
cat /sys/bus/platform/drivers/aspeed-uart-routing/\*.uart_routing/uart1
|
||||||
[io1] io2 io3 io4 uart2 uart3 uart4 io6
|
[io1] io2 io3 io4 uart2 uart3 uart4 io6
|
||||||
|
|
||||||
In this case, UART1 gets its input from IO1 (physical serial port 1).
|
In this case, UART1 gets its input from IO1 (physical serial port 1).
|
||||||
@ -17,7 +17,7 @@ Description: Selects the RX source of the UARTx device.
|
|||||||
Users: OpenBMC. Proposed changes should be mailed to
|
Users: OpenBMC. Proposed changes should be mailed to
|
||||||
openbmc@lists.ozlabs.org
|
openbmc@lists.ozlabs.org
|
||||||
|
|
||||||
What: /sys/bus/platform/drivers/aspeed-uart-routing/*/io*
|
What: /sys/bus/platform/drivers/aspeed-uart-routing/\*/io\*
|
||||||
Date: September 2021
|
Date: September 2021
|
||||||
Contact: Oskar Senft <osk@google.com>
|
Contact: Oskar Senft <osk@google.com>
|
||||||
Chia-Wei Wang <chiawei_wang@aspeedtech.com>
|
Chia-Wei Wang <chiawei_wang@aspeedtech.com>
|
||||||
|
@ -100,6 +100,8 @@ stable kernels.
|
|||||||
+----------------+-----------------+-----------------+-----------------------------+
|
+----------------+-----------------+-----------------+-----------------------------+
|
||||||
| ARM | Cortex-A510 | #2051678 | ARM64_ERRATUM_2051678 |
|
| ARM | Cortex-A510 | #2051678 | ARM64_ERRATUM_2051678 |
|
||||||
+----------------+-----------------+-----------------+-----------------------------+
|
+----------------+-----------------+-----------------+-----------------------------+
|
||||||
|
| ARM | Cortex-A510 | #2077057 | ARM64_ERRATUM_2077057 |
|
||||||
|
+----------------+-----------------+-----------------+-----------------------------+
|
||||||
| ARM | Cortex-A710 | #2119858 | ARM64_ERRATUM_2119858 |
|
| ARM | Cortex-A710 | #2119858 | ARM64_ERRATUM_2119858 |
|
||||||
+----------------+-----------------+-----------------+-----------------------------+
|
+----------------+-----------------+-----------------+-----------------------------+
|
||||||
| ARM | Cortex-A710 | #2054223 | ARM64_ERRATUM_2054223 |
|
| ARM | Cortex-A710 | #2054223 | ARM64_ERRATUM_2054223 |
|
||||||
|
@ -7,6 +7,14 @@ directory. These are intended to be small tests to exercise individual code
|
|||||||
paths in the kernel. Tests are intended to be run after building, installing
|
paths in the kernel. Tests are intended to be run after building, installing
|
||||||
and booting a kernel.
|
and booting a kernel.
|
||||||
|
|
||||||
|
Kselftest from mainline can be run on older stable kernels. Running tests
|
||||||
|
from mainline offers the best coverage. Several test rings run mainline
|
||||||
|
kselftest suite on stable releases. The reason is that when a new test
|
||||||
|
gets added to test existing code to regression test a bug, we should be
|
||||||
|
able to run that test on an older kernel. Hence, it is important to keep
|
||||||
|
code that can still test an older kernel and make sure it skips the test
|
||||||
|
gracefully on newer releases.
|
||||||
|
|
||||||
You can find additional information on Kselftest framework, how to
|
You can find additional information on Kselftest framework, how to
|
||||||
write new tests using the framework on Kselftest wiki:
|
write new tests using the framework on Kselftest wiki:
|
||||||
|
|
||||||
|
@ -242,7 +242,7 @@ example:
|
|||||||
|
|
||||||
int rectangle_area(struct shape *this)
|
int rectangle_area(struct shape *this)
|
||||||
{
|
{
|
||||||
struct rectangle *self = container_of(this, struct shape, parent);
|
struct rectangle *self = container_of(this, struct rectangle, parent);
|
||||||
|
|
||||||
return self->length * self->width;
|
return self->length * self->width;
|
||||||
};
|
};
|
||||||
|
@ -119,6 +119,9 @@ Boards (incomplete list of examples):
|
|||||||
- OMAP3 BeagleBoard : Low cost community board
|
- OMAP3 BeagleBoard : Low cost community board
|
||||||
compatible = "ti,omap3-beagle", "ti,omap3430", "ti,omap3"
|
compatible = "ti,omap3-beagle", "ti,omap3430", "ti,omap3"
|
||||||
|
|
||||||
|
- OMAP3 BeagleBoard A to B4 : Early BeagleBoard revisions A to B4 with a timer quirk
|
||||||
|
compatible = "ti,omap3-beagle-ab4", "ti,omap3-beagle", "ti,omap3430", "ti,omap3"
|
||||||
|
|
||||||
- OMAP3 Tobi with Overo : Commercial expansion board with daughter board
|
- OMAP3 Tobi with Overo : Commercial expansion board with daughter board
|
||||||
compatible = "gumstix,omap3-overo-tobi", "gumstix,omap3-overo", "ti,omap3430", "ti,omap3"
|
compatible = "gumstix,omap3-overo-tobi", "gumstix,omap3-overo", "ti,omap3430", "ti,omap3"
|
||||||
|
|
||||||
|
@ -35,6 +35,10 @@ description:
|
|||||||
contains a specific memory layout, which is documented in chapter 8 of the
|
contains a specific memory layout, which is documented in chapter 8 of the
|
||||||
SiFive U5 Coreplex Series Manual <https://static.dev.sifive.com/U54-MC-RVCoreIP.pdf>.
|
SiFive U5 Coreplex Series Manual <https://static.dev.sifive.com/U54-MC-RVCoreIP.pdf>.
|
||||||
|
|
||||||
|
The thead,c900-plic is different from sifive,plic-1.0.0 in opensbi, the
|
||||||
|
T-HEAD PLIC implementation requires setting a delegation bit to allow access
|
||||||
|
from S-mode. So add thead,c900-plic to distinguish them.
|
||||||
|
|
||||||
maintainers:
|
maintainers:
|
||||||
- Sagar Kadam <sagar.kadam@sifive.com>
|
- Sagar Kadam <sagar.kadam@sifive.com>
|
||||||
- Paul Walmsley <paul.walmsley@sifive.com>
|
- Paul Walmsley <paul.walmsley@sifive.com>
|
||||||
@ -42,12 +46,17 @@ maintainers:
|
|||||||
|
|
||||||
properties:
|
properties:
|
||||||
compatible:
|
compatible:
|
||||||
items:
|
oneOf:
|
||||||
- enum:
|
- items:
|
||||||
- sifive,fu540-c000-plic
|
- enum:
|
||||||
- starfive,jh7100-plic
|
- sifive,fu540-c000-plic
|
||||||
- canaan,k210-plic
|
- starfive,jh7100-plic
|
||||||
- const: sifive,plic-1.0.0
|
- canaan,k210-plic
|
||||||
|
- const: sifive,plic-1.0.0
|
||||||
|
- items:
|
||||||
|
- enum:
|
||||||
|
- allwinner,sun20i-d1-plic
|
||||||
|
- const: thead,c900-plic
|
||||||
|
|
||||||
reg:
|
reg:
|
||||||
maxItems: 1
|
maxItems: 1
|
||||||
|
@ -107,6 +107,10 @@ properties:
|
|||||||
- const: imem
|
- const: imem
|
||||||
- const: config
|
- const: config
|
||||||
|
|
||||||
|
qcom,qmp:
|
||||||
|
$ref: /schemas/types.yaml#/definitions/phandle
|
||||||
|
description: phandle to the AOSS side-channel message RAM
|
||||||
|
|
||||||
qcom,smem-states:
|
qcom,smem-states:
|
||||||
$ref: /schemas/types.yaml#/definitions/phandle-array
|
$ref: /schemas/types.yaml#/definitions/phandle-array
|
||||||
description: State bits used in by the AP to signal the modem.
|
description: State bits used in by the AP to signal the modem.
|
||||||
@ -222,6 +226,8 @@ examples:
|
|||||||
"imem",
|
"imem",
|
||||||
"config";
|
"config";
|
||||||
|
|
||||||
|
qcom,qmp = <&aoss_qmp>;
|
||||||
|
|
||||||
qcom,smem-states = <&ipa_smp2p_out 0>,
|
qcom,smem-states = <&ipa_smp2p_out 0>,
|
||||||
<&ipa_smp2p_out 1>;
|
<&ipa_smp2p_out 1>;
|
||||||
qcom,smem-state-names = "ipa-clock-enabled-valid",
|
qcom,smem-state-names = "ipa-clock-enabled-valid",
|
||||||
|
@ -23,8 +23,9 @@ properties:
|
|||||||
minItems: 1
|
minItems: 1
|
||||||
maxItems: 256
|
maxItems: 256
|
||||||
items:
|
items:
|
||||||
minimum: 0
|
items:
|
||||||
maximum: 256
|
- minimum: 0
|
||||||
|
maximum: 256
|
||||||
description:
|
description:
|
||||||
Chip select used by the device.
|
Chip select used by the device.
|
||||||
|
|
||||||
|
@ -462,6 +462,10 @@ operation table looks like the following::
|
|||||||
struct iov_iter *iter,
|
struct iov_iter *iter,
|
||||||
netfs_io_terminated_t term_func,
|
netfs_io_terminated_t term_func,
|
||||||
void *term_func_priv);
|
void *term_func_priv);
|
||||||
|
|
||||||
|
int (*query_occupancy)(struct netfs_cache_resources *cres,
|
||||||
|
loff_t start, size_t len, size_t granularity,
|
||||||
|
loff_t *_data_start, size_t *_data_len);
|
||||||
};
|
};
|
||||||
|
|
||||||
With a termination handler function pointer::
|
With a termination handler function pointer::
|
||||||
@ -536,6 +540,18 @@ The methods defined in the table are:
|
|||||||
indicating whether the termination is definitely happening in the caller's
|
indicating whether the termination is definitely happening in the caller's
|
||||||
context.
|
context.
|
||||||
|
|
||||||
|
* ``query_occupancy()``
|
||||||
|
|
||||||
|
[Required] Called to find out where the next piece of data is within a
|
||||||
|
particular region of the cache. The start and length of the region to be
|
||||||
|
queried are passed in, along with the granularity to which the answer needs
|
||||||
|
to be aligned. The function passes back the start and length of the data,
|
||||||
|
if any, available within that region. Note that there may be a hole at the
|
||||||
|
front.
|
||||||
|
|
||||||
|
It returns 0 if some data was found, -ENODATA if there was no usable data
|
||||||
|
within the region or -ENOBUFS if there is no caching on this file.
|
||||||
|
|
||||||
Note that these methods are passed a pointer to the cache resource structure,
|
Note that these methods are passed a pointer to the cache resource structure,
|
||||||
not the read request structure as they could be used in other situations where
|
not the read request structure as they could be used in other situations where
|
||||||
there isn't a read request structure as well, such as writing dirty data to the
|
there isn't a read request structure as well, such as writing dirty data to the
|
||||||
|
@ -300,30 +300,6 @@ Contact: Daniel Vetter, Noralf Tronnes
|
|||||||
|
|
||||||
Level: Advanced
|
Level: Advanced
|
||||||
|
|
||||||
Garbage collect fbdev scrolling acceleration
|
|
||||||
--------------------------------------------
|
|
||||||
|
|
||||||
Scroll acceleration has been disabled in fbcon. Now it works as the old
|
|
||||||
SCROLL_REDRAW mode. A ton of code was removed in fbcon.c and the hook bmove was
|
|
||||||
removed from fbcon_ops.
|
|
||||||
Remaining tasks:
|
|
||||||
|
|
||||||
- a bunch of the hooks in fbcon_ops could be removed or simplified by calling
|
|
||||||
directly instead of the function table (with a switch on p->rotate)
|
|
||||||
|
|
||||||
- fb_copyarea is unused after this, and can be deleted from all drivers
|
|
||||||
|
|
||||||
- after that, fb_copyarea can be deleted from fb_ops in include/linux/fb.h as
|
|
||||||
well as cfb_copyarea
|
|
||||||
|
|
||||||
Note that not all acceleration code can be deleted, since clearing and cursor
|
|
||||||
support is still accelerated, which might be good candidates for further
|
|
||||||
deletion projects.
|
|
||||||
|
|
||||||
Contact: Daniel Vetter
|
|
||||||
|
|
||||||
Level: Intermediate
|
|
||||||
|
|
||||||
idr_init_base()
|
idr_init_base()
|
||||||
---------------
|
---------------
|
||||||
|
|
||||||
|
@ -115,6 +115,7 @@ Code Seq# Include File Comments
|
|||||||
'B' 00-1F linux/cciss_ioctl.h conflict!
|
'B' 00-1F linux/cciss_ioctl.h conflict!
|
||||||
'B' 00-0F include/linux/pmu.h conflict!
|
'B' 00-0F include/linux/pmu.h conflict!
|
||||||
'B' C0-FF advanced bbus <mailto:maassen@uni-freiburg.de>
|
'B' C0-FF advanced bbus <mailto:maassen@uni-freiburg.de>
|
||||||
|
'B' 00-0F xen/xenbus_dev.h conflict!
|
||||||
'C' all linux/soundcard.h conflict!
|
'C' all linux/soundcard.h conflict!
|
||||||
'C' 01-2F linux/capi.h conflict!
|
'C' 01-2F linux/capi.h conflict!
|
||||||
'C' F0-FF drivers/net/wan/cosa.h conflict!
|
'C' F0-FF drivers/net/wan/cosa.h conflict!
|
||||||
@ -134,6 +135,7 @@ Code Seq# Include File Comments
|
|||||||
'F' 80-8F linux/arcfb.h conflict!
|
'F' 80-8F linux/arcfb.h conflict!
|
||||||
'F' DD video/sstfb.h conflict!
|
'F' DD video/sstfb.h conflict!
|
||||||
'G' 00-3F drivers/misc/sgi-gru/grulib.h conflict!
|
'G' 00-3F drivers/misc/sgi-gru/grulib.h conflict!
|
||||||
|
'G' 00-0F xen/gntalloc.h, xen/gntdev.h conflict!
|
||||||
'H' 00-7F linux/hiddev.h conflict!
|
'H' 00-7F linux/hiddev.h conflict!
|
||||||
'H' 00-0F linux/hidraw.h conflict!
|
'H' 00-0F linux/hidraw.h conflict!
|
||||||
'H' 01 linux/mei.h conflict!
|
'H' 01 linux/mei.h conflict!
|
||||||
@ -176,6 +178,7 @@ Code Seq# Include File Comments
|
|||||||
'P' 60-6F sound/sscape_ioctl.h conflict!
|
'P' 60-6F sound/sscape_ioctl.h conflict!
|
||||||
'P' 00-0F drivers/usb/class/usblp.c conflict!
|
'P' 00-0F drivers/usb/class/usblp.c conflict!
|
||||||
'P' 01-09 drivers/misc/pci_endpoint_test.c conflict!
|
'P' 01-09 drivers/misc/pci_endpoint_test.c conflict!
|
||||||
|
'P' 00-0F xen/privcmd.h conflict!
|
||||||
'Q' all linux/soundcard.h
|
'Q' all linux/soundcard.h
|
||||||
'R' 00-1F linux/random.h conflict!
|
'R' 00-1F linux/random.h conflict!
|
||||||
'R' 01 linux/rfkill.h conflict!
|
'R' 01 linux/rfkill.h conflict!
|
||||||
|
77
MAINTAINERS
77
MAINTAINERS
@ -1620,6 +1620,7 @@ M: Olof Johansson <olof@lixom.net>
|
|||||||
M: soc@kernel.org
|
M: soc@kernel.org
|
||||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
C: irc://irc.libera.chat/armlinux
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc.git
|
||||||
F: arch/arm/boot/dts/Makefile
|
F: arch/arm/boot/dts/Makefile
|
||||||
F: arch/arm64/boot/dts/Makefile
|
F: arch/arm64/boot/dts/Makefile
|
||||||
@ -1627,6 +1628,7 @@ F: arch/arm64/boot/dts/Makefile
|
|||||||
ARM SUB-ARCHITECTURES
|
ARM SUB-ARCHITECTURES
|
||||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
C: irc://irc.libera.chat/armlinux
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc.git
|
||||||
F: arch/arm/mach-*/
|
F: arch/arm/mach-*/
|
||||||
F: arch/arm/plat-*/
|
F: arch/arm/plat-*/
|
||||||
@ -1780,6 +1782,7 @@ F: drivers/irqchip/irq-apple-aic.c
|
|||||||
F: drivers/mailbox/apple-mailbox.c
|
F: drivers/mailbox/apple-mailbox.c
|
||||||
F: drivers/pinctrl/pinctrl-apple-gpio.c
|
F: drivers/pinctrl/pinctrl-apple-gpio.c
|
||||||
F: drivers/soc/apple/*
|
F: drivers/soc/apple/*
|
||||||
|
F: drivers/watchdog/apple_wdt.c
|
||||||
F: include/dt-bindings/interrupt-controller/apple-aic.h
|
F: include/dt-bindings/interrupt-controller/apple-aic.h
|
||||||
F: include/dt-bindings/pinctrl/apple.h
|
F: include/dt-bindings/pinctrl/apple.h
|
||||||
F: include/linux/apple-mailbox.h
|
F: include/linux/apple-mailbox.h
|
||||||
@ -2570,10 +2573,13 @@ N: rockchip
|
|||||||
|
|
||||||
ARM/SAMSUNG S3C, S5P AND EXYNOS ARM ARCHITECTURES
|
ARM/SAMSUNG S3C, S5P AND EXYNOS ARM ARCHITECTURES
|
||||||
M: Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
|
M: Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
|
||||||
|
R: Alim Akhtar <alim.akhtar@samsung.com>
|
||||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
L: linux-samsung-soc@vger.kernel.org
|
L: linux-samsung-soc@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
C: irc://irc.libera.chat/linux-exynos
|
||||||
Q: https://patchwork.kernel.org/project/linux-samsung-soc/list/
|
Q: https://patchwork.kernel.org/project/linux-samsung-soc/list/
|
||||||
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/krzk/linux.git
|
||||||
F: Documentation/arm/samsung/
|
F: Documentation/arm/samsung/
|
||||||
F: Documentation/devicetree/bindings/arm/samsung/
|
F: Documentation/devicetree/bindings/arm/samsung/
|
||||||
F: Documentation/devicetree/bindings/power/pd-samsung.yaml
|
F: Documentation/devicetree/bindings/power/pd-samsung.yaml
|
||||||
@ -4157,9 +4163,8 @@ N: csky
|
|||||||
K: csky
|
K: csky
|
||||||
|
|
||||||
CA8210 IEEE-802.15.4 RADIO DRIVER
|
CA8210 IEEE-802.15.4 RADIO DRIVER
|
||||||
M: Harry Morris <h.morris@cascoda.com>
|
|
||||||
L: linux-wpan@vger.kernel.org
|
L: linux-wpan@vger.kernel.org
|
||||||
S: Maintained
|
S: Orphan
|
||||||
W: https://github.com/Cascoda/ca8210-linux.git
|
W: https://github.com/Cascoda/ca8210-linux.git
|
||||||
F: Documentation/devicetree/bindings/net/ieee802154/ca8210.txt
|
F: Documentation/devicetree/bindings/net/ieee802154/ca8210.txt
|
||||||
F: drivers/net/ieee802154/ca8210.c
|
F: drivers/net/ieee802154/ca8210.c
|
||||||
@ -5773,7 +5778,7 @@ F: tools/testing/selftests/dma/
|
|||||||
|
|
||||||
DMA-BUF HEAPS FRAMEWORK
|
DMA-BUF HEAPS FRAMEWORK
|
||||||
M: Sumit Semwal <sumit.semwal@linaro.org>
|
M: Sumit Semwal <sumit.semwal@linaro.org>
|
||||||
R: Benjamin Gaignard <benjamin.gaignard@linaro.org>
|
R: Benjamin Gaignard <benjamin.gaignard@collabora.com>
|
||||||
R: Liam Mark <lmark@codeaurora.org>
|
R: Liam Mark <lmark@codeaurora.org>
|
||||||
R: Laura Abbott <labbott@redhat.com>
|
R: Laura Abbott <labbott@redhat.com>
|
||||||
R: Brian Starkey <Brian.Starkey@arm.com>
|
R: Brian Starkey <Brian.Starkey@arm.com>
|
||||||
@ -6503,7 +6508,7 @@ F: Documentation/devicetree/bindings/display/rockchip/
|
|||||||
F: drivers/gpu/drm/rockchip/
|
F: drivers/gpu/drm/rockchip/
|
||||||
|
|
||||||
DRM DRIVERS FOR STI
|
DRM DRIVERS FOR STI
|
||||||
M: Benjamin Gaignard <benjamin.gaignard@linaro.org>
|
M: Alain Volmat <alain.volmat@foss.st.com>
|
||||||
L: dri-devel@lists.freedesktop.org
|
L: dri-devel@lists.freedesktop.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
T: git git://anongit.freedesktop.org/drm/drm-misc
|
T: git git://anongit.freedesktop.org/drm/drm-misc
|
||||||
@ -6512,8 +6517,8 @@ F: drivers/gpu/drm/sti
|
|||||||
|
|
||||||
DRM DRIVERS FOR STM
|
DRM DRIVERS FOR STM
|
||||||
M: Yannick Fertre <yannick.fertre@foss.st.com>
|
M: Yannick Fertre <yannick.fertre@foss.st.com>
|
||||||
|
M: Raphael Gallais-Pou <raphael.gallais-pou@foss.st.com>
|
||||||
M: Philippe Cornu <philippe.cornu@foss.st.com>
|
M: Philippe Cornu <philippe.cornu@foss.st.com>
|
||||||
M: Benjamin Gaignard <benjamin.gaignard@linaro.org>
|
|
||||||
L: dri-devel@lists.freedesktop.org
|
L: dri-devel@lists.freedesktop.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
T: git git://anongit.freedesktop.org/drm/drm-misc
|
T: git git://anongit.freedesktop.org/drm/drm-misc
|
||||||
@ -7576,6 +7581,12 @@ S: Maintained
|
|||||||
W: http://floatingpoint.sourceforge.net/emulator/index.html
|
W: http://floatingpoint.sourceforge.net/emulator/index.html
|
||||||
F: arch/x86/math-emu/
|
F: arch/x86/math-emu/
|
||||||
|
|
||||||
|
FRAMEBUFFER CORE
|
||||||
|
M: Daniel Vetter <daniel@ffwll.ch>
|
||||||
|
F: drivers/video/fbdev/core/
|
||||||
|
S: Odd Fixes
|
||||||
|
T: git git://anongit.freedesktop.org/drm/drm-misc
|
||||||
|
|
||||||
FRAMEBUFFER LAYER
|
FRAMEBUFFER LAYER
|
||||||
M: Helge Deller <deller@gmx.de>
|
M: Helge Deller <deller@gmx.de>
|
||||||
L: linux-fbdev@vger.kernel.org
|
L: linux-fbdev@vger.kernel.org
|
||||||
@ -10880,6 +10891,12 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git
|
|||||||
F: drivers/ata/pata_arasan_cf.c
|
F: drivers/ata/pata_arasan_cf.c
|
||||||
F: include/linux/pata_arasan_cf_data.h
|
F: include/linux/pata_arasan_cf_data.h
|
||||||
|
|
||||||
|
LIBATA PATA DRIVERS
|
||||||
|
R: Sergey Shtylyov <s.shtylyov@omp.ru>
|
||||||
|
L: linux-ide@vger.kernel.org
|
||||||
|
F: drivers/ata/ata_*.c
|
||||||
|
F: drivers/ata/pata_*.c
|
||||||
|
|
||||||
LIBATA PATA FARADAY FTIDE010 AND GEMINI SATA BRIDGE DRIVERS
|
LIBATA PATA FARADAY FTIDE010 AND GEMINI SATA BRIDGE DRIVERS
|
||||||
M: Linus Walleij <linus.walleij@linaro.org>
|
M: Linus Walleij <linus.walleij@linaro.org>
|
||||||
L: linux-ide@vger.kernel.org
|
L: linux-ide@vger.kernel.org
|
||||||
@ -12400,7 +12417,7 @@ F: include/uapi/linux/membarrier.h
|
|||||||
F: kernel/sched/membarrier.c
|
F: kernel/sched/membarrier.c
|
||||||
|
|
||||||
MEMBLOCK
|
MEMBLOCK
|
||||||
M: Mike Rapoport <rppt@linux.ibm.com>
|
M: Mike Rapoport <rppt@kernel.org>
|
||||||
L: linux-mm@kvack.org
|
L: linux-mm@kvack.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: Documentation/core-api/boot-time-mm.rst
|
F: Documentation/core-api/boot-time-mm.rst
|
||||||
@ -13298,8 +13315,8 @@ W: http://www.iptables.org/
|
|||||||
W: http://www.nftables.org/
|
W: http://www.nftables.org/
|
||||||
Q: http://patchwork.ozlabs.org/project/netfilter-devel/list/
|
Q: http://patchwork.ozlabs.org/project/netfilter-devel/list/
|
||||||
C: irc://irc.libera.chat/netfilter
|
C: irc://irc.libera.chat/netfilter
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/netfilter/nf.git
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf-next.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/netfilter/nf-next.git
|
||||||
F: include/linux/netfilter*
|
F: include/linux/netfilter*
|
||||||
F: include/linux/netfilter/
|
F: include/linux/netfilter/
|
||||||
F: include/net/netfilter/
|
F: include/net/netfilter/
|
||||||
@ -13566,7 +13583,7 @@ F: tools/testing/selftests/nci/
|
|||||||
|
|
||||||
NFS, SUNRPC, AND LOCKD CLIENTS
|
NFS, SUNRPC, AND LOCKD CLIENTS
|
||||||
M: Trond Myklebust <trond.myklebust@hammerspace.com>
|
M: Trond Myklebust <trond.myklebust@hammerspace.com>
|
||||||
M: Anna Schumaker <anna.schumaker@netapp.com>
|
M: Anna Schumaker <anna@kernel.org>
|
||||||
L: linux-nfs@vger.kernel.org
|
L: linux-nfs@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
W: http://client.linux-nfs.org
|
W: http://client.linux-nfs.org
|
||||||
@ -14384,6 +14401,7 @@ M: Rob Herring <robh+dt@kernel.org>
|
|||||||
M: Frank Rowand <frowand.list@gmail.com>
|
M: Frank Rowand <frowand.list@gmail.com>
|
||||||
L: devicetree@vger.kernel.org
|
L: devicetree@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
C: irc://irc.libera.chat/devicetree
|
||||||
W: http://www.devicetree.org/
|
W: http://www.devicetree.org/
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git
|
||||||
F: Documentation/ABI/testing/sysfs-firmware-ofw
|
F: Documentation/ABI/testing/sysfs-firmware-ofw
|
||||||
@ -14395,6 +14413,7 @@ OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS
|
|||||||
M: Rob Herring <robh+dt@kernel.org>
|
M: Rob Herring <robh+dt@kernel.org>
|
||||||
L: devicetree@vger.kernel.org
|
L: devicetree@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
C: irc://irc.libera.chat/devicetree
|
||||||
Q: http://patchwork.ozlabs.org/project/devicetree-bindings/list/
|
Q: http://patchwork.ozlabs.org/project/devicetree-bindings/list/
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git
|
||||||
F: Documentation/devicetree/
|
F: Documentation/devicetree/
|
||||||
@ -15285,9 +15304,11 @@ PIN CONTROLLER - SAMSUNG
|
|||||||
M: Tomasz Figa <tomasz.figa@gmail.com>
|
M: Tomasz Figa <tomasz.figa@gmail.com>
|
||||||
M: Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
|
M: Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
|
||||||
M: Sylwester Nawrocki <s.nawrocki@samsung.com>
|
M: Sylwester Nawrocki <s.nawrocki@samsung.com>
|
||||||
|
R: Alim Akhtar <alim.akhtar@samsung.com>
|
||||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
L: linux-samsung-soc@vger.kernel.org
|
L: linux-samsung-soc@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
C: irc://irc.libera.chat/linux-exynos
|
||||||
Q: https://patchwork.kernel.org/project/linux-samsung-soc/list/
|
Q: https://patchwork.kernel.org/project/linux-samsung-soc/list/
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/pinctrl/samsung.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/pinctrl/samsung.git
|
||||||
F: Documentation/devicetree/bindings/pinctrl/samsung-pinctrl.txt
|
F: Documentation/devicetree/bindings/pinctrl/samsung-pinctrl.txt
|
||||||
@ -16469,6 +16490,14 @@ F: Documentation/devicetree/bindings/i2c/renesas,rmobile-iic.yaml
|
|||||||
F: drivers/i2c/busses/i2c-rcar.c
|
F: drivers/i2c/busses/i2c-rcar.c
|
||||||
F: drivers/i2c/busses/i2c-sh_mobile.c
|
F: drivers/i2c/busses/i2c-sh_mobile.c
|
||||||
|
|
||||||
|
RENESAS R-CAR SATA DRIVER
|
||||||
|
R: Sergey Shtylyov <s.shtylyov@omp.ru>
|
||||||
|
S: Supported
|
||||||
|
L: linux-ide@vger.kernel.org
|
||||||
|
L: linux-renesas-soc@vger.kernel.org
|
||||||
|
F: Documentation/devicetree/bindings/ata/renesas,rcar-sata.yaml
|
||||||
|
F: drivers/ata/sata_rcar.c
|
||||||
|
|
||||||
RENESAS R-CAR THERMAL DRIVERS
|
RENESAS R-CAR THERMAL DRIVERS
|
||||||
M: Niklas Söderlund <niklas.soderlund@ragnatech.se>
|
M: Niklas Söderlund <niklas.soderlund@ragnatech.se>
|
||||||
L: linux-renesas-soc@vger.kernel.org
|
L: linux-renesas-soc@vger.kernel.org
|
||||||
@ -16804,8 +16833,8 @@ F: drivers/video/fbdev/savage/
|
|||||||
S390
|
S390
|
||||||
M: Heiko Carstens <hca@linux.ibm.com>
|
M: Heiko Carstens <hca@linux.ibm.com>
|
||||||
M: Vasily Gorbik <gor@linux.ibm.com>
|
M: Vasily Gorbik <gor@linux.ibm.com>
|
||||||
M: Christian Borntraeger <borntraeger@linux.ibm.com>
|
M: Alexander Gordeev <agordeev@linux.ibm.com>
|
||||||
R: Alexander Gordeev <agordeev@linux.ibm.com>
|
R: Christian Borntraeger <borntraeger@linux.ibm.com>
|
||||||
R: Sven Schnelle <svens@linux.ibm.com>
|
R: Sven Schnelle <svens@linux.ibm.com>
|
||||||
L: linux-s390@vger.kernel.org
|
L: linux-s390@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
@ -17076,6 +17105,7 @@ SAMSUNG SOC CLOCK DRIVERS
|
|||||||
M: Sylwester Nawrocki <s.nawrocki@samsung.com>
|
M: Sylwester Nawrocki <s.nawrocki@samsung.com>
|
||||||
M: Tomasz Figa <tomasz.figa@gmail.com>
|
M: Tomasz Figa <tomasz.figa@gmail.com>
|
||||||
M: Chanwoo Choi <cw00.choi@samsung.com>
|
M: Chanwoo Choi <cw00.choi@samsung.com>
|
||||||
|
R: Alim Akhtar <alim.akhtar@samsung.com>
|
||||||
L: linux-samsung-soc@vger.kernel.org
|
L: linux-samsung-soc@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/snawrocki/clk.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/snawrocki/clk.git
|
||||||
@ -17712,6 +17742,21 @@ S: Maintained
|
|||||||
W: http://www.winischhofer.at/linuxsisusbvga.shtml
|
W: http://www.winischhofer.at/linuxsisusbvga.shtml
|
||||||
F: drivers/usb/misc/sisusbvga/
|
F: drivers/usb/misc/sisusbvga/
|
||||||
|
|
||||||
|
SL28 CPLD MFD DRIVER
|
||||||
|
M: Michael Walle <michael@walle.cc>
|
||||||
|
S: Maintained
|
||||||
|
F: Documentation/devicetree/bindings/gpio/kontron,sl28cpld-gpio.yaml
|
||||||
|
F: Documentation/devicetree/bindings/hwmon/kontron,sl28cpld-hwmon.yaml
|
||||||
|
F: Documentation/devicetree/bindings/interrupt-controller/kontron,sl28cpld-intc.yaml
|
||||||
|
F: Documentation/devicetree/bindings/mfd/kontron,sl28cpld.yaml
|
||||||
|
F: Documentation/devicetree/bindings/pwm/kontron,sl28cpld-pwm.yaml
|
||||||
|
F: Documentation/devicetree/bindings/watchdog/kontron,sl28cpld-wdt.yaml
|
||||||
|
F: drivers/gpio/gpio-sl28cpld.c
|
||||||
|
F: drivers/hwmon/sl28cpld-hwmon.c
|
||||||
|
F: drivers/irqchip/irq-sl28cpld.c
|
||||||
|
F: drivers/pwm/pwm-sl28cpld.c
|
||||||
|
F: drivers/watchdog/sl28cpld_wdt.c
|
||||||
|
|
||||||
SLAB ALLOCATOR
|
SLAB ALLOCATOR
|
||||||
M: Christoph Lameter <cl@linux.com>
|
M: Christoph Lameter <cl@linux.com>
|
||||||
M: Pekka Enberg <penberg@kernel.org>
|
M: Pekka Enberg <penberg@kernel.org>
|
||||||
@ -18428,7 +18473,7 @@ F: Documentation/devicetree/bindings/sound/st,sti-asoc-card.txt
|
|||||||
F: sound/soc/sti/
|
F: sound/soc/sti/
|
||||||
|
|
||||||
STI CEC DRIVER
|
STI CEC DRIVER
|
||||||
M: Benjamin Gaignard <benjamin.gaignard@linaro.org>
|
M: Alain Volmat <alain.volmat@foss.st.com>
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: Documentation/devicetree/bindings/media/stih-cec.txt
|
F: Documentation/devicetree/bindings/media/stih-cec.txt
|
||||||
F: drivers/media/cec/platform/sti/
|
F: drivers/media/cec/platform/sti/
|
||||||
@ -19582,6 +19627,14 @@ F: Documentation/trace/timerlat-tracer.rst
|
|||||||
F: Documentation/trace/hwlat_detector.rst
|
F: Documentation/trace/hwlat_detector.rst
|
||||||
F: arch/*/kernel/trace.c
|
F: arch/*/kernel/trace.c
|
||||||
|
|
||||||
|
Real-time Linux Analysis (RTLA) tools
|
||||||
|
M: Daniel Bristot de Oliveira <bristot@kernel.org>
|
||||||
|
M: Steven Rostedt <rostedt@goodmis.org>
|
||||||
|
L: linux-trace-devel@vger.kernel.org
|
||||||
|
S: Maintained
|
||||||
|
F: Documentation/tools/rtla/
|
||||||
|
F: tools/tracing/rtla/
|
||||||
|
|
||||||
TRADITIONAL CHINESE DOCUMENTATION
|
TRADITIONAL CHINESE DOCUMENTATION
|
||||||
M: Hu Haowen <src.res@email.cn>
|
M: Hu Haowen <src.res@email.cn>
|
||||||
L: linux-doc-tw-discuss@lists.sourceforge.net
|
L: linux-doc-tw-discuss@lists.sourceforge.net
|
||||||
|
4
Makefile
4
Makefile
@ -2,8 +2,8 @@
|
|||||||
VERSION = 5
|
VERSION = 5
|
||||||
PATCHLEVEL = 17
|
PATCHLEVEL = 17
|
||||||
SUBLEVEL = 0
|
SUBLEVEL = 0
|
||||||
EXTRAVERSION = -rc2
|
EXTRAVERSION = -rc4
|
||||||
NAME = Gobble Gobble
|
NAME = Superb Owl
|
||||||
|
|
||||||
# *DOCUMENTATION*
|
# *DOCUMENTATION*
|
||||||
# To see a list of typical targets execute "make help"
|
# To see a list of typical targets execute "make help"
|
||||||
|
@ -806,6 +806,7 @@ dtb-$(CONFIG_ARCH_OMAP3) += \
|
|||||||
logicpd-som-lv-37xx-devkit.dtb \
|
logicpd-som-lv-37xx-devkit.dtb \
|
||||||
omap3430-sdp.dtb \
|
omap3430-sdp.dtb \
|
||||||
omap3-beagle.dtb \
|
omap3-beagle.dtb \
|
||||||
|
omap3-beagle-ab4.dtb \
|
||||||
omap3-beagle-xm.dtb \
|
omap3-beagle-xm.dtb \
|
||||||
omap3-beagle-xm-ab.dtb \
|
omap3-beagle-xm-ab.dtb \
|
||||||
omap3-cm-t3517.dtb \
|
omap3-cm-t3517.dtb \
|
||||||
|
@ -55,7 +55,7 @@
|
|||||||
2 1 0 0 /* # 0: INACTIVE, 1: TX, 2: RX */
|
2 1 0 0 /* # 0: INACTIVE, 1: TX, 2: RX */
|
||||||
>;
|
>;
|
||||||
tx-num-evt = <16>;
|
tx-num-evt = <16>;
|
||||||
rt-num-evt = <16>;
|
rx-num-evt = <16>;
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -160,7 +160,7 @@
|
|||||||
target-module@48210000 {
|
target-module@48210000 {
|
||||||
compatible = "ti,sysc-omap4-simple", "ti,sysc";
|
compatible = "ti,sysc-omap4-simple", "ti,sysc";
|
||||||
power-domains = <&prm_mpu>;
|
power-domains = <&prm_mpu>;
|
||||||
clocks = <&mpu_clkctrl DRA7_MPU_CLKCTRL 0>;
|
clocks = <&mpu_clkctrl DRA7_MPU_MPU_CLKCTRL 0>;
|
||||||
clock-names = "fck";
|
clock-names = "fck";
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
@ -875,10 +875,10 @@
|
|||||||
<0x58000014 4>;
|
<0x58000014 4>;
|
||||||
reg-names = "rev", "syss";
|
reg-names = "rev", "syss";
|
||||||
ti,syss-mask = <1>;
|
ti,syss-mask = <1>;
|
||||||
clocks = <&dss_clkctrl DRA7_DSS_CORE_CLKCTRL 0>,
|
clocks = <&dss_clkctrl DRA7_DSS_DSS_CORE_CLKCTRL 0>,
|
||||||
<&dss_clkctrl DRA7_DSS_CORE_CLKCTRL 9>,
|
<&dss_clkctrl DRA7_DSS_DSS_CORE_CLKCTRL 9>,
|
||||||
<&dss_clkctrl DRA7_DSS_CORE_CLKCTRL 10>,
|
<&dss_clkctrl DRA7_DSS_DSS_CORE_CLKCTRL 10>,
|
||||||
<&dss_clkctrl DRA7_DSS_CORE_CLKCTRL 11>;
|
<&dss_clkctrl DRA7_DSS_DSS_CORE_CLKCTRL 11>;
|
||||||
clock-names = "fck", "hdmi_clk", "sys_clk", "tv_clk";
|
clock-names = "fck", "hdmi_clk", "sys_clk", "tv_clk";
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
@ -912,7 +912,7 @@
|
|||||||
SYSC_OMAP2_SOFTRESET |
|
SYSC_OMAP2_SOFTRESET |
|
||||||
SYSC_OMAP2_AUTOIDLE)>;
|
SYSC_OMAP2_AUTOIDLE)>;
|
||||||
ti,syss-mask = <1>;
|
ti,syss-mask = <1>;
|
||||||
clocks = <&dss_clkctrl DRA7_DSS_CORE_CLKCTRL 8>;
|
clocks = <&dss_clkctrl DRA7_DSS_DSS_CORE_CLKCTRL 8>;
|
||||||
clock-names = "fck";
|
clock-names = "fck";
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
@ -939,8 +939,8 @@
|
|||||||
<SYSC_IDLE_SMART>,
|
<SYSC_IDLE_SMART>,
|
||||||
<SYSC_IDLE_SMART_WKUP>;
|
<SYSC_IDLE_SMART_WKUP>;
|
||||||
ti,sysc-mask = <(SYSC_OMAP4_SOFTRESET)>;
|
ti,sysc-mask = <(SYSC_OMAP4_SOFTRESET)>;
|
||||||
clocks = <&dss_clkctrl DRA7_DSS_CORE_CLKCTRL 9>,
|
clocks = <&dss_clkctrl DRA7_DSS_DSS_CORE_CLKCTRL 9>,
|
||||||
<&dss_clkctrl DRA7_DSS_CORE_CLKCTRL 8>;
|
<&dss_clkctrl DRA7_DSS_DSS_CORE_CLKCTRL 8>;
|
||||||
clock-names = "fck", "dss_clk";
|
clock-names = "fck", "dss_clk";
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
@ -979,7 +979,7 @@
|
|||||||
compatible = "vivante,gc";
|
compatible = "vivante,gc";
|
||||||
reg = <0x0 0x700>;
|
reg = <0x0 0x700>;
|
||||||
interrupts = <GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&dss_clkctrl DRA7_BB2D_CLKCTRL 0>;
|
clocks = <&dss_clkctrl DRA7_DSS_BB2D_CLKCTRL 0>;
|
||||||
clock-names = "core";
|
clock-names = "core";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@ -1333,7 +1333,7 @@
|
|||||||
ti,no-reset-on-init;
|
ti,no-reset-on-init;
|
||||||
ti,no-idle;
|
ti,no-idle;
|
||||||
timer@0 {
|
timer@0 {
|
||||||
assigned-clocks = <&wkupaon_clkctrl DRA7_TIMER1_CLKCTRL 24>;
|
assigned-clocks = <&wkupaon_clkctrl DRA7_WKUPAON_TIMER1_CLKCTRL 24>;
|
||||||
assigned-clock-parents = <&sys_32k_ck>;
|
assigned-clock-parents = <&sys_32k_ck>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -79,7 +79,6 @@
|
|||||||
MX23_PAD_LCD_RESET__GPIO_1_18
|
MX23_PAD_LCD_RESET__GPIO_1_18
|
||||||
MX23_PAD_PWM3__GPIO_1_29
|
MX23_PAD_PWM3__GPIO_1_29
|
||||||
MX23_PAD_PWM4__GPIO_1_30
|
MX23_PAD_PWM4__GPIO_1_30
|
||||||
MX23_PAD_SSP1_DETECT__SSP1_DETECT
|
|
||||||
>;
|
>;
|
||||||
fsl,drive-strength = <MXS_DRIVE_4mA>;
|
fsl,drive-strength = <MXS_DRIVE_4mA>;
|
||||||
fsl,voltage = <MXS_VOLTAGE_HIGH>;
|
fsl,voltage = <MXS_VOLTAGE_HIGH>;
|
||||||
|
@ -5,6 +5,8 @@
|
|||||||
* Author: Fabio Estevam <fabio.estevam@freescale.com>
|
* Author: Fabio Estevam <fabio.estevam@freescale.com>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <dt-bindings/gpio/gpio.h>
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
aliases {
|
aliases {
|
||||||
backlight = &backlight;
|
backlight = &backlight;
|
||||||
@ -226,6 +228,7 @@
|
|||||||
MX6QDL_PAD_SD3_DAT1__SD3_DATA1 0x17059
|
MX6QDL_PAD_SD3_DAT1__SD3_DATA1 0x17059
|
||||||
MX6QDL_PAD_SD3_DAT2__SD3_DATA2 0x17059
|
MX6QDL_PAD_SD3_DAT2__SD3_DATA2 0x17059
|
||||||
MX6QDL_PAD_SD3_DAT3__SD3_DATA3 0x17059
|
MX6QDL_PAD_SD3_DAT3__SD3_DATA3 0x17059
|
||||||
|
MX6QDL_PAD_SD3_DAT5__GPIO7_IO00 0x1b0b0
|
||||||
>;
|
>;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -304,7 +307,7 @@
|
|||||||
&usdhc3 {
|
&usdhc3 {
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
pinctrl-0 = <&pinctrl_usdhc3>;
|
pinctrl-0 = <&pinctrl_usdhc3>;
|
||||||
non-removable;
|
cd-gpios = <&gpio7 0 GPIO_ACTIVE_LOW>;
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -259,7 +259,7 @@
|
|||||||
interrupts = <GIC_SPI 55 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 55 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&pcc2 IMX7ULP_CLK_WDG1>;
|
clocks = <&pcc2 IMX7ULP_CLK_WDG1>;
|
||||||
assigned-clocks = <&pcc2 IMX7ULP_CLK_WDG1>;
|
assigned-clocks = <&pcc2 IMX7ULP_CLK_WDG1>;
|
||||||
assigned-clocks-parents = <&scg1 IMX7ULP_CLK_FIRC_BUS_CLK>;
|
assigned-clock-parents = <&scg1 IMX7ULP_CLK_FIRC_BUS_CLK>;
|
||||||
timeout-sec = <40>;
|
timeout-sec = <40>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -59,7 +59,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
uart_A: serial@84c0 {
|
uart_A: serial@84c0 {
|
||||||
compatible = "amlogic,meson6-uart", "amlogic,meson-uart";
|
compatible = "amlogic,meson6-uart";
|
||||||
reg = <0x84c0 0x18>;
|
reg = <0x84c0 0x18>;
|
||||||
interrupts = <GIC_SPI 26 IRQ_TYPE_EDGE_RISING>;
|
interrupts = <GIC_SPI 26 IRQ_TYPE_EDGE_RISING>;
|
||||||
fifo-size = <128>;
|
fifo-size = <128>;
|
||||||
@ -67,7 +67,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
uart_B: serial@84dc {
|
uart_B: serial@84dc {
|
||||||
compatible = "amlogic,meson6-uart", "amlogic,meson-uart";
|
compatible = "amlogic,meson6-uart";
|
||||||
reg = <0x84dc 0x18>;
|
reg = <0x84dc 0x18>;
|
||||||
interrupts = <GIC_SPI 75 IRQ_TYPE_EDGE_RISING>;
|
interrupts = <GIC_SPI 75 IRQ_TYPE_EDGE_RISING>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
@ -105,7 +105,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
uart_C: serial@8700 {
|
uart_C: serial@8700 {
|
||||||
compatible = "amlogic,meson6-uart", "amlogic,meson-uart";
|
compatible = "amlogic,meson6-uart";
|
||||||
reg = <0x8700 0x18>;
|
reg = <0x8700 0x18>;
|
||||||
interrupts = <GIC_SPI 93 IRQ_TYPE_EDGE_RISING>;
|
interrupts = <GIC_SPI 93 IRQ_TYPE_EDGE_RISING>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
@ -228,7 +228,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
uart_AO: serial@4c0 {
|
uart_AO: serial@4c0 {
|
||||||
compatible = "amlogic,meson6-uart", "amlogic,meson-ao-uart", "amlogic,meson-uart";
|
compatible = "amlogic,meson6-uart", "amlogic,meson-ao-uart";
|
||||||
reg = <0x4c0 0x18>;
|
reg = <0x4c0 0x18>;
|
||||||
interrupts = <GIC_SPI 90 IRQ_TYPE_EDGE_RISING>;
|
interrupts = <GIC_SPI 90 IRQ_TYPE_EDGE_RISING>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
@ -736,27 +736,27 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
&uart_AO {
|
&uart_AO {
|
||||||
compatible = "amlogic,meson8-uart", "amlogic,meson-uart";
|
compatible = "amlogic,meson8-uart", "amlogic,meson-ao-uart";
|
||||||
clocks = <&clkc CLKID_CLK81>, <&xtal>, <&clkc CLKID_CLK81>;
|
clocks = <&xtal>, <&clkc CLKID_CLK81>, <&clkc CLKID_CLK81>;
|
||||||
clock-names = "baud", "xtal", "pclk";
|
clock-names = "xtal", "pclk", "baud";
|
||||||
};
|
};
|
||||||
|
|
||||||
&uart_A {
|
&uart_A {
|
||||||
compatible = "amlogic,meson8-uart", "amlogic,meson-uart";
|
compatible = "amlogic,meson8-uart";
|
||||||
clocks = <&clkc CLKID_CLK81>, <&xtal>, <&clkc CLKID_UART0>;
|
clocks = <&xtal>, <&clkc CLKID_UART0>, <&clkc CLKID_CLK81>;
|
||||||
clock-names = "baud", "xtal", "pclk";
|
clock-names = "xtal", "pclk", "baud";
|
||||||
};
|
};
|
||||||
|
|
||||||
&uart_B {
|
&uart_B {
|
||||||
compatible = "amlogic,meson8-uart", "amlogic,meson-uart";
|
compatible = "amlogic,meson8-uart";
|
||||||
clocks = <&clkc CLKID_CLK81>, <&xtal>, <&clkc CLKID_UART1>;
|
clocks = <&xtal>, <&clkc CLKID_UART0>, <&clkc CLKID_CLK81>;
|
||||||
clock-names = "baud", "xtal", "pclk";
|
clock-names = "xtal", "pclk", "baud";
|
||||||
};
|
};
|
||||||
|
|
||||||
&uart_C {
|
&uart_C {
|
||||||
compatible = "amlogic,meson8-uart", "amlogic,meson-uart";
|
compatible = "amlogic,meson8-uart";
|
||||||
clocks = <&clkc CLKID_CLK81>, <&xtal>, <&clkc CLKID_UART2>;
|
clocks = <&xtal>, <&clkc CLKID_UART0>, <&clkc CLKID_CLK81>;
|
||||||
clock-names = "baud", "xtal", "pclk";
|
clock-names = "xtal", "pclk", "baud";
|
||||||
};
|
};
|
||||||
|
|
||||||
&usb0 {
|
&usb0 {
|
||||||
|
@ -724,27 +724,27 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
&uart_AO {
|
&uart_AO {
|
||||||
compatible = "amlogic,meson8b-uart", "amlogic,meson-uart";
|
compatible = "amlogic,meson8b-uart", "amlogic,meson-ao-uart";
|
||||||
clocks = <&clkc CLKID_CLK81>, <&xtal>, <&clkc CLKID_CLK81>;
|
clocks = <&xtal>, <&clkc CLKID_CLK81>, <&clkc CLKID_CLK81>;
|
||||||
clock-names = "baud", "xtal", "pclk";
|
clock-names = "xtal", "pclk", "baud";
|
||||||
};
|
};
|
||||||
|
|
||||||
&uart_A {
|
&uart_A {
|
||||||
compatible = "amlogic,meson8b-uart", "amlogic,meson-uart";
|
compatible = "amlogic,meson8b-uart";
|
||||||
clocks = <&clkc CLKID_CLK81>, <&xtal>, <&clkc CLKID_UART0>;
|
clocks = <&xtal>, <&clkc CLKID_UART0>, <&clkc CLKID_CLK81>;
|
||||||
clock-names = "baud", "xtal", "pclk";
|
clock-names = "xtal", "pclk", "baud";
|
||||||
};
|
};
|
||||||
|
|
||||||
&uart_B {
|
&uart_B {
|
||||||
compatible = "amlogic,meson8b-uart", "amlogic,meson-uart";
|
compatible = "amlogic,meson8b-uart";
|
||||||
clocks = <&clkc CLKID_CLK81>, <&xtal>, <&clkc CLKID_UART1>;
|
clocks = <&xtal>, <&clkc CLKID_UART0>, <&clkc CLKID_CLK81>;
|
||||||
clock-names = "baud", "xtal", "pclk";
|
clock-names = "xtal", "pclk", "baud";
|
||||||
};
|
};
|
||||||
|
|
||||||
&uart_C {
|
&uart_C {
|
||||||
compatible = "amlogic,meson8b-uart", "amlogic,meson-uart";
|
compatible = "amlogic,meson8b-uart";
|
||||||
clocks = <&clkc CLKID_CLK81>, <&xtal>, <&clkc CLKID_UART2>;
|
clocks = <&xtal>, <&clkc CLKID_UART0>, <&clkc CLKID_CLK81>;
|
||||||
clock-names = "baud", "xtal", "pclk";
|
clock-names = "xtal", "pclk", "baud";
|
||||||
};
|
};
|
||||||
|
|
||||||
&usb0 {
|
&usb0 {
|
||||||
|
47
arch/arm/boot/dts/omap3-beagle-ab4.dts
Normal file
47
arch/arm/boot/dts/omap3-beagle-ab4.dts
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
|
/dts-v1/;
|
||||||
|
|
||||||
|
#include "omap3-beagle.dts"
|
||||||
|
|
||||||
|
/ {
|
||||||
|
model = "TI OMAP3 BeagleBoard A to B4";
|
||||||
|
compatible = "ti,omap3-beagle-ab4", "ti,omap3-beagle", "ti,omap3430", "ti,omap3";
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Workaround for capacitor C70 issue, see "Boards revision A and < B5"
|
||||||
|
* section at https://elinux.org/BeagleBoard_Community
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Unusable as clocksource because of unreliable oscillator */
|
||||||
|
&counter32k {
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Unusable as clockevent because of unreliable oscillator, allow to idle */
|
||||||
|
&timer1_target {
|
||||||
|
/delete-property/ti,no-reset-on-init;
|
||||||
|
/delete-property/ti,no-idle;
|
||||||
|
timer@0 {
|
||||||
|
/delete-property/ti,timer-alwon;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Preferred always-on timer for clocksource */
|
||||||
|
&timer12_target {
|
||||||
|
ti,no-reset-on-init;
|
||||||
|
ti,no-idle;
|
||||||
|
timer@0 {
|
||||||
|
/* Always clocked by secure_32k_fck */
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Preferred timer for clockevent */
|
||||||
|
&timer2_target {
|
||||||
|
ti,no-reset-on-init;
|
||||||
|
ti,no-idle;
|
||||||
|
timer@0 {
|
||||||
|
assigned-clocks = <&gpt2_fck>;
|
||||||
|
assigned-clock-parents = <&sys_ck>;
|
||||||
|
};
|
||||||
|
};
|
@ -304,39 +304,6 @@
|
|||||||
phys = <0 &hsusb2_phy>;
|
phys = <0 &hsusb2_phy>;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Unusable as clocksource because of unreliable oscillator */
|
|
||||||
&counter32k {
|
|
||||||
status = "disabled";
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Unusable as clockevent because if unreliable oscillator, allow to idle */
|
|
||||||
&timer1_target {
|
|
||||||
/delete-property/ti,no-reset-on-init;
|
|
||||||
/delete-property/ti,no-idle;
|
|
||||||
timer@0 {
|
|
||||||
/delete-property/ti,timer-alwon;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Preferred always-on timer for clocksource */
|
|
||||||
&timer12_target {
|
|
||||||
ti,no-reset-on-init;
|
|
||||||
ti,no-idle;
|
|
||||||
timer@0 {
|
|
||||||
/* Always clocked by secure_32k_fck */
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Preferred timer for clockevent */
|
|
||||||
&timer2_target {
|
|
||||||
ti,no-reset-on-init;
|
|
||||||
ti,no-idle;
|
|
||||||
timer@0 {
|
|
||||||
assigned-clocks = <&gpt2_fck>;
|
|
||||||
assigned-clock-parents = <&sys_ck>;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
&twl_gpio {
|
&twl_gpio {
|
||||||
ti,use-leds;
|
ti,use-leds;
|
||||||
/* pullups: BIT(1) */
|
/* pullups: BIT(1) */
|
||||||
|
@ -235,7 +235,6 @@
|
|||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
reg = <0x41>;
|
reg = <0x41>;
|
||||||
irq-over-gpio;
|
|
||||||
irq-gpios = <&gpiopinctrl 29 0x4>;
|
irq-gpios = <&gpiopinctrl 29 0x4>;
|
||||||
id = <0>;
|
id = <0>;
|
||||||
blocks = <0x5>;
|
blocks = <0x5>;
|
||||||
|
@ -185,10 +185,6 @@
|
|||||||
cap-sd-highspeed;
|
cap-sd-highspeed;
|
||||||
cap-mmc-highspeed;
|
cap-mmc-highspeed;
|
||||||
/* All direction control is used */
|
/* All direction control is used */
|
||||||
st,sig-dir-cmd;
|
|
||||||
st,sig-dir-dat0;
|
|
||||||
st,sig-dir-dat2;
|
|
||||||
st,sig-dir-dat31;
|
|
||||||
st,sig-pin-fbclk;
|
st,sig-pin-fbclk;
|
||||||
full-pwr-cycle;
|
full-pwr-cycle;
|
||||||
vmmc-supply = <&ab8500_ldo_aux3_reg>;
|
vmmc-supply = <&ab8500_ldo_aux3_reg>;
|
||||||
|
@ -13,12 +13,12 @@
|
|||||||
static int crypto_blake2s_update_arm(struct shash_desc *desc,
|
static int crypto_blake2s_update_arm(struct shash_desc *desc,
|
||||||
const u8 *in, unsigned int inlen)
|
const u8 *in, unsigned int inlen)
|
||||||
{
|
{
|
||||||
return crypto_blake2s_update(desc, in, inlen, blake2s_compress);
|
return crypto_blake2s_update(desc, in, inlen, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int crypto_blake2s_final_arm(struct shash_desc *desc, u8 *out)
|
static int crypto_blake2s_final_arm(struct shash_desc *desc, u8 *out)
|
||||||
{
|
{
|
||||||
return crypto_blake2s_final(desc, out, blake2s_compress);
|
return crypto_blake2s_final(desc, out, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define BLAKE2S_ALG(name, driver_name, digest_size) \
|
#define BLAKE2S_ALG(name, driver_name, digest_size) \
|
||||||
|
@ -263,9 +263,9 @@ static int __init omapdss_init_of(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
r = of_platform_populate(node, NULL, NULL, &pdev->dev);
|
r = of_platform_populate(node, NULL, NULL, &pdev->dev);
|
||||||
|
put_device(&pdev->dev);
|
||||||
if (r) {
|
if (r) {
|
||||||
pr_err("Unable to populate DSS submodule devices\n");
|
pr_err("Unable to populate DSS submodule devices\n");
|
||||||
put_device(&pdev->dev);
|
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -752,8 +752,10 @@ static int __init _init_clkctrl_providers(void)
|
|||||||
|
|
||||||
for_each_matching_node(np, ti_clkctrl_match_table) {
|
for_each_matching_node(np, ti_clkctrl_match_table) {
|
||||||
ret = _setup_clkctrl_provider(np);
|
ret = _setup_clkctrl_provider(np);
|
||||||
if (ret)
|
if (ret) {
|
||||||
|
of_node_put(np);
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
menuconfig ARCH_INTEL_SOCFPGA
|
menuconfig ARCH_INTEL_SOCFPGA
|
||||||
bool "Altera SOCFPGA family"
|
bool "Altera SOCFPGA family"
|
||||||
depends on ARCH_MULTI_V7
|
depends on ARCH_MULTI_V7
|
||||||
|
select ARCH_HAS_RESET_CONTROLLER
|
||||||
select ARCH_SUPPORTS_BIG_ENDIAN
|
select ARCH_SUPPORTS_BIG_ENDIAN
|
||||||
select ARM_AMBA
|
select ARM_AMBA
|
||||||
select ARM_GIC
|
select ARM_GIC
|
||||||
@ -18,6 +19,7 @@ menuconfig ARCH_INTEL_SOCFPGA
|
|||||||
select PL310_ERRATA_727915
|
select PL310_ERRATA_727915
|
||||||
select PL310_ERRATA_753970 if PL310
|
select PL310_ERRATA_753970 if PL310
|
||||||
select PL310_ERRATA_769419
|
select PL310_ERRATA_769419
|
||||||
|
select RESET_CONTROLLER
|
||||||
|
|
||||||
if ARCH_INTEL_SOCFPGA
|
if ARCH_INTEL_SOCFPGA
|
||||||
config SOCFPGA_SUSPEND
|
config SOCFPGA_SUSPEND
|
||||||
|
@ -672,6 +672,7 @@ config ARM64_WORKAROUND_TRBE_OVERWRITE_FILL_MODE
|
|||||||
|
|
||||||
config ARM64_ERRATUM_2051678
|
config ARM64_ERRATUM_2051678
|
||||||
bool "Cortex-A510: 2051678: disable Hardware Update of the page table dirty bit"
|
bool "Cortex-A510: 2051678: disable Hardware Update of the page table dirty bit"
|
||||||
|
default y
|
||||||
help
|
help
|
||||||
This options adds the workaround for ARM Cortex-A510 erratum ARM64_ERRATUM_2051678.
|
This options adds the workaround for ARM Cortex-A510 erratum ARM64_ERRATUM_2051678.
|
||||||
Affected Coretex-A510 might not respect the ordering rules for
|
Affected Coretex-A510 might not respect the ordering rules for
|
||||||
@ -680,6 +681,22 @@ config ARM64_ERRATUM_2051678
|
|||||||
|
|
||||||
If unsure, say Y.
|
If unsure, say Y.
|
||||||
|
|
||||||
|
config ARM64_ERRATUM_2077057
|
||||||
|
bool "Cortex-A510: 2077057: workaround software-step corrupting SPSR_EL2"
|
||||||
|
help
|
||||||
|
This option adds the workaround for ARM Cortex-A510 erratum 2077057.
|
||||||
|
Affected Cortex-A510 may corrupt SPSR_EL2 when the a step exception is
|
||||||
|
expected, but a Pointer Authentication trap is taken instead. The
|
||||||
|
erratum causes SPSR_EL1 to be copied to SPSR_EL2, which could allow
|
||||||
|
EL1 to cause a return to EL2 with a guest controlled ELR_EL2.
|
||||||
|
|
||||||
|
This can only happen when EL2 is stepping EL1.
|
||||||
|
|
||||||
|
When these conditions occur, the SPSR_EL2 value is unchanged from the
|
||||||
|
previous guest entry, and can be restored from the in-memory copy.
|
||||||
|
|
||||||
|
If unsure, say Y.
|
||||||
|
|
||||||
config ARM64_ERRATUM_2119858
|
config ARM64_ERRATUM_2119858
|
||||||
bool "Cortex-A710/X2: 2119858: workaround TRBE overwriting trace data in FILL mode"
|
bool "Cortex-A710/X2: 2119858: workaround TRBE overwriting trace data in FILL mode"
|
||||||
default y
|
default y
|
||||||
|
@ -309,9 +309,6 @@ config ARCH_VISCONTI
|
|||||||
help
|
help
|
||||||
This enables support for Toshiba Visconti SoCs Family.
|
This enables support for Toshiba Visconti SoCs Family.
|
||||||
|
|
||||||
config ARCH_VULCAN
|
|
||||||
def_bool n
|
|
||||||
|
|
||||||
config ARCH_XGENE
|
config ARCH_XGENE
|
||||||
bool "AppliedMicro X-Gene SOC Family"
|
bool "AppliedMicro X-Gene SOC Family"
|
||||||
help
|
help
|
||||||
|
@ -107,6 +107,12 @@
|
|||||||
no-map;
|
no-map;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* 32 MiB reserved for ARM Trusted Firmware (BL32) */
|
||||||
|
secmon_reserved_bl32: secmon@5300000 {
|
||||||
|
reg = <0x0 0x05300000 0x0 0x2000000>;
|
||||||
|
no-map;
|
||||||
|
};
|
||||||
|
|
||||||
linux,cma {
|
linux,cma {
|
||||||
compatible = "shared-dma-pool";
|
compatible = "shared-dma-pool";
|
||||||
reusable;
|
reusable;
|
||||||
|
@ -157,14 +157,6 @@
|
|||||||
regulator-always-on;
|
regulator-always-on;
|
||||||
};
|
};
|
||||||
|
|
||||||
reserved-memory {
|
|
||||||
/* TEE Reserved Memory */
|
|
||||||
bl32_reserved: bl32@5000000 {
|
|
||||||
reg = <0x0 0x05300000 0x0 0x2000000>;
|
|
||||||
no-map;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
sdio_pwrseq: sdio-pwrseq {
|
sdio_pwrseq: sdio-pwrseq {
|
||||||
compatible = "mmc-pwrseq-simple";
|
compatible = "mmc-pwrseq-simple";
|
||||||
reset-gpios = <&gpio GPIOX_6 GPIO_ACTIVE_LOW>;
|
reset-gpios = <&gpio GPIOX_6 GPIO_ACTIVE_LOW>;
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
rtc1 = &vrtc;
|
rtc1 = &vrtc;
|
||||||
};
|
};
|
||||||
|
|
||||||
dioo2133: audio-amplifier-0 {
|
dio2133: audio-amplifier-0 {
|
||||||
compatible = "simple-audio-amplifier";
|
compatible = "simple-audio-amplifier";
|
||||||
enable-gpios = <&gpio_ao GPIOAO_2 GPIO_ACTIVE_HIGH>;
|
enable-gpios = <&gpio_ao GPIOAO_2 GPIO_ACTIVE_HIGH>;
|
||||||
VCC-supply = <&vcc_5v>;
|
VCC-supply = <&vcc_5v>;
|
||||||
@ -219,7 +219,7 @@
|
|||||||
audio-widgets = "Line", "Lineout";
|
audio-widgets = "Line", "Lineout";
|
||||||
audio-aux-devs = <&tdmout_b>, <&tdmout_c>, <&tdmin_a>,
|
audio-aux-devs = <&tdmout_b>, <&tdmout_c>, <&tdmin_a>,
|
||||||
<&tdmin_b>, <&tdmin_c>, <&tdmin_lb>,
|
<&tdmin_b>, <&tdmin_c>, <&tdmin_lb>,
|
||||||
<&dioo2133>;
|
<&dio2133>;
|
||||||
audio-routing = "TDMOUT_B IN 0", "FRDDR_A OUT 1",
|
audio-routing = "TDMOUT_B IN 0", "FRDDR_A OUT 1",
|
||||||
"TDMOUT_B IN 1", "FRDDR_B OUT 1",
|
"TDMOUT_B IN 1", "FRDDR_B OUT 1",
|
||||||
"TDMOUT_B IN 2", "FRDDR_C OUT 1",
|
"TDMOUT_B IN 2", "FRDDR_C OUT 1",
|
||||||
|
@ -49,6 +49,12 @@
|
|||||||
no-map;
|
no-map;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* 32 MiB reserved for ARM Trusted Firmware (BL32) */
|
||||||
|
secmon_reserved_bl32: secmon@5300000 {
|
||||||
|
reg = <0x0 0x05300000 0x0 0x2000000>;
|
||||||
|
no-map;
|
||||||
|
};
|
||||||
|
|
||||||
linux,cma {
|
linux,cma {
|
||||||
compatible = "shared-dma-pool";
|
compatible = "shared-dma-pool";
|
||||||
reusable;
|
reusable;
|
||||||
|
@ -123,7 +123,7 @@
|
|||||||
regulator-min-microvolt = <1800000>;
|
regulator-min-microvolt = <1800000>;
|
||||||
regulator-max-microvolt = <3300000>;
|
regulator-max-microvolt = <3300000>;
|
||||||
|
|
||||||
enable-gpio = <&gpio GPIOE_2 GPIO_ACTIVE_HIGH>;
|
enable-gpio = <&gpio_ao GPIOE_2 GPIO_ACTIVE_HIGH>;
|
||||||
enable-active-high;
|
enable-active-high;
|
||||||
regulator-always-on;
|
regulator-always-on;
|
||||||
|
|
||||||
|
@ -48,7 +48,7 @@
|
|||||||
regulator-max-microvolt = <3300000>;
|
regulator-max-microvolt = <3300000>;
|
||||||
vin-supply = <&vcc_5v>;
|
vin-supply = <&vcc_5v>;
|
||||||
|
|
||||||
enable-gpio = <&gpio GPIOE_2 GPIO_ACTIVE_HIGH>;
|
enable-gpio = <&gpio_ao GPIOE_2 GPIO_OPEN_DRAIN>;
|
||||||
enable-active-high;
|
enable-active-high;
|
||||||
regulator-always-on;
|
regulator-always-on;
|
||||||
|
|
||||||
|
@ -203,14 +203,6 @@
|
|||||||
regulator-always-on;
|
regulator-always-on;
|
||||||
};
|
};
|
||||||
|
|
||||||
reserved-memory {
|
|
||||||
/* TEE Reserved Memory */
|
|
||||||
bl32_reserved: bl32@5000000 {
|
|
||||||
reg = <0x0 0x05300000 0x0 0x2000000>;
|
|
||||||
no-map;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
sdio_pwrseq: sdio-pwrseq {
|
sdio_pwrseq: sdio-pwrseq {
|
||||||
compatible = "mmc-pwrseq-simple";
|
compatible = "mmc-pwrseq-simple";
|
||||||
reset-gpios = <&gpio GPIOX_6 GPIO_ACTIVE_LOW>;
|
reset-gpios = <&gpio GPIOX_6 GPIO_ACTIVE_LOW>;
|
||||||
|
@ -157,6 +157,10 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
&ftm_alarm0 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
&gpio1 {
|
&gpio1 {
|
||||||
gpio-line-names =
|
gpio-line-names =
|
||||||
"", "", "", "", "", "", "", "",
|
"", "", "", "", "", "", "", "",
|
||||||
|
@ -1115,8 +1115,8 @@
|
|||||||
status = "okay";
|
status = "okay";
|
||||||
|
|
||||||
ports {
|
ports {
|
||||||
port@1 {
|
port@0 {
|
||||||
reg = <1>;
|
reg = <0>;
|
||||||
|
|
||||||
mipi1_sensor_ep: endpoint {
|
mipi1_sensor_ep: endpoint {
|
||||||
remote-endpoint = <&camera1_ep>;
|
remote-endpoint = <&camera1_ep>;
|
||||||
|
@ -554,7 +554,7 @@
|
|||||||
assigned-clock-rates = <0>, <0>, <0>, <594000000>;
|
assigned-clock-rates = <0>, <0>, <0>, <594000000>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
|
||||||
port@0 {
|
port {
|
||||||
lcdif_mipi_dsi: endpoint {
|
lcdif_mipi_dsi: endpoint {
|
||||||
remote-endpoint = <&mipi_dsi_lcdif_in>;
|
remote-endpoint = <&mipi_dsi_lcdif_in>;
|
||||||
};
|
};
|
||||||
@ -1151,8 +1151,8 @@
|
|||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
|
|
||||||
port@0 {
|
port@1 {
|
||||||
reg = <0>;
|
reg = <1>;
|
||||||
|
|
||||||
csi1_mipi_ep: endpoint {
|
csi1_mipi_ep: endpoint {
|
||||||
remote-endpoint = <&csi1_ep>;
|
remote-endpoint = <&csi1_ep>;
|
||||||
@ -1203,8 +1203,8 @@
|
|||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
|
|
||||||
port@0 {
|
port@1 {
|
||||||
reg = <0>;
|
reg = <1>;
|
||||||
|
|
||||||
csi2_mipi_ep: endpoint {
|
csi2_mipi_ep: endpoint {
|
||||||
remote-endpoint = <&csi2_ep>;
|
remote-endpoint = <&csi2_ep>;
|
||||||
|
@ -91,7 +91,7 @@
|
|||||||
|
|
||||||
sound {
|
sound {
|
||||||
compatible = "fsl,imx-audio-tlv320aic32x4";
|
compatible = "fsl,imx-audio-tlv320aic32x4";
|
||||||
model = "tqm-tlv320aic32";
|
model = "imx-audio-tlv320aic32x4";
|
||||||
ssi-controller = <&sai3>;
|
ssi-controller = <&sai3>;
|
||||||
audio-codec = <&tlv320aic3x04>;
|
audio-codec = <&tlv320aic3x04>;
|
||||||
};
|
};
|
||||||
|
@ -15,8 +15,18 @@
|
|||||||
model = "Texas Instruments J721S2 EVM";
|
model = "Texas Instruments J721S2 EVM";
|
||||||
|
|
||||||
chosen {
|
chosen {
|
||||||
stdout-path = "serial10:115200n8";
|
stdout-path = "serial2:115200n8";
|
||||||
bootargs = "console=ttyS10,115200n8 earlycon=ns16550a,mmio32,2880000";
|
bootargs = "console=ttyS2,115200n8 earlycon=ns16550a,mmio32,2880000";
|
||||||
|
};
|
||||||
|
|
||||||
|
aliases {
|
||||||
|
serial1 = &mcu_uart0;
|
||||||
|
serial2 = &main_uart8;
|
||||||
|
mmc0 = &main_sdhci0;
|
||||||
|
mmc1 = &main_sdhci1;
|
||||||
|
can0 = &main_mcan16;
|
||||||
|
can1 = &mcu_mcan0;
|
||||||
|
can2 = &mcu_mcan1;
|
||||||
};
|
};
|
||||||
|
|
||||||
evm_12v0: fixedregulator-evm12v0 {
|
evm_12v0: fixedregulator-evm12v0 {
|
||||||
|
@ -21,28 +21,6 @@
|
|||||||
#address-cells = <2>;
|
#address-cells = <2>;
|
||||||
#size-cells = <2>;
|
#size-cells = <2>;
|
||||||
|
|
||||||
aliases {
|
|
||||||
serial0 = &wkup_uart0;
|
|
||||||
serial1 = &mcu_uart0;
|
|
||||||
serial2 = &main_uart0;
|
|
||||||
serial3 = &main_uart1;
|
|
||||||
serial4 = &main_uart2;
|
|
||||||
serial5 = &main_uart3;
|
|
||||||
serial6 = &main_uart4;
|
|
||||||
serial7 = &main_uart5;
|
|
||||||
serial8 = &main_uart6;
|
|
||||||
serial9 = &main_uart7;
|
|
||||||
serial10 = &main_uart8;
|
|
||||||
serial11 = &main_uart9;
|
|
||||||
mmc0 = &main_sdhci0;
|
|
||||||
mmc1 = &main_sdhci1;
|
|
||||||
can0 = &main_mcan16;
|
|
||||||
can1 = &mcu_mcan0;
|
|
||||||
can2 = &mcu_mcan1;
|
|
||||||
can3 = &main_mcan3;
|
|
||||||
can4 = &main_mcan5;
|
|
||||||
};
|
|
||||||
|
|
||||||
chosen { };
|
chosen { };
|
||||||
|
|
||||||
cpus {
|
cpus {
|
||||||
|
@ -600,6 +600,14 @@ const struct arm64_cpu_capabilities arm64_errata[] = {
|
|||||||
CAP_MIDR_RANGE_LIST(trbe_write_out_of_range_cpus),
|
CAP_MIDR_RANGE_LIST(trbe_write_out_of_range_cpus),
|
||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef CONFIG_ARM64_ERRATUM_2077057
|
||||||
|
{
|
||||||
|
.desc = "ARM erratum 2077057",
|
||||||
|
.capability = ARM64_WORKAROUND_2077057,
|
||||||
|
.type = ARM64_CPUCAP_LOCAL_CPU_ERRATUM,
|
||||||
|
ERRATA_MIDR_REV_RANGE(MIDR_CORTEX_A510, 0, 0, 2),
|
||||||
|
},
|
||||||
|
#endif
|
||||||
#ifdef CONFIG_ARM64_ERRATUM_2064142
|
#ifdef CONFIG_ARM64_ERRATUM_2064142
|
||||||
{
|
{
|
||||||
.desc = "ARM erratum 2064142",
|
.desc = "ARM erratum 2064142",
|
||||||
|
@ -797,6 +797,24 @@ static bool kvm_vcpu_exit_request(struct kvm_vcpu *vcpu, int *ret)
|
|||||||
xfer_to_guest_mode_work_pending();
|
xfer_to_guest_mode_work_pending();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Actually run the vCPU, entering an RCU extended quiescent state (EQS) while
|
||||||
|
* the vCPU is running.
|
||||||
|
*
|
||||||
|
* This must be noinstr as instrumentation may make use of RCU, and this is not
|
||||||
|
* safe during the EQS.
|
||||||
|
*/
|
||||||
|
static int noinstr kvm_arm_vcpu_enter_exit(struct kvm_vcpu *vcpu)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
guest_state_enter_irqoff();
|
||||||
|
ret = kvm_call_hyp_ret(__kvm_vcpu_run, vcpu);
|
||||||
|
guest_state_exit_irqoff();
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* kvm_arch_vcpu_ioctl_run - the main VCPU run function to execute guest code
|
* kvm_arch_vcpu_ioctl_run - the main VCPU run function to execute guest code
|
||||||
* @vcpu: The VCPU pointer
|
* @vcpu: The VCPU pointer
|
||||||
@ -881,9 +899,9 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu)
|
|||||||
* Enter the guest
|
* Enter the guest
|
||||||
*/
|
*/
|
||||||
trace_kvm_entry(*vcpu_pc(vcpu));
|
trace_kvm_entry(*vcpu_pc(vcpu));
|
||||||
guest_enter_irqoff();
|
guest_timing_enter_irqoff();
|
||||||
|
|
||||||
ret = kvm_call_hyp_ret(__kvm_vcpu_run, vcpu);
|
ret = kvm_arm_vcpu_enter_exit(vcpu);
|
||||||
|
|
||||||
vcpu->mode = OUTSIDE_GUEST_MODE;
|
vcpu->mode = OUTSIDE_GUEST_MODE;
|
||||||
vcpu->stat.exits++;
|
vcpu->stat.exits++;
|
||||||
@ -918,26 +936,23 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu)
|
|||||||
kvm_arch_vcpu_ctxsync_fp(vcpu);
|
kvm_arch_vcpu_ctxsync_fp(vcpu);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We may have taken a host interrupt in HYP mode (ie
|
* We must ensure that any pending interrupts are taken before
|
||||||
* while executing the guest). This interrupt is still
|
* we exit guest timing so that timer ticks are accounted as
|
||||||
* pending, as we haven't serviced it yet!
|
* guest time. Transiently unmask interrupts so that any
|
||||||
|
* pending interrupts are taken.
|
||||||
*
|
*
|
||||||
* We're now back in SVC mode, with interrupts
|
* Per ARM DDI 0487G.b section D1.13.4, an ISB (or other
|
||||||
* disabled. Enabling the interrupts now will have
|
* context synchronization event) is necessary to ensure that
|
||||||
* the effect of taking the interrupt again, in SVC
|
* pending interrupts are taken.
|
||||||
* mode this time.
|
|
||||||
*/
|
*/
|
||||||
local_irq_enable();
|
local_irq_enable();
|
||||||
|
isb();
|
||||||
|
local_irq_disable();
|
||||||
|
|
||||||
|
guest_timing_exit_irqoff();
|
||||||
|
|
||||||
|
local_irq_enable();
|
||||||
|
|
||||||
/*
|
|
||||||
* We do local_irq_enable() before calling guest_exit() so
|
|
||||||
* that if a timer interrupt hits while running the guest we
|
|
||||||
* account that tick as being spent in the guest. We enable
|
|
||||||
* preemption after calling guest_exit() so that if we get
|
|
||||||
* preempted we make sure ticks after that is not counted as
|
|
||||||
* guest time.
|
|
||||||
*/
|
|
||||||
guest_exit();
|
|
||||||
trace_kvm_exit(ret, kvm_vcpu_trap_get_class(vcpu), *vcpu_pc(vcpu));
|
trace_kvm_exit(ret, kvm_vcpu_trap_get_class(vcpu), *vcpu_pc(vcpu));
|
||||||
|
|
||||||
/* Exit types that need handling before we can be preempted */
|
/* Exit types that need handling before we can be preempted */
|
||||||
|
@ -228,6 +228,14 @@ int handle_exit(struct kvm_vcpu *vcpu, int exception_index)
|
|||||||
{
|
{
|
||||||
struct kvm_run *run = vcpu->run;
|
struct kvm_run *run = vcpu->run;
|
||||||
|
|
||||||
|
if (ARM_SERROR_PENDING(exception_index)) {
|
||||||
|
/*
|
||||||
|
* The SError is handled by handle_exit_early(). If the guest
|
||||||
|
* survives it will re-execute the original instruction.
|
||||||
|
*/
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
exception_index = ARM_EXCEPTION_CODE(exception_index);
|
exception_index = ARM_EXCEPTION_CODE(exception_index);
|
||||||
|
|
||||||
switch (exception_index) {
|
switch (exception_index) {
|
||||||
|
@ -402,6 +402,24 @@ static inline bool kvm_hyp_handle_exit(struct kvm_vcpu *vcpu, u64 *exit_code)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void synchronize_vcpu_pstate(struct kvm_vcpu *vcpu, u64 *exit_code)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Check for the conditions of Cortex-A510's #2077057. When these occur
|
||||||
|
* SPSR_EL2 can't be trusted, but isn't needed either as it is
|
||||||
|
* unchanged from the value in vcpu_gp_regs(vcpu)->pstate.
|
||||||
|
* Are we single-stepping the guest, and took a PAC exception from the
|
||||||
|
* active-not-pending state?
|
||||||
|
*/
|
||||||
|
if (cpus_have_final_cap(ARM64_WORKAROUND_2077057) &&
|
||||||
|
vcpu->guest_debug & KVM_GUESTDBG_SINGLESTEP &&
|
||||||
|
*vcpu_cpsr(vcpu) & DBG_SPSR_SS &&
|
||||||
|
ESR_ELx_EC(read_sysreg_el2(SYS_ESR)) == ESR_ELx_EC_PAC)
|
||||||
|
write_sysreg_el2(*vcpu_cpsr(vcpu), SYS_SPSR);
|
||||||
|
|
||||||
|
vcpu->arch.ctxt.regs.pstate = read_sysreg_el2(SYS_SPSR);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 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
|
||||||
@ -413,7 +431,7 @@ static inline bool fixup_guest_exit(struct kvm_vcpu *vcpu, u64 *exit_code)
|
|||||||
* Save PSTATE early so that we can evaluate the vcpu mode
|
* Save PSTATE early so that we can evaluate the vcpu mode
|
||||||
* early on.
|
* early on.
|
||||||
*/
|
*/
|
||||||
vcpu->arch.ctxt.regs.pstate = read_sysreg_el2(SYS_SPSR);
|
synchronize_vcpu_pstate(vcpu, exit_code);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check whether we want to repaint the state one way or
|
* Check whether we want to repaint the state one way or
|
||||||
@ -424,7 +442,8 @@ static inline bool fixup_guest_exit(struct kvm_vcpu *vcpu, u64 *exit_code)
|
|||||||
if (ARM_EXCEPTION_CODE(*exit_code) != ARM_EXCEPTION_IRQ)
|
if (ARM_EXCEPTION_CODE(*exit_code) != ARM_EXCEPTION_IRQ)
|
||||||
vcpu->arch.fault.esr_el2 = read_sysreg_el2(SYS_ESR);
|
vcpu->arch.fault.esr_el2 = read_sysreg_el2(SYS_ESR);
|
||||||
|
|
||||||
if (ARM_SERROR_PENDING(*exit_code)) {
|
if (ARM_SERROR_PENDING(*exit_code) &&
|
||||||
|
ARM_EXCEPTION_CODE(*exit_code) != ARM_EXCEPTION_IRQ) {
|
||||||
u8 esr_ec = kvm_vcpu_trap_get_class(vcpu);
|
u8 esr_ec = kvm_vcpu_trap_get_class(vcpu);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -55,9 +55,10 @@ WORKAROUND_1418040
|
|||||||
WORKAROUND_1463225
|
WORKAROUND_1463225
|
||||||
WORKAROUND_1508412
|
WORKAROUND_1508412
|
||||||
WORKAROUND_1542419
|
WORKAROUND_1542419
|
||||||
WORKAROUND_2064142
|
|
||||||
WORKAROUND_2038923
|
|
||||||
WORKAROUND_1902691
|
WORKAROUND_1902691
|
||||||
|
WORKAROUND_2038923
|
||||||
|
WORKAROUND_2064142
|
||||||
|
WORKAROUND_2077057
|
||||||
WORKAROUND_TRBE_OVERWRITE_FILL_MODE
|
WORKAROUND_TRBE_OVERWRITE_FILL_MODE
|
||||||
WORKAROUND_TSB_FLUSH_FAILURE
|
WORKAROUND_TSB_FLUSH_FAILURE
|
||||||
WORKAROUND_TRBE_WRITE_OUT_OF_RANGE
|
WORKAROUND_TRBE_WRITE_OUT_OF_RANGE
|
||||||
|
@ -83,6 +83,8 @@
|
|||||||
label = "HDMI OUT";
|
label = "HDMI OUT";
|
||||||
type = "a";
|
type = "a";
|
||||||
|
|
||||||
|
ddc-en-gpios = <&gpa 25 GPIO_ACTIVE_HIGH>;
|
||||||
|
|
||||||
port {
|
port {
|
||||||
hdmi_con: endpoint {
|
hdmi_con: endpoint {
|
||||||
remote-endpoint = <&dw_hdmi_out>;
|
remote-endpoint = <&dw_hdmi_out>;
|
||||||
@ -114,17 +116,6 @@
|
|||||||
gpio = <&gpf 14 GPIO_ACTIVE_LOW>;
|
gpio = <&gpf 14 GPIO_ACTIVE_LOW>;
|
||||||
enable-active-high;
|
enable-active-high;
|
||||||
};
|
};
|
||||||
|
|
||||||
hdmi_power: fixedregulator@3 {
|
|
||||||
compatible = "regulator-fixed";
|
|
||||||
|
|
||||||
regulator-name = "hdmi_power";
|
|
||||||
regulator-min-microvolt = <5000000>;
|
|
||||||
regulator-max-microvolt = <5000000>;
|
|
||||||
|
|
||||||
gpio = <&gpa 25 0>;
|
|
||||||
enable-active-high;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
&ext {
|
&ext {
|
||||||
@ -576,8 +567,6 @@
|
|||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
pinctrl-0 = <&pins_hdmi_ddc>;
|
pinctrl-0 = <&pins_hdmi_ddc>;
|
||||||
|
|
||||||
hdmi-5v-supply = <&hdmi_power>;
|
|
||||||
|
|
||||||
ports {
|
ports {
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
|
@ -74,7 +74,7 @@
|
|||||||
#define EXC(inst_reg,addr,handler) \
|
#define EXC(inst_reg,addr,handler) \
|
||||||
9: inst_reg, addr; \
|
9: inst_reg, addr; \
|
||||||
.section __ex_table,"a"; \
|
.section __ex_table,"a"; \
|
||||||
PTR 9b, handler; \
|
PTR_WD 9b, handler; \
|
||||||
.previous
|
.previous
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -414,6 +414,24 @@ int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu,
|
|||||||
return -ENOIOCTLCMD;
|
return -ENOIOCTLCMD;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Actually run the vCPU, entering an RCU extended quiescent state (EQS) while
|
||||||
|
* the vCPU is running.
|
||||||
|
*
|
||||||
|
* This must be noinstr as instrumentation may make use of RCU, and this is not
|
||||||
|
* safe during the EQS.
|
||||||
|
*/
|
||||||
|
static int noinstr kvm_mips_vcpu_enter_exit(struct kvm_vcpu *vcpu)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
guest_state_enter_irqoff();
|
||||||
|
ret = kvm_mips_callbacks->vcpu_run(vcpu);
|
||||||
|
guest_state_exit_irqoff();
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu)
|
int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu)
|
||||||
{
|
{
|
||||||
int r = -EINTR;
|
int r = -EINTR;
|
||||||
@ -434,7 +452,7 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu)
|
|||||||
lose_fpu(1);
|
lose_fpu(1);
|
||||||
|
|
||||||
local_irq_disable();
|
local_irq_disable();
|
||||||
guest_enter_irqoff();
|
guest_timing_enter_irqoff();
|
||||||
trace_kvm_enter(vcpu);
|
trace_kvm_enter(vcpu);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -445,10 +463,23 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu)
|
|||||||
*/
|
*/
|
||||||
smp_store_mb(vcpu->mode, IN_GUEST_MODE);
|
smp_store_mb(vcpu->mode, IN_GUEST_MODE);
|
||||||
|
|
||||||
r = kvm_mips_callbacks->vcpu_run(vcpu);
|
r = kvm_mips_vcpu_enter_exit(vcpu);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We must ensure that any pending interrupts are taken before
|
||||||
|
* we exit guest timing so that timer ticks are accounted as
|
||||||
|
* guest time. Transiently unmask interrupts so that any
|
||||||
|
* pending interrupts are taken.
|
||||||
|
*
|
||||||
|
* TODO: is there a barrier which ensures that pending interrupts are
|
||||||
|
* recognised? Currently this just hopes that the CPU takes any pending
|
||||||
|
* interrupts between the enable and disable.
|
||||||
|
*/
|
||||||
|
local_irq_enable();
|
||||||
|
local_irq_disable();
|
||||||
|
|
||||||
trace_kvm_out(vcpu);
|
trace_kvm_out(vcpu);
|
||||||
guest_exit_irqoff();
|
guest_timing_exit_irqoff();
|
||||||
local_irq_enable();
|
local_irq_enable();
|
||||||
|
|
||||||
out:
|
out:
|
||||||
@ -1168,7 +1199,7 @@ static void kvm_mips_set_c0_status(void)
|
|||||||
/*
|
/*
|
||||||
* Return value is in the form (errcode<<2 | RESUME_FLAG_HOST | RESUME_FLAG_NV)
|
* Return value is in the form (errcode<<2 | RESUME_FLAG_HOST | RESUME_FLAG_NV)
|
||||||
*/
|
*/
|
||||||
int kvm_mips_handle_exit(struct kvm_vcpu *vcpu)
|
static int __kvm_mips_handle_exit(struct kvm_vcpu *vcpu)
|
||||||
{
|
{
|
||||||
struct kvm_run *run = vcpu->run;
|
struct kvm_run *run = vcpu->run;
|
||||||
u32 cause = vcpu->arch.host_cp0_cause;
|
u32 cause = vcpu->arch.host_cp0_cause;
|
||||||
@ -1357,6 +1388,17 @@ int kvm_mips_handle_exit(struct kvm_vcpu *vcpu)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int noinstr kvm_mips_handle_exit(struct kvm_vcpu *vcpu)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
guest_state_exit_irqoff();
|
||||||
|
ret = __kvm_mips_handle_exit(vcpu);
|
||||||
|
guest_state_enter_irqoff();
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
/* Enable FPU for guest and restore context */
|
/* Enable FPU for guest and restore context */
|
||||||
void kvm_own_fpu(struct kvm_vcpu *vcpu)
|
void kvm_own_fpu(struct kvm_vcpu *vcpu)
|
||||||
{
|
{
|
||||||
|
@ -458,8 +458,8 @@ void kvm_vz_acquire_htimer(struct kvm_vcpu *vcpu)
|
|||||||
/**
|
/**
|
||||||
* _kvm_vz_save_htimer() - Switch to software emulation of guest timer.
|
* _kvm_vz_save_htimer() - Switch to software emulation of guest timer.
|
||||||
* @vcpu: Virtual CPU.
|
* @vcpu: Virtual CPU.
|
||||||
* @compare: Pointer to write compare value to.
|
* @out_compare: Pointer to write compare value to.
|
||||||
* @cause: Pointer to write cause value to.
|
* @out_cause: Pointer to write cause value to.
|
||||||
*
|
*
|
||||||
* Save VZ guest timer state and switch to software emulation of guest CP0
|
* Save VZ guest timer state and switch to software emulation of guest CP0
|
||||||
* timer. The hard timer must already be in use, so preemption should be
|
* timer. The hard timer must already be in use, so preemption should be
|
||||||
@ -1541,11 +1541,14 @@ static int kvm_trap_vz_handle_guest_exit(struct kvm_vcpu *vcpu)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* kvm_trap_vz_handle_cop_unusuable() - Guest used unusable coprocessor.
|
* kvm_trap_vz_handle_cop_unusable() - Guest used unusable coprocessor.
|
||||||
* @vcpu: Virtual CPU context.
|
* @vcpu: Virtual CPU context.
|
||||||
*
|
*
|
||||||
* Handle when the guest attempts to use a coprocessor which hasn't been allowed
|
* Handle when the guest attempts to use a coprocessor which hasn't been allowed
|
||||||
* by the root context.
|
* by the root context.
|
||||||
|
*
|
||||||
|
* Return: value indicating whether to resume the host or the guest
|
||||||
|
* (RESUME_HOST or RESUME_GUEST)
|
||||||
*/
|
*/
|
||||||
static int kvm_trap_vz_handle_cop_unusable(struct kvm_vcpu *vcpu)
|
static int kvm_trap_vz_handle_cop_unusable(struct kvm_vcpu *vcpu)
|
||||||
{
|
{
|
||||||
@ -1592,6 +1595,9 @@ static int kvm_trap_vz_handle_cop_unusable(struct kvm_vcpu *vcpu)
|
|||||||
*
|
*
|
||||||
* Handle when the guest attempts to use MSA when it is disabled in the root
|
* Handle when the guest attempts to use MSA when it is disabled in the root
|
||||||
* context.
|
* context.
|
||||||
|
*
|
||||||
|
* Return: value indicating whether to resume the host or the guest
|
||||||
|
* (RESUME_HOST or RESUME_GUEST)
|
||||||
*/
|
*/
|
||||||
static int kvm_trap_vz_handle_msa_disabled(struct kvm_vcpu *vcpu)
|
static int kvm_trap_vz_handle_msa_disabled(struct kvm_vcpu *vcpu)
|
||||||
{
|
{
|
||||||
|
@ -50,6 +50,12 @@ riscv-march-$(CONFIG_ARCH_RV32I) := rv32ima
|
|||||||
riscv-march-$(CONFIG_ARCH_RV64I) := rv64ima
|
riscv-march-$(CONFIG_ARCH_RV64I) := rv64ima
|
||||||
riscv-march-$(CONFIG_FPU) := $(riscv-march-y)fd
|
riscv-march-$(CONFIG_FPU) := $(riscv-march-y)fd
|
||||||
riscv-march-$(CONFIG_RISCV_ISA_C) := $(riscv-march-y)c
|
riscv-march-$(CONFIG_RISCV_ISA_C) := $(riscv-march-y)c
|
||||||
|
|
||||||
|
# Newer binutils versions default to ISA spec version 20191213 which moves some
|
||||||
|
# instructions from the I extension to the Zicsr and Zifencei extensions.
|
||||||
|
toolchain-need-zicsr-zifencei := $(call cc-option-yn, -march=$(riscv-march-y)_zicsr_zifencei)
|
||||||
|
riscv-march-$(toolchain-need-zicsr-zifencei) := $(riscv-march-y)_zicsr_zifencei
|
||||||
|
|
||||||
KBUILD_CFLAGS += -march=$(subst fd,,$(riscv-march-y))
|
KBUILD_CFLAGS += -march=$(subst fd,,$(riscv-march-y))
|
||||||
KBUILD_AFLAGS += -march=$(riscv-march-y)
|
KBUILD_AFLAGS += -march=$(riscv-march-y)
|
||||||
|
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
#include <linux/sched/hotplug.h>
|
#include <linux/sched/hotplug.h>
|
||||||
#include <asm/irq.h>
|
#include <asm/irq.h>
|
||||||
#include <asm/cpu_ops.h>
|
#include <asm/cpu_ops.h>
|
||||||
|
#include <asm/numa.h>
|
||||||
#include <asm/sbi.h>
|
#include <asm/sbi.h>
|
||||||
|
|
||||||
bool cpu_has_hotplug(unsigned int cpu)
|
bool cpu_has_hotplug(unsigned int cpu)
|
||||||
@ -40,6 +41,7 @@ int __cpu_disable(void)
|
|||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
remove_cpu_topology(cpu);
|
remove_cpu_topology(cpu);
|
||||||
|
numa_remove_cpu(cpu);
|
||||||
set_cpu_online(cpu, false);
|
set_cpu_online(cpu, false);
|
||||||
irq_migrate_all_off_this_cpu();
|
irq_migrate_all_off_this_cpu();
|
||||||
|
|
||||||
|
@ -22,14 +22,13 @@
|
|||||||
add \reg, \reg, t0
|
add \reg, \reg, t0
|
||||||
.endm
|
.endm
|
||||||
.macro XIP_FIXUP_FLASH_OFFSET reg
|
.macro XIP_FIXUP_FLASH_OFFSET reg
|
||||||
la t1, __data_loc
|
la t0, __data_loc
|
||||||
li t0, XIP_OFFSET_MASK
|
REG_L t1, _xip_phys_offset
|
||||||
and t1, t1, t0
|
sub \reg, \reg, t1
|
||||||
li t1, XIP_OFFSET
|
add \reg, \reg, t0
|
||||||
sub t0, t0, t1
|
|
||||||
sub \reg, \reg, t0
|
|
||||||
.endm
|
.endm
|
||||||
_xip_fixup: .dword CONFIG_PHYS_RAM_BASE - CONFIG_XIP_PHYS_ADDR - XIP_OFFSET
|
_xip_fixup: .dword CONFIG_PHYS_RAM_BASE - CONFIG_XIP_PHYS_ADDR - XIP_OFFSET
|
||||||
|
_xip_phys_offset: .dword CONFIG_XIP_PHYS_ADDR + XIP_OFFSET
|
||||||
#else
|
#else
|
||||||
.macro XIP_FIXUP_OFFSET reg
|
.macro XIP_FIXUP_OFFSET reg
|
||||||
.endm
|
.endm
|
||||||
|
@ -22,15 +22,16 @@ void notrace walk_stackframe(struct task_struct *task, struct pt_regs *regs,
|
|||||||
bool (*fn)(void *, unsigned long), void *arg)
|
bool (*fn)(void *, unsigned long), void *arg)
|
||||||
{
|
{
|
||||||
unsigned long fp, sp, pc;
|
unsigned long fp, sp, pc;
|
||||||
|
int level = 0;
|
||||||
|
|
||||||
if (regs) {
|
if (regs) {
|
||||||
fp = frame_pointer(regs);
|
fp = frame_pointer(regs);
|
||||||
sp = user_stack_pointer(regs);
|
sp = user_stack_pointer(regs);
|
||||||
pc = instruction_pointer(regs);
|
pc = instruction_pointer(regs);
|
||||||
} else if (task == NULL || task == current) {
|
} else if (task == NULL || task == current) {
|
||||||
fp = (unsigned long)__builtin_frame_address(1);
|
fp = (unsigned long)__builtin_frame_address(0);
|
||||||
sp = (unsigned long)__builtin_frame_address(0);
|
sp = sp_in_global;
|
||||||
pc = (unsigned long)__builtin_return_address(0);
|
pc = (unsigned long)walk_stackframe;
|
||||||
} else {
|
} else {
|
||||||
/* task blocked in __switch_to */
|
/* task blocked in __switch_to */
|
||||||
fp = task->thread.s[0];
|
fp = task->thread.s[0];
|
||||||
@ -42,7 +43,7 @@ void notrace walk_stackframe(struct task_struct *task, struct pt_regs *regs,
|
|||||||
unsigned long low, high;
|
unsigned long low, high;
|
||||||
struct stackframe *frame;
|
struct stackframe *frame;
|
||||||
|
|
||||||
if (unlikely(!__kernel_text_address(pc) || !fn(arg, pc)))
|
if (unlikely(!__kernel_text_address(pc) || (level++ >= 1 && !fn(arg, pc))))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* Validate frame pointer */
|
/* Validate frame pointer */
|
||||||
|
@ -90,6 +90,7 @@ int kvm_arch_vcpu_precreate(struct kvm *kvm, unsigned int id)
|
|||||||
int kvm_arch_vcpu_create(struct kvm_vcpu *vcpu)
|
int kvm_arch_vcpu_create(struct kvm_vcpu *vcpu)
|
||||||
{
|
{
|
||||||
struct kvm_cpu_context *cntx;
|
struct kvm_cpu_context *cntx;
|
||||||
|
struct kvm_vcpu_csr *reset_csr = &vcpu->arch.guest_reset_csr;
|
||||||
|
|
||||||
/* Mark this VCPU never ran */
|
/* Mark this VCPU never ran */
|
||||||
vcpu->arch.ran_atleast_once = false;
|
vcpu->arch.ran_atleast_once = false;
|
||||||
@ -106,6 +107,9 @@ int kvm_arch_vcpu_create(struct kvm_vcpu *vcpu)
|
|||||||
cntx->hstatus |= HSTATUS_SPVP;
|
cntx->hstatus |= HSTATUS_SPVP;
|
||||||
cntx->hstatus |= HSTATUS_SPV;
|
cntx->hstatus |= HSTATUS_SPV;
|
||||||
|
|
||||||
|
/* By default, make CY, TM, and IR counters accessible in VU mode */
|
||||||
|
reset_csr->scounteren = 0x7;
|
||||||
|
|
||||||
/* Setup VCPU timer */
|
/* Setup VCPU timer */
|
||||||
kvm_riscv_vcpu_timer_init(vcpu);
|
kvm_riscv_vcpu_timer_init(vcpu);
|
||||||
|
|
||||||
@ -699,6 +703,20 @@ static void kvm_riscv_update_hvip(struct kvm_vcpu *vcpu)
|
|||||||
csr_write(CSR_HVIP, csr->hvip);
|
csr_write(CSR_HVIP, csr->hvip);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Actually run the vCPU, entering an RCU extended quiescent state (EQS) while
|
||||||
|
* the vCPU is running.
|
||||||
|
*
|
||||||
|
* This must be noinstr as instrumentation may make use of RCU, and this is not
|
||||||
|
* safe during the EQS.
|
||||||
|
*/
|
||||||
|
static void noinstr kvm_riscv_vcpu_enter_exit(struct kvm_vcpu *vcpu)
|
||||||
|
{
|
||||||
|
guest_state_enter_irqoff();
|
||||||
|
__kvm_riscv_switch_to(&vcpu->arch);
|
||||||
|
guest_state_exit_irqoff();
|
||||||
|
}
|
||||||
|
|
||||||
int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu)
|
int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
@ -790,9 +808,9 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
guest_enter_irqoff();
|
guest_timing_enter_irqoff();
|
||||||
|
|
||||||
__kvm_riscv_switch_to(&vcpu->arch);
|
kvm_riscv_vcpu_enter_exit(vcpu);
|
||||||
|
|
||||||
vcpu->mode = OUTSIDE_GUEST_MODE;
|
vcpu->mode = OUTSIDE_GUEST_MODE;
|
||||||
vcpu->stat.exits++;
|
vcpu->stat.exits++;
|
||||||
@ -812,25 +830,21 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu)
|
|||||||
kvm_riscv_vcpu_sync_interrupts(vcpu);
|
kvm_riscv_vcpu_sync_interrupts(vcpu);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We may have taken a host interrupt in VS/VU-mode (i.e.
|
* We must ensure that any pending interrupts are taken before
|
||||||
* while executing the guest). This interrupt is still
|
* we exit guest timing so that timer ticks are accounted as
|
||||||
* pending, as we haven't serviced it yet!
|
* guest time. Transiently unmask interrupts so that any
|
||||||
|
* pending interrupts are taken.
|
||||||
*
|
*
|
||||||
* We're now back in HS-mode with interrupts disabled
|
* There's no barrier which ensures that pending interrupts are
|
||||||
* so enabling the interrupts now will have the effect
|
* recognised, so we just hope that the CPU takes any pending
|
||||||
* of taking the interrupt again, in HS-mode this time.
|
* interrupts between the enable and disable.
|
||||||
*/
|
*/
|
||||||
local_irq_enable();
|
local_irq_enable();
|
||||||
|
local_irq_disable();
|
||||||
|
|
||||||
/*
|
guest_timing_exit_irqoff();
|
||||||
* We do local_irq_enable() before calling guest_exit() so
|
|
||||||
* that if a timer interrupt hits while running the guest
|
local_irq_enable();
|
||||||
* we account that tick as being spent in the guest. We
|
|
||||||
* enable preemption after calling guest_exit() so that if
|
|
||||||
* we get preempted we make sure ticks after that is not
|
|
||||||
* counted as guest time.
|
|
||||||
*/
|
|
||||||
guest_exit();
|
|
||||||
|
|
||||||
preempt_enable();
|
preempt_enable();
|
||||||
|
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
#include <linux/errno.h>
|
#include <linux/errno.h>
|
||||||
#include <linux/err.h>
|
#include <linux/err.h>
|
||||||
#include <linux/kvm_host.h>
|
#include <linux/kvm_host.h>
|
||||||
|
#include <linux/version.h>
|
||||||
#include <asm/csr.h>
|
#include <asm/csr.h>
|
||||||
#include <asm/sbi.h>
|
#include <asm/sbi.h>
|
||||||
#include <asm/kvm_vcpu_timer.h>
|
#include <asm/kvm_vcpu_timer.h>
|
||||||
@ -32,7 +33,7 @@ static int kvm_sbi_ext_base_handler(struct kvm_vcpu *vcpu, struct kvm_run *run,
|
|||||||
*out_val = KVM_SBI_IMPID;
|
*out_val = KVM_SBI_IMPID;
|
||||||
break;
|
break;
|
||||||
case SBI_EXT_BASE_GET_IMP_VERSION:
|
case SBI_EXT_BASE_GET_IMP_VERSION:
|
||||||
*out_val = 0;
|
*out_val = LINUX_VERSION_CODE;
|
||||||
break;
|
break;
|
||||||
case SBI_EXT_BASE_PROBE_EXT:
|
case SBI_EXT_BASE_PROBE_EXT:
|
||||||
if ((cp->a0 >= SBI_EXT_EXPERIMENTAL_START &&
|
if ((cp->a0 >= SBI_EXT_EXPERIMENTAL_START &&
|
||||||
|
@ -33,7 +33,7 @@ static inline void regs_set_gpr(struct pt_regs *regs, unsigned int offset,
|
|||||||
if (unlikely(offset > MAX_REG_OFFSET))
|
if (unlikely(offset > MAX_REG_OFFSET))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!offset)
|
if (offset)
|
||||||
*(unsigned long *)((unsigned long)regs + offset) = val;
|
*(unsigned long *)((unsigned long)regs + offset) = val;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -43,8 +43,8 @@ static bool ex_handler_uaccess_err_zero(const struct exception_table_entry *ex,
|
|||||||
int reg_err = FIELD_GET(EX_DATA_REG_ERR, ex->data);
|
int reg_err = FIELD_GET(EX_DATA_REG_ERR, ex->data);
|
||||||
int reg_zero = FIELD_GET(EX_DATA_REG_ZERO, ex->data);
|
int reg_zero = FIELD_GET(EX_DATA_REG_ZERO, ex->data);
|
||||||
|
|
||||||
regs_set_gpr(regs, reg_err, -EFAULT);
|
regs_set_gpr(regs, reg_err * sizeof(unsigned long), -EFAULT);
|
||||||
regs_set_gpr(regs, reg_zero, 0);
|
regs_set_gpr(regs, reg_zero * sizeof(unsigned long), 0);
|
||||||
|
|
||||||
regs->epc = get_ex_fixup(ex);
|
regs->epc = get_ex_fixup(ex);
|
||||||
return true;
|
return true;
|
||||||
|
@ -232,6 +232,7 @@ static pmd_t __maybe_unused early_dtb_pmd[PTRS_PER_PMD] __initdata __aligned(PAG
|
|||||||
|
|
||||||
#ifdef CONFIG_XIP_KERNEL
|
#ifdef CONFIG_XIP_KERNEL
|
||||||
#define pt_ops (*(struct pt_alloc_ops *)XIP_FIXUP(&pt_ops))
|
#define pt_ops (*(struct pt_alloc_ops *)XIP_FIXUP(&pt_ops))
|
||||||
|
#define riscv_pfn_base (*(unsigned long *)XIP_FIXUP(&riscv_pfn_base))
|
||||||
#define trampoline_pg_dir ((pgd_t *)XIP_FIXUP(trampoline_pg_dir))
|
#define trampoline_pg_dir ((pgd_t *)XIP_FIXUP(trampoline_pg_dir))
|
||||||
#define fixmap_pte ((pte_t *)XIP_FIXUP(fixmap_pte))
|
#define fixmap_pte ((pte_t *)XIP_FIXUP(fixmap_pte))
|
||||||
#define early_pg_dir ((pgd_t *)XIP_FIXUP(early_pg_dir))
|
#define early_pg_dir ((pgd_t *)XIP_FIXUP(early_pg_dir))
|
||||||
@ -522,6 +523,7 @@ static uintptr_t __init best_map_size(phys_addr_t base, phys_addr_t size)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_XIP_KERNEL
|
#ifdef CONFIG_XIP_KERNEL
|
||||||
|
#define phys_ram_base (*(phys_addr_t *)XIP_FIXUP(&phys_ram_base))
|
||||||
extern char _xiprom[], _exiprom[], __data_loc;
|
extern char _xiprom[], _exiprom[], __data_loc;
|
||||||
|
|
||||||
/* called from head.S with MMU off */
|
/* called from head.S with MMU off */
|
||||||
|
@ -4667,6 +4667,8 @@ static long kvm_s390_guest_sida_op(struct kvm_vcpu *vcpu,
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
if (mop->size + mop->sida_offset > sida_size(vcpu->arch.sie_block))
|
if (mop->size + mop->sida_offset > sida_size(vcpu->arch.sie_block))
|
||||||
return -E2BIG;
|
return -E2BIG;
|
||||||
|
if (!kvm_s390_pv_cpu_is_protected(vcpu))
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
switch (mop->op) {
|
switch (mop->op) {
|
||||||
case KVM_S390_MEMOP_SIDA_READ:
|
case KVM_S390_MEMOP_SIDA_READ:
|
||||||
|
@ -5,9 +5,6 @@
|
|||||||
|
|
||||||
#include "test_modules.h"
|
#include "test_modules.h"
|
||||||
|
|
||||||
#define DECLARE_RETURN(i) int test_modules_return_ ## i(void)
|
|
||||||
REPEAT_10000(DECLARE_RETURN);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Test that modules with many relocations are loaded properly.
|
* Test that modules with many relocations are loaded properly.
|
||||||
*/
|
*/
|
||||||
|
@ -47,4 +47,7 @@
|
|||||||
__REPEAT_10000_1(f, 8); \
|
__REPEAT_10000_1(f, 8); \
|
||||||
__REPEAT_10000_1(f, 9)
|
__REPEAT_10000_1(f, 9)
|
||||||
|
|
||||||
|
#define DECLARE_RETURN(i) int test_modules_return_ ## i(void)
|
||||||
|
REPEAT_10000(DECLARE_RETURN);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -18,12 +18,12 @@
|
|||||||
static int crypto_blake2s_update_x86(struct shash_desc *desc,
|
static int crypto_blake2s_update_x86(struct shash_desc *desc,
|
||||||
const u8 *in, unsigned int inlen)
|
const u8 *in, unsigned int inlen)
|
||||||
{
|
{
|
||||||
return crypto_blake2s_update(desc, in, inlen, blake2s_compress);
|
return crypto_blake2s_update(desc, in, inlen, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int crypto_blake2s_final_x86(struct shash_desc *desc, u8 *out)
|
static int crypto_blake2s_final_x86(struct shash_desc *desc, u8 *out)
|
||||||
{
|
{
|
||||||
return crypto_blake2s_final(desc, out, blake2s_compress);
|
return crypto_blake2s_final(desc, out, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define BLAKE2S_ALG(name, driver_name, digest_size) \
|
#define BLAKE2S_ALG(name, driver_name, digest_size) \
|
||||||
|
@ -4703,6 +4703,19 @@ static __initconst const struct x86_pmu intel_pmu = {
|
|||||||
.lbr_read = intel_pmu_lbr_read_64,
|
.lbr_read = intel_pmu_lbr_read_64,
|
||||||
.lbr_save = intel_pmu_lbr_save,
|
.lbr_save = intel_pmu_lbr_save,
|
||||||
.lbr_restore = intel_pmu_lbr_restore,
|
.lbr_restore = intel_pmu_lbr_restore,
|
||||||
|
|
||||||
|
/*
|
||||||
|
* SMM has access to all 4 rings and while traditionally SMM code only
|
||||||
|
* ran in CPL0, 2021-era firmware is starting to make use of CPL3 in SMM.
|
||||||
|
*
|
||||||
|
* Since the EVENTSEL.{USR,OS} CPL filtering makes no distinction
|
||||||
|
* between SMM or not, this results in what should be pure userspace
|
||||||
|
* counters including SMM data.
|
||||||
|
*
|
||||||
|
* This is a clear privilege issue, therefore globally disable
|
||||||
|
* counting SMM by default.
|
||||||
|
*/
|
||||||
|
.attr_freeze_on_smi = 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
static __init void intel_clovertown_quirk(void)
|
static __init void intel_clovertown_quirk(void)
|
||||||
|
@ -897,8 +897,9 @@ static void pt_handle_status(struct pt *pt)
|
|||||||
* means we are already losing data; need to let the decoder
|
* means we are already losing data; need to let the decoder
|
||||||
* know.
|
* know.
|
||||||
*/
|
*/
|
||||||
if (!intel_pt_validate_hw_cap(PT_CAP_topa_multiple_entries) ||
|
if (!buf->single &&
|
||||||
buf->output_off == pt_buffer_region_size(buf)) {
|
(!intel_pt_validate_hw_cap(PT_CAP_topa_multiple_entries) ||
|
||||||
|
buf->output_off == pt_buffer_region_size(buf))) {
|
||||||
perf_aux_output_flag(&pt->handle,
|
perf_aux_output_flag(&pt->handle,
|
||||||
PERF_AUX_FLAG_TRUNCATED);
|
PERF_AUX_FLAG_TRUNCATED);
|
||||||
advance++;
|
advance++;
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
|
|
||||||
#ifdef CONFIG_DEBUG_BUGVERBOSE
|
#ifdef CONFIG_DEBUG_BUGVERBOSE
|
||||||
|
|
||||||
#define _BUG_FLAGS(ins, flags) \
|
#define _BUG_FLAGS(ins, flags, extra) \
|
||||||
do { \
|
do { \
|
||||||
asm_inline volatile("1:\t" ins "\n" \
|
asm_inline volatile("1:\t" ins "\n" \
|
||||||
".pushsection __bug_table,\"aw\"\n" \
|
".pushsection __bug_table,\"aw\"\n" \
|
||||||
@ -31,7 +31,8 @@ do { \
|
|||||||
"\t.word %c1" "\t# bug_entry::line\n" \
|
"\t.word %c1" "\t# bug_entry::line\n" \
|
||||||
"\t.word %c2" "\t# bug_entry::flags\n" \
|
"\t.word %c2" "\t# bug_entry::flags\n" \
|
||||||
"\t.org 2b+%c3\n" \
|
"\t.org 2b+%c3\n" \
|
||||||
".popsection" \
|
".popsection\n" \
|
||||||
|
extra \
|
||||||
: : "i" (__FILE__), "i" (__LINE__), \
|
: : "i" (__FILE__), "i" (__LINE__), \
|
||||||
"i" (flags), \
|
"i" (flags), \
|
||||||
"i" (sizeof(struct bug_entry))); \
|
"i" (sizeof(struct bug_entry))); \
|
||||||
@ -39,14 +40,15 @@ do { \
|
|||||||
|
|
||||||
#else /* !CONFIG_DEBUG_BUGVERBOSE */
|
#else /* !CONFIG_DEBUG_BUGVERBOSE */
|
||||||
|
|
||||||
#define _BUG_FLAGS(ins, flags) \
|
#define _BUG_FLAGS(ins, flags, extra) \
|
||||||
do { \
|
do { \
|
||||||
asm_inline volatile("1:\t" ins "\n" \
|
asm_inline volatile("1:\t" ins "\n" \
|
||||||
".pushsection __bug_table,\"aw\"\n" \
|
".pushsection __bug_table,\"aw\"\n" \
|
||||||
"2:\t" __BUG_REL(1b) "\t# bug_entry::bug_addr\n" \
|
"2:\t" __BUG_REL(1b) "\t# bug_entry::bug_addr\n" \
|
||||||
"\t.word %c0" "\t# bug_entry::flags\n" \
|
"\t.word %c0" "\t# bug_entry::flags\n" \
|
||||||
"\t.org 2b+%c1\n" \
|
"\t.org 2b+%c1\n" \
|
||||||
".popsection" \
|
".popsection\n" \
|
||||||
|
extra \
|
||||||
: : "i" (flags), \
|
: : "i" (flags), \
|
||||||
"i" (sizeof(struct bug_entry))); \
|
"i" (sizeof(struct bug_entry))); \
|
||||||
} while (0)
|
} while (0)
|
||||||
@ -55,7 +57,7 @@ do { \
|
|||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
#define _BUG_FLAGS(ins, flags) asm volatile(ins)
|
#define _BUG_FLAGS(ins, flags, extra) asm volatile(ins)
|
||||||
|
|
||||||
#endif /* CONFIG_GENERIC_BUG */
|
#endif /* CONFIG_GENERIC_BUG */
|
||||||
|
|
||||||
@ -63,8 +65,8 @@ do { \
|
|||||||
#define BUG() \
|
#define BUG() \
|
||||||
do { \
|
do { \
|
||||||
instrumentation_begin(); \
|
instrumentation_begin(); \
|
||||||
_BUG_FLAGS(ASM_UD2, 0); \
|
_BUG_FLAGS(ASM_UD2, 0, ""); \
|
||||||
unreachable(); \
|
__builtin_unreachable(); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -75,9 +77,9 @@ do { \
|
|||||||
*/
|
*/
|
||||||
#define __WARN_FLAGS(flags) \
|
#define __WARN_FLAGS(flags) \
|
||||||
do { \
|
do { \
|
||||||
|
__auto_type f = BUGFLAG_WARNING|(flags); \
|
||||||
instrumentation_begin(); \
|
instrumentation_begin(); \
|
||||||
_BUG_FLAGS(ASM_UD2, BUGFLAG_WARNING|(flags)); \
|
_BUG_FLAGS(ASM_UD2, f, ASM_REACHABLE); \
|
||||||
annotate_reachable(); \
|
|
||||||
instrumentation_end(); \
|
instrumentation_end(); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
@ -82,7 +82,7 @@ KVM_X86_OP_NULL(guest_apic_has_interrupt)
|
|||||||
KVM_X86_OP(load_eoi_exitmap)
|
KVM_X86_OP(load_eoi_exitmap)
|
||||||
KVM_X86_OP(set_virtual_apic_mode)
|
KVM_X86_OP(set_virtual_apic_mode)
|
||||||
KVM_X86_OP_NULL(set_apic_access_page_addr)
|
KVM_X86_OP_NULL(set_apic_access_page_addr)
|
||||||
KVM_X86_OP(deliver_posted_interrupt)
|
KVM_X86_OP(deliver_interrupt)
|
||||||
KVM_X86_OP_NULL(sync_pir_to_irr)
|
KVM_X86_OP_NULL(sync_pir_to_irr)
|
||||||
KVM_X86_OP(set_tss_addr)
|
KVM_X86_OP(set_tss_addr)
|
||||||
KVM_X86_OP(set_identity_map_addr)
|
KVM_X86_OP(set_identity_map_addr)
|
||||||
|
@ -1410,7 +1410,8 @@ struct kvm_x86_ops {
|
|||||||
void (*load_eoi_exitmap)(struct kvm_vcpu *vcpu, u64 *eoi_exit_bitmap);
|
void (*load_eoi_exitmap)(struct kvm_vcpu *vcpu, u64 *eoi_exit_bitmap);
|
||||||
void (*set_virtual_apic_mode)(struct kvm_vcpu *vcpu);
|
void (*set_virtual_apic_mode)(struct kvm_vcpu *vcpu);
|
||||||
void (*set_apic_access_page_addr)(struct kvm_vcpu *vcpu);
|
void (*set_apic_access_page_addr)(struct kvm_vcpu *vcpu);
|
||||||
int (*deliver_posted_interrupt)(struct kvm_vcpu *vcpu, int vector);
|
void (*deliver_interrupt)(struct kvm_lapic *apic, int delivery_mode,
|
||||||
|
int trig_mode, int vector);
|
||||||
int (*sync_pir_to_irr)(struct kvm_vcpu *vcpu);
|
int (*sync_pir_to_irr)(struct kvm_vcpu *vcpu);
|
||||||
int (*set_tss_addr)(struct kvm *kvm, unsigned int addr);
|
int (*set_tss_addr)(struct kvm *kvm, unsigned int addr);
|
||||||
int (*set_identity_map_addr)(struct kvm *kvm, u64 ident_addr);
|
int (*set_identity_map_addr)(struct kvm *kvm, u64 ident_addr);
|
||||||
|
@ -100,6 +100,13 @@
|
|||||||
/* Memory mapped from other domains has valid IOMMU entries */
|
/* Memory mapped from other domains has valid IOMMU entries */
|
||||||
#define XEN_HVM_CPUID_IOMMU_MAPPINGS (1u << 2)
|
#define XEN_HVM_CPUID_IOMMU_MAPPINGS (1u << 2)
|
||||||
#define XEN_HVM_CPUID_VCPU_ID_PRESENT (1u << 3) /* vcpu id is present in EBX */
|
#define XEN_HVM_CPUID_VCPU_ID_PRESENT (1u << 3) /* vcpu id is present in EBX */
|
||||||
|
#define XEN_HVM_CPUID_DOMID_PRESENT (1u << 4) /* domid is present in ECX */
|
||||||
|
/*
|
||||||
|
* Bits 55:49 from the IO-APIC RTE and bits 11:5 from the MSI address can be
|
||||||
|
* used to store high bits for the Destination ID. This expands the Destination
|
||||||
|
* ID field from 8 to 15 bits, allowing to target APIC IDs up 32768.
|
||||||
|
*/
|
||||||
|
#define XEN_HVM_CPUID_EXT_DEST_ID (1u << 5)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Leaf 6 (0x40000x05)
|
* Leaf 6 (0x40000x05)
|
||||||
|
@ -43,20 +43,6 @@ static inline uint32_t xen_cpuid_base(void)
|
|||||||
return hypervisor_cpuid_base("XenVMMXenVMM", 2);
|
return hypervisor_cpuid_base("XenVMMXenVMM", 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_XEN
|
|
||||||
extern bool __init xen_hvm_need_lapic(void);
|
|
||||||
|
|
||||||
static inline bool __init xen_x2apic_para_available(void)
|
|
||||||
{
|
|
||||||
return xen_hvm_need_lapic();
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
static inline bool __init xen_x2apic_para_available(void)
|
|
||||||
{
|
|
||||||
return (xen_cpuid_base() != 0);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
struct pci_dev;
|
struct pci_dev;
|
||||||
|
|
||||||
#ifdef CONFIG_XEN_PV_DOM0
|
#ifdef CONFIG_XEN_PV_DOM0
|
||||||
|
@ -410,6 +410,8 @@ void sgx_encl_release(struct kref *ref)
|
|||||||
}
|
}
|
||||||
|
|
||||||
kfree(entry);
|
kfree(entry);
|
||||||
|
/* Invoke scheduler to prevent soft lockups. */
|
||||||
|
cond_resched();
|
||||||
}
|
}
|
||||||
|
|
||||||
xa_destroy(&encl->page_array);
|
xa_destroy(&encl->page_array);
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
// SPDX-License-Identifier: GPL-2.0
|
// SPDX-License-Identifier: GPL-2.0
|
||||||
#include <linux/dmi.h>
|
|
||||||
#include <linux/ioport.h>
|
#include <linux/ioport.h>
|
||||||
#include <asm/e820/api.h>
|
#include <asm/e820/api.h>
|
||||||
|
|
||||||
@ -24,31 +23,11 @@ static void resource_clip(struct resource *res, resource_size_t start,
|
|||||||
res->start = end + 1;
|
res->start = end + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Some BIOS-es contain a bug where they add addresses which map to
|
|
||||||
* system RAM in the PCI host bridge window returned by the ACPI _CRS
|
|
||||||
* method, see commit 4dc2287c1805 ("x86: avoid E820 regions when
|
|
||||||
* allocating address space"). To avoid this Linux by default excludes
|
|
||||||
* E820 reservations when allocating addresses since 2010.
|
|
||||||
* In 2019 some systems have shown-up with E820 reservations which cover
|
|
||||||
* the entire _CRS returned PCI host bridge window, causing all attempts
|
|
||||||
* to assign memory to PCI BARs to fail if Linux uses E820 reservations.
|
|
||||||
*
|
|
||||||
* Ideally Linux would fully stop using E820 reservations, but then
|
|
||||||
* the old systems this was added for will regress.
|
|
||||||
* Instead keep the old behavior for old systems, while ignoring the
|
|
||||||
* E820 reservations for any systems from now on.
|
|
||||||
*/
|
|
||||||
static void remove_e820_regions(struct resource *avail)
|
static void remove_e820_regions(struct resource *avail)
|
||||||
{
|
{
|
||||||
int i, year = dmi_get_bios_year();
|
int i;
|
||||||
struct e820_entry *entry;
|
struct e820_entry *entry;
|
||||||
|
|
||||||
if (year >= 2018)
|
|
||||||
return;
|
|
||||||
|
|
||||||
pr_info_once("PCI: Removing E820 reservations from host bridge windows\n");
|
|
||||||
|
|
||||||
for (i = 0; i < e820_table->nr_entries; i++) {
|
for (i = 0; i < e820_table->nr_entries; i++) {
|
||||||
entry = &e820_table->entries[i];
|
entry = &e820_table->entries[i];
|
||||||
|
|
||||||
|
@ -554,12 +554,13 @@ void kvm_set_cpu_caps(void)
|
|||||||
);
|
);
|
||||||
|
|
||||||
kvm_cpu_cap_mask(CPUID_7_0_EBX,
|
kvm_cpu_cap_mask(CPUID_7_0_EBX,
|
||||||
F(FSGSBASE) | F(SGX) | F(BMI1) | F(HLE) | F(AVX2) | F(SMEP) |
|
F(FSGSBASE) | F(SGX) | F(BMI1) | F(HLE) | F(AVX2) |
|
||||||
F(BMI2) | F(ERMS) | F(INVPCID) | F(RTM) | 0 /*MPX*/ | F(RDSEED) |
|
F(FDP_EXCPTN_ONLY) | F(SMEP) | F(BMI2) | F(ERMS) | F(INVPCID) |
|
||||||
F(ADX) | F(SMAP) | F(AVX512IFMA) | F(AVX512F) | F(AVX512PF) |
|
F(RTM) | F(ZERO_FCS_FDS) | 0 /*MPX*/ | F(AVX512F) |
|
||||||
F(AVX512ER) | F(AVX512CD) | F(CLFLUSHOPT) | F(CLWB) | F(AVX512DQ) |
|
F(AVX512DQ) | F(RDSEED) | F(ADX) | F(SMAP) | F(AVX512IFMA) |
|
||||||
F(SHA_NI) | F(AVX512BW) | F(AVX512VL) | 0 /*INTEL_PT*/
|
F(CLFLUSHOPT) | F(CLWB) | 0 /*INTEL_PT*/ | F(AVX512PF) |
|
||||||
);
|
F(AVX512ER) | F(AVX512CD) | F(SHA_NI) | F(AVX512BW) |
|
||||||
|
F(AVX512VL));
|
||||||
|
|
||||||
kvm_cpu_cap_mask(CPUID_7_ECX,
|
kvm_cpu_cap_mask(CPUID_7_ECX,
|
||||||
F(AVX512VBMI) | F(LA57) | F(PKU) | 0 /*OSPKE*/ | F(RDPID) |
|
F(AVX512VBMI) | F(LA57) | F(PKU) | 0 /*OSPKE*/ | F(RDPID) |
|
||||||
|
@ -1096,14 +1096,8 @@ static int __apic_accept_irq(struct kvm_lapic *apic, int delivery_mode,
|
|||||||
apic->regs + APIC_TMR);
|
apic->regs + APIC_TMR);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (static_call(kvm_x86_deliver_posted_interrupt)(vcpu, vector)) {
|
static_call(kvm_x86_deliver_interrupt)(apic, delivery_mode,
|
||||||
kvm_lapic_set_irr(vector, apic);
|
trig_mode, vector);
|
||||||
kvm_make_request(KVM_REQ_EVENT, vcpu);
|
|
||||||
kvm_vcpu_kick(vcpu);
|
|
||||||
} else {
|
|
||||||
trace_kvm_apicv_accept_irq(vcpu->vcpu_id, delivery_mode,
|
|
||||||
trig_mode, vector);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case APIC_DM_REMRD:
|
case APIC_DM_REMRD:
|
||||||
|
@ -3291,6 +3291,21 @@ static void svm_set_irq(struct kvm_vcpu *vcpu)
|
|||||||
SVM_EVTINJ_VALID | SVM_EVTINJ_TYPE_INTR;
|
SVM_EVTINJ_VALID | SVM_EVTINJ_TYPE_INTR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void svm_deliver_interrupt(struct kvm_lapic *apic, int delivery_mode,
|
||||||
|
int trig_mode, int vector)
|
||||||
|
{
|
||||||
|
struct kvm_vcpu *vcpu = apic->vcpu;
|
||||||
|
|
||||||
|
if (svm_deliver_avic_intr(vcpu, vector)) {
|
||||||
|
kvm_lapic_set_irr(vector, apic);
|
||||||
|
kvm_make_request(KVM_REQ_EVENT, vcpu);
|
||||||
|
kvm_vcpu_kick(vcpu);
|
||||||
|
} else {
|
||||||
|
trace_kvm_apicv_accept_irq(vcpu->vcpu_id, delivery_mode,
|
||||||
|
trig_mode, vector);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void svm_update_cr8_intercept(struct kvm_vcpu *vcpu, int tpr, int irr)
|
static void svm_update_cr8_intercept(struct kvm_vcpu *vcpu, int tpr, int irr)
|
||||||
{
|
{
|
||||||
struct vcpu_svm *svm = to_svm(vcpu);
|
struct vcpu_svm *svm = to_svm(vcpu);
|
||||||
@ -3615,7 +3630,7 @@ static noinstr void svm_vcpu_enter_exit(struct kvm_vcpu *vcpu)
|
|||||||
struct vcpu_svm *svm = to_svm(vcpu);
|
struct vcpu_svm *svm = to_svm(vcpu);
|
||||||
unsigned long vmcb_pa = svm->current_vmcb->pa;
|
unsigned long vmcb_pa = svm->current_vmcb->pa;
|
||||||
|
|
||||||
kvm_guest_enter_irqoff();
|
guest_state_enter_irqoff();
|
||||||
|
|
||||||
if (sev_es_guest(vcpu->kvm)) {
|
if (sev_es_guest(vcpu->kvm)) {
|
||||||
__svm_sev_es_vcpu_run(vmcb_pa);
|
__svm_sev_es_vcpu_run(vmcb_pa);
|
||||||
@ -3635,7 +3650,7 @@ static noinstr void svm_vcpu_enter_exit(struct kvm_vcpu *vcpu)
|
|||||||
vmload(__sme_page_pa(sd->save_area));
|
vmload(__sme_page_pa(sd->save_area));
|
||||||
}
|
}
|
||||||
|
|
||||||
kvm_guest_exit_irqoff();
|
guest_state_exit_irqoff();
|
||||||
}
|
}
|
||||||
|
|
||||||
static __no_kcsan fastpath_t svm_vcpu_run(struct kvm_vcpu *vcpu)
|
static __no_kcsan fastpath_t svm_vcpu_run(struct kvm_vcpu *vcpu)
|
||||||
@ -4545,7 +4560,7 @@ static struct kvm_x86_ops svm_x86_ops __initdata = {
|
|||||||
.pmu_ops = &amd_pmu_ops,
|
.pmu_ops = &amd_pmu_ops,
|
||||||
.nested_ops = &svm_nested_ops,
|
.nested_ops = &svm_nested_ops,
|
||||||
|
|
||||||
.deliver_posted_interrupt = svm_deliver_avic_intr,
|
.deliver_interrupt = svm_deliver_interrupt,
|
||||||
.dy_apicv_has_pending_interrupt = svm_dy_apicv_has_pending_interrupt,
|
.dy_apicv_has_pending_interrupt = svm_dy_apicv_has_pending_interrupt,
|
||||||
.update_pi_irte = svm_update_pi_irte,
|
.update_pi_irte = svm_update_pi_irte,
|
||||||
.setup_mce = svm_setup_mce,
|
.setup_mce = svm_setup_mce,
|
||||||
|
@ -4041,6 +4041,21 @@ static int vmx_deliver_posted_interrupt(struct kvm_vcpu *vcpu, int vector)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void vmx_deliver_interrupt(struct kvm_lapic *apic, int delivery_mode,
|
||||||
|
int trig_mode, int vector)
|
||||||
|
{
|
||||||
|
struct kvm_vcpu *vcpu = apic->vcpu;
|
||||||
|
|
||||||
|
if (vmx_deliver_posted_interrupt(vcpu, vector)) {
|
||||||
|
kvm_lapic_set_irr(vector, apic);
|
||||||
|
kvm_make_request(KVM_REQ_EVENT, vcpu);
|
||||||
|
kvm_vcpu_kick(vcpu);
|
||||||
|
} else {
|
||||||
|
trace_kvm_apicv_accept_irq(vcpu->vcpu_id, delivery_mode,
|
||||||
|
trig_mode, vector);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set up the vmcs's constant host-state fields, i.e., host-state fields that
|
* Set up the vmcs's constant host-state fields, i.e., host-state fields that
|
||||||
* will not change in the lifetime of the guest.
|
* will not change in the lifetime of the guest.
|
||||||
@ -6754,7 +6769,7 @@ static fastpath_t vmx_exit_handlers_fastpath(struct kvm_vcpu *vcpu)
|
|||||||
static noinstr void vmx_vcpu_enter_exit(struct kvm_vcpu *vcpu,
|
static noinstr void vmx_vcpu_enter_exit(struct kvm_vcpu *vcpu,
|
||||||
struct vcpu_vmx *vmx)
|
struct vcpu_vmx *vmx)
|
||||||
{
|
{
|
||||||
kvm_guest_enter_irqoff();
|
guest_state_enter_irqoff();
|
||||||
|
|
||||||
/* L1D Flush includes CPU buffer clear to mitigate MDS */
|
/* L1D Flush includes CPU buffer clear to mitigate MDS */
|
||||||
if (static_branch_unlikely(&vmx_l1d_should_flush))
|
if (static_branch_unlikely(&vmx_l1d_should_flush))
|
||||||
@ -6770,7 +6785,7 @@ static noinstr void vmx_vcpu_enter_exit(struct kvm_vcpu *vcpu,
|
|||||||
|
|
||||||
vcpu->arch.cr2 = native_read_cr2();
|
vcpu->arch.cr2 = native_read_cr2();
|
||||||
|
|
||||||
kvm_guest_exit_irqoff();
|
guest_state_exit_irqoff();
|
||||||
}
|
}
|
||||||
|
|
||||||
static fastpath_t vmx_vcpu_run(struct kvm_vcpu *vcpu)
|
static fastpath_t vmx_vcpu_run(struct kvm_vcpu *vcpu)
|
||||||
@ -7768,7 +7783,7 @@ static struct kvm_x86_ops vmx_x86_ops __initdata = {
|
|||||||
.hwapic_isr_update = vmx_hwapic_isr_update,
|
.hwapic_isr_update = vmx_hwapic_isr_update,
|
||||||
.guest_apic_has_interrupt = vmx_guest_apic_has_interrupt,
|
.guest_apic_has_interrupt = vmx_guest_apic_has_interrupt,
|
||||||
.sync_pir_to_irr = vmx_sync_pir_to_irr,
|
.sync_pir_to_irr = vmx_sync_pir_to_irr,
|
||||||
.deliver_posted_interrupt = vmx_deliver_posted_interrupt,
|
.deliver_interrupt = vmx_deliver_interrupt,
|
||||||
.dy_apicv_has_pending_interrupt = pi_has_pending_interrupt,
|
.dy_apicv_has_pending_interrupt = pi_has_pending_interrupt,
|
||||||
|
|
||||||
.set_tss_addr = vmx_set_tss_addr,
|
.set_tss_addr = vmx_set_tss_addr,
|
||||||
|
@ -90,6 +90,8 @@
|
|||||||
u64 __read_mostly kvm_mce_cap_supported = MCG_CTL_P | MCG_SER_P;
|
u64 __read_mostly kvm_mce_cap_supported = MCG_CTL_P | MCG_SER_P;
|
||||||
EXPORT_SYMBOL_GPL(kvm_mce_cap_supported);
|
EXPORT_SYMBOL_GPL(kvm_mce_cap_supported);
|
||||||
|
|
||||||
|
#define ERR_PTR_USR(e) ((void __user *)ERR_PTR(e))
|
||||||
|
|
||||||
#define emul_to_vcpu(ctxt) \
|
#define emul_to_vcpu(ctxt) \
|
||||||
((struct kvm_vcpu *)(ctxt)->vcpu)
|
((struct kvm_vcpu *)(ctxt)->vcpu)
|
||||||
|
|
||||||
@ -4340,7 +4342,7 @@ static inline void __user *kvm_get_attr_addr(struct kvm_device_attr *attr)
|
|||||||
void __user *uaddr = (void __user*)(unsigned long)attr->addr;
|
void __user *uaddr = (void __user*)(unsigned long)attr->addr;
|
||||||
|
|
||||||
if ((u64)(unsigned long)uaddr != attr->addr)
|
if ((u64)(unsigned long)uaddr != attr->addr)
|
||||||
return ERR_PTR(-EFAULT);
|
return ERR_PTR_USR(-EFAULT);
|
||||||
return uaddr;
|
return uaddr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -10041,6 +10043,8 @@ static int vcpu_enter_guest(struct kvm_vcpu *vcpu)
|
|||||||
set_debugreg(0, 7);
|
set_debugreg(0, 7);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
guest_timing_enter_irqoff();
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
/*
|
/*
|
||||||
* Assert that vCPU vs. VM APICv state is consistent. An APICv
|
* Assert that vCPU vs. VM APICv state is consistent. An APICv
|
||||||
@ -10125,7 +10129,7 @@ static int vcpu_enter_guest(struct kvm_vcpu *vcpu)
|
|||||||
* of accounting via context tracking, but the loss of accuracy is
|
* of accounting via context tracking, but the loss of accuracy is
|
||||||
* acceptable for all known use cases.
|
* acceptable for all known use cases.
|
||||||
*/
|
*/
|
||||||
vtime_account_guest_exit();
|
guest_timing_exit_irqoff();
|
||||||
|
|
||||||
if (lapic_in_kernel(vcpu)) {
|
if (lapic_in_kernel(vcpu)) {
|
||||||
s64 delta = vcpu->arch.apic->lapic_timer.advance_expire_delta;
|
s64 delta = vcpu->arch.apic->lapic_timer.advance_expire_delta;
|
||||||
@ -11639,8 +11643,6 @@ void kvm_arch_sync_events(struct kvm *kvm)
|
|||||||
kvm_free_pit(kvm);
|
kvm_free_pit(kvm);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define ERR_PTR_USR(e) ((void __user *)ERR_PTR(e))
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* __x86_set_memory_region: Setup KVM internal memory slot
|
* __x86_set_memory_region: Setup KVM internal memory slot
|
||||||
*
|
*
|
||||||
|
@ -10,51 +10,6 @@
|
|||||||
|
|
||||||
void kvm_spurious_fault(void);
|
void kvm_spurious_fault(void);
|
||||||
|
|
||||||
static __always_inline void kvm_guest_enter_irqoff(void)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* VMENTER enables interrupts (host state), but the kernel state is
|
|
||||||
* interrupts disabled when this is invoked. Also tell RCU about
|
|
||||||
* it. This is the same logic as for exit_to_user_mode().
|
|
||||||
*
|
|
||||||
* This ensures that e.g. latency analysis on the host observes
|
|
||||||
* guest mode as interrupt enabled.
|
|
||||||
*
|
|
||||||
* guest_enter_irqoff() informs context tracking about the
|
|
||||||
* transition to guest mode and if enabled adjusts RCU state
|
|
||||||
* accordingly.
|
|
||||||
*/
|
|
||||||
instrumentation_begin();
|
|
||||||
trace_hardirqs_on_prepare();
|
|
||||||
lockdep_hardirqs_on_prepare(CALLER_ADDR0);
|
|
||||||
instrumentation_end();
|
|
||||||
|
|
||||||
guest_enter_irqoff();
|
|
||||||
lockdep_hardirqs_on(CALLER_ADDR0);
|
|
||||||
}
|
|
||||||
|
|
||||||
static __always_inline void kvm_guest_exit_irqoff(void)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* VMEXIT disables interrupts (host state), but tracing and lockdep
|
|
||||||
* have them in state 'on' as recorded before entering guest mode.
|
|
||||||
* Same as enter_from_user_mode().
|
|
||||||
*
|
|
||||||
* context_tracking_guest_exit() restores host context and reinstates
|
|
||||||
* RCU if enabled and required.
|
|
||||||
*
|
|
||||||
* This needs to be done immediately after VM-Exit, before any code
|
|
||||||
* that might contain tracepoints or call out to the greater world,
|
|
||||||
* e.g. before x86_spec_ctrl_restore_host().
|
|
||||||
*/
|
|
||||||
lockdep_hardirqs_off(CALLER_ADDR0);
|
|
||||||
context_tracking_guest_exit();
|
|
||||||
|
|
||||||
instrumentation_begin();
|
|
||||||
trace_hardirqs_off_finish();
|
|
||||||
instrumentation_end();
|
|
||||||
}
|
|
||||||
|
|
||||||
#define KVM_NESTED_VMENTER_CONSISTENCY_CHECK(consistency_check) \
|
#define KVM_NESTED_VMENTER_CONSISTENCY_CHECK(consistency_check) \
|
||||||
({ \
|
({ \
|
||||||
bool failed = (consistency_check); \
|
bool failed = (consistency_check); \
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
#include <xen/events.h>
|
#include <xen/events.h>
|
||||||
#include <xen/interface/memory.h>
|
#include <xen/interface/memory.h>
|
||||||
|
|
||||||
|
#include <asm/apic.h>
|
||||||
#include <asm/cpu.h>
|
#include <asm/cpu.h>
|
||||||
#include <asm/smp.h>
|
#include <asm/smp.h>
|
||||||
#include <asm/io_apic.h>
|
#include <asm/io_apic.h>
|
||||||
@ -184,8 +185,7 @@ static int xen_cpu_dead_hvm(unsigned int cpu)
|
|||||||
|
|
||||||
if (xen_have_vector_callback && xen_feature(XENFEAT_hvm_safe_pvclock))
|
if (xen_have_vector_callback && xen_feature(XENFEAT_hvm_safe_pvclock))
|
||||||
xen_teardown_timer(cpu);
|
xen_teardown_timer(cpu);
|
||||||
|
return 0;
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool no_vector_callback __initdata;
|
static bool no_vector_callback __initdata;
|
||||||
@ -242,15 +242,14 @@ static __init int xen_parse_no_vector_callback(char *arg)
|
|||||||
}
|
}
|
||||||
early_param("xen_no_vector_callback", xen_parse_no_vector_callback);
|
early_param("xen_no_vector_callback", xen_parse_no_vector_callback);
|
||||||
|
|
||||||
bool __init xen_hvm_need_lapic(void)
|
static __init bool xen_x2apic_available(void)
|
||||||
{
|
{
|
||||||
if (xen_pv_domain())
|
return x2apic_supported();
|
||||||
return false;
|
}
|
||||||
if (!xen_hvm_domain())
|
|
||||||
return false;
|
static bool __init msi_ext_dest_id(void)
|
||||||
if (xen_feature(XENFEAT_hvm_pirqs) && xen_have_vector_callback)
|
{
|
||||||
return false;
|
return cpuid_eax(xen_cpuid_base() + 4) & XEN_HVM_CPUID_EXT_DEST_ID;
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static __init void xen_hvm_guest_late_init(void)
|
static __init void xen_hvm_guest_late_init(void)
|
||||||
@ -312,9 +311,10 @@ struct hypervisor_x86 x86_hyper_xen_hvm __initdata = {
|
|||||||
.detect = xen_platform_hvm,
|
.detect = xen_platform_hvm,
|
||||||
.type = X86_HYPER_XEN_HVM,
|
.type = X86_HYPER_XEN_HVM,
|
||||||
.init.init_platform = xen_hvm_guest_init,
|
.init.init_platform = xen_hvm_guest_init,
|
||||||
.init.x2apic_available = xen_x2apic_para_available,
|
.init.x2apic_available = xen_x2apic_available,
|
||||||
.init.init_mem_mapping = xen_hvm_init_mem_mapping,
|
.init.init_mem_mapping = xen_hvm_init_mem_mapping,
|
||||||
.init.guest_late_init = xen_hvm_guest_late_init,
|
.init.guest_late_init = xen_hvm_guest_late_init,
|
||||||
|
.init.msi_ext_dest_id = msi_ext_dest_id,
|
||||||
.runtime.pin_vcpu = xen_pin_vcpu,
|
.runtime.pin_vcpu = xen_pin_vcpu,
|
||||||
.ignore_nopv = true,
|
.ignore_nopv = true,
|
||||||
};
|
};
|
||||||
|
@ -1341,10 +1341,6 @@ asmlinkage __visible void __init xen_start_kernel(void)
|
|||||||
|
|
||||||
xen_acpi_sleep_register();
|
xen_acpi_sleep_register();
|
||||||
|
|
||||||
/* Avoid searching for BIOS MP tables */
|
|
||||||
x86_init.mpparse.find_smp_config = x86_init_noop;
|
|
||||||
x86_init.mpparse.get_smp_config = x86_init_uint_noop;
|
|
||||||
|
|
||||||
xen_boot_params_init_edd();
|
xen_boot_params_init_edd();
|
||||||
|
|
||||||
#ifdef CONFIG_ACPI
|
#ifdef CONFIG_ACPI
|
||||||
|
@ -148,28 +148,12 @@ int xen_smp_intr_init_pv(unsigned int cpu)
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __init xen_fill_possible_map(void)
|
static void __init _get_smp_config(unsigned int early)
|
||||||
{
|
|
||||||
int i, rc;
|
|
||||||
|
|
||||||
if (xen_initial_domain())
|
|
||||||
return;
|
|
||||||
|
|
||||||
for (i = 0; i < nr_cpu_ids; i++) {
|
|
||||||
rc = HYPERVISOR_vcpu_op(VCPUOP_is_up, i, NULL);
|
|
||||||
if (rc >= 0) {
|
|
||||||
num_processors++;
|
|
||||||
set_cpu_possible(i, true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void __init xen_filter_cpu_maps(void)
|
|
||||||
{
|
{
|
||||||
int i, rc;
|
int i, rc;
|
||||||
unsigned int subtract = 0;
|
unsigned int subtract = 0;
|
||||||
|
|
||||||
if (!xen_initial_domain())
|
if (early)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
num_processors = 0;
|
num_processors = 0;
|
||||||
@ -210,7 +194,6 @@ static void __init xen_pv_smp_prepare_boot_cpu(void)
|
|||||||
* sure the old memory can be recycled. */
|
* sure the old memory can be recycled. */
|
||||||
make_lowmem_page_readwrite(xen_initial_gdt);
|
make_lowmem_page_readwrite(xen_initial_gdt);
|
||||||
|
|
||||||
xen_filter_cpu_maps();
|
|
||||||
xen_setup_vcpu_info_placement();
|
xen_setup_vcpu_info_placement();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -476,5 +459,8 @@ static const struct smp_ops xen_smp_ops __initconst = {
|
|||||||
void __init xen_smp_init(void)
|
void __init xen_smp_init(void)
|
||||||
{
|
{
|
||||||
smp_ops = xen_smp_ops;
|
smp_ops = xen_smp_ops;
|
||||||
xen_fill_possible_map();
|
|
||||||
|
/* Avoid searching for BIOS MP tables */
|
||||||
|
x86_init.mpparse.find_smp_config = x86_init_noop;
|
||||||
|
x86_init.mpparse.get_smp_config = _get_smp_config;
|
||||||
}
|
}
|
||||||
|
@ -57,6 +57,14 @@ void __init xen_init_vga(const struct dom0_vga_console_info *info, size_t size)
|
|||||||
screen_info->rsvd_size = info->u.vesa_lfb.rsvd_size;
|
screen_info->rsvd_size = info->u.vesa_lfb.rsvd_size;
|
||||||
screen_info->rsvd_pos = info->u.vesa_lfb.rsvd_pos;
|
screen_info->rsvd_pos = info->u.vesa_lfb.rsvd_pos;
|
||||||
|
|
||||||
|
if (size >= offsetof(struct dom0_vga_console_info,
|
||||||
|
u.vesa_lfb.ext_lfb_base)
|
||||||
|
+ sizeof(info->u.vesa_lfb.ext_lfb_base)
|
||||||
|
&& info->u.vesa_lfb.ext_lfb_base) {
|
||||||
|
screen_info->ext_lfb_base = info->u.vesa_lfb.ext_lfb_base;
|
||||||
|
screen_info->capabilities |= VIDEO_CAPABILITY_64BIT_BASE;
|
||||||
|
}
|
||||||
|
|
||||||
if (info->video_type == XEN_VGATYPE_EFI_LFB) {
|
if (info->video_type == XEN_VGATYPE_EFI_LFB) {
|
||||||
screen_info->orig_video_isVGA = VIDEO_TYPE_EFI;
|
screen_info->orig_video_isVGA = VIDEO_TYPE_EFI;
|
||||||
break;
|
break;
|
||||||
@ -66,14 +74,6 @@ void __init xen_init_vga(const struct dom0_vga_console_info *info, size_t size)
|
|||||||
u.vesa_lfb.mode_attrs)
|
u.vesa_lfb.mode_attrs)
|
||||||
+ sizeof(info->u.vesa_lfb.mode_attrs))
|
+ sizeof(info->u.vesa_lfb.mode_attrs))
|
||||||
screen_info->vesa_attributes = info->u.vesa_lfb.mode_attrs;
|
screen_info->vesa_attributes = info->u.vesa_lfb.mode_attrs;
|
||||||
|
|
||||||
if (size >= offsetof(struct dom0_vga_console_info,
|
|
||||||
u.vesa_lfb.ext_lfb_base)
|
|
||||||
+ sizeof(info->u.vesa_lfb.ext_lfb_base)
|
|
||||||
&& info->u.vesa_lfb.ext_lfb_base) {
|
|
||||||
screen_info->ext_lfb_base = info->u.vesa_lfb.ext_lfb_base;
|
|
||||||
screen_info->capabilities |= VIDEO_CAPABILITY_64BIT_BASE;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -373,7 +373,7 @@ void bio_integrity_advance(struct bio *bio, unsigned int bytes_done)
|
|||||||
struct blk_integrity *bi = blk_get_integrity(bio->bi_bdev->bd_disk);
|
struct blk_integrity *bi = blk_get_integrity(bio->bi_bdev->bd_disk);
|
||||||
unsigned bytes = bio_integrity_bytes(bi, bytes_done >> 9);
|
unsigned bytes = bio_integrity_bytes(bi, bytes_done >> 9);
|
||||||
|
|
||||||
bip->bip_iter.bi_sector += bytes_done >> 9;
|
bip->bip_iter.bi_sector += bio_integrity_intervals(bi, bytes_done >> 9);
|
||||||
bvec_iter_advance(bip->bip_vec, &bip->bip_iter, bytes);
|
bvec_iter_advance(bip->bip_vec, &bip->bip_iter, bytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
33
block/fops.c
33
block/fops.c
@ -566,34 +566,37 @@ static ssize_t blkdev_read_iter(struct kiocb *iocb, struct iov_iter *to)
|
|||||||
{
|
{
|
||||||
struct block_device *bdev = iocb->ki_filp->private_data;
|
struct block_device *bdev = iocb->ki_filp->private_data;
|
||||||
loff_t size = bdev_nr_bytes(bdev);
|
loff_t size = bdev_nr_bytes(bdev);
|
||||||
size_t count = iov_iter_count(to);
|
|
||||||
loff_t pos = iocb->ki_pos;
|
loff_t pos = iocb->ki_pos;
|
||||||
size_t shorted = 0;
|
size_t shorted = 0;
|
||||||
ssize_t ret = 0;
|
ssize_t ret = 0;
|
||||||
|
size_t count;
|
||||||
|
|
||||||
if (unlikely(pos + count > size)) {
|
if (unlikely(pos + iov_iter_count(to) > size)) {
|
||||||
if (pos >= size)
|
if (pos >= size)
|
||||||
return 0;
|
return 0;
|
||||||
size -= pos;
|
size -= pos;
|
||||||
if (count > size) {
|
shorted = iov_iter_count(to) - size;
|
||||||
shorted = count - size;
|
iov_iter_truncate(to, size);
|
||||||
iov_iter_truncate(to, size);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
count = iov_iter_count(to);
|
||||||
|
if (!count)
|
||||||
|
goto reexpand; /* skip atime */
|
||||||
|
|
||||||
if (iocb->ki_flags & IOCB_DIRECT) {
|
if (iocb->ki_flags & IOCB_DIRECT) {
|
||||||
struct address_space *mapping = iocb->ki_filp->f_mapping;
|
struct address_space *mapping = iocb->ki_filp->f_mapping;
|
||||||
|
|
||||||
if (iocb->ki_flags & IOCB_NOWAIT) {
|
if (iocb->ki_flags & IOCB_NOWAIT) {
|
||||||
if (filemap_range_needs_writeback(mapping, iocb->ki_pos,
|
if (filemap_range_needs_writeback(mapping, pos,
|
||||||
iocb->ki_pos + count - 1))
|
pos + count - 1)) {
|
||||||
return -EAGAIN;
|
ret = -EAGAIN;
|
||||||
|
goto reexpand;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
ret = filemap_write_and_wait_range(mapping,
|
ret = filemap_write_and_wait_range(mapping, pos,
|
||||||
iocb->ki_pos,
|
pos + count - 1);
|
||||||
iocb->ki_pos + count - 1);
|
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
goto reexpand;
|
||||||
}
|
}
|
||||||
|
|
||||||
file_accessed(iocb->ki_filp);
|
file_accessed(iocb->ki_filp);
|
||||||
@ -603,12 +606,14 @@ static ssize_t blkdev_read_iter(struct kiocb *iocb, struct iov_iter *to)
|
|||||||
iocb->ki_pos += ret;
|
iocb->ki_pos += ret;
|
||||||
count -= ret;
|
count -= ret;
|
||||||
}
|
}
|
||||||
|
iov_iter_revert(to, count - iov_iter_count(to));
|
||||||
if (ret < 0 || !count)
|
if (ret < 0 || !count)
|
||||||
return ret;
|
goto reexpand;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = filemap_read(iocb, to, ret);
|
ret = filemap_read(iocb, to, ret);
|
||||||
|
|
||||||
|
reexpand:
|
||||||
if (unlikely(shorted))
|
if (unlikely(shorted))
|
||||||
iov_iter_reexpand(to, iov_iter_count(to) + shorted);
|
iov_iter_reexpand(to, iov_iter_count(to) + shorted);
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -1324,3 +1324,4 @@ module_exit(crypto_algapi_exit);
|
|||||||
|
|
||||||
MODULE_LICENSE("GPL");
|
MODULE_LICENSE("GPL");
|
||||||
MODULE_DESCRIPTION("Cryptographic algorithms API");
|
MODULE_DESCRIPTION("Cryptographic algorithms API");
|
||||||
|
MODULE_SOFTDEP("pre: cryptomgr");
|
||||||
|
@ -643,4 +643,3 @@ EXPORT_SYMBOL_GPL(crypto_req_done);
|
|||||||
|
|
||||||
MODULE_DESCRIPTION("Cryptographic core API");
|
MODULE_DESCRIPTION("Cryptographic core API");
|
||||||
MODULE_LICENSE("GPL");
|
MODULE_LICENSE("GPL");
|
||||||
MODULE_SOFTDEP("pre: cryptomgr");
|
|
||||||
|
@ -15,12 +15,12 @@
|
|||||||
static int crypto_blake2s_update_generic(struct shash_desc *desc,
|
static int crypto_blake2s_update_generic(struct shash_desc *desc,
|
||||||
const u8 *in, unsigned int inlen)
|
const u8 *in, unsigned int inlen)
|
||||||
{
|
{
|
||||||
return crypto_blake2s_update(desc, in, inlen, blake2s_compress_generic);
|
return crypto_blake2s_update(desc, in, inlen, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int crypto_blake2s_final_generic(struct shash_desc *desc, u8 *out)
|
static int crypto_blake2s_final_generic(struct shash_desc *desc, u8 *out)
|
||||||
{
|
{
|
||||||
return crypto_blake2s_final(desc, out, blake2s_compress_generic);
|
return crypto_blake2s_final(desc, out, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define BLAKE2S_ALG(name, driver_name, digest_size) \
|
#define BLAKE2S_ALG(name, driver_name, digest_size) \
|
||||||
|
@ -44,6 +44,7 @@ static struct var_t vars[] = {
|
|||||||
{ CAPS_START, .u.s = {"[:dv ap 160] " } },
|
{ CAPS_START, .u.s = {"[:dv ap 160] " } },
|
||||||
{ CAPS_STOP, .u.s = {"[:dv ap 100 ] " } },
|
{ CAPS_STOP, .u.s = {"[:dv ap 100 ] " } },
|
||||||
{ RATE, .u.n = {"[:ra %d] ", 180, 75, 650, 0, 0, NULL } },
|
{ RATE, .u.n = {"[:ra %d] ", 180, 75, 650, 0, 0, NULL } },
|
||||||
|
{ PITCH, .u.n = {"[:dv ap %d] ", 122, 50, 350, 0, 0, NULL } },
|
||||||
{ INFLECTION, .u.n = {"[:dv pr %d] ", 100, 0, 10000, 0, 0, NULL } },
|
{ INFLECTION, .u.n = {"[:dv pr %d] ", 100, 0, 10000, 0, 0, NULL } },
|
||||||
{ VOL, .u.n = {"[:dv g5 %d] ", 86, 60, 86, 0, 0, NULL } },
|
{ VOL, .u.n = {"[:dv g5 %d] ", 86, 60, 86, 0, 0, NULL } },
|
||||||
{ PUNCT, .u.n = {"[:pu %c] ", 0, 0, 2, 0, 0, "nsa" } },
|
{ PUNCT, .u.n = {"[:pu %c] ", 0, 0, 2, 0, 0, "nsa" } },
|
||||||
|
@ -11,6 +11,7 @@ menuconfig ACPI
|
|||||||
depends on ARCH_SUPPORTS_ACPI
|
depends on ARCH_SUPPORTS_ACPI
|
||||||
select PNP
|
select PNP
|
||||||
select NLS
|
select NLS
|
||||||
|
select CRC32
|
||||||
default y if X86
|
default y if X86
|
||||||
help
|
help
|
||||||
Advanced Configuration and Power Interface (ACPI) support for
|
Advanced Configuration and Power Interface (ACPI) support for
|
||||||
|
@ -1361,9 +1361,17 @@ static void __init arm_smmu_v3_pmcg_init_resources(struct resource *res,
|
|||||||
res[0].start = pmcg->page0_base_address;
|
res[0].start = pmcg->page0_base_address;
|
||||||
res[0].end = pmcg->page0_base_address + SZ_4K - 1;
|
res[0].end = pmcg->page0_base_address + SZ_4K - 1;
|
||||||
res[0].flags = IORESOURCE_MEM;
|
res[0].flags = IORESOURCE_MEM;
|
||||||
res[1].start = pmcg->page1_base_address;
|
/*
|
||||||
res[1].end = pmcg->page1_base_address + SZ_4K - 1;
|
* The initial version in DEN0049C lacked a way to describe register
|
||||||
res[1].flags = IORESOURCE_MEM;
|
* page 1, which makes it broken for most PMCG implementations; in
|
||||||
|
* that case, just let the driver fail gracefully if it expects to
|
||||||
|
* find a second memory resource.
|
||||||
|
*/
|
||||||
|
if (node->revision > 0) {
|
||||||
|
res[1].start = pmcg->page1_base_address;
|
||||||
|
res[1].end = pmcg->page1_base_address + SZ_4K - 1;
|
||||||
|
res[1].flags = IORESOURCE_MEM;
|
||||||
|
}
|
||||||
|
|
||||||
if (pmcg->overflow_gsiv)
|
if (pmcg->overflow_gsiv)
|
||||||
acpi_iort_register_irq(pmcg->overflow_gsiv, "overflow",
|
acpi_iort_register_irq(pmcg->overflow_gsiv, "overflow",
|
||||||
|
@ -2065,6 +2065,16 @@ bool acpi_ec_dispatch_gpe(void)
|
|||||||
if (acpi_any_gpe_status_set(first_ec->gpe))
|
if (acpi_any_gpe_status_set(first_ec->gpe))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Cancel the SCI wakeup and process all pending events in case there
|
||||||
|
* are any wakeup ones in there.
|
||||||
|
*
|
||||||
|
* Note that if any non-EC GPEs are active at this point, the SCI will
|
||||||
|
* retrigger after the rearming in acpi_s2idle_wake(), so no events
|
||||||
|
* should be missed by canceling the wakeup here.
|
||||||
|
*/
|
||||||
|
pm_system_cancel_wakeup();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Dispatch the EC GPE in-band, but do not report wakeup in any case
|
* Dispatch the EC GPE in-band, but do not report wakeup in any case
|
||||||
* to allow the caller to process events properly after that.
|
* to allow the caller to process events properly after that.
|
||||||
|
@ -736,21 +736,15 @@ bool acpi_s2idle_wake(void)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check non-EC GPE wakeups and dispatch the EC GPE. */
|
/*
|
||||||
|
* Check non-EC GPE wakeups and if there are none, cancel the
|
||||||
|
* SCI-related wakeup and dispatch the EC GPE.
|
||||||
|
*/
|
||||||
if (acpi_ec_dispatch_gpe()) {
|
if (acpi_ec_dispatch_gpe()) {
|
||||||
pm_pr_dbg("ACPI non-EC GPE wakeup\n");
|
pm_pr_dbg("ACPI non-EC GPE wakeup\n");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Cancel the SCI wakeup and process all pending events in case
|
|
||||||
* there are any wakeup ones in there.
|
|
||||||
*
|
|
||||||
* Note that if any non-EC GPEs are active at this point, the
|
|
||||||
* SCI will retrigger after the rearming below, so no events
|
|
||||||
* should be missed by canceling the wakeup here.
|
|
||||||
*/
|
|
||||||
pm_system_cancel_wakeup();
|
|
||||||
acpi_os_wait_events_complete();
|
acpi_os_wait_events_complete();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -764,6 +758,7 @@ bool acpi_s2idle_wake(void)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pm_wakeup_clear(acpi_sci_irq);
|
||||||
rearm_wake_irq(acpi_sci_irq);
|
rearm_wake_irq(acpi_sci_irq);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -424,15 +424,11 @@ static int lps0_device_attach(struct acpi_device *adev,
|
|||||||
mem_sleep_current = PM_SUSPEND_TO_IDLE;
|
mem_sleep_current = PM_SUSPEND_TO_IDLE;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Some Intel based LPS0 systems, like ASUS Zenbook UX430UNR/i7-8550U don't
|
* Some LPS0 systems, like ASUS Zenbook UX430UNR/i7-8550U, require the
|
||||||
* use intel-hid or intel-vbtn but require the EC GPE to be enabled while
|
* EC GPE to be enabled while suspended for certain wakeup devices to
|
||||||
* suspended for certain wakeup devices to work, so mark it as wakeup-capable.
|
* work, so mark it as wakeup-capable.
|
||||||
*
|
|
||||||
* Only enable on !AMD as enabling this universally causes problems for a number
|
|
||||||
* of AMD based systems.
|
|
||||||
*/
|
*/
|
||||||
if (!acpi_s2idle_vendor_amd())
|
acpi_ec_mark_gpe_for_wake();
|
||||||
acpi_ec_mark_gpe_for_wake();
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -2007,6 +2007,9 @@ static bool ata_log_supported(struct ata_device *dev, u8 log)
|
|||||||
{
|
{
|
||||||
struct ata_port *ap = dev->link->ap;
|
struct ata_port *ap = dev->link->ap;
|
||||||
|
|
||||||
|
if (dev->horkage & ATA_HORKAGE_NO_LOG_DIR)
|
||||||
|
return false;
|
||||||
|
|
||||||
if (ata_read_log_page(dev, ATA_LOG_DIRECTORY, 0, ap->sector_buf, 1))
|
if (ata_read_log_page(dev, ATA_LOG_DIRECTORY, 0, ap->sector_buf, 1))
|
||||||
return false;
|
return false;
|
||||||
return get_unaligned_le16(&ap->sector_buf[log * 2]) ? true : false;
|
return get_unaligned_le16(&ap->sector_buf[log * 2]) ? true : false;
|
||||||
@ -2445,23 +2448,21 @@ static void ata_dev_config_cpr(struct ata_device *dev)
|
|||||||
struct ata_cpr_log *cpr_log = NULL;
|
struct ata_cpr_log *cpr_log = NULL;
|
||||||
u8 *desc, *buf = NULL;
|
u8 *desc, *buf = NULL;
|
||||||
|
|
||||||
if (!ata_identify_page_supported(dev,
|
if (ata_id_major_version(dev->id) < 11 ||
|
||||||
ATA_LOG_CONCURRENT_POSITIONING_RANGES))
|
!ata_log_supported(dev, ATA_LOG_CONCURRENT_POSITIONING_RANGES))
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Read IDENTIFY DEVICE data log, page 0x47
|
* Read the concurrent positioning ranges log (0x47). We can have at
|
||||||
* (concurrent positioning ranges). We can have at most 255 32B range
|
* most 255 32B range descriptors plus a 64B header.
|
||||||
* descriptors plus a 64B header.
|
|
||||||
*/
|
*/
|
||||||
buf_len = (64 + 255 * 32 + 511) & ~511;
|
buf_len = (64 + 255 * 32 + 511) & ~511;
|
||||||
buf = kzalloc(buf_len, GFP_KERNEL);
|
buf = kzalloc(buf_len, GFP_KERNEL);
|
||||||
if (!buf)
|
if (!buf)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
err_mask = ata_read_log_page(dev, ATA_LOG_IDENTIFY_DEVICE,
|
err_mask = ata_read_log_page(dev, ATA_LOG_CONCURRENT_POSITIONING_RANGES,
|
||||||
ATA_LOG_CONCURRENT_POSITIONING_RANGES,
|
0, buf, buf_len >> 9);
|
||||||
buf, buf_len >> 9);
|
|
||||||
if (err_mask)
|
if (err_mask)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
@ -4028,6 +4029,7 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
|
|||||||
|
|
||||||
/* devices that don't properly handle TRIM commands */
|
/* devices that don't properly handle TRIM commands */
|
||||||
{ "SuperSSpeed S238*", NULL, ATA_HORKAGE_NOTRIM, },
|
{ "SuperSSpeed S238*", NULL, ATA_HORKAGE_NOTRIM, },
|
||||||
|
{ "M88V29*", NULL, ATA_HORKAGE_NOTRIM, },
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* As defined, the DRAT (Deterministic Read After Trim) and RZAT
|
* As defined, the DRAT (Deterministic Read After Trim) and RZAT
|
||||||
@ -4073,6 +4075,13 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
|
|||||||
{ "WDC WD3000JD-*", NULL, ATA_HORKAGE_WD_BROKEN_LPM },
|
{ "WDC WD3000JD-*", NULL, ATA_HORKAGE_WD_BROKEN_LPM },
|
||||||
{ "WDC WD3200JD-*", NULL, ATA_HORKAGE_WD_BROKEN_LPM },
|
{ "WDC WD3200JD-*", NULL, ATA_HORKAGE_WD_BROKEN_LPM },
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This sata dom device goes on a walkabout when the ATA_LOG_DIRECTORY
|
||||||
|
* log page is accessed. Ensure we never ask for this log page with
|
||||||
|
* these devices.
|
||||||
|
*/
|
||||||
|
{ "SATADOM-ML 3ME", NULL, ATA_HORKAGE_NO_LOG_DIR },
|
||||||
|
|
||||||
/* End Marker */
|
/* End Marker */
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
@ -322,7 +322,7 @@ static void fsl_sata_set_irq_coalescing(struct ata_host *host,
|
|||||||
static ssize_t fsl_sata_intr_coalescing_show(struct device *dev,
|
static ssize_t fsl_sata_intr_coalescing_show(struct device *dev,
|
||||||
struct device_attribute *attr, char *buf)
|
struct device_attribute *attr, char *buf)
|
||||||
{
|
{
|
||||||
return sysfs_emit(buf, "%d %d\n",
|
return sysfs_emit(buf, "%u %u\n",
|
||||||
intr_coalescing_count, intr_coalescing_ticks);
|
intr_coalescing_count, intr_coalescing_ticks);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -332,10 +332,8 @@ static ssize_t fsl_sata_intr_coalescing_store(struct device *dev,
|
|||||||
{
|
{
|
||||||
unsigned int coalescing_count, coalescing_ticks;
|
unsigned int coalescing_count, coalescing_ticks;
|
||||||
|
|
||||||
if (sscanf(buf, "%d%d",
|
if (sscanf(buf, "%u%u", &coalescing_count, &coalescing_ticks) != 2) {
|
||||||
&coalescing_count,
|
dev_err(dev, "fsl-sata: wrong parameter format.\n");
|
||||||
&coalescing_ticks) != 2) {
|
|
||||||
printk(KERN_ERR "fsl-sata: wrong parameter format.\n");
|
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -359,7 +357,7 @@ static ssize_t fsl_sata_rx_watermark_show(struct device *dev,
|
|||||||
rx_watermark &= 0x1f;
|
rx_watermark &= 0x1f;
|
||||||
spin_unlock_irqrestore(&host->lock, flags);
|
spin_unlock_irqrestore(&host->lock, flags);
|
||||||
|
|
||||||
return sysfs_emit(buf, "%d\n", rx_watermark);
|
return sysfs_emit(buf, "%u\n", rx_watermark);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ssize_t fsl_sata_rx_watermark_store(struct device *dev,
|
static ssize_t fsl_sata_rx_watermark_store(struct device *dev,
|
||||||
@ -373,8 +371,8 @@ static ssize_t fsl_sata_rx_watermark_store(struct device *dev,
|
|||||||
void __iomem *csr_base = host_priv->csr_base;
|
void __iomem *csr_base = host_priv->csr_base;
|
||||||
u32 temp;
|
u32 temp;
|
||||||
|
|
||||||
if (sscanf(buf, "%d", &rx_watermark) != 1) {
|
if (kstrtouint(buf, 10, &rx_watermark) < 0) {
|
||||||
printk(KERN_ERR "fsl-sata: wrong parameter format.\n");
|
dev_err(dev, "fsl-sata: wrong parameter format.\n");
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -382,8 +380,8 @@ static ssize_t fsl_sata_rx_watermark_store(struct device *dev,
|
|||||||
temp = ioread32(csr_base + TRANSCFG);
|
temp = ioread32(csr_base + TRANSCFG);
|
||||||
temp &= 0xffffffe0;
|
temp &= 0xffffffe0;
|
||||||
iowrite32(temp | rx_watermark, csr_base + TRANSCFG);
|
iowrite32(temp | rx_watermark, csr_base + TRANSCFG);
|
||||||
|
|
||||||
spin_unlock_irqrestore(&host->lock, flags);
|
spin_unlock_irqrestore(&host->lock, flags);
|
||||||
|
|
||||||
return strlen(buf);
|
return strlen(buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -34,7 +34,8 @@ suspend_state_t pm_suspend_target_state;
|
|||||||
bool events_check_enabled __read_mostly;
|
bool events_check_enabled __read_mostly;
|
||||||
|
|
||||||
/* First wakeup IRQ seen by the kernel in the last cycle. */
|
/* First wakeup IRQ seen by the kernel in the last cycle. */
|
||||||
unsigned int pm_wakeup_irq __read_mostly;
|
static unsigned int wakeup_irq[2] __read_mostly;
|
||||||
|
static DEFINE_RAW_SPINLOCK(wakeup_irq_lock);
|
||||||
|
|
||||||
/* If greater than 0 and the system is suspending, terminate the suspend. */
|
/* If greater than 0 and the system is suspending, terminate the suspend. */
|
||||||
static atomic_t pm_abort_suspend __read_mostly;
|
static atomic_t pm_abort_suspend __read_mostly;
|
||||||
@ -942,19 +943,45 @@ void pm_system_cancel_wakeup(void)
|
|||||||
atomic_dec_if_positive(&pm_abort_suspend);
|
atomic_dec_if_positive(&pm_abort_suspend);
|
||||||
}
|
}
|
||||||
|
|
||||||
void pm_wakeup_clear(bool reset)
|
void pm_wakeup_clear(unsigned int irq_number)
|
||||||
{
|
{
|
||||||
pm_wakeup_irq = 0;
|
raw_spin_lock_irq(&wakeup_irq_lock);
|
||||||
if (reset)
|
|
||||||
|
if (irq_number && wakeup_irq[0] == irq_number)
|
||||||
|
wakeup_irq[0] = wakeup_irq[1];
|
||||||
|
else
|
||||||
|
wakeup_irq[0] = 0;
|
||||||
|
|
||||||
|
wakeup_irq[1] = 0;
|
||||||
|
|
||||||
|
raw_spin_unlock_irq(&wakeup_irq_lock);
|
||||||
|
|
||||||
|
if (!irq_number)
|
||||||
atomic_set(&pm_abort_suspend, 0);
|
atomic_set(&pm_abort_suspend, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void pm_system_irq_wakeup(unsigned int irq_number)
|
void pm_system_irq_wakeup(unsigned int irq_number)
|
||||||
{
|
{
|
||||||
if (pm_wakeup_irq == 0) {
|
unsigned long flags;
|
||||||
pm_wakeup_irq = irq_number;
|
|
||||||
|
raw_spin_lock_irqsave(&wakeup_irq_lock, flags);
|
||||||
|
|
||||||
|
if (wakeup_irq[0] == 0)
|
||||||
|
wakeup_irq[0] = irq_number;
|
||||||
|
else if (wakeup_irq[1] == 0)
|
||||||
|
wakeup_irq[1] = irq_number;
|
||||||
|
else
|
||||||
|
irq_number = 0;
|
||||||
|
|
||||||
|
raw_spin_unlock_irqrestore(&wakeup_irq_lock, flags);
|
||||||
|
|
||||||
|
if (irq_number)
|
||||||
pm_system_wakeup();
|
pm_system_wakeup();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned int pm_wakeup_irq(void)
|
||||||
|
{
|
||||||
|
return wakeup_irq[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user