[net-next v4 0/3] net: ethernet: adi: Add ADIN1110 support
From: andrei . tachici
Date: Wed Aug 17 2022 - 12:03:07 EST
From: Alexandru Tachici <alexandru.tachici@xxxxxxxxxx>
The ADIN1110 is a low power single port 10BASE-T1L MAC-PHY
designed for industrial Ethernet applications. It integrates
an Ethernet PHY core with a MAC and all the associated analog
circuitry, input and output clock buffering.
ADIN1110 MAC-PHY encapsulates the ADIN1100 PHY. The PHY registers
can be accessed through the MDIO MAC registers.
We are registering an MDIO bus with custom read/write in order
to let the PHY to be discovered by the PAL. This will let
the ADIN1100 Linux driver to probe and take control of
the PHY.
The ADIN2111 is a low power, low complexity, two-Ethernet ports
switch with integrated 10BASE-T1L PHYs and one serial peripheral
interface (SPI) port.
The device is designed for industrial Ethernet applications using
low power constrained nodes and is compliant with the IEEE 802.3cg-2019
Ethernet standard for long reach 10 Mbps single pair Ethernet (SPE).
The switch supports various routing configurations between
the two Ethernet ports and the SPI host port providing a flexible
solution for line, daisy-chain, or ring network topologies.
The ADIN2111 supports cable reach of up to 1700 meters with ultra
low power consumption of 77 mW. The two PHY cores support the
1.0 V p-p operating mode and the 2.4 V p-p operating mode defined
in the IEEE 802.3cg standard.
The device integrates the switch, two Ethernet physical layer (PHY)
cores with a media access control (MAC) interface and all the
associated analog circuitry, and input and output clock buffering.
The device also includes internal buffer queues, the SPI and
subsystem registers, as well as the control logic to manage the reset
and clock control and hardware pin configuration.
Access to the PHYs is exposed via an internal MDIO bus. Writes/reads
can be performed by reading/writing to the ADIN2111 MDIO registers
via SPI.
On probe, for each port, a struct net_device is allocated and
registered. When both ports are added to the same bridge, the driver
will enable offloading of frame forwarding at the hardware level.
Driver offers STP support. Normal operation on forwarding state.
Allows only frames with the 802.1d DA to be passed to the host
when in any of the other states.
Supports both VEB and VEPA modes. In VEB mode multicast/broadcast
and unknown frames are handled by the ADIN2111, sw bridge will
not see them (this is to save SPI bandwidth). In VEPA mode,
all forwarding will be handled by the sw bridge, ADIN2111 will
not attempt to forward any frames in hardware to the other port.
Alexandru Tachici (3):
net: phy: adin1100: add PHY IDs of adin1110/adin2111
net: ethernet: adi: Add ADIN1110 support
dt-bindings: net: adin1110: Add docs
Changelog V2 -> V3:
- removed used of cpu_to_le16() for reg address, it was generating sparse complaints and it
was not needed as FIELD_GET works fine no matter if host CPU is LE/BE
- moved variable definitions in reversed tree
- changed probe_capabilities from MDIOBUS_C22_C45 to MDIOBUS_C22
- use phy_do_ioctl() instead of phy_mii_ioctl()
- in adin1110_read_fifo(): receive frame from SPI directly in the skb, used skb_pull()
to move data* past the custom protocol header
- split MDIO read/write SPI bus locking to avoid holding the lock in readx_poll_timeout()
- in adin1110_probe_netdevs(): moved devm_register_netdev at the end of function in order
to have IRQs and notifiers setup before device going live
- added possibility to set different Host MAC addresses per port
- added spi-peripheral-props.yaml to allOf:
Changelog V3 -> V4:
- removed address-cells/size-cells properties from binding and example
- fixed dt-schema warnings
.../devicetree/bindings/net/adi,adin1110.yaml | 77 +
drivers/net/ethernet/Kconfig | 1 +
drivers/net/ethernet/Makefile | 1 +
drivers/net/ethernet/adi/Kconfig | 28 +
drivers/net/ethernet/adi/Makefile | 6 +
drivers/net/ethernet/adi/adin1110.c | 1445 +++++++++++++++++
drivers/net/phy/adin1100.c | 7 +-
7 files changed, 1564 insertions(+), 1 deletion(-)
create mode 100644 Documentation/devicetree/bindings/net/adi,adin1110.yaml
create mode 100644 drivers/net/ethernet/adi/Kconfig
create mode 100644 drivers/net/ethernet/adi/Makefile
create mode 100644 drivers/net/ethernet/adi/adin1110.c
--
2.25.1