All of lore.kernel.org
 help / color / mirror / Atom feed
* MDIO Debug Interface
@ 2020-07-09 20:47 Tobias Waldekranz
  2020-07-09 22:18 ` Vladimir Oltean
                   ` (2 more replies)
  0 siblings, 3 replies; 15+ messages in thread
From: Tobias Waldekranz @ 2020-07-09 20:47 UTC (permalink / raw)
  To: netdev; +Cc: andrew, f.fainelli, hkallweit1

Hi netdev,

TL;DR: Is something like https://github.com/wkz/mdio-tools a good
idea?

The kernel does not, as far as I know, have a low-level debug
interface to MDIO devices. I.e. something equivalent to i2c-dev or
spi-dev for example. The closest thing I've found are the
SIOCG/SMIIREG ioctls, but they have several drawbacks:

1. "Write register" is not always exactly that. The kernel will try to
   be extra helpful and do things behind the scenes if it detects a
   write to the reset bit of a PHY for example.

2. Only one op per syscall. This means that is impossible to implement
   many operations in a safe manner. Something as simple as a
   read/mask/write cycle can race against an in-kernel driver.

3. Addressing is awkward since you don't address the MDIO bus
   directly, rather "the MDIO bus to which this netdev's PHY is
   connected". This makes it hard to talk to devices on buses to which
   no PHYs are connected, the typical case being Ethernet switches.

The kernel side of mdio-tools, mdio-netlink, tries to address these
problems by adding a GENL interface with which a user can interact
with an MDIO bus directly.

The user sends a program that the mdio-netlink module executes,
possibly emitting data back to the user. I.e. it implements a very
simple VM. Read/mask/write operations could be implemented by
dedicated commands, but when you start looking at more advanced things
like reading out the VLAN database of a switch you need to state and
branching.

FAQ:

- A VM just for MDIO, that seems ridiculous, no?

  It does. But if you want to support the complex kinds of operations
  that I'm looking for, without the kernel module having to be aware
  of every kind of MDIO device in the world, I haven't found an easier
  way.

- Why not use BPF?

  That could absolutely be one way forward, but the GENL approach was
  easy to build out-of-tree to prove the idea. Its not obvious how it
  would work though as BPF programs typically run async on some event
  (probe hit, packet received etc.) whereas this is a single execution
  on behalf of a user. So to what would the program be attached? The
  output path is also not straight forward, but it could be done with
  perf events i suppose.

My question is thus; do you think mdio-netlink, or something like it,
is a candidate for mainline?

Thank you

^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2020-07-10 15:47 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-07-09 20:47 MDIO Debug Interface Tobias Waldekranz
2020-07-09 22:18 ` Vladimir Oltean
2020-07-09 22:48   ` Andrew Lunn
2020-07-10  7:51   ` Tobias Waldekranz
2020-07-09 22:36 ` Florian Fainelli
2020-07-10  8:29   ` Tobias Waldekranz
2020-07-09 22:39 ` Andrew Lunn
2020-07-09 22:57   ` Vladimir Oltean
2020-07-09 23:20     ` Andrew Lunn
2020-07-09 23:33       ` Vladimir Oltean
2020-07-10  9:30         ` Tobias Waldekranz
2020-07-10  9:45           ` Vladimir Oltean
2020-07-10 13:35             ` Andrew Lunn
2020-07-10 15:47               ` Ioana Ciornei
2020-07-10  8:51   ` Tobias Waldekranz

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.