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.
|
||||
|
||||
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
|
||||
------------
|
||||
|
||||
|
|
@ -347,9 +355,9 @@ skb_defer_max
|
|||
-------------
|
||||
|
||||
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
|
||||
----------
|
||||
|
|
@ -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 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
|
||||
----------------
|
||||
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ properties:
|
|||
compatible:
|
||||
enum:
|
||||
- airoha,en7581-eth
|
||||
- airoha,an7583-eth
|
||||
|
||||
reg:
|
||||
items:
|
||||
|
|
@ -44,6 +45,7 @@ properties:
|
|||
- description: PDMA irq
|
||||
|
||||
resets:
|
||||
minItems: 7
|
||||
maxItems: 8
|
||||
|
||||
reset-names:
|
||||
|
|
@ -54,8 +56,9 @@ properties:
|
|||
- const: xsi-mac
|
||||
- const: hsi0-mac
|
||||
- const: hsi1-mac
|
||||
- const: hsi-mac
|
||||
- enum: [ hsi-mac, xfp-mac ]
|
||||
- const: xfp-mac
|
||||
minItems: 7
|
||||
|
||||
memory-region:
|
||||
items:
|
||||
|
|
@ -81,6 +84,36 @@ properties:
|
|||
interface to implement hardware flow offloading programming Packet
|
||||
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:
|
||||
"^ethernet@[1-4]$":
|
||||
type: object
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ properties:
|
|||
compatible:
|
||||
enum:
|
||||
- airoha,en7581-npu
|
||||
- airoha,an7583-npu
|
||||
|
||||
reg:
|
||||
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:
|
||||
compatible:
|
||||
const: aspeed,ast2600-mdio
|
||||
oneOf:
|
||||
- const: aspeed,ast2600-mdio
|
||||
- items:
|
||||
- enum:
|
||||
- aspeed,ast2700-mdio
|
||||
- const: aspeed,ast2600-mdio
|
||||
|
||||
reg:
|
||||
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:
|
||||
Documentation/devicetree/bindings/net/marvell-bt-8xxx.txt
|
||||
Documentation/devicetree/bindings/net/bluetooth/marvell,sd8897-bt.yaml
|
||||
|
||||
Optional properties:
|
||||
|
||||
|
|
|
|||
|
|
@ -109,6 +109,26 @@ properties:
|
|||
maximum: 32
|
||||
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:
|
||||
description:
|
||||
Power domain provider node and an args specifier containing
|
||||
|
|
@ -125,6 +145,11 @@ properties:
|
|||
minItems: 1
|
||||
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:
|
||||
- compatible
|
||||
- reg
|
||||
|
|
|
|||
|
|
@ -49,6 +49,11 @@ properties:
|
|||
Must be half or less of "clocks" frequency.
|
||||
maximum: 20000000
|
||||
|
||||
gpio-controller: true
|
||||
|
||||
"#gpio-cells":
|
||||
const: 2
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
|
|
|
|||
|
|
@ -32,11 +32,15 @@ properties:
|
|||
- description: AHB peripheral clock
|
||||
- description: CAN bus clock
|
||||
|
||||
resets:
|
||||
maxItems: 1
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
- interrupts
|
||||
- clocks
|
||||
- resets
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
|
|
@ -46,6 +50,7 @@ examples:
|
|||
compatible = "microchip,mpfs-can";
|
||||
reg = <0x2010c000 0x1000>;
|
||||
clocks = <&clkcfg 17>, <&clkcfg 37>;
|
||||
resets = <&clkcfg 17>;
|
||||
interrupt-parent = <&plic>;
|
||||
interrupts = <56>;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -38,7 +38,10 @@ properties:
|
|||
- cdns,sam9x60-macb # Microchip sam9x60 SoC
|
||||
- microchip,mpfs-macb # Microchip PolarFire SoC
|
||||
- const: cdns,macb # Generic
|
||||
|
||||
- items:
|
||||
- const: microchip,pic64gx-macb # Microchip PIC64GX SoC
|
||||
- const: microchip,mpfs-macb # Microchip PolarFire SoC
|
||||
- const: cdns,macb # Generic
|
||||
- items:
|
||||
- enum:
|
||||
- atmel,sama5d3-macb # 10/100Mbit IP on Atmel sama5d3 SoCs
|
||||
|
|
@ -47,18 +50,19 @@ properties:
|
|||
- const: cdns,macb # Generic
|
||||
|
||||
- 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,sama5d29-gem # GEM XL IP (10/100) on Atmel sama5d29 SoCs
|
||||
- atmel,sama5d3-gem # Gigabit IP on Atmel sama5d3 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,gem # 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:
|
||||
- enum:
|
||||
|
|
@ -183,6 +187,15 @@ allOf:
|
|||
reg:
|
||||
maxItems: 1
|
||||
|
||||
- if:
|
||||
properties:
|
||||
compatible:
|
||||
contains:
|
||||
const: mobileye,eyeq5-gem
|
||||
then:
|
||||
required:
|
||||
- phys
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
examples:
|
||||
|
|
|
|||
|
|
@ -4,10 +4,14 @@
|
|||
$id: http://devicetree.org/schemas/net/dsa/lantiq,gswip.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Lantiq GSWIP Ethernet switches
|
||||
title: Lantiq GSWIP and MaxLinear GSW1xx Ethernet switches
|
||||
|
||||
allOf:
|
||||
- $ref: dsa.yaml#/$defs/ethernet-ports
|
||||
description:
|
||||
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:
|
||||
- Hauke Mehrtens <hauke@hauke-m.de>
|
||||
|
|
@ -18,9 +22,14 @@ properties:
|
|||
- lantiq,xrx200-gswip
|
||||
- lantiq,xrx300-gswip
|
||||
- lantiq,xrx330-gswip
|
||||
- maxlinear,gsw120
|
||||
- maxlinear,gsw125
|
||||
- maxlinear,gsw140
|
||||
- maxlinear,gsw141
|
||||
- maxlinear,gsw145
|
||||
|
||||
reg:
|
||||
minItems: 3
|
||||
minItems: 1
|
||||
maxItems: 3
|
||||
|
||||
reg-names:
|
||||
|
|
@ -37,9 +46,6 @@ properties:
|
|||
compatible:
|
||||
const: lantiq,xrx200-mdio
|
||||
|
||||
required:
|
||||
- compatible
|
||||
|
||||
gphy-fw:
|
||||
type: object
|
||||
properties:
|
||||
|
|
@ -91,10 +97,63 @@ properties:
|
|||
|
||||
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:
|
||||
- compatible
|
||||
- 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
|
||||
|
||||
examples:
|
||||
|
|
@ -113,8 +172,10 @@ examples:
|
|||
port@0 {
|
||||
reg = <0>;
|
||||
label = "lan3";
|
||||
phy-mode = "rgmii";
|
||||
phy-mode = "rgmii-id";
|
||||
phy-handle = <&phy0>;
|
||||
tx-internal-delay-ps = <2000>;
|
||||
rx-internal-delay-ps = <2000>;
|
||||
};
|
||||
|
||||
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.
|
||||
maxItems: 1
|
||||
|
||||
clocks:
|
||||
maxItems: 1
|
||||
|
||||
spi-cpha: 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
|
||||
- pattern: "^ethernet-phy-id[a-f0-9]{4}\\.[a-f0-9]{4}$"
|
||||
description:
|
||||
If the PHY reports an incorrect ID (or none at all) then the
|
||||
compatible list may contain an entry with the correct PHY ID
|
||||
in the above form.
|
||||
PHYs contain identification registers. These will be read to
|
||||
identify the PHY. If the PHY reports an incorrect ID, or the
|
||||
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
|
||||
register, this is the chip vendor OUI bits 3:18. The
|
||||
second group of digits is the Phy Identifier 2 register,
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@ properties:
|
|||
- const: fsl,enetc
|
||||
- enum:
|
||||
- pci1131,e101
|
||||
- pci1131,e110
|
||||
|
||||
reg:
|
||||
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:
|
||||
$ref: /schemas/types.yaml#/definitions/phandle-array
|
||||
minItems: 2
|
||||
minItems: 1
|
||||
maxItems: 2
|
||||
items:
|
||||
maxItems: 1
|
||||
|
|
@ -249,6 +249,9 @@ allOf:
|
|||
minItems: 1
|
||||
maxItems: 1
|
||||
|
||||
mediatek,wed:
|
||||
minItems: 2
|
||||
|
||||
mediatek,wed-pcie: false
|
||||
else:
|
||||
properties:
|
||||
|
|
@ -338,12 +341,13 @@ allOf:
|
|||
- const: netsys0
|
||||
- const: netsys1
|
||||
|
||||
mediatek,infracfg: false
|
||||
|
||||
mediatek,sgmiisys:
|
||||
minItems: 2
|
||||
maxItems: 2
|
||||
|
||||
mediatek,wed:
|
||||
maxItems: 1
|
||||
|
||||
- if:
|
||||
properties:
|
||||
compatible:
|
||||
|
|
@ -385,6 +389,9 @@ allOf:
|
|||
minItems: 2
|
||||
maxItems: 2
|
||||
|
||||
mediatek,wed:
|
||||
minItems: 2
|
||||
|
||||
- if:
|
||||
properties:
|
||||
compatible:
|
||||
|
|
@ -429,6 +436,19 @@ allOf:
|
|||
- const: xgp2
|
||||
- const: xgp3
|
||||
|
||||
mediatek,wed:
|
||||
minItems: 2
|
||||
|
||||
- if:
|
||||
properties:
|
||||
compatible:
|
||||
contains:
|
||||
const: ralink,rt5350-eth
|
||||
then:
|
||||
properties:
|
||||
mediatek,wed:
|
||||
minItems: 2
|
||||
|
||||
patternProperties:
|
||||
"^mac@[0-2]$":
|
||||
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:
|
||||
compatible:
|
||||
enum:
|
||||
- nxp,imx94-netc-blk-ctrl
|
||||
- nxp,imx95-netc-blk-ctrl
|
||||
|
||||
reg:
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@ properties:
|
|||
compatible:
|
||||
enum:
|
||||
- ti,tps23881
|
||||
- ti,tps23881b
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
|
|
|||
|
|
@ -73,6 +73,14 @@ properties:
|
|||
|
||||
dma-coherent: true
|
||||
|
||||
interconnects:
|
||||
maxItems: 2
|
||||
|
||||
interconnect-names:
|
||||
items:
|
||||
- const: cpu-mac
|
||||
- const: mac-mem
|
||||
|
||||
phys: true
|
||||
|
||||
phy-names:
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ select:
|
|||
- rockchip,rk3366-gmac
|
||||
- rockchip,rk3368-gmac
|
||||
- rockchip,rk3399-gmac
|
||||
- rockchip,rk3506-gmac
|
||||
- rockchip,rk3528-gmac
|
||||
- rockchip,rk3568-gmac
|
||||
- rockchip,rk3576-gmac
|
||||
|
|
@ -50,6 +51,7 @@ properties:
|
|||
- rockchip,rv1108-gmac
|
||||
- items:
|
||||
- enum:
|
||||
- rockchip,rk3506-gmac
|
||||
- rockchip,rk3528-gmac
|
||||
- rockchip,rk3568-gmac
|
||||
- rockchip,rk3576-gmac
|
||||
|
|
@ -148,6 +150,7 @@ allOf:
|
|||
compatible:
|
||||
contains:
|
||||
enum:
|
||||
- rockchip,rk3506-gmac
|
||||
- rockchip,rk3528-gmac
|
||||
then:
|
||||
properties:
|
||||
|
|
|
|||
|
|
@ -86,10 +86,14 @@ properties:
|
|||
- rockchip,rk3328-gmac
|
||||
- rockchip,rk3366-gmac
|
||||
- rockchip,rk3368-gmac
|
||||
- rockchip,rk3399-gmac
|
||||
- rockchip,rk3506-gmac
|
||||
- rockchip,rk3528-gmac
|
||||
- rockchip,rk3568-gmac
|
||||
- rockchip,rk3576-gmac
|
||||
- rockchip,rk3588-gmac
|
||||
- rockchip,rk3399-gmac
|
||||
- rockchip,rv1108-gmac
|
||||
- rockchip,rv1126-gmac
|
||||
- snps,dwmac
|
||||
- snps,dwmac-3.40a
|
||||
- snps,dwmac-3.50a
|
||||
|
|
|
|||
|
|
@ -70,6 +70,25 @@ required:
|
|||
|
||||
allOf:
|
||||
- $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
|
||||
|
||||
|
|
|
|||
|
|
@ -151,6 +151,12 @@ properties:
|
|||
- ETSI
|
||||
- JP
|
||||
|
||||
country:
|
||||
$ref: /schemas/types.yaml#/definitions/string
|
||||
pattern: '^[A-Z]{2}$'
|
||||
description:
|
||||
ISO 3166-1 alpha-2 country code for power limits
|
||||
|
||||
patternProperties:
|
||||
"^txpower-[256]g$":
|
||||
type: object
|
||||
|
|
@ -210,6 +216,66 @@ properties:
|
|||
minItems: 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:
|
||||
$ref: /schemas/types.yaml#/definitions/uint32-array
|
||||
description:
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ patternProperties:
|
|||
"^(keypad|m25p|max8952|max8997|max8998|mpmc),.*": true
|
||||
"^(pciclass|pinctrl-single|#pinctrl-single|PowerPC),.*": 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
|
||||
|
||||
# Keep list in alphabetical order.
|
||||
|
|
|
|||
|
|
@ -198,15 +198,17 @@ 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.
|
||||
If pin phase adjustment is supported, minimal and maximal values that pin
|
||||
handle shall be provide to the user on ``DPLL_CMD_PIN_GET`` respond
|
||||
with ``DPLL_A_PIN_PHASE_ADJUST_MIN`` and ``DPLL_A_PIN_PHASE_ADJUST_MAX``
|
||||
If pin phase adjustment is supported, minimal and maximal values and
|
||||
granularity that pin handle shall be provided to the user on
|
||||
``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
|
||||
``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.
|
||||
|
||||
=============================== ======================================
|
||||
================================ ==========================================
|
||||
``DPLL_A_PIN_ID`` configured pin id
|
||||
``DPLL_A_PIN_PHASE_ADJUST_GRAN`` attr granularity of phase adjustment value
|
||||
``DPLL_A_PIN_PHASE_ADJUST_MIN`` attr minimum value of phase adjustment
|
||||
``DPLL_A_PIN_PHASE_ADJUST_MAX`` attr maximum value of phase adjustment
|
||||
``DPLL_A_PIN_PHASE_ADJUST`` attr configured value of phase
|
||||
|
|
@ -217,7 +219,7 @@ requested with the same attribute with ``DPLL_CMD_PIN_SET`` command.
|
|||
``DPLL_A_PIN_PARENT_ID`` parent dpll device id
|
||||
``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
|
||||
time difference between signals phase. The negative value means that
|
||||
|
|
@ -384,6 +386,8 @@ according to attribute purpose.
|
|||
frequencies
|
||||
``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_PHASE_ADJUST_GRAN`` attr granularity of phase
|
||||
adjustment value
|
||||
``DPLL_A_PIN_PHASE_ADJUST_MIN`` attr minimum value of phase
|
||||
adjustment
|
||||
``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
|
||||
the right formatting mechanism when displaying values of this
|
||||
type.
|
||||
enum: [ hex, mac, fddi, ipv4, ipv6, uuid ]
|
||||
enum: [ hex, mac, fddi, ipv4, ipv6, ipv4-or-v6, uuid ]
|
||||
# Start genetlink-c
|
||||
name-prefix:
|
||||
type: string
|
||||
|
|
|
|||
|
|
@ -185,7 +185,7 @@ properties:
|
|||
Optional format indicator that is intended only for choosing
|
||||
the right formatting mechanism when displaying values of this
|
||||
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)
|
||||
dependencies:
|
||||
|
|
|
|||
|
|
@ -157,7 +157,7 @@ properties:
|
|||
Optional format indicator that is intended only for choosing
|
||||
the right formatting mechanism when displaying values of this
|
||||
type.
|
||||
enum: [ hex, mac, fddi, ipv4, ipv6, uuid ]
|
||||
enum: [ hex, mac, fddi, ipv4, ipv6, ipv4-or-v6, uuid ]
|
||||
struct:
|
||||
description: Name of the nested struct type.
|
||||
type: string
|
||||
|
|
|
|||
|
|
@ -457,7 +457,7 @@ attribute-sets:
|
|||
name: labels
|
||||
type: binary
|
||||
-
|
||||
name: labels mask
|
||||
name: labels-mask
|
||||
type: binary
|
||||
-
|
||||
name: synproxy
|
||||
|
|
|
|||
|
|
@ -99,6 +99,8 @@ definitions:
|
|||
name: legacy
|
||||
-
|
||||
name: switchdev
|
||||
-
|
||||
name: switchdev-inactive
|
||||
-
|
||||
type: enum
|
||||
name: eswitch-inline-mode
|
||||
|
|
@ -857,6 +859,14 @@ attribute-sets:
|
|||
name: health-reporter-burst-period
|
||||
type: u64
|
||||
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
|
||||
subset-of: devlink
|
||||
|
|
@ -1791,6 +1801,7 @@ operations:
|
|||
- param-type
|
||||
# param-value-data is missing here as the type is variable
|
||||
- param-value-cmode
|
||||
- param-reset-default
|
||||
|
||||
-
|
||||
name: region-get
|
||||
|
|
|
|||
|
|
@ -440,6 +440,12 @@ attribute-sets:
|
|||
doc: |
|
||||
Capable pin provides list of pins that can be bound to create a
|
||||
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
|
||||
|
|
@ -616,6 +622,7 @@ operations:
|
|||
- capabilities
|
||||
- parent-device
|
||||
- parent-pin
|
||||
- phase-adjust-gran
|
||||
- phase-adjust-min
|
||||
- phase-adjust-max
|
||||
- phase-adjust
|
||||
|
|
|
|||
|
|
@ -1269,7 +1269,7 @@ attribute-sets:
|
|||
-
|
||||
name: hist
|
||||
type: nest
|
||||
multi-attr: True
|
||||
multi-attr: true
|
||||
nested-attributes: fec-hist
|
||||
-
|
||||
name: fec
|
||||
|
|
@ -1823,6 +1823,73 @@ attribute-sets:
|
|||
type: uint
|
||||
enum: pse-event
|
||||
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:
|
||||
enum-model: directional
|
||||
|
|
@ -2756,6 +2823,25 @@ operations:
|
|||
attributes:
|
||||
- header
|
||||
- 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:
|
||||
list:
|
||||
|
|
|
|||
|
|
@ -88,7 +88,7 @@ definitions:
|
|||
-
|
||||
name: napi-threaded
|
||||
type: enum
|
||||
entries: [disabled, enabled]
|
||||
entries: [disabled, enabled, busy-poll]
|
||||
|
||||
attribute-sets:
|
||||
-
|
||||
|
|
@ -291,7 +291,8 @@ attribute-sets:
|
|||
name: threaded
|
||||
doc: Whether the NAPI is configured to operate in threaded polling
|
||||
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
|
||||
enum: napi-threaded
|
||||
-
|
||||
|
|
@ -732,6 +733,29 @@ operations:
|
|||
- rx-bytes
|
||||
- tx-packets
|
||||
- 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
|
||||
doc: Bind dmabuf to netdev
|
||||
|
|
|
|||
|
|
@ -915,7 +915,7 @@ attribute-sets:
|
|||
type: string
|
||||
doc: Name of set to use
|
||||
-
|
||||
name: set id
|
||||
name: set-id
|
||||
type: u32
|
||||
byte-order: big-endian
|
||||
doc: ID of set to use
|
||||
|
|
|
|||
|
|
@ -76,6 +76,83 @@ attribute-sets:
|
|||
name: spi
|
||||
doc: Security Parameters Index (SPI) of the association.
|
||||
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:
|
||||
list:
|
||||
|
|
@ -177,6 +254,24 @@ operations:
|
|||
pre: psp-assoc-device-get-locked
|
||||
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:
|
||||
list:
|
||||
-
|
||||
|
|
|
|||
|
|
@ -86,17 +86,18 @@ attribute-sets:
|
|||
-
|
||||
name: address
|
||||
type: binary
|
||||
display-hint: ipv4
|
||||
display-hint: ipv4-or-v6
|
||||
-
|
||||
name: local
|
||||
type: binary
|
||||
display-hint: ipv4
|
||||
display-hint: ipv4-or-v6
|
||||
-
|
||||
name: label
|
||||
type: string
|
||||
-
|
||||
name: broadcast
|
||||
type: binary
|
||||
type: u32
|
||||
byte-order: big-endian
|
||||
display-hint: ipv4
|
||||
-
|
||||
name: anycast
|
||||
|
|
|
|||
|
|
@ -1707,11 +1707,11 @@ attribute-sets:
|
|||
-
|
||||
name: local
|
||||
type: binary
|
||||
display-hint: ipv4
|
||||
display-hint: ipv4-or-v6
|
||||
-
|
||||
name: remote
|
||||
type: binary
|
||||
display-hint: ipv4
|
||||
display-hint: ipv4-or-v6
|
||||
-
|
||||
name: ttl
|
||||
type: u8
|
||||
|
|
@ -1833,11 +1833,11 @@ attribute-sets:
|
|||
-
|
||||
name: local
|
||||
type: binary
|
||||
display-hint: ipv4
|
||||
display-hint: ipv4-or-v6
|
||||
-
|
||||
name: remote
|
||||
type: binary
|
||||
display-hint: ipv4
|
||||
display-hint: ipv4-or-v6
|
||||
-
|
||||
name: fwmark
|
||||
type: u32
|
||||
|
|
@ -1868,7 +1868,8 @@ attribute-sets:
|
|||
type: u32
|
||||
-
|
||||
name: remote
|
||||
type: binary
|
||||
type: u32
|
||||
byte-order: big-endian
|
||||
display-hint: ipv4
|
||||
-
|
||||
name: ttl
|
||||
|
|
@ -1913,6 +1914,35 @@ attribute-sets:
|
|||
name: port-range
|
||||
type: binary
|
||||
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-prefix: ifla-iptun-
|
||||
|
|
@ -1923,11 +1953,11 @@ attribute-sets:
|
|||
-
|
||||
name: local
|
||||
type: binary
|
||||
display-hint: ipv4
|
||||
display-hint: ipv4-or-v6
|
||||
-
|
||||
name: remote
|
||||
type: binary
|
||||
display-hint: ipv4
|
||||
display-hint: ipv4-or-v6
|
||||
-
|
||||
name: ttl
|
||||
type: u8
|
||||
|
|
@ -1957,7 +1987,8 @@ attribute-sets:
|
|||
display-hint: ipv6
|
||||
-
|
||||
name: 6rd-relay-prefix
|
||||
type: binary
|
||||
type: u32
|
||||
byte-order: big-endian
|
||||
display-hint: ipv4
|
||||
-
|
||||
name: 6rd-prefixlen
|
||||
|
|
@ -2299,6 +2330,9 @@ sub-messages:
|
|||
-
|
||||
value: geneve
|
||||
attribute-set: linkinfo-geneve-attrs
|
||||
-
|
||||
value: hsr
|
||||
attribute-set: linkinfo-hsr-attrs
|
||||
-
|
||||
value: ipip
|
||||
attribute-set: linkinfo-iptun-attrs
|
||||
|
|
|
|||
|
|
@ -194,7 +194,7 @@ attribute-sets:
|
|||
-
|
||||
name: dst
|
||||
type: binary
|
||||
display-hint: ipv4
|
||||
display-hint: ipv4-or-v6
|
||||
-
|
||||
name: lladdr
|
||||
type: binary
|
||||
|
|
|
|||
|
|
@ -87,11 +87,11 @@ attribute-sets:
|
|||
-
|
||||
name: dst
|
||||
type: binary
|
||||
display-hint: ipv4
|
||||
display-hint: ipv4-or-v6
|
||||
-
|
||||
name: src
|
||||
type: binary
|
||||
display-hint: ipv4
|
||||
display-hint: ipv4-or-v6
|
||||
-
|
||||
name: iif
|
||||
type: u32
|
||||
|
|
@ -101,14 +101,14 @@ attribute-sets:
|
|||
-
|
||||
name: gateway
|
||||
type: binary
|
||||
display-hint: ipv4
|
||||
display-hint: ipv4-or-v6
|
||||
-
|
||||
name: priority
|
||||
type: u32
|
||||
-
|
||||
name: prefsrc
|
||||
type: binary
|
||||
display-hint: ipv4
|
||||
display-hint: ipv4-or-v6
|
||||
-
|
||||
name: metrics
|
||||
type: nest
|
||||
|
|
|
|||
|
|
@ -96,10 +96,12 @@ attribute-sets:
|
|||
attributes:
|
||||
-
|
||||
name: dst
|
||||
type: u32
|
||||
type: binary
|
||||
display-hint: ipv4-or-v6
|
||||
-
|
||||
name: src
|
||||
type: u32
|
||||
type: binary
|
||||
display-hint: ipv4-or-v6
|
||||
-
|
||||
name: iifname
|
||||
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.
|
||||
|
||||
How to turn on 6pack support:
|
||||
=============================
|
||||
-----------------------------
|
||||
|
||||
- In the linux kernel configuration program, select the code maturity level
|
||||
options menu and turn on the prompting for development drivers.
|
||||
|
|
|
|||
|
|
@ -4,18 +4,20 @@
|
|||
ARCnet Hardware
|
||||
===============
|
||||
|
||||
:Author: Avery Pennarun <apenwarr@worldvisions.ca>
|
||||
|
||||
.. 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.
|
||||
2) This file is no longer Linux-specific. It should probably be moved out
|
||||
of the kernel sources. Ideas?
|
||||
|
||||
Because so many people (myself included) seem to have obtained ARCnet cards
|
||||
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
|
||||
e-mail apenwarr@worldvisions.ca with any settings for your particular card,
|
||||
or any other information you have!
|
||||
some cabling tips, and a listing of all jumper settings I can find. If you
|
||||
have any settings for your particular card, and/or any other information you
|
||||
have, do not hesitate to :ref:`email to netdev <arcnet-netdev>`.
|
||||
|
||||
|
||||
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,
|
||||
although they are generally kept down to the Ethernet-style 1500 bytes.
|
||||
|
||||
For more information on the advantages and disadvantages (mostly the
|
||||
advantages) of ARCnet networks, you might try the "ARCnet Trade Association"
|
||||
WWW page:
|
||||
For more information on ARCnet networks, visit the "ARCNET Resource Center"
|
||||
WWW page at:
|
||||
|
||||
http://www.arcnet.com
|
||||
https://www.arcnet.cc
|
||||
|
||||
|
||||
Cabling ARCnet Networks
|
||||
|
|
@ -3226,9 +3227,6 @@ Settings for IRQ Selection (Lower Jumper Line)
|
|||
Other Cards
|
||||
===========
|
||||
|
||||
I have no information on other models of ARCnet cards at the moment. Please
|
||||
send any and all info to:
|
||||
|
||||
apenwarr@worldvisions.ca
|
||||
I have no information on other models of ARCnet cards at the moment.
|
||||
|
||||
Thanks.
|
||||
|
|
|
|||
|
|
@ -4,6 +4,8 @@
|
|||
ARCnet
|
||||
======
|
||||
|
||||
:Author: Avery Pennarun <apenwarr@worldvisions.ca>
|
||||
|
||||
.. note::
|
||||
|
||||
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!)
|
||||
|
||||
|
||||
.. 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.
|
||||
|
||||
|
|
@ -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!
|
||||
|
||||
|
||||
.. _arcnet-netdev:
|
||||
|
||||
Where do I discuss these drivers?
|
||||
---------------------------------
|
||||
|
||||
Tomasz has been so kind as to set up a new and improved mailing list.
|
||||
Subscribe by sending a message with the BODY "subscribe linux-arcnet YOUR
|
||||
REAL NAME" to listserv@tichy.ch.uj.edu.pl. Then, to submit messages to the
|
||||
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.
|
||||
|
||||
ARCnet discussions take place on netdev. Simply send your email to
|
||||
netdev@vger.kernel.org and make sure to Cc: maintainer listed in
|
||||
"ARCNET NETWORK LAYER" heading of Documentation/process/maintainers.rst.
|
||||
|
||||
Other Drivers and Info
|
||||
----------------------
|
||||
|
|
@ -523,17 +505,9 @@ can set up your network then:
|
|||
It works: what now?
|
||||
-------------------
|
||||
|
||||
Send mail describing your setup, preferably including driver version, kernel
|
||||
version, ARCnet card model, CPU type, number of systems on your network, and
|
||||
list of software in use to me at the following address:
|
||||
|
||||
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.
|
||||
|
||||
Send mail following :ref:`arcnet-netdev`. Describe your setup, preferably
|
||||
including driver version, kernel version, ARCnet card model, CPU type, number
|
||||
of systems on your network, and list of software in use.
|
||||
|
||||
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)
|
||||
---------------------------------
|
||||
|
||||
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.
|
||||
|
||||
b. Map packet v4 (data / control)
|
||||
---------------------------------
|
||||
|
||||
MAP header fields are in big endian format.
|
||||
|
||||
|
|
@ -107,6 +109,7 @@ over which checksum is computed.
|
|||
Checksum value, indicates the checksum computed.
|
||||
|
||||
c. MAP packet v5 (data / control)
|
||||
---------------------------------
|
||||
|
||||
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.
|
||||
|
||||
d. Checksum offload header v5
|
||||
-----------------------------
|
||||
|
||||
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.
|
||||
|
||||
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
|
||||
Function Command Reserved Pad Multiplexer ID Payload length
|
||||
|
|
@ -181,6 +188,7 @@ Command types
|
|||
= ==========================================
|
||||
|
||||
f. Aggregation
|
||||
--------------
|
||||
|
||||
Aggregation is multiple MAP packets (can be data or command) delivered to
|
||||
rmnet in a single linear skb. rmnet will process the individual
|
||||
|
|
|
|||
|
|
@ -47,6 +47,7 @@ Contents:
|
|||
mellanox/mlx5/index
|
||||
meta/fbnic
|
||||
microsoft/netvsc
|
||||
mucse/rnpgbe
|
||||
neterion/s2io
|
||||
netronome/nfp
|
||||
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.
|
||||
* ``switchdev`` allows for more advanced offloading capabilities of
|
||||
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``
|
||||
- enum
|
||||
- Some HWs need the VF driver to put part of the packet
|
||||
|
|
@ -74,3 +78,12 @@ Example Usage
|
|||
|
||||
# enable encap-mode with legacy mode
|
||||
$ 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
|
||||
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:
|
||||
|
||||
Generic configuration parameters
|
||||
|
|
@ -151,3 +161,7 @@ own name.
|
|||
* - ``num_doorbells``
|
||||
- u32
|
||||
- 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``
|
||||
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
|
||||
=============
|
||||
|
||||
|
|
|
|||
|
|
@ -99,5 +99,6 @@ parameters, info versions, and other features it supports.
|
|||
prestera
|
||||
qed
|
||||
sfc
|
||||
stmmac
|
||||
ti-cpsw-switch
|
||||
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
|
||||
* ``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``
|
||||
|
||||
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
|
||||
instantiates a virtual, stackable network interface with two member ports.
|
||||
The driver only implements the basic roles of DANH (Doubly Attached Node
|
||||
implementing HSR) and DANP (Doubly Attached Node implementing PRP); the roles
|
||||
of RedBox and QuadBox are not implemented (therefore, bridging a hsr network
|
||||
interface with a physical switch port does not produce the expected result).
|
||||
implementing HSR), DANP (Doubly Attached Node implementing PRP) and RedBox
|
||||
(allows non-HSR devices to connect to the ring via Interlink ports).
|
||||
|
||||
A driver which is able of offloading certain functions of a DANP or DANH should
|
||||
declare the corresponding netdev features as indicated by the documentation at
|
||||
A driver which is able of offloading certain functions should declare the
|
||||
corresponding netdev features as indicated by the documentation at
|
||||
``Documentation/networking/netdev-features.rst``. Additionally, the following
|
||||
methods must be implemented:
|
||||
|
||||
|
|
@ -1120,6 +1119,14 @@ methods must be implemented:
|
|||
- ``port_hsr_leave``: function invoked when a given switch port leaves a
|
||||
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
|
||||
====
|
||||
|
||||
|
|
|
|||
|
|
@ -242,6 +242,7 @@ Userspace to kernel:
|
|||
``ETHTOOL_MSG_RSS_SET`` set RSS settings
|
||||
``ETHTOOL_MSG_RSS_CREATE_ACT`` create 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:
|
||||
|
|
@ -299,6 +300,7 @@ Kernel to userspace:
|
|||
``ETHTOOL_MSG_RSS_CREATE_ACT_REPLY`` create an additional RSS context
|
||||
``ETHTOOL_MSG_RSS_CREATE_NTF`` additional RSS context created
|
||||
``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
|
||||
|
|
@ -2458,6 +2460,68 @@ Kernel response contents:
|
|||
|
||||
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
|
||||
===================
|
||||
|
||||
|
|
|
|||
|
|
@ -131,10 +131,7 @@ Contents:
|
|||
vxlan
|
||||
x25
|
||||
x25-iface
|
||||
xfrm_device
|
||||
xfrm_proc
|
||||
xfrm_sync
|
||||
xfrm_sysctl
|
||||
xfrm/index
|
||||
xdp-rx-metadata
|
||||
xsk-tx-metadata
|
||||
|
||||
|
|
|
|||
|
|
@ -673,6 +673,16 @@ tcp_moderate_rcvbuf - BOOLEAN
|
|||
|
||||
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
|
||||
Controls TCP Packetization-Layer Path MTU Discovery. Takes three
|
||||
values:
|
||||
|
|
@ -854,9 +864,18 @@ tcp_sack - BOOLEAN
|
|||
|
||||
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 tries to reduce number of SACK sent, using a timer
|
||||
based on 5% of SRTT, capped by this sysctl, in nano seconds.
|
||||
TCP tries to reduce number of SACK sent, using a timer based
|
||||
on tcp_comp_sack_rtt_percent of SRTT, capped by this sysctl
|
||||
in nano seconds.
|
||||
The default is 1ms, based on TSO autosizing period.
|
||||
|
||||
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
|
||||
for small RTT flows, and reduces system overhead by allowing
|
||||
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
|
||||
Max number of SACK that can be compressed.
|
||||
|
|
@ -1796,6 +1816,23 @@ icmp_errors_use_inbound_ifaddr - BOOLEAN
|
|||
|
||||
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
|
||||
Change the maximum number of multicast groups we can subscribe to.
|
||||
Default: 20
|
||||
|
|
@ -3262,6 +3299,23 @@ error_anycast_as_unicast - BOOLEAN
|
|||
|
||||
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
|
||||
(Obsolete since linux-4.14)
|
||||
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
|
||||
selected sockets or using the global ``net.core.busy_poll`` and
|
||||
``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
|
||||
------------------------
|
||||
|
|
@ -426,6 +428,52 @@ Therefore, setting ``gro_flush_timeout`` and ``napi_defer_hard_irqs`` is
|
|||
the recommended usage, because otherwise setting ``irq-suspend-timeout``
|
||||
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 NAPI
|
||||
|
|
|
|||
|
|
@ -12,8 +12,8 @@ struct inet_sock icsk_inet read_mostly r
|
|||
struct request_sock_queue icsk_accept_queue
|
||||
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 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_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_min
|
||||
u32 icsk_rto_max read_mostly tcp_reset_xmit_timer
|
||||
|
|
|
|||
|
|
@ -5,11 +5,12 @@
|
|||
inet_sock struct fast path usage breakdown
|
||||
==========================================
|
||||
|
||||
======================= ===================== =================== =================== ======================================================================================================
|
||||
======================== ===================== =================== =================== ======================================================================================================
|
||||
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 ipv6_pinfo* pinet6
|
||||
struct ipv6_fl_socklist* ipv6_fl_list read_mostly tcp_v6_connect,__ip6_datagram_connect,udpv6_sendmsg,rawv6_sendmsg
|
||||
be16 inet_sport read_mostly __tcp_transmit_skb
|
||||
be32 inet_daddr read_mostly ip_select_ident_segs
|
||||
be32 inet_rcv_saddr
|
||||
|
|
@ -43,4 +44,4 @@ be32 mc_addr
|
|||
struct ip_mc_socklist* mc_list
|
||||
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_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_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_workaround_signed_windows tcp_select_window
|
||||
int sysctl_tcp_limit_output_bytes read_mostly tcp_small_queue_check(tcp_write_xmit)
|
||||
|
|
|
|||
|
|
@ -71,7 +71,8 @@ Userspace interface
|
|||
The userspace interface is divided in control operations and low-level data
|
||||
exchange operation.
|
||||
|
||||
CONTROL OPERATIONS:
|
||||
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:
|
||||
|
|
@ -100,7 +101,8 @@ relevant information such as the supported NFC protocols.
|
|||
All polling operations requested through one netlink socket are stopped when
|
||||
it's closed.
|
||||
|
||||
LOW-LEVEL DATA EXCHANGE:
|
||||
Low-level data exchange
|
||||
-----------------------
|
||||
|
||||
The userspace must use PF_NFC sockets to perform any data communication with
|
||||
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.
|
||||
|
||||
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
|
||||
statistics are supported in the following commands:
|
||||
|
||||
- `ETHTOOL_MSG_PAUSE_GET`
|
||||
- `ETHTOOL_MSG_FEC_GET`
|
||||
- `ETHTOOL_MSG_LINKSTATE_GET`
|
||||
- `ETHTOOL_MSG_MM_GET`
|
||||
- `ETHTOOL_MSG_PAUSE_GET`
|
||||
- `ETHTOOL_MSG_TSINFO_GET`
|
||||
|
||||
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.
|
||||
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
|
||||
==========
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
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:
|
||||
|
||||
* NIC performs encrypt/decrypt
|
||||
* Kernel does everything else
|
||||
|
||||
* IPsec packet offload:
|
||||
|
||||
* NIC performs encrypt/decrypt
|
||||
* NIC does encapsulation
|
||||
* 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
|
||||
libreswan or KAME/raccoon, but the iproute2 'ip xfrm' command set can
|
||||
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 \
|
||||
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 \
|
||||
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 \
|
||||
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
|
||||
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)
|
||||
xfrm_state_hold(xs);
|
||||
|
||||
store the state information into the skb::
|
||||
2. Store the state information into the skb::
|
||||
|
||||
sp = secpath_set(skb);
|
||||
if (!sp) return;
|
||||
sp->xvec[sp->len++] = xs;
|
||||
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->flags = CRYPTO_DONE;
|
||||
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
|
||||
xfrm_replay_advance_esn() for RX, and xfrm_replay_overflow_offload_esn for TX.
|
||||
|
|
@ -1,8 +1,8 @@
|
|||
.. SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
====
|
||||
XFRM
|
||||
====
|
||||
=========
|
||||
XFRM sync
|
||||
=========
|
||||
|
||||
The sync patches work is based on initial patches from
|
||||
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
|
||||
|
||||
1) Message Structure
|
||||
----------------------
|
||||
--------------------
|
||||
|
||||
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
|
||||
to get notified of these events.
|
||||
|
||||
2) TLVS reflect the different parameters:
|
||||
-----------------------------------------
|
||||
2) TLVS reflect the different parameters
|
||||
----------------------------------------
|
||||
|
||||
a) byte value (XFRMA_LTIME_VAL)
|
||||
|
||||
This TLV carries the running/current counter for byte lifetime since
|
||||
last event.
|
||||
This TLV carries the running/current counter for byte lifetime since
|
||||
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
|
||||
last event.
|
||||
This TLV carries the running/current counter for replay sequence since
|
||||
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
|
||||
when the replay sequence is exceeded.
|
||||
This TLV carries the threshold being used by the kernel to trigger events
|
||||
when the replay sequence is exceeded.
|
||||
|
||||
d) expiry timer (XFRMA_ETIMER_THRESH)
|
||||
|
||||
This is a timer value in milliseconds which is used as the nagle
|
||||
value to rate limit the events.
|
||||
This is a timer value in milliseconds which is used as the nagle
|
||||
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
|
||||
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:
|
||||
|
||||
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
|
||||
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
|
||||
----------------
|
||||
|
|
@ -134,41 +136,42 @@ in incremental packet count. The default is two packets.
|
|||
a) XFRM_MSG_GETAE issued by user-->kernel.
|
||||
XFRM_MSG_GETAE does not carry any TLVs.
|
||||
|
||||
The response is a XFRM_MSG_NEWAE which is formatted based on what
|
||||
XFRM_MSG_GETAE queried for.
|
||||
The response is a XFRM_MSG_NEWAE which is formatted based on what
|
||||
XFRM_MSG_GETAE queried for.
|
||||
|
||||
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
|
||||
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
|
||||
|
||||
b) XFRM_MSG_NEWAE is issued by either user space to configure
|
||||
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
|
||||
appropriate TLV.
|
||||
any of the values or threshold parameters can be updated by passing the
|
||||
appropriate TLV.
|
||||
|
||||
A response is issued back to the sender in user space to indicate success
|
||||
or failure.
|
||||
A response is issued back to the sender in user space to indicate success
|
||||
or failure.
|
||||
|
||||
In the case of success, additionally an event with
|
||||
XFRM_MSG_NEWAE is also issued to any listeners as described in iii).
|
||||
In the case of success, additionally an event with
|
||||
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 XFRM_MSG_GETAE message.
|
||||
The threshold TLVs will be included if explicitly requested in
|
||||
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).
|
||||
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 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.
|
||||
|
||||
In such a case either XFRM_AE_CR (replay exceeded) or XFRM_AE_CE (timeout
|
||||
|
|
@ -176,8 +179,8 @@ happened) is set to inform the user what happened.
|
|||
Note the two flags are mutually exclusive.
|
||||
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
|
||||
there is a period where the timer threshold expires with no packets
|
||||
|
|
@ -4,8 +4,8 @@
|
|||
XFRM Syscall
|
||||
============
|
||||
|
||||
/proc/sys/net/core/xfrm_* Variables:
|
||||
====================================
|
||||
/proc/sys/net/core/xfrm_* Variables
|
||||
===================================
|
||||
|
||||
xfrm_acq_expires - INTEGER
|
||||
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/clk/rockchip/
|
||||
F: drivers/i2c/busses/i2c-rk3x.c
|
||||
F: drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c
|
||||
F: sound/soc/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/unimac.h
|
||||
F: drivers/net/mdio/mdio-bcm-unimac.c
|
||||
F: include/linux/platform_data/bcmgenet.h
|
||||
F: include/linux/platform_data/mdio-bcm-unimac.h
|
||||
|
||||
BROADCOM IPROC ARM ARCHITECTURE
|
||||
|
|
@ -14054,7 +14054,7 @@ F: tools/testing/selftests/landlock/
|
|||
K: landlock
|
||||
K: LANDLOCK
|
||||
|
||||
LANTIQ / INTEL Ethernet drivers
|
||||
LANTIQ / MAXLINEAR / INTEL Ethernet DSA drivers
|
||||
M: Hauke Mehrtens <hauke@hauke-m.de>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
|
|
@ -14062,6 +14062,7 @@ F: Documentation/devicetree/bindings/net/dsa/lantiq,gswip.yaml
|
|||
F: drivers/net/dsa/lantiq/*
|
||||
F: drivers/net/ethernet/lantiq_xrx200.c
|
||||
F: net/dsa/tag_gswip.c
|
||||
F: net/dsa/tag_mxl-gsw1xx.c
|
||||
|
||||
LANTIQ MIPS ARCHITECTURE
|
||||
M: John Crispin <john@phrozen.org>
|
||||
|
|
@ -15413,14 +15414,12 @@ S: Supported
|
|||
F: drivers/net/phy/mxl-86110.c
|
||||
F: drivers/net/phy/mxl-gpy.c
|
||||
|
||||
MCAN MMIO DEVICE DRIVER
|
||||
M: Chandrasekar Ramakrishnan <rcsekar@samsung.com>
|
||||
MCAN DEVICE DRIVER
|
||||
M: Markus Schneider-Pargmann <msp@baylibre.com>
|
||||
L: linux-can@vger.kernel.org
|
||||
S: Maintained
|
||||
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/m_can.h
|
||||
F: drivers/net/can/m_can/m_can_platform.c
|
||||
F: drivers/net/can/m_can/
|
||||
|
||||
MCBA MICROCHIP CAN BUS ANALYZER TOOL DRIVER
|
||||
R: Yasushi SHOJI <yashi@spacecubics.com>
|
||||
|
|
@ -17456,6 +17455,14 @@ S: Maintained
|
|||
F: Documentation/devicetree/bindings/net/motorcomm,yt8xxx.yaml
|
||||
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
|
||||
M: Jiri Slaby <jirislaby@kernel.org>
|
||||
S: Maintained
|
||||
|
|
@ -17621,6 +17628,14 @@ T: git git://linuxtv.org/media.git
|
|||
F: Documentation/devicetree/bindings/media/i2c/aptina,mt9v111.yaml
|
||||
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)
|
||||
M: Lee Jones <lee@kernel.org>
|
||||
S: Maintained
|
||||
|
|
@ -18062,6 +18077,7 @@ L: netdev@vger.kernel.org
|
|||
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-next.git
|
||||
F: Documentation/networking/xfrm/
|
||||
F: include/net/xfrm.h
|
||||
F: include/uapi/linux/xfrm.h
|
||||
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
|
||||
|
||||
QUALCOMM BLUETOOTH DRIVER
|
||||
M: Bartosz Golaszewski <brgl@bgdev.pl>
|
||||
L: linux-arm-msm@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/bluetooth/btqca.[ch]
|
||||
|
|
@ -27684,6 +27701,7 @@ M: Jason A. Donenfeld <Jason@zx2c4.com>
|
|||
L: wireguard@lists.zx2c4.com
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
F: Documentation/netlink/specs/wireguard.yaml
|
||||
F: drivers/net/wireguard/
|
||||
F: tools/testing/selftests/wireguard/
|
||||
|
||||
|
|
|
|||
|
|
@ -16,7 +16,6 @@
|
|||
#include <linux/init.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/phy.h>
|
||||
#include <linux/phy_fixed.h>
|
||||
#include <asm/machdep.h>
|
||||
#include <asm/coldfire.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)
|
||||
{
|
||||
m5272_uarts_init();
|
||||
fixed_phy_add(&nettel_fixed_phy_status);
|
||||
clkdev_add_table(m5272_clk_lookup, ARRAY_SIZE(m5272_clk_lookup));
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -256,12 +256,6 @@ static int __init bcm47xx_cpu_fixes(void)
|
|||
}
|
||||
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)
|
||||
{
|
||||
switch (bcm47xx_bus_type) {
|
||||
|
|
@ -282,7 +276,6 @@ static int __init bcm47xx_register_bus_complete(void)
|
|||
bcm47xx_leds_register();
|
||||
bcm47xx_workarounds();
|
||||
|
||||
fixed_phy_add(&bcm47xx_fixed_phy_status);
|
||||
return 0;
|
||||
}
|
||||
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);
|
||||
|
||||
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;
|
||||
struct sock *sk = sock->sk;
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
/* Do not edit directly, auto-generated from: */
|
||||
/* Documentation/netlink/specs/binder.yaml */
|
||||
/* YNL-GEN kernel source */
|
||||
/* To regenerate run: tools/net/ynl/ynl-regen.sh */
|
||||
|
||||
#include <net/netlink.h>
|
||||
#include <net/genetlink.h>
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
/* Do not edit directly, auto-generated from: */
|
||||
/* Documentation/netlink/specs/binder.yaml */
|
||||
/* YNL-GEN kernel header */
|
||||
/* To regenerate run: tools/net/ynl/ynl-regen.sh */
|
||||
|
||||
#ifndef _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.
|
||||
*/
|
||||
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)
|
||||
goto out;
|
||||
|
||||
|
|
@ -458,7 +458,7 @@ static struct socket *drbd_try_connect(struct drbd_connection *connection)
|
|||
* stay C_WF_CONNECTION, don't go Disconnecting! */
|
||||
disconnect_on_error = 0;
|
||||
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:
|
||||
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);
|
||||
|
||||
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)
|
||||
goto out;
|
||||
|
||||
|
|
|
|||
|
|
@ -188,6 +188,7 @@ config BT_HCIUART_3WIRE
|
|||
bool "Three-wire UART (H5) protocol support"
|
||||
depends on BT_HCIUART
|
||||
depends on BT_HCIUART_SERDEV
|
||||
select CRC_CCITT
|
||||
help
|
||||
The HCI Three-wire UART Transport Layer makes it possible to
|
||||
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);
|
||||
}
|
||||
|
||||
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)
|
||||
return -ENOMEM;
|
||||
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@
|
|||
|
||||
#include <net/bluetooth/bluetooth.h>
|
||||
#include <net/bluetooth/hci_core.h>
|
||||
#include <net/bluetooth/hci_drv.h>
|
||||
|
||||
#include "btintel.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);
|
||||
}
|
||||
|
||||
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,
|
||||
u32 dxstate)
|
||||
{
|
||||
|
|
@ -2355,6 +2361,63 @@ static bool btintel_pcie_wakeup(struct hci_dev *hdev)
|
|||
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)
|
||||
{
|
||||
int err;
|
||||
|
|
@ -2381,6 +2444,7 @@ static int btintel_pcie_setup_hdev(struct btintel_pcie_data *data)
|
|||
hdev->set_bdaddr = btintel_set_bdaddr;
|
||||
hdev->reset = btintel_pcie_reset;
|
||||
hdev->wakeup = btintel_pcie_wakeup;
|
||||
hdev->hci_drv = &btintel_pcie_hci_drv;
|
||||
|
||||
err = hci_register_dev(hdev);
|
||||
if (err < 0) {
|
||||
|
|
@ -2519,6 +2583,48 @@ static void btintel_pcie_coredump(struct device *dev)
|
|||
}
|
||||
#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)
|
||||
{
|
||||
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 ?
|
||||
BTINTEL_PCIE_STATE_D3_HOT : BTINTEL_PCIE_STATE_D3_COLD);
|
||||
|
||||
data->gp0_received = false;
|
||||
data->pm_sx_event = mesg.event;
|
||||
|
||||
start = ktime_get();
|
||||
|
||||
/* Refer: 6.4.11.7 -> Platform power management */
|
||||
btintel_pcie_wr_sleep_cntrl(data, dxstate);
|
||||
err = wait_event_timeout(data->gp0_wait_q, data->gp0_received,
|
||||
msecs_to_jiffies(BTINTEL_DEFAULT_INTR_TIMEOUT_MS));
|
||||
if (err == 0) {
|
||||
bt_dev_err(data->hdev,
|
||||
"Timeout (%u ms) on alive interrupt for D3 entry",
|
||||
BTINTEL_DEFAULT_INTR_TIMEOUT_MS);
|
||||
return -EBUSY;
|
||||
}
|
||||
err = btintel_pcie_set_dxstate(data, dxstate);
|
||||
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
bt_dev_dbg(data->hdev,
|
||||
"device entered into d3 state from d0 in %lld us",
|
||||
ktime_to_us(ktime_get() - start));
|
||||
|
||||
return 0;
|
||||
return err;
|
||||
}
|
||||
|
||||
static int btintel_pcie_suspend(struct device *dev)
|
||||
|
|
@ -2581,21 +2681,50 @@ static int btintel_pcie_resume(struct device *dev)
|
|||
|
||||
start = ktime_get();
|
||||
|
||||
/* Refer: 6.4.11.7 -> Platform power management */
|
||||
btintel_pcie_wr_sleep_cntrl(data, BTINTEL_PCIE_STATE_D0);
|
||||
err = wait_event_timeout(data->gp0_wait_q, data->gp0_received,
|
||||
msecs_to_jiffies(BTINTEL_DEFAULT_INTR_TIMEOUT_MS));
|
||||
if (err == 0) {
|
||||
bt_dev_err(data->hdev,
|
||||
"Timeout (%u ms) on alive interrupt for D0 entry",
|
||||
BTINTEL_DEFAULT_INTR_TIMEOUT_MS);
|
||||
return -EBUSY;
|
||||
/* When the system enters S4 (hibernate) mode, bluetooth device loses
|
||||
* power, which results in the erasure of its loaded firmware.
|
||||
* Consequently, function level reset (flr) is required on system
|
||||
* resume to bring the controller back into an operational state by
|
||||
* initiating a new firmware download.
|
||||
*/
|
||||
|
||||
if (data->pm_sx_event == PM_EVENT_FREEZE ||
|
||||
data->pm_sx_event == PM_EVENT_HIBERNATE) {
|
||||
set_bit(BTINTEL_PCIE_CORE_HALTED, &data->flags);
|
||||
btintel_pcie_reset(data->hdev);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Refer: 6.4.11.7 -> Platform power management */
|
||||
err = btintel_pcie_set_dxstate(data, BTINTEL_PCIE_STATE_D0);
|
||||
|
||||
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 0;
|
||||
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 = {
|
||||
|
|
|
|||
|
|
@ -158,6 +158,8 @@ enum msix_mbox_int_causes {
|
|||
/* Default interrupt timeout in msec */
|
||||
#define BTINTEL_DEFAULT_INTR_TIMEOUT_MS 3000
|
||||
|
||||
#define BTINTEL_PCIE_DX_TRANSITION_MAX_RETRIES 3
|
||||
|
||||
/* The number of descriptors in TX queues */
|
||||
#define BTINTEL_PCIE_TX_DESCS_COUNT 32
|
||||
|
||||
|
|
@ -464,6 +466,7 @@ struct btintel_pcie_dump_header {
|
|||
* @txq: TX Queue struct
|
||||
* @rxq: RX Queue struct
|
||||
* @alive_intr_ctxt: Alive interrupt context
|
||||
* @pm_sx_event: PM event on which system got suspended
|
||||
*/
|
||||
struct btintel_pcie_data {
|
||||
struct pci_dev *pdev;
|
||||
|
|
@ -513,6 +516,7 @@ struct btintel_pcie_data {
|
|||
u32 alive_intr_ctxt;
|
||||
struct btintel_pcie_dbgc dbgc;
|
||||
struct btintel_pcie_dump_header dmp_hdr;
|
||||
u8 pm_sx_event;
|
||||
};
|
||||
|
||||
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);
|
||||
|
||||
pm_runtime_mark_last_busy(bdev->dev);
|
||||
pm_runtime_put_autosuspend(bdev->dev);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -72,6 +72,7 @@ enum btrtl_chip_id {
|
|||
CHIP_ID_8851B = 36,
|
||||
CHIP_ID_8922A = 44,
|
||||
CHIP_ID_8852BT = 47,
|
||||
CHIP_ID_8761C = 51,
|
||||
};
|
||||
|
||||
struct id_table {
|
||||
|
|
@ -230,6 +231,14 @@ static const struct id_table ic_id_table[] = {
|
|||
.cfg_name = "rtl_bt/rtl8761bu_config",
|
||||
.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 */
|
||||
{ IC_INFO(RTL_ROM_LMP_8822B, 0xc, 0x8, HCI_UART),
|
||||
.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))
|
||||
continue;
|
||||
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;
|
||||
if ((ic_id_table[i].match_flags & IC_MATCH_FL_HCIBUS) &&
|
||||
(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_8922A, 44 }, /* 8922A */
|
||||
{ RTL_ROM_LMP_8852A, 47 }, /* 8852BT */
|
||||
{ RTL_ROM_LMP_8761A, 51 }, /* 8761C */
|
||||
};
|
||||
|
||||
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_8922A:
|
||||
case CHIP_ID_8852BT:
|
||||
case CHIP_ID_8761C:
|
||||
hci_set_quirk(hdev, HCI_QUIRK_WIDEBAND_SPEECH_SUPPORTED);
|
||||
|
||||
/* 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/rtl8761bu_fw.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_config.bin");
|
||||
MODULE_FIRMWARE("rtl_bt/rtl8821c_fw.bin");
|
||||
|
|
|
|||
|
|
@ -504,6 +504,8 @@ static const struct usb_device_id quirks_table[] = {
|
|||
/* Realtek 8821CE Bluetooth devices */
|
||||
{ USB_DEVICE(0x13d3, 0x3529), .driver_info = BTUSB_REALTEK |
|
||||
BTUSB_WIDEBAND_SPEECH },
|
||||
{ USB_DEVICE(0x13d3, 0x3533), .driver_info = BTUSB_REALTEK |
|
||||
BTUSB_WIDEBAND_SPEECH },
|
||||
|
||||
/* Realtek 8822CE Bluetooth devices */
|
||||
{ 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 */
|
||||
{ USB_DEVICE(0x0bda, 0x8520), .driver_info = BTUSB_REALTEK |
|
||||
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 */
|
||||
{ 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 */
|
||||
{ USB_DEVICE(0x0489, 0xe134), .driver_info = BTUSB_MEDIATEK |
|
||||
BTUSB_WIDEBAND_SPEECH },
|
||||
{ USB_DEVICE(0x0489, 0xe135), .driver_info = BTUSB_MEDIATEK |
|
||||
BTUSB_WIDEBAND_SPEECH },
|
||||
{ USB_DEVICE(0x13d3, 0x3620), .driver_info = BTUSB_MEDIATEK |
|
||||
BTUSB_WIDEBAND_SPEECH },
|
||||
{ USB_DEVICE(0x13d3, 0x3621), .driver_info = BTUSB_MEDIATEK |
|
||||
|
|
@ -685,6 +695,8 @@ static const struct usb_device_id quirks_table[] = {
|
|||
BTUSB_WIDEBAND_SPEECH },
|
||||
{ USB_DEVICE(0x0489, 0xe153), .driver_info = BTUSB_MEDIATEK |
|
||||
BTUSB_WIDEBAND_SPEECH },
|
||||
{ USB_DEVICE(0x0489, 0xe170), .driver_info = BTUSB_MEDIATEK |
|
||||
BTUSB_WIDEBAND_SPEECH },
|
||||
{ USB_DEVICE(0x04ca, 0x3804), .driver_info = BTUSB_MEDIATEK |
|
||||
BTUSB_WIDEBAND_SPEECH },
|
||||
{ USB_DEVICE(0x04ca, 0x38e4), .driver_info = BTUSB_MEDIATEK |
|
||||
|
|
@ -781,6 +793,8 @@ static const struct usb_device_id quirks_table[] = {
|
|||
BTUSB_WIDEBAND_SPEECH },
|
||||
{ USB_DEVICE(0x2b89, 0x8761), .driver_info = BTUSB_REALTEK |
|
||||
BTUSB_WIDEBAND_SPEECH },
|
||||
{ USB_DEVICE(0x2b89, 0x6275), .driver_info = BTUSB_REALTEK |
|
||||
BTUSB_WIDEBAND_SPEECH },
|
||||
|
||||
/* Additional Realtek 8821AE Bluetooth devices */
|
||||
{ USB_DEVICE(0x0b05, 0x17dc), .driver_info = BTUSB_REALTEK },
|
||||
|
|
@ -1131,6 +1145,24 @@ static void btusb_qca_reset(struct hci_dev *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)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
|
@ -2808,6 +2840,19 @@ static int btusb_mtk_reset(struct hci_dev *hdev, void *rst_data)
|
|||
btusb_stop_traffic(data);
|
||||
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);
|
||||
|
||||
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[] = {
|
||||
{ 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;
|
||||
hci_devcd_register(hdev, btusb_coredump_qca, btusb_dump_hdr_qca, NULL);
|
||||
data->setup_on_usb = btusb_setup_qca;
|
||||
hdev->classify_pkt_type = btusb_classify_qca_pkt_type;
|
||||
hdev->shutdown = btusb_shutdown_qca;
|
||||
hdev->set_bdaddr = btusb_set_bdaddr_wcn6855;
|
||||
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");
|
||||
|
||||
pm_runtime_get(bdev->dev);
|
||||
pm_runtime_mark_last_busy(bdev->dev);
|
||||
pm_runtime_put_autosuspend(bdev->dev);
|
||||
|
||||
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);
|
||||
if (bcm->dev && bcm_device_exists(bcm->dev)) {
|
||||
pm_runtime_get(bcm->dev->dev);
|
||||
pm_runtime_mark_last_busy(bcm->dev->dev);
|
||||
pm_runtime_put_autosuspend(bcm->dev->dev);
|
||||
}
|
||||
mutex_unlock(&bcm_device_lock);
|
||||
|
|
@ -748,10 +746,8 @@ static struct sk_buff *bcm_dequeue(struct hci_uart *hu)
|
|||
|
||||
skb = skb_dequeue(&bcm->txq);
|
||||
|
||||
if (bdev) {
|
||||
pm_runtime_mark_last_busy(bdev->dev);
|
||||
if (bdev)
|
||||
pm_runtime_put_autosuspend(bdev->dev);
|
||||
}
|
||||
|
||||
mutex_unlock(&bcm_device_lock);
|
||||
|
||||
|
|
|
|||
|
|
@ -7,6 +7,8 @@
|
|||
*/
|
||||
|
||||
#include <linux/acpi.h>
|
||||
#include <linux/bitrev.h>
|
||||
#include <linux/crc-ccitt.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/gpio/consumer.h>
|
||||
#include <linux/kernel.h>
|
||||
|
|
@ -58,6 +60,7 @@ enum {
|
|||
H5_TX_ACK_REQ, /* Pending ack to send */
|
||||
H5_WAKEUP_DISABLE, /* Device cannot wake host */
|
||||
H5_HW_FLOW_CONTROL, /* Use HW flow control */
|
||||
H5_CRC, /* Use CRC */
|
||||
};
|
||||
|
||||
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)
|
||||
{
|
||||
/* Sliding window size (first 3 bits) */
|
||||
return h5->tx_win & 0x07;
|
||||
/* Sliding window size (first 3 bits) and CRC request (fifth bit). */
|
||||
return (h5->tx_win & 0x07) | 0x10;
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
struct h5 *h5;
|
||||
const unsigned char sync[] = { 0x01, 0x7e };
|
||||
|
||||
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);
|
||||
|
||||
/* Send initial sync request */
|
||||
h5_link_control(hu, sync, sizeof(sync));
|
||||
mod_timer(&h5->timer, jiffies + H5_SYNC_TIMEOUT);
|
||||
/*
|
||||
* Wait one jiffy because the UART layer won't set HCI_UART_PROTO_READY,
|
||||
* which allows us to send link packets, until this function returns.
|
||||
*/
|
||||
mod_timer(&h5->timer, jiffies + 1);
|
||||
|
||||
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_req, 3);
|
||||
} 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);
|
||||
assign_bit(H5_CRC, &h5->flags, data[2] & 0x10);
|
||||
}
|
||||
BT_DBG("Three-wire init complete. tx_win %u", h5->tx_win);
|
||||
h5->state = H5_ACTIVE;
|
||||
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)
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
|
@ -556,6 +579,7 @@ static void h5_reset_rx(struct h5 *h5)
|
|||
h5->rx_func = h5_rx_delimiter;
|
||||
h5->rx_pending = 0;
|
||||
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)
|
||||
|
|
@ -592,7 +616,6 @@ static int h5_recv(struct hci_uart *hu, const void *data, int count)
|
|||
|
||||
if (hu->serdev) {
|
||||
pm_runtime_get(&hu->serdev->dev);
|
||||
pm_runtime_mark_last_busy(&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) {
|
||||
pm_runtime_get_sync(&hu->serdev->dev);
|
||||
pm_runtime_mark_last_busy(&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 sk_buff *nskb;
|
||||
u8 hdr[4];
|
||||
u16 crc;
|
||||
int i;
|
||||
|
||||
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? */
|
||||
if (pkt_type == HCI_ACLDATA_PKT || pkt_type == HCI_COMMAND_PKT) {
|
||||
hdr[0] |= 1 << 7;
|
||||
hdr[0] |= (test_bit(H5_CRC, &h5->flags) && 1) << 6;
|
||||
hdr[0] |= h5->tx_seq;
|
||||
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++)
|
||||
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);
|
||||
|
||||
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 */
|
||||
pm_runtime_get(&idev->pdev->dev);
|
||||
pm_runtime_mark_last_busy(&idev->pdev->dev);
|
||||
pm_runtime_put_autosuspend(&idev->pdev->dev);
|
||||
|
||||
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) {
|
||||
if (intel->hu->tty->dev->parent == idev->pdev->dev.parent) {
|
||||
pm_runtime_get(&idev->pdev->dev);
|
||||
pm_runtime_mark_last_busy(&idev->pdev->dev);
|
||||
pm_runtime_put_autosuspend(&idev->pdev->dev);
|
||||
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) {
|
||||
if (hu->tty->dev->parent == idev->pdev->dev.parent) {
|
||||
pm_runtime_get_sync(&idev->pdev->dev);
|
||||
pm_runtime_mark_last_busy(&idev->pdev->dev);
|
||||
pm_runtime_put_autosuspend(&idev->pdev->dev);
|
||||
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,
|
||||
struct devlink_param_gset_ctx *ctx)
|
||||
struct devlink_param_gset_ctx *ctx,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
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,
|
||||
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_cptpf_dev *cptpf = cpt_dl->cptpf;
|
||||
|
|
|
|||
|
|
@ -6,8 +6,7 @@
|
|||
*
|
||||
* Copyright IBM Corp. 2025
|
||||
*/
|
||||
#define KMSG_COMPONENT "dibs"
|
||||
#define pr_fmt(fmt) KMSG_COMPONENT ": " fmt
|
||||
#define pr_fmt(fmt) "dibs: " fmt
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/types.h>
|
||||
|
|
@ -254,9 +253,6 @@ static int __init dibs_init(void)
|
|||
{
|
||||
int rc;
|
||||
|
||||
memset(clients, 0, sizeof(clients));
|
||||
max_client = 0;
|
||||
|
||||
dibs_class = class_create("dibs");
|
||||
if (IS_ERR(dibs_class))
|
||||
return PTR_ERR(dibs_class);
|
||||
|
|
@ -274,5 +270,5 @@ static void __exit dibs_exit(void)
|
|||
class_destroy(dibs_class);
|
||||
}
|
||||
|
||||
module_init(dibs_init);
|
||||
subsys_initcall(dibs_init);
|
||||
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);
|
||||
if (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,
|
||||
prop->phase_range.min))
|
||||
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 ||
|
||||
phase_adj < pin->prop.phase_range.min) {
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
/* Do not edit directly, auto-generated from: */
|
||||
/* Documentation/netlink/specs/dpll.yaml */
|
||||
/* YNL-GEN kernel source */
|
||||
/* To regenerate run: tools/net/ynl/ynl-regen.sh */
|
||||
|
||||
#include <net/netlink.h>
|
||||
#include <net/genetlink.h>
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
/* Do not edit directly, auto-generated from: */
|
||||
/* Documentation/netlink/specs/dpll.yaml */
|
||||
/* YNL-GEN kernel header */
|
||||
/* To regenerate run: tools/net/ynl/ynl-regen.sh */
|
||||
|
||||
#ifndef _LINUX_DPLL_GEN_H
|
||||
#define _LINUX_DPLL_GEN_H
|
||||
|
|
|
|||
|
|
@ -1,7 +1,8 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
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
|
||||
zl3073x_i2c-objs := i2c.o
|
||||
|
|
|
|||
|
|
@ -129,47 +129,6 @@ const struct regmap_config zl3073x_regmap_config = {
|
|||
};
|
||||
EXPORT_SYMBOL_NS_GPL(zl3073x_regmap_config, "ZL3073X");
|
||||
|
||||
/**
|
||||
* zl3073x_ref_freq_factorize - factorize given frequency
|
||||
* @freq: input frequency
|
||||
* @base: base frequency
|
||||
* @mult: multiplier
|
||||
*
|
||||
* Checks if the given frequency can be factorized using one of the
|
||||
* supported base frequencies. If so the base frequency and multiplier
|
||||
* are stored into appropriate parameters if they are not NULL.
|
||||
*
|
||||
* Return: 0 on success, -EINVAL if the frequency cannot be factorized
|
||||
*/
|
||||
int
|
||||
zl3073x_ref_freq_factorize(u32 freq, u16 *base, u16 *mult)
|
||||
{
|
||||
static const u16 base_freqs[] = {
|
||||
1, 2, 4, 5, 8, 10, 16, 20, 25, 32, 40, 50, 64, 80, 100, 125,
|
||||
128, 160, 200, 250, 256, 320, 400, 500, 625, 640, 800, 1000,
|
||||
1250, 1280, 1600, 2000, 2500, 3125, 3200, 4000, 5000, 6250,
|
||||
6400, 8000, 10000, 12500, 15625, 16000, 20000, 25000, 31250,
|
||||
32000, 40000, 50000, 62500,
|
||||
};
|
||||
u32 div;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(base_freqs); i++) {
|
||||
div = freq / base_freqs[i];
|
||||
|
||||
if (div <= U16_MAX && (freq % base_freqs[i]) == 0) {
|
||||
if (base)
|
||||
*base = base_freqs[i];
|
||||
if (mult)
|
||||
*mult = div;
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static bool
|
||||
zl3073x_check_reg(struct zl3073x_dev *zldev, unsigned int reg, size_t size)
|
||||
{
|
||||
|
|
@ -593,190 +552,6 @@ int zl3073x_write_hwreg_seq(struct zl3073x_dev *zldev,
|
|||
return rc;
|
||||
}
|
||||
|
||||
/**
|
||||
* zl3073x_ref_state_fetch - get input reference state
|
||||
* @zldev: pointer to zl3073x_dev structure
|
||||
* @index: input reference index to fetch state for
|
||||
*
|
||||
* Function fetches information for the given input reference that are
|
||||
* invariant and stores them for later use.
|
||||
*
|
||||
* Return: 0 on success, <0 on error
|
||||
*/
|
||||
static int
|
||||
zl3073x_ref_state_fetch(struct zl3073x_dev *zldev, u8 index)
|
||||
{
|
||||
struct zl3073x_ref *input = &zldev->ref[index];
|
||||
u8 ref_config;
|
||||
int rc;
|
||||
|
||||
/* If the input is differential then the configuration for N-pin
|
||||
* reference is ignored and P-pin config is used for both.
|
||||
*/
|
||||
if (zl3073x_is_n_pin(index) &&
|
||||
zl3073x_ref_is_diff(zldev, index - 1)) {
|
||||
input->enabled = zl3073x_ref_is_enabled(zldev, index - 1);
|
||||
input->diff = true;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
guard(mutex)(&zldev->multiop_lock);
|
||||
|
||||
/* Read reference configuration */
|
||||
rc = zl3073x_mb_op(zldev, ZL_REG_REF_MB_SEM, ZL_REF_MB_SEM_RD,
|
||||
ZL_REG_REF_MB_MASK, BIT(index));
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
/* Read ref_config register */
|
||||
rc = zl3073x_read_u8(zldev, ZL_REG_REF_CONFIG, &ref_config);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
input->enabled = FIELD_GET(ZL_REF_CONFIG_ENABLE, ref_config);
|
||||
input->diff = FIELD_GET(ZL_REF_CONFIG_DIFF_EN, ref_config);
|
||||
|
||||
dev_dbg(zldev->dev, "REF%u is %s and configured as %s\n", index,
|
||||
str_enabled_disabled(input->enabled),
|
||||
input->diff ? "differential" : "single-ended");
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
/**
|
||||
* zl3073x_out_state_fetch - get output state
|
||||
* @zldev: pointer to zl3073x_dev structure
|
||||
* @index: output index to fetch state for
|
||||
*
|
||||
* Function fetches information for the given output (not output pin)
|
||||
* that are invariant and stores them for later use.
|
||||
*
|
||||
* Return: 0 on success, <0 on error
|
||||
*/
|
||||
static int
|
||||
zl3073x_out_state_fetch(struct zl3073x_dev *zldev, u8 index)
|
||||
{
|
||||
struct zl3073x_out *out = &zldev->out[index];
|
||||
u8 output_ctrl, output_mode;
|
||||
int rc;
|
||||
|
||||
/* Read output configuration */
|
||||
rc = zl3073x_read_u8(zldev, ZL_REG_OUTPUT_CTRL(index), &output_ctrl);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
/* Store info about output enablement and synthesizer the output
|
||||
* is connected to.
|
||||
*/
|
||||
out->enabled = FIELD_GET(ZL_OUTPUT_CTRL_EN, output_ctrl);
|
||||
out->synth = FIELD_GET(ZL_OUTPUT_CTRL_SYNTH_SEL, output_ctrl);
|
||||
|
||||
dev_dbg(zldev->dev, "OUT%u is %s and connected to SYNTH%u\n", index,
|
||||
str_enabled_disabled(out->enabled), out->synth);
|
||||
|
||||
guard(mutex)(&zldev->multiop_lock);
|
||||
|
||||
/* Read output configuration */
|
||||
rc = zl3073x_mb_op(zldev, ZL_REG_OUTPUT_MB_SEM, ZL_OUTPUT_MB_SEM_RD,
|
||||
ZL_REG_OUTPUT_MB_MASK, BIT(index));
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
/* Read output_mode */
|
||||
rc = zl3073x_read_u8(zldev, ZL_REG_OUTPUT_MODE, &output_mode);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
/* Extract and store output signal format */
|
||||
out->signal_format = FIELD_GET(ZL_OUTPUT_MODE_SIGNAL_FORMAT,
|
||||
output_mode);
|
||||
|
||||
dev_dbg(zldev->dev, "OUT%u has signal format 0x%02x\n", index,
|
||||
out->signal_format);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
/**
|
||||
* zl3073x_synth_state_fetch - get synth state
|
||||
* @zldev: pointer to zl3073x_dev structure
|
||||
* @index: synth index to fetch state for
|
||||
*
|
||||
* Function fetches information for the given synthesizer that are
|
||||
* invariant and stores them for later use.
|
||||
*
|
||||
* Return: 0 on success, <0 on error
|
||||
*/
|
||||
static int
|
||||
zl3073x_synth_state_fetch(struct zl3073x_dev *zldev, u8 index)
|
||||
{
|
||||
struct zl3073x_synth *synth = &zldev->synth[index];
|
||||
u16 base, m, n;
|
||||
u8 synth_ctrl;
|
||||
u32 mult;
|
||||
int rc;
|
||||
|
||||
/* Read synth control register */
|
||||
rc = zl3073x_read_u8(zldev, ZL_REG_SYNTH_CTRL(index), &synth_ctrl);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
/* Store info about synth enablement and DPLL channel the synth is
|
||||
* driven by.
|
||||
*/
|
||||
synth->enabled = FIELD_GET(ZL_SYNTH_CTRL_EN, synth_ctrl);
|
||||
synth->dpll = FIELD_GET(ZL_SYNTH_CTRL_DPLL_SEL, synth_ctrl);
|
||||
|
||||
dev_dbg(zldev->dev, "SYNTH%u is %s and driven by DPLL%u\n", index,
|
||||
str_enabled_disabled(synth->enabled), synth->dpll);
|
||||
|
||||
guard(mutex)(&zldev->multiop_lock);
|
||||
|
||||
/* Read synth configuration */
|
||||
rc = zl3073x_mb_op(zldev, ZL_REG_SYNTH_MB_SEM, ZL_SYNTH_MB_SEM_RD,
|
||||
ZL_REG_SYNTH_MB_MASK, BIT(index));
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
/* The output frequency is determined by the following formula:
|
||||
* base * multiplier * numerator / denominator
|
||||
*
|
||||
* Read registers with these values
|
||||
*/
|
||||
rc = zl3073x_read_u16(zldev, ZL_REG_SYNTH_FREQ_BASE, &base);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
rc = zl3073x_read_u32(zldev, ZL_REG_SYNTH_FREQ_MULT, &mult);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
rc = zl3073x_read_u16(zldev, ZL_REG_SYNTH_FREQ_M, &m);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
rc = zl3073x_read_u16(zldev, ZL_REG_SYNTH_FREQ_N, &n);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
/* Check denominator for zero to avoid div by 0 */
|
||||
if (!n) {
|
||||
dev_err(zldev->dev,
|
||||
"Zero divisor for SYNTH%u retrieved from device\n",
|
||||
index);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* Compute and store synth frequency */
|
||||
zldev->synth[index].freq = div_u64(mul_u32_u32(base * m, mult), n);
|
||||
|
||||
dev_dbg(zldev->dev, "SYNTH%u frequency: %u Hz\n", index,
|
||||
zldev->synth[index].freq);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
static int
|
||||
zl3073x_dev_state_fetch(struct zl3073x_dev *zldev)
|
||||
{
|
||||
|
|
@ -816,6 +591,21 @@ zl3073x_dev_state_fetch(struct zl3073x_dev *zldev)
|
|||
return rc;
|
||||
}
|
||||
|
||||
static void
|
||||
zl3073x_dev_ref_status_update(struct zl3073x_dev *zldev)
|
||||
{
|
||||
int i, rc;
|
||||
|
||||
for (i = 0; i < ZL3073X_NUM_REFS; i++) {
|
||||
rc = zl3073x_read_u8(zldev, ZL_REG_REF_MON_STATUS(i),
|
||||
&zldev->ref[i].mon_status);
|
||||
if (rc)
|
||||
dev_warn(zldev->dev,
|
||||
"Failed to get REF%u status: %pe\n", i,
|
||||
ERR_PTR(rc));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* zl3073x_ref_phase_offsets_update - update reference phase offsets
|
||||
* @zldev: pointer to zl3073x_dev structure
|
||||
|
|
@ -935,6 +725,9 @@ zl3073x_dev_periodic_work(struct kthread_work *work)
|
|||
struct zl3073x_dpll *zldpll;
|
||||
int rc;
|
||||
|
||||
/* Update input references status */
|
||||
zl3073x_dev_ref_status_update(zldev);
|
||||
|
||||
/* Update DPLL-to-connected-ref phase offsets registers */
|
||||
rc = zl3073x_ref_phase_offsets_update(zldev, -1);
|
||||
if (rc)
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue