forked from hardkernel/linux
-
Notifications
You must be signed in to change notification settings - Fork 5
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Some boards [1] leave the PHYs at an invalid state during system power-up or reset thus causing unreliability issues with the PHY which manifests as PHY not being detected or link not functional. To fix this, these PHYs need to be RESET via a GPIO connected to the PHY's RESET pin. Some boards have a single GPIO controlling the PHY RESET pin of all PHYs on the bus whereas some others have separate GPIOs controlling individual PHY RESETs. In both cases, the RESET de-assertion cannot be done in the PHY driver as the PHY will not probe till its reset is de-asserted. So do the RESET de-assertion in the MDIO bus driver. [1] - am572x-idk, am571x-idk, a437x-idk Signed-off-by: Roger Quadros <[email protected]> Signed-off-by: David S. Miller <[email protected]>
- Loading branch information
Showing
4 changed files
with
94 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
Common MDIO bus properties. | ||
|
||
These are generic properties that can apply to any MDIO bus. | ||
|
||
Optional properties: | ||
- reset-gpios: List of one or more GPIOs that control the RESET lines | ||
of the PHYs on that MDIO bus. | ||
- reset-delay-us: RESET pulse width in microseconds as per PHY datasheet. | ||
|
||
A list of child nodes, one per device on the bus is expected. These | ||
should follow the generic phy.txt, or a device specific binding document. | ||
|
||
Example : | ||
This example shows these optional properties, plus other properties | ||
required for the TI Davinci MDIO driver. | ||
|
||
davinci_mdio: ethernet@0x5c030000 { | ||
compatible = "ti,davinci_mdio"; | ||
reg = <0x5c030000 0x1000>; | ||
#address-cells = <1>; | ||
#size-cells = <0>; | ||
|
||
reset-gpios = <&gpio2 5 GPIO_ACTIVE_LOW>; | ||
reset-delay-us = <2>; /* PHY datasheet states 1us min */ | ||
|
||
ethphy0: ethernet-phy@1 { | ||
reg = <1>; | ||
}; | ||
|
||
ethphy1: ethernet-phy@3 { | ||
reg = <3>; | ||
}; | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -22,6 +22,8 @@ | |
#include <linux/of_net.h> | ||
#include <linux/module.h> | ||
|
||
#define DEFAULT_GPIO_RESET_DELAY 10 /* in microseconds */ | ||
|
||
MODULE_AUTHOR("Grant Likely <[email protected]>"); | ||
MODULE_LICENSE("GPL"); | ||
|
||
|
@@ -221,6 +223,11 @@ int of_mdiobus_register(struct mii_bus *mdio, struct device_node *np) | |
|
||
mdio->dev.of_node = np; | ||
|
||
/* Get bus level PHY reset GPIO details */ | ||
mdio->reset_delay_us = DEFAULT_GPIO_RESET_DELAY; | ||
of_property_read_u32(np, "reset-delay-us", &mdio->reset_delay_us); | ||
mdio->num_reset_gpios = of_gpio_named_count(np, "reset-gpios"); | ||
|
||
/* Register the MDIO bus */ | ||
rc = mdiobus_register(mdio); | ||
if (rc) | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters