Merge branch 'lineage-20' of github.com:LineageOS/android_kernel_qcom_sm8350 into lineage-21
Change-Id: Ic2f27579a391262e3ce327e50fe0b0f5490b0750
This commit is contained in:
commit
fa99342727
@ -480,16 +480,17 @@ Description: information about CPUs heterogeneity.
|
|||||||
cpu_capacity: capacity of cpu#.
|
cpu_capacity: capacity of cpu#.
|
||||||
|
|
||||||
What: /sys/devices/system/cpu/vulnerabilities
|
What: /sys/devices/system/cpu/vulnerabilities
|
||||||
/sys/devices/system/cpu/vulnerabilities/meltdown
|
/sys/devices/system/cpu/vulnerabilities/gather_data_sampling
|
||||||
/sys/devices/system/cpu/vulnerabilities/spectre_v1
|
/sys/devices/system/cpu/vulnerabilities/itlb_multihit
|
||||||
/sys/devices/system/cpu/vulnerabilities/spectre_v2
|
|
||||||
/sys/devices/system/cpu/vulnerabilities/spec_store_bypass
|
|
||||||
/sys/devices/system/cpu/vulnerabilities/l1tf
|
/sys/devices/system/cpu/vulnerabilities/l1tf
|
||||||
/sys/devices/system/cpu/vulnerabilities/mds
|
/sys/devices/system/cpu/vulnerabilities/mds
|
||||||
|
/sys/devices/system/cpu/vulnerabilities/meltdown
|
||||||
|
/sys/devices/system/cpu/vulnerabilities/mmio_stale_data
|
||||||
|
/sys/devices/system/cpu/vulnerabilities/spec_store_bypass
|
||||||
|
/sys/devices/system/cpu/vulnerabilities/spectre_v1
|
||||||
|
/sys/devices/system/cpu/vulnerabilities/spectre_v2
|
||||||
/sys/devices/system/cpu/vulnerabilities/srbds
|
/sys/devices/system/cpu/vulnerabilities/srbds
|
||||||
/sys/devices/system/cpu/vulnerabilities/tsx_async_abort
|
/sys/devices/system/cpu/vulnerabilities/tsx_async_abort
|
||||||
/sys/devices/system/cpu/vulnerabilities/itlb_multihit
|
|
||||||
/sys/devices/system/cpu/vulnerabilities/mmio_stale_data
|
|
||||||
Date: January 2018
|
Date: January 2018
|
||||||
Contact: Linux kernel mailing list <linux-kernel@vger.kernel.org>
|
Contact: Linux kernel mailing list <linux-kernel@vger.kernel.org>
|
||||||
Description: Information about CPU vulnerabilities
|
Description: Information about CPU vulnerabilities
|
||||||
|
@ -82,6 +82,8 @@ Brief summary of control files.
|
|||||||
memory.swappiness set/show swappiness parameter of vmscan
|
memory.swappiness set/show swappiness parameter of vmscan
|
||||||
(See sysctl's vm.swappiness)
|
(See sysctl's vm.swappiness)
|
||||||
memory.move_charge_at_immigrate set/show controls of moving charges
|
memory.move_charge_at_immigrate set/show controls of moving charges
|
||||||
|
This knob is deprecated and shouldn't be
|
||||||
|
used.
|
||||||
memory.oom_control set/show oom controls.
|
memory.oom_control set/show oom controls.
|
||||||
memory.numa_stat show the number of memory usage per numa
|
memory.numa_stat show the number of memory usage per numa
|
||||||
node
|
node
|
||||||
@ -745,8 +747,15 @@ NOTE2:
|
|||||||
It is recommended to set the soft limit always below the hard limit,
|
It is recommended to set the soft limit always below the hard limit,
|
||||||
otherwise the hard limit will take precedence.
|
otherwise the hard limit will take precedence.
|
||||||
|
|
||||||
8. Move charges at task migration
|
8. Move charges at task migration (DEPRECATED!)
|
||||||
=================================
|
===============================================
|
||||||
|
|
||||||
|
THIS IS DEPRECATED!
|
||||||
|
|
||||||
|
It's expensive and unreliable! It's better practice to launch workload
|
||||||
|
tasks directly from inside their target cgroup. Use dedicated workload
|
||||||
|
cgroups to allow fine-grained policy adjustments without having to
|
||||||
|
move physical pages between control domains.
|
||||||
|
|
||||||
Users can move charges associated with a task along with task migration, that
|
Users can move charges associated with a task along with task migration, that
|
||||||
is, uncharge task's pages from the old cgroup and charge them to the new cgroup.
|
is, uncharge task's pages from the old cgroup and charge them to the new cgroup.
|
||||||
|
109
Documentation/admin-guide/hw-vuln/gather_data_sampling.rst
Normal file
109
Documentation/admin-guide/hw-vuln/gather_data_sampling.rst
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
.. SPDX-License-Identifier: GPL-2.0
|
||||||
|
|
||||||
|
GDS - Gather Data Sampling
|
||||||
|
==========================
|
||||||
|
|
||||||
|
Gather Data Sampling is a hardware vulnerability which allows unprivileged
|
||||||
|
speculative access to data which was previously stored in vector registers.
|
||||||
|
|
||||||
|
Problem
|
||||||
|
-------
|
||||||
|
When a gather instruction performs loads from memory, different data elements
|
||||||
|
are merged into the destination vector register. However, when a gather
|
||||||
|
instruction that is transiently executed encounters a fault, stale data from
|
||||||
|
architectural or internal vector registers may get transiently forwarded to the
|
||||||
|
destination vector register instead. This will allow a malicious attacker to
|
||||||
|
infer stale data using typical side channel techniques like cache timing
|
||||||
|
attacks. GDS is a purely sampling-based attack.
|
||||||
|
|
||||||
|
The attacker uses gather instructions to infer the stale vector register data.
|
||||||
|
The victim does not need to do anything special other than use the vector
|
||||||
|
registers. The victim does not need to use gather instructions to be
|
||||||
|
vulnerable.
|
||||||
|
|
||||||
|
Because the buffers are shared between Hyper-Threads cross Hyper-Thread attacks
|
||||||
|
are possible.
|
||||||
|
|
||||||
|
Attack scenarios
|
||||||
|
----------------
|
||||||
|
Without mitigation, GDS can infer stale data across virtually all
|
||||||
|
permission boundaries:
|
||||||
|
|
||||||
|
Non-enclaves can infer SGX enclave data
|
||||||
|
Userspace can infer kernel data
|
||||||
|
Guests can infer data from hosts
|
||||||
|
Guest can infer guest from other guests
|
||||||
|
Users can infer data from other users
|
||||||
|
|
||||||
|
Because of this, it is important to ensure that the mitigation stays enabled in
|
||||||
|
lower-privilege contexts like guests and when running outside SGX enclaves.
|
||||||
|
|
||||||
|
The hardware enforces the mitigation for SGX. Likewise, VMMs should ensure
|
||||||
|
that guests are not allowed to disable the GDS mitigation. If a host erred and
|
||||||
|
allowed this, a guest could theoretically disable GDS mitigation, mount an
|
||||||
|
attack, and re-enable it.
|
||||||
|
|
||||||
|
Mitigation mechanism
|
||||||
|
--------------------
|
||||||
|
This issue is mitigated in microcode. The microcode defines the following new
|
||||||
|
bits:
|
||||||
|
|
||||||
|
================================ === ============================
|
||||||
|
IA32_ARCH_CAPABILITIES[GDS_CTRL] R/O Enumerates GDS vulnerability
|
||||||
|
and mitigation support.
|
||||||
|
IA32_ARCH_CAPABILITIES[GDS_NO] R/O Processor is not vulnerable.
|
||||||
|
IA32_MCU_OPT_CTRL[GDS_MITG_DIS] R/W Disables the mitigation
|
||||||
|
0 by default.
|
||||||
|
IA32_MCU_OPT_CTRL[GDS_MITG_LOCK] R/W Locks GDS_MITG_DIS=0. Writes
|
||||||
|
to GDS_MITG_DIS are ignored
|
||||||
|
Can't be cleared once set.
|
||||||
|
================================ === ============================
|
||||||
|
|
||||||
|
GDS can also be mitigated on systems that don't have updated microcode by
|
||||||
|
disabling AVX. This can be done by setting gather_data_sampling="force" or
|
||||||
|
"clearcpuid=avx" on the kernel command-line.
|
||||||
|
|
||||||
|
If used, these options will disable AVX use by turning off XSAVE YMM support.
|
||||||
|
However, the processor will still enumerate AVX support. Userspace that
|
||||||
|
does not follow proper AVX enumeration to check both AVX *and* XSAVE YMM
|
||||||
|
support will break.
|
||||||
|
|
||||||
|
Mitigation control on the kernel command line
|
||||||
|
---------------------------------------------
|
||||||
|
The mitigation can be disabled by setting "gather_data_sampling=off" or
|
||||||
|
"mitigations=off" on the kernel command line. Not specifying either will default
|
||||||
|
to the mitigation being enabled. Specifying "gather_data_sampling=force" will
|
||||||
|
use the microcode mitigation when available or disable AVX on affected systems
|
||||||
|
where the microcode hasn't been updated to include the mitigation.
|
||||||
|
|
||||||
|
GDS System Information
|
||||||
|
------------------------
|
||||||
|
The kernel provides vulnerability status information through sysfs. For
|
||||||
|
GDS this can be accessed by the following sysfs file:
|
||||||
|
|
||||||
|
/sys/devices/system/cpu/vulnerabilities/gather_data_sampling
|
||||||
|
|
||||||
|
The possible values contained in this file are:
|
||||||
|
|
||||||
|
============================== =============================================
|
||||||
|
Not affected Processor not vulnerable.
|
||||||
|
Vulnerable Processor vulnerable and mitigation disabled.
|
||||||
|
Vulnerable: No microcode Processor vulnerable and microcode is missing
|
||||||
|
mitigation.
|
||||||
|
Mitigation: AVX disabled,
|
||||||
|
no microcode Processor is vulnerable and microcode is missing
|
||||||
|
mitigation. AVX disabled as mitigation.
|
||||||
|
Mitigation: Microcode Processor is vulnerable and mitigation is in
|
||||||
|
effect.
|
||||||
|
Mitigation: Microcode (locked) Processor is vulnerable and mitigation is in
|
||||||
|
effect and cannot be disabled.
|
||||||
|
Unknown: Dependent on
|
||||||
|
hypervisor status Running on a virtual guest processor that is
|
||||||
|
affected but with no way to know if host
|
||||||
|
processor is mitigated or vulnerable.
|
||||||
|
============================== =============================================
|
||||||
|
|
||||||
|
GDS Default mitigation
|
||||||
|
----------------------
|
||||||
|
The updated microcode will enable the mitigation by default. The kernel's
|
||||||
|
default action is to leave the mitigation enabled.
|
@ -16,3 +16,4 @@ are configurable at compile, boot or run time.
|
|||||||
multihit.rst
|
multihit.rst
|
||||||
special-register-buffer-data-sampling.rst
|
special-register-buffer-data-sampling.rst
|
||||||
processor_mmio_stale_data.rst
|
processor_mmio_stale_data.rst
|
||||||
|
gather_data_sampling.rst
|
||||||
|
@ -479,8 +479,16 @@ Spectre variant 2
|
|||||||
On Intel Skylake-era systems the mitigation covers most, but not all,
|
On Intel Skylake-era systems the mitigation covers most, but not all,
|
||||||
cases. See :ref:`[3] <spec_ref3>` for more details.
|
cases. See :ref:`[3] <spec_ref3>` for more details.
|
||||||
|
|
||||||
On CPUs with hardware mitigation for Spectre variant 2 (e.g. Enhanced
|
On CPUs with hardware mitigation for Spectre variant 2 (e.g. IBRS
|
||||||
IBRS on x86), retpoline is automatically disabled at run time.
|
or enhanced IBRS on x86), retpoline is automatically disabled at run time.
|
||||||
|
|
||||||
|
Systems which support enhanced IBRS (eIBRS) enable IBRS protection once at
|
||||||
|
boot, by setting the IBRS bit, and they're automatically protected against
|
||||||
|
Spectre v2 variant attacks, including cross-thread branch target injections
|
||||||
|
on SMT systems (STIBP). In other words, eIBRS enables STIBP too.
|
||||||
|
|
||||||
|
Legacy IBRS systems clear the IBRS bit on exit to userspace and
|
||||||
|
therefore explicitly enable STIBP for that
|
||||||
|
|
||||||
The retpoline mitigation is turned on by default on vulnerable
|
The retpoline mitigation is turned on by default on vulnerable
|
||||||
CPUs. It can be forced on or off by the administrator
|
CPUs. It can be forced on or off by the administrator
|
||||||
@ -504,9 +512,12 @@ Spectre variant 2
|
|||||||
For Spectre variant 2 mitigation, individual user programs
|
For Spectre variant 2 mitigation, individual user programs
|
||||||
can be compiled with return trampolines for indirect branches.
|
can be compiled with return trampolines for indirect branches.
|
||||||
This protects them from consuming poisoned entries in the branch
|
This protects them from consuming poisoned entries in the branch
|
||||||
target buffer left by malicious software. Alternatively, the
|
target buffer left by malicious software.
|
||||||
programs can disable their indirect branch speculation via prctl()
|
|
||||||
(See :ref:`Documentation/userspace-api/spec_ctrl.rst <set_spec_ctrl>`).
|
On legacy IBRS systems, at return to userspace, implicit STIBP is disabled
|
||||||
|
because the kernel clears the IBRS bit. In this case, the userspace programs
|
||||||
|
can disable indirect branch speculation via prctl() (See
|
||||||
|
:ref:`Documentation/userspace-api/spec_ctrl.rst <set_spec_ctrl>`).
|
||||||
On x86, this will turn on STIBP to guard against attacks from the
|
On x86, this will turn on STIBP to guard against attacks from the
|
||||||
sibling thread when the user program is running, and use IBPB to
|
sibling thread when the user program is running, and use IBPB to
|
||||||
flush the branch target buffer when switching to/from the program.
|
flush the branch target buffer when switching to/from the program.
|
||||||
|
@ -834,10 +834,6 @@
|
|||||||
|
|
||||||
debugpat [X86] Enable PAT debugging
|
debugpat [X86] Enable PAT debugging
|
||||||
|
|
||||||
decnet.addr= [HW,NET]
|
|
||||||
Format: <area>[,<node>]
|
|
||||||
See also Documentation/networking/decnet.txt.
|
|
||||||
|
|
||||||
default_hugepagesz=
|
default_hugepagesz=
|
||||||
[same as hugepagesz=] The size of the default
|
[same as hugepagesz=] The size of the default
|
||||||
HugeTLB page size. This is the size represented by
|
HugeTLB page size. This is the size represented by
|
||||||
@ -1349,6 +1345,26 @@
|
|||||||
Format: off | on
|
Format: off | on
|
||||||
default: on
|
default: on
|
||||||
|
|
||||||
|
gather_data_sampling=
|
||||||
|
[X86,INTEL] Control the Gather Data Sampling (GDS)
|
||||||
|
mitigation.
|
||||||
|
|
||||||
|
Gather Data Sampling is a hardware vulnerability which
|
||||||
|
allows unprivileged speculative access to data which was
|
||||||
|
previously stored in vector registers.
|
||||||
|
|
||||||
|
This issue is mitigated by default in updated microcode.
|
||||||
|
The mitigation may have a performance impact but can be
|
||||||
|
disabled. On systems without the microcode mitigation
|
||||||
|
disabling AVX serves as a mitigation.
|
||||||
|
|
||||||
|
force: Disable AVX to mitigate systems without
|
||||||
|
microcode mitigation. No effect if the microcode
|
||||||
|
mitigation is present. Known to cause crashes in
|
||||||
|
userspace with buggy AVX enumeration.
|
||||||
|
|
||||||
|
off: Disable GDS mitigation.
|
||||||
|
|
||||||
gcov_persist= [GCOV] When non-zero (default), profiling data for
|
gcov_persist= [GCOV] When non-zero (default), profiling data for
|
||||||
kernel modules is saved and remains accessible via
|
kernel modules is saved and remains accessible via
|
||||||
debugfs, even when the module is unloaded/reloaded.
|
debugfs, even when the module is unloaded/reloaded.
|
||||||
@ -1953,24 +1969,57 @@
|
|||||||
|
|
||||||
ivrs_ioapic [HW,X86_64]
|
ivrs_ioapic [HW,X86_64]
|
||||||
Provide an override to the IOAPIC-ID<->DEVICE-ID
|
Provide an override to the IOAPIC-ID<->DEVICE-ID
|
||||||
mapping provided in the IVRS ACPI table. For
|
mapping provided in the IVRS ACPI table.
|
||||||
example, to map IOAPIC-ID decimal 10 to
|
By default, PCI segment is 0, and can be omitted.
|
||||||
PCI device 00:14.0 write the parameter as:
|
|
||||||
|
For example, to map IOAPIC-ID decimal 10 to
|
||||||
|
PCI segment 0x1 and PCI device 00:14.0,
|
||||||
|
write the parameter as:
|
||||||
|
ivrs_ioapic=10@0001:00:14.0
|
||||||
|
|
||||||
|
Deprecated formats:
|
||||||
|
* To map IOAPIC-ID decimal 10 to PCI device 00:14.0
|
||||||
|
write the parameter as:
|
||||||
ivrs_ioapic[10]=00:14.0
|
ivrs_ioapic[10]=00:14.0
|
||||||
|
* To map IOAPIC-ID decimal 10 to PCI segment 0x1 and
|
||||||
|
PCI device 00:14.0 write the parameter as:
|
||||||
|
ivrs_ioapic[10]=0001:00:14.0
|
||||||
|
|
||||||
ivrs_hpet [HW,X86_64]
|
ivrs_hpet [HW,X86_64]
|
||||||
Provide an override to the HPET-ID<->DEVICE-ID
|
Provide an override to the HPET-ID<->DEVICE-ID
|
||||||
mapping provided in the IVRS ACPI table. For
|
mapping provided in the IVRS ACPI table.
|
||||||
example, to map HPET-ID decimal 0 to
|
By default, PCI segment is 0, and can be omitted.
|
||||||
PCI device 00:14.0 write the parameter as:
|
|
||||||
|
For example, to map HPET-ID decimal 10 to
|
||||||
|
PCI segment 0x1 and PCI device 00:14.0,
|
||||||
|
write the parameter as:
|
||||||
|
ivrs_hpet=10@0001:00:14.0
|
||||||
|
|
||||||
|
Deprecated formats:
|
||||||
|
* To map HPET-ID decimal 0 to PCI device 00:14.0
|
||||||
|
write the parameter as:
|
||||||
ivrs_hpet[0]=00:14.0
|
ivrs_hpet[0]=00:14.0
|
||||||
|
* To map HPET-ID decimal 10 to PCI segment 0x1 and
|
||||||
|
PCI device 00:14.0 write the parameter as:
|
||||||
|
ivrs_ioapic[10]=0001:00:14.0
|
||||||
|
|
||||||
ivrs_acpihid [HW,X86_64]
|
ivrs_acpihid [HW,X86_64]
|
||||||
Provide an override to the ACPI-HID:UID<->DEVICE-ID
|
Provide an override to the ACPI-HID:UID<->DEVICE-ID
|
||||||
mapping provided in the IVRS ACPI table. For
|
mapping provided in the IVRS ACPI table.
|
||||||
example, to map UART-HID:UID AMD0020:0 to
|
By default, PCI segment is 0, and can be omitted.
|
||||||
PCI device 00:14.5 write the parameter as:
|
|
||||||
|
For example, to map UART-HID:UID AMD0020:0 to
|
||||||
|
PCI segment 0x1 and PCI device ID 00:14.5,
|
||||||
|
write the parameter as:
|
||||||
|
ivrs_acpihid=AMD0020:0@0001:00:14.5
|
||||||
|
|
||||||
|
Deprecated formats:
|
||||||
|
* To map UART-HID:UID AMD0020:0 to PCI segment is 0,
|
||||||
|
PCI device ID 00:14.5, write the parameter as:
|
||||||
ivrs_acpihid[00:14.5]=AMD0020:0
|
ivrs_acpihid[00:14.5]=AMD0020:0
|
||||||
|
* To map UART-HID:UID AMD0020:0 to PCI segment 0x1 and
|
||||||
|
PCI device ID 00:14.5, write the parameter as:
|
||||||
|
ivrs_acpihid[0001:00:14.5]=AMD0020:0
|
||||||
|
|
||||||
js= [HW,JOY] Analog joystick
|
js= [HW,JOY] Analog joystick
|
||||||
See Documentation/input/joydev/joystick.rst.
|
See Documentation/input/joydev/joystick.rst.
|
||||||
@ -2676,21 +2725,22 @@
|
|||||||
Disable all optional CPU mitigations. This
|
Disable all optional CPU mitigations. This
|
||||||
improves system performance, but it may also
|
improves system performance, but it may also
|
||||||
expose users to several CPU vulnerabilities.
|
expose users to several CPU vulnerabilities.
|
||||||
Equivalent to: nopti [X86,PPC]
|
Equivalent to: gather_data_sampling=off [X86]
|
||||||
kpti=0 [ARM64]
|
kpti=0 [ARM64]
|
||||||
nospectre_v1 [X86,PPC]
|
kvm.nx_huge_pages=off [X86]
|
||||||
nobp=0 [S390]
|
|
||||||
nospectre_v2 [X86,PPC,S390,ARM64]
|
|
||||||
spectre_v2_user=off [X86]
|
|
||||||
spec_store_bypass_disable=off [X86,PPC]
|
|
||||||
ssbd=force-off [ARM64]
|
|
||||||
l1tf=off [X86]
|
l1tf=off [X86]
|
||||||
mds=off [X86]
|
mds=off [X86]
|
||||||
tsx_async_abort=off [X86]
|
mmio_stale_data=off [X86]
|
||||||
kvm.nx_huge_pages=off [X86]
|
|
||||||
no_entry_flush [PPC]
|
no_entry_flush [PPC]
|
||||||
no_uaccess_flush [PPC]
|
no_uaccess_flush [PPC]
|
||||||
mmio_stale_data=off [X86]
|
nobp=0 [S390]
|
||||||
|
nopti [X86,PPC]
|
||||||
|
nospectre_v1 [X86,PPC]
|
||||||
|
nospectre_v2 [X86,PPC,S390,ARM64]
|
||||||
|
spec_store_bypass_disable=off [X86,PPC]
|
||||||
|
spectre_v2_user=off [X86]
|
||||||
|
ssbd=force-off [ARM64]
|
||||||
|
tsx_async_abort=off [X86]
|
||||||
|
|
||||||
Exceptions:
|
Exceptions:
|
||||||
This does not have any effect on
|
This does not have any effect on
|
||||||
|
@ -56,31 +56,28 @@ information submitted to the security list and any followup discussions
|
|||||||
of the report are treated confidentially even after the embargo has been
|
of the report are treated confidentially even after the embargo has been
|
||||||
lifted, in perpetuity.
|
lifted, in perpetuity.
|
||||||
|
|
||||||
Coordination
|
Coordination with other groups
|
||||||
------------
|
------------------------------
|
||||||
|
|
||||||
Fixes for sensitive bugs, such as those that might lead to privilege
|
The kernel security team strongly recommends that reporters of potential
|
||||||
escalations, may need to be coordinated with the private
|
security issues NEVER contact the "linux-distros" mailing list until
|
||||||
<linux-distros@vs.openwall.org> mailing list so that distribution vendors
|
AFTER discussing it with the kernel security team. Do not Cc: both
|
||||||
are well prepared to issue a fixed kernel upon public disclosure of the
|
lists at once. You may contact the linux-distros mailing list after a
|
||||||
upstream fix. Distros will need some time to test the proposed patch and
|
fix has been agreed on and you fully understand the requirements that
|
||||||
will generally request at least a few days of embargo, and vendor update
|
doing so will impose on you and the kernel community.
|
||||||
publication prefers to happen Tuesday through Thursday. When appropriate,
|
|
||||||
the security team can assist with this coordination, or the reporter can
|
The different lists have different goals and the linux-distros rules do
|
||||||
include linux-distros from the start. In this case, remember to prefix
|
not contribute to actually fixing any potential security problems.
|
||||||
the email Subject line with "[vs]" as described in the linux-distros wiki:
|
|
||||||
<http://oss-security.openwall.org/wiki/mailing-lists/distros#how-to-use-the-lists>
|
|
||||||
|
|
||||||
CVE assignment
|
CVE assignment
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
The security team does not normally assign CVEs, nor do we require them
|
The security team does not assign CVEs, nor do we require them for
|
||||||
for reports or fixes, as this can needlessly complicate the process and
|
reports or fixes, as this can needlessly complicate the process and may
|
||||||
may delay the bug handling. If a reporter wishes to have a CVE identifier
|
delay the bug handling. If a reporter wishes to have a CVE identifier
|
||||||
assigned ahead of public disclosure, they will need to contact the private
|
assigned, they should find one by themselves, for example by contacting
|
||||||
linux-distros list, described above. When such a CVE identifier is known
|
MITRE directly. However under no circumstances will a patch inclusion
|
||||||
before a patch is provided, it is desirable to mention it in the commit
|
be delayed to wait for a CVE identifier to arrive.
|
||||||
message if the reporter agrees.
|
|
||||||
|
|
||||||
Non-disclosure agreements
|
Non-disclosure agreements
|
||||||
-------------------------
|
-------------------------
|
||||||
|
@ -31,17 +31,18 @@ see only some of them, depending on your kernel's configuration.
|
|||||||
|
|
||||||
Table : Subdirectories in /proc/sys/net
|
Table : Subdirectories in /proc/sys/net
|
||||||
|
|
||||||
========= =================== = ========== ==================
|
========= =================== = ========== ===================
|
||||||
Directory Content Directory Content
|
Directory Content Directory Content
|
||||||
========= =================== = ========== ==================
|
========= =================== = ========== ===================
|
||||||
core General parameter appletalk Appletalk protocol
|
802 E802 protocol mptcp Multipath TCP
|
||||||
unix Unix domain sockets netrom NET/ROM
|
appletalk Appletalk protocol netfilter Network Filter
|
||||||
802 E802 protocol ax25 AX25
|
ax25 AX25 netrom NET/ROM
|
||||||
ethernet Ethernet protocol rose X.25 PLP layer
|
bridge Bridging rose X.25 PLP layer
|
||||||
|
core General parameter tipc TIPC
|
||||||
|
ethernet Ethernet protocol unix Unix domain sockets
|
||||||
ipv4 IP version 4 x25 X.25 protocol
|
ipv4 IP version 4 x25 X.25 protocol
|
||||||
bridge Bridging decnet DEC net
|
ipv6 IP version 6
|
||||||
ipv6 IP version 6 tipc TIPC
|
========= =================== = ========== ===================
|
||||||
========= =================== = ========== ==================
|
|
||||||
|
|
||||||
1. /proc/sys/net/core - Network core options
|
1. /proc/sys/net/core - Network core options
|
||||||
============================================
|
============================================
|
||||||
|
@ -64,6 +64,7 @@ Currently, these files are in /proc/sys/vm:
|
|||||||
- overcommit_memory
|
- overcommit_memory
|
||||||
- overcommit_ratio
|
- overcommit_ratio
|
||||||
- page-cluster
|
- page-cluster
|
||||||
|
- page_lock_unfairness
|
||||||
- panic_on_oom
|
- panic_on_oom
|
||||||
- percpu_pagelist_fraction
|
- percpu_pagelist_fraction
|
||||||
- stat_interval
|
- stat_interval
|
||||||
@ -794,6 +795,14 @@ extra faults and I/O delays for following faults if they would have been part of
|
|||||||
that consecutive pages readahead would have brought in.
|
that consecutive pages readahead would have brought in.
|
||||||
|
|
||||||
|
|
||||||
|
page_lock_unfairness
|
||||||
|
====================
|
||||||
|
|
||||||
|
This value determines the number of times that the page lock can be
|
||||||
|
stolen from under a waiter. After the lock is stolen the number of times
|
||||||
|
specified in this file (default is 5), the "fair lock handoff" semantics
|
||||||
|
will apply, and the waiter will only be awakened if the lock can be taken.
|
||||||
|
|
||||||
panic_on_oom
|
panic_on_oom
|
||||||
============
|
============
|
||||||
|
|
||||||
|
@ -134,6 +134,9 @@ stable kernels.
|
|||||||
+----------------+-----------------+-----------------+-----------------------------+
|
+----------------+-----------------+-----------------+-----------------------------+
|
||||||
| Hisilicon | Hip08 SMMU PMCG | #162001800 | N/A |
|
| Hisilicon | Hip08 SMMU PMCG | #162001800 | N/A |
|
||||||
+----------------+-----------------+-----------------+-----------------------------+
|
+----------------+-----------------+-----------------+-----------------------------+
|
||||||
|
| Hisilicon | Hip08 SMMU PMCG | #162001900 | N/A |
|
||||||
|
| | Hip09 SMMU PMCG | | |
|
||||||
|
+----------------+-----------------+-----------------+-----------------------------+
|
||||||
+----------------+-----------------+-----------------+-----------------------------+
|
+----------------+-----------------+-----------------+-----------------------------+
|
||||||
| Qualcomm Tech. | Kryo/Falkor v1 | E1003 | QCOM_FALKOR_ERRATUM_1003 |
|
| Qualcomm Tech. | Kryo/Falkor v1 | E1003 | QCOM_FALKOR_ERRATUM_1003 |
|
||||||
+----------------+-----------------+-----------------+-----------------------------+
|
+----------------+-----------------+-----------------+-----------------------------+
|
||||||
|
@ -39,6 +39,10 @@ Setup
|
|||||||
this mode. In this case, you should build the kernel with
|
this mode. In this case, you should build the kernel with
|
||||||
CONFIG_RANDOMIZE_BASE disabled if the architecture supports KASLR.
|
CONFIG_RANDOMIZE_BASE disabled if the architecture supports KASLR.
|
||||||
|
|
||||||
|
- Build the gdb scripts (required on kernels v5.1 and above)::
|
||||||
|
|
||||||
|
make scripts_gdb
|
||||||
|
|
||||||
- Enable the gdb stub of QEMU/KVM, either
|
- Enable the gdb stub of QEMU/KVM, either
|
||||||
|
|
||||||
- at VM startup time by appending "-s" to the QEMU command line
|
- at VM startup time by appending "-s" to the QEMU command line
|
||||||
|
@ -22,12 +22,11 @@ exclusive.
|
|||||||
3) object removal. Locking rules: caller locks parent, finds victim,
|
3) object removal. Locking rules: caller locks parent, finds victim,
|
||||||
locks victim and calls the method. Locks are exclusive.
|
locks victim and calls the method. Locks are exclusive.
|
||||||
|
|
||||||
4) rename() that is _not_ cross-directory. Locking rules: caller locks
|
4) rename() that is _not_ cross-directory. Locking rules: caller locks the
|
||||||
the parent and finds source and target. In case of exchange (with
|
parent and finds source and target. We lock both (provided they exist). If we
|
||||||
RENAME_EXCHANGE in flags argument) lock both. In any case,
|
need to lock two inodes of different type (dir vs non-dir), we lock directory
|
||||||
if the target already exists, lock it. If the source is a non-directory,
|
first. If we need to lock two inodes of the same type, lock them in inode
|
||||||
lock it. If we need to lock both, lock them in inode pointer order.
|
pointer order. Then call the method. All locks are exclusive.
|
||||||
Then call the method. All locks are exclusive.
|
|
||||||
NB: we might get away with locking the the source (and target in exchange
|
NB: we might get away with locking the the source (and target in exchange
|
||||||
case) shared.
|
case) shared.
|
||||||
|
|
||||||
@ -44,15 +43,17 @@ All locks are exclusive.
|
|||||||
rules:
|
rules:
|
||||||
|
|
||||||
* lock the filesystem
|
* lock the filesystem
|
||||||
* lock parents in "ancestors first" order.
|
* lock parents in "ancestors first" order. If one is not ancestor of
|
||||||
|
the other, lock them in inode pointer order.
|
||||||
* find source and target.
|
* find source and target.
|
||||||
* if old parent is equal to or is a descendent of target
|
* if old parent is equal to or is a descendent of target
|
||||||
fail with -ENOTEMPTY
|
fail with -ENOTEMPTY
|
||||||
* if new parent is equal to or is a descendent of source
|
* if new parent is equal to or is a descendent of source
|
||||||
fail with -ELOOP
|
fail with -ELOOP
|
||||||
* If it's an exchange, lock both the source and the target.
|
* Lock both the source and the target provided they exist. If we
|
||||||
* If the target exists, lock it. If the source is a non-directory,
|
need to lock two inodes of different type (dir vs non-dir), we lock
|
||||||
lock it. If we need to lock both, do so in inode pointer order.
|
the directory first. If we need to lock two inodes of the same type,
|
||||||
|
lock them in inode pointer order.
|
||||||
* call the method.
|
* call the method.
|
||||||
|
|
||||||
All ->i_rwsem are taken exclusive. Again, we might get away with locking
|
All ->i_rwsem are taken exclusive. Again, we might get away with locking
|
||||||
@ -66,8 +67,9 @@ If no directory is its own ancestor, the scheme above is deadlock-free.
|
|||||||
|
|
||||||
Proof:
|
Proof:
|
||||||
|
|
||||||
First of all, at any moment we have a partial ordering of the
|
First of all, at any moment we have a linear ordering of the
|
||||||
objects - A < B iff A is an ancestor of B.
|
objects - A < B iff (A is an ancestor of B) or (B is not an ancestor
|
||||||
|
of A and ptr(A) < ptr(B)).
|
||||||
|
|
||||||
That ordering can change. However, the following is true:
|
That ordering can change. However, the following is true:
|
||||||
|
|
||||||
|
@ -1173,7 +1173,7 @@ defined:
|
|||||||
return
|
return
|
||||||
-ECHILD and it will be called again in ref-walk mode.
|
-ECHILD and it will be called again in ref-walk mode.
|
||||||
|
|
||||||
``_weak_revalidate``
|
``d_weak_revalidate``
|
||||||
called when the VFS needs to revalidate a "jumped" dentry. This
|
called when the VFS needs to revalidate a "jumped" dentry. This
|
||||||
is called when a path-walk ends at dentry that was not acquired
|
is called when a path-walk ends at dentry that was not acquired
|
||||||
by doing a lookup in the parent directory. This includes "/",
|
by doing a lookup in the parent directory. This includes "/",
|
||||||
|
@ -302,7 +302,6 @@ Code Seq# Include File Comments
|
|||||||
0x89 00-06 arch/x86/include/asm/sockios.h
|
0x89 00-06 arch/x86/include/asm/sockios.h
|
||||||
0x89 0B-DF linux/sockios.h
|
0x89 0B-DF linux/sockios.h
|
||||||
0x89 E0-EF linux/sockios.h SIOCPROTOPRIVATE range
|
0x89 E0-EF linux/sockios.h SIOCPROTOPRIVATE range
|
||||||
0x89 E0-EF linux/dn.h PROTOPRIVATE range
|
|
||||||
0x89 F0-FF linux/sockios.h SIOCDEVPRIVATE range
|
0x89 F0-FF linux/sockios.h SIOCDEVPRIVATE range
|
||||||
0x8B all linux/wireless.h
|
0x8B all linux/wireless.h
|
||||||
0x8C 00-3F WiNRADiO driver
|
0x8C 00-3F WiNRADiO driver
|
||||||
|
@ -7794,3 +7794,30 @@ formats.
|
|||||||
- 0x5001
|
- 0x5001
|
||||||
- Interleaved raw UYVY and JPEG image format with embedded meta-data
|
- Interleaved raw UYVY and JPEG image format with embedded meta-data
|
||||||
used by Samsung S3C73MX camera sensors.
|
used by Samsung S3C73MX camera sensors.
|
||||||
|
|
||||||
|
.. _v4l2-mbus-metadata-fmts:
|
||||||
|
|
||||||
|
Metadata Formats
|
||||||
|
^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
This section lists all metadata formats.
|
||||||
|
|
||||||
|
The following table lists the existing metadata formats.
|
||||||
|
|
||||||
|
.. tabularcolumns:: |p{8.0cm}|p{1.4cm}|p{7.7cm}|
|
||||||
|
|
||||||
|
.. flat-table:: Metadata formats
|
||||||
|
:header-rows: 1
|
||||||
|
:stub-columns: 0
|
||||||
|
|
||||||
|
* - Identifier
|
||||||
|
- Code
|
||||||
|
- Comments
|
||||||
|
* .. _MEDIA-BUS-FMT-METADATA-FIXED:
|
||||||
|
|
||||||
|
- MEDIA_BUS_FMT_METADATA_FIXED
|
||||||
|
- 0x7001
|
||||||
|
- This format should be used when the same driver handles
|
||||||
|
both sides of the link and the bus format is a fixed
|
||||||
|
metadata format that is not configurable from userspace.
|
||||||
|
Width and height will be set to 0 for this format.
|
||||||
|
@ -40,13 +40,13 @@ allocates memory for this UMEM using whatever means it feels is most
|
|||||||
appropriate (malloc, mmap, huge pages, etc). This memory area is then
|
appropriate (malloc, mmap, huge pages, etc). This memory area is then
|
||||||
registered with the kernel using the new setsockopt XDP_UMEM_REG. The
|
registered with the kernel using the new setsockopt XDP_UMEM_REG. The
|
||||||
UMEM also has two rings: the FILL ring and the COMPLETION ring. The
|
UMEM also has two rings: the FILL ring and the COMPLETION ring. The
|
||||||
fill ring is used by the application to send down addr for the kernel
|
FILL ring is used by the application to send down addr for the kernel
|
||||||
to fill in with RX packet data. References to these frames will then
|
to fill in with RX packet data. References to these frames will then
|
||||||
appear in the RX ring once each packet has been received. The
|
appear in the RX ring once each packet has been received. The
|
||||||
completion ring, on the other hand, contains frame addr that the
|
COMPLETION ring, on the other hand, contains frame addr that the
|
||||||
kernel has transmitted completely and can now be used again by user
|
kernel has transmitted completely and can now be used again by user
|
||||||
space, for either TX or RX. Thus, the frame addrs appearing in the
|
space, for either TX or RX. Thus, the frame addrs appearing in the
|
||||||
completion ring are addrs that were previously transmitted using the
|
COMPLETION ring are addrs that were previously transmitted using the
|
||||||
TX ring. In summary, the RX and FILL rings are used for the RX path
|
TX ring. In summary, the RX and FILL rings are used for the RX path
|
||||||
and the TX and COMPLETION rings are used for the TX path.
|
and the TX and COMPLETION rings are used for the TX path.
|
||||||
|
|
||||||
@ -91,11 +91,16 @@ Concepts
|
|||||||
========
|
========
|
||||||
|
|
||||||
In order to use an AF_XDP socket, a number of associated objects need
|
In order to use an AF_XDP socket, a number of associated objects need
|
||||||
to be setup.
|
to be setup. These objects and their options are explained in the
|
||||||
|
following sections.
|
||||||
|
|
||||||
Jonathan Corbet has also written an excellent article on LWN,
|
For an overview on how AF_XDP works, you can also take a look at the
|
||||||
"Accelerating networking with AF_XDP". It can be found at
|
Linux Plumbers paper from 2018 on the subject:
|
||||||
https://lwn.net/Articles/750845/.
|
http://vger.kernel.org/lpc_net2018_talks/lpc18_paper_af_xdp_perf-v2.pdf. Do
|
||||||
|
NOT consult the paper from 2017 on "AF_PACKET v4", the first attempt
|
||||||
|
at AF_XDP. Nearly everything changed since then. Jonathan Corbet has
|
||||||
|
also written an excellent article on LWN, "Accelerating networking
|
||||||
|
with AF_XDP". It can be found at https://lwn.net/Articles/750845/.
|
||||||
|
|
||||||
UMEM
|
UMEM
|
||||||
----
|
----
|
||||||
@ -113,22 +118,22 @@ the next socket B can do this by setting the XDP_SHARED_UMEM flag in
|
|||||||
struct sockaddr_xdp member sxdp_flags, and passing the file descriptor
|
struct sockaddr_xdp member sxdp_flags, and passing the file descriptor
|
||||||
of A to struct sockaddr_xdp member sxdp_shared_umem_fd.
|
of A to struct sockaddr_xdp member sxdp_shared_umem_fd.
|
||||||
|
|
||||||
The UMEM has two single-producer/single-consumer rings, that are used
|
The UMEM has two single-producer/single-consumer rings that are used
|
||||||
to transfer ownership of UMEM frames between the kernel and the
|
to transfer ownership of UMEM frames between the kernel and the
|
||||||
user-space application.
|
user-space application.
|
||||||
|
|
||||||
Rings
|
Rings
|
||||||
-----
|
-----
|
||||||
|
|
||||||
There are a four different kind of rings: Fill, Completion, RX and
|
There are a four different kind of rings: FILL, COMPLETION, RX and
|
||||||
TX. All rings are single-producer/single-consumer, so the user-space
|
TX. All rings are single-producer/single-consumer, so the user-space
|
||||||
application need explicit synchronization of multiple
|
application need explicit synchronization of multiple
|
||||||
processes/threads are reading/writing to them.
|
processes/threads are reading/writing to them.
|
||||||
|
|
||||||
The UMEM uses two rings: Fill and Completion. Each socket associated
|
The UMEM uses two rings: FILL and COMPLETION. Each socket associated
|
||||||
with the UMEM must have an RX queue, TX queue or both. Say, that there
|
with the UMEM must have an RX queue, TX queue or both. Say, that there
|
||||||
is a setup with four sockets (all doing TX and RX). Then there will be
|
is a setup with four sockets (all doing TX and RX). Then there will be
|
||||||
one Fill ring, one Completion ring, four TX rings and four RX rings.
|
one FILL ring, one COMPLETION ring, four TX rings and four RX rings.
|
||||||
|
|
||||||
The rings are head(producer)/tail(consumer) based rings. A producer
|
The rings are head(producer)/tail(consumer) based rings. A producer
|
||||||
writes the data ring at the index pointed out by struct xdp_ring
|
writes the data ring at the index pointed out by struct xdp_ring
|
||||||
@ -146,7 +151,7 @@ The size of the rings need to be of size power of two.
|
|||||||
UMEM Fill Ring
|
UMEM Fill Ring
|
||||||
~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~
|
||||||
|
|
||||||
The Fill ring is used to transfer ownership of UMEM frames from
|
The FILL ring is used to transfer ownership of UMEM frames from
|
||||||
user-space to kernel-space. The UMEM addrs are passed in the ring. As
|
user-space to kernel-space. The UMEM addrs are passed in the ring. As
|
||||||
an example, if the UMEM is 64k and each chunk is 4k, then the UMEM has
|
an example, if the UMEM is 64k and each chunk is 4k, then the UMEM has
|
||||||
16 chunks and can pass addrs between 0 and 64k.
|
16 chunks and can pass addrs between 0 and 64k.
|
||||||
@ -164,8 +169,8 @@ chunks mode, then the incoming addr will be left untouched.
|
|||||||
UMEM Completion Ring
|
UMEM Completion Ring
|
||||||
~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
The Completion Ring is used transfer ownership of UMEM frames from
|
The COMPLETION Ring is used transfer ownership of UMEM frames from
|
||||||
kernel-space to user-space. Just like the Fill ring, UMEM indicies are
|
kernel-space to user-space. Just like the FILL ring, UMEM indices are
|
||||||
used.
|
used.
|
||||||
|
|
||||||
Frames passed from the kernel to user-space are frames that has been
|
Frames passed from the kernel to user-space are frames that has been
|
||||||
@ -181,7 +186,7 @@ The RX ring is the receiving side of a socket. Each entry in the ring
|
|||||||
is a struct xdp_desc descriptor. The descriptor contains UMEM offset
|
is a struct xdp_desc descriptor. The descriptor contains UMEM offset
|
||||||
(addr) and the length of the data (len).
|
(addr) and the length of the data (len).
|
||||||
|
|
||||||
If no frames have been passed to kernel via the Fill ring, no
|
If no frames have been passed to kernel via the FILL ring, no
|
||||||
descriptors will (or can) appear on the RX ring.
|
descriptors will (or can) appear on the RX ring.
|
||||||
|
|
||||||
The user application consumes struct xdp_desc descriptors from this
|
The user application consumes struct xdp_desc descriptors from this
|
||||||
@ -199,8 +204,24 @@ be relaxed in the future.
|
|||||||
The user application produces struct xdp_desc descriptors to this
|
The user application produces struct xdp_desc descriptors to this
|
||||||
ring.
|
ring.
|
||||||
|
|
||||||
|
Libbpf
|
||||||
|
======
|
||||||
|
|
||||||
|
Libbpf is a helper library for eBPF and XDP that makes using these
|
||||||
|
technologies a lot simpler. It also contains specific helper functions
|
||||||
|
in tools/lib/bpf/xsk.h for facilitating the use of AF_XDP. It
|
||||||
|
contains two types of functions: those that can be used to make the
|
||||||
|
setup of AF_XDP socket easier and ones that can be used in the data
|
||||||
|
plane to access the rings safely and quickly. To see an example on how
|
||||||
|
to use this API, please take a look at the sample application in
|
||||||
|
samples/bpf/xdpsock_usr.c which uses libbpf for both setup and data
|
||||||
|
plane operations.
|
||||||
|
|
||||||
|
We recommend that you use this library unless you have become a power
|
||||||
|
user. It will make your program a lot simpler.
|
||||||
|
|
||||||
XSKMAP / BPF_MAP_TYPE_XSKMAP
|
XSKMAP / BPF_MAP_TYPE_XSKMAP
|
||||||
----------------------------
|
============================
|
||||||
|
|
||||||
On XDP side there is a BPF map type BPF_MAP_TYPE_XSKMAP (XSKMAP) that
|
On XDP side there is a BPF map type BPF_MAP_TYPE_XSKMAP (XSKMAP) that
|
||||||
is used in conjunction with bpf_redirect_map() to pass the ingress
|
is used in conjunction with bpf_redirect_map() to pass the ingress
|
||||||
@ -216,21 +237,193 @@ queue 17. Only the XDP program executing for eth0 and queue 17 will
|
|||||||
successfully pass data to the socket. Please refer to the sample
|
successfully pass data to the socket. Please refer to the sample
|
||||||
application (samples/bpf/) in for an example.
|
application (samples/bpf/) in for an example.
|
||||||
|
|
||||||
|
Configuration Flags and Socket Options
|
||||||
|
======================================
|
||||||
|
|
||||||
|
These are the various configuration flags that can be used to control
|
||||||
|
and monitor the behavior of AF_XDP sockets.
|
||||||
|
|
||||||
|
XDP_COPY and XDP_ZERO_COPY bind flags
|
||||||
|
-------------------------------------
|
||||||
|
|
||||||
|
When you bind to a socket, the kernel will first try to use zero-copy
|
||||||
|
copy. If zero-copy is not supported, it will fall back on using copy
|
||||||
|
mode, i.e. copying all packets out to user space. But if you would
|
||||||
|
like to force a certain mode, you can use the following flags. If you
|
||||||
|
pass the XDP_COPY flag to the bind call, the kernel will force the
|
||||||
|
socket into copy mode. If it cannot use copy mode, the bind call will
|
||||||
|
fail with an error. Conversely, the XDP_ZERO_COPY flag will force the
|
||||||
|
socket into zero-copy mode or fail.
|
||||||
|
|
||||||
|
XDP_SHARED_UMEM bind flag
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
This flag enables you to bind multiple sockets to the same UMEM, but
|
||||||
|
only if they share the same queue id. In this mode, each socket has
|
||||||
|
their own RX and TX rings, but the UMEM (tied to the fist socket
|
||||||
|
created) only has a single FILL ring and a single COMPLETION
|
||||||
|
ring. To use this mode, create the first socket and bind it in the normal
|
||||||
|
way. Create a second socket and create an RX and a TX ring, or at
|
||||||
|
least one of them, but no FILL or COMPLETION rings as the ones from
|
||||||
|
the first socket will be used. In the bind call, set he
|
||||||
|
XDP_SHARED_UMEM option and provide the initial socket's fd in the
|
||||||
|
sxdp_shared_umem_fd field. You can attach an arbitrary number of extra
|
||||||
|
sockets this way.
|
||||||
|
|
||||||
|
What socket will then a packet arrive on? This is decided by the XDP
|
||||||
|
program. Put all the sockets in the XSK_MAP and just indicate which
|
||||||
|
index in the array you would like to send each packet to. A simple
|
||||||
|
round-robin example of distributing packets is shown below:
|
||||||
|
|
||||||
|
.. code-block:: c
|
||||||
|
|
||||||
|
#include <linux/bpf.h>
|
||||||
|
#include "bpf_helpers.h"
|
||||||
|
|
||||||
|
#define MAX_SOCKS 16
|
||||||
|
|
||||||
|
struct {
|
||||||
|
__uint(type, BPF_MAP_TYPE_XSKMAP);
|
||||||
|
__uint(max_entries, MAX_SOCKS);
|
||||||
|
__uint(key_size, sizeof(int));
|
||||||
|
__uint(value_size, sizeof(int));
|
||||||
|
} xsks_map SEC(".maps");
|
||||||
|
|
||||||
|
static unsigned int rr;
|
||||||
|
|
||||||
|
SEC("xdp_sock") int xdp_sock_prog(struct xdp_md *ctx)
|
||||||
|
{
|
||||||
|
rr = (rr + 1) & (MAX_SOCKS - 1);
|
||||||
|
|
||||||
|
return bpf_redirect_map(&xsks_map, rr, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
Note, that since there is only a single set of FILL and COMPLETION
|
||||||
|
rings, and they are single producer, single consumer rings, you need
|
||||||
|
to make sure that multiple processes or threads do not use these rings
|
||||||
|
concurrently. There are no synchronization primitives in the
|
||||||
|
libbpf code that protects multiple users at this point in time.
|
||||||
|
|
||||||
|
XDP_USE_NEED_WAKEUP bind flag
|
||||||
|
-----------------------------
|
||||||
|
|
||||||
|
This option adds support for a new flag called need_wakeup that is
|
||||||
|
present in the FILL ring and the TX ring, the rings for which user
|
||||||
|
space is a producer. When this option is set in the bind call, the
|
||||||
|
need_wakeup flag will be set if the kernel needs to be explicitly
|
||||||
|
woken up by a syscall to continue processing packets. If the flag is
|
||||||
|
zero, no syscall is needed.
|
||||||
|
|
||||||
|
If the flag is set on the FILL ring, the application needs to call
|
||||||
|
poll() to be able to continue to receive packets on the RX ring. This
|
||||||
|
can happen, for example, when the kernel has detected that there are no
|
||||||
|
more buffers on the FILL ring and no buffers left on the RX HW ring of
|
||||||
|
the NIC. In this case, interrupts are turned off as the NIC cannot
|
||||||
|
receive any packets (as there are no buffers to put them in), and the
|
||||||
|
need_wakeup flag is set so that user space can put buffers on the
|
||||||
|
FILL ring and then call poll() so that the kernel driver can put these
|
||||||
|
buffers on the HW ring and start to receive packets.
|
||||||
|
|
||||||
|
If the flag is set for the TX ring, it means that the application
|
||||||
|
needs to explicitly notify the kernel to send any packets put on the
|
||||||
|
TX ring. This can be accomplished either by a poll() call, as in the
|
||||||
|
RX path, or by calling sendto().
|
||||||
|
|
||||||
|
An example of how to use this flag can be found in
|
||||||
|
samples/bpf/xdpsock_user.c. An example with the use of libbpf helpers
|
||||||
|
would look like this for the TX path:
|
||||||
|
|
||||||
|
.. code-block:: c
|
||||||
|
|
||||||
|
if (xsk_ring_prod__needs_wakeup(&my_tx_ring))
|
||||||
|
sendto(xsk_socket__fd(xsk_handle), NULL, 0, MSG_DONTWAIT, NULL, 0);
|
||||||
|
|
||||||
|
I.e., only use the syscall if the flag is set.
|
||||||
|
|
||||||
|
We recommend that you always enable this mode as it usually leads to
|
||||||
|
better performance especially if you run the application and the
|
||||||
|
driver on the same core, but also if you use different cores for the
|
||||||
|
application and the kernel driver, as it reduces the number of
|
||||||
|
syscalls needed for the TX path.
|
||||||
|
|
||||||
|
XDP_{RX|TX|UMEM_FILL|UMEM_COMPLETION}_RING setsockopts
|
||||||
|
------------------------------------------------------
|
||||||
|
|
||||||
|
These setsockopts sets the number of descriptors that the RX, TX,
|
||||||
|
FILL, and COMPLETION rings respectively should have. It is mandatory
|
||||||
|
to set the size of at least one of the RX and TX rings. If you set
|
||||||
|
both, you will be able to both receive and send traffic from your
|
||||||
|
application, but if you only want to do one of them, you can save
|
||||||
|
resources by only setting up one of them. Both the FILL ring and the
|
||||||
|
COMPLETION ring are mandatory if you have a UMEM tied to your socket,
|
||||||
|
which is the normal case. But if the XDP_SHARED_UMEM flag is used, any
|
||||||
|
socket after the first one does not have a UMEM and should in that
|
||||||
|
case not have any FILL or COMPLETION rings created.
|
||||||
|
|
||||||
|
XDP_UMEM_REG setsockopt
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
This setsockopt registers a UMEM to a socket. This is the area that
|
||||||
|
contain all the buffers that packet can recide in. The call takes a
|
||||||
|
pointer to the beginning of this area and the size of it. Moreover, it
|
||||||
|
also has parameter called chunk_size that is the size that the UMEM is
|
||||||
|
divided into. It can only be 2K or 4K at the moment. If you have an
|
||||||
|
UMEM area that is 128K and a chunk size of 2K, this means that you
|
||||||
|
will be able to hold a maximum of 128K / 2K = 64 packets in your UMEM
|
||||||
|
area and that your largest packet size can be 2K.
|
||||||
|
|
||||||
|
There is also an option to set the headroom of each single buffer in
|
||||||
|
the UMEM. If you set this to N bytes, it means that the packet will
|
||||||
|
start N bytes into the buffer leaving the first N bytes for the
|
||||||
|
application to use. The final option is the flags field, but it will
|
||||||
|
be dealt with in separate sections for each UMEM flag.
|
||||||
|
|
||||||
|
SO_BINDTODEVICE setsockopt
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
This is a generic SOL_SOCKET option that can be used to tie AF_XDP
|
||||||
|
socket to a particular network interface. It is useful when a socket
|
||||||
|
is created by a privileged process and passed to a non-privileged one.
|
||||||
|
Once the option is set, kernel will refuse attempts to bind that socket
|
||||||
|
to a different interface. Updating the value requires CAP_NET_RAW.
|
||||||
|
|
||||||
|
XDP_STATISTICS getsockopt
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
Gets drop statistics of a socket that can be useful for debug
|
||||||
|
purposes. The supported statistics are shown below:
|
||||||
|
|
||||||
|
.. code-block:: c
|
||||||
|
|
||||||
|
struct xdp_statistics {
|
||||||
|
__u64 rx_dropped; /* Dropped for reasons other than invalid desc */
|
||||||
|
__u64 rx_invalid_descs; /* Dropped due to invalid descriptor */
|
||||||
|
__u64 tx_invalid_descs; /* Dropped due to invalid descriptor */
|
||||||
|
};
|
||||||
|
|
||||||
|
XDP_OPTIONS getsockopt
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
Gets options from an XDP socket. The only one supported so far is
|
||||||
|
XDP_OPTIONS_ZEROCOPY which tells you if zero-copy is on or not.
|
||||||
|
|
||||||
Usage
|
Usage
|
||||||
=====
|
=====
|
||||||
|
|
||||||
In order to use AF_XDP sockets there are two parts needed. The
|
In order to use AF_XDP sockets two parts are needed. The
|
||||||
user-space application and the XDP program. For a complete setup and
|
user-space application and the XDP program. For a complete setup and
|
||||||
usage example, please refer to the sample application. The user-space
|
usage example, please refer to the sample application. The user-space
|
||||||
side is xdpsock_user.c and the XDP side is part of libbpf.
|
side is xdpsock_user.c and the XDP side is part of libbpf.
|
||||||
|
|
||||||
The XDP code sample included in tools/lib/bpf/xsk.c is the following::
|
The XDP code sample included in tools/lib/bpf/xsk.c is the following:
|
||||||
|
|
||||||
|
.. code-block:: c
|
||||||
|
|
||||||
SEC("xdp_sock") int xdp_sock_prog(struct xdp_md *ctx)
|
SEC("xdp_sock") int xdp_sock_prog(struct xdp_md *ctx)
|
||||||
{
|
{
|
||||||
int index = ctx->rx_queue_index;
|
int index = ctx->rx_queue_index;
|
||||||
|
|
||||||
// A set entry here means that the correspnding queue_id
|
// A set entry here means that the corresponding queue_id
|
||||||
// has an active AF_XDP socket bound to it.
|
// has an active AF_XDP socket bound to it.
|
||||||
if (bpf_map_lookup_elem(&xsks_map, &index))
|
if (bpf_map_lookup_elem(&xsks_map, &index))
|
||||||
return bpf_redirect_map(&xsks_map, index, 0);
|
return bpf_redirect_map(&xsks_map, index, 0);
|
||||||
@ -238,7 +431,10 @@ The XDP code sample included in tools/lib/bpf/xsk.c is the following::
|
|||||||
return XDP_PASS;
|
return XDP_PASS;
|
||||||
}
|
}
|
||||||
|
|
||||||
Naive ring dequeue and enqueue could look like this::
|
A simple but not so performance ring dequeue and enqueue could look
|
||||||
|
like this:
|
||||||
|
|
||||||
|
.. code-block:: c
|
||||||
|
|
||||||
// struct xdp_rxtx_ring {
|
// struct xdp_rxtx_ring {
|
||||||
// __u32 *producer;
|
// __u32 *producer;
|
||||||
@ -287,17 +483,16 @@ Naive ring dequeue and enqueue could look like this::
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
But please use the libbpf functions as they are optimized and ready to
|
||||||
For a more optimized version, please refer to the sample application.
|
use. Will make your life easier.
|
||||||
|
|
||||||
Sample application
|
Sample application
|
||||||
==================
|
==================
|
||||||
|
|
||||||
There is a xdpsock benchmarking/test application included that
|
There is a xdpsock benchmarking/test application included that
|
||||||
demonstrates how to use AF_XDP sockets with both private and shared
|
demonstrates how to use AF_XDP sockets with private UMEMs. Say that
|
||||||
UMEMs. Say that you would like your UDP traffic from port 4242 to end
|
you would like your UDP traffic from port 4242 to end up in queue 16,
|
||||||
up in queue 16, that we will enable AF_XDP on. Here, we use ethtool
|
that we will enable AF_XDP on. Here, we use ethtool for this::
|
||||||
for this::
|
|
||||||
|
|
||||||
ethtool -N p3p2 rx-flow-hash udp4 fn
|
ethtool -N p3p2 rx-flow-hash udp4 fn
|
||||||
ethtool -N p3p2 flow-type udp4 src-port 4242 dst-port 4242 \
|
ethtool -N p3p2 flow-type udp4 src-port 4242 dst-port 4242 \
|
||||||
@ -311,13 +506,18 @@ using::
|
|||||||
For XDP_SKB mode, use the switch "-S" instead of "-N" and all options
|
For XDP_SKB mode, use the switch "-S" instead of "-N" and all options
|
||||||
can be displayed with "-h", as usual.
|
can be displayed with "-h", as usual.
|
||||||
|
|
||||||
|
This sample application uses libbpf to make the setup and usage of
|
||||||
|
AF_XDP simpler. If you want to know how the raw uapi of AF_XDP is
|
||||||
|
really used to make something more advanced, take a look at the libbpf
|
||||||
|
code in tools/lib/bpf/xsk.[ch].
|
||||||
|
|
||||||
FAQ
|
FAQ
|
||||||
=======
|
=======
|
||||||
|
|
||||||
Q: I am not seeing any traffic on the socket. What am I doing wrong?
|
Q: I am not seeing any traffic on the socket. What am I doing wrong?
|
||||||
|
|
||||||
A: When a netdev of a physical NIC is initialized, Linux usually
|
A: When a netdev of a physical NIC is initialized, Linux usually
|
||||||
allocates one Rx and Tx queue pair per core. So on a 8 core system,
|
allocates one RX and TX queue pair per core. So on a 8 core system,
|
||||||
queue ids 0 to 7 will be allocated, one per core. In the AF_XDP
|
queue ids 0 to 7 will be allocated, one per core. In the AF_XDP
|
||||||
bind call or the xsk_socket__create libbpf function call, you
|
bind call or the xsk_socket__create libbpf function call, you
|
||||||
specify a specific queue id to bind to and it is only the traffic
|
specify a specific queue id to bind to and it is only the traffic
|
||||||
@ -343,9 +543,21 @@ A: When a netdev of a physical NIC is initialized, Linux usually
|
|||||||
sudo ethtool -N <interface> flow-type udp4 src-port 4242 dst-port \
|
sudo ethtool -N <interface> flow-type udp4 src-port 4242 dst-port \
|
||||||
4242 action 2
|
4242 action 2
|
||||||
|
|
||||||
A number of other ways are possible all up to the capabilitites of
|
A number of other ways are possible all up to the capabilities of
|
||||||
the NIC you have.
|
the NIC you have.
|
||||||
|
|
||||||
|
Q: Can I use the XSKMAP to implement a switch betwen different umems
|
||||||
|
in copy mode?
|
||||||
|
|
||||||
|
A: The short answer is no, that is not supported at the moment. The
|
||||||
|
XSKMAP can only be used to switch traffic coming in on queue id X
|
||||||
|
to sockets bound to the same queue id X. The XSKMAP can contain
|
||||||
|
sockets bound to different queue ids, for example X and Y, but only
|
||||||
|
traffic goming in from queue id Y can be directed to sockets bound
|
||||||
|
to the same queue id Y. In zero-copy mode, you should use the
|
||||||
|
switch, or other distribution mechanism, in your NIC to direct
|
||||||
|
traffic to the correct queue id and socket.
|
||||||
|
|
||||||
Credits
|
Credits
|
||||||
=======
|
=======
|
||||||
|
|
||||||
|
@ -1,230 +0,0 @@
|
|||||||
Linux DECnet Networking Layer Information
|
|
||||||
===========================================
|
|
||||||
|
|
||||||
1) Other documentation....
|
|
||||||
|
|
||||||
o Project Home Pages
|
|
||||||
http://www.chygwyn.com/ - Kernel info
|
|
||||||
http://linux-decnet.sourceforge.net/ - Userland tools
|
|
||||||
http://www.sourceforge.net/projects/linux-decnet/ - Status page
|
|
||||||
|
|
||||||
2) Configuring the kernel
|
|
||||||
|
|
||||||
Be sure to turn on the following options:
|
|
||||||
|
|
||||||
CONFIG_DECNET (obviously)
|
|
||||||
CONFIG_PROC_FS (to see what's going on)
|
|
||||||
CONFIG_SYSCTL (for easy configuration)
|
|
||||||
|
|
||||||
if you want to try out router support (not properly debugged yet)
|
|
||||||
you'll need the following options as well...
|
|
||||||
|
|
||||||
CONFIG_DECNET_ROUTER (to be able to add/delete routes)
|
|
||||||
CONFIG_NETFILTER (will be required for the DECnet routing daemon)
|
|
||||||
|
|
||||||
Don't turn on SIOCGIFCONF support for DECnet unless you are really sure
|
|
||||||
that you need it, in general you won't and it can cause ifconfig to
|
|
||||||
malfunction.
|
|
||||||
|
|
||||||
Run time configuration has changed slightly from the 2.4 system. If you
|
|
||||||
want to configure an endnode, then the simplified procedure is as follows:
|
|
||||||
|
|
||||||
o Set the MAC address on your ethernet card before starting _any_ other
|
|
||||||
network protocols.
|
|
||||||
|
|
||||||
As soon as your network card is brought into the UP state, DECnet should
|
|
||||||
start working. If you need something more complicated or are unsure how
|
|
||||||
to set the MAC address, see the next section. Also all configurations which
|
|
||||||
worked with 2.4 will work under 2.5 with no change.
|
|
||||||
|
|
||||||
3) Command line options
|
|
||||||
|
|
||||||
You can set a DECnet address on the kernel command line for compatibility
|
|
||||||
with the 2.4 configuration procedure, but in general it's not needed any more.
|
|
||||||
If you do st a DECnet address on the command line, it has only one purpose
|
|
||||||
which is that its added to the addresses on the loopback device.
|
|
||||||
|
|
||||||
With 2.4 kernels, DECnet would only recognise addresses as local if they
|
|
||||||
were added to the loopback device. In 2.5, any local interface address
|
|
||||||
can be used to loop back to the local machine. Of course this does not
|
|
||||||
prevent you adding further addresses to the loopback device if you
|
|
||||||
want to.
|
|
||||||
|
|
||||||
N.B. Since the address list of an interface determines the addresses for
|
|
||||||
which "hello" messages are sent, if you don't set an address on the loopback
|
|
||||||
interface then you won't see any entries in /proc/net/neigh for the local
|
|
||||||
host until such time as you start a connection. This doesn't affect the
|
|
||||||
operation of the local communications in any other way though.
|
|
||||||
|
|
||||||
The kernel command line takes options looking like the following:
|
|
||||||
|
|
||||||
decnet.addr=1,2
|
|
||||||
|
|
||||||
the two numbers are the node address 1,2 = 1.2 For 2.2.xx kernels
|
|
||||||
and early 2.3.xx kernels, you must use a comma when specifying the
|
|
||||||
DECnet address like this. For more recent 2.3.xx kernels, you may
|
|
||||||
use almost any character except space, although a `.` would be the most
|
|
||||||
obvious choice :-)
|
|
||||||
|
|
||||||
There used to be a third number specifying the node type. This option
|
|
||||||
has gone away in favour of a per interface node type. This is now set
|
|
||||||
using /proc/sys/net/decnet/conf/<dev>/forwarding. This file can be
|
|
||||||
set with a single digit, 0=EndNode, 1=L1 Router and 2=L2 Router.
|
|
||||||
|
|
||||||
There are also equivalent options for modules. The node address can
|
|
||||||
also be set through the /proc/sys/net/decnet/ files, as can other system
|
|
||||||
parameters.
|
|
||||||
|
|
||||||
Currently the only supported devices are ethernet and ip_gre. The
|
|
||||||
ethernet address of your ethernet card has to be set according to the DECnet
|
|
||||||
address of the node in order for it to be autoconfigured (and then appear in
|
|
||||||
/proc/net/decnet_dev). There is a utility available at the above
|
|
||||||
FTP sites called dn2ethaddr which can compute the correct ethernet
|
|
||||||
address to use. The address can be set by ifconfig either before or
|
|
||||||
at the time the device is brought up. If you are using RedHat you can
|
|
||||||
add the line:
|
|
||||||
|
|
||||||
MACADDR=AA:00:04:00:03:04
|
|
||||||
|
|
||||||
or something similar, to /etc/sysconfig/network-scripts/ifcfg-eth0 or
|
|
||||||
wherever your network card's configuration lives. Setting the MAC address
|
|
||||||
of your ethernet card to an address starting with "hi-ord" will cause a
|
|
||||||
DECnet address which matches to be added to the interface (which you can
|
|
||||||
verify with iproute2).
|
|
||||||
|
|
||||||
The default device for routing can be set through the /proc filesystem
|
|
||||||
by setting /proc/sys/net/decnet/default_device to the
|
|
||||||
device you want DECnet to route packets out of when no specific route
|
|
||||||
is available. Usually this will be eth0, for example:
|
|
||||||
|
|
||||||
echo -n "eth0" >/proc/sys/net/decnet/default_device
|
|
||||||
|
|
||||||
If you don't set the default device, then it will default to the first
|
|
||||||
ethernet card which has been autoconfigured as described above. You can
|
|
||||||
confirm that by looking in the default_device file of course.
|
|
||||||
|
|
||||||
There is a list of what the other files under /proc/sys/net/decnet/ do
|
|
||||||
on the kernel patch web site (shown above).
|
|
||||||
|
|
||||||
4) Run time kernel configuration
|
|
||||||
|
|
||||||
This is either done through the sysctl/proc interface (see the kernel web
|
|
||||||
pages for details on what the various options do) or through the iproute2
|
|
||||||
package in the same way as IPv4/6 configuration is performed.
|
|
||||||
|
|
||||||
Documentation for iproute2 is included with the package, although there is
|
|
||||||
as yet no specific section on DECnet, most of the features apply to both
|
|
||||||
IP and DECnet, albeit with DECnet addresses instead of IP addresses and
|
|
||||||
a reduced functionality.
|
|
||||||
|
|
||||||
If you want to configure a DECnet router you'll need the iproute2 package
|
|
||||||
since its the _only_ way to add and delete routes currently. Eventually
|
|
||||||
there will be a routing daemon to send and receive routing messages for
|
|
||||||
each interface and update the kernel routing tables accordingly. The
|
|
||||||
routing daemon will use netfilter to listen to routing packets, and
|
|
||||||
rtnetlink to update the kernels routing tables.
|
|
||||||
|
|
||||||
The DECnet raw socket layer has been removed since it was there purely
|
|
||||||
for use by the routing daemon which will now use netfilter (a much cleaner
|
|
||||||
and more generic solution) instead.
|
|
||||||
|
|
||||||
5) How can I tell if its working ?
|
|
||||||
|
|
||||||
Here is a quick guide of what to look for in order to know if your DECnet
|
|
||||||
kernel subsystem is working.
|
|
||||||
|
|
||||||
- Is the node address set (see /proc/sys/net/decnet/node_address)
|
|
||||||
- Is the node of the correct type
|
|
||||||
(see /proc/sys/net/decnet/conf/<dev>/forwarding)
|
|
||||||
- Is the Ethernet MAC address of each Ethernet card set to match
|
|
||||||
the DECnet address. If in doubt use the dn2ethaddr utility available
|
|
||||||
at the ftp archive.
|
|
||||||
- If the previous two steps are satisfied, and the Ethernet card is up,
|
|
||||||
you should find that it is listed in /proc/net/decnet_dev and also
|
|
||||||
that it appears as a directory in /proc/sys/net/decnet/conf/. The
|
|
||||||
loopback device (lo) should also appear and is required to communicate
|
|
||||||
within a node.
|
|
||||||
- If you have any DECnet routers on your network, they should appear
|
|
||||||
in /proc/net/decnet_neigh, otherwise this file will only contain the
|
|
||||||
entry for the node itself (if it doesn't check to see if lo is up).
|
|
||||||
- If you want to send to any node which is not listed in the
|
|
||||||
/proc/net/decnet_neigh file, you'll need to set the default device
|
|
||||||
to point to an Ethernet card with connection to a router. This is
|
|
||||||
again done with the /proc/sys/net/decnet/default_device file.
|
|
||||||
- Try starting a simple server and client, like the dnping/dnmirror
|
|
||||||
over the loopback interface. With luck they should communicate.
|
|
||||||
For this step and those after, you'll need the DECnet library
|
|
||||||
which can be obtained from the above ftp sites as well as the
|
|
||||||
actual utilities themselves.
|
|
||||||
- If this seems to work, then try talking to a node on your local
|
|
||||||
network, and see if you can obtain the same results.
|
|
||||||
- At this point you are on your own... :-)
|
|
||||||
|
|
||||||
6) How to send a bug report
|
|
||||||
|
|
||||||
If you've found a bug and want to report it, then there are several things
|
|
||||||
you can do to help me work out exactly what it is that is wrong. Useful
|
|
||||||
information (_most_ of which _is_ _essential_) includes:
|
|
||||||
|
|
||||||
- What kernel version are you running ?
|
|
||||||
- What version of the patch are you running ?
|
|
||||||
- How far though the above set of tests can you get ?
|
|
||||||
- What is in the /proc/decnet* files and /proc/sys/net/decnet/* files ?
|
|
||||||
- Which services are you running ?
|
|
||||||
- Which client caused the problem ?
|
|
||||||
- How much data was being transferred ?
|
|
||||||
- Was the network congested ?
|
|
||||||
- How can the problem be reproduced ?
|
|
||||||
- Can you use tcpdump to get a trace ? (N.B. Most (all?) versions of
|
|
||||||
tcpdump don't understand how to dump DECnet properly, so including
|
|
||||||
the hex listing of the packet contents is _essential_, usually the -x flag.
|
|
||||||
You may also need to increase the length grabbed with the -s flag. The
|
|
||||||
-e flag also provides very useful information (ethernet MAC addresses))
|
|
||||||
|
|
||||||
7) MAC FAQ
|
|
||||||
|
|
||||||
A quick FAQ on ethernet MAC addresses to explain how Linux and DECnet
|
|
||||||
interact and how to get the best performance from your hardware.
|
|
||||||
|
|
||||||
Ethernet cards are designed to normally only pass received network frames
|
|
||||||
to a host computer when they are addressed to it, or to the broadcast address.
|
|
||||||
|
|
||||||
Linux has an interface which allows the setting of extra addresses for
|
|
||||||
an ethernet card to listen to. If the ethernet card supports it, the
|
|
||||||
filtering operation will be done in hardware, if not the extra unwanted packets
|
|
||||||
received will be discarded by the host computer. In the latter case,
|
|
||||||
significant processor time and bus bandwidth can be used up on a busy
|
|
||||||
network (see the NAPI documentation for a longer explanation of these
|
|
||||||
effects).
|
|
||||||
|
|
||||||
DECnet makes use of this interface to allow running DECnet on an ethernet
|
|
||||||
card which has already been configured using TCP/IP (presumably using the
|
|
||||||
built in MAC address of the card, as usual) and/or to allow multiple DECnet
|
|
||||||
addresses on each physical interface. If you do this, be aware that if your
|
|
||||||
ethernet card doesn't support perfect hashing in its MAC address filter
|
|
||||||
then your computer will be doing more work than required. Some cards
|
|
||||||
will simply set themselves into promiscuous mode in order to receive
|
|
||||||
packets from the DECnet specified addresses. So if you have one of these
|
|
||||||
cards its better to set the MAC address of the card as described above
|
|
||||||
to gain the best efficiency. Better still is to use a card which supports
|
|
||||||
NAPI as well.
|
|
||||||
|
|
||||||
|
|
||||||
8) Mailing list
|
|
||||||
|
|
||||||
If you are keen to get involved in development, or want to ask questions
|
|
||||||
about configuration, or even just report bugs, then there is a mailing
|
|
||||||
list that you can join, details are at:
|
|
||||||
|
|
||||||
http://sourceforge.net/mail/?group_id=4993
|
|
||||||
|
|
||||||
9) Legal Info
|
|
||||||
|
|
||||||
The Linux DECnet project team have placed their code under the GPL. The
|
|
||||||
software is provided "as is" and without warranty express or implied.
|
|
||||||
DECnet is a trademark of Compaq. This software is not a product of
|
|
||||||
Compaq. We acknowledge the help of people at Compaq in providing extra
|
|
||||||
documentation above and beyond what was previously publicly available.
|
|
||||||
|
|
||||||
Steve Whitehouse <SteveW@ACM.org>
|
|
||||||
|
|
@ -382,6 +382,12 @@ drivers/base/power/runtime.c and include/linux/pm_runtime.h:
|
|||||||
nonzero, increment the counter and return 1; otherwise return 0 without
|
nonzero, increment the counter and return 1; otherwise return 0 without
|
||||||
changing the counter
|
changing the counter
|
||||||
|
|
||||||
|
`int pm_runtime_get_if_active(struct device *dev, bool ign_usage_count);`
|
||||||
|
- return -EINVAL if 'power.disable_depth' is nonzero; otherwise, if the
|
||||||
|
runtime PM status is RPM_ACTIVE, and either ign_usage_count is true
|
||||||
|
or the device's usage_count is non-zero, increment the counter and
|
||||||
|
return 1; otherwise return 0 without changing the counter
|
||||||
|
|
||||||
`void pm_runtime_put_noidle(struct device *dev);`
|
`void pm_runtime_put_noidle(struct device *dev);`
|
||||||
- decrement the device's usage counter
|
- decrement the device's usage counter
|
||||||
|
|
||||||
|
@ -702,7 +702,7 @@ ref
|
|||||||
no-jd
|
no-jd
|
||||||
BIOS setup but without jack-detection
|
BIOS setup but without jack-detection
|
||||||
intel
|
intel
|
||||||
Intel DG45* mobos
|
Intel D*45* mobos
|
||||||
dell-m6-amic
|
dell-m6-amic
|
||||||
Dell desktops/laptops with analog mics
|
Dell desktops/laptops with analog mics
|
||||||
dell-m6-dmic
|
dell-m6-dmic
|
||||||
|
@ -3615,6 +3615,18 @@ Type: vm ioctl
|
|||||||
Parameters: struct kvm_s390_cmma_log (in, out)
|
Parameters: struct kvm_s390_cmma_log (in, out)
|
||||||
Returns: 0 on success, a negative value on error
|
Returns: 0 on success, a negative value on error
|
||||||
|
|
||||||
|
Errors:
|
||||||
|
|
||||||
|
====== =============================================================
|
||||||
|
ENOMEM not enough memory can be allocated to complete the task
|
||||||
|
ENXIO if CMMA is not enabled
|
||||||
|
EINVAL if KVM_S390_CMMA_PEEK is not set but migration mode was not enabled
|
||||||
|
EINVAL if KVM_S390_CMMA_PEEK is not set but dirty tracking has been
|
||||||
|
disabled (and thus migration mode was automatically disabled)
|
||||||
|
EFAULT if the userspace address is invalid or if no page table is
|
||||||
|
present for the addresses (e.g. when using hugepages).
|
||||||
|
====== =============================================================
|
||||||
|
|
||||||
This ioctl is used to get the values of the CMMA bits on the s390
|
This ioctl is used to get the values of the CMMA bits on the s390
|
||||||
architecture. It is meant to be used in two scenarios:
|
architecture. It is meant to be used in two scenarios:
|
||||||
- During live migration to save the CMMA values. Live migration needs
|
- During live migration to save the CMMA values. Live migration needs
|
||||||
@ -3691,12 +3703,6 @@ mask is unused.
|
|||||||
|
|
||||||
values points to the userspace buffer where the result will be stored.
|
values points to the userspace buffer where the result will be stored.
|
||||||
|
|
||||||
This ioctl can fail with -ENOMEM if not enough memory can be allocated to
|
|
||||||
complete the task, with -ENXIO if CMMA is not enabled, with -EINVAL if
|
|
||||||
KVM_S390_CMMA_PEEK is not set but migration mode was not enabled, with
|
|
||||||
-EFAULT if the userspace address is invalid or if no page table is
|
|
||||||
present for the addresses (e.g. when using hugepages).
|
|
||||||
|
|
||||||
4.108 KVM_S390_SET_CMMA_BITS
|
4.108 KVM_S390_SET_CMMA_BITS
|
||||||
|
|
||||||
Capability: KVM_CAP_S390_CMMA_MIGRATION
|
Capability: KVM_CAP_S390_CMMA_MIGRATION
|
||||||
|
@ -254,6 +254,10 @@ Allows userspace to start migration mode, needed for PGSTE migration.
|
|||||||
Setting this attribute when migration mode is already active will have
|
Setting this attribute when migration mode is already active will have
|
||||||
no effects.
|
no effects.
|
||||||
|
|
||||||
|
Dirty tracking must be enabled on all memslots, else -EINVAL is returned. When
|
||||||
|
dirty tracking is disabled on any memslot, migration mode is automatically
|
||||||
|
stopped.
|
||||||
|
|
||||||
Parameters: none
|
Parameters: none
|
||||||
Returns: -ENOMEM if there is not enough free memory to start migration mode
|
Returns: -ENOMEM if there is not enough free memory to start migration mode
|
||||||
-EINVAL if the state of the VM is invalid (e.g. no memory defined)
|
-EINVAL if the state of the VM is invalid (e.g. no memory defined)
|
||||||
|
@ -1101,7 +1101,7 @@ APEX EMBEDDED SYSTEMS STX104 IIO DRIVER
|
|||||||
M: William Breathitt Gray <vilhelm.gray@gmail.com>
|
M: William Breathitt Gray <vilhelm.gray@gmail.com>
|
||||||
L: linux-iio@vger.kernel.org
|
L: linux-iio@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/iio/adc/stx104.c
|
F: drivers/iio/addac/stx104.c
|
||||||
|
|
||||||
APM DRIVER
|
APM DRIVER
|
||||||
M: Jiri Kosina <jikos@kernel.org>
|
M: Jiri Kosina <jikos@kernel.org>
|
||||||
@ -4617,13 +4617,6 @@ F: include/uapi/linux/dccp.h
|
|||||||
F: include/linux/tfrc.h
|
F: include/linux/tfrc.h
|
||||||
F: net/dccp/
|
F: net/dccp/
|
||||||
|
|
||||||
DECnet NETWORK LAYER
|
|
||||||
W: http://linux-decnet.sourceforge.net
|
|
||||||
L: linux-decnet-user@lists.sourceforge.net
|
|
||||||
S: Orphan
|
|
||||||
F: Documentation/networking/decnet.txt
|
|
||||||
F: net/decnet/
|
|
||||||
|
|
||||||
DECSTATION PLATFORM SUPPORT
|
DECSTATION PLATFORM SUPPORT
|
||||||
M: "Maciej W. Rozycki" <macro@linux-mips.org>
|
M: "Maciej W. Rozycki" <macro@linux-mips.org>
|
||||||
L: linux-mips@vger.kernel.org
|
L: linux-mips@vger.kernel.org
|
||||||
|
19
Makefile
19
Makefile
@ -1,7 +1,7 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
VERSION = 5
|
VERSION = 5
|
||||||
PATCHLEVEL = 4
|
PATCHLEVEL = 4
|
||||||
SUBLEVEL = 233
|
SUBLEVEL = 268
|
||||||
EXTRAVERSION =
|
EXTRAVERSION =
|
||||||
NAME = Kleptomaniac Octopus
|
NAME = Kleptomaniac Octopus
|
||||||
|
|
||||||
@ -93,9 +93,16 @@ endif
|
|||||||
|
|
||||||
# If the user is running make -s (silent mode), suppress echoing of
|
# If the user is running make -s (silent mode), suppress echoing of
|
||||||
# commands
|
# commands
|
||||||
|
# make-4.0 (and later) keep single letter options in the 1st word of MAKEFLAGS.
|
||||||
|
|
||||||
ifneq ($(findstring s,$(filter-out --%,$(MAKEFLAGS))),)
|
ifeq ($(filter 3.%,$(MAKE_VERSION)),)
|
||||||
quiet=silent_
|
silence:=$(findstring s,$(firstword -$(MAKEFLAGS)))
|
||||||
|
else
|
||||||
|
silence:=$(findstring s,$(filter-out --%,$(MAKEFLAGS)))
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(silence),s)
|
||||||
|
quiet=silent_
|
||||||
endif
|
endif
|
||||||
|
|
||||||
export quiet Q KBUILD_VERBOSE
|
export quiet Q KBUILD_VERBOSE
|
||||||
@ -518,8 +525,6 @@ export RCS_FIND_IGNORE := \( -name SCCS -o -name BitKeeper -o -name .svn -o \
|
|||||||
export RCS_TAR_IGNORE := --exclude SCCS --exclude BitKeeper --exclude .svn \
|
export RCS_TAR_IGNORE := --exclude SCCS --exclude BitKeeper --exclude .svn \
|
||||||
--exclude CVS --exclude .pc --exclude .hg --exclude .git
|
--exclude CVS --exclude .pc --exclude .hg --exclude .git
|
||||||
|
|
||||||
KBUILD_CFLAGS += $(call cc-option,-Wno-misleading-indentation)
|
|
||||||
|
|
||||||
# ===========================================================================
|
# ===========================================================================
|
||||||
# Rules shared between *config targets and build targets
|
# Rules shared between *config targets and build targets
|
||||||
|
|
||||||
@ -811,6 +816,10 @@ endif
|
|||||||
KBUILD_CFLAGS += $(call cc-disable-warning, unused-but-set-variable)
|
KBUILD_CFLAGS += $(call cc-disable-warning, unused-but-set-variable)
|
||||||
|
|
||||||
KBUILD_CFLAGS += $(call cc-disable-warning, unused-const-variable)
|
KBUILD_CFLAGS += $(call cc-disable-warning, unused-const-variable)
|
||||||
|
|
||||||
|
# These result in bogus false positives
|
||||||
|
KBUILD_CFLAGS += $(call cc-disable-warning, dangling-pointer)
|
||||||
|
|
||||||
ifdef CONFIG_FRAME_POINTER
|
ifdef CONFIG_FRAME_POINTER
|
||||||
KBUILD_CFLAGS += -fno-omit-frame-pointer -fno-optimize-sibling-calls
|
KBUILD_CFLAGS += -fno-omit-frame-pointer -fno-optimize-sibling-calls
|
||||||
else
|
else
|
||||||
|
14
OWNERS
14
OWNERS
@ -1,2 +1,12 @@
|
|||||||
# include OWNERS from the authoritative android-mainline branch
|
set noparent
|
||||||
include kernel/common:android-mainline:/OWNERS
|
|
||||||
|
# GKI Dr. No Enforcement is active on this branch. Approval of one of the Dr.
|
||||||
|
# No reviewers is required following a regular CodeReview+2 vote of a code
|
||||||
|
# reviewer.
|
||||||
|
#
|
||||||
|
# See the GKI release documentation (go/gki-dr-no) for further details.
|
||||||
|
#
|
||||||
|
# The expanded list of reviewers can be found at:
|
||||||
|
# https://android.googlesource.com/kernel/common/+/android-mainline/OWNERS_DrNo
|
||||||
|
|
||||||
|
include kernel/common:android-mainline:/OWNERS_DrNo
|
||||||
|
@ -1 +1 @@
|
|||||||
LTS_5.4.226_d72fdcc7094f
|
LTS_5.4.259_81334f26ac70
|
||||||
|
@ -1,12 +0,0 @@
|
|||||||
# If we ever add another OWNERS above this directory, it's likely to be
|
|
||||||
# more permissive, so don't inherit from it
|
|
||||||
set noparent
|
|
||||||
adelva@google.com
|
|
||||||
maennich@google.com
|
|
||||||
saravanak@google.com
|
|
||||||
sspatil@google.com
|
|
||||||
tkjos@google.com
|
|
||||||
willmcvicker@google.com
|
|
||||||
# Downstream boards maintained directly in this manifest branch
|
|
||||||
per-file abi_gki_aarch64_cuttlefish = adelva@google.com, rammuthiah@google.com
|
|
||||||
per-file abi_gki_aarch64_goldfish = rkir@google.com
|
|
174289
android/abi_gki_aarch64.xml
174289
android/abi_gki_aarch64.xml
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1256,6 +1256,7 @@
|
|||||||
|
|
||||||
# required by qcom_smd.ko
|
# required by qcom_smd.ko
|
||||||
__memcpy_toio
|
__memcpy_toio
|
||||||
|
rpmsg_register_device_override
|
||||||
|
|
||||||
# required by qcom_spmi-regulator.ko
|
# required by qcom_spmi-regulator.ko
|
||||||
regulator_disable_regmap
|
regulator_disable_regmap
|
||||||
|
@ -2062,6 +2062,7 @@
|
|||||||
rpmsg_set_signals
|
rpmsg_set_signals
|
||||||
rpmsg_trysend
|
rpmsg_trysend
|
||||||
rpmsg_unregister_device
|
rpmsg_unregister_device
|
||||||
|
rpmsg_register_device_override
|
||||||
rtc_add_group
|
rtc_add_group
|
||||||
rtc_class_close
|
rtc_class_close
|
||||||
rtc_class_open
|
rtc_class_open
|
||||||
@ -2251,8 +2252,10 @@
|
|||||||
smp_call_function
|
smp_call_function
|
||||||
smp_call_function_single
|
smp_call_function_single
|
||||||
snd_card_free
|
snd_card_free
|
||||||
|
snd_card_free_when_closed
|
||||||
snd_card_new
|
snd_card_new
|
||||||
snd_card_register
|
snd_card_register
|
||||||
|
snd_compr_use_pause_in_draining
|
||||||
snd_ctl_add
|
snd_ctl_add
|
||||||
snd_ctl_boolean_mono_info
|
snd_ctl_boolean_mono_info
|
||||||
snd_ctl_enum_info
|
snd_ctl_enum_info
|
||||||
@ -2442,6 +2445,7 @@
|
|||||||
sysfs_create_group
|
sysfs_create_group
|
||||||
sysfs_create_groups
|
sysfs_create_groups
|
||||||
sysfs_create_link
|
sysfs_create_link
|
||||||
|
sysfs_emit
|
||||||
__sysfs_match_string
|
__sysfs_match_string
|
||||||
sysfs_notify
|
sysfs_notify
|
||||||
sysfs_remove_bin_file
|
sysfs_remove_bin_file
|
||||||
@ -2560,7 +2564,9 @@
|
|||||||
ufshcd_remove
|
ufshcd_remove
|
||||||
ufshcd_uic_hibern8_enter
|
ufshcd_uic_hibern8_enter
|
||||||
ufshcd_uic_hibern8_exit
|
ufshcd_uic_hibern8_exit
|
||||||
|
uhid_hid_driver
|
||||||
__uio_register_device
|
__uio_register_device
|
||||||
|
uhid_hid_driver
|
||||||
uio_unregister_device
|
uio_unregister_device
|
||||||
unlock_new_inode
|
unlock_new_inode
|
||||||
unlock_page
|
unlock_page
|
||||||
|
@ -271,6 +271,9 @@ config ARCH_HAS_UNCACHED_SEGMENT
|
|||||||
select ARCH_HAS_DMA_PREP_COHERENT
|
select ARCH_HAS_DMA_PREP_COHERENT
|
||||||
bool
|
bool
|
||||||
|
|
||||||
|
config ARCH_HAS_CPU_FINALIZE_INIT
|
||||||
|
bool
|
||||||
|
|
||||||
# Select if arch init_task must go in the __init_task_data section
|
# Select if arch init_task must go in the __init_task_data section
|
||||||
config ARCH_TASK_STRUCT_ON_STACK
|
config ARCH_TASK_STRUCT_ON_STACK
|
||||||
bool
|
bool
|
||||||
|
@ -1,20 +0,0 @@
|
|||||||
/*
|
|
||||||
* include/asm-alpha/bugs.h
|
|
||||||
*
|
|
||||||
* Copyright (C) 1994 Linus Torvalds
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This is included by init/main.c to check for architecture-dependent bugs.
|
|
||||||
*
|
|
||||||
* Needs:
|
|
||||||
* void check_bugs(void);
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* I don't know of any alpha bugs yet.. Nice chip
|
|
||||||
*/
|
|
||||||
|
|
||||||
static void check_bugs(void)
|
|
||||||
{
|
|
||||||
}
|
|
@ -146,10 +146,8 @@ apply_relocate_add(Elf64_Shdr *sechdrs, const char *strtab,
|
|||||||
base = (void *)sechdrs[sechdrs[relsec].sh_info].sh_addr;
|
base = (void *)sechdrs[sechdrs[relsec].sh_info].sh_addr;
|
||||||
symtab = (Elf64_Sym *)sechdrs[symindex].sh_addr;
|
symtab = (Elf64_Sym *)sechdrs[symindex].sh_addr;
|
||||||
|
|
||||||
/* The small sections were sorted to the end of the segment.
|
|
||||||
The following should definitely cover them. */
|
|
||||||
gp = (u64)me->core_layout.base + me->core_layout.size - 0x8000;
|
|
||||||
got = sechdrs[me->arch.gotsecindex].sh_addr;
|
got = sechdrs[me->arch.gotsecindex].sh_addr;
|
||||||
|
gp = got + 0x8000;
|
||||||
|
|
||||||
for (i = 0; i < n; i++) {
|
for (i = 0; i < n; i++) {
|
||||||
unsigned long r_sym = ELF64_R_SYM (rela[i].r_info);
|
unsigned long r_sym = ELF64_R_SYM (rela[i].r_info);
|
||||||
|
@ -394,8 +394,7 @@ setup_memory(void *kernel_end)
|
|||||||
extern void setup_memory(void *);
|
extern void setup_memory(void *);
|
||||||
#endif /* !CONFIG_DISCONTIGMEM */
|
#endif /* !CONFIG_DISCONTIGMEM */
|
||||||
|
|
||||||
int __init
|
int page_is_ram(unsigned long pfn)
|
||||||
page_is_ram(unsigned long pfn)
|
|
||||||
{
|
{
|
||||||
struct memclust_struct * cluster;
|
struct memclust_struct * cluster;
|
||||||
struct memdesc_struct * memdesc;
|
struct memdesc_struct * memdesc;
|
||||||
|
@ -475,4 +475,8 @@
|
|||||||
543 common fspick sys_fspick
|
543 common fspick sys_fspick
|
||||||
544 common pidfd_open sys_pidfd_open
|
544 common pidfd_open sys_pidfd_open
|
||||||
# 545 reserved for clone3
|
# 545 reserved for clone3
|
||||||
546 common process_madvise sys_process_madvise
|
# 546 reserved for close_range
|
||||||
|
# 547 reserved for openat2
|
||||||
|
# 548 reserved for pidfd_getfd
|
||||||
|
# 549 reserved for faccessat2
|
||||||
|
550 common process_madvise sys_process_madvise
|
||||||
|
@ -235,7 +235,21 @@ do_entIF(unsigned long type, struct pt_regs *regs)
|
|||||||
{
|
{
|
||||||
int signo, code;
|
int signo, code;
|
||||||
|
|
||||||
if ((regs->ps & ~IPL_MAX) == 0) {
|
if (type == 3) { /* FEN fault */
|
||||||
|
/* Irritating users can call PAL_clrfen to disable the
|
||||||
|
FPU for the process. The kernel will then trap in
|
||||||
|
do_switch_stack and undo_switch_stack when we try
|
||||||
|
to save and restore the FP registers.
|
||||||
|
|
||||||
|
Given that GCC by default generates code that uses the
|
||||||
|
FP registers, PAL_clrfen is not useful except for DoS
|
||||||
|
attacks. So turn the bleeding FPU back on and be done
|
||||||
|
with it. */
|
||||||
|
current_thread_info()->pcb.flags |= 1;
|
||||||
|
__reload_thread(¤t_thread_info()->pcb);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!user_mode(regs)) {
|
||||||
if (type == 1) {
|
if (type == 1) {
|
||||||
const unsigned int *data
|
const unsigned int *data
|
||||||
= (const unsigned int *) regs->pc;
|
= (const unsigned int *) regs->pc;
|
||||||
@ -368,20 +382,6 @@ do_entIF(unsigned long type, struct pt_regs *regs)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 3: /* FEN fault */
|
|
||||||
/* Irritating users can call PAL_clrfen to disable the
|
|
||||||
FPU for the process. The kernel will then trap in
|
|
||||||
do_switch_stack and undo_switch_stack when we try
|
|
||||||
to save and restore the FP registers.
|
|
||||||
|
|
||||||
Given that GCC by default generates code that uses the
|
|
||||||
FP registers, PAL_clrfen is not useful except for DoS
|
|
||||||
attacks. So turn the bleeding FPU back on and be done
|
|
||||||
with it. */
|
|
||||||
current_thread_info()->pcb.flags |= 1;
|
|
||||||
__reload_thread(¤t_thread_info()->pcb);
|
|
||||||
return;
|
|
||||||
|
|
||||||
case 5: /* illoc */
|
case 5: /* illoc */
|
||||||
default: /* unexpected instruction-fault type */
|
default: /* unexpected instruction-fault type */
|
||||||
;
|
;
|
||||||
|
@ -8,6 +8,10 @@
|
|||||||
|
|
||||||
#include <asm/dwarf.h>
|
#include <asm/dwarf.h>
|
||||||
|
|
||||||
|
#define ASM_NL ` /* use '`' to mark new line in macro */
|
||||||
|
#define __ALIGN .align 4
|
||||||
|
#define __ALIGN_STR __stringify(__ALIGN)
|
||||||
|
|
||||||
#ifdef __ASSEMBLY__
|
#ifdef __ASSEMBLY__
|
||||||
|
|
||||||
.macro ST2 e, o, off
|
.macro ST2 e, o, off
|
||||||
@ -28,10 +32,6 @@
|
|||||||
#endif
|
#endif
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
#define ASM_NL ` /* use '`' to mark new line in macro */
|
|
||||||
#define __ALIGN .align 4
|
|
||||||
#define __ALIGN_STR __stringify(__ALIGN)
|
|
||||||
|
|
||||||
/* annotation for data we want in DCCM - if enabled in .config */
|
/* annotation for data we want in DCCM - if enabled in .config */
|
||||||
.macro ARCFP_DATA nm
|
.macro ARCFP_DATA nm
|
||||||
#ifdef CONFIG_ARC_HAS_DCCM
|
#ifdef CONFIG_ARC_HAS_DCCM
|
||||||
|
@ -61,7 +61,7 @@ struct rt_sigframe {
|
|||||||
unsigned int sigret_magic;
|
unsigned int sigret_magic;
|
||||||
};
|
};
|
||||||
|
|
||||||
static int save_arcv2_regs(struct sigcontext *mctx, struct pt_regs *regs)
|
static int save_arcv2_regs(struct sigcontext __user *mctx, struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
int err = 0;
|
int err = 0;
|
||||||
#ifndef CONFIG_ISA_ARCOMPACT
|
#ifndef CONFIG_ISA_ARCOMPACT
|
||||||
@ -74,12 +74,12 @@ static int save_arcv2_regs(struct sigcontext *mctx, struct pt_regs *regs)
|
|||||||
#else
|
#else
|
||||||
v2abi.r58 = v2abi.r59 = 0;
|
v2abi.r58 = v2abi.r59 = 0;
|
||||||
#endif
|
#endif
|
||||||
err = __copy_to_user(&mctx->v2abi, &v2abi, sizeof(v2abi));
|
err = __copy_to_user(&mctx->v2abi, (void const *)&v2abi, sizeof(v2abi));
|
||||||
#endif
|
#endif
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int restore_arcv2_regs(struct sigcontext *mctx, struct pt_regs *regs)
|
static int restore_arcv2_regs(struct sigcontext __user *mctx, struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
int err = 0;
|
int err = 0;
|
||||||
#ifndef CONFIG_ISA_ARCOMPACT
|
#ifndef CONFIG_ISA_ARCOMPACT
|
||||||
|
@ -48,8 +48,8 @@ void arch_dma_prep_coherent(struct page *page, size_t size)
|
|||||||
* upper layer functions (in include/linux/dma-mapping.h)
|
* upper layer functions (in include/linux/dma-mapping.h)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void arch_sync_dma_for_device(struct device *dev, phys_addr_t paddr,
|
void arch_sync_dma_for_device(phys_addr_t paddr, size_t size,
|
||||||
size_t size, enum dma_data_direction dir)
|
enum dma_data_direction dir)
|
||||||
{
|
{
|
||||||
switch (dir) {
|
switch (dir) {
|
||||||
case DMA_TO_DEVICE:
|
case DMA_TO_DEVICE:
|
||||||
@ -69,8 +69,8 @@ void arch_sync_dma_for_device(struct device *dev, phys_addr_t paddr,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void arch_sync_dma_for_cpu(struct device *dev, phys_addr_t paddr,
|
void arch_sync_dma_for_cpu(phys_addr_t paddr, size_t size,
|
||||||
size_t size, enum dma_data_direction dir)
|
enum dma_data_direction dir)
|
||||||
{
|
{
|
||||||
switch (dir) {
|
switch (dir) {
|
||||||
case DMA_TO_DEVICE:
|
case DMA_TO_DEVICE:
|
||||||
|
@ -5,6 +5,7 @@ config ARM
|
|||||||
select ARCH_32BIT_OFF_T
|
select ARCH_32BIT_OFF_T
|
||||||
select ARCH_CLOCKSOURCE_DATA
|
select ARCH_CLOCKSOURCE_DATA
|
||||||
select ARCH_HAS_BINFMT_FLAT
|
select ARCH_HAS_BINFMT_FLAT
|
||||||
|
select ARCH_HAS_CPU_FINALIZE_INIT if MMU
|
||||||
select ARCH_HAS_DEBUG_VIRTUAL if MMU
|
select ARCH_HAS_DEBUG_VIRTUAL if MMU
|
||||||
select ARCH_HAS_DEVMEM_IS_ALLOWED
|
select ARCH_HAS_DEVMEM_IS_ALLOWED
|
||||||
select ARCH_HAS_DMA_COHERENT_TO_PFN if SWIOTLB
|
select ARCH_HAS_DMA_COHERENT_TO_PFN if SWIOTLB
|
||||||
|
@ -381,7 +381,7 @@
|
|||||||
&mmc2 {
|
&mmc2 {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
vmmc-supply = <&wl12xx_vmmc>;
|
vmmc-supply = <&wl12xx_vmmc>;
|
||||||
non-removable;
|
ti,non-removable;
|
||||||
bus-width = <4>;
|
bus-width = <4>;
|
||||||
cap-power-off-card;
|
cap-power-off-card;
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
|
@ -22,7 +22,6 @@
|
|||||||
pinctrl-0 = <&emmc_pins>;
|
pinctrl-0 = <&emmc_pins>;
|
||||||
bus-width = <8>;
|
bus-width = <8>;
|
||||||
status = "okay";
|
status = "okay";
|
||||||
non-removable;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
&am33xx_pinmux {
|
&am33xx_pinmux {
|
||||||
|
@ -75,6 +75,7 @@
|
|||||||
bus-width = <4>;
|
bus-width = <4>;
|
||||||
non-removable;
|
non-removable;
|
||||||
cap-power-off-card;
|
cap-power-off-card;
|
||||||
|
ti,needs-special-hs-handling;
|
||||||
keep-power-in-suspend;
|
keep-power-in-suspend;
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
pinctrl-0 = <&mmc3_pins &wl18xx_pins>;
|
pinctrl-0 = <&mmc3_pins &wl18xx_pins>;
|
||||||
|
@ -389,6 +389,7 @@
|
|||||||
bus-width = <4>;
|
bus-width = <4>;
|
||||||
non-removable;
|
non-removable;
|
||||||
cap-power-off-card;
|
cap-power-off-card;
|
||||||
|
ti,needs-special-hs-handling;
|
||||||
keep-power-in-suspend;
|
keep-power-in-suspend;
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
pinctrl-0 = <&mmc3_pins &wl18xx_pins>;
|
pinctrl-0 = <&mmc3_pins &wl18xx_pins>;
|
||||||
|
@ -75,6 +75,7 @@
|
|||||||
bus-width = <4>;
|
bus-width = <4>;
|
||||||
non-removable;
|
non-removable;
|
||||||
cap-power-off-card;
|
cap-power-off-card;
|
||||||
|
ti,needs-special-hs-handling;
|
||||||
keep-power-in-suspend;
|
keep-power-in-suspend;
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
pinctrl-0 = <&mmc3_pins &wl18xx_pins>;
|
pinctrl-0 = <&mmc3_pins &wl18xx_pins>;
|
||||||
|
@ -782,7 +782,8 @@
|
|||||||
bus-width = <4>;
|
bus-width = <4>;
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
pinctrl-0 = <&mmc3_pins &wlan_pins>;
|
pinctrl-0 = <&mmc3_pins &wlan_pins>;
|
||||||
non-removable;
|
ti,non-removable;
|
||||||
|
ti,needs-special-hs-handling;
|
||||||
cap-power-off-card;
|
cap-power-off-card;
|
||||||
keep-power-in-suspend;
|
keep-power-in-suspend;
|
||||||
|
|
||||||
|
@ -700,7 +700,7 @@
|
|||||||
&mmc2 {
|
&mmc2 {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
vmmc-supply = <&wl12xx_vmmc>;
|
vmmc-supply = <&wl12xx_vmmc>;
|
||||||
non-removable;
|
ti,non-removable;
|
||||||
bus-width = <4>;
|
bus-width = <4>;
|
||||||
cap-power-off-card;
|
cap-power-off-card;
|
||||||
keep-power-in-suspend;
|
keep-power-in-suspend;
|
||||||
|
@ -361,7 +361,7 @@
|
|||||||
pinctrl-0 = <&emmc_pins>;
|
pinctrl-0 = <&emmc_pins>;
|
||||||
vmmc-supply = <&vmmcsd_fixed>;
|
vmmc-supply = <&vmmcsd_fixed>;
|
||||||
bus-width = <8>;
|
bus-width = <8>;
|
||||||
non-removable;
|
ti,non-removable;
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -176,7 +176,7 @@
|
|||||||
vmmc-supply = <&vmmcsd_fixed>;
|
vmmc-supply = <&vmmcsd_fixed>;
|
||||||
bus-width = <8>;
|
bus-width = <8>;
|
||||||
pinctrl-0 = <&mmc1_pins_default>;
|
pinctrl-0 = <&mmc1_pins_default>;
|
||||||
non-removable;
|
ti,non-removable;
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -473,7 +473,7 @@
|
|||||||
vmmc-supply = <&vmmcsd_fixed>;
|
vmmc-supply = <&vmmcsd_fixed>;
|
||||||
bus-width = <8>;
|
bus-width = <8>;
|
||||||
pinctrl-0 = <&mmc2_pins_default>;
|
pinctrl-0 = <&mmc2_pins_default>;
|
||||||
non-removable;
|
ti,non-removable;
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -341,7 +341,7 @@
|
|||||||
pinctrl-0 = <&emmc_pins>;
|
pinctrl-0 = <&emmc_pins>;
|
||||||
vmmc-supply = <&ldo3_reg>;
|
vmmc-supply = <&ldo3_reg>;
|
||||||
bus-width = <8>;
|
bus-width = <8>;
|
||||||
non-removable;
|
ti,non-removable;
|
||||||
};
|
};
|
||||||
|
|
||||||
&mmc3 {
|
&mmc3 {
|
||||||
@ -351,7 +351,7 @@
|
|||||||
pinctrl-0 = <&wireless_pins>;
|
pinctrl-0 = <&wireless_pins>;
|
||||||
vmmmc-supply = <&v3v3c_reg>;
|
vmmmc-supply = <&v3v3c_reg>;
|
||||||
bus-width = <4>;
|
bus-width = <4>;
|
||||||
non-removable;
|
ti,non-removable;
|
||||||
dmas = <&edma_xbar 12 0 1
|
dmas = <&edma_xbar 12 0 1
|
||||||
&edma_xbar 13 0 2>;
|
&edma_xbar 13 0 2>;
|
||||||
dma-names = "tx", "rx";
|
dma-names = "tx", "rx";
|
||||||
|
@ -69,7 +69,7 @@
|
|||||||
pinctrl-0 = <&emmc_pins>;
|
pinctrl-0 = <&emmc_pins>;
|
||||||
vmmc-supply = <&vmmc_reg>;
|
vmmc-supply = <&vmmc_reg>;
|
||||||
bus-width = <8>;
|
bus-width = <8>;
|
||||||
non-removable;
|
ti,non-removable;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1333,8 +1333,10 @@
|
|||||||
ranges = <0x0 0x60000 0x1000>;
|
ranges = <0x0 0x60000 0x1000>;
|
||||||
|
|
||||||
mmc1: mmc@0 {
|
mmc1: mmc@0 {
|
||||||
compatible = "ti,am335-sdhci";
|
compatible = "ti,omap4-hsmmc";
|
||||||
|
ti,dual-volt;
|
||||||
ti,needs-special-reset;
|
ti,needs-special-reset;
|
||||||
|
ti,needs-special-hs-handling;
|
||||||
dmas = <&edma 24 0>, <&edma 25 0>;
|
dmas = <&edma 24 0>, <&edma 25 0>;
|
||||||
dma-names = "tx", "rx";
|
dma-names = "tx", "rx";
|
||||||
interrupts = <64>;
|
interrupts = <64>;
|
||||||
@ -1824,7 +1826,7 @@
|
|||||||
ranges = <0x0 0xd8000 0x1000>;
|
ranges = <0x0 0xd8000 0x1000>;
|
||||||
|
|
||||||
mmc2: mmc@0 {
|
mmc2: mmc@0 {
|
||||||
compatible = "ti,am335-sdhci";
|
compatible = "ti,omap4-hsmmc";
|
||||||
ti,needs-special-reset;
|
ti,needs-special-reset;
|
||||||
dmas = <&edma 2 0
|
dmas = <&edma 2 0
|
||||||
&edma 3 0>;
|
&edma 3 0>;
|
||||||
|
@ -259,11 +259,10 @@
|
|||||||
ranges = <0x0 0x47810000 0x1000>;
|
ranges = <0x0 0x47810000 0x1000>;
|
||||||
|
|
||||||
mmc3: mmc@0 {
|
mmc3: mmc@0 {
|
||||||
compatible = "ti,am335-sdhci";
|
compatible = "ti,omap4-hsmmc";
|
||||||
ti,needs-special-reset;
|
ti,needs-special-reset;
|
||||||
interrupts = <29>;
|
interrupts = <29>;
|
||||||
reg = <0x0 0x1000>;
|
reg = <0x0 0x1000>;
|
||||||
status = "disabled";
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -250,11 +250,10 @@
|
|||||||
ranges = <0x0 0x47810000 0x1000>;
|
ranges = <0x0 0x47810000 0x1000>;
|
||||||
|
|
||||||
mmc3: mmc@0 {
|
mmc3: mmc@0 {
|
||||||
compatible = "ti,am437-sdhci";
|
compatible = "ti,omap4-hsmmc";
|
||||||
ti,needs-special-reset;
|
ti,needs-special-reset;
|
||||||
interrupts = <GIC_SPI 29 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 29 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
reg = <0x0 0x1000>;
|
reg = <0x0 0x1000>;
|
||||||
status = "disabled";
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -291,7 +291,7 @@
|
|||||||
pinctrl-0 = <&emmc_pins>;
|
pinctrl-0 = <&emmc_pins>;
|
||||||
vmmc-supply = <&vmmc_3v3>;
|
vmmc-supply = <&vmmc_3v3>;
|
||||||
bus-width = <8>;
|
bus-width = <8>;
|
||||||
non-removable;
|
ti,non-removable;
|
||||||
};
|
};
|
||||||
|
|
||||||
&spi0 {
|
&spi0 {
|
||||||
|
@ -872,7 +872,7 @@
|
|||||||
pinctrl-names = "default", "sleep";
|
pinctrl-names = "default", "sleep";
|
||||||
pinctrl-0 = <&emmc_pins_default>;
|
pinctrl-0 = <&emmc_pins_default>;
|
||||||
pinctrl-1 = <&emmc_pins_sleep>;
|
pinctrl-1 = <&emmc_pins_sleep>;
|
||||||
non-removable;
|
ti,non-removable;
|
||||||
};
|
};
|
||||||
|
|
||||||
&mmc3 {
|
&mmc3 {
|
||||||
@ -889,7 +889,7 @@
|
|||||||
pinctrl-1 = <&mmc3_pins_sleep>;
|
pinctrl-1 = <&mmc3_pins_sleep>;
|
||||||
cap-power-off-card;
|
cap-power-off-card;
|
||||||
keep-power-in-suspend;
|
keep-power-in-suspend;
|
||||||
non-removable;
|
ti,non-removable;
|
||||||
|
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
|
@ -1104,8 +1104,9 @@
|
|||||||
ranges = <0x0 0x60000 0x1000>;
|
ranges = <0x0 0x60000 0x1000>;
|
||||||
|
|
||||||
mmc1: mmc@0 {
|
mmc1: mmc@0 {
|
||||||
compatible = "ti,am437-sdhci";
|
compatible = "ti,omap4-hsmmc";
|
||||||
reg = <0x0 0x1000>;
|
reg = <0x0 0x1000>;
|
||||||
|
ti,dual-volt;
|
||||||
ti,needs-special-reset;
|
ti,needs-special-reset;
|
||||||
dmas = <&edma 24 0>,
|
dmas = <&edma 24 0>,
|
||||||
<&edma 25 0>;
|
<&edma 25 0>;
|
||||||
@ -1640,7 +1641,7 @@
|
|||||||
ranges = <0x0 0xd8000 0x1000>;
|
ranges = <0x0 0xd8000 0x1000>;
|
||||||
|
|
||||||
mmc2: mmc@0 {
|
mmc2: mmc@0 {
|
||||||
compatible = "ti,am437-sdhci";
|
compatible = "ti,omap4-hsmmc";
|
||||||
reg = <0x0 0x1000>;
|
reg = <0x0 0x1000>;
|
||||||
ti,needs-special-reset;
|
ti,needs-special-reset;
|
||||||
dmas = <&edma 2 0>,
|
dmas = <&edma 2 0>,
|
||||||
|
@ -694,7 +694,7 @@
|
|||||||
pinctrl-1 = <&mmc3_pins_sleep>;
|
pinctrl-1 = <&mmc3_pins_sleep>;
|
||||||
cap-power-off-card;
|
cap-power-off-card;
|
||||||
keep-power-in-suspend;
|
keep-power-in-suspend;
|
||||||
non-removable;
|
ti,non-removable;
|
||||||
|
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
|
@ -527,7 +527,7 @@
|
|||||||
|
|
||||||
interrupt-parent = <&gpio1>;
|
interrupt-parent = <&gpio1>;
|
||||||
interrupts = <31 0>;
|
interrupts = <31 0>;
|
||||||
pendown-gpio = <&gpio1 31 0>;
|
pendown-gpio = <&gpio1 31 GPIO_ACTIVE_LOW>;
|
||||||
|
|
||||||
|
|
||||||
ti,x-min = /bits/ 16 <0x0>;
|
ti,x-min = /bits/ 16 <0x0>;
|
||||||
|
@ -156,7 +156,7 @@
|
|||||||
compatible = "ti,ads7843";
|
compatible = "ti,ads7843";
|
||||||
interrupts-extended = <&pioC 2 IRQ_TYPE_EDGE_BOTH>;
|
interrupts-extended = <&pioC 2 IRQ_TYPE_EDGE_BOTH>;
|
||||||
spi-max-frequency = <3000000>;
|
spi-max-frequency = <3000000>;
|
||||||
pendown-gpio = <&pioC 2 GPIO_ACTIVE_HIGH>;
|
pendown-gpio = <&pioC 2 GPIO_ACTIVE_LOW>;
|
||||||
|
|
||||||
ti,x-min = /bits/ 16 <150>;
|
ti,x-min = /bits/ 16 <150>;
|
||||||
ti,x-max = /bits/ 16 <3830>;
|
ti,x-max = /bits/ 16 <3830>;
|
||||||
|
@ -19,7 +19,8 @@
|
|||||||
|
|
||||||
memory@0 {
|
memory@0 {
|
||||||
device_type = "memory";
|
device_type = "memory";
|
||||||
reg = <0x00000000 0x08000000>;
|
reg = <0x00000000 0x08000000>,
|
||||||
|
<0x88000000 0x08000000>;
|
||||||
};
|
};
|
||||||
|
|
||||||
gpio-keys {
|
gpio-keys {
|
||||||
|
@ -26,7 +26,6 @@
|
|||||||
wlan {
|
wlan {
|
||||||
label = "bcm53xx:blue:wlan";
|
label = "bcm53xx:blue:wlan";
|
||||||
gpios = <&chipcommon 10 GPIO_ACTIVE_LOW>;
|
gpios = <&chipcommon 10 GPIO_ACTIVE_LOW>;
|
||||||
linux,default-trigger = "default-off";
|
|
||||||
};
|
};
|
||||||
|
|
||||||
system {
|
system {
|
||||||
@ -46,3 +45,16 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
&gmac0 {
|
||||||
|
phy-mode = "rgmii";
|
||||||
|
phy-handle = <&bcm54210e>;
|
||||||
|
|
||||||
|
mdio {
|
||||||
|
/delete-node/ switch@1e;
|
||||||
|
|
||||||
|
bcm54210e: ethernet-phy@0 {
|
||||||
|
reg = <0>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
@ -26,7 +26,6 @@
|
|||||||
5ghz {
|
5ghz {
|
||||||
label = "bcm53xx:blue:5ghz";
|
label = "bcm53xx:blue:5ghz";
|
||||||
gpios = <&chipcommon 11 GPIO_ACTIVE_HIGH>;
|
gpios = <&chipcommon 11 GPIO_ACTIVE_HIGH>;
|
||||||
linux,default-trigger = "default-off";
|
|
||||||
};
|
};
|
||||||
|
|
||||||
system {
|
system {
|
||||||
@ -42,7 +41,6 @@
|
|||||||
2ghz {
|
2ghz {
|
||||||
label = "bcm53xx:blue:2ghz";
|
label = "bcm53xx:blue:2ghz";
|
||||||
gpios = <&pcie0_chipcommon 3 GPIO_ACTIVE_HIGH>;
|
gpios = <&pcie0_chipcommon 3 GPIO_ACTIVE_HIGH>;
|
||||||
linux,default-trigger = "default-off";
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -83,3 +81,16 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
&gmac0 {
|
||||||
|
phy-mode = "rgmii";
|
||||||
|
phy-handle = <&bcm54210e>;
|
||||||
|
|
||||||
|
mdio {
|
||||||
|
/delete-node/ switch@1e;
|
||||||
|
|
||||||
|
bcm54210e: ethernet-phy@0 {
|
||||||
|
reg = <0>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
@ -511,7 +511,6 @@
|
|||||||
"spi_lr_session_done",
|
"spi_lr_session_done",
|
||||||
"spi_lr_overread";
|
"spi_lr_overread";
|
||||||
clocks = <&iprocmed>;
|
clocks = <&iprocmed>;
|
||||||
clock-names = "iprocmed";
|
|
||||||
num-cs = <2>;
|
num-cs = <2>;
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
|
@ -127,6 +127,9 @@
|
|||||||
|
|
||||||
pcie0: pcie@2000 {
|
pcie0: pcie@2000 {
|
||||||
reg = <0x00002000 0x1000>;
|
reg = <0x00002000 0x1000>;
|
||||||
|
|
||||||
|
#address-cells = <3>;
|
||||||
|
#size-cells = <2>;
|
||||||
};
|
};
|
||||||
|
|
||||||
usb2: usb2@4000 {
|
usb2: usb2@4000 {
|
||||||
|
@ -60,9 +60,9 @@
|
|||||||
spi {
|
spi {
|
||||||
compatible = "spi-gpio";
|
compatible = "spi-gpio";
|
||||||
num-chipselects = <1>;
|
num-chipselects = <1>;
|
||||||
gpio-sck = <&chipcommon 21 0>;
|
sck-gpios = <&chipcommon 21 0>;
|
||||||
gpio-miso = <&chipcommon 22 0>;
|
miso-gpios = <&chipcommon 22 0>;
|
||||||
gpio-mosi = <&chipcommon 23 0>;
|
mosi-gpios = <&chipcommon 23 0>;
|
||||||
cs-gpios = <&chipcommon 24 0>;
|
cs-gpios = <&chipcommon 24 0>;
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
|
@ -239,7 +239,7 @@
|
|||||||
i80-if-timings {
|
i80-if-timings {
|
||||||
cs-setup = <0>;
|
cs-setup = <0>;
|
||||||
wr-setup = <0>;
|
wr-setup = <0>;
|
||||||
wr-act = <1>;
|
wr-active = <1>;
|
||||||
wr-hold = <0>;
|
wr-hold = <0>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
/ {
|
/ {
|
||||||
thermal-zones {
|
thermal-zones {
|
||||||
cpu_thermal: cpu-thermal {
|
cpu_thermal: cpu-thermal {
|
||||||
thermal-sensors = <&tmu 0>;
|
thermal-sensors = <&tmu>;
|
||||||
polling-delay-passive = <0>;
|
polling-delay-passive = <0>;
|
||||||
polling-delay = <0>;
|
polling-delay = <0>;
|
||||||
trips {
|
trips {
|
||||||
|
@ -605,7 +605,7 @@
|
|||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
|
||||||
hdmi_i2c_phy: hdmiphy@38 {
|
hdmi_i2c_phy: hdmiphy@38 {
|
||||||
compatible = "exynos4210-hdmiphy";
|
compatible = "samsung,exynos4210-hdmiphy";
|
||||||
reg = <0x38>;
|
reg = <0x38>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -179,7 +179,7 @@
|
|||||||
compatible = "wlf,wm8960";
|
compatible = "wlf,wm8960";
|
||||||
reg = <0x1a>;
|
reg = <0x1a>;
|
||||||
clocks = <&pmu_system_controller 0>;
|
clocks = <&pmu_system_controller 0>;
|
||||||
clock-names = "MCLK1";
|
clock-names = "mclk";
|
||||||
wlf,shared-lrclk;
|
wlf,shared-lrclk;
|
||||||
#sound-dai-cells = <0>;
|
#sound-dai-cells = <0>;
|
||||||
};
|
};
|
||||||
|
@ -116,7 +116,6 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
&cpu0_thermal {
|
&cpu0_thermal {
|
||||||
thermal-sensors = <&tmu_cpu0 0>;
|
|
||||||
polling-delay-passive = <0>;
|
polling-delay-passive = <0>;
|
||||||
polling-delay = <0>;
|
polling-delay = <0>;
|
||||||
|
|
||||||
|
@ -539,7 +539,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
mipi_phy: mipi-video-phy {
|
mipi_phy: mipi-video-phy {
|
||||||
compatible = "samsung,s5pv210-mipi-video-phy";
|
compatible = "samsung,exynos5420-mipi-video-phy";
|
||||||
syscon = <&pmu_system_controller>;
|
syscon = <&pmu_system_controller>;
|
||||||
#phy-cells = <1>;
|
#phy-cells = <1>;
|
||||||
};
|
};
|
||||||
|
@ -59,7 +59,7 @@
|
|||||||
reg = <0x80000000 0x2000>;
|
reg = <0x80000000 0x2000>;
|
||||||
};
|
};
|
||||||
|
|
||||||
dma_apbh: dma-apbh@80004000 {
|
dma_apbh: dma-controller@80004000 {
|
||||||
compatible = "fsl,imx23-dma-apbh";
|
compatible = "fsl,imx23-dma-apbh";
|
||||||
reg = <0x80004000 0x2000>;
|
reg = <0x80004000 0x2000>;
|
||||||
interrupts = <0 14 20 0
|
interrupts = <0 14 20 0
|
||||||
|
@ -78,7 +78,7 @@
|
|||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
dma_apbh: dma-apbh@80004000 {
|
dma_apbh: dma-controller@80004000 {
|
||||||
compatible = "fsl,imx28-dma-apbh";
|
compatible = "fsl,imx28-dma-apbh";
|
||||||
reg = <0x80004000 0x2000>;
|
reg = <0x80004000 0x2000>;
|
||||||
interrupts = <82 83 84 85
|
interrupts = <82 83 84 85
|
||||||
|
@ -59,7 +59,7 @@
|
|||||||
interrupt-parent = <&avic>;
|
interrupt-parent = <&avic>;
|
||||||
ranges;
|
ranges;
|
||||||
|
|
||||||
L2: l2-cache@30000000 {
|
L2: cache-controller@30000000 {
|
||||||
compatible = "arm,l210-cache";
|
compatible = "arm,l210-cache";
|
||||||
reg = <0x30000000 0x1000>;
|
reg = <0x30000000 0x1000>;
|
||||||
cache-unified;
|
cache-unified;
|
||||||
|
@ -45,6 +45,10 @@
|
|||||||
spi1 = &ecspi2;
|
spi1 = &ecspi2;
|
||||||
spi2 = &ecspi3;
|
spi2 = &ecspi3;
|
||||||
spi3 = &ecspi4;
|
spi3 = &ecspi4;
|
||||||
|
usb0 = &usbotg;
|
||||||
|
usb1 = &usbh1;
|
||||||
|
usb2 = &usbh2;
|
||||||
|
usb3 = &usbh3;
|
||||||
usbphy0 = &usbphy1;
|
usbphy0 = &usbphy1;
|
||||||
usbphy1 = &usbphy2;
|
usbphy1 = &usbphy2;
|
||||||
};
|
};
|
||||||
@ -156,7 +160,7 @@
|
|||||||
interrupt-parent = <&gpc>;
|
interrupt-parent = <&gpc>;
|
||||||
ranges;
|
ranges;
|
||||||
|
|
||||||
dma_apbh: dma-apbh@110000 {
|
dma_apbh: dma-controller@110000 {
|
||||||
compatible = "fsl,imx6q-dma-apbh", "fsl,imx28-dma-apbh";
|
compatible = "fsl,imx6q-dma-apbh", "fsl,imx28-dma-apbh";
|
||||||
reg = <0x00110000 0x2000>;
|
reg = <0x00110000 0x2000>;
|
||||||
interrupts = <0 13 IRQ_TYPE_LEVEL_HIGH>,
|
interrupts = <0 13 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
@ -255,7 +259,7 @@
|
|||||||
interrupt-parent = <&intc>;
|
interrupt-parent = <&intc>;
|
||||||
};
|
};
|
||||||
|
|
||||||
L2: l2-cache@a02000 {
|
L2: cache-controller@a02000 {
|
||||||
compatible = "arm,pl310-cache";
|
compatible = "arm,pl310-cache";
|
||||||
reg = <0x00a02000 0x1000>;
|
reg = <0x00a02000 0x1000>;
|
||||||
interrupts = <0 92 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <0 92 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
@ -574,7 +578,7 @@
|
|||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
gpt: gpt@2098000 {
|
gpt: timer@2098000 {
|
||||||
compatible = "fsl,imx6q-gpt", "fsl,imx31-gpt";
|
compatible = "fsl,imx6q-gpt", "fsl,imx31-gpt";
|
||||||
reg = <0x02098000 0x4000>;
|
reg = <0x02098000 0x4000>;
|
||||||
interrupts = <0 55 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <0 55 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
@ -39,6 +39,9 @@
|
|||||||
spi1 = &ecspi2;
|
spi1 = &ecspi2;
|
||||||
spi2 = &ecspi3;
|
spi2 = &ecspi3;
|
||||||
spi3 = &ecspi4;
|
spi3 = &ecspi4;
|
||||||
|
usb0 = &usbotg1;
|
||||||
|
usb1 = &usbotg2;
|
||||||
|
usb2 = &usbh;
|
||||||
usbphy0 = &usbphy1;
|
usbphy0 = &usbphy1;
|
||||||
usbphy1 = &usbphy2;
|
usbphy1 = &usbphy2;
|
||||||
};
|
};
|
||||||
@ -136,7 +139,7 @@
|
|||||||
interrupt-parent = <&intc>;
|
interrupt-parent = <&intc>;
|
||||||
};
|
};
|
||||||
|
|
||||||
L2: l2-cache@a02000 {
|
L2: cache-controller@a02000 {
|
||||||
compatible = "arm,pl310-cache";
|
compatible = "arm,pl310-cache";
|
||||||
reg = <0x00a02000 0x1000>;
|
reg = <0x00a02000 0x1000>;
|
||||||
interrupts = <0 92 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <0 92 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
@ -383,7 +386,7 @@
|
|||||||
clock-names = "ipg", "per";
|
clock-names = "ipg", "per";
|
||||||
};
|
};
|
||||||
|
|
||||||
gpt: gpt@2098000 {
|
gpt: timer@2098000 {
|
||||||
compatible = "fsl,imx6sl-gpt";
|
compatible = "fsl,imx6sl-gpt";
|
||||||
reg = <0x02098000 0x4000>;
|
reg = <0x02098000 0x4000>;
|
||||||
interrupts = <0 55 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <0 55 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
@ -36,6 +36,8 @@
|
|||||||
spi1 = &ecspi2;
|
spi1 = &ecspi2;
|
||||||
spi3 = &ecspi3;
|
spi3 = &ecspi3;
|
||||||
spi4 = &ecspi4;
|
spi4 = &ecspi4;
|
||||||
|
usb0 = &usbotg1;
|
||||||
|
usb1 = &usbotg2;
|
||||||
usbphy0 = &usbphy1;
|
usbphy0 = &usbphy1;
|
||||||
usbphy1 = &usbphy2;
|
usbphy1 = &usbphy2;
|
||||||
};
|
};
|
||||||
@ -49,20 +51,18 @@
|
|||||||
device_type = "cpu";
|
device_type = "cpu";
|
||||||
reg = <0>;
|
reg = <0>;
|
||||||
next-level-cache = <&L2>;
|
next-level-cache = <&L2>;
|
||||||
operating-points = <
|
operating-points =
|
||||||
/* kHz uV */
|
/* kHz uV */
|
||||||
996000 1275000
|
<996000 1275000>,
|
||||||
792000 1175000
|
<792000 1175000>,
|
||||||
396000 1075000
|
<396000 1075000>,
|
||||||
198000 975000
|
<198000 975000>;
|
||||||
>;
|
fsl,soc-operating-points =
|
||||||
fsl,soc-operating-points = <
|
|
||||||
/* ARM kHz SOC-PU uV */
|
/* ARM kHz SOC-PU uV */
|
||||||
996000 1175000
|
<996000 1175000>,
|
||||||
792000 1175000
|
<792000 1175000>,
|
||||||
396000 1175000
|
<396000 1175000>,
|
||||||
198000 1175000
|
<198000 1175000>;
|
||||||
>;
|
|
||||||
clock-latency = <61036>; /* two CLK32 periods */
|
clock-latency = <61036>; /* two CLK32 periods */
|
||||||
#cooling-cells = <2>;
|
#cooling-cells = <2>;
|
||||||
clocks = <&clks IMX6SLL_CLK_ARM>,
|
clocks = <&clks IMX6SLL_CLK_ARM>,
|
||||||
@ -137,7 +137,7 @@
|
|||||||
interrupt-parent = <&intc>;
|
interrupt-parent = <&intc>;
|
||||||
};
|
};
|
||||||
|
|
||||||
L2: l2-cache@a02000 {
|
L2: cache-controller@a02000 {
|
||||||
compatible = "arm,pl310-cache";
|
compatible = "arm,pl310-cache";
|
||||||
reg = <0x00a02000 0x1000>;
|
reg = <0x00a02000 0x1000>;
|
||||||
interrupts = <GIC_SPI 92 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 92 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
@ -272,7 +272,7 @@
|
|||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
ssi1: ssi-controller@2028000 {
|
ssi1: ssi@2028000 {
|
||||||
compatible = "fsl,imx6sl-ssi", "fsl,imx51-ssi";
|
compatible = "fsl,imx6sl-ssi", "fsl,imx51-ssi";
|
||||||
reg = <0x02028000 0x4000>;
|
reg = <0x02028000 0x4000>;
|
||||||
interrupts = <GIC_SPI 46 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 46 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
@ -285,7 +285,7 @@
|
|||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
ssi2: ssi-controller@202c000 {
|
ssi2: ssi@202c000 {
|
||||||
compatible = "fsl,imx6sl-ssi", "fsl,imx51-ssi";
|
compatible = "fsl,imx6sl-ssi", "fsl,imx51-ssi";
|
||||||
reg = <0x0202c000 0x4000>;
|
reg = <0x0202c000 0x4000>;
|
||||||
interrupts = <GIC_SPI 47 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 47 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
@ -298,7 +298,7 @@
|
|||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
ssi3: ssi-controller@2030000 {
|
ssi3: ssi@2030000 {
|
||||||
compatible = "fsl,imx6sl-ssi", "fsl,imx51-ssi";
|
compatible = "fsl,imx6sl-ssi", "fsl,imx51-ssi";
|
||||||
reg = <0x02030000 0x4000>;
|
reg = <0x02030000 0x4000>;
|
||||||
interrupts = <GIC_SPI 48 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 48 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
@ -550,7 +550,7 @@
|
|||||||
reg = <0x020ca000 0x1000>;
|
reg = <0x020ca000 0x1000>;
|
||||||
interrupts = <GIC_SPI 41 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 41 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&clks IMX6SLL_CLK_USBPHY2>;
|
clocks = <&clks IMX6SLL_CLK_USBPHY2>;
|
||||||
phy-reg_3p0-supply = <®_3p0>;
|
phy-3p0-supply = <®_3p0>;
|
||||||
fsl,anatop = <&anatop>;
|
fsl,anatop = <&anatop>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -49,6 +49,9 @@
|
|||||||
spi2 = &ecspi3;
|
spi2 = &ecspi3;
|
||||||
spi3 = &ecspi4;
|
spi3 = &ecspi4;
|
||||||
spi4 = &ecspi5;
|
spi4 = &ecspi5;
|
||||||
|
usb0 = &usbotg1;
|
||||||
|
usb1 = &usbotg2;
|
||||||
|
usb2 = &usbh;
|
||||||
usbphy0 = &usbphy1;
|
usbphy0 = &usbphy1;
|
||||||
usbphy1 = &usbphy2;
|
usbphy1 = &usbphy2;
|
||||||
};
|
};
|
||||||
@ -187,7 +190,7 @@
|
|||||||
interrupt-parent = <&intc>;
|
interrupt-parent = <&intc>;
|
||||||
};
|
};
|
||||||
|
|
||||||
L2: l2-cache@a02000 {
|
L2: cache-controller@a02000 {
|
||||||
compatible = "arm,pl310-cache";
|
compatible = "arm,pl310-cache";
|
||||||
reg = <0x00a02000 0x1000>;
|
reg = <0x00a02000 0x1000>;
|
||||||
interrupts = <GIC_SPI 92 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 92 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
@ -208,7 +211,7 @@
|
|||||||
power-domains = <&pd_pu>;
|
power-domains = <&pd_pu>;
|
||||||
};
|
};
|
||||||
|
|
||||||
dma_apbh: dma-apbh@1804000 {
|
dma_apbh: dma-controller@1804000 {
|
||||||
compatible = "fsl,imx6sx-dma-apbh", "fsl,imx28-dma-apbh";
|
compatible = "fsl,imx6sx-dma-apbh", "fsl,imx28-dma-apbh";
|
||||||
reg = <0x01804000 0x2000>;
|
reg = <0x01804000 0x2000>;
|
||||||
interrupts = <GIC_SPI 13 IRQ_TYPE_LEVEL_HIGH>,
|
interrupts = <GIC_SPI 13 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
@ -472,7 +475,7 @@
|
|||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
gpt: gpt@2098000 {
|
gpt: timer@2098000 {
|
||||||
compatible = "fsl,imx6sx-gpt", "fsl,imx6dl-gpt";
|
compatible = "fsl,imx6sx-gpt", "fsl,imx6dl-gpt";
|
||||||
reg = <0x02098000 0x4000>;
|
reg = <0x02098000 0x4000>;
|
||||||
interrupts = <GIC_SPI 55 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 55 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
@ -955,6 +958,8 @@
|
|||||||
<&clks IMX6SX_CLK_USDHC1>;
|
<&clks IMX6SX_CLK_USDHC1>;
|
||||||
clock-names = "ipg", "ahb", "per";
|
clock-names = "ipg", "ahb", "per";
|
||||||
bus-width = <4>;
|
bus-width = <4>;
|
||||||
|
fsl,tuning-start-tap = <20>;
|
||||||
|
fsl,tuning-step= <2>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -967,6 +972,8 @@
|
|||||||
<&clks IMX6SX_CLK_USDHC2>;
|
<&clks IMX6SX_CLK_USDHC2>;
|
||||||
clock-names = "ipg", "ahb", "per";
|
clock-names = "ipg", "ahb", "per";
|
||||||
bus-width = <4>;
|
bus-width = <4>;
|
||||||
|
fsl,tuning-start-tap = <20>;
|
||||||
|
fsl,tuning-step= <2>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -979,6 +986,8 @@
|
|||||||
<&clks IMX6SX_CLK_USDHC3>;
|
<&clks IMX6SX_CLK_USDHC3>;
|
||||||
clock-names = "ipg", "ahb", "per";
|
clock-names = "ipg", "ahb", "per";
|
||||||
bus-width = <4>;
|
bus-width = <4>;
|
||||||
|
fsl,tuning-start-tap = <20>;
|
||||||
|
fsl,tuning-step= <2>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -47,6 +47,8 @@
|
|||||||
spi1 = &ecspi2;
|
spi1 = &ecspi2;
|
||||||
spi2 = &ecspi3;
|
spi2 = &ecspi3;
|
||||||
spi3 = &ecspi4;
|
spi3 = &ecspi4;
|
||||||
|
usb0 = &usbotg1;
|
||||||
|
usb1 = &usbotg2;
|
||||||
usbphy0 = &usbphy1;
|
usbphy0 = &usbphy1;
|
||||||
usbphy1 = &usbphy2;
|
usbphy1 = &usbphy2;
|
||||||
};
|
};
|
||||||
@ -172,7 +174,7 @@
|
|||||||
<0x00a06000 0x2000>;
|
<0x00a06000 0x2000>;
|
||||||
};
|
};
|
||||||
|
|
||||||
dma_apbh: dma-apbh@1804000 {
|
dma_apbh: dma-controller@1804000 {
|
||||||
compatible = "fsl,imx6q-dma-apbh", "fsl,imx28-dma-apbh";
|
compatible = "fsl,imx6q-dma-apbh", "fsl,imx28-dma-apbh";
|
||||||
reg = <0x01804000 0x2000>;
|
reg = <0x01804000 0x2000>;
|
||||||
interrupts = <0 13 IRQ_TYPE_LEVEL_HIGH>,
|
interrupts = <0 13 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
@ -431,7 +433,7 @@
|
|||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
gpt1: gpt@2098000 {
|
gpt1: timer@2098000 {
|
||||||
compatible = "fsl,imx6ul-gpt", "fsl,imx6sx-gpt";
|
compatible = "fsl,imx6ul-gpt", "fsl,imx6sx-gpt";
|
||||||
reg = <0x02098000 0x4000>;
|
reg = <0x02098000 0x4000>;
|
||||||
interrupts = <GIC_SPI 55 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 55 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
@ -705,7 +707,7 @@
|
|||||||
reg = <0x020e4000 0x4000>;
|
reg = <0x020e4000 0x4000>;
|
||||||
};
|
};
|
||||||
|
|
||||||
gpt2: gpt@20e8000 {
|
gpt2: timer@20e8000 {
|
||||||
compatible = "fsl,imx6ul-gpt", "fsl,imx6sx-gpt";
|
compatible = "fsl,imx6ul-gpt", "fsl,imx6sx-gpt";
|
||||||
reg = <0x020e8000 0x4000>;
|
reg = <0x020e8000 0x4000>;
|
||||||
interrupts = <GIC_SPI 109 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 109 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
@ -64,7 +64,7 @@
|
|||||||
interrupt-parent = <&gpio2>;
|
interrupt-parent = <&gpio2>;
|
||||||
interrupts = <7 0>;
|
interrupts = <7 0>;
|
||||||
spi-max-frequency = <1000000>;
|
spi-max-frequency = <1000000>;
|
||||||
pendown-gpio = <&gpio2 7 0>;
|
pendown-gpio = <&gpio2 7 GPIO_ACTIVE_LOW>;
|
||||||
vcc-supply = <®_3p3v>;
|
vcc-supply = <®_3p3v>;
|
||||||
ti,x-min = /bits/ 16 <0>;
|
ti,x-min = /bits/ 16 <0>;
|
||||||
ti,x-max = /bits/ 16 <4095>;
|
ti,x-max = /bits/ 16 <4095>;
|
||||||
|
@ -176,7 +176,7 @@
|
|||||||
pinctrl-0 = <&pinctrl_tsc2046_pendown>;
|
pinctrl-0 = <&pinctrl_tsc2046_pendown>;
|
||||||
interrupt-parent = <&gpio2>;
|
interrupt-parent = <&gpio2>;
|
||||||
interrupts = <29 0>;
|
interrupts = <29 0>;
|
||||||
pendown-gpio = <&gpio2 29 GPIO_ACTIVE_HIGH>;
|
pendown-gpio = <&gpio2 29 GPIO_ACTIVE_LOW>;
|
||||||
touchscreen-max-pressure = <255>;
|
touchscreen-max-pressure = <255>;
|
||||||
wakeup-source;
|
wakeup-source;
|
||||||
};
|
};
|
||||||
|
@ -7,6 +7,12 @@
|
|||||||
#include <dt-bindings/reset/imx7-reset.h>
|
#include <dt-bindings/reset/imx7-reset.h>
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
|
aliases {
|
||||||
|
usb0 = &usbotg1;
|
||||||
|
usb1 = &usbotg2;
|
||||||
|
usb2 = &usbh;
|
||||||
|
};
|
||||||
|
|
||||||
cpus {
|
cpus {
|
||||||
cpu0: cpu@0 {
|
cpu0: cpu@0 {
|
||||||
clock-frequency = <996000000>;
|
clock-frequency = <996000000>;
|
||||||
|
@ -47,6 +47,8 @@
|
|||||||
spi1 = &ecspi2;
|
spi1 = &ecspi2;
|
||||||
spi2 = &ecspi3;
|
spi2 = &ecspi3;
|
||||||
spi3 = &ecspi4;
|
spi3 = &ecspi4;
|
||||||
|
usb0 = &usbotg1;
|
||||||
|
usb1 = &usbh;
|
||||||
};
|
};
|
||||||
|
|
||||||
cpus {
|
cpus {
|
||||||
@ -444,8 +446,8 @@
|
|||||||
fsl,input-sel = <&iomuxc>;
|
fsl,input-sel = <&iomuxc>;
|
||||||
};
|
};
|
||||||
|
|
||||||
gpt1: gpt@302d0000 {
|
gpt1: timer@302d0000 {
|
||||||
compatible = "fsl,imx7d-gpt", "fsl,imx6sx-gpt";
|
compatible = "fsl,imx7d-gpt", "fsl,imx6dl-gpt";
|
||||||
reg = <0x302d0000 0x10000>;
|
reg = <0x302d0000 0x10000>;
|
||||||
interrupts = <GIC_SPI 55 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 55 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&clks IMX7D_GPT1_ROOT_CLK>,
|
clocks = <&clks IMX7D_GPT1_ROOT_CLK>,
|
||||||
@ -453,8 +455,8 @@
|
|||||||
clock-names = "ipg", "per";
|
clock-names = "ipg", "per";
|
||||||
};
|
};
|
||||||
|
|
||||||
gpt2: gpt@302e0000 {
|
gpt2: timer@302e0000 {
|
||||||
compatible = "fsl,imx7d-gpt", "fsl,imx6sx-gpt";
|
compatible = "fsl,imx7d-gpt", "fsl,imx6dl-gpt";
|
||||||
reg = <0x302e0000 0x10000>;
|
reg = <0x302e0000 0x10000>;
|
||||||
interrupts = <GIC_SPI 54 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 54 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&clks IMX7D_GPT2_ROOT_CLK>,
|
clocks = <&clks IMX7D_GPT2_ROOT_CLK>,
|
||||||
@ -463,8 +465,8 @@
|
|||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
gpt3: gpt@302f0000 {
|
gpt3: timer@302f0000 {
|
||||||
compatible = "fsl,imx7d-gpt", "fsl,imx6sx-gpt";
|
compatible = "fsl,imx7d-gpt", "fsl,imx6dl-gpt";
|
||||||
reg = <0x302f0000 0x10000>;
|
reg = <0x302f0000 0x10000>;
|
||||||
interrupts = <GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&clks IMX7D_GPT3_ROOT_CLK>,
|
clocks = <&clks IMX7D_GPT3_ROOT_CLK>,
|
||||||
@ -473,8 +475,8 @@
|
|||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
gpt4: gpt@30300000 {
|
gpt4: timer@30300000 {
|
||||||
compatible = "fsl,imx7d-gpt", "fsl,imx6sx-gpt";
|
compatible = "fsl,imx7d-gpt", "fsl,imx6dl-gpt";
|
||||||
reg = <0x30300000 0x10000>;
|
reg = <0x30300000 0x10000>;
|
||||||
interrupts = <GIC_SPI 52 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 52 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&clks IMX7D_GPT4_ROOT_CLK>,
|
clocks = <&clks IMX7D_GPT4_ROOT_CLK>,
|
||||||
@ -504,7 +506,7 @@
|
|||||||
|
|
||||||
mux: mux-controller {
|
mux: mux-controller {
|
||||||
compatible = "mmio-mux";
|
compatible = "mmio-mux";
|
||||||
#mux-control-cells = <0>;
|
#mux-control-cells = <1>;
|
||||||
mux-reg-masks = <0x14 0x00000010>;
|
mux-reg-masks = <0x14 0x00000010>;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1131,6 +1133,8 @@
|
|||||||
<&clks IMX7D_USDHC1_ROOT_CLK>;
|
<&clks IMX7D_USDHC1_ROOT_CLK>;
|
||||||
clock-names = "ipg", "ahb", "per";
|
clock-names = "ipg", "ahb", "per";
|
||||||
bus-width = <4>;
|
bus-width = <4>;
|
||||||
|
fsl,tuning-step = <2>;
|
||||||
|
fsl,tuning-start-tap = <20>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1143,6 +1147,8 @@
|
|||||||
<&clks IMX7D_USDHC2_ROOT_CLK>;
|
<&clks IMX7D_USDHC2_ROOT_CLK>;
|
||||||
clock-names = "ipg", "ahb", "per";
|
clock-names = "ipg", "ahb", "per";
|
||||||
bus-width = <4>;
|
bus-width = <4>;
|
||||||
|
fsl,tuning-step = <2>;
|
||||||
|
fsl,tuning-start-tap = <20>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1155,6 +1161,8 @@
|
|||||||
<&clks IMX7D_USDHC3_ROOT_CLK>;
|
<&clks IMX7D_USDHC3_ROOT_CLK>;
|
||||||
clock-names = "ipg", "ahb", "per";
|
clock-names = "ipg", "ahb", "per";
|
||||||
bus-width = <4>;
|
bus-width = <4>;
|
||||||
|
fsl,tuning-step = <2>;
|
||||||
|
fsl,tuning-start-tap = <20>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1190,14 +1198,13 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
dma_apbh: dma-apbh@33000000 {
|
dma_apbh: dma-controller@33000000 {
|
||||||
compatible = "fsl,imx7d-dma-apbh", "fsl,imx28-dma-apbh";
|
compatible = "fsl,imx7d-dma-apbh", "fsl,imx28-dma-apbh";
|
||||||
reg = <0x33000000 0x2000>;
|
reg = <0x33000000 0x2000>;
|
||||||
interrupts = <GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>,
|
interrupts = <GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
<GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>,
|
<GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
<GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>,
|
<GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>,
|
||||||
<GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>;
|
<GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
interrupt-names = "gpmi0", "gpmi1", "gpmi2", "gpmi3";
|
|
||||||
#dma-cells = <1>;
|
#dma-cells = <1>;
|
||||||
dma-channels = <4>;
|
dma-channels = <4>;
|
||||||
clocks = <&clks IMX7D_NAND_USDHC_BUS_RAWNAND_CLK>;
|
clocks = <&clks IMX7D_NAND_USDHC_BUS_RAWNAND_CLK>;
|
||||||
|
@ -227,7 +227,7 @@
|
|||||||
|
|
||||||
interrupt-parent = <&gpio2>;
|
interrupt-parent = <&gpio2>;
|
||||||
interrupts = <25 0>; /* gpio_57 */
|
interrupts = <25 0>; /* gpio_57 */
|
||||||
pendown-gpio = <&gpio2 25 GPIO_ACTIVE_HIGH>;
|
pendown-gpio = <&gpio2 25 GPIO_ACTIVE_LOW>;
|
||||||
|
|
||||||
ti,x-min = /bits/ 16 <0x0>;
|
ti,x-min = /bits/ 16 <0x0>;
|
||||||
ti,x-max = /bits/ 16 <0x0fff>;
|
ti,x-max = /bits/ 16 <0x0fff>;
|
||||||
|
@ -54,7 +54,7 @@
|
|||||||
|
|
||||||
interrupt-parent = <&gpio1>;
|
interrupt-parent = <&gpio1>;
|
||||||
interrupts = <27 0>; /* gpio_27 */
|
interrupts = <27 0>; /* gpio_27 */
|
||||||
pendown-gpio = <&gpio1 27 GPIO_ACTIVE_HIGH>;
|
pendown-gpio = <&gpio1 27 GPIO_ACTIVE_LOW>;
|
||||||
|
|
||||||
ti,x-min = /bits/ 16 <0x0>;
|
ti,x-min = /bits/ 16 <0x0>;
|
||||||
ti,x-max = /bits/ 16 <0x0fff>;
|
ti,x-max = /bits/ 16 <0x0fff>;
|
||||||
|
@ -5,9 +5,11 @@
|
|||||||
|
|
||||||
#include "omap3-gta04a5.dts"
|
#include "omap3-gta04a5.dts"
|
||||||
|
|
||||||
&omap3_pmx_core {
|
/ {
|
||||||
model = "Goldelico GTA04A5/Letux 2804 with OneNAND";
|
model = "Goldelico GTA04A5/Letux 2804 with OneNAND";
|
||||||
|
};
|
||||||
|
|
||||||
|
&omap3_pmx_core {
|
||||||
gpmc_pins: pinmux_gpmc_pins {
|
gpmc_pins: pinmux_gpmc_pins {
|
||||||
pinctrl-single,pins = <
|
pinctrl-single,pins = <
|
||||||
|
|
||||||
|
@ -311,7 +311,7 @@
|
|||||||
interrupt-parent = <&gpio1>;
|
interrupt-parent = <&gpio1>;
|
||||||
interrupts = <8 0>; /* boot6 / gpio_8 */
|
interrupts = <8 0>; /* boot6 / gpio_8 */
|
||||||
spi-max-frequency = <1000000>;
|
spi-max-frequency = <1000000>;
|
||||||
pendown-gpio = <&gpio1 8 GPIO_ACTIVE_HIGH>;
|
pendown-gpio = <&gpio1 8 GPIO_ACTIVE_LOW>;
|
||||||
vcc-supply = <®_vcc3>;
|
vcc-supply = <®_vcc3>;
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
pinctrl-0 = <&tsc2048_pins>;
|
pinctrl-0 = <&tsc2048_pins>;
|
||||||
|
@ -149,7 +149,7 @@
|
|||||||
|
|
||||||
interrupt-parent = <&gpio4>;
|
interrupt-parent = <&gpio4>;
|
||||||
interrupts = <18 0>; /* gpio_114 */
|
interrupts = <18 0>; /* gpio_114 */
|
||||||
pendown-gpio = <&gpio4 18 GPIO_ACTIVE_HIGH>;
|
pendown-gpio = <&gpio4 18 GPIO_ACTIVE_LOW>;
|
||||||
|
|
||||||
ti,x-min = /bits/ 16 <0x0>;
|
ti,x-min = /bits/ 16 <0x0>;
|
||||||
ti,x-max = /bits/ 16 <0x0fff>;
|
ti,x-max = /bits/ 16 <0x0fff>;
|
||||||
|
@ -160,7 +160,7 @@
|
|||||||
|
|
||||||
interrupt-parent = <&gpio4>;
|
interrupt-parent = <&gpio4>;
|
||||||
interrupts = <18 0>; /* gpio_114 */
|
interrupts = <18 0>; /* gpio_114 */
|
||||||
pendown-gpio = <&gpio4 18 GPIO_ACTIVE_HIGH>;
|
pendown-gpio = <&gpio4 18 GPIO_ACTIVE_LOW>;
|
||||||
|
|
||||||
ti,x-min = /bits/ 16 <0x0>;
|
ti,x-min = /bits/ 16 <0x0>;
|
||||||
ti,x-max = /bits/ 16 <0x0fff>;
|
ti,x-max = /bits/ 16 <0x0fff>;
|
||||||
|
@ -651,7 +651,7 @@
|
|||||||
pinctrl-0 = <&penirq_pins>;
|
pinctrl-0 = <&penirq_pins>;
|
||||||
interrupt-parent = <&gpio3>;
|
interrupt-parent = <&gpio3>;
|
||||||
interrupts = <30 IRQ_TYPE_NONE>; /* GPIO_94 */
|
interrupts = <30 IRQ_TYPE_NONE>; /* GPIO_94 */
|
||||||
pendown-gpio = <&gpio3 30 GPIO_ACTIVE_HIGH>;
|
pendown-gpio = <&gpio3 30 GPIO_ACTIVE_LOW>;
|
||||||
vcc-supply = <&vaux4>;
|
vcc-supply = <&vaux4>;
|
||||||
|
|
||||||
ti,x-min = /bits/ 16 <0>;
|
ti,x-min = /bits/ 16 <0>;
|
||||||
|
@ -656,12 +656,12 @@
|
|||||||
/* Configure pwm clock source for timers 8 & 9 */
|
/* Configure pwm clock source for timers 8 & 9 */
|
||||||
&timer8 {
|
&timer8 {
|
||||||
assigned-clocks = <&abe_clkctrl OMAP4_TIMER8_CLKCTRL 24>;
|
assigned-clocks = <&abe_clkctrl OMAP4_TIMER8_CLKCTRL 24>;
|
||||||
assigned-clock-parents = <&sys_clkin_ck>;
|
assigned-clock-parents = <&sys_32k_ck>;
|
||||||
};
|
};
|
||||||
|
|
||||||
&timer9 {
|
&timer9 {
|
||||||
assigned-clocks = <&l4_per_clkctrl OMAP4_TIMER9_CLKCTRL 24>;
|
assigned-clocks = <&l4_per_clkctrl OMAP4_TIMER9_CLKCTRL 24>;
|
||||||
assigned-clock-parents = <&sys_clkin_ck>;
|
assigned-clock-parents = <&sys_32k_ck>;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -678,6 +678,7 @@
|
|||||||
&uart3 {
|
&uart3 {
|
||||||
interrupts-extended = <&wakeupgen GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH
|
interrupts-extended = <&wakeupgen GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH
|
||||||
&omap4_pmx_core 0x17c>;
|
&omap4_pmx_core 0x17c>;
|
||||||
|
overrun-throttle-ms = <500>;
|
||||||
};
|
};
|
||||||
|
|
||||||
&uart4 {
|
&uart4 {
|
||||||
|
@ -354,7 +354,7 @@
|
|||||||
|
|
||||||
interrupt-parent = <&gpio1>;
|
interrupt-parent = <&gpio1>;
|
||||||
interrupts = <15 0>; /* gpio1_wk15 */
|
interrupts = <15 0>; /* gpio1_wk15 */
|
||||||
pendown-gpio = <&gpio1 15 GPIO_ACTIVE_HIGH>;
|
pendown-gpio = <&gpio1 15 GPIO_ACTIVE_LOW>;
|
||||||
|
|
||||||
|
|
||||||
ti,x-min = /bits/ 16 <0x0>;
|
ti,x-min = /bits/ 16 <0x0>;
|
||||||
|
@ -759,7 +759,7 @@
|
|||||||
|
|
||||||
xoadc: xoadc@197 {
|
xoadc: xoadc@197 {
|
||||||
compatible = "qcom,pm8921-adc";
|
compatible = "qcom,pm8921-adc";
|
||||||
reg = <197>;
|
reg = <0x197>;
|
||||||
interrupts-extended = <&pmicintc 78 IRQ_TYPE_EDGE_RISING>;
|
interrupts-extended = <&pmicintc 78 IRQ_TYPE_EDGE_RISING>;
|
||||||
#address-cells = <2>;
|
#address-cells = <2>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
|
@ -393,8 +393,8 @@
|
|||||||
#address-cells = <3>;
|
#address-cells = <3>;
|
||||||
#size-cells = <2>;
|
#size-cells = <2>;
|
||||||
|
|
||||||
ranges = <0x81000000 0 0x40200000 0x40200000 0 0x00100000>,
|
ranges = <0x81000000 0x0 0x00000000 0x40200000 0x0 0x00100000>,
|
||||||
<0x82000000 0 0x40300000 0x40300000 0 0x00d00000>;
|
<0x82000000 0x0 0x40300000 0x40300000 0x0 0x00d00000>;
|
||||||
|
|
||||||
interrupts = <GIC_SPI 141 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 141 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
interrupt-names = "msi";
|
interrupt-names = "msi";
|
||||||
|
@ -451,8 +451,8 @@
|
|||||||
#address-cells = <3>;
|
#address-cells = <3>;
|
||||||
#size-cells = <2>;
|
#size-cells = <2>;
|
||||||
|
|
||||||
ranges = <0x81000000 0 0x0fe00000 0x0fe00000 0 0x00100000 /* downstream I/O */
|
ranges = <0x81000000 0x0 0x00000000 0x0fe00000 0x0 0x00010000 /* I/O */
|
||||||
0x82000000 0 0x08000000 0x08000000 0 0x07e00000>; /* non-prefetchable memory */
|
0x82000000 0x0 0x08000000 0x08000000 0x0 0x07e00000>; /* MEM */
|
||||||
|
|
||||||
interrupts = <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
interrupt-names = "msi";
|
interrupt-names = "msi";
|
||||||
@ -502,8 +502,8 @@
|
|||||||
#address-cells = <3>;
|
#address-cells = <3>;
|
||||||
#size-cells = <2>;
|
#size-cells = <2>;
|
||||||
|
|
||||||
ranges = <0x81000000 0 0x31e00000 0x31e00000 0 0x00100000 /* downstream I/O */
|
ranges = <0x81000000 0x0 0x00000000 0x31e00000 0x0 0x00010000 /* I/O */
|
||||||
0x82000000 0 0x2e000000 0x2e000000 0 0x03e00000>; /* non-prefetchable memory */
|
0x82000000 0x0 0x2e000000 0x2e000000 0x0 0x03e00000>; /* MEM */
|
||||||
|
|
||||||
interrupts = <GIC_SPI 57 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 57 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
interrupt-names = "msi";
|
interrupt-names = "msi";
|
||||||
@ -553,8 +553,8 @@
|
|||||||
#address-cells = <3>;
|
#address-cells = <3>;
|
||||||
#size-cells = <2>;
|
#size-cells = <2>;
|
||||||
|
|
||||||
ranges = <0x81000000 0 0x35e00000 0x35e00000 0 0x00100000 /* downstream I/O */
|
ranges = <0x81000000 0x0 0x00000000 0x35e00000 0x0 0x00010000 /* I/O */
|
||||||
0x82000000 0 0x32000000 0x32000000 0 0x03e00000>; /* non-prefetchable memory */
|
0x82000000 0x0 0x32000000 0x32000000 0x0 0x03e00000>; /* MEM */
|
||||||
|
|
||||||
interrupts = <GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
interrupt-names = "msi";
|
interrupt-names = "msi";
|
||||||
|
@ -82,14 +82,12 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
regulators {
|
vsdcc_fixed: vsdcc-regulator {
|
||||||
vsdcc_fixed: vsdcc-regulator {
|
compatible = "regulator-fixed";
|
||||||
compatible = "regulator-fixed";
|
regulator-name = "SDCC Power";
|
||||||
regulator-name = "SDCC Power";
|
regulator-min-microvolt = <2700000>;
|
||||||
regulator-min-microvolt = <2700000>;
|
regulator-max-microvolt = <2700000>;
|
||||||
regulator-max-microvolt = <2700000>;
|
regulator-always-on;
|
||||||
regulator-always-on;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
soc: soc {
|
soc: soc {
|
||||||
|
@ -942,7 +942,7 @@
|
|||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
spdif: sound@ff88b0000 {
|
spdif: sound@ff8b0000 {
|
||||||
compatible = "rockchip,rk3288-spdif", "rockchip,rk3066-spdif";
|
compatible = "rockchip,rk3288-spdif", "rockchip,rk3066-spdif";
|
||||||
reg = <0x0 0xff8b0000 0x0 0x10000>;
|
reg = <0x0 0xff8b0000 0x0 0x10000>;
|
||||||
#sound-dai-cells = <0>;
|
#sound-dai-cells = <0>;
|
||||||
@ -1188,6 +1188,7 @@
|
|||||||
clock-names = "dp", "pclk";
|
clock-names = "dp", "pclk";
|
||||||
phys = <&edp_phy>;
|
phys = <&edp_phy>;
|
||||||
phy-names = "dp";
|
phy-names = "dp";
|
||||||
|
power-domains = <&power RK3288_PD_VIO>;
|
||||||
resets = <&cru SRST_EDP>;
|
resets = <&cru SRST_EDP>;
|
||||||
reset-names = "dp";
|
reset-names = "dp";
|
||||||
rockchip,grf = <&grf>;
|
rockchip,grf = <&grf>;
|
||||||
|
@ -28,29 +28,21 @@
|
|||||||
bootargs = "console=ttySAC0,115200n8 earlyprintk rootwait root=/dev/mmcblk0p1";
|
bootargs = "console=ttySAC0,115200n8 earlyprintk rootwait root=/dev/mmcblk0p1";
|
||||||
};
|
};
|
||||||
|
|
||||||
clocks {
|
fin_pll: oscillator-0 {
|
||||||
compatible = "simple-bus";
|
compatible = "fixed-clock";
|
||||||
#address-cells = <1>;
|
clock-frequency = <12000000>;
|
||||||
#size-cells = <0>;
|
clock-output-names = "fin_pll";
|
||||||
|
#clock-cells = <0>;
|
||||||
fin_pll: oscillator@0 {
|
|
||||||
compatible = "fixed-clock";
|
|
||||||
reg = <0>;
|
|
||||||
clock-frequency = <12000000>;
|
|
||||||
clock-output-names = "fin_pll";
|
|
||||||
#clock-cells = <0>;
|
|
||||||
};
|
|
||||||
|
|
||||||
xusbxti: oscillator@1 {
|
|
||||||
compatible = "fixed-clock";
|
|
||||||
reg = <1>;
|
|
||||||
clock-output-names = "xusbxti";
|
|
||||||
clock-frequency = <48000000>;
|
|
||||||
#clock-cells = <0>;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
srom-cs1@18000000 {
|
xusbxti: oscillator-1 {
|
||||||
|
compatible = "fixed-clock";
|
||||||
|
clock-output-names = "xusbxti";
|
||||||
|
clock-frequency = <48000000>;
|
||||||
|
#clock-cells = <0>;
|
||||||
|
};
|
||||||
|
|
||||||
|
srom-cs1-bus@18000000 {
|
||||||
compatible = "simple-bus";
|
compatible = "simple-bus";
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
@ -59,7 +51,7 @@
|
|||||||
|
|
||||||
ethernet@18000000 {
|
ethernet@18000000 {
|
||||||
compatible = "davicom,dm9000";
|
compatible = "davicom,dm9000";
|
||||||
reg = <0x18000000 0x2 0x18000004 0x2>;
|
reg = <0x18000000 0x2>, <0x18000004 0x2>;
|
||||||
interrupt-parent = <&gpn>;
|
interrupt-parent = <&gpn>;
|
||||||
interrupts = <7 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <7 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
davicom,no-eeprom;
|
davicom,no-eeprom;
|
||||||
@ -201,12 +193,12 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
&pinctrl0 {
|
&pinctrl0 {
|
||||||
gpio_leds: gpio-leds {
|
gpio_leds: gpio-leds-pins {
|
||||||
samsung,pins = "gpk-4", "gpk-5", "gpk-6", "gpk-7";
|
samsung,pins = "gpk-4", "gpk-5", "gpk-6", "gpk-7";
|
||||||
samsung,pin-pud = <S3C64XX_PIN_PULL_NONE>;
|
samsung,pin-pud = <S3C64XX_PIN_PULL_NONE>;
|
||||||
};
|
};
|
||||||
|
|
||||||
gpio_keys: gpio-keys {
|
gpio_keys: gpio-keys-pins {
|
||||||
samsung,pins = "gpn-0", "gpn-1", "gpn-2", "gpn-3",
|
samsung,pins = "gpn-0", "gpn-1", "gpn-2", "gpn-3",
|
||||||
"gpn-4", "gpn-5", "gpl-11", "gpl-12";
|
"gpn-4", "gpn-5", "gpl-11", "gpl-12";
|
||||||
samsung,pin-pud = <S3C64XX_PIN_PULL_NONE>;
|
samsung,pin-pud = <S3C64XX_PIN_PULL_NONE>;
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user