Merge 1a323ea535
("x86: get rid of 'errret' argument to __get_user_xyz() macross") into android-mainline
In a quest to divide up the 5.7-rc1 merge chunks into reviewable pieces. Signed-off-by: Greg Kroah-Hartman <gregkh@google.com> Change-Id: I2e5960415348c06e8f10e10cbefb3ee5c3745e73
This commit is contained in:
commit
6aea7b7129
23
Documentation/ABI/obsolete/sysfs-selinux-checkreqprot
Normal file
23
Documentation/ABI/obsolete/sysfs-selinux-checkreqprot
Normal file
@ -0,0 +1,23 @@
|
||||
What: /sys/fs/selinux/checkreqprot
|
||||
Date: April 2005 (predates git)
|
||||
KernelVersion: 2.6.12-rc2 (predates git)
|
||||
Contact: selinux@vger.kernel.org
|
||||
Description:
|
||||
|
||||
The selinuxfs "checkreqprot" node allows SELinux to be configured
|
||||
to check the protection requested by userspace for mmap/mprotect
|
||||
calls instead of the actual protection applied by the kernel.
|
||||
This was a compatibility mechanism for legacy userspace and
|
||||
for the READ_IMPLIES_EXEC personality flag. However, if set to
|
||||
1, it weakens security by allowing mappings to be made executable
|
||||
without authorization by policy. The default value of checkreqprot
|
||||
at boot was changed starting in Linux v4.4 to 0 (i.e. check the
|
||||
actual protection), and Android and Linux distributions have been
|
||||
explicitly writing a "0" to /sys/fs/selinux/checkreqprot during
|
||||
initialization for some time. Support for setting checkreqprot to 1
|
||||
will be removed in a future kernel release, at which point the kernel
|
||||
will always cease using checkreqprot internally and will always
|
||||
check the actual protections being applied upon mmap/mprotect calls.
|
||||
The checkreqprot selinuxfs node will remain for backward compatibility
|
||||
but will discard writes of the "0" value and will reject writes of the
|
||||
"1" value when this mechanism is removed.
|
@ -154,3 +154,10 @@ Description:
|
||||
device specification. For example, when user sets 7bytes on
|
||||
16550A, which has 1/4/8/14 bytes trigger, the RX trigger is
|
||||
automatically changed to 4 bytes.
|
||||
|
||||
What: /sys/class/tty/ttyS0/console
|
||||
Date: February 2020
|
||||
Contact: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
|
||||
Description:
|
||||
Allows user to detach or attach back the given device as
|
||||
kernel console. It shows and accepts a boolean variable.
|
||||
|
@ -2,7 +2,8 @@
|
||||
# Makefile for Sphinx documentation
|
||||
#
|
||||
|
||||
subdir-y := devicetree/bindings/
|
||||
# for cleaning
|
||||
subdir- := devicetree/bindings
|
||||
|
||||
# Check for broken documentation file references
|
||||
ifeq ($(CONFIG_WARN_MISSING_DOCUMENTS),y)
|
||||
|
@ -525,6 +525,7 @@
|
||||
Default value is set via a kernel config option.
|
||||
Value can be changed at runtime via
|
||||
/sys/fs/selinux/checkreqprot.
|
||||
Setting checkreqprot to 1 is deprecated.
|
||||
|
||||
cio_ignore= [S390]
|
||||
See Documentation/s390/common_io.rst for details.
|
||||
@ -3201,7 +3202,7 @@
|
||||
[X86,PV_OPS] Disable paravirtualized VMware scheduler
|
||||
clock and use the default one.
|
||||
|
||||
no-steal-acc [X86,KVM,ARM64] Disable paravirtualized steal time
|
||||
no-steal-acc [X86,PV_OPS,ARM64] Disable paravirtualized steal time
|
||||
accounting. steal time is computed, but won't
|
||||
influence scheduler behaviour
|
||||
|
||||
|
@ -67,7 +67,8 @@ two flavors of JITs, the newer eBPF JIT currently supported on:
|
||||
- sparc64
|
||||
- mips64
|
||||
- s390x
|
||||
- riscv
|
||||
- riscv64
|
||||
- riscv32
|
||||
|
||||
And the older cBPF JIT supported on the following archs:
|
||||
|
||||
|
112
Documentation/arm64/amu.rst
Normal file
112
Documentation/arm64/amu.rst
Normal file
@ -0,0 +1,112 @@
|
||||
=======================================================
|
||||
Activity Monitors Unit (AMU) extension in AArch64 Linux
|
||||
=======================================================
|
||||
|
||||
Author: Ionela Voinescu <ionela.voinescu@arm.com>
|
||||
|
||||
Date: 2019-09-10
|
||||
|
||||
This document briefly describes the provision of Activity Monitors Unit
|
||||
support in AArch64 Linux.
|
||||
|
||||
|
||||
Architecture overview
|
||||
---------------------
|
||||
|
||||
The activity monitors extension is an optional extension introduced by the
|
||||
ARMv8.4 CPU architecture.
|
||||
|
||||
The activity monitors unit, implemented in each CPU, provides performance
|
||||
counters intended for system management use. The AMU extension provides a
|
||||
system register interface to the counter registers and also supports an
|
||||
optional external memory-mapped interface.
|
||||
|
||||
Version 1 of the Activity Monitors architecture implements a counter group
|
||||
of four fixed and architecturally defined 64-bit event counters.
|
||||
- CPU cycle counter: increments at the frequency of the CPU.
|
||||
- Constant counter: increments at the fixed frequency of the system
|
||||
clock.
|
||||
- Instructions retired: increments with every architecturally executed
|
||||
instruction.
|
||||
- Memory stall cycles: counts instruction dispatch stall cycles caused by
|
||||
misses in the last level cache within the clock domain.
|
||||
|
||||
When in WFI or WFE these counters do not increment.
|
||||
|
||||
The Activity Monitors architecture provides space for up to 16 architected
|
||||
event counters. Future versions of the architecture may use this space to
|
||||
implement additional architected event counters.
|
||||
|
||||
Additionally, version 1 implements a counter group of up to 16 auxiliary
|
||||
64-bit event counters.
|
||||
|
||||
On cold reset all counters reset to 0.
|
||||
|
||||
|
||||
Basic support
|
||||
-------------
|
||||
|
||||
The kernel can safely run a mix of CPUs with and without support for the
|
||||
activity monitors extension. Therefore, when CONFIG_ARM64_AMU_EXTN is
|
||||
selected we unconditionally enable the capability to allow any late CPU
|
||||
(secondary or hotplugged) to detect and use the feature.
|
||||
|
||||
When the feature is detected on a CPU, we flag the availability of the
|
||||
feature but this does not guarantee the correct functionality of the
|
||||
counters, only the presence of the extension.
|
||||
|
||||
Firmware (code running at higher exception levels, e.g. arm-tf) support is
|
||||
needed to:
|
||||
- Enable access for lower exception levels (EL2 and EL1) to the AMU
|
||||
registers.
|
||||
- Enable the counters. If not enabled these will read as 0.
|
||||
- Save/restore the counters before/after the CPU is being put/brought up
|
||||
from the 'off' power state.
|
||||
|
||||
When using kernels that have this feature enabled but boot with broken
|
||||
firmware the user may experience panics or lockups when accessing the
|
||||
counter registers. Even if these symptoms are not observed, the values
|
||||
returned by the register reads might not correctly reflect reality. Most
|
||||
commonly, the counters will read as 0, indicating that they are not
|
||||
enabled.
|
||||
|
||||
If proper support is not provided in firmware it's best to disable
|
||||
CONFIG_ARM64_AMU_EXTN. To be noted that for security reasons, this does not
|
||||
bypass the setting of AMUSERENR_EL0 to trap accesses from EL0 (userspace) to
|
||||
EL1 (kernel). Therefore, firmware should still ensure accesses to AMU registers
|
||||
are not trapped in EL2/EL3.
|
||||
|
||||
The fixed counters of AMUv1 are accessible though the following system
|
||||
register definitions:
|
||||
- SYS_AMEVCNTR0_CORE_EL0
|
||||
- SYS_AMEVCNTR0_CONST_EL0
|
||||
- SYS_AMEVCNTR0_INST_RET_EL0
|
||||
- SYS_AMEVCNTR0_MEM_STALL_EL0
|
||||
|
||||
Auxiliary platform specific counters can be accessed using
|
||||
SYS_AMEVCNTR1_EL0(n), where n is a value between 0 and 15.
|
||||
|
||||
Details can be found in: arch/arm64/include/asm/sysreg.h.
|
||||
|
||||
|
||||
Userspace access
|
||||
----------------
|
||||
|
||||
Currently, access from userspace to the AMU registers is disabled due to:
|
||||
- Security reasons: they might expose information about code executed in
|
||||
secure mode.
|
||||
- Purpose: AMU counters are intended for system management use.
|
||||
|
||||
Also, the presence of the feature is not visible to userspace.
|
||||
|
||||
|
||||
Virtualization
|
||||
--------------
|
||||
|
||||
Currently, access from userspace (EL0) and kernelspace (EL1) on the KVM
|
||||
guest side is disabled due to:
|
||||
- Security reasons: they might expose information about code executed
|
||||
by other guests or the host.
|
||||
|
||||
Any attempt to access the AMU registers will result in an UNDEFINED
|
||||
exception being injected into the guest.
|
@ -248,6 +248,20 @@ Before jumping into the kernel, the following conditions must be met:
|
||||
- HCR_EL2.APK (bit 40) must be initialised to 0b1
|
||||
- HCR_EL2.API (bit 41) must be initialised to 0b1
|
||||
|
||||
For CPUs with Activity Monitors Unit v1 (AMUv1) extension present:
|
||||
- If EL3 is present:
|
||||
CPTR_EL3.TAM (bit 30) must be initialised to 0b0
|
||||
CPTR_EL2.TAM (bit 30) must be initialised to 0b0
|
||||
AMCNTENSET0_EL0 must be initialised to 0b1111
|
||||
AMCNTENSET1_EL0 must be initialised to a platform specific value
|
||||
having 0b1 set for the corresponding bit for each of the auxiliary
|
||||
counters present.
|
||||
- If the kernel is entered at EL1:
|
||||
AMCNTENSET0_EL0 must be initialised to 0b1111
|
||||
AMCNTENSET1_EL0 must be initialised to a platform specific value
|
||||
having 0b1 set for the corresponding bit for each of the auxiliary
|
||||
counters present.
|
||||
|
||||
The requirements described above for CPU mode, caches, MMUs, architected
|
||||
timers, coherency and system registers apply to all CPUs. All CPUs must
|
||||
enter the kernel in the same exception level.
|
||||
|
@ -6,6 +6,7 @@ ARM64 Architecture
|
||||
:maxdepth: 1
|
||||
|
||||
acpi_object_usage
|
||||
amu
|
||||
arm-acpi
|
||||
booting
|
||||
cpu-feature-registers
|
||||
|
@ -20,11 +20,11 @@ Reporting bugs
|
||||
Q: How do I report bugs for BPF kernel code?
|
||||
--------------------------------------------
|
||||
A: Since all BPF kernel development as well as bpftool and iproute2 BPF
|
||||
loader development happens through the netdev kernel mailing list,
|
||||
loader development happens through the bpf kernel mailing list,
|
||||
please report any found issues around BPF to the following mailing
|
||||
list:
|
||||
|
||||
netdev@vger.kernel.org
|
||||
bpf@vger.kernel.org
|
||||
|
||||
This may also include issues related to XDP, BPF tracing, etc.
|
||||
|
||||
@ -46,17 +46,12 @@ Submitting patches
|
||||
|
||||
Q: To which mailing list do I need to submit my BPF patches?
|
||||
------------------------------------------------------------
|
||||
A: Please submit your BPF patches to the netdev kernel mailing list:
|
||||
A: Please submit your BPF patches to the bpf kernel mailing list:
|
||||
|
||||
netdev@vger.kernel.org
|
||||
|
||||
Historically, BPF came out of networking and has always been maintained
|
||||
by the kernel networking community. Although these days BPF touches
|
||||
many other subsystems as well, the patches are still routed mainly
|
||||
through the networking community.
|
||||
bpf@vger.kernel.org
|
||||
|
||||
In case your patch has changes in various different subsystems (e.g.
|
||||
tracing, security, etc), make sure to Cc the related kernel mailing
|
||||
networking, tracing, security, etc), make sure to Cc the related kernel mailing
|
||||
lists and maintainers from there as well, so they are able to review
|
||||
the changes and provide their Acked-by's to the patches.
|
||||
|
||||
@ -168,7 +163,7 @@ a BPF point of view.
|
||||
Be aware that this is not a final verdict that the patch will
|
||||
automatically get accepted into net or net-next trees eventually:
|
||||
|
||||
On the netdev kernel mailing list reviews can come in at any point
|
||||
On the bpf kernel mailing list reviews can come in at any point
|
||||
in time. If discussions around a patch conclude that they cannot
|
||||
get included as-is, we will either apply a follow-up fix or drop
|
||||
them from the trees entirely. Therefore, we also reserve to rebase
|
||||
@ -494,15 +489,15 @@ A: You need cmake and gcc-c++ as build requisites for LLVM. Once you have
|
||||
that set up, proceed with building the latest LLVM and clang version
|
||||
from the git repositories::
|
||||
|
||||
$ git clone http://llvm.org/git/llvm.git
|
||||
$ cd llvm/tools
|
||||
$ git clone --depth 1 http://llvm.org/git/clang.git
|
||||
$ cd ..; mkdir build; cd build
|
||||
$ cmake .. -DLLVM_TARGETS_TO_BUILD="BPF;X86" \
|
||||
$ git clone https://github.com/llvm/llvm-project.git
|
||||
$ mkdir -p llvm-project/llvm/build/install
|
||||
$ cd llvm-project/llvm/build
|
||||
$ cmake .. -G "Ninja" -DLLVM_TARGETS_TO_BUILD="BPF;X86" \
|
||||
-DLLVM_ENABLE_PROJECTS="clang" \
|
||||
-DBUILD_SHARED_LIBS=OFF \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DLLVM_BUILD_RUNTIME=OFF
|
||||
$ make -j $(getconf _NPROCESSORS_ONLN)
|
||||
$ ninja
|
||||
|
||||
The built binaries can then be found in the build/bin/ directory, where
|
||||
you can point the PATH variable to.
|
||||
|
142
Documentation/bpf/bpf_lsm.rst
Normal file
142
Documentation/bpf/bpf_lsm.rst
Normal file
@ -0,0 +1,142 @@
|
||||
.. SPDX-License-Identifier: GPL-2.0+
|
||||
.. Copyright (C) 2020 Google LLC.
|
||||
|
||||
================
|
||||
LSM BPF Programs
|
||||
================
|
||||
|
||||
These BPF programs allow runtime instrumentation of the LSM hooks by privileged
|
||||
users to implement system-wide MAC (Mandatory Access Control) and Audit
|
||||
policies using eBPF.
|
||||
|
||||
Structure
|
||||
---------
|
||||
|
||||
The example shows an eBPF program that can be attached to the ``file_mprotect``
|
||||
LSM hook:
|
||||
|
||||
.. c:function:: int file_mprotect(struct vm_area_struct *vma, unsigned long reqprot, unsigned long prot);
|
||||
|
||||
Other LSM hooks which can be instrumented can be found in
|
||||
``include/linux/lsm_hooks.h``.
|
||||
|
||||
eBPF programs that use :doc:`/bpf/btf` do not need to include kernel headers
|
||||
for accessing information from the attached eBPF program's context. They can
|
||||
simply declare the structures in the eBPF program and only specify the fields
|
||||
that need to be accessed.
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
struct mm_struct {
|
||||
unsigned long start_brk, brk, start_stack;
|
||||
} __attribute__((preserve_access_index));
|
||||
|
||||
struct vm_area_struct {
|
||||
unsigned long start_brk, brk, start_stack;
|
||||
unsigned long vm_start, vm_end;
|
||||
struct mm_struct *vm_mm;
|
||||
} __attribute__((preserve_access_index));
|
||||
|
||||
|
||||
.. note:: The order of the fields is irrelevant.
|
||||
|
||||
This can be further simplified (if one has access to the BTF information at
|
||||
build time) by generating the ``vmlinux.h`` with:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
# bpftool btf dump file <path-to-btf-vmlinux> format c > vmlinux.h
|
||||
|
||||
.. note:: ``path-to-btf-vmlinux`` can be ``/sys/kernel/btf/vmlinux`` if the
|
||||
build environment matches the environment the BPF programs are
|
||||
deployed in.
|
||||
|
||||
The ``vmlinux.h`` can then simply be included in the BPF programs without
|
||||
requiring the definition of the types.
|
||||
|
||||
The eBPF programs can be declared using the``BPF_PROG``
|
||||
macros defined in `tools/lib/bpf/bpf_tracing.h`_. In this
|
||||
example:
|
||||
|
||||
* ``"lsm/file_mprotect"`` indicates the LSM hook that the program must
|
||||
be attached to
|
||||
* ``mprotect_audit`` is the name of the eBPF program
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
SEC("lsm/file_mprotect")
|
||||
int BPF_PROG(mprotect_audit, struct vm_area_struct *vma,
|
||||
unsigned long reqprot, unsigned long prot, int ret)
|
||||
{
|
||||
/* ret is the return value from the previous BPF program
|
||||
* or 0 if it's the first hook.
|
||||
*/
|
||||
if (ret != 0)
|
||||
return ret;
|
||||
|
||||
int is_heap;
|
||||
|
||||
is_heap = (vma->vm_start >= vma->vm_mm->start_brk &&
|
||||
vma->vm_end <= vma->vm_mm->brk);
|
||||
|
||||
/* Return an -EPERM or write information to the perf events buffer
|
||||
* for auditing
|
||||
*/
|
||||
if (is_heap)
|
||||
return -EPERM;
|
||||
}
|
||||
|
||||
The ``__attribute__((preserve_access_index))`` is a clang feature that allows
|
||||
the BPF verifier to update the offsets for the access at runtime using the
|
||||
:doc:`/bpf/btf` information. Since the BPF verifier is aware of the types, it
|
||||
also validates all the accesses made to the various types in the eBPF program.
|
||||
|
||||
Loading
|
||||
-------
|
||||
|
||||
eBPF programs can be loaded with the :manpage:`bpf(2)` syscall's
|
||||
``BPF_PROG_LOAD`` operation:
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
struct bpf_object *obj;
|
||||
|
||||
obj = bpf_object__open("./my_prog.o");
|
||||
bpf_object__load(obj);
|
||||
|
||||
This can be simplified by using a skeleton header generated by ``bpftool``:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
# bpftool gen skeleton my_prog.o > my_prog.skel.h
|
||||
|
||||
and the program can be loaded by including ``my_prog.skel.h`` and using
|
||||
the generated helper, ``my_prog__open_and_load``.
|
||||
|
||||
Attachment to LSM Hooks
|
||||
-----------------------
|
||||
|
||||
The LSM allows attachment of eBPF programs as LSM hooks using :manpage:`bpf(2)`
|
||||
syscall's ``BPF_RAW_TRACEPOINT_OPEN`` operation or more simply by
|
||||
using the libbpf helper ``bpf_program__attach_lsm``.
|
||||
|
||||
The program can be detached from the LSM hook by *destroying* the ``link``
|
||||
link returned by ``bpf_program__attach_lsm`` using ``bpf_link__destroy``.
|
||||
|
||||
One can also use the helpers generated in ``my_prog.skel.h`` i.e.
|
||||
``my_prog__attach`` for attachment and ``my_prog__destroy`` for cleaning up.
|
||||
|
||||
Examples
|
||||
--------
|
||||
|
||||
An example eBPF program can be found in
|
||||
`tools/testing/selftests/bpf/progs/lsm.c`_ and the corresponding
|
||||
userspace code in `tools/testing/selftests/bpf/prog_tests/test_lsm.c`_
|
||||
|
||||
.. Links
|
||||
.. _tools/lib/bpf/bpf_tracing.h:
|
||||
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/tools/lib/bpf/bpf_tracing.h
|
||||
.. _tools/testing/selftests/bpf/progs/lsm.c:
|
||||
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/tools/testing/selftests/bpf/progs/lsm.c
|
||||
.. _tools/testing/selftests/bpf/prog_tests/test_lsm.c:
|
||||
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/tools/testing/selftests/bpf/prog_tests/test_lsm.c
|
213
Documentation/bpf/drgn.rst
Normal file
213
Documentation/bpf/drgn.rst
Normal file
@ -0,0 +1,213 @@
|
||||
.. SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)
|
||||
|
||||
==============
|
||||
BPF drgn tools
|
||||
==============
|
||||
|
||||
drgn scripts is a convenient and easy to use mechanism to retrieve arbitrary
|
||||
kernel data structures. drgn is not relying on kernel UAPI to read the data.
|
||||
Instead it's reading directly from ``/proc/kcore`` or vmcore and pretty prints
|
||||
the data based on DWARF debug information from vmlinux.
|
||||
|
||||
This document describes BPF related drgn tools.
|
||||
|
||||
See `drgn/tools`_ for all tools available at the moment and `drgn/doc`_ for
|
||||
more details on drgn itself.
|
||||
|
||||
bpf_inspect.py
|
||||
--------------
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
`bpf_inspect.py`_ is a tool intended to inspect BPF programs and maps. It can
|
||||
iterate over all programs and maps in the system and print basic information
|
||||
about these objects, including id, type and name.
|
||||
|
||||
The main use-case `bpf_inspect.py`_ covers is to show BPF programs of types
|
||||
``BPF_PROG_TYPE_EXT`` and ``BPF_PROG_TYPE_TRACING`` attached to other BPF
|
||||
programs via ``freplace``/``fentry``/``fexit`` mechanisms, since there is no
|
||||
user-space API to get this information.
|
||||
|
||||
Getting started
|
||||
===============
|
||||
|
||||
List BPF programs (full names are obtained from BTF)::
|
||||
|
||||
% sudo bpf_inspect.py prog
|
||||
27: BPF_PROG_TYPE_TRACEPOINT tracepoint__tcp__tcp_send_reset
|
||||
4632: BPF_PROG_TYPE_CGROUP_SOCK_ADDR tw_ipt_bind
|
||||
49464: BPF_PROG_TYPE_RAW_TRACEPOINT raw_tracepoint__sched_process_exit
|
||||
|
||||
List BPF maps::
|
||||
|
||||
% sudo bpf_inspect.py map
|
||||
2577: BPF_MAP_TYPE_HASH tw_ipt_vips
|
||||
4050: BPF_MAP_TYPE_STACK_TRACE stack_traces
|
||||
4069: BPF_MAP_TYPE_PERCPU_ARRAY ned_dctcp_cntr
|
||||
|
||||
Find BPF programs attached to BPF program ``test_pkt_access``::
|
||||
|
||||
% sudo bpf_inspect.py p | grep test_pkt_access
|
||||
650: BPF_PROG_TYPE_SCHED_CLS test_pkt_access
|
||||
654: BPF_PROG_TYPE_TRACING test_main linked:[650->25: BPF_TRAMP_FEXIT test_pkt_access->test_pkt_access()]
|
||||
655: BPF_PROG_TYPE_TRACING test_subprog1 linked:[650->29: BPF_TRAMP_FEXIT test_pkt_access->test_pkt_access_subprog1()]
|
||||
656: BPF_PROG_TYPE_TRACING test_subprog2 linked:[650->31: BPF_TRAMP_FEXIT test_pkt_access->test_pkt_access_subprog2()]
|
||||
657: BPF_PROG_TYPE_TRACING test_subprog3 linked:[650->21: BPF_TRAMP_FEXIT test_pkt_access->test_pkt_access_subprog3()]
|
||||
658: BPF_PROG_TYPE_EXT new_get_skb_len linked:[650->16: BPF_TRAMP_REPLACE test_pkt_access->get_skb_len()]
|
||||
659: BPF_PROG_TYPE_EXT new_get_skb_ifindex linked:[650->23: BPF_TRAMP_REPLACE test_pkt_access->get_skb_ifindex()]
|
||||
660: BPF_PROG_TYPE_EXT new_get_constant linked:[650->19: BPF_TRAMP_REPLACE test_pkt_access->get_constant()]
|
||||
|
||||
It can be seen that there is a program ``test_pkt_access``, id 650 and there
|
||||
are multiple other tracing and ext programs attached to functions in
|
||||
``test_pkt_access``.
|
||||
|
||||
For example the line::
|
||||
|
||||
658: BPF_PROG_TYPE_EXT new_get_skb_len linked:[650->16: BPF_TRAMP_REPLACE test_pkt_access->get_skb_len()]
|
||||
|
||||
, means that BPF program id 658, type ``BPF_PROG_TYPE_EXT``, name
|
||||
``new_get_skb_len`` replaces (``BPF_TRAMP_REPLACE``) function ``get_skb_len()``
|
||||
that has BTF id 16 in BPF program id 650, name ``test_pkt_access``.
|
||||
|
||||
Getting help:
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
% sudo bpf_inspect.py
|
||||
usage: bpf_inspect.py [-h] {prog,p,map,m} ...
|
||||
|
||||
drgn script to list BPF programs or maps and their properties
|
||||
unavailable via kernel API.
|
||||
|
||||
See https://github.com/osandov/drgn/ for more details on drgn.
|
||||
|
||||
optional arguments:
|
||||
-h, --help show this help message and exit
|
||||
|
||||
subcommands:
|
||||
{prog,p,map,m}
|
||||
prog (p) list BPF programs
|
||||
map (m) list BPF maps
|
||||
|
||||
Customization
|
||||
=============
|
||||
|
||||
The script is intended to be customized by developers to print relevant
|
||||
information about BPF programs, maps and other objects.
|
||||
|
||||
For example, to print ``struct bpf_prog_aux`` for BPF program id 53077:
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
% git diff
|
||||
diff --git a/tools/bpf_inspect.py b/tools/bpf_inspect.py
|
||||
index 650e228..aea2357 100755
|
||||
--- a/tools/bpf_inspect.py
|
||||
+++ b/tools/bpf_inspect.py
|
||||
@@ -112,7 +112,9 @@ def list_bpf_progs(args):
|
||||
if linked:
|
||||
linked = f" linked:[{linked}]"
|
||||
|
||||
- print(f"{id_:>6}: {type_:32} {name:32} {linked}")
|
||||
+ if id_ == 53077:
|
||||
+ print(f"{id_:>6}: {type_:32} {name:32}")
|
||||
+ print(f"{bpf_prog.aux}")
|
||||
|
||||
|
||||
def list_bpf_maps(args):
|
||||
|
||||
It produces the output::
|
||||
|
||||
% sudo bpf_inspect.py p
|
||||
53077: BPF_PROG_TYPE_XDP tw_xdp_policer
|
||||
*(struct bpf_prog_aux *)0xffff8893fad4b400 = {
|
||||
.refcnt = (atomic64_t){
|
||||
.counter = (long)58,
|
||||
},
|
||||
.used_map_cnt = (u32)1,
|
||||
.max_ctx_offset = (u32)8,
|
||||
.max_pkt_offset = (u32)15,
|
||||
.max_tp_access = (u32)0,
|
||||
.stack_depth = (u32)8,
|
||||
.id = (u32)53077,
|
||||
.func_cnt = (u32)0,
|
||||
.func_idx = (u32)0,
|
||||
.attach_btf_id = (u32)0,
|
||||
.linked_prog = (struct bpf_prog *)0x0,
|
||||
.verifier_zext = (bool)0,
|
||||
.offload_requested = (bool)0,
|
||||
.attach_btf_trace = (bool)0,
|
||||
.func_proto_unreliable = (bool)0,
|
||||
.trampoline_prog_type = (enum bpf_tramp_prog_type)BPF_TRAMP_FENTRY,
|
||||
.trampoline = (struct bpf_trampoline *)0x0,
|
||||
.tramp_hlist = (struct hlist_node){
|
||||
.next = (struct hlist_node *)0x0,
|
||||
.pprev = (struct hlist_node **)0x0,
|
||||
},
|
||||
.attach_func_proto = (const struct btf_type *)0x0,
|
||||
.attach_func_name = (const char *)0x0,
|
||||
.func = (struct bpf_prog **)0x0,
|
||||
.jit_data = (void *)0x0,
|
||||
.poke_tab = (struct bpf_jit_poke_descriptor *)0x0,
|
||||
.size_poke_tab = (u32)0,
|
||||
.ksym_tnode = (struct latch_tree_node){
|
||||
.node = (struct rb_node [2]){
|
||||
{
|
||||
.__rb_parent_color = (unsigned long)18446612956263126665,
|
||||
.rb_right = (struct rb_node *)0x0,
|
||||
.rb_left = (struct rb_node *)0xffff88a0be3d0088,
|
||||
},
|
||||
{
|
||||
.__rb_parent_color = (unsigned long)18446612956263126689,
|
||||
.rb_right = (struct rb_node *)0x0,
|
||||
.rb_left = (struct rb_node *)0xffff88a0be3d00a0,
|
||||
},
|
||||
},
|
||||
},
|
||||
.ksym_lnode = (struct list_head){
|
||||
.next = (struct list_head *)0xffff88bf481830b8,
|
||||
.prev = (struct list_head *)0xffff888309f536b8,
|
||||
},
|
||||
.ops = (const struct bpf_prog_ops *)xdp_prog_ops+0x0 = 0xffffffff820fa350,
|
||||
.used_maps = (struct bpf_map **)0xffff889ff795de98,
|
||||
.prog = (struct bpf_prog *)0xffffc9000cf2d000,
|
||||
.user = (struct user_struct *)root_user+0x0 = 0xffffffff82444820,
|
||||
.load_time = (u64)2408348759285319,
|
||||
.cgroup_storage = (struct bpf_map *[2]){},
|
||||
.name = (char [16])"tw_xdp_policer",
|
||||
.security = (void *)0xffff889ff795d548,
|
||||
.offload = (struct bpf_prog_offload *)0x0,
|
||||
.btf = (struct btf *)0xffff8890ce6d0580,
|
||||
.func_info = (struct bpf_func_info *)0xffff889ff795d240,
|
||||
.func_info_aux = (struct bpf_func_info_aux *)0xffff889ff795de20,
|
||||
.linfo = (struct bpf_line_info *)0xffff888a707afc00,
|
||||
.jited_linfo = (void **)0xffff8893fad48600,
|
||||
.func_info_cnt = (u32)1,
|
||||
.nr_linfo = (u32)37,
|
||||
.linfo_idx = (u32)0,
|
||||
.num_exentries = (u32)0,
|
||||
.extable = (struct exception_table_entry *)0xffffffffa032d950,
|
||||
.stats = (struct bpf_prog_stats *)0x603fe3a1f6d0,
|
||||
.work = (struct work_struct){
|
||||
.data = (atomic_long_t){
|
||||
.counter = (long)0,
|
||||
},
|
||||
.entry = (struct list_head){
|
||||
.next = (struct list_head *)0x0,
|
||||
.prev = (struct list_head *)0x0,
|
||||
},
|
||||
.func = (work_func_t)0x0,
|
||||
},
|
||||
.rcu = (struct callback_head){
|
||||
.next = (struct callback_head *)0x0,
|
||||
.func = (void (*)(struct callback_head *))0x0,
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
.. Links
|
||||
.. _drgn/doc: https://drgn.readthedocs.io/en/latest/
|
||||
.. _drgn/tools: https://github.com/osandov/drgn/tree/master/tools
|
||||
.. _bpf_inspect.py:
|
||||
https://github.com/osandov/drgn/blob/master/tools/bpf_inspect.py
|
@ -45,14 +45,16 @@ Program types
|
||||
prog_cgroup_sockopt
|
||||
prog_cgroup_sysctl
|
||||
prog_flow_dissector
|
||||
bpf_lsm
|
||||
|
||||
|
||||
Testing BPF
|
||||
===========
|
||||
Testing and debugging BPF
|
||||
=========================
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
drgn
|
||||
s390
|
||||
|
||||
|
||||
|
2
Documentation/devicetree/bindings/.gitignore
vendored
2
Documentation/devicetree/bindings/.gitignore
vendored
@ -1,2 +1,2 @@
|
||||
*.example.dts
|
||||
processed-schema.yaml
|
||||
processed-schema*.yaml
|
||||
|
@ -2,7 +2,6 @@
|
||||
DT_DOC_CHECKER ?= dt-doc-validate
|
||||
DT_EXTRACT_EX ?= dt-extract-example
|
||||
DT_MK_SCHEMA ?= dt-mk-schema
|
||||
DT_MK_SCHEMA_FLAGS := $(if $(DT_SCHEMA_FILES), -u)
|
||||
|
||||
quiet_cmd_chk_binding = CHKDT $(patsubst $(srctree)/%,%,$<)
|
||||
cmd_chk_binding = $(DT_DOC_CHECKER) -u $(srctree)/$(src) $< ; \
|
||||
@ -11,26 +10,35 @@ quiet_cmd_chk_binding = CHKDT $(patsubst $(srctree)/%,%,$<)
|
||||
$(obj)/%.example.dts: $(src)/%.yaml FORCE
|
||||
$(call if_changed,chk_binding)
|
||||
|
||||
DT_TMP_SCHEMA := processed-schema.yaml
|
||||
# Use full schemas when checking %.example.dts
|
||||
DT_TMP_SCHEMA := $(obj)/processed-schema-examples.yaml
|
||||
|
||||
quiet_cmd_mk_schema = SCHEMA $@
|
||||
cmd_mk_schema = $(DT_MK_SCHEMA) $(DT_MK_SCHEMA_FLAGS) -o $@ $(real-prereqs)
|
||||
|
||||
DT_DOCS = $(shell \
|
||||
DT_DOCS = $(addprefix $(src)/, \
|
||||
$(shell \
|
||||
cd $(srctree)/$(src) && \
|
||||
find * \( -name '*.yaml' ! \
|
||||
-name $(DT_TMP_SCHEMA) ! \
|
||||
-name 'processed-schema*' ! \
|
||||
-name '*.example.dt.yaml' \) \
|
||||
)
|
||||
))
|
||||
|
||||
DT_SCHEMA_FILES ?= $(addprefix $(src)/,$(DT_DOCS))
|
||||
DT_SCHEMA_FILES ?= $(DT_DOCS)
|
||||
|
||||
ifeq ($(CHECK_DTBS),)
|
||||
extra-y += $(patsubst $(src)/%.yaml,%.example.dts, $(DT_SCHEMA_FILES))
|
||||
extra-y += $(patsubst $(src)/%.yaml,%.example.dt.yaml, $(DT_SCHEMA_FILES))
|
||||
endif
|
||||
extra-$(CHECK_DT_BINDING) += $(patsubst $(src)/%.yaml,%.example.dts, $(DT_SCHEMA_FILES))
|
||||
extra-$(CHECK_DT_BINDING) += $(patsubst $(src)/%.yaml,%.example.dt.yaml, $(DT_SCHEMA_FILES))
|
||||
extra-$(CHECK_DT_BINDING) += processed-schema-examples.yaml
|
||||
|
||||
$(obj)/$(DT_TMP_SCHEMA): $(DT_SCHEMA_FILES) FORCE
|
||||
override DTC_FLAGS := \
|
||||
-Wno-avoid_unnecessary_addr_size \
|
||||
-Wno-graph_child_address
|
||||
|
||||
$(obj)/processed-schema-examples.yaml: $(DT_DOCS) FORCE
|
||||
$(call if_changed,mk_schema)
|
||||
|
||||
extra-y += $(DT_TMP_SCHEMA)
|
||||
$(obj)/processed-schema.yaml: DT_MK_SCHEMA_FLAGS := -u
|
||||
$(obj)/processed-schema.yaml: $(DT_SCHEMA_FILES) FORCE
|
||||
$(call if_changed,mk_schema)
|
||||
|
||||
extra-y += processed-schema.yaml
|
||||
|
@ -0,0 +1,59 @@
|
||||
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: "http://devicetree.org/schemas/interrupt-controller/loongson,htpic.yaml#"
|
||||
$schema: "http://devicetree.org/meta-schemas/core.yaml#"
|
||||
|
||||
title: Loongson-3 HyperTransport Interrupt Controller
|
||||
|
||||
maintainers:
|
||||
- Jiaxun Yang <jiaxun.yang@flygoat.com>
|
||||
|
||||
allOf:
|
||||
- $ref: /schemas/interrupt-controller.yaml#
|
||||
|
||||
description: |
|
||||
This interrupt controller is found in the Loongson-3 family of chips to transmit
|
||||
interrupts from PCH PIC connected on HyperTransport bus.
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: loongson,htpic-1.0
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
||||
interrupts:
|
||||
minItems: 1
|
||||
maxItems: 4
|
||||
description: |
|
||||
Four parent interrupts that receive chained interrupts.
|
||||
|
||||
interrupt-controller: true
|
||||
|
||||
'#interrupt-cells':
|
||||
const: 1
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
- interrupts
|
||||
- interrupt-controller
|
||||
- '#interrupt-cells'
|
||||
|
||||
examples:
|
||||
- |
|
||||
#include <dt-bindings/interrupt-controller/irq.h>
|
||||
htintc: interrupt-controller@1fb000080 {
|
||||
compatible = "loongson,htintc-1.0";
|
||||
reg = <0xfb000080 0x40>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <1>;
|
||||
|
||||
interrupt-parent = <&liointc>;
|
||||
interrupts = <24 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<25 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<26 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<27 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
...
|
@ -0,0 +1,93 @@
|
||||
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: "http://devicetree.org/schemas/interrupt-controller/loongson,liointc.yaml#"
|
||||
$schema: "http://devicetree.org/meta-schemas/core.yaml#"
|
||||
|
||||
title: Loongson Local I/O Interrupt Controller
|
||||
|
||||
maintainers:
|
||||
- Jiaxun Yang <jiaxun.yang@flygoat.com>
|
||||
|
||||
description: |
|
||||
This interrupt controller is found in the Loongson-3 family of chips as the primary
|
||||
package interrupt controller which can route local I/O interrupt to interrupt lines
|
||||
of cores.
|
||||
|
||||
allOf:
|
||||
- $ref: /schemas/interrupt-controller.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
oneOf:
|
||||
- const: loongson,liointc-1.0
|
||||
- const: loongson,liointc-1.0a
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
||||
interrupt-controller: true
|
||||
|
||||
interrupts:
|
||||
description:
|
||||
Interrupt source of the CPU interrupts.
|
||||
minItems: 1
|
||||
maxItems: 4
|
||||
|
||||
interrupt-names:
|
||||
description: List of names for the parent interrupts.
|
||||
items:
|
||||
- const: int0
|
||||
- const: int1
|
||||
- const: int2
|
||||
- const: int3
|
||||
minItems: 1
|
||||
maxItems: 4
|
||||
|
||||
'#interrupt-cells':
|
||||
const: 2
|
||||
|
||||
'loongson,parent_int_map':
|
||||
description: |
|
||||
This property points how the children interrupts will be mapped into CPU
|
||||
interrupt lines. Each cell refers to a parent interrupt line from 0 to 3
|
||||
and each bit in the cell refers to a children interrupt fron 0 to 31.
|
||||
If a CPU interrupt line didn't connected with liointc, then keep it's
|
||||
cell with zero.
|
||||
allOf:
|
||||
- $ref: /schemas/types.yaml#/definitions/uint32-array
|
||||
- items:
|
||||
minItems: 4
|
||||
maxItems: 4
|
||||
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
- interrupts
|
||||
- interrupt-controller
|
||||
- '#interrupt-cells'
|
||||
- 'loongson,parent_int_map'
|
||||
|
||||
|
||||
examples:
|
||||
- |
|
||||
iointc: interrupt-controller@3ff01400 {
|
||||
compatible = "loongson,liointc-1.0";
|
||||
reg = <0x3ff01400 0x64>;
|
||||
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <2>;
|
||||
|
||||
interrupt-parent = <&cpuintc>;
|
||||
interrupts = <2>, <3>;
|
||||
interrupt-names = "int0", "int1";
|
||||
|
||||
loongson,parent_int_map = <0xf0ffffff>, /* int0 */
|
||||
<0x0f000000>, /* int1 */
|
||||
<0x00000000>, /* int2 */
|
||||
<0x00000000>; /* int3 */
|
||||
|
||||
};
|
||||
|
||||
...
|
27
Documentation/devicetree/bindings/mips/loongson/devices.yaml
Normal file
27
Documentation/devicetree/bindings/mips/loongson/devices.yaml
Normal file
@ -0,0 +1,27 @@
|
||||
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/mips/loongson/devices.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Loongson based Platforms Device Tree Bindings
|
||||
|
||||
maintainers:
|
||||
- Jiaxun Yang <jiaxun.yang@flygoat.com>
|
||||
description: |
|
||||
Devices with a Loongson CPU shall have the following properties.
|
||||
|
||||
properties:
|
||||
$nodename:
|
||||
const: '/'
|
||||
compatible:
|
||||
oneOf:
|
||||
|
||||
- description: Generic Loongson3 Quad Core + RS780E
|
||||
items:
|
||||
- const: loongson,loongson3-4core-rs780e
|
||||
|
||||
- description: Generic Loongson3 Octa Core + RS780E
|
||||
items:
|
||||
- const: loongson,loongson3-8core-rs780e
|
||||
...
|
@ -43,6 +43,11 @@ Optional properties:
|
||||
This property allows user to change the tuning step to more than one delay
|
||||
cells which is useful for some special boards or cards when the default
|
||||
tuning step can't find the proper delay window within limited tuning retries.
|
||||
- fsl,strobe-dll-delay-target: Specify the strobe dll control slave delay target.
|
||||
This delay target programming host controller loopback read clock, and this
|
||||
property allows user to change the delay target for the strobe input read clock.
|
||||
If not use this property, driver default set the delay target to value 7.
|
||||
Only eMMC HS400 mode need to take care of this property.
|
||||
|
||||
Examples:
|
||||
|
||||
|
@ -351,7 +351,7 @@ dependencies:
|
||||
|
||||
examples:
|
||||
- |
|
||||
sdhci@ab000000 {
|
||||
mmc@ab000000 {
|
||||
compatible = "sdhci";
|
||||
reg = <0xab000000 0x200>;
|
||||
interrupts = <23>;
|
||||
|
@ -28,6 +28,8 @@ specific for ux500 variant:
|
||||
- st,sig-pin-fbclk : feedback clock signal pin used.
|
||||
|
||||
specific for sdmmc variant:
|
||||
- reg : a second base register may be defined if a delay
|
||||
block is present and used for tuning.
|
||||
- st,sig-dir : signal direction polarity used for cmd, dat0 dat123.
|
||||
- st,neg-edge : data & command phase relation, generated on
|
||||
sd clock falling edge.
|
||||
|
@ -18,7 +18,20 @@ Required Properties:
|
||||
- clocks: Handles to the clock inputs.
|
||||
- clock-names: Tuple including "clk_xin" and "clk_ahb"
|
||||
- interrupts: Interrupt specifiers
|
||||
- ti,otap-del-sel: Output Tap Delay select
|
||||
Output tap delay for each speed mode:
|
||||
- ti,otap-del-sel-legacy
|
||||
- ti,otap-del-sel-mmc-hs
|
||||
- ti,otap-del-sel-sd-hs
|
||||
- ti,otap-del-sel-sdr12
|
||||
- ti,otap-del-sel-sdr25
|
||||
- ti,otap-del-sel-sdr50
|
||||
- ti,otap-del-sel-sdr104
|
||||
- ti,otap-del-sel-ddr50
|
||||
- ti,otap-del-sel-ddr52
|
||||
- ti,otap-del-sel-hs200
|
||||
- ti,otap-del-sel-hs400
|
||||
These bindings must be provided otherwise the driver will disable the
|
||||
corresponding speed mode (i.e. all nodes must provide at least -legacy)
|
||||
|
||||
Optional Properties (Required for ti,am654-sdhci-5.1 and ti,j721e-sdhci-8bit):
|
||||
- ti,trm-icp: DLL trim select
|
||||
@ -38,6 +51,10 @@ Example:
|
||||
interrupts = <GIC_SPI 136 IRQ_TYPE_LEVEL_HIGH>;
|
||||
sdhci-caps-mask = <0x80000007 0x0>;
|
||||
mmc-ddr-1_8v;
|
||||
ti,otap-del-sel = <0x2>;
|
||||
ti,otap-del-sel-legacy = <0x0>;
|
||||
ti,otap-del-sel-mmc-hs = <0x0>;
|
||||
ti,otap-del-sel-ddr52 = <0x5>;
|
||||
ti,otap-del-sel-hs200 = <0x5>;
|
||||
ti,otap-del-sel-hs400 = <0x0>;
|
||||
ti,trm-icp = <0x8>;
|
||||
};
|
||||
|
@ -26,7 +26,13 @@ Required properties:
|
||||
|
||||
- reg: Base address and length of the register in the following order:
|
||||
- Host controller register map (required)
|
||||
- SD Core register map (required for msm-v4 and below)
|
||||
- SD Core register map (required for controllers earlier than msm-v5)
|
||||
- CQE register map (Optional, CQE support is present on SDHC instance meant
|
||||
for eMMC and version v4.2 and above)
|
||||
- reg-names: When CQE register map is supplied, below reg-names are required
|
||||
- "hc" for Host controller register map
|
||||
- "core" for SD core register map
|
||||
- "cqhci" for CQE register map
|
||||
- interrupts: Should contain an interrupt-specifiers for the interrupts:
|
||||
- Host controller interrupt (required)
|
||||
- pinctrl-names: Should contain only one value - "default".
|
||||
|
@ -62,7 +62,7 @@ examples:
|
||||
cap-mmc-highspeed;
|
||||
cap-sd-highspeed;
|
||||
card-detect-delay = <200>;
|
||||
clock-freq-min-max = <400000 200000000>;
|
||||
max-frequency = <200000000>;
|
||||
clock-frequency = <400000000>;
|
||||
data-addr = <0x200>;
|
||||
fifo-depth = <0x80>;
|
||||
|
116
Documentation/devicetree/bindings/net/dsa/ocelot.txt
Normal file
116
Documentation/devicetree/bindings/net/dsa/ocelot.txt
Normal file
@ -0,0 +1,116 @@
|
||||
Microchip Ocelot switch driver family
|
||||
=====================================
|
||||
|
||||
Felix
|
||||
-----
|
||||
|
||||
The VSC9959 core is currently the only switch supported by the driver, and is
|
||||
found in the NXP LS1028A. It is a PCI device, part of the larger ENETC root
|
||||
complex. As a result, the ethernet-switch node is a sub-node of the PCIe root
|
||||
complex node and its "reg" property conforms to the parent node bindings:
|
||||
|
||||
* reg: Specifies PCIe Device Number and Function Number of the endpoint device,
|
||||
in this case for the Ethernet L2Switch it is PF5 (of device 0, bus 0).
|
||||
|
||||
It does not require a "compatible" string.
|
||||
|
||||
The interrupt line is used to signal availability of PTP TX timestamps and for
|
||||
TSN frame preemption.
|
||||
|
||||
For the external switch ports, depending on board configuration, "phy-mode" and
|
||||
"phy-handle" are populated by board specific device tree instances. Ports 4 and
|
||||
5 are fixed as internal ports in the NXP LS1028A instantiation.
|
||||
|
||||
The CPU port property ("ethernet") configures the feature called "NPI port" in
|
||||
the Ocelot hardware core. The CPU port in Ocelot is a set of queues, which are
|
||||
connected, in the Node Processor Interface (NPI) mode, to an Ethernet port.
|
||||
By default, in fsl-ls1028a.dtsi, the NPI port is assigned to the internal
|
||||
2.5Gbps port@4, but can be moved to the 1Gbps port@5, depending on the specific
|
||||
use case. Moving the NPI port to an external switch port is hardware possible,
|
||||
but there is no platform support for the Linux system on the LS1028A chip to
|
||||
operate as an entire slave DSA chip. NPI functionality (and therefore DSA
|
||||
tagging) is supported on a single port at a time.
|
||||
|
||||
Any port can be disabled (and in fsl-ls1028a.dtsi, they are indeed all disabled
|
||||
by default, and should be enabled on a per-board basis). But if any external
|
||||
switch port is enabled at all, the ENETC PF2 (enetc_port2) should be enabled as
|
||||
well, regardless of whether it is configured as the DSA master or not. This is
|
||||
because the Felix PHYLINK implementation accesses the MAC PCS registers, which
|
||||
in hardware truly belong to the ENETC port #2 and not to Felix.
|
||||
|
||||
Supported PHY interface types (appropriate SerDes protocol setting changes are
|
||||
needed in the RCW binary):
|
||||
|
||||
* phy_mode = "internal": on ports 4 and 5
|
||||
* phy_mode = "sgmii": on ports 0, 1, 2, 3
|
||||
* phy_mode = "qsgmii": on ports 0, 1, 2, 3
|
||||
* phy_mode = "usxgmii": on ports 0, 1, 2, 3
|
||||
* phy_mode = "2500base-x": on ports 0, 1, 2, 3
|
||||
|
||||
For the rest of the device tree binding definitions, which are standard DSA and
|
||||
PCI, refer to the following documents:
|
||||
|
||||
Documentation/devicetree/bindings/net/dsa/dsa.txt
|
||||
Documentation/devicetree/bindings/pci/pci.txt
|
||||
|
||||
Example:
|
||||
|
||||
&soc {
|
||||
pcie@1f0000000 { /* Integrated Endpoint Root Complex */
|
||||
ethernet-switch@0,5 {
|
||||
reg = <0x000500 0 0 0 0>;
|
||||
/* IEP INT_B */
|
||||
interrupts = <GIC_SPI 95 IRQ_TYPE_LEVEL_HIGH>;
|
||||
|
||||
ports {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
/* External ports */
|
||||
port@0 {
|
||||
reg = <0>;
|
||||
label = "swp0";
|
||||
};
|
||||
|
||||
port@1 {
|
||||
reg = <1>;
|
||||
label = "swp1";
|
||||
};
|
||||
|
||||
port@2 {
|
||||
reg = <2>;
|
||||
label = "swp2";
|
||||
};
|
||||
|
||||
port@3 {
|
||||
reg = <3>;
|
||||
label = "swp3";
|
||||
};
|
||||
|
||||
/* Tagging CPU port */
|
||||
port@4 {
|
||||
reg = <4>;
|
||||
ethernet = <&enetc_port2>;
|
||||
phy-mode = "internal";
|
||||
|
||||
fixed-link {
|
||||
speed = <2500>;
|
||||
full-duplex;
|
||||
};
|
||||
};
|
||||
|
||||
/* Non-tagging CPU port */
|
||||
port@5 {
|
||||
reg = <5>;
|
||||
phy-mode = "internal";
|
||||
status = "disabled";
|
||||
|
||||
fixed-link {
|
||||
speed = <1000>;
|
||||
full-duplex;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
65
Documentation/devicetree/bindings/net/marvell,mvusb.yaml
Normal file
65
Documentation/devicetree/bindings/net/marvell,mvusb.yaml
Normal file
@ -0,0 +1,65 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/net/marvell,mvusb.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Marvell USB to MDIO Controller
|
||||
|
||||
maintainers:
|
||||
- Tobias Waldekranz <tobias@waldekranz.com>
|
||||
|
||||
description: |+
|
||||
This controller is mounted on development boards for Marvell's Link Street
|
||||
family of Ethernet switches. It allows you to configure the switch's registers
|
||||
using the standard MDIO interface.
|
||||
|
||||
Since the device is connected over USB, there is no strict requirement of
|
||||
having a device tree representation of the device. But in order to use it with
|
||||
the mv88e6xxx driver, you need a device tree node in which to place the switch
|
||||
definition.
|
||||
|
||||
allOf:
|
||||
- $ref: "mdio.yaml#"
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: usb1286,1fa4
|
||||
reg:
|
||||
maxItems: 1
|
||||
description: The USB port number on the host controller
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
- "#address-cells"
|
||||
- "#size-cells"
|
||||
|
||||
examples:
|
||||
- |
|
||||
/* USB host controller */
|
||||
&usb1 {
|
||||
mvusb: mdio@1 {
|
||||
compatible = "usb1286,1fa4";
|
||||
reg = <1>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
};
|
||||
};
|
||||
|
||||
/* MV88E6390X devboard */
|
||||
&mvusb {
|
||||
switch@0 {
|
||||
compatible = "marvell,mv88e6190";
|
||||
status = "ok";
|
||||
reg = <0x0>;
|
||||
|
||||
ports {
|
||||
/* Port definitions */
|
||||
};
|
||||
|
||||
mdio {
|
||||
/* PHY definitions */
|
||||
};
|
||||
};
|
||||
};
|
198
Documentation/devicetree/bindings/net/qcom,ipa.yaml
Normal file
198
Documentation/devicetree/bindings/net/qcom,ipa.yaml
Normal file
@ -0,0 +1,198 @@
|
||||
# SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/net/qcom,ipa.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Qualcomm IP Accelerator (IPA)
|
||||
|
||||
maintainers:
|
||||
- Alex Elder <elder@kernel.org>
|
||||
|
||||
description:
|
||||
This binding describes the Qualcomm IPA. The IPA is capable of offloading
|
||||
certain network processing tasks (e.g. filtering, routing, and NAT) from
|
||||
the main processor.
|
||||
|
||||
The IPA sits between multiple independent "execution environments,"
|
||||
including the Application Processor (AP) and the modem. The IPA presents
|
||||
a Generic Software Interface (GSI) to each execution environment.
|
||||
The GSI is an integral part of the IPA, but it is logically isolated
|
||||
and has a distinct interrupt and a separately-defined address space.
|
||||
|
||||
See also soc/qcom/qcom,smp2p.txt and interconnect/interconnect.txt.
|
||||
|
||||
- |
|
||||
-------- ---------
|
||||
| | | |
|
||||
| AP +<---. .----+ Modem |
|
||||
| +--. | | .->+ |
|
||||
| | | | | | | |
|
||||
-------- | | | | ---------
|
||||
v | v |
|
||||
--+-+---+-+--
|
||||
| GSI |
|
||||
|-----------|
|
||||
| |
|
||||
| IPA |
|
||||
| |
|
||||
-------------
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: "qcom,sdm845-ipa"
|
||||
|
||||
reg:
|
||||
items:
|
||||
- description: IPA registers
|
||||
- description: IPA shared memory
|
||||
- description: GSI registers
|
||||
|
||||
reg-names:
|
||||
items:
|
||||
- const: ipa-reg
|
||||
- const: ipa-shared
|
||||
- const: gsi
|
||||
|
||||
clocks:
|
||||
maxItems: 1
|
||||
|
||||
clock-names:
|
||||
const: core
|
||||
|
||||
interrupts:
|
||||
items:
|
||||
- description: IPA interrupt (hardware IRQ)
|
||||
- description: GSI interrupt (hardware IRQ)
|
||||
- description: Modem clock query interrupt (smp2p interrupt)
|
||||
- description: Modem setup ready interrupt (smp2p interrupt)
|
||||
|
||||
interrupt-names:
|
||||
items:
|
||||
- const: ipa
|
||||
- const: gsi
|
||||
- const: ipa-clock-query
|
||||
- const: ipa-setup-ready
|
||||
|
||||
interconnects:
|
||||
items:
|
||||
- description: Interconnect path between IPA and main memory
|
||||
- description: Interconnect path between IPA and internal memory
|
||||
- description: Interconnect path between IPA and the AP subsystem
|
||||
|
||||
interconnect-names:
|
||||
items:
|
||||
- const: memory
|
||||
- const: imem
|
||||
- const: config
|
||||
|
||||
qcom,smem-states:
|
||||
allOf:
|
||||
- $ref: /schemas/types.yaml#/definitions/phandle-array
|
||||
description: State bits used in by the AP to signal the modem.
|
||||
items:
|
||||
- description: Whether the "ipa-clock-enabled" state bit is valid
|
||||
- description: Whether the IPA clock is enabled (if valid)
|
||||
|
||||
qcom,smem-state-names:
|
||||
allOf:
|
||||
- $ref: /schemas/types.yaml#/definitions/string-array
|
||||
description: The names of the state bits used for SMP2P output
|
||||
items:
|
||||
- const: ipa-clock-enabled-valid
|
||||
- const: ipa-clock-enabled
|
||||
|
||||
modem-init:
|
||||
type: boolean
|
||||
description:
|
||||
If present, it indicates that the modem is responsible for
|
||||
performing early IPA initialization, including loading and
|
||||
validating firwmare used by the GSI.
|
||||
|
||||
modem-remoteproc:
|
||||
$ref: /schemas/types.yaml#definitions/phandle
|
||||
description:
|
||||
This defines the phandle to the remoteproc node representing
|
||||
the modem subsystem. This is requied so the IPA driver can
|
||||
receive and act on notifications of modem up/down events.
|
||||
|
||||
memory-region:
|
||||
$ref: /schemas/types.yaml#/definitions/phandle-array
|
||||
maxItems: 1
|
||||
description:
|
||||
If present, a phandle for a reserved memory area that holds
|
||||
the firmware passed to Trust Zone for authentication. Required
|
||||
when Trust Zone (not the modem) performs early initialization.
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
- clocks
|
||||
- interrupts
|
||||
- interconnects
|
||||
- qcom,smem-states
|
||||
- modem-remoteproc
|
||||
|
||||
oneOf:
|
||||
- required:
|
||||
- modem-init
|
||||
- required:
|
||||
- memory-region
|
||||
|
||||
examples:
|
||||
- |
|
||||
#include <dt-bindings/interrupt-controller/irq.h>
|
||||
#include <dt-bindings/clock/qcom,rpmh.h>
|
||||
#include <dt-bindings/interconnect/qcom,sdm845.h>
|
||||
|
||||
smp2p-mpss {
|
||||
compatible = "qcom,smp2p";
|
||||
ipa_smp2p_out: ipa-ap-to-modem {
|
||||
qcom,entry-name = "ipa";
|
||||
#qcom,smem-state-cells = <1>;
|
||||
};
|
||||
|
||||
ipa_smp2p_in: ipa-modem-to-ap {
|
||||
qcom,entry-name = "ipa";
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <2>;
|
||||
};
|
||||
};
|
||||
ipa@1e40000 {
|
||||
compatible = "qcom,sdm845-ipa";
|
||||
|
||||
modem-init;
|
||||
modem-remoteproc = <&mss_pil>;
|
||||
|
||||
reg = <0 0x1e40000 0 0x7000>,
|
||||
<0 0x1e47000 0 0x2000>,
|
||||
<0 0x1e04000 0 0x2c000>;
|
||||
reg-names = "ipa-reg",
|
||||
"ipa-shared",
|
||||
"gsi";
|
||||
|
||||
interrupts-extended = <&intc 0 311 IRQ_TYPE_EDGE_RISING>,
|
||||
<&intc 0 432 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<&ipa_smp2p_in 0 IRQ_TYPE_EDGE_RISING>,
|
||||
<&ipa_smp2p_in 1 IRQ_TYPE_EDGE_RISING>;
|
||||
interrupt-names = "ipa",
|
||||
"gsi",
|
||||
"ipa-clock-query",
|
||||
"ipa-setup-ready";
|
||||
|
||||
clocks = <&rpmhcc RPMH_IPA_CLK>;
|
||||
clock-names = "core";
|
||||
|
||||
interconnects =
|
||||
<&rsc_hlos MASTER_IPA &rsc_hlos SLAVE_EBI1>,
|
||||
<&rsc_hlos MASTER_IPA &rsc_hlos SLAVE_IMEM>,
|
||||
<&rsc_hlos MASTER_APPSS_PROC &rsc_hlos SLAVE_IPA_CFG>;
|
||||
interconnect-names = "memory",
|
||||
"imem",
|
||||
"config";
|
||||
|
||||
qcom,smem-states = <&ipa_smp2p_out 0>,
|
||||
<&ipa_smp2p_out 1>;
|
||||
qcom,smem-state-names = "ipa-clock-enabled-valid",
|
||||
"ipa-clock-enabled";
|
||||
};
|
53
Documentation/devicetree/bindings/net/qcom,ipq8064-mdio.yaml
Normal file
53
Documentation/devicetree/bindings/net/qcom,ipq8064-mdio.yaml
Normal file
@ -0,0 +1,53 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/net/qcom,ipq8064-mdio.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Qualcomm ipq806x MDIO bus controller
|
||||
|
||||
maintainers:
|
||||
- Ansuel Smith <ansuelsmth@gmail.com>
|
||||
|
||||
description:
|
||||
The ipq806x soc have a MDIO dedicated controller that is
|
||||
used to communicate with the gmac phy connected.
|
||||
|
||||
allOf:
|
||||
- $ref: "mdio.yaml#"
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: qcom,ipq8064-mdio
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
||||
clocks:
|
||||
maxItems: 1
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
- clocks
|
||||
- "#address-cells"
|
||||
- "#size-cells"
|
||||
|
||||
examples:
|
||||
- |
|
||||
#include <dt-bindings/clock/qcom,gcc-ipq806x.h>
|
||||
|
||||
mdio0: mdio@37000000 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
compatible = "qcom,ipq8064-mdio";
|
||||
reg = <0x37000000 0x200000>;
|
||||
|
||||
clocks = <&gcc GMAC_CORE1_CLK>;
|
||||
|
||||
switch@10 {
|
||||
compatible = "qca,qca8337";
|
||||
/* ... */
|
||||
};
|
||||
};
|
@ -31,6 +31,7 @@ Optional properties for compatible string qcom,wcn399x-bt:
|
||||
|
||||
- max-speed: see Documentation/devicetree/bindings/serial/slave-device.txt
|
||||
- firmware-name: specify the name of nvm firmware to load
|
||||
- clocks: clock provided to the controller
|
||||
|
||||
Examples:
|
||||
|
||||
@ -57,5 +58,6 @@ serial@898000 {
|
||||
vddch0-supply = <&vreg_l25a_3p3>;
|
||||
max-speed = <3200000>;
|
||||
firmware-name = "crnv21.bin";
|
||||
clocks = <&rpmhcc RPMH_RF_CLK2>;
|
||||
};
|
||||
};
|
||||
|
225
Documentation/devicetree/bindings/net/ti,k3-am654-cpsw-nuss.yaml
Normal file
225
Documentation/devicetree/bindings/net/ti,k3-am654-cpsw-nuss.yaml
Normal file
@ -0,0 +1,225 @@
|
||||
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/net/ti,k3-am654-cpsw-nuss.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: The TI AM654x/J721E SoC Gigabit Ethernet MAC (Media Access Controller) Device Tree Bindings
|
||||
|
||||
maintainers:
|
||||
- Grygorii Strashko <grygorii.strashko@ti.com>
|
||||
- Sekhar Nori <nsekhar@ti.com>
|
||||
|
||||
description:
|
||||
The TI AM654x/J721E SoC Gigabit Ethernet MAC (CPSW2G NUSS) has two ports
|
||||
(one external) and provides Ethernet packet communication for the device.
|
||||
CPSW2G NUSS features - the Reduced Gigabit Media Independent Interface (RGMII),
|
||||
Reduced Media Independent Interface (RMII), the Management Data
|
||||
Input/Output (MDIO) interface for physical layer device (PHY) management,
|
||||
new version of Common Platform Time Sync (CPTS), updated Address Lookup
|
||||
Engine (ALE).
|
||||
One external Ethernet port (port 1) with selectable RGMII/RMII interfaces and
|
||||
an internal Communications Port Programming Interface (CPPI5) (Host port 0).
|
||||
Host Port 0 CPPI Packet Streaming Interface interface supports 8 TX channels
|
||||
and one RX channels and operating by TI AM654x/J721E NAVSS Unified DMA
|
||||
Peripheral Root Complex (UDMA-P) controller.
|
||||
The CPSW2G NUSS is integrated into device MCU domain named MCU_CPSW0.
|
||||
|
||||
Additional features
|
||||
priority level Quality Of Service (QOS) support (802.1p)
|
||||
Support for Audio/Video Bridging (P802.1Qav/D6.0)
|
||||
Support for IEEE 1588 Clock Synchronization (2008 Annex D, Annex E and Annex F)
|
||||
Flow Control (802.3x) Support
|
||||
Time Sensitive Network Support
|
||||
IEEE P902.3br/D2.0 Interspersing Express Traffic
|
||||
IEEE 802.1Qbv/D2.2 Enhancements for Scheduled Traffic
|
||||
Configurable number of addresses plus VLANs
|
||||
Configurable number of classifier/policers
|
||||
VLAN support, 802.1Q compliant, Auto add port VLAN for untagged frames on
|
||||
ingress, Auto VLAN removal on egress and auto pad to minimum frame size.
|
||||
RX/TX csum offload
|
||||
|
||||
Specifications can be found at
|
||||
http://www.ti.com/lit/ug/spruid7e/spruid7e.pdf
|
||||
http://www.ti.com/lit/ug/spruil1a/spruil1a.pdf
|
||||
|
||||
properties:
|
||||
"#address-cells": true
|
||||
"#size-cells": true
|
||||
|
||||
compatible:
|
||||
oneOf:
|
||||
- const: ti,am654-cpsw-nuss
|
||||
- const: ti,j721e-cpsw-nuss
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
description:
|
||||
The physical base address and size of full the CPSW2G NUSS IO range
|
||||
|
||||
reg-names:
|
||||
items:
|
||||
- const: cpsw_nuss
|
||||
|
||||
ranges: true
|
||||
|
||||
dma-coherent: true
|
||||
|
||||
clocks:
|
||||
description: CPSW2G NUSS functional clock
|
||||
|
||||
clock-names:
|
||||
items:
|
||||
- const: fck
|
||||
|
||||
power-domains:
|
||||
maxItems: 1
|
||||
|
||||
dmas:
|
||||
maxItems: 9
|
||||
|
||||
dma-names:
|
||||
items:
|
||||
- const: tx0
|
||||
- const: tx1
|
||||
- const: tx2
|
||||
- const: tx3
|
||||
- const: tx4
|
||||
- const: tx5
|
||||
- const: tx6
|
||||
- const: tx7
|
||||
- const: rx
|
||||
|
||||
ethernet-ports:
|
||||
type: object
|
||||
properties:
|
||||
'#address-cells':
|
||||
const: 1
|
||||
'#size-cells':
|
||||
const: 0
|
||||
|
||||
patternProperties:
|
||||
port@1:
|
||||
type: object
|
||||
description: CPSW2G NUSS external ports
|
||||
|
||||
allOf:
|
||||
- $ref: ethernet-controller.yaml#
|
||||
|
||||
properties:
|
||||
reg:
|
||||
items:
|
||||
- const: 1
|
||||
description: CPSW port number
|
||||
|
||||
phys:
|
||||
maxItems: 1
|
||||
description: phandle on phy-gmii-sel PHY
|
||||
|
||||
label:
|
||||
description: label associated with this port
|
||||
|
||||
ti,mac-only:
|
||||
$ref: /schemas/types.yaml#definitions/flag
|
||||
description:
|
||||
Specifies the port works in mac-only mode.
|
||||
|
||||
ti,syscon-efuse:
|
||||
$ref: /schemas/types.yaml#definitions/phandle-array
|
||||
description:
|
||||
Phandle to the system control device node which provides access
|
||||
to efuse IO range with MAC addresses
|
||||
|
||||
required:
|
||||
- reg
|
||||
- phys
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
patternProperties:
|
||||
"^mdio@[0-9a-f]+$":
|
||||
type: object
|
||||
allOf:
|
||||
- $ref: "ti,davinci-mdio.yaml#"
|
||||
description:
|
||||
CPSW MDIO bus.
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
- reg-names
|
||||
- ranges
|
||||
- clocks
|
||||
- clock-names
|
||||
- power-domains
|
||||
- dmas
|
||||
- dma-names
|
||||
- '#address-cells'
|
||||
- '#size-cells'
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
#include <dt-bindings/pinctrl/k3.h>
|
||||
#include <dt-bindings/soc/ti,sci_pm_domain.h>
|
||||
#include <dt-bindings/net/ti-dp83867.h>
|
||||
|
||||
mcu_cpsw: ethernet@46000000 {
|
||||
compatible = "ti,am654-cpsw-nuss";
|
||||
#address-cells = <2>;
|
||||
#size-cells = <2>;
|
||||
reg = <0x0 0x46000000 0x0 0x200000>;
|
||||
reg-names = "cpsw_nuss";
|
||||
ranges = <0x0 0x0 0x46000000 0x0 0x200000>;
|
||||
dma-coherent;
|
||||
clocks = <&k3_clks 5 10>;
|
||||
clock-names = "fck";
|
||||
power-domains = <&k3_pds 5 TI_SCI_PD_EXCLUSIVE>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&mcu_cpsw_pins_default &mcu_mdio_pins_default>;
|
||||
|
||||
dmas = <&mcu_udmap 0xf000>,
|
||||
<&mcu_udmap 0xf001>,
|
||||
<&mcu_udmap 0xf002>,
|
||||
<&mcu_udmap 0xf003>,
|
||||
<&mcu_udmap 0xf004>,
|
||||
<&mcu_udmap 0xf005>,
|
||||
<&mcu_udmap 0xf006>,
|
||||
<&mcu_udmap 0xf007>,
|
||||
<&mcu_udmap 0x7000>;
|
||||
dma-names = "tx0", "tx1", "tx2", "tx3", "tx4", "tx5", "tx6", "tx7",
|
||||
"rx";
|
||||
|
||||
ethernet-ports {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
cpsw_port1: port@1 {
|
||||
reg = <1>;
|
||||
ti,mac-only;
|
||||
label = "port1";
|
||||
ti,syscon-efuse = <&mcu_conf 0x200>;
|
||||
phys = <&phy_gmii_sel 1>;
|
||||
|
||||
phy-mode = "rgmii-rxid";
|
||||
phy-handle = <&phy0>;
|
||||
};
|
||||
};
|
||||
|
||||
davinci_mdio: mdio@f00 {
|
||||
compatible = "ti,cpsw-mdio","ti,davinci_mdio";
|
||||
reg = <0x0 0xf00 0x0 0x100>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&k3_clks 5 10>;
|
||||
clock-names = "fck";
|
||||
bus_freq = <1000000>;
|
||||
|
||||
phy0: ethernet-phy@0 {
|
||||
reg = <0>;
|
||||
ti,rx-internal-delay = <DP83867_RGMIIDCTL_2_00_NS>;
|
||||
ti,fifo-depth = <DP83867_PHYCR_FIFO_DEPTH_4_B_NIB>;
|
||||
};
|
||||
};
|
||||
};
|
@ -4,17 +4,27 @@ This node provides properties for configuring the MediaTek mt76xx wireless
|
||||
device. The node is expected to be specified as a child node of the PCI
|
||||
controller to which the wireless chip is connected.
|
||||
|
||||
Alternatively, it can specify the wireless part of the MT7628/MT7688 SoC.
|
||||
For SoC, use the compatible string "mediatek,mt7628-wmac" and the following
|
||||
properties:
|
||||
Alternatively, it can specify the wireless part of the MT7628/MT7688 or
|
||||
MT7622 SoC. For SoC, use the following compatible strings:
|
||||
|
||||
compatible:
|
||||
- "mediatek,mt7628-wmac" for MT7628/MT7688
|
||||
- "mediatek,mt7622-wmac" for MT7622
|
||||
|
||||
properties:
|
||||
- reg: Address and length of the register set for the device.
|
||||
- interrupts: Main device interrupt
|
||||
|
||||
MT7622 specific properties:
|
||||
- power-domains: phandle to the power domain that the WMAC is part of
|
||||
- mediatek,infracfg: phandle to the infrastructure bus fabric syscon node
|
||||
|
||||
Optional properties:
|
||||
|
||||
- ieee80211-freq-limit: See ieee80211.txt
|
||||
- mediatek,mtd-eeprom: Specify a MTD partition + offset containing EEPROM data
|
||||
- big-endian: if the radio eeprom partition is written in big-endian, specify
|
||||
this property
|
||||
|
||||
The MAC address can as well be set with corresponding optional properties
|
||||
defined in net/ethernet.txt.
|
||||
@ -31,6 +41,7 @@ Optional nodes:
|
||||
reg = <0x0000 0 0 0 0>;
|
||||
ieee80211-freq-limit = <5000000 6000000>;
|
||||
mediatek,mtd-eeprom = <&factory 0x8000>;
|
||||
big-endian;
|
||||
|
||||
led {
|
||||
led-sources = <2>;
|
||||
@ -50,3 +61,15 @@ wmac: wmac@10300000 {
|
||||
|
||||
mediatek,mtd-eeprom = <&factory 0x0000>;
|
||||
};
|
||||
|
||||
MT7622 example:
|
||||
|
||||
wmac: wmac@18000000 {
|
||||
compatible = "mediatek,mt7622-wmac";
|
||||
reg = <0 0x18000000 0 0x100000>;
|
||||
interrupts = <GIC_SPI 211 IRQ_TYPE_LEVEL_LOW>;
|
||||
|
||||
mediatek,infracfg = <&infracfg>;
|
||||
|
||||
power-domains = <&scpsys MT7622_POWER_DOMAIN_WB>;
|
||||
};
|
||||
|
@ -91,6 +91,11 @@ Optional properties:
|
||||
- qcom,msa-fixed-perm: Boolean context flag to disable SCM call for statically
|
||||
mapped msa region.
|
||||
|
||||
- qcom,coexist-support : should contain eithr "0" or "1" to indicate coex
|
||||
support by the hardware.
|
||||
- qcom,coexist-gpio-pin : gpio pin number information to support coex
|
||||
which will be used by wifi firmware.
|
||||
|
||||
Example (to supply PCI based wifi block details):
|
||||
|
||||
In this example, the node is defined as child node of the PCI controller.
|
||||
@ -159,6 +164,8 @@ wifi0: wifi@a000000 {
|
||||
qcom,msi_addr = <0x0b006040>;
|
||||
qcom,msi_base = <0x40>;
|
||||
qcom,ath10k-pre-calibration-data = [ 01 02 03 ... ];
|
||||
qcom,coexist-support = <1>;
|
||||
qcom,coexist-gpio-pin = <0x33>;
|
||||
};
|
||||
|
||||
Example (to supply wcn3990 SoC wifi block details):
|
||||
|
@ -9,11 +9,12 @@ Required properties:
|
||||
- spi-max-frequency : Maximum SPI clocking speed of device in Hz
|
||||
- interrupts : Should contain interrupt line
|
||||
- vio-supply : phandle to regulator providing VIO
|
||||
- ti,power-gpio : GPIO connected to chip's PMEN pin
|
||||
|
||||
Optional properties:
|
||||
- ti,wl1251-has-eeprom : boolean, the wl1251 has an eeprom connected, which
|
||||
provides configuration data (calibration, MAC, ...)
|
||||
- ti,power-gpio : GPIO connected to chip's PMEN pin if operated in
|
||||
SPI mode
|
||||
- Please consult Documentation/devicetree/bindings/spi/spi-bus.txt
|
||||
for optional SPI connection related properties,
|
||||
|
||||
|
45
Documentation/devicetree/bindings/ptp/ptp-idt82p33.yaml
Normal file
45
Documentation/devicetree/bindings/ptp/ptp-idt82p33.yaml
Normal file
@ -0,0 +1,45 @@
|
||||
# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/ptp/ptp-idt82p33.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: IDT 82P33 PTP Clock Device Tree Bindings
|
||||
|
||||
description: |
|
||||
IDT 82P33XXX Synchronization Management Unit (SMU) based PTP clock
|
||||
|
||||
maintainers:
|
||||
- Min Li <min.li.xe@renesas.com>
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
enum:
|
||||
- idt,82p33810
|
||||
- idt,82p33813
|
||||
- idt,82p33814
|
||||
- idt,82p33831
|
||||
- idt,82p33910
|
||||
- idt,82p33913
|
||||
- idt,82p33914
|
||||
- idt,82p33931
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
i2c {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
phc@51 {
|
||||
compatible = "idt,82p33810";
|
||||
reg = <0x51>;
|
||||
};
|
||||
};
|
@ -8,6 +8,10 @@ Required properties:
|
||||
Optional properties:
|
||||
- fsl,dte-mode : Indicate the uart works in DTE mode. The uart works
|
||||
in DCE mode by default.
|
||||
- fsl,inverted-tx , fsl,inverted-rx : Indicate that the hardware attached
|
||||
to the peripheral inverts the signal transmitted or received,
|
||||
respectively, and that the peripheral should invert its output/input
|
||||
using the INVT/INVR registers.
|
||||
- rs485-rts-delay, rs485-rts-active-low, rs485-rx-during-tx,
|
||||
linux,rs485-enabled-at-boot-time: see rs485.txt. Note that for RS485
|
||||
you must enable either the "uart-has-rtscts" or the "rts-gpios"
|
||||
|
@ -6,6 +6,8 @@ Required properties:
|
||||
on Vybrid vf610 SoC with 8-bit register organization
|
||||
- "fsl,ls1021a-lpuart" for lpuart compatible with the one integrated
|
||||
on LS1021A SoC with 32-bit big-endian register organization
|
||||
- "fsl,ls1028a-lpuart" for lpuart compatible with the one integrated
|
||||
on LS1028A SoC with 32-bit little-endian register organization
|
||||
- "fsl,imx7ulp-lpuart" for lpuart compatible with the one integrated
|
||||
on i.MX7ULP SoC with 32-bit little-endian register organization
|
||||
- "fsl,imx8qxp-lpuart" for lpuart compatible with the one integrated
|
||||
@ -15,10 +17,10 @@ Required properties:
|
||||
- reg : Address and length of the register set for the device
|
||||
- interrupts : Should contain uart interrupt
|
||||
- clocks : phandle + clock specifier pairs, one for each entry in clock-names
|
||||
- clock-names : For vf610/ls1021a/imx7ulp, "ipg" clock is for uart bus/baud
|
||||
clock. For imx8qxp lpuart, "ipg" clock is bus clock that is used to access
|
||||
lpuart controller registers, it also requires "baud" clock for module to
|
||||
receive/transmit data.
|
||||
- clock-names : For vf610/ls1021a/ls1028a/imx7ulp, "ipg" clock is for uart
|
||||
bus/baud clock. For imx8qxp lpuart, "ipg" clock is bus clock that is used
|
||||
to access lpuart controller registers, it also requires "baud" clock for
|
||||
module to receive/transmit data.
|
||||
|
||||
Optional properties:
|
||||
- dmas: A list of two dma specifiers, one for each entry in dma-names.
|
||||
|
@ -147,6 +147,10 @@ Note that ``dtbs_check`` will skip any binding schema files with errors. It is
|
||||
necessary to use ``dt_binding_check`` to get all the validation errors in the
|
||||
binding schema files.
|
||||
|
||||
It is possible to run both in a single command::
|
||||
|
||||
make dt_binding_check dtbs_check
|
||||
|
||||
It is also possible to run checks with a single schema file by setting the
|
||||
``DT_SCHEMA_FILES`` variable to a specific schema file.
|
||||
|
||||
|
@ -20,6 +20,7 @@ Kernel Build System
|
||||
issues
|
||||
reproducible-builds
|
||||
gcc-plugins
|
||||
llvm
|
||||
|
||||
.. only:: subproject and html
|
||||
|
||||
|
@ -159,11 +159,11 @@ applicable everywhere (see syntax).
|
||||
Given the following example::
|
||||
|
||||
config FOO
|
||||
tristate
|
||||
tristate "foo"
|
||||
imply BAZ
|
||||
|
||||
config BAZ
|
||||
tristate
|
||||
tristate "baz"
|
||||
depends on BAR
|
||||
|
||||
The following values are possible:
|
||||
@ -173,7 +173,10 @@ applicable everywhere (see syntax).
|
||||
=== === ============= ==============
|
||||
n y n N/m/y
|
||||
m y m M/y/n
|
||||
y y y Y/n
|
||||
y y y Y/m/n
|
||||
n m n N/m
|
||||
m m m M/n
|
||||
y m n M/n
|
||||
y n * N
|
||||
=== === ============= ==============
|
||||
|
||||
@ -181,6 +184,24 @@ applicable everywhere (see syntax).
|
||||
ability to hook into a secondary subsystem while allowing the user to
|
||||
configure that subsystem out without also having to unset these drivers.
|
||||
|
||||
Note: If the combination of FOO=y and BAR=m causes a link error,
|
||||
you can guard the function call with IS_REACHABLE()::
|
||||
|
||||
foo_init()
|
||||
{
|
||||
if (IS_REACHABLE(CONFIG_BAZ))
|
||||
baz_register(&foo);
|
||||
...
|
||||
}
|
||||
|
||||
Note: If the feature provided by BAZ is highly desirable for FOO,
|
||||
FOO should imply not only BAZ, but also its dependency BAR::
|
||||
|
||||
config FOO
|
||||
tristate "foo"
|
||||
imply BAR
|
||||
imply BAZ
|
||||
|
||||
- limiting menu display: "visible if" <expr>
|
||||
|
||||
This attribute is only applicable to menu blocks, if the condition is
|
||||
|
80
Documentation/kbuild/llvm.rst
Normal file
80
Documentation/kbuild/llvm.rst
Normal file
@ -0,0 +1,80 @@
|
||||
==============================
|
||||
Building Linux with Clang/LLVM
|
||||
==============================
|
||||
|
||||
This document covers how to build the Linux kernel with Clang and LLVM
|
||||
utilities.
|
||||
|
||||
About
|
||||
-----
|
||||
|
||||
The Linux kernel has always traditionally been compiled with GNU toolchains
|
||||
such as GCC and binutils. Ongoing work has allowed for `Clang
|
||||
<https://clang.llvm.org/>`_ and `LLVM <https://llvm.org/>`_ utilities to be
|
||||
used as viable substitutes. Distributions such as `Android
|
||||
<https://www.android.com/>`_, `ChromeOS
|
||||
<https://www.chromium.org/chromium-os>`_, and `OpenMandriva
|
||||
<https://www.openmandriva.org/>`_ use Clang built kernels. `LLVM is a
|
||||
collection of toolchain components implemented in terms of C++ objects
|
||||
<https://www.aosabook.org/en/llvm.html>`_. Clang is a front-end to LLVM that
|
||||
supports C and the GNU C extensions required by the kernel, and is pronounced
|
||||
"klang," not "see-lang."
|
||||
|
||||
Clang
|
||||
-----
|
||||
|
||||
The compiler used can be swapped out via `CC=` command line argument to `make`.
|
||||
`CC=` should be set when selecting a config and during a build.
|
||||
|
||||
make CC=clang defconfig
|
||||
|
||||
make CC=clang
|
||||
|
||||
Cross Compiling
|
||||
---------------
|
||||
|
||||
A single Clang compiler binary will typically contain all supported backends,
|
||||
which can help simplify cross compiling.
|
||||
|
||||
ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- make CC=clang
|
||||
|
||||
`CROSS_COMPILE` is not used to prefix the Clang compiler binary, instead
|
||||
`CROSS_COMPILE` is used to set a command line flag: `--target <triple>`. For
|
||||
example:
|
||||
|
||||
clang --target aarch64-linux-gnu foo.c
|
||||
|
||||
LLVM Utilities
|
||||
--------------
|
||||
|
||||
LLVM has substitutes for GNU binutils utilities. These can be invoked as
|
||||
additional parameters to `make`.
|
||||
|
||||
make CC=clang AS=clang LD=ld.lld AR=llvm-ar NM=llvm-nm STRIP=llvm-strip \\
|
||||
OBJCOPY=llvm-objcopy OBJDUMP=llvm-objdump OBJSIZE=llvm-objsize \\
|
||||
READELF=llvm-readelf HOSTCC=clang HOSTCXX=clang++ HOSTAR=llvm-ar \\
|
||||
HOSTLD=ld.lld
|
||||
|
||||
Getting Help
|
||||
------------
|
||||
|
||||
- `Website <https://clangbuiltlinux.github.io/>`_
|
||||
- `Mailing List <https://groups.google.com/forum/#!forum/clang-built-linux>`_: <clang-built-linux@googlegroups.com>
|
||||
- `Issue Tracker <https://github.com/ClangBuiltLinux/linux/issues>`_
|
||||
- IRC: #clangbuiltlinux on chat.freenode.net
|
||||
- `Telegram <https://t.me/ClangBuiltLinux>`_: @ClangBuiltLinux
|
||||
- `Wiki <https://github.com/ClangBuiltLinux/linux/wiki>`_
|
||||
- `Beginner Bugs <https://github.com/ClangBuiltLinux/linux/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22>`_
|
||||
|
||||
Getting LLVM
|
||||
-------------
|
||||
|
||||
- http://releases.llvm.org/download.html
|
||||
- https://github.com/llvm/llvm-project
|
||||
- https://llvm.org/docs/GettingStarted.html
|
||||
- https://llvm.org/docs/CMake.html
|
||||
- https://apt.llvm.org/
|
||||
- https://www.archlinux.org/packages/extra/x86_64/llvm/
|
||||
- https://github.com/ClangBuiltLinux/tc-build
|
||||
- https://github.com/ClangBuiltLinux/linux/wiki/Building-Clang-from-source
|
||||
- https://android.googlesource.com/platform/prebuilts/clang/host/linux-x86/
|
@ -1,130 +0,0 @@
|
||||
.. include:: <isonum.txt>
|
||||
|
||||
======================
|
||||
MIPS AU1XXX IDE driver
|
||||
======================
|
||||
|
||||
Released 2005-07-15
|
||||
|
||||
About
|
||||
=====
|
||||
|
||||
This file describes the 'drivers/ide/au1xxx-ide.c', related files and the
|
||||
services they provide.
|
||||
|
||||
If you are short in patience and just want to know how to add your hard disc to
|
||||
the white or black list, go to the 'ADD NEW HARD DISC TO WHITE OR BLACK LIST'
|
||||
section.
|
||||
|
||||
|
||||
License
|
||||
=======
|
||||
|
||||
:Copyright: |copy| 2003-2005 AMD, Personal Connectivity Solutions
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it under
|
||||
the terms of the GNU General Public License as published by the Free Software
|
||||
Foundation; either version 2 of the License, or (at your option) any later
|
||||
version.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED ``AS IS`` AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR
|
||||
BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
You should have received a copy of the GNU General Public License along with
|
||||
this program; if not, write to the Free Software Foundation, Inc.,
|
||||
675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
Note:
|
||||
for more information, please refer "AMD Alchemy Au1200/Au1550 IDE
|
||||
Interface and Linux Device Driver" Application Note.
|
||||
|
||||
|
||||
Files, Configs and Compatibility
|
||||
================================
|
||||
|
||||
Two files are introduced:
|
||||
|
||||
a) 'arch/mips/include/asm/mach-au1x00/au1xxx_ide.h'
|
||||
contains : struct _auide_hwif
|
||||
|
||||
- timing parameters for PIO mode 0/1/2/3/4
|
||||
- timing parameters for MWDMA 0/1/2
|
||||
|
||||
b) 'drivers/ide/mips/au1xxx-ide.c'
|
||||
contains the functionality of the AU1XXX IDE driver
|
||||
|
||||
Following extra configs variables are introduced:
|
||||
|
||||
CONFIG_BLK_DEV_IDE_AU1XXX_PIO_DBDMA
|
||||
- enable the PIO+DBDMA mode
|
||||
CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA
|
||||
- enable the MWDMA mode
|
||||
|
||||
|
||||
Supported IDE Modes
|
||||
===================
|
||||
|
||||
The AU1XXX IDE driver supported all PIO modes - PIO mode 0/1/2/3/4 - and all
|
||||
MWDMA modes - MWDMA 0/1/2 -. There is no support for SWDMA and UDMA mode.
|
||||
|
||||
To change the PIO mode use the program hdparm with option -p, e.g.
|
||||
'hdparm -p0 [device]' for PIO mode 0. To enable the MWDMA mode use the option
|
||||
-X, e.g. 'hdparm -X32 [device]' for MWDMA mode 0.
|
||||
|
||||
|
||||
Performance Configurations
|
||||
==========================
|
||||
|
||||
If the used system doesn't need USB support enable the following kernel
|
||||
configs::
|
||||
|
||||
CONFIG_IDE=y
|
||||
CONFIG_BLK_DEV_IDE=y
|
||||
CONFIG_IDE_GENERIC=y
|
||||
CONFIG_BLK_DEV_IDEPCI=y
|
||||
CONFIG_BLK_DEV_GENERIC=y
|
||||
CONFIG_BLK_DEV_IDEDMA_PCI=y
|
||||
CONFIG_BLK_DEV_IDE_AU1XXX=y
|
||||
CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA=y
|
||||
CONFIG_BLK_DEV_IDEDMA=y
|
||||
|
||||
Also define 'IDE_AU1XXX_BURSTMODE' in 'drivers/ide/mips/au1xxx-ide.c' to enable
|
||||
the burst support on DBDMA controller.
|
||||
|
||||
If the used system need the USB support enable the following kernel configs for
|
||||
high IDE to USB throughput.
|
||||
|
||||
::
|
||||
|
||||
CONFIG_IDE_GENERIC=y
|
||||
CONFIG_BLK_DEV_IDEPCI=y
|
||||
CONFIG_BLK_DEV_GENERIC=y
|
||||
CONFIG_BLK_DEV_IDEDMA_PCI=y
|
||||
CONFIG_BLK_DEV_IDE_AU1XXX=y
|
||||
CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA=y
|
||||
CONFIG_BLK_DEV_IDEDMA=y
|
||||
|
||||
Also undefine 'IDE_AU1XXX_BURSTMODE' in 'drivers/ide/mips/au1xxx-ide.c' to
|
||||
disable the burst support on DBDMA controller.
|
||||
|
||||
|
||||
Acknowledgments
|
||||
===============
|
||||
|
||||
These drivers wouldn't have been done without the base of kernel 2.4.x AU1XXX
|
||||
IDE driver from AMD.
|
||||
|
||||
Additional input also from:
|
||||
Matthias Lenk <matthias.lenk@amd.com>
|
||||
|
||||
Happy hacking!
|
||||
|
||||
Enrico Walther <enrico.walther@amd.com>
|
@ -10,8 +10,6 @@ MIPS-specific Documentation
|
||||
|
||||
ingenic-tcu
|
||||
|
||||
au1xxx_ide
|
||||
|
||||
.. only:: subproject and html
|
||||
|
||||
Indices
|
||||
|
@ -1,37 +1,40 @@
|
||||
.. SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
Netdev private dataroom for 6lowpan interfaces:
|
||||
==============================================
|
||||
Netdev private dataroom for 6lowpan interfaces
|
||||
==============================================
|
||||
|
||||
All 6lowpan able net devices, means all interfaces with ARPHRD_6LOWPAN,
|
||||
must have "struct lowpan_priv" placed at beginning of netdev_priv.
|
||||
|
||||
The priv_size of each interface should be calculate by:
|
||||
The priv_size of each interface should be calculate by::
|
||||
|
||||
dev->priv_size = LOWPAN_PRIV_SIZE(LL_6LOWPAN_PRIV_DATA);
|
||||
|
||||
Where LL_PRIV_6LOWPAN_DATA is sizeof linklayer 6lowpan private data struct.
|
||||
To access the LL_PRIV_6LOWPAN_DATA structure you can cast:
|
||||
To access the LL_PRIV_6LOWPAN_DATA structure you can cast::
|
||||
|
||||
lowpan_priv(dev)-priv;
|
||||
|
||||
to your LL_6LOWPAN_PRIV_DATA structure.
|
||||
|
||||
Before registering the lowpan netdev interface you must run:
|
||||
Before registering the lowpan netdev interface you must run::
|
||||
|
||||
lowpan_netdev_setup(dev, LOWPAN_LLTYPE_FOOBAR);
|
||||
|
||||
wheres LOWPAN_LLTYPE_FOOBAR is a define for your 6LoWPAN linklayer type of
|
||||
enum lowpan_lltypes.
|
||||
|
||||
Example to evaluate the private usually you can do:
|
||||
Example to evaluate the private usually you can do::
|
||||
|
||||
static inline struct lowpan_priv_foobar *
|
||||
lowpan_foobar_priv(struct net_device *dev)
|
||||
{
|
||||
static inline struct lowpan_priv_foobar *
|
||||
lowpan_foobar_priv(struct net_device *dev)
|
||||
{
|
||||
return (struct lowpan_priv_foobar *)lowpan_priv(dev)->priv;
|
||||
}
|
||||
}
|
||||
|
||||
switch (dev->type) {
|
||||
case ARPHRD_6LOWPAN:
|
||||
switch (dev->type) {
|
||||
case ARPHRD_6LOWPAN:
|
||||
lowpan_priv = lowpan_priv(dev);
|
||||
/* do great stuff which is ARPHRD_6LOWPAN related */
|
||||
switch (lowpan_priv->lltype) {
|
||||
@ -42,8 +45,8 @@ case ARPHRD_6LOWPAN:
|
||||
...
|
||||
}
|
||||
break;
|
||||
...
|
||||
}
|
||||
...
|
||||
}
|
||||
|
||||
In case of generic 6lowpan branch ("net/6lowpan") you can remove the check
|
||||
on ARPHRD_6LOWPAN, because you can be sure that these function are called
|
52
Documentation/networking/bareudp.rst
Normal file
52
Documentation/networking/bareudp.rst
Normal file
@ -0,0 +1,52 @@
|
||||
.. SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
========================================
|
||||
Bare UDP Tunnelling Module Documentation
|
||||
========================================
|
||||
|
||||
There are various L3 encapsulation standards using UDP being discussed to
|
||||
leverage the UDP based load balancing capability of different networks.
|
||||
MPLSoUDP (__ https://tools.ietf.org/html/rfc7510) is one among them.
|
||||
|
||||
The Bareudp tunnel module provides a generic L3 encapsulation tunnelling
|
||||
support for tunnelling different L3 protocols like MPLS, IP, NSH etc. inside
|
||||
a UDP tunnel.
|
||||
|
||||
Special Handling
|
||||
----------------
|
||||
The bareudp device supports special handling for MPLS & IP as they can have
|
||||
multiple ethertypes.
|
||||
MPLS procotcol can have ethertypes ETH_P_MPLS_UC (unicast) & ETH_P_MPLS_MC (multicast).
|
||||
IP protocol can have ethertypes ETH_P_IP (v4) & ETH_P_IPV6 (v6).
|
||||
This special handling can be enabled only for ethertypes ETH_P_IP & ETH_P_MPLS_UC
|
||||
with a flag called multiproto mode.
|
||||
|
||||
Usage
|
||||
------
|
||||
|
||||
1) Device creation & deletion
|
||||
|
||||
a) ip link add dev bareudp0 type bareudp dstport 6635 ethertype 0x8847.
|
||||
|
||||
This creates a bareudp tunnel device which tunnels L3 traffic with ethertype
|
||||
0x8847 (MPLS traffic). The destination port of the UDP header will be set to
|
||||
6635.The device will listen on UDP port 6635 to receive traffic.
|
||||
|
||||
b) ip link delete bareudp0
|
||||
|
||||
2) Device creation with multiple proto mode enabled
|
||||
|
||||
There are two ways to create a bareudp device for MPLS & IP with multiproto mode
|
||||
enabled.
|
||||
|
||||
a) ip link add dev bareudp0 type bareudp dstport 6635 ethertype 0x8847 multiproto
|
||||
|
||||
b) ip link add dev bareudp0 type bareudp dstport 6635 ethertype mpls
|
||||
|
||||
3) Device Usage
|
||||
|
||||
The bareudp device could be used along with OVS or flower filter in TC.
|
||||
The OVS or TC flower layer must set the tunnel information in SKB dst field before
|
||||
sending packet buffer to the bareudp device for transmission. On reception the
|
||||
bareudp device extracts and stores the tunnel information in SKB dst field before
|
||||
passing the packet buffer to the network stack.
|
@ -101,7 +101,7 @@ Enabling the driver and kconfig options
|
||||
**External options** ( Choose if the corresponding mlx5 feature is required )
|
||||
|
||||
- CONFIG_PTP_1588_CLOCK: When chosen, mlx5 ptp support will be enabled
|
||||
- CONFIG_VXLAN: When chosen, mlx5 vxaln support will be enabled.
|
||||
- CONFIG_VXLAN: When chosen, mlx5 vxlan support will be enabled.
|
||||
- CONFIG_MLXFW: When chosen, mlx5 firmware flashing support will be enabled (via devlink and ethtool).
|
||||
|
||||
Devlink info
|
||||
|
@ -32,7 +32,8 @@ is also supported.
|
||||
DesignWare(R) Cores Ethernet MAC 10/100/1000 Universal version 3.70a
|
||||
(and older) and DesignWare(R) Cores Ethernet Quality-of-Service version 4.0
|
||||
(and upper) have been used for developing this driver as well as
|
||||
DesignWare(R) Cores XGMAC - 10G Ethernet MAC.
|
||||
DesignWare(R) Cores XGMAC - 10G Ethernet MAC and DesignWare(R) Cores
|
||||
Enterprise MAC - 100G Ethernet MAC.
|
||||
|
||||
This driver supports both the platform bus and PCI.
|
||||
|
||||
@ -48,6 +49,8 @@ Cores Ethernet Controllers and corresponding minimum and maximum versions:
|
||||
+-------------------------------+--------------+--------------+--------------+
|
||||
| XGMAC - 10G Ethernet MAC | 2.10a | N/A | XGMAC2+ |
|
||||
+-------------------------------+--------------+--------------+--------------+
|
||||
| XLGMAC - 100G Ethernet MAC | 2.00a | N/A | XLGMAC2+ |
|
||||
+-------------------------------+--------------+--------------+--------------+
|
||||
|
||||
For questions related to hardware requirements, refer to the documentation
|
||||
supplied with your Ethernet adapter. All hardware requirements listed apply
|
||||
@ -57,7 +60,7 @@ Feature List
|
||||
============
|
||||
|
||||
The following features are available in this driver:
|
||||
- GMII/MII/RGMII/SGMII/RMII/XGMII Interface
|
||||
- GMII/MII/RGMII/SGMII/RMII/XGMII/XLGMII Interface
|
||||
- Half-Duplex / Full-Duplex Operation
|
||||
- Energy Efficient Ethernet (EEE)
|
||||
- IEEE 802.3x PAUSE Packets (Flow Control)
|
||||
|
@ -51,6 +51,9 @@ The ``bnxt_en`` driver reports the following versions
|
||||
* - Name
|
||||
- Type
|
||||
- Description
|
||||
* - ``board.id``
|
||||
- fixed
|
||||
- Part number identifying the board design
|
||||
* - ``asic.id``
|
||||
- fixed
|
||||
- ASIC design identifier
|
||||
@ -63,12 +66,15 @@ The ``bnxt_en`` driver reports the following versions
|
||||
* - ``fw``
|
||||
- stored, running
|
||||
- Overall board firmware version
|
||||
* - ``fw.app``
|
||||
- stored, running
|
||||
- Data path firmware version
|
||||
* - ``fw.mgmt``
|
||||
- stored, running
|
||||
- Management firmware version
|
||||
- NIC hardware resource management firmware version
|
||||
* - ``fw.mgmt.api``
|
||||
- running
|
||||
- Minimum firmware interface spec version supported between driver and firmware
|
||||
* - ``fw.nsci``
|
||||
- stored, running
|
||||
- General platform management firmware version
|
||||
* - ``fw.roce``
|
||||
- stored, running
|
||||
- RoCE management firmware version
|
||||
|
93
Documentation/networking/devlink/devlink-flash.rst
Normal file
93
Documentation/networking/devlink/devlink-flash.rst
Normal file
@ -0,0 +1,93 @@
|
||||
.. SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||
|
||||
.. _devlink_flash:
|
||||
|
||||
=============
|
||||
Devlink Flash
|
||||
=============
|
||||
|
||||
The ``devlink-flash`` API allows updating device firmware. It replaces the
|
||||
older ``ethtool-flash`` mechanism, and doesn't require taking any
|
||||
networking locks in the kernel to perform the flash update. Example use::
|
||||
|
||||
$ devlink dev flash pci/0000:05:00.0 file flash-boot.bin
|
||||
|
||||
Note that the file name is a path relative to the firmware loading path
|
||||
(usually ``/lib/firmware/``). Drivers may send status updates to inform
|
||||
user space about the progress of the update operation.
|
||||
|
||||
Firmware Loading
|
||||
================
|
||||
|
||||
Devices which require firmware to operate usually store it in non-volatile
|
||||
memory on the board, e.g. flash. Some devices store only basic firmware on
|
||||
the board, and the driver loads the rest from disk during probing.
|
||||
``devlink-info`` allows users to query firmware information (loaded
|
||||
components and versions).
|
||||
|
||||
In other cases the device can both store the image on the board, load from
|
||||
disk, or automatically flash a new image from disk. The ``fw_load_policy``
|
||||
devlink parameter can be used to control this behavior
|
||||
(:ref:`Documentation/networking/devlink/devlink-params.rst <devlink_params_generic>`).
|
||||
|
||||
On-disk firmware files are usually stored in ``/lib/firmware/``.
|
||||
|
||||
Firmware Version Management
|
||||
===========================
|
||||
|
||||
Drivers are expected to implement ``devlink-flash`` and ``devlink-info``
|
||||
functionality, which together allow for implementing vendor-independent
|
||||
automated firmware update facilities.
|
||||
|
||||
``devlink-info`` exposes the ``driver`` name and three version groups
|
||||
(``fixed``, ``running``, ``stored``).
|
||||
|
||||
The ``driver`` attribute and ``fixed`` group identify the specific device
|
||||
design, e.g. for looking up applicable firmware updates. This is why
|
||||
``serial_number`` is not part of the ``fixed`` versions (even though it
|
||||
is fixed) - ``fixed`` versions should identify the design, not a single
|
||||
device.
|
||||
|
||||
``running`` and ``stored`` firmware versions identify the firmware running
|
||||
on the device, and firmware which will be activated after reboot or device
|
||||
reset.
|
||||
|
||||
The firmware update agent is supposed to be able to follow this simple
|
||||
algorithm to update firmware contents, regardless of the device vendor:
|
||||
|
||||
.. code-block:: sh
|
||||
|
||||
# Get unique HW design identifier
|
||||
$hw_id = devlink-dev-info['fixed']
|
||||
|
||||
# Find out which FW flash we want to use for this NIC
|
||||
$want_flash_vers = some-db-backed.lookup($hw_id, 'flash')
|
||||
|
||||
# Update flash if necessary
|
||||
if $want_flash_vers != devlink-dev-info['stored']:
|
||||
$file = some-db-backed.download($hw_id, 'flash')
|
||||
devlink-dev-flash($file)
|
||||
|
||||
# Find out the expected overall firmware versions
|
||||
$want_fw_vers = some-db-backed.lookup($hw_id, 'all')
|
||||
|
||||
# Update on-disk file if necessary
|
||||
if $want_fw_vers != devlink-dev-info['running']:
|
||||
$file = some-db-backed.download($hw_id, 'disk')
|
||||
write($file, '/lib/firmware/')
|
||||
|
||||
# Try device reset, if available
|
||||
if $want_fw_vers != devlink-dev-info['running']:
|
||||
devlink-reset()
|
||||
|
||||
# Reboot, if reset wasn't enough
|
||||
if $want_fw_vers != devlink-dev-info['running']:
|
||||
reboot()
|
||||
|
||||
Note that each reference to ``devlink-dev-info`` in this pseudo-code
|
||||
is expected to fetch up-to-date information from the kernel.
|
||||
|
||||
For the convenience of identifying firmware files some vendors add
|
||||
``bundle_id`` information to the firmware versions. This meta-version covers
|
||||
multiple per-component versions and can be used e.g. in firmware file names
|
||||
(all component versions could get rather long.)
|
@ -5,34 +5,119 @@ Devlink Info
|
||||
============
|
||||
|
||||
The ``devlink-info`` mechanism enables device drivers to report device
|
||||
information in a generic fashion. It is extensible, and enables exporting
|
||||
even device or driver specific information.
|
||||
(hardware and firmware) information in a standard, extensible fashion.
|
||||
|
||||
devlink supports representing the following types of versions
|
||||
The original motivation for the ``devlink-info`` API was twofold:
|
||||
|
||||
.. list-table:: List of version types
|
||||
- making it possible to automate device and firmware management in a fleet
|
||||
of machines in a vendor-independent fashion (see also
|
||||
:ref:`Documentation/networking/devlink/devlink-flash.rst <devlink_flash>`);
|
||||
- name the per component FW versions (as opposed to the crowded ethtool
|
||||
version string).
|
||||
|
||||
``devlink-info`` supports reporting multiple types of objects. Reporting driver
|
||||
versions is generally discouraged - here, and via any other Linux API.
|
||||
|
||||
.. list-table:: List of top level info objects
|
||||
:widths: 5 95
|
||||
|
||||
* - Type
|
||||
* - Name
|
||||
- Description
|
||||
* - ``driver``
|
||||
- Name of the currently used device driver, also available through sysfs.
|
||||
|
||||
* - ``serial_number``
|
||||
- Serial number of the device.
|
||||
|
||||
This is usually the serial number of the ASIC, also often available
|
||||
in PCI config space of the device in the *Device Serial Number*
|
||||
capability.
|
||||
|
||||
The serial number should be unique per physical device.
|
||||
Sometimes the serial number of the device is only 48 bits long (the
|
||||
length of the Ethernet MAC address), and since PCI DSN is 64 bits long
|
||||
devices pad or encode additional information into the serial number.
|
||||
One example is adding port ID or PCI interface ID in the extra two bytes.
|
||||
Drivers should make sure to strip or normalize any such padding
|
||||
or interface ID, and report only the part of the serial number
|
||||
which uniquely identifies the hardware. In other words serial number
|
||||
reported for two ports of the same device or on two hosts of
|
||||
a multi-host device should be identical.
|
||||
|
||||
.. note:: ``devlink-info`` API should be extended with a new field
|
||||
if devices want to report board/product serial number (often
|
||||
reported in PCI *Vital Product Data* capability).
|
||||
|
||||
* - ``fixed``
|
||||
- Represents fixed versions, which cannot change. For example,
|
||||
- Group for hardware identifiers, and versions of components
|
||||
which are not field-updatable.
|
||||
|
||||
Versions in this section identify the device design. For example,
|
||||
component identifiers or the board version reported in the PCI VPD.
|
||||
Data in ``devlink-info`` should be broken into the smallest logical
|
||||
components, e.g. PCI VPD may concatenate various information
|
||||
to form the Part Number string, while in ``devlink-info`` all parts
|
||||
should be reported as separate items.
|
||||
|
||||
This group must not contain any frequently changing identifiers,
|
||||
such as serial numbers. See
|
||||
:ref:`Documentation/networking/devlink/devlink-flash.rst <devlink_flash>`
|
||||
to understand why.
|
||||
|
||||
* - ``running``
|
||||
- Represents the version of the currently running component. For
|
||||
example the running version of firmware. These versions generally
|
||||
only update after a reboot.
|
||||
- Group for information about currently running software/firmware.
|
||||
These versions often only update after a reboot, sometimes device reset.
|
||||
|
||||
* - ``stored``
|
||||
- Represents the version of a component as stored, such as after a
|
||||
flash update. Stored values should update to reflect changes in the
|
||||
flash even if a reboot has not yet occurred.
|
||||
- Group for software/firmware versions in device flash.
|
||||
|
||||
Stored values must update to reflect changes in the flash even
|
||||
if reboot has not yet occurred. If device is not capable of updating
|
||||
``stored`` versions when new software is flashed, it must not report
|
||||
them.
|
||||
|
||||
Each version can be reported at most once in each version group. Firmware
|
||||
components stored on the flash should feature in both the ``running`` and
|
||||
``stored`` sections, if device is capable of reporting ``stored`` versions
|
||||
(see :ref:`Documentation/networking/devlink/devlink-flash.rst <devlink_flash>`).
|
||||
In case software/firmware components are loaded from the disk (e.g.
|
||||
``/lib/firmware``) only the running version should be reported via
|
||||
the kernel API.
|
||||
|
||||
Generic Versions
|
||||
================
|
||||
|
||||
It is expected that drivers use the following generic names for exporting
|
||||
version information. Other information may be exposed using driver-specific
|
||||
names, but these should be documented in the driver-specific file.
|
||||
version information. If a generic name for a given component doesn't exist yet,
|
||||
driver authors should consult existing driver-specific versions and attempt
|
||||
reuse. As last resort, if a component is truly unique, using driver-specific
|
||||
names is allowed, but these should be documented in the driver-specific file.
|
||||
|
||||
All versions should try to use the following terminology:
|
||||
|
||||
.. list-table:: List of common version suffixes
|
||||
:widths: 10 90
|
||||
|
||||
* - Name
|
||||
- Description
|
||||
* - ``id``, ``revision``
|
||||
- Identifiers of designs and revision, mostly used for hardware versions.
|
||||
|
||||
* - ``api``
|
||||
- Version of API between components. API items are usually of limited
|
||||
value to the user, and can be inferred from other versions by the vendor,
|
||||
so adding API versions is generally discouraged as noise.
|
||||
|
||||
* - ``bundle_id``
|
||||
- Identifier of a distribution package which was flashed onto the device.
|
||||
This is an attribute of a firmware package which covers multiple versions
|
||||
for ease of managing firmware images (see
|
||||
:ref:`Documentation/networking/devlink/devlink-flash.rst <devlink_flash>`).
|
||||
|
||||
``bundle_id`` can appear in both ``running`` and ``stored`` versions,
|
||||
but it must not be reported if any of the components covered by the
|
||||
``bundle_id`` was changed and no longer matches the version from
|
||||
the bundle.
|
||||
|
||||
board.id
|
||||
--------
|
||||
@ -52,7 +137,7 @@ ASIC design identifier.
|
||||
asic.rev
|
||||
--------
|
||||
|
||||
ASIC design revision.
|
||||
ASIC design revision/stepping.
|
||||
|
||||
board.manufacture
|
||||
-----------------
|
||||
@ -72,6 +157,12 @@ Control unit firmware version. This firmware is responsible for house
|
||||
keeping tasks, PHY control etc. but not the packet-by-packet data path
|
||||
operation.
|
||||
|
||||
fw.mgmt.api
|
||||
-----------
|
||||
|
||||
Firmware interface specification version of the software interfaces between
|
||||
driver and firmware.
|
||||
|
||||
fw.app
|
||||
------
|
||||
|
||||
@ -91,10 +182,31 @@ Network Controller Sideband Interface.
|
||||
fw.psid
|
||||
-------
|
||||
|
||||
Unique identifier of the firmware parameter set.
|
||||
Unique identifier of the firmware parameter set. These are usually
|
||||
parameters of a particular board, defined at manufacturing time.
|
||||
|
||||
fw.roce
|
||||
-------
|
||||
|
||||
RoCE firmware version which is responsible for handling roce
|
||||
management.
|
||||
|
||||
fw.bundle_id
|
||||
------------
|
||||
|
||||
Unique identifier of the entire firmware bundle.
|
||||
|
||||
Future work
|
||||
===========
|
||||
|
||||
The following extensions could be useful:
|
||||
|
||||
- product serial number - NIC boards often get labeled with a board serial
|
||||
number rather than ASIC serial number; it'd be useful to add board serial
|
||||
numbers to the API if they can be retrieved from the device;
|
||||
|
||||
- on-disk firmware file names - drivers list the file names of firmware they
|
||||
may need to load onto devices via the ``MODULE_FIRMWARE()`` macro. These,
|
||||
however, are per module, rather than per device. It'd be useful to list
|
||||
the names of firmware files the driver will try to load for a given device,
|
||||
in order of priority.
|
||||
|
@ -41,6 +41,8 @@ In order for ``driverinit`` parameters to take effect, the driver must
|
||||
support reloading via the ``devlink-reload`` command. This command will
|
||||
request a reload of the device driver.
|
||||
|
||||
.. _devlink_params_generic:
|
||||
|
||||
Generic configuration parameters
|
||||
================================
|
||||
The following is a list of generic configuration parameters that drivers may
|
||||
|
@ -20,6 +20,11 @@ address regions that are otherwise inaccessible to the user.
|
||||
Regions may also be used to provide an additional way to debug complex error
|
||||
states, but see also :doc:`devlink-health`
|
||||
|
||||
Regions may optionally support capturing a snapshot on demand via the
|
||||
``DEVLINK_CMD_REGION_NEW`` netlink message. A driver wishing to allow
|
||||
requested snapshots must implement the ``.snapshot`` callback for the region
|
||||
in its ``devlink_region_ops`` structure.
|
||||
|
||||
example usage
|
||||
-------------
|
||||
|
||||
@ -29,8 +34,7 @@ example usage
|
||||
$ devlink region show [ DEV/REGION ]
|
||||
$ devlink region del DEV/REGION snapshot SNAPSHOT_ID
|
||||
$ devlink region dump DEV/REGION [ snapshot SNAPSHOT_ID ]
|
||||
$ devlink region read DEV/REGION [ snapshot SNAPSHOT_ID ]
|
||||
address ADDRESS length length
|
||||
$ devlink region read DEV/REGION [ snapshot SNAPSHOT_ID ] address ADDRESS length length
|
||||
|
||||
# Show all of the exposed regions with region sizes:
|
||||
$ devlink region show
|
||||
@ -40,6 +44,9 @@ example usage
|
||||
# Delete a snapshot using:
|
||||
$ devlink region del pci/0000:00:05.0/cr-space snapshot 1
|
||||
|
||||
# Request an immediate snapshot, if supported by the region
|
||||
$ devlink region new pci/0000:00:05.0/cr-space snapshot 5
|
||||
|
||||
# Dump a snapshot:
|
||||
$ devlink region dump pci/0000:00:05.0/fw-health snapshot 1
|
||||
0000000000000000 0014 95dc 0014 9514 0035 1670 0034 db30
|
||||
@ -48,8 +55,7 @@ example usage
|
||||
0000000000000030 bada cce5 bada cce5 bada cce5 bada cce5
|
||||
|
||||
# Read a specific part of a snapshot:
|
||||
$ devlink region read pci/0000:00:05.0/fw-health snapshot 1 address 0
|
||||
length 16
|
||||
$ devlink region read pci/0000:00:05.0/fw-health snapshot 1 address 0 length 16
|
||||
0000000000000000 0014 95dc 0014 9514 0035 1670 0034 db30
|
||||
|
||||
As regions are likely very device or driver specific, no generic regions are
|
||||
|
@ -238,6 +238,12 @@ be added to the following table:
|
||||
- ``drop``
|
||||
- Traps NVE packets that the device decided to drop because their overlay
|
||||
source MAC is multicast
|
||||
* - ``ingress_flow_action_drop``
|
||||
- ``drop``
|
||||
- Traps packets dropped during processing of ingress flow action drop
|
||||
* - ``egress_flow_action_drop``
|
||||
- ``drop``
|
||||
- Traps packets dropped during processing of egress flow action drop
|
||||
|
||||
Driver-specific Packet Traps
|
||||
============================
|
||||
@ -277,6 +283,35 @@ narrow. The description of these groups must be added to the following table:
|
||||
* - ``tunnel_drops``
|
||||
- Contains packet traps for packets that were dropped by the device during
|
||||
tunnel encapsulation / decapsulation
|
||||
* - ``acl_drops``
|
||||
- Contains packet traps for packets that were dropped by the device during
|
||||
ACL processing
|
||||
|
||||
Packet Trap Policers
|
||||
====================
|
||||
|
||||
As previously explained, the underlying device can trap certain packets to the
|
||||
CPU for processing. In most cases, the underlying device is capable of handling
|
||||
packet rates that are several orders of magnitude higher compared to those that
|
||||
can be handled by the CPU.
|
||||
|
||||
Therefore, in order to prevent the underlying device from overwhelming the CPU,
|
||||
devices usually include packet trap policers that are able to police the
|
||||
trapped packets to rates that can be handled by the CPU.
|
||||
|
||||
The ``devlink-trap`` mechanism allows capable device drivers to register their
|
||||
supported packet trap policers with ``devlink``. The device driver can choose
|
||||
to associate these policers with supported packet trap groups (see
|
||||
:ref:`Generic-Packet-Trap-Groups`) during its initialization, thereby exposing
|
||||
its default control plane policy to user space.
|
||||
|
||||
Device drivers should allow user space to change the parameters of the policers
|
||||
(e.g., rate, burst size) as well as the association between the policers and
|
||||
trap groups by implementing the relevant callbacks.
|
||||
|
||||
If possible, device drivers should implement a callback that allows user space
|
||||
to retrieve the number of packets that were dropped by the policer because its
|
||||
configured policy was violated.
|
||||
|
||||
Testing
|
||||
=======
|
||||
|
96
Documentation/networking/devlink/ice.rst
Normal file
96
Documentation/networking/devlink/ice.rst
Normal file
@ -0,0 +1,96 @@
|
||||
.. SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
===================
|
||||
ice devlink support
|
||||
===================
|
||||
|
||||
This document describes the devlink features implemented by the ``ice``
|
||||
device driver.
|
||||
|
||||
Info versions
|
||||
=============
|
||||
|
||||
The ``ice`` driver reports the following versions
|
||||
|
||||
.. list-table:: devlink info versions implemented
|
||||
:widths: 5 5 5 90
|
||||
|
||||
* - Name
|
||||
- Type
|
||||
- Example
|
||||
- Description
|
||||
* - ``board.id``
|
||||
- fixed
|
||||
- K65390-000
|
||||
- The Product Board Assembly (PBA) identifier of the board.
|
||||
* - ``fw.mgmt``
|
||||
- running
|
||||
- 2.1.7
|
||||
- 3-digit version number of the management firmware that controls the
|
||||
PHY, link, etc.
|
||||
* - ``fw.mgmt.api``
|
||||
- running
|
||||
- 1.5
|
||||
- 2-digit version number of the API exported over the AdminQ by the
|
||||
management firmware. Used by the driver to identify what commands
|
||||
are supported.
|
||||
* - ``fw.mgmt.build``
|
||||
- running
|
||||
- 0x305d955f
|
||||
- Unique identifier of the source for the management firmware.
|
||||
* - ``fw.undi``
|
||||
- running
|
||||
- 1.2581.0
|
||||
- Version of the Option ROM containing the UEFI driver. The version is
|
||||
reported in ``major.minor.patch`` format. The major version is
|
||||
incremented whenever a major breaking change occurs, or when the
|
||||
minor version would overflow. The minor version is incremented for
|
||||
non-breaking changes and reset to 1 when the major version is
|
||||
incremented. The patch version is normally 0 but is incremented when
|
||||
a fix is delivered as a patch against an older base Option ROM.
|
||||
* - ``fw.psid.api``
|
||||
- running
|
||||
- 0.80
|
||||
- Version defining the format of the flash contents.
|
||||
* - ``fw.bundle_id``
|
||||
- running
|
||||
- 0x80002ec0
|
||||
- Unique identifier of the firmware image file that was loaded onto
|
||||
the device. Also referred to as the EETRACK identifier of the NVM.
|
||||
* - ``fw.app.name``
|
||||
- running
|
||||
- ICE OS Default Package
|
||||
- The name of the DDP package that is active in the device. The DDP
|
||||
package is loaded by the driver during initialization. Each varation
|
||||
of DDP package shall have a unique name.
|
||||
* - ``fw.app``
|
||||
- running
|
||||
- 1.3.1.0
|
||||
- The version of the DDP package that is active in the device. Note
|
||||
that both the name (as reported by ``fw.app.name``) and version are
|
||||
required to uniquely identify the package.
|
||||
|
||||
Regions
|
||||
=======
|
||||
|
||||
The ``ice`` driver enables access to the contents of the Non Volatile Memory
|
||||
flash chip via the ``nvm-flash`` region.
|
||||
|
||||
Users can request an immediate capture of a snapshot via the
|
||||
``DEVLINK_CMD_REGION_NEW``
|
||||
|
||||
.. code:: shell
|
||||
|
||||
$ devlink region new pci/0000:01:00.0/nvm-flash snapshot 1
|
||||
$ devlink region dump pci/0000:01:00.0/nvm-flash snapshot 1
|
||||
|
||||
$ devlink region dump pci/0000:01:00.0/nvm-flash snapshot 1
|
||||
0000000000000000 0014 95dc 0014 9514 0035 1670 0034 db30
|
||||
0000000000000010 0000 0000 ffff ff04 0029 8c00 0028 8cc8
|
||||
0000000000000020 0016 0bb8 0016 1720 0000 0000 c00f 3ffc
|
||||
0000000000000030 bada cce5 bada cce5 bada cce5 bada cce5
|
||||
|
||||
$ devlink region read pci/0000:01:00.0/nvm-flash snapshot 1 address 0 length 16
|
||||
0000000000000000 0014 95dc 0014 9514 0035 1670 0034 db30
|
||||
|
||||
$ devlink region delete pci/0000:01:00.0/nvm-flash snapshot 1
|
@ -16,6 +16,7 @@ general.
|
||||
devlink-dpipe
|
||||
devlink-health
|
||||
devlink-info
|
||||
devlink-flash
|
||||
devlink-params
|
||||
devlink-region
|
||||
devlink-resource
|
||||
@ -32,6 +33,7 @@ parameters, info versions, and other features it supports.
|
||||
|
||||
bnxt
|
||||
ionic
|
||||
ice
|
||||
mlx4
|
||||
mlx5
|
||||
mlxsw
|
||||
|
@ -37,6 +37,12 @@ parameters.
|
||||
* ``smfs`` Software managed flow steering. In SMFS mode, the HW
|
||||
steering entities are created and manage through the driver without
|
||||
firmware intervention.
|
||||
* - ``fdb_large_groups``
|
||||
- u32
|
||||
- driverinit
|
||||
- Control the number of large groups (size > 1) in the FDB table.
|
||||
|
||||
* The default value is 15, and the range is between 1 and 1024.
|
||||
|
||||
The ``mlx5`` driver supports reloading via ``DEVLINK_CMD_RELOAD``
|
||||
|
||||
|
@ -189,6 +189,21 @@ Userspace to kernel:
|
||||
``ETHTOOL_MSG_DEBUG_SET`` set debugging settings
|
||||
``ETHTOOL_MSG_WOL_GET`` get wake-on-lan settings
|
||||
``ETHTOOL_MSG_WOL_SET`` set wake-on-lan settings
|
||||
``ETHTOOL_MSG_FEATURES_GET`` get device features
|
||||
``ETHTOOL_MSG_FEATURES_SET`` set device features
|
||||
``ETHTOOL_MSG_PRIVFLAGS_GET`` get private flags
|
||||
``ETHTOOL_MSG_PRIVFLAGS_SET`` set private flags
|
||||
``ETHTOOL_MSG_RINGS_GET`` get ring sizes
|
||||
``ETHTOOL_MSG_RINGS_SET`` set ring sizes
|
||||
``ETHTOOL_MSG_CHANNELS_GET`` get channel counts
|
||||
``ETHTOOL_MSG_CHANNELS_SET`` set channel counts
|
||||
``ETHTOOL_MSG_COALESCE_GET`` get coalescing parameters
|
||||
``ETHTOOL_MSG_COALESCE_SET`` set coalescing parameters
|
||||
``ETHTOOL_MSG_PAUSE_GET`` get pause parameters
|
||||
``ETHTOOL_MSG_PAUSE_SET`` set pause parameters
|
||||
``ETHTOOL_MSG_EEE_GET`` get EEE settings
|
||||
``ETHTOOL_MSG_EEE_SET`` set EEE settings
|
||||
``ETHTOOL_MSG_TSINFO_GET`` get timestamping info
|
||||
===================================== ================================
|
||||
|
||||
Kernel to userspace:
|
||||
@ -204,6 +219,22 @@ Kernel to userspace:
|
||||
``ETHTOOL_MSG_DEBUG_NTF`` debugging settings notification
|
||||
``ETHTOOL_MSG_WOL_GET_REPLY`` wake-on-lan settings
|
||||
``ETHTOOL_MSG_WOL_NTF`` wake-on-lan settings notification
|
||||
``ETHTOOL_MSG_FEATURES_GET_REPLY`` device features
|
||||
``ETHTOOL_MSG_FEATURES_SET_REPLY`` optional reply to FEATURES_SET
|
||||
``ETHTOOL_MSG_FEATURES_NTF`` netdev features notification
|
||||
``ETHTOOL_MSG_PRIVFLAGS_GET_REPLY`` private flags
|
||||
``ETHTOOL_MSG_PRIVFLAGS_NTF`` private flags
|
||||
``ETHTOOL_MSG_RINGS_GET_REPLY`` ring sizes
|
||||
``ETHTOOL_MSG_RINGS_NTF`` ring sizes
|
||||
``ETHTOOL_MSG_CHANNELS_GET_REPLY`` channel counts
|
||||
``ETHTOOL_MSG_CHANNELS_NTF`` channel counts
|
||||
``ETHTOOL_MSG_COALESCE_GET_REPLY`` coalescing parameters
|
||||
``ETHTOOL_MSG_COALESCE_NTF`` coalescing parameters
|
||||
``ETHTOOL_MSG_PAUSE_GET_REPLY`` pause parameters
|
||||
``ETHTOOL_MSG_PAUSE_NTF`` pause parameters
|
||||
``ETHTOOL_MSG_EEE_GET_REPLY`` EEE settings
|
||||
``ETHTOOL_MSG_EEE_NTF`` EEE settings
|
||||
``ETHTOOL_MSG_TSINFO_GET_REPLY`` timestamping info
|
||||
===================================== =================================
|
||||
|
||||
``GET`` requests are sent by userspace applications to retrieve device
|
||||
@ -521,6 +552,410 @@ Request contents:
|
||||
``WAKE_MAGICSECURE`` mode.
|
||||
|
||||
|
||||
FEATURES_GET
|
||||
============
|
||||
|
||||
Gets netdev features like ``ETHTOOL_GFEATURES`` ioctl request.
|
||||
|
||||
Request contents:
|
||||
|
||||
==================================== ====== ==========================
|
||||
``ETHTOOL_A_FEATURES_HEADER`` nested request header
|
||||
==================================== ====== ==========================
|
||||
|
||||
Kernel response contents:
|
||||
|
||||
==================================== ====== ==========================
|
||||
``ETHTOOL_A_FEATURES_HEADER`` nested reply header
|
||||
``ETHTOOL_A_FEATURES_HW`` bitset dev->hw_features
|
||||
``ETHTOOL_A_FEATURES_WANTED`` bitset dev->wanted_features
|
||||
``ETHTOOL_A_FEATURES_ACTIVE`` bitset dev->features
|
||||
``ETHTOOL_A_FEATURES_NOCHANGE`` bitset NETIF_F_NEVER_CHANGE
|
||||
==================================== ====== ==========================
|
||||
|
||||
Bitmaps in kernel response have the same meaning as bitmaps used in ioctl
|
||||
interference but attribute names are different (they are based on
|
||||
corresponding members of struct net_device). Legacy "flags" are not provided,
|
||||
if userspace needs them (most likely only ethtool for backward compatibility),
|
||||
it can calculate their values from related feature bits itself.
|
||||
ETHA_FEATURES_HW uses mask consisting of all features recognized by kernel (to
|
||||
provide all names when using verbose bitmap format), the other three use no
|
||||
mask (simple bit lists).
|
||||
|
||||
|
||||
FEATURES_SET
|
||||
============
|
||||
|
||||
Request to set netdev features like ``ETHTOOL_SFEATURES`` ioctl request.
|
||||
|
||||
Request contents:
|
||||
|
||||
==================================== ====== ==========================
|
||||
``ETHTOOL_A_FEATURES_HEADER`` nested request header
|
||||
``ETHTOOL_A_FEATURES_WANTED`` bitset requested features
|
||||
==================================== ====== ==========================
|
||||
|
||||
Kernel response contents:
|
||||
|
||||
==================================== ====== ==========================
|
||||
``ETHTOOL_A_FEATURES_HEADER`` nested reply header
|
||||
``ETHTOOL_A_FEATURES_WANTED`` bitset diff wanted vs. result
|
||||
``ETHTOOL_A_FEATURES_ACTIVE`` bitset diff old vs. new active
|
||||
==================================== ====== ==========================
|
||||
|
||||
Request constains only one bitset which can be either value/mask pair (request
|
||||
to change specific feature bits and leave the rest) or only a value (request
|
||||
to set all features to specified set).
|
||||
|
||||
As request is subject to netdev_change_features() sanity checks, optional
|
||||
kernel reply (can be suppressed by ``ETHTOOL_FLAG_OMIT_REPLY`` flag in request
|
||||
header) informs client about the actual result. ``ETHTOOL_A_FEATURES_WANTED``
|
||||
reports the difference between client request and actual result: mask consists
|
||||
of bits which differ between requested features and result (dev->features
|
||||
after the operation), value consists of values of these bits in the request
|
||||
(i.e. negated values from resulting features). ``ETHTOOL_A_FEATURES_ACTIVE``
|
||||
reports the difference between old and new dev->features: mask consists of
|
||||
bits which have changed, values are their values in new dev->features (after
|
||||
the operation).
|
||||
|
||||
``ETHTOOL_MSG_FEATURES_NTF`` notification is sent not only if device features
|
||||
are modified using ``ETHTOOL_MSG_FEATURES_SET`` request or on of ethtool ioctl
|
||||
request but also each time features are modified with netdev_update_features()
|
||||
or netdev_change_features().
|
||||
|
||||
|
||||
PRIVFLAGS_GET
|
||||
=============
|
||||
|
||||
Gets private flags like ``ETHTOOL_GPFLAGS`` ioctl request.
|
||||
|
||||
Request contents:
|
||||
|
||||
==================================== ====== ==========================
|
||||
``ETHTOOL_A_PRIVFLAGS_HEADER`` nested request header
|
||||
==================================== ====== ==========================
|
||||
|
||||
Kernel response contents:
|
||||
|
||||
==================================== ====== ==========================
|
||||
``ETHTOOL_A_PRIVFLAGS_HEADER`` nested reply header
|
||||
``ETHTOOL_A_PRIVFLAGS_FLAGS`` bitset private flags
|
||||
==================================== ====== ==========================
|
||||
|
||||
``ETHTOOL_A_PRIVFLAGS_FLAGS`` is a bitset with values of device private flags.
|
||||
These flags are defined by driver, their number and names (and also meaning)
|
||||
are device dependent. For compact bitset format, names can be retrieved as
|
||||
``ETH_SS_PRIV_FLAGS`` string set. If verbose bitset format is requested,
|
||||
response uses all private flags supported by the device as mask so that client
|
||||
gets the full information without having to fetch the string set with names.
|
||||
|
||||
|
||||
PRIVFLAGS_SET
|
||||
=============
|
||||
|
||||
Sets or modifies values of device private flags like ``ETHTOOL_SPFLAGS``
|
||||
ioctl request.
|
||||
|
||||
Request contents:
|
||||
|
||||
==================================== ====== ==========================
|
||||
``ETHTOOL_A_PRIVFLAGS_HEADER`` nested request header
|
||||
``ETHTOOL_A_PRIVFLAGS_FLAGS`` bitset private flags
|
||||
==================================== ====== ==========================
|
||||
|
||||
``ETHTOOL_A_PRIVFLAGS_FLAGS`` can either set the whole set of private flags or
|
||||
modify only values of some of them.
|
||||
|
||||
|
||||
RINGS_GET
|
||||
=========
|
||||
|
||||
Gets ring sizes like ``ETHTOOL_GRINGPARAM`` ioctl request.
|
||||
|
||||
Request contents:
|
||||
|
||||
==================================== ====== ==========================
|
||||
``ETHTOOL_A_RINGS_HEADER`` nested request header
|
||||
==================================== ====== ==========================
|
||||
|
||||
Kernel response contents:
|
||||
|
||||
==================================== ====== ==========================
|
||||
``ETHTOOL_A_RINGS_HEADER`` nested reply header
|
||||
``ETHTOOL_A_RINGS_RX_MAX`` u32 max size of RX ring
|
||||
``ETHTOOL_A_RINGS_RX_MINI_MAX`` u32 max size of RX mini ring
|
||||
``ETHTOOL_A_RINGS_RX_JUMBO_MAX`` u32 max size of RX jumbo ring
|
||||
``ETHTOOL_A_RINGS_TX_MAX`` u32 max size of TX ring
|
||||
``ETHTOOL_A_RINGS_RX`` u32 size of RX ring
|
||||
``ETHTOOL_A_RINGS_RX_MINI`` u32 size of RX mini ring
|
||||
``ETHTOOL_A_RINGS_RX_JUMBO`` u32 size of RX jumbo ring
|
||||
``ETHTOOL_A_RINGS_TX`` u32 size of TX ring
|
||||
==================================== ====== ==========================
|
||||
|
||||
|
||||
RINGS_SET
|
||||
=========
|
||||
|
||||
Sets ring sizes like ``ETHTOOL_SRINGPARAM`` ioctl request.
|
||||
|
||||
Request contents:
|
||||
|
||||
==================================== ====== ==========================
|
||||
``ETHTOOL_A_RINGS_HEADER`` nested reply header
|
||||
``ETHTOOL_A_RINGS_RX`` u32 size of RX ring
|
||||
``ETHTOOL_A_RINGS_RX_MINI`` u32 size of RX mini ring
|
||||
``ETHTOOL_A_RINGS_RX_JUMBO`` u32 size of RX jumbo ring
|
||||
``ETHTOOL_A_RINGS_TX`` u32 size of TX ring
|
||||
==================================== ====== ==========================
|
||||
|
||||
Kernel checks that requested ring sizes do not exceed limits reported by
|
||||
driver. Driver may impose additional constraints and may not suspport all
|
||||
attributes.
|
||||
|
||||
|
||||
CHANNELS_GET
|
||||
============
|
||||
|
||||
Gets channel counts like ``ETHTOOL_GCHANNELS`` ioctl request.
|
||||
|
||||
Request contents:
|
||||
|
||||
==================================== ====== ==========================
|
||||
``ETHTOOL_A_CHANNELS_HEADER`` nested request header
|
||||
==================================== ====== ==========================
|
||||
|
||||
Kernel response contents:
|
||||
|
||||
===================================== ====== ==========================
|
||||
``ETHTOOL_A_CHANNELS_HEADER`` nested reply header
|
||||
``ETHTOOL_A_CHANNELS_RX_MAX`` u32 max receive channels
|
||||
``ETHTOOL_A_CHANNELS_TX_MAX`` u32 max transmit channels
|
||||
``ETHTOOL_A_CHANNELS_OTHER_MAX`` u32 max other channels
|
||||
``ETHTOOL_A_CHANNELS_COMBINED_MAX`` u32 max combined channels
|
||||
``ETHTOOL_A_CHANNELS_RX_COUNT`` u32 receive channel count
|
||||
``ETHTOOL_A_CHANNELS_TX_COUNT`` u32 transmit channel count
|
||||
``ETHTOOL_A_CHANNELS_OTHER_COUNT`` u32 other channel count
|
||||
``ETHTOOL_A_CHANNELS_COMBINED_COUNT`` u32 combined channel count
|
||||
===================================== ====== ==========================
|
||||
|
||||
|
||||
CHANNELS_SET
|
||||
============
|
||||
|
||||
Sets channel counts like ``ETHTOOL_SCHANNELS`` ioctl request.
|
||||
|
||||
Request contents:
|
||||
|
||||
===================================== ====== ==========================
|
||||
``ETHTOOL_A_CHANNELS_HEADER`` nested request header
|
||||
``ETHTOOL_A_CHANNELS_RX_COUNT`` u32 receive channel count
|
||||
``ETHTOOL_A_CHANNELS_TX_COUNT`` u32 transmit channel count
|
||||
``ETHTOOL_A_CHANNELS_OTHER_COUNT`` u32 other channel count
|
||||
``ETHTOOL_A_CHANNELS_COMBINED_COUNT`` u32 combined channel count
|
||||
===================================== ====== ==========================
|
||||
|
||||
Kernel checks that requested channel counts do not exceed limits reported by
|
||||
driver. Driver may impose additional constraints and may not suspport all
|
||||
attributes.
|
||||
|
||||
|
||||
COALESCE_GET
|
||||
============
|
||||
|
||||
Gets coalescing parameters like ``ETHTOOL_GCOALESCE`` ioctl request.
|
||||
|
||||
Request contents:
|
||||
|
||||
==================================== ====== ==========================
|
||||
``ETHTOOL_A_COALESCE_HEADER`` nested request header
|
||||
==================================== ====== ==========================
|
||||
|
||||
Kernel response contents:
|
||||
|
||||
=========================================== ====== =======================
|
||||
``ETHTOOL_A_COALESCE_HEADER`` nested reply header
|
||||
``ETHTOOL_A_COALESCE_RX_USECS`` u32 delay (us), normal Rx
|
||||
``ETHTOOL_A_COALESCE_RX_MAX_FRAMES`` u32 max packets, normal Rx
|
||||
``ETHTOOL_A_COALESCE_RX_USECS_IRQ`` u32 delay (us), Rx in IRQ
|
||||
``ETHTOOL_A_COALESCE_RX_MAX_FRAMES_IRQ`` u32 max packets, Rx in IRQ
|
||||
``ETHTOOL_A_COALESCE_TX_USECS`` u32 delay (us), normal Tx
|
||||
``ETHTOOL_A_COALESCE_TX_MAX_FRAMES`` u32 max packets, normal Tx
|
||||
``ETHTOOL_A_COALESCE_TX_USECS_IRQ`` u32 delay (us), Tx in IRQ
|
||||
``ETHTOOL_A_COALESCE_TX_MAX_FRAMES_IRQ`` u32 IRQ packets, Tx in IRQ
|
||||
``ETHTOOL_A_COALESCE_STATS_BLOCK_USECS`` u32 delay of stats update
|
||||
``ETHTOOL_A_COALESCE_USE_ADAPTIVE_RX`` bool adaptive Rx coalesce
|
||||
``ETHTOOL_A_COALESCE_USE_ADAPTIVE_TX`` bool adaptive Tx coalesce
|
||||
``ETHTOOL_A_COALESCE_PKT_RATE_LOW`` u32 threshold for low rate
|
||||
``ETHTOOL_A_COALESCE_RX_USECS_LOW`` u32 delay (us), low Rx
|
||||
``ETHTOOL_A_COALESCE_RX_MAX_FRAMES_LOW`` u32 max packets, low Rx
|
||||
``ETHTOOL_A_COALESCE_TX_USECS_LOW`` u32 delay (us), low Tx
|
||||
``ETHTOOL_A_COALESCE_TX_MAX_FRAMES_LOW`` u32 max packets, low Tx
|
||||
``ETHTOOL_A_COALESCE_PKT_RATE_HIGH`` u32 threshold for high rate
|
||||
``ETHTOOL_A_COALESCE_RX_USECS_HIGH`` u32 delay (us), high Rx
|
||||
``ETHTOOL_A_COALESCE_RX_MAX_FRAMES_HIGH`` u32 max packets, high Rx
|
||||
``ETHTOOL_A_COALESCE_TX_USECS_HIGH`` u32 delay (us), high Tx
|
||||
``ETHTOOL_A_COALESCE_TX_MAX_FRAMES_HIGH`` u32 max packets, high Tx
|
||||
``ETHTOOL_A_COALESCE_RATE_SAMPLE_INTERVAL`` u32 rate sampling interval
|
||||
=========================================== ====== =======================
|
||||
|
||||
Attributes are only included in reply if their value is not zero or the
|
||||
corresponding bit in ``ethtool_ops::supported_coalesce_params`` is set (i.e.
|
||||
they are declared as supported by driver).
|
||||
|
||||
|
||||
COALESCE_SET
|
||||
============
|
||||
|
||||
Sets coalescing parameters like ``ETHTOOL_SCOALESCE`` ioctl request.
|
||||
|
||||
Request contents:
|
||||
|
||||
=========================================== ====== =======================
|
||||
``ETHTOOL_A_COALESCE_HEADER`` nested request header
|
||||
``ETHTOOL_A_COALESCE_RX_USECS`` u32 delay (us), normal Rx
|
||||
``ETHTOOL_A_COALESCE_RX_MAX_FRAMES`` u32 max packets, normal Rx
|
||||
``ETHTOOL_A_COALESCE_RX_USECS_IRQ`` u32 delay (us), Rx in IRQ
|
||||
``ETHTOOL_A_COALESCE_RX_MAX_FRAMES_IRQ`` u32 max packets, Rx in IRQ
|
||||
``ETHTOOL_A_COALESCE_TX_USECS`` u32 delay (us), normal Tx
|
||||
``ETHTOOL_A_COALESCE_TX_MAX_FRAMES`` u32 max packets, normal Tx
|
||||
``ETHTOOL_A_COALESCE_TX_USECS_IRQ`` u32 delay (us), Tx in IRQ
|
||||
``ETHTOOL_A_COALESCE_TX_MAX_FRAMES_IRQ`` u32 IRQ packets, Tx in IRQ
|
||||
``ETHTOOL_A_COALESCE_STATS_BLOCK_USECS`` u32 delay of stats update
|
||||
``ETHTOOL_A_COALESCE_USE_ADAPTIVE_RX`` bool adaptive Rx coalesce
|
||||
``ETHTOOL_A_COALESCE_USE_ADAPTIVE_TX`` bool adaptive Tx coalesce
|
||||
``ETHTOOL_A_COALESCE_PKT_RATE_LOW`` u32 threshold for low rate
|
||||
``ETHTOOL_A_COALESCE_RX_USECS_LOW`` u32 delay (us), low Rx
|
||||
``ETHTOOL_A_COALESCE_RX_MAX_FRAMES_LOW`` u32 max packets, low Rx
|
||||
``ETHTOOL_A_COALESCE_TX_USECS_LOW`` u32 delay (us), low Tx
|
||||
``ETHTOOL_A_COALESCE_TX_MAX_FRAMES_LOW`` u32 max packets, low Tx
|
||||
``ETHTOOL_A_COALESCE_PKT_RATE_HIGH`` u32 threshold for high rate
|
||||
``ETHTOOL_A_COALESCE_RX_USECS_HIGH`` u32 delay (us), high Rx
|
||||
``ETHTOOL_A_COALESCE_RX_MAX_FRAMES_HIGH`` u32 max packets, high Rx
|
||||
``ETHTOOL_A_COALESCE_TX_USECS_HIGH`` u32 delay (us), high Tx
|
||||
``ETHTOOL_A_COALESCE_TX_MAX_FRAMES_HIGH`` u32 max packets, high Tx
|
||||
``ETHTOOL_A_COALESCE_RATE_SAMPLE_INTERVAL`` u32 rate sampling interval
|
||||
=========================================== ====== =======================
|
||||
|
||||
Request is rejected if it attributes declared as unsupported by driver (i.e.
|
||||
such that the corresponding bit in ``ethtool_ops::supported_coalesce_params``
|
||||
is not set), regardless of their values. Driver may impose additional
|
||||
constraints on coalescing parameters and their values.
|
||||
|
||||
|
||||
PAUSE_GET
|
||||
============
|
||||
|
||||
Gets channel counts like ``ETHTOOL_GPAUSE`` ioctl request.
|
||||
|
||||
Request contents:
|
||||
|
||||
===================================== ====== ==========================
|
||||
``ETHTOOL_A_PAUSE_HEADER`` nested request header
|
||||
===================================== ====== ==========================
|
||||
|
||||
Kernel response contents:
|
||||
|
||||
===================================== ====== ==========================
|
||||
``ETHTOOL_A_PAUSE_HEADER`` nested request header
|
||||
``ETHTOOL_A_PAUSE_AUTONEG`` bool pause autonegotiation
|
||||
``ETHTOOL_A_PAUSE_RX`` bool receive pause frames
|
||||
``ETHTOOL_A_PAUSE_TX`` bool transmit pause frames
|
||||
===================================== ====== ==========================
|
||||
|
||||
|
||||
PAUSE_SET
|
||||
============
|
||||
|
||||
Sets pause parameters like ``ETHTOOL_GPAUSEPARAM`` ioctl request.
|
||||
|
||||
Request contents:
|
||||
|
||||
===================================== ====== ==========================
|
||||
``ETHTOOL_A_PAUSE_HEADER`` nested request header
|
||||
``ETHTOOL_A_PAUSE_AUTONEG`` bool pause autonegotiation
|
||||
``ETHTOOL_A_PAUSE_RX`` bool receive pause frames
|
||||
``ETHTOOL_A_PAUSE_TX`` bool transmit pause frames
|
||||
===================================== ====== ==========================
|
||||
|
||||
|
||||
EEE_GET
|
||||
=======
|
||||
|
||||
Gets channel counts like ``ETHTOOL_GEEE`` ioctl request.
|
||||
|
||||
Request contents:
|
||||
|
||||
===================================== ====== ==========================
|
||||
``ETHTOOL_A_EEE_HEADER`` nested request header
|
||||
===================================== ====== ==========================
|
||||
|
||||
Kernel response contents:
|
||||
|
||||
===================================== ====== ==========================
|
||||
``ETHTOOL_A_EEE_HEADER`` nested request header
|
||||
``ETHTOOL_A_EEE_MODES_OURS`` bool supported/advertised modes
|
||||
``ETHTOOL_A_EEE_MODES_PEER`` bool peer advertised link modes
|
||||
``ETHTOOL_A_EEE_ACTIVE`` bool EEE is actively used
|
||||
``ETHTOOL_A_EEE_ENABLED`` bool EEE is enabled
|
||||
``ETHTOOL_A_EEE_TX_LPI_ENABLED`` bool Tx lpi enabled
|
||||
``ETHTOOL_A_EEE_TX_LPI_TIMER`` u32 Tx lpi timeout (in us)
|
||||
===================================== ====== ==========================
|
||||
|
||||
In ``ETHTOOL_A_EEE_MODES_OURS``, mask consists of link modes for which EEE is
|
||||
enabled, value of link modes for which EEE is advertised. Link modes for which
|
||||
peer advertises EEE are listed in ``ETHTOOL_A_EEE_MODES_PEER`` (no mask). The
|
||||
netlink interface allows reporting EEE status for all link modes but only
|
||||
first 32 are provided by the ``ethtool_ops`` callback.
|
||||
|
||||
|
||||
EEE_SET
|
||||
=======
|
||||
|
||||
Sets pause parameters like ``ETHTOOL_GEEEPARAM`` ioctl request.
|
||||
|
||||
Request contents:
|
||||
|
||||
===================================== ====== ==========================
|
||||
``ETHTOOL_A_EEE_HEADER`` nested request header
|
||||
``ETHTOOL_A_EEE_MODES_OURS`` bool advertised modes
|
||||
``ETHTOOL_A_EEE_ENABLED`` bool EEE is enabled
|
||||
``ETHTOOL_A_EEE_TX_LPI_ENABLED`` bool Tx lpi enabled
|
||||
``ETHTOOL_A_EEE_TX_LPI_TIMER`` u32 Tx lpi timeout (in us)
|
||||
===================================== ====== ==========================
|
||||
|
||||
``ETHTOOL_A_EEE_MODES_OURS`` is used to either list link modes to advertise
|
||||
EEE for (if there is no mask) or specify changes to the list (if there is
|
||||
a mask). The netlink interface allows reporting EEE status for all link modes
|
||||
but only first 32 can be set at the moment as that is what the ``ethtool_ops``
|
||||
callback supports.
|
||||
|
||||
|
||||
TSINFO_GET
|
||||
==========
|
||||
|
||||
Gets timestamping information like ``ETHTOOL_GET_TS_INFO`` ioctl request.
|
||||
|
||||
Request contents:
|
||||
|
||||
===================================== ====== ==========================
|
||||
``ETHTOOL_A_TSINFO_HEADER`` nested request header
|
||||
===================================== ====== ==========================
|
||||
|
||||
Kernel response contents:
|
||||
|
||||
===================================== ====== ==========================
|
||||
``ETHTOOL_A_TSINFO_HEADER`` nested request header
|
||||
``ETHTOOL_A_TSINFO_TIMESTAMPING`` bitset SO_TIMESTAMPING flags
|
||||
``ETHTOOL_A_TSINFO_TX_TYPES`` bitset supported Tx types
|
||||
``ETHTOOL_A_TSINFO_RX_FILTERS`` bitset supported Rx filters
|
||||
``ETHTOOL_A_TSINFO_PHC_INDEX`` u32 PTP hw clock index
|
||||
===================================== ====== ==========================
|
||||
|
||||
``ETHTOOL_A_TSINFO_PHC_INDEX`` is absent if there is no associated PHC (there
|
||||
is no special value for this case). The bitset attributes are omitted if they
|
||||
would be empty (no bit set).
|
||||
|
||||
|
||||
Request translation
|
||||
===================
|
||||
|
||||
@ -545,37 +980,37 @@ have their netlink replacement yet.
|
||||
``ETHTOOL_GLINK`` ``ETHTOOL_MSG_LINKSTATE_GET``
|
||||
``ETHTOOL_GEEPROM`` n/a
|
||||
``ETHTOOL_SEEPROM`` n/a
|
||||
``ETHTOOL_GCOALESCE`` n/a
|
||||
``ETHTOOL_SCOALESCE`` n/a
|
||||
``ETHTOOL_GRINGPARAM`` n/a
|
||||
``ETHTOOL_SRINGPARAM`` n/a
|
||||
``ETHTOOL_GPAUSEPARAM`` n/a
|
||||
``ETHTOOL_SPAUSEPARAM`` n/a
|
||||
``ETHTOOL_GRXCSUM`` n/a
|
||||
``ETHTOOL_SRXCSUM`` n/a
|
||||
``ETHTOOL_GTXCSUM`` n/a
|
||||
``ETHTOOL_STXCSUM`` n/a
|
||||
``ETHTOOL_GSG`` n/a
|
||||
``ETHTOOL_SSG`` n/a
|
||||
``ETHTOOL_GCOALESCE`` ``ETHTOOL_MSG_COALESCE_GET``
|
||||
``ETHTOOL_SCOALESCE`` ``ETHTOOL_MSG_COALESCE_SET``
|
||||
``ETHTOOL_GRINGPARAM`` ``ETHTOOL_MSG_RINGS_GET``
|
||||
``ETHTOOL_SRINGPARAM`` ``ETHTOOL_MSG_RINGS_SET``
|
||||
``ETHTOOL_GPAUSEPARAM`` ``ETHTOOL_MSG_PAUSE_GET``
|
||||
``ETHTOOL_SPAUSEPARAM`` ``ETHTOOL_MSG_PAUSE_SET``
|
||||
``ETHTOOL_GRXCSUM`` ``ETHTOOL_MSG_FEATURES_GET``
|
||||
``ETHTOOL_SRXCSUM`` ``ETHTOOL_MSG_FEATURES_SET``
|
||||
``ETHTOOL_GTXCSUM`` ``ETHTOOL_MSG_FEATURES_GET``
|
||||
``ETHTOOL_STXCSUM`` ``ETHTOOL_MSG_FEATURES_SET``
|
||||
``ETHTOOL_GSG`` ``ETHTOOL_MSG_FEATURES_GET``
|
||||
``ETHTOOL_SSG`` ``ETHTOOL_MSG_FEATURES_SET``
|
||||
``ETHTOOL_TEST`` n/a
|
||||
``ETHTOOL_GSTRINGS`` ``ETHTOOL_MSG_STRSET_GET``
|
||||
``ETHTOOL_PHYS_ID`` n/a
|
||||
``ETHTOOL_GSTATS`` n/a
|
||||
``ETHTOOL_GTSO`` n/a
|
||||
``ETHTOOL_STSO`` n/a
|
||||
``ETHTOOL_GTSO`` ``ETHTOOL_MSG_FEATURES_GET``
|
||||
``ETHTOOL_STSO`` ``ETHTOOL_MSG_FEATURES_SET``
|
||||
``ETHTOOL_GPERMADDR`` rtnetlink ``RTM_GETLINK``
|
||||
``ETHTOOL_GUFO`` n/a
|
||||
``ETHTOOL_SUFO`` n/a
|
||||
``ETHTOOL_GGSO`` n/a
|
||||
``ETHTOOL_SGSO`` n/a
|
||||
``ETHTOOL_GFLAGS`` n/a
|
||||
``ETHTOOL_SFLAGS`` n/a
|
||||
``ETHTOOL_GPFLAGS`` n/a
|
||||
``ETHTOOL_SPFLAGS`` n/a
|
||||
``ETHTOOL_GUFO`` ``ETHTOOL_MSG_FEATURES_GET``
|
||||
``ETHTOOL_SUFO`` ``ETHTOOL_MSG_FEATURES_SET``
|
||||
``ETHTOOL_GGSO`` ``ETHTOOL_MSG_FEATURES_GET``
|
||||
``ETHTOOL_SGSO`` ``ETHTOOL_MSG_FEATURES_SET``
|
||||
``ETHTOOL_GFLAGS`` ``ETHTOOL_MSG_FEATURES_GET``
|
||||
``ETHTOOL_SFLAGS`` ``ETHTOOL_MSG_FEATURES_SET``
|
||||
``ETHTOOL_GPFLAGS`` ``ETHTOOL_MSG_PRIVFLAGS_GET``
|
||||
``ETHTOOL_SPFLAGS`` ``ETHTOOL_MSG_PRIVFLAGS_SET``
|
||||
``ETHTOOL_GRXFH`` n/a
|
||||
``ETHTOOL_SRXFH`` n/a
|
||||
``ETHTOOL_GGRO`` n/a
|
||||
``ETHTOOL_SGRO`` n/a
|
||||
``ETHTOOL_GGRO`` ``ETHTOOL_MSG_FEATURES_GET``
|
||||
``ETHTOOL_SGRO`` ``ETHTOOL_MSG_FEATURES_SET``
|
||||
``ETHTOOL_GRXRINGS`` n/a
|
||||
``ETHTOOL_GRXCLSRLCNT`` n/a
|
||||
``ETHTOOL_GRXCLSRULE`` n/a
|
||||
@ -589,18 +1024,18 @@ have their netlink replacement yet.
|
||||
``ETHTOOL_GSSET_INFO`` ``ETHTOOL_MSG_STRSET_GET``
|
||||
``ETHTOOL_GRXFHINDIR`` n/a
|
||||
``ETHTOOL_SRXFHINDIR`` n/a
|
||||
``ETHTOOL_GFEATURES`` n/a
|
||||
``ETHTOOL_SFEATURES`` n/a
|
||||
``ETHTOOL_GCHANNELS`` n/a
|
||||
``ETHTOOL_SCHANNELS`` n/a
|
||||
``ETHTOOL_GFEATURES`` ``ETHTOOL_MSG_FEATURES_GET``
|
||||
``ETHTOOL_SFEATURES`` ``ETHTOOL_MSG_FEATURES_SET``
|
||||
``ETHTOOL_GCHANNELS`` ``ETHTOOL_MSG_CHANNELS_GET``
|
||||
``ETHTOOL_SCHANNELS`` ``ETHTOOL_MSG_CHANNELS_SET``
|
||||
``ETHTOOL_SET_DUMP`` n/a
|
||||
``ETHTOOL_GET_DUMP_FLAG`` n/a
|
||||
``ETHTOOL_GET_DUMP_DATA`` n/a
|
||||
``ETHTOOL_GET_TS_INFO`` n/a
|
||||
``ETHTOOL_GET_TS_INFO`` ``ETHTOOL_MSG_TSINFO_GET``
|
||||
``ETHTOOL_GMODULEINFO`` n/a
|
||||
``ETHTOOL_GMODULEEEPROM`` n/a
|
||||
``ETHTOOL_GEEE`` n/a
|
||||
``ETHTOOL_SEEE`` n/a
|
||||
``ETHTOOL_GEEE`` ``ETHTOOL_MSG_EEE_GET``
|
||||
``ETHTOOL_SEEE`` ``ETHTOOL_MSG_EEE_SET``
|
||||
``ETHTOOL_GRSSH`` n/a
|
||||
``ETHTOOL_SRSSH`` n/a
|
||||
``ETHTOOL_GTUNABLE`` n/a
|
||||
|
@ -606,7 +606,7 @@ before a conversion to the new layout is being done behind the scenes!
|
||||
|
||||
Currently, the classic BPF format is being used for JITing on most
|
||||
32-bit architectures, whereas x86-64, aarch64, s390x, powerpc64,
|
||||
sparc64, arm32, riscv (RV64G) perform JIT compilation from eBPF
|
||||
sparc64, arm32, riscv64, riscv32 perform JIT compilation from eBPF
|
||||
instruction set.
|
||||
|
||||
Some core changes of the new internal format:
|
||||
|
@ -8,6 +8,7 @@ Contents:
|
||||
|
||||
netdev-FAQ
|
||||
af_xdp
|
||||
bareudp
|
||||
batman-adv
|
||||
can
|
||||
can_ucan_protocol
|
||||
@ -33,6 +34,7 @@ Contents:
|
||||
tls
|
||||
tls-offload
|
||||
nfc
|
||||
6lowpan
|
||||
|
||||
.. only:: subproject and html
|
||||
|
||||
|
@ -958,6 +958,15 @@ ip_nonlocal_bind - BOOLEAN
|
||||
which can be quite useful - but may break some applications.
|
||||
Default: 0
|
||||
|
||||
ip_autobind_reuse - BOOLEAN
|
||||
By default, bind() does not select the ports automatically even if
|
||||
the new socket and all sockets bound to the port have SO_REUSEADDR.
|
||||
ip_autobind_reuse allows bind() to reuse the port and this is useful
|
||||
when you use bind()+connect(), but may break some applications.
|
||||
The preferred solution is to use IP_BIND_ADDRESS_NO_PORT and this
|
||||
option should only be set by experts.
|
||||
Default: 0
|
||||
|
||||
ip_dynaddr - BOOLEAN
|
||||
If set non-zero, enables support for dynamic addresses.
|
||||
If set to a non-zero value larger than 1, a kernel log
|
||||
|
159
Documentation/networking/page_pool.rst
Normal file
159
Documentation/networking/page_pool.rst
Normal file
@ -0,0 +1,159 @@
|
||||
.. SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
=============
|
||||
Page Pool API
|
||||
=============
|
||||
|
||||
The page_pool allocator is optimized for the XDP mode that uses one frame
|
||||
per-page, but it can fallback on the regular page allocator APIs.
|
||||
|
||||
Basic use involves replacing alloc_pages() calls with the
|
||||
page_pool_alloc_pages() call. Drivers should use page_pool_dev_alloc_pages()
|
||||
replacing dev_alloc_pages().
|
||||
|
||||
API keeps track of inflight pages, in order to let API user know
|
||||
when it is safe to free a page_pool object. Thus, API users
|
||||
must run page_pool_release_page() when a page is leaving the page_pool or
|
||||
call page_pool_put_page() where appropriate in order to maintain correct
|
||||
accounting.
|
||||
|
||||
API user must call page_pool_put_page() once on a page, as it
|
||||
will either recycle the page, or in case of refcnt > 1, it will
|
||||
release the DMA mapping and inflight state accounting.
|
||||
|
||||
Architecture overview
|
||||
=====================
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
+------------------+
|
||||
| Driver |
|
||||
+------------------+
|
||||
^
|
||||
|
|
||||
|
|
||||
|
|
||||
v
|
||||
+--------------------------------------------+
|
||||
| request memory |
|
||||
+--------------------------------------------+
|
||||
^ ^
|
||||
| |
|
||||
| Pool empty | Pool has entries
|
||||
| |
|
||||
v v
|
||||
+-----------------------+ +------------------------+
|
||||
| alloc (and map) pages | | get page from cache |
|
||||
+-----------------------+ +------------------------+
|
||||
^ ^
|
||||
| |
|
||||
| cache available | No entries, refill
|
||||
| | from ptr-ring
|
||||
| |
|
||||
v v
|
||||
+-----------------+ +------------------+
|
||||
| Fast cache | | ptr-ring cache |
|
||||
+-----------------+ +------------------+
|
||||
|
||||
API interface
|
||||
=============
|
||||
The number of pools created **must** match the number of hardware queues
|
||||
unless hardware restrictions make that impossible. This would otherwise beat the
|
||||
purpose of page pool, which is allocate pages fast from cache without locking.
|
||||
This lockless guarantee naturally comes from running under a NAPI softirq.
|
||||
The protection doesn't strictly have to be NAPI, any guarantee that allocating
|
||||
a page will cause no race conditions is enough.
|
||||
|
||||
* page_pool_create(): Create a pool.
|
||||
* flags: PP_FLAG_DMA_MAP, PP_FLAG_DMA_SYNC_DEV
|
||||
* order: 2^order pages on allocation
|
||||
* pool_size: size of the ptr_ring
|
||||
* nid: preferred NUMA node for allocation
|
||||
* dev: struct device. Used on DMA operations
|
||||
* dma_dir: DMA direction
|
||||
* max_len: max DMA sync memory size
|
||||
* offset: DMA address offset
|
||||
|
||||
* page_pool_put_page(): The outcome of this depends on the page refcnt. If the
|
||||
driver bumps the refcnt > 1 this will unmap the page. If the page refcnt is 1
|
||||
the allocator owns the page and will try to recycle it in one of the pool
|
||||
caches. If PP_FLAG_DMA_SYNC_DEV is set, the page will be synced for_device
|
||||
using dma_sync_single_range_for_device().
|
||||
|
||||
* page_pool_put_full_page(): Similar to page_pool_put_page(), but will DMA sync
|
||||
for the entire memory area configured in area pool->max_len.
|
||||
|
||||
* page_pool_recycle_direct(): Similar to page_pool_put_full_page() but caller
|
||||
must guarantee safe context (e.g NAPI), since it will recycle the page
|
||||
directly into the pool fast cache.
|
||||
|
||||
* page_pool_release_page(): Unmap the page (if mapped) and account for it on
|
||||
inflight counters.
|
||||
|
||||
* page_pool_dev_alloc_pages(): Get a page from the page allocator or page_pool
|
||||
caches.
|
||||
|
||||
* page_pool_get_dma_addr(): Retrieve the stored DMA address.
|
||||
|
||||
* page_pool_get_dma_dir(): Retrieve the stored DMA direction.
|
||||
|
||||
Coding examples
|
||||
===============
|
||||
|
||||
Registration
|
||||
------------
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
/* Page pool registration */
|
||||
struct page_pool_params pp_params = { 0 };
|
||||
struct xdp_rxq_info xdp_rxq;
|
||||
int err;
|
||||
|
||||
pp_params.order = 0;
|
||||
/* internal DMA mapping in page_pool */
|
||||
pp_params.flags = PP_FLAG_DMA_MAP;
|
||||
pp_params.pool_size = DESC_NUM;
|
||||
pp_params.nid = NUMA_NO_NODE;
|
||||
pp_params.dev = priv->dev;
|
||||
pp_params.dma_dir = xdp_prog ? DMA_BIDIRECTIONAL : DMA_FROM_DEVICE;
|
||||
page_pool = page_pool_create(&pp_params);
|
||||
|
||||
err = xdp_rxq_info_reg(&xdp_rxq, ndev, 0);
|
||||
if (err)
|
||||
goto err_out;
|
||||
|
||||
err = xdp_rxq_info_reg_mem_model(&xdp_rxq, MEM_TYPE_PAGE_POOL, page_pool);
|
||||
if (err)
|
||||
goto err_out;
|
||||
|
||||
NAPI poller
|
||||
-----------
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
/* NAPI Rx poller */
|
||||
enum dma_data_direction dma_dir;
|
||||
|
||||
dma_dir = page_pool_get_dma_dir(dring->page_pool);
|
||||
while (done < budget) {
|
||||
if (some error)
|
||||
page_pool_recycle_direct(page_pool, page);
|
||||
if (packet_is_xdp) {
|
||||
if XDP_DROP:
|
||||
page_pool_recycle_direct(page_pool, page);
|
||||
} else (packet_is_skb) {
|
||||
page_pool_release_page(page_pool, page);
|
||||
new_page = page_pool_dev_alloc_pages(page_pool);
|
||||
}
|
||||
}
|
||||
|
||||
Driver unload
|
||||
-------------
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
/* Driver unload */
|
||||
page_pool_put_full_page(page_pool, page, false);
|
||||
xdp_rxq_info_unreg(&xdp_rxq);
|
@ -74,10 +74,13 @@ phylib to the sfp/phylink support. Please send patches to improve
|
||||
this documentation.
|
||||
|
||||
1. Optionally split the network driver's phylib update function into
|
||||
three parts dealing with link-down, link-up and reconfiguring the
|
||||
MAC settings. This can be done as a separate preparation commit.
|
||||
two parts dealing with link-down and link-up. This can be done as
|
||||
a separate preparation commit.
|
||||
|
||||
An example of this preparation can be found in git commit fc548b991fb0.
|
||||
An older example of this preparation can be found in git commit
|
||||
fc548b991fb0, although this was splitting into three parts; the
|
||||
link-up part now includes configuring the MAC for the link settings.
|
||||
Please see :c:func:`mac_link_up` for more information on this.
|
||||
|
||||
2. Replace::
|
||||
|
||||
@ -135,27 +138,27 @@ this documentation.
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
static int foo_ethtool_set_link_ksettings(struct net_device *dev,
|
||||
const struct ethtool_link_ksettings *cmd)
|
||||
{
|
||||
struct foo_priv *priv = netdev_priv(dev);
|
||||
static int foo_ethtool_set_link_ksettings(struct net_device *dev,
|
||||
const struct ethtool_link_ksettings *cmd)
|
||||
{
|
||||
struct foo_priv *priv = netdev_priv(dev);
|
||||
|
||||
return phylink_ethtool_ksettings_set(priv->phylink, cmd);
|
||||
}
|
||||
|
||||
return phylink_ethtool_ksettings_set(priv->phylink, cmd);
|
||||
}
|
||||
static int foo_ethtool_get_link_ksettings(struct net_device *dev,
|
||||
struct ethtool_link_ksettings *cmd)
|
||||
{
|
||||
struct foo_priv *priv = netdev_priv(dev);
|
||||
|
||||
return phylink_ethtool_ksettings_get(priv->phylink, cmd);
|
||||
}
|
||||
|
||||
static int foo_ethtool_get_link_ksettings(struct net_device *dev,
|
||||
struct ethtool_link_ksettings *cmd)
|
||||
{
|
||||
struct foo_priv *priv = netdev_priv(dev);
|
||||
|
||||
return phylink_ethtool_ksettings_get(priv->phylink, cmd);
|
||||
}
|
||||
|
||||
7. Replace the call to:
|
||||
7. Replace the call to::
|
||||
|
||||
phy_dev = of_phy_connect(dev, node, link_func, flags, phy_interface);
|
||||
|
||||
and associated code with a call to:
|
||||
and associated code with a call to::
|
||||
|
||||
err = phylink_of_phy_connect(priv->phylink, node, flags);
|
||||
|
||||
@ -207,6 +210,14 @@ this documentation.
|
||||
using. This is particularly important for in-band negotiation
|
||||
methods such as 1000base-X and SGMII.
|
||||
|
||||
The :c:func:`mac_link_up` method is used to inform the MAC that the
|
||||
link has come up. The call includes the negotiation mode and interface
|
||||
for reference only. The finalised link parameters are also supplied
|
||||
(speed, duplex and flow control/pause enablement settings) which
|
||||
should be used to configure the MAC when the MAC and PCS are not
|
||||
tightly integrated, or when the settings are not coming from in-band
|
||||
negotiation.
|
||||
|
||||
The :c:func:`mac_config` method is used to update the MAC with the
|
||||
requested state, and must avoid unnecessarily taking the link down
|
||||
when making changes to the MAC configuration. This means the
|
||||
|
@ -340,12 +340,6 @@ pointer which points to one of:
|
||||
entry->insn. It is used to distinguish page faults from machine
|
||||
check.
|
||||
|
||||
3) ``int ex_handler_ext(const struct exception_table_entry *fixup)``
|
||||
This case is used for uaccess_err ... we need to set a flag
|
||||
in the task structure. Before the handler functions existed this
|
||||
case was handled by adding a large offset to the fixup to tag
|
||||
it as special.
|
||||
|
||||
More functions can easily be added.
|
||||
|
||||
CONFIG_BUILDTIME_TABLE_SORT allows the __ex_table section to be sorted post
|
||||
|
147
MAINTAINERS
147
MAINTAINERS
@ -176,7 +176,7 @@ L: linux-wpan@vger.kernel.org
|
||||
S: Maintained
|
||||
F: net/6lowpan/
|
||||
F: include/net/6lowpan.h
|
||||
F: Documentation/networking/6lowpan.txt
|
||||
F: Documentation/networking/6lowpan.rst
|
||||
|
||||
6PACK NETWORK DRIVER FOR AX.25
|
||||
M: Andreas Koensgen <ajk@comnets.uni-bremen.de>
|
||||
@ -303,8 +303,8 @@ F: drivers/net/ethernet/alteon/acenic*
|
||||
ACER ASPIRE ONE TEMPERATURE AND FAN DRIVER
|
||||
M: Peter Kaestle <peter@piie.net>
|
||||
L: platform-driver-x86@vger.kernel.org
|
||||
W: http://piie.net/?section=acerhdf
|
||||
S: Maintained
|
||||
W: http://piie.net/?section=acerhdf
|
||||
F: drivers/platform/x86/acerhdf.c
|
||||
|
||||
ACER WMI LAPTOP EXTRAS
|
||||
@ -2766,8 +2766,8 @@ ASUS NOTEBOOKS AND EEEPC ACPI/WMI EXTRAS DRIVERS
|
||||
M: Corentin Chary <corentin.chary@gmail.com>
|
||||
L: acpi4asus-user@lists.sourceforge.net
|
||||
L: platform-driver-x86@vger.kernel.org
|
||||
W: http://acpi4asus.sf.net
|
||||
S: Maintained
|
||||
W: http://acpi4asus.sf.net
|
||||
F: drivers/platform/x86/asus*.c
|
||||
F: drivers/platform/x86/eeepc*.c
|
||||
|
||||
@ -3173,6 +3173,8 @@ R: Martin KaFai Lau <kafai@fb.com>
|
||||
R: Song Liu <songliubraving@fb.com>
|
||||
R: Yonghong Song <yhs@fb.com>
|
||||
R: Andrii Nakryiko <andriin@fb.com>
|
||||
R: John Fastabend <john.fastabend@gmail.com>
|
||||
R: KP Singh <kpsingh@chromium.org>
|
||||
L: netdev@vger.kernel.org
|
||||
L: bpf@vger.kernel.org
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf.git
|
||||
@ -3239,11 +3241,22 @@ L: bpf@vger.kernel.org
|
||||
S: Maintained
|
||||
F: arch/powerpc/net/
|
||||
|
||||
BPF JIT for RISC-V (RV64G)
|
||||
M: Björn Töpel <bjorn.topel@gmail.com>
|
||||
BPF JIT for RISC-V (32-bit)
|
||||
M: Luke Nelson <luke.r.nels@gmail.com>
|
||||
M: Xi Wang <xi.wang@gmail.com>
|
||||
L: netdev@vger.kernel.org
|
||||
L: bpf@vger.kernel.org
|
||||
S: Maintained
|
||||
F: arch/riscv/net/
|
||||
X: arch/riscv/net/bpf_jit_comp64.c
|
||||
|
||||
BPF JIT for RISC-V (64-bit)
|
||||
M: Björn Töpel <bjorn.topel@gmail.com>
|
||||
L: netdev@vger.kernel.org
|
||||
L: bpf@vger.kernel.org
|
||||
S: Maintained
|
||||
F: arch/riscv/net/
|
||||
X: arch/riscv/net/bpf_jit_comp32.c
|
||||
|
||||
BPF JIT for S390
|
||||
M: Ilya Leoshkevich <iii@linux.ibm.com>
|
||||
@ -4139,6 +4152,7 @@ B: https://github.com/ClangBuiltLinux/linux/issues
|
||||
C: irc://chat.freenode.net/clangbuiltlinux
|
||||
S: Supported
|
||||
K: \b(?i:clang|llvm)\b
|
||||
F: Documentation/kbuild/llvm.rst
|
||||
|
||||
CLEANCACHE API
|
||||
M: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
|
||||
@ -4744,26 +4758,6 @@ S: Maintained
|
||||
F: drivers/media/platform/sunxi/sun8i-di/
|
||||
F: Documentation/devicetree/bindings/media/allwinner,sun8i-h3-deinterlace.yaml
|
||||
|
||||
DELL SMBIOS DRIVER
|
||||
M: Pali Rohár <pali.rohar@gmail.com>
|
||||
M: Mario Limonciello <mario.limonciello@dell.com>
|
||||
L: platform-driver-x86@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/platform/x86/dell-smbios.*
|
||||
|
||||
DELL SMBIOS SMM DRIVER
|
||||
M: Mario Limonciello <mario.limonciello@dell.com>
|
||||
L: platform-driver-x86@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/platform/x86/dell-smbios-smm.c
|
||||
|
||||
DELL SMBIOS WMI DRIVER
|
||||
M: Mario Limonciello <mario.limonciello@dell.com>
|
||||
L: platform-driver-x86@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/platform/x86/dell-smbios-wmi.c
|
||||
F: tools/wmi/dell-smbios-example.c
|
||||
|
||||
DEFZA FDDI NETWORK DRIVER
|
||||
M: "Maciej W. Rozycki" <macro@linux-mips.org>
|
||||
S: Maintained
|
||||
@ -4786,17 +4780,37 @@ M: Pali Rohár <pali.rohar@gmail.com>
|
||||
S: Maintained
|
||||
F: drivers/platform/x86/dell-rbtn.*
|
||||
|
||||
DELL LAPTOP SMM DRIVER
|
||||
M: Pali Rohár <pali.rohar@gmail.com>
|
||||
S: Maintained
|
||||
F: drivers/hwmon/dell-smm-hwmon.c
|
||||
F: include/uapi/linux/i8k.h
|
||||
|
||||
DELL REMOTE BIOS UPDATE DRIVER
|
||||
M: Stuart Hayes <stuart.w.hayes@gmail.com>
|
||||
L: platform-driver-x86@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/platform/x86/dell_rbu.c
|
||||
|
||||
DELL LAPTOP SMM DRIVER
|
||||
DELL SMBIOS DRIVER
|
||||
M: Pali Rohár <pali.rohar@gmail.com>
|
||||
M: Mario Limonciello <mario.limonciello@dell.com>
|
||||
L: platform-driver-x86@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/hwmon/dell-smm-hwmon.c
|
||||
F: include/uapi/linux/i8k.h
|
||||
F: drivers/platform/x86/dell-smbios.*
|
||||
|
||||
DELL SMBIOS SMM DRIVER
|
||||
M: Mario Limonciello <mario.limonciello@dell.com>
|
||||
L: platform-driver-x86@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/platform/x86/dell-smbios-smm.c
|
||||
|
||||
DELL SMBIOS WMI DRIVER
|
||||
M: Mario Limonciello <mario.limonciello@dell.com>
|
||||
L: platform-driver-x86@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/platform/x86/dell-smbios-wmi.c
|
||||
F: tools/wmi/dell-smbios-example.c
|
||||
|
||||
DELL SYSTEMS MANAGEMENT BASE DRIVER (dcdbas)
|
||||
M: Stuart Hayes <stuart.w.hayes@gmail.com>
|
||||
@ -4805,17 +4819,17 @@ S: Maintained
|
||||
F: Documentation/driver-api/dcdbas.rst
|
||||
F: drivers/platform/x86/dcdbas.*
|
||||
|
||||
DELL WMI DESCRIPTOR DRIVER
|
||||
M: Mario Limonciello <mario.limonciello@dell.com>
|
||||
S: Maintained
|
||||
F: drivers/platform/x86/dell-wmi-descriptor.c
|
||||
|
||||
DELL WMI NOTIFICATIONS DRIVER
|
||||
M: Matthew Garrett <mjg59@srcf.ucam.org>
|
||||
M: Pali Rohár <pali.rohar@gmail.com>
|
||||
S: Maintained
|
||||
F: drivers/platform/x86/dell-wmi.c
|
||||
|
||||
DELL WMI DESCRIPTOR DRIVER
|
||||
M: Mario Limonciello <mario.limonciello@dell.com>
|
||||
S: Maintained
|
||||
F: drivers/platform/x86/dell-wmi-descriptor.c
|
||||
|
||||
DELTA ST MEDIA DRIVER
|
||||
M: Hugues Fruchet <hugues.fruchet@st.com>
|
||||
L: linux-media@vger.kernel.org
|
||||
@ -7374,8 +7388,8 @@ F: drivers/media/usb/hackrf/
|
||||
HARD DRIVE ACTIVE PROTECTION SYSTEM (HDAPS) DRIVER
|
||||
M: Frank Seidel <frank@f-seidel.de>
|
||||
L: platform-driver-x86@vger.kernel.org
|
||||
W: http://www.kernel.org/pub/linux/kernel/people/fseidel/hdaps/
|
||||
S: Maintained
|
||||
W: http://www.kernel.org/pub/linux/kernel/people/fseidel/hdaps/
|
||||
F: drivers/platform/x86/hdaps.c
|
||||
|
||||
HARDWARE MONITORING
|
||||
@ -7978,6 +7992,7 @@ L: linux-ia64@vger.kernel.org
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/aegl/linux.git
|
||||
S: Maintained
|
||||
F: arch/ia64/
|
||||
F: Documentation/ia64/
|
||||
|
||||
IBM Power 842 compression accelerator
|
||||
M: Haren Myneni <haren@us.ibm.com>
|
||||
@ -8117,15 +8132,15 @@ F: drivers/ide/ide-cd*
|
||||
IDEAPAD LAPTOP EXTRAS DRIVER
|
||||
M: Ike Panhc <ike.pan@canonical.com>
|
||||
L: platform-driver-x86@vger.kernel.org
|
||||
W: http://launchpad.net/ideapad-laptop
|
||||
S: Maintained
|
||||
W: http://launchpad.net/ideapad-laptop
|
||||
F: drivers/platform/x86/ideapad-laptop.c
|
||||
|
||||
IDEAPAD LAPTOP SLIDEBAR DRIVER
|
||||
M: Andrey Moiseev <o2g.org.ru@gmail.com>
|
||||
L: linux-input@vger.kernel.org
|
||||
W: https://github.com/o2genum/ideapad-slidebar
|
||||
S: Maintained
|
||||
W: https://github.com/o2genum/ideapad-slidebar
|
||||
F: drivers/input/misc/ideapad_slidebar.c
|
||||
|
||||
IDT VersaClock 5 CLOCK DRIVER
|
||||
@ -8591,8 +8606,8 @@ F: samples/mei/*
|
||||
INTEL MENLOW THERMAL DRIVER
|
||||
M: Sujith Thomas <sujith.thomas@intel.com>
|
||||
L: platform-driver-x86@vger.kernel.org
|
||||
W: https://01.org/linux-acpi
|
||||
S: Supported
|
||||
W: https://01.org/linux-acpi
|
||||
F: drivers/platform/x86/intel_menlow.c
|
||||
|
||||
INTEL MIC DRIVERS (mic)
|
||||
@ -8622,10 +8637,10 @@ INTEL PMC/P-Unit IPC DRIVER
|
||||
M: Zha Qipeng<qipeng.zha@intel.com>
|
||||
L: platform-driver-x86@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/platform/x86/intel_pmc_ipc.c
|
||||
F: drivers/platform/x86/intel_punit_ipc.c
|
||||
F: arch/x86/include/asm/intel_pmc_ipc.h
|
||||
F: arch/x86/include/asm/intel_punit_ipc.h
|
||||
F: drivers/platform/x86/intel_pmc_ipc.c
|
||||
F: drivers/platform/x86/intel_punit_ipc.c
|
||||
|
||||
INTEL PMIC GPIO DRIVERS
|
||||
M: Andy Shevchenko <andy@kernel.org>
|
||||
@ -8670,8 +8685,8 @@ M: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
|
||||
L: platform-driver-x86@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/platform/x86/intel_speed_select_if/
|
||||
F: tools/power/x86/intel-speed-select/
|
||||
F: include/uapi/linux/isst_if.h
|
||||
F: tools/power/x86/intel-speed-select/
|
||||
|
||||
INTEL STRATIX10 FIRMWARE DRIVERS
|
||||
M: Richard Gong <richard.gong@linux.intel.com>
|
||||
@ -9383,6 +9398,8 @@ F: include/net/l3mdev.h
|
||||
L7 BPF FRAMEWORK
|
||||
M: John Fastabend <john.fastabend@gmail.com>
|
||||
M: Daniel Borkmann <daniel@iogearbox.net>
|
||||
M: Jakub Sitnicki <jakub@cloudflare.com>
|
||||
M: Lorenz Bauer <lmb@cloudflare.com>
|
||||
L: netdev@vger.kernel.org
|
||||
L: bpf@vger.kernel.org
|
||||
S: Maintained
|
||||
@ -9390,6 +9407,7 @@ F: include/linux/skmsg.h
|
||||
F: net/core/skmsg.c
|
||||
F: net/core/sock_map.c
|
||||
F: net/ipv4/tcp_bpf.c
|
||||
F: net/ipv4/udp_bpf.c
|
||||
|
||||
LANTIQ / INTEL Ethernet drivers
|
||||
M: Hauke Mehrtens <hauke@hauke-m.de>
|
||||
@ -10120,6 +10138,13 @@ M: Nicolas Pitre <nico@fluxnic.net>
|
||||
S: Odd Fixes
|
||||
F: drivers/mmc/host/mvsdio.*
|
||||
|
||||
MARVELL USB MDIO CONTROLLER DRIVER
|
||||
M: Tobias Waldekranz <tobias@waldekranz.com>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/net/phy/mdio-mvusb.c
|
||||
F: Documentation/devicetree/bindings/net/marvell,mvusb.yaml
|
||||
|
||||
MARVELL XENON MMC/SD/SDIO HOST CONTROLLER DRIVER
|
||||
M: Hu Ziji <huziji@marvell.com>
|
||||
L: linux-mmc@vger.kernel.org
|
||||
@ -11202,6 +11227,7 @@ S: Maintained
|
||||
F: arch/mips/loongson64/
|
||||
F: arch/mips/include/asm/mach-loongson64/
|
||||
F: drivers/platform/mips/cpu_hwmon.c
|
||||
F: drivers/irqchip/irq-loongson*
|
||||
F: drivers/*/*loongson3*
|
||||
F: drivers/*/*/*loongson3*
|
||||
|
||||
@ -11735,6 +11761,7 @@ W: https://github.com/multipath-tcp/mptcp_net-next/wiki
|
||||
B: https://github.com/multipath-tcp/mptcp_net-next/issues
|
||||
S: Maintained
|
||||
F: include/net/mptcp.h
|
||||
F: include/uapi/linux/mptcp.h
|
||||
F: net/mptcp/
|
||||
F: tools/testing/selftests/net/mptcp/
|
||||
|
||||
@ -11899,6 +11926,7 @@ F: scripts/nsdeps
|
||||
F: Documentation/core-api/symbol-namespaces.rst
|
||||
|
||||
NTB AMD DRIVER
|
||||
M: Sanjay R Mehta <sanju.mehta@amd.com>
|
||||
M: Shyam Sundar S K <Shyam-sundar.S-k@amd.com>
|
||||
L: linux-ntb@googlegroups.com
|
||||
S: Supported
|
||||
@ -13708,6 +13736,12 @@ L: alsa-devel@alsa-project.org (moderated for non-subscribers)
|
||||
S: Supported
|
||||
F: sound/soc/qcom/
|
||||
|
||||
QCOM IPA DRIVER
|
||||
M: Alex Elder <elder@kernel.org>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Supported
|
||||
F: drivers/net/ipa/
|
||||
|
||||
QEMU MACHINE EMULATOR AND VIRTUALIZER SUPPORT
|
||||
M: Gabriel Somlo <somlo@cmu.edu>
|
||||
M: "Michael S. Tsirkin" <mst@redhat.com>
|
||||
@ -15031,7 +15065,7 @@ X: security/selinux/
|
||||
|
||||
SELINUX SECURITY MODULE
|
||||
M: Paul Moore <paul@paul-moore.com>
|
||||
M: Stephen Smalley <sds@tycho.nsa.gov>
|
||||
M: Stephen Smalley <stephen.smalley.work@gmail.com>
|
||||
M: Eric Paris <eparis@parisplace.org>
|
||||
L: selinux@vger.kernel.org
|
||||
W: https://selinuxproject.org
|
||||
@ -15043,6 +15077,7 @@ F: security/selinux/
|
||||
F: scripts/selinux/
|
||||
F: Documentation/admin-guide/LSM/SELinux.rst
|
||||
F: Documentation/ABI/obsolete/sysfs-selinux-disable
|
||||
F: Documentation/ABI/obsolete/sysfs-selinux-checkreqprot
|
||||
|
||||
SENSABLE PHANTOM
|
||||
M: Jiri Slaby <jirislaby@gmail.com>
|
||||
@ -15100,14 +15135,6 @@ M: Dimitri Sivanich <sivanich@sgi.com>
|
||||
S: Maintained
|
||||
F: drivers/misc/sgi-gru/
|
||||
|
||||
SGI SN-IA64 (Altix) SERIAL CONSOLE DRIVER
|
||||
M: Pat Gefre <pfg@sgi.com>
|
||||
L: linux-ia64@vger.kernel.org
|
||||
S: Supported
|
||||
F: Documentation/ia64/serial.rst
|
||||
F: drivers/tty/serial/ioc?_serial.c
|
||||
F: include/linux/ioc?.h
|
||||
|
||||
SGI XP/XPC/XPNET DRIVER
|
||||
M: Cliff Whickman <cpw@sgi.com>
|
||||
M: Robin Holt <robinmholt@gmail.com>
|
||||
@ -15636,8 +15663,8 @@ F: include/linux/memstick.h
|
||||
SONY VAIO CONTROL DEVICE DRIVER
|
||||
M: Mattia Dongili <malattia@linux.it>
|
||||
L: platform-driver-x86@vger.kernel.org
|
||||
W: http://www.linux.it/~malattia/wiki/index.php/Sony_drivers
|
||||
S: Maintained
|
||||
W: http://www.linux.it/~malattia/wiki/index.php/Sony_drivers
|
||||
F: Documentation/admin-guide/laptops/sony-laptop.rst
|
||||
F: drivers/char/sonypi.c
|
||||
F: drivers/platform/x86/sony-laptop.c
|
||||
@ -16184,6 +16211,13 @@ L: netdev@vger.kernel.org
|
||||
S: Supported
|
||||
F: drivers/net/ethernet/synopsys/
|
||||
|
||||
SYNOPSYS DESIGNWARE ETHERNET XPCS DRIVER
|
||||
M: Jose Abreu <Jose.Abreu@synopsys.com>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Supported
|
||||
F: drivers/net/phy/mdio-xpcs.c
|
||||
F: include/linux/mdio-xpcs.h
|
||||
|
||||
SYNOPSYS DESIGNWARE I2C DRIVER
|
||||
M: Jarkko Nikula <jarkko.nikula@linux.intel.com>
|
||||
R: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
|
||||
@ -16612,10 +16646,10 @@ THINKPAD ACPI EXTRAS DRIVER
|
||||
M: Henrique de Moraes Holschuh <ibm-acpi@hmh.eng.br>
|
||||
L: ibm-acpi-devel@lists.sourceforge.net
|
||||
L: platform-driver-x86@vger.kernel.org
|
||||
S: Maintained
|
||||
W: http://ibm-acpi.sourceforge.net
|
||||
W: http://thinkwiki.org/wiki/Ibm-acpi
|
||||
T: git git://repo.or.cz/linux-2.6/linux-acpi-2.6/ibm-acpi-2.6.git
|
||||
S: Maintained
|
||||
F: drivers/platform/x86/thinkpad_acpi.c
|
||||
|
||||
THUNDERBOLT DRIVER
|
||||
@ -17926,6 +17960,13 @@ S: Supported
|
||||
F: arch/x86/kernel/cpu/vmware.c
|
||||
F: arch/x86/include/asm/vmware.h
|
||||
|
||||
VMWARE VIRTUAL PTP CLOCK DRIVER
|
||||
M: Vivek Thampi <vithampi@vmware.com>
|
||||
M: "VMware, Inc." <pv-drivers@vmware.com>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Supported
|
||||
F: drivers/ptp/ptp_vmw.c
|
||||
|
||||
VMWARE PVRDMA DRIVER
|
||||
M: Adit Ranadive <aditr@vmware.com>
|
||||
M: VMware PV-Drivers <pv-drivers@vmware.com>
|
||||
@ -18260,10 +18301,10 @@ X86 PLATFORM DRIVERS
|
||||
M: Darren Hart <dvhart@infradead.org>
|
||||
M: Andy Shevchenko <andy@infradead.org>
|
||||
L: platform-driver-x86@vger.kernel.org
|
||||
T: git git://git.infradead.org/linux-platform-drivers-x86.git
|
||||
S: Odd Fixes
|
||||
F: drivers/platform/x86/
|
||||
T: git git://git.infradead.org/linux-platform-drivers-x86.git
|
||||
F: drivers/platform/olpc/
|
||||
F: drivers/platform/x86/
|
||||
|
||||
X86 PLATFORM DRIVERS - ARCH
|
||||
R: Darren Hart <dvhart@infradead.org>
|
||||
|
48
Makefile
48
Makefile
@ -255,7 +255,8 @@ clean-targets := %clean mrproper cleandocs
|
||||
no-dot-config-targets := $(clean-targets) \
|
||||
cscope gtags TAGS tags help% %docs check% coccicheck \
|
||||
$(version_h) headers headers_% archheaders archscripts \
|
||||
%asm-generic kernelversion %src-pkg
|
||||
%asm-generic kernelversion %src-pkg dt_binding_check \
|
||||
outputmakefile
|
||||
no-sync-config-targets := $(no-dot-config-targets) install %install \
|
||||
kernelrelease
|
||||
single-targets := %.a %.i %.ko %.lds %.ll %.lst %.mod %.o %.s %.symtypes %/
|
||||
@ -388,6 +389,9 @@ endif
|
||||
KCONFIG_CONFIG ?= .config
|
||||
export KCONFIG_CONFIG
|
||||
|
||||
# Default file for 'make defconfig'. This may be overridden by arch-Makefile.
|
||||
export KBUILD_DEFCONFIG := defconfig
|
||||
|
||||
# SHELL used by kbuild
|
||||
CONFIG_SHELL := sh
|
||||
|
||||
@ -400,12 +404,11 @@ HOSTCXX = g++
|
||||
KBUILD_HOSTCFLAGS := -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 \
|
||||
-fomit-frame-pointer -std=gnu89 $(HOST_LFS_CFLAGS) \
|
||||
$(HOSTCFLAGS)
|
||||
KBUILD_HOSTCXXFLAGS := -O2 $(HOST_LFS_CFLAGS) $(HOSTCXXFLAGS)
|
||||
KBUILD_HOSTCXXFLAGS := -Wall -O2 $(HOST_LFS_CFLAGS) $(HOSTCXXFLAGS)
|
||||
KBUILD_HOSTLDFLAGS := $(HOST_LFS_LDFLAGS) $(HOSTLDFLAGS)
|
||||
KBUILD_HOSTLDLIBS := $(HOST_LFS_LIBS) $(HOSTLDLIBS)
|
||||
|
||||
# Make variables (CC, etc...)
|
||||
AS = $(CROSS_COMPILE)as
|
||||
LD = $(CROSS_COMPILE)ld
|
||||
CC = $(CROSS_COMPILE)gcc
|
||||
CPP = $(CC) -E
|
||||
@ -472,7 +475,7 @@ KBUILD_LDFLAGS :=
|
||||
GCC_PLUGINS_CFLAGS :=
|
||||
CLANG_FLAGS :=
|
||||
|
||||
export ARCH SRCARCH CONFIG_SHELL BASH HOSTCC KBUILD_HOSTCFLAGS CROSS_COMPILE AS LD CC
|
||||
export ARCH SRCARCH CONFIG_SHELL BASH HOSTCC KBUILD_HOSTCFLAGS CROSS_COMPILE LD CC
|
||||
export CPP AR NM STRIP OBJCOPY OBJDUMP OBJSIZE READELF PAHOLE LEX YACC AWK INSTALLKERNEL
|
||||
export PERL PYTHON PYTHON3 CHECK CHECKFLAGS MAKE UTS_MACHINE HOSTCXX
|
||||
export KBUILD_HOSTCXXFLAGS KBUILD_HOSTLDFLAGS KBUILD_HOSTLDLIBS LDFLAGS_MODULE
|
||||
@ -539,7 +542,7 @@ endif
|
||||
ifneq ($(GCC_TOOLCHAIN),)
|
||||
CLANG_FLAGS += --gcc-toolchain=$(GCC_TOOLCHAIN)
|
||||
endif
|
||||
ifeq ($(shell $(AS) --version 2>&1 | head -n 1 | grep clang),)
|
||||
ifeq ($(if $(AS),$(shell $(AS) --version 2>&1 | head -n 1 | grep clang)),)
|
||||
CLANG_FLAGS += -no-integrated-as
|
||||
endif
|
||||
CLANG_FLAGS += -Werror=unknown-warning-option
|
||||
@ -688,6 +691,7 @@ $(KCONFIG_CONFIG):
|
||||
#
|
||||
# This exploits the 'multi-target pattern rule' trick.
|
||||
# The syncconfig should be executed only once to make all the targets.
|
||||
# (Note: use the grouped target '&:' when we bump to GNU Make 4.3)
|
||||
%/auto.conf %/auto.conf.cmd: $(KCONFIG_CONFIG)
|
||||
$(Q)$(MAKE) -f $(srctree)/Makefile syncconfig
|
||||
else # !may-sync-config
|
||||
@ -728,6 +732,7 @@ endif
|
||||
|
||||
# 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,-fno-allow-store-data-races)
|
||||
|
||||
include scripts/Makefile.kcov
|
||||
include scripts/Makefile.gcc-plugins
|
||||
@ -743,7 +748,7 @@ KBUILD_CFLAGS += $(call cc-option,-fno-reorder-blocks,) \
|
||||
endif
|
||||
|
||||
ifneq ($(CONFIG_FRAME_WARN),0)
|
||||
KBUILD_CFLAGS += $(call cc-option,-Wframe-larger-than=${CONFIG_FRAME_WARN})
|
||||
KBUILD_CFLAGS += -Wframe-larger-than=$(CONFIG_FRAME_WARN)
|
||||
endif
|
||||
|
||||
stackp-flags-$(CONFIG_CC_HAS_STACKPROTECTOR_NONE) := -fno-stack-protector
|
||||
@ -1307,14 +1312,18 @@ ifneq ($(dtstree),)
|
||||
$(Q)$(MAKE) $(build)=$(dtstree) $(dtstree)/$@
|
||||
|
||||
PHONY += dtbs dtbs_install dtbs_check
|
||||
dtbs dtbs_check: include/config/kernel.release scripts_dtc
|
||||
dtbs: include/config/kernel.release scripts_dtc
|
||||
$(Q)$(MAKE) $(build)=$(dtstree)
|
||||
|
||||
dtbs_check: export CHECK_DTBS=1
|
||||
dtbs_check: dt_binding_check
|
||||
ifneq ($(filter dtbs_check, $(MAKECMDGOALS)),)
|
||||
export CHECK_DTBS=y
|
||||
dtbs: dt_binding_check
|
||||
endif
|
||||
|
||||
dtbs_check: dtbs
|
||||
|
||||
dtbs_install:
|
||||
$(Q)$(MAKE) $(dtbinst)=$(dtstree)
|
||||
$(Q)$(MAKE) $(dtbinst)=$(dtstree) dst=$(INSTALL_DTBS_PATH)
|
||||
|
||||
ifdef CONFIG_OF_EARLY_FLATTREE
|
||||
all: dtbs
|
||||
@ -1326,6 +1335,10 @@ PHONY += scripts_dtc
|
||||
scripts_dtc: scripts_basic
|
||||
$(Q)$(MAKE) $(build)=scripts/dtc
|
||||
|
||||
ifneq ($(filter dt_binding_check, $(MAKECMDGOALS)),)
|
||||
export CHECK_DT_BINDING=y
|
||||
endif
|
||||
|
||||
PHONY += dt_binding_check
|
||||
dt_binding_check: scripts_dtc
|
||||
$(Q)$(MAKE) $(build)=Documentation/devicetree/bindings
|
||||
@ -1537,12 +1550,15 @@ help:
|
||||
@echo ' nsdeps - Generate missing symbol namespace dependencies'
|
||||
@echo ''
|
||||
@echo 'Kernel selftest:'
|
||||
@echo ' kselftest - Build and run kernel selftest (run as root)'
|
||||
@echo ' Build, install, and boot kernel before'
|
||||
@echo ' running kselftest on it'
|
||||
@echo ' kselftest-clean - Remove all generated kselftest files'
|
||||
@echo ' kselftest-merge - Merge all the config dependencies of kselftest to existing'
|
||||
@echo ' .config.'
|
||||
@echo ' kselftest - Build and run kernel selftest'
|
||||
@echo ' Build, install, and boot kernel before'
|
||||
@echo ' running kselftest on it'
|
||||
@echo ' Run as root for full coverage'
|
||||
@echo ' kselftest-all - Build kernel selftest'
|
||||
@echo ' kselftest-install - Build and install kernel selftest'
|
||||
@echo ' kselftest-clean - Remove all generated kselftest files'
|
||||
@echo ' kselftest-merge - Merge all the config dependencies of'
|
||||
@echo ' kselftest to existing .config.'
|
||||
@echo ''
|
||||
@$(if $(dtstree), \
|
||||
echo 'Devicetree:'; \
|
||||
|
@ -180,7 +180,7 @@ &ecspi2 {
|
||||
&fec {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_enet>;
|
||||
phy-mode = "rgmii";
|
||||
phy-mode = "rgmii-id";
|
||||
phy-handle = <ðphy>;
|
||||
phy-reset-duration = <10>;
|
||||
phy-reset-gpios = <&gpio1 25 GPIO_ACTIVE_LOW>;
|
||||
|
@ -19,176 +19,174 @@ memory {
|
||||
device_type = "memory";
|
||||
reg = <0x00000000 0x08000000>;
|
||||
};
|
||||
};
|
||||
|
||||
soc {
|
||||
apb@d4000000 {
|
||||
uart3: uart@d4018000 {
|
||||
status = "okay";
|
||||
};
|
||||
twsi1: i2c@d4011000 {
|
||||
status = "okay";
|
||||
pmic: max8925@3c {
|
||||
compatible = "maxium,max8925";
|
||||
reg = <0x3c>;
|
||||
interrupts = <1>;
|
||||
interrupt-parent = <&intcmux4>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <1>;
|
||||
maxim,tsc-irq = <0>;
|
||||
&uart3 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
regulators {
|
||||
SDV1 {
|
||||
regulator-min-microvolt = <637500>;
|
||||
regulator-max-microvolt = <1425000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
SDV2 {
|
||||
regulator-min-microvolt = <650000>;
|
||||
regulator-max-microvolt = <2225000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
SDV3 {
|
||||
regulator-min-microvolt = <750000>;
|
||||
regulator-max-microvolt = <3900000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO1 {
|
||||
regulator-min-microvolt = <750000>;
|
||||
regulator-max-microvolt = <3900000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO2 {
|
||||
regulator-min-microvolt = <650000>;
|
||||
regulator-max-microvolt = <2250000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO3 {
|
||||
regulator-min-microvolt = <650000>;
|
||||
regulator-max-microvolt = <2250000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO4 {
|
||||
regulator-min-microvolt = <750000>;
|
||||
regulator-max-microvolt = <3900000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO5 {
|
||||
regulator-min-microvolt = <750000>;
|
||||
regulator-max-microvolt = <3900000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO6 {
|
||||
regulator-min-microvolt = <750000>;
|
||||
regulator-max-microvolt = <3900000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO7 {
|
||||
regulator-min-microvolt = <750000>;
|
||||
regulator-max-microvolt = <3900000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO8 {
|
||||
regulator-min-microvolt = <750000>;
|
||||
regulator-max-microvolt = <3900000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO9 {
|
||||
regulator-min-microvolt = <750000>;
|
||||
regulator-max-microvolt = <3900000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO10 {
|
||||
regulator-min-microvolt = <750000>;
|
||||
regulator-max-microvolt = <3900000>;
|
||||
};
|
||||
LDO11 {
|
||||
regulator-min-microvolt = <750000>;
|
||||
regulator-max-microvolt = <3900000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO12 {
|
||||
regulator-min-microvolt = <750000>;
|
||||
regulator-max-microvolt = <3900000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO13 {
|
||||
regulator-min-microvolt = <750000>;
|
||||
regulator-max-microvolt = <3900000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO14 {
|
||||
regulator-min-microvolt = <750000>;
|
||||
regulator-max-microvolt = <3900000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO15 {
|
||||
regulator-min-microvolt = <750000>;
|
||||
regulator-max-microvolt = <3900000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO16 {
|
||||
regulator-min-microvolt = <750000>;
|
||||
regulator-max-microvolt = <3900000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO17 {
|
||||
regulator-min-microvolt = <650000>;
|
||||
regulator-max-microvolt = <2250000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO18 {
|
||||
regulator-min-microvolt = <650000>;
|
||||
regulator-max-microvolt = <2250000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO19 {
|
||||
regulator-min-microvolt = <750000>;
|
||||
regulator-max-microvolt = <3900000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO20 {
|
||||
regulator-min-microvolt = <750000>;
|
||||
regulator-max-microvolt = <3900000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
};
|
||||
backlight {
|
||||
maxim,max8925-dual-string = <0>;
|
||||
};
|
||||
charger {
|
||||
batt-detect = <0>;
|
||||
topoff-threshold = <1>;
|
||||
fast-charge = <7>;
|
||||
no-temp-support = <0>;
|
||||
no-insert-detect = <0>;
|
||||
};
|
||||
};
|
||||
&twsi1 {
|
||||
status = "okay";
|
||||
pmic: max8925@3c {
|
||||
compatible = "maxium,max8925";
|
||||
reg = <0x3c>;
|
||||
interrupts = <1>;
|
||||
interrupt-parent = <&intcmux4>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <1>;
|
||||
maxim,tsc-irq = <0>;
|
||||
|
||||
regulators {
|
||||
SDV1 {
|
||||
regulator-min-microvolt = <637500>;
|
||||
regulator-max-microvolt = <1425000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
rtc: rtc@d4010000 {
|
||||
status = "okay";
|
||||
SDV2 {
|
||||
regulator-min-microvolt = <650000>;
|
||||
regulator-max-microvolt = <2225000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
SDV3 {
|
||||
regulator-min-microvolt = <750000>;
|
||||
regulator-max-microvolt = <3900000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO1 {
|
||||
regulator-min-microvolt = <750000>;
|
||||
regulator-max-microvolt = <3900000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO2 {
|
||||
regulator-min-microvolt = <650000>;
|
||||
regulator-max-microvolt = <2250000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO3 {
|
||||
regulator-min-microvolt = <650000>;
|
||||
regulator-max-microvolt = <2250000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO4 {
|
||||
regulator-min-microvolt = <750000>;
|
||||
regulator-max-microvolt = <3900000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO5 {
|
||||
regulator-min-microvolt = <750000>;
|
||||
regulator-max-microvolt = <3900000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO6 {
|
||||
regulator-min-microvolt = <750000>;
|
||||
regulator-max-microvolt = <3900000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO7 {
|
||||
regulator-min-microvolt = <750000>;
|
||||
regulator-max-microvolt = <3900000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO8 {
|
||||
regulator-min-microvolt = <750000>;
|
||||
regulator-max-microvolt = <3900000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO9 {
|
||||
regulator-min-microvolt = <750000>;
|
||||
regulator-max-microvolt = <3900000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO10 {
|
||||
regulator-min-microvolt = <750000>;
|
||||
regulator-max-microvolt = <3900000>;
|
||||
};
|
||||
LDO11 {
|
||||
regulator-min-microvolt = <750000>;
|
||||
regulator-max-microvolt = <3900000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO12 {
|
||||
regulator-min-microvolt = <750000>;
|
||||
regulator-max-microvolt = <3900000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO13 {
|
||||
regulator-min-microvolt = <750000>;
|
||||
regulator-max-microvolt = <3900000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO14 {
|
||||
regulator-min-microvolt = <750000>;
|
||||
regulator-max-microvolt = <3900000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO15 {
|
||||
regulator-min-microvolt = <750000>;
|
||||
regulator-max-microvolt = <3900000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO16 {
|
||||
regulator-min-microvolt = <750000>;
|
||||
regulator-max-microvolt = <3900000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO17 {
|
||||
regulator-min-microvolt = <650000>;
|
||||
regulator-max-microvolt = <2250000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO18 {
|
||||
regulator-min-microvolt = <650000>;
|
||||
regulator-max-microvolt = <2250000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO19 {
|
||||
regulator-min-microvolt = <750000>;
|
||||
regulator-max-microvolt = <3900000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO20 {
|
||||
regulator-min-microvolt = <750000>;
|
||||
regulator-max-microvolt = <3900000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
};
|
||||
backlight {
|
||||
maxim,max8925-dual-string = <0>;
|
||||
};
|
||||
charger {
|
||||
batt-detect = <0>;
|
||||
topoff-threshold = <1>;
|
||||
fast-charge = <7>;
|
||||
no-temp-support = <0>;
|
||||
no-insert-detect = <0>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&rtc {
|
||||
status = "okay";
|
||||
};
|
||||
|
@ -208,8 +208,8 @@ timer0: timer@d4014000 {
|
||||
clocks = <&soc_clocks MMP2_CLK_TIMER>;
|
||||
};
|
||||
|
||||
uart1: uart@d4030000 {
|
||||
compatible = "mrvl,mmp-uart";
|
||||
uart1: serial@d4030000 {
|
||||
compatible = "mrvl,mmp-uart", "intel,xscale-uart";
|
||||
reg = <0xd4030000 0x1000>;
|
||||
interrupts = <27>;
|
||||
clocks = <&soc_clocks MMP2_CLK_UART0>;
|
||||
@ -218,8 +218,8 @@ uart1: uart@d4030000 {
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
uart2: uart@d4017000 {
|
||||
compatible = "mrvl,mmp-uart";
|
||||
uart2: serial@d4017000 {
|
||||
compatible = "mrvl,mmp-uart", "intel,xscale-uart";
|
||||
reg = <0xd4017000 0x1000>;
|
||||
interrupts = <28>;
|
||||
clocks = <&soc_clocks MMP2_CLK_UART1>;
|
||||
@ -228,8 +228,8 @@ uart2: uart@d4017000 {
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
uart3: uart@d4018000 {
|
||||
compatible = "mrvl,mmp-uart";
|
||||
uart3: serial@d4018000 {
|
||||
compatible = "mrvl,mmp-uart", "intel,xscale-uart";
|
||||
reg = <0xd4018000 0x1000>;
|
||||
interrupts = <24>;
|
||||
clocks = <&soc_clocks MMP2_CLK_UART2>;
|
||||
@ -238,8 +238,8 @@ uart3: uart@d4018000 {
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
uart4: uart@d4016000 {
|
||||
compatible = "mrvl,mmp-uart";
|
||||
uart4: serial@d4016000 {
|
||||
compatible = "mrvl,mmp-uart", "intel,xscale-uart";
|
||||
reg = <0xd4016000 0x1000>;
|
||||
interrupts = <46>;
|
||||
clocks = <&soc_clocks MMP2_CLK_UART3>;
|
||||
|
@ -318,8 +318,8 @@ timer: timer@d4014000 {
|
||||
clocks = <&soc_clocks MMP2_CLK_TIMER>;
|
||||
};
|
||||
|
||||
uart1: uart@d4030000 {
|
||||
compatible = "mrvl,mmp-uart";
|
||||
uart1: serial@d4030000 {
|
||||
compatible = "mrvl,mmp-uart", "intel,xscale-uart";
|
||||
reg = <0xd4030000 0x1000>;
|
||||
interrupts = <GIC_SPI 27 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&soc_clocks MMP2_CLK_UART0>;
|
||||
@ -328,8 +328,8 @@ uart1: uart@d4030000 {
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
uart2: uart@d4017000 {
|
||||
compatible = "mrvl,mmp-uart";
|
||||
uart2: serial@d4017000 {
|
||||
compatible = "mrvl,mmp-uart", "intel,xscale-uart";
|
||||
reg = <0xd4017000 0x1000>;
|
||||
interrupts = <GIC_SPI 28 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&soc_clocks MMP2_CLK_UART1>;
|
||||
@ -338,8 +338,8 @@ uart2: uart@d4017000 {
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
uart3: uart@d4018000 {
|
||||
compatible = "mrvl,mmp-uart";
|
||||
uart3: serial@d4018000 {
|
||||
compatible = "mrvl,mmp-uart", "intel,xscale-uart";
|
||||
reg = <0xd4018000 0x1000>;
|
||||
interrupts = <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&soc_clocks MMP2_CLK_UART2>;
|
||||
@ -348,8 +348,8 @@ uart3: uart@d4018000 {
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
uart4: uart@d4016000 {
|
||||
compatible = "mrvl,mmp-uart";
|
||||
uart4: serial@d4016000 {
|
||||
compatible = "mrvl,mmp-uart", "intel,xscale-uart";
|
||||
reg = <0xd4016000 0x1000>;
|
||||
interrupts = <GIC_SPI 46 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&soc_clocks MMP2_CLK_UART3>;
|
||||
|
@ -18,18 +18,16 @@ chosen {
|
||||
memory {
|
||||
reg = <0x00000000 0x04000000>;
|
||||
};
|
||||
|
||||
soc {
|
||||
apb@d4000000 {
|
||||
uart1: uart@d4017000 {
|
||||
status = "okay";
|
||||
};
|
||||
twsi1: i2c@d4011000 {
|
||||
status = "okay";
|
||||
};
|
||||
rtc: rtc@d4010000 {
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&uart1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&twsi1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&rtc {
|
||||
status = "okay";
|
||||
};
|
||||
|
@ -55,27 +55,30 @@ timer0: timer@d4014000 {
|
||||
interrupts = <13>;
|
||||
};
|
||||
|
||||
uart1: uart@d4017000 {
|
||||
compatible = "mrvl,mmp-uart";
|
||||
uart1: serial@d4017000 {
|
||||
compatible = "mrvl,mmp-uart", "intel,xscale-uart";
|
||||
reg = <0xd4017000 0x1000>;
|
||||
reg-shift = <2>;
|
||||
interrupts = <27>;
|
||||
clocks = <&soc_clocks PXA168_CLK_UART0>;
|
||||
resets = <&soc_clocks PXA168_CLK_UART0>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
uart2: uart@d4018000 {
|
||||
compatible = "mrvl,mmp-uart";
|
||||
uart2: serial@d4018000 {
|
||||
compatible = "mrvl,mmp-uart", "intel,xscale-uart";
|
||||
reg = <0xd4018000 0x1000>;
|
||||
reg-shift = <2>;
|
||||
interrupts = <28>;
|
||||
clocks = <&soc_clocks PXA168_CLK_UART1>;
|
||||
resets = <&soc_clocks PXA168_CLK_UART1>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
uart3: uart@d4026000 {
|
||||
compatible = "mrvl,mmp-uart";
|
||||
uart3: serial@d4026000 {
|
||||
compatible = "mrvl,mmp-uart", "intel,xscale-uart";
|
||||
reg = <0xd4026000 0x1000>;
|
||||
reg-shift = <2>;
|
||||
interrupts = <29>;
|
||||
clocks = <&soc_clocks PXA168_CLK_UART2>;
|
||||
resets = <&soc_clocks PXA168_CLK_UART2>;
|
||||
|
@ -18,155 +18,153 @@ chosen {
|
||||
memory {
|
||||
reg = <0x00000000 0x10000000>;
|
||||
};
|
||||
};
|
||||
|
||||
soc {
|
||||
apb@d4000000 {
|
||||
uart1: uart@d4017000 {
|
||||
status = "okay";
|
||||
&uart1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&twsi1 {
|
||||
status = "okay";
|
||||
|
||||
pmic: 88pm860x@34 {
|
||||
compatible = "marvell,88pm860x";
|
||||
reg = <0x34>;
|
||||
interrupts = <4>;
|
||||
interrupt-parent = <&intc>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <1>;
|
||||
|
||||
marvell,88pm860x-irq-read-clr;
|
||||
marvell,88pm860x-slave-addr = <0x11>;
|
||||
|
||||
regulators {
|
||||
BUCK1 {
|
||||
regulator-min-microvolt = <1000000>;
|
||||
regulator-max-microvolt = <1500000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
twsi1: i2c@d4011000 {
|
||||
status = "okay";
|
||||
|
||||
pmic: 88pm860x@34 {
|
||||
compatible = "marvell,88pm860x";
|
||||
reg = <0x34>;
|
||||
interrupts = <4>;
|
||||
interrupt-parent = <&intc>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <1>;
|
||||
|
||||
marvell,88pm860x-irq-read-clr;
|
||||
marvell,88pm860x-slave-addr = <0x11>;
|
||||
|
||||
regulators {
|
||||
BUCK1 {
|
||||
regulator-min-microvolt = <1000000>;
|
||||
regulator-max-microvolt = <1500000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
BUCK2 {
|
||||
regulator-min-microvolt = <1000000>;
|
||||
regulator-max-microvolt = <1500000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
BUCK3 {
|
||||
regulator-min-microvolt = <1000000>;
|
||||
regulator-max-microvolt = <3000000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO1 {
|
||||
regulator-min-microvolt = <1200000>;
|
||||
regulator-max-microvolt = <2800000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO2 {
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO3 {
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO4 {
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO5 {
|
||||
regulator-min-microvolt = <2900000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO6 {
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO7 {
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <2900000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO8 {
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <2900000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO9 {
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO10 {
|
||||
regulator-min-microvolt = <1200000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO12 {
|
||||
regulator-min-microvolt = <1200000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO13 {
|
||||
regulator-min-microvolt = <1200000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO14 {
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
regulator-always-on;
|
||||
};
|
||||
};
|
||||
rtc {
|
||||
marvell,88pm860x-vrtc = <1>;
|
||||
};
|
||||
touch {
|
||||
marvell,88pm860x-gpadc-prebias = <1>;
|
||||
marvell,88pm860x-gpadc-slot-cycle = <1>;
|
||||
marvell,88pm860x-tsi-prebias = <6>;
|
||||
marvell,88pm860x-pen-prebias = <16>;
|
||||
marvell,88pm860x-pen-prechg = <2>;
|
||||
marvell,88pm860x-resistor-X = <300>;
|
||||
};
|
||||
backlights {
|
||||
backlight-0 {
|
||||
marvell,88pm860x-iset = <4>;
|
||||
marvell,88pm860x-pwm = <3>;
|
||||
};
|
||||
backlight-2 {
|
||||
};
|
||||
};
|
||||
leds {
|
||||
led0-red {
|
||||
marvell,88pm860x-iset = <12>;
|
||||
};
|
||||
led0-green {
|
||||
marvell,88pm860x-iset = <12>;
|
||||
};
|
||||
led0-blue {
|
||||
marvell,88pm860x-iset = <12>;
|
||||
};
|
||||
};
|
||||
};
|
||||
BUCK2 {
|
||||
regulator-min-microvolt = <1000000>;
|
||||
regulator-max-microvolt = <1500000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
rtc: rtc@d4010000 {
|
||||
status = "okay";
|
||||
BUCK3 {
|
||||
regulator-min-microvolt = <1000000>;
|
||||
regulator-max-microvolt = <3000000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO1 {
|
||||
regulator-min-microvolt = <1200000>;
|
||||
regulator-max-microvolt = <2800000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO2 {
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO3 {
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO4 {
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO5 {
|
||||
regulator-min-microvolt = <2900000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO6 {
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO7 {
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <2900000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO8 {
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <2900000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO9 {
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO10 {
|
||||
regulator-min-microvolt = <1200000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
regulator-boot-on;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO12 {
|
||||
regulator-min-microvolt = <1200000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO13 {
|
||||
regulator-min-microvolt = <1200000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
regulator-always-on;
|
||||
};
|
||||
LDO14 {
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
regulator-always-on;
|
||||
};
|
||||
};
|
||||
rtc {
|
||||
marvell,88pm860x-vrtc = <1>;
|
||||
};
|
||||
touch {
|
||||
marvell,88pm860x-gpadc-prebias = <1>;
|
||||
marvell,88pm860x-gpadc-slot-cycle = <1>;
|
||||
marvell,88pm860x-tsi-prebias = <6>;
|
||||
marvell,88pm860x-pen-prebias = <16>;
|
||||
marvell,88pm860x-pen-prechg = <2>;
|
||||
marvell,88pm860x-resistor-X = <300>;
|
||||
};
|
||||
backlights {
|
||||
backlight-0 {
|
||||
marvell,88pm860x-iset = <4>;
|
||||
marvell,88pm860x-pwm = <3>;
|
||||
};
|
||||
backlight-2 {
|
||||
};
|
||||
};
|
||||
leds {
|
||||
led0-red {
|
||||
marvell,88pm860x-iset = <12>;
|
||||
};
|
||||
led0-green {
|
||||
marvell,88pm860x-iset = <12>;
|
||||
};
|
||||
led0-blue {
|
||||
marvell,88pm860x-iset = <12>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&rtc {
|
||||
status = "okay";
|
||||
};
|
||||
|
@ -67,27 +67,30 @@ timer1: timer@d4016000 {
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
uart1: uart@d4017000 {
|
||||
compatible = "mrvl,mmp-uart";
|
||||
uart1: serial@d4017000 {
|
||||
compatible = "mrvl,mmp-uart", "intel,xscale-uart";
|
||||
reg = <0xd4017000 0x1000>;
|
||||
reg-shift = <2>;
|
||||
interrupts = <27>;
|
||||
clocks = <&soc_clocks PXA910_CLK_UART0>;
|
||||
resets = <&soc_clocks PXA910_CLK_UART0>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
uart2: uart@d4018000 {
|
||||
compatible = "mrvl,mmp-uart";
|
||||
uart2: serial@d4018000 {
|
||||
compatible = "mrvl,mmp-uart", "intel,xscale-uart";
|
||||
reg = <0xd4018000 0x1000>;
|
||||
reg-shift = <2>;
|
||||
interrupts = <28>;
|
||||
clocks = <&soc_clocks PXA910_CLK_UART1>;
|
||||
resets = <&soc_clocks PXA910_CLK_UART1>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
uart3: uart@d4036000 {
|
||||
compatible = "mrvl,mmp-uart";
|
||||
uart3: serial@d4036000 {
|
||||
compatible = "mrvl,mmp-uart", "intel,xscale-uart";
|
||||
reg = <0xd4036000 0x1000>;
|
||||
reg-shift = <2>;
|
||||
interrupts = <59>;
|
||||
clocks = <&soc_clocks PXA910_CLK_UART2>;
|
||||
resets = <&soc_clocks PXA910_CLK_UART2>;
|
||||
|
@ -85,7 +85,7 @@ tick-counter@10048 {
|
||||
};
|
||||
|
||||
uart: serial@10700 {
|
||||
compatible = "ralink,rt2880-uart";
|
||||
compatible = "ralink,rt2880-uart", "ns16550a";
|
||||
reg = <0x10700 0x30>;
|
||||
interrupts = <1 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clock-frequency = <7372800>;
|
||||
|
@ -120,6 +120,7 @@ config ARM64
|
||||
select HAVE_ALIGNED_STRUCT_PAGE if SLUB
|
||||
select HAVE_ARCH_AUDITSYSCALL
|
||||
select HAVE_ARCH_BITREVERSE
|
||||
select HAVE_ARCH_COMPILER_H
|
||||
select HAVE_ARCH_HUGE_VMAP
|
||||
select HAVE_ARCH_JUMP_LABEL
|
||||
select HAVE_ARCH_JUMP_LABEL_RELATIVE
|
||||
@ -283,6 +284,9 @@ config ZONE_DMA32
|
||||
config ARCH_ENABLE_MEMORY_HOTPLUG
|
||||
def_bool y
|
||||
|
||||
config ARCH_ENABLE_MEMORY_HOTREMOVE
|
||||
def_bool y
|
||||
|
||||
config SMP
|
||||
def_bool y
|
||||
|
||||
@ -954,11 +958,11 @@ config HOTPLUG_CPU
|
||||
|
||||
# Common NUMA Features
|
||||
config NUMA
|
||||
bool "Numa Memory Allocation and Scheduler Support"
|
||||
bool "NUMA Memory Allocation and Scheduler Support"
|
||||
select ACPI_NUMA if ACPI
|
||||
select OF_NUMA
|
||||
help
|
||||
Enable NUMA (Non Uniform Memory Access) support.
|
||||
Enable NUMA (Non-Uniform Memory Access) support.
|
||||
|
||||
The kernel will try to allocate memory used by a CPU on the
|
||||
local memory of the CPU and add some more
|
||||
@ -1504,6 +1508,9 @@ config ARM64_PTR_AUTH
|
||||
bool "Enable support for pointer authentication"
|
||||
default y
|
||||
depends on !KVM || ARM64_VHE
|
||||
depends on (CC_HAS_SIGN_RETURN_ADDRESS || CC_HAS_BRANCH_PROT_PAC_RET) && AS_HAS_PAC
|
||||
depends on CC_IS_GCC || (CC_IS_CLANG && AS_HAS_CFI_NEGATE_RA_STATE)
|
||||
depends on (!FUNCTION_GRAPH_TRACER || DYNAMIC_FTRACE_WITH_REGS)
|
||||
help
|
||||
Pointer authentication (part of the ARMv8.3 Extensions) provides
|
||||
instructions for signing and authenticating pointers against secret
|
||||
@ -1511,16 +1518,72 @@ config ARM64_PTR_AUTH
|
||||
and other attacks.
|
||||
|
||||
This option enables these instructions at EL0 (i.e. for userspace).
|
||||
|
||||
Choosing this option will cause the kernel to initialise secret keys
|
||||
for each process at exec() time, with these keys being
|
||||
context-switched along with the process.
|
||||
|
||||
If the compiler supports the -mbranch-protection or
|
||||
-msign-return-address flag (e.g. GCC 7 or later), then this option
|
||||
will also cause the kernel itself to be compiled with return address
|
||||
protection. In this case, and if the target hardware is known to
|
||||
support pointer authentication, then CONFIG_STACKPROTECTOR can be
|
||||
disabled with minimal loss of protection.
|
||||
|
||||
The feature is detected at runtime. If the feature is not present in
|
||||
hardware it will not be advertised to userspace/KVM guest nor will it
|
||||
be enabled. However, KVM guest also require VHE mode and hence
|
||||
CONFIG_ARM64_VHE=y option to use this feature.
|
||||
|
||||
If the feature is present on the boot CPU but not on a late CPU, then
|
||||
the late CPU will be parked. Also, if the boot CPU does not have
|
||||
address auth and the late CPU has then the late CPU will still boot
|
||||
but with the feature disabled. On such a system, this option should
|
||||
not be selected.
|
||||
|
||||
This feature works with FUNCTION_GRAPH_TRACER option only if
|
||||
DYNAMIC_FTRACE_WITH_REGS is enabled.
|
||||
|
||||
config CC_HAS_BRANCH_PROT_PAC_RET
|
||||
# GCC 9 or later, clang 8 or later
|
||||
def_bool $(cc-option,-mbranch-protection=pac-ret+leaf)
|
||||
|
||||
config CC_HAS_SIGN_RETURN_ADDRESS
|
||||
# GCC 7, 8
|
||||
def_bool $(cc-option,-msign-return-address=all)
|
||||
|
||||
config AS_HAS_PAC
|
||||
def_bool $(as-option,-Wa$(comma)-march=armv8.3-a)
|
||||
|
||||
config AS_HAS_CFI_NEGATE_RA_STATE
|
||||
def_bool $(as-instr,.cfi_startproc\n.cfi_negate_ra_state\n.cfi_endproc\n)
|
||||
|
||||
endmenu
|
||||
|
||||
menu "ARMv8.4 architectural features"
|
||||
|
||||
config ARM64_AMU_EXTN
|
||||
bool "Enable support for the Activity Monitors Unit CPU extension"
|
||||
default y
|
||||
help
|
||||
The activity monitors extension is an optional extension introduced
|
||||
by the ARMv8.4 CPU architecture. This enables support for version 1
|
||||
of the activity monitors architecture, AMUv1.
|
||||
|
||||
To enable the use of this extension on CPUs that implement it, say Y.
|
||||
|
||||
Note that for architectural reasons, firmware _must_ implement AMU
|
||||
support when running on CPUs that present the activity monitors
|
||||
extension. The required support is present in:
|
||||
* Version 1.5 and later of the ARM Trusted Firmware
|
||||
|
||||
For kernels that have this configuration enabled but boot with broken
|
||||
firmware, you may need to say N here until the firmware is fixed.
|
||||
Otherwise you may experience firmware panics or lockups when
|
||||
accessing the counter registers. Even if you are not observing these
|
||||
symptoms, the values returned by the register reads might not
|
||||
correctly reflect reality. Most commonly, the value read will be 0,
|
||||
indicating that the counter is not enabled.
|
||||
|
||||
endmenu
|
||||
|
||||
menu "ARMv8.5 architectural features"
|
||||
|
@ -249,7 +249,7 @@ config ARCH_TEGRA
|
||||
This enables support for the NVIDIA Tegra SoC family.
|
||||
|
||||
config ARCH_SPRD
|
||||
bool "Spreadtrum SoC platform"
|
||||
tristate "Spreadtrum SoC platform"
|
||||
help
|
||||
Support for Spreadtrum ARM based SoCs
|
||||
|
||||
|
@ -65,6 +65,17 @@ stack_protector_prepare: prepare0
|
||||
include/generated/asm-offsets.h))
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_ARM64_PTR_AUTH),y)
|
||||
branch-prot-flags-$(CONFIG_CC_HAS_SIGN_RETURN_ADDRESS) := -msign-return-address=all
|
||||
branch-prot-flags-$(CONFIG_CC_HAS_BRANCH_PROT_PAC_RET) := -mbranch-protection=pac-ret+leaf
|
||||
# -march=armv8.3-a enables the non-nops instructions for PAC, to avoid the
|
||||
# compiler to generate them and consequently to break the single image contract
|
||||
# we pass it only to the assembler. This option is utilized only in case of non
|
||||
# integrated assemblers.
|
||||
branch-prot-flags-$(CONFIG_AS_HAS_PAC) += -Wa,-march=armv8.3-a
|
||||
KBUILD_CFLAGS += $(branch-prot-flags-y)
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_SHADOW_CALL_STACK), y)
|
||||
KBUILD_CFLAGS += -ffixed-x18
|
||||
endif
|
||||
|
@ -333,6 +333,79 @@ duart1: serial@21c0600 {
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
|
||||
lpuart0: serial@2260000 {
|
||||
compatible = "fsl,ls1028a-lpuart";
|
||||
reg = <0x0 0x2260000 0x0 0x1000>;
|
||||
interrupts = <GIC_SPI 232 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clockgen 4 1>;
|
||||
clock-names = "ipg";
|
||||
dma-names = "rx","tx";
|
||||
dmas = <&edma0 1 32>,
|
||||
<&edma0 1 33>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
lpuart1: serial@2270000 {
|
||||
compatible = "fsl,ls1028a-lpuart";
|
||||
reg = <0x0 0x2270000 0x0 0x1000>;
|
||||
interrupts = <GIC_SPI 233 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clockgen 4 1>;
|
||||
clock-names = "ipg";
|
||||
dma-names = "rx","tx";
|
||||
dmas = <&edma0 1 30>,
|
||||
<&edma0 1 31>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
lpuart2: serial@2280000 {
|
||||
compatible = "fsl,ls1028a-lpuart";
|
||||
reg = <0x0 0x2280000 0x0 0x1000>;
|
||||
interrupts = <GIC_SPI 234 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clockgen 4 1>;
|
||||
clock-names = "ipg";
|
||||
dma-names = "rx","tx";
|
||||
dmas = <&edma0 1 28>,
|
||||
<&edma0 1 29>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
lpuart3: serial@2290000 {
|
||||
compatible = "fsl,ls1028a-lpuart";
|
||||
reg = <0x0 0x2290000 0x0 0x1000>;
|
||||
interrupts = <GIC_SPI 235 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clockgen 4 1>;
|
||||
clock-names = "ipg";
|
||||
dma-names = "rx","tx";
|
||||
dmas = <&edma0 1 26>,
|
||||
<&edma0 1 27>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
lpuart4: serial@22a0000 {
|
||||
compatible = "fsl,ls1028a-lpuart";
|
||||
reg = <0x0 0x22a0000 0x0 0x1000>;
|
||||
interrupts = <GIC_SPI 236 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clockgen 4 1>;
|
||||
clock-names = "ipg";
|
||||
dma-names = "rx","tx";
|
||||
dmas = <&edma0 1 24>,
|
||||
<&edma0 1 25>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
lpuart5: serial@22b0000 {
|
||||
compatible = "fsl,ls1028a-lpuart";
|
||||
reg = <0x0 0x22b0000 0x0 0x1000>;
|
||||
interrupts = <GIC_SPI 237 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clockgen 4 1>;
|
||||
clock-names = "ipg";
|
||||
dma-names = "rx","tx";
|
||||
dmas = <&edma0 1 22>,
|
||||
<&edma0 1 23>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
edma0: dma-controller@22c0000 {
|
||||
#dma-cells = <2>;
|
||||
compatible = "fsl,ls1028a-edma";
|
||||
|
@ -187,4 +187,53 @@ ospi1: spi@47050000 {
|
||||
#size-cells = <0>;
|
||||
};
|
||||
};
|
||||
|
||||
mcu_cpsw: ethernet@46000000 {
|
||||
compatible = "ti,am654-cpsw-nuss";
|
||||
#address-cells = <2>;
|
||||
#size-cells = <2>;
|
||||
reg = <0x0 0x46000000 0x0 0x200000>;
|
||||
reg-names = "cpsw_nuss";
|
||||
ranges = <0x0 0x0 0x0 0x46000000 0x0 0x200000>;
|
||||
dma-coherent;
|
||||
clocks = <&k3_clks 5 10>;
|
||||
clock-names = "fck";
|
||||
power-domains = <&k3_pds 5 TI_SCI_PD_EXCLUSIVE>;
|
||||
|
||||
dmas = <&mcu_udmap 0xf000>,
|
||||
<&mcu_udmap 0xf001>,
|
||||
<&mcu_udmap 0xf002>,
|
||||
<&mcu_udmap 0xf003>,
|
||||
<&mcu_udmap 0xf004>,
|
||||
<&mcu_udmap 0xf005>,
|
||||
<&mcu_udmap 0xf006>,
|
||||
<&mcu_udmap 0xf007>,
|
||||
<&mcu_udmap 0x7000>;
|
||||
dma-names = "tx0", "tx1", "tx2", "tx3",
|
||||
"tx4", "tx5", "tx6", "tx7",
|
||||
"rx";
|
||||
|
||||
ethernet-ports {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
cpsw_port1: port@1 {
|
||||
reg = <1>;
|
||||
ti,mac-only;
|
||||
label = "port1";
|
||||
ti,syscon-efuse = <&mcu_conf 0x200>;
|
||||
phys = <&phy_gmii_sel 1>;
|
||||
};
|
||||
};
|
||||
|
||||
davinci_mdio: mdio@f00 {
|
||||
compatible = "ti,cpsw-mdio","ti,davinci_mdio";
|
||||
reg = <0x0 0xf00 0x0 0x100>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&k3_clks 5 10>;
|
||||
clock-names = "fck";
|
||||
bus_freq = <1000000>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -30,6 +30,7 @@ aliases {
|
||||
i2c3 = &main_i2c1;
|
||||
i2c4 = &main_i2c2;
|
||||
i2c5 = &main_i2c3;
|
||||
ethernet0 = &cpsw_port1;
|
||||
};
|
||||
|
||||
chosen { };
|
||||
|
@ -7,6 +7,7 @@
|
||||
|
||||
#include "k3-am654.dtsi"
|
||||
#include <dt-bindings/input/input.h>
|
||||
#include <dt-bindings/net/ti-dp83867.h>
|
||||
|
||||
/ {
|
||||
compatible = "ti,am654-evm", "ti,am654";
|
||||
@ -95,7 +96,30 @@ AM65X_WKUP_IOPAD(0x002c, PIN_OUTPUT, 0) /* (R4) MCU_OSPI0_CSn0 */
|
||||
wkup_pca554_default: wkup_pca554_default {
|
||||
pinctrl-single,pins = <
|
||||
AM65X_WKUP_IOPAD(0x0034, PIN_INPUT, 7) /* (T1) MCU_OSPI1_CLK.WKUP_GPIO0_25 */
|
||||
>;
|
||||
};
|
||||
|
||||
mcu_cpsw_pins_default: mcu_cpsw_pins_default {
|
||||
pinctrl-single,pins = <
|
||||
AM65X_WKUP_IOPAD(0x0058, PIN_OUTPUT, 0) /* (N4) MCU_RGMII1_TX_CTL */
|
||||
AM65X_WKUP_IOPAD(0x005c, PIN_INPUT, 0) /* (N5) MCU_RGMII1_RX_CTL */
|
||||
AM65X_WKUP_IOPAD(0x0060, PIN_OUTPUT, 0) /* (M2) MCU_RGMII1_TD3 */
|
||||
AM65X_WKUP_IOPAD(0x0064, PIN_OUTPUT, 0) /* (M3) MCU_RGMII1_TD2 */
|
||||
AM65X_WKUP_IOPAD(0x0068, PIN_OUTPUT, 0) /* (M4) MCU_RGMII1_TD1 */
|
||||
AM65X_WKUP_IOPAD(0x006c, PIN_OUTPUT, 0) /* (M5) MCU_RGMII1_TD0 */
|
||||
AM65X_WKUP_IOPAD(0x0078, PIN_INPUT, 0) /* (L2) MCU_RGMII1_RD3 */
|
||||
AM65X_WKUP_IOPAD(0x007c, PIN_INPUT, 0) /* (L5) MCU_RGMII1_RD2 */
|
||||
AM65X_WKUP_IOPAD(0x0080, PIN_INPUT, 0) /* (M6) MCU_RGMII1_RD1 */
|
||||
AM65X_WKUP_IOPAD(0x0084, PIN_INPUT, 0) /* (L6) MCU_RGMII1_RD0 */
|
||||
AM65X_WKUP_IOPAD(0x0070, PIN_INPUT, 0) /* (N1) MCU_RGMII1_TXC */
|
||||
AM65X_WKUP_IOPAD(0x0074, PIN_INPUT, 0) /* (M1) MCU_RGMII1_RXC */
|
||||
>;
|
||||
};
|
||||
|
||||
mcu_mdio_pins_default: mcu_mdio1_pins_default {
|
||||
pinctrl-single,pins = <
|
||||
AM65X_WKUP_IOPAD(0x008c, PIN_OUTPUT, 0) /* (L1) MCU_MDIO0_MDC */
|
||||
AM65X_WKUP_IOPAD(0x0088, PIN_INPUT, 0) /* (L4) MCU_MDIO0_MDIO */
|
||||
>;
|
||||
};
|
||||
};
|
||||
@ -419,3 +443,21 @@ csi2_phy0: endpoint {
|
||||
data-lanes = <1 2>;
|
||||
};
|
||||
};
|
||||
|
||||
&mcu_cpsw {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&mcu_cpsw_pins_default &mcu_mdio_pins_default>;
|
||||
};
|
||||
|
||||
&davinci_mdio {
|
||||
phy0: ethernet-phy@0 {
|
||||
reg = <0>;
|
||||
ti,rx-internal-delay = <DP83867_RGMIIDCTL_2_00_NS>;
|
||||
ti,fifo-depth = <DP83867_PHYCR_FIFO_DEPTH_4_B_NIB>;
|
||||
};
|
||||
};
|
||||
|
||||
&cpsw_port1 {
|
||||
phy-mode = "rgmii-rxid";
|
||||
phy-handle = <&phy0>;
|
||||
};
|
||||
|
@ -8,6 +8,7 @@
|
||||
#include "k3-j721e-som-p0.dtsi"
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
#include <dt-bindings/input/input.h>
|
||||
#include <dt-bindings/net/ti-dp83867.h>
|
||||
|
||||
/ {
|
||||
chosen {
|
||||
@ -128,6 +129,30 @@ J721E_WKUP_IOPAD(0x3c, PIN_INPUT, 0) /* (B23) MCU_OSPI1_DQS */
|
||||
J721E_WKUP_IOPAD(0x38, PIN_INPUT, 0) /* (A23) MCU_OSPI1_LBCLKO */
|
||||
>;
|
||||
};
|
||||
|
||||
mcu_cpsw_pins_default: mcu_cpsw_pins_default {
|
||||
pinctrl-single,pins = <
|
||||
J721E_WKUP_IOPAD(0x0058, PIN_OUTPUT, 0) /* MCU_RGMII1_TX_CTL */
|
||||
J721E_WKUP_IOPAD(0x005c, PIN_INPUT, 0) /* MCU_RGMII1_RX_CTL */
|
||||
J721E_WKUP_IOPAD(0x0060, PIN_OUTPUT, 0) /* MCU_RGMII1_TD3 */
|
||||
J721E_WKUP_IOPAD(0x0064, PIN_OUTPUT, 0) /* MCU_RGMII1_TD2 */
|
||||
J721E_WKUP_IOPAD(0x0068, PIN_OUTPUT, 0) /* MCU_RGMII1_TD1 */
|
||||
J721E_WKUP_IOPAD(0x006c, PIN_OUTPUT, 0) /* MCU_RGMII1_TD0 */
|
||||
J721E_WKUP_IOPAD(0x0078, PIN_INPUT, 0) /* MCU_RGMII1_RD3 */
|
||||
J721E_WKUP_IOPAD(0x007c, PIN_INPUT, 0) /* MCU_RGMII1_RD2 */
|
||||
J721E_WKUP_IOPAD(0x0080, PIN_INPUT, 0) /* MCU_RGMII1_RD1 */
|
||||
J721E_WKUP_IOPAD(0x0084, PIN_INPUT, 0) /* MCU_RGMII1_RD0 */
|
||||
J721E_WKUP_IOPAD(0x0070, PIN_INPUT, 0) /* MCU_RGMII1_TXC */
|
||||
J721E_WKUP_IOPAD(0x0074, PIN_INPUT, 0) /* MCU_RGMII1_RXC */
|
||||
>;
|
||||
};
|
||||
|
||||
mcu_mdio_pins_default: mcu_mdio1_pins_default {
|
||||
pinctrl-single,pins = <
|
||||
J721E_WKUP_IOPAD(0x008c, PIN_OUTPUT, 0) /* MCU_MDIO0_MDC */
|
||||
J721E_WKUP_IOPAD(0x0088, PIN_INPUT, 0) /* MCU_MDIO0_MDIO */
|
||||
>;
|
||||
};
|
||||
};
|
||||
|
||||
&wkup_uart0 {
|
||||
@ -429,3 +454,21 @@ exp5: gpio@20 {
|
||||
#gpio-cells = <2>;
|
||||
};
|
||||
};
|
||||
|
||||
&mcu_cpsw {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&mcu_cpsw_pins_default &mcu_mdio_pins_default>;
|
||||
};
|
||||
|
||||
&davinci_mdio {
|
||||
phy0: ethernet-phy@0 {
|
||||
reg = <0>;
|
||||
ti,rx-internal-delay = <DP83867_RGMIIDCTL_2_00_NS>;
|
||||
ti,fifo-depth = <DP83867_PHYCR_FIFO_DEPTH_4_B_NIB>;
|
||||
};
|
||||
};
|
||||
|
||||
&cpsw_port1 {
|
||||
phy-mode = "rgmii-rxid";
|
||||
phy-handle = <&phy0>;
|
||||
};
|
||||
|
@ -270,4 +270,53 @@ mcu_udmap: dma-controller@285c0000 {
|
||||
ti,sci-rm-range-rflow = <0x00>; /* GP RFLOW */
|
||||
};
|
||||
};
|
||||
|
||||
mcu_cpsw: ethernet@46000000 {
|
||||
compatible = "ti,j721e-cpsw-nuss";
|
||||
#address-cells = <2>;
|
||||
#size-cells = <2>;
|
||||
reg = <0x0 0x46000000 0x0 0x200000>;
|
||||
reg-names = "cpsw_nuss";
|
||||
ranges = <0x0 0x0 0x0 0x46000000 0x0 0x200000>;
|
||||
dma-coherent;
|
||||
clocks = <&k3_clks 18 22>;
|
||||
clock-names = "fck";
|
||||
power-domains = <&k3_pds 18 TI_SCI_PD_EXCLUSIVE>;
|
||||
|
||||
dmas = <&mcu_udmap 0xf000>,
|
||||
<&mcu_udmap 0xf001>,
|
||||
<&mcu_udmap 0xf002>,
|
||||
<&mcu_udmap 0xf003>,
|
||||
<&mcu_udmap 0xf004>,
|
||||
<&mcu_udmap 0xf005>,
|
||||
<&mcu_udmap 0xf006>,
|
||||
<&mcu_udmap 0xf007>,
|
||||
<&mcu_udmap 0x7000>;
|
||||
dma-names = "tx0", "tx1", "tx2", "tx3",
|
||||
"tx4", "tx5", "tx6", "tx7",
|
||||
"rx";
|
||||
|
||||
ethernet-ports {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
cpsw_port1: port@1 {
|
||||
reg = <1>;
|
||||
ti,mac-only;
|
||||
label = "port1";
|
||||
ti,syscon-efuse = <&mcu_conf 0x200>;
|
||||
phys = <&phy_gmii_sel 1>;
|
||||
};
|
||||
};
|
||||
|
||||
davinci_mdio: mdio@f00 {
|
||||
compatible = "ti,cpsw-mdio","ti,davinci_mdio";
|
||||
reg = <0x0 0xf00 0x0 0x100>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&k3_clks 18 22>;
|
||||
clock-names = "fck";
|
||||
bus_freq = <1000000>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -30,6 +30,7 @@ aliases {
|
||||
serial9 = &main_uart7;
|
||||
serial10 = &main_uart8;
|
||||
serial11 = &main_uart9;
|
||||
ethernet0 = &cpsw_port1;
|
||||
};
|
||||
|
||||
chosen { };
|
||||
|
@ -287,6 +287,7 @@ CONFIG_SMSC911X=y
|
||||
CONFIG_SNI_AVE=y
|
||||
CONFIG_SNI_NETSEC=y
|
||||
CONFIG_STMMAC_ETH=m
|
||||
CONFIG_TI_K3_AM65_CPSW_NUSS=y
|
||||
CONFIG_MDIO_BUS_MUX_MMIOREG=y
|
||||
CONFIG_MARVELL_PHY=m
|
||||
CONFIG_MARVELL_10G_PHY=m
|
||||
@ -702,6 +703,8 @@ CONFIG_QCOM_HIDMA_MGMT=y
|
||||
CONFIG_QCOM_HIDMA=y
|
||||
CONFIG_RCAR_DMAC=y
|
||||
CONFIG_RENESAS_USB_DMAC=m
|
||||
CONFIG_TI_K3_UDMA=y
|
||||
CONFIG_TI_K3_UDMA_GLUE_LAYER=y
|
||||
CONFIG_VFIO=y
|
||||
CONFIG_VFIO_PCI=y
|
||||
CONFIG_VIRTIO_PCI=y
|
||||
|
@ -9,8 +9,8 @@
|
||||
#include <linux/linkage.h>
|
||||
#include <asm/assembler.h>
|
||||
|
||||
#define AES_ENTRY(func) SYM_FUNC_START(ce_ ## func)
|
||||
#define AES_ENDPROC(func) SYM_FUNC_END(ce_ ## func)
|
||||
#define AES_FUNC_START(func) SYM_FUNC_START(ce_ ## func)
|
||||
#define AES_FUNC_END(func) SYM_FUNC_END(ce_ ## func)
|
||||
|
||||
.arch armv8-a+crypto
|
||||
|
||||
|
@ -51,7 +51,7 @@ SYM_FUNC_END(aes_decrypt_block5x)
|
||||
* int blocks)
|
||||
*/
|
||||
|
||||
AES_ENTRY(aes_ecb_encrypt)
|
||||
AES_FUNC_START(aes_ecb_encrypt)
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
|
||||
@ -79,10 +79,10 @@ ST5( st1 {v4.16b}, [x0], #16 )
|
||||
.Lecbencout:
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
AES_ENDPROC(aes_ecb_encrypt)
|
||||
AES_FUNC_END(aes_ecb_encrypt)
|
||||
|
||||
|
||||
AES_ENTRY(aes_ecb_decrypt)
|
||||
AES_FUNC_START(aes_ecb_decrypt)
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
|
||||
@ -110,7 +110,7 @@ ST5( st1 {v4.16b}, [x0], #16 )
|
||||
.Lecbdecout:
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
AES_ENDPROC(aes_ecb_decrypt)
|
||||
AES_FUNC_END(aes_ecb_decrypt)
|
||||
|
||||
|
||||
/*
|
||||
@ -126,7 +126,7 @@ AES_ENDPROC(aes_ecb_decrypt)
|
||||
* u32 const rk2[]);
|
||||
*/
|
||||
|
||||
AES_ENTRY(aes_essiv_cbc_encrypt)
|
||||
AES_FUNC_START(aes_essiv_cbc_encrypt)
|
||||
ld1 {v4.16b}, [x5] /* get iv */
|
||||
|
||||
mov w8, #14 /* AES-256: 14 rounds */
|
||||
@ -135,7 +135,7 @@ AES_ENTRY(aes_essiv_cbc_encrypt)
|
||||
enc_switch_key w3, x2, x6
|
||||
b .Lcbcencloop4x
|
||||
|
||||
AES_ENTRY(aes_cbc_encrypt)
|
||||
AES_FUNC_START(aes_cbc_encrypt)
|
||||
ld1 {v4.16b}, [x5] /* get iv */
|
||||
enc_prepare w3, x2, x6
|
||||
|
||||
@ -167,10 +167,10 @@ AES_ENTRY(aes_cbc_encrypt)
|
||||
.Lcbcencout:
|
||||
st1 {v4.16b}, [x5] /* return iv */
|
||||
ret
|
||||
AES_ENDPROC(aes_cbc_encrypt)
|
||||
AES_ENDPROC(aes_essiv_cbc_encrypt)
|
||||
AES_FUNC_END(aes_cbc_encrypt)
|
||||
AES_FUNC_END(aes_essiv_cbc_encrypt)
|
||||
|
||||
AES_ENTRY(aes_essiv_cbc_decrypt)
|
||||
AES_FUNC_START(aes_essiv_cbc_decrypt)
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
|
||||
@ -181,7 +181,7 @@ AES_ENTRY(aes_essiv_cbc_decrypt)
|
||||
encrypt_block cbciv, w8, x6, x7, w9
|
||||
b .Lessivcbcdecstart
|
||||
|
||||
AES_ENTRY(aes_cbc_decrypt)
|
||||
AES_FUNC_START(aes_cbc_decrypt)
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
|
||||
@ -238,8 +238,8 @@ ST5( st1 {v4.16b}, [x0], #16 )
|
||||
st1 {cbciv.16b}, [x5] /* return iv */
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
AES_ENDPROC(aes_cbc_decrypt)
|
||||
AES_ENDPROC(aes_essiv_cbc_decrypt)
|
||||
AES_FUNC_END(aes_cbc_decrypt)
|
||||
AES_FUNC_END(aes_essiv_cbc_decrypt)
|
||||
|
||||
|
||||
/*
|
||||
@ -249,7 +249,7 @@ AES_ENDPROC(aes_essiv_cbc_decrypt)
|
||||
* int rounds, int bytes, u8 const iv[])
|
||||
*/
|
||||
|
||||
AES_ENTRY(aes_cbc_cts_encrypt)
|
||||
AES_FUNC_START(aes_cbc_cts_encrypt)
|
||||
adr_l x8, .Lcts_permute_table
|
||||
sub x4, x4, #16
|
||||
add x9, x8, #32
|
||||
@ -276,9 +276,9 @@ AES_ENTRY(aes_cbc_cts_encrypt)
|
||||
st1 {v0.16b}, [x4] /* overlapping stores */
|
||||
st1 {v1.16b}, [x0]
|
||||
ret
|
||||
AES_ENDPROC(aes_cbc_cts_encrypt)
|
||||
AES_FUNC_END(aes_cbc_cts_encrypt)
|
||||
|
||||
AES_ENTRY(aes_cbc_cts_decrypt)
|
||||
AES_FUNC_START(aes_cbc_cts_decrypt)
|
||||
adr_l x8, .Lcts_permute_table
|
||||
sub x4, x4, #16
|
||||
add x9, x8, #32
|
||||
@ -305,7 +305,7 @@ AES_ENTRY(aes_cbc_cts_decrypt)
|
||||
st1 {v2.16b}, [x4] /* overlapping stores */
|
||||
st1 {v0.16b}, [x0]
|
||||
ret
|
||||
AES_ENDPROC(aes_cbc_cts_decrypt)
|
||||
AES_FUNC_END(aes_cbc_cts_decrypt)
|
||||
|
||||
.section ".rodata", "a"
|
||||
.align 6
|
||||
@ -324,7 +324,7 @@ AES_ENDPROC(aes_cbc_cts_decrypt)
|
||||
* int blocks, u8 ctr[])
|
||||
*/
|
||||
|
||||
AES_ENTRY(aes_ctr_encrypt)
|
||||
AES_FUNC_START(aes_ctr_encrypt)
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
|
||||
@ -409,7 +409,7 @@ ST5( st1 {v4.16b}, [x0], #16 )
|
||||
rev x7, x7
|
||||
ins vctr.d[0], x7
|
||||
b .Lctrcarrydone
|
||||
AES_ENDPROC(aes_ctr_encrypt)
|
||||
AES_FUNC_END(aes_ctr_encrypt)
|
||||
|
||||
|
||||
/*
|
||||
@ -433,7 +433,7 @@ AES_ENDPROC(aes_ctr_encrypt)
|
||||
uzp1 xtsmask.4s, xtsmask.4s, \tmp\().4s
|
||||
.endm
|
||||
|
||||
AES_ENTRY(aes_xts_encrypt)
|
||||
AES_FUNC_START(aes_xts_encrypt)
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
|
||||
@ -518,9 +518,9 @@ AES_ENTRY(aes_xts_encrypt)
|
||||
st1 {v2.16b}, [x4] /* overlapping stores */
|
||||
mov w4, wzr
|
||||
b .Lxtsencctsout
|
||||
AES_ENDPROC(aes_xts_encrypt)
|
||||
AES_FUNC_END(aes_xts_encrypt)
|
||||
|
||||
AES_ENTRY(aes_xts_decrypt)
|
||||
AES_FUNC_START(aes_xts_decrypt)
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
|
||||
@ -612,13 +612,13 @@ AES_ENTRY(aes_xts_decrypt)
|
||||
st1 {v2.16b}, [x4] /* overlapping stores */
|
||||
mov w4, wzr
|
||||
b .Lxtsdecctsout
|
||||
AES_ENDPROC(aes_xts_decrypt)
|
||||
AES_FUNC_END(aes_xts_decrypt)
|
||||
|
||||
/*
|
||||
* aes_mac_update(u8 const in[], u32 const rk[], int rounds,
|
||||
* int blocks, u8 dg[], int enc_before, int enc_after)
|
||||
*/
|
||||
AES_ENTRY(aes_mac_update)
|
||||
AES_FUNC_START(aes_mac_update)
|
||||
frame_push 6
|
||||
|
||||
mov x19, x0
|
||||
@ -676,4 +676,4 @@ AES_ENTRY(aes_mac_update)
|
||||
ld1 {v0.16b}, [x23] /* get dg */
|
||||
enc_prepare w21, x20, x0
|
||||
b .Lmacloop4x
|
||||
AES_ENDPROC(aes_mac_update)
|
||||
AES_FUNC_END(aes_mac_update)
|
||||
|
@ -8,8 +8,8 @@
|
||||
#include <linux/linkage.h>
|
||||
#include <asm/assembler.h>
|
||||
|
||||
#define AES_ENTRY(func) SYM_FUNC_START(neon_ ## func)
|
||||
#define AES_ENDPROC(func) SYM_FUNC_END(neon_ ## func)
|
||||
#define AES_FUNC_START(func) SYM_FUNC_START(neon_ ## func)
|
||||
#define AES_FUNC_END(func) SYM_FUNC_END(neon_ ## func)
|
||||
|
||||
xtsmask .req v7
|
||||
cbciv .req v7
|
||||
|
@ -587,20 +587,20 @@ CPU_LE( rev w8, w8 )
|
||||
* struct ghash_key const *k, u64 dg[], u8 ctr[],
|
||||
* int rounds, u8 tag)
|
||||
*/
|
||||
ENTRY(pmull_gcm_encrypt)
|
||||
SYM_FUNC_START(pmull_gcm_encrypt)
|
||||
pmull_gcm_do_crypt 1
|
||||
ENDPROC(pmull_gcm_encrypt)
|
||||
SYM_FUNC_END(pmull_gcm_encrypt)
|
||||
|
||||
/*
|
||||
* void pmull_gcm_decrypt(int blocks, u8 dst[], const u8 src[],
|
||||
* struct ghash_key const *k, u64 dg[], u8 ctr[],
|
||||
* int rounds, u8 tag)
|
||||
*/
|
||||
ENTRY(pmull_gcm_decrypt)
|
||||
SYM_FUNC_START(pmull_gcm_decrypt)
|
||||
pmull_gcm_do_crypt 0
|
||||
ENDPROC(pmull_gcm_decrypt)
|
||||
SYM_FUNC_END(pmull_gcm_decrypt)
|
||||
|
||||
pmull_gcm_ghash_4x:
|
||||
SYM_FUNC_START_LOCAL(pmull_gcm_ghash_4x)
|
||||
movi MASK.16b, #0xe1
|
||||
shl MASK.2d, MASK.2d, #57
|
||||
|
||||
@ -681,9 +681,9 @@ pmull_gcm_ghash_4x:
|
||||
eor XL.16b, XL.16b, T2.16b
|
||||
|
||||
ret
|
||||
ENDPROC(pmull_gcm_ghash_4x)
|
||||
SYM_FUNC_END(pmull_gcm_ghash_4x)
|
||||
|
||||
pmull_gcm_enc_4x:
|
||||
SYM_FUNC_START_LOCAL(pmull_gcm_enc_4x)
|
||||
ld1 {KS0.16b}, [x5] // load upper counter
|
||||
sub w10, w8, #4
|
||||
sub w11, w8, #3
|
||||
@ -746,7 +746,7 @@ pmull_gcm_enc_4x:
|
||||
eor INP3.16b, INP3.16b, KS3.16b
|
||||
|
||||
ret
|
||||
ENDPROC(pmull_gcm_enc_4x)
|
||||
SYM_FUNC_END(pmull_gcm_enc_4x)
|
||||
|
||||
.section ".rodata", "a"
|
||||
.align 6
|
||||
|
65
arch/arm64/include/asm/asm_pointer_auth.h
Normal file
65
arch/arm64/include/asm/asm_pointer_auth.h
Normal file
@ -0,0 +1,65 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
#ifndef __ASM_ASM_POINTER_AUTH_H
|
||||
#define __ASM_ASM_POINTER_AUTH_H
|
||||
|
||||
#include <asm/alternative.h>
|
||||
#include <asm/asm-offsets.h>
|
||||
#include <asm/cpufeature.h>
|
||||
#include <asm/sysreg.h>
|
||||
|
||||
#ifdef CONFIG_ARM64_PTR_AUTH
|
||||
/*
|
||||
* thread.keys_user.ap* as offset exceeds the #imm offset range
|
||||
* so use the base value of ldp as thread.keys_user and offset as
|
||||
* thread.keys_user.ap*.
|
||||
*/
|
||||
.macro ptrauth_keys_install_user tsk, tmp1, tmp2, tmp3
|
||||
mov \tmp1, #THREAD_KEYS_USER
|
||||
add \tmp1, \tsk, \tmp1
|
||||
alternative_if_not ARM64_HAS_ADDRESS_AUTH
|
||||
b .Laddr_auth_skip_\@
|
||||
alternative_else_nop_endif
|
||||
ldp \tmp2, \tmp3, [\tmp1, #PTRAUTH_USER_KEY_APIA]
|
||||
msr_s SYS_APIAKEYLO_EL1, \tmp2
|
||||
msr_s SYS_APIAKEYHI_EL1, \tmp3
|
||||
ldp \tmp2, \tmp3, [\tmp1, #PTRAUTH_USER_KEY_APIB]
|
||||
msr_s SYS_APIBKEYLO_EL1, \tmp2
|
||||
msr_s SYS_APIBKEYHI_EL1, \tmp3
|
||||
ldp \tmp2, \tmp3, [\tmp1, #PTRAUTH_USER_KEY_APDA]
|
||||
msr_s SYS_APDAKEYLO_EL1, \tmp2
|
||||
msr_s SYS_APDAKEYHI_EL1, \tmp3
|
||||
ldp \tmp2, \tmp3, [\tmp1, #PTRAUTH_USER_KEY_APDB]
|
||||
msr_s SYS_APDBKEYLO_EL1, \tmp2
|
||||
msr_s SYS_APDBKEYHI_EL1, \tmp3
|
||||
.Laddr_auth_skip_\@:
|
||||
alternative_if ARM64_HAS_GENERIC_AUTH
|
||||
ldp \tmp2, \tmp3, [\tmp1, #PTRAUTH_USER_KEY_APGA]
|
||||
msr_s SYS_APGAKEYLO_EL1, \tmp2
|
||||
msr_s SYS_APGAKEYHI_EL1, \tmp3
|
||||
alternative_else_nop_endif
|
||||
.endm
|
||||
|
||||
.macro ptrauth_keys_install_kernel tsk, sync, tmp1, tmp2, tmp3
|
||||
alternative_if ARM64_HAS_ADDRESS_AUTH
|
||||
mov \tmp1, #THREAD_KEYS_KERNEL
|
||||
add \tmp1, \tsk, \tmp1
|
||||
ldp \tmp2, \tmp3, [\tmp1, #PTRAUTH_KERNEL_KEY_APIA]
|
||||
msr_s SYS_APIAKEYLO_EL1, \tmp2
|
||||
msr_s SYS_APIAKEYHI_EL1, \tmp3
|
||||
.if \sync == 1
|
||||
isb
|
||||
.endif
|
||||
alternative_else_nop_endif
|
||||
.endm
|
||||
|
||||
#else /* CONFIG_ARM64_PTR_AUTH */
|
||||
|
||||
.macro ptrauth_keys_install_user tsk, tmp1, tmp2, tmp3
|
||||
.endm
|
||||
|
||||
.macro ptrauth_keys_install_kernel tsk, sync, tmp1, tmp2, tmp3
|
||||
.endm
|
||||
|
||||
#endif /* CONFIG_ARM64_PTR_AUTH */
|
||||
|
||||
#endif /* __ASM_ASM_POINTER_AUTH_H */
|
@ -256,12 +256,6 @@ alternative_endif
|
||||
ldr \rd, [\rn, #VMA_VM_MM]
|
||||
.endm
|
||||
|
||||
/*
|
||||
* mmid - get context id from mm pointer (mm->context.id)
|
||||
*/
|
||||
.macro mmid, rd, rn
|
||||
ldr \rd, [\rn, #MM_CONTEXT_ID]
|
||||
.endm
|
||||
/*
|
||||
* read_ctr - read CTR_EL0. If the system has mismatched register fields,
|
||||
* provide the system wide safe value from arm64_ftr_reg_ctrel0.sys_val
|
||||
@ -430,6 +424,16 @@ USER(\label, ic ivau, \tmp2) // invalidate I line PoU
|
||||
9000:
|
||||
.endm
|
||||
|
||||
/*
|
||||
* reset_amuserenr_el0 - reset AMUSERENR_EL0 if AMUv1 present
|
||||
*/
|
||||
.macro reset_amuserenr_el0, tmpreg
|
||||
mrs \tmpreg, id_aa64pfr0_el1 // Check ID_AA64PFR0_EL1
|
||||
ubfx \tmpreg, \tmpreg, #ID_AA64PFR0_AMU_SHIFT, #4
|
||||
cbz \tmpreg, .Lskip_\@ // Skip if no AMU present
|
||||
msr_s SYS_AMUSERENR_EL0, xzr // Disable AMU access from EL0
|
||||
.Lskip_\@:
|
||||
.endm
|
||||
/*
|
||||
* copy_page - copy src to dest using temp registers t1-t8
|
||||
*/
|
||||
|
@ -5,7 +5,12 @@
|
||||
#ifndef __ASM_CHECKSUM_H
|
||||
#define __ASM_CHECKSUM_H
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/in6.h>
|
||||
|
||||
#define _HAVE_ARCH_IPV6_CSUM
|
||||
__sum16 csum_ipv6_magic(const struct in6_addr *saddr,
|
||||
const struct in6_addr *daddr,
|
||||
__u32 len, __u8 proto, __wsum sum);
|
||||
|
||||
static inline __sum16 csum_fold(__wsum csum)
|
||||
{
|
||||
|
24
arch/arm64/include/asm/compiler.h
Normal file
24
arch/arm64/include/asm/compiler.h
Normal file
@ -0,0 +1,24 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
#ifndef __ASM_COMPILER_H
|
||||
#define __ASM_COMPILER_H
|
||||
|
||||
#if defined(CONFIG_ARM64_PTR_AUTH)
|
||||
|
||||
/*
|
||||
* The EL0/EL1 pointer bits used by a pointer authentication code.
|
||||
* This is dependent on TBI0/TBI1 being enabled, or bits 63:56 would also apply.
|
||||
*/
|
||||
#define ptrauth_user_pac_mask() GENMASK_ULL(54, vabits_actual)
|
||||
#define ptrauth_kernel_pac_mask() GENMASK_ULL(63, vabits_actual)
|
||||
|
||||
/* Valid for EL0 TTBR0 and EL1 TTBR1 instruction pointers */
|
||||
#define ptrauth_clear_pac(ptr) \
|
||||
((ptr & BIT_ULL(55)) ? (ptr | ptrauth_kernel_pac_mask()) : \
|
||||
(ptr & ~ptrauth_user_pac_mask()))
|
||||
|
||||
#define __builtin_return_address(val) \
|
||||
(void *)(ptrauth_clear_pac((unsigned long)__builtin_return_address(val)))
|
||||
|
||||
#endif /* CONFIG_ARM64_PTR_AUTH */
|
||||
|
||||
#endif /* __ASM_COMPILER_H */
|
@ -55,12 +55,12 @@ struct cpu_operations {
|
||||
#endif
|
||||
};
|
||||
|
||||
extern const struct cpu_operations *cpu_ops[NR_CPUS];
|
||||
int __init cpu_read_ops(int cpu);
|
||||
int __init init_cpu_ops(int cpu);
|
||||
extern const struct cpu_operations *get_cpu_ops(int cpu);
|
||||
|
||||
static inline void __init cpu_read_bootcpu_ops(void)
|
||||
static inline void __init init_bootcpu_ops(void)
|
||||
{
|
||||
cpu_read_ops(0);
|
||||
init_cpu_ops(0);
|
||||
}
|
||||
|
||||
#endif /* ifndef __ASM_CPU_OPS_H */
|
||||
|
@ -58,7 +58,10 @@
|
||||
#define ARM64_WORKAROUND_SPECULATIVE_AT_NVHE 48
|
||||
#define ARM64_HAS_E0PD 49
|
||||
#define ARM64_HAS_RNG 50
|
||||
#define ARM64_HAS_AMU_EXTN 51
|
||||
#define ARM64_HAS_ADDRESS_AUTH 52
|
||||
#define ARM64_HAS_GENERIC_AUTH 53
|
||||
|
||||
#define ARM64_NCAPS 51
|
||||
#define ARM64_NCAPS 54
|
||||
|
||||
#endif /* __ASM_CPUCAPS_H */
|
||||
|
@ -208,6 +208,10 @@ extern struct arm64_ftr_reg arm64_ftr_reg_ctrel0;
|
||||
* In some non-typical cases either both (a) and (b), or neither,
|
||||
* should be permitted. This can be described by including neither
|
||||
* or both flags in the capability's type field.
|
||||
*
|
||||
* In case of a conflict, the CPU is prevented from booting. If the
|
||||
* ARM64_CPUCAP_PANIC_ON_CONFLICT flag is specified for the capability,
|
||||
* then a kernel panic is triggered.
|
||||
*/
|
||||
|
||||
|
||||
@ -240,6 +244,8 @@ extern struct arm64_ftr_reg arm64_ftr_reg_ctrel0;
|
||||
#define ARM64_CPUCAP_PERMITTED_FOR_LATE_CPU ((u16)BIT(4))
|
||||
/* Is it safe for a late CPU to miss this capability when system has it */
|
||||
#define ARM64_CPUCAP_OPTIONAL_FOR_LATE_CPU ((u16)BIT(5))
|
||||
/* Panic when a conflict is detected */
|
||||
#define ARM64_CPUCAP_PANIC_ON_CONFLICT ((u16)BIT(6))
|
||||
|
||||
/*
|
||||
* CPU errata workarounds that need to be enabled at boot time if one or
|
||||
@ -279,9 +285,20 @@ extern struct arm64_ftr_reg arm64_ftr_reg_ctrel0;
|
||||
|
||||
/*
|
||||
* CPU feature used early in the boot based on the boot CPU. All secondary
|
||||
* CPUs must match the state of the capability as detected by the boot CPU.
|
||||
* CPUs must match the state of the capability as detected by the boot CPU. In
|
||||
* case of a conflict, a kernel panic is triggered.
|
||||
*/
|
||||
#define ARM64_CPUCAP_STRICT_BOOT_CPU_FEATURE ARM64_CPUCAP_SCOPE_BOOT_CPU
|
||||
#define ARM64_CPUCAP_STRICT_BOOT_CPU_FEATURE \
|
||||
(ARM64_CPUCAP_SCOPE_BOOT_CPU | ARM64_CPUCAP_PANIC_ON_CONFLICT)
|
||||
|
||||
/*
|
||||
* CPU feature used early in the boot based on the boot CPU. It is safe for a
|
||||
* late CPU to have this feature even though the boot CPU hasn't enabled it,
|
||||
* although the feature will not be used by Linux in this case. If the boot CPU
|
||||
* has enabled this feature already, then every late CPU must have it.
|
||||
*/
|
||||
#define ARM64_CPUCAP_BOOT_CPU_FEATURE \
|
||||
(ARM64_CPUCAP_SCOPE_BOOT_CPU | ARM64_CPUCAP_PERMITTED_FOR_LATE_CPU)
|
||||
|
||||
struct arm64_cpu_capabilities {
|
||||
const char *desc;
|
||||
@ -340,18 +357,6 @@ static inline int cpucap_default_scope(const struct arm64_cpu_capabilities *cap)
|
||||
return cap->type & ARM64_CPUCAP_SCOPE_MASK;
|
||||
}
|
||||
|
||||
static inline bool
|
||||
cpucap_late_cpu_optional(const struct arm64_cpu_capabilities *cap)
|
||||
{
|
||||
return !!(cap->type & ARM64_CPUCAP_OPTIONAL_FOR_LATE_CPU);
|
||||
}
|
||||
|
||||
static inline bool
|
||||
cpucap_late_cpu_permitted(const struct arm64_cpu_capabilities *cap)
|
||||
{
|
||||
return !!(cap->type & ARM64_CPUCAP_PERMITTED_FOR_LATE_CPU);
|
||||
}
|
||||
|
||||
/*
|
||||
* Generic helper for handling capabilties with multiple (match,enable) pairs
|
||||
* of call backs, sharing the same capability bit.
|
||||
@ -390,14 +395,16 @@ unsigned long cpu_get_elf_hwcap2(void);
|
||||
#define cpu_set_named_feature(name) cpu_set_feature(cpu_feature(name))
|
||||
#define cpu_have_named_feature(name) cpu_have_feature(cpu_feature(name))
|
||||
|
||||
/* System capability check for constant caps */
|
||||
static __always_inline bool __cpus_have_const_cap(int num)
|
||||
static __always_inline bool system_capabilities_finalized(void)
|
||||
{
|
||||
if (num >= ARM64_NCAPS)
|
||||
return false;
|
||||
return static_branch_unlikely(&cpu_hwcap_keys[num]);
|
||||
return static_branch_likely(&arm64_const_caps_ready);
|
||||
}
|
||||
|
||||
/*
|
||||
* Test for a capability with a runtime check.
|
||||
*
|
||||
* Before the capability is detected, this returns false.
|
||||
*/
|
||||
static inline bool cpus_have_cap(unsigned int num)
|
||||
{
|
||||
if (num >= ARM64_NCAPS)
|
||||
@ -405,14 +412,53 @@ static inline bool cpus_have_cap(unsigned int num)
|
||||
return test_bit(num, cpu_hwcaps);
|
||||
}
|
||||
|
||||
/*
|
||||
* Test for a capability without a runtime check.
|
||||
*
|
||||
* Before capabilities are finalized, this returns false.
|
||||
* After capabilities are finalized, this is patched to avoid a runtime check.
|
||||
*
|
||||
* @num must be a compile-time constant.
|
||||
*/
|
||||
static __always_inline bool __cpus_have_const_cap(int num)
|
||||
{
|
||||
if (num >= ARM64_NCAPS)
|
||||
return false;
|
||||
return static_branch_unlikely(&cpu_hwcap_keys[num]);
|
||||
}
|
||||
|
||||
/*
|
||||
* Test for a capability, possibly with a runtime check.
|
||||
*
|
||||
* Before capabilities are finalized, this behaves as cpus_have_cap().
|
||||
* After capabilities are finalized, this is patched to avoid a runtime check.
|
||||
*
|
||||
* @num must be a compile-time constant.
|
||||
*/
|
||||
static __always_inline bool cpus_have_const_cap(int num)
|
||||
{
|
||||
if (static_branch_likely(&arm64_const_caps_ready))
|
||||
if (system_capabilities_finalized())
|
||||
return __cpus_have_const_cap(num);
|
||||
else
|
||||
return cpus_have_cap(num);
|
||||
}
|
||||
|
||||
/*
|
||||
* Test for a capability without a runtime check.
|
||||
*
|
||||
* Before capabilities are finalized, this will BUG().
|
||||
* After capabilities are finalized, this is patched to avoid a runtime check.
|
||||
*
|
||||
* @num must be a compile-time constant.
|
||||
*/
|
||||
static __always_inline bool cpus_have_final_cap(int num)
|
||||
{
|
||||
if (system_capabilities_finalized())
|
||||
return __cpus_have_const_cap(num);
|
||||
else
|
||||
BUG();
|
||||
}
|
||||
|
||||
static inline void cpus_set_cap(unsigned int num)
|
||||
{
|
||||
if (num >= ARM64_NCAPS) {
|
||||
@ -447,6 +493,29 @@ cpuid_feature_extract_unsigned_field(u64 features, int field)
|
||||
return cpuid_feature_extract_unsigned_field_width(features, field, 4);
|
||||
}
|
||||
|
||||
/*
|
||||
* Fields that identify the version of the Performance Monitors Extension do
|
||||
* not follow the standard ID scheme. See ARM DDI 0487E.a page D13-2825,
|
||||
* "Alternative ID scheme used for the Performance Monitors Extension version".
|
||||
*/
|
||||
static inline u64 __attribute_const__
|
||||
cpuid_feature_cap_perfmon_field(u64 features, int field, u64 cap)
|
||||
{
|
||||
u64 val = cpuid_feature_extract_unsigned_field(features, field);
|
||||
u64 mask = GENMASK_ULL(field + 3, field);
|
||||
|
||||
/* Treat IMPLEMENTATION DEFINED functionality as unimplemented */
|
||||
if (val == 0xf)
|
||||
val = 0;
|
||||
|
||||
if (val > cap) {
|
||||
features &= ~mask;
|
||||
features |= (cap << field) & mask;
|
||||
}
|
||||
|
||||
return features;
|
||||
}
|
||||
|
||||
static inline u64 arm64_ftr_mask(const struct arm64_ftr_bits *ftrp)
|
||||
{
|
||||
return (u64)GENMASK(ftrp->shift + ftrp->width - 1, ftrp->shift);
|
||||
@ -590,15 +659,13 @@ static __always_inline bool system_supports_cnp(void)
|
||||
static inline bool system_supports_address_auth(void)
|
||||
{
|
||||
return IS_ENABLED(CONFIG_ARM64_PTR_AUTH) &&
|
||||
(cpus_have_const_cap(ARM64_HAS_ADDRESS_AUTH_ARCH) ||
|
||||
cpus_have_const_cap(ARM64_HAS_ADDRESS_AUTH_IMP_DEF));
|
||||
cpus_have_const_cap(ARM64_HAS_ADDRESS_AUTH);
|
||||
}
|
||||
|
||||
static inline bool system_supports_generic_auth(void)
|
||||
{
|
||||
return IS_ENABLED(CONFIG_ARM64_PTR_AUTH) &&
|
||||
(cpus_have_const_cap(ARM64_HAS_GENERIC_AUTH_ARCH) ||
|
||||
cpus_have_const_cap(ARM64_HAS_GENERIC_AUTH_IMP_DEF));
|
||||
cpus_have_const_cap(ARM64_HAS_GENERIC_AUTH);
|
||||
}
|
||||
|
||||
static inline bool system_uses_irq_prio_masking(void)
|
||||
@ -613,11 +680,6 @@ static inline bool system_has_prio_mask_debugging(void)
|
||||
system_uses_irq_prio_masking();
|
||||
}
|
||||
|
||||
static inline bool system_capabilities_finalized(void)
|
||||
{
|
||||
return static_branch_likely(&arm64_const_caps_ready);
|
||||
}
|
||||
|
||||
#define ARM64_BP_HARDEN_UNKNOWN -1
|
||||
#define ARM64_BP_HARDEN_WA_NEEDED 0
|
||||
#define ARM64_BP_HARDEN_NOT_REQUIRED 1
|
||||
@ -678,6 +740,11 @@ static inline bool cpu_has_hw_af(void)
|
||||
ID_AA64MMFR1_HADBS_SHIFT);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_ARM64_AMU_EXTN
|
||||
/* Check whether the cpu supports the Activity Monitors Unit (AMU) */
|
||||
extern bool cpu_has_amu_feat(int cpu);
|
||||
#endif
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
|
||||
#endif
|
||||
|
@ -60,7 +60,7 @@
|
||||
#define ESR_ELx_EC_BKPT32 (0x38)
|
||||
/* Unallocated EC: 0x39 */
|
||||
#define ESR_ELx_EC_VECTOR32 (0x3A) /* EL2 only */
|
||||
/* Unallocted EC: 0x3B */
|
||||
/* Unallocated EC: 0x3B */
|
||||
#define ESR_ELx_EC_BRK64 (0x3C)
|
||||
/* Unallocated EC: 0x3D - 0x3F */
|
||||
#define ESR_ELx_EC_MAX (0x3F)
|
||||
|
@ -267,6 +267,7 @@
|
||||
|
||||
/* Hyp Coprocessor Trap Register */
|
||||
#define CPTR_EL2_TCPAC (1 << 31)
|
||||
#define CPTR_EL2_TAM (1 << 30)
|
||||
#define CPTR_EL2_TTA (1 << 20)
|
||||
#define CPTR_EL2_TFP (1 << CPTR_EL2_TFP_SHIFT)
|
||||
#define CPTR_EL2_TZ (1 << 8)
|
||||
|
@ -36,6 +36,8 @@
|
||||
*/
|
||||
#define KVM_VECTOR_PREAMBLE (2 * AARCH64_INSN_SIZE)
|
||||
|
||||
#define __SMCCC_WORKAROUND_1_SMC_SZ 36
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
#include <linux/mm.h>
|
||||
@ -75,6 +77,8 @@ extern void __vgic_v3_init_lrs(void);
|
||||
|
||||
extern u32 __kvm_get_mdcr_el2(void);
|
||||
|
||||
extern char __smccc_workaround_1_smc[__SMCCC_WORKAROUND_1_SMC_SZ];
|
||||
|
||||
/* Home-grown __this_cpu_{ptr,read} variants that always work at HYP */
|
||||
#define __hyp_this_cpu_ptr(sym) \
|
||||
({ \
|
||||
|
@ -481,7 +481,7 @@ static inline void *kvm_get_hyp_vector(void)
|
||||
int slot = -1;
|
||||
|
||||
if (cpus_have_const_cap(ARM64_HARDEN_BRANCH_PREDICTOR) && data->fn) {
|
||||
vect = kern_hyp_va(kvm_ksym_ref(__bp_harden_hyp_vecs_start));
|
||||
vect = kern_hyp_va(kvm_ksym_ref(__bp_harden_hyp_vecs));
|
||||
slot = data->hyp_vectors_slot;
|
||||
}
|
||||
|
||||
@ -510,14 +510,13 @@ static inline int kvm_map_vectors(void)
|
||||
* HBP + HEL2 -> use hardened vertors and use exec mapping
|
||||
*/
|
||||
if (cpus_have_const_cap(ARM64_HARDEN_BRANCH_PREDICTOR)) {
|
||||
__kvm_bp_vect_base = kvm_ksym_ref(__bp_harden_hyp_vecs_start);
|
||||
__kvm_bp_vect_base = kvm_ksym_ref(__bp_harden_hyp_vecs);
|
||||
__kvm_bp_vect_base = kern_hyp_va(__kvm_bp_vect_base);
|
||||
}
|
||||
|
||||
if (cpus_have_const_cap(ARM64_HARDEN_EL2_VECTORS)) {
|
||||
phys_addr_t vect_pa = __pa_symbol(__bp_harden_hyp_vecs_start);
|
||||
unsigned long size = (__bp_harden_hyp_vecs_end -
|
||||
__bp_harden_hyp_vecs_start);
|
||||
phys_addr_t vect_pa = __pa_symbol(__bp_harden_hyp_vecs);
|
||||
unsigned long size = __BP_HARDEN_HYP_VECS_SZ;
|
||||
|
||||
/*
|
||||
* Always allocate a spare vector slot, as we don't
|
||||
|
@ -54,6 +54,7 @@
|
||||
#define MODULES_VADDR (BPF_JIT_REGION_END)
|
||||
#define MODULES_VSIZE (SZ_128M)
|
||||
#define VMEMMAP_START (-VMEMMAP_SIZE - SZ_2M)
|
||||
#define VMEMMAP_END (VMEMMAP_START + VMEMMAP_SIZE)
|
||||
#define PCI_IO_END (VMEMMAP_START - SZ_2M)
|
||||
#define PCI_IO_START (PCI_IO_END - PCI_IO_SIZE)
|
||||
#define FIXADDR_TOP (PCI_IO_START - SZ_2M)
|
||||
|
@ -13,6 +13,7 @@
|
||||
#define TTBR_ASID_MASK (UL(0xffff) << 48)
|
||||
|
||||
#define BP_HARDEN_EL2_SLOTS 4
|
||||
#define __BP_HARDEN_HYP_VECS_SZ (BP_HARDEN_EL2_SLOTS * SZ_2K)
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
@ -23,9 +24,9 @@ typedef struct {
|
||||
} mm_context_t;
|
||||
|
||||
/*
|
||||
* This macro is only used by the TLBI code, which cannot race with an
|
||||
* ASID change and therefore doesn't need to reload the counter using
|
||||
* atomic64_read.
|
||||
* This macro is only used by the TLBI and low-level switch_mm() code,
|
||||
* neither of which can race with an ASID change. We therefore don't
|
||||
* need to reload the counter using atomic64_read().
|
||||
*/
|
||||
#define ASID(mm) ((mm)->context.id.counter & 0xffff)
|
||||
|
||||
@ -43,7 +44,8 @@ struct bp_hardening_data {
|
||||
|
||||
#if (defined(CONFIG_HARDEN_BRANCH_PREDICTOR) || \
|
||||
defined(CONFIG_HARDEN_EL2_VECTORS))
|
||||
extern char __bp_harden_hyp_vecs_start[], __bp_harden_hyp_vecs_end[];
|
||||
|
||||
extern char __bp_harden_hyp_vecs[];
|
||||
extern atomic_t arm64_el2_vector_last_slot;
|
||||
#endif /* CONFIG_HARDEN_BRANCH_PREDICTOR || CONFIG_HARDEN_EL2_VECTORS */
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user