| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- .. SPDX-License-Identifier: GPL-2.0
- .. _phy_port:
- =================
- Ethernet ports
- =================
- This document is a basic description of the phy_port infrastructure,
- introduced to represent physical interfaces of Ethernet devices.
- Without phy_port, we already have quite a lot of information about what the
- media-facing interface of a NIC can do and looks like, through the
- :c:type:`struct ethtool_link_ksettings <ethtool_link_ksettings>` attributes,
- which includes :
- - What the NIC can do through the :c:member:`supported` field
- - What the Link Partner advertises through :c:member:`lp_advertising`
- - Which features we're advertising through :c:member:`advertising`
- We also have info about the number of pairs and the PORT type. These settings
- are built by aggregating together information reported by various devices that
- are sitting on the link :
- - The NIC itself, through the :c:member:`get_link_ksettings` callback
- - Precise information from the MAC and PCS by using phylink in the MAC driver
- - Information reported by the PHY device
- - Information reported by an SFP module (which can itself include a PHY)
- This model however starts showing its limitations when we consider devices that
- have more than one media interface. In such a case, only information about the
- actively used interface is reported, and it's not possible to know what the
- other interfaces can do. In fact, we have very little information about whether
- or not there are any other media interfaces.
- The goal of the phy_port representation is to provide a way of representing a
- physical interface of a NIC, regardless of what is driving the port (NIC through
- a firmware, SFP module, Ethernet PHY).
- Multi-port interfaces examples
- ==============================
- Several cases of multi-interface NICs have been observed so far :
- Internal MII Mux::
- +------------------+
- | SoC |
- | +-----+ | +-----+
- | +-----+ | |-------------| PHY |
- | | MAC |--| Mux | | +-----+ +-----+
- | +-----+ | |-----| SFP |
- | +-----+ | +-----+
- +------------------+
- Internal Mux with internal PHY::
- +------------------------+
- | SoC |
- | +-----+ +-----+
- | +-----+ | |-| PHY |
- | | MAC |--| Mux | +-----+ +-----+
- | +-----+ | |-----------| SFP |
- | +-----+ | +-----+
- +------------------------+
- External Mux::
- +---------+
- | SoC | +-----+ +-----+
- | | | |--| PHY |
- | +-----+ | | | +-----+
- | | MAC |----| Mux | +-----+
- | +-----+ | | |--| PHY |
- | | +-----+ +-----+
- | | |
- | GPIO-------+
- +---------+
- Double-port PHY::
- +---------+
- | SoC | +-----+
- | | | |--- RJ45
- | +-----+ | | |
- | | MAC |---| PHY | +-----+
- | +-----+ | | |---| SFP |
- +---------+ +-----+ +-----+
- phy_port aims at providing a path to support all the above topologies, by
- representing the media interfaces in a way that's agnostic to what's driving
- the interface. the struct phy_port object has its own set of callback ops, and
- will eventually be able to report its own ksettings::
- _____ +------+
- ( )-----| Port |
- +-----+ ( ) +------+
- | MAC |--( ??? )
- +-----+ ( ) +------+
- (_____)-----| Port |
- +------+
- Next steps
- ==========
- As of writing this documentation, only ports controlled by PHY devices are
- supported. The next steps will be to add the Netlink API to expose these
- to userspace and add support for raw ports (controlled by some firmware, and directly
- managed by the NIC driver).
- Another parallel task is the introduction of a MII muxing framework to allow the
- control of non-PHY driver multi-port setups.
|