X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=include%2Fmiiphy.h;h=c66a1845b58545ec18e9e562f56b08ad0866bb15;hb=c56289ddafce3d1ec442fb18064f136c2c47d0bb;hp=657b49624a90a44057aaf7f446e23a501de59e23;hpb=6d4511b2c6734842de9de21c1bc0db4c3ea28b72;p=platform%2Fkernel%2Fu-boot.git diff --git a/include/miiphy.h b/include/miiphy.h index 657b496..c66a184 100644 --- a/include/miiphy.h +++ b/include/miiphy.h @@ -1,6 +1,5 @@ +/* SPDX-License-Identifier: GPL-2.0 OR IBM-pibs */ /* - * SPDX-License-Identifier: GPL-2.0 ibm-pibs - * * Additions (C) Copyright 2009 Industrie Dial Face S.p.A. */ /*----------------------------------------------------------------------------+ @@ -21,13 +20,6 @@ #include #include -struct legacy_mii_dev { - int (*read)(const char *devname, unsigned char addr, - unsigned char reg, unsigned short *value); - int (*write)(const char *devname, unsigned char addr, - unsigned char reg, unsigned short value); -}; - int miiphy_read(const char *devname, unsigned char addr, unsigned char reg, unsigned short *value); int miiphy_write(const char *devname, unsigned char addr, unsigned char reg, @@ -44,22 +36,28 @@ int miiphy_link(const char *devname, unsigned char addr); void miiphy_init(void); -void miiphy_register(const char *devname, - int (*read)(const char *devname, unsigned char addr, - unsigned char reg, unsigned short *value), - int (*write)(const char *devname, unsigned char addr, - unsigned char reg, unsigned short value)); - int miiphy_set_current_dev(const char *devname); const char *miiphy_get_current_dev(void); struct mii_dev *mdio_get_current_dev(void); +struct list_head *mdio_get_list_head(void); struct mii_dev *miiphy_get_dev_by_name(const char *devname); struct phy_device *mdio_phydev_for_ethname(const char *devname); void miiphy_listdev(void); struct mii_dev *mdio_alloc(void); +void mdio_free(struct mii_dev *bus); int mdio_register(struct mii_dev *bus); + +/** + * mdio_register_seq - Register mdio bus with sequence number + * @bus: mii device structure + * @seq: sequence number + * + * Return: 0 if success, negative value if error + */ +int mdio_register_seq(struct mii_dev *bus, int seq); +int mdio_unregister(struct mii_dev *bus); void mdio_list_devices(void); #ifdef CONFIG_BITBANGMII @@ -83,11 +81,18 @@ struct bb_miiphy_bus { extern struct bb_miiphy_bus bb_miiphy_buses[]; extern int bb_miiphy_buses_num; -void bb_miiphy_init(void); -int bb_miiphy_read(const char *devname, unsigned char addr, - unsigned char reg, unsigned short *value); -int bb_miiphy_write(const char *devname, unsigned char addr, - unsigned char reg, unsigned short value); +/** + * bb_miiphy_init() - Initialize bit-banged MII bus driver + * + * It is called during the generic post-relocation init sequence. + * + * Return: 0 if OK + */ +int bb_miiphy_init(void); + +int bb_miiphy_read(struct mii_dev *miidev, int addr, int devad, int reg); +int bb_miiphy_write(struct mii_dev *miidev, int addr, int devad, int reg, + u16 value); #endif /* phy seed setup */ @@ -121,4 +126,117 @@ int bb_miiphy_write(const char *devname, unsigned char addr, #define ESTATUS_1000XF 0x8000 #define ESTATUS_1000XH 0x4000 +/** + * 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_read - Wrapper over .read() operation for DM MDIO + * + * @mdiodev: mdio device + * @addr: PHY address on MDIO bus + * @devad: device address on PHY if C45; should be MDIO_DEVAD_NONE if C22 + * @reg: register address + * Return: register value if non-negative, -error code otherwise + */ +int dm_mdio_read(struct udevice *mdio_dev, int addr, int devad, int reg); + +/** + * dm_mdio_write - Wrapper over .write() operation for DM MDIO + * + * @mdiodev: mdio device + * @addr: PHY address on MDIO bus + * @devad: device address on PHY if C45; should be MDIO_DEVAD_NONE if C22 + * @reg: register address + * @val: value to write + * Return: 0 on success, -error code otherwise + */ +int dm_mdio_write(struct udevice *mdio_dev, int addr, int devad, int reg, u16 val); + +/** + * dm_mdio_reset - Wrapper over .reset() operation for DM MDIO + * + * @mdiodev: mdio device + * Return: 0 on success, -error code otherwise + */ +int dm_mdio_reset(struct udevice *mdio_dev); + +/** + * dm_phy_find_by_ofnode - Find PHY device by ofnode + * + * @phynode: PHY's ofnode + * + * Return: pointer to phy_device, or NULL on error + */ +struct phy_device *dm_phy_find_by_ofnode(ofnode phynode); + +/** + * dm_mdio_phy_connect - Wrapper over phy_connect for DM MDIO + * + * @mdiodev: mdio device the PHY is accesible on + * @phyaddr: 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 *mdiodev, int phyaddr, + struct udevice *ethdev, + phy_interface_t interface); + +/** + * dm_eth_phy_connect - Connect an Eth device to a PHY based on device tree + * + * Picks up the DT phy-handle and phy-mode from ethernet device node and + * connects the ethernet device to the linked PHY. + * + * @ethdev: ethernet device + * + * Return: pointer to phy_device, or 0 on error + */ +struct phy_device *dm_eth_phy_connect(struct udevice *ethdev); + +/* indicates none of the child buses is selected */ +#define MDIO_MUX_SELECT_NONE -1 + +/** + * struct mdio_mux_ops - MDIO MUX operations + * + * @select: Selects a child bus + * @deselect: Clean up selection. Optional, can be NULL + */ +struct mdio_mux_ops { + int (*select)(struct udevice *mux, int cur, int sel); + int (*deselect)(struct udevice *mux, int sel); +}; + +#define mdio_mux_get_ops(dev) ((struct mdio_mux_ops *)(dev)->driver->ops) + #endif