mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-30 10:49:28 +00:00
stmmac: fix PHY reset during resume
When stmmac_mdio_reset, was called from stmmac_resume, it was not resetting the PHY due to which MAC was not getting reset properly and hence ethernet interface not was resumed properly. The issue was currently only reproducible on stih301-b2204. Signed-off-by: Pankaj Dev <pankaj.dev@st.com> Signed-off-by: Giuseppe Cavallaro <peppe.cavallaro@st.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
22407e1317
commit
ae26c1c6cb
1 changed files with 13 additions and 15 deletions
|
@ -138,7 +138,6 @@ int stmmac_mdio_reset(struct mii_bus *bus)
|
||||||
|
|
||||||
#ifdef CONFIG_OF
|
#ifdef CONFIG_OF
|
||||||
if (priv->device->of_node) {
|
if (priv->device->of_node) {
|
||||||
int reset_gpio, active_low;
|
|
||||||
|
|
||||||
if (data->reset_gpio < 0) {
|
if (data->reset_gpio < 0) {
|
||||||
struct device_node *np = priv->device->of_node;
|
struct device_node *np = priv->device->of_node;
|
||||||
|
@ -154,25 +153,24 @@ int stmmac_mdio_reset(struct mii_bus *bus)
|
||||||
"snps,reset-active-low");
|
"snps,reset-active-low");
|
||||||
of_property_read_u32_array(np,
|
of_property_read_u32_array(np,
|
||||||
"snps,reset-delays-us", data->delays, 3);
|
"snps,reset-delays-us", data->delays, 3);
|
||||||
|
|
||||||
|
if (gpio_request(data->reset_gpio, "mdio-reset"))
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
reset_gpio = data->reset_gpio;
|
gpio_direction_output(data->reset_gpio,
|
||||||
active_low = data->active_low;
|
data->active_low ? 1 : 0);
|
||||||
|
|
||||||
if (!gpio_request(reset_gpio, "mdio-reset")) {
|
|
||||||
gpio_direction_output(reset_gpio, active_low ? 1 : 0);
|
|
||||||
if (data->delays[0])
|
if (data->delays[0])
|
||||||
msleep(DIV_ROUND_UP(data->delays[0], 1000));
|
msleep(DIV_ROUND_UP(data->delays[0], 1000));
|
||||||
|
|
||||||
gpio_set_value(reset_gpio, active_low ? 0 : 1);
|
gpio_set_value(data->reset_gpio, data->active_low ? 0 : 1);
|
||||||
if (data->delays[1])
|
if (data->delays[1])
|
||||||
msleep(DIV_ROUND_UP(data->delays[1], 1000));
|
msleep(DIV_ROUND_UP(data->delays[1], 1000));
|
||||||
|
|
||||||
gpio_set_value(reset_gpio, active_low ? 1 : 0);
|
gpio_set_value(data->reset_gpio, data->active_low ? 1 : 0);
|
||||||
if (data->delays[2])
|
if (data->delays[2])
|
||||||
msleep(DIV_ROUND_UP(data->delays[2], 1000));
|
msleep(DIV_ROUND_UP(data->delays[2], 1000));
|
||||||
}
|
}
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (data->phy_reset) {
|
if (data->phy_reset) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue