Merge branch 'nfsd-5.8' of git://linux-nfs.org/~cel/cel-2.6 into for-5.8-incoming
Highlights of this series: * Remove serialization of sending RPC/RDMA Replies * Convert the TCP socket send path to use xdr_buf::bvecs (pre-requisite for RPC-on-TLS) * Fix svcrdma backchannel sendto return code * Convert a number of dprintk call sites to use tracepoints * Fix the "suggest braces around empty body in an 'else' statement" warning
This commit is contained in:
@@ -112,6 +112,20 @@ used when printing stack backtraces. The specifier takes into
|
|||||||
consideration the effect of compiler optimisations which may occur
|
consideration the effect of compiler optimisations which may occur
|
||||||
when tail-calls are used and marked with the noreturn GCC attribute.
|
when tail-calls are used and marked with the noreturn GCC attribute.
|
||||||
|
|
||||||
|
Probed Pointers from BPF / tracing
|
||||||
|
----------------------------------
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
%pks kernel string
|
||||||
|
%pus user string
|
||||||
|
|
||||||
|
The ``k`` and ``u`` specifiers are used for printing prior probed memory from
|
||||||
|
either kernel memory (k) or user memory (u). The subsequent ``s`` specifier
|
||||||
|
results in printing a string. For direct use in regular vsnprintf() the (k)
|
||||||
|
and (u) annotation is ignored, however, when used out of BPF's bpf_trace_printk(),
|
||||||
|
for example, it reads the memory it is pointing to without faulting.
|
||||||
|
|
||||||
Kernel Pointers
|
Kernel Pointers
|
||||||
---------------
|
---------------
|
||||||
|
|
||||||
|
@@ -10,7 +10,8 @@ Required properties:
|
|||||||
- compatible :
|
- compatible :
|
||||||
- "fsl,vf610-edma" for eDMA used similar to that on Vybrid vf610 SoC
|
- "fsl,vf610-edma" for eDMA used similar to that on Vybrid vf610 SoC
|
||||||
- "fsl,imx7ulp-edma" for eDMA2 used similar to that on i.mx7ulp
|
- "fsl,imx7ulp-edma" for eDMA2 used similar to that on i.mx7ulp
|
||||||
- "fsl,fsl,ls1028a-edma" for eDMA used similar to that on Vybrid vf610 SoC
|
- "fsl,ls1028a-edma" followed by "fsl,vf610-edma" for eDMA used on the
|
||||||
|
LS1028A SoC.
|
||||||
- reg : Specifies base physical address(s) and size of the eDMA registers.
|
- reg : Specifies base physical address(s) and size of the eDMA registers.
|
||||||
The 1st region is eDMA control register's address and size.
|
The 1st region is eDMA control register's address and size.
|
||||||
The 2nd and the 3rd regions are programmable channel multiplexing
|
The 2nd and the 3rd regions are programmable channel multiplexing
|
||||||
|
@@ -61,8 +61,8 @@ The ``ice`` driver reports the following versions
|
|||||||
- running
|
- running
|
||||||
- ICE OS Default Package
|
- ICE OS Default Package
|
||||||
- The name of the DDP package that is active in the device. The DDP
|
- The name of the DDP package that is active in the device. The DDP
|
||||||
package is loaded by the driver during initialization. Each varation
|
package is loaded by the driver during initialization. Each
|
||||||
of DDP package shall have a unique name.
|
variation of the DDP package has a unique name.
|
||||||
* - ``fw.app``
|
* - ``fw.app``
|
||||||
- running
|
- running
|
||||||
- 1.3.1.0
|
- 1.3.1.0
|
||||||
|
@@ -27,9 +27,8 @@ differences are:
|
|||||||
3. Raw Gadget provides a way to select a UDC device/driver to bind to,
|
3. Raw Gadget provides a way to select a UDC device/driver to bind to,
|
||||||
while GadgetFS currently binds to the first available UDC.
|
while GadgetFS currently binds to the first available UDC.
|
||||||
|
|
||||||
4. Raw Gadget uses predictable endpoint names (handles) across different
|
4. Raw Gadget explicitly exposes information about endpoints addresses and
|
||||||
UDCs (as long as UDCs have enough endpoints of each required transfer
|
capabilities allowing a user to write UDC-agnostic gadgets.
|
||||||
type).
|
|
||||||
|
|
||||||
5. Raw Gadget has ioctl-based interface instead of a filesystem-based one.
|
5. Raw Gadget has ioctl-based interface instead of a filesystem-based one.
|
||||||
|
|
||||||
@@ -50,12 +49,36 @@ The typical usage of Raw Gadget looks like:
|
|||||||
Raw Gadget and react to those depending on what kind of USB device
|
Raw Gadget and react to those depending on what kind of USB device
|
||||||
needs to be emulated.
|
needs to be emulated.
|
||||||
|
|
||||||
|
Note, that some UDC drivers have fixed addresses assigned to endpoints, and
|
||||||
|
therefore arbitrary endpoint addresses can't be used in the descriptors.
|
||||||
|
Nevertheles, Raw Gadget provides a UDC-agnostic way to write USB gadgets.
|
||||||
|
Once a USB_RAW_EVENT_CONNECT event is received via USB_RAW_IOCTL_EVENT_FETCH,
|
||||||
|
the USB_RAW_IOCTL_EPS_INFO ioctl can be used to find out information about
|
||||||
|
endpoints that the UDC driver has. Based on that information, the user must
|
||||||
|
chose UDC endpoints that will be used for the gadget being emulated, and
|
||||||
|
properly assign addresses in endpoint descriptors.
|
||||||
|
|
||||||
|
You can find usage examples (along with a test suite) here:
|
||||||
|
|
||||||
|
https://github.com/xairy/raw-gadget
|
||||||
|
|
||||||
|
Internal details
|
||||||
|
~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Currently every endpoint read/write ioctl submits a USB request and waits until
|
||||||
|
its completion. This is the desired mode for coverage-guided fuzzing (as we'd
|
||||||
|
like all USB request processing happen during the lifetime of a syscall),
|
||||||
|
and must be kept in the implementation. (This might be slow for real world
|
||||||
|
applications, thus the O_NONBLOCK improvement suggestion below.)
|
||||||
|
|
||||||
Potential future improvements
|
Potential future improvements
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
- Implement ioctl's for setting/clearing halt status on endpoints.
|
- Report more events (suspend, resume, etc.) through USB_RAW_IOCTL_EVENT_FETCH.
|
||||||
|
|
||||||
- Reporting more events (suspend, resume, etc.) through
|
|
||||||
USB_RAW_IOCTL_EVENT_FETCH.
|
|
||||||
|
|
||||||
- Support O_NONBLOCK I/O.
|
- Support O_NONBLOCK I/O.
|
||||||
|
|
||||||
|
- Support USB 3 features (accept SS endpoint companion descriptor when
|
||||||
|
enabling endpoints; allow providing stream_id for bulk transfers).
|
||||||
|
|
||||||
|
- Support ISO transfer features (expose frame_number for completed requests).
|
||||||
|
@@ -28,3 +28,5 @@ KVM
|
|||||||
arm/index
|
arm/index
|
||||||
|
|
||||||
devices/index
|
devices/index
|
||||||
|
|
||||||
|
running-nested-guests
|
||||||
|
276
Documentation/virt/kvm/running-nested-guests.rst
Normal file
276
Documentation/virt/kvm/running-nested-guests.rst
Normal file
@@ -0,0 +1,276 @@
|
|||||||
|
==============================
|
||||||
|
Running nested guests with KVM
|
||||||
|
==============================
|
||||||
|
|
||||||
|
A nested guest is the ability to run a guest inside another guest (it
|
||||||
|
can be KVM-based or a different hypervisor). The straightforward
|
||||||
|
example is a KVM guest that in turn runs on a KVM guest (the rest of
|
||||||
|
this document is built on this example)::
|
||||||
|
|
||||||
|
.----------------. .----------------.
|
||||||
|
| | | |
|
||||||
|
| L2 | | L2 |
|
||||||
|
| (Nested Guest) | | (Nested Guest) |
|
||||||
|
| | | |
|
||||||
|
|----------------'--'----------------|
|
||||||
|
| |
|
||||||
|
| L1 (Guest Hypervisor) |
|
||||||
|
| KVM (/dev/kvm) |
|
||||||
|
| |
|
||||||
|
.------------------------------------------------------.
|
||||||
|
| L0 (Host Hypervisor) |
|
||||||
|
| KVM (/dev/kvm) |
|
||||||
|
|------------------------------------------------------|
|
||||||
|
| Hardware (with virtualization extensions) |
|
||||||
|
'------------------------------------------------------'
|
||||||
|
|
||||||
|
Terminology:
|
||||||
|
|
||||||
|
- L0 – level-0; the bare metal host, running KVM
|
||||||
|
|
||||||
|
- L1 – level-1 guest; a VM running on L0; also called the "guest
|
||||||
|
hypervisor", as it itself is capable of running KVM.
|
||||||
|
|
||||||
|
- L2 – level-2 guest; a VM running on L1, this is the "nested guest"
|
||||||
|
|
||||||
|
.. note:: The above diagram is modelled after the x86 architecture;
|
||||||
|
s390x, ppc64 and other architectures are likely to have
|
||||||
|
a different design for nesting.
|
||||||
|
|
||||||
|
For example, s390x always has an LPAR (LogicalPARtition)
|
||||||
|
hypervisor running on bare metal, adding another layer and
|
||||||
|
resulting in at least four levels in a nested setup — L0 (bare
|
||||||
|
metal, running the LPAR hypervisor), L1 (host hypervisor), L2
|
||||||
|
(guest hypervisor), L3 (nested guest).
|
||||||
|
|
||||||
|
This document will stick with the three-level terminology (L0,
|
||||||
|
L1, and L2) for all architectures; and will largely focus on
|
||||||
|
x86.
|
||||||
|
|
||||||
|
|
||||||
|
Use Cases
|
||||||
|
---------
|
||||||
|
|
||||||
|
There are several scenarios where nested KVM can be useful, to name a
|
||||||
|
few:
|
||||||
|
|
||||||
|
- As a developer, you want to test your software on different operating
|
||||||
|
systems (OSes). Instead of renting multiple VMs from a Cloud
|
||||||
|
Provider, using nested KVM lets you rent a large enough "guest
|
||||||
|
hypervisor" (level-1 guest). This in turn allows you to create
|
||||||
|
multiple nested guests (level-2 guests), running different OSes, on
|
||||||
|
which you can develop and test your software.
|
||||||
|
|
||||||
|
- Live migration of "guest hypervisors" and their nested guests, for
|
||||||
|
load balancing, disaster recovery, etc.
|
||||||
|
|
||||||
|
- VM image creation tools (e.g. ``virt-install``, etc) often run
|
||||||
|
their own VM, and users expect these to work inside a VM.
|
||||||
|
|
||||||
|
- Some OSes use virtualization internally for security (e.g. to let
|
||||||
|
applications run safely in isolation).
|
||||||
|
|
||||||
|
|
||||||
|
Enabling "nested" (x86)
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
From Linux kernel v4.19 onwards, the ``nested`` KVM parameter is enabled
|
||||||
|
by default for Intel and AMD. (Though your Linux distribution might
|
||||||
|
override this default.)
|
||||||
|
|
||||||
|
In case you are running a Linux kernel older than v4.19, to enable
|
||||||
|
nesting, set the ``nested`` KVM module parameter to ``Y`` or ``1``. To
|
||||||
|
persist this setting across reboots, you can add it in a config file, as
|
||||||
|
shown below:
|
||||||
|
|
||||||
|
1. On the bare metal host (L0), list the kernel modules and ensure that
|
||||||
|
the KVM modules::
|
||||||
|
|
||||||
|
$ lsmod | grep -i kvm
|
||||||
|
kvm_intel 133627 0
|
||||||
|
kvm 435079 1 kvm_intel
|
||||||
|
|
||||||
|
2. Show information for ``kvm_intel`` module::
|
||||||
|
|
||||||
|
$ modinfo kvm_intel | grep -i nested
|
||||||
|
parm: nested:bool
|
||||||
|
|
||||||
|
3. For the nested KVM configuration to persist across reboots, place the
|
||||||
|
below in ``/etc/modprobed/kvm_intel.conf`` (create the file if it
|
||||||
|
doesn't exist)::
|
||||||
|
|
||||||
|
$ cat /etc/modprobe.d/kvm_intel.conf
|
||||||
|
options kvm-intel nested=y
|
||||||
|
|
||||||
|
4. Unload and re-load the KVM Intel module::
|
||||||
|
|
||||||
|
$ sudo rmmod kvm-intel
|
||||||
|
$ sudo modprobe kvm-intel
|
||||||
|
|
||||||
|
5. Verify if the ``nested`` parameter for KVM is enabled::
|
||||||
|
|
||||||
|
$ cat /sys/module/kvm_intel/parameters/nested
|
||||||
|
Y
|
||||||
|
|
||||||
|
For AMD hosts, the process is the same as above, except that the module
|
||||||
|
name is ``kvm-amd``.
|
||||||
|
|
||||||
|
|
||||||
|
Additional nested-related kernel parameters (x86)
|
||||||
|
-------------------------------------------------
|
||||||
|
|
||||||
|
If your hardware is sufficiently advanced (Intel Haswell processor or
|
||||||
|
higher, which has newer hardware virt extensions), the following
|
||||||
|
additional features will also be enabled by default: "Shadow VMCS
|
||||||
|
(Virtual Machine Control Structure)", APIC Virtualization on your bare
|
||||||
|
metal host (L0). Parameters for Intel hosts::
|
||||||
|
|
||||||
|
$ cat /sys/module/kvm_intel/parameters/enable_shadow_vmcs
|
||||||
|
Y
|
||||||
|
|
||||||
|
$ cat /sys/module/kvm_intel/parameters/enable_apicv
|
||||||
|
Y
|
||||||
|
|
||||||
|
$ cat /sys/module/kvm_intel/parameters/ept
|
||||||
|
Y
|
||||||
|
|
||||||
|
.. note:: If you suspect your L2 (i.e. nested guest) is running slower,
|
||||||
|
ensure the above are enabled (particularly
|
||||||
|
``enable_shadow_vmcs`` and ``ept``).
|
||||||
|
|
||||||
|
|
||||||
|
Starting a nested guest (x86)
|
||||||
|
-----------------------------
|
||||||
|
|
||||||
|
Once your bare metal host (L0) is configured for nesting, you should be
|
||||||
|
able to start an L1 guest with::
|
||||||
|
|
||||||
|
$ qemu-kvm -cpu host [...]
|
||||||
|
|
||||||
|
The above will pass through the host CPU's capabilities as-is to the
|
||||||
|
gues); or for better live migration compatibility, use a named CPU
|
||||||
|
model supported by QEMU. e.g.::
|
||||||
|
|
||||||
|
$ qemu-kvm -cpu Haswell-noTSX-IBRS,vmx=on
|
||||||
|
|
||||||
|
then the guest hypervisor will subsequently be capable of running a
|
||||||
|
nested guest with accelerated KVM.
|
||||||
|
|
||||||
|
|
||||||
|
Enabling "nested" (s390x)
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
1. On the host hypervisor (L0), enable the ``nested`` parameter on
|
||||||
|
s390x::
|
||||||
|
|
||||||
|
$ rmmod kvm
|
||||||
|
$ modprobe kvm nested=1
|
||||||
|
|
||||||
|
.. note:: On s390x, the kernel parameter ``hpage`` is mutually exclusive
|
||||||
|
with the ``nested`` paramter — i.e. to be able to enable
|
||||||
|
``nested``, the ``hpage`` parameter *must* be disabled.
|
||||||
|
|
||||||
|
2. The guest hypervisor (L1) must be provided with the ``sie`` CPU
|
||||||
|
feature — with QEMU, this can be done by using "host passthrough"
|
||||||
|
(via the command-line ``-cpu host``).
|
||||||
|
|
||||||
|
3. Now the KVM module can be loaded in the L1 (guest hypervisor)::
|
||||||
|
|
||||||
|
$ modprobe kvm
|
||||||
|
|
||||||
|
|
||||||
|
Live migration with nested KVM
|
||||||
|
------------------------------
|
||||||
|
|
||||||
|
Migrating an L1 guest, with a *live* nested guest in it, to another
|
||||||
|
bare metal host, works as of Linux kernel 5.3 and QEMU 4.2.0 for
|
||||||
|
Intel x86 systems, and even on older versions for s390x.
|
||||||
|
|
||||||
|
On AMD systems, once an L1 guest has started an L2 guest, the L1 guest
|
||||||
|
should no longer be migrated or saved (refer to QEMU documentation on
|
||||||
|
"savevm"/"loadvm") until the L2 guest shuts down. Attempting to migrate
|
||||||
|
or save-and-load an L1 guest while an L2 guest is running will result in
|
||||||
|
undefined behavior. You might see a ``kernel BUG!`` entry in ``dmesg``, a
|
||||||
|
kernel 'oops', or an outright kernel panic. Such a migrated or loaded L1
|
||||||
|
guest can no longer be considered stable or secure, and must be restarted.
|
||||||
|
Migrating an L1 guest merely configured to support nesting, while not
|
||||||
|
actually running L2 guests, is expected to function normally even on AMD
|
||||||
|
systems but may fail once guests are started.
|
||||||
|
|
||||||
|
Migrating an L2 guest is always expected to succeed, so all the following
|
||||||
|
scenarios should work even on AMD systems:
|
||||||
|
|
||||||
|
- Migrating a nested guest (L2) to another L1 guest on the *same* bare
|
||||||
|
metal host.
|
||||||
|
|
||||||
|
- Migrating a nested guest (L2) to another L1 guest on a *different*
|
||||||
|
bare metal host.
|
||||||
|
|
||||||
|
- Migrating a nested guest (L2) to a bare metal host.
|
||||||
|
|
||||||
|
Reporting bugs from nested setups
|
||||||
|
-----------------------------------
|
||||||
|
|
||||||
|
Debugging "nested" problems can involve sifting through log files across
|
||||||
|
L0, L1 and L2; this can result in tedious back-n-forth between the bug
|
||||||
|
reporter and the bug fixer.
|
||||||
|
|
||||||
|
- Mention that you are in a "nested" setup. If you are running any kind
|
||||||
|
of "nesting" at all, say so. Unfortunately, this needs to be called
|
||||||
|
out because when reporting bugs, people tend to forget to even
|
||||||
|
*mention* that they're using nested virtualization.
|
||||||
|
|
||||||
|
- Ensure you are actually running KVM on KVM. Sometimes people do not
|
||||||
|
have KVM enabled for their guest hypervisor (L1), which results in
|
||||||
|
them running with pure emulation or what QEMU calls it as "TCG", but
|
||||||
|
they think they're running nested KVM. Thus confusing "nested Virt"
|
||||||
|
(which could also mean, QEMU on KVM) with "nested KVM" (KVM on KVM).
|
||||||
|
|
||||||
|
Information to collect (generic)
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
The following is not an exhaustive list, but a very good starting point:
|
||||||
|
|
||||||
|
- Kernel, libvirt, and QEMU version from L0
|
||||||
|
|
||||||
|
- Kernel, libvirt and QEMU version from L1
|
||||||
|
|
||||||
|
- QEMU command-line of L1 -- when using libvirt, you'll find it here:
|
||||||
|
``/var/log/libvirt/qemu/instance.log``
|
||||||
|
|
||||||
|
- QEMU command-line of L2 -- as above, when using libvirt, get the
|
||||||
|
complete libvirt-generated QEMU command-line
|
||||||
|
|
||||||
|
- ``cat /sys/cpuinfo`` from L0
|
||||||
|
|
||||||
|
- ``cat /sys/cpuinfo`` from L1
|
||||||
|
|
||||||
|
- ``lscpu`` from L0
|
||||||
|
|
||||||
|
- ``lscpu`` from L1
|
||||||
|
|
||||||
|
- Full ``dmesg`` output from L0
|
||||||
|
|
||||||
|
- Full ``dmesg`` output from L1
|
||||||
|
|
||||||
|
x86-specific info to collect
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Both the below commands, ``x86info`` and ``dmidecode``, should be
|
||||||
|
available on most Linux distributions with the same name:
|
||||||
|
|
||||||
|
- Output of: ``x86info -a`` from L0
|
||||||
|
|
||||||
|
- Output of: ``x86info -a`` from L1
|
||||||
|
|
||||||
|
- Output of: ``dmidecode`` from L0
|
||||||
|
|
||||||
|
- Output of: ``dmidecode`` from L1
|
||||||
|
|
||||||
|
s390x-specific info to collect
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Along with the earlier mentioned generic details, the below is
|
||||||
|
also recommended:
|
||||||
|
|
||||||
|
- ``/proc/sysinfo`` from L1; this will also include the info from L0
|
21
MAINTAINERS
21
MAINTAINERS
@@ -3936,11 +3936,9 @@ F: arch/powerpc/platforms/cell/
|
|||||||
CEPH COMMON CODE (LIBCEPH)
|
CEPH COMMON CODE (LIBCEPH)
|
||||||
M: Ilya Dryomov <idryomov@gmail.com>
|
M: Ilya Dryomov <idryomov@gmail.com>
|
||||||
M: Jeff Layton <jlayton@kernel.org>
|
M: Jeff Layton <jlayton@kernel.org>
|
||||||
M: Sage Weil <sage@redhat.com>
|
|
||||||
L: ceph-devel@vger.kernel.org
|
L: ceph-devel@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
W: http://ceph.com/
|
W: http://ceph.com/
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client.git
|
|
||||||
T: git git://github.com/ceph/ceph-client.git
|
T: git git://github.com/ceph/ceph-client.git
|
||||||
F: include/linux/ceph/
|
F: include/linux/ceph/
|
||||||
F: include/linux/crush/
|
F: include/linux/crush/
|
||||||
@@ -3948,12 +3946,10 @@ F: net/ceph/
|
|||||||
|
|
||||||
CEPH DISTRIBUTED FILE SYSTEM CLIENT (CEPH)
|
CEPH DISTRIBUTED FILE SYSTEM CLIENT (CEPH)
|
||||||
M: Jeff Layton <jlayton@kernel.org>
|
M: Jeff Layton <jlayton@kernel.org>
|
||||||
M: Sage Weil <sage@redhat.com>
|
|
||||||
M: Ilya Dryomov <idryomov@gmail.com>
|
M: Ilya Dryomov <idryomov@gmail.com>
|
||||||
L: ceph-devel@vger.kernel.org
|
L: ceph-devel@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
W: http://ceph.com/
|
W: http://ceph.com/
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client.git
|
|
||||||
T: git git://github.com/ceph/ceph-client.git
|
T: git git://github.com/ceph/ceph-client.git
|
||||||
F: Documentation/filesystems/ceph.rst
|
F: Documentation/filesystems/ceph.rst
|
||||||
F: fs/ceph/
|
F: fs/ceph/
|
||||||
@@ -5935,9 +5931,9 @@ F: lib/dynamic_debug.c
|
|||||||
DYNAMIC INTERRUPT MODERATION
|
DYNAMIC INTERRUPT MODERATION
|
||||||
M: Tal Gilboa <talgi@mellanox.com>
|
M: Tal Gilboa <talgi@mellanox.com>
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
F: Documentation/networking/net_dim.rst
|
||||||
F: include/linux/dim.h
|
F: include/linux/dim.h
|
||||||
F: lib/dim/
|
F: lib/dim/
|
||||||
F: Documentation/networking/net_dim.rst
|
|
||||||
|
|
||||||
DZ DECSTATION DZ11 SERIAL DRIVER
|
DZ DECSTATION DZ11 SERIAL DRIVER
|
||||||
M: "Maciej W. Rozycki" <macro@linux-mips.org>
|
M: "Maciej W. Rozycki" <macro@linux-mips.org>
|
||||||
@@ -7119,9 +7115,10 @@ F: include/uapi/asm-generic/
|
|||||||
|
|
||||||
GENERIC PHY FRAMEWORK
|
GENERIC PHY FRAMEWORK
|
||||||
M: Kishon Vijay Abraham I <kishon@ti.com>
|
M: Kishon Vijay Abraham I <kishon@ti.com>
|
||||||
|
M: Vinod Koul <vkoul@kernel.org>
|
||||||
L: linux-kernel@vger.kernel.org
|
L: linux-kernel@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/kishon/linux-phy.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/phy/linux-phy.git
|
||||||
F: Documentation/devicetree/bindings/phy/
|
F: Documentation/devicetree/bindings/phy/
|
||||||
F: drivers/phy/
|
F: drivers/phy/
|
||||||
F: include/linux/phy/
|
F: include/linux/phy/
|
||||||
@@ -7746,11 +7743,6 @@ L: platform-driver-x86@vger.kernel.org
|
|||||||
S: Orphan
|
S: Orphan
|
||||||
F: drivers/platform/x86/tc1100-wmi.c
|
F: drivers/platform/x86/tc1100-wmi.c
|
||||||
|
|
||||||
HP100: Driver for HP 10/100 Mbit/s Voice Grade Network Adapter Series
|
|
||||||
M: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
S: Obsolete
|
|
||||||
F: drivers/staging/hp/hp100.*
|
|
||||||
|
|
||||||
HPET: High Precision Event Timers driver
|
HPET: High Precision Event Timers driver
|
||||||
M: Clemens Ladisch <clemens@ladisch.de>
|
M: Clemens Ladisch <clemens@ladisch.de>
|
||||||
S: Maintained
|
S: Maintained
|
||||||
@@ -11718,8 +11710,9 @@ F: net/core/drop_monitor.c
|
|||||||
|
|
||||||
NETWORKING DRIVERS
|
NETWORKING DRIVERS
|
||||||
M: "David S. Miller" <davem@davemloft.net>
|
M: "David S. Miller" <davem@davemloft.net>
|
||||||
|
M: Jakub Kicinski <kuba@kernel.org>
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
S: Odd Fixes
|
S: Maintained
|
||||||
W: http://www.linuxfoundation.org/en/Net
|
W: http://www.linuxfoundation.org/en/Net
|
||||||
Q: http://patchwork.ozlabs.org/project/netdev/list/
|
Q: http://patchwork.ozlabs.org/project/netdev/list/
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git
|
||||||
@@ -14102,12 +14095,10 @@ F: drivers/media/radio/radio-tea5777.c
|
|||||||
|
|
||||||
RADOS BLOCK DEVICE (RBD)
|
RADOS BLOCK DEVICE (RBD)
|
||||||
M: Ilya Dryomov <idryomov@gmail.com>
|
M: Ilya Dryomov <idryomov@gmail.com>
|
||||||
M: Sage Weil <sage@redhat.com>
|
|
||||||
R: Dongsheng Yang <dongsheng.yang@easystack.cn>
|
R: Dongsheng Yang <dongsheng.yang@easystack.cn>
|
||||||
L: ceph-devel@vger.kernel.org
|
L: ceph-devel@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
W: http://ceph.com/
|
W: http://ceph.com/
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client.git
|
|
||||||
T: git git://github.com/ceph/ceph-client.git
|
T: git git://github.com/ceph/ceph-client.git
|
||||||
F: Documentation/ABI/testing/sysfs-bus-rbd
|
F: Documentation/ABI/testing/sysfs-bus-rbd
|
||||||
F: drivers/block/rbd.c
|
F: drivers/block/rbd.c
|
||||||
@@ -14644,6 +14635,7 @@ F: drivers/iommu/s390-iommu.c
|
|||||||
|
|
||||||
S390 IUCV NETWORK LAYER
|
S390 IUCV NETWORK LAYER
|
||||||
M: Julian Wiedmann <jwi@linux.ibm.com>
|
M: Julian Wiedmann <jwi@linux.ibm.com>
|
||||||
|
M: Karsten Graul <kgraul@linux.ibm.com>
|
||||||
M: Ursula Braun <ubraun@linux.ibm.com>
|
M: Ursula Braun <ubraun@linux.ibm.com>
|
||||||
L: linux-s390@vger.kernel.org
|
L: linux-s390@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
@@ -14654,6 +14646,7 @@ F: net/iucv/
|
|||||||
|
|
||||||
S390 NETWORK DRIVERS
|
S390 NETWORK DRIVERS
|
||||||
M: Julian Wiedmann <jwi@linux.ibm.com>
|
M: Julian Wiedmann <jwi@linux.ibm.com>
|
||||||
|
M: Karsten Graul <kgraul@linux.ibm.com>
|
||||||
M: Ursula Braun <ubraun@linux.ibm.com>
|
M: Ursula Braun <ubraun@linux.ibm.com>
|
||||||
L: linux-s390@vger.kernel.org
|
L: linux-s390@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
|
17
Makefile
17
Makefile
@@ -2,7 +2,7 @@
|
|||||||
VERSION = 5
|
VERSION = 5
|
||||||
PATCHLEVEL = 7
|
PATCHLEVEL = 7
|
||||||
SUBLEVEL = 0
|
SUBLEVEL = 0
|
||||||
EXTRAVERSION = -rc4
|
EXTRAVERSION = -rc6
|
||||||
NAME = Kleptomaniac Octopus
|
NAME = Kleptomaniac Octopus
|
||||||
|
|
||||||
# *DOCUMENTATION*
|
# *DOCUMENTATION*
|
||||||
@@ -729,10 +729,6 @@ else ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
|
|||||||
KBUILD_CFLAGS += -Os
|
KBUILD_CFLAGS += -Os
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifdef CONFIG_CC_DISABLE_WARN_MAYBE_UNINITIALIZED
|
|
||||||
KBUILD_CFLAGS += -Wno-maybe-uninitialized
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Tell gcc to never replace conditional load with a non-conditional one
|
# Tell gcc to never replace conditional load with a non-conditional one
|
||||||
KBUILD_CFLAGS += $(call cc-option,--param=allow-store-data-races=0)
|
KBUILD_CFLAGS += $(call cc-option,--param=allow-store-data-races=0)
|
||||||
KBUILD_CFLAGS += $(call cc-option,-fno-allow-store-data-races)
|
KBUILD_CFLAGS += $(call cc-option,-fno-allow-store-data-races)
|
||||||
@@ -881,6 +877,17 @@ KBUILD_CFLAGS += -Wno-pointer-sign
|
|||||||
# disable stringop warnings in gcc 8+
|
# disable stringop warnings in gcc 8+
|
||||||
KBUILD_CFLAGS += $(call cc-disable-warning, stringop-truncation)
|
KBUILD_CFLAGS += $(call cc-disable-warning, stringop-truncation)
|
||||||
|
|
||||||
|
# We'll want to enable this eventually, but it's not going away for 5.7 at least
|
||||||
|
KBUILD_CFLAGS += $(call cc-disable-warning, zero-length-bounds)
|
||||||
|
KBUILD_CFLAGS += $(call cc-disable-warning, array-bounds)
|
||||||
|
KBUILD_CFLAGS += $(call cc-disable-warning, stringop-overflow)
|
||||||
|
|
||||||
|
# Another good warning that we'll want to enable eventually
|
||||||
|
KBUILD_CFLAGS += $(call cc-disable-warning, restrict)
|
||||||
|
|
||||||
|
# Enabled with W=2, disabled by default as noisy
|
||||||
|
KBUILD_CFLAGS += $(call cc-disable-warning, maybe-uninitialized)
|
||||||
|
|
||||||
# disable invalid "can't wrap" optimizations for signed / pointers
|
# disable invalid "can't wrap" optimizations for signed / pointers
|
||||||
KBUILD_CFLAGS += $(call cc-option,-fno-strict-overflow)
|
KBUILD_CFLAGS += $(call cc-option,-fno-strict-overflow)
|
||||||
|
|
||||||
|
@@ -12,6 +12,7 @@ config ARM
|
|||||||
select ARCH_HAS_KEEPINITRD
|
select ARCH_HAS_KEEPINITRD
|
||||||
select ARCH_HAS_KCOV
|
select ARCH_HAS_KCOV
|
||||||
select ARCH_HAS_MEMBARRIER_SYNC_CORE
|
select ARCH_HAS_MEMBARRIER_SYNC_CORE
|
||||||
|
select ARCH_HAS_NON_OVERLAPPING_ADDRESS_SPACE
|
||||||
select ARCH_HAS_PTE_SPECIAL if ARM_LPAE
|
select ARCH_HAS_PTE_SPECIAL if ARM_LPAE
|
||||||
select ARCH_HAS_PHYS_TO_DMA
|
select ARCH_HAS_PHYS_TO_DMA
|
||||||
select ARCH_HAS_SETUP_DMA_OPS
|
select ARCH_HAS_SETUP_DMA_OPS
|
||||||
|
@@ -40,3 +40,7 @@
|
|||||||
status = "okay";
|
status = "okay";
|
||||||
dual_emac;
|
dual_emac;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
&m_can0 {
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
@@ -172,6 +172,7 @@
|
|||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
ranges = <0x51000000 0x51000000 0x3000
|
ranges = <0x51000000 0x51000000 0x3000
|
||||||
0x0 0x20000000 0x10000000>;
|
0x0 0x20000000 0x10000000>;
|
||||||
|
dma-ranges;
|
||||||
/**
|
/**
|
||||||
* To enable PCI endpoint mode, disable the pcie1_rc
|
* To enable PCI endpoint mode, disable the pcie1_rc
|
||||||
* node and enable pcie1_ep mode.
|
* node and enable pcie1_ep mode.
|
||||||
@@ -185,7 +186,6 @@
|
|||||||
device_type = "pci";
|
device_type = "pci";
|
||||||
ranges = <0x81000000 0 0 0x03000 0 0x00010000
|
ranges = <0x81000000 0 0 0x03000 0 0x00010000
|
||||||
0x82000000 0 0x20013000 0x13000 0 0xffed000>;
|
0x82000000 0 0x20013000 0x13000 0 0xffed000>;
|
||||||
dma-ranges = <0x02000000 0x0 0x00000000 0x00000000 0x1 0x00000000>;
|
|
||||||
bus-range = <0x00 0xff>;
|
bus-range = <0x00 0xff>;
|
||||||
#interrupt-cells = <1>;
|
#interrupt-cells = <1>;
|
||||||
num-lanes = <1>;
|
num-lanes = <1>;
|
||||||
@@ -230,6 +230,7 @@
|
|||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
ranges = <0x51800000 0x51800000 0x3000
|
ranges = <0x51800000 0x51800000 0x3000
|
||||||
0x0 0x30000000 0x10000000>;
|
0x0 0x30000000 0x10000000>;
|
||||||
|
dma-ranges;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
pcie2_rc: pcie@51800000 {
|
pcie2_rc: pcie@51800000 {
|
||||||
reg = <0x51800000 0x2000>, <0x51802000 0x14c>, <0x1000 0x2000>;
|
reg = <0x51800000 0x2000>, <0x51802000 0x14c>, <0x1000 0x2000>;
|
||||||
@@ -240,7 +241,6 @@
|
|||||||
device_type = "pci";
|
device_type = "pci";
|
||||||
ranges = <0x81000000 0 0 0x03000 0 0x00010000
|
ranges = <0x81000000 0 0 0x03000 0 0x00010000
|
||||||
0x82000000 0 0x30013000 0x13000 0 0xffed000>;
|
0x82000000 0 0x30013000 0x13000 0 0xffed000>;
|
||||||
dma-ranges = <0x02000000 0x0 0x00000000 0x00000000 0x1 0x00000000>;
|
|
||||||
bus-range = <0x00 0xff>;
|
bus-range = <0x00 0xff>;
|
||||||
#interrupt-cells = <1>;
|
#interrupt-cells = <1>;
|
||||||
num-lanes = <1>;
|
num-lanes = <1>;
|
||||||
|
@@ -75,8 +75,8 @@
|
|||||||
imx27-phycard-s-rdk {
|
imx27-phycard-s-rdk {
|
||||||
pinctrl_i2c1: i2c1grp {
|
pinctrl_i2c1: i2c1grp {
|
||||||
fsl,pins = <
|
fsl,pins = <
|
||||||
MX27_PAD_I2C2_SDA__I2C2_SDA 0x0
|
MX27_PAD_I2C_DATA__I2C_DATA 0x0
|
||||||
MX27_PAD_I2C2_SCL__I2C2_SCL 0x0
|
MX27_PAD_I2C_CLK__I2C_CLK 0x0
|
||||||
>;
|
>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -38,7 +38,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
&switch_ports {
|
&switch_ports {
|
||||||
/delete-node/ port@2;
|
/delete-node/ port@3;
|
||||||
};
|
};
|
||||||
|
|
||||||
&touchscreen {
|
&touchscreen {
|
||||||
|
@@ -72,8 +72,6 @@
|
|||||||
adi,input-depth = <8>;
|
adi,input-depth = <8>;
|
||||||
adi,input-colorspace = "rgb";
|
adi,input-colorspace = "rgb";
|
||||||
adi,input-clock = "1x";
|
adi,input-clock = "1x";
|
||||||
adi,input-style = <1>;
|
|
||||||
adi,input-justification = "evenly";
|
|
||||||
|
|
||||||
ports {
|
ports {
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
|
@@ -367,6 +367,8 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
&mmc3 {
|
&mmc3 {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&mmc3_pins>;
|
||||||
vmmc-supply = <&wl12xx_vmmc>;
|
vmmc-supply = <&wl12xx_vmmc>;
|
||||||
/* uart2_tx.sdmmc3_dat1 pad as wakeirq */
|
/* uart2_tx.sdmmc3_dat1 pad as wakeirq */
|
||||||
interrupts-extended = <&wakeupgen GIC_SPI 94 IRQ_TYPE_LEVEL_HIGH
|
interrupts-extended = <&wakeupgen GIC_SPI 94 IRQ_TYPE_LEVEL_HIGH
|
||||||
@@ -472,6 +474,37 @@
|
|||||||
>;
|
>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Android uses PIN_OFF_INPUT_PULLDOWN | PIN_INPUT_PULLUP | MUX_MODE3
|
||||||
|
* for gpio_100, but the internal pull makes wlan flakey on some
|
||||||
|
* devices. Off mode value should be tested if we have off mode working
|
||||||
|
* later on.
|
||||||
|
*/
|
||||||
|
mmc3_pins: pinmux_mmc3_pins {
|
||||||
|
pinctrl-single,pins = <
|
||||||
|
/* 0x4a10008e gpmc_wait2.gpio_100 d23 */
|
||||||
|
OMAP4_IOPAD(0x08e, PIN_INPUT | MUX_MODE3)
|
||||||
|
|
||||||
|
/* 0x4a100102 abe_mcbsp1_dx.sdmmc3_dat2 ab25 */
|
||||||
|
OMAP4_IOPAD(0x102, PIN_INPUT_PULLUP | MUX_MODE1)
|
||||||
|
|
||||||
|
/* 0x4a100104 abe_mcbsp1_fsx.sdmmc3_dat3 ac27 */
|
||||||
|
OMAP4_IOPAD(0x104, PIN_INPUT_PULLUP | MUX_MODE1)
|
||||||
|
|
||||||
|
/* 0x4a100118 uart2_cts.sdmmc3_clk ab26 */
|
||||||
|
OMAP4_IOPAD(0x118, PIN_INPUT | MUX_MODE1)
|
||||||
|
|
||||||
|
/* 0x4a10011a uart2_rts.sdmmc3_cmd ab27 */
|
||||||
|
OMAP4_IOPAD(0x11a, PIN_INPUT_PULLUP | MUX_MODE1)
|
||||||
|
|
||||||
|
/* 0x4a10011c uart2_rx.sdmmc3_dat0 aa25 */
|
||||||
|
OMAP4_IOPAD(0x11c, PIN_INPUT_PULLUP | MUX_MODE1)
|
||||||
|
|
||||||
|
/* 0x4a10011e uart2_tx.sdmmc3_dat1 aa26 */
|
||||||
|
OMAP4_IOPAD(0x11e, PIN_INPUT_PULLUP | MUX_MODE1)
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
/* gpmc_ncs0.gpio_50 */
|
/* gpmc_ncs0.gpio_50 */
|
||||||
poweroff_gpio: pinmux_poweroff_pins {
|
poweroff_gpio: pinmux_poweroff_pins {
|
||||||
pinctrl-single,pins = <
|
pinctrl-single,pins = <
|
||||||
@@ -690,14 +723,18 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* As uart1 is wired to mdm6600 with rts and cts, we can use the cts pin for
|
* The uart1 port is wired to mdm6600 with rts and cts. The modem uses gpio_149
|
||||||
* uart1 wakeirq.
|
* for wake-up events for both the USB PHY and the UART. We can use gpio_149
|
||||||
|
* pad as the shared wakeirq for the UART rather than the RX or CTS pad as we
|
||||||
|
* have gpio_149 trigger before the UART transfer starts.
|
||||||
*/
|
*/
|
||||||
&uart1 {
|
&uart1 {
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
pinctrl-0 = <&uart1_pins>;
|
pinctrl-0 = <&uart1_pins>;
|
||||||
interrupts-extended = <&wakeupgen GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH
|
interrupts-extended = <&wakeupgen GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH
|
||||||
&omap4_pmx_core 0xfc>;
|
&omap4_pmx_core 0x110>;
|
||||||
|
uart-has-rtscts;
|
||||||
|
current-speed = <115200>;
|
||||||
};
|
};
|
||||||
|
|
||||||
&uart3 {
|
&uart3 {
|
||||||
|
@@ -304,7 +304,6 @@
|
|||||||
reg = <0xe803b000 0x30>;
|
reg = <0xe803b000 0x30>;
|
||||||
interrupts = <GIC_SPI 56 IRQ_TYPE_EDGE_RISING>;
|
interrupts = <GIC_SPI 56 IRQ_TYPE_EDGE_RISING>;
|
||||||
clocks = <&cpg CPG_MOD 36>;
|
clocks = <&cpg CPG_MOD 36>;
|
||||||
clock-names = "ostm0";
|
|
||||||
power-domains = <&cpg>;
|
power-domains = <&cpg>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
@@ -314,7 +313,6 @@
|
|||||||
reg = <0xe803c000 0x30>;
|
reg = <0xe803c000 0x30>;
|
||||||
interrupts = <GIC_SPI 57 IRQ_TYPE_EDGE_RISING>;
|
interrupts = <GIC_SPI 57 IRQ_TYPE_EDGE_RISING>;
|
||||||
clocks = <&cpg CPG_MOD 35>;
|
clocks = <&cpg CPG_MOD 35>;
|
||||||
clock-names = "ostm1";
|
|
||||||
power-domains = <&cpg>;
|
power-domains = <&cpg>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
@@ -324,7 +322,6 @@
|
|||||||
reg = <0xe803d000 0x30>;
|
reg = <0xe803d000 0x30>;
|
||||||
interrupts = <GIC_SPI 58 IRQ_TYPE_EDGE_RISING>;
|
interrupts = <GIC_SPI 58 IRQ_TYPE_EDGE_RISING>;
|
||||||
clocks = <&cpg CPG_MOD 34>;
|
clocks = <&cpg CPG_MOD 34>;
|
||||||
clock-names = "ostm2";
|
|
||||||
power-domains = <&cpg>;
|
power-domains = <&cpg>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
@@ -131,7 +131,14 @@
|
|||||||
cmt1: timer@e6130000 {
|
cmt1: timer@e6130000 {
|
||||||
compatible = "renesas,r8a73a4-cmt1", "renesas,rcar-gen2-cmt1";
|
compatible = "renesas,r8a73a4-cmt1", "renesas,rcar-gen2-cmt1";
|
||||||
reg = <0 0xe6130000 0 0x1004>;
|
reg = <0 0xe6130000 0 0x1004>;
|
||||||
interrupts = <GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<GIC_SPI 122 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<GIC_SPI 123 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<GIC_SPI 124 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<GIC_SPI 125 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<GIC_SPI 126 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
<GIC_SPI 127 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&mstp3_clks R8A73A4_CLK_CMT1>;
|
clocks = <&mstp3_clks R8A73A4_CLK_CMT1>;
|
||||||
clock-names = "fck";
|
clock-names = "fck";
|
||||||
power-domains = <&pd_c5>;
|
power-domains = <&pd_c5>;
|
||||||
|
@@ -479,7 +479,7 @@
|
|||||||
cpg_clocks: cpg_clocks@e6150000 {
|
cpg_clocks: cpg_clocks@e6150000 {
|
||||||
compatible = "renesas,r8a7740-cpg-clocks";
|
compatible = "renesas,r8a7740-cpg-clocks";
|
||||||
reg = <0xe6150000 0x10000>;
|
reg = <0xe6150000 0x10000>;
|
||||||
clocks = <&extal1_clk>, <&extalr_clk>;
|
clocks = <&extal1_clk>, <&extal2_clk>, <&extalr_clk>;
|
||||||
#clock-cells = <1>;
|
#clock-cells = <1>;
|
||||||
clock-output-names = "system", "pllc0", "pllc1",
|
clock-output-names = "system", "pllc0", "pllc1",
|
||||||
"pllc2", "r",
|
"pllc2", "r",
|
||||||
|
@@ -84,8 +84,6 @@
|
|||||||
adi,input-depth = <8>;
|
adi,input-depth = <8>;
|
||||||
adi,input-colorspace = "rgb";
|
adi,input-colorspace = "rgb";
|
||||||
adi,input-clock = "1x";
|
adi,input-clock = "1x";
|
||||||
adi,input-style = <1>;
|
|
||||||
adi,input-justification = "evenly";
|
|
||||||
|
|
||||||
ports {
|
ports {
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
|
@@ -364,8 +364,6 @@
|
|||||||
adi,input-depth = <8>;
|
adi,input-depth = <8>;
|
||||||
adi,input-colorspace = "rgb";
|
adi,input-colorspace = "rgb";
|
||||||
adi,input-clock = "1x";
|
adi,input-clock = "1x";
|
||||||
adi,input-style = <1>;
|
|
||||||
adi,input-justification = "evenly";
|
|
||||||
|
|
||||||
ports {
|
ports {
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
|
@@ -297,8 +297,6 @@
|
|||||||
adi,input-depth = <8>;
|
adi,input-depth = <8>;
|
||||||
adi,input-colorspace = "rgb";
|
adi,input-colorspace = "rgb";
|
||||||
adi,input-clock = "1x";
|
adi,input-clock = "1x";
|
||||||
adi,input-style = <1>;
|
|
||||||
adi,input-justification = "evenly";
|
|
||||||
|
|
||||||
ports {
|
ports {
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
|
@@ -387,8 +387,6 @@
|
|||||||
adi,input-depth = <8>;
|
adi,input-depth = <8>;
|
||||||
adi,input-colorspace = "rgb";
|
adi,input-colorspace = "rgb";
|
||||||
adi,input-clock = "1x";
|
adi,input-clock = "1x";
|
||||||
adi,input-style = <1>;
|
|
||||||
adi,input-justification = "evenly";
|
|
||||||
|
|
||||||
ports {
|
ports {
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
|
@@ -181,8 +181,6 @@
|
|||||||
adi,input-depth = <8>;
|
adi,input-depth = <8>;
|
||||||
adi,input-colorspace = "rgb";
|
adi,input-colorspace = "rgb";
|
||||||
adi,input-clock = "1x";
|
adi,input-clock = "1x";
|
||||||
adi,input-style = <1>;
|
|
||||||
adi,input-justification = "evenly";
|
|
||||||
|
|
||||||
ports {
|
ports {
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
|
@@ -289,8 +289,6 @@
|
|||||||
adi,input-depth = <8>;
|
adi,input-depth = <8>;
|
||||||
adi,input-colorspace = "rgb";
|
adi,input-colorspace = "rgb";
|
||||||
adi,input-clock = "1x";
|
adi,input-clock = "1x";
|
||||||
adi,input-style = <1>;
|
|
||||||
adi,input-justification = "evenly";
|
|
||||||
|
|
||||||
ports {
|
ports {
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
|
@@ -249,14 +249,12 @@
|
|||||||
*/
|
*/
|
||||||
hdmi@3d {
|
hdmi@3d {
|
||||||
compatible = "adi,adv7513";
|
compatible = "adi,adv7513";
|
||||||
reg = <0x3d>, <0x2d>, <0x4d>, <0x5d>;
|
reg = <0x3d>, <0x4d>, <0x2d>, <0x5d>;
|
||||||
reg-names = "main", "cec", "edid", "packet";
|
reg-names = "main", "edid", "cec", "packet";
|
||||||
|
|
||||||
adi,input-depth = <8>;
|
adi,input-depth = <8>;
|
||||||
adi,input-colorspace = "rgb";
|
adi,input-colorspace = "rgb";
|
||||||
adi,input-clock = "1x";
|
adi,input-clock = "1x";
|
||||||
adi,input-style = <1>;
|
|
||||||
adi,input-justification = "evenly";
|
|
||||||
|
|
||||||
ports {
|
ports {
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
@@ -280,14 +278,12 @@
|
|||||||
|
|
||||||
hdmi@39 {
|
hdmi@39 {
|
||||||
compatible = "adi,adv7513";
|
compatible = "adi,adv7513";
|
||||||
reg = <0x39>, <0x29>, <0x49>, <0x59>;
|
reg = <0x39>, <0x49>, <0x29>, <0x59>;
|
||||||
reg-names = "main", "cec", "edid", "packet";
|
reg-names = "main", "edid", "cec", "packet";
|
||||||
|
|
||||||
adi,input-depth = <8>;
|
adi,input-depth = <8>;
|
||||||
adi,input-colorspace = "rgb";
|
adi,input-colorspace = "rgb";
|
||||||
adi,input-clock = "1x";
|
adi,input-clock = "1x";
|
||||||
adi,input-style = <1>;
|
|
||||||
adi,input-justification = "evenly";
|
|
||||||
|
|
||||||
ports {
|
ports {
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
|
@@ -366,8 +366,6 @@
|
|||||||
adi,input-depth = <8>;
|
adi,input-depth = <8>;
|
||||||
adi,input-colorspace = "rgb";
|
adi,input-colorspace = "rgb";
|
||||||
adi,input-clock = "1x";
|
adi,input-clock = "1x";
|
||||||
adi,input-style = <1>;
|
|
||||||
adi,input-justification = "evenly";
|
|
||||||
|
|
||||||
ports {
|
ports {
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
|
@@ -255,8 +255,6 @@
|
|||||||
adi,input-depth = <8>;
|
adi,input-depth = <8>;
|
||||||
adi,input-colorspace = "rgb";
|
adi,input-colorspace = "rgb";
|
||||||
adi,input-clock = "1x";
|
adi,input-clock = "1x";
|
||||||
adi,input-style = <1>;
|
|
||||||
adi,input-justification = "evenly";
|
|
||||||
|
|
||||||
ports {
|
ports {
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
|
@@ -128,7 +128,7 @@
|
|||||||
assigned-clocks = <&cru SCLK_GPU>;
|
assigned-clocks = <&cru SCLK_GPU>;
|
||||||
assigned-clock-rates = <100000000>;
|
assigned-clock-rates = <100000000>;
|
||||||
clocks = <&cru SCLK_GPU>, <&cru SCLK_GPU>;
|
clocks = <&cru SCLK_GPU>, <&cru SCLK_GPU>;
|
||||||
clock-names = "core", "bus";
|
clock-names = "bus", "core";
|
||||||
resets = <&cru SRST_GPU>;
|
resets = <&cru SRST_GPU>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
@@ -46,7 +46,7 @@
|
|||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
|
|
||||||
phy: phy@0 {
|
phy: ethernet-phy@0 {
|
||||||
compatible = "ethernet-phy-id1234.d400", "ethernet-phy-ieee802.3-c22";
|
compatible = "ethernet-phy-id1234.d400", "ethernet-phy-ieee802.3-c22";
|
||||||
reg = <0>;
|
reg = <0>;
|
||||||
clocks = <&cru SCLK_MAC_PHY>;
|
clocks = <&cru SCLK_MAC_PHY>;
|
||||||
|
@@ -150,7 +150,7 @@
|
|||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
|
|
||||||
phy: phy@0 {
|
phy: ethernet-phy@0 {
|
||||||
compatible = "ethernet-phy-id1234.d400",
|
compatible = "ethernet-phy-id1234.d400",
|
||||||
"ethernet-phy-ieee802.3-c22";
|
"ethernet-phy-ieee802.3-c22";
|
||||||
reg = <0>;
|
reg = <0>;
|
||||||
|
@@ -555,7 +555,7 @@
|
|||||||
"pp1",
|
"pp1",
|
||||||
"ppmmu1";
|
"ppmmu1";
|
||||||
clocks = <&cru ACLK_GPU>, <&cru ACLK_GPU>;
|
clocks = <&cru ACLK_GPU>, <&cru ACLK_GPU>;
|
||||||
clock-names = "core", "bus";
|
clock-names = "bus", "core";
|
||||||
resets = <&cru SRST_GPU_A>;
|
resets = <&cru SRST_GPU_A>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
@@ -1020,7 +1020,7 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
spi-0 {
|
spi0 {
|
||||||
spi0_clk: spi0-clk {
|
spi0_clk: spi0-clk {
|
||||||
rockchip,pins = <0 RK_PB1 2 &pcfg_pull_up>;
|
rockchip,pins = <0 RK_PB1 2 &pcfg_pull_up>;
|
||||||
};
|
};
|
||||||
@@ -1038,7 +1038,7 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
spi-1 {
|
spi1 {
|
||||||
spi1_clk: spi1-clk {
|
spi1_clk: spi1-clk {
|
||||||
rockchip,pins = <0 RK_PC7 2 &pcfg_pull_up>;
|
rockchip,pins = <0 RK_PC7 2 &pcfg_pull_up>;
|
||||||
};
|
};
|
||||||
|
@@ -84,7 +84,7 @@
|
|||||||
compatible = "arm,mali-400";
|
compatible = "arm,mali-400";
|
||||||
reg = <0x10090000 0x10000>;
|
reg = <0x10090000 0x10000>;
|
||||||
clocks = <&cru ACLK_GPU>, <&cru ACLK_GPU>;
|
clocks = <&cru ACLK_GPU>, <&cru ACLK_GPU>;
|
||||||
clock-names = "core", "bus";
|
clock-names = "bus", "core";
|
||||||
assigned-clocks = <&cru ACLK_GPU>;
|
assigned-clocks = <&cru ACLK_GPU>;
|
||||||
assigned-clock-rates = <100000000>;
|
assigned-clock-rates = <100000000>;
|
||||||
resets = <&cru SRST_GPU>;
|
resets = <&cru SRST_GPU>;
|
||||||
|
@@ -147,6 +147,7 @@ CONFIG_I2C_DAVINCI=y
|
|||||||
CONFIG_SPI=y
|
CONFIG_SPI=y
|
||||||
CONFIG_SPI_DAVINCI=y
|
CONFIG_SPI_DAVINCI=y
|
||||||
CONFIG_SPI_SPIDEV=y
|
CONFIG_SPI_SPIDEV=y
|
||||||
|
CONFIG_PTP_1588_CLOCK=y
|
||||||
CONFIG_PINCTRL_SINGLE=y
|
CONFIG_PINCTRL_SINGLE=y
|
||||||
CONFIG_GPIOLIB=y
|
CONFIG_GPIOLIB=y
|
||||||
CONFIG_GPIO_SYSFS=y
|
CONFIG_GPIO_SYSFS=y
|
||||||
|
@@ -274,6 +274,7 @@ CONFIG_SPI_TI_QSPI=m
|
|||||||
CONFIG_HSI=m
|
CONFIG_HSI=m
|
||||||
CONFIG_OMAP_SSI=m
|
CONFIG_OMAP_SSI=m
|
||||||
CONFIG_SSI_PROTOCOL=m
|
CONFIG_SSI_PROTOCOL=m
|
||||||
|
CONFIG_PTP_1588_CLOCK=y
|
||||||
CONFIG_PINCTRL_SINGLE=y
|
CONFIG_PINCTRL_SINGLE=y
|
||||||
CONFIG_DEBUG_GPIO=y
|
CONFIG_DEBUG_GPIO=y
|
||||||
CONFIG_GPIO_SYSFS=y
|
CONFIG_GPIO_SYSFS=y
|
||||||
|
@@ -91,9 +91,17 @@ void chacha_crypt_arch(u32 *state, u8 *dst, const u8 *src, unsigned int bytes,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
kernel_neon_begin();
|
do {
|
||||||
chacha_doneon(state, dst, src, bytes, nrounds);
|
unsigned int todo = min_t(unsigned int, bytes, SZ_4K);
|
||||||
kernel_neon_end();
|
|
||||||
|
kernel_neon_begin();
|
||||||
|
chacha_doneon(state, dst, src, todo, nrounds);
|
||||||
|
kernel_neon_end();
|
||||||
|
|
||||||
|
bytes -= todo;
|
||||||
|
src += todo;
|
||||||
|
dst += todo;
|
||||||
|
} while (bytes);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(chacha_crypt_arch);
|
EXPORT_SYMBOL(chacha_crypt_arch);
|
||||||
|
|
||||||
|
@@ -30,7 +30,7 @@ static int nhpoly1305_neon_update(struct shash_desc *desc,
|
|||||||
return crypto_nhpoly1305_update(desc, src, srclen);
|
return crypto_nhpoly1305_update(desc, src, srclen);
|
||||||
|
|
||||||
do {
|
do {
|
||||||
unsigned int n = min_t(unsigned int, srclen, PAGE_SIZE);
|
unsigned int n = min_t(unsigned int, srclen, SZ_4K);
|
||||||
|
|
||||||
kernel_neon_begin();
|
kernel_neon_begin();
|
||||||
crypto_nhpoly1305_update_helper(desc, src, n, _nh_neon);
|
crypto_nhpoly1305_update_helper(desc, src, n, _nh_neon);
|
||||||
|
@@ -160,13 +160,20 @@ void poly1305_update_arch(struct poly1305_desc_ctx *dctx, const u8 *src,
|
|||||||
unsigned int len = round_down(nbytes, POLY1305_BLOCK_SIZE);
|
unsigned int len = round_down(nbytes, POLY1305_BLOCK_SIZE);
|
||||||
|
|
||||||
if (static_branch_likely(&have_neon) && do_neon) {
|
if (static_branch_likely(&have_neon) && do_neon) {
|
||||||
kernel_neon_begin();
|
do {
|
||||||
poly1305_blocks_neon(&dctx->h, src, len, 1);
|
unsigned int todo = min_t(unsigned int, len, SZ_4K);
|
||||||
kernel_neon_end();
|
|
||||||
|
kernel_neon_begin();
|
||||||
|
poly1305_blocks_neon(&dctx->h, src, todo, 1);
|
||||||
|
kernel_neon_end();
|
||||||
|
|
||||||
|
len -= todo;
|
||||||
|
src += todo;
|
||||||
|
} while (len);
|
||||||
} else {
|
} else {
|
||||||
poly1305_blocks_arm(&dctx->h, src, len, 1);
|
poly1305_blocks_arm(&dctx->h, src, len, 1);
|
||||||
|
src += len;
|
||||||
}
|
}
|
||||||
src += len;
|
|
||||||
nbytes %= POLY1305_BLOCK_SIZE;
|
nbytes %= POLY1305_BLOCK_SIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -165,8 +165,13 @@ arch_futex_atomic_op_inuser(int op, int oparg, int *oval, u32 __user *uaddr)
|
|||||||
preempt_enable();
|
preempt_enable();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (!ret)
|
/*
|
||||||
*oval = oldval;
|
* Store unconditionally. If ret != 0 the extra store is the least
|
||||||
|
* of the worries but GCC cannot figure out that __futex_atomic_op()
|
||||||
|
* is either setting ret to -EFAULT or storing the old value in
|
||||||
|
* oldval which results in a uninitialized warning at the call site.
|
||||||
|
*/
|
||||||
|
*oval = oldval;
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@@ -27,7 +27,8 @@ static void __iomem *gic_cpu_ctrl;
|
|||||||
#define GIC_CPU_CTRL 0x00
|
#define GIC_CPU_CTRL 0x00
|
||||||
#define GIC_CPU_CTRL_ENABLE 1
|
#define GIC_CPU_CTRL_ENABLE 1
|
||||||
|
|
||||||
int __init ox820_boot_secondary(unsigned int cpu, struct task_struct *idle)
|
static int __init ox820_boot_secondary(unsigned int cpu,
|
||||||
|
struct task_struct *idle)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* Write the address of secondary startup into the
|
* Write the address of secondary startup into the
|
||||||
|
@@ -20,6 +20,7 @@ config ARM64
|
|||||||
select ARCH_HAS_KCOV
|
select ARCH_HAS_KCOV
|
||||||
select ARCH_HAS_KEEPINITRD
|
select ARCH_HAS_KEEPINITRD
|
||||||
select ARCH_HAS_MEMBARRIER_SYNC_CORE
|
select ARCH_HAS_MEMBARRIER_SYNC_CORE
|
||||||
|
select ARCH_HAS_NON_OVERLAPPING_ADDRESS_SPACE
|
||||||
select ARCH_HAS_PTE_DEVMAP
|
select ARCH_HAS_PTE_DEVMAP
|
||||||
select ARCH_HAS_PTE_SPECIAL
|
select ARCH_HAS_PTE_SPECIAL
|
||||||
select ARCH_HAS_SETUP_DMA_OPS
|
select ARCH_HAS_SETUP_DMA_OPS
|
||||||
|
@@ -98,7 +98,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
&codec_analog {
|
&codec_analog {
|
||||||
hpvcc-supply = <®_eldo1>;
|
cpvdd-supply = <®_eldo1>;
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -154,24 +154,6 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
sound_spdif {
|
|
||||||
compatible = "simple-audio-card";
|
|
||||||
simple-audio-card,name = "On-board SPDIF";
|
|
||||||
|
|
||||||
simple-audio-card,cpu {
|
|
||||||
sound-dai = <&spdif>;
|
|
||||||
};
|
|
||||||
|
|
||||||
simple-audio-card,codec {
|
|
||||||
sound-dai = <&spdif_out>;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
spdif_out: spdif-out {
|
|
||||||
#sound-dai-cells = <0>;
|
|
||||||
compatible = "linux,spdif-dit";
|
|
||||||
};
|
|
||||||
|
|
||||||
timer {
|
timer {
|
||||||
compatible = "arm,armv8-timer";
|
compatible = "arm,armv8-timer";
|
||||||
allwinner,erratum-unknown1;
|
allwinner,erratum-unknown1;
|
||||||
|
@@ -2319,7 +2319,7 @@
|
|||||||
reg = <0x0 0xff400000 0x0 0x40000>;
|
reg = <0x0 0xff400000 0x0 0x40000>;
|
||||||
interrupts = <GIC_SPI 31 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 31 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&clkc CLKID_USB1_DDR_BRIDGE>;
|
clocks = <&clkc CLKID_USB1_DDR_BRIDGE>;
|
||||||
clock-names = "ddr";
|
clock-names = "otg";
|
||||||
phys = <&usb2_phy1>;
|
phys = <&usb2_phy1>;
|
||||||
phy-names = "usb2-phy";
|
phy-names = "usb2-phy";
|
||||||
dr_mode = "peripheral";
|
dr_mode = "peripheral";
|
||||||
|
@@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2019 BayLibre, SAS
|
* Copyright (c) 2019 BayLibre, SAS
|
||||||
|
@@ -154,6 +154,10 @@
|
|||||||
clock-latency = <50000>;
|
clock-latency = <50000>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
&frddr_a {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
&frddr_b {
|
&frddr_b {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
@@ -545,7 +545,7 @@
|
|||||||
&usb {
|
&usb {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
dr_mode = "host";
|
dr_mode = "host";
|
||||||
vbus-regulator = <&usb_pwr_en>;
|
vbus-supply = <&usb_pwr_en>;
|
||||||
};
|
};
|
||||||
|
|
||||||
&usb2_phy0 {
|
&usb2_phy0 {
|
||||||
|
@@ -447,7 +447,7 @@
|
|||||||
|
|
||||||
edma0: dma-controller@22c0000 {
|
edma0: dma-controller@22c0000 {
|
||||||
#dma-cells = <2>;
|
#dma-cells = <2>;
|
||||||
compatible = "fsl,ls1028a-edma";
|
compatible = "fsl,ls1028a-edma", "fsl,vf610-edma";
|
||||||
reg = <0x0 0x22c0000 0x0 0x10000>,
|
reg = <0x0 0x22c0000 0x0 0x10000>,
|
||||||
<0x0 0x22d0000 0x0 0x10000>,
|
<0x0 0x22d0000 0x0 0x10000>,
|
||||||
<0x0 0x22e0000 0x0 0x10000>;
|
<0x0 0x22e0000 0x0 0x10000>;
|
||||||
|
@@ -264,7 +264,7 @@
|
|||||||
|
|
||||||
aips1: bus@30000000 {
|
aips1: bus@30000000 {
|
||||||
compatible = "fsl,aips-bus", "simple-bus";
|
compatible = "fsl,aips-bus", "simple-bus";
|
||||||
reg = <0x301f0000 0x10000>;
|
reg = <0x30000000 0x400000>;
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
ranges = <0x30000000 0x30000000 0x400000>;
|
ranges = <0x30000000 0x30000000 0x400000>;
|
||||||
@@ -543,7 +543,7 @@
|
|||||||
|
|
||||||
aips2: bus@30400000 {
|
aips2: bus@30400000 {
|
||||||
compatible = "fsl,aips-bus", "simple-bus";
|
compatible = "fsl,aips-bus", "simple-bus";
|
||||||
reg = <0x305f0000 0x10000>;
|
reg = <0x30400000 0x400000>;
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
ranges = <0x30400000 0x30400000 0x400000>;
|
ranges = <0x30400000 0x30400000 0x400000>;
|
||||||
@@ -603,7 +603,7 @@
|
|||||||
|
|
||||||
aips3: bus@30800000 {
|
aips3: bus@30800000 {
|
||||||
compatible = "fsl,aips-bus", "simple-bus";
|
compatible = "fsl,aips-bus", "simple-bus";
|
||||||
reg = <0x309f0000 0x10000>;
|
reg = <0x30800000 0x400000>;
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
ranges = <0x30800000 0x30800000 0x400000>,
|
ranges = <0x30800000 0x30800000 0x400000>,
|
||||||
@@ -863,7 +863,7 @@
|
|||||||
|
|
||||||
aips4: bus@32c00000 {
|
aips4: bus@32c00000 {
|
||||||
compatible = "fsl,aips-bus", "simple-bus";
|
compatible = "fsl,aips-bus", "simple-bus";
|
||||||
reg = <0x32df0000 0x10000>;
|
reg = <0x32c00000 0x400000>;
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
ranges = <0x32c00000 0x32c00000 0x400000>;
|
ranges = <0x32c00000 0x32c00000 0x400000>;
|
||||||
|
@@ -241,7 +241,7 @@
|
|||||||
|
|
||||||
aips1: bus@30000000 {
|
aips1: bus@30000000 {
|
||||||
compatible = "fsl,aips-bus", "simple-bus";
|
compatible = "fsl,aips-bus", "simple-bus";
|
||||||
reg = <0x301f0000 0x10000>;
|
reg = <0x30000000 0x400000>;
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
ranges;
|
ranges;
|
||||||
@@ -448,7 +448,7 @@
|
|||||||
|
|
||||||
aips2: bus@30400000 {
|
aips2: bus@30400000 {
|
||||||
compatible = "fsl,aips-bus", "simple-bus";
|
compatible = "fsl,aips-bus", "simple-bus";
|
||||||
reg = <0x305f0000 0x10000>;
|
reg = <0x30400000 0x400000>;
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
ranges;
|
ranges;
|
||||||
@@ -508,7 +508,7 @@
|
|||||||
|
|
||||||
aips3: bus@30800000 {
|
aips3: bus@30800000 {
|
||||||
compatible = "fsl,aips-bus", "simple-bus";
|
compatible = "fsl,aips-bus", "simple-bus";
|
||||||
reg = <0x309f0000 0x10000>;
|
reg = <0x30800000 0x400000>;
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
ranges;
|
ranges;
|
||||||
@@ -718,7 +718,7 @@
|
|||||||
reg = <0x30bd0000 0x10000>;
|
reg = <0x30bd0000 0x10000>;
|
||||||
interrupts = <GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&clk IMX8MN_CLK_SDMA1_ROOT>,
|
clocks = <&clk IMX8MN_CLK_SDMA1_ROOT>,
|
||||||
<&clk IMX8MN_CLK_SDMA1_ROOT>;
|
<&clk IMX8MN_CLK_AHB>;
|
||||||
clock-names = "ipg", "ahb";
|
clock-names = "ipg", "ahb";
|
||||||
#dma-cells = <3>;
|
#dma-cells = <3>;
|
||||||
fsl,sdma-ram-script-name = "imx/sdma/sdma-imx7d.bin";
|
fsl,sdma-ram-script-name = "imx/sdma/sdma-imx7d.bin";
|
||||||
@@ -754,7 +754,7 @@
|
|||||||
|
|
||||||
aips4: bus@32c00000 {
|
aips4: bus@32c00000 {
|
||||||
compatible = "fsl,aips-bus", "simple-bus";
|
compatible = "fsl,aips-bus", "simple-bus";
|
||||||
reg = <0x32df0000 0x10000>;
|
reg = <0x32c00000 0x400000>;
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
ranges;
|
ranges;
|
||||||
|
@@ -151,26 +151,26 @@
|
|||||||
#define MX8MP_IOMUXC_ENET_TXC__SIM_M_HADDR22 0x070 0x2D0 0x000 0x7 0x0
|
#define MX8MP_IOMUXC_ENET_TXC__SIM_M_HADDR22 0x070 0x2D0 0x000 0x7 0x0
|
||||||
#define MX8MP_IOMUXC_ENET_RX_CTL__ENET_QOS_RGMII_RX_CTL 0x074 0x2D4 0x000 0x0 0x0
|
#define MX8MP_IOMUXC_ENET_RX_CTL__ENET_QOS_RGMII_RX_CTL 0x074 0x2D4 0x000 0x0 0x0
|
||||||
#define MX8MP_IOMUXC_ENET_RX_CTL__AUDIOMIX_SAI7_TX_SYNC 0x074 0x2D4 0x540 0x2 0x0
|
#define MX8MP_IOMUXC_ENET_RX_CTL__AUDIOMIX_SAI7_TX_SYNC 0x074 0x2D4 0x540 0x2 0x0
|
||||||
#define MX8MP_IOMUXC_ENET_RX_CTL__AUDIOMIX_BIT_STREAM03 0x074 0x2D4 0x4CC 0x3 0x0
|
#define MX8MP_IOMUXC_ENET_RX_CTL__AUDIOMIX_BIT_STREAM03 0x074 0x2D4 0x4CC 0x3 0x1
|
||||||
#define MX8MP_IOMUXC_ENET_RX_CTL__GPIO1_IO24 0x074 0x2D4 0x000 0x5 0x0
|
#define MX8MP_IOMUXC_ENET_RX_CTL__GPIO1_IO24 0x074 0x2D4 0x000 0x5 0x0
|
||||||
#define MX8MP_IOMUXC_ENET_RX_CTL__USDHC3_DATA2 0x074 0x2D4 0x618 0x6 0x0
|
#define MX8MP_IOMUXC_ENET_RX_CTL__USDHC3_DATA2 0x074 0x2D4 0x618 0x6 0x0
|
||||||
#define MX8MP_IOMUXC_ENET_RX_CTL__SIM_M_HADDR23 0x074 0x2D4 0x000 0x7 0x0
|
#define MX8MP_IOMUXC_ENET_RX_CTL__SIM_M_HADDR23 0x074 0x2D4 0x000 0x7 0x0
|
||||||
#define MX8MP_IOMUXC_ENET_RXC__CCM_ENET_QOS_CLOCK_GENERATE_RX_CLK 0x078 0x2D8 0x000 0x0 0x0
|
#define MX8MP_IOMUXC_ENET_RXC__CCM_ENET_QOS_CLOCK_GENERATE_RX_CLK 0x078 0x2D8 0x000 0x0 0x0
|
||||||
#define MX8MP_IOMUXC_ENET_RXC__ENET_QOS_RX_ER 0x078 0x2D8 0x000 0x1 0x0
|
#define MX8MP_IOMUXC_ENET_RXC__ENET_QOS_RX_ER 0x078 0x2D8 0x000 0x1 0x0
|
||||||
#define MX8MP_IOMUXC_ENET_RXC__AUDIOMIX_SAI7_TX_BCLK 0x078 0x2D8 0x53C 0x2 0x0
|
#define MX8MP_IOMUXC_ENET_RXC__AUDIOMIX_SAI7_TX_BCLK 0x078 0x2D8 0x53C 0x2 0x0
|
||||||
#define MX8MP_IOMUXC_ENET_RXC__AUDIOMIX_BIT_STREAM02 0x078 0x2D8 0x4C8 0x3 0x0
|
#define MX8MP_IOMUXC_ENET_RXC__AUDIOMIX_BIT_STREAM02 0x078 0x2D8 0x4C8 0x3 0x1
|
||||||
#define MX8MP_IOMUXC_ENET_RXC__GPIO1_IO25 0x078 0x2D8 0x000 0x5 0x0
|
#define MX8MP_IOMUXC_ENET_RXC__GPIO1_IO25 0x078 0x2D8 0x000 0x5 0x0
|
||||||
#define MX8MP_IOMUXC_ENET_RXC__USDHC3_DATA3 0x078 0x2D8 0x61C 0x6 0x0
|
#define MX8MP_IOMUXC_ENET_RXC__USDHC3_DATA3 0x078 0x2D8 0x61C 0x6 0x0
|
||||||
#define MX8MP_IOMUXC_ENET_RXC__SIM_M_HADDR24 0x078 0x2D8 0x000 0x7 0x0
|
#define MX8MP_IOMUXC_ENET_RXC__SIM_M_HADDR24 0x078 0x2D8 0x000 0x7 0x0
|
||||||
#define MX8MP_IOMUXC_ENET_RD0__ENET_QOS_RGMII_RD0 0x07C 0x2DC 0x000 0x0 0x0
|
#define MX8MP_IOMUXC_ENET_RD0__ENET_QOS_RGMII_RD0 0x07C 0x2DC 0x000 0x0 0x0
|
||||||
#define MX8MP_IOMUXC_ENET_RD0__AUDIOMIX_SAI7_RX_DATA00 0x07C 0x2DC 0x534 0x2 0x0
|
#define MX8MP_IOMUXC_ENET_RD0__AUDIOMIX_SAI7_RX_DATA00 0x07C 0x2DC 0x534 0x2 0x0
|
||||||
#define MX8MP_IOMUXC_ENET_RD0__AUDIOMIX_BIT_STREAM01 0x07C 0x2DC 0x4C4 0x3 0x0
|
#define MX8MP_IOMUXC_ENET_RD0__AUDIOMIX_BIT_STREAM01 0x07C 0x2DC 0x4C4 0x3 0x1
|
||||||
#define MX8MP_IOMUXC_ENET_RD0__GPIO1_IO26 0x07C 0x2DC 0x000 0x5 0x0
|
#define MX8MP_IOMUXC_ENET_RD0__GPIO1_IO26 0x07C 0x2DC 0x000 0x5 0x0
|
||||||
#define MX8MP_IOMUXC_ENET_RD0__USDHC3_DATA4 0x07C 0x2DC 0x620 0x6 0x0
|
#define MX8MP_IOMUXC_ENET_RD0__USDHC3_DATA4 0x07C 0x2DC 0x620 0x6 0x0
|
||||||
#define MX8MP_IOMUXC_ENET_RD0__SIM_M_HADDR25 0x07C 0x2DC 0x000 0x7 0x0
|
#define MX8MP_IOMUXC_ENET_RD0__SIM_M_HADDR25 0x07C 0x2DC 0x000 0x7 0x0
|
||||||
#define MX8MP_IOMUXC_ENET_RD1__ENET_QOS_RGMII_RD1 0x080 0x2E0 0x000 0x0 0x0
|
#define MX8MP_IOMUXC_ENET_RD1__ENET_QOS_RGMII_RD1 0x080 0x2E0 0x000 0x0 0x0
|
||||||
#define MX8MP_IOMUXC_ENET_RD1__AUDIOMIX_SAI7_RX_SYNC 0x080 0x2E0 0x538 0x2 0x0
|
#define MX8MP_IOMUXC_ENET_RD1__AUDIOMIX_SAI7_RX_SYNC 0x080 0x2E0 0x538 0x2 0x0
|
||||||
#define MX8MP_IOMUXC_ENET_RD1__AUDIOMIX_BIT_STREAM00 0x080 0x2E0 0x4C0 0x3 0x0
|
#define MX8MP_IOMUXC_ENET_RD1__AUDIOMIX_BIT_STREAM00 0x080 0x2E0 0x4C0 0x3 0x1
|
||||||
#define MX8MP_IOMUXC_ENET_RD1__GPIO1_IO27 0x080 0x2E0 0x000 0x5 0x0
|
#define MX8MP_IOMUXC_ENET_RD1__GPIO1_IO27 0x080 0x2E0 0x000 0x5 0x0
|
||||||
#define MX8MP_IOMUXC_ENET_RD1__USDHC3_RESET_B 0x080 0x2E0 0x000 0x6 0x0
|
#define MX8MP_IOMUXC_ENET_RD1__USDHC3_RESET_B 0x080 0x2E0 0x000 0x6 0x0
|
||||||
#define MX8MP_IOMUXC_ENET_RD1__SIM_M_HADDR26 0x080 0x2E0 0x000 0x7 0x0
|
#define MX8MP_IOMUXC_ENET_RD1__SIM_M_HADDR26 0x080 0x2E0 0x000 0x7 0x0
|
||||||
@@ -291,7 +291,7 @@
|
|||||||
#define MX8MP_IOMUXC_SD2_DATA0__I2C4_SDA 0x0C8 0x328 0x5C0 0x2 0x1
|
#define MX8MP_IOMUXC_SD2_DATA0__I2C4_SDA 0x0C8 0x328 0x5C0 0x2 0x1
|
||||||
#define MX8MP_IOMUXC_SD2_DATA0__UART2_DCE_RX 0x0C8 0x328 0x5F0 0x3 0x2
|
#define MX8MP_IOMUXC_SD2_DATA0__UART2_DCE_RX 0x0C8 0x328 0x5F0 0x3 0x2
|
||||||
#define MX8MP_IOMUXC_SD2_DATA0__UART2_DTE_TX 0x0C8 0x328 0x000 0x3 0x0
|
#define MX8MP_IOMUXC_SD2_DATA0__UART2_DTE_TX 0x0C8 0x328 0x000 0x3 0x0
|
||||||
#define MX8MP_IOMUXC_SD2_DATA0__AUDIOMIX_BIT_STREAM00 0x0C8 0x328 0x4C0 0x4 0x1
|
#define MX8MP_IOMUXC_SD2_DATA0__AUDIOMIX_BIT_STREAM00 0x0C8 0x328 0x4C0 0x4 0x2
|
||||||
#define MX8MP_IOMUXC_SD2_DATA0__GPIO2_IO15 0x0C8 0x328 0x000 0x5 0x0
|
#define MX8MP_IOMUXC_SD2_DATA0__GPIO2_IO15 0x0C8 0x328 0x000 0x5 0x0
|
||||||
#define MX8MP_IOMUXC_SD2_DATA0__CCMSRCGPCMIX_OBSERVE2 0x0C8 0x328 0x000 0x6 0x0
|
#define MX8MP_IOMUXC_SD2_DATA0__CCMSRCGPCMIX_OBSERVE2 0x0C8 0x328 0x000 0x6 0x0
|
||||||
#define MX8MP_IOMUXC_SD2_DATA0__OBSERVE_MUX_OUT02 0x0C8 0x328 0x000 0x7 0x0
|
#define MX8MP_IOMUXC_SD2_DATA0__OBSERVE_MUX_OUT02 0x0C8 0x328 0x000 0x7 0x0
|
||||||
@@ -313,7 +313,7 @@
|
|||||||
#define MX8MP_IOMUXC_SD2_DATA3__USDHC2_DATA3 0x0D4 0x334 0x000 0x0 0x0
|
#define MX8MP_IOMUXC_SD2_DATA3__USDHC2_DATA3 0x0D4 0x334 0x000 0x0 0x0
|
||||||
#define MX8MP_IOMUXC_SD2_DATA3__ECSPI2_MISO 0x0D4 0x334 0x56C 0x2 0x0
|
#define MX8MP_IOMUXC_SD2_DATA3__ECSPI2_MISO 0x0D4 0x334 0x56C 0x2 0x0
|
||||||
#define MX8MP_IOMUXC_SD2_DATA3__AUDIOMIX_SPDIF_IN 0x0D4 0x334 0x544 0x3 0x1
|
#define MX8MP_IOMUXC_SD2_DATA3__AUDIOMIX_SPDIF_IN 0x0D4 0x334 0x544 0x3 0x1
|
||||||
#define MX8MP_IOMUXC_SD2_DATA3__AUDIOMIX_BIT_STREAM03 0x0D4 0x334 0x4CC 0x4 0x1
|
#define MX8MP_IOMUXC_SD2_DATA3__AUDIOMIX_BIT_STREAM03 0x0D4 0x334 0x4CC 0x4 0x2
|
||||||
#define MX8MP_IOMUXC_SD2_DATA3__GPIO2_IO18 0x0D4 0x334 0x000 0x5 0x0
|
#define MX8MP_IOMUXC_SD2_DATA3__GPIO2_IO18 0x0D4 0x334 0x000 0x5 0x0
|
||||||
#define MX8MP_IOMUXC_SD2_DATA3__CCMSRCGPCMIX_EARLY_RESET 0x0D4 0x334 0x000 0x6 0x0
|
#define MX8MP_IOMUXC_SD2_DATA3__CCMSRCGPCMIX_EARLY_RESET 0x0D4 0x334 0x000 0x6 0x0
|
||||||
#define MX8MP_IOMUXC_SD2_RESET_B__USDHC2_RESET_B 0x0D8 0x338 0x000 0x0 0x0
|
#define MX8MP_IOMUXC_SD2_RESET_B__USDHC2_RESET_B 0x0D8 0x338 0x000 0x0 0x0
|
||||||
@@ -487,27 +487,27 @@
|
|||||||
#define MX8MP_IOMUXC_SAI5_RXD0__AUDIOMIX_SAI1_TX_DATA02 0x134 0x394 0x000 0x1 0x0
|
#define MX8MP_IOMUXC_SAI5_RXD0__AUDIOMIX_SAI1_TX_DATA02 0x134 0x394 0x000 0x1 0x0
|
||||||
#define MX8MP_IOMUXC_SAI5_RXD0__PWM2_OUT 0x134 0x394 0x000 0x2 0x0
|
#define MX8MP_IOMUXC_SAI5_RXD0__PWM2_OUT 0x134 0x394 0x000 0x2 0x0
|
||||||
#define MX8MP_IOMUXC_SAI5_RXD0__I2C5_SCL 0x134 0x394 0x5C4 0x3 0x1
|
#define MX8MP_IOMUXC_SAI5_RXD0__I2C5_SCL 0x134 0x394 0x5C4 0x3 0x1
|
||||||
#define MX8MP_IOMUXC_SAI5_RXD0__AUDIOMIX_BIT_STREAM00 0x134 0x394 0x4C0 0x4 0x2
|
#define MX8MP_IOMUXC_SAI5_RXD0__AUDIOMIX_BIT_STREAM00 0x134 0x394 0x4C0 0x4 0x3
|
||||||
#define MX8MP_IOMUXC_SAI5_RXD0__GPIO3_IO21 0x134 0x394 0x000 0x5 0x0
|
#define MX8MP_IOMUXC_SAI5_RXD0__GPIO3_IO21 0x134 0x394 0x000 0x5 0x0
|
||||||
#define MX8MP_IOMUXC_SAI5_RXD1__AUDIOMIX_SAI5_RX_DATA01 0x138 0x398 0x4FC 0x0 0x0
|
#define MX8MP_IOMUXC_SAI5_RXD1__AUDIOMIX_SAI5_RX_DATA01 0x138 0x398 0x4FC 0x0 0x0
|
||||||
#define MX8MP_IOMUXC_SAI5_RXD1__AUDIOMIX_SAI1_TX_DATA03 0x138 0x398 0x000 0x1 0x0
|
#define MX8MP_IOMUXC_SAI5_RXD1__AUDIOMIX_SAI1_TX_DATA03 0x138 0x398 0x000 0x1 0x0
|
||||||
#define MX8MP_IOMUXC_SAI5_RXD1__AUDIOMIX_SAI1_TX_SYNC 0x138 0x398 0x4D8 0x2 0x0
|
#define MX8MP_IOMUXC_SAI5_RXD1__AUDIOMIX_SAI1_TX_SYNC 0x138 0x398 0x4D8 0x2 0x0
|
||||||
#define MX8MP_IOMUXC_SAI5_RXD1__AUDIOMIX_SAI5_TX_SYNC 0x138 0x398 0x510 0x3 0x0
|
#define MX8MP_IOMUXC_SAI5_RXD1__AUDIOMIX_SAI5_TX_SYNC 0x138 0x398 0x510 0x3 0x0
|
||||||
#define MX8MP_IOMUXC_SAI5_RXD1__AUDIOMIX_BIT_STREAM01 0x138 0x398 0x4C4 0x4 0x2
|
#define MX8MP_IOMUXC_SAI5_RXD1__AUDIOMIX_BIT_STREAM01 0x138 0x398 0x4C4 0x4 0x3
|
||||||
#define MX8MP_IOMUXC_SAI5_RXD1__GPIO3_IO22 0x138 0x398 0x000 0x5 0x0
|
#define MX8MP_IOMUXC_SAI5_RXD1__GPIO3_IO22 0x138 0x398 0x000 0x5 0x0
|
||||||
#define MX8MP_IOMUXC_SAI5_RXD1__CAN1_TX 0x138 0x398 0x000 0x6 0x0
|
#define MX8MP_IOMUXC_SAI5_RXD1__CAN1_TX 0x138 0x398 0x000 0x6 0x0
|
||||||
#define MX8MP_IOMUXC_SAI5_RXD2__AUDIOMIX_SAI5_RX_DATA02 0x13C 0x39C 0x500 0x0 0x0
|
#define MX8MP_IOMUXC_SAI5_RXD2__AUDIOMIX_SAI5_RX_DATA02 0x13C 0x39C 0x500 0x0 0x0
|
||||||
#define MX8MP_IOMUXC_SAI5_RXD2__AUDIOMIX_SAI1_TX_DATA04 0x13C 0x39C 0x000 0x1 0x0
|
#define MX8MP_IOMUXC_SAI5_RXD2__AUDIOMIX_SAI1_TX_DATA04 0x13C 0x39C 0x000 0x1 0x0
|
||||||
#define MX8MP_IOMUXC_SAI5_RXD2__AUDIOMIX_SAI1_TX_SYNC 0x13C 0x39C 0x4D8 0x2 0x1
|
#define MX8MP_IOMUXC_SAI5_RXD2__AUDIOMIX_SAI1_TX_SYNC 0x13C 0x39C 0x4D8 0x2 0x1
|
||||||
#define MX8MP_IOMUXC_SAI5_RXD2__AUDIOMIX_SAI5_TX_BCLK 0x13C 0x39C 0x50C 0x3 0x0
|
#define MX8MP_IOMUXC_SAI5_RXD2__AUDIOMIX_SAI5_TX_BCLK 0x13C 0x39C 0x50C 0x3 0x0
|
||||||
#define MX8MP_IOMUXC_SAI5_RXD2__AUDIOMIX_BIT_STREAM02 0x13C 0x39C 0x4C8 0x4 0x2
|
#define MX8MP_IOMUXC_SAI5_RXD2__AUDIOMIX_BIT_STREAM02 0x13C 0x39C 0x4C8 0x4 0x3
|
||||||
#define MX8MP_IOMUXC_SAI5_RXD2__GPIO3_IO23 0x13C 0x39C 0x000 0x5 0x0
|
#define MX8MP_IOMUXC_SAI5_RXD2__GPIO3_IO23 0x13C 0x39C 0x000 0x5 0x0
|
||||||
#define MX8MP_IOMUXC_SAI5_RXD2__CAN1_RX 0x13C 0x39C 0x54C 0x6 0x0
|
#define MX8MP_IOMUXC_SAI5_RXD2__CAN1_RX 0x13C 0x39C 0x54C 0x6 0x0
|
||||||
#define MX8MP_IOMUXC_SAI5_RXD3__AUDIOMIX_SAI5_RX_DATA03 0x140 0x3A0 0x504 0x0 0x0
|
#define MX8MP_IOMUXC_SAI5_RXD3__AUDIOMIX_SAI5_RX_DATA03 0x140 0x3A0 0x504 0x0 0x0
|
||||||
#define MX8MP_IOMUXC_SAI5_RXD3__AUDIOMIX_SAI1_TX_DATA05 0x140 0x3A0 0x000 0x1 0x0
|
#define MX8MP_IOMUXC_SAI5_RXD3__AUDIOMIX_SAI1_TX_DATA05 0x140 0x3A0 0x000 0x1 0x0
|
||||||
#define MX8MP_IOMUXC_SAI5_RXD3__AUDIOMIX_SAI1_TX_SYNC 0x140 0x3A0 0x4D8 0x2 0x2
|
#define MX8MP_IOMUXC_SAI5_RXD3__AUDIOMIX_SAI1_TX_SYNC 0x140 0x3A0 0x4D8 0x2 0x2
|
||||||
#define MX8MP_IOMUXC_SAI5_RXD3__AUDIOMIX_SAI5_TX_DATA00 0x140 0x3A0 0x000 0x3 0x0
|
#define MX8MP_IOMUXC_SAI5_RXD3__AUDIOMIX_SAI5_TX_DATA00 0x140 0x3A0 0x000 0x3 0x0
|
||||||
#define MX8MP_IOMUXC_SAI5_RXD3__AUDIOMIX_BIT_STREAM03 0x140 0x3A0 0x4CC 0x4 0x2
|
#define MX8MP_IOMUXC_SAI5_RXD3__AUDIOMIX_BIT_STREAM03 0x140 0x3A0 0x4CC 0x4 0x3
|
||||||
#define MX8MP_IOMUXC_SAI5_RXD3__GPIO3_IO24 0x140 0x3A0 0x000 0x5 0x0
|
#define MX8MP_IOMUXC_SAI5_RXD3__GPIO3_IO24 0x140 0x3A0 0x000 0x5 0x0
|
||||||
#define MX8MP_IOMUXC_SAI5_RXD3__CAN2_TX 0x140 0x3A0 0x000 0x6 0x0
|
#define MX8MP_IOMUXC_SAI5_RXD3__CAN2_TX 0x140 0x3A0 0x000 0x6 0x0
|
||||||
#define MX8MP_IOMUXC_SAI5_MCLK__AUDIOMIX_SAI5_MCLK 0x144 0x3A4 0x4F0 0x0 0x0
|
#define MX8MP_IOMUXC_SAI5_MCLK__AUDIOMIX_SAI5_MCLK 0x144 0x3A4 0x4F0 0x0 0x0
|
||||||
@@ -528,22 +528,22 @@
|
|||||||
#define MX8MP_IOMUXC_SAI1_RXD0__AUDIOMIX_SAI1_RX_DATA00 0x150 0x3B0 0x000 0x0 0x0
|
#define MX8MP_IOMUXC_SAI1_RXD0__AUDIOMIX_SAI1_RX_DATA00 0x150 0x3B0 0x000 0x0 0x0
|
||||||
#define MX8MP_IOMUXC_SAI1_RXD0__AUDIOMIX_SAI5_RX_DATA00 0x150 0x3B0 0x4F8 0x1 0x1
|
#define MX8MP_IOMUXC_SAI1_RXD0__AUDIOMIX_SAI5_RX_DATA00 0x150 0x3B0 0x4F8 0x1 0x1
|
||||||
#define MX8MP_IOMUXC_SAI1_RXD0__AUDIOMIX_SAI1_TX_DATA01 0x150 0x3B0 0x000 0x2 0x0
|
#define MX8MP_IOMUXC_SAI1_RXD0__AUDIOMIX_SAI1_TX_DATA01 0x150 0x3B0 0x000 0x2 0x0
|
||||||
#define MX8MP_IOMUXC_SAI1_RXD0__AUDIOMIX_BIT_STREAM00 0x150 0x3B0 0x4C0 0x3 0x3
|
#define MX8MP_IOMUXC_SAI1_RXD0__AUDIOMIX_BIT_STREAM00 0x150 0x3B0 0x4C0 0x3 0x4
|
||||||
#define MX8MP_IOMUXC_SAI1_RXD0__ENET1_1588_EVENT1_IN 0x150 0x3B0 0x000 0x4 0x0
|
#define MX8MP_IOMUXC_SAI1_RXD0__ENET1_1588_EVENT1_IN 0x150 0x3B0 0x000 0x4 0x0
|
||||||
#define MX8MP_IOMUXC_SAI1_RXD0__GPIO4_IO02 0x150 0x3B0 0x000 0x5 0x0
|
#define MX8MP_IOMUXC_SAI1_RXD0__GPIO4_IO02 0x150 0x3B0 0x000 0x5 0x0
|
||||||
#define MX8MP_IOMUXC_SAI1_RXD1__AUDIOMIX_SAI1_RX_DATA01 0x154 0x3B4 0x000 0x0 0x0
|
#define MX8MP_IOMUXC_SAI1_RXD1__AUDIOMIX_SAI1_RX_DATA01 0x154 0x3B4 0x000 0x0 0x0
|
||||||
#define MX8MP_IOMUXC_SAI1_RXD1__AUDIOMIX_SAI5_RX_DATA01 0x154 0x3B4 0x4FC 0x1 0x1
|
#define MX8MP_IOMUXC_SAI1_RXD1__AUDIOMIX_SAI5_RX_DATA01 0x154 0x3B4 0x4FC 0x1 0x1
|
||||||
#define MX8MP_IOMUXC_SAI1_RXD1__AUDIOMIX_BIT_STREAM01 0x154 0x3B4 0x4C4 0x3 0x3
|
#define MX8MP_IOMUXC_SAI1_RXD1__AUDIOMIX_BIT_STREAM01 0x154 0x3B4 0x4C4 0x3 0x4
|
||||||
#define MX8MP_IOMUXC_SAI1_RXD1__ENET1_1588_EVENT1_OUT 0x154 0x3B4 0x000 0x4 0x0
|
#define MX8MP_IOMUXC_SAI1_RXD1__ENET1_1588_EVENT1_OUT 0x154 0x3B4 0x000 0x4 0x0
|
||||||
#define MX8MP_IOMUXC_SAI1_RXD1__GPIO4_IO03 0x154 0x3B4 0x000 0x5 0x0
|
#define MX8MP_IOMUXC_SAI1_RXD1__GPIO4_IO03 0x154 0x3B4 0x000 0x5 0x0
|
||||||
#define MX8MP_IOMUXC_SAI1_RXD2__AUDIOMIX_SAI1_RX_DATA02 0x158 0x3B8 0x000 0x0 0x0
|
#define MX8MP_IOMUXC_SAI1_RXD2__AUDIOMIX_SAI1_RX_DATA02 0x158 0x3B8 0x000 0x0 0x0
|
||||||
#define MX8MP_IOMUXC_SAI1_RXD2__AUDIOMIX_SAI5_RX_DATA02 0x158 0x3B8 0x500 0x1 0x1
|
#define MX8MP_IOMUXC_SAI1_RXD2__AUDIOMIX_SAI5_RX_DATA02 0x158 0x3B8 0x500 0x1 0x1
|
||||||
#define MX8MP_IOMUXC_SAI1_RXD2__AUDIOMIX_BIT_STREAM02 0x158 0x3B8 0x4C8 0x3 0x3
|
#define MX8MP_IOMUXC_SAI1_RXD2__AUDIOMIX_BIT_STREAM02 0x158 0x3B8 0x4C8 0x3 0x4
|
||||||
#define MX8MP_IOMUXC_SAI1_RXD2__ENET1_MDC 0x158 0x3B8 0x000 0x4 0x0
|
#define MX8MP_IOMUXC_SAI1_RXD2__ENET1_MDC 0x158 0x3B8 0x000 0x4 0x0
|
||||||
#define MX8MP_IOMUXC_SAI1_RXD2__GPIO4_IO04 0x158 0x3B8 0x000 0x5 0x0
|
#define MX8MP_IOMUXC_SAI1_RXD2__GPIO4_IO04 0x158 0x3B8 0x000 0x5 0x0
|
||||||
#define MX8MP_IOMUXC_SAI1_RXD3__AUDIOMIX_SAI1_RX_DATA03 0x15C 0x3BC 0x000 0x0 0x0
|
#define MX8MP_IOMUXC_SAI1_RXD3__AUDIOMIX_SAI1_RX_DATA03 0x15C 0x3BC 0x000 0x0 0x0
|
||||||
#define MX8MP_IOMUXC_SAI1_RXD3__AUDIOMIX_SAI5_RX_DATA03 0x15C 0x3BC 0x504 0x1 0x1
|
#define MX8MP_IOMUXC_SAI1_RXD3__AUDIOMIX_SAI5_RX_DATA03 0x15C 0x3BC 0x504 0x1 0x1
|
||||||
#define MX8MP_IOMUXC_SAI1_RXD3__AUDIOMIX_BIT_STREAM03 0x15C 0x3BC 0x4CC 0x3 0x3
|
#define MX8MP_IOMUXC_SAI1_RXD3__AUDIOMIX_BIT_STREAM03 0x15C 0x3BC 0x4CC 0x3 0x4
|
||||||
#define MX8MP_IOMUXC_SAI1_RXD3__ENET1_MDIO 0x15C 0x3BC 0x57C 0x4 0x1
|
#define MX8MP_IOMUXC_SAI1_RXD3__ENET1_MDIO 0x15C 0x3BC 0x57C 0x4 0x1
|
||||||
#define MX8MP_IOMUXC_SAI1_RXD3__GPIO4_IO05 0x15C 0x3BC 0x000 0x5 0x0
|
#define MX8MP_IOMUXC_SAI1_RXD3__GPIO4_IO05 0x15C 0x3BC 0x000 0x5 0x0
|
||||||
#define MX8MP_IOMUXC_SAI1_RXD4__AUDIOMIX_SAI1_RX_DATA04 0x160 0x3C0 0x000 0x0 0x0
|
#define MX8MP_IOMUXC_SAI1_RXD4__AUDIOMIX_SAI1_RX_DATA04 0x160 0x3C0 0x000 0x0 0x0
|
||||||
@@ -624,7 +624,7 @@
|
|||||||
#define MX8MP_IOMUXC_SAI2_RXFS__UART1_DCE_TX 0x19C 0x3FC 0x000 0x4 0x0
|
#define MX8MP_IOMUXC_SAI2_RXFS__UART1_DCE_TX 0x19C 0x3FC 0x000 0x4 0x0
|
||||||
#define MX8MP_IOMUXC_SAI2_RXFS__UART1_DTE_RX 0x19C 0x3FC 0x5E8 0x4 0x2
|
#define MX8MP_IOMUXC_SAI2_RXFS__UART1_DTE_RX 0x19C 0x3FC 0x5E8 0x4 0x2
|
||||||
#define MX8MP_IOMUXC_SAI2_RXFS__GPIO4_IO21 0x19C 0x3FC 0x000 0x5 0x0
|
#define MX8MP_IOMUXC_SAI2_RXFS__GPIO4_IO21 0x19C 0x3FC 0x000 0x5 0x0
|
||||||
#define MX8MP_IOMUXC_SAI2_RXFS__AUDIOMIX_BIT_STREAM02 0x19C 0x3FC 0x4C8 0x6 0x4
|
#define MX8MP_IOMUXC_SAI2_RXFS__AUDIOMIX_BIT_STREAM02 0x19C 0x3FC 0x4C8 0x6 0x5
|
||||||
#define MX8MP_IOMUXC_SAI2_RXFS__SIM_M_HSIZE00 0x19C 0x3FC 0x000 0x7 0x0
|
#define MX8MP_IOMUXC_SAI2_RXFS__SIM_M_HSIZE00 0x19C 0x3FC 0x000 0x7 0x0
|
||||||
#define MX8MP_IOMUXC_SAI2_RXC__AUDIOMIX_SAI2_RX_BCLK 0x1A0 0x400 0x000 0x0 0x0
|
#define MX8MP_IOMUXC_SAI2_RXC__AUDIOMIX_SAI2_RX_BCLK 0x1A0 0x400 0x000 0x0 0x0
|
||||||
#define MX8MP_IOMUXC_SAI2_RXC__AUDIOMIX_SAI5_TX_BCLK 0x1A0 0x400 0x50C 0x1 0x2
|
#define MX8MP_IOMUXC_SAI2_RXC__AUDIOMIX_SAI5_TX_BCLK 0x1A0 0x400 0x50C 0x1 0x2
|
||||||
@@ -632,7 +632,7 @@
|
|||||||
#define MX8MP_IOMUXC_SAI2_RXC__UART1_DCE_RX 0x1A0 0x400 0x5E8 0x4 0x3
|
#define MX8MP_IOMUXC_SAI2_RXC__UART1_DCE_RX 0x1A0 0x400 0x5E8 0x4 0x3
|
||||||
#define MX8MP_IOMUXC_SAI2_RXC__UART1_DTE_TX 0x1A0 0x400 0x000 0x4 0x0
|
#define MX8MP_IOMUXC_SAI2_RXC__UART1_DTE_TX 0x1A0 0x400 0x000 0x4 0x0
|
||||||
#define MX8MP_IOMUXC_SAI2_RXC__GPIO4_IO22 0x1A0 0x400 0x000 0x5 0x0
|
#define MX8MP_IOMUXC_SAI2_RXC__GPIO4_IO22 0x1A0 0x400 0x000 0x5 0x0
|
||||||
#define MX8MP_IOMUXC_SAI2_RXC__AUDIOMIX_BIT_STREAM01 0x1A0 0x400 0x4C4 0x6 0x4
|
#define MX8MP_IOMUXC_SAI2_RXC__AUDIOMIX_BIT_STREAM01 0x1A0 0x400 0x4C4 0x6 0x5
|
||||||
#define MX8MP_IOMUXC_SAI2_RXC__SIM_M_HSIZE01 0x1A0 0x400 0x000 0x7 0x0
|
#define MX8MP_IOMUXC_SAI2_RXC__SIM_M_HSIZE01 0x1A0 0x400 0x000 0x7 0x0
|
||||||
#define MX8MP_IOMUXC_SAI2_RXD0__AUDIOMIX_SAI2_RX_DATA00 0x1A4 0x404 0x000 0x0 0x0
|
#define MX8MP_IOMUXC_SAI2_RXD0__AUDIOMIX_SAI2_RX_DATA00 0x1A4 0x404 0x000 0x0 0x0
|
||||||
#define MX8MP_IOMUXC_SAI2_RXD0__AUDIOMIX_SAI5_TX_DATA00 0x1A4 0x404 0x000 0x1 0x0
|
#define MX8MP_IOMUXC_SAI2_RXD0__AUDIOMIX_SAI5_TX_DATA00 0x1A4 0x404 0x000 0x1 0x0
|
||||||
@@ -641,7 +641,7 @@
|
|||||||
#define MX8MP_IOMUXC_SAI2_RXD0__UART1_DCE_RTS 0x1A4 0x404 0x5E4 0x4 0x2
|
#define MX8MP_IOMUXC_SAI2_RXD0__UART1_DCE_RTS 0x1A4 0x404 0x5E4 0x4 0x2
|
||||||
#define MX8MP_IOMUXC_SAI2_RXD0__UART1_DTE_CTS 0x1A4 0x404 0x000 0x4 0x0
|
#define MX8MP_IOMUXC_SAI2_RXD0__UART1_DTE_CTS 0x1A4 0x404 0x000 0x4 0x0
|
||||||
#define MX8MP_IOMUXC_SAI2_RXD0__GPIO4_IO23 0x1A4 0x404 0x000 0x5 0x0
|
#define MX8MP_IOMUXC_SAI2_RXD0__GPIO4_IO23 0x1A4 0x404 0x000 0x5 0x0
|
||||||
#define MX8MP_IOMUXC_SAI2_RXD0__AUDIOMIX_BIT_STREAM03 0x1A4 0x404 0x4CC 0x6 0x4
|
#define MX8MP_IOMUXC_SAI2_RXD0__AUDIOMIX_BIT_STREAM03 0x1A4 0x404 0x4CC 0x6 0x5
|
||||||
#define MX8MP_IOMUXC_SAI2_RXD0__SIM_M_HSIZE02 0x1A4 0x404 0x000 0x7 0x0
|
#define MX8MP_IOMUXC_SAI2_RXD0__SIM_M_HSIZE02 0x1A4 0x404 0x000 0x7 0x0
|
||||||
#define MX8MP_IOMUXC_SAI2_TXFS__AUDIOMIX_SAI2_TX_SYNC 0x1A8 0x408 0x000 0x0 0x0
|
#define MX8MP_IOMUXC_SAI2_TXFS__AUDIOMIX_SAI2_TX_SYNC 0x1A8 0x408 0x000 0x0 0x0
|
||||||
#define MX8MP_IOMUXC_SAI2_TXFS__AUDIOMIX_SAI5_TX_DATA01 0x1A8 0x408 0x000 0x1 0x0
|
#define MX8MP_IOMUXC_SAI2_TXFS__AUDIOMIX_SAI5_TX_DATA01 0x1A8 0x408 0x000 0x1 0x0
|
||||||
@@ -650,13 +650,13 @@
|
|||||||
#define MX8MP_IOMUXC_SAI2_TXFS__UART1_DCE_CTS 0x1A8 0x408 0x000 0x4 0x0
|
#define MX8MP_IOMUXC_SAI2_TXFS__UART1_DCE_CTS 0x1A8 0x408 0x000 0x4 0x0
|
||||||
#define MX8MP_IOMUXC_SAI2_TXFS__UART1_DTE_RTS 0x1A8 0x408 0x5E4 0x4 0x3
|
#define MX8MP_IOMUXC_SAI2_TXFS__UART1_DTE_RTS 0x1A8 0x408 0x5E4 0x4 0x3
|
||||||
#define MX8MP_IOMUXC_SAI2_TXFS__GPIO4_IO24 0x1A8 0x408 0x000 0x5 0x0
|
#define MX8MP_IOMUXC_SAI2_TXFS__GPIO4_IO24 0x1A8 0x408 0x000 0x5 0x0
|
||||||
#define MX8MP_IOMUXC_SAI2_TXFS__AUDIOMIX_BIT_STREAM02 0x1A8 0x408 0x4C8 0x6 0x5
|
#define MX8MP_IOMUXC_SAI2_TXFS__AUDIOMIX_BIT_STREAM02 0x1A8 0x408 0x4C8 0x6 0x6
|
||||||
#define MX8MP_IOMUXC_SAI2_TXFS__SIM_M_HWRITE 0x1A8 0x408 0x000 0x7 0x0
|
#define MX8MP_IOMUXC_SAI2_TXFS__SIM_M_HWRITE 0x1A8 0x408 0x000 0x7 0x0
|
||||||
#define MX8MP_IOMUXC_SAI2_TXC__AUDIOMIX_SAI2_TX_BCLK 0x1AC 0x40C 0x000 0x0 0x0
|
#define MX8MP_IOMUXC_SAI2_TXC__AUDIOMIX_SAI2_TX_BCLK 0x1AC 0x40C 0x000 0x0 0x0
|
||||||
#define MX8MP_IOMUXC_SAI2_TXC__AUDIOMIX_SAI5_TX_DATA02 0x1AC 0x40C 0x000 0x1 0x0
|
#define MX8MP_IOMUXC_SAI2_TXC__AUDIOMIX_SAI5_TX_DATA02 0x1AC 0x40C 0x000 0x1 0x0
|
||||||
#define MX8MP_IOMUXC_SAI2_TXC__CAN1_RX 0x1AC 0x40C 0x54C 0x3 0x1
|
#define MX8MP_IOMUXC_SAI2_TXC__CAN1_RX 0x1AC 0x40C 0x54C 0x3 0x1
|
||||||
#define MX8MP_IOMUXC_SAI2_TXC__GPIO4_IO25 0x1AC 0x40C 0x000 0x5 0x0
|
#define MX8MP_IOMUXC_SAI2_TXC__GPIO4_IO25 0x1AC 0x40C 0x000 0x5 0x0
|
||||||
#define MX8MP_IOMUXC_SAI2_TXC__AUDIOMIX_BIT_STREAM01 0x1AC 0x40C 0x4C4 0x6 0x5
|
#define MX8MP_IOMUXC_SAI2_TXC__AUDIOMIX_BIT_STREAM01 0x1AC 0x40C 0x4C4 0x6 0x6
|
||||||
#define MX8MP_IOMUXC_SAI2_TXC__SIM_M_HREADYOUT 0x1AC 0x40C 0x000 0x7 0x0
|
#define MX8MP_IOMUXC_SAI2_TXC__SIM_M_HREADYOUT 0x1AC 0x40C 0x000 0x7 0x0
|
||||||
#define MX8MP_IOMUXC_SAI2_TXD0__AUDIOMIX_SAI2_TX_DATA00 0x1B0 0x410 0x000 0x0 0x0
|
#define MX8MP_IOMUXC_SAI2_TXD0__AUDIOMIX_SAI2_TX_DATA00 0x1B0 0x410 0x000 0x0 0x0
|
||||||
#define MX8MP_IOMUXC_SAI2_TXD0__AUDIOMIX_SAI5_TX_DATA03 0x1B0 0x410 0x000 0x1 0x0
|
#define MX8MP_IOMUXC_SAI2_TXD0__AUDIOMIX_SAI5_TX_DATA03 0x1B0 0x410 0x000 0x1 0x0
|
||||||
@@ -680,7 +680,7 @@
|
|||||||
#define MX8MP_IOMUXC_SAI3_RXFS__AUDIOMIX_SAI3_RX_DATA01 0x1B8 0x418 0x000 0x3 0x0
|
#define MX8MP_IOMUXC_SAI3_RXFS__AUDIOMIX_SAI3_RX_DATA01 0x1B8 0x418 0x000 0x3 0x0
|
||||||
#define MX8MP_IOMUXC_SAI3_RXFS__AUDIOMIX_SPDIF_IN 0x1B8 0x418 0x544 0x4 0x2
|
#define MX8MP_IOMUXC_SAI3_RXFS__AUDIOMIX_SPDIF_IN 0x1B8 0x418 0x544 0x4 0x2
|
||||||
#define MX8MP_IOMUXC_SAI3_RXFS__GPIO4_IO28 0x1B8 0x418 0x000 0x5 0x0
|
#define MX8MP_IOMUXC_SAI3_RXFS__GPIO4_IO28 0x1B8 0x418 0x000 0x5 0x0
|
||||||
#define MX8MP_IOMUXC_SAI3_RXFS__AUDIOMIX_BIT_STREAM00 0x1B8 0x418 0x4C0 0x6 0x4
|
#define MX8MP_IOMUXC_SAI3_RXFS__AUDIOMIX_BIT_STREAM00 0x1B8 0x418 0x4C0 0x6 0x5
|
||||||
#define MX8MP_IOMUXC_SAI3_RXFS__TPSMP_HTRANS00 0x1B8 0x418 0x000 0x7 0x0
|
#define MX8MP_IOMUXC_SAI3_RXFS__TPSMP_HTRANS00 0x1B8 0x418 0x000 0x7 0x0
|
||||||
#define MX8MP_IOMUXC_SAI3_RXC__AUDIOMIX_SAI3_RX_BCLK 0x1BC 0x41C 0x000 0x0 0x0
|
#define MX8MP_IOMUXC_SAI3_RXC__AUDIOMIX_SAI3_RX_BCLK 0x1BC 0x41C 0x000 0x0 0x0
|
||||||
#define MX8MP_IOMUXC_SAI3_RXC__AUDIOMIX_SAI2_RX_DATA02 0x1BC 0x41C 0x000 0x1 0x0
|
#define MX8MP_IOMUXC_SAI3_RXC__AUDIOMIX_SAI2_RX_DATA02 0x1BC 0x41C 0x000 0x1 0x0
|
||||||
@@ -697,7 +697,7 @@
|
|||||||
#define MX8MP_IOMUXC_SAI3_RXD__UART2_DCE_RTS 0x1C0 0x420 0x5EC 0x4 0x3
|
#define MX8MP_IOMUXC_SAI3_RXD__UART2_DCE_RTS 0x1C0 0x420 0x5EC 0x4 0x3
|
||||||
#define MX8MP_IOMUXC_SAI3_RXD__UART2_DTE_CTS 0x1C0 0x420 0x000 0x4 0x0
|
#define MX8MP_IOMUXC_SAI3_RXD__UART2_DTE_CTS 0x1C0 0x420 0x000 0x4 0x0
|
||||||
#define MX8MP_IOMUXC_SAI3_RXD__GPIO4_IO30 0x1C0 0x420 0x000 0x5 0x0
|
#define MX8MP_IOMUXC_SAI3_RXD__GPIO4_IO30 0x1C0 0x420 0x000 0x5 0x0
|
||||||
#define MX8MP_IOMUXC_SAI3_RXD__AUDIOMIX_BIT_STREAM01 0x1C0 0x420 0x4C4 0x6 0x6
|
#define MX8MP_IOMUXC_SAI3_RXD__AUDIOMIX_BIT_STREAM01 0x1C0 0x420 0x4C4 0x6 0x7
|
||||||
#define MX8MP_IOMUXC_SAI3_RXD__TPSMP_HDATA00 0x1C0 0x420 0x000 0x7 0x0
|
#define MX8MP_IOMUXC_SAI3_RXD__TPSMP_HDATA00 0x1C0 0x420 0x000 0x7 0x0
|
||||||
#define MX8MP_IOMUXC_SAI3_TXFS__AUDIOMIX_SAI3_TX_SYNC 0x1C4 0x424 0x4EC 0x0 0x1
|
#define MX8MP_IOMUXC_SAI3_TXFS__AUDIOMIX_SAI3_TX_SYNC 0x1C4 0x424 0x4EC 0x0 0x1
|
||||||
#define MX8MP_IOMUXC_SAI3_TXFS__AUDIOMIX_SAI2_TX_DATA01 0x1C4 0x424 0x000 0x1 0x0
|
#define MX8MP_IOMUXC_SAI3_TXFS__AUDIOMIX_SAI2_TX_DATA01 0x1C4 0x424 0x000 0x1 0x0
|
||||||
@@ -706,7 +706,7 @@
|
|||||||
#define MX8MP_IOMUXC_SAI3_TXFS__UART2_DCE_RX 0x1C4 0x424 0x5F0 0x4 0x4
|
#define MX8MP_IOMUXC_SAI3_TXFS__UART2_DCE_RX 0x1C4 0x424 0x5F0 0x4 0x4
|
||||||
#define MX8MP_IOMUXC_SAI3_TXFS__UART2_DTE_TX 0x1C4 0x424 0x000 0x4 0x0
|
#define MX8MP_IOMUXC_SAI3_TXFS__UART2_DTE_TX 0x1C4 0x424 0x000 0x4 0x0
|
||||||
#define MX8MP_IOMUXC_SAI3_TXFS__GPIO4_IO31 0x1C4 0x424 0x000 0x5 0x0
|
#define MX8MP_IOMUXC_SAI3_TXFS__GPIO4_IO31 0x1C4 0x424 0x000 0x5 0x0
|
||||||
#define MX8MP_IOMUXC_SAI3_TXFS__AUDIOMIX_BIT_STREAM03 0x1C4 0x424 0x4CC 0x6 0x5
|
#define MX8MP_IOMUXC_SAI3_TXFS__AUDIOMIX_BIT_STREAM03 0x1C4 0x424 0x4CC 0x6 0x6
|
||||||
#define MX8MP_IOMUXC_SAI3_TXFS__TPSMP_HDATA01 0x1C4 0x424 0x000 0x7 0x0
|
#define MX8MP_IOMUXC_SAI3_TXFS__TPSMP_HDATA01 0x1C4 0x424 0x000 0x7 0x0
|
||||||
#define MX8MP_IOMUXC_SAI3_TXC__AUDIOMIX_SAI3_TX_BCLK 0x1C8 0x428 0x4E8 0x0 0x1
|
#define MX8MP_IOMUXC_SAI3_TXC__AUDIOMIX_SAI3_TX_BCLK 0x1C8 0x428 0x4E8 0x0 0x1
|
||||||
#define MX8MP_IOMUXC_SAI3_TXC__AUDIOMIX_SAI2_TX_DATA02 0x1C8 0x428 0x000 0x1 0x0
|
#define MX8MP_IOMUXC_SAI3_TXC__AUDIOMIX_SAI2_TX_DATA02 0x1C8 0x428 0x000 0x1 0x0
|
||||||
@@ -715,7 +715,7 @@
|
|||||||
#define MX8MP_IOMUXC_SAI3_TXC__UART2_DCE_TX 0x1C8 0x428 0x000 0x4 0x0
|
#define MX8MP_IOMUXC_SAI3_TXC__UART2_DCE_TX 0x1C8 0x428 0x000 0x4 0x0
|
||||||
#define MX8MP_IOMUXC_SAI3_TXC__UART2_DTE_RX 0x1C8 0x428 0x5F0 0x4 0x5
|
#define MX8MP_IOMUXC_SAI3_TXC__UART2_DTE_RX 0x1C8 0x428 0x5F0 0x4 0x5
|
||||||
#define MX8MP_IOMUXC_SAI3_TXC__GPIO5_IO00 0x1C8 0x428 0x000 0x5 0x0
|
#define MX8MP_IOMUXC_SAI3_TXC__GPIO5_IO00 0x1C8 0x428 0x000 0x5 0x0
|
||||||
#define MX8MP_IOMUXC_SAI3_TXC__AUDIOMIX_BIT_STREAM02 0x1C8 0x428 0x4C8 0x6 0x6
|
#define MX8MP_IOMUXC_SAI3_TXC__AUDIOMIX_BIT_STREAM02 0x1C8 0x428 0x4C8 0x6 0x7
|
||||||
#define MX8MP_IOMUXC_SAI3_TXC__TPSMP_HDATA02 0x1C8 0x428 0x000 0x7 0x0
|
#define MX8MP_IOMUXC_SAI3_TXC__TPSMP_HDATA02 0x1C8 0x428 0x000 0x7 0x0
|
||||||
#define MX8MP_IOMUXC_SAI3_TXD__AUDIOMIX_SAI3_TX_DATA00 0x1CC 0x42C 0x000 0x0 0x0
|
#define MX8MP_IOMUXC_SAI3_TXD__AUDIOMIX_SAI3_TX_DATA00 0x1CC 0x42C 0x000 0x0 0x0
|
||||||
#define MX8MP_IOMUXC_SAI3_TXD__AUDIOMIX_SAI2_TX_DATA03 0x1CC 0x42C 0x000 0x1 0x0
|
#define MX8MP_IOMUXC_SAI3_TXD__AUDIOMIX_SAI2_TX_DATA03 0x1CC 0x42C 0x000 0x1 0x0
|
||||||
|
@@ -145,7 +145,7 @@
|
|||||||
|
|
||||||
aips1: bus@30000000 {
|
aips1: bus@30000000 {
|
||||||
compatible = "fsl,aips-bus", "simple-bus";
|
compatible = "fsl,aips-bus", "simple-bus";
|
||||||
reg = <0x301f0000 0x10000>;
|
reg = <0x30000000 0x400000>;
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
ranges;
|
ranges;
|
||||||
@@ -318,7 +318,7 @@
|
|||||||
|
|
||||||
aips2: bus@30400000 {
|
aips2: bus@30400000 {
|
||||||
compatible = "fsl,aips-bus", "simple-bus";
|
compatible = "fsl,aips-bus", "simple-bus";
|
||||||
reg = <0x305f0000 0x400000>;
|
reg = <0x30400000 0x400000>;
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
ranges;
|
ranges;
|
||||||
@@ -378,7 +378,7 @@
|
|||||||
|
|
||||||
aips3: bus@30800000 {
|
aips3: bus@30800000 {
|
||||||
compatible = "fsl,aips-bus", "simple-bus";
|
compatible = "fsl,aips-bus", "simple-bus";
|
||||||
reg = <0x309f0000 0x400000>;
|
reg = <0x30800000 0x400000>;
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
ranges;
|
ranges;
|
||||||
|
@@ -291,7 +291,7 @@
|
|||||||
|
|
||||||
bus@30000000 { /* AIPS1 */
|
bus@30000000 { /* AIPS1 */
|
||||||
compatible = "fsl,aips-bus", "simple-bus";
|
compatible = "fsl,aips-bus", "simple-bus";
|
||||||
reg = <0x301f0000 0x10000>;
|
reg = <0x30000000 0x400000>;
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
ranges = <0x30000000 0x30000000 0x400000>;
|
ranges = <0x30000000 0x30000000 0x400000>;
|
||||||
@@ -696,7 +696,7 @@
|
|||||||
|
|
||||||
bus@30400000 { /* AIPS2 */
|
bus@30400000 { /* AIPS2 */
|
||||||
compatible = "fsl,aips-bus", "simple-bus";
|
compatible = "fsl,aips-bus", "simple-bus";
|
||||||
reg = <0x305f0000 0x10000>;
|
reg = <0x30400000 0x400000>;
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
ranges = <0x30400000 0x30400000 0x400000>;
|
ranges = <0x30400000 0x30400000 0x400000>;
|
||||||
@@ -756,7 +756,7 @@
|
|||||||
|
|
||||||
bus@30800000 { /* AIPS3 */
|
bus@30800000 { /* AIPS3 */
|
||||||
compatible = "fsl,aips-bus", "simple-bus";
|
compatible = "fsl,aips-bus", "simple-bus";
|
||||||
reg = <0x309f0000 0x10000>;
|
reg = <0x30800000 0x400000>;
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
ranges = <0x30800000 0x30800000 0x400000>,
|
ranges = <0x30800000 0x30800000 0x400000>,
|
||||||
@@ -1029,7 +1029,7 @@
|
|||||||
|
|
||||||
bus@32c00000 { /* AIPS4 */
|
bus@32c00000 { /* AIPS4 */
|
||||||
compatible = "fsl,aips-bus", "simple-bus";
|
compatible = "fsl,aips-bus", "simple-bus";
|
||||||
reg = <0x32df0000 0x10000>;
|
reg = <0x32c00000 0x400000>;
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
ranges = <0x32c00000 0x32c00000 0x400000>;
|
ranges = <0x32c00000 0x32c00000 0x400000>;
|
||||||
|
@@ -658,8 +658,8 @@
|
|||||||
s11 {
|
s11 {
|
||||||
qcom,saw-leader;
|
qcom,saw-leader;
|
||||||
regulator-always-on;
|
regulator-always-on;
|
||||||
regulator-min-microvolt = <1230000>;
|
regulator-min-microvolt = <980000>;
|
||||||
regulator-max-microvolt = <1230000>;
|
regulator-max-microvolt = <980000>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -908,10 +908,27 @@
|
|||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
&q6asmdai {
|
||||||
|
dai@0 {
|
||||||
|
reg = <0>;
|
||||||
|
};
|
||||||
|
|
||||||
|
dai@1 {
|
||||||
|
reg = <1>;
|
||||||
|
};
|
||||||
|
|
||||||
|
dai@2 {
|
||||||
|
reg = <2>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
&sound {
|
&sound {
|
||||||
compatible = "qcom,apq8096-sndcard";
|
compatible = "qcom,apq8096-sndcard";
|
||||||
model = "DB820c";
|
model = "DB820c";
|
||||||
audio-routing = "RX_BIAS", "MCLK";
|
audio-routing = "RX_BIAS", "MCLK",
|
||||||
|
"MM_DL1", "MultiMedia1 Playback",
|
||||||
|
"MM_DL2", "MultiMedia2 Playback",
|
||||||
|
"MultiMedia3 Capture", "MM_UL3";
|
||||||
|
|
||||||
mm1-dai-link {
|
mm1-dai-link {
|
||||||
link-name = "MultiMedia1";
|
link-name = "MultiMedia1";
|
||||||
|
@@ -2066,6 +2066,8 @@
|
|||||||
reg = <APR_SVC_ASM>;
|
reg = <APR_SVC_ASM>;
|
||||||
q6asmdai: dais {
|
q6asmdai: dais {
|
||||||
compatible = "qcom,q6asm-dais";
|
compatible = "qcom,q6asm-dais";
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
#sound-dai-cells = <1>;
|
#sound-dai-cells = <1>;
|
||||||
iommus = <&lpass_q6_smmu 1>;
|
iommus = <&lpass_q6_smmu 1>;
|
||||||
};
|
};
|
||||||
|
@@ -442,17 +442,14 @@
|
|||||||
&q6asmdai {
|
&q6asmdai {
|
||||||
dai@0 {
|
dai@0 {
|
||||||
reg = <0>;
|
reg = <0>;
|
||||||
direction = <2>;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
dai@1 {
|
dai@1 {
|
||||||
reg = <1>;
|
reg = <1>;
|
||||||
direction = <2>;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
dai@2 {
|
dai@2 {
|
||||||
reg = <2>;
|
reg = <2>;
|
||||||
direction = <1>;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
dai@3 {
|
dai@3 {
|
||||||
|
@@ -359,12 +359,10 @@
|
|||||||
&q6asmdai {
|
&q6asmdai {
|
||||||
dai@0 {
|
dai@0 {
|
||||||
reg = <0>;
|
reg = <0>;
|
||||||
direction = <2>;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
dai@1 {
|
dai@1 {
|
||||||
reg = <1>;
|
reg = <1>;
|
||||||
direction = <1>;
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -137,8 +137,6 @@
|
|||||||
adi,input-depth = <8>;
|
adi,input-depth = <8>;
|
||||||
adi,input-colorspace = "rgb";
|
adi,input-colorspace = "rgb";
|
||||||
adi,input-clock = "1x";
|
adi,input-clock = "1x";
|
||||||
adi,input-style = <1>;
|
|
||||||
adi,input-justification = "evenly";
|
|
||||||
|
|
||||||
ports {
|
ports {
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
|
@@ -150,8 +150,6 @@
|
|||||||
adi,input-depth = <8>;
|
adi,input-depth = <8>;
|
||||||
adi,input-colorspace = "rgb";
|
adi,input-colorspace = "rgb";
|
||||||
adi,input-clock = "1x";
|
adi,input-clock = "1x";
|
||||||
adi,input-style = <1>;
|
|
||||||
adi,input-justification = "evenly";
|
|
||||||
|
|
||||||
ports {
|
ports {
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
|
@@ -174,8 +174,6 @@
|
|||||||
adi,input-depth = <8>;
|
adi,input-depth = <8>;
|
||||||
adi,input-colorspace = "rgb";
|
adi,input-colorspace = "rgb";
|
||||||
adi,input-clock = "1x";
|
adi,input-clock = "1x";
|
||||||
adi,input-style = <1>;
|
|
||||||
adi,input-justification = "evenly";
|
|
||||||
|
|
||||||
ports {
|
ports {
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
|
@@ -141,8 +141,6 @@
|
|||||||
adi,input-depth = <8>;
|
adi,input-depth = <8>;
|
||||||
adi,input-colorspace = "rgb";
|
adi,input-colorspace = "rgb";
|
||||||
adi,input-clock = "1x";
|
adi,input-clock = "1x";
|
||||||
adi,input-style = <1>;
|
|
||||||
adi,input-justification = "evenly";
|
|
||||||
|
|
||||||
ports {
|
ports {
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
|
@@ -1318,6 +1318,7 @@
|
|||||||
ipmmu_vip0: mmu@e7b00000 {
|
ipmmu_vip0: mmu@e7b00000 {
|
||||||
compatible = "renesas,ipmmu-r8a77980";
|
compatible = "renesas,ipmmu-r8a77980";
|
||||||
reg = <0 0xe7b00000 0 0x1000>;
|
reg = <0 0xe7b00000 0 0x1000>;
|
||||||
|
renesas,ipmmu-main = <&ipmmu_mm 4>;
|
||||||
power-domains = <&sysc R8A77980_PD_ALWAYS_ON>;
|
power-domains = <&sysc R8A77980_PD_ALWAYS_ON>;
|
||||||
#iommu-cells = <1>;
|
#iommu-cells = <1>;
|
||||||
};
|
};
|
||||||
@@ -1325,6 +1326,7 @@
|
|||||||
ipmmu_vip1: mmu@e7960000 {
|
ipmmu_vip1: mmu@e7960000 {
|
||||||
compatible = "renesas,ipmmu-r8a77980";
|
compatible = "renesas,ipmmu-r8a77980";
|
||||||
reg = <0 0xe7960000 0 0x1000>;
|
reg = <0 0xe7960000 0 0x1000>;
|
||||||
|
renesas,ipmmu-main = <&ipmmu_mm 11>;
|
||||||
power-domains = <&sysc R8A77980_PD_ALWAYS_ON>;
|
power-domains = <&sysc R8A77980_PD_ALWAYS_ON>;
|
||||||
#iommu-cells = <1>;
|
#iommu-cells = <1>;
|
||||||
};
|
};
|
||||||
|
@@ -360,8 +360,6 @@
|
|||||||
adi,input-depth = <8>;
|
adi,input-depth = <8>;
|
||||||
adi,input-colorspace = "rgb";
|
adi,input-colorspace = "rgb";
|
||||||
adi,input-clock = "1x";
|
adi,input-clock = "1x";
|
||||||
adi,input-style = <1>;
|
|
||||||
adi,input-justification = "evenly";
|
|
||||||
|
|
||||||
ports {
|
ports {
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
|
@@ -272,8 +272,8 @@
|
|||||||
|
|
||||||
hdmi-encoder@39 {
|
hdmi-encoder@39 {
|
||||||
compatible = "adi,adv7511w";
|
compatible = "adi,adv7511w";
|
||||||
reg = <0x39>, <0x3f>, <0x38>, <0x3c>;
|
reg = <0x39>, <0x3f>, <0x3c>, <0x38>;
|
||||||
reg-names = "main", "edid", "packet", "cec";
|
reg-names = "main", "edid", "cec", "packet";
|
||||||
interrupt-parent = <&gpio1>;
|
interrupt-parent = <&gpio1>;
|
||||||
interrupts = <28 IRQ_TYPE_LEVEL_LOW>;
|
interrupts = <28 IRQ_TYPE_LEVEL_LOW>;
|
||||||
|
|
||||||
@@ -284,8 +284,6 @@
|
|||||||
adi,input-depth = <8>;
|
adi,input-depth = <8>;
|
||||||
adi,input-colorspace = "rgb";
|
adi,input-colorspace = "rgb";
|
||||||
adi,input-clock = "1x";
|
adi,input-clock = "1x";
|
||||||
adi,input-style = <1>;
|
|
||||||
adi,input-justification = "evenly";
|
|
||||||
|
|
||||||
ports {
|
ports {
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
|
@@ -143,7 +143,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
arm-pmu {
|
arm-pmu {
|
||||||
compatible = "arm,cortex-a53-pmu";
|
compatible = "arm,cortex-a35-pmu";
|
||||||
interrupts = <GIC_SPI 100 IRQ_TYPE_LEVEL_HIGH>,
|
interrupts = <GIC_SPI 100 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
<GIC_SPI 101 IRQ_TYPE_LEVEL_HIGH>,
|
<GIC_SPI 101 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
<GIC_SPI 102 IRQ_TYPE_LEVEL_HIGH>,
|
<GIC_SPI 102 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
@@ -127,7 +127,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
arm-pmu {
|
arm-pmu {
|
||||||
compatible = "arm,cortex-a53-pmu";
|
compatible = "arm,cortex-a35-pmu";
|
||||||
interrupts = <GIC_SPI 83 IRQ_TYPE_LEVEL_HIGH>,
|
interrupts = <GIC_SPI 83 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
<GIC_SPI 84 IRQ_TYPE_LEVEL_HIGH>,
|
<GIC_SPI 84 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
<GIC_SPI 85 IRQ_TYPE_LEVEL_HIGH>,
|
<GIC_SPI 85 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
|
@@ -82,17 +82,16 @@
|
|||||||
&gmac2phy {
|
&gmac2phy {
|
||||||
phy-supply = <&vcc_phy>;
|
phy-supply = <&vcc_phy>;
|
||||||
clock_in_out = "output";
|
clock_in_out = "output";
|
||||||
assigned-clocks = <&cru SCLK_MAC2PHY_SRC>;
|
|
||||||
assigned-clock-rate = <50000000>;
|
assigned-clock-rate = <50000000>;
|
||||||
assigned-clocks = <&cru SCLK_MAC2PHY>;
|
assigned-clocks = <&cru SCLK_MAC2PHY>;
|
||||||
assigned-clock-parents = <&cru SCLK_MAC2PHY_SRC>;
|
assigned-clock-parents = <&cru SCLK_MAC2PHY_SRC>;
|
||||||
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
||||||
&i2c1 {
|
&i2c1 {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
|
|
||||||
rk805: rk805@18 {
|
rk805: pmic@18 {
|
||||||
compatible = "rockchip,rk805";
|
compatible = "rockchip,rk805";
|
||||||
reg = <0x18>;
|
reg = <0x18>;
|
||||||
interrupt-parent = <&gpio2>;
|
interrupt-parent = <&gpio2>;
|
||||||
|
@@ -170,7 +170,7 @@
|
|||||||
&i2c1 {
|
&i2c1 {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
|
|
||||||
rk805: rk805@18 {
|
rk805: pmic@18 {
|
||||||
compatible = "rockchip,rk805";
|
compatible = "rockchip,rk805";
|
||||||
reg = <0x18>;
|
reg = <0x18>;
|
||||||
interrupt-parent = <&gpio2>;
|
interrupt-parent = <&gpio2>;
|
||||||
|
@@ -299,8 +299,6 @@
|
|||||||
grf: syscon@ff100000 {
|
grf: syscon@ff100000 {
|
||||||
compatible = "rockchip,rk3328-grf", "syscon", "simple-mfd";
|
compatible = "rockchip,rk3328-grf", "syscon", "simple-mfd";
|
||||||
reg = <0x0 0xff100000 0x0 0x1000>;
|
reg = <0x0 0xff100000 0x0 0x1000>;
|
||||||
#address-cells = <1>;
|
|
||||||
#size-cells = <1>;
|
|
||||||
|
|
||||||
io_domains: io-domains {
|
io_domains: io-domains {
|
||||||
compatible = "rockchip,rk3328-io-voltage-domain";
|
compatible = "rockchip,rk3328-io-voltage-domain";
|
||||||
@@ -1794,10 +1792,6 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
gmac2phy {
|
gmac2phy {
|
||||||
fephyled_speed100: fephyled-speed100 {
|
|
||||||
rockchip,pins = <0 RK_PD7 1 &pcfg_pull_none>;
|
|
||||||
};
|
|
||||||
|
|
||||||
fephyled_speed10: fephyled-speed10 {
|
fephyled_speed10: fephyled-speed10 {
|
||||||
rockchip,pins = <0 RK_PD6 1 &pcfg_pull_none>;
|
rockchip,pins = <0 RK_PD6 1 &pcfg_pull_none>;
|
||||||
};
|
};
|
||||||
@@ -1806,18 +1800,6 @@
|
|||||||
rockchip,pins = <0 RK_PD6 2 &pcfg_pull_none>;
|
rockchip,pins = <0 RK_PD6 2 &pcfg_pull_none>;
|
||||||
};
|
};
|
||||||
|
|
||||||
fephyled_rxm0: fephyled-rxm0 {
|
|
||||||
rockchip,pins = <0 RK_PD5 1 &pcfg_pull_none>;
|
|
||||||
};
|
|
||||||
|
|
||||||
fephyled_txm0: fephyled-txm0 {
|
|
||||||
rockchip,pins = <0 RK_PD5 2 &pcfg_pull_none>;
|
|
||||||
};
|
|
||||||
|
|
||||||
fephyled_linkm0: fephyled-linkm0 {
|
|
||||||
rockchip,pins = <0 RK_PD4 1 &pcfg_pull_none>;
|
|
||||||
};
|
|
||||||
|
|
||||||
fephyled_rxm1: fephyled-rxm1 {
|
fephyled_rxm1: fephyled-rxm1 {
|
||||||
rockchip,pins = <2 RK_PD1 2 &pcfg_pull_none>;
|
rockchip,pins = <2 RK_PD1 2 &pcfg_pull_none>;
|
||||||
};
|
};
|
||||||
|
@@ -147,7 +147,7 @@
|
|||||||
"Speaker", "Speaker Amplifier OUTL",
|
"Speaker", "Speaker Amplifier OUTL",
|
||||||
"Speaker", "Speaker Amplifier OUTR";
|
"Speaker", "Speaker Amplifier OUTR";
|
||||||
|
|
||||||
simple-audio-card,hp-det-gpio = <&gpio0 RK_PB0 GPIO_ACTIVE_LOW>;
|
simple-audio-card,hp-det-gpio = <&gpio0 RK_PB0 GPIO_ACTIVE_HIGH>;
|
||||||
simple-audio-card,aux-devs = <&speaker_amp>;
|
simple-audio-card,aux-devs = <&speaker_amp>;
|
||||||
simple-audio-card,pin-switches = "Speaker";
|
simple-audio-card,pin-switches = "Speaker";
|
||||||
|
|
||||||
@@ -690,7 +690,8 @@
|
|||||||
fusb0: fusb30x@22 {
|
fusb0: fusb30x@22 {
|
||||||
compatible = "fcs,fusb302";
|
compatible = "fcs,fusb302";
|
||||||
reg = <0x22>;
|
reg = <0x22>;
|
||||||
fcs,int_n = <&gpio1 RK_PA2 GPIO_ACTIVE_HIGH>;
|
interrupt-parent = <&gpio1>;
|
||||||
|
interrupts = <RK_PA2 IRQ_TYPE_LEVEL_LOW>;
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
pinctrl-0 = <&fusb0_int_gpio>;
|
pinctrl-0 = <&fusb0_int_gpio>;
|
||||||
vbus-supply = <&vbus_typec>;
|
vbus-supply = <&vbus_typec>;
|
||||||
@@ -788,13 +789,13 @@
|
|||||||
|
|
||||||
dc-charger {
|
dc-charger {
|
||||||
dc_det_gpio: dc-det-gpio {
|
dc_det_gpio: dc-det-gpio {
|
||||||
rockchip,pins = <4 RK_PD0 RK_FUNC_GPIO &pcfg_pull_none>;
|
rockchip,pins = <4 RK_PD0 RK_FUNC_GPIO &pcfg_pull_up>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
es8316 {
|
es8316 {
|
||||||
hp_det_gpio: hp-det-gpio {
|
hp_det_gpio: hp-det-gpio {
|
||||||
rockchip,pins = <0 RK_PB0 RK_FUNC_GPIO &pcfg_pull_down>;
|
rockchip,pins = <0 RK_PB0 RK_FUNC_GPIO &pcfg_pull_up>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -403,7 +403,7 @@
|
|||||||
reset-names = "usb3-otg";
|
reset-names = "usb3-otg";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
|
||||||
usbdrd_dwc3_0: dwc3 {
|
usbdrd_dwc3_0: usb@fe800000 {
|
||||||
compatible = "snps,dwc3";
|
compatible = "snps,dwc3";
|
||||||
reg = <0x0 0xfe800000 0x0 0x100000>;
|
reg = <0x0 0xfe800000 0x0 0x100000>;
|
||||||
interrupts = <GIC_SPI 105 IRQ_TYPE_LEVEL_HIGH 0>;
|
interrupts = <GIC_SPI 105 IRQ_TYPE_LEVEL_HIGH 0>;
|
||||||
@@ -439,7 +439,7 @@
|
|||||||
reset-names = "usb3-otg";
|
reset-names = "usb3-otg";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
|
||||||
usbdrd_dwc3_1: dwc3 {
|
usbdrd_dwc3_1: usb@fe900000 {
|
||||||
compatible = "snps,dwc3";
|
compatible = "snps,dwc3";
|
||||||
reg = <0x0 0xfe900000 0x0 0x100000>;
|
reg = <0x0 0xfe900000 0x0 0x100000>;
|
||||||
interrupts = <GIC_SPI 110 IRQ_TYPE_LEVEL_HIGH 0>;
|
interrupts = <GIC_SPI 110 IRQ_TYPE_LEVEL_HIGH 0>;
|
||||||
@@ -1124,8 +1124,6 @@
|
|||||||
pmugrf: syscon@ff320000 {
|
pmugrf: syscon@ff320000 {
|
||||||
compatible = "rockchip,rk3399-pmugrf", "syscon", "simple-mfd";
|
compatible = "rockchip,rk3399-pmugrf", "syscon", "simple-mfd";
|
||||||
reg = <0x0 0xff320000 0x0 0x1000>;
|
reg = <0x0 0xff320000 0x0 0x1000>;
|
||||||
#address-cells = <1>;
|
|
||||||
#size-cells = <1>;
|
|
||||||
|
|
||||||
pmu_io_domains: io-domains {
|
pmu_io_domains: io-domains {
|
||||||
compatible = "rockchip,rk3399-pmu-io-voltage-domain";
|
compatible = "rockchip,rk3399-pmu-io-voltage-domain";
|
||||||
@@ -1883,10 +1881,10 @@
|
|||||||
gpu: gpu@ff9a0000 {
|
gpu: gpu@ff9a0000 {
|
||||||
compatible = "rockchip,rk3399-mali", "arm,mali-t860";
|
compatible = "rockchip,rk3399-mali", "arm,mali-t860";
|
||||||
reg = <0x0 0xff9a0000 0x0 0x10000>;
|
reg = <0x0 0xff9a0000 0x0 0x10000>;
|
||||||
interrupts = <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH 0>,
|
interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH 0>,
|
||||||
<GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH 0>,
|
<GIC_SPI 21 IRQ_TYPE_LEVEL_HIGH 0>,
|
||||||
<GIC_SPI 21 IRQ_TYPE_LEVEL_HIGH 0>;
|
<GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH 0>;
|
||||||
interrupt-names = "gpu", "job", "mmu";
|
interrupt-names = "job", "mmu", "gpu";
|
||||||
clocks = <&cru ACLK_GPU>;
|
clocks = <&cru ACLK_GPU>;
|
||||||
#cooling-cells = <2>;
|
#cooling-cells = <2>;
|
||||||
power-domains = <&power RK3399_PD_GPU>;
|
power-domains = <&power RK3399_PD_GPU>;
|
||||||
|
@@ -208,7 +208,7 @@ CONFIG_PCIE_QCOM=y
|
|||||||
CONFIG_PCIE_ARMADA_8K=y
|
CONFIG_PCIE_ARMADA_8K=y
|
||||||
CONFIG_PCIE_KIRIN=y
|
CONFIG_PCIE_KIRIN=y
|
||||||
CONFIG_PCIE_HISI_STB=y
|
CONFIG_PCIE_HISI_STB=y
|
||||||
CONFIG_PCIE_TEGRA194=m
|
CONFIG_PCIE_TEGRA194_HOST=m
|
||||||
CONFIG_DEVTMPFS=y
|
CONFIG_DEVTMPFS=y
|
||||||
CONFIG_DEVTMPFS_MOUNT=y
|
CONFIG_DEVTMPFS_MOUNT=y
|
||||||
CONFIG_FW_LOADER_USER_HELPER=y
|
CONFIG_FW_LOADER_USER_HELPER=y
|
||||||
@@ -567,6 +567,7 @@ CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y
|
|||||||
CONFIG_MEDIA_SDR_SUPPORT=y
|
CONFIG_MEDIA_SDR_SUPPORT=y
|
||||||
CONFIG_MEDIA_CONTROLLER=y
|
CONFIG_MEDIA_CONTROLLER=y
|
||||||
CONFIG_VIDEO_V4L2_SUBDEV_API=y
|
CONFIG_VIDEO_V4L2_SUBDEV_API=y
|
||||||
|
CONFIG_MEDIA_PLATFORM_SUPPORT=y
|
||||||
# CONFIG_DVB_NET is not set
|
# CONFIG_DVB_NET is not set
|
||||||
CONFIG_MEDIA_USB_SUPPORT=y
|
CONFIG_MEDIA_USB_SUPPORT=y
|
||||||
CONFIG_USB_VIDEO_CLASS=m
|
CONFIG_USB_VIDEO_CLASS=m
|
||||||
@@ -610,8 +611,9 @@ CONFIG_DRM_MSM=m
|
|||||||
CONFIG_DRM_TEGRA=m
|
CONFIG_DRM_TEGRA=m
|
||||||
CONFIG_DRM_PANEL_LVDS=m
|
CONFIG_DRM_PANEL_LVDS=m
|
||||||
CONFIG_DRM_PANEL_SIMPLE=m
|
CONFIG_DRM_PANEL_SIMPLE=m
|
||||||
CONFIG_DRM_DUMB_VGA_DAC=m
|
CONFIG_DRM_SIMPLE_BRIDGE=m
|
||||||
CONFIG_DRM_PANEL_TRULY_NT35597_WQXGA=m
|
CONFIG_DRM_PANEL_TRULY_NT35597_WQXGA=m
|
||||||
|
CONFIG_DRM_DISPLAY_CONNECTOR=m
|
||||||
CONFIG_DRM_SII902X=m
|
CONFIG_DRM_SII902X=m
|
||||||
CONFIG_DRM_THINE_THC63LVD1024=m
|
CONFIG_DRM_THINE_THC63LVD1024=m
|
||||||
CONFIG_DRM_TI_SN65DSI86=m
|
CONFIG_DRM_TI_SN65DSI86=m
|
||||||
@@ -848,7 +850,8 @@ CONFIG_QCOM_APR=m
|
|||||||
CONFIG_ARCH_R8A774A1=y
|
CONFIG_ARCH_R8A774A1=y
|
||||||
CONFIG_ARCH_R8A774B1=y
|
CONFIG_ARCH_R8A774B1=y
|
||||||
CONFIG_ARCH_R8A774C0=y
|
CONFIG_ARCH_R8A774C0=y
|
||||||
CONFIG_ARCH_R8A7795=y
|
CONFIG_ARCH_R8A77950=y
|
||||||
|
CONFIG_ARCH_R8A77951=y
|
||||||
CONFIG_ARCH_R8A77960=y
|
CONFIG_ARCH_R8A77960=y
|
||||||
CONFIG_ARCH_R8A77961=y
|
CONFIG_ARCH_R8A77961=y
|
||||||
CONFIG_ARCH_R8A77965=y
|
CONFIG_ARCH_R8A77965=y
|
||||||
|
@@ -87,9 +87,17 @@ void chacha_crypt_arch(u32 *state, u8 *dst, const u8 *src, unsigned int bytes,
|
|||||||
!crypto_simd_usable())
|
!crypto_simd_usable())
|
||||||
return chacha_crypt_generic(state, dst, src, bytes, nrounds);
|
return chacha_crypt_generic(state, dst, src, bytes, nrounds);
|
||||||
|
|
||||||
kernel_neon_begin();
|
do {
|
||||||
chacha_doneon(state, dst, src, bytes, nrounds);
|
unsigned int todo = min_t(unsigned int, bytes, SZ_4K);
|
||||||
kernel_neon_end();
|
|
||||||
|
kernel_neon_begin();
|
||||||
|
chacha_doneon(state, dst, src, todo, nrounds);
|
||||||
|
kernel_neon_end();
|
||||||
|
|
||||||
|
bytes -= todo;
|
||||||
|
src += todo;
|
||||||
|
dst += todo;
|
||||||
|
} while (bytes);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(chacha_crypt_arch);
|
EXPORT_SYMBOL(chacha_crypt_arch);
|
||||||
|
|
||||||
|
@@ -30,7 +30,7 @@ static int nhpoly1305_neon_update(struct shash_desc *desc,
|
|||||||
return crypto_nhpoly1305_update(desc, src, srclen);
|
return crypto_nhpoly1305_update(desc, src, srclen);
|
||||||
|
|
||||||
do {
|
do {
|
||||||
unsigned int n = min_t(unsigned int, srclen, PAGE_SIZE);
|
unsigned int n = min_t(unsigned int, srclen, SZ_4K);
|
||||||
|
|
||||||
kernel_neon_begin();
|
kernel_neon_begin();
|
||||||
crypto_nhpoly1305_update_helper(desc, src, n, _nh_neon);
|
crypto_nhpoly1305_update_helper(desc, src, n, _nh_neon);
|
||||||
|
@@ -143,13 +143,20 @@ void poly1305_update_arch(struct poly1305_desc_ctx *dctx, const u8 *src,
|
|||||||
unsigned int len = round_down(nbytes, POLY1305_BLOCK_SIZE);
|
unsigned int len = round_down(nbytes, POLY1305_BLOCK_SIZE);
|
||||||
|
|
||||||
if (static_branch_likely(&have_neon) && crypto_simd_usable()) {
|
if (static_branch_likely(&have_neon) && crypto_simd_usable()) {
|
||||||
kernel_neon_begin();
|
do {
|
||||||
poly1305_blocks_neon(&dctx->h, src, len, 1);
|
unsigned int todo = min_t(unsigned int, len, SZ_4K);
|
||||||
kernel_neon_end();
|
|
||||||
|
kernel_neon_begin();
|
||||||
|
poly1305_blocks_neon(&dctx->h, src, todo, 1);
|
||||||
|
kernel_neon_end();
|
||||||
|
|
||||||
|
len -= todo;
|
||||||
|
src += todo;
|
||||||
|
} while (len);
|
||||||
} else {
|
} else {
|
||||||
poly1305_blocks(&dctx->h, src, len, 1);
|
poly1305_blocks(&dctx->h, src, len, 1);
|
||||||
|
src += len;
|
||||||
}
|
}
|
||||||
src += len;
|
|
||||||
nbytes %= POLY1305_BLOCK_SIZE;
|
nbytes %= POLY1305_BLOCK_SIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -177,6 +177,7 @@ void machine_kexec(struct kimage *kimage)
|
|||||||
* the offline CPUs. Therefore, we must use the __* variant here.
|
* the offline CPUs. Therefore, we must use the __* variant here.
|
||||||
*/
|
*/
|
||||||
__flush_icache_range((uintptr_t)reboot_code_buffer,
|
__flush_icache_range((uintptr_t)reboot_code_buffer,
|
||||||
|
(uintptr_t)reboot_code_buffer +
|
||||||
arm64_relocate_new_kernel_size);
|
arm64_relocate_new_kernel_size);
|
||||||
|
|
||||||
/* Flush the kimage list and its buffers. */
|
/* Flush the kimage list and its buffers. */
|
||||||
|
@@ -200,6 +200,13 @@ static int set_core_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg)
|
|||||||
}
|
}
|
||||||
|
|
||||||
memcpy((u32 *)regs + off, valp, KVM_REG_SIZE(reg->id));
|
memcpy((u32 *)regs + off, valp, KVM_REG_SIZE(reg->id));
|
||||||
|
|
||||||
|
if (*vcpu_cpsr(vcpu) & PSR_MODE32_BIT) {
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < 16; i++)
|
||||||
|
*vcpu_reg32(vcpu, i) = (u32)*vcpu_reg32(vcpu, i);
|
||||||
|
}
|
||||||
out:
|
out:
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
@@ -18,6 +18,7 @@
|
|||||||
|
|
||||||
#define CPU_GP_REG_OFFSET(x) (CPU_GP_REGS + x)
|
#define CPU_GP_REG_OFFSET(x) (CPU_GP_REGS + x)
|
||||||
#define CPU_XREG_OFFSET(x) CPU_GP_REG_OFFSET(CPU_USER_PT_REGS + 8*x)
|
#define CPU_XREG_OFFSET(x) CPU_GP_REG_OFFSET(CPU_USER_PT_REGS + 8*x)
|
||||||
|
#define CPU_SP_EL0_OFFSET (CPU_XREG_OFFSET(30) + 8)
|
||||||
|
|
||||||
.text
|
.text
|
||||||
.pushsection .hyp.text, "ax"
|
.pushsection .hyp.text, "ax"
|
||||||
@@ -47,6 +48,16 @@
|
|||||||
ldp x29, lr, [\ctxt, #CPU_XREG_OFFSET(29)]
|
ldp x29, lr, [\ctxt, #CPU_XREG_OFFSET(29)]
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
|
.macro save_sp_el0 ctxt, tmp
|
||||||
|
mrs \tmp, sp_el0
|
||||||
|
str \tmp, [\ctxt, #CPU_SP_EL0_OFFSET]
|
||||||
|
.endm
|
||||||
|
|
||||||
|
.macro restore_sp_el0 ctxt, tmp
|
||||||
|
ldr \tmp, [\ctxt, #CPU_SP_EL0_OFFSET]
|
||||||
|
msr sp_el0, \tmp
|
||||||
|
.endm
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* u64 __guest_enter(struct kvm_vcpu *vcpu,
|
* u64 __guest_enter(struct kvm_vcpu *vcpu,
|
||||||
* struct kvm_cpu_context *host_ctxt);
|
* struct kvm_cpu_context *host_ctxt);
|
||||||
@@ -60,6 +71,9 @@ SYM_FUNC_START(__guest_enter)
|
|||||||
// Store the host regs
|
// Store the host regs
|
||||||
save_callee_saved_regs x1
|
save_callee_saved_regs x1
|
||||||
|
|
||||||
|
// Save the host's sp_el0
|
||||||
|
save_sp_el0 x1, x2
|
||||||
|
|
||||||
// Now the host state is stored if we have a pending RAS SError it must
|
// Now the host state is stored if we have a pending RAS SError it must
|
||||||
// affect the host. If any asynchronous exception is pending we defer
|
// affect the host. If any asynchronous exception is pending we defer
|
||||||
// the guest entry. The DSB isn't necessary before v8.2 as any SError
|
// the guest entry. The DSB isn't necessary before v8.2 as any SError
|
||||||
@@ -83,6 +97,9 @@ alternative_else_nop_endif
|
|||||||
// when this feature is enabled for kernel code.
|
// when this feature is enabled for kernel code.
|
||||||
ptrauth_switch_to_guest x29, x0, x1, x2
|
ptrauth_switch_to_guest x29, x0, x1, x2
|
||||||
|
|
||||||
|
// Restore the guest's sp_el0
|
||||||
|
restore_sp_el0 x29, x0
|
||||||
|
|
||||||
// Restore guest regs x0-x17
|
// Restore guest regs x0-x17
|
||||||
ldp x0, x1, [x29, #CPU_XREG_OFFSET(0)]
|
ldp x0, x1, [x29, #CPU_XREG_OFFSET(0)]
|
||||||
ldp x2, x3, [x29, #CPU_XREG_OFFSET(2)]
|
ldp x2, x3, [x29, #CPU_XREG_OFFSET(2)]
|
||||||
@@ -130,6 +147,9 @@ SYM_INNER_LABEL(__guest_exit, SYM_L_GLOBAL)
|
|||||||
// Store the guest regs x18-x29, lr
|
// Store the guest regs x18-x29, lr
|
||||||
save_callee_saved_regs x1
|
save_callee_saved_regs x1
|
||||||
|
|
||||||
|
// Store the guest's sp_el0
|
||||||
|
save_sp_el0 x1, x2
|
||||||
|
|
||||||
get_host_ctxt x2, x3
|
get_host_ctxt x2, x3
|
||||||
|
|
||||||
// Macro ptrauth_switch_to_guest format:
|
// Macro ptrauth_switch_to_guest format:
|
||||||
@@ -139,6 +159,9 @@ SYM_INNER_LABEL(__guest_exit, SYM_L_GLOBAL)
|
|||||||
// when this feature is enabled for kernel code.
|
// when this feature is enabled for kernel code.
|
||||||
ptrauth_switch_to_host x1, x2, x3, x4, x5
|
ptrauth_switch_to_host x1, x2, x3, x4, x5
|
||||||
|
|
||||||
|
// Restore the hosts's sp_el0
|
||||||
|
restore_sp_el0 x2, x3
|
||||||
|
|
||||||
// Now restore the host regs
|
// Now restore the host regs
|
||||||
restore_callee_saved_regs x2
|
restore_callee_saved_regs x2
|
||||||
|
|
||||||
|
@@ -198,7 +198,6 @@ SYM_CODE_END(__hyp_panic)
|
|||||||
.macro invalid_vector label, target = __hyp_panic
|
.macro invalid_vector label, target = __hyp_panic
|
||||||
.align 2
|
.align 2
|
||||||
SYM_CODE_START(\label)
|
SYM_CODE_START(\label)
|
||||||
\label:
|
|
||||||
b \target
|
b \target
|
||||||
SYM_CODE_END(\label)
|
SYM_CODE_END(\label)
|
||||||
.endm
|
.endm
|
||||||
|
@@ -15,8 +15,9 @@
|
|||||||
/*
|
/*
|
||||||
* Non-VHE: Both host and guest must save everything.
|
* Non-VHE: Both host and guest must save everything.
|
||||||
*
|
*
|
||||||
* VHE: Host and guest must save mdscr_el1 and sp_el0 (and the PC and pstate,
|
* VHE: Host and guest must save mdscr_el1 and sp_el0 (and the PC and
|
||||||
* which are handled as part of the el2 return state) on every switch.
|
* pstate, which are handled as part of the el2 return state) on every
|
||||||
|
* switch (sp_el0 is being dealt with in the assembly code).
|
||||||
* tpidr_el0 and tpidrro_el0 only need to be switched when going
|
* tpidr_el0 and tpidrro_el0 only need to be switched when going
|
||||||
* to host userspace or a different VCPU. EL1 registers only need to be
|
* to host userspace or a different VCPU. EL1 registers only need to be
|
||||||
* switched when potentially going to run a different VCPU. The latter two
|
* switched when potentially going to run a different VCPU. The latter two
|
||||||
@@ -26,12 +27,6 @@
|
|||||||
static void __hyp_text __sysreg_save_common_state(struct kvm_cpu_context *ctxt)
|
static void __hyp_text __sysreg_save_common_state(struct kvm_cpu_context *ctxt)
|
||||||
{
|
{
|
||||||
ctxt->sys_regs[MDSCR_EL1] = read_sysreg(mdscr_el1);
|
ctxt->sys_regs[MDSCR_EL1] = read_sysreg(mdscr_el1);
|
||||||
|
|
||||||
/*
|
|
||||||
* The host arm64 Linux uses sp_el0 to point to 'current' and it must
|
|
||||||
* therefore be saved/restored on every entry/exit to/from the guest.
|
|
||||||
*/
|
|
||||||
ctxt->gp_regs.regs.sp = read_sysreg(sp_el0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __hyp_text __sysreg_save_user_state(struct kvm_cpu_context *ctxt)
|
static void __hyp_text __sysreg_save_user_state(struct kvm_cpu_context *ctxt)
|
||||||
@@ -99,12 +94,6 @@ NOKPROBE_SYMBOL(sysreg_save_guest_state_vhe);
|
|||||||
static void __hyp_text __sysreg_restore_common_state(struct kvm_cpu_context *ctxt)
|
static void __hyp_text __sysreg_restore_common_state(struct kvm_cpu_context *ctxt)
|
||||||
{
|
{
|
||||||
write_sysreg(ctxt->sys_regs[MDSCR_EL1], mdscr_el1);
|
write_sysreg(ctxt->sys_regs[MDSCR_EL1], mdscr_el1);
|
||||||
|
|
||||||
/*
|
|
||||||
* The host arm64 Linux uses sp_el0 to point to 'current' and it must
|
|
||||||
* therefore be saved/restored on every entry/exit to/from the guest.
|
|
||||||
*/
|
|
||||||
write_sysreg(ctxt->gp_regs.regs.sp, sp_el0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __hyp_text __sysreg_restore_user_state(struct kvm_cpu_context *ctxt)
|
static void __hyp_text __sysreg_restore_user_state(struct kvm_cpu_context *ctxt)
|
||||||
|
@@ -230,6 +230,8 @@ pte_t *huge_pte_alloc(struct mm_struct *mm,
|
|||||||
ptep = (pte_t *)pudp;
|
ptep = (pte_t *)pudp;
|
||||||
} else if (sz == (CONT_PTE_SIZE)) {
|
} else if (sz == (CONT_PTE_SIZE)) {
|
||||||
pmdp = pmd_alloc(mm, pudp, addr);
|
pmdp = pmd_alloc(mm, pudp, addr);
|
||||||
|
if (!pmdp)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
WARN_ON(addr & (sz - 1));
|
WARN_ON(addr & (sz - 1));
|
||||||
/*
|
/*
|
||||||
|
@@ -8,6 +8,7 @@ config CSKY
|
|||||||
select ARCH_HAS_SYNC_DMA_FOR_DEVICE
|
select ARCH_HAS_SYNC_DMA_FOR_DEVICE
|
||||||
select ARCH_USE_BUILTIN_BSWAP
|
select ARCH_USE_BUILTIN_BSWAP
|
||||||
select ARCH_USE_QUEUED_RWLOCKS if NR_CPUS>2
|
select ARCH_USE_QUEUED_RWLOCKS if NR_CPUS>2
|
||||||
|
select ARCH_WANT_FRAME_POINTERS if !CPU_CK610
|
||||||
select COMMON_CLK
|
select COMMON_CLK
|
||||||
select CLKSRC_MMIO
|
select CLKSRC_MMIO
|
||||||
select CSKY_MPINTC if CPU_CK860
|
select CSKY_MPINTC if CPU_CK860
|
||||||
@@ -38,6 +39,7 @@ config CSKY
|
|||||||
select HAVE_ARCH_TRACEHOOK
|
select HAVE_ARCH_TRACEHOOK
|
||||||
select HAVE_ARCH_AUDITSYSCALL
|
select HAVE_ARCH_AUDITSYSCALL
|
||||||
select HAVE_COPY_THREAD_TLS
|
select HAVE_COPY_THREAD_TLS
|
||||||
|
select HAVE_DEBUG_BUGVERBOSE
|
||||||
select HAVE_DYNAMIC_FTRACE
|
select HAVE_DYNAMIC_FTRACE
|
||||||
select HAVE_DYNAMIC_FTRACE_WITH_REGS
|
select HAVE_DYNAMIC_FTRACE_WITH_REGS
|
||||||
select HAVE_FUNCTION_TRACER
|
select HAVE_FUNCTION_TRACER
|
||||||
|
@@ -47,7 +47,7 @@ ifeq ($(CSKYABI),abiv2)
|
|||||||
KBUILD_CFLAGS += -mno-stack-size
|
KBUILD_CFLAGS += -mno-stack-size
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifdef CONFIG_STACKTRACE
|
ifdef CONFIG_FRAME_POINTER
|
||||||
KBUILD_CFLAGS += -mbacktrace
|
KBUILD_CFLAGS += -mbacktrace
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
@@ -167,8 +167,8 @@
|
|||||||
* BA Reserved C D V
|
* BA Reserved C D V
|
||||||
*/
|
*/
|
||||||
cprcr r6, cpcr30
|
cprcr r6, cpcr30
|
||||||
lsri r6, 28
|
lsri r6, 29
|
||||||
lsli r6, 28
|
lsli r6, 29
|
||||||
addi r6, 0xe
|
addi r6, 0xe
|
||||||
cpwcr r6, cpcr30
|
cpwcr r6, cpcr30
|
||||||
|
|
||||||
|
@@ -285,8 +285,8 @@
|
|||||||
*/
|
*/
|
||||||
mfcr r6, cr<30, 15> /* Get MSA0 */
|
mfcr r6, cr<30, 15> /* Get MSA0 */
|
||||||
2:
|
2:
|
||||||
lsri r6, 28
|
lsri r6, 29
|
||||||
lsli r6, 28
|
lsli r6, 29
|
||||||
addi r6, 0x1ce
|
addi r6, 0x1ce
|
||||||
mtcr r6, cr<30, 15> /* Set MSA0 */
|
mtcr r6, cr<30, 15> /* Set MSA0 */
|
||||||
|
|
||||||
|
@@ -103,6 +103,8 @@ ENTRY(_mcount)
|
|||||||
mov a0, lr
|
mov a0, lr
|
||||||
subi a0, 4
|
subi a0, 4
|
||||||
ldw a1, (sp, 24)
|
ldw a1, (sp, 24)
|
||||||
|
lrw a2, function_trace_op
|
||||||
|
ldw a2, (a2, 0)
|
||||||
|
|
||||||
jsr r26
|
jsr r26
|
||||||
|
|
||||||
|
@@ -41,8 +41,7 @@ extern struct cpuinfo_csky cpu_data[];
|
|||||||
#define TASK_UNMAPPED_BASE (TASK_SIZE / 3)
|
#define TASK_UNMAPPED_BASE (TASK_SIZE / 3)
|
||||||
|
|
||||||
struct thread_struct {
|
struct thread_struct {
|
||||||
unsigned long ksp; /* kernel stack pointer */
|
unsigned long sp; /* kernel stack pointer */
|
||||||
unsigned long sr; /* saved status register */
|
|
||||||
unsigned long trap_no; /* saved status register */
|
unsigned long trap_no; /* saved status register */
|
||||||
|
|
||||||
/* FPU regs */
|
/* FPU regs */
|
||||||
@@ -50,8 +49,7 @@ struct thread_struct {
|
|||||||
};
|
};
|
||||||
|
|
||||||
#define INIT_THREAD { \
|
#define INIT_THREAD { \
|
||||||
.ksp = sizeof(init_stack) + (unsigned long) &init_stack, \
|
.sp = sizeof(init_stack) + (unsigned long) &init_stack, \
|
||||||
.sr = DEFAULT_PSR_VALUE, \
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -58,6 +58,16 @@ static inline unsigned long kernel_stack_pointer(struct pt_regs *regs)
|
|||||||
return regs->usp;
|
return regs->usp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline unsigned long frame_pointer(struct pt_regs *regs)
|
||||||
|
{
|
||||||
|
return regs->regs[4];
|
||||||
|
}
|
||||||
|
static inline void frame_pointer_set(struct pt_regs *regs,
|
||||||
|
unsigned long val)
|
||||||
|
{
|
||||||
|
regs->regs[4] = val;
|
||||||
|
}
|
||||||
|
|
||||||
extern int regs_query_register_offset(const char *name);
|
extern int regs_query_register_offset(const char *name);
|
||||||
extern unsigned long regs_get_kernel_stack_nth(struct pt_regs *regs,
|
extern unsigned long regs_get_kernel_stack_nth(struct pt_regs *regs,
|
||||||
unsigned int n);
|
unsigned int n);
|
||||||
|
@@ -38,7 +38,13 @@ struct thread_info {
|
|||||||
#define THREAD_SIZE_ORDER (THREAD_SHIFT - PAGE_SHIFT)
|
#define THREAD_SIZE_ORDER (THREAD_SHIFT - PAGE_SHIFT)
|
||||||
|
|
||||||
#define thread_saved_fp(tsk) \
|
#define thread_saved_fp(tsk) \
|
||||||
((unsigned long)(((struct switch_stack *)(tsk->thread.ksp))->r8))
|
((unsigned long)(((struct switch_stack *)(tsk->thread.sp))->r8))
|
||||||
|
|
||||||
|
#define thread_saved_sp(tsk) \
|
||||||
|
((unsigned long)(tsk->thread.sp))
|
||||||
|
|
||||||
|
#define thread_saved_lr(tsk) \
|
||||||
|
((unsigned long)(((struct switch_stack *)(tsk->thread.sp))->r15))
|
||||||
|
|
||||||
static inline struct thread_info *current_thread_info(void)
|
static inline struct thread_info *current_thread_info(void)
|
||||||
{
|
{
|
||||||
@@ -54,10 +60,10 @@ static inline struct thread_info *current_thread_info(void)
|
|||||||
#define TIF_SIGPENDING 0 /* signal pending */
|
#define TIF_SIGPENDING 0 /* signal pending */
|
||||||
#define TIF_NOTIFY_RESUME 1 /* callback before returning to user */
|
#define TIF_NOTIFY_RESUME 1 /* callback before returning to user */
|
||||||
#define TIF_NEED_RESCHED 2 /* rescheduling necessary */
|
#define TIF_NEED_RESCHED 2 /* rescheduling necessary */
|
||||||
#define TIF_SYSCALL_TRACE 3 /* syscall trace active */
|
#define TIF_UPROBE 3 /* uprobe breakpoint or singlestep */
|
||||||
#define TIF_SYSCALL_TRACEPOINT 4 /* syscall tracepoint instrumentation */
|
#define TIF_SYSCALL_TRACE 4 /* syscall trace active */
|
||||||
#define TIF_SYSCALL_AUDIT 5 /* syscall auditing */
|
#define TIF_SYSCALL_TRACEPOINT 5 /* syscall tracepoint instrumentation */
|
||||||
#define TIF_UPROBE 6 /* uprobe breakpoint or singlestep */
|
#define TIF_SYSCALL_AUDIT 6 /* syscall auditing */
|
||||||
#define TIF_POLLING_NRFLAG 16 /* poll_idle() is TIF_NEED_RESCHED */
|
#define TIF_POLLING_NRFLAG 16 /* poll_idle() is TIF_NEED_RESCHED */
|
||||||
#define TIF_MEMDIE 18 /* is terminating due to OOM killer */
|
#define TIF_MEMDIE 18 /* is terminating due to OOM killer */
|
||||||
#define TIF_RESTORE_SIGMASK 20 /* restore signal mask in do_signal() */
|
#define TIF_RESTORE_SIGMASK 20 /* restore signal mask in do_signal() */
|
||||||
|
@@ -253,7 +253,7 @@ do { \
|
|||||||
|
|
||||||
extern int __get_user_bad(void);
|
extern int __get_user_bad(void);
|
||||||
|
|
||||||
#define __copy_user(to, from, n) \
|
#define ___copy_to_user(to, from, n) \
|
||||||
do { \
|
do { \
|
||||||
int w0, w1, w2, w3; \
|
int w0, w1, w2, w3; \
|
||||||
asm volatile( \
|
asm volatile( \
|
||||||
@@ -288,31 +288,34 @@ do { \
|
|||||||
" subi %0, 4 \n" \
|
" subi %0, 4 \n" \
|
||||||
" br 3b \n" \
|
" br 3b \n" \
|
||||||
"5: cmpnei %0, 0 \n" /* 1B */ \
|
"5: cmpnei %0, 0 \n" /* 1B */ \
|
||||||
" bf 8f \n" \
|
" bf 13f \n" \
|
||||||
" ldb %3, (%2, 0) \n" \
|
" ldb %3, (%2, 0) \n" \
|
||||||
"6: stb %3, (%1, 0) \n" \
|
"6: stb %3, (%1, 0) \n" \
|
||||||
" addi %2, 1 \n" \
|
" addi %2, 1 \n" \
|
||||||
" addi %1, 1 \n" \
|
" addi %1, 1 \n" \
|
||||||
" subi %0, 1 \n" \
|
" subi %0, 1 \n" \
|
||||||
" br 5b \n" \
|
" br 5b \n" \
|
||||||
"7: br 8f \n" \
|
"7: subi %0, 4 \n" \
|
||||||
|
"8: subi %0, 4 \n" \
|
||||||
|
"12: subi %0, 4 \n" \
|
||||||
|
" br 13f \n" \
|
||||||
".section __ex_table, \"a\" \n" \
|
".section __ex_table, \"a\" \n" \
|
||||||
".align 2 \n" \
|
".align 2 \n" \
|
||||||
".long 2b, 7b \n" \
|
".long 2b, 13f \n" \
|
||||||
".long 9b, 7b \n" \
|
".long 4b, 13f \n" \
|
||||||
".long 10b, 7b \n" \
|
".long 6b, 13f \n" \
|
||||||
|
".long 9b, 12b \n" \
|
||||||
|
".long 10b, 8b \n" \
|
||||||
".long 11b, 7b \n" \
|
".long 11b, 7b \n" \
|
||||||
".long 4b, 7b \n" \
|
|
||||||
".long 6b, 7b \n" \
|
|
||||||
".previous \n" \
|
".previous \n" \
|
||||||
"8: \n" \
|
"13: \n" \
|
||||||
: "=r"(n), "=r"(to), "=r"(from), "=r"(w0), \
|
: "=r"(n), "=r"(to), "=r"(from), "=r"(w0), \
|
||||||
"=r"(w1), "=r"(w2), "=r"(w3) \
|
"=r"(w1), "=r"(w2), "=r"(w3) \
|
||||||
: "0"(n), "1"(to), "2"(from) \
|
: "0"(n), "1"(to), "2"(from) \
|
||||||
: "memory"); \
|
: "memory"); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define __copy_user_zeroing(to, from, n) \
|
#define ___copy_from_user(to, from, n) \
|
||||||
do { \
|
do { \
|
||||||
int tmp; \
|
int tmp; \
|
||||||
int nsave; \
|
int nsave; \
|
||||||
@@ -355,22 +358,22 @@ do { \
|
|||||||
" addi %1, 1 \n" \
|
" addi %1, 1 \n" \
|
||||||
" subi %0, 1 \n" \
|
" subi %0, 1 \n" \
|
||||||
" br 5b \n" \
|
" br 5b \n" \
|
||||||
"8: mov %3, %0 \n" \
|
"8: stw %3, (%1, 0) \n" \
|
||||||
" movi %4, 0 \n" \
|
" subi %0, 4 \n" \
|
||||||
"9: stb %4, (%1, 0) \n" \
|
" bf 7f \n" \
|
||||||
" addi %1, 1 \n" \
|
"9: subi %0, 8 \n" \
|
||||||
" subi %3, 1 \n" \
|
" bf 7f \n" \
|
||||||
" cmpnei %3, 0 \n" \
|
"13: stw %3, (%1, 8) \n" \
|
||||||
" bt 9b \n" \
|
" subi %0, 12 \n" \
|
||||||
" br 7f \n" \
|
" bf 7f \n" \
|
||||||
".section __ex_table, \"a\" \n" \
|
".section __ex_table, \"a\" \n" \
|
||||||
".align 2 \n" \
|
".align 2 \n" \
|
||||||
".long 2b, 8b \n" \
|
".long 2b, 7f \n" \
|
||||||
|
".long 4b, 7f \n" \
|
||||||
|
".long 6b, 7f \n" \
|
||||||
".long 10b, 8b \n" \
|
".long 10b, 8b \n" \
|
||||||
".long 11b, 8b \n" \
|
".long 11b, 9b \n" \
|
||||||
".long 12b, 8b \n" \
|
".long 12b,13b \n" \
|
||||||
".long 4b, 8b \n" \
|
|
||||||
".long 6b, 8b \n" \
|
|
||||||
".previous \n" \
|
".previous \n" \
|
||||||
"7: \n" \
|
"7: \n" \
|
||||||
: "=r"(n), "=r"(to), "=r"(from), "=r"(nsave), \
|
: "=r"(n), "=r"(to), "=r"(from), "=r"(nsave), \
|
||||||
|
@@ -3,7 +3,7 @@ extra-y := head.o vmlinux.lds
|
|||||||
|
|
||||||
obj-y += entry.o atomic.o signal.o traps.o irq.o time.o vdso.o
|
obj-y += entry.o atomic.o signal.o traps.o irq.o time.o vdso.o
|
||||||
obj-y += power.o syscall.o syscall_table.o setup.o
|
obj-y += power.o syscall.o syscall_table.o setup.o
|
||||||
obj-y += process.o cpu-probe.o ptrace.o dumpstack.o
|
obj-y += process.o cpu-probe.o ptrace.o stacktrace.o
|
||||||
obj-y += probes/
|
obj-y += probes/
|
||||||
|
|
||||||
obj-$(CONFIG_MODULES) += module.o
|
obj-$(CONFIG_MODULES) += module.o
|
||||||
|
@@ -18,8 +18,7 @@ int main(void)
|
|||||||
DEFINE(TASK_ACTIVE_MM, offsetof(struct task_struct, active_mm));
|
DEFINE(TASK_ACTIVE_MM, offsetof(struct task_struct, active_mm));
|
||||||
|
|
||||||
/* offsets into the thread struct */
|
/* offsets into the thread struct */
|
||||||
DEFINE(THREAD_KSP, offsetof(struct thread_struct, ksp));
|
DEFINE(THREAD_KSP, offsetof(struct thread_struct, sp));
|
||||||
DEFINE(THREAD_SR, offsetof(struct thread_struct, sr));
|
|
||||||
DEFINE(THREAD_FESR, offsetof(struct thread_struct, user_fp.fesr));
|
DEFINE(THREAD_FESR, offsetof(struct thread_struct, user_fp.fesr));
|
||||||
DEFINE(THREAD_FCR, offsetof(struct thread_struct, user_fp.fcr));
|
DEFINE(THREAD_FCR, offsetof(struct thread_struct, user_fp.fcr));
|
||||||
DEFINE(THREAD_FPREG, offsetof(struct thread_struct, user_fp.vr));
|
DEFINE(THREAD_FPREG, offsetof(struct thread_struct, user_fp.vr));
|
||||||
|
@@ -1,49 +0,0 @@
|
|||||||
// SPDX-License-Identifier: GPL-2.0
|
|
||||||
// Copyright (C) 2018 Hangzhou C-SKY Microsystems co.,ltd.
|
|
||||||
|
|
||||||
#include <linux/ptrace.h>
|
|
||||||
|
|
||||||
int kstack_depth_to_print = 48;
|
|
||||||
|
|
||||||
void show_trace(unsigned long *stack)
|
|
||||||
{
|
|
||||||
unsigned long *stack_end;
|
|
||||||
unsigned long *stack_start;
|
|
||||||
unsigned long *fp;
|
|
||||||
unsigned long addr;
|
|
||||||
|
|
||||||
addr = (unsigned long) stack & THREAD_MASK;
|
|
||||||
stack_start = (unsigned long *) addr;
|
|
||||||
stack_end = (unsigned long *) (addr + THREAD_SIZE);
|
|
||||||
|
|
||||||
fp = stack;
|
|
||||||
pr_info("\nCall Trace:");
|
|
||||||
|
|
||||||
while (fp > stack_start && fp < stack_end) {
|
|
||||||
#ifdef CONFIG_STACKTRACE
|
|
||||||
addr = fp[1];
|
|
||||||
fp = (unsigned long *) fp[0];
|
|
||||||
#else
|
|
||||||
addr = *fp++;
|
|
||||||
#endif
|
|
||||||
if (__kernel_text_address(addr))
|
|
||||||
pr_cont("\n[<%08lx>] %pS", addr, (void *)addr);
|
|
||||||
}
|
|
||||||
pr_cont("\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
void show_stack(struct task_struct *task, unsigned long *stack)
|
|
||||||
{
|
|
||||||
if (!stack) {
|
|
||||||
if (task)
|
|
||||||
stack = (unsigned long *)thread_saved_fp(task);
|
|
||||||
else
|
|
||||||
#ifdef CONFIG_STACKTRACE
|
|
||||||
asm volatile("mov %0, r8\n":"=r"(stack)::"memory");
|
|
||||||
#else
|
|
||||||
stack = (unsigned long *)&stack;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
show_trace(stack);
|
|
||||||
}
|
|
@@ -330,11 +330,6 @@ ENTRY(__switch_to)
|
|||||||
lrw a3, TASK_THREAD
|
lrw a3, TASK_THREAD
|
||||||
addu a3, a0
|
addu a3, a0
|
||||||
|
|
||||||
mfcr a2, psr /* Save PSR value */
|
|
||||||
stw a2, (a3, THREAD_SR) /* Save PSR in task struct */
|
|
||||||
bclri a2, 6 /* Disable interrupts */
|
|
||||||
mtcr a2, psr
|
|
||||||
|
|
||||||
SAVE_SWITCH_STACK
|
SAVE_SWITCH_STACK
|
||||||
|
|
||||||
stw sp, (a3, THREAD_KSP)
|
stw sp, (a3, THREAD_KSP)
|
||||||
@@ -345,12 +340,9 @@ ENTRY(__switch_to)
|
|||||||
|
|
||||||
ldw sp, (a3, THREAD_KSP) /* Set next kernel sp */
|
ldw sp, (a3, THREAD_KSP) /* Set next kernel sp */
|
||||||
|
|
||||||
ldw a2, (a3, THREAD_SR) /* Set next PSR */
|
|
||||||
mtcr a2, psr
|
|
||||||
|
|
||||||
#if defined(__CSKYABIV2__)
|
#if defined(__CSKYABIV2__)
|
||||||
addi r7, a1, TASK_THREAD_INFO
|
addi a3, a1, TASK_THREAD_INFO
|
||||||
ldw tls, (r7, TINFO_TP_VALUE)
|
ldw tls, (a3, TINFO_TP_VALUE)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
RESTORE_SWITCH_STACK
|
RESTORE_SWITCH_STACK
|
||||||
|
@@ -202,6 +202,7 @@ int ftrace_disable_ftrace_graph_caller(void)
|
|||||||
#endif /* CONFIG_DYNAMIC_FTRACE */
|
#endif /* CONFIG_DYNAMIC_FTRACE */
|
||||||
#endif /* CONFIG_FUNCTION_GRAPH_TRACER */
|
#endif /* CONFIG_FUNCTION_GRAPH_TRACER */
|
||||||
|
|
||||||
|
#ifdef CONFIG_DYNAMIC_FTRACE
|
||||||
#ifndef CONFIG_CPU_HAS_ICACHE_INS
|
#ifndef CONFIG_CPU_HAS_ICACHE_INS
|
||||||
struct ftrace_modify_param {
|
struct ftrace_modify_param {
|
||||||
int command;
|
int command;
|
||||||
@@ -231,6 +232,7 @@ void arch_ftrace_update_code(int command)
|
|||||||
stop_machine(__ftrace_modify_code, ¶m, cpu_online_mask);
|
stop_machine(__ftrace_modify_code, ¶m, cpu_online_mask);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
#endif /* CONFIG_DYNAMIC_FTRACE */
|
||||||
|
|
||||||
/* _mcount is defined in abi's mcount.S */
|
/* _mcount is defined in abi's mcount.S */
|
||||||
EXPORT_SYMBOL(_mcount);
|
EXPORT_SYMBOL(_mcount);
|
||||||
|
@@ -12,12 +12,17 @@ struct stackframe {
|
|||||||
|
|
||||||
static int unwind_frame_kernel(struct stackframe *frame)
|
static int unwind_frame_kernel(struct stackframe *frame)
|
||||||
{
|
{
|
||||||
if (kstack_end((void *)frame->fp))
|
unsigned long low = (unsigned long)task_stack_page(current);
|
||||||
|
unsigned long high = low + THREAD_SIZE;
|
||||||
|
|
||||||
|
if (unlikely(frame->fp < low || frame->fp > high))
|
||||||
return -EPERM;
|
return -EPERM;
|
||||||
if (frame->fp & 0x3 || frame->fp < TASK_SIZE)
|
|
||||||
|
if (kstack_end((void *)frame->fp) || frame->fp & 0x3)
|
||||||
return -EPERM;
|
return -EPERM;
|
||||||
|
|
||||||
*frame = *(struct stackframe *)frame->fp;
|
*frame = *(struct stackframe *)frame->fp;
|
||||||
|
|
||||||
if (__kernel_text_address(frame->lr)) {
|
if (__kernel_text_address(frame->lr)) {
|
||||||
int graph = 0;
|
int graph = 0;
|
||||||
|
|
||||||
|
@@ -11,6 +11,11 @@
|
|||||||
|
|
||||||
#define UPROBE_TRAP_NR UINT_MAX
|
#define UPROBE_TRAP_NR UINT_MAX
|
||||||
|
|
||||||
|
bool is_swbp_insn(uprobe_opcode_t *insn)
|
||||||
|
{
|
||||||
|
return (*insn & 0xffff) == UPROBE_SWBP_INSN;
|
||||||
|
}
|
||||||
|
|
||||||
unsigned long uprobe_get_swbp_addr(struct pt_regs *regs)
|
unsigned long uprobe_get_swbp_addr(struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
return instruction_pointer(regs);
|
return instruction_pointer(regs);
|
||||||
|
@@ -35,7 +35,7 @@ void flush_thread(void){}
|
|||||||
*/
|
*/
|
||||||
unsigned long thread_saved_pc(struct task_struct *tsk)
|
unsigned long thread_saved_pc(struct task_struct *tsk)
|
||||||
{
|
{
|
||||||
struct switch_stack *sw = (struct switch_stack *)tsk->thread.ksp;
|
struct switch_stack *sw = (struct switch_stack *)tsk->thread.sp;
|
||||||
|
|
||||||
return sw->r15;
|
return sw->r15;
|
||||||
}
|
}
|
||||||
@@ -56,8 +56,8 @@ int copy_thread_tls(unsigned long clone_flags,
|
|||||||
childstack = ((struct switch_stack *) childregs) - 1;
|
childstack = ((struct switch_stack *) childregs) - 1;
|
||||||
memset(childstack, 0, sizeof(struct switch_stack));
|
memset(childstack, 0, sizeof(struct switch_stack));
|
||||||
|
|
||||||
/* setup ksp for switch_to !!! */
|
/* setup thread.sp for switch_to !!! */
|
||||||
p->thread.ksp = (unsigned long)childstack;
|
p->thread.sp = (unsigned long)childstack;
|
||||||
|
|
||||||
if (unlikely(p->flags & PF_KTHREAD)) {
|
if (unlikely(p->flags & PF_KTHREAD)) {
|
||||||
memset(childregs, 0, sizeof(struct pt_regs));
|
memset(childregs, 0, sizeof(struct pt_regs));
|
||||||
@@ -98,37 +98,6 @@ int dump_task_regs(struct task_struct *tsk, elf_gregset_t *pr_regs)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long get_wchan(struct task_struct *p)
|
|
||||||
{
|
|
||||||
unsigned long lr;
|
|
||||||
unsigned long *fp, *stack_start, *stack_end;
|
|
||||||
int count = 0;
|
|
||||||
|
|
||||||
if (!p || p == current || p->state == TASK_RUNNING)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
stack_start = (unsigned long *)end_of_stack(p);
|
|
||||||
stack_end = (unsigned long *)(task_stack_page(p) + THREAD_SIZE);
|
|
||||||
|
|
||||||
fp = (unsigned long *) thread_saved_fp(p);
|
|
||||||
do {
|
|
||||||
if (fp < stack_start || fp > stack_end)
|
|
||||||
return 0;
|
|
||||||
#ifdef CONFIG_STACKTRACE
|
|
||||||
lr = fp[1];
|
|
||||||
fp = (unsigned long *)fp[0];
|
|
||||||
#else
|
|
||||||
lr = *fp++;
|
|
||||||
#endif
|
|
||||||
if (!in_sched_functions(lr) &&
|
|
||||||
__kernel_text_address(lr))
|
|
||||||
return lr;
|
|
||||||
} while (count++ < 16);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL(get_wchan);
|
|
||||||
|
|
||||||
#ifndef CONFIG_CPU_PM_NONE
|
#ifndef CONFIG_CPU_PM_NONE
|
||||||
void arch_cpu_idle(void)
|
void arch_cpu_idle(void)
|
||||||
{
|
{
|
||||||
|
@@ -41,6 +41,9 @@ static void singlestep_disable(struct task_struct *tsk)
|
|||||||
|
|
||||||
regs = task_pt_regs(tsk);
|
regs = task_pt_regs(tsk);
|
||||||
regs->sr = (regs->sr & TRACE_MODE_MASK) | TRACE_MODE_RUN;
|
regs->sr = (regs->sr & TRACE_MODE_MASK) | TRACE_MODE_RUN;
|
||||||
|
|
||||||
|
/* Enable irq */
|
||||||
|
regs->sr |= BIT(6);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void singlestep_enable(struct task_struct *tsk)
|
static void singlestep_enable(struct task_struct *tsk)
|
||||||
@@ -49,6 +52,9 @@ static void singlestep_enable(struct task_struct *tsk)
|
|||||||
|
|
||||||
regs = task_pt_regs(tsk);
|
regs = task_pt_regs(tsk);
|
||||||
regs->sr = (regs->sr & TRACE_MODE_MASK) | TRACE_MODE_SI;
|
regs->sr = (regs->sr & TRACE_MODE_MASK) | TRACE_MODE_SI;
|
||||||
|
|
||||||
|
/* Disable irq */
|
||||||
|
regs->sr &= ~BIT(6);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -1,57 +1,159 @@
|
|||||||
// SPDX-License-Identifier: GPL-2.0
|
// SPDX-License-Identifier: GPL-2.0
|
||||||
/* Copyright (C) 2018 Hangzhou C-SKY Microsystems co.,ltd. */
|
|
||||||
|
|
||||||
#include <linux/sched/debug.h>
|
#include <linux/sched/debug.h>
|
||||||
#include <linux/sched/task_stack.h>
|
#include <linux/sched/task_stack.h>
|
||||||
#include <linux/stacktrace.h>
|
#include <linux/stacktrace.h>
|
||||||
#include <linux/ftrace.h>
|
#include <linux/ftrace.h>
|
||||||
|
#include <linux/ptrace.h>
|
||||||
|
|
||||||
|
#ifdef CONFIG_FRAME_POINTER
|
||||||
|
|
||||||
|
struct stackframe {
|
||||||
|
unsigned long fp;
|
||||||
|
unsigned long ra;
|
||||||
|
};
|
||||||
|
|
||||||
|
void notrace walk_stackframe(struct task_struct *task, struct pt_regs *regs,
|
||||||
|
bool (*fn)(unsigned long, void *), void *arg)
|
||||||
|
{
|
||||||
|
unsigned long fp, sp, pc;
|
||||||
|
|
||||||
|
if (regs) {
|
||||||
|
fp = frame_pointer(regs);
|
||||||
|
sp = user_stack_pointer(regs);
|
||||||
|
pc = instruction_pointer(regs);
|
||||||
|
} else if (task == NULL || task == current) {
|
||||||
|
const register unsigned long current_sp __asm__ ("sp");
|
||||||
|
const register unsigned long current_fp __asm__ ("r8");
|
||||||
|
fp = current_fp;
|
||||||
|
sp = current_sp;
|
||||||
|
pc = (unsigned long)walk_stackframe;
|
||||||
|
} else {
|
||||||
|
/* task blocked in __switch_to */
|
||||||
|
fp = thread_saved_fp(task);
|
||||||
|
sp = thread_saved_sp(task);
|
||||||
|
pc = thread_saved_lr(task);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (;;) {
|
||||||
|
unsigned long low, high;
|
||||||
|
struct stackframe *frame;
|
||||||
|
|
||||||
|
if (unlikely(!__kernel_text_address(pc) || fn(pc, arg)))
|
||||||
|
break;
|
||||||
|
|
||||||
|
/* Validate frame pointer */
|
||||||
|
low = sp;
|
||||||
|
high = ALIGN(sp, THREAD_SIZE);
|
||||||
|
if (unlikely(fp < low || fp > high || fp & 0x3))
|
||||||
|
break;
|
||||||
|
/* Unwind stack frame */
|
||||||
|
frame = (struct stackframe *)fp;
|
||||||
|
sp = fp;
|
||||||
|
fp = frame->fp;
|
||||||
|
pc = ftrace_graph_ret_addr(current, NULL, frame->ra,
|
||||||
|
(unsigned long *)(fp - 8));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#else /* !CONFIG_FRAME_POINTER */
|
||||||
|
|
||||||
|
static void notrace walk_stackframe(struct task_struct *task,
|
||||||
|
struct pt_regs *regs, bool (*fn)(unsigned long, void *), void *arg)
|
||||||
|
{
|
||||||
|
unsigned long sp, pc;
|
||||||
|
unsigned long *ksp;
|
||||||
|
|
||||||
|
if (regs) {
|
||||||
|
sp = user_stack_pointer(regs);
|
||||||
|
pc = instruction_pointer(regs);
|
||||||
|
} else if (task == NULL || task == current) {
|
||||||
|
const register unsigned long current_sp __asm__ ("sp");
|
||||||
|
sp = current_sp;
|
||||||
|
pc = (unsigned long)walk_stackframe;
|
||||||
|
} else {
|
||||||
|
/* task blocked in __switch_to */
|
||||||
|
sp = thread_saved_sp(task);
|
||||||
|
pc = thread_saved_lr(task);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (unlikely(sp & 0x3))
|
||||||
|
return;
|
||||||
|
|
||||||
|
ksp = (unsigned long *)sp;
|
||||||
|
while (!kstack_end(ksp)) {
|
||||||
|
if (__kernel_text_address(pc) && unlikely(fn(pc, arg)))
|
||||||
|
break;
|
||||||
|
pc = (*ksp++) - 0x4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_FRAME_POINTER */
|
||||||
|
|
||||||
|
static bool print_trace_address(unsigned long pc, void *arg)
|
||||||
|
{
|
||||||
|
print_ip_sym(pc);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void show_stack(struct task_struct *task, unsigned long *sp)
|
||||||
|
{
|
||||||
|
pr_cont("Call Trace:\n");
|
||||||
|
walk_stackframe(task, NULL, print_trace_address, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool save_wchan(unsigned long pc, void *arg)
|
||||||
|
{
|
||||||
|
if (!in_sched_functions(pc)) {
|
||||||
|
unsigned long *p = arg;
|
||||||
|
*p = pc;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long get_wchan(struct task_struct *task)
|
||||||
|
{
|
||||||
|
unsigned long pc = 0;
|
||||||
|
|
||||||
|
if (likely(task && task != current && task->state != TASK_RUNNING))
|
||||||
|
walk_stackframe(task, NULL, save_wchan, &pc);
|
||||||
|
return pc;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_STACKTRACE
|
||||||
|
static bool __save_trace(unsigned long pc, void *arg, bool nosched)
|
||||||
|
{
|
||||||
|
struct stack_trace *trace = arg;
|
||||||
|
|
||||||
|
if (unlikely(nosched && in_sched_functions(pc)))
|
||||||
|
return false;
|
||||||
|
if (unlikely(trace->skip > 0)) {
|
||||||
|
trace->skip--;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
trace->entries[trace->nr_entries++] = pc;
|
||||||
|
return (trace->nr_entries >= trace->max_entries);
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool save_trace(unsigned long pc, void *arg)
|
||||||
|
{
|
||||||
|
return __save_trace(pc, arg, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Save stack-backtrace addresses into a stack_trace buffer.
|
||||||
|
*/
|
||||||
|
void save_stack_trace_tsk(struct task_struct *tsk, struct stack_trace *trace)
|
||||||
|
{
|
||||||
|
walk_stackframe(tsk, NULL, save_trace, trace);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(save_stack_trace_tsk);
|
||||||
|
|
||||||
void save_stack_trace(struct stack_trace *trace)
|
void save_stack_trace(struct stack_trace *trace)
|
||||||
{
|
{
|
||||||
save_stack_trace_tsk(current, trace);
|
save_stack_trace_tsk(NULL, trace);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(save_stack_trace);
|
EXPORT_SYMBOL_GPL(save_stack_trace);
|
||||||
|
|
||||||
void save_stack_trace_tsk(struct task_struct *tsk, struct stack_trace *trace)
|
#endif /* CONFIG_STACKTRACE */
|
||||||
{
|
|
||||||
unsigned long *fp, *stack_start, *stack_end;
|
|
||||||
unsigned long addr;
|
|
||||||
int skip = trace->skip;
|
|
||||||
int savesched;
|
|
||||||
int graph_idx = 0;
|
|
||||||
|
|
||||||
if (tsk == current) {
|
|
||||||
asm volatile("mov %0, r8\n":"=r"(fp));
|
|
||||||
savesched = 1;
|
|
||||||
} else {
|
|
||||||
fp = (unsigned long *)thread_saved_fp(tsk);
|
|
||||||
savesched = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
addr = (unsigned long) fp & THREAD_MASK;
|
|
||||||
stack_start = (unsigned long *) addr;
|
|
||||||
stack_end = (unsigned long *) (addr + THREAD_SIZE);
|
|
||||||
|
|
||||||
while (fp > stack_start && fp < stack_end) {
|
|
||||||
unsigned long lpp, fpp;
|
|
||||||
|
|
||||||
fpp = fp[0];
|
|
||||||
lpp = fp[1];
|
|
||||||
if (!__kernel_text_address(lpp))
|
|
||||||
break;
|
|
||||||
else
|
|
||||||
lpp = ftrace_graph_ret_addr(tsk, &graph_idx, lpp, NULL);
|
|
||||||
|
|
||||||
if (savesched || !in_sched_functions(lpp)) {
|
|
||||||
if (skip) {
|
|
||||||
skip--;
|
|
||||||
} else {
|
|
||||||
trace->entries[trace->nr_entries++] = lpp;
|
|
||||||
if (trace->nr_entries >= trace->max_entries)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fp = (unsigned long *)fpp;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL_GPL(save_stack_trace_tsk);
|
|
||||||
|
@@ -7,10 +7,7 @@
|
|||||||
unsigned long raw_copy_from_user(void *to, const void *from,
|
unsigned long raw_copy_from_user(void *to, const void *from,
|
||||||
unsigned long n)
|
unsigned long n)
|
||||||
{
|
{
|
||||||
if (access_ok(from, n))
|
___copy_from_user(to, from, n);
|
||||||
__copy_user_zeroing(to, from, n);
|
|
||||||
else
|
|
||||||
memset(to, 0, n);
|
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(raw_copy_from_user);
|
EXPORT_SYMBOL(raw_copy_from_user);
|
||||||
@@ -18,8 +15,7 @@ EXPORT_SYMBOL(raw_copy_from_user);
|
|||||||
unsigned long raw_copy_to_user(void *to, const void *from,
|
unsigned long raw_copy_to_user(void *to, const void *from,
|
||||||
unsigned long n)
|
unsigned long n)
|
||||||
{
|
{
|
||||||
if (access_ok(to, n))
|
___copy_to_user(to, from, n);
|
||||||
__copy_user(to, from, n);
|
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(raw_copy_to_user);
|
EXPORT_SYMBOL(raw_copy_to_user);
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user