diff options
author | Maxime Chevallier <maxime.chevallier@bootlin.com> | 2023-06-01 16:14:51 +0200 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2023-06-05 09:56:36 +0100 |
commit | 642af0f92cbe01c4b05eb38a0fe94867a3798b34 (patch) | |
tree | 02476954314f58e1eb89f23151df3876d6fb4cd2 /include/linux/mdio | |
parent | f69de8aa4752adae750892c71711a5b806ec0dff (diff) | |
download | linux-642af0f92cbe01c4b05eb38a0fe94867a3798b34.tar.gz linux-642af0f92cbe01c4b05eb38a0fe94867a3798b34.tar.bz2 linux-642af0f92cbe01c4b05eb38a0fe94867a3798b34.zip |
net: mdio: Introduce a regmap-based mdio driver
There exists several examples today of devices that embed an ethernet
PHY or PCS directly inside an SoC. In this situation, either the device
is controlled through a vendor-specific register set, or sometimes
exposes the standard 802.3 registers that are typically accessed over
MDIO.
As phylib and phylink are designed to use mdiodevices, this driver
allows creating a virtual MDIO bus, that translates mdiodev register
accesses to regmap accesses.
The reason we use regmap is because there are at least 3 such devices
known today, 2 of them are Altera TSE PCS's, memory-mapped, exposed
with a 4-byte stride in stmmac's dwmac-socfpga variant, and a 2-byte
stride in altera-tse. The other one (nxp,sja1110-base-tx-mdio) is
exposed over SPI.
Signed-off-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
Reviewed-by: Simon Horman <simon.horman@corigine.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/linux/mdio')
-rw-r--r-- | include/linux/mdio/mdio-regmap.h | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/include/linux/mdio/mdio-regmap.h b/include/linux/mdio/mdio-regmap.h new file mode 100644 index 000000000000..679d9069846b --- /dev/null +++ b/include/linux/mdio/mdio-regmap.h @@ -0,0 +1,26 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* Driver for MMIO-Mapped MDIO devices. Some IPs expose internal PHYs or PCS + * within the MMIO-mapped area + * + * Copyright (C) 2023 Maxime Chevallier <maxime.chevallier@bootlin.com> + */ +#ifndef MDIO_REGMAP_H +#define MDIO_REGMAP_H + +#include <linux/phy.h> + +struct device; +struct regmap; + +struct mdio_regmap_config { + struct device *parent; + struct regmap *regmap; + char name[MII_BUS_ID_SIZE]; + u8 valid_addr; + bool autoscan; +}; + +struct mii_bus *devm_mdio_regmap_register(struct device *dev, + const struct mdio_regmap_config *config); + +#endif |