dm: net: Adjust PHY interface to work with CONFIG_DM_ETH
When driver model is used for Ethernet a few functions are passed a udevice instead of an eth_device. Also add a function to find a PHY type given its name. This will be used to decode the device tree node. Finally, put a phy_interface field in struct eth_pdata since this is an important part of the platform data for Ethernet. Signed-off-by: Simon Glass <sjg@chromium.org> Acked-by: Joe Hershberger <joe.hershberger@ni.com>
This commit is contained in:
parent
ff97380015
commit
c74c8e6651
|
@ -11,6 +11,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <common.h>
|
#include <common.h>
|
||||||
|
#include <dm.h>
|
||||||
#include <miiphy.h>
|
#include <miiphy.h>
|
||||||
#include <phy.h>
|
#include <phy.h>
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
|
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
#include <common.h>
|
#include <common.h>
|
||||||
|
#include <dm.h>
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
#include <net.h>
|
#include <net.h>
|
||||||
#include <command.h>
|
#include <command.h>
|
||||||
|
@ -754,7 +755,11 @@ struct phy_device *phy_find_by_mask(struct mii_dev *bus, unsigned phy_mask,
|
||||||
return get_phy_device_by_mask(bus, phy_mask, interface);
|
return get_phy_device_by_mask(bus, phy_mask, interface);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_DM_ETH
|
||||||
|
void phy_connect_dev(struct phy_device *phydev, struct udevice *dev)
|
||||||
|
#else
|
||||||
void phy_connect_dev(struct phy_device *phydev, struct eth_device *dev)
|
void phy_connect_dev(struct phy_device *phydev, struct eth_device *dev)
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
/* Soft Reset the PHY */
|
/* Soft Reset the PHY */
|
||||||
phy_reset(phydev);
|
phy_reset(phydev);
|
||||||
|
@ -767,8 +772,13 @@ void phy_connect_dev(struct phy_device *phydev, struct eth_device *dev)
|
||||||
debug("%s connected to %s\n", dev->name, phydev->drv->name);
|
debug("%s connected to %s\n", dev->name, phydev->drv->name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_DM_ETH
|
||||||
|
struct phy_device *phy_connect(struct mii_dev *bus, int addr,
|
||||||
|
struct udevice *dev, phy_interface_t interface)
|
||||||
|
#else
|
||||||
struct phy_device *phy_connect(struct mii_dev *bus, int addr,
|
struct phy_device *phy_connect(struct mii_dev *bus, int addr,
|
||||||
struct eth_device *dev, phy_interface_t interface)
|
struct eth_device *dev, phy_interface_t interface)
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
struct phy_device *phydev;
|
struct phy_device *phydev;
|
||||||
|
|
||||||
|
@ -813,3 +823,15 @@ int phy_shutdown(struct phy_device *phydev)
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int phy_get_interface_by_name(const char *str)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < PHY_INTERFACE_MODE_COUNT; i++) {
|
||||||
|
if (!strcmp(str, phy_interface_strings[i]))
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
|
@ -85,10 +85,12 @@ enum eth_state_t {
|
||||||
*
|
*
|
||||||
* @iobase: The base address of the hardware registers
|
* @iobase: The base address of the hardware registers
|
||||||
* @enetaddr: The Ethernet MAC address that is loaded from EEPROM or env
|
* @enetaddr: The Ethernet MAC address that is loaded from EEPROM or env
|
||||||
|
* @phy_interface: PHY interface to use - see PHY_INTERFACE_MODE_...
|
||||||
*/
|
*/
|
||||||
struct eth_pdata {
|
struct eth_pdata {
|
||||||
phys_addr_t iobase;
|
phys_addr_t iobase;
|
||||||
unsigned char enetaddr[6];
|
unsigned char enetaddr[6];
|
||||||
|
int phy_interface;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -51,7 +51,9 @@ typedef enum {
|
||||||
PHY_INTERFACE_MODE_RGMII_TXID,
|
PHY_INTERFACE_MODE_RGMII_TXID,
|
||||||
PHY_INTERFACE_MODE_RTBI,
|
PHY_INTERFACE_MODE_RTBI,
|
||||||
PHY_INTERFACE_MODE_XGMII,
|
PHY_INTERFACE_MODE_XGMII,
|
||||||
PHY_INTERFACE_MODE_NONE /* Must be last */
|
PHY_INTERFACE_MODE_NONE, /* Must be last */
|
||||||
|
|
||||||
|
PHY_INTERFACE_MODE_COUNT,
|
||||||
} phy_interface_t;
|
} phy_interface_t;
|
||||||
|
|
||||||
static const char *phy_interface_strings[] = {
|
static const char *phy_interface_strings[] = {
|
||||||
|
@ -142,7 +144,11 @@ struct phy_device {
|
||||||
struct phy_driver *drv;
|
struct phy_driver *drv;
|
||||||
void *priv;
|
void *priv;
|
||||||
|
|
||||||
|
#ifdef CONFIG_DM_ETH
|
||||||
|
struct udevice *dev;
|
||||||
|
#else
|
||||||
struct eth_device *dev;
|
struct eth_device *dev;
|
||||||
|
#endif
|
||||||
|
|
||||||
/* forced speed & duplex (no autoneg)
|
/* forced speed & duplex (no autoneg)
|
||||||
* partner speed & duplex & pause (autoneg)
|
* partner speed & duplex & pause (autoneg)
|
||||||
|
@ -205,10 +211,17 @@ int phy_init(void);
|
||||||
int phy_reset(struct phy_device *phydev);
|
int phy_reset(struct phy_device *phydev);
|
||||||
struct phy_device *phy_find_by_mask(struct mii_dev *bus, unsigned phy_mask,
|
struct phy_device *phy_find_by_mask(struct mii_dev *bus, unsigned phy_mask,
|
||||||
phy_interface_t interface);
|
phy_interface_t interface);
|
||||||
|
#ifdef CONFIG_DM_ETH
|
||||||
|
void phy_connect_dev(struct phy_device *phydev, struct udevice *dev);
|
||||||
|
struct phy_device *phy_connect(struct mii_dev *bus, int addr,
|
||||||
|
struct udevice *dev,
|
||||||
|
phy_interface_t interface);
|
||||||
|
#else
|
||||||
void phy_connect_dev(struct phy_device *phydev, struct eth_device *dev);
|
void phy_connect_dev(struct phy_device *phydev, struct eth_device *dev);
|
||||||
struct phy_device *phy_connect(struct mii_dev *bus, int addr,
|
struct phy_device *phy_connect(struct mii_dev *bus, int addr,
|
||||||
struct eth_device *dev,
|
struct eth_device *dev,
|
||||||
phy_interface_t interface);
|
phy_interface_t interface);
|
||||||
|
#endif
|
||||||
int phy_startup(struct phy_device *phydev);
|
int phy_startup(struct phy_device *phydev);
|
||||||
int phy_config(struct phy_device *phydev);
|
int phy_config(struct phy_device *phydev);
|
||||||
int phy_shutdown(struct phy_device *phydev);
|
int phy_shutdown(struct phy_device *phydev);
|
||||||
|
@ -242,6 +255,14 @@ int phy_vitesse_init(void);
|
||||||
|
|
||||||
int board_phy_config(struct phy_device *phydev);
|
int board_phy_config(struct phy_device *phydev);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* phy_get_interface_by_name() - Look up a PHY interface name
|
||||||
|
*
|
||||||
|
* @str: PHY interface name, e.g. "mii"
|
||||||
|
* @return PHY_INTERFACE_MODE_... value, or -1 if not found
|
||||||
|
*/
|
||||||
|
int phy_get_interface_by_name(const char *str);
|
||||||
|
|
||||||
/* PHY UIDs for various PHYs that are referenced in external code */
|
/* PHY UIDs for various PHYs that are referenced in external code */
|
||||||
#define PHY_UID_CS4340 0x13e51002
|
#define PHY_UID_CS4340 0x13e51002
|
||||||
#define PHY_UID_TN2020 0x00a19410
|
#define PHY_UID_TN2020 0x00a19410
|
||||||
|
|
Loading…
Reference in New Issue