|
@@ -42,8 +42,6 @@ struct rx_buff_desc net_rx_buffs = {
|
|
|
|
|
|
static void keystone2_net_serdes_setup(void);
|
|
static void keystone2_net_serdes_setup(void);
|
|
|
|
|
|
-static int gen_get_link_speed(int phy_addr);
|
|
|
|
-
|
|
|
|
int keystone2_eth_read_mac_addr(struct eth_device *dev)
|
|
int keystone2_eth_read_mac_addr(struct eth_device *dev)
|
|
{
|
|
{
|
|
struct eth_priv_t *eth_priv;
|
|
struct eth_priv_t *eth_priv;
|
|
@@ -137,19 +135,6 @@ static int keystone2_mdio_write(struct mii_dev *bus,
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
-/* PHY functions for a generic PHY */
|
|
|
|
-static int gen_get_link_speed(int phy_addr)
|
|
|
|
-{
|
|
|
|
- u_int16_t tmp;
|
|
|
|
-
|
|
|
|
- tmp = mdio_bus->read(mdio_bus, phy_addr,
|
|
|
|
- MDIO_DEVAD_NONE, MII_STATUS_REG);
|
|
|
|
- if (tmp & 0x04)
|
|
|
|
- return 0;
|
|
|
|
-
|
|
|
|
- return -1;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
static void __attribute__((unused))
|
|
static void __attribute__((unused))
|
|
keystone2_eth_gigabit_enable(struct eth_device *dev)
|
|
keystone2_eth_gigabit_enable(struct eth_device *dev)
|
|
{
|
|
{
|
|
@@ -180,35 +165,8 @@ int keystone_sgmii_link_status(int port)
|
|
|
|
|
|
status = __raw_readl(SGMII_STATUS_REG(port));
|
|
status = __raw_readl(SGMII_STATUS_REG(port));
|
|
|
|
|
|
- return status & SGMII_REG_STATUS_LINK;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-int keystone_get_link_status(struct eth_device *dev)
|
|
|
|
-{
|
|
|
|
- struct eth_priv_t *eth_priv = (struct eth_priv_t *)dev->priv;
|
|
|
|
- int sgmii_link;
|
|
|
|
- int link_state = 0;
|
|
|
|
-#if CONFIG_GET_LINK_STATUS_ATTEMPTS > 1
|
|
|
|
- int j;
|
|
|
|
-
|
|
|
|
- for (j = 0; (j < CONFIG_GET_LINK_STATUS_ATTEMPTS) && (link_state == 0);
|
|
|
|
- j++) {
|
|
|
|
-#endif
|
|
|
|
- sgmii_link =
|
|
|
|
- keystone_sgmii_link_status(eth_priv->slave_port - 1);
|
|
|
|
-
|
|
|
|
- if (sgmii_link) {
|
|
|
|
- link_state = 1;
|
|
|
|
-
|
|
|
|
- if (eth_priv->sgmii_link_type == SGMII_LINK_MAC_PHY)
|
|
|
|
- if (gen_get_link_speed(eth_priv->phy_addr))
|
|
|
|
- link_state = 0;
|
|
|
|
- }
|
|
|
|
-#if CONFIG_GET_LINK_STATUS_ATTEMPTS > 1
|
|
|
|
- }
|
|
|
|
-#endif
|
|
|
|
- return link_state;
|
|
|
|
|
|
+ return (status & SGMII_REG_STATUS_LOCK) &&
|
|
|
|
+ (status & SGMII_REG_STATUS_LINK);
|
|
}
|
|
}
|
|
|
|
|
|
int keystone_sgmii_config(int port, int interface)
|
|
int keystone_sgmii_config(int port, int interface)
|
|
@@ -490,8 +448,10 @@ static int keystone2_eth_send_packet(struct eth_device *dev,
|
|
{
|
|
{
|
|
int ret_status = -1;
|
|
int ret_status = -1;
|
|
struct eth_priv_t *eth_priv = (struct eth_priv_t *)dev->priv;
|
|
struct eth_priv_t *eth_priv = (struct eth_priv_t *)dev->priv;
|
|
|
|
+ struct phy_device *phy_dev = eth_priv->phy_dev;
|
|
|
|
|
|
- if (keystone_get_link_status(dev) == 0)
|
|
|
|
|
|
+ genphy_update_link(phy_dev);
|
|
|
|
+ if (phy_dev->link == 0)
|
|
return -1;
|
|
return -1;
|
|
|
|
|
|
if (cpmac_drv_send((u32 *)packet, length, eth_priv->slave_port) != 0)
|
|
if (cpmac_drv_send((u32 *)packet, length, eth_priv->slave_port) != 0)
|