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 <miiphy.h>
|
||||||
#include <net.h>
|
#include <net.h>
|
||||||
#include <netdev.h>
|
#include <netdev.h>
|
||||||
#include "fec_mxc.h"
|
|
||||||
|
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
#include <linux/errno.h>
|
#include <linux/errno.h>
|
||||||
@ -24,6 +23,9 @@
|
|||||||
#include <asm/arch/clock.h>
|
#include <asm/arch/clock.h>
|
||||||
#include <asm/arch/imx-regs.h>
|
#include <asm/arch/imx-regs.h>
|
||||||
#include <asm/mach-imx/sys_proto.h>
|
#include <asm/mach-imx/sys_proto.h>
|
||||||
|
#include <asm-generic/gpio.h>
|
||||||
|
|
||||||
|
#include "fec_mxc.h"
|
||||||
|
|
||||||
DECLARE_GLOBAL_DATA_PTR;
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
@ -1245,6 +1247,19 @@ static int fec_phy_init(struct fec_priv *priv, struct udevice *dev)
|
|||||||
return 0;
|
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)
|
static int fecmxc_probe(struct udevice *dev)
|
||||||
{
|
{
|
||||||
struct eth_pdata *pdata = dev_get_platdata(dev);
|
struct eth_pdata *pdata = dev_get_platdata(dev);
|
||||||
@ -1257,6 +1272,9 @@ static int fecmxc_probe(struct udevice *dev)
|
|||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
#ifdef CONFIG_DM_GPIO
|
||||||
|
fec_gpio_reset(priv);
|
||||||
|
#endif
|
||||||
/* Reset chip. */
|
/* Reset chip. */
|
||||||
writel(readl(&priv->eth->ecntrl) | FEC_ECNTRL_RESET,
|
writel(readl(&priv->eth->ecntrl) | FEC_ECNTRL_RESET,
|
||||||
&priv->eth->ecntrl);
|
&priv->eth->ecntrl);
|
||||||
@ -1314,6 +1332,7 @@ static int fecmxc_remove(struct udevice *dev)
|
|||||||
|
|
||||||
static int fecmxc_ofdata_to_platdata(struct udevice *dev)
|
static int fecmxc_ofdata_to_platdata(struct udevice *dev)
|
||||||
{
|
{
|
||||||
|
int ret = 0;
|
||||||
struct eth_pdata *pdata = dev_get_platdata(dev);
|
struct eth_pdata *pdata = dev_get_platdata(dev);
|
||||||
struct fec_priv *priv = dev_get_priv(dev);
|
struct fec_priv *priv = dev_get_priv(dev);
|
||||||
const char *phy_mode;
|
const char *phy_mode;
|
||||||
@ -1331,12 +1350,24 @@ static int fecmxc_ofdata_to_platdata(struct udevice *dev)
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* TODO
|
#ifdef CONFIG_DM_GPIO
|
||||||
* Need to get the reset-gpio and related properties from DT
|
ret = gpio_request_by_name(dev, "phy-reset-gpios", 0,
|
||||||
* and implemet the enet reset code on .probe call
|
&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[] = {
|
static const struct udevice_id fecmxc_ids[] = {
|
||||||
|
@ -250,7 +250,10 @@ struct fec_priv {
|
|||||||
int phy_id;
|
int phy_id;
|
||||||
int (*mii_postcall)(int);
|
int (*mii_postcall)(int);
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef CONFIG_DM_GPIO
|
||||||
|
struct gpio_desc phy_reset_gpio;
|
||||||
|
uint32_t reset_delay;
|
||||||
|
#endif
|
||||||
#ifdef CONFIG_DM_ETH
|
#ifdef CONFIG_DM_ETH
|
||||||
u32 interface;
|
u32 interface;
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user