net: introduce MDIO DM class for MDIO devices
Adds UCLASS_MDIO DM class supporting MDIO buses that are probed as stand-alone devices. Useful in particular for systems that support DM_ETH and have a stand-alone MDIO hardware block shared by multiple Ethernet interfaces. Signed-off-by: Alex Marginean <alexm.osslist@gmail.com> Reviewed-by: Bin Meng <bmeng.cn@gmail.com> Acked-by: Joe Hershberger <joe.hershberger@ni.com>
This commit is contained in:
committed by
Joe Hershberger
parent
149468699e
commit
c3452b50c3
@@ -58,6 +58,7 @@ enum uclass_id {
|
||||
UCLASS_LPC, /* x86 'low pin count' interface */
|
||||
UCLASS_MAILBOX, /* Mailbox controller */
|
||||
UCLASS_MASS_STORAGE, /* Mass storage device */
|
||||
UCLASS_MDIO, /* MDIO bus */
|
||||
UCLASS_MISC, /* Miscellaneous device */
|
||||
UCLASS_MMC, /* SD / MMC card or chip */
|
||||
UCLASS_MOD_EXP, /* RSA Mod Exp device */
|
||||
|
||||
@@ -118,4 +118,53 @@ int bb_miiphy_write(struct mii_dev *miidev, int addr, int devad, int reg,
|
||||
#define ESTATUS_1000XF 0x8000
|
||||
#define ESTATUS_1000XH 0x4000
|
||||
|
||||
#ifdef CONFIG_DM_MDIO
|
||||
|
||||
/**
|
||||
* struct mdio_perdev_priv - Per-device class data for MDIO DM
|
||||
*
|
||||
* @mii_bus: Supporting MII legacy bus
|
||||
*/
|
||||
struct mdio_perdev_priv {
|
||||
struct mii_dev *mii_bus;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct mdio_ops - MDIO bus operations
|
||||
*
|
||||
* @read: Read from a PHY register
|
||||
* @write: Write to a PHY register
|
||||
* @reset: Reset the MDIO bus, NULL if not supported
|
||||
*/
|
||||
struct mdio_ops {
|
||||
int (*read)(struct udevice *mdio_dev, int addr, int devad, int reg);
|
||||
int (*write)(struct udevice *mdio_dev, int addr, int devad, int reg,
|
||||
u16 val);
|
||||
int (*reset)(struct udevice *mdio_dev);
|
||||
};
|
||||
|
||||
#define mdio_get_ops(dev) ((struct mdio_ops *)(dev)->driver->ops)
|
||||
|
||||
/**
|
||||
* dm_mdio_probe_devices - Call probe on all MII devices, currently used for
|
||||
* MDIO console commands.
|
||||
*/
|
||||
void dm_mdio_probe_devices(void);
|
||||
|
||||
/**
|
||||
* dm_mdio_phy_connect - Wrapper over phy_connect for DM MDIO
|
||||
*
|
||||
* @dev: mdio dev
|
||||
* @addr: PHY address on MDIO bus
|
||||
* @ethdev: ethernet device to connect to the PHY
|
||||
* @interface: MAC-PHY protocol
|
||||
*
|
||||
* @return pointer to phy_device, or 0 on error
|
||||
*/
|
||||
struct phy_device *dm_mdio_phy_connect(struct udevice *dev, int addr,
|
||||
struct udevice *ethdev,
|
||||
phy_interface_t interface);
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user