1
0
mirror of https://xff.cz/git/u-boot/ synced 2025-09-01 08:42:12 +02:00

net: ti: cpsw: add support for standard eth "max-speed" dt property

This patch adds support for standard Ethernet "max-speed" DT property to
allow PHY link speed limitation.

Signed-off-by: Grygorii Strashko <grygorii.strashko@ti.com>
This commit is contained in:
Grygorii Strashko
2019-09-19 11:16:39 +03:00
committed by Tom Rini
parent 4040148b9e
commit 3c57b620db
2 changed files with 16 additions and 0 deletions

View File

@@ -839,6 +839,7 @@ static int cpsw_phy_init(struct cpsw_priv *priv, struct cpsw_slave *slave)
{ {
struct phy_device *phydev; struct phy_device *phydev;
u32 supported = PHY_GBIT_FEATURES; u32 supported = PHY_GBIT_FEATURES;
int ret;
phydev = phy_connect(priv->bus, phydev = phy_connect(priv->bus,
slave->data->phy_addr, slave->data->phy_addr,
@@ -849,6 +850,13 @@ static int cpsw_phy_init(struct cpsw_priv *priv, struct cpsw_slave *slave)
return -1; return -1;
phydev->supported &= supported; phydev->supported &= supported;
if (slave->data->max_speed) {
ret = phy_set_supported(phydev, slave->data->max_speed);
if (ret)
return ret;
dev_dbg(priv->dev, "Port %u speed forced to %uMbit\n",
slave->slave_num + 1, slave->data->max_speed);
}
phydev->advertising = phydev->supported; phydev->advertising = phydev->supported;
#ifdef CONFIG_DM_ETH #ifdef CONFIG_DM_ETH
@@ -1185,6 +1193,7 @@ static void cpsw_eth_of_parse_slave(struct cpsw_platform_data *data,
struct cpsw_slave_data *slave_data; struct cpsw_slave_data *slave_data;
const void *fdt = gd->fdt_blob; const void *fdt = gd->fdt_blob;
const char *phy_mode; const char *phy_mode;
int max_speed = -1;
u32 phy_id[2]; u32 phy_id[2];
slave_data = &data->slave_data[slave_index]; slave_data = &data->slave_data[slave_index];
@@ -1206,6 +1215,12 @@ static void cpsw_eth_of_parse_slave(struct cpsw_platform_data *data,
phy_id, 2); phy_id, 2);
slave_data->phy_addr = phy_id[1]; slave_data->phy_addr = phy_id[1];
} }
slave_data->max_speed = 0;
max_speed = fdtdec_get_int(fdt, subnode,
"max-speed", max_speed);
if (max_speed > 0)
slave_data->max_speed = max_speed;
} }
static int cpsw_eth_ofdata_to_platdata(struct udevice *dev) static int cpsw_eth_ofdata_to_platdata(struct udevice *dev)

View File

@@ -39,6 +39,7 @@ struct cpsw_slave_data {
int phy_addr; int phy_addr;
int phy_if; int phy_if;
int phy_of_handle; int phy_of_handle;
int max_speed;
}; };
enum { enum {