Commit 7b647b93 authored by Murali Karicheri's avatar Murali Karicheri Committed by David S. Miller

net: netcp: ethss: use of_get_phy_mode() to support different RGMII modes

The phy used for K2G allows for internal delays to be added optionally
to the clock circuitry based on board desing. To add this support,
enhance the driver to use of_get_phy_mode() to read the phy-mode from
the phy device and pass the same to phy through of_phy_connect().
Signed-off-by: default avatarMurali Karicheri <m-karicheri2@ti.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent dc07ec97
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
#include <linux/io.h> #include <linux/io.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/of_mdio.h> #include <linux/of_mdio.h>
#include <linux/of_net.h>
#include <linux/of_address.h> #include <linux/of_address.h>
#include <linux/if_vlan.h> #include <linux/if_vlan.h>
#include <linux/ptp_classify.h> #include <linux/ptp_classify.h>
...@@ -707,6 +708,7 @@ struct gbe_slave { ...@@ -707,6 +708,7 @@ struct gbe_slave {
u32 link_interface; u32 link_interface;
u32 mac_control; u32 mac_control;
u8 phy_port_t; u8 phy_port_t;
struct device_node *node;
struct device_node *phy_node; struct device_node *phy_node;
struct ts_ctl ts_ctl; struct ts_ctl ts_ctl;
struct list_head slave_list; struct list_head slave_list;
...@@ -2322,6 +2324,21 @@ static int gbe_slave_open(struct gbe_intf *gbe_intf) ...@@ -2322,6 +2324,21 @@ static int gbe_slave_open(struct gbe_intf *gbe_intf)
has_phy = true; has_phy = true;
phy_mode = PHY_INTERFACE_MODE_SGMII; phy_mode = PHY_INTERFACE_MODE_SGMII;
slave->phy_port_t = PORT_MII; slave->phy_port_t = PORT_MII;
} else if (slave->link_interface == RGMII_LINK_MAC_PHY) {
has_phy = true;
phy_mode = of_get_phy_mode(slave->node);
/* if phy-mode is not present, default to
* PHY_INTERFACE_MODE_RGMII
*/
if (phy_mode < 0)
phy_mode = PHY_INTERFACE_MODE_RGMII;
if (!phy_interface_mode_is_rgmii(phy_mode)) {
dev_err(priv->dev,
"Unsupported phy mode %d\n", phy_mode);
return -EINVAL;
}
slave->phy_port_t = PORT_MII;
} else if (slave->link_interface == XGMII_LINK_MAC_PHY) { } else if (slave->link_interface == XGMII_LINK_MAC_PHY) {
has_phy = true; has_phy = true;
phy_mode = PHY_INTERFACE_MODE_NA; phy_mode = PHY_INTERFACE_MODE_NA;
...@@ -2947,6 +2964,7 @@ static int init_slave(struct gbe_priv *gbe_dev, struct gbe_slave *slave, ...@@ -2947,6 +2964,7 @@ static int init_slave(struct gbe_priv *gbe_dev, struct gbe_slave *slave,
slave->link_interface = SGMII_LINK_MAC_PHY; slave->link_interface = SGMII_LINK_MAC_PHY;
} }
slave->node = node;
slave->open = false; slave->open = false;
if ((slave->link_interface == SGMII_LINK_MAC_PHY) || if ((slave->link_interface == SGMII_LINK_MAC_PHY) ||
(slave->link_interface == RGMII_LINK_MAC_PHY) || (slave->link_interface == RGMII_LINK_MAC_PHY) ||
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment