Merge 6.3-rc4 into usb-next
We need the USB fixes here, and the USB gadget update for future development patches to be based on. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
commit
97318d6427
|
@ -78,6 +78,7 @@ modules.order
|
||||||
# RPM spec file (make rpm-pkg)
|
# RPM spec file (make rpm-pkg)
|
||||||
#
|
#
|
||||||
/*.spec
|
/*.spec
|
||||||
|
/rpmbuild/
|
||||||
|
|
||||||
#
|
#
|
||||||
# Debian directory (make deb-pkg)
|
# Debian directory (make deb-pkg)
|
||||||
|
|
28
.mailmap
28
.mailmap
|
@ -28,6 +28,7 @@ Alexander Lobakin <alobakin@pm.me> <bloodyreaper@yandex.ru>
|
||||||
Alexander Mikhalitsyn <alexander@mihalicyn.com> <alexander.mikhalitsyn@virtuozzo.com>
|
Alexander Mikhalitsyn <alexander@mihalicyn.com> <alexander.mikhalitsyn@virtuozzo.com>
|
||||||
Alexander Mikhalitsyn <alexander@mihalicyn.com> <aleksandr.mikhalitsyn@canonical.com>
|
Alexander Mikhalitsyn <alexander@mihalicyn.com> <aleksandr.mikhalitsyn@canonical.com>
|
||||||
Alexandre Belloni <alexandre.belloni@bootlin.com> <alexandre.belloni@free-electrons.com>
|
Alexandre Belloni <alexandre.belloni@bootlin.com> <alexandre.belloni@free-electrons.com>
|
||||||
|
Alexandre Ghiti <alex@ghiti.fr> <alexandre.ghiti@canonical.com>
|
||||||
Alexei Starovoitov <ast@kernel.org> <alexei.starovoitov@gmail.com>
|
Alexei Starovoitov <ast@kernel.org> <alexei.starovoitov@gmail.com>
|
||||||
Alexei Starovoitov <ast@kernel.org> <ast@fb.com>
|
Alexei Starovoitov <ast@kernel.org> <ast@fb.com>
|
||||||
Alexei Starovoitov <ast@kernel.org> <ast@plumgrid.com>
|
Alexei Starovoitov <ast@kernel.org> <ast@plumgrid.com>
|
||||||
|
@ -121,7 +122,7 @@ Dengcheng Zhu <dzhu@wavecomp.com> <dengcheng.zhu@gmail.com>
|
||||||
Dengcheng Zhu <dzhu@wavecomp.com> <dengcheng.zhu@imgtec.com>
|
Dengcheng Zhu <dzhu@wavecomp.com> <dengcheng.zhu@imgtec.com>
|
||||||
Dengcheng Zhu <dzhu@wavecomp.com> <dengcheng.zhu@mips.com>
|
Dengcheng Zhu <dzhu@wavecomp.com> <dengcheng.zhu@mips.com>
|
||||||
<dev.kurt@vandijck-laurijssen.be> <kurt.van.dijck@eia.be>
|
<dev.kurt@vandijck-laurijssen.be> <kurt.van.dijck@eia.be>
|
||||||
Dikshita Agarwal <dikshita@qti.qualcomm.com> <dikshita@codeaurora.org>
|
Dikshita Agarwal <quic_dikshita@quicinc.com> <dikshita@codeaurora.org>
|
||||||
Dmitry Baryshkov <dbaryshkov@gmail.com>
|
Dmitry Baryshkov <dbaryshkov@gmail.com>
|
||||||
Dmitry Baryshkov <dbaryshkov@gmail.com> <[dbaryshkov@gmail.com]>
|
Dmitry Baryshkov <dbaryshkov@gmail.com> <[dbaryshkov@gmail.com]>
|
||||||
Dmitry Baryshkov <dbaryshkov@gmail.com> <dmitry_baryshkov@mentor.com>
|
Dmitry Baryshkov <dbaryshkov@gmail.com> <dmitry_baryshkov@mentor.com>
|
||||||
|
@ -132,10 +133,15 @@ Dmitry Safonov <0x7f454c46@gmail.com> <dsafonov@virtuozzo.com>
|
||||||
Domen Puncer <domen@coderock.org>
|
Domen Puncer <domen@coderock.org>
|
||||||
Douglas Gilbert <dougg@torque.net>
|
Douglas Gilbert <dougg@torque.net>
|
||||||
Ed L. Cashin <ecashin@coraid.com>
|
Ed L. Cashin <ecashin@coraid.com>
|
||||||
|
Enric Balletbo i Serra <eballetbo@kernel.org> <enric.balletbo@collabora.com>
|
||||||
|
Enric Balletbo i Serra <eballetbo@kernel.org> <eballetbo@iseebcn.com>
|
||||||
Erik Kaneda <erik.kaneda@intel.com> <erik.schmauss@intel.com>
|
Erik Kaneda <erik.kaneda@intel.com> <erik.schmauss@intel.com>
|
||||||
Eugen Hristev <eugen.hristev@collabora.com> <eugen.hristev@microchip.com>
|
Eugen Hristev <eugen.hristev@collabora.com> <eugen.hristev@microchip.com>
|
||||||
Evgeniy Polyakov <johnpol@2ka.mipt.ru>
|
Evgeniy Polyakov <johnpol@2ka.mipt.ru>
|
||||||
Ezequiel Garcia <ezequiel@vanguardiasur.com.ar> <ezequiel@collabora.com>
|
Ezequiel Garcia <ezequiel@vanguardiasur.com.ar> <ezequiel@collabora.com>
|
||||||
|
Faith Ekstrand <faith.ekstrand@collabora.com> <jason@jlekstrand.net>
|
||||||
|
Faith Ekstrand <faith.ekstrand@collabora.com> <jason.ekstrand@intel.com>
|
||||||
|
Faith Ekstrand <faith.ekstrand@collabora.com> <jason.ekstrand@collabora.com>
|
||||||
Felipe W Damasio <felipewd@terra.com.br>
|
Felipe W Damasio <felipewd@terra.com.br>
|
||||||
Felix Kuhling <fxkuehl@gmx.de>
|
Felix Kuhling <fxkuehl@gmx.de>
|
||||||
Felix Moeller <felix@derklecks.de>
|
Felix Moeller <felix@derklecks.de>
|
||||||
|
@ -191,6 +197,7 @@ Jan Glauber <jan.glauber@gmail.com> <jang@linux.vnet.ibm.com>
|
||||||
Jan Glauber <jan.glauber@gmail.com> <jglauber@cavium.com>
|
Jan Glauber <jan.glauber@gmail.com> <jglauber@cavium.com>
|
||||||
Jarkko Sakkinen <jarkko@kernel.org> <jarkko.sakkinen@linux.intel.com>
|
Jarkko Sakkinen <jarkko@kernel.org> <jarkko.sakkinen@linux.intel.com>
|
||||||
Jarkko Sakkinen <jarkko@kernel.org> <jarkko@profian.com>
|
Jarkko Sakkinen <jarkko@kernel.org> <jarkko@profian.com>
|
||||||
|
Jarkko Sakkinen <jarkko@kernel.org> <jarkko.sakkinen@tuni.fi>
|
||||||
Jason Gunthorpe <jgg@ziepe.ca> <jgg@mellanox.com>
|
Jason Gunthorpe <jgg@ziepe.ca> <jgg@mellanox.com>
|
||||||
Jason Gunthorpe <jgg@ziepe.ca> <jgg@nvidia.com>
|
Jason Gunthorpe <jgg@ziepe.ca> <jgg@nvidia.com>
|
||||||
Jason Gunthorpe <jgg@ziepe.ca> <jgunthorpe@obsidianresearch.com>
|
Jason Gunthorpe <jgg@ziepe.ca> <jgunthorpe@obsidianresearch.com>
|
||||||
|
@ -210,6 +217,9 @@ Jens Axboe <axboe@suse.de>
|
||||||
Jens Osterkamp <Jens.Osterkamp@de.ibm.com>
|
Jens Osterkamp <Jens.Osterkamp@de.ibm.com>
|
||||||
Jernej Skrabec <jernej.skrabec@gmail.com> <jernej.skrabec@siol.net>
|
Jernej Skrabec <jernej.skrabec@gmail.com> <jernej.skrabec@siol.net>
|
||||||
Jessica Zhang <quic_jesszhan@quicinc.com> <jesszhan@codeaurora.org>
|
Jessica Zhang <quic_jesszhan@quicinc.com> <jesszhan@codeaurora.org>
|
||||||
|
Jiri Pirko <jiri@resnulli.us> <jiri@nvidia.com>
|
||||||
|
Jiri Pirko <jiri@resnulli.us> <jiri@mellanox.com>
|
||||||
|
Jiri Pirko <jiri@resnulli.us> <jpirko@redhat.com>
|
||||||
Jiri Slaby <jirislaby@kernel.org> <jirislaby@gmail.com>
|
Jiri Slaby <jirislaby@kernel.org> <jirislaby@gmail.com>
|
||||||
Jiri Slaby <jirislaby@kernel.org> <jslaby@novell.com>
|
Jiri Slaby <jirislaby@kernel.org> <jslaby@novell.com>
|
||||||
Jiri Slaby <jirislaby@kernel.org> <jslaby@suse.com>
|
Jiri Slaby <jirislaby@kernel.org> <jslaby@suse.com>
|
||||||
|
@ -306,6 +316,8 @@ Mauro Carvalho Chehab <mchehab@kernel.org> <mchehab@osg.samsung.com>
|
||||||
Mauro Carvalho Chehab <mchehab@kernel.org> <mchehab@redhat.com>
|
Mauro Carvalho Chehab <mchehab@kernel.org> <mchehab@redhat.com>
|
||||||
Mauro Carvalho Chehab <mchehab@kernel.org> <m.chehab@samsung.com>
|
Mauro Carvalho Chehab <mchehab@kernel.org> <m.chehab@samsung.com>
|
||||||
Mauro Carvalho Chehab <mchehab@kernel.org> <mchehab@s-opensource.com>
|
Mauro Carvalho Chehab <mchehab@kernel.org> <mchehab@s-opensource.com>
|
||||||
|
Maxim Mikityanskiy <maxtram95@gmail.com> <maximmi@mellanox.com>
|
||||||
|
Maxim Mikityanskiy <maxtram95@gmail.com> <maximmi@nvidia.com>
|
||||||
Maxime Ripard <mripard@kernel.org> <maxime.ripard@bootlin.com>
|
Maxime Ripard <mripard@kernel.org> <maxime.ripard@bootlin.com>
|
||||||
Maxime Ripard <mripard@kernel.org> <maxime.ripard@free-electrons.com>
|
Maxime Ripard <mripard@kernel.org> <maxime.ripard@free-electrons.com>
|
||||||
Mayuresh Janorkar <mayur@ti.com>
|
Mayuresh Janorkar <mayur@ti.com>
|
||||||
|
@ -369,6 +381,7 @@ Quentin Monnet <quentin@isovalent.com> <quentin.monnet@netronome.com>
|
||||||
Quentin Perret <qperret@qperret.net> <quentin.perret@arm.com>
|
Quentin Perret <qperret@qperret.net> <quentin.perret@arm.com>
|
||||||
Rafael J. Wysocki <rjw@rjwysocki.net> <rjw@sisk.pl>
|
Rafael J. Wysocki <rjw@rjwysocki.net> <rjw@sisk.pl>
|
||||||
Rajeev Nandan <quic_rajeevny@quicinc.com> <rajeevny@codeaurora.org>
|
Rajeev Nandan <quic_rajeevny@quicinc.com> <rajeevny@codeaurora.org>
|
||||||
|
Rajendra Nayak <quic_rjendra@quicinc.com> <rnayak@codeaurora.org>
|
||||||
Rajesh Shah <rajesh.shah@intel.com>
|
Rajesh Shah <rajesh.shah@intel.com>
|
||||||
Ralf Baechle <ralf@linux-mips.org>
|
Ralf Baechle <ralf@linux-mips.org>
|
||||||
Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
|
Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
|
||||||
|
@ -377,6 +390,9 @@ Rémi Denis-Courmont <rdenis@simphalempin.com>
|
||||||
Ricardo Ribalda <ribalda@kernel.org> <ricardo@ribalda.com>
|
Ricardo Ribalda <ribalda@kernel.org> <ricardo@ribalda.com>
|
||||||
Ricardo Ribalda <ribalda@kernel.org> Ricardo Ribalda Delgado <ribalda@kernel.org>
|
Ricardo Ribalda <ribalda@kernel.org> Ricardo Ribalda Delgado <ribalda@kernel.org>
|
||||||
Ricardo Ribalda <ribalda@kernel.org> <ricardo.ribalda@gmail.com>
|
Ricardo Ribalda <ribalda@kernel.org> <ricardo.ribalda@gmail.com>
|
||||||
|
Richard Leitner <richard.leitner@linux.dev> <dev@g0hl1n.net>
|
||||||
|
Richard Leitner <richard.leitner@linux.dev> <me@g0hl1n.net>
|
||||||
|
Richard Leitner <richard.leitner@linux.dev> <richard.leitner@skidata.com>
|
||||||
Robert Foss <rfoss@kernel.org> <robert.foss@linaro.org>
|
Robert Foss <rfoss@kernel.org> <robert.foss@linaro.org>
|
||||||
Roman Gushchin <roman.gushchin@linux.dev> <guro@fb.com>
|
Roman Gushchin <roman.gushchin@linux.dev> <guro@fb.com>
|
||||||
Roman Gushchin <roman.gushchin@linux.dev> <guroan@gmail.com>
|
Roman Gushchin <roman.gushchin@linux.dev> <guroan@gmail.com>
|
||||||
|
@ -387,6 +403,7 @@ Ross Zwisler <zwisler@kernel.org> <ross.zwisler@linux.intel.com>
|
||||||
Rudolf Marek <R.Marek@sh.cvut.cz>
|
Rudolf Marek <R.Marek@sh.cvut.cz>
|
||||||
Rui Saraiva <rmps@joel.ist.utl.pt>
|
Rui Saraiva <rmps@joel.ist.utl.pt>
|
||||||
Sachin P Sant <ssant@in.ibm.com>
|
Sachin P Sant <ssant@in.ibm.com>
|
||||||
|
Sai Prakash Ranjan <quic_saipraka@quicinc.com> <saiprakash.ranjan@codeaurora.org>
|
||||||
Sakari Ailus <sakari.ailus@linux.intel.com> <sakari.ailus@iki.fi>
|
Sakari Ailus <sakari.ailus@linux.intel.com> <sakari.ailus@iki.fi>
|
||||||
Sam Ravnborg <sam@mars.ravnborg.org>
|
Sam Ravnborg <sam@mars.ravnborg.org>
|
||||||
Sankeerth Billakanti <quic_sbillaka@quicinc.com> <sbillaka@codeaurora.org>
|
Sankeerth Billakanti <quic_sbillaka@quicinc.com> <sbillaka@codeaurora.org>
|
||||||
|
@ -411,7 +428,10 @@ Shuah Khan <shuah@kernel.org> <shuah.kh@samsung.com>
|
||||||
Simon Arlott <simon@octiron.net> <simon@fire.lp0.eu>
|
Simon Arlott <simon@octiron.net> <simon@fire.lp0.eu>
|
||||||
Simon Kelley <simon@thekelleys.org.uk>
|
Simon Kelley <simon@thekelleys.org.uk>
|
||||||
Stéphane Witzmann <stephane.witzmann@ubpmes.univ-bpclermont.fr>
|
Stéphane Witzmann <stephane.witzmann@ubpmes.univ-bpclermont.fr>
|
||||||
Stephen Hemminger <shemminger@osdl.org>
|
Stephen Hemminger <stephen@networkplumber.org> <shemminger@linux-foundation.org>
|
||||||
|
Stephen Hemminger <stephen@networkplumber.org> <shemminger@osdl.org>
|
||||||
|
Stephen Hemminger <stephen@networkplumber.org> <sthemmin@microsoft.com>
|
||||||
|
Stephen Hemminger <stephen@networkplumber.org> <sthemmin@vyatta.com>
|
||||||
Steve Wise <larrystevenwise@gmail.com> <swise@chelsio.com>
|
Steve Wise <larrystevenwise@gmail.com> <swise@chelsio.com>
|
||||||
Steve Wise <larrystevenwise@gmail.com> <swise@opengridcomputing.com>
|
Steve Wise <larrystevenwise@gmail.com> <swise@opengridcomputing.com>
|
||||||
Subash Abhinov Kasiviswanathan <subashab@codeaurora.org>
|
Subash Abhinov Kasiviswanathan <subashab@codeaurora.org>
|
||||||
|
@ -424,6 +444,10 @@ Thomas Graf <tgraf@suug.ch>
|
||||||
Thomas Körper <socketcan@esd.eu> <thomas.koerper@esd.eu>
|
Thomas Körper <socketcan@esd.eu> <thomas.koerper@esd.eu>
|
||||||
Thomas Pedersen <twp@codeaurora.org>
|
Thomas Pedersen <twp@codeaurora.org>
|
||||||
Tiezhu Yang <yangtiezhu@loongson.cn> <kernelpatch@126.com>
|
Tiezhu Yang <yangtiezhu@loongson.cn> <kernelpatch@126.com>
|
||||||
|
Tobias Klauser <tklauser@distanz.ch> <tobias.klauser@gmail.com>
|
||||||
|
Tobias Klauser <tklauser@distanz.ch> <klto@zhaw.ch>
|
||||||
|
Tobias Klauser <tklauser@distanz.ch> <tklauser@nuerscht.ch>
|
||||||
|
Tobias Klauser <tklauser@distanz.ch> <tklauser@xenon.tklauser.home>
|
||||||
Todor Tomov <todor.too@gmail.com> <todor.tomov@linaro.org>
|
Todor Tomov <todor.too@gmail.com> <todor.tomov@linaro.org>
|
||||||
Tony Luck <tony.luck@intel.com>
|
Tony Luck <tony.luck@intel.com>
|
||||||
TripleX Chung <xxx.phy@gmail.com> <triplex@zh-kernel.org>
|
TripleX Chung <xxx.phy@gmail.com> <triplex@zh-kernel.org>
|
||||||
|
|
|
@ -705,6 +705,15 @@ Description:
|
||||||
zoned will report "none".
|
zoned will report "none".
|
||||||
|
|
||||||
|
|
||||||
|
What: /sys/block/<disk>/hidden
|
||||||
|
Date: March 2023
|
||||||
|
Contact: linux-block@vger.kernel.org
|
||||||
|
Description:
|
||||||
|
[RO] the block device is hidden. it doesn’t produce events, and
|
||||||
|
can’t be opened from userspace or using blkdev_get*.
|
||||||
|
Used for the underlying components of multipath devices.
|
||||||
|
|
||||||
|
|
||||||
What: /sys/block/<disk>/stat
|
What: /sys/block/<disk>/stat
|
||||||
Date: February 2008
|
Date: February 2008
|
||||||
Contact: Jerome Marchand <jmarchan@redhat.com>
|
Contact: Jerome Marchand <jmarchan@redhat.com>
|
||||||
|
|
|
@ -7,8 +7,8 @@ workflows related to reporting bugs, submitting patches, and queueing
|
||||||
patches for stable kernels.
|
patches for stable kernels.
|
||||||
|
|
||||||
For general information about submitting patches, please refer to
|
For general information about submitting patches, please refer to
|
||||||
`Documentation/process/`_. This document only describes additional specifics
|
Documentation/process/submitting-patches.rst. This document only describes
|
||||||
related to BPF.
|
additional specifics related to BPF.
|
||||||
|
|
||||||
.. contents::
|
.. contents::
|
||||||
:local:
|
:local:
|
||||||
|
@ -461,15 +461,15 @@ needed::
|
||||||
|
|
||||||
$ sudo make run_tests
|
$ sudo make run_tests
|
||||||
|
|
||||||
See the kernels selftest `Documentation/dev-tools/kselftest.rst`_
|
See :doc:`kernel selftest documentation </dev-tools/kselftest>`
|
||||||
document for further documentation.
|
for details.
|
||||||
|
|
||||||
To maximize the number of tests passing, the .config of the kernel
|
To maximize the number of tests passing, the .config of the kernel
|
||||||
under test should match the config file fragment in
|
under test should match the config file fragment in
|
||||||
tools/testing/selftests/bpf as closely as possible.
|
tools/testing/selftests/bpf as closely as possible.
|
||||||
|
|
||||||
Finally to ensure support for latest BPF Type Format features -
|
Finally to ensure support for latest BPF Type Format features -
|
||||||
discussed in `Documentation/bpf/btf.rst`_ - pahole version 1.16
|
discussed in Documentation/bpf/btf.rst - pahole version 1.16
|
||||||
is required for kernels built with CONFIG_DEBUG_INFO_BTF=y.
|
is required for kernels built with CONFIG_DEBUG_INFO_BTF=y.
|
||||||
pahole is delivered in the dwarves package or can be built
|
pahole is delivered in the dwarves package or can be built
|
||||||
from source at
|
from source at
|
||||||
|
@ -684,12 +684,8 @@ when:
|
||||||
|
|
||||||
|
|
||||||
.. Links
|
.. Links
|
||||||
.. _Documentation/process/: https://www.kernel.org/doc/html/latest/process/
|
|
||||||
.. _netdev-FAQ: Documentation/process/maintainer-netdev.rst
|
.. _netdev-FAQ: Documentation/process/maintainer-netdev.rst
|
||||||
.. _selftests:
|
.. _selftests:
|
||||||
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/tools/testing/selftests/bpf/
|
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/tools/testing/selftests/bpf/
|
||||||
.. _Documentation/dev-tools/kselftest.rst:
|
|
||||||
https://www.kernel.org/doc/html/latest/dev-tools/kselftest.html
|
|
||||||
.. _Documentation/bpf/btf.rst: btf.rst
|
|
||||||
|
|
||||||
Happy BPF hacking!
|
Happy BPF hacking!
|
||||||
|
|
|
@ -242,7 +242,7 @@ group and can access them as follows::
|
||||||
VFIO User API
|
VFIO User API
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
|
|
||||||
Please see include/linux/vfio.h for complete API documentation.
|
Please see include/uapi/linux/vfio.h for complete API documentation.
|
||||||
|
|
||||||
VFIO bus driver API
|
VFIO bus driver API
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
|
|
|
@ -105,9 +105,9 @@ descriptors. Instead, the superblock and a single block group descriptor
|
||||||
block is placed at the beginning of the first, second, and last block
|
block is placed at the beginning of the first, second, and last block
|
||||||
groups in a meta-block group. A meta-block group is a collection of
|
groups in a meta-block group. A meta-block group is a collection of
|
||||||
block groups which can be described by a single block group descriptor
|
block groups which can be described by a single block group descriptor
|
||||||
block. Since the size of the block group descriptor structure is 32
|
block. Since the size of the block group descriptor structure is 64
|
||||||
bytes, a meta-block group contains 32 block groups for filesystems with
|
bytes, a meta-block group contains 16 block groups for filesystems with
|
||||||
a 1KB block size, and 128 block groups for filesystems with a 4KB
|
a 1KB block size, and 64 block groups for filesystems with a 4KB
|
||||||
blocksize. Filesystems can either be created using this new block group
|
blocksize. Filesystems can either be created using this new block group
|
||||||
descriptor layout, or existing filesystems can be resized on-line, and
|
descriptor layout, or existing filesystems can be resized on-line, and
|
||||||
the field s_first_meta_bg in the superblock will indicate the first
|
the field s_first_meta_bg in the superblock will indicate the first
|
||||||
|
|
|
@ -1222,7 +1222,7 @@ defined:
|
||||||
return
|
return
|
||||||
-ECHILD and it will be called again in ref-walk mode.
|
-ECHILD and it will be called again in ref-walk mode.
|
||||||
|
|
||||||
``_weak_revalidate``
|
``d_weak_revalidate``
|
||||||
called when the VFS needs to revalidate a "jumped" dentry. This
|
called when the VFS needs to revalidate a "jumped" dentry. This
|
||||||
is called when a path-walk ends at dentry that was not acquired
|
is called when a path-walk ends at dentry that was not acquired
|
||||||
by doing a lookup in the parent directory. This includes "/",
|
by doing a lookup in the parent directory. This includes "/",
|
||||||
|
|
|
@ -19,7 +19,7 @@ possible we decided to do following:
|
||||||
platform devices.
|
platform devices.
|
||||||
|
|
||||||
- Devices behind real busses where there is a connector resource
|
- Devices behind real busses where there is a connector resource
|
||||||
are represented as struct spi_device or struct i2c_device. Note
|
are represented as struct spi_device or struct i2c_client. Note
|
||||||
that standard UARTs are not busses so there is no struct uart_device,
|
that standard UARTs are not busses so there is no struct uart_device,
|
||||||
although some of them may be represented by struct serdev_device.
|
although some of them may be represented by struct serdev_device.
|
||||||
|
|
||||||
|
|
|
@ -213,11 +213,7 @@ point rather than some random spot. If your upstream-bound branch has
|
||||||
emptied entirely into the mainline during the merge window, you can pull it
|
emptied entirely into the mainline during the merge window, you can pull it
|
||||||
forward with a command like::
|
forward with a command like::
|
||||||
|
|
||||||
git merge v5.2-rc1^0
|
git merge --ff-only v5.2-rc1
|
||||||
|
|
||||||
The "^0" will cause Git to do a fast-forward merge (which should be
|
|
||||||
possible in this situation), thus avoiding the addition of a spurious merge
|
|
||||||
commit.
|
|
||||||
|
|
||||||
The guidelines laid out above are just that: guidelines. There will always
|
The guidelines laid out above are just that: guidelines. There will always
|
||||||
be situations that call out for a different solution, and these guidelines
|
be situations that call out for a different solution, and these guidelines
|
||||||
|
|
|
@ -5,10 +5,10 @@ Hugetlbfs Reservation
|
||||||
Overview
|
Overview
|
||||||
========
|
========
|
||||||
|
|
||||||
Huge pages as described at Documentation/mm/hugetlbpage.rst are typically
|
Huge pages as described at Documentation/admin-guide/mm/hugetlbpage.rst are
|
||||||
preallocated for application use. These huge pages are instantiated in a
|
typically preallocated for application use. These huge pages are instantiated
|
||||||
task's address space at page fault time if the VMA indicates huge pages are
|
in a task's address space at page fault time if the VMA indicates huge pages
|
||||||
to be used. If no huge page exists at page fault time, the task is sent
|
are to be used. If no huge page exists at page fault time, the task is sent
|
||||||
a SIGBUS and often dies an unhappy death. Shortly after huge page support
|
a SIGBUS and often dies an unhappy death. Shortly after huge page support
|
||||||
was added, it was determined that it would be better to detect a shortage
|
was added, it was determined that it would be better to detect a shortage
|
||||||
of huge pages at mmap() time. The idea is that if there were not enough
|
of huge pages at mmap() time. The idea is that if there were not enough
|
||||||
|
|
|
@ -66,7 +66,7 @@ one of the types described below.
|
||||||
also populated on boot using one of ``kernelcore``, ``movablecore`` and
|
also populated on boot using one of ``kernelcore``, ``movablecore`` and
|
||||||
``movable_node`` kernel command line parameters. See
|
``movable_node`` kernel command line parameters. See
|
||||||
Documentation/mm/page_migration.rst and
|
Documentation/mm/page_migration.rst and
|
||||||
Documentation/admin-guide/mm/memory_hotplug.rst for additional details.
|
Documentation/admin-guide/mm/memory-hotplug.rst for additional details.
|
||||||
|
|
||||||
* ``ZONE_DEVICE`` represents memory residing on devices such as PMEM and GPU.
|
* ``ZONE_DEVICE`` represents memory residing on devices such as PMEM and GPU.
|
||||||
It has different characteristics than RAM zone types and it exists to provide
|
It has different characteristics than RAM zone types and it exists to provide
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# SPDX-License-Identifier: GPL-2.0
|
# SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause)
|
||||||
%YAML 1.2
|
%YAML 1.2
|
||||||
---
|
---
|
||||||
$id: http://kernel.org/schemas/netlink/genetlink-c.yaml#
|
$id: http://kernel.org/schemas/netlink/genetlink-c.yaml#
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# SPDX-License-Identifier: GPL-2.0
|
# SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause)
|
||||||
%YAML 1.2
|
%YAML 1.2
|
||||||
---
|
---
|
||||||
$id: http://kernel.org/schemas/netlink/genetlink-legacy.yaml#
|
$id: http://kernel.org/schemas/netlink/genetlink-legacy.yaml#
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# SPDX-License-Identifier: GPL-2.0
|
# SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause)
|
||||||
%YAML 1.2
|
%YAML 1.2
|
||||||
---
|
---
|
||||||
$id: http://kernel.org/schemas/netlink/genetlink-legacy.yaml#
|
$id: http://kernel.org/schemas/netlink/genetlink-legacy.yaml#
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
# SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause)
|
||||||
|
|
||||||
name: ethtool
|
name: ethtool
|
||||||
|
|
||||||
protocol: genetlink-legacy
|
protocol: genetlink-legacy
|
||||||
|
@ -11,7 +13,6 @@ attribute-sets:
|
||||||
-
|
-
|
||||||
name: dev-index
|
name: dev-index
|
||||||
type: u32
|
type: u32
|
||||||
value: 1
|
|
||||||
-
|
-
|
||||||
name: dev-name
|
name: dev-name
|
||||||
type: string
|
type: string
|
||||||
|
@ -25,7 +26,6 @@ attribute-sets:
|
||||||
-
|
-
|
||||||
name: index
|
name: index
|
||||||
type: u32
|
type: u32
|
||||||
value: 1
|
|
||||||
-
|
-
|
||||||
name: name
|
name: name
|
||||||
type: string
|
type: string
|
||||||
|
@ -39,14 +39,12 @@ attribute-sets:
|
||||||
name: bit
|
name: bit
|
||||||
type: nest
|
type: nest
|
||||||
nested-attributes: bitset-bit
|
nested-attributes: bitset-bit
|
||||||
value: 1
|
|
||||||
-
|
-
|
||||||
name: bitset
|
name: bitset
|
||||||
attributes:
|
attributes:
|
||||||
-
|
-
|
||||||
name: nomask
|
name: nomask
|
||||||
type: flag
|
type: flag
|
||||||
value: 1
|
|
||||||
-
|
-
|
||||||
name: size
|
name: size
|
||||||
type: u32
|
type: u32
|
||||||
|
@ -61,7 +59,6 @@ attribute-sets:
|
||||||
-
|
-
|
||||||
name: index
|
name: index
|
||||||
type: u32
|
type: u32
|
||||||
value: 1
|
|
||||||
-
|
-
|
||||||
name: value
|
name: value
|
||||||
type: string
|
type: string
|
||||||
|
@ -71,7 +68,6 @@ attribute-sets:
|
||||||
-
|
-
|
||||||
name: string
|
name: string
|
||||||
type: nest
|
type: nest
|
||||||
value: 1
|
|
||||||
multi-attr: true
|
multi-attr: true
|
||||||
nested-attributes: string
|
nested-attributes: string
|
||||||
-
|
-
|
||||||
|
@ -80,7 +76,6 @@ attribute-sets:
|
||||||
-
|
-
|
||||||
name: id
|
name: id
|
||||||
type: u32
|
type: u32
|
||||||
value: 1
|
|
||||||
-
|
-
|
||||||
name: count
|
name: count
|
||||||
type: u32
|
type: u32
|
||||||
|
@ -96,14 +91,12 @@ attribute-sets:
|
||||||
name: stringset
|
name: stringset
|
||||||
type: nest
|
type: nest
|
||||||
multi-attr: true
|
multi-attr: true
|
||||||
value: 1
|
|
||||||
nested-attributes: stringset
|
nested-attributes: stringset
|
||||||
-
|
-
|
||||||
name: strset
|
name: strset
|
||||||
attributes:
|
attributes:
|
||||||
-
|
-
|
||||||
name: header
|
name: header
|
||||||
value: 1
|
|
||||||
type: nest
|
type: nest
|
||||||
nested-attributes: header
|
nested-attributes: header
|
||||||
-
|
-
|
||||||
|
@ -119,7 +112,6 @@ attribute-sets:
|
||||||
attributes:
|
attributes:
|
||||||
-
|
-
|
||||||
name: header
|
name: header
|
||||||
value: 1
|
|
||||||
type: nest
|
type: nest
|
||||||
nested-attributes: header
|
nested-attributes: header
|
||||||
-
|
-
|
||||||
|
@ -132,7 +124,6 @@ attribute-sets:
|
||||||
attributes:
|
attributes:
|
||||||
-
|
-
|
||||||
name: header
|
name: header
|
||||||
value: 1
|
|
||||||
type: nest
|
type: nest
|
||||||
nested-attributes: header
|
nested-attributes: header
|
||||||
-
|
-
|
||||||
|
@ -180,7 +171,6 @@ attribute-sets:
|
||||||
attributes:
|
attributes:
|
||||||
-
|
-
|
||||||
name: pad
|
name: pad
|
||||||
value: 1
|
|
||||||
type: pad
|
type: pad
|
||||||
-
|
-
|
||||||
name: reassembly-errors
|
name: reassembly-errors
|
||||||
|
@ -205,7 +195,6 @@ attribute-sets:
|
||||||
attributes:
|
attributes:
|
||||||
-
|
-
|
||||||
name: header
|
name: header
|
||||||
value: 1
|
|
||||||
type: nest
|
type: nest
|
||||||
nested-attributes: header
|
nested-attributes: header
|
||||||
-
|
-
|
||||||
|
@ -251,13 +240,11 @@ operations:
|
||||||
|
|
||||||
do: &strset-get-op
|
do: &strset-get-op
|
||||||
request:
|
request:
|
||||||
value: 1
|
|
||||||
attributes:
|
attributes:
|
||||||
- header
|
- header
|
||||||
- stringsets
|
- stringsets
|
||||||
- counts-only
|
- counts-only
|
||||||
reply:
|
reply:
|
||||||
value: 1
|
|
||||||
attributes:
|
attributes:
|
||||||
- header
|
- header
|
||||||
- stringsets
|
- stringsets
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
# SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause)
|
||||||
|
|
||||||
name: fou
|
name: fou
|
||||||
|
|
||||||
protocol: genetlink-legacy
|
protocol: genetlink-legacy
|
||||||
|
@ -26,6 +28,7 @@ attribute-sets:
|
||||||
-
|
-
|
||||||
name: unspec
|
name: unspec
|
||||||
type: unused
|
type: unused
|
||||||
|
value: 0
|
||||||
-
|
-
|
||||||
name: port
|
name: port
|
||||||
type: u16
|
type: u16
|
||||||
|
@ -71,6 +74,7 @@ operations:
|
||||||
-
|
-
|
||||||
name: unspec
|
name: unspec
|
||||||
doc: unused
|
doc: unused
|
||||||
|
value: 0
|
||||||
|
|
||||||
-
|
-
|
||||||
name: add
|
name: add
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
# SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause)
|
||||||
|
|
||||||
name: netdev
|
name: netdev
|
||||||
|
|
||||||
doc:
|
doc:
|
||||||
|
@ -7,6 +9,7 @@ definitions:
|
||||||
-
|
-
|
||||||
type: flags
|
type: flags
|
||||||
name: xdp-act
|
name: xdp-act
|
||||||
|
render-max: true
|
||||||
entries:
|
entries:
|
||||||
-
|
-
|
||||||
name: basic
|
name: basic
|
||||||
|
@ -48,7 +51,6 @@ attribute-sets:
|
||||||
name: ifindex
|
name: ifindex
|
||||||
doc: netdev ifindex
|
doc: netdev ifindex
|
||||||
type: u32
|
type: u32
|
||||||
value: 1
|
|
||||||
checks:
|
checks:
|
||||||
min: 1
|
min: 1
|
||||||
-
|
-
|
||||||
|
@ -66,7 +68,6 @@ operations:
|
||||||
-
|
-
|
||||||
name: dev-get
|
name: dev-get
|
||||||
doc: Get / dump information about a netdev.
|
doc: Get / dump information about a netdev.
|
||||||
value: 1
|
|
||||||
attribute-set: dev
|
attribute-set: dev
|
||||||
do:
|
do:
|
||||||
request:
|
request:
|
||||||
|
|
|
@ -23,10 +23,13 @@ metadata is supported, this set will grow:
|
||||||
An XDP program can use these kfuncs to read the metadata into stack
|
An XDP program can use these kfuncs to read the metadata into stack
|
||||||
variables for its own consumption. Or, to pass the metadata on to other
|
variables for its own consumption. Or, to pass the metadata on to other
|
||||||
consumers, an XDP program can store it into the metadata area carried
|
consumers, an XDP program can store it into the metadata area carried
|
||||||
ahead of the packet.
|
ahead of the packet. Not all packets will necessary have the requested
|
||||||
|
metadata available in which case the driver returns ``-ENODATA``.
|
||||||
|
|
||||||
Not all kfuncs have to be implemented by the device driver; when not
|
Not all kfuncs have to be implemented by the device driver; when not
|
||||||
implemented, the default ones that return ``-EOPNOTSUPP`` will be used.
|
implemented, the default ones that return ``-EOPNOTSUPP`` will be used
|
||||||
|
to indicate the device driver have not implemented this kfunc.
|
||||||
|
|
||||||
|
|
||||||
Within an XDP frame, the metadata layout (accessed via ``xdp_buff``) is
|
Within an XDP frame, the metadata layout (accessed via ``xdp_buff``) is
|
||||||
as follows::
|
as follows::
|
||||||
|
|
|
@ -12,10 +12,6 @@ under ``-std=gnu11`` [gcc-c-dialect-options]_: the GNU dialect of ISO C11.
|
||||||
This dialect contains many extensions to the language [gnu-extensions]_,
|
This dialect contains many extensions to the language [gnu-extensions]_,
|
||||||
and many of them are used within the kernel as a matter of course.
|
and many of them are used within the kernel as a matter of course.
|
||||||
|
|
||||||
There is some support for compiling the kernel with ``icc`` [icc]_ for several
|
|
||||||
of the architectures, although at the time of writing it is not completed,
|
|
||||||
requiring third-party patches.
|
|
||||||
|
|
||||||
Attributes
|
Attributes
|
||||||
----------
|
----------
|
||||||
|
|
||||||
|
@ -35,12 +31,28 @@ in order to feature detect which ones can be used and/or to shorten the code.
|
||||||
|
|
||||||
Please refer to ``include/linux/compiler_attributes.h`` for more information.
|
Please refer to ``include/linux/compiler_attributes.h`` for more information.
|
||||||
|
|
||||||
|
Rust
|
||||||
|
----
|
||||||
|
|
||||||
|
The kernel has experimental support for the Rust programming language
|
||||||
|
[rust-language]_ under ``CONFIG_RUST``. It is compiled with ``rustc`` [rustc]_
|
||||||
|
under ``--edition=2021`` [rust-editions]_. Editions are a way to introduce
|
||||||
|
small changes to the language that are not backwards compatible.
|
||||||
|
|
||||||
|
On top of that, some unstable features [rust-unstable-features]_ are used in
|
||||||
|
the kernel. Unstable features may change in the future, thus it is an important
|
||||||
|
goal to reach a point where only stable features are used.
|
||||||
|
|
||||||
|
Please refer to Documentation/rust/index.rst for more information.
|
||||||
|
|
||||||
.. [c-language] http://www.open-std.org/jtc1/sc22/wg14/www/standards
|
.. [c-language] http://www.open-std.org/jtc1/sc22/wg14/www/standards
|
||||||
.. [gcc] https://gcc.gnu.org
|
.. [gcc] https://gcc.gnu.org
|
||||||
.. [clang] https://clang.llvm.org
|
.. [clang] https://clang.llvm.org
|
||||||
.. [icc] https://software.intel.com/en-us/c-compilers
|
|
||||||
.. [gcc-c-dialect-options] https://gcc.gnu.org/onlinedocs/gcc/C-Dialect-Options.html
|
.. [gcc-c-dialect-options] https://gcc.gnu.org/onlinedocs/gcc/C-Dialect-Options.html
|
||||||
.. [gnu-extensions] https://gcc.gnu.org/onlinedocs/gcc/C-Extensions.html
|
.. [gnu-extensions] https://gcc.gnu.org/onlinedocs/gcc/C-Extensions.html
|
||||||
.. [gcc-attribute-syntax] https://gcc.gnu.org/onlinedocs/gcc/Attribute-Syntax.html
|
.. [gcc-attribute-syntax] https://gcc.gnu.org/onlinedocs/gcc/Attribute-Syntax.html
|
||||||
.. [n2049] http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2049.pdf
|
.. [n2049] http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2049.pdf
|
||||||
|
.. [rust-language] https://www.rust-lang.org
|
||||||
|
.. [rustc] https://doc.rust-lang.org/rustc/
|
||||||
|
.. [rust-editions] https://doc.rust-lang.org/edition-guide/editions/
|
||||||
|
.. [rust-unstable-features] https://github.com/Rust-for-Linux/linux/issues/2
|
||||||
|
|
|
@ -320,7 +320,7 @@ for their time. Code review is a tiring and time-consuming process, and
|
||||||
reviewers sometimes get grumpy. Even in that case, though, respond
|
reviewers sometimes get grumpy. Even in that case, though, respond
|
||||||
politely and address the problems they have pointed out. When sending a next
|
politely and address the problems they have pointed out. When sending a next
|
||||||
version, add a ``patch changelog`` to the cover letter or to individual patches
|
version, add a ``patch changelog`` to the cover letter or to individual patches
|
||||||
explaining difference aganst previous submission (see
|
explaining difference against previous submission (see
|
||||||
:ref:`the_canonical_patch_format`).
|
:ref:`the_canonical_patch_format`).
|
||||||
|
|
||||||
See Documentation/process/email-clients.rst for recommendations on email
|
See Documentation/process/email-clients.rst for recommendations on email
|
||||||
|
|
|
@ -258,7 +258,7 @@ Linux cannot currently figure out CPU capacity on its own, this information thus
|
||||||
needs to be handed to it. Architectures must define arch_scale_cpu_capacity()
|
needs to be handed to it. Architectures must define arch_scale_cpu_capacity()
|
||||||
for that purpose.
|
for that purpose.
|
||||||
|
|
||||||
The arm and arm64 architectures directly map this to the arch_topology driver
|
The arm, arm64, and RISC-V architectures directly map this to the arch_topology driver
|
||||||
CPU scaling data, which is derived from the capacity-dmips-mhz CPU binding; see
|
CPU scaling data, which is derived from the capacity-dmips-mhz CPU binding; see
|
||||||
Documentation/devicetree/bindings/cpu/cpu-capacity.txt.
|
Documentation/devicetree/bindings/cpu/cpu-capacity.txt.
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,8 @@ Hugetlbfs 预留
|
||||||
概述
|
概述
|
||||||
====
|
====
|
||||||
|
|
||||||
Documentation/mm/hugetlbpage.rst 中描述的巨页通常是预先分配给应用程序使用的。如果VMA指
|
Documentation/admin-guide/mm/hugetlbpage.rst
|
||||||
|
中描述的巨页通常是预先分配给应用程序使用的 。如果VMA指
|
||||||
示要使用巨页,这些巨页会在缺页异常时被实例化到任务的地址空间。如果在缺页异常
|
示要使用巨页,这些巨页会在缺页异常时被实例化到任务的地址空间。如果在缺页异常
|
||||||
时没有巨页存在,任务就会被发送一个SIGBUS,并经常不高兴地死去。在加入巨页支
|
时没有巨页存在,任务就会被发送一个SIGBUS,并经常不高兴地死去。在加入巨页支
|
||||||
持后不久,人们决定,在mmap()时检测巨页的短缺情况会更好。这个想法是,如果
|
持后不久,人们决定,在mmap()时检测巨页的短缺情况会更好。这个想法是,如果
|
||||||
|
|
|
@ -231,7 +231,7 @@ CFS调度类基于实体负载跟踪机制(Per-Entity Load Tracking, PELT)
|
||||||
当前,Linux无法凭自身算出CPU算力,因此必须要有把这个信息传递给Linux的方式。每个架构必须为此
|
当前,Linux无法凭自身算出CPU算力,因此必须要有把这个信息传递给Linux的方式。每个架构必须为此
|
||||||
定义arch_scale_cpu_capacity()函数。
|
定义arch_scale_cpu_capacity()函数。
|
||||||
|
|
||||||
arm和arm64架构直接把这个信息映射到arch_topology驱动的CPU scaling数据中(译注:参考
|
arm、arm64和RISC-V架构直接把这个信息映射到arch_topology驱动的CPU scaling数据中(译注:参考
|
||||||
arch_topology.h的percpu变量cpu_scale),它是从capacity-dmips-mhz CPU binding中衍生计算
|
arch_topology.h的percpu变量cpu_scale),它是从capacity-dmips-mhz CPU binding中衍生计算
|
||||||
出来的。参见Documentation/devicetree/bindings/cpu/cpu-capacity.txt。
|
出来的。参见Documentation/devicetree/bindings/cpu/cpu-capacity.txt。
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,352 @@
|
||||||
|
=======================
|
||||||
|
Linux UVC Gadget Driver
|
||||||
|
=======================
|
||||||
|
|
||||||
|
Overview
|
||||||
|
--------
|
||||||
|
The UVC Gadget driver is a driver for hardware on the *device* side of a USB
|
||||||
|
connection. It is intended to run on a Linux system that has USB device-side
|
||||||
|
hardware such as boards with an OTG port.
|
||||||
|
|
||||||
|
On the device system, once the driver is bound it appears as a V4L2 device with
|
||||||
|
the output capability.
|
||||||
|
|
||||||
|
On the host side (once connected via USB cable), a device running the UVC Gadget
|
||||||
|
driver *and controlled by an appropriate userspace program* should appear as a UVC
|
||||||
|
specification compliant camera, and function appropriately with any program
|
||||||
|
designed to handle them. The userspace program running on the device system can
|
||||||
|
queue image buffers from a variety of sources to be transmitted via the USB
|
||||||
|
connection. Typically this would mean forwarding the buffers from a camera sensor
|
||||||
|
peripheral, but the source of the buffer is entirely dependent on the userspace
|
||||||
|
companion program.
|
||||||
|
|
||||||
|
Configuring the device kernel
|
||||||
|
-----------------------------
|
||||||
|
The Kconfig options USB_CONFIGFS, USB_LIBCOMPOSITE, USB_CONFIGFS_F_UVC and
|
||||||
|
USB_F_UVC must be selected to enable support for the UVC gadget.
|
||||||
|
|
||||||
|
Configuring the gadget through configfs
|
||||||
|
---------------------------------------
|
||||||
|
The UVC Gadget expects to be configured through configfs using the UVC function.
|
||||||
|
This allows a significant degree of flexibility, as many of a UVC device's
|
||||||
|
settings can be controlled this way.
|
||||||
|
|
||||||
|
Not all of the available attributes are described here. For a complete enumeration
|
||||||
|
see Documentation/ABI/testing/configfs-usb-gadget-uvc
|
||||||
|
|
||||||
|
Assumptions
|
||||||
|
~~~~~~~~~~~
|
||||||
|
This section assumes that you have mounted configfs at `/sys/kernel/config` and
|
||||||
|
created a gadget as `/sys/kernel/config/usb_gadget/g1`.
|
||||||
|
|
||||||
|
The UVC Function
|
||||||
|
~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
The first step is to create the UVC function:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
# These variables will be assumed throughout the rest of the document
|
||||||
|
CONFIGFS="/sys/kernel/config"
|
||||||
|
GADGET="$CONFIGFS/usb_gadget/g1"
|
||||||
|
FUNCTION="$GADGET/functions/uvc.0"
|
||||||
|
|
||||||
|
mkdir -p $FUNCTION
|
||||||
|
|
||||||
|
Formats and Frames
|
||||||
|
~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
You must configure the gadget by telling it which formats you support, as well
|
||||||
|
as the frame sizes and frame intervals that are supported for each format. In
|
||||||
|
the current implementation there is no way for the gadget to refuse to set a
|
||||||
|
format that the host instructs it to set, so it is important that this step is
|
||||||
|
completed *accurately* to ensure that the host never asks for a format that
|
||||||
|
can't be provided.
|
||||||
|
|
||||||
|
Formats are created under the streaming/uncompressed and streaming/mjpeg configfs
|
||||||
|
groups, with the framesizes created under the formats in the following
|
||||||
|
structure:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
uvc.0 +
|
||||||
|
|
|
||||||
|
+ streaming +
|
||||||
|
|
|
||||||
|
+ mjpeg +
|
||||||
|
| |
|
||||||
|
| + mjpeg +
|
||||||
|
| |
|
||||||
|
| + 720p
|
||||||
|
| |
|
||||||
|
| + 1080p
|
||||||
|
|
|
||||||
|
+ uncompressed +
|
||||||
|
|
|
||||||
|
+ yuyv +
|
||||||
|
|
|
||||||
|
+ 720p
|
||||||
|
|
|
||||||
|
+ 1080p
|
||||||
|
|
||||||
|
Each frame can then be configured with a width and height, plus the maximum
|
||||||
|
buffer size required to store a single frame, and finally with the supported
|
||||||
|
frame intervals for that format and framesize. Width and height are enumerated in
|
||||||
|
units of pixels, frame interval in units of 100ns. To create the structure
|
||||||
|
above with 2, 15 and 100 fps frameintervals for each framesize for example you
|
||||||
|
might do:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
create_frame() {
|
||||||
|
# Example usage:
|
||||||
|
# create_frame <width> <height> <group> <format name>
|
||||||
|
|
||||||
|
WIDTH=$1
|
||||||
|
HEIGHT=$2
|
||||||
|
FORMAT=$3
|
||||||
|
NAME=$4
|
||||||
|
|
||||||
|
wdir=$FUNCTION/streaming/$FORMAT/$NAME/${HEIGHT}p
|
||||||
|
|
||||||
|
mkdir -p $wdir
|
||||||
|
echo $WIDTH > $wdir/wWidth
|
||||||
|
echo $HEIGHT > $wdir/wHeight
|
||||||
|
echo $(( $WIDTH * $HEIGHT * 2 )) > $wdir/dwMaxVideoFrameBufferSize
|
||||||
|
cat <<EOF > $wdir/dwFrameInterval
|
||||||
|
666666
|
||||||
|
100000
|
||||||
|
5000000
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
create_frame 1280 720 mjpeg mjpeg
|
||||||
|
create_frame 1920 1080 mjpeg mjpeg
|
||||||
|
create_frame 1280 720 uncompressed yuyv
|
||||||
|
create_frame 1920 1080 uncompressed yuyv
|
||||||
|
|
||||||
|
The only uncompressed format currently supported is YUYV, which is detailed at
|
||||||
|
Documentation/userspace-api/media/v4l/pixfmt-packed.yuv.rst.
|
||||||
|
|
||||||
|
Color Matching Descriptors
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
It's possible to specify some colometry information for each format you create.
|
||||||
|
This step is optional, and default information will be included if this step is
|
||||||
|
skipped; those default values follow those defined in the Color Matching Descriptor
|
||||||
|
section of the UVC specification.
|
||||||
|
|
||||||
|
To create a Color Matching Descriptor, create a configfs item and set its three
|
||||||
|
attributes to your desired settings and then link to it from the format you wish
|
||||||
|
it to be associated with:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
# Create a new Color Matching Descriptor
|
||||||
|
|
||||||
|
mkdir $FUNCTION/streaming/color_matching/yuyv
|
||||||
|
pushd $FUNCTION/streaming/color_matching/yuyv
|
||||||
|
|
||||||
|
echo 1 > bColorPrimaries
|
||||||
|
echo 1 > bTransferCharacteristics
|
||||||
|
echo 4 > bMatrixCoefficients
|
||||||
|
|
||||||
|
popd
|
||||||
|
|
||||||
|
# Create a symlink to the Color Matching Descriptor from the format's config item
|
||||||
|
ln -s $FUNCTION/streaming/color_matching/yuyv $FUNCTION/streaming/uncompressed/yuyv
|
||||||
|
|
||||||
|
For details about the valid values, consult the UVC specification. Note that a
|
||||||
|
default color matching descriptor exists and is used by any format which does
|
||||||
|
not have a link to a different Color Matching Descriptor. It's possible to
|
||||||
|
change the attribute settings for the default descriptor, so bear in mind that if
|
||||||
|
you do that you are altering the defaults for any format that does not link to
|
||||||
|
a different one.
|
||||||
|
|
||||||
|
|
||||||
|
Header linking
|
||||||
|
~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
The UVC specification requires that Format and Frame descriptors be preceded by
|
||||||
|
Headers detailing things such as the number and cumulative size of the different
|
||||||
|
Format descriptors that follow. This and similar operations are acheived in
|
||||||
|
configfs by linking between the configfs item representing the header and the
|
||||||
|
config items representing those other descriptors, in this manner:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
mkdir $FUNCTION/streaming/header/h
|
||||||
|
|
||||||
|
# This section links the format descriptors and their associated frames
|
||||||
|
# to the header
|
||||||
|
cd $FUNCTION/streaming/header/h
|
||||||
|
ln -s ../../uncompressed/yuyv
|
||||||
|
ln -s ../../mjpeg/mjpeg
|
||||||
|
|
||||||
|
# This section ensures that the header will be transmitted for each
|
||||||
|
# speed's set of descriptors. If support for a particular speed is not
|
||||||
|
# needed then it can be skipped here.
|
||||||
|
cd ../../class/fs
|
||||||
|
ln -s ../../header/h
|
||||||
|
cd ../../class/hs
|
||||||
|
ln -s ../../header/h
|
||||||
|
cd ../../class/ss
|
||||||
|
ln -s ../../header/h
|
||||||
|
cd ../../../control
|
||||||
|
mkdir header/h
|
||||||
|
ln -s header/h class/fs
|
||||||
|
ln -s header/h class/ss
|
||||||
|
|
||||||
|
|
||||||
|
Extension Unit Support
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
A UVC Extension Unit (XU) basically provides a distinct unit to which control set
|
||||||
|
and get requests can be addressed. The meaning of those control requests is
|
||||||
|
entirely implementation dependent, but may be used to control settings outside
|
||||||
|
of the UVC specification (for example enabling or disabling video effects). An
|
||||||
|
XU can be inserted into the UVC unit chain or left free-hanging.
|
||||||
|
|
||||||
|
Configuring an extension unit involves creating an entry in the appropriate
|
||||||
|
directory and setting its attributes appropriately, like so:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
mkdir $FUNCTION/control/extensions/xu.0
|
||||||
|
pushd $FUNCTION/control/extensions/xu.0
|
||||||
|
|
||||||
|
# Set the bUnitID of the Processing Unit as the source for this
|
||||||
|
# Extension Unit
|
||||||
|
echo 2 > baSourceID
|
||||||
|
|
||||||
|
# Set this XU as the source of the default output terminal. This inserts
|
||||||
|
# the XU into the UVC chain between the PU and OT such that the final
|
||||||
|
# chain is IT > PU > XU.0 > OT
|
||||||
|
cat bUnitID > ../../terminal/output/default/baSourceID
|
||||||
|
|
||||||
|
# Flag some controls as being available for use. The bmControl field is
|
||||||
|
# a bitmap with each bit denoting the availability of a particular
|
||||||
|
# control. For example to flag the 0th, 2nd and 3rd controls available:
|
||||||
|
echo 0x0d > bmControls
|
||||||
|
|
||||||
|
# Set the GUID; this is a vendor-specific code identifying the XU.
|
||||||
|
echo -e -n "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10" > guidExtensionCode
|
||||||
|
|
||||||
|
popd
|
||||||
|
|
||||||
|
The bmControls attribute and the baSourceID attribute are multi-value attributes.
|
||||||
|
This means that you may write multiple newline separated values to them. For
|
||||||
|
example to flag the 1st, 2nd, 9th and 10th controls as being available you would
|
||||||
|
need to write two values to bmControls, like so:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
cat << EOF > bmControls
|
||||||
|
0x03
|
||||||
|
0x03
|
||||||
|
EOF
|
||||||
|
|
||||||
|
The multi-value nature of the baSourceID attribute belies the fact that XUs can
|
||||||
|
be multiple-input, though note that this currently has no significant effect.
|
||||||
|
|
||||||
|
The bControlSize attribute reflects the size of the bmControls attribute, and
|
||||||
|
similarly bNrInPins reflects the size of the baSourceID attributes. Both
|
||||||
|
attributes are automatically increased / decreased as you set bmControls and
|
||||||
|
baSourceID. It is also possible to manually increase or decrease bControlSize
|
||||||
|
which has the effect of truncating entries to the new size, or padding entries
|
||||||
|
out with 0x00, for example:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
$ cat bmControls
|
||||||
|
0x03
|
||||||
|
0x05
|
||||||
|
|
||||||
|
$ cat bControlSize
|
||||||
|
2
|
||||||
|
|
||||||
|
$ echo 1 > bControlSize
|
||||||
|
$ cat bmControls
|
||||||
|
0x03
|
||||||
|
|
||||||
|
$ echo 2 > bControlSize
|
||||||
|
$ cat bmControls
|
||||||
|
0x03
|
||||||
|
0x00
|
||||||
|
|
||||||
|
bNrInPins and baSourceID function in the same way.
|
||||||
|
|
||||||
|
Custom Strings Support
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
String descriptors that provide a textual description for various parts of a
|
||||||
|
USB device can be defined in the usual place within USB configfs, and may then
|
||||||
|
be linked to from the UVC function root or from Extension Unit directories to
|
||||||
|
assign those strings as descriptors:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
# Create a string descriptor in us-EN and link to it from the function
|
||||||
|
# root. The name of the link is significant here, as it declares this
|
||||||
|
# descriptor to be intended for the Interface Association Descriptor.
|
||||||
|
# Other significant link names at function root are vs0_desc and vs1_desc
|
||||||
|
# For the VideoStreaming Interface 0/1 Descriptors.
|
||||||
|
|
||||||
|
mkdir -p $GADGET/strings/0x409/iad_desc
|
||||||
|
echo -n "Interface Associaton Descriptor" > $GADGET/strings/0x409/iad_desc/s
|
||||||
|
ln -s $GADGET/strings/0x409/iad_desc $FUNCTION/iad_desc
|
||||||
|
|
||||||
|
# Because the link to a String Descriptor from an Extension Unit clearly
|
||||||
|
# associates the two, the name of this link is not significant and may
|
||||||
|
# be set freely.
|
||||||
|
|
||||||
|
mkdir -p $GADGET/strings/0x409/xu.0
|
||||||
|
echo -n "A Very Useful Extension Unit" > $GADGET/strings/0x409/xu.0/s
|
||||||
|
ln -s $GADGET/strings/0x409/xu.0 $FUNCTION/control/extensions/xu.0
|
||||||
|
|
||||||
|
The interrupt endpoint
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
The VideoControl interface has an optional interrupt endpoint which is by default
|
||||||
|
disabled. This is intended to support delayed response control set requests for
|
||||||
|
UVC (which should respond through the interrupt endpoint rather than tying up
|
||||||
|
endpoint 0). At present support for sending data through this endpoint is missing
|
||||||
|
and so it is left disabled to avoid confusion. If you wish to enable it you can
|
||||||
|
do so through the configfs attribute:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
echo 1 > $FUNCTION/control/enable_interrupt_ep
|
||||||
|
|
||||||
|
Bandwidth configuration
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
There are three attributes which control the bandwidth of the USB connection.
|
||||||
|
These live in the function root and can be set within limits:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
# streaming_interval sets bInterval. Values range from 1..255
|
||||||
|
echo 1 > $FUNCTION/streaming_interval
|
||||||
|
|
||||||
|
# streaming_maxpacket sets wMaxPacketSize. Valid values are 1024/2048/3072
|
||||||
|
echo 3072 > $FUNCTION/streaming_maxpacket
|
||||||
|
|
||||||
|
# streaming_maxburst sets bMaxBurst. Valid values are 1..15
|
||||||
|
echo 1 > $FUNCTION/streaming_maxburst
|
||||||
|
|
||||||
|
|
||||||
|
The values passed here will be clamped to valid values according to the UVC
|
||||||
|
specification (which depend on the speed of the USB connection). To understand
|
||||||
|
how the settings influence bandwidth you should consult the UVC specifications,
|
||||||
|
but a rule of thumb is that increasing the streaming_maxpacket setting will
|
||||||
|
improve bandwidth (and thus the maximum possible framerate), whilst the same is
|
||||||
|
true for streaming_maxburst provided the USB connection is running at SuperSpeed.
|
||||||
|
Increasing streaming_interval will reduce bandwidth and framerate.
|
||||||
|
|
||||||
|
The userspace application
|
||||||
|
-------------------------
|
||||||
|
By itself, the UVC Gadget driver cannot do anything particularly interesting. It
|
||||||
|
must be paired with a userspace program that responds to UVC control requests and
|
||||||
|
fills buffers to be queued to the V4L2 device that the driver creates. How those
|
||||||
|
things are achieved is implementation dependent and beyond the scope of this
|
||||||
|
document, but a reference application can be found at https://gitlab.freedesktop.org/camera/uvc-gadget
|
|
@ -16,6 +16,7 @@ USB support
|
||||||
gadget_multi
|
gadget_multi
|
||||||
gadget_printer
|
gadget_printer
|
||||||
gadget_serial
|
gadget_serial
|
||||||
|
gadget_uvc
|
||||||
gadget-testing
|
gadget-testing
|
||||||
iuu_phoenix
|
iuu_phoenix
|
||||||
mass-storage
|
mass-storage
|
||||||
|
|
|
@ -24,6 +24,10 @@ YAML specifications can be found under ``Documentation/netlink/specs/``
|
||||||
This document describes details of the schema.
|
This document describes details of the schema.
|
||||||
See :doc:`intro-specs` for a practical starting guide.
|
See :doc:`intro-specs` for a practical starting guide.
|
||||||
|
|
||||||
|
All specs must be licensed under
|
||||||
|
``((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause)``
|
||||||
|
to allow for easy adoption in user space code.
|
||||||
|
|
||||||
Compatibility levels
|
Compatibility levels
|
||||||
====================
|
====================
|
||||||
|
|
||||||
|
@ -197,9 +201,15 @@ value
|
||||||
Numerical attribute ID, used in serialized Netlink messages.
|
Numerical attribute ID, used in serialized Netlink messages.
|
||||||
The ``value`` property can be skipped, in which case the attribute ID
|
The ``value`` property can be skipped, in which case the attribute ID
|
||||||
will be the value of the previous attribute plus one (recursively)
|
will be the value of the previous attribute plus one (recursively)
|
||||||
and ``0`` for the first attribute in the attribute set.
|
and ``1`` for the first attribute in the attribute set.
|
||||||
|
|
||||||
Note that the ``value`` of an attribute is defined only in its main set.
|
Attributes (and operations) use ``1`` as the default value for the first
|
||||||
|
entry (unlike enums in definitions which start from ``0``) because
|
||||||
|
entry ``0`` is almost always reserved as undefined. Spec can explicitly
|
||||||
|
set value to ``0`` if needed.
|
||||||
|
|
||||||
|
Note that the ``value`` of an attribute is defined only in its main set
|
||||||
|
(not in subsets).
|
||||||
|
|
||||||
enum
|
enum
|
||||||
~~~~
|
~~~~
|
||||||
|
|
33
MAINTAINERS
33
MAINTAINERS
|
@ -5971,7 +5971,7 @@ F: include/linux/dm-*.h
|
||||||
F: include/uapi/linux/dm-*.h
|
F: include/uapi/linux/dm-*.h
|
||||||
|
|
||||||
DEVLINK
|
DEVLINK
|
||||||
M: Jiri Pirko <jiri@nvidia.com>
|
M: Jiri Pirko <jiri@resnulli.us>
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
F: Documentation/networking/devlink
|
F: Documentation/networking/devlink
|
||||||
|
@ -9871,10 +9871,10 @@ M: Christian Brauner <brauner@kernel.org>
|
||||||
M: Seth Forshee <sforshee@kernel.org>
|
M: Seth Forshee <sforshee@kernel.org>
|
||||||
L: linux-fsdevel@vger.kernel.org
|
L: linux-fsdevel@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
T: git://git.kernel.org/pub/scm/linux/kernel/git/vfs/idmapping.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/vfs/idmapping.git
|
||||||
F: Documentation/filesystems/idmappings.rst
|
F: Documentation/filesystems/idmappings.rst
|
||||||
F: tools/testing/selftests/mount_setattr/
|
|
||||||
F: include/linux/mnt_idmapping.*
|
F: include/linux/mnt_idmapping.*
|
||||||
|
F: tools/testing/selftests/mount_setattr/
|
||||||
|
|
||||||
IDT VersaClock 5 CLOCK DRIVER
|
IDT VersaClock 5 CLOCK DRIVER
|
||||||
M: Luca Ceresoli <luca@lucaceresoli.net>
|
M: Luca Ceresoli <luca@lucaceresoli.net>
|
||||||
|
@ -14872,12 +14872,12 @@ M: Sagi Grimberg <sagi@grimberg.me>
|
||||||
L: linux-nvme@lists.infradead.org
|
L: linux-nvme@lists.infradead.org
|
||||||
S: Supported
|
S: Supported
|
||||||
W: http://git.infradead.org/nvme.git
|
W: http://git.infradead.org/nvme.git
|
||||||
T: git://git.infradead.org/nvme.git
|
T: git git://git.infradead.org/nvme.git
|
||||||
F: Documentation/nvme/
|
F: Documentation/nvme/
|
||||||
F: drivers/nvme/host/
|
|
||||||
F: drivers/nvme/common/
|
F: drivers/nvme/common/
|
||||||
F: include/linux/nvme.h
|
F: drivers/nvme/host/
|
||||||
F: include/linux/nvme-*.h
|
F: include/linux/nvme-*.h
|
||||||
|
F: include/linux/nvme.h
|
||||||
F: include/uapi/linux/nvme_ioctl.h
|
F: include/uapi/linux/nvme_ioctl.h
|
||||||
|
|
||||||
NVM EXPRESS FABRICS AUTHENTICATION
|
NVM EXPRESS FABRICS AUTHENTICATION
|
||||||
|
@ -14912,7 +14912,7 @@ M: Chaitanya Kulkarni <kch@nvidia.com>
|
||||||
L: linux-nvme@lists.infradead.org
|
L: linux-nvme@lists.infradead.org
|
||||||
S: Supported
|
S: Supported
|
||||||
W: http://git.infradead.org/nvme.git
|
W: http://git.infradead.org/nvme.git
|
||||||
T: git://git.infradead.org/nvme.git
|
T: git git://git.infradead.org/nvme.git
|
||||||
F: drivers/nvme/target/
|
F: drivers/nvme/target/
|
||||||
|
|
||||||
NVMEM FRAMEWORK
|
NVMEM FRAMEWORK
|
||||||
|
@ -15079,7 +15079,7 @@ F: Documentation/hwmon/nzxt-smart2.rst
|
||||||
F: drivers/hwmon/nzxt-smart2.c
|
F: drivers/hwmon/nzxt-smart2.c
|
||||||
|
|
||||||
OBJAGG
|
OBJAGG
|
||||||
M: Jiri Pirko <jiri@nvidia.com>
|
M: Jiri Pirko <jiri@resnulli.us>
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
F: include/linux/objagg.h
|
F: include/linux/objagg.h
|
||||||
|
@ -15853,7 +15853,7 @@ F: drivers/video/logo/logo_parisc*
|
||||||
F: include/linux/hp_sdc.h
|
F: include/linux/hp_sdc.h
|
||||||
|
|
||||||
PARMAN
|
PARMAN
|
||||||
M: Jiri Pirko <jiri@nvidia.com>
|
M: Jiri Pirko <jiri@resnulli.us>
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
F: include/linux/parman.h
|
F: include/linux/parman.h
|
||||||
|
@ -16391,6 +16391,7 @@ R: Alexander Shishkin <alexander.shishkin@linux.intel.com>
|
||||||
R: Jiri Olsa <jolsa@kernel.org>
|
R: Jiri Olsa <jolsa@kernel.org>
|
||||||
R: Namhyung Kim <namhyung@kernel.org>
|
R: Namhyung Kim <namhyung@kernel.org>
|
||||||
R: Ian Rogers <irogers@google.com>
|
R: Ian Rogers <irogers@google.com>
|
||||||
|
R: Adrian Hunter <adrian.hunter@intel.com>
|
||||||
L: linux-perf-users@vger.kernel.org
|
L: linux-perf-users@vger.kernel.org
|
||||||
L: linux-kernel@vger.kernel.org
|
L: linux-kernel@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
|
@ -17989,7 +17990,7 @@ F: Documentation/devicetree/bindings/spi/microchip,mpfs-spi.yaml
|
||||||
F: Documentation/devicetree/bindings/usb/microchip,mpfs-musb.yaml
|
F: Documentation/devicetree/bindings/usb/microchip,mpfs-musb.yaml
|
||||||
F: arch/riscv/boot/dts/microchip/
|
F: arch/riscv/boot/dts/microchip/
|
||||||
F: drivers/char/hw_random/mpfs-rng.c
|
F: drivers/char/hw_random/mpfs-rng.c
|
||||||
F: drivers/clk/microchip/clk-mpfs.c
|
F: drivers/clk/microchip/clk-mpfs*.c
|
||||||
F: drivers/i2c/busses/i2c-microchip-corei2c.c
|
F: drivers/i2c/busses/i2c-microchip-corei2c.c
|
||||||
F: drivers/mailbox/mailbox-mpfs.c
|
F: drivers/mailbox/mailbox-mpfs.c
|
||||||
F: drivers/pci/controller/pcie-microchip-host.c
|
F: drivers/pci/controller/pcie-microchip-host.c
|
||||||
|
@ -19149,9 +19150,7 @@ W: http://www.brownhat.org/sis900.html
|
||||||
F: drivers/net/ethernet/sis/sis900.*
|
F: drivers/net/ethernet/sis/sis900.*
|
||||||
|
|
||||||
SIS FRAMEBUFFER DRIVER
|
SIS FRAMEBUFFER DRIVER
|
||||||
M: Thomas Winischhofer <thomas@winischhofer.net>
|
S: Orphan
|
||||||
S: Maintained
|
|
||||||
W: http://www.winischhofer.net/linuxsisvga.shtml
|
|
||||||
F: Documentation/fb/sisfb.rst
|
F: Documentation/fb/sisfb.rst
|
||||||
F: drivers/video/fbdev/sis/
|
F: drivers/video/fbdev/sis/
|
||||||
F: include/video/sisfb.h
|
F: include/video/sisfb.h
|
||||||
|
@ -19863,13 +19862,6 @@ S: Maintained
|
||||||
W: http://wiki.laptop.org/go/DCON
|
W: http://wiki.laptop.org/go/DCON
|
||||||
F: drivers/staging/olpc_dcon/
|
F: drivers/staging/olpc_dcon/
|
||||||
|
|
||||||
STAGING - REALTEK RTL8188EU DRIVERS
|
|
||||||
M: Larry Finger <Larry.Finger@lwfinger.net>
|
|
||||||
M: Phillip Potter <phil@philpotter.co.uk>
|
|
||||||
R: Pavel Skripkin <paskripkin@gmail.com>
|
|
||||||
S: Supported
|
|
||||||
F: drivers/staging/r8188eu/
|
|
||||||
|
|
||||||
STAGING - REALTEK RTL8712U DRIVERS
|
STAGING - REALTEK RTL8712U DRIVERS
|
||||||
M: Larry Finger <Larry.Finger@lwfinger.net>
|
M: Larry Finger <Larry.Finger@lwfinger.net>
|
||||||
M: Florian Schilhabel <florian.c.schilhabel@googlemail.com>.
|
M: Florian Schilhabel <florian.c.schilhabel@googlemail.com>.
|
||||||
|
@ -21651,6 +21643,7 @@ USB OVER IP DRIVER
|
||||||
M: Valentina Manea <valentina.manea.m@gmail.com>
|
M: Valentina Manea <valentina.manea.m@gmail.com>
|
||||||
M: Shuah Khan <shuah@kernel.org>
|
M: Shuah Khan <shuah@kernel.org>
|
||||||
M: Shuah Khan <skhan@linuxfoundation.org>
|
M: Shuah Khan <skhan@linuxfoundation.org>
|
||||||
|
R: Hongren Zheng <i@zenithal.me>
|
||||||
L: linux-usb@vger.kernel.org
|
L: linux-usb@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: Documentation/usb/usbip_protocol.rst
|
F: Documentation/usb/usbip_protocol.rst
|
||||||
|
|
13
Makefile
13
Makefile
|
@ -2,7 +2,7 @@
|
||||||
VERSION = 6
|
VERSION = 6
|
||||||
PATCHLEVEL = 3
|
PATCHLEVEL = 3
|
||||||
SUBLEVEL = 0
|
SUBLEVEL = 0
|
||||||
EXTRAVERSION = -rc1
|
EXTRAVERSION = -rc4
|
||||||
NAME = Hurr durr I'ma ninja sloth
|
NAME = Hurr durr I'ma ninja sloth
|
||||||
|
|
||||||
# *DOCUMENTATION*
|
# *DOCUMENTATION*
|
||||||
|
@ -274,8 +274,7 @@ no-dot-config-targets := $(clean-targets) \
|
||||||
cscope gtags TAGS tags help% %docs check% coccicheck \
|
cscope gtags TAGS tags help% %docs check% coccicheck \
|
||||||
$(version_h) headers headers_% archheaders archscripts \
|
$(version_h) headers headers_% archheaders archscripts \
|
||||||
%asm-generic kernelversion %src-pkg dt_binding_check \
|
%asm-generic kernelversion %src-pkg dt_binding_check \
|
||||||
outputmakefile rustavailable rustfmt rustfmtcheck \
|
outputmakefile rustavailable rustfmt rustfmtcheck
|
||||||
scripts_package
|
|
||||||
# Installation targets should not require compiler. Unfortunately, vdso_install
|
# Installation targets should not require compiler. Unfortunately, vdso_install
|
||||||
# is an exception where build artifacts may be updated. This must be fixed.
|
# is an exception where build artifacts may be updated. This must be fixed.
|
||||||
no-compiler-targets := $(no-dot-config-targets) install dtbs_install \
|
no-compiler-targets := $(no-dot-config-targets) install dtbs_install \
|
||||||
|
@ -1605,7 +1604,7 @@ MRPROPER_FILES += include/config include/generated \
|
||||||
certs/signing_key.pem \
|
certs/signing_key.pem \
|
||||||
certs/x509.genkey \
|
certs/x509.genkey \
|
||||||
vmlinux-gdb.py \
|
vmlinux-gdb.py \
|
||||||
*.spec \
|
*.spec rpmbuild \
|
||||||
rust/libmacros.so
|
rust/libmacros.so
|
||||||
|
|
||||||
# clean - Delete most, but leave enough to build external modules
|
# clean - Delete most, but leave enough to build external modules
|
||||||
|
@ -1656,10 +1655,6 @@ distclean: mrproper
|
||||||
%pkg: include/config/kernel.release FORCE
|
%pkg: include/config/kernel.release FORCE
|
||||||
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.package $@
|
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.package $@
|
||||||
|
|
||||||
PHONY += scripts_package
|
|
||||||
scripts_package: scripts_basic
|
|
||||||
$(Q)$(MAKE) $(build)=scripts scripts/list-gitignored
|
|
||||||
|
|
||||||
# Brief documentation of the typical targets used
|
# Brief documentation of the typical targets used
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -1886,6 +1881,8 @@ endif
|
||||||
|
|
||||||
else # KBUILD_EXTMOD
|
else # KBUILD_EXTMOD
|
||||||
|
|
||||||
|
filechk_kernel.release = echo $(KERNELRELEASE)
|
||||||
|
|
||||||
###
|
###
|
||||||
# External module support.
|
# External module support.
|
||||||
# When building external modules the kernel used as basis is considered
|
# When building external modules the kernel used as basis is considered
|
||||||
|
|
|
@ -23,7 +23,7 @@ alpha_read_fp_reg (unsigned long reg)
|
||||||
|
|
||||||
if (unlikely(reg >= 32))
|
if (unlikely(reg >= 32))
|
||||||
return 0;
|
return 0;
|
||||||
preempt_enable();
|
preempt_disable();
|
||||||
if (current_thread_info()->status & TS_SAVED_FP)
|
if (current_thread_info()->status & TS_SAVED_FP)
|
||||||
val = current_thread_info()->fp[reg];
|
val = current_thread_info()->fp[reg];
|
||||||
else switch (reg) {
|
else switch (reg) {
|
||||||
|
@ -133,7 +133,7 @@ alpha_read_fp_reg_s (unsigned long reg)
|
||||||
if (unlikely(reg >= 32))
|
if (unlikely(reg >= 32))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
preempt_enable();
|
preempt_disable();
|
||||||
if (current_thread_info()->status & TS_SAVED_FP) {
|
if (current_thread_info()->status & TS_SAVED_FP) {
|
||||||
LDT(0, current_thread_info()->fp[reg]);
|
LDT(0, current_thread_info()->fp[reg]);
|
||||||
STS(0, val);
|
STS(0, val);
|
||||||
|
|
|
@ -311,6 +311,7 @@
|
||||||
|
|
||||||
&usbotg1 {
|
&usbotg1 {
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&pinctrl_usbotg1>;
|
||||||
disable-over-current;
|
disable-over-current;
|
||||||
srp-disable;
|
srp-disable;
|
||||||
hnp-disable;
|
hnp-disable;
|
||||||
|
|
|
@ -321,6 +321,7 @@
|
||||||
|
|
||||||
&usbotg1 {
|
&usbotg1 {
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&pinctrl_usbotg1>;
|
||||||
disable-over-current;
|
disable-over-current;
|
||||||
srp-disable;
|
srp-disable;
|
||||||
hnp-disable;
|
hnp-disable;
|
||||||
|
|
|
@ -625,6 +625,7 @@
|
||||||
|
|
||||||
&usbotg1 {
|
&usbotg1 {
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&pinctrl_usbotg1>;
|
||||||
disable-over-current;
|
disable-over-current;
|
||||||
srp-disable;
|
srp-disable;
|
||||||
hnp-disable;
|
hnp-disable;
|
||||||
|
|
|
@ -27,6 +27,16 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
reserved-memory {
|
reserved-memory {
|
||||||
|
sbl_region: sbl@2f00000 {
|
||||||
|
reg = <0x02f00000 0x100000>;
|
||||||
|
no-map;
|
||||||
|
};
|
||||||
|
|
||||||
|
external_image_region: external-image@3100000 {
|
||||||
|
reg = <0x03100000 0x200000>;
|
||||||
|
no-map;
|
||||||
|
};
|
||||||
|
|
||||||
adsp_region: adsp@3300000 {
|
adsp_region: adsp@3300000 {
|
||||||
reg = <0x03300000 0x1400000>;
|
reg = <0x03300000 0x1400000>;
|
||||||
no-map;
|
no-map;
|
||||||
|
|
|
@ -116,7 +116,7 @@ __copy_to_user_memcpy(void __user *to, const void *from, unsigned long n)
|
||||||
tocopy = n;
|
tocopy = n;
|
||||||
|
|
||||||
ua_flags = uaccess_save_and_enable();
|
ua_flags = uaccess_save_and_enable();
|
||||||
memcpy((void *)to, from, tocopy);
|
__memcpy((void *)to, from, tocopy);
|
||||||
uaccess_restore(ua_flags);
|
uaccess_restore(ua_flags);
|
||||||
to += tocopy;
|
to += tocopy;
|
||||||
from += tocopy;
|
from += tocopy;
|
||||||
|
@ -178,7 +178,7 @@ __clear_user_memset(void __user *addr, unsigned long n)
|
||||||
tocopy = n;
|
tocopy = n;
|
||||||
|
|
||||||
ua_flags = uaccess_save_and_enable();
|
ua_flags = uaccess_save_and_enable();
|
||||||
memset((void *)addr, 0, tocopy);
|
__memset((void *)addr, 0, tocopy);
|
||||||
uaccess_restore(ua_flags);
|
uaccess_restore(ua_flags);
|
||||||
addr += tocopy;
|
addr += tocopy;
|
||||||
n -= tocopy;
|
n -= tocopy;
|
||||||
|
|
|
@ -56,14 +56,10 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
&enetc_port2 {
|
&enetc_port2 {
|
||||||
nvmem-cells = <&base_mac_address 2>;
|
|
||||||
nvmem-cell-names = "mac-address";
|
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
||||||
&enetc_port3 {
|
&enetc_port3 {
|
||||||
nvmem-cells = <&base_mac_address 3>;
|
|
||||||
nvmem-cell-names = "mac-address";
|
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -84,8 +80,6 @@
|
||||||
managed = "in-band-status";
|
managed = "in-band-status";
|
||||||
phy-handle = <&qsgmii_phy0>;
|
phy-handle = <&qsgmii_phy0>;
|
||||||
phy-mode = "qsgmii";
|
phy-mode = "qsgmii";
|
||||||
nvmem-cells = <&base_mac_address 4>;
|
|
||||||
nvmem-cell-names = "mac-address";
|
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -94,8 +88,6 @@
|
||||||
managed = "in-band-status";
|
managed = "in-band-status";
|
||||||
phy-handle = <&qsgmii_phy1>;
|
phy-handle = <&qsgmii_phy1>;
|
||||||
phy-mode = "qsgmii";
|
phy-mode = "qsgmii";
|
||||||
nvmem-cells = <&base_mac_address 5>;
|
|
||||||
nvmem-cell-names = "mac-address";
|
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -104,8 +96,6 @@
|
||||||
managed = "in-band-status";
|
managed = "in-band-status";
|
||||||
phy-handle = <&qsgmii_phy2>;
|
phy-handle = <&qsgmii_phy2>;
|
||||||
phy-mode = "qsgmii";
|
phy-mode = "qsgmii";
|
||||||
nvmem-cells = <&base_mac_address 6>;
|
|
||||||
nvmem-cell-names = "mac-address";
|
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -114,8 +104,6 @@
|
||||||
managed = "in-band-status";
|
managed = "in-band-status";
|
||||||
phy-handle = <&qsgmii_phy3>;
|
phy-handle = <&qsgmii_phy3>;
|
||||||
phy-mode = "qsgmii";
|
phy-mode = "qsgmii";
|
||||||
nvmem-cells = <&base_mac_address 7>;
|
|
||||||
nvmem-cell-names = "mac-address";
|
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -55,7 +55,5 @@
|
||||||
&enetc_port1 {
|
&enetc_port1 {
|
||||||
phy-handle = <&phy0>;
|
phy-handle = <&phy0>;
|
||||||
phy-mode = "rgmii-id";
|
phy-mode = "rgmii-id";
|
||||||
nvmem-cells = <&base_mac_address 0>;
|
|
||||||
nvmem-cell-names = "mac-address";
|
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
|
@ -36,14 +36,10 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
&enetc_port2 {
|
&enetc_port2 {
|
||||||
nvmem-cells = <&base_mac_address 2>;
|
|
||||||
nvmem-cell-names = "mac-address";
|
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
||||||
&enetc_port3 {
|
&enetc_port3 {
|
||||||
nvmem-cells = <&base_mac_address 3>;
|
|
||||||
nvmem-cell-names = "mac-address";
|
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -56,8 +52,6 @@
|
||||||
managed = "in-band-status";
|
managed = "in-band-status";
|
||||||
phy-handle = <&phy0>;
|
phy-handle = <&phy0>;
|
||||||
phy-mode = "sgmii";
|
phy-mode = "sgmii";
|
||||||
nvmem-cells = <&base_mac_address 0>;
|
|
||||||
nvmem-cell-names = "mac-address";
|
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -66,8 +60,6 @@
|
||||||
managed = "in-band-status";
|
managed = "in-band-status";
|
||||||
phy-handle = <&phy1>;
|
phy-handle = <&phy1>;
|
||||||
phy-mode = "sgmii";
|
phy-mode = "sgmii";
|
||||||
nvmem-cells = <&base_mac_address 1>;
|
|
||||||
nvmem-cell-names = "mac-address";
|
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -43,7 +43,5 @@
|
||||||
&enetc_port1 {
|
&enetc_port1 {
|
||||||
phy-handle = <&phy1>;
|
phy-handle = <&phy1>;
|
||||||
phy-mode = "rgmii-id";
|
phy-mode = "rgmii-id";
|
||||||
nvmem-cells = <&base_mac_address 1>;
|
|
||||||
nvmem-cell-names = "mac-address";
|
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
|
@ -92,8 +92,6 @@
|
||||||
phy-handle = <&phy0>;
|
phy-handle = <&phy0>;
|
||||||
phy-mode = "sgmii";
|
phy-mode = "sgmii";
|
||||||
managed = "in-band-status";
|
managed = "in-band-status";
|
||||||
nvmem-cells = <&base_mac_address 0>;
|
|
||||||
nvmem-cell-names = "mac-address";
|
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -156,21 +154,6 @@
|
||||||
label = "bootloader environment";
|
label = "bootloader environment";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
otp-1 {
|
|
||||||
compatible = "user-otp";
|
|
||||||
|
|
||||||
nvmem-layout {
|
|
||||||
compatible = "kontron,sl28-vpd";
|
|
||||||
|
|
||||||
serial_number: serial-number {
|
|
||||||
};
|
|
||||||
|
|
||||||
base_mac_address: base-mac-address {
|
|
||||||
#nvmem-cell-cells = <1>;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -117,7 +117,7 @@ lsio_subsys: bus@5d000000 {
|
||||||
interrupts = <GIC_SPI 92 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 92 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&clk IMX_SC_R_FSPI_0 IMX_SC_PM_CLK_PER>,
|
clocks = <&clk IMX_SC_R_FSPI_0 IMX_SC_PM_CLK_PER>,
|
||||||
<&clk IMX_SC_R_FSPI_0 IMX_SC_PM_CLK_PER>;
|
<&clk IMX_SC_R_FSPI_0 IMX_SC_PM_CLK_PER>;
|
||||||
clock-names = "fspi", "fspi_en";
|
clock-names = "fspi_en", "fspi";
|
||||||
power-domains = <&pd IMX_SC_R_FSPI_0>;
|
power-domains = <&pd IMX_SC_R_FSPI_0>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
|
@ -121,8 +121,6 @@
|
||||||
phy-handle = <ðphy0>;
|
phy-handle = <ðphy0>;
|
||||||
nvmem-cells = <&fec_mac1>;
|
nvmem-cells = <&fec_mac1>;
|
||||||
nvmem-cell-names = "mac-address";
|
nvmem-cell-names = "mac-address";
|
||||||
snps,reset-gpios = <&pca6416_1 2 GPIO_ACTIVE_LOW>;
|
|
||||||
snps,reset-delays-us = <10 20 200000>;
|
|
||||||
status = "okay";
|
status = "okay";
|
||||||
|
|
||||||
mdio {
|
mdio {
|
||||||
|
@ -136,6 +134,9 @@
|
||||||
eee-broken-1000t;
|
eee-broken-1000t;
|
||||||
qca,disable-smarteee;
|
qca,disable-smarteee;
|
||||||
qca,disable-hibernation-mode;
|
qca,disable-hibernation-mode;
|
||||||
|
reset-gpios = <&pca6416_1 2 GPIO_ACTIVE_LOW>;
|
||||||
|
reset-assert-us = <20>;
|
||||||
|
reset-deassert-us = <200000>;
|
||||||
vddio-supply = <&vddio0>;
|
vddio-supply = <&vddio0>;
|
||||||
|
|
||||||
vddio0: vddio-regulator {
|
vddio0: vddio-regulator {
|
||||||
|
|
|
@ -247,7 +247,7 @@
|
||||||
compatible = "wlf,wm8960";
|
compatible = "wlf,wm8960";
|
||||||
reg = <0x1a>;
|
reg = <0x1a>;
|
||||||
clocks = <&clk IMX8MM_CLK_SAI1_ROOT>;
|
clocks = <&clk IMX8MM_CLK_SAI1_ROOT>;
|
||||||
clock-names = "mclk1";
|
clock-names = "mclk";
|
||||||
wlf,shared-lrclk;
|
wlf,shared-lrclk;
|
||||||
#sound-dai-cells = <0>;
|
#sound-dai-cells = <0>;
|
||||||
};
|
};
|
||||||
|
|
|
@ -296,6 +296,7 @@
|
||||||
sai2: sai@30020000 {
|
sai2: sai@30020000 {
|
||||||
compatible = "fsl,imx8mn-sai", "fsl,imx8mq-sai";
|
compatible = "fsl,imx8mn-sai", "fsl,imx8mq-sai";
|
||||||
reg = <0x30020000 0x10000>;
|
reg = <0x30020000 0x10000>;
|
||||||
|
#sound-dai-cells = <0>;
|
||||||
interrupts = <GIC_SPI 96 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 96 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&clk IMX8MN_CLK_SAI2_IPG>,
|
clocks = <&clk IMX8MN_CLK_SAI2_IPG>,
|
||||||
<&clk IMX8MN_CLK_DUMMY>,
|
<&clk IMX8MN_CLK_DUMMY>,
|
||||||
|
@ -310,6 +311,7 @@
|
||||||
sai3: sai@30030000 {
|
sai3: sai@30030000 {
|
||||||
compatible = "fsl,imx8mn-sai", "fsl,imx8mq-sai";
|
compatible = "fsl,imx8mn-sai", "fsl,imx8mq-sai";
|
||||||
reg = <0x30030000 0x10000>;
|
reg = <0x30030000 0x10000>;
|
||||||
|
#sound-dai-cells = <0>;
|
||||||
interrupts = <GIC_SPI 50 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 50 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&clk IMX8MN_CLK_SAI3_IPG>,
|
clocks = <&clk IMX8MN_CLK_SAI3_IPG>,
|
||||||
<&clk IMX8MN_CLK_DUMMY>,
|
<&clk IMX8MN_CLK_DUMMY>,
|
||||||
|
@ -324,6 +326,7 @@
|
||||||
sai5: sai@30050000 {
|
sai5: sai@30050000 {
|
||||||
compatible = "fsl,imx8mn-sai", "fsl,imx8mq-sai";
|
compatible = "fsl,imx8mn-sai", "fsl,imx8mq-sai";
|
||||||
reg = <0x30050000 0x10000>;
|
reg = <0x30050000 0x10000>;
|
||||||
|
#sound-dai-cells = <0>;
|
||||||
interrupts = <GIC_SPI 90 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 90 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&clk IMX8MN_CLK_SAI5_IPG>,
|
clocks = <&clk IMX8MN_CLK_SAI5_IPG>,
|
||||||
<&clk IMX8MN_CLK_DUMMY>,
|
<&clk IMX8MN_CLK_DUMMY>,
|
||||||
|
@ -340,6 +343,7 @@
|
||||||
sai6: sai@30060000 {
|
sai6: sai@30060000 {
|
||||||
compatible = "fsl,imx8mn-sai", "fsl,imx8mq-sai";
|
compatible = "fsl,imx8mn-sai", "fsl,imx8mq-sai";
|
||||||
reg = <0x30060000 0x10000>;
|
reg = <0x30060000 0x10000>;
|
||||||
|
#sound-dai-cells = <0>;
|
||||||
interrupts = <GIC_SPI 90 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 90 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&clk IMX8MN_CLK_SAI6_IPG>,
|
clocks = <&clk IMX8MN_CLK_SAI6_IPG>,
|
||||||
<&clk IMX8MN_CLK_DUMMY>,
|
<&clk IMX8MN_CLK_DUMMY>,
|
||||||
|
@ -397,6 +401,7 @@
|
||||||
sai7: sai@300b0000 {
|
sai7: sai@300b0000 {
|
||||||
compatible = "fsl,imx8mn-sai", "fsl,imx8mq-sai";
|
compatible = "fsl,imx8mn-sai", "fsl,imx8mq-sai";
|
||||||
reg = <0x300b0000 0x10000>;
|
reg = <0x300b0000 0x10000>;
|
||||||
|
#sound-dai-cells = <0>;
|
||||||
interrupts = <GIC_SPI 111 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 111 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&clk IMX8MN_CLK_SAI7_IPG>,
|
clocks = <&clk IMX8MN_CLK_SAI7_IPG>,
|
||||||
<&clk IMX8MN_CLK_DUMMY>,
|
<&clk IMX8MN_CLK_DUMMY>,
|
||||||
|
|
|
@ -1131,8 +1131,8 @@
|
||||||
reg = <0x32e90000 0x238>;
|
reg = <0x32e90000 0x238>;
|
||||||
interrupts = <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&clk IMX8MP_CLK_MEDIA_DISP2_PIX_ROOT>,
|
clocks = <&clk IMX8MP_CLK_MEDIA_DISP2_PIX_ROOT>,
|
||||||
<&clk IMX8MP_CLK_MEDIA_AXI_ROOT>,
|
<&clk IMX8MP_CLK_MEDIA_APB_ROOT>,
|
||||||
<&clk IMX8MP_CLK_MEDIA_APB_ROOT>;
|
<&clk IMX8MP_CLK_MEDIA_AXI_ROOT>;
|
||||||
clock-names = "pix", "axi", "disp_axi";
|
clock-names = "pix", "axi", "disp_axi";
|
||||||
assigned-clocks = <&clk IMX8MP_CLK_MEDIA_DISP2_PIX>,
|
assigned-clocks = <&clk IMX8MP_CLK_MEDIA_DISP2_PIX>,
|
||||||
<&clk IMX8MP_VIDEO_PLL1>;
|
<&clk IMX8MP_VIDEO_PLL1>;
|
||||||
|
|
|
@ -164,6 +164,8 @@
|
||||||
lpi2c1: i2c@44340000 {
|
lpi2c1: i2c@44340000 {
|
||||||
compatible = "fsl,imx93-lpi2c", "fsl,imx7ulp-lpi2c";
|
compatible = "fsl,imx93-lpi2c", "fsl,imx7ulp-lpi2c";
|
||||||
reg = <0x44340000 0x10000>;
|
reg = <0x44340000 0x10000>;
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
interrupts = <GIC_SPI 13 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 13 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&clk IMX93_CLK_LPI2C1_GATE>,
|
clocks = <&clk IMX93_CLK_LPI2C1_GATE>,
|
||||||
<&clk IMX93_CLK_BUS_AON>;
|
<&clk IMX93_CLK_BUS_AON>;
|
||||||
|
@ -174,6 +176,8 @@
|
||||||
lpi2c2: i2c@44350000 {
|
lpi2c2: i2c@44350000 {
|
||||||
compatible = "fsl,imx93-lpi2c", "fsl,imx7ulp-lpi2c";
|
compatible = "fsl,imx93-lpi2c", "fsl,imx7ulp-lpi2c";
|
||||||
reg = <0x44350000 0x10000>;
|
reg = <0x44350000 0x10000>;
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
interrupts = <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&clk IMX93_CLK_LPI2C2_GATE>,
|
clocks = <&clk IMX93_CLK_LPI2C2_GATE>,
|
||||||
<&clk IMX93_CLK_BUS_AON>;
|
<&clk IMX93_CLK_BUS_AON>;
|
||||||
|
@ -343,6 +347,8 @@
|
||||||
lpi2c3: i2c@42530000 {
|
lpi2c3: i2c@42530000 {
|
||||||
compatible = "fsl,imx93-lpi2c", "fsl,imx7ulp-lpi2c";
|
compatible = "fsl,imx93-lpi2c", "fsl,imx7ulp-lpi2c";
|
||||||
reg = <0x42530000 0x10000>;
|
reg = <0x42530000 0x10000>;
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
interrupts = <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&clk IMX93_CLK_LPI2C3_GATE>,
|
clocks = <&clk IMX93_CLK_LPI2C3_GATE>,
|
||||||
<&clk IMX93_CLK_BUS_WAKEUP>;
|
<&clk IMX93_CLK_BUS_WAKEUP>;
|
||||||
|
@ -353,6 +359,8 @@
|
||||||
lpi2c4: i2c@42540000 {
|
lpi2c4: i2c@42540000 {
|
||||||
compatible = "fsl,imx93-lpi2c", "fsl,imx7ulp-lpi2c";
|
compatible = "fsl,imx93-lpi2c", "fsl,imx7ulp-lpi2c";
|
||||||
reg = <0x42540000 0x10000>;
|
reg = <0x42540000 0x10000>;
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
interrupts = <GIC_SPI 63 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 63 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&clk IMX93_CLK_LPI2C4_GATE>,
|
clocks = <&clk IMX93_CLK_LPI2C4_GATE>,
|
||||||
<&clk IMX93_CLK_BUS_WAKEUP>;
|
<&clk IMX93_CLK_BUS_WAKEUP>;
|
||||||
|
@ -455,6 +463,8 @@
|
||||||
lpi2c5: i2c@426b0000 {
|
lpi2c5: i2c@426b0000 {
|
||||||
compatible = "fsl,imx93-lpi2c", "fsl,imx7ulp-lpi2c";
|
compatible = "fsl,imx93-lpi2c", "fsl,imx7ulp-lpi2c";
|
||||||
reg = <0x426b0000 0x10000>;
|
reg = <0x426b0000 0x10000>;
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
interrupts = <GIC_SPI 195 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 195 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&clk IMX93_CLK_LPI2C5_GATE>,
|
clocks = <&clk IMX93_CLK_LPI2C5_GATE>,
|
||||||
<&clk IMX93_CLK_BUS_WAKEUP>;
|
<&clk IMX93_CLK_BUS_WAKEUP>;
|
||||||
|
@ -465,6 +475,8 @@
|
||||||
lpi2c6: i2c@426c0000 {
|
lpi2c6: i2c@426c0000 {
|
||||||
compatible = "fsl,imx93-lpi2c", "fsl,imx7ulp-lpi2c";
|
compatible = "fsl,imx93-lpi2c", "fsl,imx7ulp-lpi2c";
|
||||||
reg = <0x426c0000 0x10000>;
|
reg = <0x426c0000 0x10000>;
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
interrupts = <GIC_SPI 196 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 196 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&clk IMX93_CLK_LPI2C6_GATE>,
|
clocks = <&clk IMX93_CLK_LPI2C6_GATE>,
|
||||||
<&clk IMX93_CLK_BUS_WAKEUP>;
|
<&clk IMX93_CLK_BUS_WAKEUP>;
|
||||||
|
@ -475,6 +487,8 @@
|
||||||
lpi2c7: i2c@426d0000 {
|
lpi2c7: i2c@426d0000 {
|
||||||
compatible = "fsl,imx93-lpi2c", "fsl,imx7ulp-lpi2c";
|
compatible = "fsl,imx93-lpi2c", "fsl,imx7ulp-lpi2c";
|
||||||
reg = <0x426d0000 0x10000>;
|
reg = <0x426d0000 0x10000>;
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
interrupts = <GIC_SPI 197 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 197 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&clk IMX93_CLK_LPI2C7_GATE>,
|
clocks = <&clk IMX93_CLK_LPI2C7_GATE>,
|
||||||
<&clk IMX93_CLK_BUS_WAKEUP>;
|
<&clk IMX93_CLK_BUS_WAKEUP>;
|
||||||
|
@ -485,6 +499,8 @@
|
||||||
lpi2c8: i2c@426e0000 {
|
lpi2c8: i2c@426e0000 {
|
||||||
compatible = "fsl,imx93-lpi2c", "fsl,imx7ulp-lpi2c";
|
compatible = "fsl,imx93-lpi2c", "fsl,imx7ulp-lpi2c";
|
||||||
reg = <0x426e0000 0x10000>;
|
reg = <0x426e0000 0x10000>;
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
interrupts = <GIC_SPI 198 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 198 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&clk IMX93_CLK_LPI2C8_GATE>,
|
clocks = <&clk IMX93_CLK_LPI2C8_GATE>,
|
||||||
<&clk IMX93_CLK_BUS_WAKEUP>;
|
<&clk IMX93_CLK_BUS_WAKEUP>;
|
||||||
|
@ -580,9 +596,9 @@
|
||||||
eqos: ethernet@428a0000 {
|
eqos: ethernet@428a0000 {
|
||||||
compatible = "nxp,imx93-dwmac-eqos", "snps,dwmac-5.10a";
|
compatible = "nxp,imx93-dwmac-eqos", "snps,dwmac-5.10a";
|
||||||
reg = <0x428a0000 0x10000>;
|
reg = <0x428a0000 0x10000>;
|
||||||
interrupts = <GIC_SPI 183 IRQ_TYPE_LEVEL_HIGH>,
|
interrupts = <GIC_SPI 184 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
<GIC_SPI 184 IRQ_TYPE_LEVEL_HIGH>;
|
<GIC_SPI 183 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
interrupt-names = "eth_wake_irq", "macirq";
|
interrupt-names = "macirq", "eth_wake_irq";
|
||||||
clocks = <&clk IMX93_CLK_ENET_QOS_GATE>,
|
clocks = <&clk IMX93_CLK_ENET_QOS_GATE>,
|
||||||
<&clk IMX93_CLK_ENET_QOS_GATE>,
|
<&clk IMX93_CLK_ENET_QOS_GATE>,
|
||||||
<&clk IMX93_CLK_ENET_TIMER2>,
|
<&clk IMX93_CLK_ENET_TIMER2>,
|
||||||
|
@ -595,7 +611,7 @@
|
||||||
<&clk IMX93_CLK_SYS_PLL_PFD0_DIV2>;
|
<&clk IMX93_CLK_SYS_PLL_PFD0_DIV2>;
|
||||||
assigned-clock-rates = <100000000>, <250000000>;
|
assigned-clock-rates = <100000000>, <250000000>;
|
||||||
intf_mode = <&wakeupmix_gpr 0x28>;
|
intf_mode = <&wakeupmix_gpr 0x28>;
|
||||||
clk_csr = <0>;
|
snps,clk-csr = <0>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
|
|
||||||
#address-cells = <2>;
|
#address-cells = <2>;
|
||||||
#size-cells = <2>;
|
#size-cells = <2>;
|
||||||
ranges = <0x0 0x0 0x0 0x0 0x0 0x40000000>;
|
ranges = <0x0 0x0 0x0 0x0 0x100 0x0>;
|
||||||
|
|
||||||
apbmisc: misc@100000 {
|
apbmisc: misc@100000 {
|
||||||
compatible = "nvidia,tegra194-misc";
|
compatible = "nvidia,tegra194-misc";
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
|
|
||||||
#address-cells = <2>;
|
#address-cells = <2>;
|
||||||
#size-cells = <2>;
|
#size-cells = <2>;
|
||||||
ranges = <0x0 0x0 0x0 0x0 0x0 0x40000000>;
|
ranges = <0x0 0x0 0x0 0x0 0x100 0x0>;
|
||||||
|
|
||||||
misc@100000 {
|
misc@100000 {
|
||||||
compatible = "nvidia,tegra234-misc";
|
compatible = "nvidia,tegra234-misc";
|
||||||
|
|
|
@ -33,7 +33,3 @@
|
||||||
&gpio_leds_default {
|
&gpio_leds_default {
|
||||||
pins = "gpio81", "gpio82", "gpio83";
|
pins = "gpio81", "gpio82", "gpio83";
|
||||||
};
|
};
|
||||||
|
|
||||||
&sim_ctrl_default {
|
|
||||||
pins = "gpio1", "gpio2";
|
|
||||||
};
|
|
||||||
|
|
|
@ -25,6 +25,11 @@
|
||||||
gpios = <&msmgpio 20 GPIO_ACTIVE_HIGH>;
|
gpios = <&msmgpio 20 GPIO_ACTIVE_HIGH>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
&mpss {
|
||||||
|
pinctrl-0 = <&sim_ctrl_default>;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
};
|
||||||
|
|
||||||
&button_default {
|
&button_default {
|
||||||
pins = "gpio37";
|
pins = "gpio37";
|
||||||
bias-pull-down;
|
bias-pull-down;
|
||||||
|
@ -34,6 +39,25 @@
|
||||||
pins = "gpio20", "gpio21", "gpio22";
|
pins = "gpio20", "gpio21", "gpio22";
|
||||||
};
|
};
|
||||||
|
|
||||||
&sim_ctrl_default {
|
/* This selects the external SIM card slot by default */
|
||||||
pins = "gpio1", "gpio2";
|
&msmgpio {
|
||||||
|
sim_ctrl_default: sim-ctrl-default-state {
|
||||||
|
esim-sel-pins {
|
||||||
|
pins = "gpio0", "gpio3";
|
||||||
|
bias-disable;
|
||||||
|
output-low;
|
||||||
|
};
|
||||||
|
|
||||||
|
sim-en-pins {
|
||||||
|
pins = "gpio1";
|
||||||
|
bias-disable;
|
||||||
|
output-low;
|
||||||
|
};
|
||||||
|
|
||||||
|
sim-sel-pins {
|
||||||
|
pins = "gpio2";
|
||||||
|
bias-disable;
|
||||||
|
output-high;
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -92,9 +92,6 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
&mpss {
|
&mpss {
|
||||||
pinctrl-0 = <&sim_ctrl_default>;
|
|
||||||
pinctrl-names = "default";
|
|
||||||
|
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -240,11 +237,4 @@
|
||||||
drive-strength = <2>;
|
drive-strength = <2>;
|
||||||
bias-disable;
|
bias-disable;
|
||||||
};
|
};
|
||||||
|
|
||||||
sim_ctrl_default: sim-ctrl-default-state {
|
|
||||||
function = "gpio";
|
|
||||||
drive-strength = <2>;
|
|
||||||
bias-disable;
|
|
||||||
output-low;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -241,7 +241,7 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
&remoteproc_nsp0 {
|
&remoteproc_nsp0 {
|
||||||
firmware-name = "qcom/sa8540p/cdsp.mbn";
|
firmware-name = "qcom/sa8540p/cdsp0.mbn";
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -2131,6 +2131,8 @@
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
pinctrl-0 = <&pcie1_clkreq_n>;
|
pinctrl-0 = <&pcie1_clkreq_n>;
|
||||||
|
|
||||||
|
dma-coherent;
|
||||||
|
|
||||||
iommus = <&apps_smmu 0x1c80 0x1>;
|
iommus = <&apps_smmu 0x1c80 0x1>;
|
||||||
|
|
||||||
iommu-map = <0x0 &apps_smmu 0x1c80 0x1>,
|
iommu-map = <0x0 &apps_smmu 0x1c80 0x1>,
|
||||||
|
|
|
@ -370,6 +370,7 @@
|
||||||
regulator-min-microvolt = <1800000>;
|
regulator-min-microvolt = <1800000>;
|
||||||
regulator-max-microvolt = <1800000>;
|
regulator-max-microvolt = <1800000>;
|
||||||
regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
|
regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
|
||||||
|
regulator-always-on;
|
||||||
};
|
};
|
||||||
|
|
||||||
vreg_s11b: smps11 {
|
vreg_s11b: smps11 {
|
||||||
|
@ -377,6 +378,7 @@
|
||||||
regulator-min-microvolt = <1272000>;
|
regulator-min-microvolt = <1272000>;
|
||||||
regulator-max-microvolt = <1272000>;
|
regulator-max-microvolt = <1272000>;
|
||||||
regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
|
regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
|
||||||
|
regulator-always-on;
|
||||||
};
|
};
|
||||||
|
|
||||||
vreg_s12b: smps12 {
|
vreg_s12b: smps12 {
|
||||||
|
@ -384,6 +386,7 @@
|
||||||
regulator-min-microvolt = <984000>;
|
regulator-min-microvolt = <984000>;
|
||||||
regulator-max-microvolt = <984000>;
|
regulator-max-microvolt = <984000>;
|
||||||
regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
|
regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
|
||||||
|
regulator-always-on;
|
||||||
};
|
};
|
||||||
|
|
||||||
vreg_l3b: ldo3 {
|
vreg_l3b: ldo3 {
|
||||||
|
@ -441,6 +444,7 @@
|
||||||
regulator-min-microvolt = <3008000>;
|
regulator-min-microvolt = <3008000>;
|
||||||
regulator-max-microvolt = <3960000>;
|
regulator-max-microvolt = <3960000>;
|
||||||
regulator-initial-mode = <RPMH_REGULATOR_MODE_AUTO>;
|
regulator-initial-mode = <RPMH_REGULATOR_MODE_AUTO>;
|
||||||
|
regulator-always-on;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -772,75 +776,88 @@
|
||||||
pmic-die-temp@3 {
|
pmic-die-temp@3 {
|
||||||
reg = <PMK8350_ADC7_DIE_TEMP>;
|
reg = <PMK8350_ADC7_DIE_TEMP>;
|
||||||
qcom,pre-scaling = <1 1>;
|
qcom,pre-scaling = <1 1>;
|
||||||
|
label = "pmk8350_die_temp";
|
||||||
};
|
};
|
||||||
|
|
||||||
xo-therm@44 {
|
xo-therm@44 {
|
||||||
reg = <PMK8350_ADC7_AMUX_THM1_100K_PU>;
|
reg = <PMK8350_ADC7_AMUX_THM1_100K_PU>;
|
||||||
qcom,hw-settle-time = <200>;
|
qcom,hw-settle-time = <200>;
|
||||||
qcom,ratiometric;
|
qcom,ratiometric;
|
||||||
|
label = "pmk8350_xo_therm";
|
||||||
};
|
};
|
||||||
|
|
||||||
pmic-die-temp@103 {
|
pmic-die-temp@103 {
|
||||||
reg = <PM8350_ADC7_DIE_TEMP(1)>;
|
reg = <PM8350_ADC7_DIE_TEMP(1)>;
|
||||||
qcom,pre-scaling = <1 1>;
|
qcom,pre-scaling = <1 1>;
|
||||||
|
label = "pmc8280_1_die_temp";
|
||||||
};
|
};
|
||||||
|
|
||||||
sys-therm@144 {
|
sys-therm@144 {
|
||||||
reg = <PM8350_ADC7_AMUX_THM1_100K_PU(1)>;
|
reg = <PM8350_ADC7_AMUX_THM1_100K_PU(1)>;
|
||||||
qcom,hw-settle-time = <200>;
|
qcom,hw-settle-time = <200>;
|
||||||
qcom,ratiometric;
|
qcom,ratiometric;
|
||||||
|
label = "sys_therm1";
|
||||||
};
|
};
|
||||||
|
|
||||||
sys-therm@145 {
|
sys-therm@145 {
|
||||||
reg = <PM8350_ADC7_AMUX_THM2_100K_PU(1)>;
|
reg = <PM8350_ADC7_AMUX_THM2_100K_PU(1)>;
|
||||||
qcom,hw-settle-time = <200>;
|
qcom,hw-settle-time = <200>;
|
||||||
qcom,ratiometric;
|
qcom,ratiometric;
|
||||||
|
label = "sys_therm2";
|
||||||
};
|
};
|
||||||
|
|
||||||
sys-therm@146 {
|
sys-therm@146 {
|
||||||
reg = <PM8350_ADC7_AMUX_THM3_100K_PU(1)>;
|
reg = <PM8350_ADC7_AMUX_THM3_100K_PU(1)>;
|
||||||
qcom,hw-settle-time = <200>;
|
qcom,hw-settle-time = <200>;
|
||||||
qcom,ratiometric;
|
qcom,ratiometric;
|
||||||
|
label = "sys_therm3";
|
||||||
};
|
};
|
||||||
|
|
||||||
sys-therm@147 {
|
sys-therm@147 {
|
||||||
reg = <PM8350_ADC7_AMUX_THM4_100K_PU(1)>;
|
reg = <PM8350_ADC7_AMUX_THM4_100K_PU(1)>;
|
||||||
qcom,hw-settle-time = <200>;
|
qcom,hw-settle-time = <200>;
|
||||||
qcom,ratiometric;
|
qcom,ratiometric;
|
||||||
|
label = "sys_therm4";
|
||||||
};
|
};
|
||||||
|
|
||||||
pmic-die-temp@303 {
|
pmic-die-temp@303 {
|
||||||
reg = <PM8350_ADC7_DIE_TEMP(3)>;
|
reg = <PM8350_ADC7_DIE_TEMP(3)>;
|
||||||
qcom,pre-scaling = <1 1>;
|
qcom,pre-scaling = <1 1>;
|
||||||
|
label = "pmc8280_2_die_temp";
|
||||||
};
|
};
|
||||||
|
|
||||||
sys-therm@344 {
|
sys-therm@344 {
|
||||||
reg = <PM8350_ADC7_AMUX_THM1_100K_PU(3)>;
|
reg = <PM8350_ADC7_AMUX_THM1_100K_PU(3)>;
|
||||||
qcom,hw-settle-time = <200>;
|
qcom,hw-settle-time = <200>;
|
||||||
qcom,ratiometric;
|
qcom,ratiometric;
|
||||||
|
label = "sys_therm5";
|
||||||
};
|
};
|
||||||
|
|
||||||
sys-therm@345 {
|
sys-therm@345 {
|
||||||
reg = <PM8350_ADC7_AMUX_THM2_100K_PU(3)>;
|
reg = <PM8350_ADC7_AMUX_THM2_100K_PU(3)>;
|
||||||
qcom,hw-settle-time = <200>;
|
qcom,hw-settle-time = <200>;
|
||||||
qcom,ratiometric;
|
qcom,ratiometric;
|
||||||
|
label = "sys_therm6";
|
||||||
};
|
};
|
||||||
|
|
||||||
sys-therm@346 {
|
sys-therm@346 {
|
||||||
reg = <PM8350_ADC7_AMUX_THM3_100K_PU(3)>;
|
reg = <PM8350_ADC7_AMUX_THM3_100K_PU(3)>;
|
||||||
qcom,hw-settle-time = <200>;
|
qcom,hw-settle-time = <200>;
|
||||||
qcom,ratiometric;
|
qcom,ratiometric;
|
||||||
|
label = "sys_therm7";
|
||||||
};
|
};
|
||||||
|
|
||||||
sys-therm@347 {
|
sys-therm@347 {
|
||||||
reg = <PM8350_ADC7_AMUX_THM4_100K_PU(3)>;
|
reg = <PM8350_ADC7_AMUX_THM4_100K_PU(3)>;
|
||||||
qcom,hw-settle-time = <200>;
|
qcom,hw-settle-time = <200>;
|
||||||
qcom,ratiometric;
|
qcom,ratiometric;
|
||||||
|
label = "sys_therm8";
|
||||||
};
|
};
|
||||||
|
|
||||||
pmic-die-temp@403 {
|
pmic-die-temp@403 {
|
||||||
reg = <PMR735A_ADC7_DIE_TEMP>;
|
reg = <PMR735A_ADC7_DIE_TEMP>;
|
||||||
qcom,pre-scaling = <1 1>;
|
qcom,pre-scaling = <1 1>;
|
||||||
|
label = "pmr735a_die_temp";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -884,9 +901,9 @@
|
||||||
"VA DMIC0", "MIC BIAS1",
|
"VA DMIC0", "MIC BIAS1",
|
||||||
"VA DMIC1", "MIC BIAS1",
|
"VA DMIC1", "MIC BIAS1",
|
||||||
"VA DMIC2", "MIC BIAS3",
|
"VA DMIC2", "MIC BIAS3",
|
||||||
"TX DMIC0", "MIC BIAS1",
|
"VA DMIC0", "VA MIC BIAS1",
|
||||||
"TX DMIC1", "MIC BIAS2",
|
"VA DMIC1", "VA MIC BIAS1",
|
||||||
"TX DMIC2", "MIC BIAS3",
|
"VA DMIC2", "VA MIC BIAS3",
|
||||||
"TX SWR_ADC1", "ADC2_OUTPUT";
|
"TX SWR_ADC1", "ADC2_OUTPUT";
|
||||||
|
|
||||||
wcd-playback-dai-link {
|
wcd-playback-dai-link {
|
||||||
|
@ -937,7 +954,7 @@
|
||||||
va-dai-link {
|
va-dai-link {
|
||||||
link-name = "VA Capture";
|
link-name = "VA Capture";
|
||||||
cpu {
|
cpu {
|
||||||
sound-dai = <&q6apmbedai TX_CODEC_DMA_TX_3>;
|
sound-dai = <&q6apmbedai VA_CODEC_DMA_TX_0>;
|
||||||
};
|
};
|
||||||
|
|
||||||
platform {
|
platform {
|
||||||
|
@ -1062,7 +1079,7 @@
|
||||||
|
|
||||||
vdd-micb-supply = <&vreg_s10b>;
|
vdd-micb-supply = <&vreg_s10b>;
|
||||||
|
|
||||||
qcom,dmic-sample-rate = <600000>;
|
qcom,dmic-sample-rate = <4800000>;
|
||||||
|
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
|
@ -2504,12 +2504,12 @@
|
||||||
qcom,ports-sinterval-low = /bits/ 8 <0x03 0x1f 0x1f 0x07 0x00>;
|
qcom,ports-sinterval-low = /bits/ 8 <0x03 0x1f 0x1f 0x07 0x00>;
|
||||||
qcom,ports-offset1 = /bits/ 8 <0x00 0x00 0x0B 0x01 0x00>;
|
qcom,ports-offset1 = /bits/ 8 <0x00 0x00 0x0B 0x01 0x00>;
|
||||||
qcom,ports-offset2 = /bits/ 8 <0x00 0x00 0x0B 0x00 0x00>;
|
qcom,ports-offset2 = /bits/ 8 <0x00 0x00 0x0B 0x00 0x00>;
|
||||||
qcom,ports-hstart = /bits/ 8 <0xff 0x03 0xff 0xff 0xff>;
|
qcom,ports-hstart = /bits/ 8 <0xff 0x03 0x00 0xff 0xff>;
|
||||||
qcom,ports-hstop = /bits/ 8 <0xff 0x06 0xff 0xff 0xff>;
|
qcom,ports-hstop = /bits/ 8 <0xff 0x06 0x0f 0xff 0xff>;
|
||||||
qcom,ports-word-length = /bits/ 8 <0x01 0x07 0x04 0xff 0xff>;
|
qcom,ports-word-length = /bits/ 8 <0x01 0x07 0x04 0xff 0xff>;
|
||||||
qcom,ports-block-pack-mode = /bits/ 8 <0xff 0x00 0x01 0xff 0xff>;
|
qcom,ports-block-pack-mode = /bits/ 8 <0xff 0xff 0x01 0xff 0xff>;
|
||||||
qcom,ports-lane-control = /bits/ 8 <0x01 0x00 0x00 0x00 0x00>;
|
qcom,ports-lane-control = /bits/ 8 <0x01 0x00 0x00 0x00 0x00>;
|
||||||
qcom,ports-block-group-count = /bits/ 8 <0xff 0xff 0xff 0xff 0x00>;
|
qcom,ports-block-group-count = /bits/ 8 <0xff 0xff 0xff 0xff 0xff>;
|
||||||
|
|
||||||
#sound-dai-cells = <1>;
|
#sound-dai-cells = <1>;
|
||||||
#address-cells = <2>;
|
#address-cells = <2>;
|
||||||
|
@ -2600,7 +2600,7 @@
|
||||||
<&intc GIC_SPI 520 IRQ_TYPE_LEVEL_HIGH>;
|
<&intc GIC_SPI 520 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
interrupt-names = "core", "wake";
|
interrupt-names = "core", "wake";
|
||||||
|
|
||||||
clocks = <&vamacro>;
|
clocks = <&txmacro>;
|
||||||
clock-names = "iface";
|
clock-names = "iface";
|
||||||
label = "TX";
|
label = "TX";
|
||||||
#sound-dai-cells = <1>;
|
#sound-dai-cells = <1>;
|
||||||
|
@ -2609,15 +2609,15 @@
|
||||||
|
|
||||||
qcom,din-ports = <4>;
|
qcom,din-ports = <4>;
|
||||||
qcom,dout-ports = <0>;
|
qcom,dout-ports = <0>;
|
||||||
qcom,ports-sinterval-low = /bits/ 8 <0x01 0x03 0x03 0x03>;
|
qcom,ports-sinterval-low = /bits/ 8 <0x01 0x01 0x03 0x03>;
|
||||||
qcom,ports-offset1 = /bits/ 8 <0x01 0x00 0x02 0x01>;
|
qcom,ports-offset1 = /bits/ 8 <0x01 0x00 0x02 0x00>;
|
||||||
qcom,ports-offset2 = /bits/ 8 <0x00 0x00 0x00 0x00>;
|
qcom,ports-offset2 = /bits/ 8 <0x00 0x00 0x00 0x00>;
|
||||||
qcom,ports-block-pack-mode = /bits/ 8 <0xff 0xff 0xff 0xff>;
|
qcom,ports-block-pack-mode = /bits/ 8 <0xff 0xff 0xff 0xff>;
|
||||||
qcom,ports-hstart = /bits/ 8 <0xff 0xff 0xff 0xff>;
|
qcom,ports-hstart = /bits/ 8 <0xff 0xff 0xff 0xff>;
|
||||||
qcom,ports-hstop = /bits/ 8 <0xff 0xff 0xff 0xff>;
|
qcom,ports-hstop = /bits/ 8 <0xff 0xff 0xff 0xff>;
|
||||||
qcom,ports-word-length = /bits/ 8 <0xff 0x00 0xff 0xff>;
|
qcom,ports-word-length = /bits/ 8 <0xff 0xff 0xff 0xff>;
|
||||||
qcom,ports-block-group-count = /bits/ 8 <0xff 0xff 0xff 0xff>;
|
qcom,ports-block-group-count = /bits/ 8 <0xff 0xff 0xff 0xff>;
|
||||||
qcom,ports-lane-control = /bits/ 8 <0x00 0x01 0x00 0x00>;
|
qcom,ports-lane-control = /bits/ 8 <0x00 0x01 0x00 0x01>;
|
||||||
|
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
|
@ -1078,6 +1078,7 @@
|
||||||
dma-names = "tx", "rx";
|
dma-names = "tx", "rx";
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
|
status = "disabled";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1209,6 +1209,7 @@
|
||||||
clock-names = "xo";
|
clock-names = "xo";
|
||||||
|
|
||||||
power-domains = <&rpmpd SM6375_VDDCX>;
|
power-domains = <&rpmpd SM6375_VDDCX>;
|
||||||
|
power-domain-names = "cx";
|
||||||
|
|
||||||
memory-region = <&pil_cdsp_mem>;
|
memory-region = <&pil_cdsp_mem>;
|
||||||
|
|
||||||
|
|
|
@ -1826,7 +1826,7 @@
|
||||||
"slave_q2a",
|
"slave_q2a",
|
||||||
"tbu";
|
"tbu";
|
||||||
|
|
||||||
iommus = <&apps_smmu 0x1d80 0x7f>;
|
iommus = <&apps_smmu 0x1d80 0x3f>;
|
||||||
iommu-map = <0x0 &apps_smmu 0x1d80 0x1>,
|
iommu-map = <0x0 &apps_smmu 0x1d80 0x1>,
|
||||||
<0x100 &apps_smmu 0x1d81 0x1>;
|
<0x100 &apps_smmu 0x1d81 0x1>;
|
||||||
|
|
||||||
|
@ -1925,7 +1925,7 @@
|
||||||
assigned-clocks = <&gcc GCC_PCIE_1_AUX_CLK>;
|
assigned-clocks = <&gcc GCC_PCIE_1_AUX_CLK>;
|
||||||
assigned-clock-rates = <19200000>;
|
assigned-clock-rates = <19200000>;
|
||||||
|
|
||||||
iommus = <&apps_smmu 0x1e00 0x7f>;
|
iommus = <&apps_smmu 0x1e00 0x3f>;
|
||||||
iommu-map = <0x0 &apps_smmu 0x1e00 0x1>,
|
iommu-map = <0x0 &apps_smmu 0x1e00 0x1>,
|
||||||
<0x100 &apps_smmu 0x1e01 0x1>;
|
<0x100 &apps_smmu 0x1e01 0x1>;
|
||||||
|
|
||||||
|
|
|
@ -625,6 +625,6 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
&venus {
|
&venus {
|
||||||
firmware-name = "qcom/sm8250/elish/venus.mbn";
|
firmware-name = "qcom/sm8250/xiaomi/elish/venus.mbn";
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
|
@ -1664,6 +1664,7 @@
|
||||||
power-domains = <&gcc UFS_PHY_GDSC>;
|
power-domains = <&gcc UFS_PHY_GDSC>;
|
||||||
|
|
||||||
iommus = <&apps_smmu 0xe0 0x0>;
|
iommus = <&apps_smmu 0xe0 0x0>;
|
||||||
|
dma-coherent;
|
||||||
|
|
||||||
clock-names =
|
clock-names =
|
||||||
"core_clk",
|
"core_clk",
|
||||||
|
|
|
@ -2143,8 +2143,8 @@
|
||||||
<&q6prmcc LPASS_HW_DCODEC_VOTE LPASS_CLK_ATTRIBUTE_COUPLE_NO>,
|
<&q6prmcc LPASS_HW_DCODEC_VOTE LPASS_CLK_ATTRIBUTE_COUPLE_NO>,
|
||||||
<&vamacro>;
|
<&vamacro>;
|
||||||
clock-names = "mclk", "npl", "macro", "dcodec", "fsgen";
|
clock-names = "mclk", "npl", "macro", "dcodec", "fsgen";
|
||||||
assigned-clocks = <&q6prmcc LPASS_CLK_ID_WSA_CORE_TX_MCLK LPASS_CLK_ATTRIBUTE_COUPLE_NO>,
|
assigned-clocks = <&q6prmcc LPASS_CLK_ID_WSA2_CORE_TX_MCLK LPASS_CLK_ATTRIBUTE_COUPLE_NO>,
|
||||||
<&q6prmcc LPASS_CLK_ID_WSA_CORE_TX_2X_MCLK LPASS_CLK_ATTRIBUTE_COUPLE_NO>;
|
<&q6prmcc LPASS_CLK_ID_WSA2_CORE_TX_2X_MCLK LPASS_CLK_ATTRIBUTE_COUPLE_NO>;
|
||||||
assigned-clock-rates = <19200000>, <19200000>;
|
assigned-clock-rates = <19200000>, <19200000>;
|
||||||
|
|
||||||
#clock-cells = <0>;
|
#clock-cells = <0>;
|
||||||
|
@ -4003,6 +4003,7 @@
|
||||||
power-domains = <&gcc UFS_PHY_GDSC>;
|
power-domains = <&gcc UFS_PHY_GDSC>;
|
||||||
|
|
||||||
iommus = <&apps_smmu 0xe0 0x0>;
|
iommus = <&apps_smmu 0xe0 0x0>;
|
||||||
|
dma-coherent;
|
||||||
|
|
||||||
interconnects = <&aggre1_noc MASTER_UFS_MEM 0 &mc_virt SLAVE_EBI1 0>,
|
interconnects = <&aggre1_noc MASTER_UFS_MEM 0 &mc_virt SLAVE_EBI1 0>,
|
||||||
<&gem_noc MASTER_APPSS_PROC 0 &config_noc SLAVE_UFS_MEM_CFG 0>;
|
<&gem_noc MASTER_APPSS_PROC 0 &config_noc SLAVE_UFS_MEM_CFG 0>;
|
||||||
|
|
|
@ -66,7 +66,7 @@
|
||||||
|
|
||||||
CPU0: cpu@0 {
|
CPU0: cpu@0 {
|
||||||
device_type = "cpu";
|
device_type = "cpu";
|
||||||
compatible = "qcom,kryo";
|
compatible = "arm,cortex-a510";
|
||||||
reg = <0 0>;
|
reg = <0 0>;
|
||||||
enable-method = "psci";
|
enable-method = "psci";
|
||||||
next-level-cache = <&L2_0>;
|
next-level-cache = <&L2_0>;
|
||||||
|
@ -89,7 +89,7 @@
|
||||||
|
|
||||||
CPU1: cpu@100 {
|
CPU1: cpu@100 {
|
||||||
device_type = "cpu";
|
device_type = "cpu";
|
||||||
compatible = "qcom,kryo";
|
compatible = "arm,cortex-a510";
|
||||||
reg = <0 0x100>;
|
reg = <0 0x100>;
|
||||||
enable-method = "psci";
|
enable-method = "psci";
|
||||||
next-level-cache = <&L2_100>;
|
next-level-cache = <&L2_100>;
|
||||||
|
@ -108,7 +108,7 @@
|
||||||
|
|
||||||
CPU2: cpu@200 {
|
CPU2: cpu@200 {
|
||||||
device_type = "cpu";
|
device_type = "cpu";
|
||||||
compatible = "qcom,kryo";
|
compatible = "arm,cortex-a510";
|
||||||
reg = <0 0x200>;
|
reg = <0 0x200>;
|
||||||
enable-method = "psci";
|
enable-method = "psci";
|
||||||
next-level-cache = <&L2_200>;
|
next-level-cache = <&L2_200>;
|
||||||
|
@ -127,7 +127,7 @@
|
||||||
|
|
||||||
CPU3: cpu@300 {
|
CPU3: cpu@300 {
|
||||||
device_type = "cpu";
|
device_type = "cpu";
|
||||||
compatible = "qcom,kryo";
|
compatible = "arm,cortex-a715";
|
||||||
reg = <0 0x300>;
|
reg = <0 0x300>;
|
||||||
enable-method = "psci";
|
enable-method = "psci";
|
||||||
next-level-cache = <&L2_300>;
|
next-level-cache = <&L2_300>;
|
||||||
|
@ -146,7 +146,7 @@
|
||||||
|
|
||||||
CPU4: cpu@400 {
|
CPU4: cpu@400 {
|
||||||
device_type = "cpu";
|
device_type = "cpu";
|
||||||
compatible = "qcom,kryo";
|
compatible = "arm,cortex-a715";
|
||||||
reg = <0 0x400>;
|
reg = <0 0x400>;
|
||||||
enable-method = "psci";
|
enable-method = "psci";
|
||||||
next-level-cache = <&L2_400>;
|
next-level-cache = <&L2_400>;
|
||||||
|
@ -165,7 +165,7 @@
|
||||||
|
|
||||||
CPU5: cpu@500 {
|
CPU5: cpu@500 {
|
||||||
device_type = "cpu";
|
device_type = "cpu";
|
||||||
compatible = "qcom,kryo";
|
compatible = "arm,cortex-a710";
|
||||||
reg = <0 0x500>;
|
reg = <0 0x500>;
|
||||||
enable-method = "psci";
|
enable-method = "psci";
|
||||||
next-level-cache = <&L2_500>;
|
next-level-cache = <&L2_500>;
|
||||||
|
@ -184,7 +184,7 @@
|
||||||
|
|
||||||
CPU6: cpu@600 {
|
CPU6: cpu@600 {
|
||||||
device_type = "cpu";
|
device_type = "cpu";
|
||||||
compatible = "qcom,kryo";
|
compatible = "arm,cortex-a710";
|
||||||
reg = <0 0x600>;
|
reg = <0 0x600>;
|
||||||
enable-method = "psci";
|
enable-method = "psci";
|
||||||
next-level-cache = <&L2_600>;
|
next-level-cache = <&L2_600>;
|
||||||
|
@ -203,7 +203,7 @@
|
||||||
|
|
||||||
CPU7: cpu@700 {
|
CPU7: cpu@700 {
|
||||||
device_type = "cpu";
|
device_type = "cpu";
|
||||||
compatible = "qcom,kryo";
|
compatible = "arm,cortex-x3";
|
||||||
reg = <0 0x700>;
|
reg = <0 0x700>;
|
||||||
enable-method = "psci";
|
enable-method = "psci";
|
||||||
next-level-cache = <&L2_700>;
|
next-level-cache = <&L2_700>;
|
||||||
|
@ -1905,6 +1905,7 @@
|
||||||
required-opps = <&rpmhpd_opp_nom>;
|
required-opps = <&rpmhpd_opp_nom>;
|
||||||
|
|
||||||
iommus = <&apps_smmu 0x60 0x0>;
|
iommus = <&apps_smmu 0x60 0x0>;
|
||||||
|
dma-coherent;
|
||||||
|
|
||||||
interconnects = <&aggre1_noc MASTER_UFS_MEM 0 &mc_virt SLAVE_EBI1 0>,
|
interconnects = <&aggre1_noc MASTER_UFS_MEM 0 &mc_virt SLAVE_EBI1 0>,
|
||||||
<&gem_noc MASTER_APPSS_PROC 0 &config_noc SLAVE_UFS_MEM_CFG 0>;
|
<&gem_noc MASTER_APPSS_PROC 0 &config_noc SLAVE_UFS_MEM_CFG 0>;
|
||||||
|
@ -1997,7 +1998,7 @@
|
||||||
lpass_tlmm: pinctrl@6e80000 {
|
lpass_tlmm: pinctrl@6e80000 {
|
||||||
compatible = "qcom,sm8550-lpass-lpi-pinctrl";
|
compatible = "qcom,sm8550-lpass-lpi-pinctrl";
|
||||||
reg = <0 0x06e80000 0 0x20000>,
|
reg = <0 0x06e80000 0 0x20000>,
|
||||||
<0 0x0725a000 0 0x10000>;
|
<0 0x07250000 0 0x10000>;
|
||||||
gpio-controller;
|
gpio-controller;
|
||||||
#gpio-cells = <2>;
|
#gpio-cells = <2>;
|
||||||
gpio-ranges = <&lpass_tlmm 0 0 23>;
|
gpio-ranges = <&lpass_tlmm 0 0 23>;
|
||||||
|
@ -2691,7 +2692,7 @@
|
||||||
pins = "gpio28", "gpio29";
|
pins = "gpio28", "gpio29";
|
||||||
function = "qup1_se0";
|
function = "qup1_se0";
|
||||||
drive-strength = <2>;
|
drive-strength = <2>;
|
||||||
bias-pull-up;
|
bias-pull-up = <2200>;
|
||||||
};
|
};
|
||||||
|
|
||||||
qup_i2c1_data_clk: qup-i2c1-data-clk-state {
|
qup_i2c1_data_clk: qup-i2c1-data-clk-state {
|
||||||
|
@ -2699,7 +2700,7 @@
|
||||||
pins = "gpio32", "gpio33";
|
pins = "gpio32", "gpio33";
|
||||||
function = "qup1_se1";
|
function = "qup1_se1";
|
||||||
drive-strength = <2>;
|
drive-strength = <2>;
|
||||||
bias-pull-up;
|
bias-pull-up = <2200>;
|
||||||
};
|
};
|
||||||
|
|
||||||
qup_i2c2_data_clk: qup-i2c2-data-clk-state {
|
qup_i2c2_data_clk: qup-i2c2-data-clk-state {
|
||||||
|
@ -2707,7 +2708,7 @@
|
||||||
pins = "gpio36", "gpio37";
|
pins = "gpio36", "gpio37";
|
||||||
function = "qup1_se2";
|
function = "qup1_se2";
|
||||||
drive-strength = <2>;
|
drive-strength = <2>;
|
||||||
bias-pull-up;
|
bias-pull-up = <2200>;
|
||||||
};
|
};
|
||||||
|
|
||||||
qup_i2c3_data_clk: qup-i2c3-data-clk-state {
|
qup_i2c3_data_clk: qup-i2c3-data-clk-state {
|
||||||
|
@ -2715,7 +2716,7 @@
|
||||||
pins = "gpio40", "gpio41";
|
pins = "gpio40", "gpio41";
|
||||||
function = "qup1_se3";
|
function = "qup1_se3";
|
||||||
drive-strength = <2>;
|
drive-strength = <2>;
|
||||||
bias-pull-up;
|
bias-pull-up = <2200>;
|
||||||
};
|
};
|
||||||
|
|
||||||
qup_i2c4_data_clk: qup-i2c4-data-clk-state {
|
qup_i2c4_data_clk: qup-i2c4-data-clk-state {
|
||||||
|
@ -2723,7 +2724,7 @@
|
||||||
pins = "gpio44", "gpio45";
|
pins = "gpio44", "gpio45";
|
||||||
function = "qup1_se4";
|
function = "qup1_se4";
|
||||||
drive-strength = <2>;
|
drive-strength = <2>;
|
||||||
bias-pull-up;
|
bias-pull-up = <2200>;
|
||||||
};
|
};
|
||||||
|
|
||||||
qup_i2c5_data_clk: qup-i2c5-data-clk-state {
|
qup_i2c5_data_clk: qup-i2c5-data-clk-state {
|
||||||
|
@ -2731,7 +2732,7 @@
|
||||||
pins = "gpio52", "gpio53";
|
pins = "gpio52", "gpio53";
|
||||||
function = "qup1_se5";
|
function = "qup1_se5";
|
||||||
drive-strength = <2>;
|
drive-strength = <2>;
|
||||||
bias-pull-up;
|
bias-pull-up = <2200>;
|
||||||
};
|
};
|
||||||
|
|
||||||
qup_i2c6_data_clk: qup-i2c6-data-clk-state {
|
qup_i2c6_data_clk: qup-i2c6-data-clk-state {
|
||||||
|
@ -2739,7 +2740,7 @@
|
||||||
pins = "gpio48", "gpio49";
|
pins = "gpio48", "gpio49";
|
||||||
function = "qup1_se6";
|
function = "qup1_se6";
|
||||||
drive-strength = <2>;
|
drive-strength = <2>;
|
||||||
bias-pull-up;
|
bias-pull-up = <2200>;
|
||||||
};
|
};
|
||||||
|
|
||||||
qup_i2c8_data_clk: qup-i2c8-data-clk-state {
|
qup_i2c8_data_clk: qup-i2c8-data-clk-state {
|
||||||
|
@ -2747,14 +2748,14 @@
|
||||||
pins = "gpio57";
|
pins = "gpio57";
|
||||||
function = "qup2_se0_l1_mira";
|
function = "qup2_se0_l1_mira";
|
||||||
drive-strength = <2>;
|
drive-strength = <2>;
|
||||||
bias-pull-up;
|
bias-pull-up = <2200>;
|
||||||
};
|
};
|
||||||
|
|
||||||
sda-pins {
|
sda-pins {
|
||||||
pins = "gpio56";
|
pins = "gpio56";
|
||||||
function = "qup2_se0_l0_mira";
|
function = "qup2_se0_l0_mira";
|
||||||
drive-strength = <2>;
|
drive-strength = <2>;
|
||||||
bias-pull-up;
|
bias-pull-up = <2200>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -2763,7 +2764,7 @@
|
||||||
pins = "gpio60", "gpio61";
|
pins = "gpio60", "gpio61";
|
||||||
function = "qup2_se1";
|
function = "qup2_se1";
|
||||||
drive-strength = <2>;
|
drive-strength = <2>;
|
||||||
bias-pull-up;
|
bias-pull-up = <2200>;
|
||||||
};
|
};
|
||||||
|
|
||||||
qup_i2c10_data_clk: qup-i2c10-data-clk-state {
|
qup_i2c10_data_clk: qup-i2c10-data-clk-state {
|
||||||
|
@ -2771,7 +2772,7 @@
|
||||||
pins = "gpio64", "gpio65";
|
pins = "gpio64", "gpio65";
|
||||||
function = "qup2_se2";
|
function = "qup2_se2";
|
||||||
drive-strength = <2>;
|
drive-strength = <2>;
|
||||||
bias-pull-up;
|
bias-pull-up = <2200>;
|
||||||
};
|
};
|
||||||
|
|
||||||
qup_i2c11_data_clk: qup-i2c11-data-clk-state {
|
qup_i2c11_data_clk: qup-i2c11-data-clk-state {
|
||||||
|
@ -2779,7 +2780,7 @@
|
||||||
pins = "gpio68", "gpio69";
|
pins = "gpio68", "gpio69";
|
||||||
function = "qup2_se3";
|
function = "qup2_se3";
|
||||||
drive-strength = <2>;
|
drive-strength = <2>;
|
||||||
bias-pull-up;
|
bias-pull-up = <2200>;
|
||||||
};
|
};
|
||||||
|
|
||||||
qup_i2c12_data_clk: qup-i2c12-data-clk-state {
|
qup_i2c12_data_clk: qup-i2c12-data-clk-state {
|
||||||
|
@ -2787,7 +2788,7 @@
|
||||||
pins = "gpio2", "gpio3";
|
pins = "gpio2", "gpio3";
|
||||||
function = "qup2_se4";
|
function = "qup2_se4";
|
||||||
drive-strength = <2>;
|
drive-strength = <2>;
|
||||||
bias-pull-up;
|
bias-pull-up = <2200>;
|
||||||
};
|
};
|
||||||
|
|
||||||
qup_i2c13_data_clk: qup-i2c13-data-clk-state {
|
qup_i2c13_data_clk: qup-i2c13-data-clk-state {
|
||||||
|
@ -2795,7 +2796,7 @@
|
||||||
pins = "gpio80", "gpio81";
|
pins = "gpio80", "gpio81";
|
||||||
function = "qup2_se5";
|
function = "qup2_se5";
|
||||||
drive-strength = <2>;
|
drive-strength = <2>;
|
||||||
bias-pull-up;
|
bias-pull-up = <2200>;
|
||||||
};
|
};
|
||||||
|
|
||||||
qup_i2c15_data_clk: qup-i2c15-data-clk-state {
|
qup_i2c15_data_clk: qup-i2c15-data-clk-state {
|
||||||
|
@ -2803,7 +2804,7 @@
|
||||||
pins = "gpio72", "gpio106";
|
pins = "gpio72", "gpio106";
|
||||||
function = "qup2_se7";
|
function = "qup2_se7";
|
||||||
drive-strength = <2>;
|
drive-strength = <2>;
|
||||||
bias-pull-up;
|
bias-pull-up = <2200>;
|
||||||
};
|
};
|
||||||
|
|
||||||
qup_spi0_cs: qup-spi0-cs-state {
|
qup_spi0_cs: qup-spi0-cs-state {
|
||||||
|
|
|
@ -193,6 +193,9 @@ struct kvm_arch {
|
||||||
/* Interrupt controller */
|
/* Interrupt controller */
|
||||||
struct vgic_dist vgic;
|
struct vgic_dist vgic;
|
||||||
|
|
||||||
|
/* Timers */
|
||||||
|
struct arch_timer_vm_data timer_data;
|
||||||
|
|
||||||
/* Mandated version of PSCI */
|
/* Mandated version of PSCI */
|
||||||
u32 psci_version;
|
u32 psci_version;
|
||||||
|
|
||||||
|
|
|
@ -66,7 +66,7 @@
|
||||||
.long .Lefi_header_end - .L_head // SizeOfHeaders
|
.long .Lefi_header_end - .L_head // SizeOfHeaders
|
||||||
.long 0 // CheckSum
|
.long 0 // CheckSum
|
||||||
.short IMAGE_SUBSYSTEM_EFI_APPLICATION // Subsystem
|
.short IMAGE_SUBSYSTEM_EFI_APPLICATION // Subsystem
|
||||||
.short 0 // DllCharacteristics
|
.short IMAGE_DLL_CHARACTERISTICS_NX_COMPAT // DllCharacteristics
|
||||||
.quad 0 // SizeOfStackReserve
|
.quad 0 // SizeOfStackReserve
|
||||||
.quad 0 // SizeOfStackCommit
|
.quad 0 // SizeOfStackCommit
|
||||||
.quad 0 // SizeOfHeapReserve
|
.quad 0 // SizeOfHeapReserve
|
||||||
|
|
|
@ -84,14 +84,10 @@ u64 timer_get_cval(struct arch_timer_context *ctxt)
|
||||||
|
|
||||||
static u64 timer_get_offset(struct arch_timer_context *ctxt)
|
static u64 timer_get_offset(struct arch_timer_context *ctxt)
|
||||||
{
|
{
|
||||||
struct kvm_vcpu *vcpu = ctxt->vcpu;
|
if (ctxt->offset.vm_offset)
|
||||||
|
return *ctxt->offset.vm_offset;
|
||||||
|
|
||||||
switch(arch_timer_ctx_index(ctxt)) {
|
|
||||||
case TIMER_VTIMER:
|
|
||||||
return __vcpu_sys_reg(vcpu, CNTVOFF_EL2);
|
|
||||||
default:
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void timer_set_ctl(struct arch_timer_context *ctxt, u32 ctl)
|
static void timer_set_ctl(struct arch_timer_context *ctxt, u32 ctl)
|
||||||
|
@ -128,15 +124,12 @@ static void timer_set_cval(struct arch_timer_context *ctxt, u64 cval)
|
||||||
|
|
||||||
static void timer_set_offset(struct arch_timer_context *ctxt, u64 offset)
|
static void timer_set_offset(struct arch_timer_context *ctxt, u64 offset)
|
||||||
{
|
{
|
||||||
struct kvm_vcpu *vcpu = ctxt->vcpu;
|
if (!ctxt->offset.vm_offset) {
|
||||||
|
|
||||||
switch(arch_timer_ctx_index(ctxt)) {
|
|
||||||
case TIMER_VTIMER:
|
|
||||||
__vcpu_sys_reg(vcpu, CNTVOFF_EL2) = offset;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
WARN(offset, "timer %ld\n", arch_timer_ctx_index(ctxt));
|
WARN(offset, "timer %ld\n", arch_timer_ctx_index(ctxt));
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
WRITE_ONCE(*ctxt->offset.vm_offset, offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
u64 kvm_phys_timer_read(void)
|
u64 kvm_phys_timer_read(void)
|
||||||
|
@ -765,25 +758,6 @@ int kvm_timer_vcpu_reset(struct kvm_vcpu *vcpu)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Make the updates of cntvoff for all vtimer contexts atomic */
|
|
||||||
static void update_vtimer_cntvoff(struct kvm_vcpu *vcpu, u64 cntvoff)
|
|
||||||
{
|
|
||||||
unsigned long i;
|
|
||||||
struct kvm *kvm = vcpu->kvm;
|
|
||||||
struct kvm_vcpu *tmp;
|
|
||||||
|
|
||||||
mutex_lock(&kvm->lock);
|
|
||||||
kvm_for_each_vcpu(i, tmp, kvm)
|
|
||||||
timer_set_offset(vcpu_vtimer(tmp), cntvoff);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* When called from the vcpu create path, the CPU being created is not
|
|
||||||
* included in the loop above, so we just set it here as well.
|
|
||||||
*/
|
|
||||||
timer_set_offset(vcpu_vtimer(vcpu), cntvoff);
|
|
||||||
mutex_unlock(&kvm->lock);
|
|
||||||
}
|
|
||||||
|
|
||||||
void kvm_timer_vcpu_init(struct kvm_vcpu *vcpu)
|
void kvm_timer_vcpu_init(struct kvm_vcpu *vcpu)
|
||||||
{
|
{
|
||||||
struct arch_timer_cpu *timer = vcpu_timer(vcpu);
|
struct arch_timer_cpu *timer = vcpu_timer(vcpu);
|
||||||
|
@ -791,10 +765,11 @@ void kvm_timer_vcpu_init(struct kvm_vcpu *vcpu)
|
||||||
struct arch_timer_context *ptimer = vcpu_ptimer(vcpu);
|
struct arch_timer_context *ptimer = vcpu_ptimer(vcpu);
|
||||||
|
|
||||||
vtimer->vcpu = vcpu;
|
vtimer->vcpu = vcpu;
|
||||||
|
vtimer->offset.vm_offset = &vcpu->kvm->arch.timer_data.voffset;
|
||||||
ptimer->vcpu = vcpu;
|
ptimer->vcpu = vcpu;
|
||||||
|
|
||||||
/* Synchronize cntvoff across all vtimers of a VM. */
|
/* Synchronize cntvoff across all vtimers of a VM. */
|
||||||
update_vtimer_cntvoff(vcpu, kvm_phys_timer_read());
|
timer_set_offset(vtimer, kvm_phys_timer_read());
|
||||||
timer_set_offset(ptimer, 0);
|
timer_set_offset(ptimer, 0);
|
||||||
|
|
||||||
hrtimer_init(&timer->bg_timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS_HARD);
|
hrtimer_init(&timer->bg_timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS_HARD);
|
||||||
|
@ -840,7 +815,7 @@ int kvm_arm_timer_set_reg(struct kvm_vcpu *vcpu, u64 regid, u64 value)
|
||||||
break;
|
break;
|
||||||
case KVM_REG_ARM_TIMER_CNT:
|
case KVM_REG_ARM_TIMER_CNT:
|
||||||
timer = vcpu_vtimer(vcpu);
|
timer = vcpu_vtimer(vcpu);
|
||||||
update_vtimer_cntvoff(vcpu, kvm_phys_timer_read() - value);
|
timer_set_offset(timer, kvm_phys_timer_read() - value);
|
||||||
break;
|
break;
|
||||||
case KVM_REG_ARM_TIMER_CVAL:
|
case KVM_REG_ARM_TIMER_CVAL:
|
||||||
timer = vcpu_vtimer(vcpu);
|
timer = vcpu_vtimer(vcpu);
|
||||||
|
|
|
@ -44,7 +44,7 @@ static void kvm_ptp_get_time(struct kvm_vcpu *vcpu, u64 *val)
|
||||||
feature = smccc_get_arg1(vcpu);
|
feature = smccc_get_arg1(vcpu);
|
||||||
switch (feature) {
|
switch (feature) {
|
||||||
case KVM_PTP_VIRT_COUNTER:
|
case KVM_PTP_VIRT_COUNTER:
|
||||||
cycles = systime_snapshot.cycles - vcpu_read_sys_reg(vcpu, CNTVOFF_EL2);
|
cycles = systime_snapshot.cycles - vcpu->kvm->arch.timer_data.voffset;
|
||||||
break;
|
break;
|
||||||
case KVM_PTP_PHYS_COUNTER:
|
case KVM_PTP_PHYS_COUNTER:
|
||||||
cycles = systime_snapshot.cycles;
|
cycles = systime_snapshot.cycles;
|
||||||
|
|
|
@ -326,16 +326,16 @@ void __init setup_arch(char **cmdline_p)
|
||||||
panic("No configuration setup");
|
panic("No configuration setup");
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_BLK_DEV_INITRD
|
if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && m68k_ramdisk.size)
|
||||||
if (m68k_ramdisk.size) {
|
|
||||||
memblock_reserve(m68k_ramdisk.addr, m68k_ramdisk.size);
|
memblock_reserve(m68k_ramdisk.addr, m68k_ramdisk.size);
|
||||||
|
|
||||||
|
paging_init();
|
||||||
|
|
||||||
|
if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && m68k_ramdisk.size) {
|
||||||
initrd_start = (unsigned long)phys_to_virt(m68k_ramdisk.addr);
|
initrd_start = (unsigned long)phys_to_virt(m68k_ramdisk.addr);
|
||||||
initrd_end = initrd_start + m68k_ramdisk.size;
|
initrd_end = initrd_start + m68k_ramdisk.size;
|
||||||
pr_info("initrd: %08lx - %08lx\n", initrd_start, initrd_end);
|
pr_info("initrd: %08lx - %08lx\n", initrd_start, initrd_end);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
paging_init();
|
|
||||||
|
|
||||||
#ifdef CONFIG_NATFEAT
|
#ifdef CONFIG_NATFEAT
|
||||||
nf_init();
|
nf_init();
|
||||||
|
|
|
@ -30,6 +30,7 @@
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/ptrace.h>
|
#include <linux/ptrace.h>
|
||||||
#include <linux/kallsyms.h>
|
#include <linux/kallsyms.h>
|
||||||
|
#include <linux/extable.h>
|
||||||
|
|
||||||
#include <asm/setup.h>
|
#include <asm/setup.h>
|
||||||
#include <asm/fpu.h>
|
#include <asm/fpu.h>
|
||||||
|
@ -545,7 +546,8 @@ static inline void bus_error030 (struct frame *fp)
|
||||||
errorcode |= 2;
|
errorcode |= 2;
|
||||||
|
|
||||||
if (mmusr & (MMU_I | MMU_WP)) {
|
if (mmusr & (MMU_I | MMU_WP)) {
|
||||||
if (ssw & 4) {
|
/* We might have an exception table for this PC */
|
||||||
|
if (ssw & 4 && !search_exception_tables(fp->ptregs.pc)) {
|
||||||
pr_err("Data %s fault at %#010lx in %s (pc=%#lx)\n",
|
pr_err("Data %s fault at %#010lx in %s (pc=%#lx)\n",
|
||||||
ssw & RW ? "read" : "write",
|
ssw & RW ? "read" : "write",
|
||||||
fp->un.fmtb.daddr,
|
fp->un.fmtb.daddr,
|
||||||
|
|
|
@ -437,7 +437,7 @@ void __init paging_init(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
min_addr = m68k_memory[0].addr;
|
min_addr = m68k_memory[0].addr;
|
||||||
max_addr = min_addr + m68k_memory[0].size;
|
max_addr = min_addr + m68k_memory[0].size - 1;
|
||||||
memblock_add_node(m68k_memory[0].addr, m68k_memory[0].size, 0,
|
memblock_add_node(m68k_memory[0].addr, m68k_memory[0].size, 0,
|
||||||
MEMBLOCK_NONE);
|
MEMBLOCK_NONE);
|
||||||
for (i = 1; i < m68k_num_memory;) {
|
for (i = 1; i < m68k_num_memory;) {
|
||||||
|
@ -452,21 +452,21 @@ void __init paging_init(void)
|
||||||
}
|
}
|
||||||
memblock_add_node(m68k_memory[i].addr, m68k_memory[i].size, i,
|
memblock_add_node(m68k_memory[i].addr, m68k_memory[i].size, i,
|
||||||
MEMBLOCK_NONE);
|
MEMBLOCK_NONE);
|
||||||
addr = m68k_memory[i].addr + m68k_memory[i].size;
|
addr = m68k_memory[i].addr + m68k_memory[i].size - 1;
|
||||||
if (addr > max_addr)
|
if (addr > max_addr)
|
||||||
max_addr = addr;
|
max_addr = addr;
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
m68k_memoffset = min_addr - PAGE_OFFSET;
|
m68k_memoffset = min_addr - PAGE_OFFSET;
|
||||||
m68k_virt_to_node_shift = fls(max_addr - min_addr - 1) - 6;
|
m68k_virt_to_node_shift = fls(max_addr - min_addr) - 6;
|
||||||
|
|
||||||
module_fixup(NULL, __start_fixup, __stop_fixup);
|
module_fixup(NULL, __start_fixup, __stop_fixup);
|
||||||
flush_icache();
|
flush_icache();
|
||||||
|
|
||||||
high_memory = phys_to_virt(max_addr);
|
high_memory = phys_to_virt(max_addr) + 1;
|
||||||
|
|
||||||
min_low_pfn = availmem >> PAGE_SHIFT;
|
min_low_pfn = availmem >> PAGE_SHIFT;
|
||||||
max_pfn = max_low_pfn = max_addr >> PAGE_SHIFT;
|
max_pfn = max_low_pfn = (max_addr >> PAGE_SHIFT) + 1;
|
||||||
|
|
||||||
/* Reserve kernel text/data/bss and the memory allocated in head.S */
|
/* Reserve kernel text/data/bss and the memory allocated in head.S */
|
||||||
memblock_reserve(m68k_memory[0].addr, availmem - m68k_memory[0].addr);
|
memblock_reserve(m68k_memory[0].addr, availmem - m68k_memory[0].addr);
|
||||||
|
|
|
@ -284,6 +284,7 @@ CONFIG_IXGB=m
|
||||||
CONFIG_SKGE=m
|
CONFIG_SKGE=m
|
||||||
CONFIG_SKY2=m
|
CONFIG_SKY2=m
|
||||||
CONFIG_MYRI10GE=m
|
CONFIG_MYRI10GE=m
|
||||||
|
CONFIG_FEALNX=m
|
||||||
CONFIG_NATSEMI=m
|
CONFIG_NATSEMI=m
|
||||||
CONFIG_NS83820=m
|
CONFIG_NS83820=m
|
||||||
CONFIG_S2IO=m
|
CONFIG_S2IO=m
|
||||||
|
|
|
@ -10,7 +10,6 @@
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
model = "fsl,T1040RDB-REV-A";
|
model = "fsl,T1040RDB-REV-A";
|
||||||
compatible = "fsl,T1040RDB-REV-A";
|
|
||||||
};
|
};
|
||||||
|
|
||||||
&seville_port0 {
|
&seville_port0 {
|
||||||
|
|
|
@ -180,6 +180,9 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
&seville_port8 {
|
&seville_port8 {
|
||||||
ethernet = <&enet0>;
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&seville_port9 {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
|
@ -686,6 +686,7 @@
|
||||||
seville_port8: port@8 {
|
seville_port8: port@8 {
|
||||||
reg = <8>;
|
reg = <8>;
|
||||||
phy-mode = "internal";
|
phy-mode = "internal";
|
||||||
|
ethernet = <&enet0>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
|
||||||
fixed-link {
|
fixed-link {
|
||||||
|
@ -697,6 +698,7 @@
|
||||||
seville_port9: port@9 {
|
seville_port9: port@9 {
|
||||||
reg = <9>;
|
reg = <9>;
|
||||||
phy-mode = "internal";
|
phy-mode = "internal";
|
||||||
|
ethernet = <&enet1>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
|
||||||
fixed-link {
|
fixed-link {
|
||||||
|
|
|
@ -461,6 +461,7 @@ CONFIG_MV643XX_ETH=m
|
||||||
CONFIG_SKGE=m
|
CONFIG_SKGE=m
|
||||||
CONFIG_SKY2=m
|
CONFIG_SKY2=m
|
||||||
CONFIG_MYRI10GE=m
|
CONFIG_MYRI10GE=m
|
||||||
|
CONFIG_FEALNX=m
|
||||||
CONFIG_NATSEMI=m
|
CONFIG_NATSEMI=m
|
||||||
CONFIG_NS83820=m
|
CONFIG_NS83820=m
|
||||||
CONFIG_PCMCIA_AXNET=m
|
CONFIG_PCMCIA_AXNET=m
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#ifndef __ASM_KASAN_H
|
#ifndef __ASM_KASAN_H
|
||||||
#define __ASM_KASAN_H
|
#define __ASM_KASAN_H
|
||||||
|
|
||||||
#ifdef CONFIG_KASAN
|
#if defined(CONFIG_KASAN) && !defined(CONFIG_CC_HAS_KASAN_MEMINTRINSIC_PREFIX)
|
||||||
#define _GLOBAL_KASAN(fn) _GLOBAL(__##fn)
|
#define _GLOBAL_KASAN(fn) _GLOBAL(__##fn)
|
||||||
#define _GLOBAL_TOC_KASAN(fn) _GLOBAL_TOC(__##fn)
|
#define _GLOBAL_TOC_KASAN(fn) _GLOBAL_TOC(__##fn)
|
||||||
#define EXPORT_SYMBOL_KASAN(fn) EXPORT_SYMBOL(__##fn)
|
#define EXPORT_SYMBOL_KASAN(fn) EXPORT_SYMBOL(__##fn)
|
||||||
|
|
|
@ -30,11 +30,17 @@ extern int memcmp(const void *,const void *,__kernel_size_t);
|
||||||
extern void * memchr(const void *,int,__kernel_size_t);
|
extern void * memchr(const void *,int,__kernel_size_t);
|
||||||
void memcpy_flushcache(void *dest, const void *src, size_t size);
|
void memcpy_flushcache(void *dest, const void *src, size_t size);
|
||||||
|
|
||||||
|
#ifdef CONFIG_KASAN
|
||||||
|
/* __mem variants are used by KASAN to implement instrumented meminstrinsics. */
|
||||||
|
#ifdef CONFIG_CC_HAS_KASAN_MEMINTRINSIC_PREFIX
|
||||||
|
#define __memset memset
|
||||||
|
#define __memcpy memcpy
|
||||||
|
#define __memmove memmove
|
||||||
|
#else /* CONFIG_CC_HAS_KASAN_MEMINTRINSIC_PREFIX */
|
||||||
void *__memset(void *s, int c, __kernel_size_t count);
|
void *__memset(void *s, int c, __kernel_size_t count);
|
||||||
void *__memcpy(void *to, const void *from, __kernel_size_t n);
|
void *__memcpy(void *to, const void *from, __kernel_size_t n);
|
||||||
void *__memmove(void *to, const void *from, __kernel_size_t n);
|
void *__memmove(void *to, const void *from, __kernel_size_t n);
|
||||||
|
#ifndef __SANITIZE_ADDRESS__
|
||||||
#if defined(CONFIG_KASAN) && !defined(__SANITIZE_ADDRESS__)
|
|
||||||
/*
|
/*
|
||||||
* For files that are not instrumented (e.g. mm/slub.c) we
|
* For files that are not instrumented (e.g. mm/slub.c) we
|
||||||
* should use not instrumented version of mem* functions.
|
* should use not instrumented version of mem* functions.
|
||||||
|
@ -46,8 +52,9 @@ void *__memmove(void *to, const void *from, __kernel_size_t n);
|
||||||
#ifndef __NO_FORTIFY
|
#ifndef __NO_FORTIFY
|
||||||
#define __NO_FORTIFY /* FORTIFY_SOURCE uses __builtin_memcpy, etc. */
|
#define __NO_FORTIFY /* FORTIFY_SOURCE uses __builtin_memcpy, etc. */
|
||||||
#endif
|
#endif
|
||||||
|
#endif /* !__SANITIZE_ADDRESS__ */
|
||||||
#endif
|
#endif /* CONFIG_CC_HAS_KASAN_MEMINTRINSIC_PREFIX */
|
||||||
|
#endif /* CONFIG_KASAN */
|
||||||
|
|
||||||
#ifdef CONFIG_PPC64
|
#ifdef CONFIG_PPC64
|
||||||
#ifndef CONFIG_KASAN
|
#ifndef CONFIG_KASAN
|
||||||
|
|
|
@ -13,8 +13,13 @@
|
||||||
# If you really need to reference something from prom_init.o add
|
# If you really need to reference something from prom_init.o add
|
||||||
# it to the list below:
|
# it to the list below:
|
||||||
|
|
||||||
grep "^CONFIG_KASAN=y$" ${KCONFIG_CONFIG} >/dev/null
|
has_renamed_memintrinsics()
|
||||||
if [ $? -eq 0 ]
|
{
|
||||||
|
grep -q "^CONFIG_KASAN=y$" ${KCONFIG_CONFIG} && \
|
||||||
|
! grep -q "^CONFIG_CC_HAS_KASAN_MEMINTRINSIC_PREFIX=y" ${KCONFIG_CONFIG}
|
||||||
|
}
|
||||||
|
|
||||||
|
if has_renamed_memintrinsics
|
||||||
then
|
then
|
||||||
MEM_FUNCS="__memcpy __memset"
|
MEM_FUNCS="__memcpy __memset"
|
||||||
else
|
else
|
||||||
|
|
|
@ -271,11 +271,16 @@ static bool access_error(bool is_write, bool is_exec, struct vm_area_struct *vma
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check for a read fault. This could be caused by a read on an
|
* VM_READ, VM_WRITE and VM_EXEC all imply read permissions, as
|
||||||
* inaccessible page (i.e. PROT_NONE), or a Radix MMU execute-only page.
|
* defined in protection_map[]. Read faults can only be caused by
|
||||||
|
* a PROT_NONE mapping, or with a PROT_EXEC-only mapping on Radix.
|
||||||
*/
|
*/
|
||||||
if (unlikely(!(vma->vm_flags & VM_READ)))
|
if (unlikely(!vma_is_accessible(vma)))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
if (unlikely(radix_enabled() && ((vma->vm_flags & VM_ACCESS_FLAGS) == VM_EXEC)))
|
||||||
|
return true;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We should ideally do the vma pkey access check here. But in the
|
* We should ideally do the vma pkey access check here. But in the
|
||||||
* fault path, handle_mm_fault() also does the same check. To avoid
|
* fault path, handle_mm_fault() also does the same check. To avoid
|
||||||
|
|
|
@ -7,6 +7,7 @@ config PPC_PSERIES
|
||||||
select OF_DYNAMIC
|
select OF_DYNAMIC
|
||||||
select FORCE_PCI
|
select FORCE_PCI
|
||||||
select PCI_MSI
|
select PCI_MSI
|
||||||
|
select GENERIC_ALLOCATOR
|
||||||
select PPC_XICS
|
select PPC_XICS
|
||||||
select PPC_XIVE_SPAPR
|
select PPC_XIVE_SPAPR
|
||||||
select PPC_ICP_NATIVE
|
select PPC_ICP_NATIVE
|
||||||
|
|
|
@ -1275,7 +1275,7 @@ static int xmon_batch_next_cpu(void)
|
||||||
while (!cpumask_empty(&xmon_batch_cpus)) {
|
while (!cpumask_empty(&xmon_batch_cpus)) {
|
||||||
cpu = cpumask_next_wrap(smp_processor_id(), &xmon_batch_cpus,
|
cpu = cpumask_next_wrap(smp_processor_id(), &xmon_batch_cpus,
|
||||||
xmon_batch_start_cpu, true);
|
xmon_batch_start_cpu, true);
|
||||||
if (cpu == nr_cpumask_bits)
|
if (cpu >= nr_cpu_ids)
|
||||||
break;
|
break;
|
||||||
if (xmon_batch_start_cpu == -1)
|
if (xmon_batch_start_cpu == -1)
|
||||||
xmon_batch_start_cpu = cpu;
|
xmon_batch_start_cpu = cpu;
|
||||||
|
|
|
@ -464,6 +464,28 @@ config TOOLCHAIN_HAS_ZIHINTPAUSE
|
||||||
depends on !32BIT || $(cc-option,-mabi=ilp32 -march=rv32ima_zihintpause)
|
depends on !32BIT || $(cc-option,-mabi=ilp32 -march=rv32ima_zihintpause)
|
||||||
depends on LLD_VERSION >= 150000 || LD_VERSION >= 23600
|
depends on LLD_VERSION >= 150000 || LD_VERSION >= 23600
|
||||||
|
|
||||||
|
config TOOLCHAIN_NEEDS_EXPLICIT_ZICSR_ZIFENCEI
|
||||||
|
def_bool y
|
||||||
|
# https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=aed44286efa8ae8717a77d94b51ac3614e2ca6dc
|
||||||
|
depends on AS_IS_GNU && AS_VERSION >= 23800
|
||||||
|
help
|
||||||
|
Newer binutils versions default to ISA spec version 20191213 which
|
||||||
|
moves some instructions from the I extension to the Zicsr and Zifencei
|
||||||
|
extensions.
|
||||||
|
|
||||||
|
config TOOLCHAIN_NEEDS_OLD_ISA_SPEC
|
||||||
|
def_bool y
|
||||||
|
depends on TOOLCHAIN_NEEDS_EXPLICIT_ZICSR_ZIFENCEI
|
||||||
|
# https://github.com/llvm/llvm-project/commit/22e199e6afb1263c943c0c0d4498694e15bf8a16
|
||||||
|
depends on CC_IS_CLANG && CLANG_VERSION < 170000
|
||||||
|
help
|
||||||
|
Certain versions of clang do not support zicsr and zifencei via -march
|
||||||
|
but newer versions of binutils require it for the reasons noted in the
|
||||||
|
help text of CONFIG_TOOLCHAIN_NEEDS_EXPLICIT_ZICSR_ZIFENCEI. This
|
||||||
|
option causes an older ISA spec compatible with these older versions
|
||||||
|
of clang to be passed to GAS, which has the same result as passing zicsr
|
||||||
|
and zifencei to -march.
|
||||||
|
|
||||||
config FPU
|
config FPU
|
||||||
bool "FPU support"
|
bool "FPU support"
|
||||||
default y
|
default y
|
||||||
|
|
|
@ -57,10 +57,12 @@ 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
|
ifdef CONFIG_TOOLCHAIN_NEEDS_OLD_ISA_SPEC
|
||||||
# instructions from the I extension to the Zicsr and Zifencei extensions.
|
KBUILD_CFLAGS += -Wa,-misa-spec=2.2
|
||||||
toolchain-need-zicsr-zifencei := $(call cc-option-yn, -march=$(riscv-march-y)_zicsr_zifencei)
|
KBUILD_AFLAGS += -Wa,-misa-spec=2.2
|
||||||
riscv-march-$(toolchain-need-zicsr-zifencei) := $(riscv-march-y)_zicsr_zifencei
|
else
|
||||||
|
riscv-march-$(CONFIG_TOOLCHAIN_NEEDS_EXPLICIT_ZICSR_ZIFENCEI) := $(riscv-march-y)_zicsr_zifencei
|
||||||
|
endif
|
||||||
|
|
||||||
# Check if the toolchain supports Zihintpause extension
|
# Check if the toolchain supports Zihintpause extension
|
||||||
riscv-march-$(CONFIG_TOOLCHAIN_HAS_ZIHINTPAUSE) := $(riscv-march-y)_zihintpause
|
riscv-march-$(CONFIG_TOOLCHAIN_HAS_ZIHINTPAUSE) := $(riscv-march-y)_zihintpause
|
||||||
|
@ -84,6 +86,13 @@ endif
|
||||||
# Avoid generating .eh_frame sections.
|
# Avoid generating .eh_frame sections.
|
||||||
KBUILD_CFLAGS += -fno-asynchronous-unwind-tables -fno-unwind-tables
|
KBUILD_CFLAGS += -fno-asynchronous-unwind-tables -fno-unwind-tables
|
||||||
|
|
||||||
|
# The RISC-V attributes frequently cause compatibility issues and provide no
|
||||||
|
# information, so just turn them off.
|
||||||
|
KBUILD_CFLAGS += $(call cc-option,-mno-riscv-attribute)
|
||||||
|
KBUILD_AFLAGS += $(call cc-option,-mno-riscv-attribute)
|
||||||
|
KBUILD_CFLAGS += $(call as-option,-Wa$(comma)-mno-arch-attr)
|
||||||
|
KBUILD_AFLAGS += $(call as-option,-Wa$(comma)-mno-arch-attr)
|
||||||
|
|
||||||
KBUILD_CFLAGS_MODULE += $(call cc-option,-mno-relax)
|
KBUILD_CFLAGS_MODULE += $(call cc-option,-mno-relax)
|
||||||
KBUILD_AFLAGS_MODULE += $(call as-option,-Wa$(comma)-mno-relax)
|
KBUILD_AFLAGS_MODULE += $(call as-option,-Wa$(comma)-mno-relax)
|
||||||
|
|
||||||
|
|
|
@ -111,7 +111,7 @@ void __init_or_module sifive_errata_patch_func(struct alt_entry *begin,
|
||||||
mutex_lock(&text_mutex);
|
mutex_lock(&text_mutex);
|
||||||
patch_text_nosync(ALT_OLD_PTR(alt), ALT_ALT_PTR(alt),
|
patch_text_nosync(ALT_OLD_PTR(alt), ALT_ALT_PTR(alt),
|
||||||
alt->alt_len);
|
alt->alt_len);
|
||||||
mutex_lock(&text_mutex);
|
mutex_unlock(&text_mutex);
|
||||||
cpu_apply_errata |= tmp;
|
cpu_apply_errata |= tmp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -109,6 +109,6 @@ int ftrace_init_nop(struct module *mod, struct dyn_ftrace *rec);
|
||||||
#define ftrace_init_nop ftrace_init_nop
|
#define ftrace_init_nop ftrace_init_nop
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif /* CONFIG_DYNAMIC_FTRACE */
|
||||||
|
|
||||||
#endif /* _ASM_RISCV_FTRACE_H */
|
#endif /* _ASM_RISCV_FTRACE_H */
|
||||||
|
|
|
@ -19,8 +19,6 @@ typedef struct {
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
/* A local icache flush is needed before user execution can resume. */
|
/* A local icache flush is needed before user execution can resume. */
|
||||||
cpumask_t icache_stale_mask;
|
cpumask_t icache_stale_mask;
|
||||||
/* A local tlb flush is needed before user execution can resume. */
|
|
||||||
cpumask_t tlb_stale_mask;
|
|
||||||
#endif
|
#endif
|
||||||
} mm_context_t;
|
} mm_context_t;
|
||||||
|
|
||||||
|
|
|
@ -9,4 +9,6 @@
|
||||||
int patch_text_nosync(void *addr, const void *insns, size_t len);
|
int patch_text_nosync(void *addr, const void *insns, size_t len);
|
||||||
int patch_text(void *addr, u32 *insns, int ninsns);
|
int patch_text(void *addr, u32 *insns, int ninsns);
|
||||||
|
|
||||||
|
extern int riscv_patch_in_stop_machine;
|
||||||
|
|
||||||
#endif /* _ASM_RISCV_PATCH_H */
|
#endif /* _ASM_RISCV_PATCH_H */
|
||||||
|
|
|
@ -12,6 +12,8 @@
|
||||||
#include <asm/errata_list.h>
|
#include <asm/errata_list.h>
|
||||||
|
|
||||||
#ifdef CONFIG_MMU
|
#ifdef CONFIG_MMU
|
||||||
|
extern unsigned long asid_mask;
|
||||||
|
|
||||||
static inline void local_flush_tlb_all(void)
|
static inline void local_flush_tlb_all(void)
|
||||||
{
|
{
|
||||||
__asm__ __volatile__ ("sfence.vma" : : : "memory");
|
__asm__ __volatile__ ("sfence.vma" : : : "memory");
|
||||||
|
@ -22,24 +24,6 @@ static inline void local_flush_tlb_page(unsigned long addr)
|
||||||
{
|
{
|
||||||
ALT_FLUSH_TLB_PAGE(__asm__ __volatile__ ("sfence.vma %0" : : "r" (addr) : "memory"));
|
ALT_FLUSH_TLB_PAGE(__asm__ __volatile__ ("sfence.vma %0" : : "r" (addr) : "memory"));
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void local_flush_tlb_all_asid(unsigned long asid)
|
|
||||||
{
|
|
||||||
__asm__ __volatile__ ("sfence.vma x0, %0"
|
|
||||||
:
|
|
||||||
: "r" (asid)
|
|
||||||
: "memory");
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void local_flush_tlb_page_asid(unsigned long addr,
|
|
||||||
unsigned long asid)
|
|
||||||
{
|
|
||||||
__asm__ __volatile__ ("sfence.vma %0, %1"
|
|
||||||
:
|
|
||||||
: "r" (addr), "r" (asid)
|
|
||||||
: "memory");
|
|
||||||
}
|
|
||||||
|
|
||||||
#else /* CONFIG_MMU */
|
#else /* CONFIG_MMU */
|
||||||
#define local_flush_tlb_all() do { } while (0)
|
#define local_flush_tlb_all() do { } while (0)
|
||||||
#define local_flush_tlb_page(addr) do { } while (0)
|
#define local_flush_tlb_page(addr) do { } while (0)
|
||||||
|
|
|
@ -14,6 +14,10 @@ COMPAT_LD := $(LD)
|
||||||
COMPAT_CC_FLAGS := -march=rv32g -mabi=ilp32
|
COMPAT_CC_FLAGS := -march=rv32g -mabi=ilp32
|
||||||
COMPAT_LD_FLAGS := -melf32lriscv
|
COMPAT_LD_FLAGS := -melf32lriscv
|
||||||
|
|
||||||
|
# Disable attributes, as they're useless and break the build.
|
||||||
|
COMPAT_CC_FLAGS += $(call cc-option,-mno-riscv-attribute)
|
||||||
|
COMPAT_CC_FLAGS += $(call as-option,-Wa$(comma)-mno-arch-attr)
|
||||||
|
|
||||||
# Files to link into the compat_vdso
|
# Files to link into the compat_vdso
|
||||||
obj-compat_vdso = $(patsubst %, %.o, $(compat_vdso-syms)) note.o
|
obj-compat_vdso = $(patsubst %, %.o, $(compat_vdso-syms)) note.o
|
||||||
|
|
||||||
|
|
|
@ -15,10 +15,19 @@
|
||||||
void ftrace_arch_code_modify_prepare(void) __acquires(&text_mutex)
|
void ftrace_arch_code_modify_prepare(void) __acquires(&text_mutex)
|
||||||
{
|
{
|
||||||
mutex_lock(&text_mutex);
|
mutex_lock(&text_mutex);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The code sequences we use for ftrace can't be patched while the
|
||||||
|
* kernel is running, so we need to use stop_machine() to modify them
|
||||||
|
* for now. This doesn't play nice with text_mutex, we use this flag
|
||||||
|
* to elide the check.
|
||||||
|
*/
|
||||||
|
riscv_patch_in_stop_machine = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ftrace_arch_code_modify_post_process(void) __releases(&text_mutex)
|
void ftrace_arch_code_modify_post_process(void) __releases(&text_mutex)
|
||||||
{
|
{
|
||||||
|
riscv_patch_in_stop_machine = false;
|
||||||
mutex_unlock(&text_mutex);
|
mutex_unlock(&text_mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -107,9 +116,9 @@ int ftrace_init_nop(struct module *mod, struct dyn_ftrace *rec)
|
||||||
{
|
{
|
||||||
int out;
|
int out;
|
||||||
|
|
||||||
ftrace_arch_code_modify_prepare();
|
mutex_lock(&text_mutex);
|
||||||
out = ftrace_make_nop(mod, rec, MCOUNT_ADDR);
|
out = ftrace_make_nop(mod, rec, MCOUNT_ADDR);
|
||||||
ftrace_arch_code_modify_post_process();
|
mutex_unlock(&text_mutex);
|
||||||
|
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
#include <asm/kprobes.h>
|
#include <asm/kprobes.h>
|
||||||
#include <asm/cacheflush.h>
|
#include <asm/cacheflush.h>
|
||||||
#include <asm/fixmap.h>
|
#include <asm/fixmap.h>
|
||||||
|
#include <asm/ftrace.h>
|
||||||
#include <asm/patch.h>
|
#include <asm/patch.h>
|
||||||
|
|
||||||
struct patch_insn {
|
struct patch_insn {
|
||||||
|
@ -20,6 +21,8 @@ struct patch_insn {
|
||||||
atomic_t cpu_count;
|
atomic_t cpu_count;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
int riscv_patch_in_stop_machine = false;
|
||||||
|
|
||||||
#ifdef CONFIG_MMU
|
#ifdef CONFIG_MMU
|
||||||
/*
|
/*
|
||||||
* The fix_to_virt(, idx) needs a const value (not a dynamic variable of
|
* The fix_to_virt(, idx) needs a const value (not a dynamic variable of
|
||||||
|
@ -60,7 +63,14 @@ static int patch_insn_write(void *addr, const void *insn, size_t len)
|
||||||
* Before reaching here, it was expected to lock the text_mutex
|
* Before reaching here, it was expected to lock the text_mutex
|
||||||
* already, so we don't need to give another lock here and could
|
* already, so we don't need to give another lock here and could
|
||||||
* ensure that it was safe between each cores.
|
* ensure that it was safe between each cores.
|
||||||
|
*
|
||||||
|
* We're currently using stop_machine() for ftrace & kprobes, and while
|
||||||
|
* that ensures text_mutex is held before installing the mappings it
|
||||||
|
* does not ensure text_mutex is held by the calling thread. That's
|
||||||
|
* safe but triggers a lockdep failure, so just elide it for that
|
||||||
|
* specific case.
|
||||||
*/
|
*/
|
||||||
|
if (!riscv_patch_in_stop_machine)
|
||||||
lockdep_assert_held(&text_mutex);
|
lockdep_assert_held(&text_mutex);
|
||||||
|
|
||||||
if (across_pages)
|
if (across_pages)
|
||||||
|
@ -125,6 +135,7 @@ NOKPROBE_SYMBOL(patch_text_cb);
|
||||||
|
|
||||||
int patch_text(void *addr, u32 *insns, int ninsns)
|
int patch_text(void *addr, u32 *insns, int ninsns)
|
||||||
{
|
{
|
||||||
|
int ret;
|
||||||
struct patch_insn patch = {
|
struct patch_insn patch = {
|
||||||
.addr = addr,
|
.addr = addr,
|
||||||
.insns = insns,
|
.insns = insns,
|
||||||
|
@ -132,7 +143,18 @@ int patch_text(void *addr, u32 *insns, int ninsns)
|
||||||
.cpu_count = ATOMIC_INIT(0),
|
.cpu_count = ATOMIC_INIT(0),
|
||||||
};
|
};
|
||||||
|
|
||||||
return stop_machine_cpuslocked(patch_text_cb,
|
/*
|
||||||
&patch, cpu_online_mask);
|
* kprobes takes text_mutex, before calling patch_text(), but as we call
|
||||||
|
* calls stop_machine(), the lockdep assertion in patch_insn_write()
|
||||||
|
* gets confused by the context in which the lock is taken.
|
||||||
|
* Instead, ensure the lock is held before calling stop_machine(), and
|
||||||
|
* set riscv_patch_in_stop_machine to skip the check in
|
||||||
|
* patch_insn_write().
|
||||||
|
*/
|
||||||
|
lockdep_assert_held(&text_mutex);
|
||||||
|
riscv_patch_in_stop_machine = true;
|
||||||
|
ret = stop_machine_cpuslocked(patch_text_cb, &patch, cpu_online_mask);
|
||||||
|
riscv_patch_in_stop_machine = false;
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
NOKPROBE_SYMBOL(patch_text);
|
NOKPROBE_SYMBOL(patch_text);
|
||||||
|
|
|
@ -101,7 +101,7 @@ void notrace walk_stackframe(struct task_struct *task,
|
||||||
while (!kstack_end(ksp)) {
|
while (!kstack_end(ksp)) {
|
||||||
if (__kernel_text_address(pc) && unlikely(!fn(arg, pc)))
|
if (__kernel_text_address(pc) && unlikely(!fn(arg, pc)))
|
||||||
break;
|
break;
|
||||||
pc = (*ksp++) - 0x4;
|
pc = READ_ONCE_NOCHECK(*ksp++) - 0x4;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -22,7 +22,7 @@ DEFINE_STATIC_KEY_FALSE(use_asid_allocator);
|
||||||
|
|
||||||
static unsigned long asid_bits;
|
static unsigned long asid_bits;
|
||||||
static unsigned long num_asids;
|
static unsigned long num_asids;
|
||||||
static unsigned long asid_mask;
|
unsigned long asid_mask;
|
||||||
|
|
||||||
static atomic_long_t current_version;
|
static atomic_long_t current_version;
|
||||||
|
|
||||||
|
@ -196,16 +196,6 @@ switch_mm_fast:
|
||||||
|
|
||||||
if (need_flush_tlb)
|
if (need_flush_tlb)
|
||||||
local_flush_tlb_all();
|
local_flush_tlb_all();
|
||||||
#ifdef CONFIG_SMP
|
|
||||||
else {
|
|
||||||
cpumask_t *mask = &mm->context.tlb_stale_mask;
|
|
||||||
|
|
||||||
if (cpumask_test_cpu(cpu, mask)) {
|
|
||||||
cpumask_clear_cpu(cpu, mask);
|
|
||||||
local_flush_tlb_all_asid(cntx & asid_mask);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void set_mm_noasid(struct mm_struct *mm)
|
static void set_mm_noasid(struct mm_struct *mm)
|
||||||
|
@ -215,12 +205,24 @@ static void set_mm_noasid(struct mm_struct *mm)
|
||||||
local_flush_tlb_all();
|
local_flush_tlb_all();
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void set_mm(struct mm_struct *mm, unsigned int cpu)
|
static inline void set_mm(struct mm_struct *prev,
|
||||||
|
struct mm_struct *next, unsigned int cpu)
|
||||||
{
|
{
|
||||||
if (static_branch_unlikely(&use_asid_allocator))
|
/*
|
||||||
set_mm_asid(mm, cpu);
|
* The mm_cpumask indicates which harts' TLBs contain the virtual
|
||||||
else
|
* address mapping of the mm. Compared to noasid, using asid
|
||||||
set_mm_noasid(mm);
|
* can't guarantee that stale TLB entries are invalidated because
|
||||||
|
* the asid mechanism wouldn't flush TLB for every switch_mm for
|
||||||
|
* performance. So when using asid, keep all CPUs footmarks in
|
||||||
|
* cpumask() until mm reset.
|
||||||
|
*/
|
||||||
|
cpumask_set_cpu(cpu, mm_cpumask(next));
|
||||||
|
if (static_branch_unlikely(&use_asid_allocator)) {
|
||||||
|
set_mm_asid(next, cpu);
|
||||||
|
} else {
|
||||||
|
cpumask_clear_cpu(cpu, mm_cpumask(prev));
|
||||||
|
set_mm_noasid(next);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __init asids_init(void)
|
static int __init asids_init(void)
|
||||||
|
@ -274,7 +276,8 @@ static int __init asids_init(void)
|
||||||
}
|
}
|
||||||
early_initcall(asids_init);
|
early_initcall(asids_init);
|
||||||
#else
|
#else
|
||||||
static inline void set_mm(struct mm_struct *mm, unsigned int cpu)
|
static inline void set_mm(struct mm_struct *prev,
|
||||||
|
struct mm_struct *next, unsigned int cpu)
|
||||||
{
|
{
|
||||||
/* Nothing to do here when there is no MMU */
|
/* Nothing to do here when there is no MMU */
|
||||||
}
|
}
|
||||||
|
@ -327,10 +330,7 @@ void switch_mm(struct mm_struct *prev, struct mm_struct *next,
|
||||||
*/
|
*/
|
||||||
cpu = smp_processor_id();
|
cpu = smp_processor_id();
|
||||||
|
|
||||||
cpumask_clear_cpu(cpu, mm_cpumask(prev));
|
set_mm(prev, next, cpu);
|
||||||
cpumask_set_cpu(cpu, mm_cpumask(next));
|
|
||||||
|
|
||||||
set_mm(next, cpu);
|
|
||||||
|
|
||||||
flush_icache_deferred(next, cpu);
|
flush_icache_deferred(next, cpu);
|
||||||
}
|
}
|
||||||
|
|
|
@ -143,6 +143,8 @@ static inline void vmalloc_fault(struct pt_regs *regs, int code, unsigned long a
|
||||||
no_context(regs, addr);
|
no_context(regs, addr);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (pud_leaf(*pud_k))
|
||||||
|
goto flush_tlb;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Since the vmalloc area is global, it is unnecessary
|
* Since the vmalloc area is global, it is unnecessary
|
||||||
|
@ -153,6 +155,8 @@ static inline void vmalloc_fault(struct pt_regs *regs, int code, unsigned long a
|
||||||
no_context(regs, addr);
|
no_context(regs, addr);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (pmd_leaf(*pmd_k))
|
||||||
|
goto flush_tlb;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Make sure the actual PTE exists as well to
|
* Make sure the actual PTE exists as well to
|
||||||
|
@ -172,6 +176,7 @@ static inline void vmalloc_fault(struct pt_regs *regs, int code, unsigned long a
|
||||||
* ordering constraint, not a cache flush; it is
|
* ordering constraint, not a cache flush; it is
|
||||||
* necessary even after writing invalid entries.
|
* necessary even after writing invalid entries.
|
||||||
*/
|
*/
|
||||||
|
flush_tlb:
|
||||||
local_flush_tlb_page(addr);
|
local_flush_tlb_page(addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,23 @@
|
||||||
#include <linux/sched.h>
|
#include <linux/sched.h>
|
||||||
#include <asm/sbi.h>
|
#include <asm/sbi.h>
|
||||||
#include <asm/mmu_context.h>
|
#include <asm/mmu_context.h>
|
||||||
#include <asm/tlbflush.h>
|
|
||||||
|
static inline void local_flush_tlb_all_asid(unsigned long asid)
|
||||||
|
{
|
||||||
|
__asm__ __volatile__ ("sfence.vma x0, %0"
|
||||||
|
:
|
||||||
|
: "r" (asid)
|
||||||
|
: "memory");
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void local_flush_tlb_page_asid(unsigned long addr,
|
||||||
|
unsigned long asid)
|
||||||
|
{
|
||||||
|
__asm__ __volatile__ ("sfence.vma %0, %1"
|
||||||
|
:
|
||||||
|
: "r" (addr), "r" (asid)
|
||||||
|
: "memory");
|
||||||
|
}
|
||||||
|
|
||||||
void flush_tlb_all(void)
|
void flush_tlb_all(void)
|
||||||
{
|
{
|
||||||
|
@ -15,7 +31,6 @@ void flush_tlb_all(void)
|
||||||
static void __sbi_tlb_flush_range(struct mm_struct *mm, unsigned long start,
|
static void __sbi_tlb_flush_range(struct mm_struct *mm, unsigned long start,
|
||||||
unsigned long size, unsigned long stride)
|
unsigned long size, unsigned long stride)
|
||||||
{
|
{
|
||||||
struct cpumask *pmask = &mm->context.tlb_stale_mask;
|
|
||||||
struct cpumask *cmask = mm_cpumask(mm);
|
struct cpumask *cmask = mm_cpumask(mm);
|
||||||
unsigned int cpuid;
|
unsigned int cpuid;
|
||||||
bool broadcast;
|
bool broadcast;
|
||||||
|
@ -27,16 +42,7 @@ static void __sbi_tlb_flush_range(struct mm_struct *mm, unsigned long start,
|
||||||
/* check if the tlbflush needs to be sent to other CPUs */
|
/* check if the tlbflush needs to be sent to other CPUs */
|
||||||
broadcast = cpumask_any_but(cmask, cpuid) < nr_cpu_ids;
|
broadcast = cpumask_any_but(cmask, cpuid) < nr_cpu_ids;
|
||||||
if (static_branch_unlikely(&use_asid_allocator)) {
|
if (static_branch_unlikely(&use_asid_allocator)) {
|
||||||
unsigned long asid = atomic_long_read(&mm->context.id);
|
unsigned long asid = atomic_long_read(&mm->context.id) & asid_mask;
|
||||||
|
|
||||||
/*
|
|
||||||
* TLB will be immediately flushed on harts concurrently
|
|
||||||
* executing this MM context. TLB flush on other harts
|
|
||||||
* is deferred until this MM context migrates there.
|
|
||||||
*/
|
|
||||||
cpumask_setall(pmask);
|
|
||||||
cpumask_clear_cpu(cpuid, pmask);
|
|
||||||
cpumask_andnot(pmask, pmask, cmask);
|
|
||||||
|
|
||||||
if (broadcast) {
|
if (broadcast) {
|
||||||
sbi_remote_sfence_vma_asid(cmask, start, size, asid);
|
sbi_remote_sfence_vma_asid(cmask, start, size, asid);
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
#include <linux/filter.h>
|
#include <linux/filter.h>
|
||||||
#include <linux/memory.h>
|
#include <linux/memory.h>
|
||||||
#include <linux/stop_machine.h>
|
#include <linux/stop_machine.h>
|
||||||
|
#include <asm/patch.h>
|
||||||
#include "bpf_jit.h"
|
#include "bpf_jit.h"
|
||||||
|
|
||||||
#define RV_REG_TCC RV_REG_A6
|
#define RV_REG_TCC RV_REG_A6
|
||||||
|
|
|
@ -57,11 +57,19 @@ repeat:
|
||||||
if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_data.start && initrd_data.size &&
|
if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_data.start && initrd_data.size &&
|
||||||
intersects(initrd_data.start, initrd_data.size, safe_addr, size))
|
intersects(initrd_data.start, initrd_data.size, safe_addr, size))
|
||||||
safe_addr = initrd_data.start + initrd_data.size;
|
safe_addr = initrd_data.start + initrd_data.size;
|
||||||
|
if (intersects(safe_addr, size, (unsigned long)comps, comps->len)) {
|
||||||
|
safe_addr = (unsigned long)comps + comps->len;
|
||||||
|
goto repeat;
|
||||||
|
}
|
||||||
for_each_rb_entry(comp, comps)
|
for_each_rb_entry(comp, comps)
|
||||||
if (intersects(safe_addr, size, comp->addr, comp->len)) {
|
if (intersects(safe_addr, size, comp->addr, comp->len)) {
|
||||||
safe_addr = comp->addr + comp->len;
|
safe_addr = comp->addr + comp->len;
|
||||||
goto repeat;
|
goto repeat;
|
||||||
}
|
}
|
||||||
|
if (intersects(safe_addr, size, (unsigned long)certs, certs->len)) {
|
||||||
|
safe_addr = (unsigned long)certs + certs->len;
|
||||||
|
goto repeat;
|
||||||
|
}
|
||||||
for_each_rb_entry(cert, certs)
|
for_each_rb_entry(cert, certs)
|
||||||
if (intersects(safe_addr, size, cert->addr, cert->len)) {
|
if (intersects(safe_addr, size, cert->addr, cert->len)) {
|
||||||
safe_addr = cert->addr + cert->len;
|
safe_addr = cert->addr + cert->len;
|
||||||
|
|
|
@ -23,7 +23,6 @@ CONFIG_NUMA_BALANCING=y
|
||||||
CONFIG_MEMCG=y
|
CONFIG_MEMCG=y
|
||||||
CONFIG_BLK_CGROUP=y
|
CONFIG_BLK_CGROUP=y
|
||||||
CONFIG_CFS_BANDWIDTH=y
|
CONFIG_CFS_BANDWIDTH=y
|
||||||
CONFIG_RT_GROUP_SCHED=y
|
|
||||||
CONFIG_CGROUP_PIDS=y
|
CONFIG_CGROUP_PIDS=y
|
||||||
CONFIG_CGROUP_RDMA=y
|
CONFIG_CGROUP_RDMA=y
|
||||||
CONFIG_CGROUP_FREEZER=y
|
CONFIG_CGROUP_FREEZER=y
|
||||||
|
@ -90,7 +89,6 @@ CONFIG_MINIX_SUBPARTITION=y
|
||||||
CONFIG_SOLARIS_X86_PARTITION=y
|
CONFIG_SOLARIS_X86_PARTITION=y
|
||||||
CONFIG_UNIXWARE_DISKLABEL=y
|
CONFIG_UNIXWARE_DISKLABEL=y
|
||||||
CONFIG_IOSCHED_BFQ=y
|
CONFIG_IOSCHED_BFQ=y
|
||||||
CONFIG_BFQ_GROUP_IOSCHED=y
|
|
||||||
CONFIG_BINFMT_MISC=m
|
CONFIG_BINFMT_MISC=m
|
||||||
CONFIG_ZSWAP=y
|
CONFIG_ZSWAP=y
|
||||||
CONFIG_ZSMALLOC_STAT=y
|
CONFIG_ZSMALLOC_STAT=y
|
||||||
|
@ -298,7 +296,6 @@ CONFIG_IP_NF_TARGET_REJECT=m
|
||||||
CONFIG_IP_NF_NAT=m
|
CONFIG_IP_NF_NAT=m
|
||||||
CONFIG_IP_NF_TARGET_MASQUERADE=m
|
CONFIG_IP_NF_TARGET_MASQUERADE=m
|
||||||
CONFIG_IP_NF_MANGLE=m
|
CONFIG_IP_NF_MANGLE=m
|
||||||
CONFIG_IP_NF_TARGET_CLUSTERIP=m
|
|
||||||
CONFIG_IP_NF_TARGET_ECN=m
|
CONFIG_IP_NF_TARGET_ECN=m
|
||||||
CONFIG_IP_NF_TARGET_TTL=m
|
CONFIG_IP_NF_TARGET_TTL=m
|
||||||
CONFIG_IP_NF_RAW=m
|
CONFIG_IP_NF_RAW=m
|
||||||
|
@ -340,7 +337,6 @@ CONFIG_BRIDGE_MRP=y
|
||||||
CONFIG_VLAN_8021Q=m
|
CONFIG_VLAN_8021Q=m
|
||||||
CONFIG_VLAN_8021Q_GVRP=y
|
CONFIG_VLAN_8021Q_GVRP=y
|
||||||
CONFIG_NET_SCHED=y
|
CONFIG_NET_SCHED=y
|
||||||
CONFIG_NET_SCH_CBQ=m
|
|
||||||
CONFIG_NET_SCH_HTB=m
|
CONFIG_NET_SCH_HTB=m
|
||||||
CONFIG_NET_SCH_HFSC=m
|
CONFIG_NET_SCH_HFSC=m
|
||||||
CONFIG_NET_SCH_PRIO=m
|
CONFIG_NET_SCH_PRIO=m
|
||||||
|
@ -351,7 +347,6 @@ CONFIG_NET_SCH_SFQ=m
|
||||||
CONFIG_NET_SCH_TEQL=m
|
CONFIG_NET_SCH_TEQL=m
|
||||||
CONFIG_NET_SCH_TBF=m
|
CONFIG_NET_SCH_TBF=m
|
||||||
CONFIG_NET_SCH_GRED=m
|
CONFIG_NET_SCH_GRED=m
|
||||||
CONFIG_NET_SCH_DSMARK=m
|
|
||||||
CONFIG_NET_SCH_NETEM=m
|
CONFIG_NET_SCH_NETEM=m
|
||||||
CONFIG_NET_SCH_DRR=m
|
CONFIG_NET_SCH_DRR=m
|
||||||
CONFIG_NET_SCH_MQPRIO=m
|
CONFIG_NET_SCH_MQPRIO=m
|
||||||
|
@ -363,14 +358,11 @@ CONFIG_NET_SCH_INGRESS=m
|
||||||
CONFIG_NET_SCH_PLUG=m
|
CONFIG_NET_SCH_PLUG=m
|
||||||
CONFIG_NET_SCH_ETS=m
|
CONFIG_NET_SCH_ETS=m
|
||||||
CONFIG_NET_CLS_BASIC=m
|
CONFIG_NET_CLS_BASIC=m
|
||||||
CONFIG_NET_CLS_TCINDEX=m
|
|
||||||
CONFIG_NET_CLS_ROUTE4=m
|
CONFIG_NET_CLS_ROUTE4=m
|
||||||
CONFIG_NET_CLS_FW=m
|
CONFIG_NET_CLS_FW=m
|
||||||
CONFIG_NET_CLS_U32=m
|
CONFIG_NET_CLS_U32=m
|
||||||
CONFIG_CLS_U32_PERF=y
|
CONFIG_CLS_U32_PERF=y
|
||||||
CONFIG_CLS_U32_MARK=y
|
CONFIG_CLS_U32_MARK=y
|
||||||
CONFIG_NET_CLS_RSVP=m
|
|
||||||
CONFIG_NET_CLS_RSVP6=m
|
|
||||||
CONFIG_NET_CLS_FLOW=m
|
CONFIG_NET_CLS_FLOW=m
|
||||||
CONFIG_NET_CLS_CGROUP=y
|
CONFIG_NET_CLS_CGROUP=y
|
||||||
CONFIG_NET_CLS_BPF=m
|
CONFIG_NET_CLS_BPF=m
|
||||||
|
@ -584,7 +576,7 @@ CONFIG_DIAG288_WATCHDOG=m
|
||||||
CONFIG_FB=y
|
CONFIG_FB=y
|
||||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||||
CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
|
CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
|
||||||
# CONFIG_HID is not set
|
# CONFIG_HID_SUPPORT is not set
|
||||||
# CONFIG_USB_SUPPORT is not set
|
# CONFIG_USB_SUPPORT is not set
|
||||||
CONFIG_INFINIBAND=m
|
CONFIG_INFINIBAND=m
|
||||||
CONFIG_INFINIBAND_USER_ACCESS=m
|
CONFIG_INFINIBAND_USER_ACCESS=m
|
||||||
|
@ -828,6 +820,7 @@ CONFIG_PANIC_ON_OOPS=y
|
||||||
CONFIG_DETECT_HUNG_TASK=y
|
CONFIG_DETECT_HUNG_TASK=y
|
||||||
CONFIG_WQ_WATCHDOG=y
|
CONFIG_WQ_WATCHDOG=y
|
||||||
CONFIG_TEST_LOCKUP=m
|
CONFIG_TEST_LOCKUP=m
|
||||||
|
CONFIG_DEBUG_PREEMPT=y
|
||||||
CONFIG_PROVE_LOCKING=y
|
CONFIG_PROVE_LOCKING=y
|
||||||
CONFIG_LOCK_STAT=y
|
CONFIG_LOCK_STAT=y
|
||||||
CONFIG_DEBUG_ATOMIC_SLEEP=y
|
CONFIG_DEBUG_ATOMIC_SLEEP=y
|
||||||
|
@ -843,6 +836,7 @@ CONFIG_RCU_CPU_STALL_TIMEOUT=300
|
||||||
# CONFIG_RCU_TRACE is not set
|
# CONFIG_RCU_TRACE is not set
|
||||||
CONFIG_LATENCYTOP=y
|
CONFIG_LATENCYTOP=y
|
||||||
CONFIG_BOOTTIME_TRACING=y
|
CONFIG_BOOTTIME_TRACING=y
|
||||||
|
CONFIG_FPROBE=y
|
||||||
CONFIG_FUNCTION_PROFILER=y
|
CONFIG_FUNCTION_PROFILER=y
|
||||||
CONFIG_STACK_TRACER=y
|
CONFIG_STACK_TRACER=y
|
||||||
CONFIG_IRQSOFF_TRACER=y
|
CONFIG_IRQSOFF_TRACER=y
|
||||||
|
@ -857,6 +851,7 @@ CONFIG_SAMPLES=y
|
||||||
CONFIG_SAMPLE_TRACE_PRINTK=m
|
CONFIG_SAMPLE_TRACE_PRINTK=m
|
||||||
CONFIG_SAMPLE_FTRACE_DIRECT=m
|
CONFIG_SAMPLE_FTRACE_DIRECT=m
|
||||||
CONFIG_SAMPLE_FTRACE_DIRECT_MULTI=m
|
CONFIG_SAMPLE_FTRACE_DIRECT_MULTI=m
|
||||||
|
CONFIG_SAMPLE_FTRACE_OPS=m
|
||||||
CONFIG_DEBUG_ENTRY=y
|
CONFIG_DEBUG_ENTRY=y
|
||||||
CONFIG_CIO_INJECT=y
|
CONFIG_CIO_INJECT=y
|
||||||
CONFIG_KUNIT=m
|
CONFIG_KUNIT=m
|
||||||
|
|
|
@ -21,7 +21,6 @@ CONFIG_NUMA_BALANCING=y
|
||||||
CONFIG_MEMCG=y
|
CONFIG_MEMCG=y
|
||||||
CONFIG_BLK_CGROUP=y
|
CONFIG_BLK_CGROUP=y
|
||||||
CONFIG_CFS_BANDWIDTH=y
|
CONFIG_CFS_BANDWIDTH=y
|
||||||
CONFIG_RT_GROUP_SCHED=y
|
|
||||||
CONFIG_CGROUP_PIDS=y
|
CONFIG_CGROUP_PIDS=y
|
||||||
CONFIG_CGROUP_RDMA=y
|
CONFIG_CGROUP_RDMA=y
|
||||||
CONFIG_CGROUP_FREEZER=y
|
CONFIG_CGROUP_FREEZER=y
|
||||||
|
@ -85,7 +84,6 @@ CONFIG_MINIX_SUBPARTITION=y
|
||||||
CONFIG_SOLARIS_X86_PARTITION=y
|
CONFIG_SOLARIS_X86_PARTITION=y
|
||||||
CONFIG_UNIXWARE_DISKLABEL=y
|
CONFIG_UNIXWARE_DISKLABEL=y
|
||||||
CONFIG_IOSCHED_BFQ=y
|
CONFIG_IOSCHED_BFQ=y
|
||||||
CONFIG_BFQ_GROUP_IOSCHED=y
|
|
||||||
CONFIG_BINFMT_MISC=m
|
CONFIG_BINFMT_MISC=m
|
||||||
CONFIG_ZSWAP=y
|
CONFIG_ZSWAP=y
|
||||||
CONFIG_ZSMALLOC_STAT=y
|
CONFIG_ZSMALLOC_STAT=y
|
||||||
|
@ -289,7 +287,6 @@ CONFIG_IP_NF_TARGET_REJECT=m
|
||||||
CONFIG_IP_NF_NAT=m
|
CONFIG_IP_NF_NAT=m
|
||||||
CONFIG_IP_NF_TARGET_MASQUERADE=m
|
CONFIG_IP_NF_TARGET_MASQUERADE=m
|
||||||
CONFIG_IP_NF_MANGLE=m
|
CONFIG_IP_NF_MANGLE=m
|
||||||
CONFIG_IP_NF_TARGET_CLUSTERIP=m
|
|
||||||
CONFIG_IP_NF_TARGET_ECN=m
|
CONFIG_IP_NF_TARGET_ECN=m
|
||||||
CONFIG_IP_NF_TARGET_TTL=m
|
CONFIG_IP_NF_TARGET_TTL=m
|
||||||
CONFIG_IP_NF_RAW=m
|
CONFIG_IP_NF_RAW=m
|
||||||
|
@ -330,7 +327,6 @@ CONFIG_BRIDGE_MRP=y
|
||||||
CONFIG_VLAN_8021Q=m
|
CONFIG_VLAN_8021Q=m
|
||||||
CONFIG_VLAN_8021Q_GVRP=y
|
CONFIG_VLAN_8021Q_GVRP=y
|
||||||
CONFIG_NET_SCHED=y
|
CONFIG_NET_SCHED=y
|
||||||
CONFIG_NET_SCH_CBQ=m
|
|
||||||
CONFIG_NET_SCH_HTB=m
|
CONFIG_NET_SCH_HTB=m
|
||||||
CONFIG_NET_SCH_HFSC=m
|
CONFIG_NET_SCH_HFSC=m
|
||||||
CONFIG_NET_SCH_PRIO=m
|
CONFIG_NET_SCH_PRIO=m
|
||||||
|
@ -341,7 +337,6 @@ CONFIG_NET_SCH_SFQ=m
|
||||||
CONFIG_NET_SCH_TEQL=m
|
CONFIG_NET_SCH_TEQL=m
|
||||||
CONFIG_NET_SCH_TBF=m
|
CONFIG_NET_SCH_TBF=m
|
||||||
CONFIG_NET_SCH_GRED=m
|
CONFIG_NET_SCH_GRED=m
|
||||||
CONFIG_NET_SCH_DSMARK=m
|
|
||||||
CONFIG_NET_SCH_NETEM=m
|
CONFIG_NET_SCH_NETEM=m
|
||||||
CONFIG_NET_SCH_DRR=m
|
CONFIG_NET_SCH_DRR=m
|
||||||
CONFIG_NET_SCH_MQPRIO=m
|
CONFIG_NET_SCH_MQPRIO=m
|
||||||
|
@ -353,14 +348,11 @@ CONFIG_NET_SCH_INGRESS=m
|
||||||
CONFIG_NET_SCH_PLUG=m
|
CONFIG_NET_SCH_PLUG=m
|
||||||
CONFIG_NET_SCH_ETS=m
|
CONFIG_NET_SCH_ETS=m
|
||||||
CONFIG_NET_CLS_BASIC=m
|
CONFIG_NET_CLS_BASIC=m
|
||||||
CONFIG_NET_CLS_TCINDEX=m
|
|
||||||
CONFIG_NET_CLS_ROUTE4=m
|
CONFIG_NET_CLS_ROUTE4=m
|
||||||
CONFIG_NET_CLS_FW=m
|
CONFIG_NET_CLS_FW=m
|
||||||
CONFIG_NET_CLS_U32=m
|
CONFIG_NET_CLS_U32=m
|
||||||
CONFIG_CLS_U32_PERF=y
|
CONFIG_CLS_U32_PERF=y
|
||||||
CONFIG_CLS_U32_MARK=y
|
CONFIG_CLS_U32_MARK=y
|
||||||
CONFIG_NET_CLS_RSVP=m
|
|
||||||
CONFIG_NET_CLS_RSVP6=m
|
|
||||||
CONFIG_NET_CLS_FLOW=m
|
CONFIG_NET_CLS_FLOW=m
|
||||||
CONFIG_NET_CLS_CGROUP=y
|
CONFIG_NET_CLS_CGROUP=y
|
||||||
CONFIG_NET_CLS_BPF=m
|
CONFIG_NET_CLS_BPF=m
|
||||||
|
@ -573,7 +565,7 @@ CONFIG_DIAG288_WATCHDOG=m
|
||||||
CONFIG_FB=y
|
CONFIG_FB=y
|
||||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||||
CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
|
CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
|
||||||
# CONFIG_HID is not set
|
# CONFIG_HID_SUPPORT is not set
|
||||||
# CONFIG_USB_SUPPORT is not set
|
# CONFIG_USB_SUPPORT is not set
|
||||||
CONFIG_INFINIBAND=m
|
CONFIG_INFINIBAND=m
|
||||||
CONFIG_INFINIBAND_USER_ACCESS=m
|
CONFIG_INFINIBAND_USER_ACCESS=m
|
||||||
|
@ -795,6 +787,7 @@ CONFIG_RCU_REF_SCALE_TEST=m
|
||||||
CONFIG_RCU_CPU_STALL_TIMEOUT=60
|
CONFIG_RCU_CPU_STALL_TIMEOUT=60
|
||||||
CONFIG_LATENCYTOP=y
|
CONFIG_LATENCYTOP=y
|
||||||
CONFIG_BOOTTIME_TRACING=y
|
CONFIG_BOOTTIME_TRACING=y
|
||||||
|
CONFIG_FPROBE=y
|
||||||
CONFIG_FUNCTION_PROFILER=y
|
CONFIG_FUNCTION_PROFILER=y
|
||||||
CONFIG_STACK_TRACER=y
|
CONFIG_STACK_TRACER=y
|
||||||
CONFIG_SCHED_TRACER=y
|
CONFIG_SCHED_TRACER=y
|
||||||
|
@ -805,6 +798,7 @@ CONFIG_SAMPLES=y
|
||||||
CONFIG_SAMPLE_TRACE_PRINTK=m
|
CONFIG_SAMPLE_TRACE_PRINTK=m
|
||||||
CONFIG_SAMPLE_FTRACE_DIRECT=m
|
CONFIG_SAMPLE_FTRACE_DIRECT=m
|
||||||
CONFIG_SAMPLE_FTRACE_DIRECT_MULTI=m
|
CONFIG_SAMPLE_FTRACE_DIRECT_MULTI=m
|
||||||
|
CONFIG_SAMPLE_FTRACE_OPS=m
|
||||||
CONFIG_KUNIT=m
|
CONFIG_KUNIT=m
|
||||||
CONFIG_KUNIT_DEBUGFS=y
|
CONFIG_KUNIT_DEBUGFS=y
|
||||||
CONFIG_LKDTM=m
|
CONFIG_LKDTM=m
|
||||||
|
|
|
@ -58,7 +58,7 @@ CONFIG_ZFCP=y
|
||||||
# CONFIG_VMCP is not set
|
# CONFIG_VMCP is not set
|
||||||
# CONFIG_MONWRITER is not set
|
# CONFIG_MONWRITER is not set
|
||||||
# CONFIG_S390_VMUR is not set
|
# CONFIG_S390_VMUR is not set
|
||||||
# CONFIG_HID is not set
|
# CONFIG_HID_SUPPORT is not set
|
||||||
# CONFIG_VIRTIO_MENU is not set
|
# CONFIG_VIRTIO_MENU is not set
|
||||||
# CONFIG_VHOST_MENU is not set
|
# CONFIG_VHOST_MENU is not set
|
||||||
# CONFIG_IOMMU_SUPPORT is not set
|
# CONFIG_IOMMU_SUPPORT is not set
|
||||||
|
|
|
@ -544,8 +544,7 @@ static struct resource *__alloc_res(struct zpci_dev *zdev, unsigned long start,
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
int zpci_setup_bus_resources(struct zpci_dev *zdev,
|
int zpci_setup_bus_resources(struct zpci_dev *zdev)
|
||||||
struct list_head *resources)
|
|
||||||
{
|
{
|
||||||
unsigned long addr, size, flags;
|
unsigned long addr, size, flags;
|
||||||
struct resource *res;
|
struct resource *res;
|
||||||
|
@ -581,7 +580,6 @@ int zpci_setup_bus_resources(struct zpci_dev *zdev,
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
zdev->bars[i].res = res;
|
zdev->bars[i].res = res;
|
||||||
pci_add_resource(resources, res);
|
|
||||||
}
|
}
|
||||||
zdev->has_resources = 1;
|
zdev->has_resources = 1;
|
||||||
|
|
||||||
|
@ -590,17 +588,23 @@ int zpci_setup_bus_resources(struct zpci_dev *zdev,
|
||||||
|
|
||||||
static void zpci_cleanup_bus_resources(struct zpci_dev *zdev)
|
static void zpci_cleanup_bus_resources(struct zpci_dev *zdev)
|
||||||
{
|
{
|
||||||
|
struct resource *res;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
pci_lock_rescan_remove();
|
||||||
for (i = 0; i < PCI_STD_NUM_BARS; i++) {
|
for (i = 0; i < PCI_STD_NUM_BARS; i++) {
|
||||||
if (!zdev->bars[i].size || !zdev->bars[i].res)
|
res = zdev->bars[i].res;
|
||||||
|
if (!res)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
release_resource(res);
|
||||||
|
pci_bus_remove_resource(zdev->zbus->bus, res);
|
||||||
zpci_free_iomap(zdev, zdev->bars[i].map_idx);
|
zpci_free_iomap(zdev, zdev->bars[i].map_idx);
|
||||||
release_resource(zdev->bars[i].res);
|
zdev->bars[i].res = NULL;
|
||||||
kfree(zdev->bars[i].res);
|
kfree(res);
|
||||||
}
|
}
|
||||||
zdev->has_resources = 0;
|
zdev->has_resources = 0;
|
||||||
|
pci_unlock_rescan_remove();
|
||||||
}
|
}
|
||||||
|
|
||||||
int pcibios_device_add(struct pci_dev *pdev)
|
int pcibios_device_add(struct pci_dev *pdev)
|
||||||
|
|
|
@ -41,9 +41,7 @@ static int zpci_nb_devices;
|
||||||
*/
|
*/
|
||||||
static int zpci_bus_prepare_device(struct zpci_dev *zdev)
|
static int zpci_bus_prepare_device(struct zpci_dev *zdev)
|
||||||
{
|
{
|
||||||
struct resource_entry *window, *n;
|
int rc, i;
|
||||||
struct resource *res;
|
|
||||||
int rc;
|
|
||||||
|
|
||||||
if (!zdev_enabled(zdev)) {
|
if (!zdev_enabled(zdev)) {
|
||||||
rc = zpci_enable_device(zdev);
|
rc = zpci_enable_device(zdev);
|
||||||
|
@ -57,10 +55,10 @@ static int zpci_bus_prepare_device(struct zpci_dev *zdev)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!zdev->has_resources) {
|
if (!zdev->has_resources) {
|
||||||
zpci_setup_bus_resources(zdev, &zdev->zbus->resources);
|
zpci_setup_bus_resources(zdev);
|
||||||
resource_list_for_each_entry_safe(window, n, &zdev->zbus->resources) {
|
for (i = 0; i < PCI_STD_NUM_BARS; i++) {
|
||||||
res = window->res;
|
if (zdev->bars[i].res)
|
||||||
pci_bus_add_resource(zdev->zbus->bus, res, 0);
|
pci_bus_add_resource(zdev->zbus->bus, zdev->bars[i].res, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue