Merge drm/drm-next into drm-intel-next-queued
Catch-up with 5.2. Specially to remove a drm-tip merge fixup around intel_workarounds. Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
This commit is contained in:
@@ -3364,6 +3364,14 @@ S: Braunschweiger Strasse 79
|
|||||||
S: 31134 Hildesheim
|
S: 31134 Hildesheim
|
||||||
S: Germany
|
S: Germany
|
||||||
|
|
||||||
|
N: Martin Schwidefsky
|
||||||
|
D: Martin was the most significant contributor to the initial s390
|
||||||
|
D: port of the Linux Kernel and later the maintainer of the s390
|
||||||
|
D: architecture backend for almost two decades.
|
||||||
|
D: He passed away in 2019, and will be greatly missed.
|
||||||
|
S: Germany
|
||||||
|
W: https://lwn.net/Articles/789028/
|
||||||
|
|
||||||
N: Marcel Selhorst
|
N: Marcel Selhorst
|
||||||
E: tpmdd@selhorst.net
|
E: tpmdd@selhorst.net
|
||||||
D: TPM driver
|
D: TPM driver
|
||||||
|
|||||||
@@ -1,29 +0,0 @@
|
|||||||
What: /sys/bus/mdio_bus/devices/.../phy_id
|
|
||||||
Date: November 2012
|
|
||||||
KernelVersion: 3.8
|
|
||||||
Contact: netdev@vger.kernel.org
|
|
||||||
Description:
|
|
||||||
This attribute contains the 32-bit PHY Identifier as reported
|
|
||||||
by the device during bus enumeration, encoded in hexadecimal.
|
|
||||||
This ID is used to match the device with the appropriate
|
|
||||||
driver.
|
|
||||||
|
|
||||||
What: /sys/bus/mdio_bus/devices/.../phy_interface
|
|
||||||
Date: February 2014
|
|
||||||
KernelVersion: 3.15
|
|
||||||
Contact: netdev@vger.kernel.org
|
|
||||||
Description:
|
|
||||||
This attribute contains the PHY interface as configured by the
|
|
||||||
Ethernet driver during bus enumeration, encoded in string.
|
|
||||||
This interface mode is used to configure the Ethernet MAC with the
|
|
||||||
appropriate mode for its data lines to the PHY hardware.
|
|
||||||
|
|
||||||
What: /sys/bus/mdio_bus/devices/.../phy_has_fixups
|
|
||||||
Date: February 2014
|
|
||||||
KernelVersion: 3.15
|
|
||||||
Contact: netdev@vger.kernel.org
|
|
||||||
Description:
|
|
||||||
This attribute contains the boolean value whether a given PHY
|
|
||||||
device has had any "fixup" workaround running on it, encoded as
|
|
||||||
a boolean. This information is provided to help troubleshooting
|
|
||||||
PHY configurations.
|
|
||||||
@@ -11,24 +11,31 @@ Date: February 2014
|
|||||||
KernelVersion: 3.15
|
KernelVersion: 3.15
|
||||||
Contact: netdev@vger.kernel.org
|
Contact: netdev@vger.kernel.org
|
||||||
Description:
|
Description:
|
||||||
Boolean value indicating whether the PHY device has
|
This attribute contains the boolean value whether a given PHY
|
||||||
any fixups registered against it (phy_register_fixup)
|
device has had any "fixup" workaround running on it, encoded as
|
||||||
|
a boolean. This information is provided to help troubleshooting
|
||||||
|
PHY configurations.
|
||||||
|
|
||||||
What: /sys/class/mdio_bus/<bus>/<device>/phy_id
|
What: /sys/class/mdio_bus/<bus>/<device>/phy_id
|
||||||
Date: November 2012
|
Date: November 2012
|
||||||
KernelVersion: 3.8
|
KernelVersion: 3.8
|
||||||
Contact: netdev@vger.kernel.org
|
Contact: netdev@vger.kernel.org
|
||||||
Description:
|
Description:
|
||||||
32-bit hexadecimal value corresponding to the PHY device's OUI,
|
This attribute contains the 32-bit PHY Identifier as reported
|
||||||
model and revision number.
|
by the device during bus enumeration, encoded in hexadecimal.
|
||||||
|
This ID is used to match the device with the appropriate
|
||||||
|
driver.
|
||||||
|
|
||||||
What: /sys/class/mdio_bus/<bus>/<device>/phy_interface
|
What: /sys/class/mdio_bus/<bus>/<device>/phy_interface
|
||||||
Date: February 2014
|
Date: February 2014
|
||||||
KernelVersion: 3.15
|
KernelVersion: 3.15
|
||||||
Contact: netdev@vger.kernel.org
|
Contact: netdev@vger.kernel.org
|
||||||
Description:
|
Description:
|
||||||
String value indicating the PHY interface, possible
|
This attribute contains the PHY interface as configured by the
|
||||||
values are:.
|
Ethernet driver during bus enumeration, encoded in string.
|
||||||
|
This interface mode is used to configure the Ethernet MAC with the
|
||||||
|
appropriate mode for its data lines to the PHY hardware.
|
||||||
|
Possible values are:
|
||||||
<empty> (not available), mii, gmii, sgmii, tbi, rev-mii,
|
<empty> (not available), mii, gmii, sgmii, tbi, rev-mii,
|
||||||
rmii, rgmii, rgmii-id, rgmii-rxid, rgmii-txid, rtbi, smii
|
rmii, rgmii, rgmii-id, rgmii-rxid, rgmii-txid, rtbi, smii
|
||||||
xgmii, moca, qsgmii, trgmii, 1000base-x, 2500base-x, rxaui,
|
xgmii, moca, qsgmii, trgmii, 1000base-x, 2500base-x, rxaui,
|
||||||
|
|||||||
@@ -177,6 +177,15 @@ cgroup v2 currently supports the following mount options.
|
|||||||
ignored on non-init namespace mounts. Please refer to the
|
ignored on non-init namespace mounts. Please refer to the
|
||||||
Delegation section for details.
|
Delegation section for details.
|
||||||
|
|
||||||
|
memory_localevents
|
||||||
|
|
||||||
|
Only populate memory.events with data for the current cgroup,
|
||||||
|
and not any subtrees. This is legacy behaviour, the default
|
||||||
|
behaviour without this option is to include subtree counts.
|
||||||
|
This option is system wide and can only be set on mount or
|
||||||
|
modified through remount from the init namespace. The mount
|
||||||
|
option is ignored on non-init namespace mounts.
|
||||||
|
|
||||||
|
|
||||||
Organizing Processes and Threads
|
Organizing Processes and Threads
|
||||||
--------------------------------
|
--------------------------------
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ the Linux memory management.
|
|||||||
ksm
|
ksm
|
||||||
memory-hotplug
|
memory-hotplug
|
||||||
numa_memory_policy
|
numa_memory_policy
|
||||||
|
numaperf
|
||||||
pagemap
|
pagemap
|
||||||
soft-dirty
|
soft-dirty
|
||||||
transhuge
|
transhuge
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ characteristics. Some memory may share the same node as a CPU, and others
|
|||||||
are provided as memory only nodes. While memory only nodes do not provide
|
are provided as memory only nodes. While memory only nodes do not provide
|
||||||
CPUs, they may still be local to one or more compute nodes relative to
|
CPUs, they may still be local to one or more compute nodes relative to
|
||||||
other nodes. The following diagram shows one such example of two compute
|
other nodes. The following diagram shows one such example of two compute
|
||||||
nodes with local memory and a memory only node for each of compute node:
|
nodes with local memory and a memory only node for each of compute node::
|
||||||
|
|
||||||
+------------------+ +------------------+
|
+------------------+ +------------------+
|
||||||
| Compute Node 0 +-----+ Compute Node 1 |
|
| Compute Node 0 +-----+ Compute Node 1 |
|
||||||
|
|||||||
@@ -56,6 +56,18 @@ model features for SVE is included in Appendix A.
|
|||||||
is to connect to a target process first and then attempt a
|
is to connect to a target process first and then attempt a
|
||||||
ptrace(PTRACE_GETREGSET, pid, NT_ARM_SVE, &iov).
|
ptrace(PTRACE_GETREGSET, pid, NT_ARM_SVE, &iov).
|
||||||
|
|
||||||
|
* Whenever SVE scalable register values (Zn, Pn, FFR) are exchanged in memory
|
||||||
|
between userspace and the kernel, the register value is encoded in memory in
|
||||||
|
an endianness-invariant layout, with bits [(8 * i + 7) : (8 * i)] encoded at
|
||||||
|
byte offset i from the start of the memory representation. This affects for
|
||||||
|
example the signal frame (struct sve_context) and ptrace interface
|
||||||
|
(struct user_sve_header) and associated data.
|
||||||
|
|
||||||
|
Beware that on big-endian systems this results in a different byte order than
|
||||||
|
for the FPSIMD V-registers, which are stored as single host-endian 128-bit
|
||||||
|
values, with bits [(127 - 8 * i) : (120 - 8 * i)] of the register encoded at
|
||||||
|
byte offset i. (struct fpsimd_context, struct user_fpsimd_state).
|
||||||
|
|
||||||
|
|
||||||
2. Vector length terminology
|
2. Vector length terminology
|
||||||
-----------------------------
|
-----------------------------
|
||||||
@@ -124,6 +136,10 @@ the SVE instruction set architecture.
|
|||||||
size and layout. Macros SVE_SIG_* are defined [1] to facilitate access to
|
size and layout. Macros SVE_SIG_* are defined [1] to facilitate access to
|
||||||
the members.
|
the members.
|
||||||
|
|
||||||
|
* Each scalable register (Zn, Pn, FFR) is stored in an endianness-invariant
|
||||||
|
layout, with bits [(8 * i + 7) : (8 * i)] stored at byte offset i from the
|
||||||
|
start of the register's representation in memory.
|
||||||
|
|
||||||
* If the SVE context is too big to fit in sigcontext.__reserved[], then extra
|
* If the SVE context is too big to fit in sigcontext.__reserved[], then extra
|
||||||
space is allocated on the stack, an extra_context record is written in
|
space is allocated on the stack, an extra_context record is written in
|
||||||
__reserved[] referencing this space. sve_context is then written in the
|
__reserved[] referencing this space. sve_context is then written in the
|
||||||
|
|||||||
@@ -13,11 +13,9 @@ you can do so by typing:
|
|||||||
|
|
||||||
# mount none /sys -t sysfs
|
# mount none /sys -t sysfs
|
||||||
|
|
||||||
As of the Linux 2.6.10 kernel, it is now possible to change the
|
It is possible to change the IO scheduler for a given block device on
|
||||||
IO scheduler for a given block device on the fly (thus making it possible,
|
the fly to select one of mq-deadline, none, bfq, or kyber schedulers -
|
||||||
for instance, to set the CFQ scheduler for the system default, but
|
which can improve that device's throughput.
|
||||||
set a specific device to use the deadline or noop schedulers - which
|
|
||||||
can improve that device's throughput).
|
|
||||||
|
|
||||||
To set a specific scheduler, simply do this:
|
To set a specific scheduler, simply do this:
|
||||||
|
|
||||||
@@ -30,8 +28,8 @@ The list of defined schedulers can be found by simply doing
|
|||||||
a "cat /sys/block/DEV/queue/scheduler" - the list of valid names
|
a "cat /sys/block/DEV/queue/scheduler" - the list of valid names
|
||||||
will be displayed, with the currently selected scheduler in brackets:
|
will be displayed, with the currently selected scheduler in brackets:
|
||||||
|
|
||||||
# cat /sys/block/hda/queue/scheduler
|
# cat /sys/block/sda/queue/scheduler
|
||||||
noop deadline [cfq]
|
[mq-deadline] kyber bfq none
|
||||||
# echo deadline > /sys/block/hda/queue/scheduler
|
# echo none >/sys/block/sda/queue/scheduler
|
||||||
# cat /sys/block/hda/queue/scheduler
|
# cat /sys/block/sda/queue/scheduler
|
||||||
noop [deadline] cfq
|
[none] mq-deadline kyber bfq
|
||||||
|
|||||||
@@ -8,61 +8,13 @@ both at leaf nodes as well as at intermediate nodes in a storage hierarchy.
|
|||||||
Plan is to use the same cgroup based management interface for blkio controller
|
Plan is to use the same cgroup based management interface for blkio controller
|
||||||
and based on user options switch IO policies in the background.
|
and based on user options switch IO policies in the background.
|
||||||
|
|
||||||
Currently two IO control policies are implemented. First one is proportional
|
One IO control policy is throttling policy which can be used to
|
||||||
weight time based division of disk policy. It is implemented in CFQ. Hence
|
specify upper IO rate limits on devices. This policy is implemented in
|
||||||
this policy takes effect only on leaf nodes when CFQ is being used. The second
|
generic block layer and can be used on leaf nodes as well as higher
|
||||||
one is throttling policy which can be used to specify upper IO rate limits
|
level logical devices like device mapper.
|
||||||
on devices. This policy is implemented in generic block layer and can be
|
|
||||||
used on leaf nodes as well as higher level logical devices like device mapper.
|
|
||||||
|
|
||||||
HOWTO
|
HOWTO
|
||||||
=====
|
=====
|
||||||
Proportional Weight division of bandwidth
|
|
||||||
-----------------------------------------
|
|
||||||
You can do a very simple testing of running two dd threads in two different
|
|
||||||
cgroups. Here is what you can do.
|
|
||||||
|
|
||||||
- Enable Block IO controller
|
|
||||||
CONFIG_BLK_CGROUP=y
|
|
||||||
|
|
||||||
- Enable group scheduling in CFQ
|
|
||||||
CONFIG_CFQ_GROUP_IOSCHED=y
|
|
||||||
|
|
||||||
- Compile and boot into kernel and mount IO controller (blkio); see
|
|
||||||
cgroups.txt, Why are cgroups needed?.
|
|
||||||
|
|
||||||
mount -t tmpfs cgroup_root /sys/fs/cgroup
|
|
||||||
mkdir /sys/fs/cgroup/blkio
|
|
||||||
mount -t cgroup -o blkio none /sys/fs/cgroup/blkio
|
|
||||||
|
|
||||||
- Create two cgroups
|
|
||||||
mkdir -p /sys/fs/cgroup/blkio/test1/ /sys/fs/cgroup/blkio/test2
|
|
||||||
|
|
||||||
- Set weights of group test1 and test2
|
|
||||||
echo 1000 > /sys/fs/cgroup/blkio/test1/blkio.weight
|
|
||||||
echo 500 > /sys/fs/cgroup/blkio/test2/blkio.weight
|
|
||||||
|
|
||||||
- Create two same size files (say 512MB each) on same disk (file1, file2) and
|
|
||||||
launch two dd threads in different cgroup to read those files.
|
|
||||||
|
|
||||||
sync
|
|
||||||
echo 3 > /proc/sys/vm/drop_caches
|
|
||||||
|
|
||||||
dd if=/mnt/sdb/zerofile1 of=/dev/null &
|
|
||||||
echo $! > /sys/fs/cgroup/blkio/test1/tasks
|
|
||||||
cat /sys/fs/cgroup/blkio/test1/tasks
|
|
||||||
|
|
||||||
dd if=/mnt/sdb/zerofile2 of=/dev/null &
|
|
||||||
echo $! > /sys/fs/cgroup/blkio/test2/tasks
|
|
||||||
cat /sys/fs/cgroup/blkio/test2/tasks
|
|
||||||
|
|
||||||
- At macro level, first dd should finish first. To get more precise data, keep
|
|
||||||
on looking at (with the help of script), at blkio.disk_time and
|
|
||||||
blkio.disk_sectors files of both test1 and test2 groups. This will tell how
|
|
||||||
much disk time (in milliseconds), each group got and how many sectors each
|
|
||||||
group dispatched to the disk. We provide fairness in terms of disk time, so
|
|
||||||
ideally io.disk_time of cgroups should be in proportion to the weight.
|
|
||||||
|
|
||||||
Throttling/Upper Limit policy
|
Throttling/Upper Limit policy
|
||||||
-----------------------------
|
-----------------------------
|
||||||
- Enable Block IO controller
|
- Enable Block IO controller
|
||||||
@@ -94,7 +46,7 @@ Throttling/Upper Limit policy
|
|||||||
Hierarchical Cgroups
|
Hierarchical Cgroups
|
||||||
====================
|
====================
|
||||||
|
|
||||||
Both CFQ and throttling implement hierarchy support; however,
|
Throttling implements hierarchy support; however,
|
||||||
throttling's hierarchy support is enabled iff "sane_behavior" is
|
throttling's hierarchy support is enabled iff "sane_behavior" is
|
||||||
enabled from cgroup side, which currently is a development option and
|
enabled from cgroup side, which currently is a development option and
|
||||||
not publicly available.
|
not publicly available.
|
||||||
@@ -107,9 +59,8 @@ If somebody created a hierarchy like as follows.
|
|||||||
|
|
|
|
||||||
test3
|
test3
|
||||||
|
|
||||||
CFQ by default and throttling with "sane_behavior" will handle the
|
Throttling with "sane_behavior" will handle the
|
||||||
hierarchy correctly. For details on CFQ hierarchy support, refer to
|
hierarchy correctly. For throttling, all limits apply
|
||||||
Documentation/block/cfq-iosched.txt. For throttling, all limits apply
|
|
||||||
to the whole subtree while all statistics are local to the IOs
|
to the whole subtree while all statistics are local to the IOs
|
||||||
directly generated by tasks in that cgroup.
|
directly generated by tasks in that cgroup.
|
||||||
|
|
||||||
@@ -130,10 +81,6 @@ CONFIG_DEBUG_BLK_CGROUP
|
|||||||
- Debug help. Right now some additional stats file show up in cgroup
|
- Debug help. Right now some additional stats file show up in cgroup
|
||||||
if this option is enabled.
|
if this option is enabled.
|
||||||
|
|
||||||
CONFIG_CFQ_GROUP_IOSCHED
|
|
||||||
- Enables group scheduling in CFQ. Currently only 1 level of group
|
|
||||||
creation is allowed.
|
|
||||||
|
|
||||||
CONFIG_BLK_DEV_THROTTLING
|
CONFIG_BLK_DEV_THROTTLING
|
||||||
- Enable block device throttling support in block layer.
|
- Enable block device throttling support in block layer.
|
||||||
|
|
||||||
@@ -344,32 +291,3 @@ Common files among various policies
|
|||||||
- blkio.reset_stats
|
- blkio.reset_stats
|
||||||
- Writing an int to this file will result in resetting all the stats
|
- Writing an int to this file will result in resetting all the stats
|
||||||
for that cgroup.
|
for that cgroup.
|
||||||
|
|
||||||
CFQ sysfs tunable
|
|
||||||
=================
|
|
||||||
/sys/block/<disk>/queue/iosched/slice_idle
|
|
||||||
------------------------------------------
|
|
||||||
On a faster hardware CFQ can be slow, especially with sequential workload.
|
|
||||||
This happens because CFQ idles on a single queue and single queue might not
|
|
||||||
drive deeper request queue depths to keep the storage busy. In such scenarios
|
|
||||||
one can try setting slice_idle=0 and that would switch CFQ to IOPS
|
|
||||||
(IO operations per second) mode on NCQ supporting hardware.
|
|
||||||
|
|
||||||
That means CFQ will not idle between cfq queues of a cfq group and hence be
|
|
||||||
able to driver higher queue depth and achieve better throughput. That also
|
|
||||||
means that cfq provides fairness among groups in terms of IOPS and not in
|
|
||||||
terms of disk time.
|
|
||||||
|
|
||||||
/sys/block/<disk>/queue/iosched/group_idle
|
|
||||||
------------------------------------------
|
|
||||||
If one disables idling on individual cfq queues and cfq service trees by
|
|
||||||
setting slice_idle=0, group_idle kicks in. That means CFQ will still idle
|
|
||||||
on the group in an attempt to provide fairness among groups.
|
|
||||||
|
|
||||||
By default group_idle is same as slice_idle and does not do anything if
|
|
||||||
slice_idle is enabled.
|
|
||||||
|
|
||||||
One can experience an overall throughput drop if you have created multiple
|
|
||||||
groups and put applications in that group which are not driving enough
|
|
||||||
IO to keep disk busy. In that case set group_idle=0, and CFQ will not idle
|
|
||||||
on individual groups and throughput should improve.
|
|
||||||
|
|||||||
@@ -32,14 +32,18 @@ Brief summary of control files
|
|||||||
hugetlb.<hugepagesize>.usage_in_bytes # show current usage for "hugepagesize" hugetlb
|
hugetlb.<hugepagesize>.usage_in_bytes # show current usage for "hugepagesize" hugetlb
|
||||||
hugetlb.<hugepagesize>.failcnt # show the number of allocation failure due to HugeTLB limit
|
hugetlb.<hugepagesize>.failcnt # show the number of allocation failure due to HugeTLB limit
|
||||||
|
|
||||||
For a system supporting two hugepage size (16M and 16G) the control
|
For a system supporting three hugepage sizes (64k, 32M and 1G), the control
|
||||||
files include:
|
files include:
|
||||||
|
|
||||||
hugetlb.16GB.limit_in_bytes
|
hugetlb.1GB.limit_in_bytes
|
||||||
hugetlb.16GB.max_usage_in_bytes
|
hugetlb.1GB.max_usage_in_bytes
|
||||||
hugetlb.16GB.usage_in_bytes
|
hugetlb.1GB.usage_in_bytes
|
||||||
hugetlb.16GB.failcnt
|
hugetlb.1GB.failcnt
|
||||||
hugetlb.16MB.limit_in_bytes
|
hugetlb.64KB.limit_in_bytes
|
||||||
hugetlb.16MB.max_usage_in_bytes
|
hugetlb.64KB.max_usage_in_bytes
|
||||||
hugetlb.16MB.usage_in_bytes
|
hugetlb.64KB.usage_in_bytes
|
||||||
hugetlb.16MB.failcnt
|
hugetlb.64KB.failcnt
|
||||||
|
hugetlb.32MB.limit_in_bytes
|
||||||
|
hugetlb.32MB.max_usage_in_bytes
|
||||||
|
hugetlb.32MB.usage_in_bytes
|
||||||
|
hugetlb.32MB.failcnt
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ needs_sphinx = '1.3'
|
|||||||
extensions = ['kerneldoc', 'rstFlatTable', 'kernel_include', 'cdomain', 'kfigure', 'sphinx.ext.ifconfig']
|
extensions = ['kerneldoc', 'rstFlatTable', 'kernel_include', 'cdomain', 'kfigure', 'sphinx.ext.ifconfig']
|
||||||
|
|
||||||
# The name of the math extension changed on Sphinx 1.4
|
# The name of the math extension changed on Sphinx 1.4
|
||||||
if major == 1 and minor > 3:
|
if (major == 1 and minor > 3) or (major > 1):
|
||||||
extensions.append("sphinx.ext.imgmath")
|
extensions.append("sphinx.ext.imgmath")
|
||||||
else:
|
else:
|
||||||
extensions.append("sphinx.ext.pngmath")
|
extensions.append("sphinx.ext.pngmath")
|
||||||
|
|||||||
@@ -0,0 +1,100 @@
|
|||||||
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
|
%YAML 1.2
|
||||||
|
---
|
||||||
|
$id: http://devicetree.org/schemas/display/allwinner,sun6i-a31-mipi-dsi.yaml#
|
||||||
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||||
|
|
||||||
|
title: Allwinner A31 MIPI-DSI Controller Device Tree Bindings
|
||||||
|
|
||||||
|
maintainers:
|
||||||
|
- Chen-Yu Tsai <wens@csie.org>
|
||||||
|
- Maxime Ripard <maxime.ripard@bootlin.com>
|
||||||
|
|
||||||
|
properties:
|
||||||
|
"#address-cells": true
|
||||||
|
"#size-cells": true
|
||||||
|
|
||||||
|
compatible:
|
||||||
|
const: allwinner,sun6i-a31-mipi-dsi
|
||||||
|
|
||||||
|
reg:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
interrupts:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
clocks:
|
||||||
|
items:
|
||||||
|
- description: Bus Clock
|
||||||
|
- description: Module Clock
|
||||||
|
|
||||||
|
clock-names:
|
||||||
|
items:
|
||||||
|
- const: bus
|
||||||
|
- const: mod
|
||||||
|
|
||||||
|
resets:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
phys:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
phy-names:
|
||||||
|
const: dphy
|
||||||
|
|
||||||
|
port:
|
||||||
|
type: object
|
||||||
|
description:
|
||||||
|
A port node with endpoint definitions as defined in
|
||||||
|
Documentation/devicetree/bindings/media/video-interfaces.txt. That
|
||||||
|
port should be the input endpoint, usually coming from the
|
||||||
|
associated TCON.
|
||||||
|
|
||||||
|
patternProperties:
|
||||||
|
"^panel@[0-9]+$": true
|
||||||
|
|
||||||
|
required:
|
||||||
|
- "#address-cells"
|
||||||
|
- "#size-cells"
|
||||||
|
- compatible
|
||||||
|
- reg
|
||||||
|
- interrupts
|
||||||
|
- clocks
|
||||||
|
- clock-names
|
||||||
|
- phys
|
||||||
|
- phy-names
|
||||||
|
- resets
|
||||||
|
- port
|
||||||
|
|
||||||
|
additionalProperties: false
|
||||||
|
|
||||||
|
examples:
|
||||||
|
- |
|
||||||
|
dsi0: dsi@1ca0000 {
|
||||||
|
compatible = "allwinner,sun6i-a31-mipi-dsi";
|
||||||
|
reg = <0x01ca0000 0x1000>;
|
||||||
|
interrupts = <0 89 4>;
|
||||||
|
clocks = <&ccu 23>, <&ccu 96>;
|
||||||
|
clock-names = "bus", "mod";
|
||||||
|
resets = <&ccu 4>;
|
||||||
|
phys = <&dphy0>;
|
||||||
|
phy-names = "dphy";
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
panel@0 {
|
||||||
|
compatible = "bananapi,lhr050h41", "ilitek,ili9881c";
|
||||||
|
reg = <0>;
|
||||||
|
power-gpios = <&pio 1 7 0>; /* PB07 */
|
||||||
|
reset-gpios = <&r_pio 0 5 1>; /* PL05 */
|
||||||
|
backlight = <&pwm_bl>;
|
||||||
|
};
|
||||||
|
|
||||||
|
port {
|
||||||
|
dsi0_in_tcon0: endpoint {
|
||||||
|
remote-endpoint = <&tcon0_out_dsi0>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
...
|
||||||
@@ -7,10 +7,13 @@ Required properties:
|
|||||||
- clocks: A list of phandle + clock-specifier pairs, one for each entry
|
- clocks: A list of phandle + clock-specifier pairs, one for each entry
|
||||||
in 'clock-names'
|
in 'clock-names'
|
||||||
- clock-names: A list of clock names. It should contain:
|
- clock-names: A list of clock names. It should contain:
|
||||||
- "mclk": for the main processor clock
|
- "aclk": for the main processor clock
|
||||||
- "pclk": for the APB interface clock
|
|
||||||
- #address-cells: Must be 1
|
- #address-cells: Must be 1
|
||||||
- #size-cells: Must be 0
|
- #size-cells: Must be 0
|
||||||
|
- iommus: configure the stream id to IOMMU, Must be configured if want to
|
||||||
|
enable iommu in display. for how to configure this node please reference
|
||||||
|
devicetree/bindings/iommu/arm,smmu-v3.txt,
|
||||||
|
devicetree/bindings/iommu/iommu.txt
|
||||||
|
|
||||||
Required properties for sub-node: pipeline@nq
|
Required properties for sub-node: pipeline@nq
|
||||||
Each device contains one or two pipeline sub-nodes (at least one), each
|
Each device contains one or two pipeline sub-nodes (at least one), each
|
||||||
@@ -20,7 +23,6 @@ pipeline node should provide properties:
|
|||||||
in 'clock-names'
|
in 'clock-names'
|
||||||
- clock-names: should contain:
|
- clock-names: should contain:
|
||||||
- "pxclk": pixel clock
|
- "pxclk": pixel clock
|
||||||
- "aclk": AXI interface clock
|
|
||||||
|
|
||||||
- port: each pipeline connect to an encoder input port. The connection is
|
- port: each pipeline connect to an encoder input port. The connection is
|
||||||
modeled using the OF graph bindings specified in
|
modeled using the OF graph bindings specified in
|
||||||
@@ -42,12 +44,15 @@ Example:
|
|||||||
compatible = "arm,mali-d71";
|
compatible = "arm,mali-d71";
|
||||||
reg = <0xc00000 0x20000>;
|
reg = <0xc00000 0x20000>;
|
||||||
interrupts = <0 168 4>;
|
interrupts = <0 168 4>;
|
||||||
clocks = <&dpu_mclk>, <&dpu_aclk>;
|
clocks = <&dpu_aclk>;
|
||||||
clock-names = "mclk", "pclk";
|
clock-names = "aclk";
|
||||||
|
iommus = <&smmu 0>, <&smmu 1>, <&smmu 2>, <&smmu 3>,
|
||||||
|
<&smmu 4>, <&smmu 5>, <&smmu 6>, <&smmu 7>,
|
||||||
|
<&smmu 8>, <&smmu 9>;
|
||||||
|
|
||||||
dp0_pipe0: pipeline@0 {
|
dp0_pipe0: pipeline@0 {
|
||||||
clocks = <&fpgaosc2>, <&dpu_aclk>;
|
clocks = <&fpgaosc2>;
|
||||||
clock-names = "pxclk", "aclk";
|
clock-names = "pxclk";
|
||||||
reg = <0>;
|
reg = <0>;
|
||||||
|
|
||||||
port {
|
port {
|
||||||
@@ -58,8 +63,8 @@ Example:
|
|||||||
};
|
};
|
||||||
|
|
||||||
dp0_pipe1: pipeline@1 {
|
dp0_pipe1: pipeline@1 {
|
||||||
clocks = <&fpgaosc2>, <&dpu_aclk>;
|
clocks = <&fpgaosc2>;
|
||||||
clock-names = "pxclk", "aclk";
|
clock-names = "pxclk";
|
||||||
reg = <1>;
|
reg = <1>;
|
||||||
|
|
||||||
port {
|
port {
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ Required properties:
|
|||||||
- compatible : Shall contain one of
|
- compatible : Shall contain one of
|
||||||
- "renesas,r8a7743-lvds" for R8A7743 (RZ/G1M) compatible LVDS encoders
|
- "renesas,r8a7743-lvds" for R8A7743 (RZ/G1M) compatible LVDS encoders
|
||||||
- "renesas,r8a7744-lvds" for R8A7744 (RZ/G1N) compatible LVDS encoders
|
- "renesas,r8a7744-lvds" for R8A7744 (RZ/G1N) compatible LVDS encoders
|
||||||
|
- "renesas,r8a774a1-lvds" for R8A774A1 (RZ/G2M) compatible LVDS encoders
|
||||||
- "renesas,r8a774c0-lvds" for R8A774C0 (RZ/G2E) compatible LVDS encoders
|
- "renesas,r8a774c0-lvds" for R8A774C0 (RZ/G2E) compatible LVDS encoders
|
||||||
- "renesas,r8a7790-lvds" for R8A7790 (R-Car H2) compatible LVDS encoders
|
- "renesas,r8a7790-lvds" for R8A7790 (R-Car H2) compatible LVDS encoders
|
||||||
- "renesas,r8a7791-lvds" for R8A7791 (R-Car M2-W) compatible LVDS encoders
|
- "renesas,r8a7791-lvds" for R8A7791 (R-Car M2-W) compatible LVDS encoders
|
||||||
@@ -45,14 +46,24 @@ OF graph bindings specified in Documentation/devicetree/bindings/graph.txt.
|
|||||||
|
|
||||||
Each port shall have a single endpoint.
|
Each port shall have a single endpoint.
|
||||||
|
|
||||||
|
Optional properties:
|
||||||
|
|
||||||
|
- renesas,companion : phandle to the companion LVDS encoder. This property is
|
||||||
|
mandatory for the first LVDS encoder on D3 and E3 SoCs, and shall point to
|
||||||
|
the second encoder to be used as a companion in dual-link mode. It shall not
|
||||||
|
be set for any other LVDS encoder.
|
||||||
|
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
lvds0: lvds@feb90000 {
|
lvds0: lvds@feb90000 {
|
||||||
compatible = "renesas,r8a7790-lvds";
|
compatible = "renesas,r8a77990-lvds";
|
||||||
reg = <0 0xfeb90000 0 0x1c>;
|
reg = <0 0xfeb90000 0 0x20>;
|
||||||
clocks = <&cpg CPG_MOD 726>;
|
clocks = <&cpg CPG_MOD 727>;
|
||||||
resets = <&cpg 726>;
|
power-domains = <&sysc R8A77990_PD_ALWAYS_ON>;
|
||||||
|
resets = <&cpg 727>;
|
||||||
|
|
||||||
|
renesas,companion = <&lvds1>;
|
||||||
|
|
||||||
ports {
|
ports {
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
|
|||||||
@@ -5,10 +5,44 @@ Required properties:
|
|||||||
- reg: i2c address of the bridge
|
- reg: i2c address of the bridge
|
||||||
|
|
||||||
Optional properties:
|
Optional properties:
|
||||||
- interrupts: describe the interrupt line used to inform the host
|
- interrupts: describe the interrupt line used to inform the host
|
||||||
about hotplug events.
|
about hotplug events.
|
||||||
- reset-gpios: OF device-tree gpio specification for RST_N pin.
|
- reset-gpios: OF device-tree gpio specification for RST_N pin.
|
||||||
|
|
||||||
|
HDMI audio properties:
|
||||||
|
- #sound-dai-cells: <0> or <1>. <0> if only i2s or spdif pin
|
||||||
|
is wired, <1> if the both are wired. HDMI audio is
|
||||||
|
configured only if this property is found.
|
||||||
|
- sil,i2s-data-lanes: Array of up to 4 integers with values of 0-3
|
||||||
|
Each integer indicates which i2s pin is connected to which
|
||||||
|
audio fifo. The first integer selects i2s audio pin for the
|
||||||
|
first audio fifo#0 (HDMI channels 1&2), second for fifo#1
|
||||||
|
(HDMI channels 3&4), and so on. There is 4 fifos and 4 i2s
|
||||||
|
pins (SD0 - SD3). Any i2s pin can be connected to any fifo,
|
||||||
|
but there can be no gaps. E.g. an i2s pin must be mapped to
|
||||||
|
fifo#0 and fifo#1 before mapping a channel to fifo#2. Default
|
||||||
|
value is <0>, describing SD0 pin beiging routed to hdmi audio
|
||||||
|
fifo #0.
|
||||||
|
- clocks: phandle and clock specifier for each clock listed in
|
||||||
|
the clock-names property
|
||||||
|
- clock-names: "mclk"
|
||||||
|
Describes SII902x MCLK input. MCLK is used to produce
|
||||||
|
HDMI audio CTS values. This property is required if
|
||||||
|
"#sound-dai-cells"-property is present. This property follows
|
||||||
|
Documentation/devicetree/bindings/clock/clock-bindings.txt
|
||||||
|
consumer binding.
|
||||||
|
|
||||||
|
If HDMI audio is configured the sii902x device becomes an I2S
|
||||||
|
and/or spdif audio codec component (e.g a digital audio sink),
|
||||||
|
that can be used in configuring a full audio devices with
|
||||||
|
simple-card or audio-graph-card binding. See their binding
|
||||||
|
documents on how to describe the way the sii902x device is
|
||||||
|
connected to the rest of the audio system:
|
||||||
|
Documentation/devicetree/bindings/sound/simple-card.txt
|
||||||
|
Documentation/devicetree/bindings/sound/audio-graph-card.txt
|
||||||
|
Note: In case of the audio-graph-card binding the used port
|
||||||
|
index should be 3.
|
||||||
|
|
||||||
Optional subnodes:
|
Optional subnodes:
|
||||||
- video input: this subnode can contain a video input port node
|
- video input: this subnode can contain a video input port node
|
||||||
to connect the bridge to a display controller output (See this
|
to connect the bridge to a display controller output (See this
|
||||||
@@ -21,6 +55,12 @@ Example:
|
|||||||
compatible = "sil,sii9022";
|
compatible = "sil,sii9022";
|
||||||
reg = <0x39>;
|
reg = <0x39>;
|
||||||
reset-gpios = <&pioA 1 0>;
|
reset-gpios = <&pioA 1 0>;
|
||||||
|
|
||||||
|
#sound-dai-cells = <0>;
|
||||||
|
sil,i2s-data-lanes = < 0 1 2 >;
|
||||||
|
clocks = <&mclk>;
|
||||||
|
clock-names = "mclk";
|
||||||
|
|
||||||
ports {
|
ports {
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
|
|||||||
@@ -28,6 +28,12 @@ Optional video port nodes:
|
|||||||
- port@1: Second LVDS input port
|
- port@1: Second LVDS input port
|
||||||
- port@3: Second digital CMOS/TTL parallel output
|
- port@3: Second digital CMOS/TTL parallel output
|
||||||
|
|
||||||
|
The device can operate in single-link mode or dual-link mode. In single-link
|
||||||
|
mode, all pixels are received on port@0, and port@1 shall not contain any
|
||||||
|
endpoint. In dual-link mode, even-numbered pixels are received on port@0 and
|
||||||
|
odd-numbered pixels on port@1, and both port@0 and port@1 shall contain
|
||||||
|
endpoints.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
--------
|
--------
|
||||||
|
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ Optional properties:
|
|||||||
(active high shutdown input)
|
(active high shutdown input)
|
||||||
- reset-gpios: OF device-tree gpio specification for RSTX pin
|
- reset-gpios: OF device-tree gpio specification for RSTX pin
|
||||||
(active low system reset)
|
(active low system reset)
|
||||||
|
- toshiba,hpd-pin: TC358767 GPIO pin number to which HPD is connected to (0 or 1)
|
||||||
- ports: the ports node can contain video interface port nodes to connect
|
- ports: the ports node can contain video interface port nodes to connect
|
||||||
to a DPI/DSI source and to an eDP/DP sink according to [1][2]:
|
to a DPI/DSI source and to an eDP/DP sink according to [1][2]:
|
||||||
- port@0: DSI input port
|
- port@0: DSI input port
|
||||||
|
|||||||
@@ -0,0 +1,44 @@
|
|||||||
|
Ingenic JZ47xx LCD driver
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
- compatible: one of:
|
||||||
|
* ingenic,jz4740-lcd
|
||||||
|
* ingenic,jz4725b-lcd
|
||||||
|
- reg: LCD registers location and length
|
||||||
|
- clocks: LCD pixclock and device clock specifiers.
|
||||||
|
The device clock is only required on the JZ4740.
|
||||||
|
- clock-names: "lcd_pclk" and "lcd"
|
||||||
|
- interrupts: Specifies the interrupt line the LCD controller is connected to.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
panel {
|
||||||
|
compatible = "sharp,ls020b1dd01d";
|
||||||
|
|
||||||
|
backlight = <&backlight>;
|
||||||
|
power-supply = <&vcc>;
|
||||||
|
|
||||||
|
port {
|
||||||
|
panel_input: endpoint {
|
||||||
|
remote-endpoint = <&panel_output>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
lcd: lcd-controller@13050000 {
|
||||||
|
compatible = "ingenic,jz4725b-lcd";
|
||||||
|
reg = <0x13050000 0x1000>;
|
||||||
|
|
||||||
|
interrupt-parent = <&intc>;
|
||||||
|
interrupts = <31>;
|
||||||
|
|
||||||
|
clocks = <&cgu JZ4725B_CLK_LCD>;
|
||||||
|
clock-names = "lcd";
|
||||||
|
|
||||||
|
port {
|
||||||
|
panel_output: endpoint {
|
||||||
|
remote-endpoint = <&panel_input>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
@@ -28,6 +28,11 @@ Required properties:
|
|||||||
- #address-cells: number of address cells for the MDSS children. Should be 1.
|
- #address-cells: number of address cells for the MDSS children. Should be 1.
|
||||||
- #size-cells: Should be 1.
|
- #size-cells: Should be 1.
|
||||||
- ranges: parent bus address space is the same as the child bus address space.
|
- ranges: parent bus address space is the same as the child bus address space.
|
||||||
|
- interconnects : interconnect path specifier for MDSS according to
|
||||||
|
Documentation/devicetree/bindings/interconnect/interconnect.txt. Should be
|
||||||
|
2 paths corresponding to 2 AXI ports.
|
||||||
|
- interconnect-names : MDSS will have 2 port names to differentiate between the
|
||||||
|
2 interconnect paths defined with interconnect specifier.
|
||||||
|
|
||||||
Optional properties:
|
Optional properties:
|
||||||
- assigned-clocks: list of clock specifiers for clocks needing rate assignment
|
- assigned-clocks: list of clock specifiers for clocks needing rate assignment
|
||||||
@@ -86,6 +91,11 @@ Example:
|
|||||||
interrupt-controller;
|
interrupt-controller;
|
||||||
#interrupt-cells = <1>;
|
#interrupt-cells = <1>;
|
||||||
|
|
||||||
|
interconnects = <&rsc_hlos MASTER_MDP0 &rsc_hlos SLAVE_EBI1>,
|
||||||
|
<&rsc_hlos MASTER_MDP1 &rsc_hlos SLAVE_EBI1>;
|
||||||
|
|
||||||
|
interconnect-names = "mdp0-mem", "mdp1-mem";
|
||||||
|
|
||||||
iommus = <&apps_iommu 0>;
|
iommus = <&apps_iommu 0>;
|
||||||
|
|
||||||
#address-cells = <2>;
|
#address-cells = <2>;
|
||||||
|
|||||||
@@ -88,6 +88,7 @@ Required properties:
|
|||||||
* "qcom,dsi-phy-28nm-8960"
|
* "qcom,dsi-phy-28nm-8960"
|
||||||
* "qcom,dsi-phy-14nm"
|
* "qcom,dsi-phy-14nm"
|
||||||
* "qcom,dsi-phy-10nm"
|
* "qcom,dsi-phy-10nm"
|
||||||
|
* "qcom,dsi-phy-10nm-8998"
|
||||||
- reg: Physical base address and length of the registers of PLL, PHY. Some
|
- reg: Physical base address and length of the registers of PLL, PHY. Some
|
||||||
revisions require the PHY regulator base address, whereas others require the
|
revisions require the PHY regulator base address, whereas others require the
|
||||||
PHY lane base address. See below for each PHY revision.
|
PHY lane base address. See below for each PHY revision.
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
Armadeus ST0700 Adapt. A Santek ST0700I5Y-RBSLW 7.0" WVGA (800x480) TFT with
|
||||||
|
an adapter board.
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
- compatible: "armadeus,st0700-adapt"
|
||||||
|
- power-supply: see panel-common.txt
|
||||||
|
|
||||||
|
Optional properties:
|
||||||
|
- backlight: see panel-common.txt
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
Kaohsiung Opto-Electronics Inc. 5.7" QVGA (320 x 240) TFT LCD panel
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
- compatible: should be "koe,tx14d24vm1bpa"
|
||||||
|
- backlight: phandle of the backlight device attached to the panel
|
||||||
|
- power-supply: single regulator to provide the supply voltage
|
||||||
|
|
||||||
|
Required nodes:
|
||||||
|
- port: Parallel port mapping to connect this display
|
||||||
|
|
||||||
|
This panel needs single power supply voltage. Its backlight is conntrolled
|
||||||
|
via PWM signal.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
--------
|
||||||
|
|
||||||
|
Example device-tree definition when connected to iMX53 based board
|
||||||
|
|
||||||
|
lcd_panel: lcd-panel {
|
||||||
|
compatible = "koe,tx14d24vm1bpa";
|
||||||
|
backlight = <&backlight_lcd>;
|
||||||
|
power-supply = <®_3v3>;
|
||||||
|
|
||||||
|
port {
|
||||||
|
lcd_panel_in: endpoint {
|
||||||
|
remote-endpoint = <&lcd_display_out>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
Then one needs to extend the dispX node:
|
||||||
|
|
||||||
|
lcd_display: disp1 {
|
||||||
|
|
||||||
|
port@1 {
|
||||||
|
reg = <1>;
|
||||||
|
|
||||||
|
lcd_display_out: endpoint {
|
||||||
|
remote-endpoint = <&lcd_panel_in>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
@@ -7,6 +7,7 @@ Required Properties:
|
|||||||
- "renesas,du-r8a7744" for R8A7744 (RZ/G1N) compatible DU
|
- "renesas,du-r8a7744" for R8A7744 (RZ/G1N) compatible DU
|
||||||
- "renesas,du-r8a7745" for R8A7745 (RZ/G1E) compatible DU
|
- "renesas,du-r8a7745" for R8A7745 (RZ/G1E) compatible DU
|
||||||
- "renesas,du-r8a77470" for R8A77470 (RZ/G1C) compatible DU
|
- "renesas,du-r8a77470" for R8A77470 (RZ/G1C) compatible DU
|
||||||
|
- "renesas,du-r8a774a1" for R8A774A1 (RZ/G2M) compatible DU
|
||||||
- "renesas,du-r8a774c0" for R8A774C0 (RZ/G2E) compatible DU
|
- "renesas,du-r8a774c0" for R8A774C0 (RZ/G2E) compatible DU
|
||||||
- "renesas,du-r8a7779" for R8A7779 (R-Car H1) compatible DU
|
- "renesas,du-r8a7779" for R8A7779 (R-Car H1) compatible DU
|
||||||
- "renesas,du-r8a7790" for R8A7790 (R-Car H2) compatible DU
|
- "renesas,du-r8a7790" for R8A7790 (R-Car H2) compatible DU
|
||||||
@@ -58,6 +59,7 @@ corresponding to each DU output.
|
|||||||
R8A7744 (RZ/G1N) DPAD 0 LVDS 0 - -
|
R8A7744 (RZ/G1N) DPAD 0 LVDS 0 - -
|
||||||
R8A7745 (RZ/G1E) DPAD 0 DPAD 1 - -
|
R8A7745 (RZ/G1E) DPAD 0 DPAD 1 - -
|
||||||
R8A77470 (RZ/G1C) DPAD 0 DPAD 1 LVDS 0 -
|
R8A77470 (RZ/G1C) DPAD 0 DPAD 1 LVDS 0 -
|
||||||
|
R8A774A1 (RZ/G2M) DPAD 0 HDMI 0 LVDS 0 -
|
||||||
R8A774C0 (RZ/G2E) DPAD 0 LVDS 0 LVDS 1 -
|
R8A774C0 (RZ/G2E) DPAD 0 LVDS 0 LVDS 1 -
|
||||||
R8A7779 (R-Car H1) DPAD 0 DPAD 1 - -
|
R8A7779 (R-Car H1) DPAD 0 DPAD 1 - -
|
||||||
R8A7790 (R-Car H2) DPAD 0 LVDS 0 LVDS 1 -
|
R8A7790 (R-Car H2) DPAD 0 LVDS 0 LVDS 1 -
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ following device-specific properties.
|
|||||||
Required properties:
|
Required properties:
|
||||||
|
|
||||||
- compatible: should be one of the following:
|
- compatible: should be one of the following:
|
||||||
|
"rockchip,rk3228-dw-hdmi"
|
||||||
"rockchip,rk3288-dw-hdmi"
|
"rockchip,rk3288-dw-hdmi"
|
||||||
"rockchip,rk3328-dw-hdmi"
|
"rockchip,rk3328-dw-hdmi"
|
||||||
"rockchip,rk3399-dw-hdmi"
|
"rockchip,rk3399-dw-hdmi"
|
||||||
@@ -38,6 +39,13 @@ Optional properties
|
|||||||
- phys: from general PHY binding: the phandle for the PHY device.
|
- phys: from general PHY binding: the phandle for the PHY device.
|
||||||
- phy-names: Should be "hdmi" if phys references an external phy.
|
- phy-names: Should be "hdmi" if phys references an external phy.
|
||||||
|
|
||||||
|
Optional pinctrl entry:
|
||||||
|
- If you have both a "unwedge" and "default" pinctrl entry, dw_hdmi
|
||||||
|
will switch to the unwedge pinctrl state for 10ms if it ever gets an
|
||||||
|
i2c timeout. It's intended that this unwedge pinctrl entry will
|
||||||
|
cause the SDA line to be driven low to work around a hardware
|
||||||
|
errata.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
hdmi: hdmi@ff980000 {
|
hdmi: hdmi@ff980000 {
|
||||||
|
|||||||
@@ -1,93 +0,0 @@
|
|||||||
Allwinner A31 DSI Encoder
|
|
||||||
=========================
|
|
||||||
|
|
||||||
The DSI pipeline consists of two separate blocks: the DSI controller
|
|
||||||
itself, and its associated D-PHY.
|
|
||||||
|
|
||||||
DSI Encoder
|
|
||||||
-----------
|
|
||||||
|
|
||||||
The DSI Encoder generates the DSI signal from the TCON's.
|
|
||||||
|
|
||||||
Required properties:
|
|
||||||
- compatible: value must be one of:
|
|
||||||
* allwinner,sun6i-a31-mipi-dsi
|
|
||||||
- reg: base address and size of memory-mapped region
|
|
||||||
- interrupts: interrupt associated to this IP
|
|
||||||
- clocks: phandles to the clocks feeding the DSI encoder
|
|
||||||
* bus: the DSI interface clock
|
|
||||||
* mod: the DSI module clock
|
|
||||||
- clock-names: the clock names mentioned above
|
|
||||||
- phys: phandle to the D-PHY
|
|
||||||
- phy-names: must be "dphy"
|
|
||||||
- resets: phandle to the reset controller driving the encoder
|
|
||||||
|
|
||||||
- ports: A ports node with endpoint definitions as defined in
|
|
||||||
Documentation/devicetree/bindings/media/video-interfaces.txt. The
|
|
||||||
first port should be the input endpoint, usually coming from the
|
|
||||||
associated TCON.
|
|
||||||
|
|
||||||
Any MIPI-DSI device attached to this should be described according to
|
|
||||||
the bindings defined in ../mipi-dsi-bus.txt
|
|
||||||
|
|
||||||
D-PHY
|
|
||||||
-----
|
|
||||||
|
|
||||||
Required properties:
|
|
||||||
- compatible: value must be one of:
|
|
||||||
* allwinner,sun6i-a31-mipi-dphy
|
|
||||||
- reg: base address and size of memory-mapped region
|
|
||||||
- clocks: phandles to the clocks feeding the DSI encoder
|
|
||||||
* bus: the DSI interface clock
|
|
||||||
* mod: the DSI module clock
|
|
||||||
- clock-names: the clock names mentioned above
|
|
||||||
- resets: phandle to the reset controller driving the encoder
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
dsi0: dsi@1ca0000 {
|
|
||||||
compatible = "allwinner,sun6i-a31-mipi-dsi";
|
|
||||||
reg = <0x01ca0000 0x1000>;
|
|
||||||
interrupts = <GIC_SPI 89 IRQ_TYPE_LEVEL_HIGH>;
|
|
||||||
clocks = <&ccu CLK_BUS_MIPI_DSI>,
|
|
||||||
<&ccu CLK_DSI_SCLK>;
|
|
||||||
clock-names = "bus", "mod";
|
|
||||||
resets = <&ccu RST_BUS_MIPI_DSI>;
|
|
||||||
phys = <&dphy0>;
|
|
||||||
phy-names = "dphy";
|
|
||||||
#address-cells = <1>;
|
|
||||||
#size-cells = <0>;
|
|
||||||
|
|
||||||
panel@0 {
|
|
||||||
compatible = "bananapi,lhr050h41", "ilitek,ili9881c";
|
|
||||||
reg = <0>;
|
|
||||||
power-gpios = <&pio 1 7 GPIO_ACTIVE_HIGH>; /* PB07 */
|
|
||||||
reset-gpios = <&r_pio 0 5 GPIO_ACTIVE_LOW>; /* PL05 */
|
|
||||||
backlight = <&pwm_bl>;
|
|
||||||
};
|
|
||||||
|
|
||||||
ports {
|
|
||||||
#address-cells = <1>;
|
|
||||||
#size-cells = <0>;
|
|
||||||
|
|
||||||
port@0 {
|
|
||||||
#address-cells = <1>;
|
|
||||||
#size-cells = <0>;
|
|
||||||
reg = <0>;
|
|
||||||
|
|
||||||
dsi0_in_tcon0: endpoint {
|
|
||||||
remote-endpoint = <&tcon0_out_dsi0>;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
dphy0: d-phy@1ca1000 {
|
|
||||||
compatible = "allwinner,sun6i-a31-mipi-dphy";
|
|
||||||
reg = <0x01ca1000 0x1000>;
|
|
||||||
clocks = <&ccu CLK_BUS_MIPI_DSI>,
|
|
||||||
<&ccu CLK_DSI_DPHY>;
|
|
||||||
clock-names = "bus", "mod";
|
|
||||||
resets = <&ccu RST_BUS_MIPI_DSI>;
|
|
||||||
#phy-cells = <0>;
|
|
||||||
};
|
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
|
%YAML 1.2
|
||||||
|
---
|
||||||
|
$id: http://devicetree.org/schemas/display/allwinner,sun6i-a31-mipi-dphy.yaml#
|
||||||
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||||
|
|
||||||
|
title: Allwinner A31 MIPI D-PHY Controller Device Tree Bindings
|
||||||
|
|
||||||
|
maintainers:
|
||||||
|
- Chen-Yu Tsai <wens@csie.org>
|
||||||
|
- Maxime Ripard <maxime.ripard@bootlin.com>
|
||||||
|
|
||||||
|
properties:
|
||||||
|
"#phy-cells":
|
||||||
|
const: 0
|
||||||
|
|
||||||
|
compatible:
|
||||||
|
const: allwinner,sun6i-a31-mipi-dphy
|
||||||
|
|
||||||
|
reg:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
clocks:
|
||||||
|
items:
|
||||||
|
- description: Bus Clock
|
||||||
|
- description: Module Clock
|
||||||
|
|
||||||
|
clock-names:
|
||||||
|
items:
|
||||||
|
- const: bus
|
||||||
|
- const: mod
|
||||||
|
|
||||||
|
resets:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
required:
|
||||||
|
- "#phy-cells"
|
||||||
|
- compatible
|
||||||
|
- reg
|
||||||
|
- clocks
|
||||||
|
- clock-names
|
||||||
|
- resets
|
||||||
|
|
||||||
|
additionalProperties: false
|
||||||
|
|
||||||
|
examples:
|
||||||
|
- |
|
||||||
|
dphy0: d-phy@1ca1000 {
|
||||||
|
compatible = "allwinner,sun6i-a31-mipi-dphy";
|
||||||
|
reg = <0x01ca1000 0x1000>;
|
||||||
|
clocks = <&ccu 23>, <&ccu 97>;
|
||||||
|
clock-names = "bus", "mod";
|
||||||
|
resets = <&ccu 4>;
|
||||||
|
#phy-cells = <0>;
|
||||||
|
};
|
||||||
|
|
||||||
|
...
|
||||||
@@ -51,6 +51,20 @@ To force the VGA output to be enabled and drive a specific mode say:
|
|||||||
Specifying the option multiple times for different ports is possible, e.g.:
|
Specifying the option multiple times for different ports is possible, e.g.:
|
||||||
video=LVDS-1:d video=HDMI-1:D
|
video=LVDS-1:d video=HDMI-1:D
|
||||||
|
|
||||||
|
Options can also be passed after the mode, using commas as separator.
|
||||||
|
|
||||||
|
Sample usage: 720x480,rotate=180 - 720x480 mode, rotated by 180 degrees
|
||||||
|
|
||||||
|
Valid options are:
|
||||||
|
|
||||||
|
- margin_top, margin_bottom, margin_left, margin_right (integer):
|
||||||
|
Number of pixels in the margins, typically to deal with overscan on TVs
|
||||||
|
- reflect_x (boolean): Perform an axial symmetry on the X axis
|
||||||
|
- reflect_y (boolean): Perform an axial symmetry on the Y axis
|
||||||
|
- rotate (integer): Rotate the initial framebuffer by x
|
||||||
|
degrees. Valid values are 0, 90, 180 and 270.
|
||||||
|
|
||||||
|
|
||||||
***** oOo ***** oOo ***** oOo ***** oOo ***** oOo ***** oOo ***** oOo *****
|
***** oOo ***** oOo ***** oOo ***** oOo ***** oOo ***** oOo ***** oOo *****
|
||||||
|
|
||||||
What is the VESA(TM) Coordinated Video Timings (CVT)?
|
What is the VESA(TM) Coordinated Video Timings (CVT)?
|
||||||
|
|||||||
@@ -336,8 +336,20 @@ the copied layers will fail the verification of the lower root file handle.
|
|||||||
Non-standard behavior
|
Non-standard behavior
|
||||||
---------------------
|
---------------------
|
||||||
|
|
||||||
Overlayfs can now act as a POSIX compliant filesystem with the following
|
Current version of overlayfs can act as a mostly POSIX compliant
|
||||||
features turned on:
|
filesystem.
|
||||||
|
|
||||||
|
This is the list of cases that overlayfs doesn't currently handle:
|
||||||
|
|
||||||
|
a) POSIX mandates updating st_atime for reads. This is currently not
|
||||||
|
done in the case when the file resides on a lower layer.
|
||||||
|
|
||||||
|
b) If a file residing on a lower layer is opened for read-only and then
|
||||||
|
memory mapped with MAP_SHARED, then subsequent changes to the file are not
|
||||||
|
reflected in the memory mapping.
|
||||||
|
|
||||||
|
The following options allow overlayfs to act more like a standards
|
||||||
|
compliant filesystem:
|
||||||
|
|
||||||
1) "redirect_dir"
|
1) "redirect_dir"
|
||||||
|
|
||||||
|
|||||||
@@ -423,7 +423,7 @@ will be enumerated to depends on the device ID returned by _HID.
|
|||||||
|
|
||||||
For example, the following ACPI sample might be used to enumerate an lm75-type
|
For example, the following ACPI sample might be used to enumerate an lm75-type
|
||||||
I2C temperature sensor and match it to the driver using the Device Tree
|
I2C temperature sensor and match it to the driver using the Device Tree
|
||||||
namespace link:
|
namespace link::
|
||||||
|
|
||||||
Device (TMP0)
|
Device (TMP0)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -37,10 +37,10 @@ Buffer Objects
|
|||||||
PRIME Buffer Sharing
|
PRIME Buffer Sharing
|
||||||
--------------------
|
--------------------
|
||||||
|
|
||||||
.. kernel-doc:: drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
|
.. kernel-doc:: drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c
|
||||||
:doc: PRIME Buffer Sharing
|
:doc: PRIME Buffer Sharing
|
||||||
|
|
||||||
.. kernel-doc:: drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
|
.. kernel-doc:: drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c
|
||||||
:internal:
|
:internal:
|
||||||
|
|
||||||
MMU Notifier
|
MMU Notifier
|
||||||
@@ -70,6 +70,26 @@ Interrupt Handling
|
|||||||
.. kernel-doc:: drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
|
.. kernel-doc:: drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
|
||||||
:internal:
|
:internal:
|
||||||
|
|
||||||
|
AMDGPU XGMI Support
|
||||||
|
===================
|
||||||
|
|
||||||
|
.. kernel-doc:: drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c
|
||||||
|
:doc: AMDGPU XGMI Support
|
||||||
|
|
||||||
|
.. kernel-doc:: drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c
|
||||||
|
:internal:
|
||||||
|
|
||||||
|
AMDGPU RAS debugfs control interface
|
||||||
|
====================================
|
||||||
|
|
||||||
|
.. kernel-doc:: drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
|
||||||
|
:doc: AMDGPU RAS debugfs control interface
|
||||||
|
|
||||||
|
|
||||||
|
.. kernel-doc:: drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
|
||||||
|
:internal:
|
||||||
|
|
||||||
|
|
||||||
GPU Power/Thermal Controls and Monitoring
|
GPU Power/Thermal Controls and Monitoring
|
||||||
=========================================
|
=========================================
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ GPU Driver Documentation
|
|||||||
amdgpu
|
amdgpu
|
||||||
amdgpu-dc
|
amdgpu-dc
|
||||||
i915
|
i915
|
||||||
|
mcde
|
||||||
meson
|
meson
|
||||||
pl111
|
pl111
|
||||||
tegra
|
tegra
|
||||||
|
|||||||
@@ -10,3 +10,6 @@ Kernel clients
|
|||||||
|
|
||||||
.. kernel-doc:: drivers/gpu/drm/drm_client.c
|
.. kernel-doc:: drivers/gpu/drm/drm_client.c
|
||||||
:export:
|
:export:
|
||||||
|
|
||||||
|
.. kernel-doc:: drivers/gpu/drm/drm_client_modeset.c
|
||||||
|
:export:
|
||||||
|
|||||||
@@ -181,6 +181,15 @@ Panel Helper Reference
|
|||||||
.. kernel-doc:: drivers/gpu/drm/drm_panel_orientation_quirks.c
|
.. kernel-doc:: drivers/gpu/drm/drm_panel_orientation_quirks.c
|
||||||
:export:
|
:export:
|
||||||
|
|
||||||
|
Panel Self Refresh Helper Reference
|
||||||
|
===================================
|
||||||
|
|
||||||
|
.. kernel-doc:: drivers/gpu/drm/drm_self_refresh_helper.c
|
||||||
|
:doc: overview
|
||||||
|
|
||||||
|
.. kernel-doc:: drivers/gpu/drm/drm_self_refresh_helper.c
|
||||||
|
:export:
|
||||||
|
|
||||||
HDCP Helper Functions Reference
|
HDCP Helper Functions Reference
|
||||||
===============================
|
===============================
|
||||||
|
|
||||||
|
|||||||
@@ -85,9 +85,9 @@ leads to a few additional requirements:
|
|||||||
- The userspace side must be fully reviewed and tested to the standards of that
|
- The userspace side must be fully reviewed and tested to the standards of that
|
||||||
userspace project. For e.g. mesa this means piglit testcases and review on the
|
userspace project. For e.g. mesa this means piglit testcases and review on the
|
||||||
mailing list. This is again to ensure that the new interface actually gets the
|
mailing list. This is again to ensure that the new interface actually gets the
|
||||||
job done. The userspace-side reviewer should also provide at least an
|
job done. The userspace-side reviewer should also provide an Acked-by on the
|
||||||
Acked-by on the kernel uAPI patch indicating that they've looked at how the
|
kernel uAPI patch indicating that they believe the proposed uAPI is sound and
|
||||||
kernel side is implementing the new feature being used.
|
sufficiently documented and validated for userspace's consumption.
|
||||||
|
|
||||||
- The userspace patches must be against the canonical upstream, not some vendor
|
- The userspace patches must be against the canonical upstream, not some vendor
|
||||||
fork. This is to make sure that no one cheats on the review and testing
|
fork. This is to make sure that no one cheats on the review and testing
|
||||||
@@ -329,3 +329,12 @@ DRM_IOCTL_MODESET_CTL
|
|||||||
mode setting, since on many devices the vertical blank counter is
|
mode setting, since on many devices the vertical blank counter is
|
||||||
reset to 0 at some point during modeset. Modern drivers should not
|
reset to 0 at some point during modeset. Modern drivers should not
|
||||||
call this any more since with kernel mode setting it is a no-op.
|
call this any more since with kernel mode setting it is a no-op.
|
||||||
|
|
||||||
|
Userspace API Structures
|
||||||
|
========================
|
||||||
|
|
||||||
|
.. kernel-doc:: include/uapi/drm/drm_mode.h
|
||||||
|
:doc: overview
|
||||||
|
|
||||||
|
.. kernel-doc:: include/uapi/drm/drm_mode.h
|
||||||
|
:internal:
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
.. SPDX-License-Identifier: GPL-2.0
|
||||||
|
|
||||||
|
=======================================================
|
||||||
|
drm/mcde ST-Ericsson MCDE Multi-channel display engine
|
||||||
|
=======================================================
|
||||||
|
|
||||||
|
.. kernel-doc:: drivers/gpu/drm/mcde/mcde_drv.c
|
||||||
|
:doc: ST-Ericsson MCDE DRM Driver
|
||||||
@@ -228,6 +228,12 @@ struct drm_gem_object_funcs
|
|||||||
GEM objects can now have a function table instead of having the callbacks on the
|
GEM objects can now have a function table instead of having the callbacks on the
|
||||||
DRM driver struct. This is now the preferred way and drivers can be moved over.
|
DRM driver struct. This is now the preferred way and drivers can be moved over.
|
||||||
|
|
||||||
|
DRM_GEM_CMA_VMAP_DRIVER_OPS, DRM_GEM_SHMEM_DRIVER_OPS already support this, but
|
||||||
|
DRM_GEM_VRAM_DRIVER_PRIME does not yet and needs to be aligned with the previous
|
||||||
|
two. We also need a 2nd version of the CMA define that doesn't require the
|
||||||
|
vmapping to be present (different hook for prime importing). Plus this needs to
|
||||||
|
be rolled out to all drivers using their own implementations, too.
|
||||||
|
|
||||||
Use DRM_MODESET_LOCK_ALL_* helpers instead of boilerplate
|
Use DRM_MODESET_LOCK_ALL_* helpers instead of boilerplate
|
||||||
---------------------------------------------------------
|
---------------------------------------------------------
|
||||||
|
|
||||||
@@ -289,6 +295,13 @@ drm_fb_helper tasks
|
|||||||
these igt tests need to be fixed: kms_fbcon_fbt@psr and
|
these igt tests need to be fixed: kms_fbcon_fbt@psr and
|
||||||
kms_fbcon_fbt@psr-suspend.
|
kms_fbcon_fbt@psr-suspend.
|
||||||
|
|
||||||
|
- The max connector argument for drm_fb_helper_init() and
|
||||||
|
drm_fb_helper_fbdev_setup() isn't used anymore and can be removed.
|
||||||
|
|
||||||
|
- The helper doesn't keep an array of connectors anymore so these can be
|
||||||
|
removed: drm_fb_helper_single_add_all_connectors(),
|
||||||
|
drm_fb_helper_add_one_connector() and drm_fb_helper_remove_one_connector().
|
||||||
|
|
||||||
Core refactorings
|
Core refactorings
|
||||||
=================
|
=================
|
||||||
|
|
||||||
@@ -477,5 +490,20 @@ i915
|
|||||||
device_link_add to model the dependency between i915 and snd_had. See
|
device_link_add to model the dependency between i915 and snd_had. See
|
||||||
https://dri.freedesktop.org/docs/drm/driver-api/device_link.html
|
https://dri.freedesktop.org/docs/drm/driver-api/device_link.html
|
||||||
|
|
||||||
|
Bootsplash
|
||||||
|
==========
|
||||||
|
|
||||||
|
There is support in place now for writing internal DRM clients making it
|
||||||
|
possible to pick up the bootsplash work that was rejected because it was written
|
||||||
|
for fbdev.
|
||||||
|
|
||||||
|
- [v6,8/8] drm/client: Hack: Add bootsplash example
|
||||||
|
https://patchwork.freedesktop.org/patch/306579/
|
||||||
|
|
||||||
|
- [RFC PATCH v2 00/13] Kernel based bootsplash
|
||||||
|
https://lkml.org/lkml/2017/12/13/764
|
||||||
|
|
||||||
|
Contact: Sam Ravnborg
|
||||||
|
|
||||||
Outside DRM
|
Outside DRM
|
||||||
===========
|
===========
|
||||||
|
|||||||
@@ -0,0 +1,30 @@
|
|||||||
|
.. SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||||
|
|
||||||
|
Vendor Device Drivers
|
||||||
|
=====================
|
||||||
|
|
||||||
|
Contents:
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 2
|
||||||
|
|
||||||
|
freescale/dpaa2/index
|
||||||
|
intel/e100
|
||||||
|
intel/e1000
|
||||||
|
intel/e1000e
|
||||||
|
intel/fm10k
|
||||||
|
intel/igb
|
||||||
|
intel/igbvf
|
||||||
|
intel/ixgb
|
||||||
|
intel/ixgbe
|
||||||
|
intel/ixgbevf
|
||||||
|
intel/i40e
|
||||||
|
intel/iavf
|
||||||
|
intel/ice
|
||||||
|
|
||||||
|
.. only:: subproject
|
||||||
|
|
||||||
|
Indices
|
||||||
|
=======
|
||||||
|
|
||||||
|
* :ref:`genindex`
|
||||||
@@ -11,19 +11,7 @@ Contents:
|
|||||||
batman-adv
|
batman-adv
|
||||||
can
|
can
|
||||||
can_ucan_protocol
|
can_ucan_protocol
|
||||||
device_drivers/freescale/dpaa2/index
|
device_drivers/index
|
||||||
device_drivers/intel/e100
|
|
||||||
device_drivers/intel/e1000
|
|
||||||
device_drivers/intel/e1000e
|
|
||||||
device_drivers/intel/fm10k
|
|
||||||
device_drivers/intel/igb
|
|
||||||
device_drivers/intel/igbvf
|
|
||||||
device_drivers/intel/ixgb
|
|
||||||
device_drivers/intel/ixgbe
|
|
||||||
device_drivers/intel/ixgbevf
|
|
||||||
device_drivers/intel/i40e
|
|
||||||
device_drivers/intel/iavf
|
|
||||||
device_drivers/intel/ice
|
|
||||||
dsa/index
|
dsa/index
|
||||||
devlink-info-versions
|
devlink-info-versions
|
||||||
ieee802154
|
ieee802154
|
||||||
@@ -40,6 +28,8 @@ Contents:
|
|||||||
checksum-offloads
|
checksum-offloads
|
||||||
segmentation-offloads
|
segmentation-offloads
|
||||||
scaling
|
scaling
|
||||||
|
tls
|
||||||
|
tls-offload
|
||||||
|
|
||||||
.. only:: subproject
|
.. only:: subproject
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 49 KiB |
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 6.4 KiB |
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 6.4 KiB |
@@ -0,0 +1,482 @@
|
|||||||
|
.. SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||||
|
|
||||||
|
==================
|
||||||
|
Kernel TLS offload
|
||||||
|
==================
|
||||||
|
|
||||||
|
Kernel TLS operation
|
||||||
|
====================
|
||||||
|
|
||||||
|
Linux kernel provides TLS connection offload infrastructure. Once a TCP
|
||||||
|
connection is in ``ESTABLISHED`` state user space can enable the TLS Upper
|
||||||
|
Layer Protocol (ULP) and install the cryptographic connection state.
|
||||||
|
For details regarding the user-facing interface refer to the TLS
|
||||||
|
documentation in :ref:`Documentation/networking/tls.rst <kernel_tls>`.
|
||||||
|
|
||||||
|
``ktls`` can operate in three modes:
|
||||||
|
|
||||||
|
* Software crypto mode (``TLS_SW``) - CPU handles the cryptography.
|
||||||
|
In most basic cases only crypto operations synchronous with the CPU
|
||||||
|
can be used, but depending on calling context CPU may utilize
|
||||||
|
asynchronous crypto accelerators. The use of accelerators introduces extra
|
||||||
|
latency on socket reads (decryption only starts when a read syscall
|
||||||
|
is made) and additional I/O load on the system.
|
||||||
|
* Packet-based NIC offload mode (``TLS_HW``) - the NIC handles crypto
|
||||||
|
on a packet by packet basis, provided the packets arrive in order.
|
||||||
|
This mode integrates best with the kernel stack and is described in detail
|
||||||
|
in the remaining part of this document
|
||||||
|
(``ethtool`` flags ``tls-hw-tx-offload`` and ``tls-hw-rx-offload``).
|
||||||
|
* Full TCP NIC offload mode (``TLS_HW_RECORD``) - mode of operation where
|
||||||
|
NIC driver and firmware replace the kernel networking stack
|
||||||
|
with its own TCP handling, it is not usable in production environments
|
||||||
|
making use of the Linux networking stack for example any firewalling
|
||||||
|
abilities or QoS and packet scheduling (``ethtool`` flag ``tls-hw-record``).
|
||||||
|
|
||||||
|
The operation mode is selected automatically based on device configuration,
|
||||||
|
offload opt-in or opt-out on per-connection basis is not currently supported.
|
||||||
|
|
||||||
|
TX
|
||||||
|
--
|
||||||
|
|
||||||
|
At a high level user write requests are turned into a scatter list, the TLS ULP
|
||||||
|
intercepts them, inserts record framing, performs encryption (in ``TLS_SW``
|
||||||
|
mode) and then hands the modified scatter list to the TCP layer. From this
|
||||||
|
point on the TCP stack proceeds as normal.
|
||||||
|
|
||||||
|
In ``TLS_HW`` mode the encryption is not performed in the TLS ULP.
|
||||||
|
Instead packets reach a device driver, the driver will mark the packets
|
||||||
|
for crypto offload based on the socket the packet is attached to,
|
||||||
|
and send them to the device for encryption and transmission.
|
||||||
|
|
||||||
|
RX
|
||||||
|
--
|
||||||
|
|
||||||
|
On the receive side if the device handled decryption and authentication
|
||||||
|
successfully, the driver will set the decrypted bit in the associated
|
||||||
|
:c:type:`struct sk_buff <sk_buff>`. The packets reach the TCP stack and
|
||||||
|
are handled normally. ``ktls`` is informed when data is queued to the socket
|
||||||
|
and the ``strparser`` mechanism is used to delineate the records. Upon read
|
||||||
|
request, records are retrieved from the socket and passed to decryption routine.
|
||||||
|
If device decrypted all the segments of the record the decryption is skipped,
|
||||||
|
otherwise software path handles decryption.
|
||||||
|
|
||||||
|
.. kernel-figure:: tls-offload-layers.svg
|
||||||
|
:alt: TLS offload layers
|
||||||
|
:align: center
|
||||||
|
:figwidth: 28em
|
||||||
|
|
||||||
|
Layers of Kernel TLS stack
|
||||||
|
|
||||||
|
Device configuration
|
||||||
|
====================
|
||||||
|
|
||||||
|
During driver initialization device sets the ``NETIF_F_HW_TLS_RX`` and
|
||||||
|
``NETIF_F_HW_TLS_TX`` features and installs its
|
||||||
|
:c:type:`struct tlsdev_ops <tlsdev_ops>`
|
||||||
|
pointer in the :c:member:`tlsdev_ops` member of the
|
||||||
|
:c:type:`struct net_device <net_device>`.
|
||||||
|
|
||||||
|
When TLS cryptographic connection state is installed on a ``ktls`` socket
|
||||||
|
(note that it is done twice, once for RX and once for TX direction,
|
||||||
|
and the two are completely independent), the kernel checks if the underlying
|
||||||
|
network device is offload-capable and attempts the offload. In case offload
|
||||||
|
fails the connection is handled entirely in software using the same mechanism
|
||||||
|
as if the offload was never tried.
|
||||||
|
|
||||||
|
Offload request is performed via the :c:member:`tls_dev_add` callback of
|
||||||
|
:c:type:`struct tlsdev_ops <tlsdev_ops>`:
|
||||||
|
|
||||||
|
.. code-block:: c
|
||||||
|
|
||||||
|
int (*tls_dev_add)(struct net_device *netdev, struct sock *sk,
|
||||||
|
enum tls_offload_ctx_dir direction,
|
||||||
|
struct tls_crypto_info *crypto_info,
|
||||||
|
u32 start_offload_tcp_sn);
|
||||||
|
|
||||||
|
``direction`` indicates whether the cryptographic information is for
|
||||||
|
the received or transmitted packets. Driver uses the ``sk`` parameter
|
||||||
|
to retrieve the connection 5-tuple and socket family (IPv4 vs IPv6).
|
||||||
|
Cryptographic information in ``crypto_info`` includes the key, iv, salt
|
||||||
|
as well as TLS record sequence number. ``start_offload_tcp_sn`` indicates
|
||||||
|
which TCP sequence number corresponds to the beginning of the record with
|
||||||
|
sequence number from ``crypto_info``. The driver can add its state
|
||||||
|
at the end of kernel structures (see :c:member:`driver_state` members
|
||||||
|
in ``include/net/tls.h``) to avoid additional allocations and pointer
|
||||||
|
dereferences.
|
||||||
|
|
||||||
|
TX
|
||||||
|
--
|
||||||
|
|
||||||
|
After TX state is installed, the stack guarantees that the first segment
|
||||||
|
of the stream will start exactly at the ``start_offload_tcp_sn`` sequence
|
||||||
|
number, simplifying TCP sequence number matching.
|
||||||
|
|
||||||
|
TX offload being fully initialized does not imply that all segments passing
|
||||||
|
through the driver and which belong to the offloaded socket will be after
|
||||||
|
the expected sequence number and will have kernel record information.
|
||||||
|
In particular, already encrypted data may have been queued to the socket
|
||||||
|
before installing the connection state in the kernel.
|
||||||
|
|
||||||
|
RX
|
||||||
|
--
|
||||||
|
|
||||||
|
In RX direction local networking stack has little control over the segmentation,
|
||||||
|
so the initial records' TCP sequence number may be anywhere inside the segment.
|
||||||
|
|
||||||
|
Normal operation
|
||||||
|
================
|
||||||
|
|
||||||
|
At the minimum the device maintains the following state for each connection, in
|
||||||
|
each direction:
|
||||||
|
|
||||||
|
* crypto secrets (key, iv, salt)
|
||||||
|
* crypto processing state (partial blocks, partial authentication tag, etc.)
|
||||||
|
* record metadata (sequence number, processing offset and length)
|
||||||
|
* expected TCP sequence number
|
||||||
|
|
||||||
|
There are no guarantees on record length or record segmentation. In particular
|
||||||
|
segments may start at any point of a record and contain any number of records.
|
||||||
|
Assuming segments are received in order, the device should be able to perform
|
||||||
|
crypto operations and authentication regardless of segmentation. For this
|
||||||
|
to be possible device has to keep small amount of segment-to-segment state.
|
||||||
|
This includes at least:
|
||||||
|
|
||||||
|
* partial headers (if a segment carried only a part of the TLS header)
|
||||||
|
* partial data block
|
||||||
|
* partial authentication tag (all data had been seen but part of the
|
||||||
|
authentication tag has to be written or read from the subsequent segment)
|
||||||
|
|
||||||
|
Record reassembly is not necessary for TLS offload. If the packets arrive
|
||||||
|
in order the device should be able to handle them separately and make
|
||||||
|
forward progress.
|
||||||
|
|
||||||
|
TX
|
||||||
|
--
|
||||||
|
|
||||||
|
The kernel stack performs record framing reserving space for the authentication
|
||||||
|
tag and populating all other TLS header and tailer fields.
|
||||||
|
|
||||||
|
Both the device and the driver maintain expected TCP sequence numbers
|
||||||
|
due to the possibility of retransmissions and the lack of software fallback
|
||||||
|
once the packet reaches the device.
|
||||||
|
For segments passed in order, the driver marks the packets with
|
||||||
|
a connection identifier (note that a 5-tuple lookup is insufficient to identify
|
||||||
|
packets requiring HW offload, see the :ref:`5tuple_problems` section)
|
||||||
|
and hands them to the device. The device identifies the packet as requiring
|
||||||
|
TLS handling and confirms the sequence number matches its expectation.
|
||||||
|
The device performs encryption and authentication of the record data.
|
||||||
|
It replaces the authentication tag and TCP checksum with correct values.
|
||||||
|
|
||||||
|
RX
|
||||||
|
--
|
||||||
|
|
||||||
|
Before a packet is DMAed to the host (but after NIC's embedded switching
|
||||||
|
and packet transformation functions) the device validates the Layer 4
|
||||||
|
checksum and performs a 5-tuple lookup to find any TLS connection the packet
|
||||||
|
may belong to (technically a 4-tuple
|
||||||
|
lookup is sufficient - IP addresses and TCP port numbers, as the protocol
|
||||||
|
is always TCP). If connection is matched device confirms if the TCP sequence
|
||||||
|
number is the expected one and proceeds to TLS handling (record delineation,
|
||||||
|
decryption, authentication for each record in the packet). The device leaves
|
||||||
|
the record framing unmodified, the stack takes care of record decapsulation.
|
||||||
|
Device indicates successful handling of TLS offload in the per-packet context
|
||||||
|
(descriptor) passed to the host.
|
||||||
|
|
||||||
|
Upon reception of a TLS offloaded packet, the driver sets
|
||||||
|
the :c:member:`decrypted` mark in :c:type:`struct sk_buff <sk_buff>`
|
||||||
|
corresponding to the segment. Networking stack makes sure decrypted
|
||||||
|
and non-decrypted segments do not get coalesced (e.g. by GRO or socket layer)
|
||||||
|
and takes care of partial decryption.
|
||||||
|
|
||||||
|
Resync handling
|
||||||
|
===============
|
||||||
|
|
||||||
|
In presence of packet drops or network packet reordering, the device may lose
|
||||||
|
synchronization with the TLS stream, and require a resync with the kernel's
|
||||||
|
TCP stack.
|
||||||
|
|
||||||
|
Note that resync is only attempted for connections which were successfully
|
||||||
|
added to the device table and are in TLS_HW mode. For example,
|
||||||
|
if the table was full when cryptographic state was installed in the kernel,
|
||||||
|
such connection will never get offloaded. Therefore the resync request
|
||||||
|
does not carry any cryptographic connection state.
|
||||||
|
|
||||||
|
TX
|
||||||
|
--
|
||||||
|
|
||||||
|
Segments transmitted from an offloaded socket can get out of sync
|
||||||
|
in similar ways to the receive side-retransmissions - local drops
|
||||||
|
are possible, though network reorders are not.
|
||||||
|
|
||||||
|
Whenever an out of order segment is transmitted the driver provides
|
||||||
|
the device with enough information to perform cryptographic operations.
|
||||||
|
This means most likely that the part of the record preceding the current
|
||||||
|
segment has to be passed to the device as part of the packet context,
|
||||||
|
together with its TCP sequence number and TLS record number. The device
|
||||||
|
can then initialize its crypto state, process and discard the preceding
|
||||||
|
data (to be able to insert the authentication tag) and move onto handling
|
||||||
|
the actual packet.
|
||||||
|
|
||||||
|
In this mode depending on the implementation the driver can either ask
|
||||||
|
for a continuation with the crypto state and the new sequence number
|
||||||
|
(next expected segment is the one after the out of order one), or continue
|
||||||
|
with the previous stream state - assuming that the out of order segment
|
||||||
|
was just a retransmission. The former is simpler, and does not require
|
||||||
|
retransmission detection therefore it is the recommended method until
|
||||||
|
such time it is proven inefficient.
|
||||||
|
|
||||||
|
RX
|
||||||
|
--
|
||||||
|
|
||||||
|
A small amount of RX reorder events may not require a full resynchronization.
|
||||||
|
In particular the device should not lose synchronization
|
||||||
|
when record boundary can be recovered:
|
||||||
|
|
||||||
|
.. kernel-figure:: tls-offload-reorder-good.svg
|
||||||
|
:alt: reorder of non-header segment
|
||||||
|
:align: center
|
||||||
|
|
||||||
|
Reorder of non-header segment
|
||||||
|
|
||||||
|
Green segments are successfully decrypted, blue ones are passed
|
||||||
|
as received on wire, red stripes mark start of new records.
|
||||||
|
|
||||||
|
In above case segment 1 is received and decrypted successfully.
|
||||||
|
Segment 2 was dropped so 3 arrives out of order. The device knows
|
||||||
|
the next record starts inside 3, based on record length in segment 1.
|
||||||
|
Segment 3 is passed untouched, because due to lack of data from segment 2
|
||||||
|
the remainder of the previous record inside segment 3 cannot be handled.
|
||||||
|
The device can, however, collect the authentication algorithm's state
|
||||||
|
and partial block from the new record in segment 3 and when 4 and 5
|
||||||
|
arrive continue decryption. Finally when 2 arrives it's completely outside
|
||||||
|
of expected window of the device so it's passed as is without special
|
||||||
|
handling. ``ktls`` software fallback handles the decryption of record
|
||||||
|
spanning segments 1, 2 and 3. The device did not get out of sync,
|
||||||
|
even though two segments did not get decrypted.
|
||||||
|
|
||||||
|
Kernel synchronization may be necessary if the lost segment contained
|
||||||
|
a record header and arrived after the next record header has already passed:
|
||||||
|
|
||||||
|
.. kernel-figure:: tls-offload-reorder-bad.svg
|
||||||
|
:alt: reorder of header segment
|
||||||
|
:align: center
|
||||||
|
|
||||||
|
Reorder of segment with a TLS header
|
||||||
|
|
||||||
|
In this example segment 2 gets dropped, and it contains a record header.
|
||||||
|
Device can only detect that segment 4 also contains a TLS header
|
||||||
|
if it knows the length of the previous record from segment 2. In this case
|
||||||
|
the device will lose synchronization with the stream.
|
||||||
|
|
||||||
|
When the device gets out of sync and the stream reaches TCP sequence
|
||||||
|
numbers more than a max size record past the expected TCP sequence number,
|
||||||
|
the device starts scanning for a known header pattern. For example
|
||||||
|
for TLS 1.2 and TLS 1.3 subsequent bytes of value ``0x03 0x03`` occur
|
||||||
|
in the SSL/TLS version field of the header. Once pattern is matched
|
||||||
|
the device continues attempting parsing headers at expected locations
|
||||||
|
(based on the length fields at guessed locations).
|
||||||
|
Whenever the expected location does not contain a valid header the scan
|
||||||
|
is restarted.
|
||||||
|
|
||||||
|
When the header is matched the device sends a confirmation request
|
||||||
|
to the kernel, asking if the guessed location is correct (if a TLS record
|
||||||
|
really starts there), and which record sequence number the given header had.
|
||||||
|
The kernel confirms the guessed location was correct and tells the device
|
||||||
|
the record sequence number. Meanwhile, the device had been parsing
|
||||||
|
and counting all records since the just-confirmed one, it adds the number
|
||||||
|
of records it had seen to the record number provided by the kernel.
|
||||||
|
At this point the device is in sync and can resume decryption at next
|
||||||
|
segment boundary.
|
||||||
|
|
||||||
|
In a pathological case the device may latch onto a sequence of matching
|
||||||
|
headers and never hear back from the kernel (there is no negative
|
||||||
|
confirmation from the kernel). The implementation may choose to periodically
|
||||||
|
restart scan. Given how unlikely falsely-matching stream is, however,
|
||||||
|
periodic restart is not deemed necessary.
|
||||||
|
|
||||||
|
Special care has to be taken if the confirmation request is passed
|
||||||
|
asynchronously to the packet stream and record may get processed
|
||||||
|
by the kernel before the confirmation request.
|
||||||
|
|
||||||
|
Error handling
|
||||||
|
==============
|
||||||
|
|
||||||
|
TX
|
||||||
|
--
|
||||||
|
|
||||||
|
Packets may be redirected or rerouted by the stack to a different
|
||||||
|
device than the selected TLS offload device. The stack will handle
|
||||||
|
such condition using the :c:func:`sk_validate_xmit_skb` helper
|
||||||
|
(TLS offload code installs :c:func:`tls_validate_xmit_skb` at this hook).
|
||||||
|
Offload maintains information about all records until the data is
|
||||||
|
fully acknowledged, so if skbs reach the wrong device they can be handled
|
||||||
|
by software fallback.
|
||||||
|
|
||||||
|
Any device TLS offload handling error on the transmission side must result
|
||||||
|
in the packet being dropped. For example if a packet got out of order
|
||||||
|
due to a bug in the stack or the device, reached the device and can't
|
||||||
|
be encrypted such packet must be dropped.
|
||||||
|
|
||||||
|
RX
|
||||||
|
--
|
||||||
|
|
||||||
|
If the device encounters any problems with TLS offload on the receive
|
||||||
|
side it should pass the packet to the host's networking stack as it was
|
||||||
|
received on the wire.
|
||||||
|
|
||||||
|
For example authentication failure for any record in the segment should
|
||||||
|
result in passing the unmodified packet to the software fallback. This means
|
||||||
|
packets should not be modified "in place". Splitting segments to handle partial
|
||||||
|
decryption is not advised. In other words either all records in the packet
|
||||||
|
had been handled successfully and authenticated or the packet has to be passed
|
||||||
|
to the host's stack as it was on the wire (recovering original packet in the
|
||||||
|
driver if device provides precise error is sufficient).
|
||||||
|
|
||||||
|
The Linux networking stack does not provide a way of reporting per-packet
|
||||||
|
decryption and authentication errors, packets with errors must simply not
|
||||||
|
have the :c:member:`decrypted` mark set.
|
||||||
|
|
||||||
|
A packet should also not be handled by the TLS offload if it contains
|
||||||
|
incorrect checksums.
|
||||||
|
|
||||||
|
Performance metrics
|
||||||
|
===================
|
||||||
|
|
||||||
|
TLS offload can be characterized by the following basic metrics:
|
||||||
|
|
||||||
|
* max connection count
|
||||||
|
* connection installation rate
|
||||||
|
* connection installation latency
|
||||||
|
* total cryptographic performance
|
||||||
|
|
||||||
|
Note that each TCP connection requires a TLS session in both directions,
|
||||||
|
the performance may be reported treating each direction separately.
|
||||||
|
|
||||||
|
Max connection count
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
The number of connections device can support can be exposed via
|
||||||
|
``devlink resource`` API.
|
||||||
|
|
||||||
|
Total cryptographic performance
|
||||||
|
-------------------------------
|
||||||
|
|
||||||
|
Offload performance may depend on segment and record size.
|
||||||
|
|
||||||
|
Overload of the cryptographic subsystem of the device should not have
|
||||||
|
significant performance impact on non-offloaded streams.
|
||||||
|
|
||||||
|
Statistics
|
||||||
|
==========
|
||||||
|
|
||||||
|
Following minimum set of TLS-related statistics should be reported
|
||||||
|
by the driver:
|
||||||
|
|
||||||
|
* ``rx_tls_decrypted`` - number of successfully decrypted TLS segments
|
||||||
|
* ``tx_tls_encrypted`` - number of in-order TLS segments passed to device
|
||||||
|
for encryption
|
||||||
|
* ``tx_tls_ooo`` - number of TX packets which were part of a TLS stream
|
||||||
|
but did not arrive in the expected order
|
||||||
|
* ``tx_tls_drop_no_sync_data`` - number of TX packets dropped because
|
||||||
|
they arrived out of order and associated record could not be found
|
||||||
|
(see also :ref:`pre_tls_data`)
|
||||||
|
|
||||||
|
Notable corner cases, exceptions and additional requirements
|
||||||
|
============================================================
|
||||||
|
|
||||||
|
.. _5tuple_problems:
|
||||||
|
|
||||||
|
5-tuple matching limitations
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
The device can only recognize received packets based on the 5-tuple
|
||||||
|
of the socket. Current ``ktls`` implementation will not offload sockets
|
||||||
|
routed through software interfaces such as those used for tunneling
|
||||||
|
or virtual networking. However, many packet transformations performed
|
||||||
|
by the networking stack (most notably any BPF logic) do not require
|
||||||
|
any intermediate software device, therefore a 5-tuple match may
|
||||||
|
consistently miss at the device level. In such cases the device
|
||||||
|
should still be able to perform TX offload (encryption) and should
|
||||||
|
fallback cleanly to software decryption (RX).
|
||||||
|
|
||||||
|
Out of order
|
||||||
|
------------
|
||||||
|
|
||||||
|
Introducing extra processing in NICs should not cause packets to be
|
||||||
|
transmitted or received out of order, for example pure ACK packets
|
||||||
|
should not be reordered with respect to data segments.
|
||||||
|
|
||||||
|
Ingress reorder
|
||||||
|
---------------
|
||||||
|
|
||||||
|
A device is permitted to perform packet reordering for consecutive
|
||||||
|
TCP segments (i.e. placing packets in the correct order) but any form
|
||||||
|
of additional buffering is disallowed.
|
||||||
|
|
||||||
|
Coexistence with standard networking offload features
|
||||||
|
-----------------------------------------------------
|
||||||
|
|
||||||
|
Offloaded ``ktls`` sockets should support standard TCP stack features
|
||||||
|
transparently. Enabling device TLS offload should not cause any difference
|
||||||
|
in packets as seen on the wire.
|
||||||
|
|
||||||
|
Transport layer transparency
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
The device should not modify any packet headers for the purpose
|
||||||
|
of the simplifying TLS offload.
|
||||||
|
|
||||||
|
The device should not depend on any packet headers beyond what is strictly
|
||||||
|
necessary for TLS offload.
|
||||||
|
|
||||||
|
Segment drops
|
||||||
|
-------------
|
||||||
|
|
||||||
|
Dropping packets is acceptable only in the event of catastrophic
|
||||||
|
system errors and should never be used as an error handling mechanism
|
||||||
|
in cases arising from normal operation. In other words, reliance
|
||||||
|
on TCP retransmissions to handle corner cases is not acceptable.
|
||||||
|
|
||||||
|
TLS device features
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
Drivers should ignore the changes to TLS the device feature flags.
|
||||||
|
These flags will be acted upon accordingly by the core ``ktls`` code.
|
||||||
|
TLS device feature flags only control adding of new TLS connection
|
||||||
|
offloads, old connections will remain active after flags are cleared.
|
||||||
|
|
||||||
|
Known bugs
|
||||||
|
==========
|
||||||
|
|
||||||
|
skb_orphan() leaks clear text
|
||||||
|
-----------------------------
|
||||||
|
|
||||||
|
Currently drivers depend on the :c:member:`sk` member of
|
||||||
|
:c:type:`struct sk_buff <sk_buff>` to identify segments requiring
|
||||||
|
encryption. Any operation which removes or does not preserve the socket
|
||||||
|
association such as :c:func:`skb_orphan` or :c:func:`skb_clone`
|
||||||
|
will cause the driver to miss the packets and lead to clear text leaks.
|
||||||
|
|
||||||
|
Redirects leak clear text
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
In the RX direction, if segment has already been decrypted by the device
|
||||||
|
and it gets redirected or mirrored - clear text will be transmitted out.
|
||||||
|
|
||||||
|
.. _pre_tls_data:
|
||||||
|
|
||||||
|
Transmission of pre-TLS data
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
User can enqueue some already encrypted and framed records before enabling
|
||||||
|
``ktls`` on the socket. Those records have to get sent as they are. This is
|
||||||
|
perfectly easy to handle in the software case - such data will be waiting
|
||||||
|
in the TCP layer, TLS ULP won't see it. In the offloaded case when pre-queued
|
||||||
|
segment reaches transmission point it appears to be out of order (before the
|
||||||
|
expected TCP sequence number) and the stack does not have a record information
|
||||||
|
associated.
|
||||||
|
|
||||||
|
All segments without record information cannot, however, be assumed to be
|
||||||
|
pre-queued data, because a race condition exists between TCP stack queuing
|
||||||
|
a retransmission, the driver seeing the retransmission and TCP ACK arriving
|
||||||
|
for the retransmitted data.
|
||||||
@@ -1,3 +1,9 @@
|
|||||||
|
.. _kernel_tls:
|
||||||
|
|
||||||
|
==========
|
||||||
|
Kernel TLS
|
||||||
|
==========
|
||||||
|
|
||||||
Overview
|
Overview
|
||||||
========
|
========
|
||||||
|
|
||||||
@@ -12,6 +18,8 @@ Creating a TLS connection
|
|||||||
|
|
||||||
First create a new TCP socket and set the TLS ULP.
|
First create a new TCP socket and set the TLS ULP.
|
||||||
|
|
||||||
|
.. code-block:: c
|
||||||
|
|
||||||
sock = socket(AF_INET, SOCK_STREAM, 0);
|
sock = socket(AF_INET, SOCK_STREAM, 0);
|
||||||
setsockopt(sock, SOL_TCP, TCP_ULP, "tls", sizeof("tls"));
|
setsockopt(sock, SOL_TCP, TCP_ULP, "tls", sizeof("tls"));
|
||||||
|
|
||||||
@@ -21,6 +29,8 @@ handshake is complete, we have all the parameters required to move the
|
|||||||
data-path to the kernel. There is a separate socket option for moving
|
data-path to the kernel. There is a separate socket option for moving
|
||||||
the transmit and the receive into the kernel.
|
the transmit and the receive into the kernel.
|
||||||
|
|
||||||
|
.. code-block:: c
|
||||||
|
|
||||||
/* From linux/tls.h */
|
/* From linux/tls.h */
|
||||||
struct tls_crypto_info {
|
struct tls_crypto_info {
|
||||||
unsigned short version;
|
unsigned short version;
|
||||||
@@ -58,6 +68,8 @@ After setting the TLS_TX socket option all application data sent over this
|
|||||||
socket is encrypted using TLS and the parameters provided in the socket option.
|
socket is encrypted using TLS and the parameters provided in the socket option.
|
||||||
For example, we can send an encrypted hello world record as follows:
|
For example, we can send an encrypted hello world record as follows:
|
||||||
|
|
||||||
|
.. code-block:: c
|
||||||
|
|
||||||
const char *msg = "hello world\n";
|
const char *msg = "hello world\n";
|
||||||
send(sock, msg, strlen(msg));
|
send(sock, msg, strlen(msg));
|
||||||
|
|
||||||
@@ -67,6 +79,8 @@ to the encrypted kernel send buffer if possible.
|
|||||||
The sendfile system call will send the file's data over TLS records of maximum
|
The sendfile system call will send the file's data over TLS records of maximum
|
||||||
length (2^14).
|
length (2^14).
|
||||||
|
|
||||||
|
.. code-block:: c
|
||||||
|
|
||||||
file = open(filename, O_RDONLY);
|
file = open(filename, O_RDONLY);
|
||||||
fstat(file, &stat);
|
fstat(file, &stat);
|
||||||
sendfile(sock, file, &offset, stat.st_size);
|
sendfile(sock, file, &offset, stat.st_size);
|
||||||
@@ -89,6 +103,8 @@ After setting the TLS_RX socket option, all recv family socket calls
|
|||||||
are decrypted using TLS parameters provided. A full TLS record must
|
are decrypted using TLS parameters provided. A full TLS record must
|
||||||
be received before decryption can happen.
|
be received before decryption can happen.
|
||||||
|
|
||||||
|
.. code-block:: c
|
||||||
|
|
||||||
char buffer[16384];
|
char buffer[16384];
|
||||||
recv(sock, buffer, 16384);
|
recv(sock, buffer, 16384);
|
||||||
|
|
||||||
@@ -97,12 +113,12 @@ large enough, and no additional allocations occur. If the userspace
|
|||||||
buffer is too small, data is decrypted in the kernel and copied to
|
buffer is too small, data is decrypted in the kernel and copied to
|
||||||
userspace.
|
userspace.
|
||||||
|
|
||||||
EINVAL is returned if the TLS version in the received message does not
|
``EINVAL`` is returned if the TLS version in the received message does not
|
||||||
match the version passed in setsockopt.
|
match the version passed in setsockopt.
|
||||||
|
|
||||||
EMSGSIZE is returned if the received message is too big.
|
``EMSGSIZE`` is returned if the received message is too big.
|
||||||
|
|
||||||
EBADMSG is returned if decryption failed for any other reason.
|
``EBADMSG`` is returned if decryption failed for any other reason.
|
||||||
|
|
||||||
Send TLS control messages
|
Send TLS control messages
|
||||||
-------------------------
|
-------------------------
|
||||||
@@ -113,9 +129,11 @@ These messages can be sent over the socket by providing the TLS record type
|
|||||||
via a CMSG. For example the following function sends @data of @length bytes
|
via a CMSG. For example the following function sends @data of @length bytes
|
||||||
using a record of type @record_type.
|
using a record of type @record_type.
|
||||||
|
|
||||||
/* send TLS control message using record_type */
|
.. code-block:: c
|
||||||
|
|
||||||
|
/* send TLS control message using record_type */
|
||||||
static int klts_send_ctrl_message(int sock, unsigned char record_type,
|
static int klts_send_ctrl_message(int sock, unsigned char record_type,
|
||||||
void *data, size_t length)
|
void *data, size_t length)
|
||||||
{
|
{
|
||||||
struct msghdr msg = {0};
|
struct msghdr msg = {0};
|
||||||
int cmsg_len = sizeof(record_type);
|
int cmsg_len = sizeof(record_type);
|
||||||
@@ -151,6 +169,8 @@ type passed via cmsg. If no cmsg buffer is provided, an error is
|
|||||||
returned if a control message is received. Data messages may be
|
returned if a control message is received. Data messages may be
|
||||||
received without a cmsg buffer set.
|
received without a cmsg buffer set.
|
||||||
|
|
||||||
|
.. code-block:: c
|
||||||
|
|
||||||
char buffer[16384];
|
char buffer[16384];
|
||||||
char cmsg[CMSG_SPACE(sizeof(unsigned char))];
|
char cmsg[CMSG_SPACE(sizeof(unsigned char))];
|
||||||
struct msghdr msg = {0};
|
struct msghdr msg = {0};
|
||||||
@@ -186,12 +206,10 @@ Integrating in to userspace TLS library
|
|||||||
At a high level, the kernel TLS ULP is a replacement for the record
|
At a high level, the kernel TLS ULP is a replacement for the record
|
||||||
layer of a userspace TLS library.
|
layer of a userspace TLS library.
|
||||||
|
|
||||||
A patchset to OpenSSL to use ktls as the record layer is here:
|
A patchset to OpenSSL to use ktls as the record layer is
|
||||||
|
`here <https://github.com/Mellanox/openssl/commits/tls_rx2>`_.
|
||||||
|
|
||||||
https://github.com/Mellanox/openssl/commits/tls_rx2
|
`An example <https://github.com/ktls/af_ktls-tool/commits/RX>`_
|
||||||
|
of calling send directly after a handshake using gnutls.
|
||||||
An example of calling send directly after a handshake using
|
Since it doesn't implement a full record layer, control
|
||||||
gnutls. Since it doesn't implement a full record layer, control
|
messages are not supported.
|
||||||
messages are not supported:
|
|
||||||
|
|
||||||
https://github.com/ktls/af_ktls-tool/commits/RX
|
|
||||||
@@ -37,7 +37,19 @@ import glob
|
|||||||
from docutils import nodes, statemachine
|
from docutils import nodes, statemachine
|
||||||
from docutils.statemachine import ViewList
|
from docutils.statemachine import ViewList
|
||||||
from docutils.parsers.rst import directives, Directive
|
from docutils.parsers.rst import directives, Directive
|
||||||
from sphinx.ext.autodoc import AutodocReporter
|
|
||||||
|
#
|
||||||
|
# AutodocReporter is only good up to Sphinx 1.7
|
||||||
|
#
|
||||||
|
import sphinx
|
||||||
|
|
||||||
|
Use_SSI = sphinx.__version__[:3] >= '1.7'
|
||||||
|
if Use_SSI:
|
||||||
|
from sphinx.util.docutils import switch_source_input
|
||||||
|
else:
|
||||||
|
from sphinx.ext.autodoc import AutodocReporter
|
||||||
|
|
||||||
|
import kernellog
|
||||||
|
|
||||||
__version__ = '1.0'
|
__version__ = '1.0'
|
||||||
|
|
||||||
@@ -90,7 +102,8 @@ class KernelDocDirective(Directive):
|
|||||||
cmd += [filename]
|
cmd += [filename]
|
||||||
|
|
||||||
try:
|
try:
|
||||||
env.app.verbose('calling kernel-doc \'%s\'' % (" ".join(cmd)))
|
kernellog.verbose(env.app,
|
||||||
|
'calling kernel-doc \'%s\'' % (" ".join(cmd)))
|
||||||
|
|
||||||
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||||
out, err = p.communicate()
|
out, err = p.communicate()
|
||||||
@@ -100,7 +113,8 @@ class KernelDocDirective(Directive):
|
|||||||
if p.returncode != 0:
|
if p.returncode != 0:
|
||||||
sys.stderr.write(err)
|
sys.stderr.write(err)
|
||||||
|
|
||||||
env.app.warn('kernel-doc \'%s\' failed with return code %d' % (" ".join(cmd), p.returncode))
|
kernellog.warn(env.app,
|
||||||
|
'kernel-doc \'%s\' failed with return code %d' % (" ".join(cmd), p.returncode))
|
||||||
return [nodes.error(None, nodes.paragraph(text = "kernel-doc missing"))]
|
return [nodes.error(None, nodes.paragraph(text = "kernel-doc missing"))]
|
||||||
elif env.config.kerneldoc_verbosity > 0:
|
elif env.config.kerneldoc_verbosity > 0:
|
||||||
sys.stderr.write(err)
|
sys.stderr.write(err)
|
||||||
@@ -121,20 +135,28 @@ class KernelDocDirective(Directive):
|
|||||||
lineoffset += 1
|
lineoffset += 1
|
||||||
|
|
||||||
node = nodes.section()
|
node = nodes.section()
|
||||||
buf = self.state.memo.title_styles, self.state.memo.section_level, self.state.memo.reporter
|
self.do_parse(result, node)
|
||||||
|
|
||||||
|
return node.children
|
||||||
|
|
||||||
|
except Exception as e: # pylint: disable=W0703
|
||||||
|
kernellog.warn(env.app, 'kernel-doc \'%s\' processing failed with: %s' %
|
||||||
|
(" ".join(cmd), str(e)))
|
||||||
|
return [nodes.error(None, nodes.paragraph(text = "kernel-doc missing"))]
|
||||||
|
|
||||||
|
def do_parse(self, result, node):
|
||||||
|
if Use_SSI:
|
||||||
|
with switch_source_input(self.state, result):
|
||||||
|
self.state.nested_parse(result, 0, node, match_titles=1)
|
||||||
|
else:
|
||||||
|
save = self.state.memo.title_styles, self.state.memo.section_level, self.state.memo.reporter
|
||||||
self.state.memo.reporter = AutodocReporter(result, self.state.memo.reporter)
|
self.state.memo.reporter = AutodocReporter(result, self.state.memo.reporter)
|
||||||
self.state.memo.title_styles, self.state.memo.section_level = [], 0
|
self.state.memo.title_styles, self.state.memo.section_level = [], 0
|
||||||
try:
|
try:
|
||||||
self.state.nested_parse(result, 0, node, match_titles=1)
|
self.state.nested_parse(result, 0, node, match_titles=1)
|
||||||
finally:
|
finally:
|
||||||
self.state.memo.title_styles, self.state.memo.section_level, self.state.memo.reporter = buf
|
self.state.memo.title_styles, self.state.memo.section_level, self.state.memo.reporter = save
|
||||||
|
|
||||||
return node.children
|
|
||||||
|
|
||||||
except Exception as e: # pylint: disable=W0703
|
|
||||||
env.app.warn('kernel-doc \'%s\' processing failed with: %s' %
|
|
||||||
(" ".join(cmd), str(e)))
|
|
||||||
return [nodes.error(None, nodes.paragraph(text = "kernel-doc missing"))]
|
|
||||||
|
|
||||||
def setup(app):
|
def setup(app):
|
||||||
app.add_config_value('kerneldoc_bin', None, 'env')
|
app.add_config_value('kerneldoc_bin', None, 'env')
|
||||||
|
|||||||
@@ -0,0 +1,28 @@
|
|||||||
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
|
#
|
||||||
|
# Sphinx has deprecated its older logging interface, but the replacement
|
||||||
|
# only goes back to 1.6. So here's a wrapper layer to keep around for
|
||||||
|
# as long as we support 1.4.
|
||||||
|
#
|
||||||
|
import sphinx
|
||||||
|
|
||||||
|
if sphinx.__version__[:3] >= '1.6':
|
||||||
|
UseLogging = True
|
||||||
|
from sphinx.util import logging
|
||||||
|
logger = logging.getLogger('kerneldoc')
|
||||||
|
else:
|
||||||
|
UseLogging = False
|
||||||
|
|
||||||
|
def warn(app, message):
|
||||||
|
if UseLogging:
|
||||||
|
logger.warning(message)
|
||||||
|
else:
|
||||||
|
app.warn(message)
|
||||||
|
|
||||||
|
def verbose(app, message):
|
||||||
|
if UseLogging:
|
||||||
|
logger.verbose(message)
|
||||||
|
else:
|
||||||
|
app.verbose(message)
|
||||||
|
|
||||||
|
|
||||||
@@ -60,6 +60,8 @@ import sphinx
|
|||||||
from sphinx.util.nodes import clean_astext
|
from sphinx.util.nodes import clean_astext
|
||||||
from six import iteritems
|
from six import iteritems
|
||||||
|
|
||||||
|
import kernellog
|
||||||
|
|
||||||
PY3 = sys.version_info[0] == 3
|
PY3 = sys.version_info[0] == 3
|
||||||
|
|
||||||
if PY3:
|
if PY3:
|
||||||
@@ -171,20 +173,20 @@ def setupTools(app):
|
|||||||
This function is called once, when the builder is initiated.
|
This function is called once, when the builder is initiated.
|
||||||
"""
|
"""
|
||||||
global dot_cmd, convert_cmd # pylint: disable=W0603
|
global dot_cmd, convert_cmd # pylint: disable=W0603
|
||||||
app.verbose("kfigure: check installed tools ...")
|
kernellog.verbose(app, "kfigure: check installed tools ...")
|
||||||
|
|
||||||
dot_cmd = which('dot')
|
dot_cmd = which('dot')
|
||||||
convert_cmd = which('convert')
|
convert_cmd = which('convert')
|
||||||
|
|
||||||
if dot_cmd:
|
if dot_cmd:
|
||||||
app.verbose("use dot(1) from: " + dot_cmd)
|
kernellog.verbose(app, "use dot(1) from: " + dot_cmd)
|
||||||
else:
|
else:
|
||||||
app.warn("dot(1) not found, for better output quality install "
|
kernellog.warn(app, "dot(1) not found, for better output quality install "
|
||||||
"graphviz from http://www.graphviz.org")
|
"graphviz from http://www.graphviz.org")
|
||||||
if convert_cmd:
|
if convert_cmd:
|
||||||
app.verbose("use convert(1) from: " + convert_cmd)
|
kernellog.verbose(app, "use convert(1) from: " + convert_cmd)
|
||||||
else:
|
else:
|
||||||
app.warn(
|
kernellog.warn(app,
|
||||||
"convert(1) not found, for SVG to PDF conversion install "
|
"convert(1) not found, for SVG to PDF conversion install "
|
||||||
"ImageMagick (https://www.imagemagick.org)")
|
"ImageMagick (https://www.imagemagick.org)")
|
||||||
|
|
||||||
@@ -220,12 +222,13 @@ def convert_image(img_node, translator, src_fname=None):
|
|||||||
|
|
||||||
# in kernel builds, use 'make SPHINXOPTS=-v' to see verbose messages
|
# in kernel builds, use 'make SPHINXOPTS=-v' to see verbose messages
|
||||||
|
|
||||||
app.verbose('assert best format for: ' + img_node['uri'])
|
kernellog.verbose(app, 'assert best format for: ' + img_node['uri'])
|
||||||
|
|
||||||
if in_ext == '.dot':
|
if in_ext == '.dot':
|
||||||
|
|
||||||
if not dot_cmd:
|
if not dot_cmd:
|
||||||
app.verbose("dot from graphviz not available / include DOT raw.")
|
kernellog.verbose(app,
|
||||||
|
"dot from graphviz not available / include DOT raw.")
|
||||||
img_node.replace_self(file2literal(src_fname))
|
img_node.replace_self(file2literal(src_fname))
|
||||||
|
|
||||||
elif translator.builder.format == 'latex':
|
elif translator.builder.format == 'latex':
|
||||||
@@ -252,7 +255,8 @@ def convert_image(img_node, translator, src_fname=None):
|
|||||||
|
|
||||||
if translator.builder.format == 'latex':
|
if translator.builder.format == 'latex':
|
||||||
if convert_cmd is None:
|
if convert_cmd is None:
|
||||||
app.verbose("no SVG to PDF conversion available / include SVG raw.")
|
kernellog.verbose(app,
|
||||||
|
"no SVG to PDF conversion available / include SVG raw.")
|
||||||
img_node.replace_self(file2literal(src_fname))
|
img_node.replace_self(file2literal(src_fname))
|
||||||
else:
|
else:
|
||||||
dst_fname = path.join(translator.builder.outdir, fname + '.pdf')
|
dst_fname = path.join(translator.builder.outdir, fname + '.pdf')
|
||||||
@@ -265,18 +269,19 @@ def convert_image(img_node, translator, src_fname=None):
|
|||||||
_name = dst_fname[len(translator.builder.outdir) + 1:]
|
_name = dst_fname[len(translator.builder.outdir) + 1:]
|
||||||
|
|
||||||
if isNewer(dst_fname, src_fname):
|
if isNewer(dst_fname, src_fname):
|
||||||
app.verbose("convert: {out}/%s already exists and is newer" % _name)
|
kernellog.verbose(app,
|
||||||
|
"convert: {out}/%s already exists and is newer" % _name)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
ok = False
|
ok = False
|
||||||
mkdir(path.dirname(dst_fname))
|
mkdir(path.dirname(dst_fname))
|
||||||
|
|
||||||
if in_ext == '.dot':
|
if in_ext == '.dot':
|
||||||
app.verbose('convert DOT to: {out}/' + _name)
|
kernellog.verbose(app, 'convert DOT to: {out}/' + _name)
|
||||||
ok = dot2format(app, src_fname, dst_fname)
|
ok = dot2format(app, src_fname, dst_fname)
|
||||||
|
|
||||||
elif in_ext == '.svg':
|
elif in_ext == '.svg':
|
||||||
app.verbose('convert SVG to: {out}/' + _name)
|
kernellog.verbose(app, 'convert SVG to: {out}/' + _name)
|
||||||
ok = svg2pdf(app, src_fname, dst_fname)
|
ok = svg2pdf(app, src_fname, dst_fname)
|
||||||
|
|
||||||
if not ok:
|
if not ok:
|
||||||
@@ -305,7 +310,8 @@ def dot2format(app, dot_fname, out_fname):
|
|||||||
with open(out_fname, "w") as out:
|
with open(out_fname, "w") as out:
|
||||||
exit_code = subprocess.call(cmd, stdout = out)
|
exit_code = subprocess.call(cmd, stdout = out)
|
||||||
if exit_code != 0:
|
if exit_code != 0:
|
||||||
app.warn("Error #%d when calling: %s" % (exit_code, " ".join(cmd)))
|
kernellog.warn(app,
|
||||||
|
"Error #%d when calling: %s" % (exit_code, " ".join(cmd)))
|
||||||
return bool(exit_code == 0)
|
return bool(exit_code == 0)
|
||||||
|
|
||||||
def svg2pdf(app, svg_fname, pdf_fname):
|
def svg2pdf(app, svg_fname, pdf_fname):
|
||||||
@@ -322,7 +328,7 @@ def svg2pdf(app, svg_fname, pdf_fname):
|
|||||||
# use stdout and stderr from parent
|
# use stdout and stderr from parent
|
||||||
exit_code = subprocess.call(cmd)
|
exit_code = subprocess.call(cmd)
|
||||||
if exit_code != 0:
|
if exit_code != 0:
|
||||||
app.warn("Error #%d when calling: %s" % (exit_code, " ".join(cmd)))
|
kernellog.warn(app, "Error #%d when calling: %s" % (exit_code, " ".join(cmd)))
|
||||||
return bool(exit_code == 0)
|
return bool(exit_code == 0)
|
||||||
|
|
||||||
|
|
||||||
@@ -415,15 +421,15 @@ def visit_kernel_render(self, node):
|
|||||||
app = self.builder.app
|
app = self.builder.app
|
||||||
srclang = node.get('srclang')
|
srclang = node.get('srclang')
|
||||||
|
|
||||||
app.verbose('visit kernel-render node lang: "%s"' % (srclang))
|
kernellog.verbose(app, 'visit kernel-render node lang: "%s"' % (srclang))
|
||||||
|
|
||||||
tmp_ext = RENDER_MARKUP_EXT.get(srclang, None)
|
tmp_ext = RENDER_MARKUP_EXT.get(srclang, None)
|
||||||
if tmp_ext is None:
|
if tmp_ext is None:
|
||||||
app.warn('kernel-render: "%s" unknown / include raw.' % (srclang))
|
kernellog.warn(app, 'kernel-render: "%s" unknown / include raw.' % (srclang))
|
||||||
return
|
return
|
||||||
|
|
||||||
if not dot_cmd and tmp_ext == '.dot':
|
if not dot_cmd and tmp_ext == '.dot':
|
||||||
app.verbose("dot from graphviz not available / include raw.")
|
kernellog.verbose(app, "dot from graphviz not available / include raw.")
|
||||||
return
|
return
|
||||||
|
|
||||||
literal_block = node[0]
|
literal_block = node[0]
|
||||||
|
|||||||
+13
-53
@@ -76,70 +76,30 @@ Additional Information and userspace tools
|
|||||||
Requirements
|
Requirements
|
||||||
============
|
============
|
||||||
|
|
||||||
A host with a USB port. Ideally, either a UHCI (Intel) or OHCI
|
A host with a USB port running a Linux kernel with RIO 500 support enabled.
|
||||||
(Compaq and others) hardware port should work.
|
|
||||||
|
|
||||||
A Linux development kernel (2.3.x) with USB support enabled or a
|
The driver is a module called rio500, which should be automatically loaded
|
||||||
backported version to linux-2.2.x. See http://www.linux-usb.org for
|
as you plug in your device. If that fails you can manually load it with
|
||||||
more information on accomplishing this.
|
|
||||||
|
|
||||||
A Linux kernel with RIO 500 support enabled.
|
modprobe rio500
|
||||||
|
|
||||||
'lspci' which is only needed to determine the type of USB hardware
|
Udev should automatically create a device node as soon as plug in your device.
|
||||||
available in your machine.
|
If that fails, you can manually add a device for the USB rio500::
|
||||||
|
|
||||||
Configuration
|
|
||||||
|
|
||||||
Using `lspci -v`, determine the type of USB hardware available.
|
|
||||||
|
|
||||||
If you see something like::
|
|
||||||
|
|
||||||
USB Controller: ......
|
|
||||||
Flags: .....
|
|
||||||
I/O ports at ....
|
|
||||||
|
|
||||||
Then you have a UHCI based controller.
|
|
||||||
|
|
||||||
If you see something like::
|
|
||||||
|
|
||||||
USB Controller: .....
|
|
||||||
Flags: ....
|
|
||||||
Memory at .....
|
|
||||||
|
|
||||||
Then you have a OHCI based controller.
|
|
||||||
|
|
||||||
Using `make menuconfig` or your preferred method for configuring the
|
|
||||||
kernel, select 'Support for USB', 'OHCI/UHCI' depending on your
|
|
||||||
hardware (determined from the steps above), 'USB Diamond Rio500 support', and
|
|
||||||
'Preliminary USB device filesystem'. Compile and install the modules
|
|
||||||
(you may need to execute `depmod -a` to update the module
|
|
||||||
dependencies).
|
|
||||||
|
|
||||||
Add a device for the USB rio500::
|
|
||||||
|
|
||||||
mknod /dev/usb/rio500 c 180 64
|
mknod /dev/usb/rio500 c 180 64
|
||||||
|
|
||||||
Set appropriate permissions for /dev/usb/rio500 (don't forget about
|
In that case, set appropriate permissions for /dev/usb/rio500 (don't forget
|
||||||
group and world permissions). Both read and write permissions are
|
about group and world permissions). Both read and write permissions are
|
||||||
required for proper operation.
|
required for proper operation.
|
||||||
|
|
||||||
Load the appropriate modules (if compiled as modules):
|
|
||||||
|
|
||||||
OHCI::
|
|
||||||
|
|
||||||
modprobe usbcore
|
|
||||||
modprobe usb-ohci
|
|
||||||
modprobe rio500
|
|
||||||
|
|
||||||
UHCI::
|
|
||||||
|
|
||||||
modprobe usbcore
|
|
||||||
modprobe usb-uhci (or uhci)
|
|
||||||
modprobe rio500
|
|
||||||
|
|
||||||
That's it. The Rio500 Utils at: http://rio500.sourceforge.net should
|
That's it. The Rio500 Utils at: http://rio500.sourceforge.net should
|
||||||
be able to access the rio500.
|
be able to access the rio500.
|
||||||
|
|
||||||
|
Limits
|
||||||
|
======
|
||||||
|
|
||||||
|
You can use only a single rio500 device at a time with your computer.
|
||||||
|
|
||||||
Bugs
|
Bugs
|
||||||
====
|
====
|
||||||
|
|
||||||
|
|||||||
@@ -288,15 +288,17 @@ For instance if the device flags for device entries are:
|
|||||||
WRITE (1 << 62)
|
WRITE (1 << 62)
|
||||||
|
|
||||||
Now let say that device driver wants to fault with at least read a range then
|
Now let say that device driver wants to fault with at least read a range then
|
||||||
it does set:
|
it does set::
|
||||||
range->default_flags = (1 << 63)
|
|
||||||
|
range->default_flags = (1 << 63);
|
||||||
range->pfn_flags_mask = 0;
|
range->pfn_flags_mask = 0;
|
||||||
|
|
||||||
and calls hmm_range_fault() as described above. This will fill fault all page
|
and calls hmm_range_fault() as described above. This will fill fault all page
|
||||||
in the range with at least read permission.
|
in the range with at least read permission.
|
||||||
|
|
||||||
Now let say driver wants to do the same except for one page in the range for
|
Now let say driver wants to do the same except for one page in the range for
|
||||||
which its want to have write. Now driver set:
|
which its want to have write. Now driver set::
|
||||||
|
|
||||||
range->default_flags = (1 << 63);
|
range->default_flags = (1 << 63);
|
||||||
range->pfn_flags_mask = (1 << 62);
|
range->pfn_flags_mask = (1 << 62);
|
||||||
range->pfns[index_of_write] = (1 << 62);
|
range->pfns[index_of_write] = (1 << 62);
|
||||||
|
|||||||
+32
-5
@@ -696,6 +696,7 @@ F: drivers/input/mouse/alps.*
|
|||||||
ALTERA I2C CONTROLLER DRIVER
|
ALTERA I2C CONTROLLER DRIVER
|
||||||
M: Thor Thayer <thor.thayer@linux.intel.com>
|
M: Thor Thayer <thor.thayer@linux.intel.com>
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
F: Documentation/devicetree/bindings/i2c/i2c-altera.txt
|
||||||
F: drivers/i2c/busses/i2c-altera.c
|
F: drivers/i2c/busses/i2c-altera.c
|
||||||
|
|
||||||
ALTERA MAILBOX DRIVER
|
ALTERA MAILBOX DRIVER
|
||||||
@@ -1174,6 +1175,7 @@ S: Maintained
|
|||||||
F: Documentation/devicetree/bindings/arm/arm-boards
|
F: Documentation/devicetree/bindings/arm/arm-boards
|
||||||
F: Documentation/devicetree/bindings/auxdisplay/arm-charlcd.txt
|
F: Documentation/devicetree/bindings/auxdisplay/arm-charlcd.txt
|
||||||
F: Documentation/devicetree/bindings/clock/arm-integrator.txt
|
F: Documentation/devicetree/bindings/clock/arm-integrator.txt
|
||||||
|
F: Documentation/devicetree/bindings/i2c/i2c-versatile.txt
|
||||||
F: Documentation/devicetree/bindings/interrupt-controller/arm,versatile-fpga-irq.txt
|
F: Documentation/devicetree/bindings/interrupt-controller/arm,versatile-fpga-irq.txt
|
||||||
F: Documentation/devicetree/bindings/mtd/arm-versatile.txt
|
F: Documentation/devicetree/bindings/mtd/arm-versatile.txt
|
||||||
F: arch/arm/mach-integrator/
|
F: arch/arm/mach-integrator/
|
||||||
@@ -1781,6 +1783,7 @@ ARM/LPC18XX ARCHITECTURE
|
|||||||
M: Vladimir Zapolskiy <vz@mleia.com>
|
M: Vladimir Zapolskiy <vz@mleia.com>
|
||||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
F: Documentation/devicetree/bindings/i2c/i2c-lpc2k.txt
|
||||||
F: arch/arm/boot/dts/lpc43*
|
F: arch/arm/boot/dts/lpc43*
|
||||||
F: drivers/i2c/busses/i2c-lpc2k.c
|
F: drivers/i2c/busses/i2c-lpc2k.c
|
||||||
F: drivers/memory/pl172.c
|
F: drivers/memory/pl172.c
|
||||||
@@ -1794,6 +1797,7 @@ M: Sylvain Lemieux <slemieux.tyco@gmail.com>
|
|||||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
T: git git://github.com/vzapolskiy/linux-lpc32xx.git
|
T: git git://github.com/vzapolskiy/linux-lpc32xx.git
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
F: Documentation/devicetree/bindings/i2c/i2c-pnx.txt
|
||||||
F: arch/arm/boot/dts/lpc32*
|
F: arch/arm/boot/dts/lpc32*
|
||||||
F: arch/arm/mach-lpc32xx/
|
F: arch/arm/mach-lpc32xx/
|
||||||
F: drivers/i2c/busses/i2c-pnx.c
|
F: drivers/i2c/busses/i2c-pnx.c
|
||||||
@@ -1918,6 +1922,8 @@ ARM/NOMADIK/U300/Ux500 ARCHITECTURES
|
|||||||
M: Linus Walleij <linus.walleij@linaro.org>
|
M: Linus Walleij <linus.walleij@linaro.org>
|
||||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
F: Documentation/devicetree/bindings/i2c/i2c-nomadik.txt
|
||||||
|
F: Documentation/devicetree/bindings/i2c/i2c-stu300.txt
|
||||||
F: arch/arm/mach-nomadik/
|
F: arch/arm/mach-nomadik/
|
||||||
F: arch/arm/mach-u300/
|
F: arch/arm/mach-u300/
|
||||||
F: arch/arm/mach-ux500/
|
F: arch/arm/mach-ux500/
|
||||||
@@ -2140,6 +2146,7 @@ L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
|||||||
L: linux-rockchip@lists.infradead.org
|
L: linux-rockchip@lists.infradead.org
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/mmind/linux-rockchip.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/mmind/linux-rockchip.git
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
F: Documentation/devicetree/bindings/i2c/i2c-rk3x.txt
|
||||||
F: arch/arm/boot/dts/rk3*
|
F: arch/arm/boot/dts/rk3*
|
||||||
F: arch/arm/boot/dts/rv1108*
|
F: arch/arm/boot/dts/rv1108*
|
||||||
F: arch/arm/mach-rockchip/
|
F: arch/arm/mach-rockchip/
|
||||||
@@ -2275,6 +2282,7 @@ M: Patrice Chotard <patrice.chotard@st.com>
|
|||||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
W: http://www.stlinux.com
|
W: http://www.stlinux.com
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
F: Documentation/devicetree/bindings/i2c/i2c-st.txt
|
||||||
F: arch/arm/mach-sti/
|
F: arch/arm/mach-sti/
|
||||||
F: arch/arm/boot/dts/sti*
|
F: arch/arm/boot/dts/sti*
|
||||||
F: drivers/char/hw_random/st-rng.c
|
F: drivers/char/hw_random/st-rng.c
|
||||||
@@ -2466,6 +2474,7 @@ ARM/VT8500 ARM ARCHITECTURE
|
|||||||
M: Tony Prisk <linux@prisktech.co.nz>
|
M: Tony Prisk <linux@prisktech.co.nz>
|
||||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
F: Documentation/devicetree/bindings/i2c/i2c-wmt.txt
|
||||||
F: arch/arm/mach-vt8500/
|
F: arch/arm/mach-vt8500/
|
||||||
F: drivers/clocksource/timer-vt8500.c
|
F: drivers/clocksource/timer-vt8500.c
|
||||||
F: drivers/i2c/busses/i2c-wmt.c
|
F: drivers/i2c/busses/i2c-wmt.c
|
||||||
@@ -2531,6 +2540,8 @@ F: drivers/cpuidle/cpuidle-zynq.c
|
|||||||
F: drivers/block/xsysace.c
|
F: drivers/block/xsysace.c
|
||||||
N: zynq
|
N: zynq
|
||||||
N: xilinx
|
N: xilinx
|
||||||
|
F: Documentation/devicetree/bindings/i2c/i2c-cadence.txt
|
||||||
|
F: Documentation/devicetree/bindings/i2c/i2c-xiic.txt
|
||||||
F: drivers/clocksource/timer-cadence-ttc.c
|
F: drivers/clocksource/timer-cadence-ttc.c
|
||||||
F: drivers/i2c/busses/i2c-cadence.c
|
F: drivers/i2c/busses/i2c-cadence.c
|
||||||
F: drivers/mmc/host/sdhci-of-arasan.c
|
F: drivers/mmc/host/sdhci-of-arasan.c
|
||||||
@@ -3049,8 +3060,9 @@ S: Maintained
|
|||||||
F: arch/riscv/net/
|
F: arch/riscv/net/
|
||||||
|
|
||||||
BPF JIT for S390
|
BPF JIT for S390
|
||||||
M: Martin Schwidefsky <schwidefsky@de.ibm.com>
|
|
||||||
M: Heiko Carstens <heiko.carstens@de.ibm.com>
|
M: Heiko Carstens <heiko.carstens@de.ibm.com>
|
||||||
|
M: Vasily Gorbik <gor@linux.ibm.com>
|
||||||
|
M: Christian Borntraeger <borntraeger@de.ibm.com>
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
L: bpf@vger.kernel.org
|
L: bpf@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
@@ -5128,6 +5140,13 @@ S: Maintained
|
|||||||
F: drivers/gpu/drm/tinydrm/st7735r.c
|
F: drivers/gpu/drm/tinydrm/st7735r.c
|
||||||
F: Documentation/devicetree/bindings/display/sitronix,st7735r.txt
|
F: Documentation/devicetree/bindings/display/sitronix,st7735r.txt
|
||||||
|
|
||||||
|
DRM DRIVER FOR ST-ERICSSON MCDE
|
||||||
|
M: Linus Walleij <linus.walleij@linaro.org>
|
||||||
|
T: git git://anongit.freedesktop.org/drm/drm-misc
|
||||||
|
S: Maintained
|
||||||
|
F: drivers/gpu/drm/mcde/
|
||||||
|
F: Documentation/devicetree/bindings/display/ste,mcde.txt
|
||||||
|
|
||||||
DRM DRIVER FOR TDFX VIDEO CARDS
|
DRM DRIVER FOR TDFX VIDEO CARDS
|
||||||
S: Orphan / Obsolete
|
S: Orphan / Obsolete
|
||||||
F: drivers/gpu/drm/tdfx/
|
F: drivers/gpu/drm/tdfx/
|
||||||
@@ -5172,6 +5191,7 @@ T: git git://people.freedesktop.org/~thomash/linux
|
|||||||
S: Supported
|
S: Supported
|
||||||
F: drivers/gpu/drm/vmwgfx/
|
F: drivers/gpu/drm/vmwgfx/
|
||||||
F: include/uapi/drm/vmwgfx_drm.h
|
F: include/uapi/drm/vmwgfx_drm.h
|
||||||
|
F: mm/as_dirty_helpers.c
|
||||||
|
|
||||||
DRM DRIVERS
|
DRM DRIVERS
|
||||||
M: David Airlie <airlied@linux.ie>
|
M: David Airlie <airlied@linux.ie>
|
||||||
@@ -7341,6 +7361,7 @@ I2C MV64XXX MARVELL AND ALLWINNER DRIVER
|
|||||||
M: Gregory CLEMENT <gregory.clement@bootlin.com>
|
M: Gregory CLEMENT <gregory.clement@bootlin.com>
|
||||||
L: linux-i2c@vger.kernel.org
|
L: linux-i2c@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
F: Documentation/devicetree/bindings/i2c/i2c-mv64xxx.txt
|
||||||
F: drivers/i2c/busses/i2c-mv64xxx.c
|
F: drivers/i2c/busses/i2c-mv64xxx.c
|
||||||
|
|
||||||
I2C OVER PARALLEL PORT
|
I2C OVER PARALLEL PORT
|
||||||
@@ -11724,6 +11745,7 @@ M: Peter Korsgaard <peter@korsgaard.com>
|
|||||||
M: Andrew Lunn <andrew@lunn.ch>
|
M: Andrew Lunn <andrew@lunn.ch>
|
||||||
L: linux-i2c@vger.kernel.org
|
L: linux-i2c@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
F: Documentation/devicetree/bindings/i2c/i2c-ocores.txt
|
||||||
F: Documentation/i2c/busses/i2c-ocores
|
F: Documentation/i2c/busses/i2c-ocores
|
||||||
F: drivers/i2c/busses/i2c-ocores.c
|
F: drivers/i2c/busses/i2c-ocores.c
|
||||||
F: include/linux/platform_data/i2c-ocores.h
|
F: include/linux/platform_data/i2c-ocores.h
|
||||||
@@ -13043,7 +13065,6 @@ F: Documentation/devicetree/bindings/net/qcom,dwmac.txt
|
|||||||
|
|
||||||
QUALCOMM GENERIC INTERFACE I2C DRIVER
|
QUALCOMM GENERIC INTERFACE I2C DRIVER
|
||||||
M: Alok Chauhan <alokc@codeaurora.org>
|
M: Alok Chauhan <alokc@codeaurora.org>
|
||||||
M: Karthikeyan Ramasubramanian <kramasub@codeaurora.org>
|
|
||||||
L: linux-i2c@vger.kernel.org
|
L: linux-i2c@vger.kernel.org
|
||||||
L: linux-arm-msm@vger.kernel.org
|
L: linux-arm-msm@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
@@ -13363,6 +13384,7 @@ F: drivers/clk/renesas/
|
|||||||
RENESAS EMEV2 I2C DRIVER
|
RENESAS EMEV2 I2C DRIVER
|
||||||
M: Wolfram Sang <wsa+renesas@sang-engineering.com>
|
M: Wolfram Sang <wsa+renesas@sang-engineering.com>
|
||||||
S: Supported
|
S: Supported
|
||||||
|
F: Documentation/devicetree/bindings/i2c/i2c-emev2.txt
|
||||||
F: drivers/i2c/busses/i2c-emev2.c
|
F: drivers/i2c/busses/i2c-emev2.c
|
||||||
|
|
||||||
RENESAS ETHERNET DRIVERS
|
RENESAS ETHERNET DRIVERS
|
||||||
@@ -13384,6 +13406,8 @@ F: drivers/iio/adc/rcar-gyroadc.c
|
|||||||
RENESAS R-CAR I2C DRIVERS
|
RENESAS R-CAR I2C DRIVERS
|
||||||
M: Wolfram Sang <wsa+renesas@sang-engineering.com>
|
M: Wolfram Sang <wsa+renesas@sang-engineering.com>
|
||||||
S: Supported
|
S: Supported
|
||||||
|
F: Documentation/devicetree/bindings/i2c/i2c-rcar.txt
|
||||||
|
F: Documentation/devicetree/bindings/i2c/i2c-sh_mobile.txt
|
||||||
F: drivers/i2c/busses/i2c-rcar.c
|
F: drivers/i2c/busses/i2c-rcar.c
|
||||||
F: drivers/i2c/busses/i2c-sh_mobile.c
|
F: drivers/i2c/busses/i2c-sh_mobile.c
|
||||||
|
|
||||||
@@ -13614,8 +13638,9 @@ S: Maintained
|
|||||||
F: drivers/video/fbdev/savage/
|
F: drivers/video/fbdev/savage/
|
||||||
|
|
||||||
S390
|
S390
|
||||||
M: Martin Schwidefsky <schwidefsky@de.ibm.com>
|
|
||||||
M: Heiko Carstens <heiko.carstens@de.ibm.com>
|
M: Heiko Carstens <heiko.carstens@de.ibm.com>
|
||||||
|
M: Vasily Gorbik <gor@linux.ibm.com>
|
||||||
|
M: Christian Borntraeger <borntraeger@de.ibm.com>
|
||||||
L: linux-s390@vger.kernel.org
|
L: linux-s390@vger.kernel.org
|
||||||
W: http://www.ibm.com/developerworks/linux/linux390/
|
W: http://www.ibm.com/developerworks/linux/linux390/
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux.git
|
||||||
@@ -14977,7 +15002,7 @@ S: Odd Fixes
|
|||||||
F: drivers/net/ethernet/adaptec/starfire*
|
F: drivers/net/ethernet/adaptec/starfire*
|
||||||
|
|
||||||
STEC S1220 SKD DRIVER
|
STEC S1220 SKD DRIVER
|
||||||
M: Bart Van Assche <bart.vanassche@wdc.com>
|
M: Damien Le Moal <Damien.LeMoal@wdc.com>
|
||||||
L: linux-block@vger.kernel.org
|
L: linux-block@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/block/skd*[ch]
|
F: drivers/block/skd*[ch]
|
||||||
@@ -15672,6 +15697,7 @@ R: Bartosz Golaszewski <bgolaszewski@baylibre.com>
|
|||||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/nsekhar/linux-davinci.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/nsekhar/linux-davinci.git
|
||||||
S: Supported
|
S: Supported
|
||||||
|
F: Documentation/devicetree/bindings/i2c/i2c-davinci.txt
|
||||||
F: arch/arm/mach-davinci/
|
F: arch/arm/mach-davinci/
|
||||||
F: drivers/i2c/busses/i2c-davinci.c
|
F: drivers/i2c/busses/i2c-davinci.c
|
||||||
F: arch/arm/boot/dts/da850*
|
F: arch/arm/boot/dts/da850*
|
||||||
@@ -17293,7 +17319,7 @@ F: Documentation/ABI/stable/sysfs-hypervisor-xen
|
|||||||
F: Documentation/ABI/testing/sysfs-hypervisor-xen
|
F: Documentation/ABI/testing/sysfs-hypervisor-xen
|
||||||
|
|
||||||
XEN NETWORK BACKEND DRIVER
|
XEN NETWORK BACKEND DRIVER
|
||||||
M: Wei Liu <wei.liu2@citrix.com>
|
M: Wei Liu <wei.liu@kernel.org>
|
||||||
M: Paul Durrant <paul.durrant@citrix.com>
|
M: Paul Durrant <paul.durrant@citrix.com>
|
||||||
L: xen-devel@lists.xenproject.org (moderated for non-subscribers)
|
L: xen-devel@lists.xenproject.org (moderated for non-subscribers)
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
@@ -17375,6 +17401,7 @@ M: Jan Glauber <jglauber@cavium.com>
|
|||||||
L: linux-i2c@vger.kernel.org
|
L: linux-i2c@vger.kernel.org
|
||||||
W: http://www.cavium.com
|
W: http://www.cavium.com
|
||||||
S: Supported
|
S: Supported
|
||||||
|
F: Documentation/devicetree/bindings/i2c/i2c-xlp9xx.txt
|
||||||
F: drivers/i2c/busses/i2c-xlp9xx.c
|
F: drivers/i2c/busses/i2c-xlp9xx.c
|
||||||
|
|
||||||
XRA1403 GPIO EXPANDER
|
XRA1403 GPIO EXPANDER
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
VERSION = 5
|
VERSION = 5
|
||||||
PATCHLEVEL = 2
|
PATCHLEVEL = 2
|
||||||
SUBLEVEL = 0
|
SUBLEVEL = 0
|
||||||
EXTRAVERSION = -rc2
|
EXTRAVERSION = -rc5
|
||||||
NAME = Golden Lions
|
NAME = Golden Lions
|
||||||
|
|
||||||
# *DOCUMENTATION*
|
# *DOCUMENTATION*
|
||||||
@@ -1228,9 +1228,8 @@ kselftest-clean:
|
|||||||
PHONY += kselftest-merge
|
PHONY += kselftest-merge
|
||||||
kselftest-merge:
|
kselftest-merge:
|
||||||
$(if $(wildcard $(objtree)/.config),, $(error No .config exists, config your kernel first!))
|
$(if $(wildcard $(objtree)/.config),, $(error No .config exists, config your kernel first!))
|
||||||
$(Q)$(CONFIG_SHELL) $(srctree)/scripts/kconfig/merge_config.sh \
|
$(Q)find $(srctree)/tools/testing/selftests -name config | \
|
||||||
-m $(objtree)/.config \
|
xargs $(srctree)/scripts/kconfig/merge_config.sh -m $(objtree)/.config
|
||||||
$(srctree)/tools/testing/selftests/*/config
|
|
||||||
+$(Q)$(MAKE) -f $(srctree)/Makefile olddefconfig
|
+$(Q)$(MAKE) -f $(srctree)/Makefile olddefconfig
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -1,10 +1,6 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
/*
|
/*
|
||||||
* Copyright (C) Paul Mackerras 1997.
|
* Copyright (C) Paul Mackerras 1997.
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation; either version
|
|
||||||
* 2 of the License, or (at your option) any later version.
|
|
||||||
*/
|
*/
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
|
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||||
/*
|
/*
|
||||||
* Arch specific extensions to struct device
|
* Arch specific extensions to struct device
|
||||||
*
|
|
||||||
* This file is released under the GPLv2
|
|
||||||
*/
|
*/
|
||||||
#include <asm-generic/device.h>
|
#include <asm-generic/device.h>
|
||||||
|
|
||||||
|
|||||||
@@ -1 +1,2 @@
|
|||||||
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
generated-y += unistd_32.h
|
generated-y += unistd_32.h
|
||||||
|
|||||||
@@ -1,19 +1,7 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
/* Kernel module help for Alpha.
|
/* Kernel module help for Alpha.
|
||||||
Copyright (C) 2002 Richard Henderson.
|
Copyright (C) 2002 Richard Henderson.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*/
|
*/
|
||||||
#include <linux/moduleloader.h>
|
#include <linux/moduleloader.h>
|
||||||
#include <linux/elf.h>
|
#include <linux/elf.h>
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
/*
|
/*
|
||||||
* srm_env.c - Access to SRM environment
|
* srm_env.c - Access to SRM environment
|
||||||
* variables through linux' procfs
|
* variables through linux' procfs
|
||||||
@@ -9,23 +10,6 @@
|
|||||||
* <J.A.K.Mouw@its.tudelft.nl>. It is based on an idea
|
* <J.A.K.Mouw@its.tudelft.nl>. It is based on an idea
|
||||||
* provided by DEC^WCompaq^WIntel's "Jumpstart" CD. They
|
* provided by DEC^WCompaq^WIntel's "Jumpstart" CD. They
|
||||||
* included a patch like this as well. Thanks for idea!
|
* included a patch like this as well. Thanks for idea!
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute
|
|
||||||
* it and/or modify it under the terms of the GNU General
|
|
||||||
* Public License version 2 as published by the Free Software
|
|
||||||
* Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be
|
|
||||||
* useful, but WITHOUT ANY WARRANTY; without even the implied
|
|
||||||
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
||||||
* PURPOSE. See the GNU General Public License for more
|
|
||||||
* details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public
|
|
||||||
* License along with this program; if not, write to the
|
|
||||||
* Free Software Foundation, Inc., 59 Temple Place,
|
|
||||||
* Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
|
|||||||
@@ -1,2 +1,3 @@
|
|||||||
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
obj-y += kernel/
|
obj-y += kernel/
|
||||||
obj-y += mm/
|
obj-y += mm/
|
||||||
|
|||||||
@@ -1,22 +1,10 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
/*
|
/*
|
||||||
* Abilis Systems TB100 SOC device tree
|
* Abilis Systems TB100 SOC device tree
|
||||||
*
|
*
|
||||||
* Copyright (C) Abilis Systems 2013
|
* Copyright (C) Abilis Systems 2013
|
||||||
*
|
*
|
||||||
* Author: Christian Ruppert <christian.ruppert@abilis.com>
|
* Author: Christian Ruppert <christian.ruppert@abilis.com>
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License version 2 as
|
|
||||||
* published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/include/ "abilis_tb10x.dtsi"
|
/include/ "abilis_tb10x.dtsi"
|
||||||
|
|||||||
@@ -1,22 +1,10 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
/*
|
/*
|
||||||
* Abilis Systems TB100 Development Kit PCB device tree
|
* Abilis Systems TB100 Development Kit PCB device tree
|
||||||
*
|
*
|
||||||
* Copyright (C) Abilis Systems 2013
|
* Copyright (C) Abilis Systems 2013
|
||||||
*
|
*
|
||||||
* Author: Christian Ruppert <christian.ruppert@abilis.com>
|
* Author: Christian Ruppert <christian.ruppert@abilis.com>
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License version 2 as
|
|
||||||
* published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/dts-v1/;
|
/dts-v1/;
|
||||||
|
|||||||
@@ -1,22 +1,10 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
/*
|
/*
|
||||||
* Abilis Systems TB101 SOC device tree
|
* Abilis Systems TB101 SOC device tree
|
||||||
*
|
*
|
||||||
* Copyright (C) Abilis Systems 2013
|
* Copyright (C) Abilis Systems 2013
|
||||||
*
|
*
|
||||||
* Author: Christian Ruppert <christian.ruppert@abilis.com>
|
* Author: Christian Ruppert <christian.ruppert@abilis.com>
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License version 2 as
|
|
||||||
* published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/include/ "abilis_tb10x.dtsi"
|
/include/ "abilis_tb10x.dtsi"
|
||||||
|
|||||||
@@ -1,22 +1,10 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
/*
|
/*
|
||||||
* Abilis Systems TB101 Development Kit PCB device tree
|
* Abilis Systems TB101 Development Kit PCB device tree
|
||||||
*
|
*
|
||||||
* Copyright (C) Abilis Systems 2013
|
* Copyright (C) Abilis Systems 2013
|
||||||
*
|
*
|
||||||
* Author: Christian Ruppert <christian.ruppert@abilis.com>
|
* Author: Christian Ruppert <christian.ruppert@abilis.com>
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License version 2 as
|
|
||||||
* published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/dts-v1/;
|
/dts-v1/;
|
||||||
|
|||||||
@@ -1,22 +1,10 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
/*
|
/*
|
||||||
* Abilis Systems TB10X SOC device tree
|
* Abilis Systems TB10X SOC device tree
|
||||||
*
|
*
|
||||||
* Copyright (C) Abilis Systems 2013
|
* Copyright (C) Abilis Systems 2013
|
||||||
*
|
*
|
||||||
* Author: Christian Ruppert <christian.ruppert@abilis.com>
|
* Author: Christian Ruppert <christian.ruppert@abilis.com>
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License version 2 as
|
|
||||||
* published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,17 +1,6 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
/*
|
/*
|
||||||
* Copyright(c) 2015 EZchip Technologies.
|
* Copyright(c) 2015 EZchip Technologies.
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
|
||||||
* under the terms and conditions of the GNU General Public License,
|
|
||||||
* version 2, as published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
||||||
* more details.
|
|
||||||
*
|
|
||||||
* The full GNU General Public License is included in this distribution in
|
|
||||||
* the file called "COPYING".
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/dts-v1/;
|
/dts-v1/;
|
||||||
|
|||||||
@@ -11,7 +11,6 @@
|
|||||||
*/
|
*/
|
||||||
/dts-v1/;
|
/dts-v1/;
|
||||||
|
|
||||||
#include <dt-bindings/net/ti-dp83867.h>
|
|
||||||
#include <dt-bindings/reset/snps,hsdk-reset.h>
|
#include <dt-bindings/reset/snps,hsdk-reset.h>
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
@@ -167,6 +166,24 @@
|
|||||||
#clock-cells = <0>;
|
#clock-cells = <0>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
gpu_core_clk: gpu-core-clk {
|
||||||
|
compatible = "fixed-clock";
|
||||||
|
clock-frequency = <400000000>;
|
||||||
|
#clock-cells = <0>;
|
||||||
|
};
|
||||||
|
|
||||||
|
gpu_dma_clk: gpu-dma-clk {
|
||||||
|
compatible = "fixed-clock";
|
||||||
|
clock-frequency = <400000000>;
|
||||||
|
#clock-cells = <0>;
|
||||||
|
};
|
||||||
|
|
||||||
|
gpu_cfg_clk: gpu-cfg-clk {
|
||||||
|
compatible = "fixed-clock";
|
||||||
|
clock-frequency = <200000000>;
|
||||||
|
#clock-cells = <0>;
|
||||||
|
};
|
||||||
|
|
||||||
dmac_core_clk: dmac-core-clk {
|
dmac_core_clk: dmac-core-clk {
|
||||||
compatible = "fixed-clock";
|
compatible = "fixed-clock";
|
||||||
clock-frequency = <400000000>;
|
clock-frequency = <400000000>;
|
||||||
@@ -187,6 +204,7 @@
|
|||||||
interrupt-names = "macirq";
|
interrupt-names = "macirq";
|
||||||
phy-mode = "rgmii";
|
phy-mode = "rgmii";
|
||||||
snps,pbl = <32>;
|
snps,pbl = <32>;
|
||||||
|
snps,multicast-filter-bins = <256>;
|
||||||
clocks = <&gmacclk>;
|
clocks = <&gmacclk>;
|
||||||
clock-names = "stmmaceth";
|
clock-names = "stmmaceth";
|
||||||
phy-handle = <&phy0>;
|
phy-handle = <&phy0>;
|
||||||
@@ -195,15 +213,15 @@
|
|||||||
mac-address = [00 00 00 00 00 00]; /* Filled in by U-Boot */
|
mac-address = [00 00 00 00 00 00]; /* Filled in by U-Boot */
|
||||||
dma-coherent;
|
dma-coherent;
|
||||||
|
|
||||||
|
tx-fifo-depth = <4096>;
|
||||||
|
rx-fifo-depth = <4096>;
|
||||||
|
|
||||||
mdio {
|
mdio {
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
compatible = "snps,dwmac-mdio";
|
compatible = "snps,dwmac-mdio";
|
||||||
phy0: ethernet-phy@0 {
|
phy0: ethernet-phy@0 {
|
||||||
reg = <0>;
|
reg = <0>;
|
||||||
ti,rx-internal-delay = <DP83867_RGMIIDCTL_2_00_NS>;
|
|
||||||
ti,tx-internal-delay = <DP83867_RGMIIDCTL_2_00_NS>;
|
|
||||||
ti,fifo-depth = <DP83867_PHYCR_FIFO_DEPTH_4_B_NIB>;
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@@ -237,6 +255,14 @@
|
|||||||
dma-coherent;
|
dma-coherent;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
creg_gpio: gpio@14b0 {
|
||||||
|
compatible = "snps,creg-gpio-hsdk";
|
||||||
|
reg = <0x14b0 0x4>;
|
||||||
|
gpio-controller;
|
||||||
|
#gpio-cells = <2>;
|
||||||
|
ngpios = <2>;
|
||||||
|
};
|
||||||
|
|
||||||
gpio: gpio@3000 {
|
gpio: gpio@3000 {
|
||||||
compatible = "snps,dw-apb-gpio";
|
compatible = "snps,dw-apb-gpio";
|
||||||
reg = <0x3000 0x20>;
|
reg = <0x3000 0x20>;
|
||||||
@@ -252,6 +278,17 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
gpu_3d: gpu@90000 {
|
||||||
|
compatible = "vivante,gc";
|
||||||
|
reg = <0x90000 0x4000>;
|
||||||
|
clocks = <&gpu_dma_clk>,
|
||||||
|
<&gpu_cfg_clk>,
|
||||||
|
<&gpu_core_clk>,
|
||||||
|
<&gpu_core_clk>;
|
||||||
|
clock-names = "bus", "reg", "core", "shader";
|
||||||
|
interrupts = <28>;
|
||||||
|
};
|
||||||
|
|
||||||
dmac: dmac@80000 {
|
dmac: dmac@80000 {
|
||||||
compatible = "snps,axi-dma-1.01a";
|
compatible = "snps,axi-dma-1.01a";
|
||||||
reg = <0x80000 0x400>;
|
reg = <0x80000 0x400>;
|
||||||
|
|||||||
@@ -49,10 +49,12 @@ CONFIG_SERIAL_OF_PLATFORM=y
|
|||||||
CONFIG_GPIOLIB=y
|
CONFIG_GPIOLIB=y
|
||||||
CONFIG_GPIO_SYSFS=y
|
CONFIG_GPIO_SYSFS=y
|
||||||
CONFIG_GPIO_DWAPB=y
|
CONFIG_GPIO_DWAPB=y
|
||||||
|
CONFIG_GPIO_SNPS_CREG=y
|
||||||
# CONFIG_HWMON is not set
|
# CONFIG_HWMON is not set
|
||||||
CONFIG_DRM=y
|
CONFIG_DRM=y
|
||||||
# CONFIG_DRM_FBDEV_EMULATION is not set
|
# CONFIG_DRM_FBDEV_EMULATION is not set
|
||||||
CONFIG_DRM_UDL=y
|
CONFIG_DRM_UDL=y
|
||||||
|
CONFIG_DRM_ETNAVIV=y
|
||||||
CONFIG_FB=y
|
CONFIG_FB=y
|
||||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||||
CONFIG_USB_EHCI_HCD=y
|
CONFIG_USB_EHCI_HCD=y
|
||||||
@@ -64,7 +66,6 @@ CONFIG_MMC=y
|
|||||||
CONFIG_MMC_SDHCI=y
|
CONFIG_MMC_SDHCI=y
|
||||||
CONFIG_MMC_SDHCI_PLTFM=y
|
CONFIG_MMC_SDHCI_PLTFM=y
|
||||||
CONFIG_MMC_DW=y
|
CONFIG_MMC_DW=y
|
||||||
# CONFIG_IOMMU_SUPPORT is not set
|
|
||||||
CONFIG_EXT3_FS=y
|
CONFIG_EXT3_FS=y
|
||||||
CONFIG_VFAT_FS=y
|
CONFIG_VFAT_FS=y
|
||||||
CONFIG_TMPFS=y
|
CONFIG_TMPFS=y
|
||||||
|
|||||||
@@ -92,8 +92,11 @@ __cmpxchg(volatile void *ptr, unsigned long expected, unsigned long new)
|
|||||||
|
|
||||||
#endif /* CONFIG_ARC_HAS_LLSC */
|
#endif /* CONFIG_ARC_HAS_LLSC */
|
||||||
|
|
||||||
#define cmpxchg(ptr, o, n) ((typeof(*(ptr)))__cmpxchg((ptr), \
|
#define cmpxchg(ptr, o, n) ({ \
|
||||||
(unsigned long)(o), (unsigned long)(n)))
|
(typeof(*(ptr)))__cmpxchg((ptr), \
|
||||||
|
(unsigned long)(o), \
|
||||||
|
(unsigned long)(n)); \
|
||||||
|
})
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* atomic_cmpxchg is same as cmpxchg
|
* atomic_cmpxchg is same as cmpxchg
|
||||||
@@ -198,8 +201,11 @@ static inline unsigned long __xchg(unsigned long val, volatile void *ptr,
|
|||||||
return __xchg_bad_pointer();
|
return __xchg_bad_pointer();
|
||||||
}
|
}
|
||||||
|
|
||||||
#define xchg(ptr, with) ((typeof(*(ptr)))__xchg((unsigned long)(with), (ptr), \
|
#define xchg(ptr, with) ({ \
|
||||||
sizeof(*(ptr))))
|
(typeof(*(ptr)))__xchg((unsigned long)(with), \
|
||||||
|
(ptr), \
|
||||||
|
sizeof(*(ptr))); \
|
||||||
|
})
|
||||||
|
|
||||||
#endif /* CONFIG_ARC_PLAT_EZNPS */
|
#endif /* CONFIG_ARC_PLAT_EZNPS */
|
||||||
|
|
||||||
|
|||||||
@@ -1 +1,2 @@
|
|||||||
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
generic-y += ucontext.h
|
generic-y += ucontext.h
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com)
|
* Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com)
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License version 2 as
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/ptrace.h>
|
#include <linux/ptrace.h>
|
||||||
|
|||||||
+3
-6
@@ -66,7 +66,7 @@ void do_page_fault(unsigned long address, struct pt_regs *regs)
|
|||||||
struct vm_area_struct *vma = NULL;
|
struct vm_area_struct *vma = NULL;
|
||||||
struct task_struct *tsk = current;
|
struct task_struct *tsk = current;
|
||||||
struct mm_struct *mm = tsk->mm;
|
struct mm_struct *mm = tsk->mm;
|
||||||
int si_code = 0;
|
int si_code = SEGV_MAPERR;
|
||||||
int ret;
|
int ret;
|
||||||
vm_fault_t fault;
|
vm_fault_t fault;
|
||||||
int write = regs->ecr_cause & ECR_C_PROTV_STORE; /* ST/EX */
|
int write = regs->ecr_cause & ECR_C_PROTV_STORE; /* ST/EX */
|
||||||
@@ -81,16 +81,14 @@ void do_page_fault(unsigned long address, struct pt_regs *regs)
|
|||||||
* only copy the information from the master page table,
|
* only copy the information from the master page table,
|
||||||
* nothing more.
|
* nothing more.
|
||||||
*/
|
*/
|
||||||
if (address >= VMALLOC_START) {
|
if (address >= VMALLOC_START && !user_mode(regs)) {
|
||||||
ret = handle_kernel_vaddr_fault(address);
|
ret = handle_kernel_vaddr_fault(address);
|
||||||
if (unlikely(ret))
|
if (unlikely(ret))
|
||||||
goto bad_area_nosemaphore;
|
goto no_context;
|
||||||
else
|
else
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
si_code = SEGV_MAPERR;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If we're in an interrupt or have no user
|
* If we're in an interrupt or have no user
|
||||||
* context, we must not take the fault..
|
* context, we must not take the fault..
|
||||||
@@ -198,7 +196,6 @@ good_area:
|
|||||||
bad_area:
|
bad_area:
|
||||||
up_read(&mm->mmap_sem);
|
up_read(&mm->mmap_sem);
|
||||||
|
|
||||||
bad_area_nosemaphore:
|
|
||||||
/* User mode accesses just cause a SIGSEGV */
|
/* User mode accesses just cause a SIGSEGV */
|
||||||
if (user_mode(regs)) {
|
if (user_mode(regs)) {
|
||||||
tsk->thread.fault_address = address;
|
tsk->thread.fault_address = address;
|
||||||
|
|||||||
+8
-5
@@ -911,9 +911,11 @@ void do_tlb_overlap_fault(unsigned long cause, unsigned long address,
|
|||||||
struct pt_regs *regs)
|
struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
struct cpuinfo_arc_mmu *mmu = &cpuinfo_arc700[smp_processor_id()].mmu;
|
struct cpuinfo_arc_mmu *mmu = &cpuinfo_arc700[smp_processor_id()].mmu;
|
||||||
unsigned int pd0[mmu->ways];
|
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
int set;
|
int set, n_ways = mmu->ways;
|
||||||
|
|
||||||
|
n_ways = min(n_ways, 4);
|
||||||
|
BUG_ON(mmu->ways > 4);
|
||||||
|
|
||||||
local_irq_save(flags);
|
local_irq_save(flags);
|
||||||
|
|
||||||
@@ -921,9 +923,10 @@ void do_tlb_overlap_fault(unsigned long cause, unsigned long address,
|
|||||||
for (set = 0; set < mmu->sets; set++) {
|
for (set = 0; set < mmu->sets; set++) {
|
||||||
|
|
||||||
int is_valid, way;
|
int is_valid, way;
|
||||||
|
unsigned int pd0[4];
|
||||||
|
|
||||||
/* read out all the ways of current set */
|
/* read out all the ways of current set */
|
||||||
for (way = 0, is_valid = 0; way < mmu->ways; way++) {
|
for (way = 0, is_valid = 0; way < n_ways; way++) {
|
||||||
write_aux_reg(ARC_REG_TLBINDEX,
|
write_aux_reg(ARC_REG_TLBINDEX,
|
||||||
SET_WAY_TO_IDX(mmu, set, way));
|
SET_WAY_TO_IDX(mmu, set, way));
|
||||||
write_aux_reg(ARC_REG_TLBCOMMAND, TLBRead);
|
write_aux_reg(ARC_REG_TLBCOMMAND, TLBRead);
|
||||||
@@ -937,14 +940,14 @@ void do_tlb_overlap_fault(unsigned long cause, unsigned long address,
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
/* Scan the set for duplicate ways: needs a nested loop */
|
/* Scan the set for duplicate ways: needs a nested loop */
|
||||||
for (way = 0; way < mmu->ways - 1; way++) {
|
for (way = 0; way < n_ways - 1; way++) {
|
||||||
|
|
||||||
int n;
|
int n;
|
||||||
|
|
||||||
if (!pd0[way])
|
if (!pd0[way])
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
for (n = way + 1; n < mmu->ways; n++) {
|
for (n = way + 1; n < n_ways; n++) {
|
||||||
if (pd0[way] != pd0[n])
|
if (pd0[way] != pd0[n])
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|||||||
@@ -1,17 +1,8 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
/*
|
/*
|
||||||
* AXS101/AXS103 Software Development Platform
|
* AXS101/AXS103 Software Development Platform
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013-15 Synopsys, Inc. (www.synopsys.com)
|
* Copyright (C) 2013-15 Synopsys, Inc. (www.synopsys.com)
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License version 2 as
|
|
||||||
* published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/of_fdt.h>
|
#include <linux/of_fdt.h>
|
||||||
|
|||||||
@@ -1,17 +1,6 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
/*
|
/*
|
||||||
* Copyright(c) 2015 EZchip Technologies.
|
* Copyright(c) 2015 EZchip Technologies.
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
|
||||||
* under the terms and conditions of the GNU General Public License,
|
|
||||||
* version 2, as published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
||||||
* more details.
|
|
||||||
*
|
|
||||||
* The full GNU General Public License is included in this distribution in
|
|
||||||
* the file called "COPYING".
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/sched.h>
|
#include <linux/sched.h>
|
||||||
|
|||||||
@@ -1,19 +1,9 @@
|
|||||||
|
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
|
|
||||||
EZNPS CPU startup Code
|
EZNPS CPU startup Code
|
||||||
Copyright(c) 2012 EZchip Technologies.
|
Copyright(c) 2012 EZchip Technologies.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it
|
|
||||||
under the terms and conditions of the GNU General Public License,
|
|
||||||
version 2, as published by the Free Software Foundation.
|
|
||||||
|
|
||||||
This program is distributed in the hope it will be useful, but WITHOUT
|
|
||||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
||||||
more details.
|
|
||||||
|
|
||||||
The full GNU General Public License is included in this distribution in
|
|
||||||
the file called "COPYING".
|
|
||||||
|
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
#include <linux/linkage.h>
|
#include <linux/linkage.h>
|
||||||
|
|||||||
@@ -1,17 +1,6 @@
|
|||||||
|
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||||
/*
|
/*
|
||||||
* Copyright(c) 2015 EZchip Technologies.
|
* Copyright(c) 2015 EZchip Technologies.
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
|
||||||
* under the terms and conditions of the GNU General Public License,
|
|
||||||
* version 2, as published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
||||||
* more details.
|
|
||||||
*
|
|
||||||
* The full GNU General Public License is included in this distribution in
|
|
||||||
* the file called "COPYING".
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _PLAT_EZNPS_CTOP_H
|
#ifndef _PLAT_EZNPS_CTOP_H
|
||||||
|
|||||||
@@ -1,17 +1,6 @@
|
|||||||
|
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||||
/*
|
/*
|
||||||
* Copyright(c) 2015 EZchip Technologies.
|
* Copyright(c) 2015 EZchip Technologies.
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
|
||||||
* under the terms and conditions of the GNU General Public License,
|
|
||||||
* version 2, as published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
||||||
* more details.
|
|
||||||
*
|
|
||||||
* The full GNU General Public License is included in this distribution in
|
|
||||||
* the file called "COPYING".
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _PLAT_EZNPS_MTM_H
|
#ifndef _PLAT_EZNPS_MTM_H
|
||||||
|
|||||||
@@ -1,17 +1,6 @@
|
|||||||
|
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||||
/*
|
/*
|
||||||
* Copyright(c) 2015 EZchip Technologies.
|
* Copyright(c) 2015 EZchip Technologies.
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
|
||||||
* under the terms and conditions of the GNU General Public License,
|
|
||||||
* version 2, as published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
||||||
* more details.
|
|
||||||
*
|
|
||||||
* The full GNU General Public License is included in this distribution in
|
|
||||||
* the file called "COPYING".
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __PLAT_EZNPS_SMP_H
|
#ifndef __PLAT_EZNPS_SMP_H
|
||||||
|
|||||||
@@ -1,17 +1,6 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
/*
|
/*
|
||||||
* Copyright(c) 2015 EZchip Technologies.
|
* Copyright(c) 2015 EZchip Technologies.
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
|
||||||
* under the terms and conditions of the GNU General Public License,
|
|
||||||
* version 2, as published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
||||||
* more details.
|
|
||||||
*
|
|
||||||
* The full GNU General Public License is included in this distribution in
|
|
||||||
* the file called "COPYING".
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/smp.h>
|
#include <linux/smp.h>
|
||||||
|
|||||||
@@ -1,17 +1,6 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
/*
|
/*
|
||||||
* Copyright(c) 2015 EZchip Technologies.
|
* Copyright(c) 2015 EZchip Technologies.
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
|
||||||
* under the terms and conditions of the GNU General Public License,
|
|
||||||
* version 2, as published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
||||||
* more details.
|
|
||||||
*
|
|
||||||
* The full GNU General Public License is included in this distribution in
|
|
||||||
* the file called "COPYING".
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
|
|||||||
@@ -1,17 +1,6 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
/*
|
/*
|
||||||
* Copyright(c) 2015 EZchip Technologies.
|
* Copyright(c) 2015 EZchip Technologies.
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
|
||||||
* under the terms and conditions of the GNU General Public License,
|
|
||||||
* version 2, as published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
||||||
* more details.
|
|
||||||
*
|
|
||||||
* The full GNU General Public License is included in this distribution in
|
|
||||||
* the file called "COPYING".
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/smp.h>
|
#include <linux/smp.h>
|
||||||
|
|||||||
@@ -1,19 +1,8 @@
|
|||||||
|
# SPDX-License-Identifier: GPL-2.0-only
|
||||||
# Abilis Systems TB10x platform kernel configuration file
|
# Abilis Systems TB10x platform kernel configuration file
|
||||||
#
|
#
|
||||||
# Author: Christian Ruppert <christian.ruppert@abilis.com>
|
# Author: Christian Ruppert <christian.ruppert@abilis.com>
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License version 2 as
|
|
||||||
# published by the Free Software Foundation.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write to the Free Software
|
|
||||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
|
|
||||||
|
|
||||||
menuconfig ARC_PLAT_TB10X
|
menuconfig ARC_PLAT_TB10X
|
||||||
|
|||||||
@@ -1,19 +1,8 @@
|
|||||||
|
# SPDX-License-Identifier: GPL-2.0-only
|
||||||
# Abilis Systems TB10x platform Makefile
|
# Abilis Systems TB10x platform Makefile
|
||||||
#
|
#
|
||||||
# Author: Christian Ruppert <christian.ruppert@abilis.com>
|
# Author: Christian Ruppert <christian.ruppert@abilis.com>
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License version 2 as
|
|
||||||
# published by the Free Software Foundation.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write to the Free Software
|
|
||||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
|
|
||||||
|
|
||||||
KBUILD_CFLAGS += -Iarch/arc/plat-tb10x/include
|
KBUILD_CFLAGS += -Iarch/arc/plat-tb10x/include
|
||||||
|
|||||||
@@ -1,22 +1,10 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
/*
|
/*
|
||||||
* Abilis Systems TB10x platform initialisation
|
* Abilis Systems TB10x platform initialisation
|
||||||
*
|
*
|
||||||
* Copyright (C) Abilis Systems 2012
|
* Copyright (C) Abilis Systems 2012
|
||||||
*
|
*
|
||||||
* Author: Christian Ruppert <christian.ruppert@abilis.com>
|
* Author: Christian Ruppert <christian.ruppert@abilis.com>
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License version 2 as
|
|
||||||
* published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
|
|||||||
@@ -32,6 +32,7 @@
|
|||||||
extern char * strstr(const char * s1, const char *s2);
|
extern char * strstr(const char * s1, const char *s2);
|
||||||
extern size_t strlen(const char *s);
|
extern size_t strlen(const char *s);
|
||||||
extern int memcmp(const void *cs, const void *ct, size_t count);
|
extern int memcmp(const void *cs, const void *ct, size_t count);
|
||||||
|
extern char * strchrnul(const char *, int);
|
||||||
|
|
||||||
#ifdef CONFIG_KERNEL_GZIP
|
#ifdef CONFIG_KERNEL_GZIP
|
||||||
#include "../../../../lib/decompress_inflate.c"
|
#include "../../../../lib/decompress_inflate.c"
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
/*
|
/*
|
||||||
* animeo_ip.dts - Device Tree file for Somfy Animeo IP Boards
|
* animeo_ip.dts - Device Tree file for Somfy Animeo IP Boards
|
||||||
*
|
*
|
||||||
* Copyright (C) 2011-2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
* Copyright (C) 2011-2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||||
*
|
|
||||||
* Licensed under GPLv2 only.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/dts-v1/;
|
/dts-v1/;
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
/*
|
/*
|
||||||
* at91-qil_a9260.dts - Device Tree file for Calao QIL A9260 board
|
* at91-qil_a9260.dts - Device Tree file for Calao QIL A9260 board
|
||||||
*
|
*
|
||||||
* Copyright (C) 2011-2013 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
* Copyright (C) 2011-2013 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||||
*
|
|
||||||
* Licensed under GPLv2.
|
|
||||||
*/
|
*/
|
||||||
/dts-v1/;
|
/dts-v1/;
|
||||||
#include "at91sam9260.dtsi"
|
#include "at91sam9260.dtsi"
|
||||||
|
|||||||
@@ -1,12 +1,6 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2015 Marek Vasut <marex@denx.de>
|
* Copyright (C) 2015 Marek Vasut <marex@denx.de>
|
||||||
*
|
|
||||||
* The code contained herein is licensed under the GNU General Public
|
|
||||||
* License. You may obtain a copy of the GNU General Public License
|
|
||||||
* Version 2 or later at the following locations:
|
|
||||||
*
|
|
||||||
* http://www.opensource.org/licenses/gpl-license.html
|
|
||||||
* http://www.gnu.org/copyleft/gpl.html
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "sama5d4.dtsi"
|
#include "sama5d4.dtsi"
|
||||||
|
|||||||
@@ -1,12 +1,6 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2015 Marek Vasut <marex@denx.de>
|
* Copyright (C) 2015 Marek Vasut <marex@denx.de>
|
||||||
*
|
|
||||||
* The code contained herein is licensed under the GNU General Public
|
|
||||||
* License. You may obtain a copy of the GNU General Public License
|
|
||||||
* Version 2 or later at the following locations:
|
|
||||||
*
|
|
||||||
* http://www.opensource.org/licenses/gpl-license.html
|
|
||||||
* http://www.gnu.org/copyleft/gpl.html
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/dts-v1/;
|
/dts-v1/;
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
/*
|
/*
|
||||||
* at91rm9200ek.dts - Device Tree file for Atmel AT91RM9200 evaluation kit
|
* at91rm9200ek.dts - Device Tree file for Atmel AT91RM9200 evaluation kit
|
||||||
*
|
*
|
||||||
* Copyright (C) 2012 Joachim Eastwood <manabian@gmail.com>
|
* Copyright (C) 2012 Joachim Eastwood <manabian@gmail.com>
|
||||||
*
|
|
||||||
* Licensed under GPLv2 only
|
|
||||||
*/
|
*/
|
||||||
/dts-v1/;
|
/dts-v1/;
|
||||||
#include "at91rm9200.dtsi"
|
#include "at91rm9200.dtsi"
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
/*
|
/*
|
||||||
* at91sam9261.dtsi - Device Tree Include file for AT91SAM9261 SoC
|
* at91sam9261.dtsi - Device Tree Include file for AT91SAM9261 SoC
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 Jean-Jacques Hiblot <jjhiblot@traphandler.com>
|
* Copyright (C) 2013 Jean-Jacques Hiblot <jjhiblot@traphandler.com>
|
||||||
*
|
|
||||||
* Licensed under GPLv2 only.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <dt-bindings/pinctrl/at91.h>
|
#include <dt-bindings/pinctrl/at91.h>
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
/*
|
/*
|
||||||
* at91sam9261ek.dts - Device Tree file for Atmel at91sam9261 reference board
|
* at91sam9261ek.dts - Device Tree file for Atmel at91sam9261 reference board
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 Jean-Jacques Hiblot <jjhiblot@traphandler.com>
|
* Copyright (C) 2013 Jean-Jacques Hiblot <jjhiblot@traphandler.com>
|
||||||
*
|
|
||||||
* Licensed under GPLv2 only.
|
|
||||||
*/
|
*/
|
||||||
/dts-v1/;
|
/dts-v1/;
|
||||||
#include "at91sam9261.dtsi"
|
#include "at91sam9261.dtsi"
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
/*
|
/*
|
||||||
* at91sam9263.dtsi - Device Tree Include file for AT91SAM9263 family SoC
|
* at91sam9263.dtsi - Device Tree Include file for AT91SAM9263 family SoC
|
||||||
*
|
*
|
||||||
* Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
* Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||||
*
|
|
||||||
* Licensed under GPLv2 only.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <dt-bindings/pinctrl/at91.h>
|
#include <dt-bindings/pinctrl/at91.h>
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
/*
|
/*
|
||||||
* at91sam9263ek.dts - Device Tree file for Atmel at91sam9263 reference board
|
* at91sam9263ek.dts - Device Tree file for Atmel at91sam9263 reference board
|
||||||
*
|
*
|
||||||
* Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
* Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||||
*
|
|
||||||
* Licensed under GPLv2 only
|
|
||||||
*/
|
*/
|
||||||
/dts-v1/;
|
/dts-v1/;
|
||||||
#include "at91sam9263.dtsi"
|
#include "at91sam9263.dtsi"
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
/*
|
/*
|
||||||
* at91sam9g15.dtsi - Device Tree Include file for AT91SAM9G15 SoC
|
* at91sam9g15.dtsi - Device Tree Include file for AT91SAM9G15 SoC
|
||||||
*
|
*
|
||||||
* Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
* Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||||
*
|
|
||||||
* Licensed under GPLv2.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "at91sam9x5.dtsi"
|
#include "at91sam9x5.dtsi"
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
/*
|
/*
|
||||||
* at91sam9g20.dtsi - Device Tree Include file for AT91SAM9G20 family SoC
|
* at91sam9g20.dtsi - Device Tree Include file for AT91SAM9G20 family SoC
|
||||||
*
|
*
|
||||||
* Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
* Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||||
*
|
|
||||||
* Licensed under GPLv2.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "at91sam9260.dtsi"
|
#include "at91sam9260.dtsi"
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
/*
|
/*
|
||||||
* at91sam9g20ek.dts - Device Tree file for Atmel at91sam9g20ek board
|
* at91sam9g20ek.dts - Device Tree file for Atmel at91sam9g20ek board
|
||||||
*
|
*
|
||||||
* Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
* Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||||
*
|
|
||||||
* Licensed under GPLv2.
|
|
||||||
*/
|
*/
|
||||||
/dts-v1/;
|
/dts-v1/;
|
||||||
#include "at91sam9g20ek_common.dtsi"
|
#include "at91sam9g20ek_common.dtsi"
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
/*
|
/*
|
||||||
* at91sam9g20ek_2mmc.dts - Device Tree file for Atmel at91sam9g20ek 2 MMC board
|
* at91sam9g20ek_2mmc.dts - Device Tree file for Atmel at91sam9g20ek 2 MMC board
|
||||||
*
|
*
|
||||||
* Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
* Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||||
*
|
|
||||||
* Licensed under GPLv2.
|
|
||||||
*/
|
*/
|
||||||
/dts-v1/;
|
/dts-v1/;
|
||||||
#include "at91sam9g20ek_common.dtsi"
|
#include "at91sam9g20ek_common.dtsi"
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
/*
|
/*
|
||||||
* at91sam9g20ek_common.dtsi - Device Tree file for Atmel at91sam9g20ek board
|
* at91sam9g20ek_common.dtsi - Device Tree file for Atmel at91sam9g20ek board
|
||||||
*
|
*
|
||||||
* Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
* Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||||
*
|
|
||||||
* Licensed under GPLv2.
|
|
||||||
*/
|
*/
|
||||||
#include "at91sam9g20.dtsi"
|
#include "at91sam9g20.dtsi"
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
/*
|
/*
|
||||||
* at91sam9g25.dtsi - Device Tree Include file for AT91SAM9G25 SoC
|
* at91sam9g25.dtsi - Device Tree Include file for AT91SAM9G25 SoC
|
||||||
*
|
*
|
||||||
* Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
* Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||||
*
|
|
||||||
* Licensed under GPLv2.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "at91sam9x5.dtsi"
|
#include "at91sam9x5.dtsi"
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
/*
|
/*
|
||||||
* at91sam9g35.dtsi - Device Tree Include file for AT91SAM9G35 SoC
|
* at91sam9g35.dtsi - Device Tree Include file for AT91SAM9G35 SoC
|
||||||
*
|
*
|
||||||
* Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
* Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||||
*
|
|
||||||
* Licensed under GPLv2.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "at91sam9x5.dtsi"
|
#include "at91sam9x5.dtsi"
|
||||||
|
|||||||
@@ -1,10 +1,9 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
/*
|
/*
|
||||||
* at91sam9rlek.dts - Device Tree file for Atmel at91sam9rl reference board
|
* at91sam9rlek.dts - Device Tree file for Atmel at91sam9rl reference board
|
||||||
*
|
*
|
||||||
* Copyright (C) 2014 Microchip
|
* Copyright (C) 2014 Microchip
|
||||||
* Alexandre Belloni <alexandre.belloni@free-electrons.com>
|
* Alexandre Belloni <alexandre.belloni@free-electrons.com>
|
||||||
*
|
|
||||||
* Licensed under GPLv2 only
|
|
||||||
*/
|
*/
|
||||||
/dts-v1/;
|
/dts-v1/;
|
||||||
#include "at91sam9rl.dtsi"
|
#include "at91sam9rl.dtsi"
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
/*
|
/*
|
||||||
* at91sam9x25.dtsi - Device Tree Include file for AT91SAM9X25 SoC
|
* at91sam9x25.dtsi - Device Tree Include file for AT91SAM9X25 SoC
|
||||||
*
|
*
|
||||||
* Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
* Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
|
||||||
*
|
|
||||||
* Licensed under GPLv2.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "at91sam9x5.dtsi"
|
#include "at91sam9x5.dtsi"
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user