Hi all, the problems boiled down to two things: - full MII and non-shared MII-management interface is not currently supported for MCF5445x - when a PHY returns id 0x0, matching for this ID results in a lock-up in mcfmii.c
considering PHY ID 0x0 as broken anyways, I could get my board to run with both ethernet interfaces with the patch below. As this is not yet thoroughly tested and my tree is too much out of sync at the moment, I do not provide a proper patch for now, but maybe this already helps somebody else in case he runs into the same problems. Regards, Wolfgang diff --git a/cpu/mcf5445x/cpu_init.c b/cpu/mcf5445x/cpu_init.c index 48b37df..8b86d6d 100644 --- a/cpu/mcf5445x/cpu_init.c +++ b/cpu/mcf5445x/cpu_init.c @@ -152,13 +152,32 @@ int fecpin_setclear(struct eth_device *dev, int setclear) struct fec_info_s *info = (struct fec_info_s *)dev->priv; if (setclear) { +#ifdef CONFIG_SYS_FEC_NO_SHARED_MII + if (info->iobase == CONFIG_SYS_FEC0_IOBASE) + gpio->par_feci2c |= + (GPIO_PAR_FECI2C_MDC0_MDC0 | + GPIO_PAR_FECI2C_MDIO0_MDIO0); + else + gpio->par_feci2c |= + (GPIO_PAR_FECI2C_MDC1_MDC1 | + GPIO_PAR_FECI2C_MDIO1_MDIO1); +#else gpio->par_feci2c |= (GPIO_PAR_FECI2C_MDC0_MDC0 | GPIO_PAR_FECI2C_MDIO0_MDIO0); +#endif if (info->iobase == CONFIG_SYS_FEC0_IOBASE) +#ifdef CONFIG_SYS_FEC_FULL_MII + gpio->par_fec |= GPIO_PAR_FEC_FEC0_MII; +#else gpio->par_fec |= GPIO_PAR_FEC_FEC0_RMII_GPIO; +#endif else +#ifdef CONFIG_SYS_FEC_FULL_MII + gpio->par_fec |= GPIO_PAR_FEC_FEC1_MII; +#else gpio->par_fec |= GPIO_PAR_FEC_FEC1_RMII_ATA; +#endif } else { gpio->par_feci2c &= ~(GPIO_PAR_FECI2C_MDC0_MDC0 | GPIO_PAR_FECI2C_MDIO0_MDIO0); diff --git a/drivers/net/mcfmii.c b/drivers/net/mcfmii.c index 4acc29e..e83bb07 100644 --- a/drivers/net/mcfmii.c +++ b/drivers/net/mcfmii.c @@ -185,7 +185,10 @@ int mii_discover_phy(struct eth_device *dev) printf("PHY @ 0x%x pass %d\n", phyno, pass); #endif - for (i = 0; i < (sizeof(phyinfo) / sizeof(phy_info_t)); i++) { + for (i = 0; + (i < (sizeof(phyinfo) / sizeof(phy_info_t))) + && (phyinfo[i].phyid != 0); + i++) { if (phyinfo[i].phyid == phytype) { #ifdef ET_DEBUG printf("phyid %x - %s\n", _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot