mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-03-20 22:21:41 +00:00
net: dwc_eth_qos: implement reset-gpios for stm32
Add management of property "reset-gpios" in the node identified by "phy-handle" to configure any GPIO used to reset the PHY. Signed-off-by: Christophe Roullier <christophe.roullier@st.com> Reviewed-by: Patrice CHOTARD <patrice.chotard@st.com> Reviewed-by: Patrick DELAUNAY <patrick.delaunay@st.com> Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
This commit is contained in:
parent
142a07f2a4
commit
5177b31ba6
1 changed files with 53 additions and 0 deletions
|
@ -694,6 +694,29 @@ static int eqos_start_resets_tegra186(struct udevice *dev)
|
||||||
|
|
||||||
static int eqos_start_resets_stm32(struct udevice *dev)
|
static int eqos_start_resets_stm32(struct udevice *dev)
|
||||||
{
|
{
|
||||||
|
struct eqos_priv *eqos = dev_get_priv(dev);
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
debug("%s(dev=%p):\n", __func__, dev);
|
||||||
|
if (dm_gpio_is_valid(&eqos->phy_reset_gpio)) {
|
||||||
|
ret = dm_gpio_set_value(&eqos->phy_reset_gpio, 1);
|
||||||
|
if (ret < 0) {
|
||||||
|
pr_err("dm_gpio_set_value(phy_reset, assert) failed: %d",
|
||||||
|
ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
udelay(2);
|
||||||
|
|
||||||
|
ret = dm_gpio_set_value(&eqos->phy_reset_gpio, 0);
|
||||||
|
if (ret < 0) {
|
||||||
|
pr_err("dm_gpio_set_value(phy_reset, deassert) failed: %d",
|
||||||
|
ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
debug("%s: OK\n", __func__);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -709,6 +732,18 @@ static int eqos_stop_resets_tegra186(struct udevice *dev)
|
||||||
|
|
||||||
static int eqos_stop_resets_stm32(struct udevice *dev)
|
static int eqos_stop_resets_stm32(struct udevice *dev)
|
||||||
{
|
{
|
||||||
|
struct eqos_priv *eqos = dev_get_priv(dev);
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if (dm_gpio_is_valid(&eqos->phy_reset_gpio)) {
|
||||||
|
ret = dm_gpio_set_value(&eqos->phy_reset_gpio, 1);
|
||||||
|
if (ret < 0) {
|
||||||
|
pr_err("dm_gpio_set_value(phy_reset, assert) failed: %d",
|
||||||
|
ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1604,6 +1639,7 @@ static int eqos_probe_resources_stm32(struct udevice *dev)
|
||||||
struct eqos_priv *eqos = dev_get_priv(dev);
|
struct eqos_priv *eqos = dev_get_priv(dev);
|
||||||
int ret;
|
int ret;
|
||||||
phy_interface_t interface;
|
phy_interface_t interface;
|
||||||
|
struct ofnode_phandle_args phandle_args;
|
||||||
|
|
||||||
debug("%s(dev=%p):\n", __func__, dev);
|
debug("%s(dev=%p):\n", __func__, dev);
|
||||||
|
|
||||||
|
@ -1641,6 +1677,20 @@ static int eqos_probe_resources_stm32(struct udevice *dev)
|
||||||
if (ret)
|
if (ret)
|
||||||
pr_warn("No phy clock provided %d", ret);
|
pr_warn("No phy clock provided %d", ret);
|
||||||
|
|
||||||
|
ret = dev_read_phandle_with_args(dev, "phy-handle", NULL, 0, 0,
|
||||||
|
&phandle_args);
|
||||||
|
if (!ret) {
|
||||||
|
/* search "reset-gpios" in phy node */
|
||||||
|
ret = gpio_request_by_name_nodev(phandle_args.node,
|
||||||
|
"reset-gpios", 0,
|
||||||
|
&eqos->phy_reset_gpio,
|
||||||
|
GPIOD_IS_OUT |
|
||||||
|
GPIOD_IS_OUT_ACTIVE);
|
||||||
|
if (ret)
|
||||||
|
pr_warn("gpio_request_by_name(phy reset) not provided %d",
|
||||||
|
ret);
|
||||||
|
}
|
||||||
|
|
||||||
debug("%s: OK\n", __func__);
|
debug("%s: OK\n", __func__);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -1704,6 +1754,9 @@ static int eqos_remove_resources_stm32(struct udevice *dev)
|
||||||
if (clk_valid(&eqos->clk_ck))
|
if (clk_valid(&eqos->clk_ck))
|
||||||
clk_free(&eqos->clk_ck);
|
clk_free(&eqos->clk_ck);
|
||||||
|
|
||||||
|
if (dm_gpio_is_valid(&eqos->phy_reset_gpio))
|
||||||
|
dm_gpio_free(dev, &eqos->phy_reset_gpio);
|
||||||
|
|
||||||
debug("%s: OK\n", __func__);
|
debug("%s: OK\n", __func__);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue