
Hi Jagan
On Mon, Jul 23, 2018 at 10:40 AM, Jagan Teki jagan@amarulasolutions.com wrote:
On Mon, Jul 23, 2018 at 1:57 PM, Stefano Babic sbabic@denx.de wrote:
Hi Jagan,
On 07/07/2018 13:36, Jagan Teki wrote:
On Sun, Jun 17, 2018 at 6:52 PM, Michael Trimarchi michael@amarulasolutions.com wrote:
Add the missing gpio phy reset binding to the gpio and reset time configuration
Signed-off-by: Michael Trimarchi michael@amarulasolutions.com
Changes v1 -> v2: - fix commit message - fix timeout property read
drivers/net/fec_mxc.c | 43 +++++++++++++++++++++++++++++++++++++------ drivers/net/fec_mxc.h | 5 ++++- 2 files changed, 41 insertions(+), 7 deletions(-)
diff --git a/drivers/net/fec_mxc.c b/drivers/net/fec_mxc.c index 694a0b2..dac07b6 100644 --- a/drivers/net/fec_mxc.c +++ b/drivers/net/fec_mxc.c @@ -15,7 +15,6 @@ #include <miiphy.h> #include <net.h> #include <netdev.h> -#include "fec_mxc.h"
#include <asm/io.h> #include <linux/errno.h> @@ -24,6 +23,9 @@ #include <asm/arch/clock.h> #include <asm/arch/imx-regs.h> #include <asm/mach-imx/sys_proto.h> +#include <asm-generic/gpio.h>
+#include "fec_mxc.h"
DECLARE_GLOBAL_DATA_PTR;
@@ -1245,6 +1247,19 @@ static int fec_phy_init(struct fec_priv *priv, struct udevice *dev) return 0; }
+#ifdef CONFIG_DM_GPIO +/* FEC GPIO reset */ +static void fec_gpio_reset(struct fec_priv *priv) +{
debug("fec_gpio_reset: fec_gpio_reset(dev)\n");
if (dm_gpio_is_valid(&priv->phy_reset_gpio)) {
dm_gpio_set_value(&priv->phy_reset_gpio, 1);
udelay(priv->reset_delay);
dm_gpio_set_value(&priv->phy_reset_gpio, 0);
}
+} +#endif
static int fecmxc_probe(struct udevice *dev) { struct eth_pdata *pdata = dev_get_platdata(dev); @@ -1257,6 +1272,9 @@ static int fecmxc_probe(struct udevice *dev) if (ret) return ret;
+#ifdef CONFIG_DM_GPIO
fec_gpio_reset(priv);
+#endif /* Reset chip. */ writel(readl(&priv->eth->ecntrl) | FEC_ECNTRL_RESET, &priv->eth->ecntrl); @@ -1314,6 +1332,7 @@ static int fecmxc_remove(struct udevice *dev)
static int fecmxc_ofdata_to_platdata(struct udevice *dev) {
int ret = 0; struct eth_pdata *pdata = dev_get_platdata(dev); struct fec_priv *priv = dev_get_priv(dev); const char *phy_mode;
@@ -1331,12 +1350,24 @@ static int fecmxc_ofdata_to_platdata(struct udevice *dev) return -EINVAL; }
/* TODO
* Need to get the reset-gpio and related properties from DT
* and implemet the enet reset code on .probe call
*/
+#ifdef CONFIG_DM_GPIO
ret = gpio_request_by_name(dev, "phy-reset-gpios", 0,
&priv->phy_reset_gpio, GPIOD_IS_OUT);
if (ret == 0) {
ret = dev_read_u32_array(dev, "phy-reset-duration",
&priv->reset_delay, 1);
This is return -1 if none have phy-reset-duration and function return -1 at the end.
Patch is landed on my desk...
I am not sure what you mind. It is also thinkable that some products have no GPIO reset at all, and function simply ignores them. And setting phy-reset-duration to a default value seems quite logical.
Let me know which are the issues here, I had thought I should apply this.
We are re-working this, will send the next version.
Please explain what kind of rework needs a 10 lines ;) patch. Anyway, when is suppose to be upload it again?
Michael