mirror of https://github.com/torvalds/linux.git
Networking changes for 6.19.
Core & protocols
----------------
- Replace busylock at the Tx queuing layer with a lockless list. Resulting
in a 300% (4x) improvement on heavy TX workloads, sending twice the
number of packets per second, for half the cpu cycles.
- Allow constantly busy flows to migrate to a more suitable CPU/NIC
queue. Normally we perform queue re-selection when flow comes out
of idle, but under extreme circumstances the flows may be constantly
busy. Add sysctl to allow periodic rehashing even if it'd risk packet
reordering.
- Optimize the NAPI skb cache, make it larger, use it in more paths.
- Attempt returning Tx skbs to the originating CPU (like we already did
for Rx skbs).
- Various data structure layout and prefetch optimizations from Eric.
- Remove ktime_get() from the recvmsg() fast path, ktime_get() is sadly
quite expensive on recent AMD machines.
- Extend threaded NAPI polling to allow the kthread busy poll for packets.
- Make MPTCP use Rx backlog processing. This lowers the lock pressure,
improving the Rx performance.
- Support memcg accounting of MPTCP socket memory.
- Allow admin to opt sockets out of global protocol memory accounting
(using a sysctl or BPF-based policy). The global limits are a poor fit
for modern container workloads, where limits are imposed using cgroups.
- Improve heuristics for when to kick off AF_UNIX garbage collection.
- Allow users to control TCP SACK compression, and default to 33% of RTT.
- Add tcp_rcvbuf_low_rtt sysctl to let datacenter users avoid unnecessarily
aggressive rcvbuf growth and overshot when the connection RTT is low.
- Preserve skb metadata space across skb_push / skb_pull operations.
- Support for IPIP encapsulation in the nftables flowtable offload.
- Support appending IP interface information to ICMP messages (RFC 5837).
- Support setting max record size in TLS (RFC 8449).
- Remove taking rtnl_lock from RTM_GETNEIGHTBL and RTM_SETNEIGHTBL.
- Use a dedicated lock (and RCU) in MPLS, instead of rtnl_lock.
- Let users configure the number of write buffers in SMC.
- Add new struct sockaddr_unsized for sockaddr of unknown length,
from Kees.
- Some conversions away from the crypto_ahash API, from Eric Biggers.
- Some preparations for slimming down struct page.
- YAML Netlink protocol spec for WireGuard.
- Add a tool on top of YAML Netlink specs/lib for reporting commonly
computed derived statistics and summarized system state.
Driver API
----------
- Add CAN XL support to the CAN Netlink interface.
- Add uAPI for reporting PHY Mean Square Error (MSE) diagnostics,
as defined by the OPEN Alliance's "Advanced diagnostic features
for 100BASE-T1 automotive Ethernet PHYs" specification.
- Add DPLL phase-adjust-gran pin attribute (and implement it in zl3073x).
- Refactor xfrm_input lock to reduce contention when NIC offloads IPsec
and performs RSS.
- Add info to devlink params whether the current setting is the default
or a user override. Allow resetting back to default.
- Add standard device stats for PSP crypto offload.
- Leverage DSA frame broadcast to implement simple HSR frame duplication
for a lot of switches without dedicated HSR offload.
- Add uAPI defines for 1.6Tbps link modes.
Device drivers
--------------
- Add Motorcomm YT921x gigabit Ethernet switch support.
- Add MUCSE driver for N500/N210 1GbE NIC series.
- Convert drivers to support dedicated ops for timestamping control,
and away from the direct IOCTL handling. While at it support GET
operations for PHY timestamping.
- Add (and convert most drivers to) a dedicated ethtool callback
for reading the Rx ring count.
- Significant refactoring efforts in the STMMAC driver, which supports
Synopsys turn-key MAC IP integrated into a ton of SoCs.
- Ethernet high-speed NICs:
- Broadcom (bnxt):
- support PPS in/out on all pins
- Intel (100G, ice, idpf):
- ice: implement standard ethtool and timestamping stats
- i40e: support setting the max number of MAC addresses per VF
- iavf: support RSS of GTP tunnels for 5G and LTE deployments
- nVidia/Mellanox (mlx5):
- reduce downtime on interface reconfiguration
- disable being an XDP redirect target by default (same as other
drivers) to avoid wasting resources if feature is unused
- Meta (fbnic):
- add support for Linux-managed PCS on 25G, 50G, and 100G links
- Wangxun:
- support Rx descriptor merge, and Tx head writeback
- support Rx coalescing offload
- support 25G SPF and 40G QSFP modules
- Ethernet virtual:
- Google (gve):
- allow ethtool to configure rx_buf_len
- implement XDP HW RX Timestamping support for DQ descriptor format
- Microsoft vNIC (mana):
- support HW link state events
- handle hardware recovery events when probing the device
- Ethernet NICs consumer, and embedded:
- usbnet: add support for Byte Queue Limits (BQL)
- AMD (amd-xgbe):
- add device selftests
- NXP (enetc):
- add i.MX94 support
- Broadcom integrated MACs (bcmgenet, bcmasp):
- bcmasp: add support for PHY-based Wake-on-LAN
- Broadcom switches (b53):
- support port isolation
- support BCM5389/97/98 and BCM63XX ARL formats
- Lantiq/MaxLinear switches:
- support bridge FDB entries on the CPU port
- use regmap for register access
- allow user to enable/disable learning
- support Energy Efficient Ethernet
- support configuring RMII clock delays
- add tagging driver for MaxLinear GSW1xx switches
- Synopsys (stmmac):
- support using the HW clock in free running mode
- add Eswin EIC7700 support
- add Rockchip RK3506 support
- add Altera Agilex5 support
- Cadence (macb):
- cleanup and consolidate descriptor and DMA address handling
- add EyeQ5 support
- TI:
- icssg-prueth: support AF_XDP
- Airoha access points:
- add missing Ethernet stats and link state callback
- add AN7583 support
- support out-of-order Tx completion processing
- Power over Ethernet:
- pd692x0: preserve PSE configuration across reboots
- add support for TPS23881B devices
- Ethernet PHYs:
- Open Alliance OATC14 10BASE-T1S PHY cable diagnostic support
- Support 50G SerDes and 100G interfaces in Linux-managed PHYs
- micrel:
- support for non PTP SKUs of lan8814
- enable in-band auto-negotiation on lan8814
- realtek:
- cable testing support on RTL8224
- interrupt support on RTL8221B
- motorcomm: support for PHY LEDs on YT853
- microchip: support for LAN867X Rev.D0 PHYs w/ SQI and cable diag
- mscc: support for PHY LED control
- CAN drivers:
- m_can: add support for optional reset and system wake up
- remove can_change_mtu() obsoleted by core handling
- mcp251xfd: support GPIO controller functionality
- Bluetooth:
- add initial support for PASTa
- WiFi:
- split ieee80211.h file, it's way too big
- improvements in VHT radiotap reporting, S1G, Channel Switch
Announcement handling, rate tracking in mesh networks
- improve multi-radio monitor mode support, and add a cfg80211 debugfs
interface for it
- HT action frame handling on 6 GHz
- initial chanctx work towards NAN
- MU-MIMO sniffer improvements
- WiFi drivers:
- RealTek (rtw89):
- support USB devices RTL8852AU and RTL8852CU
- initial work for RTL8922DE
- improved injection support
- Intel:
- iwlwifi: new sniffer API support
- MediaTek (mt76):
- WED support for >32-bit DMA
- airoha NPU support
- regdomain improvements
- continued WiFi7/MLO work
- Qualcomm/Atheros:
- ath10k: factory test support
- ath11k: TX power insertion support
- ath12k: BSS color change support
- ath12k: statistics improvements
- brcmfmac: Acer A1 840 tablet quirk
- rtl8xxxu: 40 MHz connection fixes/support
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
-----BEGIN PGP SIGNATURE-----
iQIzBAABCgAdFiEE6jPA+I1ugmIBA4hXMUZtbf5SIrsFAmkveRQACgkQMUZtbf5S
IrvY7A/+Nb0o4BxLHjPkAl1m3t3q2d0Y29B7SNkwnwEtxAV8EkNeZ3GWrdtDnTQY
MYhmc7LEzvz8/lihapr7UJkcokzSASUV54hbez5jDBKC8EEoyUk8FdWDPerwlcRI
zmCFNAVFyh9GX8i7wcrzKbDTHT5+GZLbSlGl9U5mhLsDdRlJgH7d8PJ7vWcmtLFY
XN0paDyaeHfCl8wReWNAYx4C/I0ODOvlscpO0tnAKhB0ngJbQCKY2t6tn3rOYdif
ZSQ5KwVRnJtQ4fYOFMOy9+FSCjVXtyrxF8KLxD+mqom2ZhmO00UpOMl09tqhq3uT
WnvwoHUVBt6F+iITHwg5kMgIDPUq1kpUvL4S4UbVSuUm9ZKD+4KRU2ZHRBYMx+MU
bsqmtY8/IULClUoRz+tZhltA8eb0NEqNZE2JPOFDiJHn1YiCCkFwxibhir893oM3
sB7x65D7LQI2ty2BBGVGYnwYDPtyaxOA/s3WTwPvLEi3+Y/TGNIIrS9lBLA4U+Yr
Gi93WQGVjttMmVyaHgXBUGmi3L52hvolm0AZ8zSRGrnIEpecjhly2KfYuaOzuxXC
IHEQ6AFLdRh6JzafXGb/mQwGCHNmhwsY8A49i94fakWQamaL/L6A+1dyPu4LXMqi
NwqCmlVb/LKGlfNG+V4wT27srJ+yBA2Vk3tpR1sZQQytFh0LKHI=
=UoDR
-----END PGP SIGNATURE-----
Merge tag 'net-next-6.19' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next
Pull networking updates from Jakub Kicinski:
"Core & protocols:
- Replace busylock at the Tx queuing layer with a lockless list.
Resulting in a 300% (4x) improvement on heavy TX workloads, sending
twice the number of packets per second, for half the cpu cycles.
- Allow constantly busy flows to migrate to a more suitable CPU/NIC
queue.
Normally we perform queue re-selection when flow comes out of idle,
but under extreme circumstances the flows may be constantly busy.
Add sysctl to allow periodic rehashing even if it'd risk packet
reordering.
- Optimize the NAPI skb cache, make it larger, use it in more paths.
- Attempt returning Tx skbs to the originating CPU (like we already
did for Rx skbs).
- Various data structure layout and prefetch optimizations from Eric.
- Remove ktime_get() from the recvmsg() fast path, ktime_get() is
sadly quite expensive on recent AMD machines.
- Extend threaded NAPI polling to allow the kthread busy poll for
packets.
- Make MPTCP use Rx backlog processing. This lowers the lock
pressure, improving the Rx performance.
- Support memcg accounting of MPTCP socket memory.
- Allow admin to opt sockets out of global protocol memory accounting
(using a sysctl or BPF-based policy). The global limits are a poor
fit for modern container workloads, where limits are imposed using
cgroups.
- Improve heuristics for when to kick off AF_UNIX garbage collection.
- Allow users to control TCP SACK compression, and default to 33% of
RTT.
- Add tcp_rcvbuf_low_rtt sysctl to let datacenter users avoid
unnecessarily aggressive rcvbuf growth and overshot when the
connection RTT is low.
- Preserve skb metadata space across skb_push / skb_pull operations.
- Support for IPIP encapsulation in the nftables flowtable offload.
- Support appending IP interface information to ICMP messages (RFC
5837).
- Support setting max record size in TLS (RFC 8449).
- Remove taking rtnl_lock from RTM_GETNEIGHTBL and RTM_SETNEIGHTBL.
- Use a dedicated lock (and RCU) in MPLS, instead of rtnl_lock.
- Let users configure the number of write buffers in SMC.
- Add new struct sockaddr_unsized for sockaddr of unknown length,
from Kees.
- Some conversions away from the crypto_ahash API, from Eric Biggers.
- Some preparations for slimming down struct page.
- YAML Netlink protocol spec for WireGuard.
- Add a tool on top of YAML Netlink specs/lib for reporting commonly
computed derived statistics and summarized system state.
Driver API:
- Add CAN XL support to the CAN Netlink interface.
- Add uAPI for reporting PHY Mean Square Error (MSE) diagnostics, as
defined by the OPEN Alliance's "Advanced diagnostic features for
100BASE-T1 automotive Ethernet PHYs" specification.
- Add DPLL phase-adjust-gran pin attribute (and implement it in
zl3073x).
- Refactor xfrm_input lock to reduce contention when NIC offloads
IPsec and performs RSS.
- Add info to devlink params whether the current setting is the
default or a user override. Allow resetting back to default.
- Add standard device stats for PSP crypto offload.
- Leverage DSA frame broadcast to implement simple HSR frame
duplication for a lot of switches without dedicated HSR offload.
- Add uAPI defines for 1.6Tbps link modes.
Device drivers:
- Add Motorcomm YT921x gigabit Ethernet switch support.
- Add MUCSE driver for N500/N210 1GbE NIC series.
- Convert drivers to support dedicated ops for timestamping control,
and away from the direct IOCTL handling. While at it support GET
operations for PHY timestamping.
- Add (and convert most drivers to) a dedicated ethtool callback for
reading the Rx ring count.
- Significant refactoring efforts in the STMMAC driver, which
supports Synopsys turn-key MAC IP integrated into a ton of SoCs.
- Ethernet high-speed NICs:
- Broadcom (bnxt):
- support PPS in/out on all pins
- Intel (100G, ice, idpf):
- ice: implement standard ethtool and timestamping stats
- i40e: support setting the max number of MAC addresses per VF
- iavf: support RSS of GTP tunnels for 5G and LTE deployments
- nVidia/Mellanox (mlx5):
- reduce downtime on interface reconfiguration
- disable being an XDP redirect target by default (same as
other drivers) to avoid wasting resources if feature is
unused
- Meta (fbnic):
- add support for Linux-managed PCS on 25G, 50G, and 100G links
- Wangxun:
- support Rx descriptor merge, and Tx head writeback
- support Rx coalescing offload
- support 25G SPF and 40G QSFP modules
- Ethernet virtual:
- Google (gve):
- allow ethtool to configure rx_buf_len
- implement XDP HW RX Timestamping support for DQ descriptor
format
- Microsoft vNIC (mana):
- support HW link state events
- handle hardware recovery events when probing the device
- Ethernet NICs consumer, and embedded:
- usbnet: add support for Byte Queue Limits (BQL)
- AMD (amd-xgbe):
- add device selftests
- NXP (enetc):
- add i.MX94 support
- Broadcom integrated MACs (bcmgenet, bcmasp):
- bcmasp: add support for PHY-based Wake-on-LAN
- Broadcom switches (b53):
- support port isolation
- support BCM5389/97/98 and BCM63XX ARL formats
- Lantiq/MaxLinear switches:
- support bridge FDB entries on the CPU port
- use regmap for register access
- allow user to enable/disable learning
- support Energy Efficient Ethernet
- support configuring RMII clock delays
- add tagging driver for MaxLinear GSW1xx switches
- Synopsys (stmmac):
- support using the HW clock in free running mode
- add Eswin EIC7700 support
- add Rockchip RK3506 support
- add Altera Agilex5 support
- Cadence (macb):
- cleanup and consolidate descriptor and DMA address handling
- add EyeQ5 support
- TI:
- icssg-prueth: support AF_XDP
- Airoha access points:
- add missing Ethernet stats and link state callback
- add AN7583 support
- support out-of-order Tx completion processing
- Power over Ethernet:
- pd692x0: preserve PSE configuration across reboots
- add support for TPS23881B devices
- Ethernet PHYs:
- Open Alliance OATC14 10BASE-T1S PHY cable diagnostic support
- Support 50G SerDes and 100G interfaces in Linux-managed PHYs
- micrel:
- support for non PTP SKUs of lan8814
- enable in-band auto-negotiation on lan8814
- realtek:
- cable testing support on RTL8224
- interrupt support on RTL8221B
- motorcomm: support for PHY LEDs on YT853
- microchip: support for LAN867X Rev.D0 PHYs w/ SQI and cable diag
- mscc: support for PHY LED control
- CAN drivers:
- m_can: add support for optional reset and system wake up
- remove can_change_mtu() obsoleted by core handling
- mcp251xfd: support GPIO controller functionality
- Bluetooth:
- add initial support for PASTa
- WiFi:
- split ieee80211.h file, it's way too big
- improvements in VHT radiotap reporting, S1G, Channel Switch
Announcement handling, rate tracking in mesh networks
- improve multi-radio monitor mode support, and add a cfg80211
debugfs interface for it
- HT action frame handling on 6 GHz
- initial chanctx work towards NAN
- MU-MIMO sniffer improvements
- WiFi drivers:
- RealTek (rtw89):
- support USB devices RTL8852AU and RTL8852CU
- initial work for RTL8922DE
- improved injection support
- Intel:
- iwlwifi: new sniffer API support
- MediaTek (mt76):
- WED support for >32-bit DMA
- airoha NPU support
- regdomain improvements
- continued WiFi7/MLO work
- Qualcomm/Atheros:
- ath10k: factory test support
- ath11k: TX power insertion support
- ath12k: BSS color change support
- ath12k: statistics improvements
- brcmfmac: Acer A1 840 tablet quirk
- rtl8xxxu: 40 MHz connection fixes/support"
* tag 'net-next-6.19' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next: (1381 commits)
net: page_pool: sanitise allocation order
net: page pool: xa init with destroy on pp init
net/mlx5e: Support XDP target xmit with dummy program
net/mlx5e: Update XDP features in switch channels
selftests/tc-testing: Test CAKE scheduler when enqueue drops packets
net/sched: sch_cake: Fix incorrect qlen reduction in cake_drop
wireguard: netlink: generate netlink code
wireguard: uapi: generate header with ynl-gen
wireguard: uapi: move flag enums
wireguard: uapi: move enum wg_cmd
wireguard: netlink: add YNL specification
selftests: drv-net: Fix tolerance calculation in devlink_rate_tc_bw.py
selftests: drv-net: Fix and clarify TC bandwidth split in devlink_rate_tc_bw.py
selftests: drv-net: Set shell=True for sysfs writes in devlink_rate_tc_bw.py
selftests: drv-net: Use Iperf3Runner in devlink_rate_tc_bw.py
selftests: drv-net: introduce Iperf3Runner for measurement use cases
selftests: drv-net: Add devlink_rate_tc_bw.py to TEST_PROGS
net: ps3_gelic_net: Use napi_alloc_skb() and napi_gro_receive()
Documentation: net: dsa: mention simple HSR offload helpers
Documentation: net: dsa: mention availability of RedBox
...
This commit is contained in:
commit
8f7aa3d3c7
|
|
@ -212,6 +212,14 @@ mem_pcpu_rsv
|
||||||
|
|
||||||
Per-cpu reserved forward alloc cache size in page units. Default 1MB per CPU.
|
Per-cpu reserved forward alloc cache size in page units. Default 1MB per CPU.
|
||||||
|
|
||||||
|
bypass_prot_mem
|
||||||
|
---------------
|
||||||
|
|
||||||
|
Skip charging socket buffers to the global per-protocol memory
|
||||||
|
accounting controlled by net.ipv4.tcp_mem, net.ipv4.udp_mem, etc.
|
||||||
|
|
||||||
|
Default: 0 (off)
|
||||||
|
|
||||||
rmem_default
|
rmem_default
|
||||||
------------
|
------------
|
||||||
|
|
||||||
|
|
@ -347,9 +355,9 @@ skb_defer_max
|
||||||
-------------
|
-------------
|
||||||
|
|
||||||
Max size (in skbs) of the per-cpu list of skbs being freed
|
Max size (in skbs) of the per-cpu list of skbs being freed
|
||||||
by the cpu which allocated them. Used by TCP stack so far.
|
by the cpu which allocated them.
|
||||||
|
|
||||||
Default: 64
|
Default: 128
|
||||||
|
|
||||||
optmem_max
|
optmem_max
|
||||||
----------
|
----------
|
||||||
|
|
@ -406,6 +414,23 @@ to SOCK_TXREHASH_DEFAULT (i. e. not overridden by setsockopt).
|
||||||
If set to 1 (default), hash rethink is performed on listening socket.
|
If set to 1 (default), hash rethink is performed on listening socket.
|
||||||
If set to 0, hash rethink is not performed.
|
If set to 0, hash rethink is not performed.
|
||||||
|
|
||||||
|
txq_reselection_ms
|
||||||
|
------------------
|
||||||
|
|
||||||
|
Controls how often (in ms) a busy connected flow can select another tx queue.
|
||||||
|
|
||||||
|
A resection is desirable when/if user thread has migrated and XPS
|
||||||
|
would select a different queue. Same can occur without XPS
|
||||||
|
if the flow hash has changed.
|
||||||
|
|
||||||
|
But switching txq can introduce reorders, especially if the
|
||||||
|
old queue is under high pressure. Modern TCP stacks deal
|
||||||
|
well with reorders if they happen not too often.
|
||||||
|
|
||||||
|
To disable this feature, set the value to 0.
|
||||||
|
|
||||||
|
Default : 1000
|
||||||
|
|
||||||
gro_normal_batch
|
gro_normal_batch
|
||||||
----------------
|
----------------
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@ properties:
|
||||||
compatible:
|
compatible:
|
||||||
enum:
|
enum:
|
||||||
- airoha,en7581-eth
|
- airoha,en7581-eth
|
||||||
|
- airoha,an7583-eth
|
||||||
|
|
||||||
reg:
|
reg:
|
||||||
items:
|
items:
|
||||||
|
|
@ -44,6 +45,7 @@ properties:
|
||||||
- description: PDMA irq
|
- description: PDMA irq
|
||||||
|
|
||||||
resets:
|
resets:
|
||||||
|
minItems: 7
|
||||||
maxItems: 8
|
maxItems: 8
|
||||||
|
|
||||||
reset-names:
|
reset-names:
|
||||||
|
|
@ -54,8 +56,9 @@ properties:
|
||||||
- const: xsi-mac
|
- const: xsi-mac
|
||||||
- const: hsi0-mac
|
- const: hsi0-mac
|
||||||
- const: hsi1-mac
|
- const: hsi1-mac
|
||||||
- const: hsi-mac
|
- enum: [ hsi-mac, xfp-mac ]
|
||||||
- const: xfp-mac
|
- const: xfp-mac
|
||||||
|
minItems: 7
|
||||||
|
|
||||||
memory-region:
|
memory-region:
|
||||||
items:
|
items:
|
||||||
|
|
@ -81,6 +84,36 @@ properties:
|
||||||
interface to implement hardware flow offloading programming Packet
|
interface to implement hardware flow offloading programming Packet
|
||||||
Processor Engine (PPE) flow table.
|
Processor Engine (PPE) flow table.
|
||||||
|
|
||||||
|
allOf:
|
||||||
|
- $ref: ethernet-controller.yaml#
|
||||||
|
- if:
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
contains:
|
||||||
|
enum:
|
||||||
|
- airoha,en7581-eth
|
||||||
|
then:
|
||||||
|
properties:
|
||||||
|
resets:
|
||||||
|
minItems: 8
|
||||||
|
|
||||||
|
reset-names:
|
||||||
|
minItems: 8
|
||||||
|
|
||||||
|
- if:
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
contains:
|
||||||
|
enum:
|
||||||
|
- airoha,an7583-eth
|
||||||
|
then:
|
||||||
|
properties:
|
||||||
|
resets:
|
||||||
|
maxItems: 7
|
||||||
|
|
||||||
|
reset-names:
|
||||||
|
maxItems: 7
|
||||||
|
|
||||||
patternProperties:
|
patternProperties:
|
||||||
"^ethernet@[1-4]$":
|
"^ethernet@[1-4]$":
|
||||||
type: object
|
type: object
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,7 @@ properties:
|
||||||
compatible:
|
compatible:
|
||||||
enum:
|
enum:
|
||||||
- airoha,en7581-npu
|
- airoha,en7581-npu
|
||||||
|
- airoha,an7583-npu
|
||||||
|
|
||||||
reg:
|
reg:
|
||||||
maxItems: 1
|
maxItems: 1
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,147 @@
|
||||||
|
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||||
|
%YAML 1.2
|
||||||
|
---
|
||||||
|
$id: http://devicetree.org/schemas/net/amd,xgbe-seattle-v1a.yaml#
|
||||||
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||||
|
|
||||||
|
title: AMD XGBE Seattle v1a
|
||||||
|
|
||||||
|
maintainers:
|
||||||
|
- Shyam Sundar S K <Shyam-sundar.S-k@amd.com>
|
||||||
|
|
||||||
|
allOf:
|
||||||
|
- $ref: /schemas/net/ethernet-controller.yaml#
|
||||||
|
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
const: amd,xgbe-seattle-v1a
|
||||||
|
|
||||||
|
reg:
|
||||||
|
items:
|
||||||
|
- description: MAC registers
|
||||||
|
- description: PCS registers
|
||||||
|
- description: SerDes Rx/Tx registers
|
||||||
|
- description: SerDes integration registers (1/2)
|
||||||
|
- description: SerDes integration registers (2/2)
|
||||||
|
|
||||||
|
interrupts:
|
||||||
|
description: Device interrupts. The first entry is the general device
|
||||||
|
interrupt. If amd,per-channel-interrupt is specified, each DMA channel
|
||||||
|
interrupt must be specified. The last entry is the PCS auto-negotiation
|
||||||
|
interrupt.
|
||||||
|
minItems: 2
|
||||||
|
maxItems: 6
|
||||||
|
|
||||||
|
clocks:
|
||||||
|
items:
|
||||||
|
- description: DMA clock for the device
|
||||||
|
- description: PTP clock for the device
|
||||||
|
|
||||||
|
clock-names:
|
||||||
|
items:
|
||||||
|
- const: dma_clk
|
||||||
|
- const: ptp_clk
|
||||||
|
|
||||||
|
iommus:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
phy-mode: true
|
||||||
|
|
||||||
|
dma-coherent: true
|
||||||
|
|
||||||
|
amd,per-channel-interrupt:
|
||||||
|
description: Indicates that Rx and Tx complete will generate a unique
|
||||||
|
interrupt for each DMA channel.
|
||||||
|
type: boolean
|
||||||
|
|
||||||
|
amd,speed-set:
|
||||||
|
description: >
|
||||||
|
Speed capabilities of the device.
|
||||||
|
0 = 1GbE and 10GbE
|
||||||
|
1 = 2.5GbE and 10GbE
|
||||||
|
$ref: /schemas/types.yaml#/definitions/uint32
|
||||||
|
enum: [0, 1]
|
||||||
|
|
||||||
|
amd,serdes-blwc:
|
||||||
|
description: Baseline wandering correction enablement for each speed.
|
||||||
|
$ref: /schemas/types.yaml#/definitions/uint32-array
|
||||||
|
minItems: 3
|
||||||
|
maxItems: 3
|
||||||
|
items:
|
||||||
|
enum: [0, 1]
|
||||||
|
|
||||||
|
amd,serdes-cdr-rate:
|
||||||
|
description: CDR rate speed selection for each speed.
|
||||||
|
$ref: /schemas/types.yaml#/definitions/uint32-array
|
||||||
|
items:
|
||||||
|
- description: CDR rate for 1GbE
|
||||||
|
- description: CDR rate for 2.5GbE
|
||||||
|
- description: CDR rate for 10GbE
|
||||||
|
|
||||||
|
amd,serdes-pq-skew:
|
||||||
|
description: PQ data sampling skew for each speed.
|
||||||
|
$ref: /schemas/types.yaml#/definitions/uint32-array
|
||||||
|
items:
|
||||||
|
- description: PQ skew for 1GbE
|
||||||
|
- description: PQ skew for 2.5GbE
|
||||||
|
- description: PQ skew for 10GbE
|
||||||
|
|
||||||
|
amd,serdes-tx-amp:
|
||||||
|
description: TX amplitude boost for each speed.
|
||||||
|
$ref: /schemas/types.yaml#/definitions/uint32-array
|
||||||
|
items:
|
||||||
|
- description: TX amplitude for 1GbE
|
||||||
|
- description: TX amplitude for 2.5GbE
|
||||||
|
- description: TX amplitude for 10GbE
|
||||||
|
|
||||||
|
amd,serdes-dfe-tap-config:
|
||||||
|
description: DFE taps available to run for each speed.
|
||||||
|
$ref: /schemas/types.yaml#/definitions/uint32-array
|
||||||
|
items:
|
||||||
|
- description: DFE taps available for 1GbE
|
||||||
|
- description: DFE taps available for 2.5GbE
|
||||||
|
- description: DFE taps available for 10GbE
|
||||||
|
|
||||||
|
amd,serdes-dfe-tap-enable:
|
||||||
|
description: DFE taps to enable for each speed.
|
||||||
|
$ref: /schemas/types.yaml#/definitions/uint32-array
|
||||||
|
items:
|
||||||
|
- description: DFE taps to enable for 1GbE
|
||||||
|
- description: DFE taps to enable for 2.5GbE
|
||||||
|
- description: DFE taps to enable for 10GbE
|
||||||
|
|
||||||
|
required:
|
||||||
|
- compatible
|
||||||
|
- reg
|
||||||
|
- interrupts
|
||||||
|
- clocks
|
||||||
|
- clock-names
|
||||||
|
- phy-mode
|
||||||
|
|
||||||
|
unevaluatedProperties: false
|
||||||
|
|
||||||
|
examples:
|
||||||
|
- |
|
||||||
|
ethernet@e0700000 {
|
||||||
|
compatible = "amd,xgbe-seattle-v1a";
|
||||||
|
reg = <0xe0700000 0x80000>,
|
||||||
|
<0xe0780000 0x80000>,
|
||||||
|
<0xe1240800 0x00400>,
|
||||||
|
<0xe1250000 0x00060>,
|
||||||
|
<0xe1250080 0x00004>;
|
||||||
|
interrupts = <0 325 4>,
|
||||||
|
<0 326 1>, <0 327 1>, <0 328 1>, <0 329 1>,
|
||||||
|
<0 323 4>;
|
||||||
|
amd,per-channel-interrupt;
|
||||||
|
clocks = <&xgbe_dma_clk>, <&xgbe_ptp_clk>;
|
||||||
|
clock-names = "dma_clk", "ptp_clk";
|
||||||
|
phy-mode = "xgmii";
|
||||||
|
mac-address = [ 02 a1 a2 a3 a4 a5 ];
|
||||||
|
amd,speed-set = <0>;
|
||||||
|
amd,serdes-blwc = <1>, <1>, <0>;
|
||||||
|
amd,serdes-cdr-rate = <2>, <2>, <7>;
|
||||||
|
amd,serdes-pq-skew = <10>, <10>, <30>;
|
||||||
|
amd,serdes-tx-amp = <15>, <15>, <10>;
|
||||||
|
amd,serdes-dfe-tap-config = <3>, <3>, <1>;
|
||||||
|
amd,serdes-dfe-tap-enable = <0>, <0>, <127>;
|
||||||
|
};
|
||||||
|
|
@ -1,76 +0,0 @@
|
||||||
* AMD 10GbE driver (amd-xgbe)
|
|
||||||
|
|
||||||
Required properties:
|
|
||||||
- compatible: Should be "amd,xgbe-seattle-v1a"
|
|
||||||
- reg: Address and length of the register sets for the device
|
|
||||||
- MAC registers
|
|
||||||
- PCS registers
|
|
||||||
- SerDes Rx/Tx registers
|
|
||||||
- SerDes integration registers (1/2)
|
|
||||||
- SerDes integration registers (2/2)
|
|
||||||
- interrupts: Should contain the amd-xgbe interrupt(s). The first interrupt
|
|
||||||
listed is required and is the general device interrupt. If the optional
|
|
||||||
amd,per-channel-interrupt property is specified, then one additional
|
|
||||||
interrupt for each DMA channel supported by the device should be specified.
|
|
||||||
The last interrupt listed should be the PCS auto-negotiation interrupt.
|
|
||||||
- clocks:
|
|
||||||
- DMA clock for the amd-xgbe device (used for calculating the
|
|
||||||
correct Rx interrupt watchdog timer value on a DMA channel
|
|
||||||
for coalescing)
|
|
||||||
- PTP clock for the amd-xgbe device
|
|
||||||
- clock-names: Should be the names of the clocks
|
|
||||||
- "dma_clk" for the DMA clock
|
|
||||||
- "ptp_clk" for the PTP clock
|
|
||||||
- phy-mode: See ethernet.txt file in the same directory
|
|
||||||
|
|
||||||
Optional properties:
|
|
||||||
- dma-coherent: Present if dma operations are coherent
|
|
||||||
- amd,per-channel-interrupt: Indicates that Rx and Tx complete will generate
|
|
||||||
a unique interrupt for each DMA channel - this requires an additional
|
|
||||||
interrupt be configured for each DMA channel
|
|
||||||
- amd,speed-set: Speed capabilities of the device
|
|
||||||
0 - 1GbE and 10GbE (default)
|
|
||||||
1 - 2.5GbE and 10GbE
|
|
||||||
|
|
||||||
The MAC address will be determined using the optional properties defined in
|
|
||||||
ethernet.txt.
|
|
||||||
|
|
||||||
The following optional properties are represented by an array with each
|
|
||||||
value corresponding to a particular speed. The first array value represents
|
|
||||||
the setting for the 1GbE speed, the second value for the 2.5GbE speed and
|
|
||||||
the third value for the 10GbE speed. All three values are required if the
|
|
||||||
property is used.
|
|
||||||
- amd,serdes-blwc: Baseline wandering correction enablement
|
|
||||||
0 - Off
|
|
||||||
1 - On
|
|
||||||
- amd,serdes-cdr-rate: CDR rate speed selection
|
|
||||||
- amd,serdes-pq-skew: PQ (data sampling) skew
|
|
||||||
- amd,serdes-tx-amp: TX amplitude boost
|
|
||||||
- amd,serdes-dfe-tap-config: DFE taps available to run
|
|
||||||
- amd,serdes-dfe-tap-enable: DFE taps to enable
|
|
||||||
|
|
||||||
Example:
|
|
||||||
xgbe@e0700000 {
|
|
||||||
compatible = "amd,xgbe-seattle-v1a";
|
|
||||||
reg = <0 0xe0700000 0 0x80000>,
|
|
||||||
<0 0xe0780000 0 0x80000>,
|
|
||||||
<0 0xe1240800 0 0x00400>,
|
|
||||||
<0 0xe1250000 0 0x00060>,
|
|
||||||
<0 0xe1250080 0 0x00004>;
|
|
||||||
interrupt-parent = <&gic>;
|
|
||||||
interrupts = <0 325 4>,
|
|
||||||
<0 326 1>, <0 327 1>, <0 328 1>, <0 329 1>,
|
|
||||||
<0 323 4>;
|
|
||||||
amd,per-channel-interrupt;
|
|
||||||
clocks = <&xgbe_dma_clk>, <&xgbe_ptp_clk>;
|
|
||||||
clock-names = "dma_clk", "ptp_clk";
|
|
||||||
phy-mode = "xgmii";
|
|
||||||
mac-address = [ 02 a1 a2 a3 a4 a5 ];
|
|
||||||
amd,speed-set = <0>;
|
|
||||||
amd,serdes-blwc = <1>, <1>, <0>;
|
|
||||||
amd,serdes-cdr-rate = <2>, <2>, <7>;
|
|
||||||
amd,serdes-pq-skew = <10>, <10>, <30>;
|
|
||||||
amd,serdes-tx-amp = <15>, <15>, <10>;
|
|
||||||
amd,serdes-dfe-tap-config = <3>, <3>, <1>;
|
|
||||||
amd,serdes-dfe-tap-enable = <0>, <0>, <127>;
|
|
||||||
};
|
|
||||||
|
|
@ -19,7 +19,12 @@ allOf:
|
||||||
|
|
||||||
properties:
|
properties:
|
||||||
compatible:
|
compatible:
|
||||||
const: aspeed,ast2600-mdio
|
oneOf:
|
||||||
|
- const: aspeed,ast2600-mdio
|
||||||
|
- items:
|
||||||
|
- enum:
|
||||||
|
- aspeed,ast2700-mdio
|
||||||
|
- const: aspeed,ast2600-mdio
|
||||||
|
|
||||||
reg:
|
reg:
|
||||||
maxItems: 1
|
maxItems: 1
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,79 @@
|
||||||
|
# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
|
||||||
|
%YAML 1.2
|
||||||
|
---
|
||||||
|
$id: http://devicetree.org/schemas/net/bluetooth/marvell,sd8897-bt.yaml#
|
||||||
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||||
|
|
||||||
|
title: Marvell 8897/8997 (sd8897/sd8997) bluetooth devices (SDIO)
|
||||||
|
|
||||||
|
maintainers:
|
||||||
|
- Ariel D'Alessandro <ariel.dalessandro@collabora.com>
|
||||||
|
|
||||||
|
allOf:
|
||||||
|
- $ref: /schemas/net/bluetooth/bluetooth-controller.yaml#
|
||||||
|
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
enum:
|
||||||
|
- marvell,sd8897-bt
|
||||||
|
- marvell,sd8997-bt
|
||||||
|
|
||||||
|
reg:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
interrupts:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
marvell,cal-data:
|
||||||
|
$ref: /schemas/types.yaml#/definitions/uint8-array
|
||||||
|
description:
|
||||||
|
Calibration data downloaded to the device during initialization.
|
||||||
|
maxItems: 28
|
||||||
|
|
||||||
|
marvell,wakeup-pin:
|
||||||
|
$ref: /schemas/types.yaml#/definitions/uint16
|
||||||
|
description:
|
||||||
|
Wakeup pin number of the bluetooth chip. Used by firmware to wakeup host
|
||||||
|
system.
|
||||||
|
|
||||||
|
marvell,wakeup-gap-ms:
|
||||||
|
$ref: /schemas/types.yaml#/definitions/uint16
|
||||||
|
description:
|
||||||
|
Wakeup latency of the host platform. Required by the chip sleep feature.
|
||||||
|
|
||||||
|
required:
|
||||||
|
- compatible
|
||||||
|
- reg
|
||||||
|
- interrupts
|
||||||
|
|
||||||
|
additionalProperties: false
|
||||||
|
|
||||||
|
examples:
|
||||||
|
- |
|
||||||
|
#include <dt-bindings/interrupt-controller/irq.h>
|
||||||
|
|
||||||
|
mmc {
|
||||||
|
vmmc-supply = <&wlan_en_reg>;
|
||||||
|
bus-width = <4>;
|
||||||
|
cap-power-off-card;
|
||||||
|
keep-power-in-suspend;
|
||||||
|
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
bluetooth@2 {
|
||||||
|
compatible = "marvell,sd8897-bt";
|
||||||
|
reg = <2>;
|
||||||
|
interrupt-parent = <&pio>;
|
||||||
|
interrupts = <119 IRQ_TYPE_LEVEL_LOW>;
|
||||||
|
|
||||||
|
marvell,cal-data = /bits/ 8 <
|
||||||
|
0x37 0x01 0x1c 0x00 0xff 0xff 0xff 0xff 0x01 0x7f 0x04 0x02
|
||||||
|
0x00 0x00 0xba 0xce 0xc0 0xc6 0x2d 0x00 0x00 0x00 0x00 0x00
|
||||||
|
0x00 0x00 0xf0 0x00>;
|
||||||
|
marvell,wakeup-pin = /bits/ 16 <0x0d>;
|
||||||
|
marvell,wakeup-gap-ms = /bits/ 16 <0x64>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
...
|
||||||
|
|
@ -14,7 +14,7 @@ Required properties:
|
||||||
|
|
||||||
|
|
||||||
Also, vendors that use btusb may have device additional properties, e.g:
|
Also, vendors that use btusb may have device additional properties, e.g:
|
||||||
Documentation/devicetree/bindings/net/marvell-bt-8xxx.txt
|
Documentation/devicetree/bindings/net/bluetooth/marvell,sd8897-bt.yaml
|
||||||
|
|
||||||
Optional properties:
|
Optional properties:
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -109,6 +109,26 @@ properties:
|
||||||
maximum: 32
|
maximum: 32
|
||||||
minItems: 1
|
minItems: 1
|
||||||
|
|
||||||
|
pinctrl-0:
|
||||||
|
description: Default pinctrl state
|
||||||
|
|
||||||
|
pinctrl-1:
|
||||||
|
description: Can be "sleep" or "wakeup" pinctrl state
|
||||||
|
|
||||||
|
pinctrl-2:
|
||||||
|
description: Can be "sleep" or "wakeup" pinctrl state
|
||||||
|
|
||||||
|
pinctrl-names:
|
||||||
|
description:
|
||||||
|
When present should contain at least "default" describing the default pin
|
||||||
|
states. Other states are "sleep" which describes the pinstate when
|
||||||
|
sleeping and "wakeup" describing the pins if wakeup is enabled.
|
||||||
|
minItems: 1
|
||||||
|
items:
|
||||||
|
- const: default
|
||||||
|
- enum: [ sleep, wakeup ]
|
||||||
|
- const: wakeup
|
||||||
|
|
||||||
power-domains:
|
power-domains:
|
||||||
description:
|
description:
|
||||||
Power domain provider node and an args specifier containing
|
Power domain provider node and an args specifier containing
|
||||||
|
|
@ -125,6 +145,11 @@ properties:
|
||||||
minItems: 1
|
minItems: 1
|
||||||
maxItems: 2
|
maxItems: 2
|
||||||
|
|
||||||
|
wakeup-source:
|
||||||
|
$ref: /schemas/types.yaml#/definitions/phandle-array
|
||||||
|
description:
|
||||||
|
List of phandles to system idle states in which mcan can wakeup the system.
|
||||||
|
|
||||||
required:
|
required:
|
||||||
- compatible
|
- compatible
|
||||||
- reg
|
- reg
|
||||||
|
|
|
||||||
|
|
@ -49,6 +49,11 @@ properties:
|
||||||
Must be half or less of "clocks" frequency.
|
Must be half or less of "clocks" frequency.
|
||||||
maximum: 20000000
|
maximum: 20000000
|
||||||
|
|
||||||
|
gpio-controller: true
|
||||||
|
|
||||||
|
"#gpio-cells":
|
||||||
|
const: 2
|
||||||
|
|
||||||
required:
|
required:
|
||||||
- compatible
|
- compatible
|
||||||
- reg
|
- reg
|
||||||
|
|
|
||||||
|
|
@ -32,11 +32,15 @@ properties:
|
||||||
- description: AHB peripheral clock
|
- description: AHB peripheral clock
|
||||||
- description: CAN bus clock
|
- description: CAN bus clock
|
||||||
|
|
||||||
|
resets:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
required:
|
required:
|
||||||
- compatible
|
- compatible
|
||||||
- reg
|
- reg
|
||||||
- interrupts
|
- interrupts
|
||||||
- clocks
|
- clocks
|
||||||
|
- resets
|
||||||
|
|
||||||
additionalProperties: false
|
additionalProperties: false
|
||||||
|
|
||||||
|
|
@ -46,6 +50,7 @@ examples:
|
||||||
compatible = "microchip,mpfs-can";
|
compatible = "microchip,mpfs-can";
|
||||||
reg = <0x2010c000 0x1000>;
|
reg = <0x2010c000 0x1000>;
|
||||||
clocks = <&clkcfg 17>, <&clkcfg 37>;
|
clocks = <&clkcfg 17>, <&clkcfg 37>;
|
||||||
|
resets = <&clkcfg 17>;
|
||||||
interrupt-parent = <&plic>;
|
interrupt-parent = <&plic>;
|
||||||
interrupts = <56>;
|
interrupts = <56>;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,10 @@ properties:
|
||||||
- cdns,sam9x60-macb # Microchip sam9x60 SoC
|
- cdns,sam9x60-macb # Microchip sam9x60 SoC
|
||||||
- microchip,mpfs-macb # Microchip PolarFire SoC
|
- microchip,mpfs-macb # Microchip PolarFire SoC
|
||||||
- const: cdns,macb # Generic
|
- const: cdns,macb # Generic
|
||||||
|
- items:
|
||||||
|
- const: microchip,pic64gx-macb # Microchip PIC64GX SoC
|
||||||
|
- const: microchip,mpfs-macb # Microchip PolarFire SoC
|
||||||
|
- const: cdns,macb # Generic
|
||||||
- items:
|
- items:
|
||||||
- enum:
|
- enum:
|
||||||
- atmel,sama5d3-macb # 10/100Mbit IP on Atmel sama5d3 SoCs
|
- atmel,sama5d3-macb # 10/100Mbit IP on Atmel sama5d3 SoCs
|
||||||
|
|
@ -47,18 +50,19 @@ properties:
|
||||||
- const: cdns,macb # Generic
|
- const: cdns,macb # Generic
|
||||||
|
|
||||||
- enum:
|
- enum:
|
||||||
- atmel,sama5d29-gem # GEM XL IP (10/100) on Atmel sama5d29 SoCs
|
|
||||||
- atmel,sama5d2-gem # GEM IP (10/100) on Atmel sama5d2 SoCs
|
- atmel,sama5d2-gem # GEM IP (10/100) on Atmel sama5d2 SoCs
|
||||||
|
- atmel,sama5d29-gem # GEM XL IP (10/100) on Atmel sama5d29 SoCs
|
||||||
- atmel,sama5d3-gem # Gigabit IP on Atmel sama5d3 SoCs
|
- atmel,sama5d3-gem # Gigabit IP on Atmel sama5d3 SoCs
|
||||||
- atmel,sama5d4-gem # GEM IP (10/100) on Atmel sama5d4 SoCs
|
- atmel,sama5d4-gem # GEM IP (10/100) on Atmel sama5d4 SoCs
|
||||||
- cdns,np4-macb # NP4 SoC devices
|
|
||||||
- microchip,sama7g5-emac # Microchip SAMA7G5 ethernet interface
|
|
||||||
- microchip,sama7g5-gem # Microchip SAMA7G5 gigabit ethernet interface
|
|
||||||
- raspberrypi,rp1-gem # Raspberry Pi RP1 gigabit ethernet interface
|
|
||||||
- sifive,fu540-c000-gem # SiFive FU540-C000 SoC
|
|
||||||
- cdns,emac # Generic
|
- cdns,emac # Generic
|
||||||
- cdns,gem # Generic
|
- cdns,gem # Generic
|
||||||
- cdns,macb # Generic
|
- cdns,macb # Generic
|
||||||
|
- cdns,np4-macb # NP4 SoC devices
|
||||||
|
- microchip,sama7g5-emac # Microchip SAMA7G5 ethernet interface
|
||||||
|
- microchip,sama7g5-gem # Microchip SAMA7G5 gigabit ethernet interface
|
||||||
|
- mobileye,eyeq5-gem # Mobileye EyeQ5 SoCs
|
||||||
|
- raspberrypi,rp1-gem # Raspberry Pi RP1 gigabit ethernet interface
|
||||||
|
- sifive,fu540-c000-gem # SiFive FU540-C000 SoC
|
||||||
|
|
||||||
- items:
|
- items:
|
||||||
- enum:
|
- enum:
|
||||||
|
|
@ -183,6 +187,15 @@ allOf:
|
||||||
reg:
|
reg:
|
||||||
maxItems: 1
|
maxItems: 1
|
||||||
|
|
||||||
|
- if:
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
contains:
|
||||||
|
const: mobileye,eyeq5-gem
|
||||||
|
then:
|
||||||
|
required:
|
||||||
|
- phys
|
||||||
|
|
||||||
unevaluatedProperties: false
|
unevaluatedProperties: false
|
||||||
|
|
||||||
examples:
|
examples:
|
||||||
|
|
|
||||||
|
|
@ -4,10 +4,14 @@
|
||||||
$id: http://devicetree.org/schemas/net/dsa/lantiq,gswip.yaml#
|
$id: http://devicetree.org/schemas/net/dsa/lantiq,gswip.yaml#
|
||||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||||
|
|
||||||
title: Lantiq GSWIP Ethernet switches
|
title: Lantiq GSWIP and MaxLinear GSW1xx Ethernet switches
|
||||||
|
|
||||||
allOf:
|
description:
|
||||||
- $ref: dsa.yaml#/$defs/ethernet-ports
|
Lantiq GSWIP and MaxLinear GSW1xx switches share the same hardware IP.
|
||||||
|
Lantiq switches are embedded in SoCs and accessed via memory-mapped I/O,
|
||||||
|
while MaxLinear switches are standalone ICs connected via MDIO.
|
||||||
|
|
||||||
|
$ref: dsa.yaml#
|
||||||
|
|
||||||
maintainers:
|
maintainers:
|
||||||
- Hauke Mehrtens <hauke@hauke-m.de>
|
- Hauke Mehrtens <hauke@hauke-m.de>
|
||||||
|
|
@ -18,9 +22,14 @@ properties:
|
||||||
- lantiq,xrx200-gswip
|
- lantiq,xrx200-gswip
|
||||||
- lantiq,xrx300-gswip
|
- lantiq,xrx300-gswip
|
||||||
- lantiq,xrx330-gswip
|
- lantiq,xrx330-gswip
|
||||||
|
- maxlinear,gsw120
|
||||||
|
- maxlinear,gsw125
|
||||||
|
- maxlinear,gsw140
|
||||||
|
- maxlinear,gsw141
|
||||||
|
- maxlinear,gsw145
|
||||||
|
|
||||||
reg:
|
reg:
|
||||||
minItems: 3
|
minItems: 1
|
||||||
maxItems: 3
|
maxItems: 3
|
||||||
|
|
||||||
reg-names:
|
reg-names:
|
||||||
|
|
@ -37,9 +46,6 @@ properties:
|
||||||
compatible:
|
compatible:
|
||||||
const: lantiq,xrx200-mdio
|
const: lantiq,xrx200-mdio
|
||||||
|
|
||||||
required:
|
|
||||||
- compatible
|
|
||||||
|
|
||||||
gphy-fw:
|
gphy-fw:
|
||||||
type: object
|
type: object
|
||||||
properties:
|
properties:
|
||||||
|
|
@ -91,10 +97,63 @@ properties:
|
||||||
|
|
||||||
additionalProperties: false
|
additionalProperties: false
|
||||||
|
|
||||||
|
patternProperties:
|
||||||
|
"^(ethernet-)?ports$":
|
||||||
|
type: object
|
||||||
|
patternProperties:
|
||||||
|
"^(ethernet-)?port@[0-6]$":
|
||||||
|
$ref: dsa-port.yaml#
|
||||||
|
unevaluatedProperties: false
|
||||||
|
|
||||||
|
properties:
|
||||||
|
maxlinear,rmii-refclk-out:
|
||||||
|
type: boolean
|
||||||
|
description:
|
||||||
|
Configure the RMII reference clock to be a clock output
|
||||||
|
rather than an input. Only applicable for RMII mode.
|
||||||
|
tx-internal-delay-ps:
|
||||||
|
enum: [0, 500, 1000, 1500, 2000, 2500, 3000, 3500]
|
||||||
|
description:
|
||||||
|
RGMII TX Clock Delay defined in pico seconds.
|
||||||
|
The delay lines adjust the MII clock vs. data timing.
|
||||||
|
If this property is not present the delay is determined by
|
||||||
|
the interface mode.
|
||||||
|
rx-internal-delay-ps:
|
||||||
|
enum: [0, 500, 1000, 1500, 2000, 2500, 3000, 3500]
|
||||||
|
description:
|
||||||
|
RGMII RX Clock Delay defined in pico seconds.
|
||||||
|
The delay lines adjust the MII clock vs. data timing.
|
||||||
|
If this property is not present the delay is determined by
|
||||||
|
the interface mode.
|
||||||
|
|
||||||
required:
|
required:
|
||||||
- compatible
|
- compatible
|
||||||
- reg
|
- reg
|
||||||
|
|
||||||
|
allOf:
|
||||||
|
- if:
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
contains:
|
||||||
|
enum:
|
||||||
|
- lantiq,xrx200-gswip
|
||||||
|
- lantiq,xrx300-gswip
|
||||||
|
- lantiq,xrx330-gswip
|
||||||
|
then:
|
||||||
|
properties:
|
||||||
|
reg:
|
||||||
|
minItems: 3
|
||||||
|
maxItems: 3
|
||||||
|
mdio:
|
||||||
|
required:
|
||||||
|
- compatible
|
||||||
|
else:
|
||||||
|
properties:
|
||||||
|
reg:
|
||||||
|
maxItems: 1
|
||||||
|
reg-names: false
|
||||||
|
gphy-fw: false
|
||||||
|
|
||||||
unevaluatedProperties: false
|
unevaluatedProperties: false
|
||||||
|
|
||||||
examples:
|
examples:
|
||||||
|
|
@ -113,8 +172,10 @@ examples:
|
||||||
port@0 {
|
port@0 {
|
||||||
reg = <0>;
|
reg = <0>;
|
||||||
label = "lan3";
|
label = "lan3";
|
||||||
phy-mode = "rgmii";
|
phy-mode = "rgmii-id";
|
||||||
phy-handle = <&phy0>;
|
phy-handle = <&phy0>;
|
||||||
|
tx-internal-delay-ps = <2000>;
|
||||||
|
rx-internal-delay-ps = <2000>;
|
||||||
};
|
};
|
||||||
|
|
||||||
port@1 {
|
port@1 {
|
||||||
|
|
@ -200,3 +261,90 @@ examples:
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
- |
|
||||||
|
#include <dt-bindings/leds/common.h>
|
||||||
|
|
||||||
|
mdio {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
switch@1f {
|
||||||
|
compatible = "maxlinear,gsw125";
|
||||||
|
reg = <0x1f>;
|
||||||
|
|
||||||
|
ports {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
port@0 {
|
||||||
|
reg = <0>;
|
||||||
|
label = "lan0";
|
||||||
|
phy-handle = <&switchphy0>;
|
||||||
|
phy-mode = "internal";
|
||||||
|
};
|
||||||
|
|
||||||
|
port@1 {
|
||||||
|
reg = <1>;
|
||||||
|
label = "lan1";
|
||||||
|
phy-handle = <&switchphy1>;
|
||||||
|
phy-mode = "internal";
|
||||||
|
};
|
||||||
|
|
||||||
|
port@4 {
|
||||||
|
reg = <4>;
|
||||||
|
label = "wan";
|
||||||
|
phy-mode = "1000base-x";
|
||||||
|
managed = "in-band-status";
|
||||||
|
};
|
||||||
|
|
||||||
|
port@5 {
|
||||||
|
reg = <5>;
|
||||||
|
phy-mode = "rgmii-id";
|
||||||
|
tx-internal-delay-ps = <2000>;
|
||||||
|
rx-internal-delay-ps = <2000>;
|
||||||
|
ethernet = <ð0>;
|
||||||
|
|
||||||
|
fixed-link {
|
||||||
|
speed = <1000>;
|
||||||
|
full-duplex;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
mdio {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
switchphy0: switchphy@0 {
|
||||||
|
reg = <0>;
|
||||||
|
|
||||||
|
leds {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
led@0 {
|
||||||
|
reg = <0>;
|
||||||
|
color = <LED_COLOR_ID_GREEN>;
|
||||||
|
function = LED_FUNCTION_LAN;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
switchphy1: switchphy@1 {
|
||||||
|
reg = <1>;
|
||||||
|
|
||||||
|
leds {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
led@0 {
|
||||||
|
reg = <0>;
|
||||||
|
color = <LED_COLOR_ID_GREEN>;
|
||||||
|
function = LED_FUNCTION_LAN;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,167 @@
|
||||||
|
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||||
|
%YAML 1.2
|
||||||
|
---
|
||||||
|
$id: http://devicetree.org/schemas/net/dsa/motorcomm,yt921x.yaml#
|
||||||
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||||
|
|
||||||
|
title: Motorcomm YT921x Ethernet switch family
|
||||||
|
|
||||||
|
maintainers:
|
||||||
|
- David Yang <mmyangfl@gmail.com>
|
||||||
|
|
||||||
|
description: |
|
||||||
|
The Motorcomm YT921x series is a family of Ethernet switches with up to 8
|
||||||
|
internal GbE PHYs and up to 2 GMACs, including:
|
||||||
|
|
||||||
|
- YT9215S / YT9215RB / YT9215SC: 5 GbE PHYs (Port 0-4) + 2 GMACs (Port 8-9)
|
||||||
|
- YT9213NB: 2 GbE PHYs (Port 1/3) + 1 GMAC (Port 9)
|
||||||
|
- YT9214NB: 2 GbE PHYs (Port 1/3) + 2 GMACs (Port 8-9)
|
||||||
|
- YT9218N: 8 GbE PHYs (Port 0-7)
|
||||||
|
- YT9218MB: 8 GbE PHYs (Port 0-7) + 2 GMACs (Port 8-9)
|
||||||
|
|
||||||
|
Any port can be used as the CPU port.
|
||||||
|
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
const: motorcomm,yt9215
|
||||||
|
|
||||||
|
reg:
|
||||||
|
enum: [0x0, 0x1d]
|
||||||
|
|
||||||
|
reset-gpios:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
mdio:
|
||||||
|
$ref: /schemas/net/mdio.yaml#
|
||||||
|
unevaluatedProperties: false
|
||||||
|
description:
|
||||||
|
Internal MDIO bus for the internal GbE PHYs. PHY 0-7 are used for Port
|
||||||
|
0-7 respectively.
|
||||||
|
|
||||||
|
mdio-external:
|
||||||
|
$ref: /schemas/net/mdio.yaml#
|
||||||
|
unevaluatedProperties: false
|
||||||
|
description:
|
||||||
|
External MDIO bus to access external components. External PHYs for GMACs
|
||||||
|
(Port 8-9) are expected to be connected to the external MDIO bus in
|
||||||
|
vendor's reference design, but that is not a hard limitation from the
|
||||||
|
chip.
|
||||||
|
|
||||||
|
required:
|
||||||
|
- compatible
|
||||||
|
- reg
|
||||||
|
|
||||||
|
allOf:
|
||||||
|
- $ref: dsa.yaml#/$defs/ethernet-ports
|
||||||
|
|
||||||
|
unevaluatedProperties: false
|
||||||
|
|
||||||
|
examples:
|
||||||
|
- |
|
||||||
|
#include <dt-bindings/gpio/gpio.h>
|
||||||
|
|
||||||
|
mdio {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
switch@1d {
|
||||||
|
compatible = "motorcomm,yt9215";
|
||||||
|
/* default 0x1d, alternate 0x0 */
|
||||||
|
reg = <0x1d>;
|
||||||
|
reset-gpios = <&tlmm 39 GPIO_ACTIVE_LOW>;
|
||||||
|
|
||||||
|
mdio {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
sw_phy0: phy@0 {
|
||||||
|
reg = <0x0>;
|
||||||
|
};
|
||||||
|
|
||||||
|
sw_phy1: phy@1 {
|
||||||
|
reg = <0x1>;
|
||||||
|
};
|
||||||
|
|
||||||
|
sw_phy2: phy@2 {
|
||||||
|
reg = <0x2>;
|
||||||
|
};
|
||||||
|
|
||||||
|
sw_phy3: phy@3 {
|
||||||
|
reg = <0x3>;
|
||||||
|
};
|
||||||
|
|
||||||
|
sw_phy4: phy@4 {
|
||||||
|
reg = <0x4>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
mdio-external {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
phy1: phy@b {
|
||||||
|
reg = <0xb>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
ethernet-ports {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
ethernet-port@0 {
|
||||||
|
reg = <0>;
|
||||||
|
label = "lan1";
|
||||||
|
phy-mode = "internal";
|
||||||
|
phy-handle = <&sw_phy0>;
|
||||||
|
};
|
||||||
|
|
||||||
|
ethernet-port@1 {
|
||||||
|
reg = <1>;
|
||||||
|
label = "lan2";
|
||||||
|
phy-mode = "internal";
|
||||||
|
phy-handle = <&sw_phy1>;
|
||||||
|
};
|
||||||
|
|
||||||
|
ethernet-port@2 {
|
||||||
|
reg = <2>;
|
||||||
|
label = "lan3";
|
||||||
|
phy-mode = "internal";
|
||||||
|
phy-handle = <&sw_phy2>;
|
||||||
|
};
|
||||||
|
|
||||||
|
ethernet-port@3 {
|
||||||
|
reg = <3>;
|
||||||
|
label = "lan4";
|
||||||
|
phy-mode = "internal";
|
||||||
|
phy-handle = <&sw_phy3>;
|
||||||
|
};
|
||||||
|
|
||||||
|
ethernet-port@4 {
|
||||||
|
reg = <4>;
|
||||||
|
label = "lan5";
|
||||||
|
phy-mode = "internal";
|
||||||
|
phy-handle = <&sw_phy4>;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* CPU port */
|
||||||
|
ethernet-port@8 {
|
||||||
|
reg = <8>;
|
||||||
|
phy-mode = "2500base-x";
|
||||||
|
ethernet = <ð0>;
|
||||||
|
|
||||||
|
fixed-link {
|
||||||
|
speed = <2500>;
|
||||||
|
full-duplex;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
/* if external phy is connected to a MAC */
|
||||||
|
ethernet-port@9 {
|
||||||
|
reg = <9>;
|
||||||
|
label = "wan";
|
||||||
|
phy-mode = "rgmii-id";
|
||||||
|
phy-handle = <&phy1>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
@ -41,6 +41,9 @@ properties:
|
||||||
therefore discouraged.
|
therefore discouraged.
|
||||||
maxItems: 1
|
maxItems: 1
|
||||||
|
|
||||||
|
clocks:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
spi-cpha: true
|
spi-cpha: true
|
||||||
spi-cpol: true
|
spi-cpol: true
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,129 @@
|
||||||
|
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||||
|
%YAML 1.2
|
||||||
|
---
|
||||||
|
$id: http://devicetree.org/schemas/net/eswin,eic7700-eth.yaml#
|
||||||
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||||
|
|
||||||
|
title: Eswin EIC7700 SOC Eth Controller
|
||||||
|
|
||||||
|
maintainers:
|
||||||
|
- Shuang Liang <liangshuang@eswincomputing.com>
|
||||||
|
- Zhi Li <lizhi2@eswincomputing.com>
|
||||||
|
- Shangjuan Wei <weishangjuan@eswincomputing.com>
|
||||||
|
|
||||||
|
description:
|
||||||
|
Platform glue layer implementation for STMMAC Ethernet driver.
|
||||||
|
|
||||||
|
select:
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
contains:
|
||||||
|
enum:
|
||||||
|
- eswin,eic7700-qos-eth
|
||||||
|
required:
|
||||||
|
- compatible
|
||||||
|
|
||||||
|
allOf:
|
||||||
|
- $ref: snps,dwmac.yaml#
|
||||||
|
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
items:
|
||||||
|
- const: eswin,eic7700-qos-eth
|
||||||
|
- const: snps,dwmac-5.20
|
||||||
|
|
||||||
|
reg:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
interrupts:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
interrupt-names:
|
||||||
|
const: macirq
|
||||||
|
|
||||||
|
clocks:
|
||||||
|
items:
|
||||||
|
- description: AXI clock
|
||||||
|
- description: Configuration clock
|
||||||
|
- description: GMAC main clock
|
||||||
|
- description: Tx clock
|
||||||
|
|
||||||
|
clock-names:
|
||||||
|
items:
|
||||||
|
- const: axi
|
||||||
|
- const: cfg
|
||||||
|
- const: stmmaceth
|
||||||
|
- const: tx
|
||||||
|
|
||||||
|
resets:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
reset-names:
|
||||||
|
items:
|
||||||
|
- const: stmmaceth
|
||||||
|
|
||||||
|
rx-internal-delay-ps:
|
||||||
|
enum: [0, 200, 600, 1200, 1600, 1800, 2000, 2200, 2400]
|
||||||
|
|
||||||
|
tx-internal-delay-ps:
|
||||||
|
enum: [0, 200, 600, 1200, 1600, 1800, 2000, 2200, 2400]
|
||||||
|
|
||||||
|
eswin,hsp-sp-csr:
|
||||||
|
description:
|
||||||
|
HSP CSR is to control and get status of different high-speed peripherals
|
||||||
|
(such as Ethernet, USB, SATA, etc.) via register, which can tune
|
||||||
|
board-level's parameters of PHY, etc.
|
||||||
|
$ref: /schemas/types.yaml#/definitions/phandle-array
|
||||||
|
items:
|
||||||
|
- items:
|
||||||
|
- description: Phandle to HSP(High-Speed Peripheral) device
|
||||||
|
- description: Offset of phy control register for internal
|
||||||
|
or external clock selection
|
||||||
|
- description: Offset of AXI clock controller Low-Power request
|
||||||
|
register
|
||||||
|
- description: Offset of register controlling TX/RX clock delay
|
||||||
|
|
||||||
|
required:
|
||||||
|
- compatible
|
||||||
|
- reg
|
||||||
|
- clocks
|
||||||
|
- clock-names
|
||||||
|
- interrupts
|
||||||
|
- interrupt-names
|
||||||
|
- phy-mode
|
||||||
|
- resets
|
||||||
|
- reset-names
|
||||||
|
- rx-internal-delay-ps
|
||||||
|
- tx-internal-delay-ps
|
||||||
|
- eswin,hsp-sp-csr
|
||||||
|
|
||||||
|
unevaluatedProperties: false
|
||||||
|
|
||||||
|
examples:
|
||||||
|
- |
|
||||||
|
ethernet@50400000 {
|
||||||
|
compatible = "eswin,eic7700-qos-eth", "snps,dwmac-5.20";
|
||||||
|
reg = <0x50400000 0x10000>;
|
||||||
|
clocks = <&d0_clock 186>, <&d0_clock 171>, <&d0_clock 40>,
|
||||||
|
<&d0_clock 193>;
|
||||||
|
clock-names = "axi", "cfg", "stmmaceth", "tx";
|
||||||
|
interrupt-parent = <&plic>;
|
||||||
|
interrupts = <61>;
|
||||||
|
interrupt-names = "macirq";
|
||||||
|
phy-mode = "rgmii-id";
|
||||||
|
phy-handle = <&phy0>;
|
||||||
|
resets = <&reset 95>;
|
||||||
|
reset-names = "stmmaceth";
|
||||||
|
rx-internal-delay-ps = <200>;
|
||||||
|
tx-internal-delay-ps = <200>;
|
||||||
|
eswin,hsp-sp-csr = <&hsp_sp_csr 0x100 0x108 0x118>;
|
||||||
|
snps,axi-config = <&stmmac_axi_setup>;
|
||||||
|
snps,aal;
|
||||||
|
snps,fixed-burst;
|
||||||
|
snps,tso;
|
||||||
|
stmmac_axi_setup: stmmac-axi-config {
|
||||||
|
snps,blen = <0 0 0 0 16 8 4>;
|
||||||
|
snps,rd_osr_lmt = <2>;
|
||||||
|
snps,wr_osr_lmt = <2>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
@ -35,9 +35,13 @@ properties:
|
||||||
description: PHYs that implement IEEE802.3 clause 45
|
description: PHYs that implement IEEE802.3 clause 45
|
||||||
- pattern: "^ethernet-phy-id[a-f0-9]{4}\\.[a-f0-9]{4}$"
|
- pattern: "^ethernet-phy-id[a-f0-9]{4}\\.[a-f0-9]{4}$"
|
||||||
description:
|
description:
|
||||||
If the PHY reports an incorrect ID (or none at all) then the
|
PHYs contain identification registers. These will be read to
|
||||||
compatible list may contain an entry with the correct PHY ID
|
identify the PHY. If the PHY reports an incorrect ID, or the
|
||||||
in the above form.
|
PHY requires a specific initialization sequence (like a
|
||||||
|
particular order of clocks, resets, power supplies), in
|
||||||
|
order to be able to read the ID registers, then the
|
||||||
|
compatible list must contain an entry with the correct PHY
|
||||||
|
ID in the above form.
|
||||||
The first group of digits is the 16 bit Phy Identifier 1
|
The first group of digits is the 16 bit Phy Identifier 1
|
||||||
register, this is the chip vendor OUI bits 3:18. The
|
register, this is the chip vendor OUI bits 3:18. The
|
||||||
second group of digits is the Phy Identifier 2 register,
|
second group of digits is the Phy Identifier 2 register,
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,7 @@ properties:
|
||||||
- const: fsl,enetc
|
- const: fsl,enetc
|
||||||
- enum:
|
- enum:
|
||||||
- pci1131,e101
|
- pci1131,e101
|
||||||
|
- pci1131,e110
|
||||||
|
|
||||||
reg:
|
reg:
|
||||||
maxItems: 1
|
maxItems: 1
|
||||||
|
|
|
||||||
|
|
@ -1,83 +0,0 @@
|
||||||
Marvell 8897/8997 (sd8897/sd8997) bluetooth devices (SDIO or USB based)
|
|
||||||
------
|
|
||||||
The 8997 devices supports multiple interfaces. When used on SDIO interfaces,
|
|
||||||
the btmrvl driver is used and when used on USB interface, the btusb driver is
|
|
||||||
used.
|
|
||||||
|
|
||||||
Required properties:
|
|
||||||
|
|
||||||
- compatible : should be one of the following:
|
|
||||||
* "marvell,sd8897-bt" (for SDIO)
|
|
||||||
* "marvell,sd8997-bt" (for SDIO)
|
|
||||||
* "usb1286,204e" (for USB)
|
|
||||||
|
|
||||||
Optional properties:
|
|
||||||
|
|
||||||
- marvell,cal-data: Calibration data downloaded to the device during
|
|
||||||
initialization. This is an array of 28 values(u8).
|
|
||||||
This is only applicable to SDIO devices.
|
|
||||||
|
|
||||||
- marvell,wakeup-pin: It represents wakeup pin number of the bluetooth chip.
|
|
||||||
firmware will use the pin to wakeup host system (u16).
|
|
||||||
- marvell,wakeup-gap-ms: wakeup gap represents wakeup latency of the host
|
|
||||||
platform. The value will be configured to firmware. This
|
|
||||||
is needed to work chip's sleep feature as expected (u16).
|
|
||||||
- interrupt-names: Used only for USB based devices (See below)
|
|
||||||
- interrupts : specifies the interrupt pin number to the cpu. For SDIO, the
|
|
||||||
driver will use the first interrupt specified in the interrupt
|
|
||||||
array. For USB based devices, the driver will use the interrupt
|
|
||||||
named "wakeup" from the interrupt-names and interrupt arrays.
|
|
||||||
The driver will request an irq based on this interrupt number.
|
|
||||||
During system suspend, the irq will be enabled so that the
|
|
||||||
bluetooth chip can wakeup host platform under certain
|
|
||||||
conditions. During system resume, the irq will be disabled
|
|
||||||
to make sure unnecessary interrupt is not received.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
IRQ pin 119 is used as system wakeup source interrupt.
|
|
||||||
wakeup pin 13 and gap 100ms are configured so that firmware can wakeup host
|
|
||||||
using this device side pin and wakeup latency.
|
|
||||||
|
|
||||||
Example for SDIO device follows (calibration data is also available in
|
|
||||||
below example).
|
|
||||||
|
|
||||||
&mmc3 {
|
|
||||||
vmmc-supply = <&wlan_en_reg>;
|
|
||||||
bus-width = <4>;
|
|
||||||
cap-power-off-card;
|
|
||||||
keep-power-in-suspend;
|
|
||||||
|
|
||||||
#address-cells = <1>;
|
|
||||||
#size-cells = <0>;
|
|
||||||
btmrvl: bluetooth@2 {
|
|
||||||
compatible = "marvell,sd8897-bt";
|
|
||||||
reg = <2>;
|
|
||||||
interrupt-parent = <&pio>;
|
|
||||||
interrupts = <119 IRQ_TYPE_LEVEL_LOW>;
|
|
||||||
|
|
||||||
marvell,cal-data = /bits/ 8 <
|
|
||||||
0x37 0x01 0x1c 0x00 0xff 0xff 0xff 0xff 0x01 0x7f 0x04 0x02
|
|
||||||
0x00 0x00 0xba 0xce 0xc0 0xc6 0x2d 0x00 0x00 0x00 0x00 0x00
|
|
||||||
0x00 0x00 0xf0 0x00>;
|
|
||||||
marvell,wakeup-pin = /bits/ 16 <0x0d>;
|
|
||||||
marvell,wakeup-gap-ms = /bits/ 16 <0x64>;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
Example for USB device:
|
|
||||||
|
|
||||||
&usb_host1_ohci {
|
|
||||||
#address-cells = <1>;
|
|
||||||
#size-cells = <0>;
|
|
||||||
|
|
||||||
mvl_bt1: bt@1 {
|
|
||||||
compatible = "usb1286,204e";
|
|
||||||
reg = <1>;
|
|
||||||
interrupt-parent = <&gpio0>;
|
|
||||||
interrupt-names = "wakeup";
|
|
||||||
interrupts = <119 IRQ_TYPE_LEVEL_LOW>;
|
|
||||||
marvell,wakeup-pin = /bits/ 16 <0x0d>;
|
|
||||||
marvell,wakeup-gap-ms = /bits/ 16 <0x64>;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
@ -112,7 +112,7 @@ properties:
|
||||||
|
|
||||||
mediatek,wed:
|
mediatek,wed:
|
||||||
$ref: /schemas/types.yaml#/definitions/phandle-array
|
$ref: /schemas/types.yaml#/definitions/phandle-array
|
||||||
minItems: 2
|
minItems: 1
|
||||||
maxItems: 2
|
maxItems: 2
|
||||||
items:
|
items:
|
||||||
maxItems: 1
|
maxItems: 1
|
||||||
|
|
@ -249,6 +249,9 @@ allOf:
|
||||||
minItems: 1
|
minItems: 1
|
||||||
maxItems: 1
|
maxItems: 1
|
||||||
|
|
||||||
|
mediatek,wed:
|
||||||
|
minItems: 2
|
||||||
|
|
||||||
mediatek,wed-pcie: false
|
mediatek,wed-pcie: false
|
||||||
else:
|
else:
|
||||||
properties:
|
properties:
|
||||||
|
|
@ -338,12 +341,13 @@ allOf:
|
||||||
- const: netsys0
|
- const: netsys0
|
||||||
- const: netsys1
|
- const: netsys1
|
||||||
|
|
||||||
mediatek,infracfg: false
|
|
||||||
|
|
||||||
mediatek,sgmiisys:
|
mediatek,sgmiisys:
|
||||||
minItems: 2
|
minItems: 2
|
||||||
maxItems: 2
|
maxItems: 2
|
||||||
|
|
||||||
|
mediatek,wed:
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
- if:
|
- if:
|
||||||
properties:
|
properties:
|
||||||
compatible:
|
compatible:
|
||||||
|
|
@ -385,6 +389,9 @@ allOf:
|
||||||
minItems: 2
|
minItems: 2
|
||||||
maxItems: 2
|
maxItems: 2
|
||||||
|
|
||||||
|
mediatek,wed:
|
||||||
|
minItems: 2
|
||||||
|
|
||||||
- if:
|
- if:
|
||||||
properties:
|
properties:
|
||||||
compatible:
|
compatible:
|
||||||
|
|
@ -429,6 +436,19 @@ allOf:
|
||||||
- const: xgp2
|
- const: xgp2
|
||||||
- const: xgp3
|
- const: xgp3
|
||||||
|
|
||||||
|
mediatek,wed:
|
||||||
|
minItems: 2
|
||||||
|
|
||||||
|
- if:
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
contains:
|
||||||
|
const: ralink,rt5350-eth
|
||||||
|
then:
|
||||||
|
properties:
|
||||||
|
mediatek,wed:
|
||||||
|
minItems: 2
|
||||||
|
|
||||||
patternProperties:
|
patternProperties:
|
||||||
"^mac@[0-2]$":
|
"^mac@[0-2]$":
|
||||||
type: object
|
type: object
|
||||||
|
|
|
||||||
|
|
@ -1,73 +0,0 @@
|
||||||
* Microsemi - vsc8531 Giga bit ethernet phy
|
|
||||||
|
|
||||||
Optional properties:
|
|
||||||
- vsc8531,vddmac : The vddmac in mV. Allowed values is listed
|
|
||||||
in the first row of Table 1 (below).
|
|
||||||
This property is only used in combination
|
|
||||||
with the 'edge-slowdown' property.
|
|
||||||
Default value is 3300.
|
|
||||||
- vsc8531,edge-slowdown : % the edge should be slowed down relative to
|
|
||||||
the fastest possible edge time.
|
|
||||||
Edge rate sets the drive strength of the MAC
|
|
||||||
interface output signals. Changing the
|
|
||||||
drive strength will affect the edge rate of
|
|
||||||
the output signal. The goal of this setting
|
|
||||||
is to help reduce electrical emission (EMI)
|
|
||||||
by being able to reprogram drive strength
|
|
||||||
and in effect slow down the edge rate if
|
|
||||||
desired.
|
|
||||||
To adjust the edge-slowdown, the 'vddmac'
|
|
||||||
must be specified. Table 1 lists the
|
|
||||||
supported edge-slowdown values for a given
|
|
||||||
'vddmac'.
|
|
||||||
Default value is 0%.
|
|
||||||
Ref: Table:1 - Edge rate change (below).
|
|
||||||
- vsc8531,led-[N]-mode : LED mode. Specify how the LED[N] should behave.
|
|
||||||
N depends on the number of LEDs supported by a
|
|
||||||
PHY.
|
|
||||||
Allowed values are defined in
|
|
||||||
"include/dt-bindings/net/mscc-phy-vsc8531.h".
|
|
||||||
Default values are VSC8531_LINK_1000_ACTIVITY (1),
|
|
||||||
VSC8531_LINK_100_ACTIVITY (2),
|
|
||||||
VSC8531_LINK_ACTIVITY (0) and
|
|
||||||
VSC8531_DUPLEX_COLLISION (8).
|
|
||||||
- load-save-gpios : GPIO used for the load/save operation of the PTP
|
|
||||||
hardware clock (PHC).
|
|
||||||
|
|
||||||
|
|
||||||
Table: 1 - Edge rate change
|
|
||||||
----------------------------------------------------------------|
|
|
||||||
| Edge Rate Change (VDDMAC) |
|
|
||||||
| |
|
|
||||||
| 3300 mV 2500 mV 1800 mV 1500 mV |
|
|
||||||
|---------------------------------------------------------------|
|
|
||||||
| 0% 0% 0% 0% |
|
|
||||||
| (Fastest) (recommended) (recommended) |
|
|
||||||
|---------------------------------------------------------------|
|
|
||||||
| 2% 3% 5% 6% |
|
|
||||||
|---------------------------------------------------------------|
|
|
||||||
| 4% 6% 9% 14% |
|
|
||||||
|---------------------------------------------------------------|
|
|
||||||
| 7% 10% 16% 21% |
|
|
||||||
|(recommended) (recommended) |
|
|
||||||
|---------------------------------------------------------------|
|
|
||||||
| 10% 14% 23% 29% |
|
|
||||||
|---------------------------------------------------------------|
|
|
||||||
| 17% 23% 35% 42% |
|
|
||||||
|---------------------------------------------------------------|
|
|
||||||
| 29% 37% 52% 58% |
|
|
||||||
|---------------------------------------------------------------|
|
|
||||||
| 53% 63% 76% 77% |
|
|
||||||
| (slowest) |
|
|
||||||
|---------------------------------------------------------------|
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
vsc8531_0: ethernet-phy@0 {
|
|
||||||
compatible = "ethernet-phy-id0007.0570";
|
|
||||||
vsc8531,vddmac = <3300>;
|
|
||||||
vsc8531,edge-slowdown = <7>;
|
|
||||||
vsc8531,led-0-mode = <VSC8531_LINK_1000_ACTIVITY>;
|
|
||||||
vsc8531,led-1-mode = <VSC8531_LINK_100_ACTIVITY>;
|
|
||||||
load-save-gpios = <&gpio 10 GPIO_ACTIVE_HIGH>;
|
|
||||||
};
|
|
||||||
|
|
@ -0,0 +1,131 @@
|
||||||
|
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||||
|
%YAML 1.2
|
||||||
|
---
|
||||||
|
$id: http://devicetree.org/schemas/net/mscc-phy-vsc8531.yaml#
|
||||||
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||||
|
|
||||||
|
title: Microsemi VSC8531 Gigabit Ethernet PHY
|
||||||
|
|
||||||
|
maintainers:
|
||||||
|
- Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
|
||||||
|
|
||||||
|
description:
|
||||||
|
The VSC8531 is a Gigabit Ethernet PHY with configurable MAC interface
|
||||||
|
drive strength and LED modes.
|
||||||
|
|
||||||
|
allOf:
|
||||||
|
- $ref: ethernet-phy.yaml#
|
||||||
|
|
||||||
|
select:
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
contains:
|
||||||
|
enum:
|
||||||
|
- ethernet-phy-id0007.0570 # VSC8531
|
||||||
|
- ethernet-phy-id0007.0772 # VSC8541
|
||||||
|
required:
|
||||||
|
- compatible
|
||||||
|
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
items:
|
||||||
|
- enum:
|
||||||
|
- ethernet-phy-id0007.0570 # VSC8531
|
||||||
|
- ethernet-phy-id0007.0772 # VSC8541
|
||||||
|
- const: ethernet-phy-ieee802.3-c22
|
||||||
|
|
||||||
|
vsc8531,vddmac:
|
||||||
|
$ref: /schemas/types.yaml#/definitions/uint32
|
||||||
|
description:
|
||||||
|
The VDDMAC voltage in millivolts. This property is used in combination
|
||||||
|
with the edge-slowdown property to control the drive strength of the
|
||||||
|
MAC interface output signals.
|
||||||
|
enum: [3300, 2500, 1800, 1500]
|
||||||
|
default: 3300
|
||||||
|
|
||||||
|
vsc8531,edge-slowdown:
|
||||||
|
$ref: /schemas/types.yaml#/definitions/uint32
|
||||||
|
description: >
|
||||||
|
Percentage by which the edge rate should be slowed down relative to
|
||||||
|
the fastest possible edge time. This setting helps reduce electromagnetic
|
||||||
|
interference (EMI) by adjusting the drive strength of the MAC interface
|
||||||
|
output signals. Valid values depend on the vddmac voltage setting
|
||||||
|
according to the edge rate change table in the datasheet.
|
||||||
|
|
||||||
|
- When vsc8531,vddmac = 3300 mV: allowed values are 0, 2, 4, 7, 10, 17, 29, and 53.
|
||||||
|
(Recommended: 7)
|
||||||
|
- When vsc8531,vddmac = 2500 mV: allowed values are 0, 3, 6, 10, 14, 23, 37, and 63.
|
||||||
|
(Recommended: 10)
|
||||||
|
- When vsc8531,vddmac = 1800 mV: allowed values are 0, 5, 9, 16, 23, 35, 52, and 76.
|
||||||
|
(Recommended: 0)
|
||||||
|
- When vsc8531,vddmac = 1500 mV: allowed values are 0, 6, 14, 21, 29, 42, 58, and 77.
|
||||||
|
(Recommended: 0)
|
||||||
|
enum: [0, 2, 3, 4, 5, 6, 7, 9, 10, 14, 16, 17, 21, 23, 29, 35, 37, 42, 52, 53, 58, 63, 76, 77]
|
||||||
|
default: 0
|
||||||
|
|
||||||
|
vsc8531,led-0-mode:
|
||||||
|
$ref: /schemas/types.yaml#/definitions/uint32
|
||||||
|
description: LED[0] behavior mode. See include/dt-bindings/net/mscc-phy-vsc8531.h
|
||||||
|
for available modes.
|
||||||
|
minimum: 0
|
||||||
|
maximum: 15
|
||||||
|
default: 1
|
||||||
|
|
||||||
|
vsc8531,led-1-mode:
|
||||||
|
$ref: /schemas/types.yaml#/definitions/uint32
|
||||||
|
description: LED[1] behavior mode. See include/dt-bindings/net/mscc-phy-vsc8531.h
|
||||||
|
for available modes.
|
||||||
|
minimum: 0
|
||||||
|
maximum: 15
|
||||||
|
default: 2
|
||||||
|
|
||||||
|
vsc8531,led-2-mode:
|
||||||
|
$ref: /schemas/types.yaml#/definitions/uint32
|
||||||
|
description: LED[2] behavior mode. See include/dt-bindings/net/mscc-phy-vsc8531.h
|
||||||
|
for available modes.
|
||||||
|
minimum: 0
|
||||||
|
maximum: 15
|
||||||
|
default: 0
|
||||||
|
|
||||||
|
vsc8531,led-3-mode:
|
||||||
|
$ref: /schemas/types.yaml#/definitions/uint32
|
||||||
|
description: LED[3] behavior mode. See include/dt-bindings/net/mscc-phy-vsc8531.h
|
||||||
|
for available modes.
|
||||||
|
minimum: 0
|
||||||
|
maximum: 15
|
||||||
|
default: 8
|
||||||
|
|
||||||
|
load-save-gpios:
|
||||||
|
description: GPIO phandle used for the load/save operation of the PTP hardware
|
||||||
|
clock (PHC).
|
||||||
|
maxItems: 1
|
||||||
|
|
||||||
|
dependencies:
|
||||||
|
vsc8531,edge-slowdown:
|
||||||
|
- vsc8531,vddmac
|
||||||
|
|
||||||
|
required:
|
||||||
|
- compatible
|
||||||
|
- reg
|
||||||
|
|
||||||
|
unevaluatedProperties: false
|
||||||
|
|
||||||
|
examples:
|
||||||
|
- |
|
||||||
|
#include <dt-bindings/gpio/gpio.h>
|
||||||
|
#include <dt-bindings/net/mscc-phy-vsc8531.h>
|
||||||
|
|
||||||
|
mdio {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
ethernet-phy@0 {
|
||||||
|
compatible = "ethernet-phy-id0007.0772", "ethernet-phy-ieee802.3-c22";
|
||||||
|
reg = <0>;
|
||||||
|
vsc8531,vddmac = <3300>;
|
||||||
|
vsc8531,edge-slowdown = <7>;
|
||||||
|
vsc8531,led-0-mode = <VSC8531_LINK_1000_ACTIVITY>;
|
||||||
|
vsc8531,led-1-mode = <VSC8531_LINK_100_ACTIVITY>;
|
||||||
|
load-save-gpios = <&gpio 10 GPIO_ACTIVE_HIGH>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
@ -21,6 +21,7 @@ maintainers:
|
||||||
properties:
|
properties:
|
||||||
compatible:
|
compatible:
|
||||||
enum:
|
enum:
|
||||||
|
- nxp,imx94-netc-blk-ctrl
|
||||||
- nxp,imx95-netc-blk-ctrl
|
- nxp,imx95-netc-blk-ctrl
|
||||||
|
|
||||||
reg:
|
reg:
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@ properties:
|
||||||
compatible:
|
compatible:
|
||||||
enum:
|
enum:
|
||||||
- ti,tps23881
|
- ti,tps23881
|
||||||
|
- ti,tps23881b
|
||||||
|
|
||||||
reg:
|
reg:
|
||||||
maxItems: 1
|
maxItems: 1
|
||||||
|
|
|
||||||
|
|
@ -73,6 +73,14 @@ properties:
|
||||||
|
|
||||||
dma-coherent: true
|
dma-coherent: true
|
||||||
|
|
||||||
|
interconnects:
|
||||||
|
maxItems: 2
|
||||||
|
|
||||||
|
interconnect-names:
|
||||||
|
items:
|
||||||
|
- const: cpu-mac
|
||||||
|
- const: mac-mem
|
||||||
|
|
||||||
phys: true
|
phys: true
|
||||||
|
|
||||||
phy-names:
|
phy-names:
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,7 @@ select:
|
||||||
- rockchip,rk3366-gmac
|
- rockchip,rk3366-gmac
|
||||||
- rockchip,rk3368-gmac
|
- rockchip,rk3368-gmac
|
||||||
- rockchip,rk3399-gmac
|
- rockchip,rk3399-gmac
|
||||||
|
- rockchip,rk3506-gmac
|
||||||
- rockchip,rk3528-gmac
|
- rockchip,rk3528-gmac
|
||||||
- rockchip,rk3568-gmac
|
- rockchip,rk3568-gmac
|
||||||
- rockchip,rk3576-gmac
|
- rockchip,rk3576-gmac
|
||||||
|
|
@ -50,6 +51,7 @@ properties:
|
||||||
- rockchip,rv1108-gmac
|
- rockchip,rv1108-gmac
|
||||||
- items:
|
- items:
|
||||||
- enum:
|
- enum:
|
||||||
|
- rockchip,rk3506-gmac
|
||||||
- rockchip,rk3528-gmac
|
- rockchip,rk3528-gmac
|
||||||
- rockchip,rk3568-gmac
|
- rockchip,rk3568-gmac
|
||||||
- rockchip,rk3576-gmac
|
- rockchip,rk3576-gmac
|
||||||
|
|
@ -148,6 +150,7 @@ allOf:
|
||||||
compatible:
|
compatible:
|
||||||
contains:
|
contains:
|
||||||
enum:
|
enum:
|
||||||
|
- rockchip,rk3506-gmac
|
||||||
- rockchip,rk3528-gmac
|
- rockchip,rk3528-gmac
|
||||||
then:
|
then:
|
||||||
properties:
|
properties:
|
||||||
|
|
|
||||||
|
|
@ -86,10 +86,14 @@ properties:
|
||||||
- rockchip,rk3328-gmac
|
- rockchip,rk3328-gmac
|
||||||
- rockchip,rk3366-gmac
|
- rockchip,rk3366-gmac
|
||||||
- rockchip,rk3368-gmac
|
- rockchip,rk3368-gmac
|
||||||
|
- rockchip,rk3399-gmac
|
||||||
|
- rockchip,rk3506-gmac
|
||||||
|
- rockchip,rk3528-gmac
|
||||||
|
- rockchip,rk3568-gmac
|
||||||
- rockchip,rk3576-gmac
|
- rockchip,rk3576-gmac
|
||||||
- rockchip,rk3588-gmac
|
- rockchip,rk3588-gmac
|
||||||
- rockchip,rk3399-gmac
|
|
||||||
- rockchip,rv1108-gmac
|
- rockchip,rv1108-gmac
|
||||||
|
- rockchip,rv1126-gmac
|
||||||
- snps,dwmac
|
- snps,dwmac
|
||||||
- snps,dwmac-3.40a
|
- snps,dwmac-3.40a
|
||||||
- snps,dwmac-3.50a
|
- snps,dwmac-3.50a
|
||||||
|
|
|
||||||
|
|
@ -70,6 +70,25 @@ required:
|
||||||
|
|
||||||
allOf:
|
allOf:
|
||||||
- $ref: snps,dwmac.yaml#
|
- $ref: snps,dwmac.yaml#
|
||||||
|
- if:
|
||||||
|
properties:
|
||||||
|
compatible:
|
||||||
|
contains:
|
||||||
|
const: sophgo,sg2042-dwmac
|
||||||
|
then:
|
||||||
|
properties:
|
||||||
|
phy-mode:
|
||||||
|
enum:
|
||||||
|
- rgmii-rxid
|
||||||
|
- rgmii-id
|
||||||
|
else:
|
||||||
|
properties:
|
||||||
|
phy-mode:
|
||||||
|
enum:
|
||||||
|
- rgmii
|
||||||
|
- rgmii-rxid
|
||||||
|
- rgmii-txid
|
||||||
|
- rgmii-id
|
||||||
|
|
||||||
unevaluatedProperties: false
|
unevaluatedProperties: false
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -151,6 +151,12 @@ properties:
|
||||||
- ETSI
|
- ETSI
|
||||||
- JP
|
- JP
|
||||||
|
|
||||||
|
country:
|
||||||
|
$ref: /schemas/types.yaml#/definitions/string
|
||||||
|
pattern: '^[A-Z]{2}$'
|
||||||
|
description:
|
||||||
|
ISO 3166-1 alpha-2 country code for power limits
|
||||||
|
|
||||||
patternProperties:
|
patternProperties:
|
||||||
"^txpower-[256]g$":
|
"^txpower-[256]g$":
|
||||||
type: object
|
type: object
|
||||||
|
|
@ -210,6 +216,66 @@ properties:
|
||||||
minItems: 13
|
minItems: 13
|
||||||
maxItems: 13
|
maxItems: 13
|
||||||
|
|
||||||
|
paths-cck:
|
||||||
|
$ref: /schemas/types.yaml#/definitions/uint8-array
|
||||||
|
minItems: 4
|
||||||
|
maxItems: 4
|
||||||
|
description:
|
||||||
|
4 half-dBm backoff values (1 - 4 antennas, single spacial
|
||||||
|
stream)
|
||||||
|
|
||||||
|
paths-ofdm:
|
||||||
|
$ref: /schemas/types.yaml#/definitions/uint8-array
|
||||||
|
minItems: 4
|
||||||
|
maxItems: 4
|
||||||
|
description:
|
||||||
|
4 half-dBm backoff values (1 - 4 antennas, single spacial
|
||||||
|
stream)
|
||||||
|
|
||||||
|
paths-ofdm-bf:
|
||||||
|
$ref: /schemas/types.yaml#/definitions/uint8-array
|
||||||
|
minItems: 4
|
||||||
|
maxItems: 4
|
||||||
|
description:
|
||||||
|
4 half-dBm backoff values for beamforming
|
||||||
|
(1 - 4 antennas, single spacial stream)
|
||||||
|
|
||||||
|
paths-ru:
|
||||||
|
$ref: /schemas/types.yaml#/definitions/uint8-matrix
|
||||||
|
description:
|
||||||
|
Sets of half-dBm backoff values for 802.11ax rates for
|
||||||
|
1T1ss (aka 1 transmitting antenna with 1 spacial stream),
|
||||||
|
2T1ss, 3T1ss, 4T1ss, 2T2ss, 3T2ss, 4T2ss, 3T3ss, 4T3ss
|
||||||
|
and 4T4ss.
|
||||||
|
Each set starts with the number of channel bandwidth or
|
||||||
|
resource unit settings for which the rate set applies,
|
||||||
|
followed by 10 power limit values. The order of the
|
||||||
|
channel resource unit settings is RU26, RU52, RU106,
|
||||||
|
RU242/SU20, RU484/SU40, RU996/SU80 and RU2x996/SU160.
|
||||||
|
minItems: 1
|
||||||
|
maxItems: 7
|
||||||
|
items:
|
||||||
|
minItems: 11
|
||||||
|
maxItems: 11
|
||||||
|
|
||||||
|
paths-ru-bf:
|
||||||
|
$ref: /schemas/types.yaml#/definitions/uint8-matrix
|
||||||
|
description:
|
||||||
|
Sets of half-dBm backoff (beamforming) values for 802.11ax
|
||||||
|
rates for 1T1ss (aka 1 transmitting antenna with 1 spacial
|
||||||
|
stream), 2T1ss, 3T1ss, 4T1ss, 2T2ss, 3T2ss, 4T2ss, 3T3ss,
|
||||||
|
4T3ss and 4T4ss.
|
||||||
|
Each set starts with the number of channel bandwidth or
|
||||||
|
resource unit settings for which the rate set applies,
|
||||||
|
followed by 10 power limit values. The order of the
|
||||||
|
channel resource unit settings is RU26, RU52, RU106,
|
||||||
|
RU242/SU20, RU484/SU40, RU996/SU80 and RU2x996/SU160.
|
||||||
|
minItems: 1
|
||||||
|
maxItems: 7
|
||||||
|
items:
|
||||||
|
minItems: 11
|
||||||
|
maxItems: 11
|
||||||
|
|
||||||
txs-delta:
|
txs-delta:
|
||||||
$ref: /schemas/types.yaml#/definitions/uint32-array
|
$ref: /schemas/types.yaml#/definitions/uint32-array
|
||||||
description:
|
description:
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ patternProperties:
|
||||||
"^(keypad|m25p|max8952|max8997|max8998|mpmc),.*": true
|
"^(keypad|m25p|max8952|max8997|max8998|mpmc),.*": true
|
||||||
"^(pciclass|pinctrl-single|#pinctrl-single|PowerPC),.*": true
|
"^(pciclass|pinctrl-single|#pinctrl-single|PowerPC),.*": true
|
||||||
"^(pl022|pxa-mmc|rcar_sound|rotary-encoder|s5m8767|sdhci),.*": true
|
"^(pl022|pxa-mmc|rcar_sound|rotary-encoder|s5m8767|sdhci),.*": true
|
||||||
"^(simple-audio-card|st-plgpio|st-spics|ts),.*": true
|
"^(simple-audio-card|st-plgpio|st-spics|ts|vsc8531),.*": true
|
||||||
"^pool[0-3],.*": true
|
"^pool[0-3],.*": true
|
||||||
|
|
||||||
# Keep list in alphabetical order.
|
# Keep list in alphabetical order.
|
||||||
|
|
|
||||||
|
|
@ -198,26 +198,28 @@ be requested with the same attribute with ``DPLL_CMD_DEVICE_SET`` command.
|
||||||
================================== ======================================
|
================================== ======================================
|
||||||
|
|
||||||
Device may also provide ability to adjust a signal phase on a pin.
|
Device may also provide ability to adjust a signal phase on a pin.
|
||||||
If pin phase adjustment is supported, minimal and maximal values that pin
|
If pin phase adjustment is supported, minimal and maximal values and
|
||||||
handle shall be provide to the user on ``DPLL_CMD_PIN_GET`` respond
|
granularity that pin handle shall be provided to the user on
|
||||||
with ``DPLL_A_PIN_PHASE_ADJUST_MIN`` and ``DPLL_A_PIN_PHASE_ADJUST_MAX``
|
``DPLL_CMD_PIN_GET`` respond with ``DPLL_A_PIN_PHASE_ADJUST_MIN``,
|
||||||
|
``DPLL_A_PIN_PHASE_ADJUST_MAX`` and ``DPLL_A_PIN_PHASE_ADJUST_GRAN``
|
||||||
attributes. Configured phase adjust value is provided with
|
attributes. Configured phase adjust value is provided with
|
||||||
``DPLL_A_PIN_PHASE_ADJUST`` attribute of a pin, and value change can be
|
``DPLL_A_PIN_PHASE_ADJUST`` attribute of a pin, and value change can be
|
||||||
requested with the same attribute with ``DPLL_CMD_PIN_SET`` command.
|
requested with the same attribute with ``DPLL_CMD_PIN_SET`` command.
|
||||||
|
|
||||||
=============================== ======================================
|
================================ ==========================================
|
||||||
``DPLL_A_PIN_ID`` configured pin id
|
``DPLL_A_PIN_ID`` configured pin id
|
||||||
``DPLL_A_PIN_PHASE_ADJUST_MIN`` attr minimum value of phase adjustment
|
``DPLL_A_PIN_PHASE_ADJUST_GRAN`` attr granularity of phase adjustment value
|
||||||
``DPLL_A_PIN_PHASE_ADJUST_MAX`` attr maximum value of phase adjustment
|
``DPLL_A_PIN_PHASE_ADJUST_MIN`` attr minimum value of phase adjustment
|
||||||
``DPLL_A_PIN_PHASE_ADJUST`` attr configured value of phase
|
``DPLL_A_PIN_PHASE_ADJUST_MAX`` attr maximum value of phase adjustment
|
||||||
adjustment on parent dpll device
|
``DPLL_A_PIN_PHASE_ADJUST`` attr configured value of phase
|
||||||
``DPLL_A_PIN_PARENT_DEVICE`` nested attribute for requesting
|
adjustment on parent dpll device
|
||||||
configuration on given parent dpll
|
``DPLL_A_PIN_PARENT_DEVICE`` nested attribute for requesting
|
||||||
device
|
configuration on given parent dpll
|
||||||
``DPLL_A_PIN_PARENT_ID`` parent dpll device id
|
device
|
||||||
``DPLL_A_PIN_PHASE_OFFSET`` attr measured phase difference
|
``DPLL_A_PIN_PARENT_ID`` parent dpll device id
|
||||||
between a pin and parent dpll device
|
``DPLL_A_PIN_PHASE_OFFSET`` attr measured phase difference
|
||||||
=============================== ======================================
|
between a pin and parent dpll device
|
||||||
|
================================ ==========================================
|
||||||
|
|
||||||
All phase related values are provided in pico seconds, which represents
|
All phase related values are provided in pico seconds, which represents
|
||||||
time difference between signals phase. The negative value means that
|
time difference between signals phase. The negative value means that
|
||||||
|
|
@ -384,6 +386,8 @@ according to attribute purpose.
|
||||||
frequencies
|
frequencies
|
||||||
``DPLL_A_PIN_ANY_FREQUENCY_MIN`` attr minimum value of frequency
|
``DPLL_A_PIN_ANY_FREQUENCY_MIN`` attr minimum value of frequency
|
||||||
``DPLL_A_PIN_ANY_FREQUENCY_MAX`` attr maximum value of frequency
|
``DPLL_A_PIN_ANY_FREQUENCY_MAX`` attr maximum value of frequency
|
||||||
|
``DPLL_A_PIN_PHASE_ADJUST_GRAN`` attr granularity of phase
|
||||||
|
adjustment value
|
||||||
``DPLL_A_PIN_PHASE_ADJUST_MIN`` attr minimum value of phase
|
``DPLL_A_PIN_PHASE_ADJUST_MIN`` attr minimum value of phase
|
||||||
adjustment
|
adjustment
|
||||||
``DPLL_A_PIN_PHASE_ADJUST_MAX`` attr maximum value of phase
|
``DPLL_A_PIN_PHASE_ADJUST_MAX`` attr maximum value of phase
|
||||||
|
|
|
||||||
|
|
@ -227,7 +227,7 @@ properties:
|
||||||
Optional format indicator that is intended only for choosing
|
Optional format indicator that is intended only for choosing
|
||||||
the right formatting mechanism when displaying values of this
|
the right formatting mechanism when displaying values of this
|
||||||
type.
|
type.
|
||||||
enum: [ hex, mac, fddi, ipv4, ipv6, uuid ]
|
enum: [ hex, mac, fddi, ipv4, ipv6, ipv4-or-v6, uuid ]
|
||||||
# Start genetlink-c
|
# Start genetlink-c
|
||||||
name-prefix:
|
name-prefix:
|
||||||
type: string
|
type: string
|
||||||
|
|
|
||||||
|
|
@ -185,7 +185,7 @@ properties:
|
||||||
Optional format indicator that is intended only for choosing
|
Optional format indicator that is intended only for choosing
|
||||||
the right formatting mechanism when displaying values of this
|
the right formatting mechanism when displaying values of this
|
||||||
type.
|
type.
|
||||||
enum: [ hex, mac, fddi, ipv4, ipv6, uuid ]
|
enum: [ hex, mac, fddi, ipv4, ipv6, ipv4-or-v6, uuid ]
|
||||||
|
|
||||||
# Make sure name-prefix does not appear in subsets (subsets inherit naming)
|
# Make sure name-prefix does not appear in subsets (subsets inherit naming)
|
||||||
dependencies:
|
dependencies:
|
||||||
|
|
|
||||||
|
|
@ -157,7 +157,7 @@ properties:
|
||||||
Optional format indicator that is intended only for choosing
|
Optional format indicator that is intended only for choosing
|
||||||
the right formatting mechanism when displaying values of this
|
the right formatting mechanism when displaying values of this
|
||||||
type.
|
type.
|
||||||
enum: [ hex, mac, fddi, ipv4, ipv6, uuid ]
|
enum: [ hex, mac, fddi, ipv4, ipv6, ipv4-or-v6, uuid ]
|
||||||
struct:
|
struct:
|
||||||
description: Name of the nested struct type.
|
description: Name of the nested struct type.
|
||||||
type: string
|
type: string
|
||||||
|
|
|
||||||
|
|
@ -457,7 +457,7 @@ attribute-sets:
|
||||||
name: labels
|
name: labels
|
||||||
type: binary
|
type: binary
|
||||||
-
|
-
|
||||||
name: labels mask
|
name: labels-mask
|
||||||
type: binary
|
type: binary
|
||||||
-
|
-
|
||||||
name: synproxy
|
name: synproxy
|
||||||
|
|
|
||||||
|
|
@ -99,6 +99,8 @@ definitions:
|
||||||
name: legacy
|
name: legacy
|
||||||
-
|
-
|
||||||
name: switchdev
|
name: switchdev
|
||||||
|
-
|
||||||
|
name: switchdev-inactive
|
||||||
-
|
-
|
||||||
type: enum
|
type: enum
|
||||||
name: eswitch-inline-mode
|
name: eswitch-inline-mode
|
||||||
|
|
@ -857,6 +859,14 @@ attribute-sets:
|
||||||
name: health-reporter-burst-period
|
name: health-reporter-burst-period
|
||||||
type: u64
|
type: u64
|
||||||
doc: Time (in msec) for recoveries before starting the grace period.
|
doc: Time (in msec) for recoveries before starting the grace period.
|
||||||
|
|
||||||
|
# TODO: fill in the attributes in between
|
||||||
|
|
||||||
|
-
|
||||||
|
name: param-reset-default
|
||||||
|
type: flag
|
||||||
|
doc: Request restoring parameter to its default value.
|
||||||
|
value: 183
|
||||||
-
|
-
|
||||||
name: dl-dev-stats
|
name: dl-dev-stats
|
||||||
subset-of: devlink
|
subset-of: devlink
|
||||||
|
|
@ -1791,6 +1801,7 @@ operations:
|
||||||
- param-type
|
- param-type
|
||||||
# param-value-data is missing here as the type is variable
|
# param-value-data is missing here as the type is variable
|
||||||
- param-value-cmode
|
- param-value-cmode
|
||||||
|
- param-reset-default
|
||||||
|
|
||||||
-
|
-
|
||||||
name: region-get
|
name: region-get
|
||||||
|
|
|
||||||
|
|
@ -440,6 +440,12 @@ attribute-sets:
|
||||||
doc: |
|
doc: |
|
||||||
Capable pin provides list of pins that can be bound to create a
|
Capable pin provides list of pins that can be bound to create a
|
||||||
reference-sync pin pair.
|
reference-sync pin pair.
|
||||||
|
-
|
||||||
|
name: phase-adjust-gran
|
||||||
|
type: u32
|
||||||
|
doc: |
|
||||||
|
Granularity of phase adjustment, in picoseconds. The value of
|
||||||
|
phase adjustment must be a multiple of this granularity.
|
||||||
|
|
||||||
-
|
-
|
||||||
name: pin-parent-device
|
name: pin-parent-device
|
||||||
|
|
@ -616,6 +622,7 @@ operations:
|
||||||
- capabilities
|
- capabilities
|
||||||
- parent-device
|
- parent-device
|
||||||
- parent-pin
|
- parent-pin
|
||||||
|
- phase-adjust-gran
|
||||||
- phase-adjust-min
|
- phase-adjust-min
|
||||||
- phase-adjust-max
|
- phase-adjust-max
|
||||||
- phase-adjust
|
- phase-adjust
|
||||||
|
|
|
||||||
|
|
@ -1269,7 +1269,7 @@ attribute-sets:
|
||||||
-
|
-
|
||||||
name: hist
|
name: hist
|
||||||
type: nest
|
type: nest
|
||||||
multi-attr: True
|
multi-attr: true
|
||||||
nested-attributes: fec-hist
|
nested-attributes: fec-hist
|
||||||
-
|
-
|
||||||
name: fec
|
name: fec
|
||||||
|
|
@ -1823,6 +1823,73 @@ attribute-sets:
|
||||||
type: uint
|
type: uint
|
||||||
enum: pse-event
|
enum: pse-event
|
||||||
doc: List of events reported by the PSE controller
|
doc: List of events reported by the PSE controller
|
||||||
|
-
|
||||||
|
name: mse-capabilities
|
||||||
|
doc: MSE capabilities attribute set
|
||||||
|
attr-cnt-name: --ethtool-a-mse-capabilities-cnt
|
||||||
|
attributes:
|
||||||
|
-
|
||||||
|
name: max-average-mse
|
||||||
|
type: uint
|
||||||
|
-
|
||||||
|
name: max-peak-mse
|
||||||
|
type: uint
|
||||||
|
-
|
||||||
|
name: refresh-rate-ps
|
||||||
|
type: uint
|
||||||
|
-
|
||||||
|
name: num-symbols
|
||||||
|
type: uint
|
||||||
|
-
|
||||||
|
name: mse-snapshot
|
||||||
|
doc: MSE snapshot attribute set
|
||||||
|
attr-cnt-name: --ethtool-a-mse-snapshot-cnt
|
||||||
|
attributes:
|
||||||
|
-
|
||||||
|
name: average-mse
|
||||||
|
type: uint
|
||||||
|
-
|
||||||
|
name: peak-mse
|
||||||
|
type: uint
|
||||||
|
-
|
||||||
|
name: worst-peak-mse
|
||||||
|
type: uint
|
||||||
|
-
|
||||||
|
name: mse
|
||||||
|
attr-cnt-name: --ethtool-a-mse-cnt
|
||||||
|
attributes:
|
||||||
|
-
|
||||||
|
name: header
|
||||||
|
type: nest
|
||||||
|
nested-attributes: header
|
||||||
|
-
|
||||||
|
name: capabilities
|
||||||
|
type: nest
|
||||||
|
nested-attributes: mse-capabilities
|
||||||
|
-
|
||||||
|
name: channel-a
|
||||||
|
type: nest
|
||||||
|
nested-attributes: mse-snapshot
|
||||||
|
-
|
||||||
|
name: channel-b
|
||||||
|
type: nest
|
||||||
|
nested-attributes: mse-snapshot
|
||||||
|
-
|
||||||
|
name: channel-c
|
||||||
|
type: nest
|
||||||
|
nested-attributes: mse-snapshot
|
||||||
|
-
|
||||||
|
name: channel-d
|
||||||
|
type: nest
|
||||||
|
nested-attributes: mse-snapshot
|
||||||
|
-
|
||||||
|
name: worst-channel
|
||||||
|
type: nest
|
||||||
|
nested-attributes: mse-snapshot
|
||||||
|
-
|
||||||
|
name: link
|
||||||
|
type: nest
|
||||||
|
nested-attributes: mse-snapshot
|
||||||
|
|
||||||
operations:
|
operations:
|
||||||
enum-model: directional
|
enum-model: directional
|
||||||
|
|
@ -2756,6 +2823,25 @@ operations:
|
||||||
attributes:
|
attributes:
|
||||||
- header
|
- header
|
||||||
- context
|
- context
|
||||||
|
-
|
||||||
|
name: mse-get
|
||||||
|
doc: Get PHY MSE measurement data and capabilities.
|
||||||
|
attribute-set: mse
|
||||||
|
do: &mse-get-op
|
||||||
|
request:
|
||||||
|
attributes:
|
||||||
|
- header
|
||||||
|
reply:
|
||||||
|
attributes:
|
||||||
|
- header
|
||||||
|
- capabilities
|
||||||
|
- channel-a
|
||||||
|
- channel-b
|
||||||
|
- channel-c
|
||||||
|
- channel-d
|
||||||
|
- worst-channel
|
||||||
|
- link
|
||||||
|
dump: *mse-get-op
|
||||||
|
|
||||||
mcast-groups:
|
mcast-groups:
|
||||||
list:
|
list:
|
||||||
|
|
|
||||||
|
|
@ -88,7 +88,7 @@ definitions:
|
||||||
-
|
-
|
||||||
name: napi-threaded
|
name: napi-threaded
|
||||||
type: enum
|
type: enum
|
||||||
entries: [disabled, enabled]
|
entries: [disabled, enabled, busy-poll]
|
||||||
|
|
||||||
attribute-sets:
|
attribute-sets:
|
||||||
-
|
-
|
||||||
|
|
@ -291,7 +291,8 @@ attribute-sets:
|
||||||
name: threaded
|
name: threaded
|
||||||
doc: Whether the NAPI is configured to operate in threaded polling
|
doc: Whether the NAPI is configured to operate in threaded polling
|
||||||
mode. If this is set to enabled then the NAPI context operates
|
mode. If this is set to enabled then the NAPI context operates
|
||||||
in threaded polling mode.
|
in threaded polling mode. If this is set to busy-poll, then the
|
||||||
|
threaded polling mode also busy polls.
|
||||||
type: u32
|
type: u32
|
||||||
enum: napi-threaded
|
enum: napi-threaded
|
||||||
-
|
-
|
||||||
|
|
@ -732,6 +733,29 @@ operations:
|
||||||
- rx-bytes
|
- rx-bytes
|
||||||
- tx-packets
|
- tx-packets
|
||||||
- tx-bytes
|
- tx-bytes
|
||||||
|
- rx-alloc-fail
|
||||||
|
- rx-hw-drops
|
||||||
|
- rx-hw-drop-overruns
|
||||||
|
- rx-csum-complete
|
||||||
|
- rx-csum-unnecessary
|
||||||
|
- rx-csum-none
|
||||||
|
- rx-csum-bad
|
||||||
|
- rx-hw-gro-packets
|
||||||
|
- rx-hw-gro-bytes
|
||||||
|
- rx-hw-gro-wire-packets
|
||||||
|
- rx-hw-gro-wire-bytes
|
||||||
|
- rx-hw-drop-ratelimits
|
||||||
|
- tx-hw-drops
|
||||||
|
- tx-hw-drop-errors
|
||||||
|
- tx-csum-none
|
||||||
|
- tx-needs-csum
|
||||||
|
- tx-hw-gso-packets
|
||||||
|
- tx-hw-gso-bytes
|
||||||
|
- tx-hw-gso-wire-packets
|
||||||
|
- tx-hw-gso-wire-bytes
|
||||||
|
- tx-hw-drop-ratelimits
|
||||||
|
- tx-stop
|
||||||
|
- tx-wake
|
||||||
-
|
-
|
||||||
name: bind-rx
|
name: bind-rx
|
||||||
doc: Bind dmabuf to netdev
|
doc: Bind dmabuf to netdev
|
||||||
|
|
|
||||||
|
|
@ -915,7 +915,7 @@ attribute-sets:
|
||||||
type: string
|
type: string
|
||||||
doc: Name of set to use
|
doc: Name of set to use
|
||||||
-
|
-
|
||||||
name: set id
|
name: set-id
|
||||||
type: u32
|
type: u32
|
||||||
byte-order: big-endian
|
byte-order: big-endian
|
||||||
doc: ID of set to use
|
doc: ID of set to use
|
||||||
|
|
|
||||||
|
|
@ -76,6 +76,83 @@ attribute-sets:
|
||||||
name: spi
|
name: spi
|
||||||
doc: Security Parameters Index (SPI) of the association.
|
doc: Security Parameters Index (SPI) of the association.
|
||||||
type: u32
|
type: u32
|
||||||
|
-
|
||||||
|
name: stats
|
||||||
|
attributes:
|
||||||
|
-
|
||||||
|
name: dev-id
|
||||||
|
doc: PSP device ID.
|
||||||
|
type: u32
|
||||||
|
checks:
|
||||||
|
min: 1
|
||||||
|
-
|
||||||
|
name: key-rotations
|
||||||
|
type: uint
|
||||||
|
doc: |
|
||||||
|
Number of key rotations during the lifetime of the device.
|
||||||
|
Kernel statistic.
|
||||||
|
-
|
||||||
|
name: stale-events
|
||||||
|
type: uint
|
||||||
|
doc: |
|
||||||
|
Number of times a socket's Rx got shut down due to using
|
||||||
|
a key which went stale (fully rotated out).
|
||||||
|
Kernel statistic.
|
||||||
|
-
|
||||||
|
name: rx-packets
|
||||||
|
type: uint
|
||||||
|
doc: |
|
||||||
|
Number of successfully processed and authenticated PSP packets.
|
||||||
|
Device statistic (from the PSP spec).
|
||||||
|
-
|
||||||
|
name: rx-bytes
|
||||||
|
type: uint
|
||||||
|
doc: |
|
||||||
|
Number of successfully authenticated PSP bytes received, counting from
|
||||||
|
the first byte after the IV through the last byte of payload.
|
||||||
|
The fixed initial portion of the PSP header (16 bytes)
|
||||||
|
and the PSP trailer/ICV (16 bytes) are not included in this count.
|
||||||
|
Device statistic (from the PSP spec).
|
||||||
|
-
|
||||||
|
name: rx-auth-fail
|
||||||
|
type: uint
|
||||||
|
doc: |
|
||||||
|
Number of received PSP packets with unsuccessful authentication.
|
||||||
|
Device statistic (from the PSP spec).
|
||||||
|
-
|
||||||
|
name: rx-error
|
||||||
|
type: uint
|
||||||
|
doc: |
|
||||||
|
Number of received PSP packets with length/framing errors.
|
||||||
|
Device statistic (from the PSP spec).
|
||||||
|
-
|
||||||
|
name: rx-bad
|
||||||
|
type: uint
|
||||||
|
doc: |
|
||||||
|
Number of received PSP packets with miscellaneous errors
|
||||||
|
(invalid master key indicated by SPI, unsupported version, etc.)
|
||||||
|
Device statistic (from the PSP spec).
|
||||||
|
-
|
||||||
|
name: tx-packets
|
||||||
|
type: uint
|
||||||
|
doc: |
|
||||||
|
Number of successfully processed PSP packets for transmission.
|
||||||
|
Device statistic (from the PSP spec).
|
||||||
|
-
|
||||||
|
name: tx-bytes
|
||||||
|
type: uint
|
||||||
|
doc: |
|
||||||
|
Number of successfully processed PSP bytes for transmit, counting from
|
||||||
|
the first byte after the IV through the last byte of payload.
|
||||||
|
The fixed initial portion of the PSP header (16 bytes)
|
||||||
|
and the PSP trailer/ICV (16 bytes) are not included in this count.
|
||||||
|
Device statistic (from the PSP spec).
|
||||||
|
-
|
||||||
|
name: tx-error
|
||||||
|
type: uint
|
||||||
|
doc: |
|
||||||
|
Number of PSP packets for transmission with errors.
|
||||||
|
Device statistic (from the PSP spec).
|
||||||
|
|
||||||
operations:
|
operations:
|
||||||
list:
|
list:
|
||||||
|
|
@ -177,6 +254,24 @@ operations:
|
||||||
pre: psp-assoc-device-get-locked
|
pre: psp-assoc-device-get-locked
|
||||||
post: psp-device-unlock
|
post: psp-device-unlock
|
||||||
|
|
||||||
|
-
|
||||||
|
name: get-stats
|
||||||
|
doc: Get device statistics.
|
||||||
|
attribute-set: stats
|
||||||
|
do:
|
||||||
|
request:
|
||||||
|
attributes:
|
||||||
|
- dev-id
|
||||||
|
reply: &stats-all
|
||||||
|
attributes:
|
||||||
|
- dev-id
|
||||||
|
- key-rotations
|
||||||
|
- stale-events
|
||||||
|
pre: psp-device-get-locked
|
||||||
|
post: psp-device-unlock
|
||||||
|
dump:
|
||||||
|
reply: *stats-all
|
||||||
|
|
||||||
mcast-groups:
|
mcast-groups:
|
||||||
list:
|
list:
|
||||||
-
|
-
|
||||||
|
|
|
||||||
|
|
@ -86,17 +86,18 @@ attribute-sets:
|
||||||
-
|
-
|
||||||
name: address
|
name: address
|
||||||
type: binary
|
type: binary
|
||||||
display-hint: ipv4
|
display-hint: ipv4-or-v6
|
||||||
-
|
-
|
||||||
name: local
|
name: local
|
||||||
type: binary
|
type: binary
|
||||||
display-hint: ipv4
|
display-hint: ipv4-or-v6
|
||||||
-
|
-
|
||||||
name: label
|
name: label
|
||||||
type: string
|
type: string
|
||||||
-
|
-
|
||||||
name: broadcast
|
name: broadcast
|
||||||
type: binary
|
type: u32
|
||||||
|
byte-order: big-endian
|
||||||
display-hint: ipv4
|
display-hint: ipv4
|
||||||
-
|
-
|
||||||
name: anycast
|
name: anycast
|
||||||
|
|
|
||||||
|
|
@ -1707,11 +1707,11 @@ attribute-sets:
|
||||||
-
|
-
|
||||||
name: local
|
name: local
|
||||||
type: binary
|
type: binary
|
||||||
display-hint: ipv4
|
display-hint: ipv4-or-v6
|
||||||
-
|
-
|
||||||
name: remote
|
name: remote
|
||||||
type: binary
|
type: binary
|
||||||
display-hint: ipv4
|
display-hint: ipv4-or-v6
|
||||||
-
|
-
|
||||||
name: ttl
|
name: ttl
|
||||||
type: u8
|
type: u8
|
||||||
|
|
@ -1833,11 +1833,11 @@ attribute-sets:
|
||||||
-
|
-
|
||||||
name: local
|
name: local
|
||||||
type: binary
|
type: binary
|
||||||
display-hint: ipv4
|
display-hint: ipv4-or-v6
|
||||||
-
|
-
|
||||||
name: remote
|
name: remote
|
||||||
type: binary
|
type: binary
|
||||||
display-hint: ipv4
|
display-hint: ipv4-or-v6
|
||||||
-
|
-
|
||||||
name: fwmark
|
name: fwmark
|
||||||
type: u32
|
type: u32
|
||||||
|
|
@ -1868,7 +1868,8 @@ attribute-sets:
|
||||||
type: u32
|
type: u32
|
||||||
-
|
-
|
||||||
name: remote
|
name: remote
|
||||||
type: binary
|
type: u32
|
||||||
|
byte-order: big-endian
|
||||||
display-hint: ipv4
|
display-hint: ipv4
|
||||||
-
|
-
|
||||||
name: ttl
|
name: ttl
|
||||||
|
|
@ -1913,6 +1914,35 @@ attribute-sets:
|
||||||
name: port-range
|
name: port-range
|
||||||
type: binary
|
type: binary
|
||||||
struct: ifla-geneve-port-range
|
struct: ifla-geneve-port-range
|
||||||
|
-
|
||||||
|
name: linkinfo-hsr-attrs
|
||||||
|
name-prefix: ifla-hsr-
|
||||||
|
attributes:
|
||||||
|
-
|
||||||
|
name: slave1
|
||||||
|
type: u32
|
||||||
|
-
|
||||||
|
name: slave2
|
||||||
|
type: u32
|
||||||
|
-
|
||||||
|
name: multicast-spec
|
||||||
|
type: u8
|
||||||
|
-
|
||||||
|
name: supervision-addr
|
||||||
|
type: binary
|
||||||
|
display-hint: mac
|
||||||
|
-
|
||||||
|
name: seq-nr
|
||||||
|
type: u16
|
||||||
|
-
|
||||||
|
name: version
|
||||||
|
type: u8
|
||||||
|
-
|
||||||
|
name: protocol
|
||||||
|
type: u8
|
||||||
|
-
|
||||||
|
name: interlink
|
||||||
|
type: u32
|
||||||
-
|
-
|
||||||
name: linkinfo-iptun-attrs
|
name: linkinfo-iptun-attrs
|
||||||
name-prefix: ifla-iptun-
|
name-prefix: ifla-iptun-
|
||||||
|
|
@ -1923,11 +1953,11 @@ attribute-sets:
|
||||||
-
|
-
|
||||||
name: local
|
name: local
|
||||||
type: binary
|
type: binary
|
||||||
display-hint: ipv4
|
display-hint: ipv4-or-v6
|
||||||
-
|
-
|
||||||
name: remote
|
name: remote
|
||||||
type: binary
|
type: binary
|
||||||
display-hint: ipv4
|
display-hint: ipv4-or-v6
|
||||||
-
|
-
|
||||||
name: ttl
|
name: ttl
|
||||||
type: u8
|
type: u8
|
||||||
|
|
@ -1957,7 +1987,8 @@ attribute-sets:
|
||||||
display-hint: ipv6
|
display-hint: ipv6
|
||||||
-
|
-
|
||||||
name: 6rd-relay-prefix
|
name: 6rd-relay-prefix
|
||||||
type: binary
|
type: u32
|
||||||
|
byte-order: big-endian
|
||||||
display-hint: ipv4
|
display-hint: ipv4
|
||||||
-
|
-
|
||||||
name: 6rd-prefixlen
|
name: 6rd-prefixlen
|
||||||
|
|
@ -2299,6 +2330,9 @@ sub-messages:
|
||||||
-
|
-
|
||||||
value: geneve
|
value: geneve
|
||||||
attribute-set: linkinfo-geneve-attrs
|
attribute-set: linkinfo-geneve-attrs
|
||||||
|
-
|
||||||
|
value: hsr
|
||||||
|
attribute-set: linkinfo-hsr-attrs
|
||||||
-
|
-
|
||||||
value: ipip
|
value: ipip
|
||||||
attribute-set: linkinfo-iptun-attrs
|
attribute-set: linkinfo-iptun-attrs
|
||||||
|
|
|
||||||
|
|
@ -194,7 +194,7 @@ attribute-sets:
|
||||||
-
|
-
|
||||||
name: dst
|
name: dst
|
||||||
type: binary
|
type: binary
|
||||||
display-hint: ipv4
|
display-hint: ipv4-or-v6
|
||||||
-
|
-
|
||||||
name: lladdr
|
name: lladdr
|
||||||
type: binary
|
type: binary
|
||||||
|
|
|
||||||
|
|
@ -87,11 +87,11 @@ attribute-sets:
|
||||||
-
|
-
|
||||||
name: dst
|
name: dst
|
||||||
type: binary
|
type: binary
|
||||||
display-hint: ipv4
|
display-hint: ipv4-or-v6
|
||||||
-
|
-
|
||||||
name: src
|
name: src
|
||||||
type: binary
|
type: binary
|
||||||
display-hint: ipv4
|
display-hint: ipv4-or-v6
|
||||||
-
|
-
|
||||||
name: iif
|
name: iif
|
||||||
type: u32
|
type: u32
|
||||||
|
|
@ -101,14 +101,14 @@ attribute-sets:
|
||||||
-
|
-
|
||||||
name: gateway
|
name: gateway
|
||||||
type: binary
|
type: binary
|
||||||
display-hint: ipv4
|
display-hint: ipv4-or-v6
|
||||||
-
|
-
|
||||||
name: priority
|
name: priority
|
||||||
type: u32
|
type: u32
|
||||||
-
|
-
|
||||||
name: prefsrc
|
name: prefsrc
|
||||||
type: binary
|
type: binary
|
||||||
display-hint: ipv4
|
display-hint: ipv4-or-v6
|
||||||
-
|
-
|
||||||
name: metrics
|
name: metrics
|
||||||
type: nest
|
type: nest
|
||||||
|
|
|
||||||
|
|
@ -96,10 +96,12 @@ attribute-sets:
|
||||||
attributes:
|
attributes:
|
||||||
-
|
-
|
||||||
name: dst
|
name: dst
|
||||||
type: u32
|
type: binary
|
||||||
|
display-hint: ipv4-or-v6
|
||||||
-
|
-
|
||||||
name: src
|
name: src
|
||||||
type: u32
|
type: binary
|
||||||
|
display-hint: ipv4-or-v6
|
||||||
-
|
-
|
||||||
name: iifname
|
name: iifname
|
||||||
type: string
|
type: string
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,298 @@
|
||||||
|
# SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause)
|
||||||
|
---
|
||||||
|
name: wireguard
|
||||||
|
protocol: genetlink-legacy
|
||||||
|
|
||||||
|
doc: |
|
||||||
|
**Netlink protocol to control WireGuard network devices.**
|
||||||
|
|
||||||
|
The below enums and macros are for interfacing with WireGuard, using generic
|
||||||
|
netlink, with family ``WG_GENL_NAME`` and version ``WG_GENL_VERSION``. It
|
||||||
|
defines two commands: get and set. Note that while they share many common
|
||||||
|
attributes, these two commands actually accept a slightly different set of
|
||||||
|
inputs and outputs. These differences are noted under the individual
|
||||||
|
attributes.
|
||||||
|
c-family-name: wg-genl-name
|
||||||
|
c-version-name: wg-genl-version
|
||||||
|
max-by-define: true
|
||||||
|
|
||||||
|
definitions:
|
||||||
|
-
|
||||||
|
name-prefix: wg-
|
||||||
|
name: key-len
|
||||||
|
type: const
|
||||||
|
value: 32
|
||||||
|
-
|
||||||
|
name: --kernel-timespec
|
||||||
|
type: struct
|
||||||
|
header: linux/time_types.h
|
||||||
|
members:
|
||||||
|
-
|
||||||
|
name: sec
|
||||||
|
type: u64
|
||||||
|
doc: Number of seconds, since UNIX epoch.
|
||||||
|
-
|
||||||
|
name: nsec
|
||||||
|
type: u64
|
||||||
|
doc: Number of nanoseconds, after the second began.
|
||||||
|
-
|
||||||
|
name: wgdevice-flags
|
||||||
|
name-prefix: wgdevice-f-
|
||||||
|
enum-name: wgdevice-flag
|
||||||
|
type: flags
|
||||||
|
entries:
|
||||||
|
- replace-peers
|
||||||
|
-
|
||||||
|
name: wgpeer-flags
|
||||||
|
name-prefix: wgpeer-f-
|
||||||
|
enum-name: wgpeer-flag
|
||||||
|
type: flags
|
||||||
|
entries:
|
||||||
|
- remove-me
|
||||||
|
- replace-allowedips
|
||||||
|
- update-only
|
||||||
|
-
|
||||||
|
name: wgallowedip-flags
|
||||||
|
name-prefix: wgallowedip-f-
|
||||||
|
enum-name: wgallowedip-flag
|
||||||
|
type: flags
|
||||||
|
entries:
|
||||||
|
- remove-me
|
||||||
|
|
||||||
|
attribute-sets:
|
||||||
|
-
|
||||||
|
name: wgdevice
|
||||||
|
enum-name: wgdevice-attribute
|
||||||
|
name-prefix: wgdevice-a-
|
||||||
|
attr-cnt-name: --wgdevice-a-last
|
||||||
|
attributes:
|
||||||
|
-
|
||||||
|
name: unspec
|
||||||
|
type: unused
|
||||||
|
value: 0
|
||||||
|
-
|
||||||
|
name: ifindex
|
||||||
|
type: u32
|
||||||
|
-
|
||||||
|
name: ifname
|
||||||
|
type: string
|
||||||
|
checks:
|
||||||
|
max-len: 15
|
||||||
|
-
|
||||||
|
name: private-key
|
||||||
|
type: binary
|
||||||
|
doc: Set to all zeros to remove.
|
||||||
|
display-hint: hex
|
||||||
|
checks:
|
||||||
|
exact-len: wg-key-len
|
||||||
|
-
|
||||||
|
name: public-key
|
||||||
|
type: binary
|
||||||
|
display-hint: hex
|
||||||
|
checks:
|
||||||
|
exact-len: wg-key-len
|
||||||
|
-
|
||||||
|
name: flags
|
||||||
|
type: u32
|
||||||
|
doc: |
|
||||||
|
``0`` or ``WGDEVICE_F_REPLACE_PEERS`` if all current peers should be
|
||||||
|
removed prior to adding the list below.
|
||||||
|
enum: wgdevice-flags
|
||||||
|
-
|
||||||
|
name: listen-port
|
||||||
|
type: u16
|
||||||
|
doc: Set as ``0`` to choose randomly.
|
||||||
|
-
|
||||||
|
name: fwmark
|
||||||
|
type: u32
|
||||||
|
doc: Set as ``0`` to disable.
|
||||||
|
-
|
||||||
|
name: peers
|
||||||
|
type: indexed-array
|
||||||
|
sub-type: nest
|
||||||
|
nested-attributes: wgpeer
|
||||||
|
doc: |
|
||||||
|
The index/type parameter is unused on ``SET_DEVICE`` operations and is
|
||||||
|
zero on ``GET_DEVICE`` operations.
|
||||||
|
-
|
||||||
|
name: wgpeer
|
||||||
|
enum-name: wgpeer-attribute
|
||||||
|
name-prefix: wgpeer-a-
|
||||||
|
attr-cnt-name: --wgpeer-a-last
|
||||||
|
attributes:
|
||||||
|
-
|
||||||
|
name: unspec
|
||||||
|
type: unused
|
||||||
|
value: 0
|
||||||
|
-
|
||||||
|
name: public-key
|
||||||
|
type: binary
|
||||||
|
display-hint: hex
|
||||||
|
checks:
|
||||||
|
exact-len: wg-key-len
|
||||||
|
-
|
||||||
|
name: preshared-key
|
||||||
|
type: binary
|
||||||
|
doc: Set as all zeros to remove.
|
||||||
|
display-hint: hex
|
||||||
|
checks:
|
||||||
|
exact-len: wg-key-len
|
||||||
|
-
|
||||||
|
name: flags
|
||||||
|
type: u32
|
||||||
|
doc: |
|
||||||
|
``0`` and/or ``WGPEER_F_REMOVE_ME`` if the specified peer should not
|
||||||
|
exist at the end of the operation, rather than added/updated and/or
|
||||||
|
``WGPEER_F_REPLACE_ALLOWEDIPS`` if all current allowed IPs of this
|
||||||
|
peer should be removed prior to adding the list below and/or
|
||||||
|
``WGPEER_F_UPDATE_ONLY`` if the peer should only be set if it already
|
||||||
|
exists.
|
||||||
|
enum: wgpeer-flags
|
||||||
|
-
|
||||||
|
name: endpoint
|
||||||
|
type: binary
|
||||||
|
doc: struct sockaddr_in or struct sockaddr_in6
|
||||||
|
checks:
|
||||||
|
min-len: 16
|
||||||
|
-
|
||||||
|
name: persistent-keepalive-interval
|
||||||
|
type: u16
|
||||||
|
doc: Set as ``0`` to disable.
|
||||||
|
-
|
||||||
|
name: last-handshake-time
|
||||||
|
type: binary
|
||||||
|
struct: --kernel-timespec
|
||||||
|
checks:
|
||||||
|
exact-len: 16
|
||||||
|
-
|
||||||
|
name: rx-bytes
|
||||||
|
type: u64
|
||||||
|
-
|
||||||
|
name: tx-bytes
|
||||||
|
type: u64
|
||||||
|
-
|
||||||
|
name: allowedips
|
||||||
|
type: indexed-array
|
||||||
|
sub-type: nest
|
||||||
|
nested-attributes: wgallowedip
|
||||||
|
doc: |
|
||||||
|
The index/type parameter is unused on ``SET_DEVICE`` operations and is
|
||||||
|
zero on ``GET_DEVICE`` operations.
|
||||||
|
-
|
||||||
|
name: protocol-version
|
||||||
|
type: u32
|
||||||
|
doc: |
|
||||||
|
Should not be set or used at all by most users of this API, as the
|
||||||
|
most recent protocol will be used when this is unset. Otherwise,
|
||||||
|
must be set to ``1``.
|
||||||
|
-
|
||||||
|
name: wgallowedip
|
||||||
|
enum-name: wgallowedip-attribute
|
||||||
|
name-prefix: wgallowedip-a-
|
||||||
|
attr-cnt-name: --wgallowedip-a-last
|
||||||
|
attributes:
|
||||||
|
-
|
||||||
|
name: unspec
|
||||||
|
type: unused
|
||||||
|
value: 0
|
||||||
|
-
|
||||||
|
name: family
|
||||||
|
type: u16
|
||||||
|
doc: IP family, either ``AF_INET`` or ``AF_INET6``.
|
||||||
|
-
|
||||||
|
name: ipaddr
|
||||||
|
type: binary
|
||||||
|
doc: Either ``struct in_addr`` or ``struct in6_addr``.
|
||||||
|
display-hint: ipv4-or-v6
|
||||||
|
checks:
|
||||||
|
min-len: 4
|
||||||
|
-
|
||||||
|
name: cidr-mask
|
||||||
|
type: u8
|
||||||
|
-
|
||||||
|
name: flags
|
||||||
|
type: u32
|
||||||
|
doc: |
|
||||||
|
``WGALLOWEDIP_F_REMOVE_ME`` if the specified IP should be removed;
|
||||||
|
otherwise, this IP will be added if it is not already present.
|
||||||
|
enum: wgallowedip-flags
|
||||||
|
|
||||||
|
operations:
|
||||||
|
enum-name: wg-cmd
|
||||||
|
name-prefix: wg-cmd-
|
||||||
|
list:
|
||||||
|
-
|
||||||
|
name: get-device
|
||||||
|
value: 0
|
||||||
|
doc: |
|
||||||
|
Retrieve WireGuard device
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
The command should be called with one but not both of:
|
||||||
|
|
||||||
|
- ``WGDEVICE_A_IFINDEX``
|
||||||
|
- ``WGDEVICE_A_IFNAME``
|
||||||
|
|
||||||
|
The kernel will then return several messages (``NLM_F_MULTI``). It is
|
||||||
|
possible that all of the allowed IPs of a single peer will not fit
|
||||||
|
within a single netlink message. In that case, the same peer will be
|
||||||
|
written in the following message, except it will only contain
|
||||||
|
``WGPEER_A_PUBLIC_KEY`` and ``WGPEER_A_ALLOWEDIPS``. This may occur
|
||||||
|
several times in a row for the same peer. It is then up to the receiver
|
||||||
|
to coalesce adjacent peers. Likewise, it is possible that all peers will
|
||||||
|
not fit within a single message. So, subsequent peers will be sent in
|
||||||
|
following messages, except those will only contain ``WGDEVICE_A_IFNAME``
|
||||||
|
and ``WGDEVICE_A_PEERS``. It is then up to the receiver to coalesce
|
||||||
|
these messages to form the complete list of peers.
|
||||||
|
|
||||||
|
Since this is an ``NLA_F_DUMP`` command, the final message will always
|
||||||
|
be ``NLMSG_DONE``, even if an error occurs. However, this ``NLMSG_DONE``
|
||||||
|
message contains an integer error code. It is either zero or a negative
|
||||||
|
error code corresponding to the errno.
|
||||||
|
attribute-set: wgdevice
|
||||||
|
flags: [uns-admin-perm]
|
||||||
|
|
||||||
|
dump:
|
||||||
|
pre: wg-get-device-start
|
||||||
|
post: wg-get-device-done
|
||||||
|
request:
|
||||||
|
attributes:
|
||||||
|
- ifindex
|
||||||
|
- ifname
|
||||||
|
reply: &all-attrs
|
||||||
|
attributes:
|
||||||
|
- ifindex
|
||||||
|
- ifname
|
||||||
|
- private-key
|
||||||
|
- public-key
|
||||||
|
- flags
|
||||||
|
- listen-port
|
||||||
|
- fwmark
|
||||||
|
- peers
|
||||||
|
-
|
||||||
|
name: set-device
|
||||||
|
value: 1
|
||||||
|
doc: |
|
||||||
|
Set WireGuard device
|
||||||
|
~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
This command should be called with a wgdevice set, containing one but
|
||||||
|
not both of ``WGDEVICE_A_IFINDEX`` and ``WGDEVICE_A_IFNAME``.
|
||||||
|
|
||||||
|
It is possible that the amount of configuration data exceeds that of the
|
||||||
|
maximum message length accepted by the kernel. In that case, several
|
||||||
|
messages should be sent one after another, with each successive one
|
||||||
|
filling in information not contained in the prior. Note that if
|
||||||
|
``WGDEVICE_F_REPLACE_PEERS`` is specified in the first message, it
|
||||||
|
probably should not be specified in fragments that come after, so that
|
||||||
|
the list of peers is only cleared the first time but appended after.
|
||||||
|
Likewise for peers, if ``WGPEER_F_REPLACE_ALLOWEDIPS`` is specified in
|
||||||
|
the first message of a peer, it likely should not be specified in
|
||||||
|
subsequent fragments.
|
||||||
|
|
||||||
|
If an error occurs, ``NLMSG_ERROR`` will reply containing an errno.
|
||||||
|
attribute-set: wgdevice
|
||||||
|
flags: [uns-admin-perm]
|
||||||
|
|
||||||
|
do:
|
||||||
|
request: *all-attrs
|
||||||
|
|
@ -94,7 +94,7 @@ kernels may lead to a compilation error because the interface to a kernel
|
||||||
function has been changed in the 2.1.8x kernels.
|
function has been changed in the 2.1.8x kernels.
|
||||||
|
|
||||||
How to turn on 6pack support:
|
How to turn on 6pack support:
|
||||||
=============================
|
-----------------------------
|
||||||
|
|
||||||
- In the linux kernel configuration program, select the code maturity level
|
- In the linux kernel configuration program, select the code maturity level
|
||||||
options menu and turn on the prompting for development drivers.
|
options menu and turn on the prompting for development drivers.
|
||||||
|
|
|
||||||
|
|
@ -4,18 +4,20 @@
|
||||||
ARCnet Hardware
|
ARCnet Hardware
|
||||||
===============
|
===============
|
||||||
|
|
||||||
|
:Author: Avery Pennarun <apenwarr@worldvisions.ca>
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
1) This file is a supplement to arcnet.txt. Please read that for general
|
1) This file is a supplement to arcnet.rst. Please read that for general
|
||||||
driver configuration help.
|
driver configuration help.
|
||||||
2) This file is no longer Linux-specific. It should probably be moved out
|
2) This file is no longer Linux-specific. It should probably be moved out
|
||||||
of the kernel sources. Ideas?
|
of the kernel sources. Ideas?
|
||||||
|
|
||||||
Because so many people (myself included) seem to have obtained ARCnet cards
|
Because so many people (myself included) seem to have obtained ARCnet cards
|
||||||
without manuals, this file contains a quick introduction to ARCnet hardware,
|
without manuals, this file contains a quick introduction to ARCnet hardware,
|
||||||
some cabling tips, and a listing of all jumper settings I can find. Please
|
some cabling tips, and a listing of all jumper settings I can find. If you
|
||||||
e-mail apenwarr@worldvisions.ca with any settings for your particular card,
|
have any settings for your particular card, and/or any other information you
|
||||||
or any other information you have!
|
have, do not hesitate to :ref:`email to netdev <arcnet-netdev>`.
|
||||||
|
|
||||||
|
|
||||||
Introduction to ARCnet
|
Introduction to ARCnet
|
||||||
|
|
@ -72,11 +74,10 @@ level of encapsulation is defined by RFC1201, which I call "packet
|
||||||
splitting," that allows "virtual packets" to grow as large as 64K each,
|
splitting," that allows "virtual packets" to grow as large as 64K each,
|
||||||
although they are generally kept down to the Ethernet-style 1500 bytes.
|
although they are generally kept down to the Ethernet-style 1500 bytes.
|
||||||
|
|
||||||
For more information on the advantages and disadvantages (mostly the
|
For more information on ARCnet networks, visit the "ARCNET Resource Center"
|
||||||
advantages) of ARCnet networks, you might try the "ARCnet Trade Association"
|
WWW page at:
|
||||||
WWW page:
|
|
||||||
|
|
||||||
http://www.arcnet.com
|
https://www.arcnet.cc
|
||||||
|
|
||||||
|
|
||||||
Cabling ARCnet Networks
|
Cabling ARCnet Networks
|
||||||
|
|
@ -3226,9 +3227,6 @@ Settings for IRQ Selection (Lower Jumper Line)
|
||||||
Other Cards
|
Other Cards
|
||||||
===========
|
===========
|
||||||
|
|
||||||
I have no information on other models of ARCnet cards at the moment. Please
|
I have no information on other models of ARCnet cards at the moment.
|
||||||
send any and all info to:
|
|
||||||
|
|
||||||
apenwarr@worldvisions.ca
|
|
||||||
|
|
||||||
Thanks.
|
Thanks.
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,8 @@
|
||||||
ARCnet
|
ARCnet
|
||||||
======
|
======
|
||||||
|
|
||||||
|
:Author: Avery Pennarun <apenwarr@worldvisions.ca>
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
See also arcnet-hardware.txt in this directory for jumper-setting
|
See also arcnet-hardware.txt in this directory for jumper-setting
|
||||||
|
|
@ -30,18 +32,7 @@ Come on, be a sport! Send me a success report!
|
||||||
|
|
||||||
(hey, that was even better than my original poem... this is getting bad!)
|
(hey, that was even better than my original poem... this is getting bad!)
|
||||||
|
|
||||||
|
----
|
||||||
.. warning::
|
|
||||||
|
|
||||||
If you don't e-mail me about your success/failure soon, I may be forced to
|
|
||||||
start SINGING. And we don't want that, do we?
|
|
||||||
|
|
||||||
(You know, it might be argued that I'm pushing this point a little too much.
|
|
||||||
If you think so, why not flame me in a quick little e-mail? Please also
|
|
||||||
include the type of card(s) you're using, software, size of network, and
|
|
||||||
whether it's working or not.)
|
|
||||||
|
|
||||||
My e-mail address is: apenwarr@worldvisions.ca
|
|
||||||
|
|
||||||
These are the ARCnet drivers for Linux.
|
These are the ARCnet drivers for Linux.
|
||||||
|
|
||||||
|
|
@ -59,23 +50,14 @@ ARCnet 2.10 ALPHA, Tomasz's all-new-and-improved RFC1051 support has been
|
||||||
included and seems to be working fine!
|
included and seems to be working fine!
|
||||||
|
|
||||||
|
|
||||||
|
.. _arcnet-netdev:
|
||||||
|
|
||||||
Where do I discuss these drivers?
|
Where do I discuss these drivers?
|
||||||
---------------------------------
|
---------------------------------
|
||||||
|
|
||||||
Tomasz has been so kind as to set up a new and improved mailing list.
|
ARCnet discussions take place on netdev. Simply send your email to
|
||||||
Subscribe by sending a message with the BODY "subscribe linux-arcnet YOUR
|
netdev@vger.kernel.org and make sure to Cc: maintainer listed in
|
||||||
REAL NAME" to listserv@tichy.ch.uj.edu.pl. Then, to submit messages to the
|
"ARCNET NETWORK LAYER" heading of Documentation/process/maintainers.rst.
|
||||||
list, mail to linux-arcnet@tichy.ch.uj.edu.pl.
|
|
||||||
|
|
||||||
There are archives of the mailing list at:
|
|
||||||
|
|
||||||
http://epistolary.org/mailman/listinfo.cgi/arcnet
|
|
||||||
|
|
||||||
The people on linux-net@vger.kernel.org (now defunct, replaced by
|
|
||||||
netdev@vger.kernel.org) have also been known to be very helpful, especially
|
|
||||||
when we're talking about ALPHA Linux kernels that may or may not work right
|
|
||||||
in the first place.
|
|
||||||
|
|
||||||
|
|
||||||
Other Drivers and Info
|
Other Drivers and Info
|
||||||
----------------------
|
----------------------
|
||||||
|
|
@ -523,17 +505,9 @@ can set up your network then:
|
||||||
It works: what now?
|
It works: what now?
|
||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
Send mail describing your setup, preferably including driver version, kernel
|
Send mail following :ref:`arcnet-netdev`. Describe your setup, preferably
|
||||||
version, ARCnet card model, CPU type, number of systems on your network, and
|
including driver version, kernel version, ARCnet card model, CPU type, number
|
||||||
list of software in use to me at the following address:
|
of systems on your network, and list of software in use.
|
||||||
|
|
||||||
apenwarr@worldvisions.ca
|
|
||||||
|
|
||||||
I do send (sometimes automated) replies to all messages I receive. My email
|
|
||||||
can be weird (and also usually gets forwarded all over the place along the
|
|
||||||
way to me), so if you don't get a reply within a reasonable time, please
|
|
||||||
resend.
|
|
||||||
|
|
||||||
|
|
||||||
It doesn't work: what now?
|
It doesn't work: what now?
|
||||||
--------------------------
|
--------------------------
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,7 @@ these MAP frames and send them to appropriate PDN's.
|
||||||
================
|
================
|
||||||
|
|
||||||
a. MAP packet v1 (data / control)
|
a. MAP packet v1 (data / control)
|
||||||
|
---------------------------------
|
||||||
|
|
||||||
MAP header fields are in big endian format.
|
MAP header fields are in big endian format.
|
||||||
|
|
||||||
|
|
@ -54,6 +55,7 @@ Payload length includes the padding length but does not include MAP header
|
||||||
length.
|
length.
|
||||||
|
|
||||||
b. Map packet v4 (data / control)
|
b. Map packet v4 (data / control)
|
||||||
|
---------------------------------
|
||||||
|
|
||||||
MAP header fields are in big endian format.
|
MAP header fields are in big endian format.
|
||||||
|
|
||||||
|
|
@ -107,6 +109,7 @@ over which checksum is computed.
|
||||||
Checksum value, indicates the checksum computed.
|
Checksum value, indicates the checksum computed.
|
||||||
|
|
||||||
c. MAP packet v5 (data / control)
|
c. MAP packet v5 (data / control)
|
||||||
|
---------------------------------
|
||||||
|
|
||||||
MAP header fields are in big endian format.
|
MAP header fields are in big endian format.
|
||||||
|
|
||||||
|
|
@ -134,6 +137,7 @@ Payload length includes the padding length but does not include MAP header
|
||||||
length.
|
length.
|
||||||
|
|
||||||
d. Checksum offload header v5
|
d. Checksum offload header v5
|
||||||
|
-----------------------------
|
||||||
|
|
||||||
Checksum offload header fields are in big endian format.
|
Checksum offload header fields are in big endian format.
|
||||||
|
|
||||||
|
|
@ -158,7 +162,10 @@ indicates that the calculated packet checksum is invalid.
|
||||||
|
|
||||||
Reserved bits must be zero when sent and ignored when received.
|
Reserved bits must be zero when sent and ignored when received.
|
||||||
|
|
||||||
e. MAP packet v1/v5 (command specific)::
|
e. MAP packet v1/v5 (command specific)
|
||||||
|
--------------------------------------
|
||||||
|
|
||||||
|
Packet format::
|
||||||
|
|
||||||
Bit 0 1 2-7 8 - 15 16 - 31
|
Bit 0 1 2-7 8 - 15 16 - 31
|
||||||
Function Command Reserved Pad Multiplexer ID Payload length
|
Function Command Reserved Pad Multiplexer ID Payload length
|
||||||
|
|
@ -181,6 +188,7 @@ Command types
|
||||||
= ==========================================
|
= ==========================================
|
||||||
|
|
||||||
f. Aggregation
|
f. Aggregation
|
||||||
|
--------------
|
||||||
|
|
||||||
Aggregation is multiple MAP packets (can be data or command) delivered to
|
Aggregation is multiple MAP packets (can be data or command) delivered to
|
||||||
rmnet in a single linear skb. rmnet will process the individual
|
rmnet in a single linear skb. rmnet will process the individual
|
||||||
|
|
|
||||||
|
|
@ -47,6 +47,7 @@ Contents:
|
||||||
mellanox/mlx5/index
|
mellanox/mlx5/index
|
||||||
meta/fbnic
|
meta/fbnic
|
||||||
microsoft/netvsc
|
microsoft/netvsc
|
||||||
|
mucse/rnpgbe
|
||||||
neterion/s2io
|
neterion/s2io
|
||||||
netronome/nfp
|
netronome/nfp
|
||||||
pensando/ionic
|
pensando/ionic
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
.. SPDX-License-Identifier: GPL-2.0
|
||||||
|
|
||||||
|
===========================================================
|
||||||
|
Linux Base Driver for MUCSE(R) Gigabit PCI Express Adapters
|
||||||
|
===========================================================
|
||||||
|
|
||||||
|
Contents
|
||||||
|
========
|
||||||
|
|
||||||
|
- Identifying Your Adapter
|
||||||
|
|
||||||
|
Identifying Your Adapter
|
||||||
|
========================
|
||||||
|
The driver is compatible with devices based on the following:
|
||||||
|
|
||||||
|
* MUCSE(R) Ethernet Controller N210 series
|
||||||
|
* MUCSE(R) Ethernet Controller N500 series
|
||||||
|
|
@ -39,6 +39,10 @@ The following is a list of E-Switch attributes.
|
||||||
rules.
|
rules.
|
||||||
* ``switchdev`` allows for more advanced offloading capabilities of
|
* ``switchdev`` allows for more advanced offloading capabilities of
|
||||||
the E-Switch to hardware.
|
the E-Switch to hardware.
|
||||||
|
* ``switchdev_inactive`` switchdev mode but starts inactive, doesn't allow traffic
|
||||||
|
until explicitly activated. This mode is useful for orchestrators that
|
||||||
|
want to prepare the device in switchdev mode but only activate it when
|
||||||
|
all configurations are done.
|
||||||
* - ``inline-mode``
|
* - ``inline-mode``
|
||||||
- enum
|
- enum
|
||||||
- Some HWs need the VF driver to put part of the packet
|
- Some HWs need the VF driver to put part of the packet
|
||||||
|
|
@ -74,3 +78,12 @@ Example Usage
|
||||||
|
|
||||||
# enable encap-mode with legacy mode
|
# enable encap-mode with legacy mode
|
||||||
$ devlink dev eswitch set pci/0000:08:00.0 mode legacy inline-mode none encap-mode basic
|
$ devlink dev eswitch set pci/0000:08:00.0 mode legacy inline-mode none encap-mode basic
|
||||||
|
|
||||||
|
# start switchdev mode in inactive state
|
||||||
|
$ devlink dev eswitch set pci/0000:08:00.0 mode switchdev_inactive
|
||||||
|
|
||||||
|
# setup switchdev configurations, representors, FDB entries, etc..
|
||||||
|
...
|
||||||
|
|
||||||
|
# activate switchdev mode to allow traffic
|
||||||
|
$ devlink dev eswitch set pci/0000:08:00.0 mode switchdev
|
||||||
|
|
|
||||||
|
|
@ -41,6 +41,16 @@ In order for ``driverinit`` parameters to take effect, the driver must
|
||||||
support reloading via the ``devlink-reload`` command. This command will
|
support reloading via the ``devlink-reload`` command. This command will
|
||||||
request a reload of the device driver.
|
request a reload of the device driver.
|
||||||
|
|
||||||
|
Default parameter values
|
||||||
|
=========================
|
||||||
|
|
||||||
|
Drivers may optionally export default values for parameters of cmode
|
||||||
|
``runtime`` and ``permanent``. For ``driverinit`` parameters, the last
|
||||||
|
value set by the driver will be used as the default value. Drivers can
|
||||||
|
also support resetting params with cmode ``runtime`` and ``permanent``
|
||||||
|
to their default values. Resetting ``driverinit`` params is supported
|
||||||
|
by devlink core without additional driver support needed.
|
||||||
|
|
||||||
.. _devlink_params_generic:
|
.. _devlink_params_generic:
|
||||||
|
|
||||||
Generic configuration parameters
|
Generic configuration parameters
|
||||||
|
|
@ -151,3 +161,7 @@ own name.
|
||||||
* - ``num_doorbells``
|
* - ``num_doorbells``
|
||||||
- u32
|
- u32
|
||||||
- Controls the number of doorbells used by the device.
|
- Controls the number of doorbells used by the device.
|
||||||
|
* - ``max_mac_per_vf``
|
||||||
|
- u32
|
||||||
|
- Controls the maximum number of MAC address filters that can be assigned
|
||||||
|
to a Virtual Function (VF).
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,40 @@ i40e devlink support
|
||||||
This document describes the devlink features implemented by the ``i40e``
|
This document describes the devlink features implemented by the ``i40e``
|
||||||
device driver.
|
device driver.
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
==========
|
||||||
|
|
||||||
|
.. list-table:: Generic parameters implemented
|
||||||
|
:widths: 5 5 90
|
||||||
|
|
||||||
|
* - Name
|
||||||
|
- Mode
|
||||||
|
- Notes
|
||||||
|
* - ``max_mac_per_vf``
|
||||||
|
- runtime
|
||||||
|
- Controls the maximum number of MAC addresses a VF can use
|
||||||
|
on i40e devices.
|
||||||
|
|
||||||
|
By default (``0``), the driver enforces its internally calculated per-VF
|
||||||
|
MAC filter limit, which is based on the number of allocated VFS.
|
||||||
|
|
||||||
|
If set to a non-zero value, this parameter acts as a strict cap:
|
||||||
|
the driver will use the user-provided value instead of its internal
|
||||||
|
calculation.
|
||||||
|
|
||||||
|
**Important notes:**
|
||||||
|
|
||||||
|
- This value **must be set before enabling SR-IOV**.
|
||||||
|
Attempting to change it while SR-IOV is enabled will return an error.
|
||||||
|
- MAC filters are a **shared hardware resource** across all VFs.
|
||||||
|
Setting a high value may cause other VFs to be starved of filters.
|
||||||
|
- This value is a **Administrative policy**. The hardware may return
|
||||||
|
errors when its absolute limit is reached, regardless of the value
|
||||||
|
set here.
|
||||||
|
|
||||||
|
The default value is ``0`` (internal calculation is used).
|
||||||
|
|
||||||
|
|
||||||
Info versions
|
Info versions
|
||||||
=============
|
=============
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -99,5 +99,6 @@ parameters, info versions, and other features it supports.
|
||||||
prestera
|
prestera
|
||||||
qed
|
qed
|
||||||
sfc
|
sfc
|
||||||
|
stmmac
|
||||||
ti-cpsw-switch
|
ti-cpsw-switch
|
||||||
zl3073x
|
zl3073x
|
||||||
|
|
|
||||||
|
|
@ -218,6 +218,20 @@ parameters.
|
||||||
* ``balanced`` : Merges fewer CQEs, resulting in a moderate compression ratio but maintaining a balance between bandwidth savings and performance
|
* ``balanced`` : Merges fewer CQEs, resulting in a moderate compression ratio but maintaining a balance between bandwidth savings and performance
|
||||||
* ``aggressive`` : Merges more CQEs into a single entry, achieving a higher compression rate and maximizing performance, particularly under high traffic loads
|
* ``aggressive`` : Merges more CQEs into a single entry, achieving a higher compression rate and maximizing performance, particularly under high traffic loads
|
||||||
|
|
||||||
|
* - ``swp_l4_csum_mode``
|
||||||
|
- string
|
||||||
|
- permanent
|
||||||
|
- Configure how the L4 checksum is calculated by the device when using
|
||||||
|
Software Parser (SWP) hints for header locations.
|
||||||
|
|
||||||
|
* ``default`` : Use the device's default checksum calculation
|
||||||
|
mode. The driver will discover during init whether or
|
||||||
|
full_csum or l4_only is in use. Setting this value explicitly
|
||||||
|
from userspace is not allowed, but some firmware versions may
|
||||||
|
return this value on param read.
|
||||||
|
* ``full_csum`` : Calculate full checksum including the pseudo-header
|
||||||
|
* ``l4_only`` : Calculate L4-only checksum, excluding the pseudo-header
|
||||||
|
|
||||||
The ``mlx5`` driver supports reloading via ``DEVLINK_CMD_RELOAD``
|
The ``mlx5`` driver supports reloading via ``DEVLINK_CMD_RELOAD``
|
||||||
|
|
||||||
Info versions
|
Info versions
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,40 @@
|
||||||
|
.. SPDX-License-Identifier: GPL-2.0
|
||||||
|
|
||||||
|
=======================================
|
||||||
|
stmmac (synopsys dwmac) devlink support
|
||||||
|
=======================================
|
||||||
|
|
||||||
|
This document describes the devlink features implemented by the ``stmmac``
|
||||||
|
device driver.
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
==========
|
||||||
|
|
||||||
|
The ``stmmac`` driver implements the following driver-specific parameters.
|
||||||
|
|
||||||
|
.. list-table:: Driver-specific parameters implemented
|
||||||
|
:widths: 5 5 5 85
|
||||||
|
|
||||||
|
* - Name
|
||||||
|
- Type
|
||||||
|
- Mode
|
||||||
|
- Description
|
||||||
|
* - ``phc_coarse_adj``
|
||||||
|
- Boolean
|
||||||
|
- runtime
|
||||||
|
- Enable the Coarse timestamping mode, as defined in the DWMAC TRM.
|
||||||
|
A detailed explanation of this timestamping mode can be found in the
|
||||||
|
Socfpga Functionnal Description [1].
|
||||||
|
|
||||||
|
In Coarse mode, the ptp clock is expected to be fed by a high-precision
|
||||||
|
clock that is externally adjusted, and the subsecond increment used for
|
||||||
|
timestamping is set to 1/ptp_clock_rate.
|
||||||
|
|
||||||
|
In Fine mode (i.e. Coarse mode == false), the ptp clock frequency is
|
||||||
|
continuously adjusted, but the subsecond increment is set to
|
||||||
|
2/ptp_clock_rate.
|
||||||
|
|
||||||
|
Coarse mode is suitable for PTP Grand Master operation. If unsure, leave
|
||||||
|
the parameter to False.
|
||||||
|
|
||||||
|
[1] https://www.intel.com/content/www/us/en/docs/programmable/683126/21-2/functional-description-of-the-emac.html
|
||||||
|
|
@ -1104,12 +1104,11 @@ health of the network and for discovery of other nodes.
|
||||||
In Linux, both HSR and PRP are implemented in the hsr driver, which
|
In Linux, both HSR and PRP are implemented in the hsr driver, which
|
||||||
instantiates a virtual, stackable network interface with two member ports.
|
instantiates a virtual, stackable network interface with two member ports.
|
||||||
The driver only implements the basic roles of DANH (Doubly Attached Node
|
The driver only implements the basic roles of DANH (Doubly Attached Node
|
||||||
implementing HSR) and DANP (Doubly Attached Node implementing PRP); the roles
|
implementing HSR), DANP (Doubly Attached Node implementing PRP) and RedBox
|
||||||
of RedBox and QuadBox are not implemented (therefore, bridging a hsr network
|
(allows non-HSR devices to connect to the ring via Interlink ports).
|
||||||
interface with a physical switch port does not produce the expected result).
|
|
||||||
|
|
||||||
A driver which is able of offloading certain functions of a DANP or DANH should
|
A driver which is able of offloading certain functions should declare the
|
||||||
declare the corresponding netdev features as indicated by the documentation at
|
corresponding netdev features as indicated by the documentation at
|
||||||
``Documentation/networking/netdev-features.rst``. Additionally, the following
|
``Documentation/networking/netdev-features.rst``. Additionally, the following
|
||||||
methods must be implemented:
|
methods must be implemented:
|
||||||
|
|
||||||
|
|
@ -1120,6 +1119,14 @@ methods must be implemented:
|
||||||
- ``port_hsr_leave``: function invoked when a given switch port leaves a
|
- ``port_hsr_leave``: function invoked when a given switch port leaves a
|
||||||
DANP/DANH and returns to normal operation as a standalone port.
|
DANP/DANH and returns to normal operation as a standalone port.
|
||||||
|
|
||||||
|
Note that the ``NETIF_F_HW_HSR_DUP`` feature relies on transmission towards
|
||||||
|
multiple ports, which is generally available whenever the tagging protocol uses
|
||||||
|
the ``dsa_xmit_port_mask()`` helper function. If the helper is used, the HSR
|
||||||
|
offload feature should also be set. The ``dsa_port_simple_hsr_join()`` and
|
||||||
|
``dsa_port_simple_hsr_leave()`` methods can be used as generic implementations
|
||||||
|
of ``port_hsr_join`` and ``port_hsr_leave``, if this is the only supported
|
||||||
|
offload feature.
|
||||||
|
|
||||||
TODO
|
TODO
|
||||||
====
|
====
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -242,6 +242,7 @@ Userspace to kernel:
|
||||||
``ETHTOOL_MSG_RSS_SET`` set RSS settings
|
``ETHTOOL_MSG_RSS_SET`` set RSS settings
|
||||||
``ETHTOOL_MSG_RSS_CREATE_ACT`` create an additional RSS context
|
``ETHTOOL_MSG_RSS_CREATE_ACT`` create an additional RSS context
|
||||||
``ETHTOOL_MSG_RSS_DELETE_ACT`` delete an additional RSS context
|
``ETHTOOL_MSG_RSS_DELETE_ACT`` delete an additional RSS context
|
||||||
|
``ETHTOOL_MSG_MSE_GET`` get MSE diagnostic data
|
||||||
===================================== =================================
|
===================================== =================================
|
||||||
|
|
||||||
Kernel to userspace:
|
Kernel to userspace:
|
||||||
|
|
@ -299,6 +300,7 @@ Kernel to userspace:
|
||||||
``ETHTOOL_MSG_RSS_CREATE_ACT_REPLY`` create an additional RSS context
|
``ETHTOOL_MSG_RSS_CREATE_ACT_REPLY`` create an additional RSS context
|
||||||
``ETHTOOL_MSG_RSS_CREATE_NTF`` additional RSS context created
|
``ETHTOOL_MSG_RSS_CREATE_NTF`` additional RSS context created
|
||||||
``ETHTOOL_MSG_RSS_DELETE_NTF`` additional RSS context deleted
|
``ETHTOOL_MSG_RSS_DELETE_NTF`` additional RSS context deleted
|
||||||
|
``ETHTOOL_MSG_MSE_GET_REPLY`` MSE diagnostic data
|
||||||
======================================== =================================
|
======================================== =================================
|
||||||
|
|
||||||
``GET`` requests are sent by userspace applications to retrieve device
|
``GET`` requests are sent by userspace applications to retrieve device
|
||||||
|
|
@ -2458,6 +2460,68 @@ Kernel response contents:
|
||||||
|
|
||||||
For a description of each attribute, see ``TSCONFIG_GET``.
|
For a description of each attribute, see ``TSCONFIG_GET``.
|
||||||
|
|
||||||
|
MSE_GET
|
||||||
|
=======
|
||||||
|
|
||||||
|
Retrieves detailed Mean Square Error (MSE) diagnostic information from the PHY.
|
||||||
|
|
||||||
|
Request Contents:
|
||||||
|
|
||||||
|
==================================== ====== ============================
|
||||||
|
``ETHTOOL_A_MSE_HEADER`` nested request header
|
||||||
|
==================================== ====== ============================
|
||||||
|
|
||||||
|
Kernel Response Contents:
|
||||||
|
|
||||||
|
==================================== ====== ================================
|
||||||
|
``ETHTOOL_A_MSE_HEADER`` nested reply header
|
||||||
|
``ETHTOOL_A_MSE_CAPABILITIES`` nested capability/scale info for MSE
|
||||||
|
measurements
|
||||||
|
``ETHTOOL_A_MSE_CHANNEL_A`` nested snapshot for Channel A
|
||||||
|
``ETHTOOL_A_MSE_CHANNEL_B`` nested snapshot for Channel B
|
||||||
|
``ETHTOOL_A_MSE_CHANNEL_C`` nested snapshot for Channel C
|
||||||
|
``ETHTOOL_A_MSE_CHANNEL_D`` nested snapshot for Channel D
|
||||||
|
``ETHTOOL_A_MSE_WORST_CHANNEL`` nested snapshot for worst channel
|
||||||
|
``ETHTOOL_A_MSE_LINK`` nested snapshot for link-wide aggregate
|
||||||
|
==================================== ====== ================================
|
||||||
|
|
||||||
|
MSE Capabilities
|
||||||
|
----------------
|
||||||
|
|
||||||
|
This nested attribute reports the capability / scaling properties used to
|
||||||
|
interpret snapshot values.
|
||||||
|
|
||||||
|
============================================== ====== =========================
|
||||||
|
``ETHTOOL_A_MSE_CAPABILITIES_MAX_AVERAGE_MSE`` uint max avg_mse scale
|
||||||
|
``ETHTOOL_A_MSE_CAPABILITIES_MAX_PEAK_MSE`` uint max peak_mse scale
|
||||||
|
``ETHTOOL_A_MSE_CAPABILITIES_REFRESH_RATE_PS`` uint sample rate (picoseconds)
|
||||||
|
``ETHTOOL_A_MSE_CAPABILITIES_NUM_SYMBOLS`` uint symbols per HW sample
|
||||||
|
============================================== ====== =========================
|
||||||
|
|
||||||
|
The max-average/peak fields are included only if the corresponding metric
|
||||||
|
is supported by the PHY. Their absence indicates that the metric is not
|
||||||
|
available.
|
||||||
|
|
||||||
|
See ``struct phy_mse_capability`` kernel documentation in
|
||||||
|
``include/linux/phy.h``.
|
||||||
|
|
||||||
|
MSE Snapshot
|
||||||
|
------------
|
||||||
|
|
||||||
|
Each per-channel nest contains an atomic snapshot of MSE values for that
|
||||||
|
selector (channel A/B/C/D, worst channel, or link).
|
||||||
|
|
||||||
|
========================================== ====== ===================
|
||||||
|
``ETHTOOL_A_MSE_SNAPSHOT_AVERAGE_MSE`` uint average MSE value
|
||||||
|
``ETHTOOL_A_MSE_SNAPSHOT_PEAK_MSE`` uint current peak MSE
|
||||||
|
``ETHTOOL_A_MSE_SNAPSHOT_WORST_PEAK_MSE`` uint worst-case peak MSE
|
||||||
|
========================================== ====== ===================
|
||||||
|
|
||||||
|
Within each channel nest, only the metrics supported by the PHY will be present.
|
||||||
|
|
||||||
|
See ``struct phy_mse_snapshot`` kernel documentation in
|
||||||
|
``include/linux/phy.h``.
|
||||||
|
|
||||||
Request translation
|
Request translation
|
||||||
===================
|
===================
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -131,10 +131,7 @@ Contents:
|
||||||
vxlan
|
vxlan
|
||||||
x25
|
x25
|
||||||
x25-iface
|
x25-iface
|
||||||
xfrm_device
|
xfrm/index
|
||||||
xfrm_proc
|
|
||||||
xfrm_sync
|
|
||||||
xfrm_sysctl
|
|
||||||
xdp-rx-metadata
|
xdp-rx-metadata
|
||||||
xsk-tx-metadata
|
xsk-tx-metadata
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -673,6 +673,16 @@ tcp_moderate_rcvbuf - BOOLEAN
|
||||||
|
|
||||||
Default: 1 (enabled)
|
Default: 1 (enabled)
|
||||||
|
|
||||||
|
tcp_rcvbuf_low_rtt - INTEGER
|
||||||
|
rcvbuf autotuning can over estimate final socket rcvbuf, which
|
||||||
|
can lead to cache trashing for high throughput flows.
|
||||||
|
|
||||||
|
For small RTT flows (below tcp_rcvbuf_low_rtt usecs), we can relax
|
||||||
|
rcvbuf growth: Few additional ms to reach the final (and smaller)
|
||||||
|
rcvbuf is a good tradeoff.
|
||||||
|
|
||||||
|
Default : 1000 (1 ms)
|
||||||
|
|
||||||
tcp_mtu_probing - INTEGER
|
tcp_mtu_probing - INTEGER
|
||||||
Controls TCP Packetization-Layer Path MTU Discovery. Takes three
|
Controls TCP Packetization-Layer Path MTU Discovery. Takes three
|
||||||
values:
|
values:
|
||||||
|
|
@ -854,9 +864,18 @@ tcp_sack - BOOLEAN
|
||||||
|
|
||||||
Default: 1 (enabled)
|
Default: 1 (enabled)
|
||||||
|
|
||||||
|
tcp_comp_sack_rtt_percent - INTEGER
|
||||||
|
Percentage of SRTT used for the compressed SACK feature.
|
||||||
|
See tcp_comp_sack_nr, tcp_comp_sack_delay_ns, tcp_comp_sack_slack_ns.
|
||||||
|
|
||||||
|
Possible values : 1 - 1000
|
||||||
|
|
||||||
|
Default : 33 %
|
||||||
|
|
||||||
tcp_comp_sack_delay_ns - LONG INTEGER
|
tcp_comp_sack_delay_ns - LONG INTEGER
|
||||||
TCP tries to reduce number of SACK sent, using a timer
|
TCP tries to reduce number of SACK sent, using a timer based
|
||||||
based on 5% of SRTT, capped by this sysctl, in nano seconds.
|
on tcp_comp_sack_rtt_percent of SRTT, capped by this sysctl
|
||||||
|
in nano seconds.
|
||||||
The default is 1ms, based on TSO autosizing period.
|
The default is 1ms, based on TSO autosizing period.
|
||||||
|
|
||||||
Default : 1,000,000 ns (1 ms)
|
Default : 1,000,000 ns (1 ms)
|
||||||
|
|
@ -866,8 +885,9 @@ tcp_comp_sack_slack_ns - LONG INTEGER
|
||||||
timer used by SACK compression. This gives extra time
|
timer used by SACK compression. This gives extra time
|
||||||
for small RTT flows, and reduces system overhead by allowing
|
for small RTT flows, and reduces system overhead by allowing
|
||||||
opportunistic reduction of timer interrupts.
|
opportunistic reduction of timer interrupts.
|
||||||
|
Too big values might reduce goodput.
|
||||||
|
|
||||||
Default : 100,000 ns (100 us)
|
Default : 10,000 ns (10 us)
|
||||||
|
|
||||||
tcp_comp_sack_nr - INTEGER
|
tcp_comp_sack_nr - INTEGER
|
||||||
Max number of SACK that can be compressed.
|
Max number of SACK that can be compressed.
|
||||||
|
|
@ -1796,6 +1816,23 @@ icmp_errors_use_inbound_ifaddr - BOOLEAN
|
||||||
|
|
||||||
Default: 0 (disabled)
|
Default: 0 (disabled)
|
||||||
|
|
||||||
|
icmp_errors_extension_mask - UNSIGNED INTEGER
|
||||||
|
Bitmask of ICMP extensions to append to ICMPv4 error messages
|
||||||
|
("Destination Unreachable", "Time Exceeded" and "Parameter Problem").
|
||||||
|
The original datagram is trimmed / padded to 128 bytes in order to be
|
||||||
|
compatible with applications that do not comply with RFC 4884.
|
||||||
|
|
||||||
|
Possible extensions are:
|
||||||
|
|
||||||
|
==== ==============================================================
|
||||||
|
0x01 Incoming IP interface information according to RFC 5837.
|
||||||
|
Extension will include the index, IPv4 address (if present),
|
||||||
|
name and MTU of the IP interface that received the datagram
|
||||||
|
which elicited the ICMP error.
|
||||||
|
==== ==============================================================
|
||||||
|
|
||||||
|
Default: 0x00 (no extensions)
|
||||||
|
|
||||||
igmp_max_memberships - INTEGER
|
igmp_max_memberships - INTEGER
|
||||||
Change the maximum number of multicast groups we can subscribe to.
|
Change the maximum number of multicast groups we can subscribe to.
|
||||||
Default: 20
|
Default: 20
|
||||||
|
|
@ -3262,6 +3299,23 @@ error_anycast_as_unicast - BOOLEAN
|
||||||
|
|
||||||
Default: 0 (disabled)
|
Default: 0 (disabled)
|
||||||
|
|
||||||
|
errors_extension_mask - UNSIGNED INTEGER
|
||||||
|
Bitmask of ICMP extensions to append to ICMPv6 error messages
|
||||||
|
("Destination Unreachable" and "Time Exceeded"). The original datagram
|
||||||
|
is trimmed / padded to 128 bytes in order to be compatible with
|
||||||
|
applications that do not comply with RFC 4884.
|
||||||
|
|
||||||
|
Possible extensions are:
|
||||||
|
|
||||||
|
==== ==============================================================
|
||||||
|
0x01 Incoming IP interface information according to RFC 5837.
|
||||||
|
Extension will include the index, IPv6 address (if present),
|
||||||
|
name and MTU of the IP interface that received the datagram
|
||||||
|
which elicited the ICMP error.
|
||||||
|
==== ==============================================================
|
||||||
|
|
||||||
|
Default: 0x00 (no extensions)
|
||||||
|
|
||||||
xfrm6_gc_thresh - INTEGER
|
xfrm6_gc_thresh - INTEGER
|
||||||
(Obsolete since linux-4.14)
|
(Obsolete since linux-4.14)
|
||||||
The threshold at which we will start garbage collecting for IPv6
|
The threshold at which we will start garbage collecting for IPv6
|
||||||
|
|
|
||||||
|
|
@ -263,7 +263,9 @@ are not well known).
|
||||||
Busy polling is enabled by either setting ``SO_BUSY_POLL`` on
|
Busy polling is enabled by either setting ``SO_BUSY_POLL`` on
|
||||||
selected sockets or using the global ``net.core.busy_poll`` and
|
selected sockets or using the global ``net.core.busy_poll`` and
|
||||||
``net.core.busy_read`` sysctls. An io_uring API for NAPI busy polling
|
``net.core.busy_read`` sysctls. An io_uring API for NAPI busy polling
|
||||||
also exists.
|
also exists. Threaded polling of NAPI also has a mode to busy poll for
|
||||||
|
packets (:ref:`threaded busy polling<threaded_busy_poll>`) using the NAPI
|
||||||
|
processing kthread.
|
||||||
|
|
||||||
epoll-based busy polling
|
epoll-based busy polling
|
||||||
------------------------
|
------------------------
|
||||||
|
|
@ -426,6 +428,52 @@ Therefore, setting ``gro_flush_timeout`` and ``napi_defer_hard_irqs`` is
|
||||||
the recommended usage, because otherwise setting ``irq-suspend-timeout``
|
the recommended usage, because otherwise setting ``irq-suspend-timeout``
|
||||||
might not have any discernible effect.
|
might not have any discernible effect.
|
||||||
|
|
||||||
|
.. _threaded_busy_poll:
|
||||||
|
|
||||||
|
Threaded NAPI busy polling
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
Threaded NAPI busy polling extends threaded NAPI and adds support to do
|
||||||
|
continuous busy polling of the NAPI. This can be useful for forwarding or
|
||||||
|
AF_XDP applications.
|
||||||
|
|
||||||
|
Threaded NAPI busy polling can be enabled on per NIC queue basis using Netlink.
|
||||||
|
|
||||||
|
For example, using the following script:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
$ ynl --family netdev --do napi-set \
|
||||||
|
--json='{"id": 66, "threaded": "busy-poll"}'
|
||||||
|
|
||||||
|
The kernel will create a kthread that busy polls on this NAPI.
|
||||||
|
|
||||||
|
The user may elect to set the CPU affinity of this kthread to an unused CPU
|
||||||
|
core to improve how often the NAPI is polled at the expense of wasted CPU
|
||||||
|
cycles. Note that this will keep the CPU core busy with 100% usage.
|
||||||
|
|
||||||
|
Once threaded busy polling is enabled for a NAPI, PID of the kthread can be
|
||||||
|
retrieved using Netlink so the affinity of the kthread can be set up.
|
||||||
|
|
||||||
|
For example, the following script can be used to fetch the PID:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
$ ynl --family netdev --do napi-get --json='{"id": 66}'
|
||||||
|
|
||||||
|
This will output something like following, the pid `258` is the PID of the
|
||||||
|
kthread that is polling this NAPI.
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
$ {'defer-hard-irqs': 0,
|
||||||
|
'gro-flush-timeout': 0,
|
||||||
|
'id': 66,
|
||||||
|
'ifindex': 2,
|
||||||
|
'irq-suspend-timeout': 0,
|
||||||
|
'pid': 258,
|
||||||
|
'threaded': 'busy-poll'}
|
||||||
|
|
||||||
.. _threaded:
|
.. _threaded:
|
||||||
|
|
||||||
Threaded NAPI
|
Threaded NAPI
|
||||||
|
|
|
||||||
|
|
@ -12,8 +12,8 @@ struct inet_sock icsk_inet read_mostly r
|
||||||
struct request_sock_queue icsk_accept_queue
|
struct request_sock_queue icsk_accept_queue
|
||||||
struct inet_bind_bucket icsk_bind_hash read_mostly tcp_set_state
|
struct inet_bind_bucket icsk_bind_hash read_mostly tcp_set_state
|
||||||
struct inet_bind2_bucket icsk_bind2_hash read_mostly tcp_set_state,inet_put_port
|
struct inet_bind2_bucket icsk_bind2_hash read_mostly tcp_set_state,inet_put_port
|
||||||
struct timer_list icsk_retransmit_timer read_write inet_csk_reset_xmit_timer,tcp_connect
|
|
||||||
struct timer_list icsk_delack_timer read_mostly inet_csk_reset_xmit_timer,tcp_connect
|
struct timer_list icsk_delack_timer read_mostly inet_csk_reset_xmit_timer,tcp_connect
|
||||||
|
struct timer_list icsk_keepalive_timer
|
||||||
u32 icsk_rto read_write tcp_cwnd_validate,tcp_schedule_loss_probe,tcp_connect_init,tcp_connect,tcp_write_xmit,tcp_push_one
|
u32 icsk_rto read_write tcp_cwnd_validate,tcp_schedule_loss_probe,tcp_connect_init,tcp_connect,tcp_write_xmit,tcp_push_one
|
||||||
u32 icsk_rto_min
|
u32 icsk_rto_min
|
||||||
u32 icsk_rto_max read_mostly tcp_reset_xmit_timer
|
u32 icsk_rto_max read_mostly tcp_reset_xmit_timer
|
||||||
|
|
|
||||||
|
|
@ -5,42 +5,43 @@
|
||||||
inet_sock struct fast path usage breakdown
|
inet_sock struct fast path usage breakdown
|
||||||
==========================================
|
==========================================
|
||||||
|
|
||||||
======================= ===================== =================== =================== ======================================================================================================
|
======================== ===================== =================== =================== ======================================================================================================
|
||||||
Type Name fastpath_tx_access fastpath_rx_access comment
|
Type Name fastpath_tx_access fastpath_rx_access comment
|
||||||
======================= ===================== =================== =================== ======================================================================================================
|
======================== ===================== =================== =================== ======================================================================================================
|
||||||
struct sock sk read_mostly read_mostly tcp_init_buffer_space,tcp_init_transfer,tcp_finish_connect,tcp_connect,tcp_send_rcvq,tcp_send_syn_data
|
struct sock sk read_mostly read_mostly tcp_init_buffer_space,tcp_init_transfer,tcp_finish_connect,tcp_connect,tcp_send_rcvq,tcp_send_syn_data
|
||||||
struct ipv6_pinfo* pinet6
|
struct ipv6_pinfo* pinet6
|
||||||
be16 inet_sport read_mostly __tcp_transmit_skb
|
struct ipv6_fl_socklist* ipv6_fl_list read_mostly tcp_v6_connect,__ip6_datagram_connect,udpv6_sendmsg,rawv6_sendmsg
|
||||||
be32 inet_daddr read_mostly ip_select_ident_segs
|
be16 inet_sport read_mostly __tcp_transmit_skb
|
||||||
be32 inet_rcv_saddr
|
be32 inet_daddr read_mostly ip_select_ident_segs
|
||||||
be16 inet_dport read_mostly __tcp_transmit_skb
|
be32 inet_rcv_saddr
|
||||||
u16 inet_num
|
be16 inet_dport read_mostly __tcp_transmit_skb
|
||||||
be32 inet_saddr
|
u16 inet_num
|
||||||
s16 uc_ttl read_mostly __ip_queue_xmit/ip_select_ttl
|
be32 inet_saddr
|
||||||
u16 cmsg_flags
|
s16 uc_ttl read_mostly __ip_queue_xmit/ip_select_ttl
|
||||||
struct ip_options_rcu* inet_opt read_mostly __ip_queue_xmit
|
u16 cmsg_flags
|
||||||
u16 inet_id read_mostly ip_select_ident_segs
|
struct ip_options_rcu* inet_opt read_mostly __ip_queue_xmit
|
||||||
u8 tos read_mostly ip_queue_xmit
|
u16 inet_id read_mostly ip_select_ident_segs
|
||||||
u8 min_ttl
|
u8 tos read_mostly ip_queue_xmit
|
||||||
u8 mc_ttl
|
u8 min_ttl
|
||||||
u8 pmtudisc
|
u8 mc_ttl
|
||||||
u8:1 recverr
|
u8 pmtudisc
|
||||||
u8:1 is_icsk
|
u8:1 recverr
|
||||||
u8:1 freebind
|
u8:1 is_icsk
|
||||||
u8:1 hdrincl
|
u8:1 freebind
|
||||||
u8:1 mc_loop
|
u8:1 hdrincl
|
||||||
u8:1 transparent
|
u8:1 mc_loop
|
||||||
u8:1 mc_all
|
u8:1 transparent
|
||||||
u8:1 nodefrag
|
u8:1 mc_all
|
||||||
u8:1 bind_address_no_port
|
u8:1 nodefrag
|
||||||
u8:1 recverr_rfc4884
|
u8:1 bind_address_no_port
|
||||||
u8:1 defer_connect read_mostly tcp_sendmsg_fastopen
|
u8:1 recverr_rfc4884
|
||||||
u8 rcv_tos
|
u8:1 defer_connect read_mostly tcp_sendmsg_fastopen
|
||||||
u8 convert_csum
|
u8 rcv_tos
|
||||||
int uc_index
|
u8 convert_csum
|
||||||
int mc_index
|
int uc_index
|
||||||
be32 mc_addr
|
int mc_index
|
||||||
struct ip_mc_socklist* mc_list
|
be32 mc_addr
|
||||||
struct inet_cork_full cork read_mostly __tcp_transmit_skb
|
struct ip_mc_socklist* mc_list
|
||||||
struct local_port_range
|
struct inet_cork_full cork read_mostly __tcp_transmit_skb
|
||||||
======================= ===================== =================== =================== ======================================================================================================
|
struct local_port_range
|
||||||
|
======================== ===================== =================== =================== ======================================================================================================
|
||||||
|
|
|
||||||
|
|
@ -102,7 +102,8 @@ u8 sysctl_tcp_app_win
|
||||||
u8 sysctl_tcp_frto tcp_enter_loss
|
u8 sysctl_tcp_frto tcp_enter_loss
|
||||||
u8 sysctl_tcp_nometrics_save TCP_LAST_ACK/tcp_update_metrics
|
u8 sysctl_tcp_nometrics_save TCP_LAST_ACK/tcp_update_metrics
|
||||||
u8 sysctl_tcp_no_ssthresh_metrics_save TCP_LAST_ACK/tcp_(update/init)_metrics
|
u8 sysctl_tcp_no_ssthresh_metrics_save TCP_LAST_ACK/tcp_(update/init)_metrics
|
||||||
u8 sysctl_tcp_moderate_rcvbuf read_mostly read_mostly tcp_tso_should_defer(tx);tcp_rcv_space_adjust(rx)
|
u8 sysctl_tcp_moderate_rcvbuf read_mostly tcp_rcvbuf_grow()
|
||||||
|
u32 sysctl_tcp_rcvbuf_low_rtt read_mostly tcp_rcvbuf_grow()
|
||||||
u8 sysctl_tcp_tso_win_divisor read_mostly tcp_tso_should_defer(tcp_write_xmit)
|
u8 sysctl_tcp_tso_win_divisor read_mostly tcp_tso_should_defer(tcp_write_xmit)
|
||||||
u8 sysctl_tcp_workaround_signed_windows tcp_select_window
|
u8 sysctl_tcp_workaround_signed_windows tcp_select_window
|
||||||
int sysctl_tcp_limit_output_bytes read_mostly tcp_small_queue_check(tcp_write_xmit)
|
int sysctl_tcp_limit_output_bytes read_mostly tcp_small_queue_check(tcp_write_xmit)
|
||||||
|
|
|
||||||
|
|
@ -88,7 +88,7 @@ for example:
|
||||||
|
|
||||||
nc -u -l -p <port>' / 'nc -u -l <port>
|
nc -u -l -p <port>' / 'nc -u -l <port>
|
||||||
|
|
||||||
or::
|
or::
|
||||||
|
|
||||||
netcat -u -l -p <port>' / 'netcat -u -l <port>
|
netcat -u -l -p <port>' / 'netcat -u -l <port>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -71,7 +71,8 @@ Userspace interface
|
||||||
The userspace interface is divided in control operations and low-level data
|
The userspace interface is divided in control operations and low-level data
|
||||||
exchange operation.
|
exchange operation.
|
||||||
|
|
||||||
CONTROL OPERATIONS:
|
Control operations
|
||||||
|
------------------
|
||||||
|
|
||||||
Generic netlink is used to implement the interface to the control operations.
|
Generic netlink is used to implement the interface to the control operations.
|
||||||
The operations are composed by commands and events, all listed below:
|
The operations are composed by commands and events, all listed below:
|
||||||
|
|
@ -100,7 +101,8 @@ relevant information such as the supported NFC protocols.
|
||||||
All polling operations requested through one netlink socket are stopped when
|
All polling operations requested through one netlink socket are stopped when
|
||||||
it's closed.
|
it's closed.
|
||||||
|
|
||||||
LOW-LEVEL DATA EXCHANGE:
|
Low-level data exchange
|
||||||
|
-----------------------
|
||||||
|
|
||||||
The userspace must use PF_NFC sockets to perform any data communication with
|
The userspace must use PF_NFC sockets to perform any data communication with
|
||||||
targets. All NFC sockets use AF_NFC::
|
targets. All NFC sockets use AF_NFC::
|
||||||
|
|
|
||||||
|
|
@ -71,3 +71,43 @@ smcr_max_conns_per_lgr - INTEGER
|
||||||
acceptable value ranges from 16 to 255. Only for SMC-R v2.1 and later.
|
acceptable value ranges from 16 to 255. Only for SMC-R v2.1 and later.
|
||||||
|
|
||||||
Default: 255
|
Default: 255
|
||||||
|
|
||||||
|
smcr_max_send_wr - INTEGER
|
||||||
|
So-called work request buffers are SMCR link (and RDMA queue pair) level
|
||||||
|
resources necessary for performing RDMA operations. Since up to 255
|
||||||
|
connections can share a link group and thus also a link and the number
|
||||||
|
of the work request buffers is decided when the link is allocated,
|
||||||
|
depending on the workload it can be a bottleneck in a sense that threads
|
||||||
|
have to wait for work request buffers to become available. Before the
|
||||||
|
introduction of this control the maximal number of work request buffers
|
||||||
|
available on the send path used to be hard coded to 16. With this control
|
||||||
|
it becomes configurable. The acceptable range is between 2 and 2048.
|
||||||
|
|
||||||
|
Please be aware that all the buffers need to be allocated as a physically
|
||||||
|
continuous array in which each element is a single buffer and has the size
|
||||||
|
of SMC_WR_BUF_SIZE (48) bytes. If the allocation fails, we keep retrying
|
||||||
|
with half of the buffer count until it is ether successful or (unlikely)
|
||||||
|
we dip below the old hard coded value which is 16 where we give up much
|
||||||
|
like before having this control.
|
||||||
|
|
||||||
|
Default: 16
|
||||||
|
|
||||||
|
smcr_max_recv_wr - INTEGER
|
||||||
|
So-called work request buffers are SMCR link (and RDMA queue pair) level
|
||||||
|
resources necessary for performing RDMA operations. Since up to 255
|
||||||
|
connections can share a link group and thus also a link and the number
|
||||||
|
of the work request buffers is decided when the link is allocated,
|
||||||
|
depending on the workload it can be a bottleneck in a sense that threads
|
||||||
|
have to wait for work request buffers to become available. Before the
|
||||||
|
introduction of this control the maximal number of work request buffers
|
||||||
|
available on the receive path used to be hard coded to 16. With this control
|
||||||
|
it becomes configurable. The acceptable range is between 2 and 2048.
|
||||||
|
|
||||||
|
Please be aware that all the buffers need to be allocated as a physically
|
||||||
|
continuous array in which each element is a single buffer and has the size
|
||||||
|
of SMC_WR_BUF_SIZE (48) bytes. If the allocation fails, we keep retrying
|
||||||
|
with half of the buffer count until it is ether successful or (unlikely)
|
||||||
|
we dip below the old hard coded value which is 16 where we give up much
|
||||||
|
like before having this control.
|
||||||
|
|
||||||
|
Default: 48
|
||||||
|
|
|
||||||
|
|
@ -184,9 +184,11 @@ Protocol-related statistics can be requested in get commands by setting
|
||||||
the `ETHTOOL_FLAG_STATS` flag in `ETHTOOL_A_HEADER_FLAGS`. Currently
|
the `ETHTOOL_FLAG_STATS` flag in `ETHTOOL_A_HEADER_FLAGS`. Currently
|
||||||
statistics are supported in the following commands:
|
statistics are supported in the following commands:
|
||||||
|
|
||||||
- `ETHTOOL_MSG_PAUSE_GET`
|
|
||||||
- `ETHTOOL_MSG_FEC_GET`
|
- `ETHTOOL_MSG_FEC_GET`
|
||||||
|
- `ETHTOOL_MSG_LINKSTATE_GET`
|
||||||
- `ETHTOOL_MSG_MM_GET`
|
- `ETHTOOL_MSG_MM_GET`
|
||||||
|
- `ETHTOOL_MSG_PAUSE_GET`
|
||||||
|
- `ETHTOOL_MSG_TSINFO_GET`
|
||||||
|
|
||||||
debugfs
|
debugfs
|
||||||
-------
|
-------
|
||||||
|
|
|
||||||
|
|
@ -280,6 +280,26 @@ If the record decrypted turns out to had been padded or is not a data
|
||||||
record it will be decrypted again into a kernel buffer without zero copy.
|
record it will be decrypted again into a kernel buffer without zero copy.
|
||||||
Such events are counted in the ``TlsDecryptRetry`` statistic.
|
Such events are counted in the ``TlsDecryptRetry`` statistic.
|
||||||
|
|
||||||
|
TLS_TX_MAX_PAYLOAD_LEN
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Specifies the maximum size of the plaintext payload for transmitted TLS records.
|
||||||
|
|
||||||
|
When this option is set, the kernel enforces the specified limit on all outgoing
|
||||||
|
TLS records. No plaintext fragment will exceed this size. This option can be used
|
||||||
|
to implement the TLS Record Size Limit extension [1].
|
||||||
|
|
||||||
|
* For TLS 1.2, the value corresponds directly to the record size limit.
|
||||||
|
* For TLS 1.3, the value should be set to record_size_limit - 1, since
|
||||||
|
the record size limit includes one additional byte for the ContentType
|
||||||
|
field.
|
||||||
|
|
||||||
|
The valid range for this option is 64 to 16384 bytes for TLS 1.2, and 63 to
|
||||||
|
16384 bytes for TLS 1.3. The lower minimum for TLS 1.3 accounts for the
|
||||||
|
extra byte used by the ContentType field.
|
||||||
|
|
||||||
|
[1] https://datatracker.ietf.org/doc/html/rfc8449
|
||||||
|
|
||||||
Statistics
|
Statistics
|
||||||
==========
|
==========
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,13 @@
|
||||||
|
.. SPDX-License-Identifier: GPL-2.0
|
||||||
|
|
||||||
|
==============
|
||||||
|
XFRM Framework
|
||||||
|
==============
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 2
|
||||||
|
|
||||||
|
xfrm_device
|
||||||
|
xfrm_proc
|
||||||
|
xfrm_sync
|
||||||
|
xfrm_sysctl
|
||||||
|
|
@ -20,11 +20,15 @@ can radically increase throughput and decrease CPU utilization. The XFRM
|
||||||
Device interface allows NIC drivers to offer to the stack access to the
|
Device interface allows NIC drivers to offer to the stack access to the
|
||||||
hardware offload.
|
hardware offload.
|
||||||
|
|
||||||
Right now, there are two types of hardware offload that kernel supports.
|
Right now, there are two types of hardware offload that kernel supports:
|
||||||
|
|
||||||
* IPsec crypto offload:
|
* IPsec crypto offload:
|
||||||
|
|
||||||
* NIC performs encrypt/decrypt
|
* NIC performs encrypt/decrypt
|
||||||
* Kernel does everything else
|
* Kernel does everything else
|
||||||
|
|
||||||
* IPsec packet offload:
|
* IPsec packet offload:
|
||||||
|
|
||||||
* NIC performs encrypt/decrypt
|
* NIC performs encrypt/decrypt
|
||||||
* NIC does encapsulation
|
* NIC does encapsulation
|
||||||
* Kernel and NIC have SA and policy in-sync
|
* Kernel and NIC have SA and policy in-sync
|
||||||
|
|
@ -34,7 +38,7 @@ Right now, there are two types of hardware offload that kernel supports.
|
||||||
Userland access to the offload is typically through a system such as
|
Userland access to the offload is typically through a system such as
|
||||||
libreswan or KAME/raccoon, but the iproute2 'ip xfrm' command set can
|
libreswan or KAME/raccoon, but the iproute2 'ip xfrm' command set can
|
||||||
be handy when experimenting. An example command might look something
|
be handy when experimenting. An example command might look something
|
||||||
like this for crypto offload:
|
like this for crypto offload::
|
||||||
|
|
||||||
ip x s add proto esp dst 14.0.0.70 src 14.0.0.52 spi 0x07 mode transport \
|
ip x s add proto esp dst 14.0.0.70 src 14.0.0.52 spi 0x07 mode transport \
|
||||||
reqid 0x07 replay-window 32 \
|
reqid 0x07 replay-window 32 \
|
||||||
|
|
@ -42,7 +46,7 @@ like this for crypto offload:
|
||||||
sel src 14.0.0.52/24 dst 14.0.0.70/24 proto tcp \
|
sel src 14.0.0.52/24 dst 14.0.0.70/24 proto tcp \
|
||||||
offload dev eth4 dir in
|
offload dev eth4 dir in
|
||||||
|
|
||||||
and for packet offload
|
and for packet offload::
|
||||||
|
|
||||||
ip x s add proto esp dst 14.0.0.70 src 14.0.0.52 spi 0x07 mode transport \
|
ip x s add proto esp dst 14.0.0.70 src 14.0.0.52 spi 0x07 mode transport \
|
||||||
reqid 0x07 replay-window 32 \
|
reqid 0x07 replay-window 32 \
|
||||||
|
|
@ -153,26 +157,26 @@ the packet's skb. At this point the data should be decrypted but the
|
||||||
IPsec headers are still in the packet data; they are removed later up
|
IPsec headers are still in the packet data; they are removed later up
|
||||||
the stack in xfrm_input().
|
the stack in xfrm_input().
|
||||||
|
|
||||||
find and hold the SA that was used to the Rx skb::
|
1. Find and hold the SA that was used to the Rx skb::
|
||||||
|
|
||||||
get spi, protocol, and destination IP from packet headers
|
/* get spi, protocol, and destination IP from packet headers */
|
||||||
xs = find xs from (spi, protocol, dest_IP)
|
xs = find xs from (spi, protocol, dest_IP)
|
||||||
xfrm_state_hold(xs);
|
xfrm_state_hold(xs);
|
||||||
|
|
||||||
store the state information into the skb::
|
2. Store the state information into the skb::
|
||||||
|
|
||||||
sp = secpath_set(skb);
|
sp = secpath_set(skb);
|
||||||
if (!sp) return;
|
if (!sp) return;
|
||||||
sp->xvec[sp->len++] = xs;
|
sp->xvec[sp->len++] = xs;
|
||||||
sp->olen++;
|
sp->olen++;
|
||||||
|
|
||||||
indicate the success and/or error status of the offload::
|
3. Indicate the success and/or error status of the offload::
|
||||||
|
|
||||||
xo = xfrm_offload(skb);
|
xo = xfrm_offload(skb);
|
||||||
xo->flags = CRYPTO_DONE;
|
xo->flags = CRYPTO_DONE;
|
||||||
xo->status = crypto_status;
|
xo->status = crypto_status;
|
||||||
|
|
||||||
hand the packet to napi_gro_receive() as usual
|
4. Hand the packet to napi_gro_receive() as usual.
|
||||||
|
|
||||||
In ESN mode, xdo_dev_state_advance_esn() is called from
|
In ESN mode, xdo_dev_state_advance_esn() is called from
|
||||||
xfrm_replay_advance_esn() for RX, and xfrm_replay_overflow_offload_esn for TX.
|
xfrm_replay_advance_esn() for RX, and xfrm_replay_overflow_offload_esn for TX.
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
.. SPDX-License-Identifier: GPL-2.0
|
.. SPDX-License-Identifier: GPL-2.0
|
||||||
|
|
||||||
====
|
=========
|
||||||
XFRM
|
XFRM sync
|
||||||
====
|
=========
|
||||||
|
|
||||||
The sync patches work is based on initial patches from
|
The sync patches work is based on initial patches from
|
||||||
Krisztian <hidden@balabit.hu> and others and additional patches
|
Krisztian <hidden@balabit.hu> and others and additional patches
|
||||||
|
|
@ -36,7 +36,7 @@ is not driven by packet arrival.
|
||||||
- the replay sequence for both inbound and outbound
|
- the replay sequence for both inbound and outbound
|
||||||
|
|
||||||
1) Message Structure
|
1) Message Structure
|
||||||
----------------------
|
--------------------
|
||||||
|
|
||||||
nlmsghdr:aevent_id:optional-TLVs.
|
nlmsghdr:aevent_id:optional-TLVs.
|
||||||
|
|
||||||
|
|
@ -83,31 +83,31 @@ when going from kernel to user space)
|
||||||
A program needs to subscribe to multicast group XFRMNLGRP_AEVENTS
|
A program needs to subscribe to multicast group XFRMNLGRP_AEVENTS
|
||||||
to get notified of these events.
|
to get notified of these events.
|
||||||
|
|
||||||
2) TLVS reflect the different parameters:
|
2) TLVS reflect the different parameters
|
||||||
-----------------------------------------
|
----------------------------------------
|
||||||
|
|
||||||
a) byte value (XFRMA_LTIME_VAL)
|
a) byte value (XFRMA_LTIME_VAL)
|
||||||
|
|
||||||
This TLV carries the running/current counter for byte lifetime since
|
This TLV carries the running/current counter for byte lifetime since
|
||||||
last event.
|
last event.
|
||||||
|
|
||||||
b)replay value (XFRMA_REPLAY_VAL)
|
b) replay value (XFRMA_REPLAY_VAL)
|
||||||
|
|
||||||
This TLV carries the running/current counter for replay sequence since
|
This TLV carries the running/current counter for replay sequence since
|
||||||
last event.
|
last event.
|
||||||
|
|
||||||
c)replay threshold (XFRMA_REPLAY_THRESH)
|
c) replay threshold (XFRMA_REPLAY_THRESH)
|
||||||
|
|
||||||
This TLV carries the threshold being used by the kernel to trigger events
|
This TLV carries the threshold being used by the kernel to trigger events
|
||||||
when the replay sequence is exceeded.
|
when the replay sequence is exceeded.
|
||||||
|
|
||||||
d) expiry timer (XFRMA_ETIMER_THRESH)
|
d) expiry timer (XFRMA_ETIMER_THRESH)
|
||||||
|
|
||||||
This is a timer value in milliseconds which is used as the nagle
|
This is a timer value in milliseconds which is used as the nagle
|
||||||
value to rate limit the events.
|
value to rate limit the events.
|
||||||
|
|
||||||
3) Default configurations for the parameters:
|
3) Default configurations for the parameters
|
||||||
---------------------------------------------
|
--------------------------------------------
|
||||||
|
|
||||||
By default these events should be turned off unless there is
|
By default these events should be turned off unless there is
|
||||||
at least one listener registered to listen to the multicast
|
at least one listener registered to listen to the multicast
|
||||||
|
|
@ -121,12 +121,14 @@ in case they are not specified.
|
||||||
the two sysctls/proc entries are:
|
the two sysctls/proc entries are:
|
||||||
|
|
||||||
a) /proc/sys/net/core/sysctl_xfrm_aevent_etime
|
a) /proc/sys/net/core/sysctl_xfrm_aevent_etime
|
||||||
used to provide default values for the XFRMA_ETIMER_THRESH in incremental
|
|
||||||
units of time of 100ms. The default is 10 (1 second)
|
Used to provide default values for the XFRMA_ETIMER_THRESH in incremental
|
||||||
|
units of time of 100ms. The default is 10 (1 second)
|
||||||
|
|
||||||
b) /proc/sys/net/core/sysctl_xfrm_aevent_rseqth
|
b) /proc/sys/net/core/sysctl_xfrm_aevent_rseqth
|
||||||
used to provide default values for XFRMA_REPLAY_THRESH parameter
|
|
||||||
in incremental packet count. The default is two packets.
|
Used to provide default values for XFRMA_REPLAY_THRESH parameter
|
||||||
|
in incremental packet count. The default is two packets.
|
||||||
|
|
||||||
4) Message types
|
4) Message types
|
||||||
----------------
|
----------------
|
||||||
|
|
@ -134,50 +136,51 @@ in incremental packet count. The default is two packets.
|
||||||
a) XFRM_MSG_GETAE issued by user-->kernel.
|
a) XFRM_MSG_GETAE issued by user-->kernel.
|
||||||
XFRM_MSG_GETAE does not carry any TLVs.
|
XFRM_MSG_GETAE does not carry any TLVs.
|
||||||
|
|
||||||
The response is a XFRM_MSG_NEWAE which is formatted based on what
|
The response is a XFRM_MSG_NEWAE which is formatted based on what
|
||||||
XFRM_MSG_GETAE queried for.
|
XFRM_MSG_GETAE queried for.
|
||||||
|
|
||||||
The response will always have XFRMA_LTIME_VAL and XFRMA_REPLAY_VAL TLVs.
|
The response will always have XFRMA_LTIME_VAL and XFRMA_REPLAY_VAL TLVs.
|
||||||
* if XFRM_AE_RTHR flag is set, then XFRMA_REPLAY_THRESH is also retrieved
|
|
||||||
* if XFRM_AE_ETHR flag is set, then XFRMA_ETIMER_THRESH is also retrieved
|
* if XFRM_AE_RTHR flag is set, then XFRMA_REPLAY_THRESH is also retrieved
|
||||||
|
* if XFRM_AE_ETHR flag is set, then XFRMA_ETIMER_THRESH is also retrieved
|
||||||
|
|
||||||
b) XFRM_MSG_NEWAE is issued by either user space to configure
|
b) XFRM_MSG_NEWAE is issued by either user space to configure
|
||||||
or kernel to announce events or respond to a XFRM_MSG_GETAE.
|
or kernel to announce events or respond to a XFRM_MSG_GETAE.
|
||||||
|
|
||||||
i) user --> kernel to configure a specific SA.
|
i) user --> kernel to configure a specific SA.
|
||||||
|
|
||||||
any of the values or threshold parameters can be updated by passing the
|
any of the values or threshold parameters can be updated by passing the
|
||||||
appropriate TLV.
|
appropriate TLV.
|
||||||
|
|
||||||
A response is issued back to the sender in user space to indicate success
|
A response is issued back to the sender in user space to indicate success
|
||||||
or failure.
|
or failure.
|
||||||
|
|
||||||
In the case of success, additionally an event with
|
In the case of success, additionally an event with
|
||||||
XFRM_MSG_NEWAE is also issued to any listeners as described in iii).
|
XFRM_MSG_NEWAE is also issued to any listeners as described in iii).
|
||||||
|
|
||||||
ii) kernel->user direction as a response to XFRM_MSG_GETAE
|
ii) kernel->user direction as a response to XFRM_MSG_GETAE
|
||||||
|
|
||||||
The response will always have XFRMA_LTIME_VAL and XFRMA_REPLAY_VAL TLVs.
|
The response will always have XFRMA_LTIME_VAL and XFRMA_REPLAY_VAL TLVs.
|
||||||
|
|
||||||
The threshold TLVs will be included if explicitly requested in
|
The threshold TLVs will be included if explicitly requested in
|
||||||
the XFRM_MSG_GETAE message.
|
the XFRM_MSG_GETAE message.
|
||||||
|
|
||||||
iii) kernel->user to report as event if someone sets any values or
|
iii) kernel->user to report as event if someone sets any values or
|
||||||
thresholds for an SA using XFRM_MSG_NEWAE (as described in #i above).
|
thresholds for an SA using XFRM_MSG_NEWAE (as described in #i above).
|
||||||
In such a case XFRM_AE_CU flag is set to inform the user that
|
In such a case XFRM_AE_CU flag is set to inform the user that
|
||||||
the change happened as a result of an update.
|
the change happened as a result of an update.
|
||||||
The message will always have XFRMA_LTIME_VAL and XFRMA_REPLAY_VAL TLVs.
|
The message will always have XFRMA_LTIME_VAL and XFRMA_REPLAY_VAL TLVs.
|
||||||
|
|
||||||
iv) kernel->user to report event when replay threshold or a timeout
|
iv) kernel->user to report event when replay threshold or a timeout
|
||||||
is exceeded.
|
is exceeded.
|
||||||
|
|
||||||
In such a case either XFRM_AE_CR (replay exceeded) or XFRM_AE_CE (timeout
|
In such a case either XFRM_AE_CR (replay exceeded) or XFRM_AE_CE (timeout
|
||||||
happened) is set to inform the user what happened.
|
happened) is set to inform the user what happened.
|
||||||
Note the two flags are mutually exclusive.
|
Note the two flags are mutually exclusive.
|
||||||
The message will always have XFRMA_LTIME_VAL and XFRMA_REPLAY_VAL TLVs.
|
The message will always have XFRMA_LTIME_VAL and XFRMA_REPLAY_VAL TLVs.
|
||||||
|
|
||||||
Exceptions to threshold settings
|
5) Exceptions to threshold settings
|
||||||
--------------------------------
|
-----------------------------------
|
||||||
|
|
||||||
If you have an SA that is getting hit by traffic in bursts such that
|
If you have an SA that is getting hit by traffic in bursts such that
|
||||||
there is a period where the timer threshold expires with no packets
|
there is a period where the timer threshold expires with no packets
|
||||||
|
|
@ -4,8 +4,8 @@
|
||||||
XFRM Syscall
|
XFRM Syscall
|
||||||
============
|
============
|
||||||
|
|
||||||
/proc/sys/net/core/xfrm_* Variables:
|
/proc/sys/net/core/xfrm_* Variables
|
||||||
====================================
|
===================================
|
||||||
|
|
||||||
xfrm_acq_expires - INTEGER
|
xfrm_acq_expires - INTEGER
|
||||||
default 30 - hard timeout in seconds for acquire requests
|
default 30 - hard timeout in seconds for acquire requests
|
||||||
32
MAINTAINERS
32
MAINTAINERS
|
|
@ -3301,6 +3301,7 @@ F: drivers/*/*/*rockchip*
|
||||||
F: drivers/*/*rockchip*
|
F: drivers/*/*rockchip*
|
||||||
F: drivers/clk/rockchip/
|
F: drivers/clk/rockchip/
|
||||||
F: drivers/i2c/busses/i2c-rk3x.c
|
F: drivers/i2c/busses/i2c-rk3x.c
|
||||||
|
F: drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c
|
||||||
F: sound/soc/rockchip/
|
F: sound/soc/rockchip/
|
||||||
N: rockchip
|
N: rockchip
|
||||||
|
|
||||||
|
|
@ -5132,7 +5133,6 @@ F: Documentation/devicetree/bindings/net/brcm,unimac-mdio.yaml
|
||||||
F: drivers/net/ethernet/broadcom/genet/
|
F: drivers/net/ethernet/broadcom/genet/
|
||||||
F: drivers/net/ethernet/broadcom/unimac.h
|
F: drivers/net/ethernet/broadcom/unimac.h
|
||||||
F: drivers/net/mdio/mdio-bcm-unimac.c
|
F: drivers/net/mdio/mdio-bcm-unimac.c
|
||||||
F: include/linux/platform_data/bcmgenet.h
|
|
||||||
F: include/linux/platform_data/mdio-bcm-unimac.h
|
F: include/linux/platform_data/mdio-bcm-unimac.h
|
||||||
|
|
||||||
BROADCOM IPROC ARM ARCHITECTURE
|
BROADCOM IPROC ARM ARCHITECTURE
|
||||||
|
|
@ -14054,7 +14054,7 @@ F: tools/testing/selftests/landlock/
|
||||||
K: landlock
|
K: landlock
|
||||||
K: LANDLOCK
|
K: LANDLOCK
|
||||||
|
|
||||||
LANTIQ / INTEL Ethernet drivers
|
LANTIQ / MAXLINEAR / INTEL Ethernet DSA drivers
|
||||||
M: Hauke Mehrtens <hauke@hauke-m.de>
|
M: Hauke Mehrtens <hauke@hauke-m.de>
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
|
@ -14062,6 +14062,7 @@ F: Documentation/devicetree/bindings/net/dsa/lantiq,gswip.yaml
|
||||||
F: drivers/net/dsa/lantiq/*
|
F: drivers/net/dsa/lantiq/*
|
||||||
F: drivers/net/ethernet/lantiq_xrx200.c
|
F: drivers/net/ethernet/lantiq_xrx200.c
|
||||||
F: net/dsa/tag_gswip.c
|
F: net/dsa/tag_gswip.c
|
||||||
|
F: net/dsa/tag_mxl-gsw1xx.c
|
||||||
|
|
||||||
LANTIQ MIPS ARCHITECTURE
|
LANTIQ MIPS ARCHITECTURE
|
||||||
M: John Crispin <john@phrozen.org>
|
M: John Crispin <john@phrozen.org>
|
||||||
|
|
@ -15413,14 +15414,12 @@ S: Supported
|
||||||
F: drivers/net/phy/mxl-86110.c
|
F: drivers/net/phy/mxl-86110.c
|
||||||
F: drivers/net/phy/mxl-gpy.c
|
F: drivers/net/phy/mxl-gpy.c
|
||||||
|
|
||||||
MCAN MMIO DEVICE DRIVER
|
MCAN DEVICE DRIVER
|
||||||
M: Chandrasekar Ramakrishnan <rcsekar@samsung.com>
|
M: Markus Schneider-Pargmann <msp@baylibre.com>
|
||||||
L: linux-can@vger.kernel.org
|
L: linux-can@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: Documentation/devicetree/bindings/net/can/bosch,m_can.yaml
|
F: Documentation/devicetree/bindings/net/can/bosch,m_can.yaml
|
||||||
F: drivers/net/can/m_can/m_can.c
|
F: drivers/net/can/m_can/
|
||||||
F: drivers/net/can/m_can/m_can.h
|
|
||||||
F: drivers/net/can/m_can/m_can_platform.c
|
|
||||||
|
|
||||||
MCBA MICROCHIP CAN BUS ANALYZER TOOL DRIVER
|
MCBA MICROCHIP CAN BUS ANALYZER TOOL DRIVER
|
||||||
R: Yasushi SHOJI <yashi@spacecubics.com>
|
R: Yasushi SHOJI <yashi@spacecubics.com>
|
||||||
|
|
@ -17456,6 +17455,14 @@ S: Maintained
|
||||||
F: Documentation/devicetree/bindings/net/motorcomm,yt8xxx.yaml
|
F: Documentation/devicetree/bindings/net/motorcomm,yt8xxx.yaml
|
||||||
F: drivers/net/phy/motorcomm.c
|
F: drivers/net/phy/motorcomm.c
|
||||||
|
|
||||||
|
MOTORCOMM YT921X ETHERNET SWITCH DRIVER
|
||||||
|
M: David Yang <mmyangfl@gmail.com>
|
||||||
|
L: netdev@vger.kernel.org
|
||||||
|
S: Maintained
|
||||||
|
F: Documentation/devicetree/bindings/net/dsa/motorcomm,yt921x.yaml
|
||||||
|
F: drivers/net/dsa/yt921x.*
|
||||||
|
F: net/dsa/tag_yt921x.c
|
||||||
|
|
||||||
MOXA SMARTIO/INDUSTIO/INTELLIO SERIAL CARD
|
MOXA SMARTIO/INDUSTIO/INTELLIO SERIAL CARD
|
||||||
M: Jiri Slaby <jirislaby@kernel.org>
|
M: Jiri Slaby <jirislaby@kernel.org>
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
|
@ -17621,6 +17628,14 @@ T: git git://linuxtv.org/media.git
|
||||||
F: Documentation/devicetree/bindings/media/i2c/aptina,mt9v111.yaml
|
F: Documentation/devicetree/bindings/media/i2c/aptina,mt9v111.yaml
|
||||||
F: drivers/media/i2c/mt9v111.c
|
F: drivers/media/i2c/mt9v111.c
|
||||||
|
|
||||||
|
MUCSE ETHERNET DRIVER
|
||||||
|
M: Yibo Dong <dong100@mucse.com>
|
||||||
|
L: netdev@vger.kernel.org
|
||||||
|
S: Maintained
|
||||||
|
W: https://www.mucse.com/en/
|
||||||
|
F: Documentation/networking/device_drivers/ethernet/mucse/
|
||||||
|
F: drivers/net/ethernet/mucse/
|
||||||
|
|
||||||
MULTIFUNCTION DEVICES (MFD)
|
MULTIFUNCTION DEVICES (MFD)
|
||||||
M: Lee Jones <lee@kernel.org>
|
M: Lee Jones <lee@kernel.org>
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
|
@ -18062,6 +18077,7 @@ L: netdev@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/klassert/ipsec.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/klassert/ipsec.git
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/klassert/ipsec-next.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/klassert/ipsec-next.git
|
||||||
|
F: Documentation/networking/xfrm/
|
||||||
F: include/net/xfrm.h
|
F: include/net/xfrm.h
|
||||||
F: include/uapi/linux/xfrm.h
|
F: include/uapi/linux/xfrm.h
|
||||||
F: net/ipv4/ah4.c
|
F: net/ipv4/ah4.c
|
||||||
|
|
@ -21067,6 +21083,7 @@ F: Documentation/devicetree/bindings/net/qcom,bam-dmux.yaml
|
||||||
F: drivers/net/wwan/qcom_bam_dmux.c
|
F: drivers/net/wwan/qcom_bam_dmux.c
|
||||||
|
|
||||||
QUALCOMM BLUETOOTH DRIVER
|
QUALCOMM BLUETOOTH DRIVER
|
||||||
|
M: Bartosz Golaszewski <brgl@bgdev.pl>
|
||||||
L: linux-arm-msm@vger.kernel.org
|
L: linux-arm-msm@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/bluetooth/btqca.[ch]
|
F: drivers/bluetooth/btqca.[ch]
|
||||||
|
|
@ -27684,6 +27701,7 @@ M: Jason A. Donenfeld <Jason@zx2c4.com>
|
||||||
L: wireguard@lists.zx2c4.com
|
L: wireguard@lists.zx2c4.com
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
F: Documentation/netlink/specs/wireguard.yaml
|
||||||
F: drivers/net/wireguard/
|
F: drivers/net/wireguard/
|
||||||
F: tools/testing/selftests/wireguard/
|
F: tools/testing/selftests/wireguard/
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,6 @@
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/phy.h>
|
#include <linux/phy.h>
|
||||||
#include <linux/phy_fixed.h>
|
|
||||||
#include <asm/machdep.h>
|
#include <asm/machdep.h>
|
||||||
#include <asm/coldfire.h>
|
#include <asm/coldfire.h>
|
||||||
#include <asm/mcfsim.h>
|
#include <asm/mcfsim.h>
|
||||||
|
|
@ -103,23 +102,9 @@ void __init config_BSP(char *commandp, int size)
|
||||||
|
|
||||||
/***************************************************************************/
|
/***************************************************************************/
|
||||||
|
|
||||||
/*
|
|
||||||
* Some 5272 based boards have the FEC ethernet directly connected to
|
|
||||||
* an ethernet switch. In this case we need to use the fixed phy type,
|
|
||||||
* and we need to declare it early in boot.
|
|
||||||
*/
|
|
||||||
static const struct fixed_phy_status nettel_fixed_phy_status __initconst = {
|
|
||||||
.link = 1,
|
|
||||||
.speed = 100,
|
|
||||||
.duplex = 0,
|
|
||||||
};
|
|
||||||
|
|
||||||
/***************************************************************************/
|
|
||||||
|
|
||||||
static int __init init_BSP(void)
|
static int __init init_BSP(void)
|
||||||
{
|
{
|
||||||
m5272_uarts_init();
|
m5272_uarts_init();
|
||||||
fixed_phy_add(&nettel_fixed_phy_status);
|
|
||||||
clkdev_add_table(m5272_clk_lookup, ARRAY_SIZE(m5272_clk_lookup));
|
clkdev_add_table(m5272_clk_lookup, ARRAY_SIZE(m5272_clk_lookup));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -256,12 +256,6 @@ static int __init bcm47xx_cpu_fixes(void)
|
||||||
}
|
}
|
||||||
arch_initcall(bcm47xx_cpu_fixes);
|
arch_initcall(bcm47xx_cpu_fixes);
|
||||||
|
|
||||||
static const struct fixed_phy_status bcm47xx_fixed_phy_status __initconst = {
|
|
||||||
.link = 1,
|
|
||||||
.speed = SPEED_100,
|
|
||||||
.duplex = DUPLEX_FULL,
|
|
||||||
};
|
|
||||||
|
|
||||||
static int __init bcm47xx_register_bus_complete(void)
|
static int __init bcm47xx_register_bus_complete(void)
|
||||||
{
|
{
|
||||||
switch (bcm47xx_bus_type) {
|
switch (bcm47xx_bus_type) {
|
||||||
|
|
@ -282,7 +276,6 @@ static int __init bcm47xx_register_bus_complete(void)
|
||||||
bcm47xx_leds_register();
|
bcm47xx_leds_register();
|
||||||
bcm47xx_workarounds();
|
bcm47xx_workarounds();
|
||||||
|
|
||||||
fixed_phy_add(&bcm47xx_fixed_phy_status);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
device_initcall(bcm47xx_register_bus_complete);
|
device_initcall(bcm47xx_register_bus_complete);
|
||||||
|
|
|
||||||
|
|
@ -145,7 +145,7 @@ void af_alg_release_parent(struct sock *sk)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(af_alg_release_parent);
|
EXPORT_SYMBOL_GPL(af_alg_release_parent);
|
||||||
|
|
||||||
static int alg_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
|
static int alg_bind(struct socket *sock, struct sockaddr_unsized *uaddr, int addr_len)
|
||||||
{
|
{
|
||||||
const u32 allowed = CRYPTO_ALG_KERN_DRIVER_ONLY;
|
const u32 allowed = CRYPTO_ALG_KERN_DRIVER_ONLY;
|
||||||
struct sock *sk = sock->sk;
|
struct sock *sk = sock->sk;
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
/* Do not edit directly, auto-generated from: */
|
/* Do not edit directly, auto-generated from: */
|
||||||
/* Documentation/netlink/specs/binder.yaml */
|
/* Documentation/netlink/specs/binder.yaml */
|
||||||
/* YNL-GEN kernel source */
|
/* YNL-GEN kernel source */
|
||||||
|
/* To regenerate run: tools/net/ynl/ynl-regen.sh */
|
||||||
|
|
||||||
#include <net/netlink.h>
|
#include <net/netlink.h>
|
||||||
#include <net/genetlink.h>
|
#include <net/genetlink.h>
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
/* Do not edit directly, auto-generated from: */
|
/* Do not edit directly, auto-generated from: */
|
||||||
/* Documentation/netlink/specs/binder.yaml */
|
/* Documentation/netlink/specs/binder.yaml */
|
||||||
/* YNL-GEN kernel header */
|
/* YNL-GEN kernel header */
|
||||||
|
/* To regenerate run: tools/net/ynl/ynl-regen.sh */
|
||||||
|
|
||||||
#ifndef _LINUX_BINDER_GEN_H
|
#ifndef _LINUX_BINDER_GEN_H
|
||||||
#define _LINUX_BINDER_GEN_H
|
#define _LINUX_BINDER_GEN_H
|
||||||
|
|
|
||||||
|
|
@ -450,7 +450,7 @@ static struct socket *drbd_try_connect(struct drbd_connection *connection)
|
||||||
* a free one dynamically.
|
* a free one dynamically.
|
||||||
*/
|
*/
|
||||||
what = "bind before connect";
|
what = "bind before connect";
|
||||||
err = sock->ops->bind(sock, (struct sockaddr *) &src_in6, my_addr_len);
|
err = sock->ops->bind(sock, (struct sockaddr_unsized *) &src_in6, my_addr_len);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
|
|
@ -458,7 +458,7 @@ static struct socket *drbd_try_connect(struct drbd_connection *connection)
|
||||||
* stay C_WF_CONNECTION, don't go Disconnecting! */
|
* stay C_WF_CONNECTION, don't go Disconnecting! */
|
||||||
disconnect_on_error = 0;
|
disconnect_on_error = 0;
|
||||||
what = "connect";
|
what = "connect";
|
||||||
err = sock->ops->connect(sock, (struct sockaddr *) &peer_in6, peer_addr_len, 0);
|
err = sock->ops->connect(sock, (struct sockaddr_unsized *) &peer_in6, peer_addr_len, 0);
|
||||||
|
|
||||||
out:
|
out:
|
||||||
if (err < 0) {
|
if (err < 0) {
|
||||||
|
|
@ -537,7 +537,7 @@ static int prepare_listen_socket(struct drbd_connection *connection, struct acce
|
||||||
drbd_setbufsize(s_listen, sndbuf_size, rcvbuf_size);
|
drbd_setbufsize(s_listen, sndbuf_size, rcvbuf_size);
|
||||||
|
|
||||||
what = "bind before listen";
|
what = "bind before listen";
|
||||||
err = s_listen->ops->bind(s_listen, (struct sockaddr *)&my_addr, my_addr_len);
|
err = s_listen->ops->bind(s_listen, (struct sockaddr_unsized *)&my_addr, my_addr_len);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -188,6 +188,7 @@ config BT_HCIUART_3WIRE
|
||||||
bool "Three-wire UART (H5) protocol support"
|
bool "Three-wire UART (H5) protocol support"
|
||||||
depends on BT_HCIUART
|
depends on BT_HCIUART
|
||||||
depends on BT_HCIUART_SERDEV
|
depends on BT_HCIUART_SERDEV
|
||||||
|
select CRC_CCITT
|
||||||
help
|
help
|
||||||
The HCI Three-wire UART Transport Layer makes it possible to
|
The HCI Three-wire UART Transport Layer makes it possible to
|
||||||
user the Bluetooth HCI over a serial port interface. The HCI
|
user the Bluetooth HCI over a serial port interface. The HCI
|
||||||
|
|
|
||||||
|
|
@ -642,7 +642,9 @@ int btbcm_initialize(struct hci_dev *hdev, bool *fw_load_done, bool use_autobaud
|
||||||
snprintf(postfix, sizeof(postfix), "-%4.4x-%4.4x", vid, pid);
|
snprintf(postfix, sizeof(postfix), "-%4.4x-%4.4x", vid, pid);
|
||||||
}
|
}
|
||||||
|
|
||||||
fw_name = kmalloc(BCM_FW_NAME_COUNT_MAX * BCM_FW_NAME_LEN, GFP_KERNEL);
|
fw_name = kmalloc_array(BCM_FW_NAME_COUNT_MAX,
|
||||||
|
sizeof(*fw_name),
|
||||||
|
GFP_KERNEL);
|
||||||
if (!fw_name)
|
if (!fw_name)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,7 @@
|
||||||
|
|
||||||
#include <net/bluetooth/bluetooth.h>
|
#include <net/bluetooth/bluetooth.h>
|
||||||
#include <net/bluetooth/hci_core.h>
|
#include <net/bluetooth/hci_core.h>
|
||||||
|
#include <net/bluetooth/hci_drv.h>
|
||||||
|
|
||||||
#include "btintel.h"
|
#include "btintel.h"
|
||||||
#include "btintel_pcie.h"
|
#include "btintel_pcie.h"
|
||||||
|
|
@ -825,6 +826,11 @@ static inline bool btintel_pcie_in_d0(struct btintel_pcie_data *data)
|
||||||
return !(data->boot_stage_cache & BTINTEL_PCIE_CSR_BOOT_STAGE_D3_STATE_READY);
|
return !(data->boot_stage_cache & BTINTEL_PCIE_CSR_BOOT_STAGE_D3_STATE_READY);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline bool btintel_pcie_in_device_halt(struct btintel_pcie_data *data)
|
||||||
|
{
|
||||||
|
return data->boot_stage_cache & BTINTEL_PCIE_CSR_BOOT_STAGE_DEVICE_HALTED;
|
||||||
|
}
|
||||||
|
|
||||||
static void btintel_pcie_wr_sleep_cntrl(struct btintel_pcie_data *data,
|
static void btintel_pcie_wr_sleep_cntrl(struct btintel_pcie_data *data,
|
||||||
u32 dxstate)
|
u32 dxstate)
|
||||||
{
|
{
|
||||||
|
|
@ -2355,6 +2361,63 @@ static bool btintel_pcie_wakeup(struct hci_dev *hdev)
|
||||||
return device_may_wakeup(&data->pdev->dev);
|
return device_may_wakeup(&data->pdev->dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const struct {
|
||||||
|
u16 opcode;
|
||||||
|
const char *desc;
|
||||||
|
} btintel_pcie_hci_drv_supported_commands[] = {
|
||||||
|
/* Common commands */
|
||||||
|
{ HCI_DRV_OP_READ_INFO, "Read Info" },
|
||||||
|
};
|
||||||
|
|
||||||
|
static int btintel_pcie_hci_drv_read_info(struct hci_dev *hdev, void *data,
|
||||||
|
u16 data_len)
|
||||||
|
{
|
||||||
|
struct hci_drv_rp_read_info *rp;
|
||||||
|
size_t rp_size;
|
||||||
|
int err, i;
|
||||||
|
u16 opcode, num_supported_commands =
|
||||||
|
ARRAY_SIZE(btintel_pcie_hci_drv_supported_commands);
|
||||||
|
|
||||||
|
rp_size = sizeof(*rp) + num_supported_commands * 2;
|
||||||
|
|
||||||
|
rp = kmalloc(rp_size, GFP_KERNEL);
|
||||||
|
if (!rp)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
strscpy_pad(rp->driver_name, KBUILD_MODNAME);
|
||||||
|
|
||||||
|
rp->num_supported_commands = cpu_to_le16(num_supported_commands);
|
||||||
|
for (i = 0; i < num_supported_commands; i++) {
|
||||||
|
opcode = btintel_pcie_hci_drv_supported_commands[i].opcode;
|
||||||
|
bt_dev_dbg(hdev,
|
||||||
|
"Supported HCI Drv command (0x%02x|0x%04x): %s",
|
||||||
|
hci_opcode_ogf(opcode),
|
||||||
|
hci_opcode_ocf(opcode),
|
||||||
|
btintel_pcie_hci_drv_supported_commands[i].desc);
|
||||||
|
rp->supported_commands[i] = cpu_to_le16(opcode);
|
||||||
|
}
|
||||||
|
|
||||||
|
err = hci_drv_cmd_complete(hdev, HCI_DRV_OP_READ_INFO,
|
||||||
|
HCI_DRV_STATUS_SUCCESS,
|
||||||
|
rp, rp_size);
|
||||||
|
|
||||||
|
kfree(rp);
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const struct hci_drv_handler btintel_pcie_hci_drv_common_handlers[] = {
|
||||||
|
{ btintel_pcie_hci_drv_read_info, HCI_DRV_READ_INFO_SIZE },
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct hci_drv_handler btintel_pcie_hci_drv_specific_handlers[] = {};
|
||||||
|
|
||||||
|
static struct hci_drv btintel_pcie_hci_drv = {
|
||||||
|
.common_handler_count = ARRAY_SIZE(btintel_pcie_hci_drv_common_handlers),
|
||||||
|
.common_handlers = btintel_pcie_hci_drv_common_handlers,
|
||||||
|
.specific_handler_count = ARRAY_SIZE(btintel_pcie_hci_drv_specific_handlers),
|
||||||
|
.specific_handlers = btintel_pcie_hci_drv_specific_handlers,
|
||||||
|
};
|
||||||
|
|
||||||
static int btintel_pcie_setup_hdev(struct btintel_pcie_data *data)
|
static int btintel_pcie_setup_hdev(struct btintel_pcie_data *data)
|
||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
|
|
@ -2381,6 +2444,7 @@ static int btintel_pcie_setup_hdev(struct btintel_pcie_data *data)
|
||||||
hdev->set_bdaddr = btintel_set_bdaddr;
|
hdev->set_bdaddr = btintel_set_bdaddr;
|
||||||
hdev->reset = btintel_pcie_reset;
|
hdev->reset = btintel_pcie_reset;
|
||||||
hdev->wakeup = btintel_pcie_wakeup;
|
hdev->wakeup = btintel_pcie_wakeup;
|
||||||
|
hdev->hci_drv = &btintel_pcie_hci_drv;
|
||||||
|
|
||||||
err = hci_register_dev(hdev);
|
err = hci_register_dev(hdev);
|
||||||
if (err < 0) {
|
if (err < 0) {
|
||||||
|
|
@ -2519,6 +2583,48 @@ static void btintel_pcie_coredump(struct device *dev)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static int btintel_pcie_set_dxstate(struct btintel_pcie_data *data, u32 dxstate)
|
||||||
|
{
|
||||||
|
int retry = 0, status;
|
||||||
|
u32 dx_intr_timeout_ms = 200;
|
||||||
|
|
||||||
|
do {
|
||||||
|
data->gp0_received = false;
|
||||||
|
|
||||||
|
btintel_pcie_wr_sleep_cntrl(data, dxstate);
|
||||||
|
|
||||||
|
status = wait_event_timeout(data->gp0_wait_q, data->gp0_received,
|
||||||
|
msecs_to_jiffies(dx_intr_timeout_ms));
|
||||||
|
|
||||||
|
if (status)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
bt_dev_warn(data->hdev,
|
||||||
|
"Timeout (%u ms) on alive interrupt for D%d entry, retry count %d",
|
||||||
|
dx_intr_timeout_ms, dxstate, retry);
|
||||||
|
|
||||||
|
/* clear gp0 cause */
|
||||||
|
btintel_pcie_clr_reg_bits(data,
|
||||||
|
BTINTEL_PCIE_CSR_MSIX_HW_INT_CAUSES,
|
||||||
|
BTINTEL_PCIE_MSIX_HW_INT_CAUSES_GP0);
|
||||||
|
|
||||||
|
/* A hardware bug may cause the alive interrupt to be missed.
|
||||||
|
* Check if the controller reached the expected state and retry
|
||||||
|
* the operation only if it hasn't.
|
||||||
|
*/
|
||||||
|
if (dxstate == BTINTEL_PCIE_STATE_D0) {
|
||||||
|
if (btintel_pcie_in_d0(data))
|
||||||
|
return 0;
|
||||||
|
} else {
|
||||||
|
if (btintel_pcie_in_d3(data))
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
} while (++retry < BTINTEL_PCIE_DX_TRANSITION_MAX_RETRIES);
|
||||||
|
|
||||||
|
return -EBUSY;
|
||||||
|
}
|
||||||
|
|
||||||
static int btintel_pcie_suspend_late(struct device *dev, pm_message_t mesg)
|
static int btintel_pcie_suspend_late(struct device *dev, pm_message_t mesg)
|
||||||
{
|
{
|
||||||
struct pci_dev *pdev = to_pci_dev(dev);
|
struct pci_dev *pdev = to_pci_dev(dev);
|
||||||
|
|
@ -2532,26 +2638,20 @@ static int btintel_pcie_suspend_late(struct device *dev, pm_message_t mesg)
|
||||||
dxstate = (mesg.event == PM_EVENT_SUSPEND ?
|
dxstate = (mesg.event == PM_EVENT_SUSPEND ?
|
||||||
BTINTEL_PCIE_STATE_D3_HOT : BTINTEL_PCIE_STATE_D3_COLD);
|
BTINTEL_PCIE_STATE_D3_HOT : BTINTEL_PCIE_STATE_D3_COLD);
|
||||||
|
|
||||||
data->gp0_received = false;
|
data->pm_sx_event = mesg.event;
|
||||||
|
|
||||||
start = ktime_get();
|
start = ktime_get();
|
||||||
|
|
||||||
/* Refer: 6.4.11.7 -> Platform power management */
|
/* Refer: 6.4.11.7 -> Platform power management */
|
||||||
btintel_pcie_wr_sleep_cntrl(data, dxstate);
|
err = btintel_pcie_set_dxstate(data, dxstate);
|
||||||
err = wait_event_timeout(data->gp0_wait_q, data->gp0_received,
|
|
||||||
msecs_to_jiffies(BTINTEL_DEFAULT_INTR_TIMEOUT_MS));
|
if (err)
|
||||||
if (err == 0) {
|
return err;
|
||||||
bt_dev_err(data->hdev,
|
|
||||||
"Timeout (%u ms) on alive interrupt for D3 entry",
|
|
||||||
BTINTEL_DEFAULT_INTR_TIMEOUT_MS);
|
|
||||||
return -EBUSY;
|
|
||||||
}
|
|
||||||
|
|
||||||
bt_dev_dbg(data->hdev,
|
bt_dev_dbg(data->hdev,
|
||||||
"device entered into d3 state from d0 in %lld us",
|
"device entered into d3 state from d0 in %lld us",
|
||||||
ktime_to_us(ktime_get() - start));
|
ktime_to_us(ktime_get() - start));
|
||||||
|
return err;
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int btintel_pcie_suspend(struct device *dev)
|
static int btintel_pcie_suspend(struct device *dev)
|
||||||
|
|
@ -2581,21 +2681,50 @@ static int btintel_pcie_resume(struct device *dev)
|
||||||
|
|
||||||
start = ktime_get();
|
start = ktime_get();
|
||||||
|
|
||||||
/* Refer: 6.4.11.7 -> Platform power management */
|
/* When the system enters S4 (hibernate) mode, bluetooth device loses
|
||||||
btintel_pcie_wr_sleep_cntrl(data, BTINTEL_PCIE_STATE_D0);
|
* power, which results in the erasure of its loaded firmware.
|
||||||
err = wait_event_timeout(data->gp0_wait_q, data->gp0_received,
|
* Consequently, function level reset (flr) is required on system
|
||||||
msecs_to_jiffies(BTINTEL_DEFAULT_INTR_TIMEOUT_MS));
|
* resume to bring the controller back into an operational state by
|
||||||
if (err == 0) {
|
* initiating a new firmware download.
|
||||||
bt_dev_err(data->hdev,
|
*/
|
||||||
"Timeout (%u ms) on alive interrupt for D0 entry",
|
|
||||||
BTINTEL_DEFAULT_INTR_TIMEOUT_MS);
|
if (data->pm_sx_event == PM_EVENT_FREEZE ||
|
||||||
return -EBUSY;
|
data->pm_sx_event == PM_EVENT_HIBERNATE) {
|
||||||
|
set_bit(BTINTEL_PCIE_CORE_HALTED, &data->flags);
|
||||||
|
btintel_pcie_reset(data->hdev);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bt_dev_dbg(data->hdev,
|
/* Refer: 6.4.11.7 -> Platform power management */
|
||||||
"device entered into d0 state from d3 in %lld us",
|
err = btintel_pcie_set_dxstate(data, BTINTEL_PCIE_STATE_D0);
|
||||||
ktime_to_us(ktime_get() - start));
|
|
||||||
return 0;
|
if (err == 0) {
|
||||||
|
bt_dev_dbg(data->hdev,
|
||||||
|
"device entered into d0 state from d3 in %lld us",
|
||||||
|
ktime_to_us(ktime_get() - start));
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Trigger function level reset if the controller is in error
|
||||||
|
* state during resume() to bring back the controller to
|
||||||
|
* operational mode
|
||||||
|
*/
|
||||||
|
|
||||||
|
data->boot_stage_cache = btintel_pcie_rd_reg32(data,
|
||||||
|
BTINTEL_PCIE_CSR_BOOT_STAGE_REG);
|
||||||
|
if (btintel_pcie_in_error(data) ||
|
||||||
|
btintel_pcie_in_device_halt(data)) {
|
||||||
|
bt_dev_err(data->hdev, "Controller in error state for D0 entry");
|
||||||
|
if (!test_and_set_bit(BTINTEL_PCIE_COREDUMP_INPROGRESS,
|
||||||
|
&data->flags)) {
|
||||||
|
data->dmp_hdr.trigger_reason =
|
||||||
|
BTINTEL_PCIE_TRIGGER_REASON_FW_ASSERT;
|
||||||
|
queue_work(data->workqueue, &data->rx_work);
|
||||||
|
}
|
||||||
|
set_bit(BTINTEL_PCIE_CORE_HALTED, &data->flags);
|
||||||
|
btintel_pcie_reset(data->hdev);
|
||||||
|
}
|
||||||
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct dev_pm_ops btintel_pcie_pm_ops = {
|
static const struct dev_pm_ops btintel_pcie_pm_ops = {
|
||||||
|
|
|
||||||
|
|
@ -158,6 +158,8 @@ enum msix_mbox_int_causes {
|
||||||
/* Default interrupt timeout in msec */
|
/* Default interrupt timeout in msec */
|
||||||
#define BTINTEL_DEFAULT_INTR_TIMEOUT_MS 3000
|
#define BTINTEL_DEFAULT_INTR_TIMEOUT_MS 3000
|
||||||
|
|
||||||
|
#define BTINTEL_PCIE_DX_TRANSITION_MAX_RETRIES 3
|
||||||
|
|
||||||
/* The number of descriptors in TX queues */
|
/* The number of descriptors in TX queues */
|
||||||
#define BTINTEL_PCIE_TX_DESCS_COUNT 32
|
#define BTINTEL_PCIE_TX_DESCS_COUNT 32
|
||||||
|
|
||||||
|
|
@ -464,6 +466,7 @@ struct btintel_pcie_dump_header {
|
||||||
* @txq: TX Queue struct
|
* @txq: TX Queue struct
|
||||||
* @rxq: RX Queue struct
|
* @rxq: RX Queue struct
|
||||||
* @alive_intr_ctxt: Alive interrupt context
|
* @alive_intr_ctxt: Alive interrupt context
|
||||||
|
* @pm_sx_event: PM event on which system got suspended
|
||||||
*/
|
*/
|
||||||
struct btintel_pcie_data {
|
struct btintel_pcie_data {
|
||||||
struct pci_dev *pdev;
|
struct pci_dev *pdev;
|
||||||
|
|
@ -513,6 +516,7 @@ struct btintel_pcie_data {
|
||||||
u32 alive_intr_ctxt;
|
u32 alive_intr_ctxt;
|
||||||
struct btintel_pcie_dbgc dbgc;
|
struct btintel_pcie_dbgc dbgc;
|
||||||
struct btintel_pcie_dump_header dmp_hdr;
|
struct btintel_pcie_dump_header dmp_hdr;
|
||||||
|
u8 pm_sx_event;
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline u32 btintel_pcie_rd_reg32(struct btintel_pcie_data *data,
|
static inline u32 btintel_pcie_rd_reg32(struct btintel_pcie_data *data,
|
||||||
|
|
|
||||||
|
|
@ -615,7 +615,6 @@ static void btmtksdio_txrx_work(struct work_struct *work)
|
||||||
|
|
||||||
sdio_release_host(bdev->func);
|
sdio_release_host(bdev->func);
|
||||||
|
|
||||||
pm_runtime_mark_last_busy(bdev->dev);
|
|
||||||
pm_runtime_put_autosuspend(bdev->dev);
|
pm_runtime_put_autosuspend(bdev->dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -72,6 +72,7 @@ enum btrtl_chip_id {
|
||||||
CHIP_ID_8851B = 36,
|
CHIP_ID_8851B = 36,
|
||||||
CHIP_ID_8922A = 44,
|
CHIP_ID_8922A = 44,
|
||||||
CHIP_ID_8852BT = 47,
|
CHIP_ID_8852BT = 47,
|
||||||
|
CHIP_ID_8761C = 51,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct id_table {
|
struct id_table {
|
||||||
|
|
@ -230,6 +231,14 @@ static const struct id_table ic_id_table[] = {
|
||||||
.cfg_name = "rtl_bt/rtl8761bu_config",
|
.cfg_name = "rtl_bt/rtl8761bu_config",
|
||||||
.hw_info = "rtl8761bu" },
|
.hw_info = "rtl8761bu" },
|
||||||
|
|
||||||
|
/* 8761CU */
|
||||||
|
{ IC_INFO(RTL_ROM_LMP_8761A, 0x0e, 0, HCI_USB),
|
||||||
|
.config_needed = false,
|
||||||
|
.has_rom_version = true,
|
||||||
|
.fw_name = "rtl_bt/rtl8761cu_fw",
|
||||||
|
.cfg_name = "rtl_bt/rtl8761cu_config",
|
||||||
|
.hw_info = "rtl8761cu" },
|
||||||
|
|
||||||
/* 8822C with UART interface */
|
/* 8822C with UART interface */
|
||||||
{ IC_INFO(RTL_ROM_LMP_8822B, 0xc, 0x8, HCI_UART),
|
{ IC_INFO(RTL_ROM_LMP_8822B, 0xc, 0x8, HCI_UART),
|
||||||
.config_needed = true,
|
.config_needed = true,
|
||||||
|
|
@ -344,7 +353,8 @@ static const struct id_table *btrtl_match_ic(u16 lmp_subver, u16 hci_rev,
|
||||||
(ic_id_table[i].hci_rev != hci_rev))
|
(ic_id_table[i].hci_rev != hci_rev))
|
||||||
continue;
|
continue;
|
||||||
if ((ic_id_table[i].match_flags & IC_MATCH_FL_HCIVER) &&
|
if ((ic_id_table[i].match_flags & IC_MATCH_FL_HCIVER) &&
|
||||||
(ic_id_table[i].hci_ver != hci_ver))
|
(ic_id_table[i].hci_ver != hci_ver) &&
|
||||||
|
(ic_id_table[i].hci_ver != 0))
|
||||||
continue;
|
continue;
|
||||||
if ((ic_id_table[i].match_flags & IC_MATCH_FL_HCIBUS) &&
|
if ((ic_id_table[i].match_flags & IC_MATCH_FL_HCIBUS) &&
|
||||||
(ic_id_table[i].hci_bus != hci_bus))
|
(ic_id_table[i].hci_bus != hci_bus))
|
||||||
|
|
@ -662,6 +672,7 @@ static int rtlbt_parse_firmware(struct hci_dev *hdev,
|
||||||
{ RTL_ROM_LMP_8851B, 36 }, /* 8851B */
|
{ RTL_ROM_LMP_8851B, 36 }, /* 8851B */
|
||||||
{ RTL_ROM_LMP_8922A, 44 }, /* 8922A */
|
{ RTL_ROM_LMP_8922A, 44 }, /* 8922A */
|
||||||
{ RTL_ROM_LMP_8852A, 47 }, /* 8852BT */
|
{ RTL_ROM_LMP_8852A, 47 }, /* 8852BT */
|
||||||
|
{ RTL_ROM_LMP_8761A, 51 }, /* 8761C */
|
||||||
};
|
};
|
||||||
|
|
||||||
if (btrtl_dev->fw_len <= 8)
|
if (btrtl_dev->fw_len <= 8)
|
||||||
|
|
@ -1305,6 +1316,7 @@ void btrtl_set_quirks(struct hci_dev *hdev, struct btrtl_device_info *btrtl_dev)
|
||||||
case CHIP_ID_8851B:
|
case CHIP_ID_8851B:
|
||||||
case CHIP_ID_8922A:
|
case CHIP_ID_8922A:
|
||||||
case CHIP_ID_8852BT:
|
case CHIP_ID_8852BT:
|
||||||
|
case CHIP_ID_8761C:
|
||||||
hci_set_quirk(hdev, HCI_QUIRK_WIDEBAND_SPEECH_SUPPORTED);
|
hci_set_quirk(hdev, HCI_QUIRK_WIDEBAND_SPEECH_SUPPORTED);
|
||||||
|
|
||||||
/* RTL8852C needs to transmit mSBC data continuously without
|
/* RTL8852C needs to transmit mSBC data continuously without
|
||||||
|
|
@ -1524,6 +1536,8 @@ MODULE_FIRMWARE("rtl_bt/rtl8761b_fw.bin");
|
||||||
MODULE_FIRMWARE("rtl_bt/rtl8761b_config.bin");
|
MODULE_FIRMWARE("rtl_bt/rtl8761b_config.bin");
|
||||||
MODULE_FIRMWARE("rtl_bt/rtl8761bu_fw.bin");
|
MODULE_FIRMWARE("rtl_bt/rtl8761bu_fw.bin");
|
||||||
MODULE_FIRMWARE("rtl_bt/rtl8761bu_config.bin");
|
MODULE_FIRMWARE("rtl_bt/rtl8761bu_config.bin");
|
||||||
|
MODULE_FIRMWARE("rtl_bt/rtl8761cu_fw.bin");
|
||||||
|
MODULE_FIRMWARE("rtl_bt/rtl8761cu_config.bin");
|
||||||
MODULE_FIRMWARE("rtl_bt/rtl8821a_fw.bin");
|
MODULE_FIRMWARE("rtl_bt/rtl8821a_fw.bin");
|
||||||
MODULE_FIRMWARE("rtl_bt/rtl8821a_config.bin");
|
MODULE_FIRMWARE("rtl_bt/rtl8821a_config.bin");
|
||||||
MODULE_FIRMWARE("rtl_bt/rtl8821c_fw.bin");
|
MODULE_FIRMWARE("rtl_bt/rtl8821c_fw.bin");
|
||||||
|
|
|
||||||
|
|
@ -504,6 +504,8 @@ static const struct usb_device_id quirks_table[] = {
|
||||||
/* Realtek 8821CE Bluetooth devices */
|
/* Realtek 8821CE Bluetooth devices */
|
||||||
{ USB_DEVICE(0x13d3, 0x3529), .driver_info = BTUSB_REALTEK |
|
{ USB_DEVICE(0x13d3, 0x3529), .driver_info = BTUSB_REALTEK |
|
||||||
BTUSB_WIDEBAND_SPEECH },
|
BTUSB_WIDEBAND_SPEECH },
|
||||||
|
{ USB_DEVICE(0x13d3, 0x3533), .driver_info = BTUSB_REALTEK |
|
||||||
|
BTUSB_WIDEBAND_SPEECH },
|
||||||
|
|
||||||
/* Realtek 8822CE Bluetooth devices */
|
/* Realtek 8822CE Bluetooth devices */
|
||||||
{ USB_DEVICE(0x0bda, 0xb00c), .driver_info = BTUSB_REALTEK |
|
{ USB_DEVICE(0x0bda, 0xb00c), .driver_info = BTUSB_REALTEK |
|
||||||
|
|
@ -585,6 +587,12 @@ static const struct usb_device_id quirks_table[] = {
|
||||||
/* Realtek 8852BT/8852BE-VT Bluetooth devices */
|
/* Realtek 8852BT/8852BE-VT Bluetooth devices */
|
||||||
{ USB_DEVICE(0x0bda, 0x8520), .driver_info = BTUSB_REALTEK |
|
{ USB_DEVICE(0x0bda, 0x8520), .driver_info = BTUSB_REALTEK |
|
||||||
BTUSB_WIDEBAND_SPEECH },
|
BTUSB_WIDEBAND_SPEECH },
|
||||||
|
{ USB_DEVICE(0x0489, 0xe12f), .driver_info = BTUSB_REALTEK |
|
||||||
|
BTUSB_WIDEBAND_SPEECH },
|
||||||
|
{ USB_DEVICE(0x13d3, 0x3618), .driver_info = BTUSB_REALTEK |
|
||||||
|
BTUSB_WIDEBAND_SPEECH },
|
||||||
|
{ USB_DEVICE(0x13d3, 0x3619), .driver_info = BTUSB_REALTEK |
|
||||||
|
BTUSB_WIDEBAND_SPEECH },
|
||||||
|
|
||||||
/* Realtek 8922AE Bluetooth devices */
|
/* Realtek 8922AE Bluetooth devices */
|
||||||
{ USB_DEVICE(0x0bda, 0x8922), .driver_info = BTUSB_REALTEK |
|
{ USB_DEVICE(0x0bda, 0x8922), .driver_info = BTUSB_REALTEK |
|
||||||
|
|
@ -621,6 +629,8 @@ static const struct usb_device_id quirks_table[] = {
|
||||||
/* Additional MediaTek MT7920 Bluetooth devices */
|
/* Additional MediaTek MT7920 Bluetooth devices */
|
||||||
{ USB_DEVICE(0x0489, 0xe134), .driver_info = BTUSB_MEDIATEK |
|
{ USB_DEVICE(0x0489, 0xe134), .driver_info = BTUSB_MEDIATEK |
|
||||||
BTUSB_WIDEBAND_SPEECH },
|
BTUSB_WIDEBAND_SPEECH },
|
||||||
|
{ USB_DEVICE(0x0489, 0xe135), .driver_info = BTUSB_MEDIATEK |
|
||||||
|
BTUSB_WIDEBAND_SPEECH },
|
||||||
{ USB_DEVICE(0x13d3, 0x3620), .driver_info = BTUSB_MEDIATEK |
|
{ USB_DEVICE(0x13d3, 0x3620), .driver_info = BTUSB_MEDIATEK |
|
||||||
BTUSB_WIDEBAND_SPEECH },
|
BTUSB_WIDEBAND_SPEECH },
|
||||||
{ USB_DEVICE(0x13d3, 0x3621), .driver_info = BTUSB_MEDIATEK |
|
{ USB_DEVICE(0x13d3, 0x3621), .driver_info = BTUSB_MEDIATEK |
|
||||||
|
|
@ -685,6 +695,8 @@ static const struct usb_device_id quirks_table[] = {
|
||||||
BTUSB_WIDEBAND_SPEECH },
|
BTUSB_WIDEBAND_SPEECH },
|
||||||
{ USB_DEVICE(0x0489, 0xe153), .driver_info = BTUSB_MEDIATEK |
|
{ USB_DEVICE(0x0489, 0xe153), .driver_info = BTUSB_MEDIATEK |
|
||||||
BTUSB_WIDEBAND_SPEECH },
|
BTUSB_WIDEBAND_SPEECH },
|
||||||
|
{ USB_DEVICE(0x0489, 0xe170), .driver_info = BTUSB_MEDIATEK |
|
||||||
|
BTUSB_WIDEBAND_SPEECH },
|
||||||
{ USB_DEVICE(0x04ca, 0x3804), .driver_info = BTUSB_MEDIATEK |
|
{ USB_DEVICE(0x04ca, 0x3804), .driver_info = BTUSB_MEDIATEK |
|
||||||
BTUSB_WIDEBAND_SPEECH },
|
BTUSB_WIDEBAND_SPEECH },
|
||||||
{ USB_DEVICE(0x04ca, 0x38e4), .driver_info = BTUSB_MEDIATEK |
|
{ USB_DEVICE(0x04ca, 0x38e4), .driver_info = BTUSB_MEDIATEK |
|
||||||
|
|
@ -781,6 +793,8 @@ static const struct usb_device_id quirks_table[] = {
|
||||||
BTUSB_WIDEBAND_SPEECH },
|
BTUSB_WIDEBAND_SPEECH },
|
||||||
{ USB_DEVICE(0x2b89, 0x8761), .driver_info = BTUSB_REALTEK |
|
{ USB_DEVICE(0x2b89, 0x8761), .driver_info = BTUSB_REALTEK |
|
||||||
BTUSB_WIDEBAND_SPEECH },
|
BTUSB_WIDEBAND_SPEECH },
|
||||||
|
{ USB_DEVICE(0x2b89, 0x6275), .driver_info = BTUSB_REALTEK |
|
||||||
|
BTUSB_WIDEBAND_SPEECH },
|
||||||
|
|
||||||
/* Additional Realtek 8821AE Bluetooth devices */
|
/* Additional Realtek 8821AE Bluetooth devices */
|
||||||
{ USB_DEVICE(0x0b05, 0x17dc), .driver_info = BTUSB_REALTEK },
|
{ USB_DEVICE(0x0b05, 0x17dc), .driver_info = BTUSB_REALTEK },
|
||||||
|
|
@ -1131,6 +1145,24 @@ static void btusb_qca_reset(struct hci_dev *hdev)
|
||||||
btusb_reset(hdev);
|
btusb_reset(hdev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static u8 btusb_classify_qca_pkt_type(struct hci_dev *hdev, struct sk_buff *skb)
|
||||||
|
{
|
||||||
|
/* Some Qualcomm controllers, e.g., QCNFA765 with WCN6855 chip, send debug
|
||||||
|
* packets as ACL frames with connection handle 0x2EDC. These are not real
|
||||||
|
* ACL packets and should be reclassified as HCI_DIAG_PKT to prevent
|
||||||
|
* "ACL packet for unknown connection handle 3804" errors.
|
||||||
|
*/
|
||||||
|
if (skb->len >= 2) {
|
||||||
|
u16 handle = get_unaligned_le16(skb->data);
|
||||||
|
|
||||||
|
if (handle == 0x2EDC)
|
||||||
|
return HCI_DIAG_PKT;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Use default packet type for other packets */
|
||||||
|
return hci_skb_pkt_type(skb);
|
||||||
|
}
|
||||||
|
|
||||||
static inline void btusb_free_frags(struct btusb_data *data)
|
static inline void btusb_free_frags(struct btusb_data *data)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
@ -2808,6 +2840,19 @@ static int btusb_mtk_reset(struct hci_dev *hdev, void *rst_data)
|
||||||
btusb_stop_traffic(data);
|
btusb_stop_traffic(data);
|
||||||
usb_kill_anchored_urbs(&data->tx_anchor);
|
usb_kill_anchored_urbs(&data->tx_anchor);
|
||||||
|
|
||||||
|
/* Toggle the hard reset line. The MediaTek device is going to
|
||||||
|
* yank itself off the USB and then replug. The cleanup is handled
|
||||||
|
* correctly on the way out (standard USB disconnect), and the new
|
||||||
|
* device is detected cleanly and bound to the driver again like
|
||||||
|
* it should be.
|
||||||
|
*/
|
||||||
|
if (data->reset_gpio) {
|
||||||
|
gpiod_set_value_cansleep(data->reset_gpio, 1);
|
||||||
|
msleep(200);
|
||||||
|
gpiod_set_value_cansleep(data->reset_gpio, 0);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
err = btmtk_usb_subsys_reset(hdev, btmtk_data->dev_id);
|
err = btmtk_usb_subsys_reset(hdev, btmtk_data->dev_id);
|
||||||
|
|
||||||
usb_queue_reset_device(data->intf);
|
usb_queue_reset_device(data->intf);
|
||||||
|
|
@ -3261,6 +3306,7 @@ static const struct qca_device_info qca_devices_table[] = {
|
||||||
|
|
||||||
static const struct qca_custom_firmware qca_custom_btfws[] = {
|
static const struct qca_custom_firmware qca_custom_btfws[] = {
|
||||||
{ 0x00130201, 0x030A, "QCA2066" },
|
{ 0x00130201, 0x030A, "QCA2066" },
|
||||||
|
{ 0x00130201, 0x030B, "QCA2066" },
|
||||||
{ },
|
{ },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -4226,6 +4272,7 @@ static int btusb_probe(struct usb_interface *intf,
|
||||||
data->recv_acl = btusb_recv_acl_qca;
|
data->recv_acl = btusb_recv_acl_qca;
|
||||||
hci_devcd_register(hdev, btusb_coredump_qca, btusb_dump_hdr_qca, NULL);
|
hci_devcd_register(hdev, btusb_coredump_qca, btusb_dump_hdr_qca, NULL);
|
||||||
data->setup_on_usb = btusb_setup_qca;
|
data->setup_on_usb = btusb_setup_qca;
|
||||||
|
hdev->classify_pkt_type = btusb_classify_qca_pkt_type;
|
||||||
hdev->shutdown = btusb_shutdown_qca;
|
hdev->shutdown = btusb_shutdown_qca;
|
||||||
hdev->set_bdaddr = btusb_set_bdaddr_wcn6855;
|
hdev->set_bdaddr = btusb_set_bdaddr_wcn6855;
|
||||||
hdev->reset = btusb_qca_reset;
|
hdev->reset = btusb_qca_reset;
|
||||||
|
|
|
||||||
|
|
@ -326,7 +326,6 @@ static irqreturn_t bcm_host_wake(int irq, void *data)
|
||||||
bt_dev_dbg(bdev, "Host wake IRQ");
|
bt_dev_dbg(bdev, "Host wake IRQ");
|
||||||
|
|
||||||
pm_runtime_get(bdev->dev);
|
pm_runtime_get(bdev->dev);
|
||||||
pm_runtime_mark_last_busy(bdev->dev);
|
|
||||||
pm_runtime_put_autosuspend(bdev->dev);
|
pm_runtime_put_autosuspend(bdev->dev);
|
||||||
|
|
||||||
return IRQ_HANDLED;
|
return IRQ_HANDLED;
|
||||||
|
|
@ -710,7 +709,6 @@ static int bcm_recv(struct hci_uart *hu, const void *data, int count)
|
||||||
mutex_lock(&bcm_device_lock);
|
mutex_lock(&bcm_device_lock);
|
||||||
if (bcm->dev && bcm_device_exists(bcm->dev)) {
|
if (bcm->dev && bcm_device_exists(bcm->dev)) {
|
||||||
pm_runtime_get(bcm->dev->dev);
|
pm_runtime_get(bcm->dev->dev);
|
||||||
pm_runtime_mark_last_busy(bcm->dev->dev);
|
|
||||||
pm_runtime_put_autosuspend(bcm->dev->dev);
|
pm_runtime_put_autosuspend(bcm->dev->dev);
|
||||||
}
|
}
|
||||||
mutex_unlock(&bcm_device_lock);
|
mutex_unlock(&bcm_device_lock);
|
||||||
|
|
@ -748,10 +746,8 @@ static struct sk_buff *bcm_dequeue(struct hci_uart *hu)
|
||||||
|
|
||||||
skb = skb_dequeue(&bcm->txq);
|
skb = skb_dequeue(&bcm->txq);
|
||||||
|
|
||||||
if (bdev) {
|
if (bdev)
|
||||||
pm_runtime_mark_last_busy(bdev->dev);
|
|
||||||
pm_runtime_put_autosuspend(bdev->dev);
|
pm_runtime_put_autosuspend(bdev->dev);
|
||||||
}
|
|
||||||
|
|
||||||
mutex_unlock(&bcm_device_lock);
|
mutex_unlock(&bcm_device_lock);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,8 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/acpi.h>
|
#include <linux/acpi.h>
|
||||||
|
#include <linux/bitrev.h>
|
||||||
|
#include <linux/crc-ccitt.h>
|
||||||
#include <linux/errno.h>
|
#include <linux/errno.h>
|
||||||
#include <linux/gpio/consumer.h>
|
#include <linux/gpio/consumer.h>
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
|
|
@ -58,6 +60,7 @@ enum {
|
||||||
H5_TX_ACK_REQ, /* Pending ack to send */
|
H5_TX_ACK_REQ, /* Pending ack to send */
|
||||||
H5_WAKEUP_DISABLE, /* Device cannot wake host */
|
H5_WAKEUP_DISABLE, /* Device cannot wake host */
|
||||||
H5_HW_FLOW_CONTROL, /* Use HW flow control */
|
H5_HW_FLOW_CONTROL, /* Use HW flow control */
|
||||||
|
H5_CRC, /* Use CRC */
|
||||||
};
|
};
|
||||||
|
|
||||||
struct h5 {
|
struct h5 {
|
||||||
|
|
@ -141,8 +144,8 @@ static void h5_link_control(struct hci_uart *hu, const void *data, size_t len)
|
||||||
|
|
||||||
static u8 h5_cfg_field(struct h5 *h5)
|
static u8 h5_cfg_field(struct h5 *h5)
|
||||||
{
|
{
|
||||||
/* Sliding window size (first 3 bits) */
|
/* Sliding window size (first 3 bits) and CRC request (fifth bit). */
|
||||||
return h5->tx_win & 0x07;
|
return (h5->tx_win & 0x07) | 0x10;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void h5_timed_event(struct timer_list *t)
|
static void h5_timed_event(struct timer_list *t)
|
||||||
|
|
@ -213,7 +216,6 @@ static void h5_peer_reset(struct hci_uart *hu)
|
||||||
static int h5_open(struct hci_uart *hu)
|
static int h5_open(struct hci_uart *hu)
|
||||||
{
|
{
|
||||||
struct h5 *h5;
|
struct h5 *h5;
|
||||||
const unsigned char sync[] = { 0x01, 0x7e };
|
|
||||||
|
|
||||||
BT_DBG("hu %p", hu);
|
BT_DBG("hu %p", hu);
|
||||||
|
|
||||||
|
|
@ -243,9 +245,11 @@ static int h5_open(struct hci_uart *hu)
|
||||||
|
|
||||||
set_bit(HCI_UART_INIT_PENDING, &hu->hdev_flags);
|
set_bit(HCI_UART_INIT_PENDING, &hu->hdev_flags);
|
||||||
|
|
||||||
/* Send initial sync request */
|
/*
|
||||||
h5_link_control(hu, sync, sizeof(sync));
|
* Wait one jiffy because the UART layer won't set HCI_UART_PROTO_READY,
|
||||||
mod_timer(&h5->timer, jiffies + H5_SYNC_TIMEOUT);
|
* which allows us to send link packets, until this function returns.
|
||||||
|
*/
|
||||||
|
mod_timer(&h5->timer, jiffies + 1);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
@ -360,8 +364,10 @@ static void h5_handle_internal_rx(struct hci_uart *hu)
|
||||||
h5_link_control(hu, conf_rsp, 2);
|
h5_link_control(hu, conf_rsp, 2);
|
||||||
h5_link_control(hu, conf_req, 3);
|
h5_link_control(hu, conf_req, 3);
|
||||||
} else if (memcmp(data, conf_rsp, 2) == 0) {
|
} else if (memcmp(data, conf_rsp, 2) == 0) {
|
||||||
if (H5_HDR_LEN(hdr) > 2)
|
if (H5_HDR_LEN(hdr) > 2) {
|
||||||
h5->tx_win = (data[2] & 0x07);
|
h5->tx_win = (data[2] & 0x07);
|
||||||
|
assign_bit(H5_CRC, &h5->flags, data[2] & 0x10);
|
||||||
|
}
|
||||||
BT_DBG("Three-wire init complete. tx_win %u", h5->tx_win);
|
BT_DBG("Three-wire init complete. tx_win %u", h5->tx_win);
|
||||||
h5->state = H5_ACTIVE;
|
h5->state = H5_ACTIVE;
|
||||||
hci_uart_init_ready(hu);
|
hci_uart_init_ready(hu);
|
||||||
|
|
@ -425,7 +431,24 @@ static void h5_complete_rx_pkt(struct hci_uart *hu)
|
||||||
|
|
||||||
static int h5_rx_crc(struct hci_uart *hu, unsigned char c)
|
static int h5_rx_crc(struct hci_uart *hu, unsigned char c)
|
||||||
{
|
{
|
||||||
h5_complete_rx_pkt(hu);
|
struct h5 *h5 = hu->priv;
|
||||||
|
const unsigned char *hdr = h5->rx_skb->data;
|
||||||
|
u16 crc;
|
||||||
|
__be16 crc_be;
|
||||||
|
|
||||||
|
crc = crc_ccitt(0xffff, hdr, 4 + H5_HDR_LEN(hdr));
|
||||||
|
crc = bitrev16(crc);
|
||||||
|
|
||||||
|
crc_be = cpu_to_be16(crc);
|
||||||
|
|
||||||
|
if (memcmp(&crc_be, hdr + 4 + H5_HDR_LEN(hdr), 2) != 0) {
|
||||||
|
bt_dev_err(hu->hdev, "Received packet with invalid CRC");
|
||||||
|
h5_reset_rx(h5);
|
||||||
|
} else {
|
||||||
|
/* Remove CRC bytes */
|
||||||
|
skb_trim(h5->rx_skb, 4 + H5_HDR_LEN(hdr));
|
||||||
|
h5_complete_rx_pkt(hu);
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
@ -556,6 +579,7 @@ static void h5_reset_rx(struct h5 *h5)
|
||||||
h5->rx_func = h5_rx_delimiter;
|
h5->rx_func = h5_rx_delimiter;
|
||||||
h5->rx_pending = 0;
|
h5->rx_pending = 0;
|
||||||
clear_bit(H5_RX_ESC, &h5->flags);
|
clear_bit(H5_RX_ESC, &h5->flags);
|
||||||
|
clear_bit(H5_CRC, &h5->flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int h5_recv(struct hci_uart *hu, const void *data, int count)
|
static int h5_recv(struct hci_uart *hu, const void *data, int count)
|
||||||
|
|
@ -592,7 +616,6 @@ static int h5_recv(struct hci_uart *hu, const void *data, int count)
|
||||||
|
|
||||||
if (hu->serdev) {
|
if (hu->serdev) {
|
||||||
pm_runtime_get(&hu->serdev->dev);
|
pm_runtime_get(&hu->serdev->dev);
|
||||||
pm_runtime_mark_last_busy(&hu->serdev->dev);
|
|
||||||
pm_runtime_put_autosuspend(&hu->serdev->dev);
|
pm_runtime_put_autosuspend(&hu->serdev->dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -634,7 +657,6 @@ static int h5_enqueue(struct hci_uart *hu, struct sk_buff *skb)
|
||||||
|
|
||||||
if (hu->serdev) {
|
if (hu->serdev) {
|
||||||
pm_runtime_get_sync(&hu->serdev->dev);
|
pm_runtime_get_sync(&hu->serdev->dev);
|
||||||
pm_runtime_mark_last_busy(&hu->serdev->dev);
|
|
||||||
pm_runtime_put_autosuspend(&hu->serdev->dev);
|
pm_runtime_put_autosuspend(&hu->serdev->dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -686,6 +708,7 @@ static struct sk_buff *h5_prepare_pkt(struct hci_uart *hu, u8 pkt_type,
|
||||||
struct h5 *h5 = hu->priv;
|
struct h5 *h5 = hu->priv;
|
||||||
struct sk_buff *nskb;
|
struct sk_buff *nskb;
|
||||||
u8 hdr[4];
|
u8 hdr[4];
|
||||||
|
u16 crc;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (!valid_packet_type(pkt_type)) {
|
if (!valid_packet_type(pkt_type)) {
|
||||||
|
|
@ -713,6 +736,7 @@ static struct sk_buff *h5_prepare_pkt(struct hci_uart *hu, u8 pkt_type,
|
||||||
/* Reliable packet? */
|
/* Reliable packet? */
|
||||||
if (pkt_type == HCI_ACLDATA_PKT || pkt_type == HCI_COMMAND_PKT) {
|
if (pkt_type == HCI_ACLDATA_PKT || pkt_type == HCI_COMMAND_PKT) {
|
||||||
hdr[0] |= 1 << 7;
|
hdr[0] |= 1 << 7;
|
||||||
|
hdr[0] |= (test_bit(H5_CRC, &h5->flags) && 1) << 6;
|
||||||
hdr[0] |= h5->tx_seq;
|
hdr[0] |= h5->tx_seq;
|
||||||
h5->tx_seq = (h5->tx_seq + 1) % 8;
|
h5->tx_seq = (h5->tx_seq + 1) % 8;
|
||||||
}
|
}
|
||||||
|
|
@ -732,6 +756,15 @@ static struct sk_buff *h5_prepare_pkt(struct hci_uart *hu, u8 pkt_type,
|
||||||
for (i = 0; i < len; i++)
|
for (i = 0; i < len; i++)
|
||||||
h5_slip_one_byte(nskb, data[i]);
|
h5_slip_one_byte(nskb, data[i]);
|
||||||
|
|
||||||
|
if (H5_HDR_CRC(hdr)) {
|
||||||
|
crc = crc_ccitt(0xffff, hdr, 4);
|
||||||
|
crc = crc_ccitt(crc, data, len);
|
||||||
|
crc = bitrev16(crc);
|
||||||
|
|
||||||
|
h5_slip_one_byte(nskb, (crc >> 8) & 0xff);
|
||||||
|
h5_slip_one_byte(nskb, crc & 0xff);
|
||||||
|
}
|
||||||
|
|
||||||
h5_slip_delim(nskb);
|
h5_slip_delim(nskb);
|
||||||
|
|
||||||
return nskb;
|
return nskb;
|
||||||
|
|
|
||||||
|
|
@ -280,7 +280,6 @@ static irqreturn_t intel_irq(int irq, void *dev_id)
|
||||||
|
|
||||||
/* Host/Controller are now LPM resumed, trigger a new delayed suspend */
|
/* Host/Controller are now LPM resumed, trigger a new delayed suspend */
|
||||||
pm_runtime_get(&idev->pdev->dev);
|
pm_runtime_get(&idev->pdev->dev);
|
||||||
pm_runtime_mark_last_busy(&idev->pdev->dev);
|
|
||||||
pm_runtime_put_autosuspend(&idev->pdev->dev);
|
pm_runtime_put_autosuspend(&idev->pdev->dev);
|
||||||
|
|
||||||
return IRQ_HANDLED;
|
return IRQ_HANDLED;
|
||||||
|
|
@ -371,7 +370,6 @@ static void intel_busy_work(struct work_struct *work)
|
||||||
list_for_each_entry(idev, &intel_device_list, list) {
|
list_for_each_entry(idev, &intel_device_list, list) {
|
||||||
if (intel->hu->tty->dev->parent == idev->pdev->dev.parent) {
|
if (intel->hu->tty->dev->parent == idev->pdev->dev.parent) {
|
||||||
pm_runtime_get(&idev->pdev->dev);
|
pm_runtime_get(&idev->pdev->dev);
|
||||||
pm_runtime_mark_last_busy(&idev->pdev->dev);
|
|
||||||
pm_runtime_put_autosuspend(&idev->pdev->dev);
|
pm_runtime_put_autosuspend(&idev->pdev->dev);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
@ -1003,7 +1001,6 @@ static int intel_enqueue(struct hci_uart *hu, struct sk_buff *skb)
|
||||||
list_for_each_entry(idev, &intel_device_list, list) {
|
list_for_each_entry(idev, &intel_device_list, list) {
|
||||||
if (hu->tty->dev->parent == idev->pdev->dev.parent) {
|
if (hu->tty->dev->parent == idev->pdev->dev.parent) {
|
||||||
pm_runtime_get_sync(&idev->pdev->dev);
|
pm_runtime_get_sync(&idev->pdev->dev);
|
||||||
pm_runtime_mark_last_busy(&idev->pdev->dev);
|
|
||||||
pm_runtime_put_autosuspend(&idev->pdev->dev);
|
pm_runtime_put_autosuspend(&idev->pdev->dev);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,8 @@ static int otx2_cpt_dl_egrp_delete(struct devlink *dl, u32 id,
|
||||||
}
|
}
|
||||||
|
|
||||||
static int otx2_cpt_dl_uc_info(struct devlink *dl, u32 id,
|
static int otx2_cpt_dl_uc_info(struct devlink *dl, u32 id,
|
||||||
struct devlink_param_gset_ctx *ctx)
|
struct devlink_param_gset_ctx *ctx,
|
||||||
|
struct netlink_ext_ack *extack)
|
||||||
{
|
{
|
||||||
ctx->val.vstr[0] = '\0';
|
ctx->val.vstr[0] = '\0';
|
||||||
|
|
||||||
|
|
@ -32,7 +33,8 @@ static int otx2_cpt_dl_uc_info(struct devlink *dl, u32 id,
|
||||||
}
|
}
|
||||||
|
|
||||||
static int otx2_cpt_dl_t106_mode_get(struct devlink *dl, u32 id,
|
static int otx2_cpt_dl_t106_mode_get(struct devlink *dl, u32 id,
|
||||||
struct devlink_param_gset_ctx *ctx)
|
struct devlink_param_gset_ctx *ctx,
|
||||||
|
struct netlink_ext_ack *extack)
|
||||||
{
|
{
|
||||||
struct otx2_cpt_devlink *cpt_dl = devlink_priv(dl);
|
struct otx2_cpt_devlink *cpt_dl = devlink_priv(dl);
|
||||||
struct otx2_cptpf_dev *cptpf = cpt_dl->cptpf;
|
struct otx2_cptpf_dev *cptpf = cpt_dl->cptpf;
|
||||||
|
|
|
||||||
|
|
@ -6,8 +6,7 @@
|
||||||
*
|
*
|
||||||
* Copyright IBM Corp. 2025
|
* Copyright IBM Corp. 2025
|
||||||
*/
|
*/
|
||||||
#define KMSG_COMPONENT "dibs"
|
#define pr_fmt(fmt) "dibs: " fmt
|
||||||
#define pr_fmt(fmt) KMSG_COMPONENT ": " fmt
|
|
||||||
|
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
|
|
@ -254,9 +253,6 @@ static int __init dibs_init(void)
|
||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
memset(clients, 0, sizeof(clients));
|
|
||||||
max_client = 0;
|
|
||||||
|
|
||||||
dibs_class = class_create("dibs");
|
dibs_class = class_create("dibs");
|
||||||
if (IS_ERR(dibs_class))
|
if (IS_ERR(dibs_class))
|
||||||
return PTR_ERR(dibs_class);
|
return PTR_ERR(dibs_class);
|
||||||
|
|
@ -274,5 +270,5 @@ static void __exit dibs_exit(void)
|
||||||
class_destroy(dibs_class);
|
class_destroy(dibs_class);
|
||||||
}
|
}
|
||||||
|
|
||||||
module_init(dibs_init);
|
subsys_initcall(dibs_init);
|
||||||
module_exit(dibs_exit);
|
module_exit(dibs_exit);
|
||||||
|
|
|
||||||
|
|
@ -637,6 +637,10 @@ dpll_cmd_pin_get_one(struct sk_buff *msg, struct dpll_pin *pin,
|
||||||
ret = dpll_msg_add_pin_freq(msg, pin, ref, extack);
|
ret = dpll_msg_add_pin_freq(msg, pin, ref, extack);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
if (prop->phase_gran &&
|
||||||
|
nla_put_u32(msg, DPLL_A_PIN_PHASE_ADJUST_GRAN,
|
||||||
|
prop->phase_gran))
|
||||||
|
return -EMSGSIZE;
|
||||||
if (nla_put_s32(msg, DPLL_A_PIN_PHASE_ADJUST_MIN,
|
if (nla_put_s32(msg, DPLL_A_PIN_PHASE_ADJUST_MIN,
|
||||||
prop->phase_range.min))
|
prop->phase_range.min))
|
||||||
return -EMSGSIZE;
|
return -EMSGSIZE;
|
||||||
|
|
@ -1261,7 +1265,13 @@ dpll_pin_phase_adj_set(struct dpll_pin *pin, struct nlattr *phase_adj_attr,
|
||||||
if (phase_adj > pin->prop.phase_range.max ||
|
if (phase_adj > pin->prop.phase_range.max ||
|
||||||
phase_adj < pin->prop.phase_range.min) {
|
phase_adj < pin->prop.phase_range.min) {
|
||||||
NL_SET_ERR_MSG_ATTR(extack, phase_adj_attr,
|
NL_SET_ERR_MSG_ATTR(extack, phase_adj_attr,
|
||||||
"phase adjust value not supported");
|
"phase adjust value of out range");
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
if (pin->prop.phase_gran && phase_adj % (s32)pin->prop.phase_gran) {
|
||||||
|
NL_SET_ERR_MSG_ATTR_FMT(extack, phase_adj_attr,
|
||||||
|
"phase adjust value not multiple of %u",
|
||||||
|
pin->prop.phase_gran);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
/* Do not edit directly, auto-generated from: */
|
/* Do not edit directly, auto-generated from: */
|
||||||
/* Documentation/netlink/specs/dpll.yaml */
|
/* Documentation/netlink/specs/dpll.yaml */
|
||||||
/* YNL-GEN kernel source */
|
/* YNL-GEN kernel source */
|
||||||
|
/* To regenerate run: tools/net/ynl/ynl-regen.sh */
|
||||||
|
|
||||||
#include <net/netlink.h>
|
#include <net/netlink.h>
|
||||||
#include <net/genetlink.h>
|
#include <net/genetlink.h>
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
/* Do not edit directly, auto-generated from: */
|
/* Do not edit directly, auto-generated from: */
|
||||||
/* Documentation/netlink/specs/dpll.yaml */
|
/* Documentation/netlink/specs/dpll.yaml */
|
||||||
/* YNL-GEN kernel header */
|
/* YNL-GEN kernel header */
|
||||||
|
/* To regenerate run: tools/net/ynl/ynl-regen.sh */
|
||||||
|
|
||||||
#ifndef _LINUX_DPLL_GEN_H
|
#ifndef _LINUX_DPLL_GEN_H
|
||||||
#define _LINUX_DPLL_GEN_H
|
#define _LINUX_DPLL_GEN_H
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,8 @@
|
||||||
# SPDX-License-Identifier: GPL-2.0
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
|
|
||||||
obj-$(CONFIG_ZL3073X) += zl3073x.o
|
obj-$(CONFIG_ZL3073X) += zl3073x.o
|
||||||
zl3073x-objs := core.o devlink.o dpll.o flash.o fw.o prop.o
|
zl3073x-objs := core.o devlink.o dpll.o flash.o fw.o \
|
||||||
|
out.o prop.o ref.o synth.o
|
||||||
|
|
||||||
obj-$(CONFIG_ZL3073X_I2C) += zl3073x_i2c.o
|
obj-$(CONFIG_ZL3073X_I2C) += zl3073x_i2c.o
|
||||||
zl3073x_i2c-objs := i2c.o
|
zl3073x_i2c-objs := i2c.o
|
||||||
|
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue