
Hello Andy,
We use a similar configuration on our custom board. The differences between your code and ours are :
#define ENET_PAD_CTRL (PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_MED | \ PAD_CTL_DSE_40ohm | PAD_CTL_SRE_SLOW | PAD_CTL_HYS)
iomux_v3_cfg_t const enet_pads[] = { MX6_PAD_ENET_MDC__ENET_MDC | MUX_PAD_CTRL(ENET_PAD_CTRL), MX6_PAD_ENET_MDIO__ENET_MDIO | MUX_PAD_CTRL(ENET_PAD_CTRL), MX6_PAD_ENET_RXD0__ENET_RX_DATA0 | MUX_PAD_CTRL(ENET_PAD_CTRL), MX6_PAD_ENET_RXD1__ENET_RX_DATA1 | MUX_PAD_CTRL(ENET_PAD_CTRL), MX6_PAD_ENET_CRS_DV__ENET_RX_EN | MUX_PAD_CTRL(ENET_PAD_CTRL), MX6_PAD_ENET_RX_ER__ENET_RX_ER | MUX_PAD_CTRL(ENET_PAD_CTRL), MX6_PAD_ENET_TXD0__ENET_TX_DATA0 | MUX_PAD_CTRL(ENET_PAD_CTRL), MX6_PAD_ENET_TXD1__ENET_TX_DATA1 | MUX_PAD_CTRL(ENET_PAD_CTRL), MX6_PAD_ENET_REF_CLK__ENET_TX_CLK | MUX_PAD_CTRL(ENET_PAD_CTRL), MX6_PAD_ENET_TX_EN__ENET_TX_EN | MUX_PAD_CTRL(ENET_PAD_CTRL),
/* Reference clock 50Mhz */ MX6_PAD_GPIO_16__ENET_REF_CLK | MUX_MODE_SION | MUX_PAD_CTRL(ENET_PAD_CTRL | PAD_CTL_SRE_FAST),
/* LAN Reset */ MX6_PAD_SD3_DAT3__GPIO7_IO07 | MUX_PAD_CTRL(ENET_PAD_CTRL), };
... #ifdef CONFIG_FEC_MXC
int board_phy_config(struct phy_device *phydev) { if (phydev->drv->config) phydev->drv->config(phydev); return 0; }
int board_eth_init(bd_t *bis) { int ret; struct iomuxc *iomux = (struct iomuxc *)IOMUXC_BASE_ADDR; struct anatop_regs *anatop = (struct anatop_regs *)ANATOP_BASE_ADDR; int reg;
imx_iomux_v3_setup_multiple_pads(enet_pads, ARRAY_SIZE(enet_pads)); /* Reset the PHY */ gpio_direction_output(GPIO_ENET_PHY_RESET, 0);
/* Select ENET CLK source */ reg = readl(&iomux->gpr[1]); reg |= IOMUXC_GPR1_ENET_CLK_SEL; writel(reg, &iomux->gpr[1]);
/* Configure and Start the ENET PLL */ /* diviseur => 50 MHz */ writel (BM_ANADIG_PLL_ENET_DIV_SELECT, &anatop->pll_enet_clr); writel (0x1, &anatop->pll_enet_set);
/* clear bypass et powerdown */ writel (BM_ANADIG_PLL_ENET_BYPASS | BM_ANADIG_PLL_ENET_POWERDOWN, &anatop->pll_enet_clr); /* enable */ writel (BM_ANADIG_PLL_ENET_ENABLE, &anatop->pll_enet_set);
/* Release PHY reset at least 30ms after the clock setup */ mdelay (30); gpio_set_value(GPIO_ENET_PHY_RESET, 1);
ret = cpu_eth_init(bis); if (ret) printf("FEC MXC: %s:failed\n", __func__);
return ret; } #endif
The FEC is working on our board. I hope it helps Best regards
-- View this message in context: http://u-boot.10912.n7.nabble.com/imx6-Solo-and-LAN8720-tp171669p171690.html Sent from the U-Boot mailing list archive at Nabble.com.