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:
committed by
Tom Rini
parent
4040148b9e
commit
3c57b620db
@@ -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)
|
||||||
|
@@ -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 {
|
||||||
|
Reference in New Issue
Block a user