eth: dm: fec: Add gpio phy reset binding
Add the missing gpio phy reset binding to the gpio and reset time configuration Signed-off-by: Michael Trimarchi <michael@amarulasolutions.com> Acked-by: Joe Hershberger <joe.hershberger@ni.com>
This commit is contained in:
		
							parent
							
								
									824705d53c
								
							
						
					
					
						commit
						efd0b79106
					
				| 
						 | 
				
			
			@ -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);
 | 
			
		||||
	} else if (ret == -ENOENT) {
 | 
			
		||||
		priv->reset_delay = 1000;
 | 
			
		||||
		ret = 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
	if (priv->reset_delay > 1000) {
 | 
			
		||||
		printf("FEX MXC: gpio reset timeout should be less the 1000\n");
 | 
			
		||||
		priv->reset_delay = 1000;
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const struct udevice_id fecmxc_ids[] = {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -250,7 +250,10 @@ struct fec_priv {
 | 
			
		|||
	int phy_id;
 | 
			
		||||
	int (*mii_postcall)(int);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_DM_GPIO
 | 
			
		||||
	struct gpio_desc phy_reset_gpio;
 | 
			
		||||
	uint32_t reset_delay;
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef CONFIG_DM_ETH
 | 
			
		||||
	u32 interface;
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue